'$DYNAMIC DEFINT A-Z DECLARE FUNCTION valid% (who%, targ%, act%, obey%()) DECLARE SUB customai (who%, file$, del%) DECLARE SUB damage (targ%, attkr%, hp%(), mp%(), kback%(), kspeed%(), harm%(), hspeed%(), harmc%(), harm$(), wnum%, mpcon%, woff%) DECLARE SUB customwep (who%, file$, del%) DECLARE FUNCTION inrange% (tar%, center%, obey%(), x%(), y%(), act%) DECLARE SUB customwar () DECLARE SUB battle (war%, backdrop%, team%(), obey%(), placer%(), pal%(), timing%(), animate%(), noise%()) DECLARE SUB makewarfile (team%(), obey%()) DECLARE SUB customact (act%, file$) DECLARE FUNCTION decode$ (record%, leng%, file$) DECLARE FUNCTION distance% (radius%, x1%, y1%, x2%, y2%) DECLARE SUB customstat (who%, file$, pic%(), pll%(), del%) DECLARE SUB setstat (num%, who%, stat%, file$, size%, offset!) DECLARE FUNCTION showstat% (who%, stat%, file$, size%, offset!) DECLARE FUNCTION over% (num%, bot%, top%) DECLARE FUNCTION under% (num%, bot%, top%) DECLARE SUB menu (choice%(), set$(), ptr%, top%, rows%, space%, curs%, x%, y%, w%, col%, bor%, p%) DECLARE FUNCTION small% (n1%, n2%) DECLARE FUNCTION large% (n1%, n2%) 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 wardsprite (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 setdiskpages (buf(), BYVAL l, BYVAL b) DECLARE SUB storepage (fil$, BYVAL i, BYVAL p) DECLARE SUB loadpage (fil$, BYVAL i, 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 rectangle (BYVAL x, BYVAL y, BYVAL w, BYVAL h, BYVAL c, BYVAL p) DECLARE SUB setwait (b(), BYVAL t) DECLARE SUB dowait () DECLARE FUNCTION Keyseg () DECLARE FUNCTION keyoff () DECLARE FUNCTION keyval (BYVAL a) DECLARE FUNCTION getkey () CLEAR , , 2000 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 font(1024), master(767), noise(16384), fade(1536), placer(1250), pal(1584), timing(4), animate(200), team(15), obey(15) RANDOMIZE TIMER setmodex DEF SEG = VARSEG(font(0)): BLOAD "nesha.fnt", VARPTR(font(0)): setfont font(): textcolor 15, 0 setpal master(): DEF SEG = VARSEG(master(0)): BLOAD "master.pal", VARPTR(master(0)) DEF SEG = VARSEG(pal(0)): BLOAD "nesha.pal", VARPTR(pal(0)) GOSUB switchon: CALL resetdsp delay = 110 setdiskpages noise(), 200, 0 loadpage "backdrop.all" + CHR$(0), 1, 0 fadetopal master(), fade() FOR i = 0 TO 0 'customstat 0, "nesha.dat", placer(), pal(), 0 'customwep 0, "nesha.dat", 0 'customact 0, "nesha.dat" 'customai 0, "nesha.dat", 0 NEXT i 'CALL customwar setpicstuf noise(), 1600, -1 READ max FOR i = 0 TO max READ who loadset "nesha.dat" + CHR$(0), who, 0 storeset "game.dat" + CHR$(0), i, 0 NEXT i DATA 6 DATA 0,3,2,5 ,1,4,6 team(0) = 1 team(1) = 3 team(2) = 4 team(3) = 2 team(4) = 2 team(5) = 2 team(6) = 5 team(7) = 7 team(8) = 0 team(9) = 0 war = 0 CALL makewarfile(team(), obey()) CALL battle(0, 0, team(), obey(), placer(), pal(), timing(), animate(), noise()) finis: fadeto fade(), 0, 0, 0 GOSUB shutoff SCREEN 13: SYSTEM 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 REM $STATIC SUB battle (war, backdrop, team(), obey(), placer(), pal(), timing(), animate(), noise()) actmax = 15: menumax = 8: delay = 110: j = 4: ynext = 0: enext = 4: inmotion = -1 DIM x(15), y(15), z(12), d(12), shoff(12), seq(12), poff(12), shadow(1250), stam(12), skills(12, 55), skill(14), stamctr(12), name$(12), hp(12, 2), mp(12, 8), spcol(4), action$(250), speedctr(12), doit(12), targ(12), xspeed(12), yspeed(12), zspeed( _ 12), xgo(12), ygo(12), zgo(24), vistog(12), wostog(12), xwepoff(12, 12), ywepoff(12, 12), nowpic(12), kback(12), kspeed(12), kd(12), walk(12, 3), harm(12), hspeed(12), harmc(12), hx(12), hy(12), weps(12), aiset(9), aiarg(9), aiptr(9), range(12, 9), _ ammo(12, 3), icon$(12), ainow(12), redraw(15), oktargs(15, 15), harm$(15), origin(15), spells(12, 40), splist(40), spcon(4, 40), canhit(40), worsp(12) spcol(1) = 9: spcol(2) = 10: spcol(3) = 12: spcol(4) = 15 setdiskpages noise(), 200, 0 loadpage "backdrop.all" + CHR$(0), 0, 2 textcolor 15, 0 FOR o = 10 TO 12: obey(o) = 1: NEXT o ally = 0: foe = 4 FOR o = 0 TO 9 worsp(o) = 90 targ(o) = -1 IF obey(o) = 1 THEN x(o) = showstat(war, ally, "war.set", 10, 30 * war) y(o) = showstat(war, ally + 10, "war.set", 10, 30 * war) d(o) = showstat(war, ally + 20, "war.set", 10, 30 * war) ally = ally + 1 END IF IF obey(o) = 2 THEN x(o) = showstat(war, foe, "war.set", 10, 30 * war) y(o) = showstat(war, foe + 10, "war.set", 10, 30 * war) d(o) = showstat(war, foe + 20, "war.set", 10, 30 * war) foe = foe + 1 END IF NEXT o setpicstuf noise(), 6250, 3 loadset "armament.all" + CHR$(0), 2, 154 loadsprite shadow(), 0, 154, 50, 50, 3 GOSUB graphload: GOSUB statload setkeys DO: setwait timing(), delay: setkeys IF keyval(1) > 1 THEN EXIT SUB 'IF keyval(88) > 1 THEN storepage "c:\install\future.mxs" + CHR$(0), 2, vpage IF stamctr(ynext) > 0 OR obey(ynext) <> 1 THEN ynext = over(ynext + 1, 0, 3) IF keyval(75) > 1 AND mtemp = 1 THEN mtemp = 0: DO: ynext = under(ynext - 1, 0, 3): LOOP UNTIL stamctr(ynext) = 0 AND doit(ynext) = 0: ptr = 0: top = 0 IF keyval(77) > 1 AND mtemp = 1 THEN mtemp = 0: DO: ynext = over(ynext + 1, 0, 3): LOOP UNTIL stamctr(ynext) = 0 AND doit(ynext) = 0: ptr = 0: top = 0 IF stamctr(enext) > 0 OR obey(ynext) <> 2 THEN enext = over(enext + 1, 0, 9) FOR i = 0 TO 9: IF obey(i) > 0 AND stamctr(i) > 0 AND doit(i) = 0 THEN stamctr(i) = large(stamctr(i) - 3, 0) IF obey(i) > 0 AND speedctr(i) > 0 THEN speedctr(i) = large(speedctr(i) - 3, 0) IF speedctr(i) = 0 AND doit(i) > 0 AND inmotion < 0 THEN GOSUB startanim NEXT i FOR i = 0 TO 12 IF z(i) > 0 THEN zgo(i + 12) = zgo(i + 12) + 1: z(i) = large(z(i) - (zgo(i + 12) * 10), 0): IF z(i) = 0 THEN zgo(i + 12) = 0 IF kback(i) > 0 THEN GOSUB knockback NEXT i IF inmotion >= 0 THEN GOSUB animate IF jumping > 0 THEN GOSUB leapto GOSUB meters IF inmotion >= 0 THEN GOSUB wepinhand FOR i = 0 TO 9 NEXT i GOSUB visible tog1 = over(tog1 + 1, 0, 14): tog2 = over(tog2 + 1, -4, 4) IF stamctr(ynext) = 0 AND obey(ynext) = 1 AND aitemp = 0 THEN GOSUB dictate IF stamctr(enext) = 0 AND obey(enext) = 2 AND mtemp = 0 THEN GOSUB aimove copypage 1, 0: copypage 2, 1 dowait LOOP aimove: IF aitemp = 0 THEN GOSUB newai: aitemp = 1 aiptr(enext) = over(aiptr(enext) + 1, 1, 9): IF aiset(aiptr(enext)) = 0 THEN aiptr(enext) = 1 IF aiset(0) = 3 THEN DO: aiptr(enext) = INT(RND * 10): LOOP UNTIL aiset(aiptr(enext)) > 0 IF aiset(aiptr(enext)) = 4 THEN DO: targ(enext) = INT(RND * 10): LOOP UNTIL valid(enext, targ(enext), aiarg(aiptr(enext)), obey()) > 0 IF aiset(aiptr(enext)) = 5 AND RND * 100 < 50 THEN ainow(enext) = aiarg(aiptr(enext)): GOSUB newai: aiptr(enext) = 1 IF aiset(aiptr(enext)) = 6 THEN ainow(enext) = aiarg(aiptr(enext)): GOSUB newai: aiptr(enext) = 1 IF aiset(aiptr(enext)) = 7 THEN doit(enext) = skills(enext, aiarg(aiptr(enext)) + 1): speedctr(enext) = stam(enext) * .5: weps(enext) = aiarg(aiptr(enext)) + 1: aitemp = 0: stamctr(enext) = stam(enext) temp = showstat(doit(enext) - 1, 151, "nesha.dat", 200, 880000) IF doit(enext) > 0 AND targ(enext) > -1 THEN IF valid(enext, targ(enext), temp, obey()) = 0 THEN DO: targ(enext) = INT(RND * 10): LOOP UNTIL valid(enext, targ(enext), temp, obey()) > 0 IF doit(enext) > 0 AND targ(enext) = -1 THEN DO: targ(enext) = INT(RND * 10): LOOP UNTIL valid(enext, targ(enext), temp, obey()) > 0 IF temp = 3 AND targ(enext) > -1 THEN cent = enext: GOSUB spread temp = targ(enext) IF doit(enext) > 0 THEN IF inrange(targ(enext), enext, obey(), x(), y(), doit(enext)) = 0 THEN targ(enext) = -1 END IF IF targ(enext) = -1 AND doit(enext) > 0 THEN targ(enext) = temp: doit(enext) = 0: speedctr(enext) = 0: GOSUB runto IF targ(enext) > -1 THEN IF x(targ(enext)) < x(enext) THEN d(enext) = 1 IF x(targ(enext)) > x(enext) THEN d(enext) = -1 END IF RETURN newai: FOR i = 0 TO 9 aiset(i) = showstat(enext, 600 + (ainow(enext) * 10) + i, "war.dat", 800, 0) aiarg(i) = showstat(enext, 700 + (ainow(enext) * 10) + i, "war.dat", 800, 0) NEXT i RETURN runto: walker = enext: GOSUB walkload j = enext: t# = TIMER oldx = x(j): oldy = y(j) range = showstat(j, 70, "war.dat", 800, 0) farthest = range(j, aiptr(j)) setkeys DO: setwait timing(), delay: setkeys IF y(targ(j)) < y(j) THEN ygo(j) = large(ygo(j) - 2, yspeed(j) * -1) IF y(targ(j)) > y(j) THEN ygo(j) = small(ygo(j) + 2, yspeed(j)) IF x(targ(j)) < x(j) THEN xgo(j) = large(xgo(j) - 2, xspeed(j) * -1): d(j) = 1 IF x(targ(j)) > x(j) THEN xgo(j) = small(xgo(j) + 2, xspeed(j)): d(j) = -1 xgo(j) = xgo(j) - SGN(xgo(j)) ygo(j) = ygo(j) - SGN(ygo(j)) FOR i = 0 TO 9 IF obey(i) > 0 AND i <> j THEN block = distance(30, x(i), y(i), x(j) + xgo(j), y(j) + ygo(j)) IF y(i) > y(j) AND block < 1 THEN ygo(j) = 0: xgo(j) = xgo(j) + (2 * SGN(x(j) - x(i))) IF y(i) < y(j) AND block < 1 THEN ygo(j) = 0: xgo(j) = xgo(j) + (2 * SGN(x(j) - x(i))) IF x(i) > x(j) AND block < 1 AND d(j) = -1 THEN xgo(j) = 0: ygo(j) = ygo(j) + (2 * SGN(y(j) - y(i))) IF x(i) < x(j) AND block < 1 AND d(j) = 1 THEN xgo(j) = 0: ygo(j) = ygo(j) + (2 * SGN(y(j) - y(i))) END IF NEXT i x(j) = large(small(x(j) + xgo(j), 269), 0) y(j) = large(small(y(j) + ygo(j), 149), 30) IF ABS(xgo(j)) > 0 OR ABS(ygo(j)) > 0 THEN wtog = over(wtog + 1, 0, 3) loadsprite placer(), walk(j, wtog) * 1250, 142, 50, 50, 3 stosprite placer(), j * 2500, 0, 3 nowpic(j) = walk(j, wtog) END IF FOR i = 0 TO 11 IF z(i) > 0 THEN zgo(i + 12) = zgo(i + 12) + 1: z(i) = large(z(i) - (zgo(i + 12) * 10), 0): IF z(i) = 0 THEN zgo(i + 12) = 0 IF kback(i) > 0 THEN GOSUB knockback NEXT i IF inmotion >= 0 THEN GOSUB animate IF jumping > 0 THEN GOSUB leapto GOSUB meters IF inmotion >= 0 THEN GOSUB wepinhand GOSUB visible tog1 = over(tog1 + 1, 0, 14): tog2 = over(tog2 + 1, -4, 4) IF distance(range, oldx, oldy, x(j), y(j)) = 1 OR distance(60, x(targ(j)), y(targ(j)), x(j), y(j)) < 1 OR t# + 6 < TIMER THEN setkeys: xgo(j) = 0: ygo(j) = 0: RETURN textcolor 15, 0 copypage 1, 0: copypage 2, 1 dowait LOOP knockback: kback(i) = kback(i) - 1 xmo = kspeed(i) * kd(i) FOR o = 1 TO 9 IF obey(o) > 0 AND i <> o THEN IF distance(30, x(i) - xmo, y(i), x(o), y(o)) < 1 THEN xmo = 0 NEXT o x(i) = small(large(x(i) - xmo, 0), 269) RETURN animate: mframe = large(mframe - 1, 0) IF mframe > 0 OR jumping > 0 THEN RETURN i = inmotion DO: actr = actr + 1 mot = animate(actr): IF mot = 25 THEN GOSUB doneanim: RETURN arg1 = animate(actr + 50): arg2 = animate(actr + 100) IF mot = 0 AND arg1 > 0 THEN mframe = arg1: RETURN who = arg1 + 8 IF arg1 = 0 THEN who = inmotion IF arg1 = 1 THEN who = targ(inmotion) IF mot = 3 THEN zspeed(who) = arg2 'IF mot = 6 THEN zgo(who) = arg2 IF mot = 7 THEN x(who) = x(who) - (arg2 * d(who)) IF mot = 8 THEN y(who) = y(who) + arg2 IF mot = 9 THEN z(who) = z(who) + arg2 IF mot = 13 THEN who2 = arg2 + 8 IF arg2 = 0 THEN who2 = inmotion IF arg2 = 1 THEN who2 = targ(inmotion) IF arg2 = 2 THEN who2 = targ(inmotion): redraw(inmotion) = 1: GOSUB allvalid x(who) = x(who2) y(who) = y(who2) z(who) = z(who2) END IF IF mot = 14 AND arg1 = 0 THEN loadsprite placer(), arg2 * 1250, 154, 50, 50, 3 stosprite placer(), inmotion * 2500, 0, 3 nowpic(inmotion) = arg2 END IF IF mot = 14 AND who > 9 THEN loadsprite placer(), 1250 * arg2, 102 + ((who - 10) * 20), 50, 50, 3 stosprite placer(), who * 2500, 0, 3 END IF IF mot = 15 THEN IF arg2 >= 0 AND arg1 = 1 THEN oldpal = poff(who) poff(who) = arg2 IF arg2 = -1 THEN poff(who) = oldpal END IF IF mot = 16 THEN d(who) = d(who) * -1 IF mot = 18 THEN jumping = who + 1 IF arg2 = 0 AND d(inmotion) = -1 THEN jdx = large(x(inmotion) - 50, 0): jdy = y(inmotion) IF arg2 = 1 AND d(inmotion) = -1 THEN jdx = large(x(targ(inmotion)) - 50, 0): jdy = y(targ(inmotion)) IF arg2 = 0 AND d(inmotion) = 1 THEN jdx = small(x(inmotion) + 50, 269): jdy = y(inmotion) IF arg2 = 1 AND d(inmotion) = 1 THEN jdx = small(x(targ(inmotion)) + 50, 269): jdy = y(targ(inmotion)) IF arg2 = -1 THEN jdx = x(15): jdy = y(15) zgo(jumping - 1) = 2 RETURN END IF IF mot = 21 AND redraw(inmotion) = 0 THEN mpcon = 0: GOSUB trighit: worsp(inmotion) = 90 IF mot = 21 AND redraw(inmotion) = 1 THEN mpcon = 0: otarg = targ(inmotion) FOR j = 0 TO 9: IF oktargs(inmotion, j) = 1 THEN targ(inmotion) = j: GOSUB trighit: mpcon = 1 NEXT j: targ(inmotion) = otarg: worsp(inmotion) = 90 END IF IF mot = 22 THEN vistog(who) = vistog(who) XOR 1 IF mot = 23 THEN wostog(who) = wostog(who) XOR 1 IF mot = 24 AND who > 9 THEN origin(who) = inmotion setpicstuf noise(), 6250, 3 loadset "armament.all" + CHR$(0), arg2, 102 + ((who - 10) * 20) loadsprite placer(), 0, 102 + ((who - 10) * 20), 50, 50, 3 stosprite placer(), who * 2500, 0, 3 d(who) = d(inmotion) END IF LOOP trighit: CALL damage(targ(inmotion), inmotion, hp(), mp(), kback(), kspeed(), harm(), hspeed(), harmc(), harm$(), weps(inmotion), mpcon, worsp(inmotion)) kd(targ(inmotion)) = d(inmotion) hx(targ(inmotion)) = small(large(x(targ(inmotion)) + 25 - (4 * LEN(harm$(targ(inmotion)))), 0), 319 - (LEN(harm$(targ(inmotion))) * 8)) hy(targ(inmotion)) = small(large(y(targ(inmotion)) + 25, 50), 190) IF hp(targ(inmotion), 2) = 0 AND VAL(harm$(targ(inmotion))) > 0 THEN GOSUB fatal ammo(inmotion, 0) = showstat(inmotion, 37 + weps(inmotion), "war.dat", 800, 0) RETURN fatal: IF obey(targ(inmotion)) = 1 THEN ally = ally - 1: IF ally = 0 THEN fadeto noise(), 60, 0, 0: EXIT SUB IF obey(targ(inmotion)) = 2 THEN foe = foe - 1 IF foe = 4 THEN beatall = 10 obey(targ(inmotion)) = 3 RETURN doneanim: redraw(inmotion) = 0: inmotion = -1: doit(i) = 0: actr = 0: FOR o = 10 TO 12: vistog(o) = 0: NEXT o setpicstuf noise(), 16250, 3 FOR i = 0 TO 9 IF obey(i) <= 3 AND obey(i) > 0 AND hp(i, 2) < hp(i, 1) * .2 THEN loadset "beings.all" + CHR$(0), showstat(i, 2, "war.dat", 800, 0), 154 loadsprite placer(), showstat(i, 65, "war.dat", 800, 0) * 1250, 154, 50, 50, 3 stosprite placer(), i * 2500, 0, 3 END IF IF obey(i) = 3 THEN loadset "beings.all" + CHR$(0), showstat(i, 2, "war.dat", 800, 0), 154 loadsprite placer(), showstat(i, 66, "war.dat", 800, 0) * 1250, 154, 50, 50, 3 stosprite placer(), i * 2500, 0, 3 loadsprite placer(), showstat(i, 66, "war.dat", 800, 0) * 1250, 154, 50, 50, 3 stosprite placer(), (i * 2500) + 1250, 0, 3 doit(i) = 0 END IF NEXT i RETURN startanim: inmotion = i setpicstuf noise(), 16250, 3 loadset "beings.all" + CHR$(0), showstat(i, 2, "war.dat", 800, 0), 154 loadsprite placer(), showstat(i, 0, "war.dat", 800, 0) * 1250, 154, 50, 50, 3 stosprite placer(), i * 2500, 0, 3 nowpic(i) = showstat(i, 0, "war.dat", 800, 0) FOR o = 1 TO 151 animate(o) = showstat(doit(i) - 1, o, "nesha.dat", 200, 880000) NEXT o x(15) = x(i): y(15) = y(i) FOR o = 10 TO 12 vistog(o) = 0 wostog(o) = 0 d(o) = 1 NEXT o RETURN dictate: IF mtemp = 0 THEN GOSUB newmenu: WHILE skill(ptr) < 1: ptr = over(ptr + 1, 0, 14): WEND: top = ptr IF keyval(72) > 1 THEN ptr = large(ptr - 1, 0): IF ptr < top THEN top = top - 1 IF keyval(80) > 1 THEN ptr = small(ptr + 1, 14): IF ptr > top + 9 THEN top = top + 1 IF skill(ptr) = 0 THEN ptr = 0 textcolor 160 + tog1, 0 printstr CHR$(254), x(ynext) + 21, y(ynext) - z(ynext) - 6, 1 textcolor 15, 0 CALL menu(skill(), action$(), ptr, top, 10, 10, 5, 1 + (ynext * 80), 51, 9, 0, 0, 1) IF (keyval(28) > 1 OR keyval(57) > 1) AND skill(ptr) > 0 THEN IF skill(ptr) = 208 THEN GOSUB winbat IF skill(ptr) > 0 AND skill(ptr) < 201 THEN doit(ynext) = skill(ptr): speedctr(ynext) = stam(ynext) * .5: weps(ynext) = ptr + 1 IF skill(ptr) > 0 AND skill(ptr) < 201 THEN GOSUB settarg: IF targ(ynext) = -1 THEN doit(ynext) = 0: speedctr(ynext) = 0: RETURN IF skill(ptr) = 201 THEN GOSUB walkabout: loadsprite placer(), 0, 142, 50, 50, 3: stosprite placer(), ynext * 2500, 0, 3 IF skill(ptr) = 202 THEN GOSUB spellmenu: RETURN mtemp = 0: stamctr(ynext) = stam(ynext) ptr = 0: top = 0 END IF RETURN winbat: EXIT SUB RETURN walkabout: walker = ynext: GOSUB walkload oldx = x(ynext): oldy = y(ynext) range = showstat(ynext, 70, "war.dat", 800, 0) farthest = range(ynext, 0) setkeys DO: setwait timing(), delay: setkeys IF keyval(72) > 0 THEN ygo(ynext) = large(ygo(ynext) - 2, yspeed(ynext) * -1) IF keyval(80) > 0 THEN ygo(ynext) = small(ygo(ynext) + 2, yspeed(ynext)) IF keyval(75) > 0 THEN xgo(ynext) = large(xgo(ynext) - 2, xspeed(ynext) * -1): d(ynext) = 1 IF keyval(77) > 0 THEN xgo(ynext) = small(xgo(ynext) + 2, xspeed(ynext)): d(ynext) = -1 xgo(ynext) = xgo(ynext) - SGN(xgo(ynext)) ygo(ynext) = ygo(ynext) - SGN(ygo(ynext)) FOR i = 0 TO 9 IF obey(i) > 0 AND i <> ynext THEN block = distance(30, x(i), y(i), x(ynext) + xgo(ynext), y(ynext) + ygo(ynext)) IF y(i) > y(ynext) AND block < 1 THEN ygo(ynext) = 0: xgo(ynext) = xgo(ynext) + (2 * SGN(x(ynext) - x(i))) IF y(i) < y(ynext) AND block < 1 THEN ygo(ynext) = 0: xgo(ynext) = xgo(ynext) + (2 * SGN(x(ynext) - x(i))) IF x(i) > x(ynext) AND block < 1 AND d(ynext) = -1 THEN xgo(ynext) = 0: ygo(ynext) = ygo(ynext) + (2 * SGN(y(ynext) - y(i))) IF x(i) < x(ynext) AND block < 1 AND d(ynext) = 1 THEN xgo(ynext) = 0: ygo(ynext) = ygo(ynext) + (2 * SGN(y(ynext) - y(i))) END IF NEXT i x(ynext) = large(small(x(ynext) + xgo(ynext), 269), 0) y(ynext) = large(small(y(ynext) + ygo(ynext), 149), 30) IF ABS(xgo(ynext)) > 0 OR ABS(ygo(ynext)) > 0 THEN wtog = over(wtog + 1, 0, 3) loadsprite placer(), walk(ynext, wtog) * 1250, 142, 50, 50, 3 stosprite placer(), ynext * 2500, 0, 3 nowpic(ynext) = walk(ynext, wtog) END IF FOR i = 0 TO 11 IF z(i) > 0 THEN zgo(i + 12) = zgo(i + 12) + 1: z(i) = large(z(i) - (zgo(i + 12) * 10), 0): IF z(i) = 0 THEN zgo(i + 12) = 0 IF kback(i) > 0 THEN GOSUB knockback NEXT i IF inmotion >= 0 THEN GOSUB animate IF jumping > 0 THEN GOSUB leapto GOSUB meters IF inmotion >= 0 THEN GOSUB wepinhand GOSUB visible tog1 = over(tog1 + 1, 0, 14): tog2 = over(tog2 + 1, -4, 4) textcolor 160 + tog1, 0 FOR i = 0 TO 9 IF distance(farthest, x(ynext), y(ynext), x(i), y(i)) < 1 AND obey(i) = 2 THEN printstr CHR$(5), x(i) + 21, y(i) - z(i) - 6, 1 NEXT i printstr CHR$(254), x(ynext) + 21, y(ynext) - z(ynext) - 6, 1: textcolor 15, 0 IF keyval(57) > 1 OR keyval(28) > 1 THEN setkeys: xgo(ynext) = 0: ygo(ynext) = 0: RETURN IF distance(range, oldx, oldy, x(ynext), y(ynext)) = 1 THEN setkeys: xgo(ynext) = 0: ygo(ynext) = 0: RETURN copypage 1, 0: copypage 2, 1 dowait LOOP newmenu: o = 0 FOR i = 0 TO 14: skill(i) = 0: NEXT FOR i = 1 TO 15 IF skills(ynext, i) <> 0 THEN skill(o) = skills(ynext, i): o = o + 1 NEXT i: mtemp = 1 FOR i = 0 TO 14 IF skill(i) = large(small(skill(i), 200), 1) THEN temp = 0 FOR o = 0 TO 9 IF inrange(o, ynext, obey(), x(), y(), skill(i)) = 1 THEN temp = 1 NEXT IF i < 4 THEN IF ammo(ynext, i) = 0 THEN temp = 0 IF temp = 0 THEN skill(i) = skill(i) * -1 END IF NEXT RETURN walkload: setpicstuf noise(), 16250, 3 loadset "beings.all" + CHR$(0), showstat(walker, 2, "war.dat", 800, 0), 154 FOR i = 0 TO 2 loadsprite placer(), i * 1250, 154, 50, 50, 3 stosprite placer(), i * 1250, 142, 3 NEXT i IF inmotion > -1 THEN loadset "beings.all" + CHR$(0), showstat(inmotion, 2, "war.dat", 800, 0), 154 RETURN settarg: targ(ynext) = -1 GOSUB aquire IF showstat(doit(ynext) - 1, 151, "nesha.dat", 200, 880000) = 3 THEN cent = ynext: GOSUB spread: RETURN IF targ(ynext) = -1 THEN RETURN setkeys DO: setwait timing(), delay: setkeys IF keyval(72) > 1 THEN tempy = 0: temp = targ(ynext) FOR i = 0 TO 9 IF y(i) < y(targ(ynext)) AND y(i) > tempy AND inrange(i, ynext, obey(), x(), y(), doit(ynext)) = 1 THEN tempy = y(i): temp = i NEXT i targ(ynext) = temp END IF IF keyval(80) > 1 THEN tempy = 200: temp = targ(ynext) FOR i = 0 TO 9 IF y(i) > y(targ(ynext)) AND y(i) < tempy AND inrange(i, ynext, obey(), x(), y(), doit(ynext)) = 1 THEN tempy = y(i): temp = i NEXT i targ(ynext) = temp END IF IF keyval(75) > 1 THEN tempy = 0: temp = targ(ynext) FOR i = 0 TO 9 IF x(i) < x(targ(ynext)) AND x(i) > tempy AND inrange(i, ynext, obey(), x(), y(), doit(ynext)) = 1 THEN tempy = x(i): temp = i NEXT i targ(ynext) = temp END IF IF keyval(77) > 1 THEN tempy = 320: temp = targ(ynext) FOR i = 0 TO 9 IF x(i) > x(targ(ynext)) AND x(i) < tempy AND inrange(i, ynext, obey(), x(), y(), doit(ynext)) = 1 THEN tempy = x(i): temp = i NEXT i targ(ynext) = temp END IF d(ynext) = 1: IF x(targ(ynext)) > x(ynext) THEN d(ynext) = -1 FOR i = 0 TO 11 IF z(i) > 0 THEN zgo(i + 12) = zgo(i + 12) + 1: z(i) = large(z(i) - (zgo(i + 12) * 10), 0): IF z(i) = 0 THEN zgo(i + 12) = 0 IF kback(i) > 0 THEN GOSUB knockback NEXT i IF inmotion >= 0 THEN GOSUB animate IF jumping > 0 THEN GOSUB leapto IF targ(ynext) = -1 THEN GOSUB aquire: IF targ(ynext) = -1 THEN RETURN GOSUB meters rectangle x(targ(ynext)), y(targ(ynext)), 50, 1, 160 + tog1, 1 rectangle x(targ(ynext)), y(targ(ynext)) + 49, 50, 1, 160 + tog1, 1 rectangle x(targ(ynext)), y(targ(ynext)), 0, 50, 160 + tog1, 1 rectangle x(targ(ynext)) + 49, y(targ(ynext)), 1, 50, 160 + tog1, 1 IF inmotion >= 0 THEN GOSUB wepinhand GOSUB visible tog1 = over(tog1 + 1, 0, 14): tog2 = over(tog2 + 1, -4, 4) textcolor 160 + tog1, 0 printstr CHR$(254), x(ynext) + 21, y(ynext) - z(ynext) - 6, 1 textcolor 15, 0 IF keyval(28) > 1 OR keyval(57) > 1 THEN RETURN IF keyval(1) > 1 THEN targ(ynext) = -1: RETURN copypage 1, 0: copypage 2, 1 dowait LOOP aquire: FOR i = 9 TO 0 STEP -1: IF inrange(i, ynext, obey(), x(), y(), doit(ynext)) = 1 THEN targ(ynext) = i NEXT i RETURN wepinhand: FOR o = 10 TO 12 IF wostog(o) = 1 THEN x(o) = small(large(x(inmotion) + (xwepoff(inmotion, nowpic(inmotion)) * d(inmotion)), 0), 269) y(o) = small(large(y(inmotion) + ywepoff(inmotion, nowpic(inmotion)), 0), 149) z(o) = z(inmotion) END IF IF wostog(o) = 0 THEN d(o) = d(inmotion) NEXT o RETURN meters: FOR i = 0 TO 3 IF obey(i) = 1 THEN IF stamctr(i) = 0 THEN rectangle (i * 80), 0, 80, 50, 40, 1 rectangle 1 + (i * 80), 1, 78, 48, 24, 1 rectangle 2 + (i * 80), 2, 76, 46, 18, 1 printstr name$(i), 3 + (i * 80), 4, 1 rectangle 4 + (i * 80), 14, (70 / hp(i, 1)) * hp(i, 1) + 2, 7, 8, 1 rectangle 5 + (i * 80), 15, (70 / hp(i, 1)) * hp(i, 2), 5, 7, 1 FOR o = 1 TO 4 IF mp(i, (o * 2) - 1) > 0 THEN rectangle 5 + (i * 80), 18 + (4 * o), (70 / mp(i, (o * 2) - 1)) * mp(i, o * 2), 3, spcol(o), 1 NEXT o IF ammo(i, 0) >= 0 THEN printstr icon$(i) + "x" + RIGHT$(STR$(ammo(i, 0)), LEN(STR$(ammo(i, 0))) - 1), (i * 80) + 3, 40, 1 END IF NEXT i RETURN visible: IF beatall > 1 THEN beatall = beatall - 1: IF beatall = 1 THEN GOSUB setdone FOR i = 0 TO 12: seq(i) = i: NEXT FOR i = 0 TO 12 FOR o = 1 TO 12 - i IF y(seq(o)) + shoff(seq(o)) < y(seq(o - 1)) + shoff(seq(o)) THEN SWAP seq(o), seq(o - 1) NEXT: NEXT FOR i = 0 TO 12 IF obey(seq(i)) > 0 AND vistog(seq(i)) = 1 AND y(seq(i)) - z(seq(i)) > 0 THEN loadsprite placer(), (seq(i) * 2500) + (SGN(kback(seq(i))) * 1250), 0, 50, 50, 3 IF seq(i) < 10 THEN drawsprite shadow(), pal(), 1 * 16, x(seq(i)), y(seq(i)) + shoff(seq(i)), 1 IF d(seq(i)) > 0 THEN drawsprite placer(), pal(), poff(seq(i)) * 16, x(seq(i)), y(seq(i)) - z(seq(i)), 1 ELSE wardsprite placer(), pal(), poff(seq(i)) * 16, x(seq(i)), y(seq(i)) - z(seq(i)), 1 END IF IF seq(i) > 9 AND redraw(origin(seq(i))) = 0 THEN IF d(seq(i)) > 0 THEN drawsprite placer(), pal(), poff(seq(i)) * 16, x(seq(i)), y(seq(i)) - z(seq(i)), 1 ELSE wardsprite placer(), pal(), poff(seq(i)) * 16, x(seq(i)), y(seq(i)) - z(seq(i)), 1 IF seq(i) > 9 AND redraw(origin(seq(i))) = 1 THEN FOR j = 0 TO 9 IF oktargs(origin(seq(i)), j) = 1 THEN tempx = x(j) + (x(seq(i)) - x(targ(origin(seq(i))))) tempy = y(j) + (y(seq(i)) - y(targ(origin(seq(i))))) IF d(seq(i)) > 0 THEN drawsprite placer(), pal(), poff(seq(i)) * 16, tempx, tempy - z(seq(i)), 1 ELSE wardsprite placer(), pal(), poff(seq(i)) * 16, tempx, tempy - z(seq(i)), 1 END IF NEXT j END IF IF harm(seq(i)) <> 0 THEN harm(seq(i)) = harm(seq(i)) - 1 textcolor harmc(seq(i)), 0 printstr harm$(seq(i)), hx(seq(i)), hy(seq(i)), 1 textcolor 15, 0 hy(seq(i)) = hy(seq(i)) - hspeed(seq(i)) END IF END IF NEXT i RETURN statload: FOR i = 0 TO 9 IF obey(i) > 0 THEN poff(i) = showstat(i, 1, "war.dat", 800, 0) shoff(i) = showstat(i, 109, "war.dat", 800, 0) stam(i) = showstat(i, 83, "war.dat", 800, 0): stamctr(i) = large(stam(i) - INT(RND * stam(i)), 0) FOR o = 1 TO 15 skills(i, o) = showstat(i, 90 + o, "war.dat", 800, 0) NEXT o j = 0 FOR o = 0 TO 39 spells(i, j) = showstat(i, 110 + o, "war.dat", 800, 0) IF spells(i, j) > 0 THEN j = j + 1 NEXT o FOR o = 1 TO 2 hp(i, o) = showstat(i, 72 + o, "war.dat", 800, 0) NEXT o FOR o = 1 TO 8 mp(i, o) = showstat(i, 74 + o, "war.dat", 800, 0) NEXT o name$(i) = decode$(showstat(i, 107, "war.dat", 800, 0), 20, "names.cod") xspeed(i) = showstat(i, 3, "war.dat", 800, 0) yspeed(i) = showstat(i, 4, "war.dat", 800, 0) zspeed(i) = showstat(i, 5, "war.dat", 800, 0) FOR o = 0 TO 12 xwepoff(i, o) = showstat(i, 8 + o, "war.dat", 800, 0) ywepoff(i, o) = showstat(i, 21 + o, "war.dat", 800, 0) NEXT o FOR o = 0 TO 3 walk(i, o) = showstat(i, 60 + o, "war.dat", 800, 0) range(i, o) = showstat(i, 34 + o, "war.dat", 800, 0) ammo(i, o) = showstat(i, 38 + o, "war.dat", 800, 0) NEXT o icon$(i) = CHR$(showstat(showstat(i, 91, "war.dat", 800, 0) - 1, 2, "nesha.dat", 200, 800000)) ainow(i) = 0 END IF: NEXT i FOR i = 1 TO actmax action$(i) = decode$(showstat(i - 1, 0, "nesha.dat", 200, 880000), 20, "names.cod") NEXT i action$(201) = "Move" action$(202) = "Spell" action$(203) = "Tap" action$(204) = "Use" action$(205) = "Flee" action$(206) = "Give up" action$(207) = "Search" action$(208) = "DONE" FOR i = 0 TO 12 vistog(i) = 0: IF i < 10 THEN vistog(i) = 1 wostog(i) = 0 NEXT i RETURN graphload: setpicstuf noise(), 16250, 3 FOR i = 0 TO 9 IF obey(i) > 0 THEN loadset "beings.all" + CHR$(0), showstat(i, 2, "war.dat", 800, 0), 154 loadsprite placer(), showstat(i, 0, "war.dat", 800, 0) * 1250, 154, 50, 50, 3 stosprite placer(), i * 2500, 0, 3 loadsprite placer(), showstat(i, 64, "war.dat", 800, 0) * 1250, 154, 50, 50, 3 stosprite placer(), (i * 2500) + 1250, 0, 3 END IF NEXT i RETURN leapto: j = jumping - 1 zgo(j) = large(zgo(j) - 1, 0) z(j) = z(j) + (zgo(j) * 10) xmo = SGN(jdx - x(j)) * (xspeed(j) * 2) ymo = SGN(jdy - y(j)) * (yspeed(j) * 2) x(j) = x(j) + xmo: IF ABS(jdx - x(j)) <= (xspeed(j) * 2) THEN x(j) = jdx y(j) = y(j) + ymo: IF ABS(jdy - y(j)) <= (yspeed(j) * 2) THEN y(j) = jdy IF x(j) = jdx AND y(j) = jdy THEN jumping = 0 RETURN allvalid: temp = showstat(doit(inmotion) - 1, 151, "nesha.dat", 200, 880000) FOR j = 0 TO 9 oktargs(inmotion, j) = 0 IF valid(inmotion, j, temp, obey()) = 2 THEN oktargs(inmotion, j) = 1 NEXT j RETURN setdone: FOR i = 0 TO 9 FOR o = 1 TO 15 IF skills(i, o) > 0 AND skills(i, o) < 201 THEN skills(i, o) = 208 NEXT o: NEXT i FOR o = 0 TO 14 IF skill(o) > 0 AND skill(o) < 201 THEN skill(o) = 208 NEXT o aitemp = 0 beatall = 0 RETURN spread: temp = showstat(doit(cent) - 1, 151, "nesha.dat", 200, 880000) FOR j = 0 TO 9 IF valid(cent, j, temp, obey()) = 2 AND y(j) > y(targ(cent)) THEN targ(cent) = j NEXT j RETURN spellmenu: spprt = 0: sptop = 0: lastsp = -1 FOR j = 0 TO 39: canhit(j) = 0 splist(j) = spells(ynext, j): IF splist(j) > 0 THEN lastsp = lastsp + 1 NEXT j FOR j = 0 TO lastsp spcon(0, j) = showstat(splist(j) - 1, 33, "nesha.dat", 200, 800000) FOR jj = 1 TO 4 spcon(jj, j) = showstat(splist(j) - 1, 28 + jj, "nesha.dat", 200, 800000) IF mp(ynext, jj * 2) - spcon(jj, j) < 0 THEN splist(j) = ABS(splist(j)) * -1 NEXT jj FOR jj = 0 TO 9 IF inrange(jj, ynext, obey(), x(), y(), splist(j)) = 1 THEN canhit(j) = 1 NEXT jj IF canhit(j) = 0 THEN splist(j) = ABS(splist(j)) * -1 NEXT j setkeys DO: setwait timing(), delay: setkeys IF keyval(1) > 1 THEN GOSUB meters: GOSUB visible: RETURN IF keyval(72) > 1 AND spptr > 0 THEN spptr = spptr - 1 IF keyval(80) > 1 AND spptr < lastsp THEN spptr = spptr + 1 IF (keyval(57) > 1 OR keyval(28) > 1) AND splist(spptr) > 0 THEN doit(ynext) = splist(spptr): speedctr(ynext) = stam(ynext) * .5: weps(ynext) = spptr + 1 GOSUB settarg: IF targ(ynext) = -1 THEN doit(ynext) = 0: speedctr(ynext) = 0: RETURN mtemp = 0: stamctr(ynext) = stam(ynext) ptr = 0: top = 0: worsp(ynext) = 109 GOSUB meters: GOSUB visible: RETURN END IF GOSUB meters GOSUB visible CALL rectangle((ynext * 70) - 1, 50, 92, 147, 24, 1) CALL rectangle((ynext * 70), 51, 90, 145, 20, 1) menu splist(), action$(), spptr, sptop, 18, 8, 5, ynext * 70, 51, 80, 0, 0, 1 FOR j = 1 TO 4 IF mp(ynext, (j * 2) - 1) > 0 AND splist(spptr) > 0 THEN rectangle 5 + (ynext * 70), 173 + (4 * j), (80 / mp(ynext, (j * 2) - 1)) * mp(ynext, j * 2), 3, 16, 1 IF mp(ynext, (j * 2) - 1) > 0 AND splist(spptr) > 0 THEN rectangle 5 + (ynext * 70), 173 + (4 * j), (80 / mp(ynext, (j * 2) - 1)) * (mp(ynext, j * 2) - spcon(j, spptr)), 3, spcol(j), 1 NEXT j copypage 1, 0: copypage 2, 1 dowait LOOP END SUB SUB code (word$, record, leng, file$) FOR i = 1 TO leng: nul$ = nul$ + " ": NEXT word$ = word$ + RIGHT$(nul$, leng - LEN(word$)) FOR i = 1 TO leng num = over(ASC(MID$(word$, i, 1)) + 26, 0, 255) setstat num, record, i, file$, leng, 0 NEXT i END SUB SUB customact (act, file$) DIM orders$(25), orders(50), argu1$(50), argu2$(50), nul(50), cpic(3) OPEN "actlist.txt" FOR INPUT AS #1 FOR i = 0 TO 25 INPUT #1, orders$(i) NEXT i CLOSE FOR i = 0 TO 50 nul(i) = i NEXT i GOSUB getinfo cpic(1) = 15 setkeys DO: setkeys IF keyval(1) > 1 THEN EXIT SUB IF keyval(72) > 1 THEN ptr = large(0, ptr - 1): IF ptr < top THEN top = top - 1 IF keyval(80) > 1 THEN ptr = small(50, ptr + 1): IF ptr > top + 19 THEN top = top + 1 IF keyval(51) > 0 THEN CALL setstat(showstat(act, ptr + (50 * ptr2), "nesha.dat", 200, 880000) - 1, act, ptr + (50 * ptr2), "nesha.dat", 200, 880000): GOSUB getinfo IF keyval(52) > 0 THEN CALL setstat(showstat(act, ptr + (50 * ptr2), "nesha.dat", 200, 880000) + 1, act, ptr + (50 * ptr2), "nesha.dat", 200, 880000): GOSUB getinfo IF keyval(14) > 1 THEN FOR i = 1 TO 150: CALL setstat(0, act, i, "nesha.dat", 200, 880000): NEXT i: GOSUB getinfo IF keyval(75) > 1 THEN ptr2 = large(0, ptr2 - 1): FOR i = 1 TO 3: cpic(i) = 0: NEXT i: cpic(ptr2 + 1) = 15 IF keyval(77) > 1 THEN ptr2 = small(2, ptr2 + 1): FOR i = 1 TO 3: cpic(i) = 0: NEXT i: cpic(ptr2 + 1) = 15 IF keyval(59) > 1 THEN tartype = 0: CALL setstat(tartype, act, 151, "nesha.dat", 200, 880000) IF keyval(60) > 1 THEN tartype = 1: CALL setstat(tartype, act, 151, "nesha.dat", 200, 880000) IF keyval(62) > 1 THEN tartype = 3: CALL setstat(tartype, act, 151, "nesha.dat", 200, 880000) IF keyval(28) > 1 THEN GOSUB typeval2: GOSUB getinfo IF keyval(82) > 1 THEN FOR i = 50 TO (ptr + 1) STEP -1 CALL setstat(showstat(act, i - 1, "nesha.dat", 200, 880000), act, i, "nesha.dat", 200, 880000) CALL setstat(showstat(act, i + 50 - 1, "nesha.dat", 200, 880000), act, i + 50, "nesha.dat", 200, 880000) CALL setstat(showstat(act, i + 100 - 1, "nesha.dat", 200, 880000), act, i + 100, "nesha.dat", 200, 880000) NEXT i CALL setstat(0, act, ptr, "nesha.dat", 200, 880000) CALL setstat(0, act, ptr + 50, "nesha.dat", 200, 880000) CALL setstat(0, act, ptr + 100, "nesha.dat", 200, 880000) GOSUB getinfo END IF menu orders(), orders$(), ptr, top, 20, 8, cpic(1), 1, 1, 19, 16, 4, 1 menu nul(), argu1$(), ptr, top, 20, 8, cpic(2), 165, 1, 6, 16, 4, 1 menu nul(), argu2$(), ptr, top, 20, 8, cpic(3), 225, 1, 6, 16, 4, 1 textcolor 15, 0 printstr name$ + STR$(tartype), 0, 190, 1 copypage 1, 0: copypage 2, 1 LOOP typeval2: textcolor 12, 4 temp$ = "" setkeys DO: setkeys FOR i = 2 TO 10 IF keyval(i) > 1 THEN temp$ = temp$ + RIGHT$(STR$(i - 1), 1) NEXT i IF keyval(11) > 1 THEN temp$ = temp$ + "0" IF keyval(12) > 1 THEN temp$ = temp$ + "-" IF keyval(14) > 1 AND LEN(temp$) > 0 THEN temp$ = LEFT$(temp$, LEN(temp$) - 1) printstr temp$ + LEFT$(" ", 20 - LEN(temp$)), 0, 190, 0 LOOP UNTIL keyval(28) > 1 OR keyval(1) > 1 IF ABS(VAL(temp$)) > 30000 THEN temp$ = "0" setstat VAL(temp$), act, ptr + (50 * ptr2), "nesha.dat", 200, 880000 textcolor 15, 0: RETURN getinfo: name$ = decode$(showstat(act, 0, "nesha.dat", 200, 880000), 20, "names.cod") FOR i = 1 TO 50 orders(i) = showstat(act, i, "nesha.dat", 200, 880000) IF orders(i) > 25 OR orders(i) < 0 THEN orders(i) = 0: setstat 0, act, i, "nesha.dat", 200, 880000 NEXT FOR i = 1 TO 50 argu1$(i) = STR$(showstat(act, i + 50, "nesha.dat", 200, 880000)) NEXT FOR i = 1 TO 50 argu2$(i) = STR$(showstat(act, i + 100, "nesha.dat", 200, 880000)) NEXT tartype = showstat(act, 151, "nesha.dat", 200, 880000) CALL setkeys: RETURN END SUB SUB customai (who, file$, del) DIM orders$(50), orders(100), argu$(100), nul(100), cpic(3) allist = 10 OPEN "ailist.txt" FOR INPUT AS #1 FOR i = 0 TO allist INPUT #1, orders$(i) NEXT i CLOSE FOR i = 0 TO 99 nul(i) = i NEXT i GOSUB infoai cpic(1) = 15 setkeys DO: setkeys IF keyval(1) > 1 THEN EXIT SUB IF keyval(72) > 1 THEN ptr = large(0, ptr - 1): IF ptr < top THEN top = top - 10 IF keyval(80) > 1 THEN ptr = small(99, ptr + 1): IF ptr > top + 9 THEN top = ptr IF keyval(51) > 0 THEN CALL setstat(showstat(who, ptr + 600 + (100 * ptr2), "nesha.dat", 800, 0) - 1, who, ptr + 600 + (100 * ptr2), "nesha.dat", 800, 0): GOSUB infoai IF keyval(52) > 0 THEN CALL setstat(showstat(who, ptr + 600 + (100 * ptr2), "nesha.dat", 800, 0) + 1, who, ptr + 600 + (100 * ptr2), "nesha.dat", 800, 0): GOSUB infoai IF keyval(14) > 1 THEN FOR i = 600 TO 799: CALL setstat(0, who, i, "nesha.dat", 800, 0): NEXT i: GOSUB infoai IF keyval(75) > 1 THEN ptr2 = ptr2 XOR 1: FOR i = 1 TO 2: cpic(i) = 0: NEXT i: cpic(ptr2 + 1) = 15 IF keyval(77) > 1 THEN ptr2 = ptr2 XOR 1: FOR i = 1 TO 2: cpic(i) = 0: NEXT i: cpic(ptr2 + 1) = 15 IF keyval(28) > 1 THEN GOSUB typeval3: GOSUB infoai IF keyval(82) > 1 THEN FOR i = 99 TO (ptr + 1) STEP -1 CALL setstat(showstat(who, i - 1 + 600, "nesha.dat", 800, 0), who, i + 600, "nesha.dat", 800, 0) CALL setstat(showstat(who, i - 1 + 700, "nesha.dat", 800, 0), who, i + 700, "nesha.dat", 800, 0) NEXT i CALL setstat(0, who, ptr + 600, "nesha.dat", 800, 0) CALL setstat(0, who, ptr + 700, "nesha.dat", 800, 0) GOSUB infoai END IF menu orders(), orders$(), ptr, top, 10, 8, cpic(1), 1, 1, 19, 16, 5, 1 menu nul(), argu$(), ptr, top, 10, 8, cpic(2), 165, 1, 6, 16, 5, 1 textcolor 15, 0 printstr STR$(who), 0, 150, 1 copypage 1, 0: copypage 2, 1 LOOP typeval3: textcolor 12, 4 temp$ = "" setkeys DO: setkeys FOR i = 2 TO 10 IF keyval(i) > 1 THEN temp$ = temp$ + RIGHT$(STR$(i - 1), 1) NEXT i IF keyval(11) > 1 THEN temp$ = temp$ + "0" IF keyval(12) > 1 THEN temp$ = temp$ + "-" IF keyval(14) > 1 AND LEN(temp$) > 0 THEN temp$ = LEFT$(temp$, LEN(temp$) - 1) printstr temp$ + LEFT$(" ", 20 - LEN(temp$)), 0, 190, 0 LOOP UNTIL keyval(28) > 1 OR keyval(1) > 1 IF ABS(VAL(temp$)) > 30000 THEN temp$ = "0" setstat VAL(temp$), who, ptr + 600 + (100 * ptr2), "nesha.dat", 800, 0 textcolor 15, 0: RETURN infoai: FOR i = 0 TO 99 orders(i) = showstat(who, i + 600, "nesha.dat", 800, 0) IF orders(i) > allist OR orders(i) < 0 THEN orders(i) = 0: setstat 0, who, i + 600, "nesha.dat", 800, 0 argu$(i) = STR$(showstat(who, i + 700, "nesha.dat", 800, 0)) NEXT CALL setkeys: RETURN END SUB SUB customstat (who, file$, pic(), pll(), del) DIM stat$(500), mstat(500), var$(500), nowpic(3), nowpal(3), x(3), y(3), d(3), a(8), b(8), buffer(16250) stotal = 149: d(0) = 1: d(1) = 1 OPEN "statlist.txt" FOR INPUT AS #1 FOR i = 0 TO stotal: INPUT #1, stat$(i): mstat(i) = i: NEXT i CLOSE #1 a(0) = 0: b(0) = 1 a(1) = 1: b(1) = 1 a(2) = 2: b(2) = 1 a(3) = 3: b(3) = 1 a(4) = 4: b(4) = 1 a(5) = 3: b(5) = -1 a(6) = 2: b(6) = -1 a(7) = 1: b(7) = -1 IF del <> 0 THEN FOR i = 0 TO stotal setstat 0, who, i, file$, 800, 0 NEXT END IF GOSUB setvalist setkeys DO: setkeys IF keyval(1) > 1 THEN setkeys: EXIT SUB IF keyval(72) > 1 THEN ptr = large(ptr - 1, 0): IF ptr < top THEN top = ptr IF keyval(80) > 1 THEN ptr = small(ptr + 1, stotal): IF ptr > top + 8 THEN top = top + 1 IF keyval(75) > 1 THEN setstat large(VAL(var$(ptr)) - 1, -30000), who, ptr, file$, 800, 0: GOSUB setvalist IF keyval(77) > 1 THEN setstat small(VAL(var$(ptr)) + 1, 30000), who, ptr, file$, 800, 0: GOSUB setvalist IF keyval(28) > 1 THEN GOSUB typeval: GOSUB setvalist IF keyval(45) > 1 THEN GOSUB weprot: GOSUB setvalist CALL menu(mstat(), stat$(), ptr, top, 9, 10, 62, 1, 1, 20, 6, 14, 1) CALL menu(mstat(), var$(), ptr, top, 9, 10, 45, 180, 1, 10, 6, 14, 1) FOR i = 0 TO 1 loadsprite pic(), (nowpic(i) * 1250), i * 51, 50, 50, 3 IF d(i) > 0 THEN drawsprite pic(), pll(), nowpal(i) * 16, x(i), y(i), 1 ELSE wardsprite pic(), pll(), nowpal(i) * 16, x(i), y(i), 1 NEXT i printstr name$, 0, 120, 1 printstr pname$, 0, 130, 1 printstr cname$, 0, 140, 1 copypage 1, 0: copypage 2, 1 LOOP weprot: nowpic(1) = a(c): d(1) = b(c) c = over(c + 1, 0, 7) RETURN typeval: textcolor 12, 4 var$(ptr) = "" setkeys DO: setkeys FOR i = 2 TO 10 IF keyval(i) > 1 THEN var$(ptr) = var$(ptr) + RIGHT$(STR$(i - 1), 1) NEXT i IF keyval(11) > 1 THEN var$(ptr) = var$(ptr) + "0" IF keyval(12) > 1 THEN var$(ptr) = var$(ptr) + "-" IF keyval(14) > 1 AND LEN(var$(ptr)) > 0 THEN var$(ptr) = LEFT$(var$(ptr), LEN(var$(ptr)) - 1) printstr var$(ptr) + LEFT$(" ", 20 - LEN(var$(ptr))), 0, 110, 0 LOOP UNTIL keyval(28) > 1 OR keyval(1) > 1 IF ABS(VAL(var$(ptr))) > 30000 THEN var$(ptr) = "0" setstat VAL(var$(ptr)), who, ptr, file$, 800, 0 textcolor 15, 0: setkeys: RETURN setvalist: FOR i = 0 TO stotal var$(i) = STR$(showstat(who, i, file$, 800, 0)) NEXT printstr STR$(who), 300, 0, 2 setpicstuf buffer(), 16250, 3 loadset "beings.all" + CHR$(0), showstat(who, 2, file$, 800, 0), 0 nowpic(0) = showstat(who, 0, file$, 800, 0) nowpal(0) = showstat(who, 1, file$, 800, 0) x(0) = 200: y(0) = 130 setpicstuf buffer(), 6250, 3 loadset "armament.all" + CHR$(0), showstat(who, 68, file$, 800, 0), 51 nowpal(1) = 1 x(1) = x(0) + (showstat(who, 8 + nowpic(0), file$, 800, 0) * SGN(d(0))) y(1) = y(0) + (showstat(who, 21 + nowpic(0), file$, 800, 0) * SGN(d(0))) name$ = decode$(showstat(who, 106, "nesha.dat", 800, 0), 20, "names.cod") pname$ = decode$(showstat(who, 107, "nesha.dat", 800, 0), 20, "names.cod") cname$ = decode$(showstat(who, 108, "nesha.dat", 800, 0), 20, "names.cod") RETURN END SUB SUB customwar DIM x(9), y(9), d(9) GOSUB loadvals GOSUB storevals setkeys DO: setkeys IF keyval(1) > 1 THEN GOSUB storevals: EXIT SUB IF keyval(51) > 1 THEN ptr = under(ptr - 1, 0, 9) IF keyval(52) > 1 THEN ptr = over(ptr + 1, 0, 9) IF keyval(72) > 0 THEN y(ptr) = large(y(ptr) - 1, 30) IF keyval(80) > 0 THEN y(ptr) = small(y(ptr) + 1, 149) IF keyval(75) > 0 THEN x(ptr) = large(x(ptr) - 1, 0): d(ptr) = 1 IF keyval(77) > 0 THEN x(ptr) = small(x(ptr) + 1, 269): d(ptr) = -1 IF keyval(26) > 1 THEN war = large(0, war - 1): GOSUB loadvals: GOSUB storevals IF keyval(27) > 1 THEN war = war + 1: GOSUB loadvals: GOSUB storevals FOR i = 0 TO 9 col = 1: IF i > 3 THEN col = 2 IF i = ptr THEN col = col + 8 rectangle x(i), y(i), 50, 50, col, 1 NEXT i FOR i = 0 TO 9 printstr STR$(d(i)), x(i), y(i), 1 NEXT i copypage 1, 0: copypage 2, 1 LOOP loadvals: FOR i = 0 TO 9 x(i) = showstat(war, i, "war.set", 10, 30 * war) y(i) = showstat(war, i + 10, "war.set", 10, 30 * war) d(i) = showstat(war, i + 20, "war.set", 10, 30 * war) y(i) = small(large(30, y(i)), 149) x(i) = small(large(0, x(i)), 269) IF ABS(d(i)) <> 1 THEN d(i) = 1 NEXT i RETURN storevals: FOR i = 0 TO 9 CALL setstat(x(i), war, i, "war.set", 10, 30 * war) CALL setstat(y(i), war, i + 10, "war.set", 10, 30 * war) CALL setstat(d(i), war, i + 20, "war.set", 10, 30 * war) NEXT i RETURN END SUB SUB customwep (who, file$, del) DIM stat$(500), mstat(500), var$(500), nowpic(3), nowpal(3), x(3), y(3), d(3), a(8), b(8), buffer(16250) stotal = 33 OPEN "weplist.txt" FOR INPUT AS #1 FOR i = 0 TO stotal: INPUT #1, stat$(i): mstat(i) = i: NEXT i CLOSE #1 IF del <> 0 THEN FOR i = 0 TO stotal setstat 0, who, i, file$, 200, 800000 NEXT END IF GOSUB wepvalist setkeys DO: setkeys IF keyval(1) > 1 THEN setkeys: EXIT SUB IF keyval(72) > 1 THEN ptr = large(ptr - 1, 0): IF ptr < top THEN top = ptr IF keyval(80) > 1 THEN ptr = small(ptr + 1, stotal): IF ptr > top + 8 THEN top = top + 1 IF keyval(75) > 1 THEN setstat large(VAL(var$(ptr)) - 1, -30000), who, ptr, file$, 200, 800000: GOSUB wepvalist IF keyval(77) > 1 THEN setstat small(VAL(var$(ptr)) + 1, 30000), who, ptr, file$, 200, 800000: GOSUB wepvalist IF keyval(28) > 1 THEN GOSUB typewep: GOSUB wepvalist CALL menu(mstat(), stat$(), ptr, top, 9, 10, 62, 1, 1, 20, 2, 10, 1) CALL menu(mstat(), var$(), ptr, top, 9, 10, 45, 180, 1, 10, 2, 10, 1) printstr name$, 0, 120, 1 printstr cname$, 0, 130, 1 copypage 1, 0: copypage 2, 1 LOOP typewep: textcolor 12, 4 var$(ptr) = "" setkeys DO: setkeys FOR i = 2 TO 10 IF keyval(i) > 1 THEN var$(ptr) = var$(ptr) + RIGHT$(STR$(i - 1), 1) NEXT i IF keyval(11) > 1 THEN var$(ptr) = var$(ptr) + "0" IF keyval(12) > 1 THEN var$(ptr) = var$(ptr) + "-" IF keyval(14) > 1 AND LEN(var$(ptr)) > 0 THEN var$(ptr) = LEFT$(var$(ptr), LEN(var$(ptr)) - 1) printstr var$(ptr) + LEFT$(" ", 20 - LEN(var$(ptr))), 0, 110, 0 LOOP UNTIL keyval(28) > 1 OR keyval(1) > 1 IF ABS(VAL(var$(ptr))) > 30000 THEN var$(ptr) = "0" setstat VAL(var$(ptr)), who, ptr, file$, 200, 800000 textcolor 15, 0: setkeys: RETURN wepvalist: FOR i = 0 TO stotal var$(i) = STR$(showstat(who, i, file$, 200, 800000)) NEXT printstr STR$(who), 300, 0, 2 name$ = decode$(showstat(who, 0, "nesha.dat", 200, 800000), 20, "names.cod") cname$ = decode$(showstat(who, 1, "nesha.dat", 200, 800000), 20, "names.cod") icon = small(large(showstat(who, 2, "nesha.dat", 200, 800000), 0), 255) IF icon > 0 THEN name$ = CHR$(icon) + name$ RETURN END SUB SUB damage (targ, attkr, hp(), mp(), kback(), kspeed(), harm(), hspeed(), harmc(), harm$(), wnum, mpcon, woff) DIM wqual(32): harm$(targ) = "" wep = showstat(attkr, woff + wnum, "war.dat", 800, 0) - 1 wcon = showstat(attkr, 41 + wnum, "war.dat", 800, 0): IF woff = 109 THEN wcon = 1000 ammo = showstat(attkr, 37 + wnum, "war.dat", 800, 0): IF ammo = -1 THEN atemp = -1 FOR i = 0 TO 32: wqual(i) = showstat(wep, i, "nesha.dat", 200, 800000): NEXT i str = showstat(attkr, 84, "war.dat", 800, 0) gard = showstat(targ, 85, "war.dat", 800, 0) aim = showstat(attkr, 86, "war.dat", 800, 0) * (wqual(6) / 100) evade = showstat(targ, 87, "war.dat", 800, 0) wiz = showstat(attkr, 88, "war.dat", 800, 0) wil = showstat(targ, 89, "war.dat", 800, 0) wgt = showstat(targ, 90, "war.dat", 800, 0) harm(targ) = wqual(21): harmc(targ) = wqual(22): hspeed(targ) = wqual(24) IF RND * 10000 < evade AND RND * 10000 > aim THEN harm$(targ) = "miss": wcon = wcon - wqual(12): ammo = ammo - wqual(16): GOTO donehit kback(targ) = wqual(18): kspeed(targ) = (wqual(19) * ((1000 - wgt) / 1000)) hurt = (wqual(4) * (str / 1000)) * ((10000 - gard) / 10000) hurt = hurt + (wqual(5) * (str / 1000)) FOR i = 1 TO 4 IF mp(attkr, i * 2) < wqual(28 + i) AND wqual(28 + i) > 0 THEN harm$(targ) = "failure": kback(targ) = 0 IF mpcon = 0 THEN mp(attkr, i * 2) = large(mp(attkr, i * 2) - wqual(28 + i), 0) IF wqual(24 + i) > 0 THEN hurt = hurt + ((wiz / 1000) * wqual(24 + i)) NEXT i: IF harm$(targ) = "failure" THEN GOTO donehit hurt = hurt + (RND * (hurt * .3)) - (hurt * .15) hurt = hurt * (wcon / 1000) harm$(targ) = RIGHT$(STR$(hurt), LEN(STR$(hurt)) - 1) IF RND * 100 < wqual(7) THEN hurt = hurt * 2: kspeed(targ) = kspeed(targ) * 2: harm$(targ) = RIGHT$(STR$(hurt), LEN(STR$(hurt)) - 1) + "!": wcon = wcon - wqual(13): ammo = ammo - wqual(17) ELSE wcon = wcon - wqual(11): ammo = ammo - wqual(15) IF hp(targ, 2) = 0 THEN harm$(targ) = CHR$(6) IF hurt < 0 THEN harm$(targ) = "+" + harm$(targ) hp(targ, 2) = large(hp(targ, 2) - hurt, 0) donehit: IF woff = 90 THEN ammo = large(ammo, 0) IF atemp < 0 THEN ammo = atemp wcon = large(wcon, wqual(10)) setstat wcon, attkr, 41 + wnum, "war.dat", 800, 0 setstat ammo, attkr, 37 + wnum, "war.dat", 800, 0 END IF END SUB FUNCTION decode$ (record, leng, file$) temp$ = "" FOR i = 1 TO leng num = showstat(record, i, file$, leng, 0) temp$ = temp$ + CHR$(under(num - 26, 0, 255)) NEXT i decode$ = temp$ END FUNCTION FUNCTION distance (radius, x1, y1, x2, y2) xtemp = ABS(x2 - x1) ytemp = ABS(y2 - y1) * 1.8 IF (xtemp ^ 2 + ytemp ^ 2) > radius ^ 2 THEN distance = 1 IF (xtemp ^ 2 + ytemp ^ 2) < radius ^ 2 THEN distance = -1 END FUNCTION FUNCTION inrange (tar, center, obey(), x(), y(), act) inrange = 0 tartype = showstat(act - 1, 151, "nesha.dat", 200, 880000) farthest = showstat(act - 1, 33, "nesha.dat", 200, 800000) IF obey(tar) = 0 THEN EXIT FUNCTION IF obey(tar) = 3 AND tartype < 6 THEN EXIT FUNCTION IF (tartype = 0 OR tartype = 6) AND obey(tar) = obey(center) THEN EXIT FUNCTION IF tartype = 1 AND obey(tar) <> obey(center) THEN EXIT FUNCTION IF tartype = 3 AND obey(tar) = obey(center) THEN EXIT FUNCTION IF distance(farthest, x(tar), y(tar), x(center), y(center)) > 0 THEN EXIT FUNCTION inrange = 1 END FUNCTION FUNCTION large (n1, n2) large = n1 IF n2 > n1 THEN large = n2 END FUNCTION SUB makewarfile (team(), obey()) FOR i = 0 TO 9 IF team(i) > 0 THEN IF i <= 3 THEN loadset "game.dat" + CHR$(0), team(i) - 1, 0 IF i >= 4 THEN loadset "nesha.dat" + CHR$(0), team(i) - 1, 0 storeset "war.dat" + CHR$(0), a, 0 obey(a) = 1: IF i > 3 THEN obey(a) = 2 a = a + 1 END IF NEXT i END SUB SUB menu (choice(), set$(), ptr, top, rows, space, curs, x, y, w, col, bor, p) textcolor 15, 0 IF bor > 0 THEN rectangle x - 1, y - 1, (w * 8) + 10, (space * rows) + 10, bor, p IF col > 0 THEN rectangle x, y, (w * 8) + 8, (space * rows) + 8, col, p FOR i = top TO top + rows - 1 IF choice(i) < 0 THEN textcolor 8, 0 printstr set$(ABS(choice(i))), x + 16, y + 4 + (space * (i - top)), p textcolor 15, 0 IF i = ptr THEN printstr CHR$(curs), x + 4, y + 4 + (space * (i - top)), p NEXT END SUB FUNCTION over (num, bot, top) over = num IF num > top THEN over = num - ((top - bot) + 1) END FUNCTION SUB setstat (num, who, stat, file$, size, offset!) OPEN file$ FOR BINARY AS #3 size! = size who! = who i! = 1 + (offset! + ((size! * 2) * who!)) + (stat * 2) PUT #3, i!, num CLOSE #3 END SUB FUNCTION showstat (who, stat, file$, size, offset!) OPEN file$ FOR BINARY AS #3 size! = size who! = who i! = 1 + offset! + ((size! * 2) * who!) + (stat * 2) GET #3, i!, num showstat = num CLOSE #3 END FUNCTION FUNCTION small (n1, n2) small = n1 IF n2 < n1 THEN small = n2 END FUNCTION FUNCTION under (num, bot, top) under = num IF num < bot THEN under = num + ((top - bot) + 1) END FUNCTION FUNCTION valid (who, targ, act, obey()) IF obey(targ) = 0 THEN EXIT FUNCTION IF act = 0 AND obey(who) = 1 AND obey(targ) = 2 THEN valid = 1 IF act = 0 AND obey(who) = 2 AND obey(targ) = 1 THEN valid = 1 IF act = 1 AND obey(who) = obey(targ) THEN valid = 1 IF act = 2 AND who = targ THEN valid = 1 IF act = 3 AND obey(who) <> obey(targ) AND obey(targ) <> 3 THEN valid = 2 END FUNCTION