SCREEN 12: CLS '$DYNAMIC DIM p%(20000) DEF SEG = VARSEG(p%(0)) BLOAD "yibble.pic", VARPTR(p%(0)) r1 = 30 g1 = 30 b1 = 0 r2 = 63 g2 = 58 b2 = 0 r = r1 g = g1 b = b1 rs = (r2 - r1) / 16 gs = (g2 - g1) / 16 bs = (b2 - b1) / 16 FOR a = 0 TO 15 r = r + rs g = g + gs b = b + bs IF r < 0 THEN r = 0 IF r > 63 THEN r = 63 IF g < 0 THEN g = 0 IF g > 63 THEN g = 63 IF b < 0 THEN b = 0 IF b > 63 THEN b = 63 PALETTE a, FIX(r) + FIX(g) * 256 + FIX(b) * 65536 NEXT PALETTE 0, 0 CLS PUT (195, 210), p%, PSET t = TIMER: a$ = "": WHILE TIMER < t + 10 AND a$ = "": a$ = INKEY$: WEND CLS : SCREEN 7 REDIM p%(17152) t = TIMER: WHILE TIMER < t + 5: WEND CLS DIM tn$(8), hp(8), at(8), gu(8), df(8), en(8), hd(8), fck(8), x(8), y(8), xd(8), yd(8), md(8), ty(8), dt1(8), dt2(8), lgd%(8), ex(4), ey(4), ed(4), et(4), kil%(8), ko%(8) DIM tmnm$(10), wn%(10), ls%(10), thp(10, 4), tat(10, 4), tdf(10, 4), tgu(10, 4), nm$(10, 4), tsp(10, 4), tkl%(10, 4), tko%(10, 4) GOSUB load 'OPEN "team.dat" FOR INPUT AS #1 'INPUT #1, tp1%, tp2% 'FOR a = 1 TO 10 'INPUT #1, tmnm$(a), wn%(a), ls%(a) 'FOR b = 1 TO 4 'INPUT #1, nm$(a, b), thp(a, b), tat(a, b), tdf(a, b), tgu(a, b), tsp(a, b), tko%(a, b), tkl%(a, b) 'NEXT 'NEXT 'CLOSE #1 RANDOMIZE TIMER u$ = CHR$(0) + "H" d$ = CHR$(0) + "P" l$ = CHR$(0) + "K" r$ = CHR$(0) + "M" main: DO CLS PRINT "1> Test Game" PRINT "2> Season" PRINT "3> Quit" a$ = INPUT$(1) IF a$ = "1" THEN GOSUB stbat: GOSUB battle IF a$ = "2" THEN GOSUB season IF a$ = "3" THEN SYSTEM LOOP season: WHILE a$ <> "5" CLS PRINT "1> Next game:"; tmnm$(tp1%); " Vs. "; tmnm$(tp2%) PRINT "2> Get new player" PRINT "3> Stats" PRINT "4> Top 20" PRINT "5> Quit" FOR a = 1 TO 10 cl% = cl% XOR 1 IF cl% = 1 THEN COLOR 12 ELSE COLOR 11 PRINT tmnm$(a); " W:"; wn%(a); " L:"; ls%(a) NEXT COLOR 15 a$ = INPUT$(1) IF a$ = "1" THEN GOSUB ngame IF a$ = "2" THEN GOSUB nplayer IF a$ = "3" THEN GOSUB stats IF a$ = "4" THEN GOSUB top20 WEND OPEN "team.dat" FOR OUTPUT AS #1 WRITE #1, tp1%, tp2% FOR a = 1 TO 10 WRITE #1, tmnm$(a), wn%(a), ls%(a) FOR b = 1 TO 4 WRITE #1, nm$(a, b), thp(a, b), tat(a, b), tdf(a, b), tgu(a, b), tsp(a, b), tko%(a, b), tkl%(a, b) NEXT NEXT CLOSE RETURN ngame: IF tp1% = tp2% THEN GOSUB incgame FOR a = 1 TO 4 ty(a + 4) = 0 md(a) = 0 x(a) = RND * 303 y(a) = RND * 183 hp(a) = thp(tp1%, a) at(a) = tat(tp1%, a) df(a) = tdf(tp1%, a) gu(a) = tgu(tp1%, a) spd(a) = tsp(tp1%, a) tn$(a) = nm$(tp1%, a) NEXT FOR a = 1 TO 4 ty(a + 4) = 1 md(a + 4) = 0 x(a + 4) = RND * 303 y(a + 4) = RND * 183 hp(a + 4) = thp(tp2%, a) at(a + 4) = tat(tp2%, a) df(a + 4) = tdf(tp2%, a) gu(a + 4) = tgu(tp2%, a) spd(a + 4) = tsp(tp2%, a) tn$(a + 4) = nm$(tp2%, a) NEXT FOR a = 1 TO 8 IF at(a) = 0 THEN at(a) = .1 IF df(a) = 0 THEN df(a) = .1 NEXT tm1$ = tmnm$(tp1%) tm2$ = tmnm$(tp2%) GOSUB battle FOR a = 1 TO 4 tko%(tp1%, a) = tko%(tp1%, a) + ko%(a) tkl%(tp1%, a) = tkl%(tp1%, a) + kil%(a) IF hp(a) < 0 THEN thp(tp1%, a) = -1 IF tat(tp1%, a) < 2 THEN tat(tp1%, a) = tat(tp1%, a) + RND * .05 IF tdf(tp1%, a) < 2 THEN tdf(tp1%, a) = tdf(tp1%, a) + RND * .05 IF tsp(tp1%, a) < 3 THEN tsp(tp1%, a) = tsp(tp1%, a) + RND * .05 IF thp(tp1%, a) > 0 THEN thp(tp1%, a) = thp(tp1%, a) + RND * 1.5 NEXT FOR a = 1 TO 4 tko%(tp2%, a) = tko%(tp2%, a) + ko%(a + 4) tkl%(tp2%, a) = tkl%(tp2%, a) + kil%(a + 4) IF hp(a + 4) < 0 THEN thp(tp2%, a) = -1 IF tat(tp2%, a) < 2 THEN tat(tp2%, a) = tat(tp2%, a) + RND * .05 IF tdf(tp2%, a) < 2 THEN tdf(tp2%, a) = tdf(tp2%, a) + RND * .05 IF tsp(tp2%, a) < 3 THEN tsp(tp2%, a) = tsp(tp2%, a) + RND * .05 IF thp(tp2%, a) > 0 THEN thp(tp2%, a) = thp(tp2%, a) + RND * 1.5 NEXT IF w% = 1 THEN wn%(tp1%) = wn%(tp1%) + 1: ls%(tp2%) = ls%(tp2%) + 1 IF w% = 2 THEN wn%(tp2%) = wn%(tp2%) + 1: ls%(tp1%) = ls%(tp1%) + 1 GOSUB incgame RETURN incgame: tp1% = tp1% + 1 IF tp1% > 10 THEN tp1% = 1: tp2% = tp2% + 1 IF tp2% > 10 THEN tp2% = 1 RETURN nplayer: team% = 1 player% = 1 WHILE a$ <> CHR$(27) CLS PRINT nm$(team%, player%); IF thp(team%, player%) < 1 THEN PRINT " DEAD" ELSE PRINT PRINT "Select bug to replace" PRINT "Right and left arrows change Player" PRINT "Up and down change team" PRINT "Enter to select" PRINT "ESC to exit" a$ = "": WHILE a$ = "": a$ = INKEY$: WEND IF a$ = u$ THEN team% = team% - 1 IF a$ = d$ THEN team% = team% + 1 IF a$ = l$ THEN player% = player% - 1 IF a$ = r$ THEN player% = player% + 1 IF a$ = CHR$(13) THEN GOSUB change IF team% < 1 THEN team% = 10 IF team% > 10 THEN team% = 1 IF player% < 1 THEN player% = 4 IF player% > 4 THEN player% = 1 WEND RETURN change: PRINT "Are you you sure (Y/N)" a$ = INPUT$(1) IF a$ = "N" OR a$ = "n" THEN RETURN CLS a$ = "" rl% = 8 WHILE a$ <> "y" AND a$ <> "Y" AND rl% <> 0 rl% = rl% - 1 df = RND * 1.5 + .5 at = RND * 1.5 + .5 hp = RND * 50 + 70 spd = RND * 2 + 1 gu = RND * 40 + 20 PRINT "New stats:" PRINT "Hit points (HP):"; FIX(hp) PRINT USING "Attack (AT):#.##"; at PRINT USING "Defence (DF):#.##"; df PRINT USING "Speed :#.##"; spd PRINT "Is the above good (Y/N)" PRINT "Rolls left:"; rl% a$ = INPUT$(1) WEND INPUT "Name"; n$ PRINT "Continue (Y/N)" a$ = INPUT$(1) IF a$ = "n" OR a$ = "N" THEN RETURN PRINT nm$(team%, player%); " Will be recorded in the hall of fame." OPEN "hall.dat" FOR APPEND AS #1 WRITE #1, nm$(team%, player%) + ":" IF thp(team%, player%) < 1 THEN WRITE #1, "Died while serving the humans." WRITE #1, "Knock outs:" + STR$(tko%(team%, player%)) WRITE #1, "Kills:" + STR$(tkl%(team%, player%)) CLOSE #1 nm$(team%, player%) = n$ thp(team%, player%) = hp tdf(team%, player%) = df tat(team%, player%) = at tsp(team%, player%) = spd tgu(team%, player%) = gu tkl%(team%, player%) = 0 tko%(team%, player%) = 0 RETURN stats: team% = 1 player% = 1 a$ = "" WHILE a$ <> CHR$(27) CLS PRINT "Right and left arrows change Player" PRINT "Up and down change team" PRINT "ESC to exit" LOCATE 5: PRINT "Name "; nm$(team%, player%) LOCATE 6: PRINT "Team "; tmnm$(team%) LOCATE 7: PRINT "HP "; FIX(thp(team%, player%)) IF thp(team%, player%) < 1 THEN LOCATE 7, 20: PRINT "(Dead)" LOCATE 8: PRINT USING "AT #.##"; tat(team%, player%) LOCATE 8, 20: PRINT USING "DF #.##"; tdf(team%, player%) LOCATE 9: PRINT USING "SPEED ##.##"; tsp(team%, player%) LOCATE 10: PRINT "Knock outs "; tko%(team%, player%) LOCATE 11: PRINT "Kills"; tkl%(team%, player%) a$ = "": WHILE a$ = "": a$ = INKEY$: WEND IF a$ = u$ THEN team% = team% - 1 IF a$ = d$ THEN team% = team% + 1 IF a$ = l$ THEN player% = player% - 1 IF a$ = r$ THEN player% = player% + 1 IF team% < 1 THEN team% = 10 IF team% > 10 THEN team% = 1 IF player% < 1 THEN player% = 4 IF player% > 4 THEN player% = 1 WEND RETURN top20: a$ = "" WHILE a$ <> "3" PRINT "1> Knock outs" PRINT "2> Kills" a$ = INPUT$(1) IF a$ = "1" THEN tp20% = 1: GOSUB t20lst IF a$ = "2" THEN tp20% = 2: GOSUB t20lst WEND RETURN t20lst: RETURN stbat: FOR a = 5 TO 8 ty(a) = 1 NEXT FOR a = 1 TO 8 md(a) = 0 x(a) = RND * 303 y(a) = RND * 183 hp(a) = 50 + RND * 10 at(a) = RND + 1 df(a) = RND + 1 gu(a) = RND * 200 + 100 spd(a) = RND * 2 + 1 tm2$ = "BLUE" tm1$ = "RED" NEXT FOR a = 1 TO 8 INPUT "name"; tn$(a) NEXT RETURN battle: gam% = 0 FOR rn% = 1 TO 4 tm = TIMER + 30 SCREEN 7, 0, 0, 0 CLS LOCATE 12: PRINT "ROUND "; rn% t = TIMER: WHILE TIMER < t + 2: WEND CLS SCREEN 7, 0, 1, 2 GOSUB bugloop SCREEN 7, 0, 1, 2 next1: FOR a = 1 TO 8 IF hp(a) > 0 THEN hp(a) = hp(a) + df(a) * 10 NEXT NEXT won: CLS : SCREEN 7, 0, 0, 0 IF hp1 > hp2 THEN w% = 1 ELSE w% = 2 IF w% = 1 THEN PRINT tm1$ + " WIN" IF w% = 2 THEN PRINT tm2$ + " WIN" a$ = INPUT$(1) a$ = "" RETURN bugloop: DO q% = RND * 7 + 1 a$ = INKEY$ IF a$ = "p" OR a$ = "P" THEN GOSUB pause IF a$ = "d" OR a$ = "D" THEN dsph% = dsph% XOR 1 IF a$ = "l" OR a$ = "L" THEN ln% = ln% XOR 1 IF a$ = "n" OR a$ = "N" THEN dnm% = dnm% XOR 1 IF a$ = "J" OR a$ = "j" THEN GOTO won IF a$ <> "" AND demo% = 1 THEN demo% = 0: RETURN hp1 = 0 hp2 = 0 PCOPY 0, 1 IF dsph% = 1 THEN GOSUB dshp IF dnm% = 1 THEN GOSUB dsnm FOR a = 1 TO 8 GOSUB bugmov IF x(a) > 303 THEN x(a) = 303: xd(a) = -xd(a) IF y(a) > 183 THEN y(a) = 183: yd(a) = -yd(a) IF x(a) < 0 THEN x(a) = 0: xd(a) = -xd(a) IF y(a) < 0 THEN y(a) = 0: yd(a) = -yd(a) x = x(a) y = y(a) GOSUB putblk IF ty(a) = 0 THEN hp1 = hp1 + hp(a) IF ty(a) = 1 THEN hp2 = hp2 + hp(a) IF hp(a) < -1 THEN hp(a) = -1 IF demo% = 1 AND h(a) < 0 THEN GOSUB newbug NEXT FOR a = 1 TO 4 GOSUB spef NEXT IF ln% = 1 THEN LINE (0, 199)-(hp1, 199), 4: LINE (0, 197)-(hp2, 197), 1 IF ln% = 0 THEN LOCATE 2: COLOR 4: PRINT FIX(hp1) IF ln% = 0 THEN LOCATE 2, 20: COLOR 1: PRINT FIX(hp2) IF ln% = 0 THEN COLOR 15 LOCATE 1: PRINT "SECONDS:"; FIX(tm - TIMER) IF tm - TIMER < 0 THEN GOTO next1 PCOPY 1, 2 LOOP RETURN newbug: hp(a) = 70 x(a) = RND * 303 y(a) = RND * 183 RETURN bugmov: IF ty(a) = 0 THEN hhp1 = hp1: hhp2 = hp2 ELSE hhp1 = hp2: hhp2 = hp1 IF RND > .5 THEN q% = RND * 7 + 1 IF hp(a) > -1 THEN hp(a) = hp(a) + .01 ana% = 0 IF hp(a) < 30 THEN ana% = 1 IF hp(a) < 20 THEN q% = a IF hp(a) > 30 THEN ana% = 2 IF md(a) = 0 THEN md(a) = 1 IF hp(a) < 5 THEN md(a) = 5 IF hp(a) < 0 THEN md(a) = 6 ON md(a) GOSUB bg1, bg2, bg3, bg4, bg5, bg6, bg7 RETURN bg1: IF ty(q%) <> ty(a) THEN dt1(a) = q%: md(a) = 2 GOSUB isithit2 dt2(a) = dt2(a) - 1 IF dt2(a) < 0 THEN dt2(a) = 0 IF i% = 1 AND dt2(a) = 0 THEN xd(a) = -xd(a): yd(a) = -yd(a) IF i% = 1 THEN dt2(a) = 15 GOSUB randir GOSUB getdir RETURN bg2: x1 = x(dt1(a)) y1 = y(dt1(a)) GOSUB isithit IF i% = 1 THEN md(a) = 3 IF RND * 150 > 149 AND hhp1 > hhp2 THEN md(a) = 1 IF FIX(x(dt1(a))) < FIX(x(a)) THEN xd(a) = -spd(a) IF FIX(x(dt1(a))) > FIX(x(a)) THEN xd(a) = spd(a) IF FIX(y(dt1(a))) < FIX(y(a)) THEN yd(a) = -spd(a) IF FIX(y(dt1(a))) > FIX(y(a)) THEN yd(a) = spd(a) GOSUB splimit x(a) = x(a) + xd(a) y(a) = y(a) + yd(a) GOSUB getdir RETURN bg3: IF ana% = 1 THEN md(a) = 4 IF RND * 150 > 149 AND hhp1 > hhp2 THEN md(a) = 7 IF hp(dt1(a)) < 0 AND RND * 150 > 149 THEN md(a) = 1 IF RND * 1000 > 999 THEN md(a) = 7 x1 = x(dt1(a)) y1 = y(dt1(a)) GOSUB isithit IF i% = 0 THEN md(a) = 2 IF RND * 10 > 9 AND i% = 1 THEN ohp = hp(dt1(a)): hp(dt1(a)) = hp(dt1(a)) - (at(a) / df(dt1(a))) * 3: efn% = 1: GOSUB mef: GOSUB ikill GOSUB getdir RETURN ikill: IF ohp > 0 AND hp(dt1(a)) = -1 THEN kil%(a) = kil%(a) + 1: dt2(dt1(a)) = 0 IF ohp > 5 AND hp(dt1(a)) < 5 THEN ko%(a) = ko%(a) + 1 IF ohp < 0 THEN dt2(dt1(a)) = dt2(dt1(a)) + .1 RETURN bg4: IF RND * 150 > 149 THEN md(a) = 1 IF FIX(x(dt1(a))) > FIX(x(a)) THEN xd(a) = -spd(a) IF FIX(x(dt1(a))) < FIX(x(a)) THEN xd(a) = spd(a) IF FIX(y(dt1(a))) > FIX(y(a)) THEN yd(a) = -spd(a) IF FIX(y(dt1(a))) < FIX(y(a)) THEN yd(a) = spd(a) GOSUB splimit x(a) = x(a) + xd(a) y(a) = y(a) + yd(a) GOSUB getdir RETURN bg5: dt1(a) = dt1(a) + 1 IF dt1(a) > gu(a) THEN dt1(a) = 0: hp(a) = 11: md(a) = 1 n = (ty(a) * 20) + (dt1(a) AND 3) + 16 x = x(a) y = y(a) RETURN bg6: IF dt1(a) <> -1 THEN dt1(a) = -1: dt2(a) = 0 n = 16 + (ty(a) * 20) dt2(a) = dt2(a) + .01 IF dt2(a) > 19 THEN dt2(a) = 19 IF dt2(a) > 0 THEN n = FIX(49 + dt2(a)) x = x(a) y = y(a) RETURN bg7: GOSUB randir GOSUB getdir IF RND * 450 > 449 THEN md(a) = 1 RETURN spef: ON et(spf%) GOSUB sp1, sp2 RETURN sp1: ed(spf%) = ed(spf%) + .5 IF ed(spf%) >= 2 THEN et(spf%) = 0: GOSUB bsplat x = ex(a) y = ey(a) n = FIX(45 + ed(spf%)) GOSUB putblk RETURN sp2: ed(spf%) = ed(spf%) + .5 IF ed(spf%) >= 5 THEN et(spf%) = 0 x = ex(a) y = ey(a) n = FIX(40 + ed(spf%)) GOSUB putblk RETURN bsplat: gam% = gam% + 1 IF gam% > 100 THEN gam% = 0: GOSUB tmg SCREEN 7, 0, 0, 2 FOR b = 1 TO 10 IF RND > .5 THEN c% = 4 ELSE c% = 12 PSET (ex(a) + RND * 8 - 4, ey(a) + RND * 8 - 4), c% NEXT SCREEN 7, 0, 1, 2 RETURN tmg: SCREEN 7, 0, 0, 2 LOCATE 1: PRINT "TO MANY GUTS": PRINT "TIME FOR GUS GUT SWEEPER!" FOR a = 0 TO 319 LINE (a, 0)-(a, 199), 0 PCOPY 0, 2 NEXT SCREEN 7, 0, 1, 2 a = 0 RETURN mef: IF efn% <> 1 THEN GOTO nefct IF RND > .5 THEN efn% = 1 ELSE efn% = 2 nefct: spf% = spf% + 1 IF spf% > 4 THEN spf% = 1 et(spf%) = efn%: ed(spf%) = 0 ex(spf%) = x(dt1(a)) + RND * 6 - 3 ey(spf%) = y(dt1(a)) + RND * 6 - 3 RETURN randir: xd(a) = xd(a) + RND - .5 yd(a) = yd(a) + RND - .5 GOSUB splimit x(a) = x(a) + xd(a) y(a) = y(a) + yd(a) RETURN splimit: IF xd(a) > spd(a) THEN xd(a) = spd(a) IF xd(a) < -spd(a) THEN xd(a) = -spd(a) IF yd(a) > spd(a) THEN yd(a) = spd(a) IF yd(a) < -spd(a) THEN yd(a) = -spd(a) RETURN getdir: xf = ABS(xd(a)) yf = ABS(yd(a)) IF xf > yf THEN GOTO xer IF yd(a) < 0 THEN dr% = 3 IF yd(a) > 0 THEN dr% = 1 GOTO yer xer: IF xd(a) < 0 THEN dr% = 2 IF xd(a) > 0 THEN dr% = 0 yer: lgd%(a) = lgd%(a) + 1 IF lgd%(a) > 2 THEN lgd%(a) = 0 n = (ty(a) * 20) + (dr% * 3) + lgd%(a) RETURN putblk: IF x < 0 OR y < 0 OR x > 303 OR y > 183 OR n > 127 THEN RETURN PUT (x, y), p%(n * 134), OR RETURN isithit: i% = 0 IF x(a) - 16 <= x1 AND x(a) + 16 >= x1 THEN i% = i% + 1 IF y(a) - 16 <= y1 AND y(a) + 16 >= y1 THEN i% = i% + 1 IF i% = 2 THEN i% = 1: ht% = b ELSE i% = 0 RETURN isithit2: FOR b = 1 TO 8 IF x(a) - 16 <= x(b) AND x(a) + 16 >= x(b) THEN i% = i% + 1 IF y(a) - 16 <= y(b) AND y(a) + 16 >= y(b) THEN i% = i% + 1 IF i% = 2 THEN i% = 1: ht% = b ELSE i% = 0 NEXT RETURN pause: GOSUB dshp PCOPY 1, 2 a$ = INPUT$(1) RETURN dshp: FOR a = 1 TO 8 LOCATE (y(a) / 8) + 1, (x(a) / 8) + 1: PRINT FIX(hp(a)) NEXT RETURN dsnm: FOR a = 1 TO 8 LOCATE (y(a) / 8) + 1, (x(a) / 8) + 1: PRINT tn$(a) NEXT RETURN load: DEF SEG = VARSEG(p%(0)) BLOAD "war.pic", VARPTR(p%(0)) DEF SEG RETURN