1 REM *** GALACTIC EMPIRE ! version 1.0 *** 10 REM *** For updates: http://wokka.org/galactic_empire *** 20 REM --- Modified by Charles Goldsmith for the PC --- 30 REM --- email: wokka at this email wokka dot org --- 40 REM *** original author unknown *** 50 DIM WL$(40), WL(40), LF(10), HF(10), DO$(20), N$(4) 60 DIM WS(40), wc(40), WX(40), WY(40), WI(40), W2(40) 70 DIM FS(100), FD(100), FC(100), FT(100), P(20) 80 CLS : SCREEN 7: SO = 0 90 FOR a = 1 TO 20: WL$(a) = CHR$(96 + a): WL(a) = 96 + a: NEXT 100 FOR a = 21 TO 40: WL$(a) = CHR$(44 + a): WL(a) = 44 + a: NEXT 110 FOR a = 0 TO 10: READ PC(a): NEXT 120 COLOR PC(0), 7 130 DO$(0) = CHR$(11) + CHR$(31): DO$(1) = CHR$(31): FOR a = 2 TO 20 140 DO$(a) = DO$(a - 1) + CHR$(31): NEXT 150 DEF FNDS (a) = SQR((WX(P) - WX(a)) ^ 2 + (WY(P) - WY(a)) ^ 2) 160 D1$ = CHR$(11) + CHR$(31) + DO$(18) + CHR$(28) 170 D2$ = D1$ + CHR$(31): D3$ = D2$ + CHR$(31) 180 PN$(0) = "Me !" 190 GOTO 3200 200 REM $$$ $$$ 210 REM $$$ SOUNDS $$$ 220 REM $$$ $$$ 230 REM *** *** 240 REM *** DEFENDER'S FIRE *** 250 REM *** *** 260 RANDOMIZE TIMER 270 FOR TM = 80 TO 85: SOUND INT(RND * TM) * 100, 1: NEXT 280 SOUND TM, 0 290 RETURN 300 REM *** *** 310 REM *** INPUT MISTAKE *** 320 REM *** *** 330 BEEP: BEEP 340 SOUND 400, 0 350 RETURN 360 REM *** *** 370 REM *** BATTLE STATIONS *** 380 REM *** *** 390 SOUND 523, 9 400 FOR NT = 1 TO 2 410 FOR lp = 1 TO 10 420 SOUND 70 * NT * lp, 1 430 NEXT: SOUND 523, 1: NEXT: SOUND 523, 0 440 RETURN 450 REM *** *** 460 REM *** TELETYPE (1 PING) *** 470 REM *** *** 480 SOUND 1000 * INT(RND), 2: REM PLAY "mb t136 mn o3 l8" 490 RETURN 500 REM *** *** 510 REM *** WORLD CHARACTER INPUT *** 520 REM *** *** 530 IN$ = INPUT$(1) 540 IF IN$ = "?" OR IN$ = CHR$(13) THEN RETURN 550 IF ASC(IN$) > 64 AND ASC(IN$) < 85 THEN U = ASC(IN$) - 44: RETURN 560 IF ASC(IN$) > 96 AND ASC(IN$) < 117 THEN U = ASC(IN$) - 96: RETURN 570 U = -1: RETURN 580 REM *** *** 590 REM *** NUMERICAL INPUT *** 600 REM *** *** 610 U = 0 620 IN$ = INPUT$(1) 630 IF IN$ = CHR$(13) OR IN$ = "?" THEN RETURN 640 IF ASC(IN$) > 47 AND ASC(IN$) < 58 THEN U = 10 * U + ASC(IN$) - 48: GOTO 620 650 U = -1: RETURN 660 REM *** *** 670 REM *** PLAYER'S INPUT *** 680 REM *** *** 690 w = 1: GOSUB 5400 700 IF wc(w) = P THEN 750 710 w = w + 1: IF w <= wn THEN 700 720 LOCATE 22, 2: PRINT "Admiral "; : COLOR PC(P): PRINT PN$(P) 730 LOCATE 23, 2: COLOR PC(0): PRINT "Controls no worlds" 740 GOSUB 300: FOR TM = 1 TO 1000: NEXT: GOSUB 5400: RETURN 750 LOCATE 22, 2: PRINT "Admiral "; : COLOR PC(P) 760 PRINT PN$(P); : COLOR PC(0): PRINT ":": LOCATE 23, 2 770 PRINT "Origin of fleet: "; : GOSUB 500 780 IF IN$ = "?" THEN GOSUB 2410: GOTO 660 790 IF IN$ = CHR$(13) THEN GOSUB 5400: RETURN 800 IF U < 0 THEN 880 810 IF wc(U) = P THEN 840 820 LOCATE 23, 2: PRINT "That's not yours!" 830 FOR a = 1 TO 1000: NEXT: GOSUB 300: GOSUB 5400: GOTO 750 840 WR = U: GOSUB 5440: LOCATE 23, 2: PRINT "Destination: " 850 GOSUB 500 860 IF IN$ = "?" THEN GOSUB 2410: GOTO 660 870 IF IN$ = CHR$(13) THEN GOSUB 5400: GOTO 750 880 IF U > 0 THEN GOTO 910 890 LOCATE 23, 2: PRINT "Invalid Answer!": FOR a = 1 TO 2000: NEXT 900 GOSUB 300: GOSUB 5400: GOTO 750 910 WD = U: LOCATE 23, 2: PRINT "# of ships: "; 920 GOSUB 580 930 IF IN$ = "?" THEN GOSUB 2410: GOTO 660 940 IF U < 0 THEN 880 950 IF U = 0 THEN GOSUB 5400: GOTO 750 960 IF U < WS(WR) THEN 980 ELSE LOCATE 23, 2: PRINT "Not enough there!" 970 FOR a = 1 TO 2000: NEXT: GOSUB 300: GOSUB 5400: GOTO 750 980 GOSUB 5400: FM = U: GOSUB 1010 990 IF F <= 100 THEN F = 1: GOTO 750 1000 RETURN 1010 REM *** *** 1020 REM *** TRANSFER SHIPS FROM *** 1030 REM *** WORLD TO FLEET *** 1040 REM *** *** 1050 F = 1 1060 IF FC(F) <> 0 THEN 1120 1070 WS(WR) = WS(WR) - FM 1080 FC(F) = P 1090 FD(F) = WD: FS(F) = FM 1100 Z = P: P = WR: FT(F) = t + (FNDS(WD) + .99) / 3: P = Z: RETURN 1110 LOCATE 23, 2: PRINT "No launches !": F = 0: GOSUB 300 1120 F = F + 1: IF F <= 100 THEN 1060 1130 LOCATE 22, 2: PRINT "Worker's strike" 1140 GOSUB 5400: P(0) = PN: RETURN 1150 REM *** *** 1160 REM *** ARRIVAL OF FLEET *** 1170 REM *** *** 1180 w = FD(F): DE = WS(w): AK = FS(F) 1190 COLOR PC(wc(w)): FOR I = 1 TO 50 1200 LOCATE WX(w), WY(w) 1210 PRINT " ": LOCATE WX(w), WY(w) 1220 PRINT WL$(w) 1230 NEXT: COLOR PC(0) 1240 IF FC(F) = wc(w) THEN 1550 1250 REM *** *** 1260 REM *** ATTACK *** 1270 REM *** *** 1280 LOCATE 22, 2: CC$ = "Attack on world " + WL$(w) + "!" 1290 GOSUB 1870: GOSUB 360: FOR a = 1 TO 10000: NEXT 1300 GOSUB 5400: LOCATE 22, 2: COLOR PC(wc(w)): CC$ = "Star: " + WL$(w): GOSUB 1870 1310 REM CC$ = PN$(wc(w)): GOSUB 1870 1320 LOCATE 23, 2: COLOR PC(FC(F)): PRINT PN$(FC(F)): REM GOSUB 1870 1330 REM CC$ = PN$(FC(F)): GOSUB 1870 1340 LOCATE 22, 10: COLOR PC(wc(w)): PRINT ": "; 1350 W2 = w: GOSUB 5380: REM PRINT " " 1360 LOCATE 23, 10: COLOR PC(FC(F)): PRINT ": "; 1370 W2 = 0: WS(W2) = AK: GOSUB 5380: REM PRINT " " 1380 IF DE <= 0 THEN GOSUB 1790: GOTO 1540 1390 I = 0: REM DEFENDER FIRES 1400 I = I + 1: IF SO = 999 THEN GOSUB 230 1405 IF DE > 100 AND AK < 2 THEN FOR a = 1 TO 2000: NEXT 1406 FOR a = 1 TO 200: NEXT 1410 IF RND > G1 * AK / (AK + DE) + G2 THEN 1440 1420 AK = AK - 1: LOCATE 23, 13 1430 W2 = 0: WS(0) = AK: GOSUB 5380 1440 IF AK <= 0 THEN GOSUB 1820: GOTO 1540 1450 IF I <= DE THEN 1400 1460 I = 0: REM ATTACKER FIRES 1470 I = I + 1 1475 FOR a = 1 TO 200: NEXT 1480 IF RND > G1 * DE / (AK + DE) + G2 THEN 1510 1490 DE = DE - 1: LOCATE 22, 13 1500 W2 = 0: WS(0) = DE: GOSUB 5380 1510 IF DE <= 0 THEN GOSUB 1680: GOTO 1540 1520 IF I <= AK THEN 1470 1530 GOTO 1390 1540 FC(F) = 0: GOSUB 5400: RETURN 1550 REM *** *** 1560 REM *** REINFORCEMENTS *** 1570 REM *** *** 1580 LOCATE 22, 2: CC$ = "World " + WL$(w) + ":": GOSUB 1870 1590 FOR a = 1 TO 2000: NEXT: LOCATE 22, 2 1600 CC$ = MID$(STR$(AK), 2) + " reinforcement" 1610 IF AK > 1 THEN CC$ = CC$ + "s" 1620 GOSUB 1870: LOCATE 23, 2: FOR a = 1 TO 1000: NEXT 1630 CC$ = "have arrived": IF AK = 1 THEN CC$ = "has arrived" 1640 GOSUB 1870 1650 WS(w) = DE + AK: W2 = w 1660 LOCATE w - 20 * INT(w / 21) + 1, 25 + 10 * INT(w / 21) + 1: GOSUB 5380 1670 GOTO 1540 1680 REM *** *** 1690 REM *** OUTCOME MESSAGES *** 1700 REM *** *** 1710 NEkey$ = INPUT$(1): GOSUB 5400 1720 LOCATE 22, 2: CC$ = "The attackers won!": GOSUB 1870 1730 wc(w) = FC(F): WS(w) = AK 1740 LOCATE WX(w), WY(w) 1750 COLOR PC(wc(w)): PRINT WL$(w) 1760 LOCATE w - 20 * INT(w / 21) + 1, 21 + 10 * INT(w / 21) + 1 1770 PRINT WL$(w); : COLOR PC(0) 1780 W2 = w: GOSUB 5360: RETURN 1790 GOSUB 5400 1800 LOCATE 22, 2: CC$ = "The attackers won": GOSUB 1870: LOCATE 23, 2 1810 CC$ = "without a fight !": GOSUB 1870: GOTO 1730 1820 NEkey$ = INPUT$(1): GOSUB 5400 1830 LOCATE 22, 2: CC$ = "The defenders": GOSUB 1870: LOCATE 23, 2 1840 CC$ = "survived the attack!": GOSUB 1870 1850 WS(w) = DE: IF wc(w) <> 0 THEN GOTO 1760 1860 RETURN 1870 REM *** *** 1880 REM *** TAP OUT MESSAGE *** 1890 REM *** *** 1900 FOR lp = 1 TO LEN(CC$) 1910 PRINT MID$(CC$, lp, 1); : GOSUB 450: FOR a = 1 TO 1000: FOR b = 1 TO 100: NEXT b: NEXT a 1920 NEXT lp: RETURN 1930 REM *** *** 1940 REM *** BUILD SHIPS *** 1950 REM *** *** 1960 FOR W2 = 1 TO wn 1970 IF AB = 0 AND wc(W2) = 0 THEN 2000 1980 WS(W2) = WS(W2) + WI(W2) 1990 IF wc(W2) > 0 THEN LOCATE W2 - 20 * INT(W2 / 21) + 1, 25 + 10 * INT(W2 / 21) + 1: COLOR PC(0): GOSUB 5380 2000 NEXT: RETURN 2010 REM *** *** 2020 REM *** MOVE FLEETS *** 2030 REM *** *** 2040 FOR F = 1 TO 100 2050 IF FC(F) = 0 THEN 2070 2060 IF FT(F) < t THEN GOSUB 1150 2070 NEXT F: RETURN 2080 REM *** *** 2090 REM *** Save game *** 2100 REM *** *** 2110 CLS : LOCATE 10, 2: INPUT "Put in the name of the game"; NA$ 2120 IF LEFT$(RIGHT$(NA$, 4), 1) = "." THEN NA$ = LEFT$(NA$, LEN(NA$) - 4) + ".gal" ELSE NA$ = NA$ + ".gal" 2130 OPEN NA$ FOR OUTPUT AS #1 2140 WRITE #1, NA$: FOR a = 1 TO 40 2150 WRITE #1, WL$(a), WL(a), WS(a), wc(a), WX(a), WY(a), WI(a), W2(a) 2160 NEXT 2170 FOR a = 1 TO 10: WRITE #1, LF(a), HF(a), PN$(a): NEXT 2180 FOR a = 1 TO 4: WRITE #1, N$(a): NEXT 2190 FOR a = 1 TO 20: WRITE #1, P(a), DO$(a): NEXT 2200 FOR a = 1 TO 100: WRITE #1, FS(a), FD(a), FC(a), FT(a): NEXT 2210 WRITE #1, PN, wn, TN, AB, t 2220 CLOSE #1: RETURN 2230 REM *** *** 2240 REM *** Load saved game *** 2250 REM *** *** 2260 CLS : LOCATE 10, 2: INPUT "Input name of saved game : "; NA$ 2270 IF LEN(NA$) > 8 THEN 2260 2280 NA$ = NA$ + ".gal" 2290 OPEN NA$ FOR INPUT AS #1 2300 INPUT #1, NO$ 2310 IF NA$ <> NO$ THEN PRINT : PRINT TAB(15); "ERROR": GOTO 2260 2320 FOR a = 1 TO 40 2330 INPUT #1, WL$(a), WL(a), WS(a), wc(a), WX(a), WY(a), WI(a), W2(a) 2340 NEXT 2350 FOR a = 1 TO 10: INPUT #1, LF(a), HF(a), PN$(a): NEXT 2360 FOR a = 1 TO 4: INPUT #1, N$(a): NEXT 2370 FOR a = 1 TO 20: INPUT #1, P(a), DO$(a): NEXT 2380 FOR a = 1 TO 100: INPUT #1, FS(a), FD(a), FC(a), FT(a): NEXT 2390 INPUT #1, PN, wn, TN, AB, t 2400 CLOSE #1: GOSUB 3990: GOSUB 5020: RETURN 2410 REM *** *** 2420 REM *** HELP & UTILITY OPTIONS *** 2430 REM *** *** 2440 CLS : COLOR PC(3): PRINT DO$(0) + " Help / Utility options" 2450 PRINT " "; : FOR a = 1 TO 22: PRINT BH$; : NEXT 2460 COLOR PC(1): LOCATE 6, 5: PRINT "c": LOCATE 8, 5: PRINT "e": LOCATE 10, 5 2470 PRINT "g": LOCATE 12, 5: PRINT "q": LOCATE 14, 5: PRINT "r": LOCATE 16, 5 2480 PRINT "s": LOCATE 18, 5: PRINT "f": LOCATE 20, 5: PRINT "n" + DO$(0) 2490 LOCATE 6, 6: COLOR PC(0): PRINT "- Change the # of turns" 2500 LOCATE 8, 6: PRINT "- End the game (for everyone)" 2510 LOCATE 10, 6: PRINT "- Go back to playing the game" 2520 LOCATE 12, 6: PRINT "- Quit the game (1 person)" 2530 LOCATE 14, 6: PRINT "- Review the instructions" 2540 LOCATE 16, 6: PRINT "- Save game" 2550 LOCATE 18, 6: PRINT "- Sound off" 2560 LOCATE 20, 6: PRINT "- Sound on" 2570 COLOR PC(3): LOCATE 22, 1: PRINT " Which option do you want"; 2580 IN$ = INPUT$(1) 2590 IF IN$ = "e" THEN GOSUB 2800: END 2600 IF IN$ = "r" THEN GOSUB 4070: GOTO 2410 2610 IF IN$ = "q" THEN GOSUB 2680: RETURN 2620 IF IN$ = "g" THEN GOSUB 5020: RETURN 2630 IF IN$ = "c" THEN GOSUB 2720: GOTO 2410 2640 IF IN$ = "s" THEN GOSUB 2080: GOTO 2410 2650 IF IN$ = "n" THEN SO = 999: GOSUB 5020: RETURN 2660 IF IN$ = "f" THEN SO = 0: GOSUB 5020: RETURN 2670 GOSUB 300: GOTO 2410 2680 FOR F = 1 TO 100: IF FC(F) = P THEN FC(F) = 0 2690 NEXT 2700 FOR w = 1 TO wn: IF wc(w) = P THEN wc(w) = 0 2710 NEXT: GOSUB 5020: RETURN 2720 CLS : COLOR PC(0): PRINT DO$(0) + DO$(1) + "It is now year"; t 2730 PRINT DO$(1) + "There were to have been"; TN; " years in": PRINT "total." 2740 COLOR PC(3): PRINT DO$(2) + "How many years do you want now" 2750 PRINT "("; MID$(STR$(t + 1), 2); "-1000) "; 2760 INPUT tt: tt = tt + 2010 2770 IF tt < t + 2001 OR tt > 3000 THEN GOSUB 300: GOTO 2720 2780 TN = tt: RETURN 2790 RETURN 2800 REM *** *** 2810 REM *** END OF GAME *** 2820 REM *** *** 2830 CLS : COLOR PC(3): PRINT DO$(0); " Final statistics :" 2840 PRINT " "; : FOR a = 1 TO 18: PRINT BH$; : NEXT: PRINT DO$(1) 2850 COLOR PC(0): PRINT " Admiral # of worlds # of ships" 2860 FOR a = 1 TO 9: PRINT BH$; : NEXT: PRINT " "; 2870 FOR a = 1 TO 11: PRINT BH$; : NEXT: PRINT " "; 2880 FOR a = 1 TO 10: PRINT BH$; : NEXT: PRINT 2890 N = 0: N2 = 0: FOR P = 1 TO PN: U = 0: S = 0 2900 FOR w = 1 TO wn: IF wc(w) = P THEN U = U + 1: S = S + WS(w) 2910 NEXT w 2920 FOR F = 1 TO 100: IF FC(F) = P THEN S = S + FS(F) 2930 NEXT F 2940 COLOR PC(P): PRINT PN$(P); TAB(16); 2950 COLOR PC(0): PRINT U; TAB(27); INT(S) 2960 IF U > N THEN N = U: N2 = 0 2970 IF U = N THEN N2 = N2 + 1 2980 NEXT P 2990 IF PN = 1 THEN 3170 3000 N3 = 0: PRINT DO$(1); 3010 IF N2 > 1 THEN COLOR PC(3): PRINT "There is a"; N2; "-way tie!" + DO$(1) 3020 COLOR PC(0): PRINT "Congratulations to Admiral"; 3030 IF N2 > 1 THEN PRINT "s"; 3040 FOR P = 1 TO PN: U = 0 3050 FOR w = 1 TO wn: IF wc(w) = P THEN U = U + 1 3060 NEXT w 3070 IF U <> N THEN 3100 3080 PRINT TAB(28); : COLOR PC(P): PRINT PN$(P); 3090 N3 = N3 + 1: IF N3 > 1 THEN PRINT TAB(24); : COLOR PC(0): PRINT "and"; 3100 IF U = N THEN PRINT 3110 NEXT P 3120 COLOR PC(3): PRINT DO$(1) + "Another game (y/n) ?" 3130 INPUT IN$ 3140 IF IN$ = "y" THEN PRINT DO$(0): RUN 3150 IF IN$ <> "n" THEN GOSUB 300: GOTO 3130 3160 CLS : PRINT DO$(0) + DO$(1) + "Good-bye !" + DO$(2): RETURN 3170 IF U = wn THEN PRINT DO$(2) + "Congratulations! You have succeeded!": GOTO 3120 3180 PRINT DO$(2) + "I'm glad you lost...you deserved it!": GOTO 3120 3190 RETURN 3200 REM *** *** 3210 REM *** MAIN PROGRAM *** 3220 REM *** *** 3230 GOSUB 3590: GOSUB 3990 3240 COLOR PC(2), 7: LOCATE 21, 2: INPUT "Load saved game (y/n)"; QW$ 3250 IF QW$ = "y" THEN GOSUB 2230: GOTO 3470 3260 COLOR PC(2), 7: LOCATE 23, 2 3270 PRINT "Do you want to see the rules (y/n)"; 3280 INPUT IN$ 3290 IF IN$ = "y" THEN 3320 3300 IF IN$ = "n" THEN 3330 3310 GOSUB 300: GOTO 3280 3320 GOSUB 4070 3330 GOSUB 4620 3340 GOSUB 4880 3350 GOSUB 5470: GOSUB 5590: GOSUB 5630 3360 t = 2010: GOSUB 5020 3370 LOCATE 22, 2: PRINT "Would you like a" 3380 LOCATE 23, 2: PRINT "different map"; 3390 INPUT IN$ 3400 IF IN$ = "y" THEN GOSUB 5400: LOCATE 22, 2: PRINT "Please wait...": GOTO 3340 3410 IF IN$ <> "n" THEN GOSUB 300: GOTO 3390 3420 GOSUB 5400 3430 REM *** *** 3440 REM *** BEGINNING OF GAME *** 3450 REM *** *** 3460 t = 2010 3470 GOSUB 5050: FOR P = 0 TO PN: P(P) = 0: NEXT 3480 P = INT(PN * RND + 1): IF P(P) = 1 THEN 3480 3490 P(P) = 1: P(0) = P(0) + 1 3500 GOSUB 660 3510 IF P(0) < PN THEN 3480 3520 LOCATE 22, 2: PRINT "Press + key"; : LOCATE 23, 2: PRINT "to turn year"; 3523 INPUT plus$: IF plus$ = "?" THEN GOSUB 2410 3525 IF plus$ <> "+" THEN 3520 3526 t = t + 1: LOCATE 24, 28 3530 PRINT t; DO$(0): GOSUB 1930 3540 GOSUB 2010 3550 FOR w = 1 TO wn: W2(w) = WS(w): NEXT 3560 IF t < TN THEN 3470 3570 GOSUB 2800 3580 END 3590 REM *** *** 3600 REM *** INTRODUCTION *** 3610 REM *** *** 3620 COLOR PC(0): LOCATE 3, 10: PRINT "WELCOME TO THE GAME OF" 3630 FOR a = 1 TO 1000: NEXT: CLS 3640 LOCATE 12, 13 3650 COLOR 15, 4: PRINT "GALACTIC EMPIRE" 3660 D$ = CHR$(0): ' Theme from Star Wars 3670 PLAY "mb t136 mn o3 l8" 3680 D$ = INKEY$: IF D$ = CHR$(13) THEN 3980 3690 PLAY "mb ddgfe-dc o2 b-ag o3 d2. l12 " 3700 D$ = INKEY$: IF D$ = CHR$(13) THEN 3980 3710 PLAY "mb t236 l6 o2 ddd l2 ml g o3 dd mn l6 c o2 ba l2 o3 ml gdd" 3720 D$ = INKEY$: IF D$ = CHR$(13) THEN 3980 3730 PLAY "mb mn l6 c o2 ba ml l2 o3 gdd mn l6 c o2 b o3 c l2 ml o2 a1a4 p4 mn" 3740 D$ = INKEY$: IF D$ = CHR$(13) THEN 3980 3750 PLAY "mb t236 l6 o2 ddd l2 ml g o3 dd mn l6 c o2 ba l2 o3 ml gdd" 3760 D$ = INKEY$: IF D$ = CHR$(13) THEN 3980 3770 PLAY "mb mn l6 c o2 ba ml l2 o3 gdd mn l6 c o2 b o3 c l2 ml o2 a1a4 p4 mn" 3780 D$ = INKEY$: IF D$ = CHR$(13) THEN 3980 3790 PLAY "mb t136 mn o3 l8" 3800 D$ = INKEY$: IF D$ = CHR$(13) THEN 3980 3810 PLAY "mb p4 mn o2 l8 d4 e4.e o3c o2 bag l12 gab l8 a8. e16f+4d8. d" 3820 D$ = INKEY$: IF D$ = CHR$(13) THEN 3980 3830 PLAY "mb e4.e o3 c o2 bag o3 d8.o2 a16 ml a4a4 mn d4 e4.e O3 c o2 bag " 3840 D$ = INKEY$: IF D$ = CHR$(13) THEN 3980 3850 PLAY "mb l12 gaba8. e16 f+4 o3 d8. d16 l16 g8. fe-8. d c8. o2 b-a8. g" 3860 D$ = INKEY$: IF D$ = CHR$(13) THEN 3980 3870 PLAY "mb o3 d2" 3880 D$ = INKEY$: IF D$ = CHR$(13) THEN 3980 3890 PLAY "mb t236 l6 o2 ddd l2 ml g o3 dd mn l6 c o2 ba l2 o3 ml gdd" 3900 D$ = INKEY$: IF D$ = CHR$(13) THEN 3980 3910 PLAY "mb mn l6 c o2 ba ml l2 o3 gdd mn l6 co2 b o3c l2 ml o2a1a4 p4 mn" 3920 D$ = INKEY$: IF D$ = CHR$(13) THEN 3980 3930 PLAY "mb t236 l6 o2 ddd l2 ml g o3 dd mn l6 c o2 ba l2 o3 ml gdd" 3940 D$ = INKEY$: IF D$ = CHR$(13) THEN 3980 3950 PLAY "mb mn l6 c o2ba ml l2 o3gdd mn l6 co2bo3c l2 ml o2a1a4 p4 mn" 3960 D$ = INKEY$: IF D$ = CHR$(13) THEN 3980 3970 PLAY "mb l6 o3 mn ddd ml l1 gggg4 p4 p4 mn l12 dddg2" 3980 RETURN 3990 REM *** *** 4000 REM *** INITIALIZE VARIABLES *** 4010 REM *** *** 4020 P = 1: G1 = .8: G2 = .03 4030 REM *** *** 4040 REM *** DIMENSION ARRAYS *** 4050 REM *** *** 4060 RETURN 4070 REM *** *** 4080 REM *** INSTRUCTIONS *** 4090 REM *** *** 4100 CLS : SCREEN 7: PRINT TAB(14); : COLOR PC(1): PRINT "Instructions" 4110 PRINT TAB(14); : FOR a = 1 TO 12: PRINT CHR$(205); : NEXT: PRINT 4120 COLOR 2, 7: PRINT DO$(1) + "THE OBJECT OF THIS GAME IS TO CONTROL" 4130 PRINT DO$(1) + "MORE PLANETS BY THE END OF THE GAME THAN" 4140 PRINT "ANY OF YOUR OPPONENTS. TO DO THIS, YOU" 4150 PRINT DO$(1) + "SEND OUT FLEETS OF SHIPS TO OTHER STARS" 4160 PRINT DO$(1) + "(EACH OF WHICH HAS 1 HABITABLE, AND" 4170 PRINT DO$(1) + "PERHAPS OCCUPIED, PLANET). YOUR HOME" 4180 PRINT DO$(1) + "WORLD HAS AN INDUSTRIAL CAPACITY OF 10" 4190 PRINT DO$(1) + "SHIPS PER YEAR. THE WORLDS YOU ATTACK" 4200 PRINT DO$(1) + "MAY HAVE INDUSTRIAL CAPACITY AND SHIPS" 4210 PRINT DO$(1) + "ON DEFENSE." 4220 COLOR 8, 7: PRINT DO$(1) + " Press ENTER to continue." 4230 INPUT AA$ 4240 CLS : PRINT TAB(9); PC$(1); "Instructions Continued" 4250 PRINT TAB(9); : FOR a = 1 TO 22: PRINT CHR$(205); : NEXT: PRINT 4260 COLOR 2, 7: PRINT DO$(1) + "ORDERS FOR LAUNCHING FLEETS REQUIRE 3" 4270 PRINT DO$(1) + "PIECES OF DATA :" 4280 COLOR 4, 7: PRINT DO$(1) + " 1. PLANET OF ORIGIN (BY CODE)" 4290 PRINT DO$(1) + " 2. DESTINATION" 4300 PRINT DO$(1) + " 3. # OF SHIPS IN FLEET" 4310 COLOR 2, 7: PRINT DO$(1) + "YOUR FLEET ORDERS WILL BE INVISIBLE AS" 4320 PRINT DO$(1) + "YOU ENTER THEM TO PROTECT YOUR SECRECY." 4330 PRINT DO$(1) + "PRESS "; 4340 COLOR 4, 7: PRINT "ENTER"; 4350 COLOR 2, 7: PRINT " WHEN YOU ARE FINISHED" 4360 PRINT DO$(1) + "ENTERING ORDERS. FOR HELP, TYPE A '?'." 4370 COLOR 8, 7: PRINT DO$(1) + " Press ENTER to continue." 4380 INPUT AA$ 4390 CLS : PRINT TAB(9); : COLOR PC(1): PRINT "Instructions Continued" 4400 PRINT TAB(9); : FOR a = 1 TO 22: PRINT CHR$(205); : NEXT: PRINT 4410 COLOR 2, 7: PRINT DO$(1) + "FLEETS TRAVEL AT A SPEED OF 3 PER YEAR" 4420 PRINT DO$(1) + "(1 TURN=1 YEAR) AFTER ONE ACCELERATION" 4430 PRINT DO$(1) + "YEAR IN WHICH THEY MOVE ONLY 2." 4440 PRINT DO$(1) + "SEPARATE FLEETS ATTACK SEPARATELY, EVEN" 4450 PRINT DO$(1) + "IF THEY ARRIVE AT THE SAME WORLD IN THE" 4460 PRINT DO$(1) + "SAME YEAR. ONCE A FLEET HAS BEEN" 4470 PRINT DO$(1) + "LAUNCHED, ITS ORDERS CANNOT BE CHANGED." 4480 PRINT DO$(1) + "PLAYERS WILL MOVE IN A RANDOM ORDER EACH" 4490 PRINT "TURN." 4500 COLOR 8, 7: PRINT DO$(1) + " Press ENTER to continue." 4510 INPUT AA$ 4520 CLS : PRINT TAB(9); : COLOR PC(1): PRINT "Instructions Continued" 4530 PRINT TAB(9); : FOR a = 1 TO 22: PRINT CHR$(205); : NEXT: PRINT 4540 COLOR 2, 7: PRINT DO$(1) + "TO PLAY SOLITAIRE, MAKE THE NUMBER OF" 4550 PRINT DO$(1) + "YEARS EQUAL TO THE NUMBER OF WORLDS." 4560 PRINT DO$(1) + "TO WIN, YOU MUST CONTROL ALL PLANETS BY" 4570 PRINT DO$(1) + "THE END OF THE GAME." 4580 PRINT DO$(2); " "; PC$(2); "GOOD LUCK " + DO$(5) 4590 COLOR 8, 7: PRINT DO$(1) + " Press ENTER to continue." 4600 INPUT AA$ 4610 RETURN 4620 REM *** *** 4630 REM *** PLAYER INPUT (SETUP) *** 4640 REM *** *** 4650 CLS : L$ = CHR$(29): COLOR PC(2): LOCATE 3, 5: 4660 PRINT "How many players (1-10) : "; : INPUT PN 4670 IF PN < 1 OR PN > 10 THEN GOSUB 300: GOTO 4650 4680 PN = INT(PN) 4690 FOR a = 1 TO PN 4700 PRINT DO$(1) + "Player #"; a; "is : "; 4710 INPUT PN$(a) 4720 IF LEN(PN$(a)) > 9 THEN PN$(a) = LEFT$(PN$(a), 9) 4730 NEXT a 4740 MN = 5: IF PN > 5 THEN MN = PN 4750 CLS : PRINT DO$(2) + "How many worlds ("; 4760 PRINT MN; "- 40) : "; : INPUT wn 4770 IF wn < MN OR wn > 40 THEN GOSUB 300: GOTO 4750 4780 wn = INT(wn) 4790 CLS : PRINT DO$(2); "How many years in the game (10-1000)" 4800 LOCATE 5, 15: INPUT TN: TN = TN + 2010 4810 IF TN < 2020 OR TN > 3020 THEN GOSUB 300: GOTO 4790 4820 PRINT DO$(2) + "Do you want the neutral worlds to build" 4830 PRINT DO$(1) + "defensive ships (y/n)"; 4840 INPUT IN$: IF IN$ <> "y" AND IN$ <> "n" THEN GOSUB 300: GOTO 4840 4850 AB = 0: IF IN$ = "y" THEN AB = 1 4860 LOCATE 18, 2: PRINT "Please wait..." 4870 RETURN 4880 REM *** *** 4890 REM *** GENERATE STARS *** 4900 REM *** *** 4910 RANDOMIZE TIMER 4920 WX(1) = 1 + INT(RND * 20) 4930 WY(1) = 1 + INT(RND * 20) 4940 FOR w = 2 TO wn 4950 WX(w) = 1 + INT(RND * 20) 4960 WY(w) = 1 + INT(RND * 20) 4970 I = 1 4980 IF WX(w) = WX(I) AND WY(w) = WY(I) THEN 4950 4990 I = I + 1: IF I < w THEN 4980 5000 NEXT 5010 RETURN 5020 REM *** *** 5030 REM *** SCREEN DISPLAY *** 5040 REM *** *** 5050 CLS : COLOR PC(0) 5060 PRINT CHR$(218); : FOR a = 1 TO 18: PRINT CHR$(194); : NEXT 5070 PRINT CHR$(191) + CHR$(201); : FOR a = 1 TO 8: PRINT CHR$(205); : NEXT 5080 PRINT CHR$(203) + CHR$(203); : FOR a = 1 TO 8: PRINT CHR$(205); : NEXT 5090 PRINT CHR$(187) 5100 FOR a = 1 TO 18: PRINT CHR$(195); : FOR b = 1 TO 18: 5110 PRINT CHR$(197); : NEXT: PRINT CHR$(180) + CHR$(186) + " "; 5120 PRINT CHR$(186) + CHR$(186) + " " + CHR$(186): NEXT 5130 PRINT CHR$(192); : FOR a = 1 TO 18: PRINT CHR$(193); : NEXT 5140 PRINT CHR$(217) + CHR$(186) + " " + CHR$(186) + CHR$(186); 5150 PRINT " " + CHR$(186) 5160 PRINT CHR$(201); : FOR a = 1 TO 18: PRINT CHR$(205); : NEXT 5170 PRINT CHR$(187) + CHR$(186) + " " + CHR$(186); 5180 PRINT CHR$(186) + " " + CHR$(186) 5190 PRINT CHR$(186) + " " + CHR$(186) + CHR$(186); 5200 PRINT " " + CHR$(186) + CHR$(186) + " " + CHR$(186) 5210 PRINT CHR$(186) + " " + CHR$(186); 5220 PRINT CHR$(200); : FOR a = 1 TO 8: PRINT CHR$(205); : NEXT 5230 PRINT CHR$(202) + CHR$(202); : FOR a = 1 TO 8: PRINT CHR$(205); : NEXT 5240 PRINT CHR$(188) 5250 PRINT CHR$(200); : FOR a = 1 TO 18: PRINT CHR$(205); : NEXT 5260 PRINT CHR$(188); " Year :"; t; CHR$(11): R$ = CHR$(28) 5270 LOCATE 1, 22: PRINT "W Pr Shp" + R$ + R$ + "W Pr Shp" 5280 FOR W2 = 1 TO wn 5290 PS = 40 * WY(W2) + WX(W2) 5300 LOCATE WX(W2), WY(W2) 5310 COLOR PC(wc(W2)): PRINT WL$(W2) 5320 LOCATE W2 - 20 * INT(W2 / 21) + 1, 22 + 10 * INT(W2 / 21) 5330 PRINT WL$(W2); 5340 IF wc(W2) <> 0 THEN GOSUB 5360 5350 COLOR PC(0): NEXT: RETURN 5360 S$ = MID$(STR$(WI(W2)), 2) 5370 S$ = LEFT$(" ", 3 - LEN(S$)) + S$: PRINT S$; 5380 S$ = MID$(STR$(INT(WS(W2))), 2): S$ = LEFT$(" ", 5 - LEN(S$)) + S$ 5390 PRINT S$; : COLOR PC(0): RETURN 5400 REM *** *** 5410 REM *** CLEAR BOX *** 5420 REM *** *** 5430 LOCATE 22, 2: PRINT " " + CHR$(186) + CHR$(186) 5440 LOCATE 23, 2: PRINT " " + CHR$(186) + CHR$(200) + CHR$(205) 5450 REM PRINT D3$ + " " + CHR$(186) 5460 RETURN 5470 REM *** *** 5480 REM *** WORLD INDUSTRY SETUP *** 5490 REM *** *** 5500 FOR P = 1 TO wn: WI(P) = 10: NEXT 5510 IF PN = wn THEN RETURN 5520 FOR w = PN + 1 TO wn 5530 IF RND < .25 THEN 5570 5540 WI(w) = WI(w) + INT(2.5 * RND) 5550 IF WI(w) < 10 THEN 5540 5555 IF WI(w) > 75 THEN WI(w) = INT(WI(w) * 1.2) 5560 IF RND < .67 THEN 5540 ELSE 5570 NEXT w: sum = 0: tt = 0 5572 FOR a = PN + 1 TO wn: tt = tt + 1: sum = sum + WI(a): NEXT 5574 IF sum / tt < 35 OR sum / tt > 60 THEN 5520 5580 RETURN 5590 REM *** *** 5600 REM *** WORLD CONTROL SETUP *** 5610 REM *** *** 5620 FOR P = 1 TO PN: wc(P) = P: NEXT: RETURN 5630 REM *** *** 5640 REM *** WORLD SHIP SETUP *** 5650 REM *** *** 5660 FC = 2 + RND 5670 FOR P = 1 TO PN 5680 WS(P) = 12 * wn - 15 * PN 5690 FOR I = 1 TO PN 5700 WS(P) = WS(P) + 300 / (FNDS(I) + 6) 5710 NEXT I 5720 FOR w = PN + 1 TO wn 5730 WS(P) = WS(P) - 100 / (FNDS(w) + 3) 5740 NEXT w 5750 IF WS(P) < 50 THEN WS(P) = 50 5760 W2(P) = WS(P) 5770 WS(P) = FC * WS(P): NEXT P 5780 FOR w = PN + 1 TO wn 5790 WS(w) = WS(w) + (WI(w) + 2.2) * RND 5800 IF WS(w) < 100 THEN 5790 5805 IF WS(w) > 600 THEN WS(w) = INT(WS(w) / 2) 5810 IF RND < .67 THEN 5790 5820 W2(w) = WS(w) 5830 NEXT w: tt = 0: sum = 0 5834 FOR a = PN + 1 TO wn: tt = tt + 1: sum = sum + WS(a): NEXT 5836 IF sum / tt < 250 OR sum / tt > 450 THEN 5780 5840 RETURN 5850 END 5860 REM *** *** 5870 REM *** COLOURS *** 5880 REM *** *** 5890 DATA 8,1,4,15,5,12,14,9,6,10,2