DECLARE SUB donewrong (gc!(), cg!(), g$(), a1!(), a2!(), a3!(), a4!(), a5!(), a6!(), a7!(), a8!(), a9!(), a10!(), d1!(), d2!(), d3!(), d4!(), d5!(), d6!(), d7!(), d8!(), d9!(), d10!()) DECLARE FUNCTION checkfile! (memer$) DECLARE SUB grav (z!(), thissp!(), t!()) DECLARE SUB weakness (z!(), thissp!(), asp!, dsp!) DECLARE SUB bkholex (wturn!, thissp!(), z!()) DECLARE SUB distort (z!(), thissp!(), t!()) DECLARE SUB stato () DECLARE SUB hpmpmeter (mlife!(), life!(), mspel!(), spel!(), col!()) DECLARE SUB statnames () DECLARE SUB drawarena (col!(), nam$()) DECLARE SUB niftymap (visi!(), block!(), cur!, oo$()) DECLARE SUB opengrid (block!(), decor!(), cfrom!(), visi!(), mc!, floor$) DECLARE SUB compass (face!) '$DYNAMIC DECLARE FUNCTION keyval (scancode) DECLARE FUNCTION lastkey () DECLARE FUNCTION getkey () DECLARE SUB PLAY(s$) DECLARE SUB egabload (f$, array%()) DECLARE FUNCTION small(a, b) #ifdef __FB_LINUX__ #define SLASH "/" #else #define SLASH "\" #endif SCREEN 7: CLS : RANDOMIZE TIMER: COLOR 15 cnum = 17: enum = 33 DIM SHARED deadkey(120) DIM say$(20), cl$(30), mf$(30), xx(30), yy(30), co(30), nu(30), v(30), sloc(11), snm$(11), oo$(30), mdc%(22 * 200), pss%(22 * 200), vvv(300) DIM item(11), item$(11), des$(11), price(11), set(11), bo1(11), bo2(11), bo3(11), wfx(11), ffx(11), dor(11) REDIM chp%((cnum + 1) * 662 - 1), cha%((cnum + 1) * 662 - 1), enp%((enum + 1) * 662 - 1), spl%((20 + 1) * 662 - 1), map%((14) * 966 - 1) DIM block(300), decor(300), cfrom(300), visi(300), tale$(20), gc(21), g$(21), cg(21) DIM nam$(2) DIM col(2) DIM num(2) DIM mimic(1) DIM life(2) DIM mlife(2) DIM spel(2) DIM mspel(2) DIM force(3) DIM speed(3) DIM aim(3) DIM speed(3) DIM power(3) DIM give(3) DIM reflex(3) DIM cango(3) DIM a1(1), a2(1), a3(1), a4(1), a5(1), a6(1), a7(1), a8(1), a9(1), a10(1) DIM d1(1), d2(1), d3(1), d4(1), d5(1), d6(1), d7(1), d8(1), d9(1), d10(1) DIM bonus(3) DIM steal(2) DIM oz(7) DIM x(2), y(2) DIM z(7) DIM zz(7) DIM t(2) DIM thissp(2) DIM estr(2) DIM ranmp(9) DIM rans(9) egabload "data"+SLASH+"char.epc", VARPTR(chp%(0)) BLOAD "data"+SLASH+"char.apc", VARPTR(cha%(0)) BLOAD "data"+SLASH+"enem.epc", VARPTR(enp%(0)) ' BLOAD "data"+SLASH+"enem.apc", VARPTR(ena%(0)) BLOAD "data"+SLASH+"spel.ega", VARPTR(spl%(0)) BLOAD "data"+SLASH+"scenery.mdc", VARPTR(mdc%(0)) BLOAD "data"+SLASH+"scenery.pss", VARPTR(mdc%(0)) RESTORE mappics FOR i = 1 TO 15 READ oo$(i) NEXT i map$ = "hall": GOSUB loadmappy c = 1: lvlup = 80: cy = 6: cx = 20: cur = 170: face = 3 floor$ = "lv1": flr = 1: CALL opengrid(block(), decor(), cfrom(), visi(), mc, floor$) LOCATE 12, 7: PRINT "HAMSTER REPUBLIC PRODUCTIONS" FOR i = 1 TO 3 PUT (140, 25), chp%(11 * 662), PSET __SLEEP 500 PUT (140, 25), cha%(11 * 662), PSET __SLEEP 300 NEXT i PUT (140, 25), chp%(11 * 662), PSET __SLEEP 500 COLOR 7 LOCATE 14, 16: PRINT "New game" LOCATE 15, 16: PRINT "Load game" LOCATE 16, 16: PRINT "Quit" COLOR 10: csr = 2: LOCATE 13 + csr, 15: PRINT CHR$(16) whattd: w = getkey() LOCATE 13 + csr, 15: PRINT " " IF w = 72 AND csr > 1 THEN csr = csr - 1 IF w = 80 AND csr < 3 THEN csr = csr + 1 IF w = 57 AND csr = 1 THEN GOTO inthebg IF w = 57 AND csr = 2 THEN GOSUB stload: IF checkfile(memer$) = 1 THEN GOSUB fload: CLS : GOSUB havetodo: GOTO spiffyrpg IF w = 57 AND csr = 3 THEN GOTO whygon LOCATE 13 + csr, 15: PRINT CHR$(16): GOTO whattd inthebg: COLOR 15 LOCATE 17, 16: PRINT "Hero's Name?" LOCATE 18, 16: INPUT "", nam$(1): CLS : IF LEN(nam$(1)) > 12 THEN nam$(1) = LEFT$(nam$(1), 12) RESTORE cselect FOR o = 1 TO 16 READ cl$(o), mf$(o), xx(o), yy(o), co(o), nu(o), v(o) NEXT o IF nam$(1) = "Vlad" THEN v(11) = 1 IF nam$(1) = "Bob" THEN v(12) = 1 IF nam$(1) = "Julie" THEN v(13) = 1 IF nam$(1) = "Fume" THEN v(14) = 1 IF nam$(1) = "Robert" THEN v(15) = 1 IF nam$(1) = "H.M.S.SPAM" THEN v(16) = 1 FOR o = 1 TO 16 IF v(o) > 0 THEN PUT (xx(o), yy(o)), chp%(nu(o) * 662), PSET NEXT o choose: PUT (xx(c), yy(c)), chp%(nu(c) * 662), PSET LOCATE 1, 1: COLOR co(c): PRINT nam$(1) LOCATE 1, 15: PRINT " " LOCATE 1, 28: PRINT " " LOCATE 1, 15: PRINT cl$(c) LOCATE 1, 28: PRINT mf$(c) ch3: w = getkey() __SLEEP 200 IF w = 1 THEN GOTO whygon IF w = 75 THEN c = c - 1 ch1: IF c < 1 THEN c = 15 IF w = 75 THEN IF v(c) = 0 THEN c = c - 1: GOTO ch1 IF w = 77 THEN c = c + 1 ch2: IF c > 15 THEN c = 1 IF w = 77 THEN IF v(c) = 0 THEN c = c + 1: GOTO ch2 IF w = 72 THEN c = c - 5 ch4: IF c < 0 THEN c = c + 15 IF w = 72 THEN IF v(c) = 0 THEN c = c - 5: GOTO ch4 IF w = 80 THEN c = c + 5 ch5: IF c > 15 THEN c = c - 15 IF w = 80 THEN IF v(c) = 0 THEN c = c + 5: GOTO ch5 PUT (xx(c), yy(c)), cha%(nu(c) * 662), PSET __SLEEP 100 PUT (xx(c), yy(c)), chp%(nu(c) * 662), PSET IF w = 15 AND nam$(1) = "H.M.S.SPAM" THEN CLS : c = 16: GOSUB gethero: GOSUB startseq: GOSUB havetodo: GOTO spiffyrpg IF w = 28 OR w = 57 THEN CLS : GOSUB gethero: GOSUB startseq: GOSUB havetodo: GOTO spiffyrpg GOTO choose cselect: DATA Knight,male,10,10,7,0,1,Ninja,male,60,10,8,1,1,Mage,male,110,10,1,2,1,Archer,male,160,10,6,3,1,Mimic,male,210,10,7,4,1 DATA Knight,female,10,70,7,5,1,Ninja,female,60,70,4,6,1,Enchantress,female,110,70,5,7,1,Huntress,female,160,70,2,8,1,Mimic,female,210,70,7,9,1 DATA Impaler,male,10,130,5,10,0,Hamster,male,60,130,6,11,0,Hobgoblin,female,110,130,14,12,0,"D'Jinn","???",160,130,14,13,0,Hood,male,210,130,6,14,0,Galeon,bronze,210,130,6,15,0 stload: LOCATE 15, 27 INPUT ":", memo$: IF memo$ = "" THEN LOCATE 15, 27: PRINT " ": RETURN whattd memer$ = LEFT$(memo$, 8) + ".rpg" RETURN gethero: OPEN "data"+SLASH+"hero.rpg" FOR INPUT AS #1 class$ = cl$(c): gender$ = mf$(c): col(1) = co(c): num(1) = nu(c) FOR o = 1 TO c INPUT #1, mlife(1), mspel(1), force(3), aim(3), speed(3), power(3), give(3), reflex(3), a1(1), a2(1), a3(1), a4(1), a5(1), a6(1), a7(1), a8(1), a9(1), a10(1), d1(1), d2(1), d3(1), d4(1), d5(1), d6(1), d7(1), d8(1), d9(1), d10(1), steal(1), mimic(1), _ arms$, wpfx, frfx, doro NEXT o life(1) = mlife(1) spel(1) = mspel(1) CLOSE #1 RETURN spiffyrpg: IF VAL(TIME$) > 23 AND VAL(MID$(TIME$, 4, 2)) > 59 THEN LOCATE 1, 10: PRINT "Wow! its getting late!" rpg1: w = getkey() IF w = 1 THEN GOTO whygon IF w = 28 THEN GOSUB filestuf IF w = 82 OR w = 15 OR w = 14 THEN GOSUB status IF w = 68 AND magmap > 0 THEN FOR i = 1 TO 300: visi(i) = 1: NEXT i: magmap = magmap - 1: GOSUB havetodo IF w = 60 AND herb > 0 THEN life(1) = mlife(1): herb = herb - 1: GOSUB havetodo ON flr GOSUB unolvl, doslvl, treslvl, quatrolvl, cincolvl IF w = 72 AND face = 0 AND cango(0) > 0 THEN cy = cy - 1: face = 0: hmv = 1: GOTO rpg2 IF w = 80 AND face = 0 AND cango(2) > 0 THEN cy = cy + 1: face = 2: hmv = 1: GOTO rpg2 IF w = 75 AND face = 0 AND cango(3) > 0 THEN cx = cx - 1: face = 3: hmv = 1: GOTO rpg2 IF w = 77 AND face = 0 AND cango(1) > 0 THEN cx = cx + 1: face = 1: hmv = 1: GOTO rpg2 IF w = 75 AND face = 1 AND cango(0) > 0 THEN cy = cy - 1: face = 0: hmv = 1: GOTO rpg2 IF w = 77 AND face = 1 AND cango(2) > 0 THEN cy = cy + 1: face = 2: hmv = 1: GOTO rpg2 IF w = 80 AND face = 1 AND cango(3) > 0 THEN cx = cx - 1: face = 3: hmv = 1: GOTO rpg2 IF w = 72 AND face = 1 AND cango(1) > 0 THEN cx = cx + 1: face = 1: hmv = 1: GOTO rpg2 IF w = 80 AND face = 2 AND cango(0) > 0 THEN cy = cy - 1: face = 0: hmv = 1: GOTO rpg2 IF w = 72 AND face = 2 AND cango(2) > 0 THEN cy = cy + 1: face = 2: hmv = 1: GOTO rpg2 IF w = 77 AND face = 2 AND cango(3) > 0 THEN cx = cx - 1: face = 3: hmv = 1: GOTO rpg2 IF w = 75 AND face = 2 AND cango(1) > 0 THEN cx = cx + 1: face = 1: hmv = 1: GOTO rpg2 IF w = 77 AND face = 3 AND cango(0) > 0 THEN cy = cy - 1: face = 0: hmv = 1: GOTO rpg2 IF w = 75 AND face = 3 AND cango(2) > 0 THEN cy = cy + 1: face = 2: hmv = 1: GOTO rpg2 IF w = 72 AND face = 3 AND cango(3) > 0 THEN cx = cx - 1: face = 3: hmv = 1: GOTO rpg2 IF w = 80 AND face = 3 AND cango(1) > 0 THEN cx = cx + 1: face = 1: hmv = 1: GOTO rpg2 IF w = 45 AND visi(cur) = 1 THEN visi(cur) = 2: GOTO rpg2 IF w = 45 AND visi(cur) = 2 THEN visi(cur) = 1: GOTO rpg2 rpg2: GOSUB happydata IF hmv > 0 THEN GOSUB viewit IF hmv > 0 THEN CALL niftymap(visi(), block(), cur, oo$()) IF hmv > 0 THEN life(1) = life(1) + 1: IF life(1) > mlife(1) THEN life(1) = mlife(1) IF hmv > 0 THEN spel(1) = spel(1) + 1: IF spel(1) > mspel(1) THEN spel(1) = mspel(1) IF w = 59 THEN GOTO prepare IF keyval(42) > 0 AND keyval(54) > 0 AND keyval(57) > 1 THEN j = 26: GOTO pre1 IF (RND * 100) < 8 AND hmv > 0 THEN GOTO prepare hmv = 0 IF keyval(56) > 0 AND keyval(29) > 0 AND keyval(83) > 1 THEN life(1) = mlife(1): spel(1) = mspel(1) GOTO spiffyrpg status: CLS LINE (249, 9)-(251 + 40, 11 + 60), 15, B PUT (250, 10), chp%(num(1) * 662), PSET LOCATE 1, 1 PRINT nam$(1) PRINT class$ PRINT gender$ PRINT arms$ CALL stato LINE (50, (8 * 4) + 1)-(50 + mlife(1) + 2, (8 * 4) + 6), 4, BF LINE (51, (8 * 4) + 2)-(51 + life(1), (8 * 4) + 5), 12, BF LINE (50, (8 * 5) + 1)-(50 + mspel(1) + 2, (8 * 5) + 6), 2, BF LINE (51, (8 * 5) + 2)-(51 + spel(1), (8 * 5) + 5), 10, BF LINE (50, (8 * 6) + 1)-(50 + force(3) + bonus(1), (8 * 6) + 6), 1, BF LINE (50, (8 * 7) + 1)-(50 + speed(3) + bonus(2), (8 * 7) + 6), 2, BF LINE (50, (8 * 8) + 1)-(50 + aim(3) + bonus(3), (8 * 8) + 6), 4, BF LINE (50, (8 * 9) + 1)-(50 + power(3), (8 * 9) + 6), 3, BF LINE (50, (8 * 10) + 1)-(50 + give(3), (8 * 10) + 6), 5, BF LINE (50, (8 * 11) + 1)-(50 + reflex(3), (8 * 11) + 6), 6, BF PRINT "Gold:"; cash PRINT "Experience:"; skil PRINT "Next level:"; lvlup PRINT "Floor:"; flr IF herb > 0 THEN PRINT "Curative items[F2]:"; herb IF magmap > 0 THEN PRINT "Magic Map [F10]" w = getkey: CLS LINE (249, 9)-(251 + 40, 11 + 60), 15, B PUT (250, 10), chp%(num(1) * 662), PSET LOCATE 1, 1 PRINT "ATTACK SPELLS": COLOR 7 IF a1(1) > 0 THEN PRINT " Thermal Blast" IF a2(1) > 0 THEN PRINT " ZeroøK HýO" IF a3(1) > 0 THEN PRINT " Thunderstorm" IF a4(1) > 0 THEN PRINT " Crust Rupture" IF a5(1) > 0 THEN PRINT " Vapor Fist" IF a6(1) > 0 THEN PRINT " Hyperlight" IF a7(1) > 0 THEN PRINT " Hawkeye" IF a8(1) > 0 THEN PRINT " Infusion" IF a9(1) > 0 THEN PRINT " Gravitywell" IF a10(1) > 0 THEN PRINT " Assessment" COLOR 15 w = getkey: CLS : LOCATE 1, 1 LINE (249, 9)-(251 + 40, 11 + 60), 15, B PUT (250, 10), chp%(num(1) * 662), PSET PRINT "DEFENCE SPELLS": COLOR 7 IF d1(1) > 0 THEN PRINT " Tidal Guard" IF d2(1) > 0 THEN PRINT " Pyro Shield" IF d3(1) > 0 THEN PRINT " Gem Wall" IF d4(1) > 0 THEN PRINT " Updraft" IF d5(1) > 0 THEN PRINT " Petrify" IF d6(1) > 0 THEN PRINT " Turbocharge" IF d7(1) > 0 THEN PRINT " Illusion" IF d8(1) > 0 THEN PRINT " Regenerate" IF d9(1) > 0 THEN PRINT " Temporal Distortion" IF d10(1) > 0 THEN PRINT " Tactics" COLOR 15 w = getkey CLS : GOSUB havetodo: RETURN purchase: CLS OPEN "data"+SLASH+"shop.rpg" FOR INPUT AS #1 FOR o = 1 TO flr INPUT #1, itn FOR i = 1 TO itn INPUT #1, item(i), item$(i), des$(i), price(i), set(i), bo1(i), bo2(i), bo3(i), wfx(i), ffx(i), dor(i) NEXT i NEXT o CLOSE #1 FOR i = 1 TO itn LOCATE 1 + i, 3: PRINT item$(i) NEXT i csr = 1 pcha: LOCATE 1, 20: PRINT nam$(1) LOCATE 2, 20: PRINT class$ LOCATE 3, 20: PRINT arms$ LOCATE 4, 20: PRINT "$"; cash LINE (159, 34)-(160 + mlife(1) + 1, 39), 4, BF LINE (160, 35)-(160 + life(1), 38), 12, BF LINE (159, 44)-(160 + mspel(1) + 1, 49), 2, BF LINE (160, 45)-(160 + spel(1), 48), 10, BF pchas: COLOR 7 LOCATE itn + 3, 1: PRINT item$(csr) LOCATE itn + 4, 1: PRINT des$(csr) LOCATE itn + 5, 1: PRINT "costs $"; price(csr) LOCATE csr + 1, 2: COLOR 2: PRINT CHR$(16): COLOR 15 IF set(csr) = 1 THEN LINE (8, 9 * (itn + 6))-(12, 9 * (itn + 6) - (2 * (bo1(csr) - bonus(1)))), 1, BF: LINE (20, 9 * (itn + 6))-(24, 9 * (itn + 6) - (2 * (bo2(csr) - bonus(2)))), 2, BF: LINE (32, 9 * (itn + 6))-(36, 9 * (itn + 6) - (2 * (bo3(csr) - _ bonus(3)))), 4, BF pch1: w = getkey() IF set(csr) = 1 THEN LINE (8, 9 * (itn + 6))-(12, 9 * (itn + 6) - (2 * (bo1(csr) - bonus(1)))), 0, BF: LINE (20, 9 * (itn + 6))-(24, 9 * (itn + 6) - (2 * (bo2(csr) - bonus(2)))), 0, BF: LINE (32, 9 * (itn + 6))-(36, 9 * (itn + 6) - (2 * (bo3(csr) - _ bonus(3)))), 0, BF LOCATE itn + 3, 1: PRINT " " LOCATE itn + 4, 1: PRINT " " LOCATE itn + 5, 1: PRINT " " LOCATE csr + 1, 2: PRINT " " IF w = 1 THEN CLS : GOSUB havetodo: RETURN IF w = 72 AND csr > 1 THEN csr = csr - 1 IF w = 80 AND csr < itn THEN csr = csr + 1 IF (w = 57 OR w = 28) AND cash >= price(csr) THEN GOSUB payfor GOTO pchas payfor: IF item(csr) = 1 THEN life(1) = mlife(1): spel(1) = mspel(1): cash = cash - price(csr): herb = herb + 1 IF item(csr) = 2 AND (num(1) = 0 OR num(1) = 5) THEN GOSUB payfor2 IF item(csr) = 3 AND (num(1) = 1 OR num(1) = 6) THEN GOSUB payfor2 IF item(csr) = 4 AND (num(1) = 2 OR num(1) = 7) THEN GOSUB payfor2 IF item(csr) = 5 AND (num(1) = 3 OR num(1) = 8) THEN GOSUB payfor2 IF item(csr) = 6 AND d5(1) < 1 THEN cash = cash - price(csr): d5(1) = 15 IF item(csr) = 7 AND d6(1) < 1 THEN cash = cash - price(csr): d6(1) = 15 IF item(csr) = 8 AND a8(1) < 1 THEN cash = cash - price(csr): a8(1) = 15 IF item(csr) = 9 AND a2(1) < 1 THEN cash = cash - price(csr): a2(1) = 15 IF item(csr) = 10 AND d1(1) < 1 THEN cash = cash - price(csr): d1(1) = 15 IF item(csr) = 11 AND (num(1) = 3 OR num(1) = 8) THEN GOSUB payfor2 IF item(csr) = 12 AND (num(1) = 0 OR num(1) = 5) THEN GOSUB payfor2 IF item(csr) = 13 AND (num(1) = 2 OR num(1) = 7 OR num(1) = 10) THEN GOSUB payfor2 IF item(csr) = 14 AND (num(1) = 1 OR num(1) = 6) THEN GOSUB payfor2 IF item(csr) = 15 AND (num(1) = 0 OR num(1) = 5) THEN GOSUB payfor2 IF item(csr) = 16 AND (num(1) = 2 OR num(1) = 7) THEN GOSUB payfor2 IF item(csr) = 17 AND (num(1) = 3 OR num(1) = 8 OR num(1) = 14) THEN GOSUB payfor2 IF item(csr) = 18 AND (num(1) = 1 OR num(1) = 6) THEN GOSUB payfor2 IF item(csr) = 19 AND a3(1) < 1 THEN cash = cash - price(csr): a3(1) = 16 IF item(csr) = 20 AND d4(1) < 1 THEN cash = cash - price(csr): d4(1) = 16 IF item(csr) = 21 AND a7(1) < 1 THEN cash = cash - price(csr): a7(1) = 16 IF item(csr) = 22 AND d7(1) < 1 THEN cash = cash - price(csr): d7(1) = 16 IF item(csr) = 23 AND (num(1) = 1 OR num(1) = 6) THEN GOSUB payfor2 IF item(csr) = 24 AND (num(1) = 0 OR num(1) = 5) THEN GOSUB payfor2 IF item(csr) = 25 AND (num(1) = 3 OR num(1) = 8) THEN GOSUB payfor2 IF item(csr) = 26 AND (num(1) = 2 OR num(1) = 7) THEN GOSUB payfor2 IF item(csr) = 27 AND num(1) = 13 THEN GOSUB payfor2 IF item(csr) = 28 THEN cash = cash - price(csr): magmap = magmap + 1 IF item(csr) = 29 AND d8(1) < 1 THEN cash = cash - price(csr): d8(1) = 18 IF item(csr) = 30 AND a1(1) < 1 THEN cash = cash - price(csr): a1(1) = 18 IF item(csr) = 31 AND d2(1) < 1 THEN cash = cash - price(csr): d2(1) = 18 IF item(csr) = 32 AND a5(1) < 1 THEN cash = cash - price(csr): a5(1) = 18 IF item(csr) = 33 AND (num(1) = 0 OR num(1) = 5) THEN GOSUB payfor2 IF item(csr) = 34 AND (num(1) = 1 OR num(1) = 6) THEN GOSUB payfor2 IF item(csr) = 35 AND (num(1) = 2 OR num(1) = 7) THEN GOSUB payfor2 IF item(csr) = 36 AND (num(1) = 3 OR num(1) = 8) THEN GOSUB payfor2 IF item(csr) = 37 AND num(1) = 11 THEN GOSUB payfor2 IF item(csr) = 38 AND a3(1) < 1 THEN cash = cash - price(csr): a3(1) = 20 IF item(csr) = 39 AND d3(1) < 1 THEN cash = cash - price(csr): d3(1) = 20 IF item(csr) = 40 AND a6(1) < 1 THEN cash = cash - price(csr): a6(1) = 20 RETURN pcha payfor2: cash = cash - price(csr): bonus(1) = bo1(csr): bonus(2) = bo2(csr): bonus(3) = bo3(csr): arms$ = item$(csr): wpfx = wfx(csr): frfx = ffx(csr): doro = dor(csr) RETURN firstlvl: IF cur = 156 AND face = 2 THEN PUT (130, 20), map%((0) * 966), PSET RETURN secondlvl: IF cur = 186 AND face = 0 THEN PUT (130, 20), map%((0) * 966), PSET IF cur = 179 AND face = 0 THEN PUT (130, 20), map%((0) * 966), PSET IF cur = 112 AND face = 3 THEN PUT (130, 20), map%((0) * 966), PSET IF cur = 172 THEN PUT (130, 20), map%((7) * 966), PSET IF cur = 95 THEN PUT (130, 20), map%((0) * 966), PSET IF cur = 96 THEN PUT (130, 20), map%((0) * 966), PSET IF cur = 52 THEN PUT (130, 20), map%((0) * 966), PSET IF cur = 53 THEN PUT (130, 20), map%((0) * 966), PSET RETURN thirdlvl: IF cur = 149 AND face = 2 THEN PUT (130, 20), map%((0) * 966), PSET IF cur = 182 AND face = 1 THEN PUT (130, 20), map%((0) * 966), PSET IF (cur = 177 OR cur = 207) THEN PUT (130, 20), map%((0) * 966), PSET IF (cur = 69 OR cur = 68) AND face = 2 THEN PUT (130, 20), map%((0) * 966), PSET IF cur = 68 AND face = 3 THEN PUT (130, 20), map%((5) * 966), PSET IF cur = 68 AND face = 0 THEN PUT (130, 20), map%((0) * 966), PSET IF cur = 29 AND face <> 0 THEN PUT (130, 20), map%((7) * 966), PSET RETURN fourthlvl: IF cur = 175 AND face = 2 THEN PUT (130, 20), map%((7) * 966), PSET IF cur = 183 AND face = 3 THEN PUT (130, 20), map%((0) * 966), PSET IF cur = 153 AND face = 3 THEN PUT (130, 20), map%((0) * 966), PSET RETURN fifthlvl: IF cur = 120 AND face = 1 THEN PUT (130, 20), map%((3) * 966), PSET RETURN unolvl: IF cur = 156 AND face = 2 AND w = 72 THEN map$ = "mine": flr = 2: floor$ = "lv2": GOSUB loadmappy: CALL opengrid(block(), decor(), cfrom(), visi(), mc, floor$): cy = cy + 2: hmv = 1: IF ttale = 0 THEN tale = 5: GOSUB storyline: ttale = ttale _ + 1 IF cur = 241 AND face = 0 AND w = 72 THEN GOSUB purchase IF cur = 105 AND face = 1 AND w = 72 THEN cash = INT(cash - ((mlife(1) - life(1)) + (mspel(1) - spel(1)))): life(1) = mlife(1): spel(1) = mspel(1): GOSUB havetodo: IF cash < 0 THEN cash = 0 IF cur = 201 AND face = 3 AND w = 72 THEN spk = 1: GOSUB speakto: GOSUB havetodo IF cur = 93 AND face = 2 AND w = 72 THEN spk = 2: GOSUB speakto: visi(241) = 2: GOSUB havetodo IF cur = 125 AND face = 1 AND w = 72 THEN spk = 3: GOSUB speakto: cx = cx + 1: j = 29: RETURN pre1 IF hmv > 0 THEN RETURN rpg2 RETURN doslvl: IF cur = 113 AND face = 3 AND w = 72 THEN spk = 4: GOSUB speakto: cx = cx - 1: j = 32: RETURN pre1 IF cur = 218 AND face = 1 AND w = 72 THEN spk = 5: GOSUB speakto: visi(167) = 2: GOSUB havetodo IF cur = 29 AND face = 0 AND w = 72 THEN spk = 6: GOSUB speakto: d10(1) = 20: a10(1) = 20: GOSUB havetodo IF cur = 186 AND face = 0 AND w = 72 THEN map$ = "hall": flr = 1: floor$ = "lv1": GOSUB loadmappy: CALL opengrid(block(), decor(), cfrom(), visi(), mc, floor$): cy = cy - 2: hmv = 1 IF cur = 179 AND face = 0 AND w = 72 THEN map$ = "sand": flr = 3: floor$ = "lv3": GOSUB loadmappy: CALL opengrid(block(), decor(), cfrom(), visi(), mc, floor$): cy = cy - 2: hmv = 1 IF cur = 112 AND face = 3 AND w = 72 THEN map$ = "sand": flr = 3: floor$ = "lv3": GOSUB loadmappy: CALL opengrid(block(), decor(), cfrom(), visi(), mc, floor$): cx = cx - 2: hmv = 1: IF ttale = 1 THEN tale = 6: GOSUB storyline: ttale = ttale _ + 1 IF cur = 167 AND face = 0 AND w = 72 THEN cash = INT(cash - ((mlife(1) - life(1)) + (mspel(1) - spel(1)))): life(1) = mlife(1): spel(1) = mspel(1): GOSUB havetodo: IF cash < 0 THEN cash = 0 IF cur = 215 AND face = 1 AND w = 72 THEN GOSUB purchase IF hmv > 0 THEN RETURN rpg2 RETURN treslvl: IF cur = 78 AND face = 1 AND w = 72 THEN spk = 7: GOSUB speakto: GOSUB havetodo IF cur = 97 AND face = 0 AND w = 72 THEN spk = 8: GOSUB speakto: GOSUB havetodo: IF d10(1) > 0 OR a10(1) > 0 THEN a10(1) = 35: d10(1) = 35 IF cur = 212 AND face = 3 AND w = 72 THEN spk = 9: GOSUB speakto: cx = cx - 1: j = 31: RETURN pre1 IF cur = 149 AND face = 2 AND w = 72 THEN map$ = "mine": flr = 2: floor$ = "lv2": GOSUB loadmappy: CALL opengrid(block(), decor(), cfrom(), visi(), mc, floor$): cy = cy + 2: hmv = 1 IF cur = 111 AND face = 1 AND w = 72 THEN map$ = "mine": flr = 2: floor$ = "lv2": GOSUB loadmappy: CALL opengrid(block(), decor(), cfrom(), visi(), mc, floor$): cx = cx + 2: hmv = 1 IF cur = 182 AND face = 1 AND w = 72 THEN map$ = "tree": flr = 4: floor$ = "lv4": GOSUB loadmappy: CALL opengrid(block(), decor(), cfrom(), visi(), mc, floor$): cx = cx + 2: hmv = 1: IF ttale = 2 THEN tale = 7: GOSUB storyline: ttale = ttale _ + 1 IF cur = 12 AND face = 3 AND w = 72 THEN cash = INT(cash - ((mlife(1) - life(1)) + (mspel(1) - spel(1)))): life(1) = mlife(1): spel(1) = mspel(1): GOSUB havetodo: IF cash < 0 THEN cash = 0 IF cur = 68 AND face = 2 THEN cango(1) = 0: cango(2) = 0 IF cur = 261 AND face = 3 AND w = 72 THEN GOSUB purchase IF hmv > 0 THEN RETURN rpg2 RETURN quatrolvl: IF cur = 127 AND face = 3 AND w = 72 THEN spk = 10: GOSUB speakto: GOSUB havetodo IF cur = 95 AND face = 2 AND w = 72 THEN spk = 11: GOSUB speakto: cx = cx - 1: j = 27: RETURN pre1 IF cur = 195 AND face = 2 AND w = 72 THEN cash = INT(cash - ((mlife(1) - life(1)) + (mspel(1) - spel(1)))): life(1) = mlife(1): spel(1) = mspel(1): GOSUB havetodo: IF cash < 0 THEN cash = 0 IF cur = 257 AND face = 0 AND w = 72 THEN GOSUB purchase IF cur = 183 AND face = 3 AND w = 72 THEN map$ = "sand": flr = 3: floor$ = "lv3": GOSUB loadmappy: CALL opengrid(block(), decor(), cfrom(), visi(), mc, floor$): cx = cx - 2: hmv = 1 IF cur = 153 AND face = 3 AND w = 72 THEN map$ = "damp": flr = 5: floor$ = "lv5": GOSUB loadmappy: CALL opengrid(block(), decor(), cfrom(), visi(), mc, floor$): cx = cx - 2: hmv = 1: IF ttale = 3 THEN tale = 8: GOSUB storyline: ttale = ttale _ + 1 IF hmv > 0 THEN RETURN rpg2 RETURN cincolvl: IF cur = 134 AND face = 3 AND w = 72 THEN spk = 12: GOSUB speakto: GOSUB havetodo IF cur = 120 AND face = 1 AND w = 72 THEN spk = 13: GOSUB speakto: j = 28: num(1) = 15: RETURN pre1 IF cur = 190 AND face = 1 AND w = 72 THEN cash = INT(cash - ((mlife(1) - life(1)) + (mspel(1) - spel(1)))): life(1) = mlife(1): spel(1) = mspel(1): GOSUB havetodo: IF cash < 0 THEN cash = 0 IF cur = 204 AND face = 0 AND w = 72 THEN GOSUB purchase IF cur = 152 AND face = 1 AND w = 72 THEN map$ = "tree": flr = 4: floor$ = "lv4": GOSUB loadmappy: CALL opengrid(block(), decor(), cfrom(), visi(), mc, floor$): cx = cx + 2: hmv = 1 IF hmv > 0 THEN RETURN rpg2 RETURN speakto: CLS : OPEN "data"+SLASH+"text.rpg" FOR INPUT AS #1 FOR ii = 1 TO spk INPUT #1, o FOR i = 1 TO o INPUT #1, say$(i) NEXT i: NEXT ii: CLOSE #1 FOR i = 1 TO o LOCATE i, 1: PRINT say$(i) NEXT i LOCATE o + 1, 1: COLOR 14: PRINT "": COLOR 15 sp21: w = getkey: IF w <> 57 THEN GOTO sp21 CLS : RETURN prepare: hmv = 0: PLAY "mfo2l40n0n0n0b>db 2 THEN wturn = 1 COLOR 15 GOTO battle wepfxa: IF RND * 100 >= frfx THEN RETURN IF wpfx > 18 THEN RETURN asp = wpfx - 1: thissp(1) = (.15 * mlife(1)) + (.15 * mspel(1)) IF wpfx = 0 THEN asp = INT((RND * 17) + 1) RETURN wepfxd: IF RND * 100 >= frfx THEN RETURN IF wpfx > 17 THEN RETURN dsp = wpfx - 1: thissp(1) = (.25 * mlife(1)) + (.25 * mspel(1)) IF wpfx = 0 THEN dsp = INT((RND * 17) + 1) RETURN havetodo: GOSUB happydata GOSUB viewit CALL niftymap(visi(), block(), cur, oo$()) RETURN kaboom: IF wturn = 1 THEN t(1) = 1: t(2) = 2: ELSE t(1) = 2: t(2) = 1 IF asp = 4 OR asp = 5 OR asp = 6 OR asp = 7 OR asp = 9 OR asp = 11 OR asp = 13 OR asp = 15 OR asp = 17 THEN RETURN IF asp = 0 AND a1(t(1)) > 0 THEN GOSUB elementa IF asp = 1 THEN GOSUB elementa IF asp = 2 THEN GOSUB elementa IF asp = 3 THEN GOSUB elementa IF asp = 8 THEN GOSUB vapor IF asp = 10 THEN GOSUB Hyper IF asp = 12 THEN GOSUB eye IF asp = 14 THEN CALL grav(z(), thissp(), t()) IF asp = 16 THEN GOSUB Infuse IF asp = 0 AND a1(t(1)) < 1 THEN GOTO ka1 PUT (ax, ay), spl%(asp * 662), PSET __SLEEP 1000 LINE (ax, ay)-(ax + 40, ay + 60), 0, BF ka1: RETURN plink: IF wturn = 1 THEN t(1) = 1: t(2) = 2: ELSE t(1) = 2: t(2) = 1 IF dsp = 0 OR dsp = 1 OR dsp = 2 OR dsp = 3 OR dsp = 8 OR dsp = 10 OR dsp = 12 OR dsp = 14 OR dsp = 16 THEN RETURN IF dsp = 4 THEN GOSUB elementd IF dsp = 5 THEN GOSUB elementd IF dsp = 6 THEN GOSUB elementd IF dsp = 7 THEN GOSUB elementd IF dsp = 9 THEN GOSUB Petrify IF dsp = 11 THEN GOSUB Turbo IF dsp = 13 THEN GOSUB image IF dsp = 15 THEN CALL distort(z(), thissp(), t()) IF dsp = 17 THEN GOSUB regen PUT (dx, dy), spl%(dsp * 662), PSET __SLEEP 1000 LINE (dx, dy)-(dx + 40, dy + 60), 0, BF RETURN elementa: el = 1.5 IF asp = 0 AND dsp = 5 THEN RETURN IF asp = 1 AND dsp = 4 THEN RETURN IF asp = 2 AND dsp = 7 THEN RETURN IF asp = 3 AND dsp = 6 THEN RETURN IF asp = 1 THEN el = el + .2 IF asp = 2 THEN el = el + .2 IF asp = 1 AND dsp = 7 THEN el = 4 IF asp = 2 AND dsp = 5 THEN el = 4 hu = (thissp(t(1)) * (el)) hurt = INT((hu * .75) + (RND * (hu * .5) + 1)) life(t(2)) = life(t(2)) - hurt IF life(t(2)) < 0 THEN life(t(2)) = 0 GOSUB clearbox RETURN elementd: estr(t(1)) = thissp(t(1)): RETURN vapor: z(1) = z(1) + (thissp(t(1)) * 2): RETURN Petrify: z(5) = z(5) + (thissp(t(1)) * 2): RETURN Hyper: z(2) = z(2) + (thissp(t(1)) * 2): RETURN Turbo: z(6) = z(6) + (thissp(t(1)) * 2): RETURN eye: z(3) = z(3) + thissp(t(1)): RETURN image: z(7) = z(7) + thissp(t(1)): RETURN Infuse: life(t(1)) = life(t(1)) + thissp(t(1)): IF life(t(1)) > mlife(t(1)) THEN life(t(1)) = mlife(t(1)) RETURN regen: life(t(2)) = life(t(2)) + thissp(t(2)): IF life(t(2)) > mlife(t(2)) THEN life(t(2)) = mlife(t(2)) RETURN dire: life(1) = life(1) - (10 * (thissp(2) + (thissp(1) * .7))) life(2) = life(2) - (10 * (thissp(1) + (thissp(2) * .7))) GOSUB putthem PUT (140, 11), spl%(19 * 662), PSET GOSUB clearbox LOCATE 18, 18: COLOR 4: PRINT "Dire!": COLOR 15 __SLEEP 1400 LINE (140, 11)-(180, 71), 0, BF RETURN bkhole: CALL bkholex(wturn, thissp(), z()) GOSUB putthem PUT (140, 11), spl%(18 * 662), PSET GOSUB clearbox LOCATE 18, 15: COLOR 8: PRINT "Black Hole!": COLOR 15 __SLEEP 1400 LINE (140, 11)-(180, 71), 0, BF RETURN movey: GOSUB clearbox FOR o = 1 TO 30 LINE (x(1), y(1))-(x(1) + 40, y(1) + 60), 0, BF x(1) = x(1) - 6 GOSUB putthem NEXT o GOSUB maim PUT (x(1), y(1)), cha%(num(1) * 662), PSET IF num(2) = 32 OR num(2) = 33 THEN num(2) = 32 + (INT(RND * 2)) __SLEEP 500 FOR o = 1 TO 30 LINE (x(1), y(1))-(x(1) + 40, y(1) + 60), 0, BF x(1) = x(1) + 6 GOSUB putthem NEXT o RETURN movei: GOSUB clearbox FOR o = 1 TO 30 LINE (x(2), y(2))-(x(2) + 40, y(2) + 60), 0, BF x(2) = x(2) + 6 GOSUB putthem NEXT o GOSUB maim BLOAD "data"+SLASH+"enem.apc", VARPTR(enp%(0)) PUT (x(2), y(2)), enp%(num(2) * 662), PSET IF num(2) = 31 THEN PUT (x(2) + 40, y(2)), enp%(30 * 662), PSET BLOAD "data"+SLASH+"enem.epc", VARPTR(enp%(0)) __SLEEP 500 FOR o = 1 TO 30 LINE (x(2), y(2))-(x(2) + 40, y(2) + 60), 0, BF x(2) = x(2) - 6 GOSUB putthem NEXT o RETURN maim: IF (z(3) * .5) + (RND * z(3)) < RND * (z(7) * .8) THEN LOCATE 18, 17: PRINT "Miss!": PLAY "mbo1l60e>ed z(2) THEN PLAY "mbo5l60cc z(1) THEN PLAY "mbo1l60cc>cc>cc>cc>cc>cc": LOCATE 18, 17: PRINT "Slash!" IF z(1) = z(2) THEN PLAY "mbo5l60bbbb": LOCATE 18, 17: PRINT "Whack!" IF wturn = 1 AND steal(1) > 0 THEN IF RND * 100 < steal(1) THEN LOCATE 19, 16: COLOR 2: PRINT "Got"; INT(harm * 3) + 1; "$": cash = cash + INT(harm / 2) + 1: COLOR 15 IF wturn = 2 AND steal(2) > 0 THEN IF RND * 100 < steal(2) THEN LOCATE 19, 15: COLOR 2: PRINT "Lost"; INT(harm * 5) + 1; "$": cash = cash - INT(harm / 2) + 1: COLOR 15: IF cash < 0 THEN cash = 0 IF wturn = 1 THEN COLOR col(1) ELSE COLOR col(2) RETURN randa: total = (force(2) * .5) + (speed(2) * .5) + (aim(2) * .5) FOR o = 1 TO total ran = INT(RND * 100) + 1 IF ran < ffre THEN z(1) = z(1) + 1: GOTO ra1 IF ran < sfre THEN z(2) = z(2) + 1: GOTO ra1 z(3) = z(3) + 1: IF z(3) > aim(2) THEN z(3) = z(3) - 1: o = o - 1 ra1: IF z(1) > force(2) THEN z(1) = z(1) - 1: o = o - 1 IF z(2) > speed(2) THEN z(2) = z(2) - 1: o = o - 1 NEXT o z(4) = z(1) + z(2) + z(3) IF RND * 100 < spelf THEN GOSUB ranboom RETURN randd: total = (power(2) * .5) + (give(2) * .5) + (reflex(2) * .5) FOR o = 1 TO total ran = INT(RND * 100) + 1 IF ran < pfre THEN z(5) = z(5) + 1: GOTO ra2 IF ran < gfre THEN z(6) = z(6) + 1: GOTO ra2 z(7) = z(7) + 1: IF z(7) > reflex(2) THEN z(7) = z(7) - 1: o = o - 1 ra2: IF z(5) > power(2) THEN z(5) = z(5) - 1: o = o - 1 IF z(6) > give(2) THEN z(6) = z(6) - 1: o = o - 1 NEXT o z(8) = z(5) + z(6) + z(7) IF RND * 100 < spelf THEN GOSUB ranplink RETURN ranboom: IF spel(2) < 1 THEN RETURN i = 1 IF a1(2) > 0 THEN ranmp(i) = a1(2): rans(i) = 0: i = i + 1 IF a2(2) > 0 THEN ranmp(i) = a2(2): rans(i) = 1: i = i + 1 IF a3(2) > 0 THEN ranmp(i) = a3(2): rans(i) = 2: i = i + 1 IF a4(2) > 0 THEN ranmp(i) = a4(2): rans(i) = 3: i = i + 1 IF a5(2) > 0 THEN ranmp(i) = a5(2): rans(i) = 8: i = i + 1 IF a6(2) > 0 THEN ranmp(i) = a6(2): rans(i) = 10: i = i + 1 IF a7(2) > 0 THEN ranmp(i) = a7(2): rans(i) = 12: i = i + 1 IF a8(2) > 0 THEN ranmp(i) = a8(2): rans(i) = 16: i = i + 1 IF a9(2) > 0 THEN ranmp(i) = a9(2): rans(i) = 14: i = i + 1 IF i = 1 THEN asp = 20: RETURN E = INT(RND * i) + 1 thiss = ranmp(E) asp = rans(E) thissp(2) = 1 espelp = INT(RND * (thiss * (.01 * spelp))) rb1: spel(2) = spel(2) - 1 IF espelp < 1 THEN RETURN espelp = espelp - 1 IF thissp(2) >= thiss THEN RETURN IF spel(2) < 1 THEN RETURN thissp(2) = thissp(2) + 1 GOTO rb1 ranplink: IF spel(2) < 1 THEN RETURN i = 1 IF d1(2) > 0 THEN ranmp(i) = d1(2): rans(i) = 5: i = i + 1 IF d2(2) > 0 THEN ranmp(i) = d2(2): rans(i) = 4: i = i + 1 IF d3(2) > 0 THEN ranmp(i) = d3(2): rans(i) = 7: i = i + 1 IF d4(2) > 0 THEN ranmp(i) = d4(2): rans(i) = 6: i = i + 1 IF d5(2) > 0 THEN ranmp(i) = d5(2): rans(i) = 9: i = i + 1 IF d6(2) > 0 THEN ranmp(i) = d6(2): rans(i) = 11: i = i + 1 IF d7(2) > 0 THEN ranmp(i) = d7(2): rans(i) = 13: i = i + 1 IF d8(2) > 0 THEN ranmp(i) = d8(2): rans(i) = 17: i = i + 1 IF d9(2) > 0 THEN ranmp(i) = d9(2): rans(i) = 15: i = i + 1 IF i = 1 THEN dsp = 20: RETURN E = INT(RND * i) + 1 thiss = ranmp(E) dsp = rans(E) thissp(2) = 1 espelp = INT(RND * (thiss * (.01 * spelp))) rp1: spel(2) = spel(2) - 1 IF espelp < 1 THEN RETURN espelp = espelp - 1 IF thissp(2) >= thiss THEN RETURN IF spel(2) < 1 THEN RETURN thissp(2) = thissp(2) + 1 GOTO rp1 aselect: csl = 1: snam$ = "---": asp = 20 z(1) = oz(1) z(2) = oz(2) z(3) = oz(3) z(4) = z(1) + z(2) + z(3) zz(1) = force(1) + bonus(1) zz(2) = speed(1) + bonus(2) zz(3) = aim(1) + bonus(3) asel: LOCATE 14, 4: PRINT "ATTACK" LOCATE 15, 4: PRINT "Force" LOCATE 16, 4: PRINT "Speed" LOCATE 17, 4: PRINT "Aim" LOCATE 18, 4: PRINT CHR$(4); snam$ LINE (70, 114)-(70 + force(1) + bonus(1), 117), 8, BF LINE (70, 122)-(70 + speed(1) + bonus(2), 125), 8, BF LINE (70, 131)-(70 + aim(1) + bonus(3), 134), 8, BF LINE (70, 114)-(70 + z(1), 117), 1, BF LINE (70, 122)-(70 + z(2), 125), 2, BF LINE (70, 131)-(70 + z(3), 134), 4, BF LOCATE 13 + csl, 3: PRINT CHR$(16) as1: w = getkey() LOCATE 13 + csl, 3: PRINT " " 'IF w = 1 AND RND * (speed(1) * 2) > RND * (reflex(2)) THEN CLS : GOSUB havetodo: RETURN spiffyrpg IF w = 72 AND csl > 1 THEN csl = csl - 1 IF w = 80 AND csl < 5 THEN csl = csl + 1 IF w = 57 AND csl = 1 AND asp < 18 THEN spel(1) = spel(1) - thissp(1) IF w = 57 AND csl = 1 THEN oz(1) = z(1): oz(2) = z(2): oz(3) = z(3) IF w = 57 AND csl = 1 THEN RETURN IF w = 77 AND csl = 2 THEN za = 1: zb = 2: zc = 3: GOSUB lengthen IF w = 77 AND csl = 3 THEN za = 2: zb = 1: zc = 3: GOSUB lengthen IF w = 77 AND csl = 4 THEN za = 3: zb = 2: zc = 1: GOSUB lengthen IF w = 75 AND csl = 2 THEN za = 1: zb = 2: zc = 3: GOSUB shorten IF w = 75 AND csl = 3 THEN za = 2: zb = 1: zc = 3: GOSUB shorten IF w = 75 AND csl = 4 THEN za = 3: zb = 2: zc = 1: GOSUB shorten IF w = 57 AND csl = 5 THEN GOSUB pikaspela: CLS : CALL drawarena(col(), nam$()): GOSUB putthem IF w = 60 AND herb > 0 THEN life(1) = mlife(1): herb = herb - 1: GOSUB putthem GOTO asel dselect: csl = 1: snam$ = "---": dsp = 20 z(5) = oz(5) z(6) = oz(6) z(7) = oz(7) z(8) = z(5) + z(6) + z(7) zz(5) = power(1) zz(6) = give(1) zz(7) = reflex(1) dsel: LOCATE 14, 4: PRINT "READY" LOCATE 15, 4: PRINT "Power" LOCATE 16, 4: PRINT "Give" LOCATE 17, 4: PRINT "Reflex" LOCATE 18, 4: PRINT CHR$(4); snam$ LINE (78, 114)-(78 + power(1), 117), 8, BF LINE (78, 122)-(78 + give(1), 125), 8, BF LINE (78, 131)-(78 + reflex(1), 134), 8, BF LINE (78, 114)-(78 + z(5), 117), 3, BF LINE (78, 122)-(78 + z(6), 125), 5, BF LINE (78, 131)-(78 + z(7), 134), 6, BF LOCATE 13 + csl, 3: PRINT CHR$(16) ds1: w = getkey() LOCATE 13 + csl, 3: PRINT " " 'IF w = 1 AND RND * (speed(1) * 2) > RND * (reflex(2)) THEN CLS : GOSUB havetodo: RETURN spiffyrpg IF w = 72 AND csl > 1 THEN csl = csl - 1 IF w = 80 AND csl < 5 THEN csl = csl + 1 IF w = 57 AND csl = 1 AND dsp < 18 THEN spel(1) = spel(1) - thissp(1) IF w = 57 AND csl = 1 THEN oz(5) = z(5): oz(6) = z(6): oz(7) = z(7) IF w = 57 AND csl = 1 THEN RETURN IF w = 77 AND csl = 2 THEN za = 5: zb = 6: zc = 7: GOSUB lengthen IF w = 77 AND csl = 3 THEN za = 6: zb = 5: zc = 7: GOSUB lengthen IF w = 77 AND csl = 4 THEN za = 7: zb = 6: zc = 5: GOSUB lengthen IF w = 75 AND csl = 2 THEN za = 5: zb = 6: zc = 7: GOSUB shorten IF w = 75 AND csl = 3 THEN za = 6: zb = 5: zc = 7: GOSUB shorten IF w = 75 AND csl = 4 THEN za = 7: zb = 6: zc = 5: GOSUB shorten IF w = 57 AND csl = 5 THEN GOSUB pikaspeld: CLS : CALL drawarena(col(), nam$()): GOSUB putthem IF w = 60 AND herb > 0 THEN life(1) = mlife(1): herb = herb - 1: GOSUB putthem GOTO dsel pikaspela: IF spel(1) < 1 THEN RETURN RESTORE aspels: LINE (18, 18)-(262, 182), 0, BF: LINE (20, 20)-(260, 180), col(1), B i = 1 FOR o = 1 TO 10 READ o$, oo, ooo COLOR ooo IF a1(1) > 0 AND o = 1 THEN LOCATE 3 + i, 5: PRINT o$: sloc(i) = oo: snm$(i) = o$: i = i + 1 IF a2(1) > 0 AND o = 2 THEN LOCATE 3 + i, 5: PRINT o$: sloc(i) = oo: snm$(i) = o$: i = i + 1 IF a3(1) > 0 AND o = 3 THEN LOCATE 3 + i, 5: PRINT o$: sloc(i) = oo: snm$(i) = o$: i = i + 1 IF a4(1) > 0 AND o = 4 THEN LOCATE 3 + i, 5: PRINT o$: sloc(i) = oo: snm$(i) = o$: i = i + 1 IF a5(1) > 0 AND o = 5 THEN LOCATE 3 + i, 5: PRINT o$: sloc(i) = oo: snm$(i) = o$: i = i + 1 IF a6(1) > 0 AND o = 6 THEN LOCATE 3 + i, 5: PRINT o$: sloc(i) = oo: snm$(i) = o$: i = i + 1 IF a7(1) > 0 AND o = 7 THEN LOCATE 3 + i, 5: PRINT o$: sloc(i) = oo: snm$(i) = o$: i = i + 1 IF a8(1) > 0 AND o = 8 THEN LOCATE 3 + i, 5: PRINT o$: sloc(i) = oo: snm$(i) = o$: i = i + 1 IF a9(1) > 0 AND o = 9 THEN LOCATE 3 + i, 5: PRINT o$: sloc(i) = oo: snm$(i) = o$: i = i + 1 IF a10(1) > 0 AND o = 10 THEN LOCATE 3 + i, 5: PRINT o$: sloc(i) = oo: snm$(i) = o$: i = i + 1 NEXT o COLOR 15 LOCATE 3 + i, 5: PRINT "CANCEL": sloc(i) = 20 csl2 = 1 pikaa: LOCATE 3 + csl2, 4: PRINT CHR$(16) pka: w = getkey() LOCATE 3 + csl2, 4: PRINT " " IF w = 57 AND sloc(csl2) = 20 THEN thissp(1) = 0: snam$ = "---": asp = 20: RETURN IF w = 80 AND csl2 < i THEN csl2 = csl2 + 1 IF w = 72 AND csl2 > 1 THEN csl2 = csl2 - 1 IF w = 57 AND sloc(csl2) < 20 THEN GOSUB pickpower: RETURN GOTO pikaa aspels: DATA Thermal Blast,0,4,ZeroøK HýO,1,11,Thunderstorm,2,14,Crust Rupture,3,6,Vapor Fist,8,4,Hyperlight,10,14,Hawkeye,12,15,Infusion,16,10,Gravitywell,14,8,Assessment,18,7 dspels: DATA Tidal Guard,5,1,Pyro Shield,4,4,Gem Wall,7,13,Updraft,6,3,Petrify,9,8,Turbocharge,11,7,Illusion,13,14,Regenerate,17,12,Temporal Distortion,15,14,Tactics,19,7 pikaspeld: IF spel(1) < 1 THEN RETURN RESTORE dspels: LINE (18, 18)-(262, 182), 0, BF: LINE (20, 20)-(260, 180), col(1), B i = 1 FOR o = 1 TO 10 READ o$, oo, ooo COLOR ooo IF d1(1) > 0 AND o = 1 THEN LOCATE 3 + i, 5: PRINT o$: sloc(i) = oo: snm$(i) = o$: i = i + 1 IF d2(1) > 0 AND o = 2 THEN LOCATE 3 + i, 5: PRINT o$: sloc(i) = oo: snm$(i) = o$: i = i + 1 IF d3(1) > 0 AND o = 3 THEN LOCATE 3 + i, 5: PRINT o$: sloc(i) = oo: snm$(i) = o$: i = i + 1 IF d4(1) > 0 AND o = 4 THEN LOCATE 3 + i, 5: PRINT o$: sloc(i) = oo: snm$(i) = o$: i = i + 1 IF d5(1) > 0 AND o = 5 THEN LOCATE 3 + i, 5: PRINT o$: sloc(i) = oo: snm$(i) = o$: i = i + 1 IF d6(1) > 0 AND o = 6 THEN LOCATE 3 + i, 5: PRINT o$: sloc(i) = oo: snm$(i) = o$: i = i + 1 IF d7(1) > 0 AND o = 7 THEN LOCATE 3 + i, 5: PRINT o$: sloc(i) = oo: snm$(i) = o$: i = i + 1 IF d8(1) > 0 AND o = 8 THEN LOCATE 3 + i, 5: PRINT o$: sloc(i) = oo: snm$(i) = o$: i = i + 1 IF d9(1) > 0 AND o = 9 THEN LOCATE 3 + i, 5: PRINT o$: sloc(i) = oo: snm$(i) = o$: i = i + 1 IF d10(1) > 0 AND o = 10 THEN LOCATE 3 + i, 5: PRINT o$: sloc(i) = oo: snm$(i) = o$: i = i + 1 NEXT o COLOR 15 LOCATE 3 + i, 5: PRINT "CANCEL": sloc(i) = 20 csl2 = 1 pikad: LOCATE 3 + csl2, 4: PRINT CHR$(16) pkd: w = getkey() LOCATE 3 + csl2, 4: PRINT " " IF w = 57 AND sloc(csl2) = 20 THEN thissp(1) = 0: snam$ = "---": dsp = 20: RETURN IF w = 80 AND csl2 < i THEN csl2 = csl2 + 1 IF w = 72 AND csl2 > 1 THEN csl2 = csl2 - 1 IF w = 57 AND sloc(csl2) < 20 THEN GOSUB pickpower: RETURN GOTO pikad pickpower: snam$ = snm$(csl2) IF sloc(csl2) = 0 THEN thiss = a1(1) IF sloc(csl2) = 1 THEN thiss = a2(1) IF sloc(csl2) = 2 THEN thiss = a3(1) IF sloc(csl2) = 3 THEN thiss = a4(1) IF sloc(csl2) = 4 THEN thiss = d2(1) IF sloc(csl2) = 5 THEN thiss = d1(1) IF sloc(csl2) = 6 THEN thiss = d4(1) IF sloc(csl2) = 7 THEN thiss = d3(1) IF sloc(csl2) = 8 THEN thiss = a5(1) IF sloc(csl2) = 9 THEN thiss = d5(1) IF sloc(csl2) = 10 THEN thiss = a6(1) IF sloc(csl2) = 11 THEN thiss = d6(1) IF sloc(csl2) = 12 THEN thiss = a7(1) IF sloc(csl2) = 13 THEN thiss = d7(1) IF sloc(csl2) = 14 THEN thiss = a9(1) IF sloc(csl2) = 15 THEN thiss = d9(1) IF sloc(csl2) = 16 THEN thiss = a8(1) IF sloc(csl2) = 17 THEN thiss = d8(1) IF sloc(csl2) = 18 THEN thiss = a10(1) IF sloc(csl2) = 19 THEN thiss = d10(1) thissp(1) = INT(thiss * .5) pow3: IF (spel(1) - thissp(1)) < 0 THEN thissp(1) = thissp(1) - 1: GOTO pow3 IF wturn = 1 THEN asp = sloc(csl2) IF wturn = 2 THEN dsp = sloc(csl2) LOCATE 14, 4: PRINT "Consume how much power?" poot = 50 pow: LINE (39, 120)-(42 + thiss, 128), 8, BF LINE (40, 121)-(40 + thissp(1), 127), 3, BF LOCATE 15, 5: PRINT "MP-" LINE (56, 113)-(58 + mspel(1), 117), 8, BF LINE (57, 114)-(57 + spel(1) - thissp(1), 116), 2, BF pow2: : IF poot > 0 THEN poot = poot - 1 IF keyval(77) > 1 AND thissp(1) <= thiss THEN thissp(1) = thissp(1) + 1: GOSUB pow4: GOTO pow IF keyval(75) > 1 AND thissp(1) > 1 THEN thissp(1) = thissp(1) - 1: GOTO pow IF keyval(57) > 1 AND poot = 0 THEN w = getkey(): GOSUB isitthem: RETURN GOTO pow2 pow4: IF (spel(1) - thissp(1)) < 0 THEN thissp(1) = thissp(1) - 1: GOTO pow4 RETURN isitthem: IF sloc(csl2) < 18 OR sloc(csl2) > 19 THEN RETURN CALL weakness(z(), thissp(), asp, dsp) w = getkey spel(1) = spel(1) - thissp(1) thissp(1) = 20: snam$ = "---": RETURN lengthen: z(za) = z(za) + 2 z(zb) = z(zb) - 1 z(zc) = z(zc) - 1 lth1: IF z(za) > zz(za) THEN z(za) = z(za) - 1: z(zb) = z(zb) + .5: z(zc) = z(zc) + .5: GOTO lth1 IF z(zb) < 1 THEN z(zb) = z(zb) + 1: z(za) = z(za) - 1: GOTO lth1 IF z(zc) < 1 THEN z(zc) = z(zc) + 1: z(za) = z(za) - 1: GOTO lth1 RETURN shorten: z(za) = z(za) - 2 z(zb) = z(zb) + 1 z(zc) = z(zc) + 1 shr1: IF z(za) < 1 THEN z(za) = z(za) + 1: z(zb) = z(zb) - .5: z(zc) = z(zc) - .5: GOTO shr1 IF z(zb) > zz(zb) THEN z(zb) = z(zb) - 1: z(za) = z(za) + 1: GOTO shr1 IF z(zc) > zz(zc) THEN z(zc) = z(zc) - 1: z(za) = z(za) + 1: GOTO shr1 RETURN putthem: PUT (x(1), y(1)), chp%(num(1) * 662), PSET PUT (x(2), y(2)), enp%(num(2) * 662), PSET IF num(2) = 31 THEN PUT (x(2) + 40, y(2)), enp%(30 * 662), PSET CALL hpmpmeter(mlife(), life(), mspel(), spel(), col()) RETURN clearbox: LINE (5, 100)-(315, 190), 0, BF LINE (5, 100)-(315, 190), 14, B RETURN victory: PUT (250, 11), chp%(num(1) * 662), PSET LOCATE 2, 3: COLOR col(1): PRINT (force(2) + speed(2) + aim(2)); "-EXPERIENCE" LOCATE 3, 3: COLOR 14: PRINT INT(.75 * (power(2) + give(2) + reflex(2))); "-GOLD" skil = skil + (force(2) + speed(2) + aim(2)) cash = INT(cash + (.75 * (power(2) + give(2) + reflex(2)))) LOCATE 4, 3: COLOR col(1): PRINT skil; "-TOTAL EXPERIENCE" LOCATE 5, 3: COLOR 14: PRINT cash; "-TOTAL GOLD" COLOR 15 PLAY "mbo1l60cdefgab>cdefgab>cdefgabn0n0ddn0edn0een0<= lvlup THEN LOCATE 6, 3: PRINT "LEVEL UP!!!": GOSUB skilly: lvlup = INT(lvlup + (lvlup * .2) + 100) ELSE LOCATE 6, 3: COLOR 15: PRINT lvlup; "For level up": w = getkey CLS : RETURN skilly: w = getkey: pt = pt + (INT(num(2) / 5) + 1) sk3: CALL statnames csl = 7 sk1: IF pt < 1 THEN LOCATE 16, 2: PRINT "DONE" LINE (65, 50)-(65 + mlife(1), 54), col(1), BF LINE (65, 58)-(65 + mspel(1), 62), col(1), BF LINE (65, 66)-(65 + force(3), 70), 1, BF LINE (65, 74)-(65 + speed(3), 78), 2, BF LINE (65, 82)-(65 + aim(3), 86), 4, BF LINE (65, 90)-(65 + power(3), 94), 3, BF LINE (65, 98)-(65 + give(3), 102), 5, BF LINE (65, 106)-(65 + reflex(3), 110), 6, BF LOCATE csl, 1: PRINT CHR$(16) sk2: w = getkey() LOCATE csl, 1: PRINT " " IF w = 57 AND csl = 16 THEN RETURN IF w = 57 AND csl = 15 THEN GOSUB gaincast: GOTO sk3 IF w = 72 AND csl > 7 THEN csl = csl - 1 IF w = 80 AND csl < 16 THEN csl = csl + 1 IF (w = 77 OR w = 57) AND csl = 7 AND pt > 0 THEN pt = pt - 1: mlife(1) = mlife(1) + 3 IF (w = 77 OR w = 57) AND csl = 8 AND pt > 0 THEN pt = pt - 1: mspel(1) = mspel(1) + 3 IF (w = 77 OR w = 57) AND csl = 9 AND pt > 0 THEN pt = pt - 1: force(3) = force(3) + 1 IF (w = 77 OR w = 57) AND csl = 10 AND pt > 0 THEN pt = pt - 1: speed(3) = speed(3) + 1 IF (w = 77 OR w = 57) AND csl = 11 AND pt > 0 THEN pt = pt - 1: aim(3) = aim(3) + 1 IF (w = 77 OR w = 57) AND csl = 12 AND pt > 0 THEN pt = pt - 1: power(3) = power(3) + 1 IF (w = 77 OR w = 57) AND csl = 13 AND pt > 0 THEN pt = pt - 1: give(3) = give(3) + 1 IF (w = 77 OR w = 57) AND csl = 14 AND pt > 0 THEN pt = pt - 1: reflex(3) = reflex(3) + 1 GOTO sk1 gaincast: CALL donewrong(gc(), cg(), g$(), a1(), a2(), a3(), a4(), a5(), a6(), a7(), a8(), a9(), a10(), d1(), d2(), d3(), d4(), d5(), d6(), d7(), d8(), d9(), d10()) gain: IF pt < 1 THEN LOCATE 21, 2: COLOR 10: PRINT "DONE" FOR i = 1 TO 20 LINE (10, ((i - 1) * 8) + 2)-(gc(i) + 10, ((i - 1) * 8) + 6), 15, BF NEXT i LINE (10, ((cl3 - 1) * 8) + 2)-(gc(cl3) + 10, ((cl3 - 1) * 8) + 6), cg(cl3), BF LOCATE 22, 1: PRINT " " LOCATE 22, 1: COLOR cg(cl3): PRINT g$(cl3) LOCATE cl3, 1: COLOR 15: PRINT CHR$(16) gc1: w = getkey IF w = 72 AND cl3 > 1 THEN LOCATE cl3, 1: PRINT " ": cl3 = cl3 - 1 IF w = 80 AND cl3 < 21 THEN LOCATE cl3, 1: PRINT " ": cl3 = cl3 + 1 IF w = 0 THEN GOTO gc1 IF cl3 = 21 AND w = 57 THEN GOTO gc2 IF (w = 57 OR w = 77) AND pt > 0 AND gc(cl3) > 0 THEN pt = pt - 1: gc(cl3) = gc(cl3) + 2 IF (w = 57 OR w = 77) AND pt > 9 AND gc(cl3) = 0 THEN pt = pt - 10: gc(cl3) = gc(cl3) + 10 GOTO gain gc2: a1(1) = gc(1) a2(1) = gc(2) a3(1) = gc(3) a4(1) = gc(4) a5(1) = gc(5) a6(1) = gc(6) a7(1) = gc(7) a8(1) = gc(8) a9(1) = gc(9) a10(1) = gc(10) d1(1) = gc(11) d2(1) = gc(12) d3(1) = gc(13) d4(1) = gc(14) d5(1) = gc(15) d6(1) = gc(16) d7(1) = gc(17) d8(1) = gc(18) d9(1) = gc(19) d10(1) = gc(20) CLS : COLOR 15: RETURN loadmappy: BLOAD "data"+SLASH + map$ + ".ega", VARPTR(map%(0)) RETURN happydata: cur = ((cy - 1) * 30) + cx FOR i = 0 TO 3: cango(i) = 0: NEXT i IF block(cur) = 1 OR block(cur) = 13 OR block(cur) = 11 OR block(cur) = 9 OR block(cur) = 8 OR block(cur) = 5 OR block(cur) = 4 OR block(cur) = 3 THEN cango(0) = 1 IF block(cur) = 2 OR block(cur) = 3 OR block(cur) = 5 OR block(cur) = 6 OR block(cur) = 8 OR block(cur) = 9 OR block(cur) = 10 OR block(cur) = 15 THEN cango(1) = 1 IF block(cur) = 1 OR block(cur) = 3 OR block(cur) = 6 OR block(cur) = 7 OR block(cur) = 9 OR block(cur) = 10 OR block(cur) = 11 OR block(cur) = 12 THEN cango(2) = 1 IF block(cur) = 2 OR block(cur) = 3 OR block(cur) = 4 OR block(cur) = 7 OR block(cur) = 8 OR block(cur) = 10 OR block(cur) = 11 OR block(cur) = 14 THEN cango(3) = 1 IF face = 0 THEN RESTORE nmap IF face = 1 THEN RESTORE emap IF face = 2 THEN RESTORE smap IF face = 3 THEN RESTORE wmap FOR i = 1 TO block(cur) READ see NEXT i RETURN nmap: DATA 1,0,4,0,0,5,6,0,2,7,3,8,0,0,0 emap: DATA 0,1,4,6,0,0,5,3,0,2,7,0,0,8,0 smap: DATA 1,0,4,5,6,0,0,7,3,0,2,0,8,0,0 wmap: DATA 0,1,4,0,5,6,0,2,7,3,0,0,0,0,8 viewit: FOR i = 0 TO 29 LINE (130, 20 + i)-(190, 20 + i), 0, BF LINE (130, 80 - i)-(190, 80 - i), 0, BF FOR o = 1 TO 5: NEXT o NEXT i PUT (250, 5), chp%(num(1) * 662), PSET LINE (249, 4)-(291, 66), 15, B CALL compass(face) LOCATE 10, 26: PRINT nam$(1) LOCATE 11, 26: PRINT class$ LINE (70, 88)-(96, 60), 8, B LINE (89, 79)-(93, 78 - (mlife(1) * .25)), 12, B LINE (90, 78)-(92, 79 - (life(1) * .25)), 4, BF LINE (81, 79)-(85, 78 - (mspel(1) * .25)), 10, B LINE (82, 78)-(84, 79 - (spel(1) * .25)), 2, BF LINE (73, 79)-(77, 78 - (cash / 20)), 14, BF LOCATE 11, 12: COLOR 4: PRINT CHR$(3) LOCATE 11, 11: COLOR 14: PRINT CHR$(4) LOCATE 11, 10: COLOR 2: PRINT "$" IF visi(cur) = 0 THEN visi(cur) = 1 IF see < 1 THEN GOTO vw1 LINE (128, 18)-(191, 81), col(1), B spif: PUT (130, 20), map%((see - 1) * 966), PSET ON flr GOSUB firstlvl, secondlvl, thirdlvl, fourthlvl, fifthlvl vw1: IF decor(cur) > 0 THEN GOSUB decorate COLOR 15: RETURN decorate: RESTORE declocs FOR i = 1 TO decor(cur) READ dex, dey NEXT i IF cfrom(cur) = 4 OR cfrom(cur) = face THEN PUT (dex, dey), pss%((decor(cur) - 1) * 200), AND IF cfrom(cur) = 4 OR cfrom(cur) = face THEN PUT (dex, dey), mdc%((decor(cur) - 1) * 200) RETURN declocs: DATA 150,49,150,20,150,35,150,41,150,43 ,150,43,163,50,150,49,150,35,150,50 ,150,37,150,47,150,35,150,47,150,35 ,150,40,150,25,150,26,150,35,150,35 ,150,41,150,35 filestuf: GOSUB clearbox LOCATE 15, 6: PRINT "Save": LOCATE 16, 6: PRINT "Load": LOCATE 17, 6: PRINT "Cancel" csr = 1 fsf1: LOCATE 14 + csr, 5: PRINT CHR$(16): w = getkey() IF w = 1 OR (w = 57 AND csr = 3) THEN CLS : GOSUB havetodo: RETURN LOCATE 14 + csr, 5: PRINT " " IF w = 72 AND csr > 1 THEN csr = csr - 1 IF w = 80 AND csr < 3 THEN csr = csr + 1 IF w = 57 THEN GOTO fsf2 GOTO fsf1 fsf2: GOSUB clearbox: LOCATE 15, 4 fsf3: INPUT "FILENAME:", memo$: IF memo$ = "" THEN LOCATE 15, 4: GOTO fsf3 memer$ = LEFT$(memo$, 8) + ".rpg" IF csr = 1 THEN GOSUB fsave IF csr = 2 THEN GOSUB fload CLS : GOSUB havetodo: RETURN fsave: OPEN memer$ FOR OUTPUT AS #1 isok = 1 WRITE #1, isok WRITE #1, mlife(1), mspel(1), force(3), aim(3), speed(3), power(3), give(3), reflex(3), a1(1), a2(1), a3(1), a4(1), a5(1), a6(1), a7(1), a8(1), a9(1), a10(1), d1(1), d2(1), d3(1), d4(1), d5(1), d6(1), d7(1), d8(1), d9(1), d10(1), steal(1), mimic(1), _ arms$, wpfx, frfx, doro FOR i = 1 TO 300: WRITE #1, visi(i): NEXT i WRITE #1, lvlup, cx, cy, cur, face, c, flr, col(1), num(1), life(1), spel(1), bonus(1), bonus(2), bonus(3), cash, pt, ttale, skil, magmap, herb, map$, floor$, nam$(1), class$, gender$ CLOSE #1: RETURN fload: OPEN memer$ FOR INPUT AS #1 INPUT #1, isok: IF isok <> 1 THEN CLOSE #1: RETURN INPUT #1, mlife(1), mspel(1), force(3), aim(3), speed(3), power(3), give(3), reflex(3), a1(1), a2(1), a3(1), a4(1), a5(1), a6(1), a7(1), a8(1), a9(1), a10(1), d1(1), d2(1), d3(1), d4(1), d5(1), d6(1), d7(1), d8(1), d9(1), d10(1), steal(1), mimic(1), _ arms$, wpfx, frfx, doro FOR i = 1 TO 300: INPUT #1, vvv(i): NEXT i INPUT #1, lvlup, cx, cy, cur, face, c, flr, col(1), num(1), life(1), spel(1), bonus(1), bonus(2), bonus(3), cash, pt, ttale, skil, magmap, herb, map$, floor$, nam$(1), class$, gender$ CLOSE #1: GOSUB loadmappy: CALL opengrid(block(), decor(), cfrom(), visi(), mc, floor$): FOR i = 1 TO 300: visi(i) = vvv(i): NEXT i: CALL niftymap(visi(), block(), cur, oo$()) RETURN mappics: DATA ³,Ä,Å,Ù,À,Ú,¿,Á,Ã,Â,´,ù,ù,ù,ù startseq: FOR tale = 1 TO 4 GOSUB storyline NEXT tale ttale = 0: RETURN storyline: CLS : COLOR 15: map2$ = map$ map$ = "plot": GOSUB loadmappy OPEN "data"+SLASH+"story.rpg" FOR INPUT AS #1 FOR i = 1 TO tale FOR o = 1 TO 20: tale$(o) = "": NEXT o INPUT #1, linum, illix, illiy FOR o = 1 TO linum INPUT #1, tale$(o) NEXT o NEXT i CLOSE #1 FOR ii = 1 TO linum LOCATE ii, 1: PRINT tale$(ii) NEXT ii PUT (illix, illiy), map%((tale - 1) * 966) map$ = map2$: GOSUB loadmappy w = getkey: CLS RETURN whygon: SYSTEM REM $STATIC SUB bkholex (wturn, thissp(), z()) IF wturn = 1 AND thissp(1) > thissp(2) THEN z(5) = z(5) * 10: z(6) = z(6) * 100: z(7) = z(7) * 100 IF wturn = 1 AND thissp(1) < thissp(2) THEN z(1) = z(1) * 10: z(2) = z(2) * 100: z(3) = z(3) * 100 IF wturn = 2 AND thissp(1) > thissp(2) THEN z(1) = z(1) * 10: z(2) = z(2) * 100: z(3) = z(3) * 100 IF wturn = 2 AND thissp(1) < thissp(2) THEN z(5) = z(5) * 10: z(6) = z(6) * 100: z(7) = z(7) * 100 END SUB FUNCTION checkfile (memer$) OPEN memer$ FOR BINARY AS #1 IF LOF(1) > 0 THEN checkfile = 1 ELSE BEEP CLOSE #1 END FUNCTION SUB compass (face) COLOR 15 LOCATE 2, 6: PRINT " " LOCATE 3, 6: PRINT "N" LOCATE 4, 4: PRINT " W" COLOR 7: IF MID$(TIME$, 4, 2) = "59" THEN COLOR VAL(MID$(TIME$, 2, 1)) LOCATE 4, 6: PRINT "Å": COLOR 15 LOCATE 4, 7: PRINT "E " LOCATE 5, 6: PRINT "S" LOCATE 6, 6: PRINT " " COLOR 10 IF face = 0 THEN LOCATE 2, 6: PRINT CHR$(24) IF face = 1 THEN LOCATE 4, 8: PRINT CHR$(26) IF face = 2 THEN LOCATE 6, 6: PRINT CHR$(25) IF face = 3 THEN LOCATE 4, 4: PRINT CHR$(27) COLOR 15 END SUB SUB distort (z(), thissp(), t()) z(5) = z(5) + (z(1) * (thissp(t(1)) * .02)) z(1) = z(1) - (z(1) * (thissp(t(1)) * .02)) z(6) = z(6) + (z(2) * (thissp(t(1)) * .02)) z(2) = z(2) - (z(2) * (thissp(t(1)) * .02)) z(7) = z(7) + (z(3) * (thissp(t(1)) * .02)) z(3) = z(3) - (z(3) * (thissp(t(1)) * .02)) END SUB SUB donewrong (gc(), cg(), g$(), a1(), a2(), a3(), a4(), a5(), a6(), a7(), a8(), a9(), a10(), d1(), d2(), d3(), d4(), d5(), d6(), d7(), d8(), d9(), d10()) CLS : cl3 = 1: COLOR 15 gc(1) = a1(1): g$(1) = "Thermal Blast": cg(1) = 4 gc(2) = a2(1): g$(2) = "ZeroøK HýO": cg(2) = 11 gc(3) = a3(1): g$(3) = "Thunderstorm": cg(3) = 14 gc(4) = a4(1): g$(4) = "Crust Rupture": cg(4) = 6 gc(5) = a5(1): g$(5) = "Vapor Fist": cg(5) = 13 gc(6) = a6(1): g$(6) = "Hyperlight": cg(6) = 14 gc(7) = a7(1): g$(7) = "Hawkeye": cg(7) = 15 gc(8) = a8(1): g$(8) = "Infusion": cg(8) = 4 gc(9) = a9(1): g$(9) = "Gravitywell": cg(9) = 8 gc(10) = a10(1): g$(10) = "Assessment": cg(10) = 7 gc(11) = d1(1): g$(11) = "Tidal Guard": cg(11) = 9 gc(12) = d2(1): g$(12) = "Pyro Shield": cg(12) = 4 gc(13) = d3(1): g$(13) = "Gem Wall": cg(13) = 6 gc(14) = d4(1): g$(14) = "Updraft": cg(14) = 3 gc(15) = d5(1): g$(15) = "Petrify": cg(15) = 8 gc(16) = d6(1): g$(16) = "Turbocharge": cg(16) = 15 gc(17) = d7(1): g$(17) = "Illusion": cg(17) = 4 gc(18) = d8(1): g$(18) = "Regenerate": cg(18) = 12 gc(19) = d9(1): g$(19) = "Temporal Distortion": cg(19) = 14 gc(20) = d10(1): g$(20) = "Tactics": cg(20) = 7 LOCATE 21, 2: COLOR 2: PRINT "DONE" END SUB SUB drawarena (col(), nam$()) CLS LINE (1, 1)-(320, 90), 7, BF LINE (5, 5)-(315, 85), 8, BF LINE (10, 10)-(310, 80), 0, BF LINE (5, 100)-(315, 190), 14, B COLOR col(2): LOCATE 1, 2: PRINT nam$(2) COLOR col(1): LOCATE 1, 38 - LEN(nam$(1)): PRINT nam$(1) COLOR 15 END SUB SUB grav (z(), thissp(), t()) z(1) = z(1) + (z(5) * (thissp(t(1)) * .02)) z(5) = z(5) - (z(5) * (thissp(t(1)) * .02)) z(2) = z(2) + (z(6) * (thissp(t(1)) * .02)) z(6) = z(6) - (z(6) * (thissp(t(1)) * .02)) z(3) = z(3) + (z(7) * (thissp(t(1)) * .02)) z(7) = z(7) - (z(7) * (thissp(t(1)) * .02)) END SUB SUB hpmpmeter (mlife(), life(), mspel(), spel(), col()) LINE (15, 72)-(15 + mlife(2), 75), 0, BF LINE (305, 72)-(305 - mlife(1), 75), 0, BF LINE (15, 72)-(15 + life(2), 75), col(2), BF LINE (305, 72)-(305 - life(1), 75), col(1), BF LINE (15, 72)-(15 + mlife(2), 75), 4, B LINE (305, 72)-(305 - mlife(1), 75), 4, B LINE (15, 76)-(15 + mspel(2), 79), 0, BF LINE (305, 76)-(305 - mspel(1), 79), 0, BF LINE (15, 76)-(15 + spel(2), 79), col(2), BF LINE (305, 76)-(305 - spel(1), 79), col(1), BF LINE (15, 76)-(15 + mspel(2), 79), 2, B LINE (305, 76)-(305 - mspel(1), 79), 2, B END SUB SUB niftymap (visi(), block(), cur, oo$()) LINE (28, 92)-(292, 178), 6, B FOR oy = 1 TO 10 FOR ox = 1 TO 30 ocu = ((oy - 1) * 30) + ox COLOR 0 IF visi(ocu) > 0 AND block(ocu) < 12 THEN COLOR 7 IF visi(ocu) > 1 AND block(ocu) < 16 THEN COLOR 2 IF ocu = cur THEN COLOR 15 LOCATE 12 + oy, 5 + ox: PRINT oo$(block(ocu)) COLOR 15 NEXT ox: NEXT oy END SUB SUB opengrid (block(), decor(), cfrom(), visi(), mc, floor$) OPEN "data"+SLASH+"floor." + floor$ FOR INPUT AS #1 FOR my = 1 TO 10 FOR mx = 1 TO 30 mc = ((my - 1) * 30) + mx INPUT #1, block(mc), decor(mc), cfrom(mc) visi(mc) = 0 NEXT NEXT CLOSE #1 END SUB SUB statnames LOCATE 7, 2: PRINT " HP" LOCATE 8, 2: PRINT " MP" LOCATE 9, 2: PRINT " Force" LOCATE 10, 2: PRINT " Speed" LOCATE 11, 2: PRINT " Aim" LOCATE 12, 2: PRINT " Power" LOCATE 13, 2: PRINT " Give" LOCATE 14, 2: PRINT "Reflex" LOCATE 15, 2: PRINT "SPELLS" COLOR 8: LOCATE 16, 2: PRINT "DONE" COLOR 15 END SUB SUB stato PRINT " HP:" PRINT " MP:" PRINT " Force:" PRINT " Speed:" PRINT " Aim:" PRINT " Power:" PRINT " Give:" PRINT "Reflex:" END SUB SUB weakness (z(), thissp(), asp, dsp) LINE (15, 20)-(120, 140), 0, BF: LINE (15, 20)-(120, 140), 4, B LOCATE 4, 5: PRINT "ATTACKER" LOCATE 5, 5: PRINT "Force-"; z(1) + INT(RND * (20 - (thissp(1) * .2))) LOCATE 6, 5: PRINT "Speed-"; z(2) + INT(RND * (20 - (thissp(1) * .2))) LOCATE 7, 5: PRINT "Aim-"; z(3) + INT(RND * (20 - (thissp(1) * .2))) IF asp = 0 THEN LOCATE 8, 5: PRINT "Fire" IF asp = 1 THEN LOCATE 8, 5: PRINT "Ice" IF asp = 2 THEN LOCATE 8, 5: PRINT "Lit" IF asp = 3 THEN LOCATE 8, 5: PRINT "Earth" LOCATE 9, 5: PRINT "DEFENDER" LOCATE 10, 5: PRINT "Power-"; INT(z(5) + (RND * (20 - (thissp(1) * .2)))) LOCATE 11, 5: PRINT "Give-"; INT(z(6) + (RND * (20 - (thissp(1) * .2)))) LOCATE 12, 5: PRINT "Reflex-"; INT(z(7) + (RND * (20 - (thissp(1) * .2)))) IF dsp = 4 THEN LOCATE 13, 5: PRINT "Fire" IF dsp = 5 THEN LOCATE 13, 5: PRINT "Ice" IF dsp = 6 THEN LOCATE 13, 5: PRINT "Lit" IF dsp = 7 THEN LOCATE 13, 5: PRINT "Earth" END SUB SUB PLAY (s$) 'Ignore PC speaker play commands END SUB FUNCTION keyval(scancode) keyval = 0 WHILE INKEY$ <> "": WEND __SLEEP 100 IF __MULTIKEY(scancode) THEN keyval = 2 END IF WHILE INKEY$ <> "": WEND END FUNCTION FUNCTION lastkey() lastkey = 0 WHILE INKEY$ <> "": WEND __SLEEP 100 FOR i = 1 to 120 IF __MULTIKEY(i) THEN lastkey = i WHILE INKEY$ <> "": WEND EXIT FUNCTION END IF NEXT i WHILE INKEY$ <> "": WEND END FUNCTION FUNCTION getkey() DO w = lastkey() IF w <> 0 THEN getkey = w : EXIT FUNCTION LOOP END FUNCTION SUB egabload (f$, array%()) DIM ff%, byt as __UByte, seg AS __Short, offset AS __Short, length AS __Short dim ilength as integer dim i as integer ff = FreeFile OPEN f$ FOR BINARY AS #ff GET #ff,, byt 'Magic number, always 253 IF byt <> 253 THEN print "Magic number wrong" GET #ff,, seg 'Segment, no use anymore GET #ff,, offset 'Offset into the array, not used now GET #ff,, length 'Length 'length is in bytes, so divide by 2, and subtract 1 because 0-based ilength = (length / 2) - 1 dim buf(ilength) as __short GET #ff,, buf() CLOSE #ff FOR i = 0 to small(ubound(buf), ubound(array%)) array%(i) = buf(i) NEXT i END SUB FUNCTION small(a, b) IF a < b THEN small = a ELSE small = b END IF END FUNCTION