'$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 () REM $STATIC 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