' *** GALCON *** ' 11/07/1996 - Begun. ' 10/16/1998 ' 09/07/1999 ' 09/17/2000 - No resolution to battles. Work halted. ' June 2016 - Working version. ' Nov 2017 - Bug fixes. ' MAY 2018 - Menus DECLARE SUB CalculateDelay () DECLARE SUB Banner () DECLARE SUB Clearbuffer () DECLARE SUB NavigatorEnd () DECLARE SUB EndGame () DECLARE SUB RedBox () DECLARE SUB LastScreen () DECLARE SUB DrawGameBox () DECLARE SUB AttackScreen () DECLARE SUB AddTurns () DECLARE SUB Navigator () DECLARE SUB AttackPlanet2 () DECLARE SUB TravelThruSpace2 () DECLARE SUB AttackPlanet () DECLARE SUB TravelThroughSpace () DECLARE SUB ProcessMoves () DECLARE SUB RedrawScreen () DECLARE SUB AssignOWNER () DECLARE SUB DRAWBOARD () DECLARE SUB GETPLANETS () DECLARE SUB StatsScreen () DECLARE SUB Assignships () DECLARE SUB AssignKILL () DECLARE SUB AssignProduction () DECLARE SUB OpeningScreens () DECLARE SUB PopulateStats () DECLARE SUB EnterMOVES () DECLARE SUB EnterMOVES2 () DECLARE SUB Event () DECLARE SUB THEKEEP () DECLARE SUB SaveFile () DECLARE SUB Menu () DECLARE SUB RunGame () DECLARE SUB LoadFile () DECLARE SUB Messages () DECLARE SUB AutoSaveGame () ' Make arrays dynamic. ' $DYNAMIC CLEAR DIM SHARED Planet$(40), XPOSITION(40), YPOSITION(40) DIM SHARED PLANETSHIPS(40), PLANETKILL(40) DIM SHARED PLANETPRODUCTION(40), PlanetOwner$(40) DIM SHARED Planets, Player, Player1$, Player2$, MAXTURNS, move, move2 DIM SHARED P1from$(1600), P1To$(1600), P1ships(1600), TurnNumber DIM SHARED P2from$(1600), P2To$(1600), P2ships(1600) DIM SHARED planetposition(40), PlanetXposition(40), PlanetYposition(40) DIM SHARED AttackerOne$(1600), AttackerTwo$(1600) DIM SHARED Check1(250), Check2(250) DIM SHARED player1loop, player2loop, atk, Attacker$, Attacker2$ DIM SHARED AttackedPlanet$, Cron, Backupflag, filename$, FOIL$, AskingInput$ DIM SHARED Message$(100), Remark$, AutoSave$ _FULLSCREEN _SQUAREPIXELS , _SMOOTH StartTheGame: Remark$ = "ON" AutoSave$ = "ON" move = 1: move2 = 1 CLS 'CALL CalculateDelay CALL OpeningScreens CALL DRAWBOARD CALL AssignOWNER CALL GETPLANETS CALL StatsScreen CALL Assignships CALL AssignProduction CALL AssignKILL CALL PopulateStats CALL RunGame DATA A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,1,2,3,4,5,6,7,8,9,0,[,;,],/ REM $STATIC SUB AddTurns 'Draw Stats window COLOR 11, 4 LOCATE 1, 1: PRINT CHR$(201) LOCATE 24, 1: PRINT CHR$(200) LOCATE 1, 40: PRINT CHR$(187) LOCATE 24, 40: PRINT CHR$(188) FOR y = 2 TO 39: LOCATE 1, y: PRINT CHR$(205): NEXT y FOR y = 2 TO 39: LOCATE 24, y: PRINT CHR$(205): NEXT y FOR x = 2 TO 23: LOCATE x, 1: PRINT CHR$(186): NEXT x FOR x = 2 TO 23: LOCATE x, 40: PRINT CHR$(186): NEXT x COLOR 4, 4 FOR z = 2 TO 23 LOCATE z, 2: PRINT SPACE$(38) NEXT z COLOR 11, 4 LOCATE 7, 5 PRINT "The next turn will be your last!" LOCATE 10, 3 PRINT "Do you want to add more turns? (Y/N)" COLOR 4, 4: LOCATE 11, 3 DO MakeUpYourMind$ = INKEY$ IF MakeUpYourMind$ = "n" OR MakeUpYourMind$ = "N" THEN EXIT SUB IF MakeUpYourMind$ = "y" OR MakeUpYourMind$ = "Y" THEN COLOR 14, 1 LOCATE 13, 4 LINE INPUT "How Many --> "; moreturns$ moreturns = VAL(moreturns$) MAXTURNS = MAXTURNS + moreturns EXIT DO END IF LOOP 'WHILE INKEY$ = "" END SUB SUB AssignKILL FOR PlanetCount = 1 TO Planets fortykill: RANDOMIZE TIMER randomkill = INT(RND * 80) IF randomkill > 50 OR randomkill < 15 THEN GOTO fortykill PLANETKILL(PlanetCount) = randomkill NEXT PlanetCount 'Give planets A and B 10 a kill of 40 PLANETKILL(1) = 40: PLANETKILL(2) = 40 END SUB SUB AssignOWNER FOR assigned = 1 TO Planets PlanetOwner$(assigned) = "Neutral" NEXT assigned IF TurnNumber = 0 THEN PlanetOwner$(1) = Player1$ PlanetOwner$(2) = Player2$ END IF END SUB SUB AssignProduction FOR PlanetCount = 1 TO Planets tenprod: RANDOMIZE TIMER randomprod = INT(RND * 30) IF randomprod > 10 THEN GOTO tenprod IF randomprod < 3 THEN GOTO tenprod PLANETPRODUCTION(PlanetCount) = randomprod NEXT PlanetCount 'Give planets A and B a production of 10 PLANETPRODUCTION(1) = 10: PLANETPRODUCTION(2) = 10 END SUB SUB Assignships FOR PlanetCount = 1 TO Planets tenships: RANDOMIZE TIMER randomship = INT(RND * 30) IF randomship > 10 OR randomship = 0 THEN GOTO tenships PLANETSHIPS(PlanetCount) = randomship NEXT PlanetCount 'Give planets A and B 10 ships PLANETSHIPS(1) = 10: PLANETSHIPS(2) = 10 END SUB SUB AttackPlanet CALL AttackScreen COLOR 14, 4 FOR LOOPS = 1 TO Planets FOR attack = 1 TO move IF Planet$(LOOPS) <> AttackedPlanet$ THEN EXIT FOR IF P1ships(attack) = 0 THEN GOTO SkipAttack 'keeps the loops in sync IF attack <> player1loop GOTO SkipAttack 'keeps the loops in sync IF P1To$(attack) = Planet$(LOOPS) THEN LOCATE PlanetXposition(LOOPS), PlanetYposition(LOOPS) IF PlanetOwner$(LOOPS) = Player1$ THEN COLOR 31, 0: PRINT Planet$(LOOPS): GOTO DoneBlinking IF PlanetOwner$(LOOPS) = Player2$ THEN COLOR 26, 0: PRINT Planet$(LOOPS): GOTO DoneBlinking COLOR 22, 0: PRINT Planet$(LOOPS) DoneBlinking: COLOR 31, 0 LOCATE PlanetXposition(LOOPS), PlanetYposition(LOOPS) - 1: PRINT CHR$(221) LOCATE PlanetXposition(LOOPS), PlanetYposition(LOOPS) + 1: PRINT CHR$(222) COLOR 14, 4 FOR x = 21 TO 23: LOCATE x, 49: PRINT " ": NEXT x LOCATE 22, 51: PRINT Player1$; " attacking planet "; Planet$(LOOPS) 'Find the Kill % of attacker FOR find = 1 TO Planets IF Planet$(find) = Attacker$ THEN AttackerKill = PLANETKILL(find) NEXT find 'Find the Kill % of defender DefenderKill = PLANETKILL(LOOPS) 'Add random Kill % to defender. RANDOMIZE TIMER BoostKill: NewKill = INT(RND * 80) IF NewKill > 31 OR NewKill < 5 THEN GOTO BoostKill 'LOCATE 20 'PRINT "ATTACKER KILL % IS "; AttackerKill 'PRINT "DEFENDER KILL % IS "; DefenderKill 'PRINT "TEMP BOOST OF DEFENDER KILL IS "; NewKill; " %" DefenderKill = DefenderKill + NewKill IF DefenderKill > 60 THEN DefenderKill = 60 'PRINT "NEW DEFENDER KILL % IS "; DefenderKill 'check for a reinforcement IF PlanetOwner$(LOOPS) = Player1$ THEN PLANETSHIPS(LOOPS) = PLANETSHIPS(LOOPS) + P1ships(attack) FOR x = 21 TO 23: LOCATE x, 49: PRINT " ": NEXT x COLOR 14, 4 FOR x = 21 TO 23: LOCATE x, 49: PRINT " ": NEXT x LOCATE 21, 55 PRINT PlanetOwner$(LOOPS); " sent" LOCATE 22, 49: PRINT P1ships(attack); "Reinforcements to planet "; AttackedPlanet$ LOCATE 23, 56: PRINT "Push Any Key" DO anykey$ = INKEY$ IF anykey$ <> "" THEN EXIT DO LOOP WHILE INKEY$ = "" CALL Clearbuffer P1ships(attack) = 0 'Ships are on the planet now. LOCATE PlanetXposition(LOOPS), PlanetYposition(LOOPS) IF PlanetOwner$(LOOPS) = Player1$ THEN COLOR 15, 0: PRINT Planet$(LOOPS): GOTO DoneColor IF PlanetOwner$(LOOPS) = Player2$ THEN COLOR 10, 0: PRINT Planet$(LOOPS): GOTO DoneColor COLOR 6, 0: PRINT Planet$(LOOPS) DoneColor: COLOR 0, 0 LOCATE PlanetXposition(LOOPS), PlanetYposition(LOOPS) - 1: PRINT CHR$(221) LOCATE PlanetXposition(LOOPS), PlanetYposition(LOOPS) + 1: PRINT CHR$(222) COLOR 14, 4 EXIT FOR END IF LOCATE 6, 4: PRINT "Attacker: "; Player1$ LOCATE 8, 4: PRINT "Kill="; AttackerKill; "%" Startedwith = P1ships(attack) LOCATE 10, 4: PRINT "Started With" LOCATE 11, 8: PRINT Startedwith LOCATE 13, 4: PRINT "# Ships Left" COLOR 15, 2 LOCATE 6, 23: PRINT "Defender: "; PlanetOwner$(LOOPS) LOCATE 8, 23: PRINT "Kill="; DefenderKill; "%" 'Startedwith = P1ships(attack) LOCATE 10, 23: PRINT "Started With" LOCATE 11, 27: PRINT PLANETSHIPS(LOOPS) LOCATE 13, 23: PRINT "# Ships Left" '***************** HERE IS THE ACTUAL BATTLE ********************* WHILE PLANETSHIPS(LOOPS) > 0 'TO TAKE INTO ACCOUNT THE KILL PERCENTAGE DURING A BATTLE WE GENERATE A 'RANDOM NUMBER BETWEEN 20 AND 80 FOR EACH BATTLE. DeathMaker: ChanceOfDeath = INT(RND * 99) IF ChanceOfDeath > 80 OR ChanceOfDeath < 20 THEN GOTO DeathMaker 'LOCATE 18, 1 'PRINT "ChanceOfDeath is"; ChanceOfDeath; "%" 'NOW WE HAVE A CHANCE OF DEATH. IF THIS NUMBER IS GREATER THAN THE KILL 'PERCENTAGE, A SHIP DIES. THIS NUMBER CHANGES WITH EACH ATTACK. 'THE PREMISE IS THAT A HIGHER KILL PERCENT WILL MEAN A GREATER CHANCE 'IT WILL BE HIGHER THAN THE CHANCE OF DEATH, AND WILL LIVE. THEREFORE... IF AttackerKill < ChanceOfDeath THEN P1ships(attack) = P1ships(attack) - 1 END IF COLOR 14, 4 LOCATE 14, 8: PRINT P1ships(attack) 'Speed up the attack for large # of ships IF P1ships(attack) > 1 AND PLANETSHIPS(LOOPS) > 1 THEN Pace = .5 IF P1ships(attack) > 15 AND PLANETSHIPS(LOOPS) > 15 THEN Pace = .3 IF P1ships(attack) > 25 AND PLANETSHIPS(LOOPS) > 25 THEN Pace = .1 IF P1ships(attack) > 50 AND PLANETSHIPS(LOOPS) > 50 THEN Pace = .05 IF P1ships(attack) > 75 AND PLANETSHIPS(LOOPS) > 75 THEN Pace = .02 IF P1ships(attack) > 100 AND PLANETSHIPS(LOOPS) > 100 THEN Pace = .01 IF P1ships(attack) > 150 AND PLANETSHIPS(LOOPS) > 150 THEN Pace = .005 'IF P1ships(attack) > 170 AND PLANETSHIPS(LOOPS) > 170 THEN Pace = INT(Cron / 60) _DELAY Pace IF P1ships(attack) = 0 THEN GOTO BATTLEOVER IF DefenderKill < ChanceOfDeath THEN PLANETSHIPS(LOOPS) = PLANETSHIPS(LOOPS) - 1 END IF LOCATE 14, 27 COLOR 15, 2 PRINT PLANETSHIPS(LOOPS) _DELAY Pace COLOR 14, 4 IF PLANETSHIPS(LOOPS) = 0 THEN GOTO BATTLEOVER 'NEXT battle WEND '****************************************************************** BATTLEOVER: FOR x = 21 TO 23: LOCATE x, 49: PRINT " ": NEXT x 'LOCATE 22, 51: PRINT P1ships(attack); PLANETSHIPS(LOOPS) 'SLEEP IF PLANETSHIPS(LOOPS) > 0 THEN FOR x = 21 TO 23: LOCATE x, 49: PRINT " ": NEXT x LOCATE 22, 51: PRINT "Planet Is Retained" LOCATE 23, 51: PRINT "Push Any Key" DO anykey$ = INKEY$ IF anykey$ <> "" THEN EXIT DO LOOP WHILE INKEY$ = "" CALL Clearbuffer LOCATE PlanetXposition(LOOPS), PlanetYposition(LOOPS) IF PlanetOwner$(LOOPS) = Player1$ THEN COLOR 15, 0: PRINT Planet$(LOOPS): GOTO NotBlinking IF PlanetOwner$(LOOPS) = Player2$ THEN COLOR 10, 0: PRINT Planet$(LOOPS): GOTO NotBlinking COLOR 6, 0: PRINT Planet$(LOOPS) NotBlinking: COLOR 0, 0 LOCATE PlanetXposition(LOOPS), PlanetYposition(LOOPS) - 1: PRINT CHR$(221) LOCATE PlanetXposition(LOOPS), PlanetYposition(LOOPS) + 1: PRINT CHR$(222) COLOR 14, 4 END IF IF P1ships(attack) > 0 THEN PlanetOwner$(LOOPS) = Player1$ PLANETSHIPS(LOOPS) = P1ships(attack) 'Ships are now on the planet: P1ships(attack) = 0 COLOR 14, 4 FOR x = 21 TO 23: LOCATE x, 49: PRINT " ": NEXT x LOCATE 22, 51: PRINT "Planet Is Invaded By "; Player1$ LOCATE 23, 51: PRINT "Push Any Key" LOCATE PlanetXposition(LOOPS), PlanetYposition(LOOPS) IF PlanetOwner$(LOOPS) = Player1$ THEN COLOR 15, 0: PRINT Planet$(LOOPS): GOTO NoBlink IF PlanetOwner$(LOOPS) = Player2$ THEN COLOR 10, 0: PRINT Planet$(LOOPS): GOTO NoBlink COLOR 6, 0: PRINT Planet$(LOOPS) NoBlink: DO anykey$ = INKEY$ IF anykey$ <> "" THEN EXIT DO LOOP WHILE INKEY$ = "" CALL Clearbuffer COLOR 14, 4 FOR x = 21 TO 23: LOCATE x, 49: PRINT " ": NEXT x ' COLOR 0, 0 ' LOCATE PlanetXposition(loops), PlanetYposition(loops) - 1: PRINT CHR$(221) ' LOCATE PlanetXposition(loops), PlanetYposition(loops) + 1: PRINT CHR$(222) END IF COLOR 0, 0 LOCATE PlanetXposition(LOOPS), PlanetYposition(LOOPS) - 1: PRINT CHR$(221) LOCATE PlanetXposition(LOOPS), PlanetYposition(LOOPS) + 1: PRINT CHR$(222) COLOR 14, 4 END IF 'CLS 'PRINT "loops= "; loops 'PRINT "move="; move 'PRINT "attack= "; attack 'PRINT "planet$(loops)= "; planet$(loops) 'PRINT "P1from$(attack)= "; P1from$(attack) 'PRINT "P1to$(attack= "; P1to$(attack) 'PRINT "PLANETSHIPS(loops)= "; PLANETSHIPS(loops) 'PRINT "P1ships(attack)= "; P1ships(attack) 'PRINT "P1ships(1)= "; P1ships(1) 'PRINT "PlanetOwner$(loops)= "; PlanetOwner$(loops) 'SLEEP SkipAttack: NEXT: NEXT CALL Event END SUB SUB AttackPlanet2 CALL AttackScreen COLOR 14, 4 FOR LOOPS = 1 TO Planets FOR attack = 1 TO move2 IF Planet$(LOOPS) <> AttackedPlanet$ THEN EXIT FOR IF P2ships(attack) = 0 THEN GOTO SkipAttack2 'keeps the loops in sync IF attack <> player2loop GOTO SkipAttack2 'keeps the loops in sync IF P2To$(attack) = Planet$(LOOPS) THEN LOCATE PlanetXposition(LOOPS), PlanetYposition(LOOPS) IF PlanetOwner$(LOOPS) = Player1$ THEN COLOR 31, 0: PRINT Planet$(LOOPS): GOTO DoneBlinking2 IF PlanetOwner$(LOOPS) = Player2$ THEN COLOR 26, 0: PRINT Planet$(LOOPS): GOTO DoneBlinking2 COLOR 22, 0: PRINT Planet$(LOOPS) ': COLOR 14, 4 DoneBlinking2: COLOR 31, 0 LOCATE PlanetXposition(LOOPS), PlanetYposition(LOOPS) - 1: PRINT CHR$(221) LOCATE PlanetXposition(LOOPS), PlanetYposition(LOOPS) + 1: PRINT CHR$(222) COLOR 14, 4 FOR x = 21 TO 23: LOCATE x, 49: PRINT " ": NEXT x LOCATE 22, 51: PRINT Player2$; " attacking planet "; Planet$(LOOPS) 'Find the Kill % of attacker FOR find = 1 TO Planets IF Planet$(find) = Attacker2$ THEN AttackerKill = PLANETKILL(find) NEXT find 'Find the Kill % of defender DefenderKill = PLANETKILL(LOOPS) 'Add random Kill % to defender. RANDOMIZE TIMER BoostKill2: NewKill = INT(RND * 80) IF NewKill > 31 OR NewKill < 5 THEN FOR x = 1 TO 300: NEXT x 'wait a bit RANDOMIZE TIMER GOTO BoostKill2 END IF 'LOCATE 20 'PRINT "ATTACKER KILL % IS "; AttackerKill 'PRINT "DEFENDER KILL % IS "; DefenderKill 'PRINT "TEMP BOOST OF DEFENDER KILL IS "; NewKill; " %" DefenderKill = DefenderKill + NewKill IF DefenderKill > 60 THEN DefenderKill = 60 'PRINT "NEW DEFENDER KILL % IS "; DefenderKill 'check for a reinforcement IF PlanetOwner$(LOOPS) = Player2$ THEN PLANETSHIPS(LOOPS) = PLANETSHIPS(LOOPS) + P2ships(attack) FOR x = 21 TO 23: LOCATE x, 49: PRINT " ": NEXT x COLOR 14, 4 FOR x = 21 TO 23: LOCATE x, 49: PRINT " ": NEXT x LOCATE 21, 55 PRINT PlanetOwner$(LOOPS); " sent" LOCATE 22, 49: PRINT P2ships(attack); "Reinforcements to planet "; AttackedPlanet$ LOCATE 23, 56: PRINT "Push Any Key" DO anykey$ = INKEY$ IF anykey$ <> "" THEN EXIT DO LOOP WHILE INKEY$ = "" CALL Clearbuffer P2ships(attack) = 0 'Ships are on the planet now. LOCATE PlanetXposition(LOOPS), PlanetYposition(LOOPS) IF PlanetOwner$(LOOPS) = Player1$ THEN COLOR 15, 0: PRINT Planet$(LOOPS): GOTO DoneColor2 IF PlanetOwner$(LOOPS) = Player2$ THEN COLOR 10, 0: PRINT Planet$(LOOPS): GOTO DoneColor2 COLOR 6, 0: PRINT Planet$(LOOPS) DoneColor2: COLOR 0, 0 LOCATE PlanetXposition(LOOPS), PlanetYposition(LOOPS) - 1: PRINT CHR$(221) LOCATE PlanetXposition(LOOPS), PlanetYposition(LOOPS) + 1: PRINT CHR$(222) COLOR 14, 4 EXIT FOR END IF LOCATE 6, 4: PRINT "Attacker: "; Player2$ LOCATE 8, 4: PRINT "Kill="; AttackerKill; "%" Startedwith = P2ships(attack) LOCATE 10, 4: PRINT "Started With" LOCATE 11, 8: PRINT Startedwith LOCATE 13, 4: PRINT "# Ships Left" COLOR 15, 2 LOCATE 6, 23: PRINT "Defender: "; PlanetOwner$(LOOPS) LOCATE 8, 23: PRINT "Kill="; DefenderKill; "%" 'Startedwith = P2ships(attack) LOCATE 10, 23: PRINT "Started With" LOCATE 11, 27: PRINT PLANETSHIPS(LOOPS) LOCATE 13, 23: PRINT "# Ships Left" '***************** HERE IS THE ACTUAL BATTLE ********************* WHILE PLANETSHIPS(LOOPS) > 0 'TO TAKE INTO ACCOUNT THE KILL PERCENTAGE DURING A BATTLE WE GENERATE A 'RANDOM NUMBER BETWEEN 20 AND 80 FOR EACH BATTLE. DeathMaker2: ChanceOfDeath = INT(RND * 99) IF ChanceOfDeath > 80 OR ChanceOfDeath < 20 THEN GOTO DeathMaker2 'LOCATE 18, 1 'PRINT "ChanceOfDeath is"; ChanceOfDeath; "%" 'NOW WE HAVE A CHANCE OF DEATH. IF THIS NUMBER IS GREATER THAN THE KILL 'PERCENTAGE, A SHIP DIES. THIS NUMBER CHANGES WITH EACH ATTACK. 'THE PREMISE IS THAT A HIGHER KILL PERCENT WILL MEAN A GREATER CHANCE 'IT WILL BE HIGHER THAN THE CHANCE OF DEATH, AND WILL LIVE. THEREFORE... IF AttackerKill < ChanceOfDeath THEN P2ships(attack) = P2ships(attack) - 1 END IF COLOR 14, 4 LOCATE 14, 8: PRINT P2ships(attack) IF P2ships(attack) > 1 AND PLANETSHIPS(LOOPS) > 1 THEN Pace = .5 IF P2ships(attack) > 15 AND PLANETSHIPS(LOOPS) > 15 THEN Pace = .3 IF P2ships(attack) > 25 AND PLANETSHIPS(LOOPS) > 25 THEN Pace = .1 IF P2ships(attack) > 50 AND PLANETSHIPS(LOOPS) > 50 THEN Pace = .05 IF P2ships(attack) > 75 AND PLANETSHIPS(LOOPS) > 75 THEN Pace = .02 IF P2ships(attack) > 100 AND PLANETSHIPS(LOOPS) > 100 THEN Pace = .01 IF P2ships(attack) > 150 AND PLANETSHIPS(LOOPS) > 150 THEN Pace = .005 'IF P2ships(attack) > 170 AND PLANETSHIPS(LOOPS) > 170 THEN Pace = INT(Cron / 60) _DELAY Pace IF P2ships(attack) = 0 THEN GOTO BATTLE2OVER IF DefenderKill < ChanceOfDeath THEN PLANETSHIPS(LOOPS) = PLANETSHIPS(LOOPS) - 1 END IF LOCATE 14, 27 COLOR 15, 2 PRINT PLANETSHIPS(LOOPS) _DELAY Pace COLOR 14, 4 IF PLANETSHIPS(LOOPS) = 0 THEN GOTO BATTLE2OVER WEND '****************************************************************** BATTLE2OVER: FOR x = 21 TO 23: LOCATE x, 49: PRINT " ": NEXT x 'LOCATE 22, 51: PRINT P2ships(attack); PLANETSHIPS(LOOPS) 'SLEEP IF PLANETSHIPS(LOOPS) > 0 THEN FOR x = 21 TO 23: LOCATE x, 49: PRINT " ": NEXT x LOCATE 22, 51: PRINT "Planet Is Retained" LOCATE 23, 51: PRINT "Push Any Key" DO anykey$ = INKEY$ IF anykey$ <> "" THEN EXIT DO LOOP WHILE INKEY$ = "" CALL Clearbuffer LOCATE PlanetXposition(LOOPS), PlanetYposition(LOOPS) IF PlanetOwner$(LOOPS) = Player1$ THEN COLOR 15, 0: PRINT Planet$(LOOPS): GOTO NotBlinking2 IF PlanetOwner$(LOOPS) = Player2$ THEN COLOR 10, 0: PRINT Planet$(LOOPS): GOTO NotBlinking2 COLOR 6, 0: PRINT Planet$(LOOPS) NotBlinking2: COLOR 0, 0 LOCATE PlanetXposition(LOOPS), PlanetYposition(LOOPS) - 1: PRINT CHR$(221) LOCATE PlanetXposition(LOOPS), PlanetYposition(LOOPS) + 1: PRINT CHR$(222) COLOR 14, 4 END IF IF P2ships(attack) > 0 THEN PlanetOwner$(LOOPS) = Player2$ PLANETSHIPS(LOOPS) = P2ships(attack) 'Ships are now on the planet: P2ships(attack) = 0 COLOR 14, 4 FOR x = 21 TO 23: LOCATE x, 49: PRINT " ": NEXT x LOCATE 22, 51: PRINT "Planet Is Invaded By "; Player2$ LOCATE 23, 51: PRINT "Push Any Key" LOCATE PlanetXposition(LOOPS), PlanetYposition(LOOPS) IF PlanetOwner$(LOOPS) = Player1$ THEN COLOR 15, 0: PRINT Planet$(LOOPS): GOTO NoBlink2 IF PlanetOwner$(LOOPS) = Player2$ THEN COLOR 10, 0: PRINT Planet$(LOOPS): GOTO NoBlink2 COLOR 6, 0: PRINT Planet$(LOOPS) NoBlink2: DO anykey$ = INKEY$ IF anykey$ <> "" THEN EXIT DO LOOP WHILE INKEY$ = "" CALL Clearbuffer COLOR 4, 4 FOR x = 21 TO 23: LOCATE x, 49: PRINT " ": NEXT x ' COLOR 0, 0 ' LOCATE PlanetXposition(loops), PlanetYposition(loops) - 1: PRINT CHR$(221) ' LOCATE PlanetXposition(loops), PlanetYposition(loops) + 1: PRINT CHR$(222) END IF COLOR 0, 0 LOCATE PlanetXposition(LOOPS), PlanetYposition(LOOPS) - 1: PRINT CHR$(221) LOCATE PlanetXposition(LOOPS), PlanetYposition(LOOPS) + 1: PRINT CHR$(222) COLOR 14, 4 END IF 'CLS 'PRINT "loops= "; loops 'PRINT "move="; move 'PRINT "attack= "; attack 'PRINT "planet$(loops)= "; planet$(loops) 'PRINT "P2from$(attack)= "; P2from$(attack) 'PRINT "P2to$(attack= "; P2to$(attack) 'PRINT "PLANETSHIPS(loops)= "; PLANETSHIPS(loops) 'PRINT "P2ships(attack)= "; P2ships(attack) 'PRINT "P2ships(2)= "; P2ships(2) 'PRINT "PlanetOwner$(loops)= "; PlanetOwner$(loops) 'SLEEP SkipAttack2: NEXT: NEXT CALL Event END SUB SUB AttackScreen 'Clear bottom row LOCATE 25, 10: COLOR 1, 1: PRINT SPACE$(60); 'Draw Attack window COLOR 14, 4 FOR fill = 2 TO 23: LOCATE fill, 2: PRINT " ": NEXT fill LOCATE 1, 1: PRINT CHR$(201) LOCATE 24, 1: PRINT CHR$(200) FOR y = 2 TO 19: LOCATE 1, y: PRINT CHR$(205): NEXT y FOR y = 2 TO 19: LOCATE 24, y: PRINT CHR$(205): NEXT y FOR x = 2 TO 23: LOCATE x, 1: PRINT CHR$(186): NEXT x COLOR 14, 2 FOR fill = 2 TO 23: LOCATE fill, 20: PRINT " ": NEXT fill FOR y = 21 TO 39: LOCATE 1, y: PRINT CHR$(205): NEXT y FOR y = 21 TO 39: LOCATE 24, y: PRINT CHR$(205): NEXT y LOCATE 1, 40: PRINT CHR$(187) LOCATE 24, 40: PRINT CHR$(188) FOR x = 2 TO 23 LOCATE x, 40: PRINT CHR$(186) LOCATE x, 20: PRINT CHR$(186) NEXT x LOCATE 1, 20: PRINT CHR$(201): LOCATE 24, 20: PRINT CHR$(200) END SUB SUB Banner SCREEN 0: VIEW PRINT 1 TO 25: CLS SLEEP 1 BlinkCount = 0 COLOR 7, 0 CLS LOCATE 1, 10: PRINT "." LOCATE 1, 50: PRINT "*" LOCATE 4, 3: PRINT "." LOCATE 4, 25: PRINT "." LOCATE 6, 70: PRINT "." LOCATE 8, 40: PRINT "*" LOCATE 21, 55: PRINT "." LOCATE 22, 60: PRINT "." LOCATE 14, 8: PRINT "." LOCATE 16, 12: PRINT "." LOCATE 18, 79: PRINT "." LOCATE 20, 16: PRINT "." LOCATE 20, 54: PRINT "." LOCATE 22, 75: PRINT "." LOCATE 8, 75: PRINT "." LOCATE 3, 55: PRINT "*" LOCATE 23, 10: PRINT "." LOCATE 21, 65: PRINT "*" LOCATE 6, 15: PRINT "." LOCATE 18, 4: PRINT "." LOCATE 16, 2: PRINT "." LOCATE 15, 78: PRINT "*" LOCATE 21, 55: PRINT "." LOCATE 6, 3: PRINT "." LOCATE 8, 24: PRINT "." LOCATE 22, 40: PRINT "*" COLOR 14, 0 LOCATE 3, 12: PRINT "." LOCATE 14, 70: PRINT "*" LOCATE 9, 50: PRINT CHR$(248) COLOR 15, 0 LOCATE 12, 14: PRINT "." LOCATE 10, 38: PRINT "." LOCATE 19, 30: PRINT "*" LOCATE 16, 40: PRINT "ø" _DELAY .5 Column = 76 FOR comet = 1 TO 76 LOCATE 5, Column: PRINT "*-ùùù" _DELAY .02 LOCATE 5, Column: PRINT " " Column = Column - 1: IF Column < 1 THEN Column = 1 NEXT comet COLOR 2, 0 _DELAY .02 'SLEEP LOCATE 23, 21: PRINT "ÛßßÛ ÛßßÛ Û ÛßßÛ ÛßßÛ ßÛß Û ÛßßÛ " _DELAY .1 COLOR 0, 0 LOCATE 23, 21: PRINT "ÛßßÛ ÛßßÛ Û ÛßßÛ ÛßßÛ ßÛß Û ÛßßÛ " COLOR 2, 0 LOCATE 22, 21: PRINT "ÛßßÛ ÛßßÛ Û ÛßßÛ ÛßßÛ ßÛß Û ÛßßÛ " LOCATE 23, 21: PRINT "Û ÛÜÜÛ Û ÛÜÜÛ Û Û Û Û " _DELAY .1 COLOR 0, 0 LOCATE 22, 21: PRINT "ÛßßÛ ÛßßÛ Û ÛßßÛ ÛßßÛ ßÛß Û ÛßßÛ " LOCATE 23, 21: PRINT "Û ÛÜÜÛ Û ÛÜÜÛ Û Û Û Û " COLOR 2, 0 LOCATE 21, 21: PRINT "ÛßßÛ ÛßßÛ Û ÛßßÛ ÛßßÛ ßÛß Û ÛßßÛ " LOCATE 22, 21: PRINT "Û ÛÜÜÛ Û ÛÜÜÛ Û Û Û Û " LOCATE 23, 21: PRINT "Û ßÛ Û Û Û Û Û Û Û Û Û " _DELAY .1 COLOR 0, 0 LOCATE 21, 21: PRINT "ÛßßÛ ÛßßÛ Û ÛßßÛ ÛßßÛ ßÛß Û ÛßßÛ " LOCATE 22, 21: PRINT "Û ÛÜÜÛ Û ÛÜÜÛ Û Û Û Û " LOCATE 23, 21: PRINT "Û ßÛ Û Û Û Û Û Û Û Û Û " COLOR 2, 0 LOCATE 20, 21: PRINT "ÛßßÛ ÛßßÛ Û ÛßßÛ ÛßßÛ ßÛß Û ÛßßÛ " LOCATE 21, 21: PRINT "Û ÛÜÜÛ Û ÛÜÜÛ Û Û Û Û " LOCATE 22, 21: PRINT "Û ßÛ Û Û Û Û Û Û Û Û Û " LOCATE 23, 21: PRINT "ÛÜÜÛ Û Û ÛÜÜ Û Û ÛÜÜÛ Û Û ÛÜÜÛ " _DELAY .1 COLOR 0, 0 LOCATE 20, 21: PRINT "ÛßßÛ ÛßßÛ Û ÛßßÛ ÛßßÛ ßÛß Û ÛßßÛ " LOCATE 21, 21: PRINT "Û ÛÜÜÛ Û ÛÜÜÛ Û Û Û Û " LOCATE 22, 21: PRINT "Û ßÛ Û Û Û Û Û Û Û Û Û " LOCATE 23, 21: PRINT "ÛÜÜÛ Û Û ÛÜÜ Û Û ÛÜÜÛ Û Û ÛÜÜÛ " COLOR 2, 0 LOCATE 19, 21: PRINT "ÛßßÛ ÛßßÛ Û ÛßßÛ ÛßßÛ ßÛß Û ÛßßÛ " LOCATE 20, 21: PRINT "Û ÛÜÜÛ Û ÛÜÜÛ Û Û Û Û " LOCATE 21, 21: PRINT "Û ßÛ Û Û Û Û Û Û Û Û Û " LOCATE 22, 21: PRINT "ÛÜÜÛ Û Û ÛÜÜ Û Û ÛÜÜÛ Û Û ÛÜÜÛ " LOCATE 23, 21: PRINT "" _DELAY .1 COLOR 0, 0 LOCATE 19, 21: PRINT "ÛßßÛ ÛßßÛ Û ÛßßÛ ÛßßÛ ßÛß Û ÛßßÛ " LOCATE 20, 21: PRINT "Û ÛÜÜÛ Û ÛÜÜÛ Û Û Û Û " LOCATE 21, 21: PRINT "Û ßÛ Û Û Û Û Û Û Û Û Û " LOCATE 22, 21: PRINT "ÛÜÜÛ Û Û ÛÜÜ Û Û ÛÜÜÛ Û Û ÛÜÜÛ " LOCATE 23, 21: PRINT "" COLOR 2, 0 LOCATE 18, 21: PRINT "ÛßßÛ ÛßßÛ Û ÛßßÛ ÛßßÛ ßÛß Û ÛßßÛ " LOCATE 19, 21: PRINT "Û ÛÜÜÛ Û ÛÜÜÛ Û Û Û Û " LOCATE 20, 21: PRINT "Û ßÛ Û Û Û Û Û Û Û Û Û " LOCATE 21, 21: PRINT "ÛÜÜÛ Û Û ÛÜÜ Û Û ÛÜÜÛ Û Û ÛÜÜÛ " LOCATE 22, 21: PRINT "" LOCATE 23, 19: PRINT "ÛßßÛ ÛßßÛ Û Û ÛßßßÛ Û Û Ûßßß Ûßßß ßÛß" _DELAY .1 COLOR 0, 0 LOCATE 18, 21: PRINT "ÛßßÛ ÛßßÛ Û ÛßßÛ ÛßßÛ ßÛß Û ÛßßÛ " LOCATE 19, 21: PRINT "Û ÛÜÜÛ Û ÛÜÜÛ Û Û Û Û " LOCATE 20, 21: PRINT "Û ßÛ Û Û Û Û Û Û Û Û Û " LOCATE 21, 21: PRINT "ÛÜÜÛ Û Û ÛÜÜ Û Û ÛÜÜÛ Û Û ÛÜÜÛ " LOCATE 22, 21: PRINT "" LOCATE 23, 19: PRINT "ÛßßÛ ÛßßÛ Û Û ÛßßßÛ Û Û Ûßßß Ûßßß ßÛß" COLOR 2, 0 LOCATE 17, 21: PRINT "ÛßßÛ ÛßßÛ Û ÛßßÛ ÛßßÛ ßÛß Û ÛßßÛ " LOCATE 18, 21: PRINT "Û ÛÜÜÛ Û ÛÜÜÛ Û Û Û Û " LOCATE 19, 21: PRINT "Û ßÛ Û Û Û Û Û Û Û Û Û " LOCATE 20, 21: PRINT "ÛÜÜÛ Û Û ÛÜÜ Û Û ÛÜÜÛ Û Û ÛÜÜÛ " LOCATE 21, 21: PRINT "" LOCATE 22, 19: PRINT "ÛßßÛ ÛßßÛ Û Û ÛßßßÛ Û Û Ûßßß Ûßßß ßÛß" LOCATE 23, 19: PRINT "Û Û Û ÛßÜ Û Û Û Û Û ÛÜÜÜ ÛÜÜÜ Û " _DELAY .1 COLOR 0, 0 LOCATE 17, 21: PRINT "ÛßßÛ ÛßßÛ Û ÛßßÛ ÛßßÛ ßÛß Û ÛßßÛ " LOCATE 18, 21: PRINT "Û ÛÜÜÛ Û ÛÜÜÛ Û Û Û Û " LOCATE 19, 21: PRINT "Û ßÛ Û Û Û Û Û Û Û Û Û " LOCATE 20, 21: PRINT "ÛÜÜÛ Û Û ÛÜÜ Û Û ÛÜÜÛ Û Û ÛÜÜÛ " LOCATE 21, 21: PRINT "" LOCATE 22, 19: PRINT "ÛßßÛ ÛßßÛ Û Û ÛßßßÛ Û Û Ûßßß Ûßßß ßÛß" LOCATE 23, 19: PRINT "Û Û Û ÛßÜ Û Û Û Û Û ÛÜÜÜ ÛÜÜÜ Û " COLOR 2, 0 LOCATE 16, 21: PRINT "ÛßßÛ ÛßßÛ Û ÛßßÛ ÛßßÛ ßÛß Û ÛßßÛ " LOCATE 17, 21: PRINT "Û ÛÜÜÛ Û ÛÜÜÛ Û Û Û Û " LOCATE 18, 21: PRINT "Û ßÛ Û Û Û Û Û Û Û Û Û " LOCATE 19, 21: PRINT "ÛÜÜÛ Û Û ÛÜÜ Û Û ÛÜÜÛ Û Û ÛÜÜÛ " LOCATE 20, 21: PRINT "" LOCATE 21, 19: PRINT "ÛßßÛ ÛßßÛ Û Û ÛßßßÛ Û Û Ûßßß Ûßßß ßÛß" LOCATE 22, 19: PRINT "Û Û Û ÛßÜ Û Û Û Û Û ÛÜÜÜ ÛÜÜÜ Û " LOCATE 23, 19: PRINT "Û Û Û Û ßÛ Û Ü ß Û Û Û Û Û " _DELAY .1 COLOR 0, 0 LOCATE 16, 21: PRINT "ÛßßÛ ÛßßÛ Û ÛßßÛ ÛßßÛ ßÛß Û ÛßßÛ " LOCATE 17, 21: PRINT "Û ÛÜÜÛ Û ÛÜÜÛ Û Û Û Û " LOCATE 18, 21: PRINT "Û ßÛ Û Û Û Û Û Û Û Û Û " LOCATE 19, 21: PRINT "ÛÜÜÛ Û Û ÛÜÜ Û Û ÛÜÜÛ Û Û ÛÜÜÛ " LOCATE 20, 21: PRINT "" LOCATE 21, 19: PRINT "ÛßßÛ ÛßßÛ Û Û ÛßßßÛ Û Û Ûßßß Ûßßß ßÛß" LOCATE 22, 19: PRINT "Û Û Û ÛßÜ Û Û Û Û Û ÛÜÜÜ ÛÜÜÜ Û " LOCATE 23, 19: PRINT "Û Û Û Û ßÛ Û Ü ß Û Û Û Û Û " '------------------------------------------------------------- FOR scroll = 14 TO 9 STEP -1 COLOR 2, 0 'PRINT "scroll = "; scroll LOCATE scroll + 1, 21: PRINT "ÛßßÛ ÛßßÛ Û ÛßßÛ ÛßßÛ ßÛß Û ÛßßÛ " LOCATE scroll + 2, 21: PRINT "Û ÛÜÜÛ Û ÛÜÜÛ Û Û Û Û " LOCATE scroll + 3, 21: PRINT "Û ßÛ Û Û Û Û Û Û Û Û Û " LOCATE scroll + 4, 21: PRINT "ÛÜÜÛ Û Û ÛÜÜ Û Û ÛÜÜÛ Û Û ÛÜÜÛ " LOCATE scroll + 5, 21: PRINT " " LOCATE scroll + 6, 19: PRINT "ÛßßÛ ÛßßÛ Û Û ÛßßßÛ Û Û Ûßßß Ûßßß ßÛß" LOCATE scroll + 7, 19: PRINT "Û Û Û ÛßÜ Û Û Û Û Û ÛÜÜÜ ÛÜÜÜ Û " LOCATE scroll + 8, 19: PRINT "Û Û Û Û ßÛ Û Ü ß Û Û Û Û Û " LOCATE scroll + 9, 19: PRINT "ÛÜÜÛ ÛÜÜÛ Û Û ÛÜÜßÜ ÛÜÜÛ ÛÜÜÜ ÜÜÜÛ Û " _DELAY .1 COLOR 0, 0 LOCATE scroll + 1, 21: PRINT "ÛßßÛ ÛßßÛ Û ÛßßÛ ÛßßÛ ßÛß Û ÛßßÛ " LOCATE scroll + 2, 21: PRINT "Û ÛÜÜÛ Û ÛÜÜÛ Û Û Û Û " LOCATE scroll + 3, 21: PRINT "Û ßÛ Û Û Û Û Û Û Û Û Û " LOCATE scroll + 4, 21: PRINT "ÛÜÜÛ Û Û ÛÜÜ Û Û ÛÜÜÛ Û Û ÛÜÜÛ " LOCATE scroll + 5, 19: PRINT " " LOCATE scroll + 6, 19: PRINT "ÛßßÛ ÛßßÛ Û Û ÛßßßÛ Û Û Ûßßß Ûßßß ßÛß" LOCATE scroll + 7, 19: PRINT "Û Û Û ÛßÜ Û Û Û Û Û ÛÜÜÜ ÛÜÜÜ Û " LOCATE scroll + 8, 19: PRINT "Û Û Û Û ßÛ Û Ü ß Û Û Û Û Û " LOCATE scroll + 9, 19: PRINT "ÛÜÜÛ ÛÜÜÛ Û Û ÛÜÜßÜ ÛÜÜÛ ÛÜÜÜ ÜÜÜÛ Û " COLOR 7, 0 LOCATE 20, 54: PRINT "." LOCATE 21, 55: PRINT "." LOCATE 21, 55: PRINT "." LOCATE 22, 40: PRINT "*" COLOR 15, 0 LOCATE 19, 30: PRINT "*" NEXT scroll COLOR 2, 0: LOCATE 13, 35: PRINT "GALCON" COLOR 15, 0 LOCATE 9, 21: PRINT "ÛßßÛ ÛßßÛ Û ÛßßÛ ÛßßÛ ßÛß Û ÛßßÛ " LOCATE 10, 21: PRINT "Û ÛÜÜÛ Û ÛÜÜÛ Û Û Û Û " LOCATE 11, 21: PRINT "Û ßÛ Û Û Û Û Û Û Û Û Û " LOCATE 12, 21: PRINT "ÛÜÜÛ Û Û ÛÜÜ Û Û ÛÜÜÛ Û Û ÛÜÜÛ " LOCATE 14, 19: PRINT "ÛßßÛ ÛßßÛ Û Û ÛßßßÛ Û Û Ûßßß Ûßßß ßÛß" LOCATE 15, 19: PRINT "Û Û Û ÛßÜ Û Û Û Û Û ÛÜÜÜ ÛÜÜÜ Û " LOCATE 16, 19: PRINT "Û Û Û Û ßÛ Û Ü ß Û Û Û Û Û " LOCATE 17, 19: PRINT "ÛÜÜÛ ÛÜÜÛ Û Û ÛÜÜßÜ ÛÜÜÛ ÛÜÜÜ ÜÜÜÛ Û " SLEEP 2 COLOR 7, 0 LOCATE 9, 21: PRINT "ÛßßÛ ÛßßÛ Û ÛßßÛ ÛßßÛ ßÛß Û ÛßßÛ " LOCATE 10, 21: PRINT "Û ÛÜÜÛ Û ÛÜÜÛ Û Û Û Û " LOCATE 11, 21: PRINT "Û ßÛ Û Û Û Û Û Û Û Û Û " LOCATE 12, 21: PRINT "ÛÜÜÛ Û Û ÛÜÜ Û Û ÛÜÜÛ Û Û ÛÜÜÛ " LOCATE 14, 19: PRINT "ÛßßÛ ÛßßÛ Û Û ÛßßßÛ Û Û Ûßßß Ûßßß ßÛß" LOCATE 15, 19: PRINT "Û Û Û ÛßÜ Û Û Û Û Û ÛÜÜÜ ÛÜÜÜ Û " LOCATE 16, 19: PRINT "Û Û Û Û ßÛ Û Ü ß Û Û Û Û Û " LOCATE 17, 19: PRINT "ÛÜÜÛ ÛÜÜÛ Û Û ÛÜÜßÜ ÛÜÜÛ ÛÜÜÜ ÜÜÜÛ Û " _DELAY .2 COLOR 8, 0 LOCATE 9, 21: PRINT "ÛßßÛ ÛßßÛ Û ÛßßÛ ÛßßÛ ßÛß Û ÛßßÛ " LOCATE 10, 21: PRINT "Û ÛÜÜÛ Û ÛÜÜÛ Û Û Û Û " LOCATE 11, 21: PRINT "Û ßÛ Û Û Û Û Û Û Û Û Û " LOCATE 12, 21: PRINT "ÛÜÜÛ Û Û ÛÜÜ Û Û ÛÜÜÛ Û Û ÛÜÜÛ " LOCATE 14, 19: PRINT "ÛßßÛ ÛßßÛ Û Û ÛßßßÛ Û Û Ûßßß Ûßßß ßÛß" LOCATE 15, 19: PRINT "Û Û Û ÛßÜ Û Û Û Û Û ÛÜÜÜ ÛÜÜÜ Û " LOCATE 16, 19: PRINT "Û Û Û Û ßÛ Û Ü ß Û Û Û Û Û " LOCATE 17, 19: PRINT "ÛÜÜÛ ÛÜÜÛ Û Û ÛÜÜßÜ ÛÜÜÛ ÛÜÜÜ ÜÜÜÛ Û " _DELAY .2 COLOR 0, 0 LOCATE 9, 21: PRINT "ÛßßÛ ÛßßÛ Û ÛßßÛ ÛßßÛ ßÛß Û ÛßßÛ " LOCATE 10, 21: PRINT "Û ÛÜÜÛ Û ÛÜÜÛ Û Û Û Û " LOCATE 11, 21: PRINT "Û ßÛ Û Û Û Û Û Û Û Û Û " LOCATE 12, 21: PRINT "ÛÜÜÛ Û Û ÛÜÜ Û Û ÛÜÜÛ Û Û ÛÜÜÛ " LOCATE 13, 35: PRINT " " LOCATE 14, 19: PRINT "ÛßßÛ ÛßßÛ Û Û ÛßßßÛ Û Û Ûßßß Ûßßß ßÛß" LOCATE 15, 19: PRINT "Û Û Û ÛßÜ Û Û Û Û Û ÛÜÜÜ ÛÜÜÜ Û " LOCATE 16, 19: PRINT "Û Û Û Û ßÛ Û Ü ß Û Û Û Û Û " LOCATE 17, 19: PRINT "ÛÜÜÛ ÛÜÜÛ Û Û ÛÜÜßÜ ÛÜÜÛ ÛÜÜÜ ÜÜÜÛ Û " COLOR 15, 0 LOCATE 12, 14: PRINT "." LOCATE 10, 38: PRINT "." LOCATE 19, 30: PRINT "*" LOCATE 16, 40: PRINT "ø" COLOR 14, 0 LOCATE 9, 50: PRINT CHR$(248) _DELAY .5 END SUB SUB BugFixes ' Galcon 7.3 ' '1. Attack to a planet two dots away on the horizontal plane would take ' an extra turn to hit. ' FIX: The In TravelThroughSpace, the XmoveFlag was set to "1" before ' checking to see whether an X move was needed. ' '2. Some of player B's attacks would hit, but there would be no resolution ' to the battle, and the attacking ships would vanish. ' FIX: In AttackPlanet2, the moves of player A were being counted instead ' of player B. If player B made more moves than player A, the program ' went to "SkipAttack2" ' '3. "Redo From Start" message would wreck game screen if player entered a ' non-numerical number of ships when making attack. ' FIX: Input is now a string. Value of the string is taken for the number ' of ships. ' '4. PLayer A can't reinforce a planet from itself. e.g., from A to A. ' FIX: Old line of code deleted. Don't know why it was there to begin with. ' '5. After turn 1, player B's "from" planet position is printed to the ' bottom of the screen. ' FIX: Rem'd out line of debug code. ' '6. June 2016 - after adding "ChanceOfDeath" to AttackPlanet the battles were ' ending before they were over. ' FIX: The number of attacks had been determined by the number of ships ' on the defending planet which is PLANETSHIPS(loops). ' FOR BATTLE = 1 TO PLANETSHIPS(LOOPS) was replaced with ' WHILE PLANETSHIPS(loops) > 0 ....WEND ' '7. After attacker had lost all his ships one last attack would hit planet. ' FIX: Moved statement to end attack when attacker ships = 0 ' ' Ver 7.9 '8. You can attack with 0 ships. Then when the attack hits, ships count down ' from zero to negative numbers. ' FIX: An attack of zero ships will be ignored in "AttackPlanet" and ' "AttackPlanet2". If you enter 0 for # of ships you'll get beeped at. ' '9. You can attack with ships you don't have! If you launch all ships from ' your planet and then send more somewhere else you will get a beep, but ' the attack goes anyway. ' FIX:If you don't have any ships and you try to send some anyway, the ship ' count (P1ships or P2ships) will be set to zero. Zero ships will be ' ignored. See bug #8. ' '10. Now that you can't attack with zero ships, if you sent all the ships ' off your planet you're stuck in a loop if you try to send more. ' FIX: program looks for "" (Enter) to break out of the loop. ' ' ' VER 8.2 '11. When a player owned planet is attacked or reinforced, the color changes ' to brown and stays that way till all the attacks are done. ' FIX: In AttackPlanet the owner of the planet is checked and the ' appropriate color is displayed. ' ' VER 8.3 '12. In NavigatorEnd, ships have no production till after last battle. ' FIX: none so far. ' Color bug fixed during reinforcements. ' ' VER 8.4 '13. In NavigatorEnd, ships have no production till after last battle. ' NOTE: There is no "end" to the game. It loops 64 times to flush all ' remaining moves. ' FIX: Full re-write of NavigatorEnd Subroutine. Game now "ends". ' ' You can select NO planets at the beginning of the game. ' FIX: I was going to leave it in because it was funny, but minimum ' planets now = 2. ' ' Red box would would be filled with a black rectangle briefly during ' battle. ' FIX: When text was being erased in AttackPlanet2 the color hadn't been ' set to red. ' ' There is no score at the end of the game. ' FIX: Now there is. ' ' VER 8.5 '14. Large attacks take forever. ' FIX: Attack is sped up depending on number of ships, slows down at end. ' ' VER 8.6 '15. TravelThroughSpace exits with an error when player has made 100 moves. ' program can't handle 3 digit move number. ' FIX: TravelFromXx$ simplified. Move number on left, coordinates on right ' attacking planet in center. TravelThroughSpace handling of string ' simplified. The move number is required. ' ' ' VER 8.7 '16. A at the end of a turn counts as a move in the program. ' FIX. Not really a bug. The code was rem'd out because it would add ' two turns for every round. TravelThroughSpace would then have ' to process the moves even though the coordinates were zero. ' '17. Some attacks would vanish at the end of the game. ' FIX: NavigatorEnd wasn't looping enough times to flush out all ships. ' ' VER 8.8 '18. SOUND replaces BEEP in Entermoves. ' Game has a max of 800 moves due to memory constraints in QuickBASIC. ' ' VER 8.9 '19. 10 attacks were launched at one turn, only 4 hit. ' FIX: Loop in NavigatorEnd would not process anything over 4 attacks ' per turn. Since Navigator works very well, the code was copied ' into NavigatorEnd. ' ' Game now up to 900 moves by streamlining checking in NavigatorEnd ' ' VER 9.0 ' Attack coordinates now come into TravelThroughSpace as one string. ' By eliminating 6 arrays the move count is now at 1700. If each player ' makes 20 moves per turn, the game can be played for 85 turns. Since ' you start out with one planet, the actual number of turns should be ' well over 100. ' ' VER 9.1 ' Added random events. '20. Now getting "out of string space" errors ' ' VER 9.2 ' If attacking planet was near the bottom of the screen, attack that ' should take 1 turn was taking 8 or 9 turns to hit. ' FIX: In TravelThroughSpace the second digit of "xto" was being dropped, ' turning it into a "1". Then it had to count down to 1 before ' the attack hit. ' ' "Out Of String Space" ' FIX: None so far. The "near heap" in memory is being depleted. ' ' VER 9.3 ' If an attacking planet was on the very left top side of the screen, and ' the attacked planet was one turn directly above, the attack would not ' hit till the game was over. ' CAUSE: Coordinates on that part of the screen are single digits. ' The single digits of the coordinates would shift to the left when ' TravelThroughSpace put them back together into a string. ' It would look like this: ' ' Original coordinates - 7 49 5 49 ' First pass - 6 0 5 49 (yfrom has been set to zero) ' Second pass - 5 0 54 9 (xto should be 5, is now 54) ' -- ' The 4 from 49 (yto) would be moved next to xto (5) making it 54. ' FIX: If xfrom and yfrom are < 10, spaces are added to pad out the string. ' ' If Player A bounces key and Player B is up now, Player A can ' press to get back. Previous moves will still TravelThroughSpace. ' ' An attack of 1000 ships againt 1000 ships took forever. ' FIX: Sped the attacks up, also made sure the they were sped up by a ' a whole number with INT(Cron) / ' ' Now has an opening screen ' ' VER 9.4 ' Cleaned up random number generators. Deleted the array for "move" as ' it wasn't needed. All other arrays dimensioned at 1600. This doubled ' the near stack memory from approx. 2200 to approx 4300 bytes. Should ' be able to finish a game in 1600 moves or less. ' ' VER 9.5 ' NavigatorEnd wasn't looking at AttackerTwo$() properly to see when all ' Player 2's ships had hit. It was always zero! So when all of Player 1's ' attacks were done, the game was over even if Player 2 still had an ' attack in transit. ' ' Check1() and Check2() were arrayed at 1600 and didn't need to be. ' Now at Check1(250) and Check2(250) to free up memory. ' ' End screen now shows the winner first. ' ' VER 9.6 ' In TravelThroughSpace, instead of pulling out the Attacker$ from ' memory when the string is put back together, the attacker is "A" or "B". ' ' VER 9.7 ' Near Heap memory being depleted problem (found in ver 9.2) fixed! ' After an attack has hit, AttackerOne$(atk) and AttackerTwo$(atk) is ' set to "" in TravelThroughSpace. No need to remember every single ' move ever made. Near Heap size will increase with every attack that has ' hit. ' ' VER 9.8 ' Un-did the fix in VER 9.6 because it was wrong. Attacker$ is the planet, ' not the player. This isn't used in the game, just for bug checking. ' ' Game board drawn faster by not using nested loops. ' If fewer than 40 planets were selected, the screen would show zeros ' for production, etc of non-existant planets. ' ' During an "Event" the rate of change to production or kill ' was simetimes nothing. ' ' If a player had no ships at the end of the game his score would ' be "-1.#IND" instead of 0. (Divide by zero error) ' ' VER 10.0 ' Distances between attacking planets and attacked planets are now ' calculated when entering the moves using the Pythagorean Theorem. ' DistanceToGo = SQR((X2 - X1) ^ 2 + (Y2 -Y1) ^ 2) ' (Found an email sent in 1998 from Rick Raddatz explaining it.) ' TravelThroughSpace reduced from two pages of code to a single line. ' ' VER 10.1 ' Edit of NavigatorEnd Sub due to new way of moving the ships. ' ' VER 10.2 ' After extensive testing of new algoritham it was replaced with ' DistanceToGo = SQR((X2 - X1) ^ 2 + ((Y2 / 2) - (Y1 / 2)) ^ 2) ' This was necessary because the X axis has twice as many points ' as the Y axis, though you don't see them on the game board. ' ' Removed the message not to call the KEEP, X'd out the phone numbers. ' ' VER 10.3 ' Bug fixed in Navigator and NavigatorEnd subroutines. ' In EnterMOVES, using CINT(DistanceToGo) was causing ships to arrive ' ahead of time. ' ' VER 10.4 ' Entering a non-numeric value to how many turns to play or how many ' planets you want would result in a "redo from start" message. ' Added a banner page showing the word "GALCON" when the game starts. ' ' VER 10.5 ' Put "GALACTIC CONQUEST" banner on opening screen. ' ' VER 10.6 ' Changed the banner page from "GALCON" to "GALACTIC CONQUEST" using ' the banner from VER 10.5 ' ' VER 10.7 ' "GALACTIC CONQUEST" banner now scrolls. Fixed a grammar error on the ' opening screen. Changed the way the score is tallied after the "winner" ' lost the game. ' ' VER 10.8 ' If Player B won the game, avg production and avg kill didn't show ' on final screen. ' ' VER 10.9 ' Various tweaks. BUG: Attacks from Player B hit before attacks from ' Player A if # of light years are the same for both attacks. ' FIX: move was set to 1 in main module but move2 wasn't. ' ' VER 11.0 ' During an attack, the DEFENDERKILL plus the random boost was 80, making ' the planet invunerable. DEFENDERKILL will now be 75 or less. ' ' Memory leaks plugged: ' If an attacker took a planet, the number of ships he had were now on ' the planet, but were also held in an array as though they were still ' in space. The attacked planet was also still held in an array. These ' would build up during the game, hogging memory. ' ' VER 11.2 ' Too many planets have lousy production, sometimes zero. Lowest ' production now set to 3. ' ' Menu begun. Pressing F1 during the game brings up Load, Save or Quit ' menu. Only Save and Quit are working at this point. ' ' VER 11.4 ' Can now load a saved game. ' BUG: After loading a saved game you can no longer bring up a menu. ' ' VER 12.5 ' Menu complete but game is now too large to compile! Key trapping ' removed (no more F1), THE KEEP subroutine deleted and LoadGame ' and LoadFile are now one subroutine. ' ' VER 12.7 ' DEFENDERKILL of 75 is still too high. 75 makes it almost ' impossible to take the planet. Highest DEFENDERKILL is now 60. ' ' VER 12.9 ' If a user wanted to load a game from the setup screen and got an error, ' then decided not to load a game after all and just make a new game, ' the game would crash. ' ' VER 13.0 ' Large attacks weren't sped up enough. 200 ships vs 200 ships would ' take several minutes to battle. ' ' VER 13.1 ' Random events weren't happening enough. Increased the chance for an ' event and made the type of event more random. An event will have a ' chance to occur at the end of each battle. ' BUG: Trying to load game TURN14.SAV is causing an error. ' ' VER 13.4 ' Error in VER 13.1 was caused by X coordinates of planets not being ' saved. Cause undetermined. ' ' VER 13.6 ' Error trap made more robust to keep game from crashing if a corupted ' file is loaded. ' BUG: X coordinates are not being saved if a game that was loaded ' is saved a second time. ' ' VER 13.7 ' Bug was caused by saving XPOSITION instead of PlanetXposition while ' saving file. ' ' VER 13.8 ' A "comet" shoots across the opening screen and "GALACTIC CONQUEST" ' fades before game starts ' ' VER 13.9 ' Press to access the menu added. ' BUG FIX: If player B accessed the Menu and then closed it, he would ' lose his turn. Not only that, I don't think the menu ever worked for ' player B to begin with. ' ' VER 14.0 ' If Player B attacked with more ships than he had while entering a move, ' the cursor would be waiting for another number instead of going back ' and asking for a "from" planet. ' ' VER 14.1 ' Purposely crashed the .EXE version by entering bad saved game file ' names. Incorporated a menu showing saved games. Removed all "on error" ' code since you can't make an error. ' ' VER 14.2 ' Load Game menu wasn't showing the whole date. ' Added color to names in last screen. ' After the final ship had "landed" at the end of the game, the text ' would say ships have moved two more light years when in reality ' the game was over. ' ' VER 14.3 ' Occasionally an attack would not hit or hit later than it should. ' Strange bug found in TravelThroughSpace. It looked like this: ' DistanceToGo = 2.082 ' Subtract 2 as the ships move = 8.200002E-02 (Exponential form) ' When the ships move again (Subtract 2) the number is 6.2 ' The fix was to convert the number to a string, truncate the string to ' four characters, then convert the string back to a number. ' ' VER 14.4 ' The fix in 14.3 would sometimes cause the ships to hit one turn sooner. ' The new fix is to just prevent Exponential numbers. ' IF DistanceToGo < 1 AND DistanceToGo > 0 THEN DistanceToGo = 1 ' ' ' VER 14.5 ' BUG: NavigatorEnd would only loop once at the end of the game if you ' let the number of turns run out. Worked OK if you "quit" the ' game before the last turn. ' This worked OK in previous versions. Something broke. ' FIX: Instead of looping from "MAXTURNS - 1 to move" it now loops ' from 1 to either "move" or "move2" , whichever is greater. ' ' VER 14.6 ' Some of the planets have a dismal KILL. Minimum Kill is now 15. ' If a random event changes the KILL there is now a 10% increase in the ' chance it will go up instead of down. ' Removed 50% of the Banner subroutine. ' ' VER 14.7 ' Prevent Exponential numbers from the moment you enter your move. ' (see VER 14.4) ' ' VER 14.8 ' There is a 33% chance a random message will appear after you enter ' a move. ' VER 14.9 ' You can add up to 100 messages to the game and they are displayed with ' a single line of code. ' ' VER 15.0 ' BUG FIX: Entering as name of saved file crashes the game with ' "Bad File Name" message. ' Added menu item to toggle the random remarks added in VER 14.8. Moved ' menu to upper left of screen because that's where Ricks Raddatz put ' his. ' ' VER 15.1 ' Shelling to cmd$ was cutting off the SOUND in LoadFile sub. The fix was ' to play the sound after the directory was displayed but before the ' temp file was deleted. Found 4 uneeded CLS commands in LoadFile. ' ' VER 15.2 ' Remarks now scroll in from the right. QuickBASIC is running out of memory ' if I play the game and then edit the code. ' ' VER 20.0 ' Converting to QB64. Load game menu doesn't work. Have to get rid of Cron, ' use _DELAY instead. ' Pulling hair out with menu. SHELL CMD$ "DIR *.SAV" returns completely ' different results in WIN10 than DOS. BUG: Menu won't scroll past four games. ' ' VER 20.2 ' "LoadFile" will now only look at lines in directory that end in "SAV." ' It then parses the right 12 characters and looks for a space. If a space is found ' everything to the left of the space is discarded. ' SHELL _HIDE stops screen from flashing. ' BUG: Menu scrolls past last file name if list is short. ' ' VER 20.3 ' Replaced Cron delay loops with _DELAY statements. ' ' VER 20.4 ' Tweaked _DELAY during attacks. Added THEKEEP sub. (No memory constraints in QB64) ' ' VER 20.5 ' Menu bug fixed. Minor tweaks to banner and end screen. ' ' VER 20.6 ' Auto game save feature added. Game will be saved with date as filename after each ' turn. Feature can be toggled from the menu. Won't save the game if you quit. ' ' VER 20.7 ' Color and border fixes to the load game menu. Messages about duplicate planet ' positions removed - no need to see them while in the game. ' ' VER 20.8 ' Improved scrolling of messages. ' END SUB SUB CalculateDelay 'This sub calculates a delay factor so the game will always seem to 'run at the same speed no matter how fast the processor. 'Tested by changing CPU speed in DOSBOX. LOCATE 10, 14: PRINT "Calculating speed for proper gameplay. Please stand by." CalcDelay: LOCATE 9, 35: PRINT " " Cron = 1 tick = VAL(RIGHT$(TIME$, 2)) 'PRINT tick tock = tick IF tock > 54 THEN LOCATE 9, 35: PRINT "Please Wait": GOTO CalcDelay DO UNTIL tock = tick + 5 Cron = Cron + 1 tock = VAL(RIGHT$(TIME$, 2)) LOCATE 12, 39: PRINT CHR$(tock) 'LOCATE 13, 36: PRINT Cron LOOP Cron = Cron * 10 LOCATE 12, 37: PRINT "Done!" 'LOCATE 12, 48: PRINT Cron FOR delay = 1 TO (Cron * 2): NEXT delay END SUB SUB Clearbuffer DO LOOP UNTIL INKEY$ = "" END SUB SUB DRAWBOARD 'COLOR 0, 1 'Draw the gameboard COLOR 7, 0 FOR x = 2 TO 17 LOCATE x, 48: PRINT " " NEXT x FOR x = 2 TO 17 'Dots are 250 ASCII LOCATE x, 49: PRINT "ú ú ú ú ú ú ú ú ú ú ú ú ú ú ú ú" NEXT x CALL DrawGameBox END SUB SUB DrawGameBox COLOR 14, 0 LOCATE 1, 48: PRINT CHR$(201) LOCATE 18, 48: PRINT CHR$(200) LOCATE 1, 80: PRINT CHR$(187) LOCATE 18, 80: PRINT CHR$(188) FOR y = 49 TO 79: LOCATE 1, y: PRINT CHR$(205): NEXT y FOR y = 49 TO 79: LOCATE 18, y: PRINT CHR$(205): NEXT y FOR x = 2 TO 17: LOCATE x, 48: PRINT CHR$(186): NEXT x FOR x = 2 TO 17: LOCATE x, 80: PRINT CHR$(186): NEXT x END SUB SUB EndGame 'Draw Stats window COLOR 11, 4 LOCATE 1, 1: PRINT CHR$(201) LOCATE 24, 1: PRINT CHR$(200) LOCATE 1, 40: PRINT CHR$(187) LOCATE 24, 40: PRINT CHR$(188) FOR y = 2 TO 39: LOCATE 1, y: PRINT CHR$(205): NEXT y FOR y = 2 TO 39: LOCATE 24, y: PRINT CHR$(205): NEXT y FOR x = 2 TO 23: LOCATE x, 1: PRINT CHR$(186): NEXT x FOR x = 2 TO 23: LOCATE x, 40: PRINT CHR$(186): NEXT x COLOR 4, 4 FOR z = 2 TO 23 LOCATE z, 2: PRINT SPACE$(38) NEXT z COLOR 15, 4 LOCATE 5, 10: PRINT "The game is now over!" LOCATE 8, 3: PRINT "All conflicts will now be resolved." LOCATE 10, 14: PRINT "Push any key." pressakey$ = INKEY$ DO IF pressakey$ <> "" THEN EXIT DO LOOP WHILE INKEY$ = "" CALL Clearbuffer SOUND 2000, 1: SOUND 2600, 1 CALL NavigatorEnd CALL StatsScreen CALL PopulateStats CALL RedBox LOCATE 21, 50 PRINT "This is the situation at" LOCATE 22, 50: PRINT "game's end. Push any key" SOUND 2000, 1: SOUND 2600, 1: SLEEP CALL LastScreen END SUB SUB EnterMOVES VIEW PRINT 1 TO 25 'Clear bottom row LOCATE 25, 10: COLOR 1, 1: PRINT SPACE$(60); COLOR 12, 0 'LOCATE 21, 6: PRINT FRE(-1) 'LOCATE 22, 6: PRINT FRE(0) IF Backupflag = 1 THEN TurnNumber = TurnNumber - 1 IF TurnNumber = MAXTURNS THEN CALL EndGame 'Game over, Man TurnNumber = TurnNumber + 1 Backupflag = 0 LOCATE 21, 50: COLOR 14, 4 PRINT "Turn #"; TurnNumber; " /"; MAXTURNS LOCATE 21, 71 PRINT Player1$ DO move = move + 1 StartHere: LOCATE 23, 50: PRINT " " LOCATE 23, 50: COLOR 15, 4: PRINT "From: " DO P1from$(move) = INKEY$ IF P1from$(move) = CHR$(13) THEN SOUND 2000, 1: SOUND 2600, 1: EXIT DO ': GOTO alldone1 IF P1from$(move) = "*" THEN CALL Menu IF P1from$(move) = CHR$(27) THEN CALL Menu FOR x = 1 TO Planets IF x < 27 THEN P1from$(move) = UCASE$(P1from$(move)) IF P1from$(move) = Planet$(x) THEN EXIT DO NEXT x LOOP IF P1from$(move) = CHR$(13) THEN GOTO alldone1 FOR LOOPS = 1 TO Planets: IF LOOPS < 27 THEN P1from$(move) = UCASE$(P1from$(move)) IF P1from$(move) = Planet$(LOOPS) THEN IF PlanetOwner$(LOOPS) <> Player1$ THEN SOUND 500, 2: GOTO StartHere IF PlanetOwner$(LOOPS) = Player1$ THEN EXIT FOR END IF NEXT LOOPS 'tag the x and y "from" coordinates: X1 = PlanetXposition(LOOPS) Y1 = PlanetYposition(LOOPS) '------------------------------------------------------------------------ LOCATE 23, 59: PRINT "to: " DO P1To$(move) = INKEY$ FOR x = 1 TO Planets IF x < 27 THEN P1To$(move) = UCASE$(P1To$(move)) 'IF P1to$(move) = P1from$(move) THEN P1to$(move) = "" IF P1To$(move) = Planet$(x) THEN EXIT DO NEXT x LOOP FOR LOOPS = 1 TO Planets IF LOOPS < 27 THEN P1To$(move) = UCASE$(P1To$(move)) IF P1To$(move) = Planet$(LOOPS) THEN 'tag the x and y "to" coordinates: X2 = PlanetXposition(LOOPS) Y2 = PlanetYposition(LOOPS) END IF NEXT LOOPS 'Calculate distance between from and to: DistanceToGo = SQR((X2 - X1) ^ 2 + ((Y2 / 2) - (Y1 / 2)) ^ 2) 'Prevent Exponential numbers IF DistanceToGo < 1 AND DistanceToGo > 0 THEN DistanceToGo = 1 ' 'Put Player and distance into an array to be read by TravelThroughSpace AttackerOne$(move) = P1from$(move) + " " + STR$(DistanceToGo) 'LOCATE 9, 2: PRINT "DistanceToGo= "; DistanceToGo 'LOCATE 10, 2: PRINT "AttackerOne$(move)= "; AttackerOne$(move + 1) 'SLEEP 1 ShipsHere: 'P1ships$ = CHR$(13) COLOR 4, 4 LOCATE 23, 67: INPUT "Number: ", P1ships$ 'IF P1ships$ = "" THEN P1ships$ = "" 'LOCATE 22, 70: PRINT VAL(P1ships$) IF P1ships$ = "" THEN SOUND 1000, 3: SOUND 800, 3: GOTO StartHere IF VAL(P1ships$) = 0 THEN SOUND 1000, 3: SOUND 800, 3: GOTO ShipsHere P1ships(move) = VAL(P1ships$) COLOR 15, 4 'LOCATE 23, 10: PRINT move; P1ships(move): SLEEP FOR LOOPS = 1 TO Planets: IF P1from$(move) = Planet$(LOOPS) THEN IF PLANETSHIPS(LOOPS) < P1ships(move) THEN SOUND 1000, 3: SOUND 800, 3: P1ships(move) = 0 GOTO StartHere END IF 'IF P1ships(move) = 0 THEN SOUND 1000, 3: SOUND 800, 3: GOTO StartHere IF PLANETSHIPS(LOOPS) >= P1ships(move) THEN PLANETSHIPS(LOOPS) = PLANETSHIPS(LOOPS) - P1ships(move): EXIT FOR END IF END IF NEXT LOOPS 'COLOR 15, 1: LOCATE 24, 10: PRINT "Remark$="; Remark$ IF Remark$ = "ON" THEN CALL Messages LOCATE 23, 50: PRINT " " alldone1: LOOP UNTIL P1To$(move) = "" END SUB SUB EnterMOVES2 '----------------------------------------------------------------------------- '---------------------------------< PLAYER 2 >-------------------------------- '----------------------------------------------------------------------------- VIEW PRINT 1 TO 25 'Clear bottom row LOCATE 25, 10: COLOR 1, 1: PRINT SPACE$(60); LOCATE 21, 71: COLOR 4, 4: PRINT " ": COLOR 14, 4 LOCATE 21, 71: PRINT Player2$: COLOR 15, 4 StartHere2: DO move2 = move2 + 1 LOCATE 23, 50: COLOR 15, 4: PRINT "From: " DO P2from$(move2) = INKEY$ IF P2from$(move2) = CHR$(13) THEN SOUND 2000, 1: SOUND 2600, 1: EXIT DO ': GOTO alldone2 IF P2from$(move2) = "*" THEN CALL Menu IF P2from$(move2) = CHR$(27) THEN CALL Menu IF P2from$(move2) = CHR$(8) THEN SOUND 2000, 1: SOUND 2600, 1 Backupflag = 1 EXIT SUB END IF FOR x = 1 TO Planets IF x < 27 THEN P2from$(move2) = UCASE$(P2from$(move2)) IF P2from$(move2) = Planet$(x) THEN EXIT DO NEXT x LOOP IF P2from$(move2) = CHR$(13) THEN GOTO alldone2 'IF P2from$(move2) = "*" THEN CALL Menu 'IF P2from$(move) = CHR$(27) THEN CALL Menu FOR LOOPS = 1 TO Planets: IF LOOPS < 27 THEN P2from$(move2) = UCASE$(P2from$(move2)) IF P2from$(move2) = Planet$(LOOPS) THEN IF PlanetOwner$(LOOPS) <> Player2$ THEN SOUND 500, 2: GOTO StartHere2 IF PlanetOwner$(LOOPS) = Player2$ THEN EXIT FOR END IF NEXT LOOPS 'tag the x and y "from" coordinates: X1 = PlanetXposition(LOOPS) Y1 = PlanetYposition(LOOPS) LOCATE 23, 59: PRINT "to: " DO P2To$(move2) = INKEY$ FOR x = 1 TO Planets IF x < 27 THEN P2To$(move2) = UCASE$(P2To$(move2)) IF P2To$(move2) = Planet$(x) THEN EXIT DO NEXT x LOOP FOR LOOPS = 1 TO Planets IF LOOPS < 27 THEN P2To$(move2) = UCASE$(P2To$(move2)) IF P2To$(move2) = Planet$(LOOPS) THEN 'tag the x and y "to" coordinates: X2 = PlanetXposition(LOOPS) Y2 = PlanetYposition(LOOPS) END IF NEXT LOOPS 'Calculate distance between from and to: DistanceToGo = SQR((X2 - X1) ^ 2 + ((Y2 / 2) - (Y1 / 2)) ^ 2) 'Prevent Exponential numbers IF DistanceToGo < 1 AND DistanceToGo > 0 THEN DistanceToGo = 1 ' 'Put Player and distance into an array to be read by TravelThroughSpace2 AttackerTwo$(move2) = P2from$(move2) + " " + STR$(DistanceToGo) 'LOCATE 9, 2: PRINT "DistanceToGo= "; DistanceToGo 'LOCATE 10, 2: PRINT "AttackerTwo$(move2)= "; AttackerTwo$(move) 'SLEEP 2 ShipsHere2: COLOR 4, 4 LOCATE 23, 67: INPUT "Number: ", P2ships$ IF P2ships$ = "" THEN SOUND 1000, 3: SOUND 800, 3: GOTO StartHere2 IF VAL(P2ships$) = 0 THEN SOUND 1000, 3: SOUND 800, 3: GOTO ShipsHere2 P2ships(move2) = VAL(P2ships$) 'LOCATE 23, 10: PRINT move2; P2ships(move2); "P2ships$="; P2ships$: SLEEP COLOR 15, 4 FOR LOOPS = 1 TO Planets: IF LOOPS < 27 THEN P2To$(move2) = UCASE$(P2To$(move2)) IF P2from$(move2) = Planet$(LOOPS) THEN IF PLANETSHIPS(LOOPS) < P2ships(move2) THEN SOUND 1000, 3: SOUND 800, 3: P2ships(move2) = 0 GOTO StartHere2 END IF IF PLANETSHIPS(LOOPS) >= P2ships(move2) THEN PLANETSHIPS(LOOPS) = PLANETSHIPS(LOOPS) - P2ships(move2): EXIT FOR END IF END IF NEXT IF Remark$ = "ON" THEN CALL Messages LOCATE 23, 50: PRINT " " LOOP UNTIL P2To$(move2) = "" alldone2: END SUB SUB Event 'Will an event occur? RANDOMIZE TIMER aNumber = INT(RND * 3) IF aNumber = 1 THEN GOTO PickPlanet EXIT SUB PickPlanet: 'What planet? World = INT(RND * Planets) 'World = 1 'LOCATE 10, 1: PRINT " Planet$(World)= "; Planet$(World) 'LOCATE 11, 1: PRINT " PlanetOwner$(World) ="; PlanetOwner$(World) 'SLEEP 3 IF PlanetOwner$(World) = Player1$ OR PlanetOwner$(World) = Player2$ THEN GOTO PickEvent EXIT SUB PickEvent: 'First, blink the planet GOSUB Blinking RANDOMIZE TIMER Num3 = INT(RND * 90) IF Num3 > 66 THEN GOTO ChangeProduction IF Num3 > 33 THEN GOTO ChangeKill IF Num3 > 1 THEN GOTO Revolt ChangeProduction: 'How much? RANDOMIZE TIMER Rate = INT(RND * 10) IF Rate = 0 GOTO ChangeProduction 'More or less production? RANDOMIZE TIMER Num4 = INT(RND * 100) IF Num4 < 50 THEN PLANETPRODUCTION(World) = PLANETPRODUCTION(World) - Rate IF PLANETPRODUCTION(World) < 0 THEN PLANETPRODUCTION(World) = 0 COLOR 14, 4 FOR x = 21 TO 23: LOCATE x, 49: PRINT " ": NEXT x LOCATE 22, 51: PRINT "Planet "; Planet$(World); " elects a Democrat" LOCATE 23, 51: PRINT "Production decreases to"; PLANETPRODUCTION(World) DO anykey$ = INKEY$ IF anykey$ <> "" THEN EXIT DO LOOP WHILE INKEY$ = "" CALL Clearbuffer SOUND 2000, 1: SOUND 2600, 1 GOSUB EndBlinking EXIT SUB END IF IF Num4 > 50 THEN PLANETPRODUCTION(World) = PLANETPRODUCTION(World) + Rate 'IF PLANETPRODUCTION(World) < 0 THEN PLANETPRODUCTION(World) = 0 COLOR 14, 4 FOR x = 21 TO 23: LOCATE x, 49: PRINT " ": NEXT x LOCATE 22, 51: PRINT "Planet "; Planet$(World); " elects a Republican" LOCATE 23, 51: PRINT "Production increases to"; PLANETPRODUCTION(World) DO anykey$ = INKEY$ IF anykey$ <> "" THEN EXIT DO LOOP WHILE INKEY$ = "" CALL Clearbuffer SOUND 2000, 1: SOUND 2600, 1 GOSUB EndBlinking EXIT SUB ChangeKill: 'How much? RANDOMIZE TIMER Rate = INT(RND * 20) IF Rate = 0 GOTO ChangeKill 'More or less Kill? Num4 = INT(RND * 100) IF Num4 < 40 THEN PLANETKILL(World) = PLANETKILL(World) - Rate IF PLANETKILL(World) < 0 THEN PLANETKILL(World) = 0 COLOR 14, 4 FOR x = 21 TO 23: LOCATE x, 49: PRINT " ": NEXT x LOCATE 22, 51: PRINT "Planet "; Planet$(World); " elects a Democrat" LOCATE 23, 51: PRINT "Kill decreases to"; PLANETKILL(World); "%" DO anykey$ = INKEY$ IF anykey$ <> "" THEN EXIT DO LOOP WHILE INKEY$ = "" CALL Clearbuffer SOUND 2000, 1: SOUND 2600, 1 GOSUB EndBlinking EXIT SUB END IF IF Num4 > 40 THEN PLANETKILL(World) = PLANETKILL(World) + Rate 'IF PLANETPRODUCTION(World) < 0 THEN PLANETPRODUCTION(World) = 0 COLOR 14, 4 FOR x = 21 TO 23: LOCATE x, 49: PRINT " ": NEXT x LOCATE 22, 51: PRINT "Planet "; Planet$(World); " elects a Republican" LOCATE 23, 51: PRINT "Kill increases to"; PLANETKILL(World); "%" DO anykey$ = INKEY$ IF anykey$ <> "" THEN EXIT DO LOOP WHILE INKEY$ = "" CALL Clearbuffer SOUND 2000, 1: SOUND 2600, 1 GOSUB EndBlinking EXIT SUB Revolt: COLOR 14, 4 FOR x = 21 TO 23: LOCATE x, 49: PRINT " ": NEXT x LOCATE 21, 50: PRINT "A revolt on planet "; Planet$(World); " has been" LOCATE 22, 50: PRINT "thwarted. Rebels have all been" LOCATE 23, 50: PRINT "tortured and executed!" DO anykey$ = INKEY$ IF anykey$ <> "" THEN EXIT DO LOOP WHILE INKEY$ = "" CALL Clearbuffer SOUND 2000, 1: SOUND 2600, 1 GOSUB EndBlinking EXIT SUB Blinking: LOCATE PlanetXposition(World), PlanetYposition(World) IF PlanetOwner$(World) = Player1$ THEN COLOR 31, 0: PRINT Planet$(World) LOCATE PlanetXposition(World), PlanetYposition(World) - 1: PRINT CHR$(221) LOCATE PlanetXposition(World), PlanetYposition(World) + 1: PRINT CHR$(222) COLOR 14, 4 END IF IF PlanetOwner$(World) = Player2$ THEN COLOR 26, 0: PRINT Planet$(World) COLOR 31, 0 LOCATE PlanetXposition(World), PlanetYposition(World) - 1: PRINT CHR$(221) LOCATE PlanetXposition(World), PlanetYposition(World) + 1: PRINT CHR$(222) COLOR 14, 4 END IF RETURN EndBlinking: LOCATE PlanetXposition(World), PlanetYposition(World) IF PlanetOwner$(World) = Player1$ THEN COLOR 15, 0: PRINT Planet$(World) IF PlanetOwner$(World) = Player2$ THEN COLOR 10, 0: PRINT Planet$(World) COLOR 0, 0 LOCATE PlanetXposition(World), PlanetYposition(World) - 1: PRINT CHR$(221) LOCATE PlanetXposition(World), PlanetYposition(World) + 1: PRINT CHR$(222) COLOR 14, 4 RETURN END SUB SUB GETPLANETS 'This SUB gets planets ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890[;]/ 'In THAT order!! DIM LOOPS(80) StartsubGETPLANETS: FOR LOOPS = 1 TO Planets 'Read the data statements assigning the planets READ Planet$(LOOPS) GETPOSITIONS: RANDOMIZE TIMER '*** Get the Y position, and keep it on the dots ypos = INT(80 * RND) IF ypos < 49 THEN GOTO GETPOSITIONS FOR ODD = 48 TO 79 STEP 2 IF ypos = ODD THEN GOTO GETPOSITIONS NEXT ODD YPOSITION(LOOPS) = ypos 'save Y position 'planetYposition(loops) = ypos '*** Get the X position, and keep it on the dots xpos = INT(18 * RND) IF xpos < 2 THEN GOTO GETPOSITIONS FOR ODD = 1 TO 19 STEP 2 IF ypos = ODD THEN GOTO GETPOSITIONS NEXT ODD XPOSITION(LOOPS) = xpos 'save X position 'planetXposition(loops) = xpos 'LOCATE 5, 5: PRINT XPOSITION(LOOPS) 'LOCATE 6, 5: PRINT YPOSITION(LOOPS) '*** Make sure a planet is not on top of a previous one FOR Check = 2 TO LOOPS IF xpos = XPOSITION(Check - 1) AND ypos = YPOSITION(Check - 1) THEN 'SOUND 2000, 1 'COLOR 7, 1: LOCATE 21, 56 'PLAY "P24 P8 L8 FFF L2 D" 'PRINT "DUPLICATE POSITION!" 'LOCATE 22, 56 'PRINT "PLANET "; 'LOCATE 22, 63 'COLOR 6, 1: PRINT (Planet$(LOOPS)) 'LOCATE 22, 65 'COLOR 7, 1: PRINT "RELOCATED" 'LOCATE 23, 55 'PRINT "FROM POSITION "; XPOSITION(LOOPS); ","; YPOSITION(LOOPS) GOTO GETPOSITIONS END IF NEXT Check '*** Put the planet on the board COLOR 6, 0 IF ilikeit$ <> "Y" OR ilikeit$ <> "y" THEN Planet$(1) = "*" Planet$(2) = "*" END IF IF Planet$(LOOPS) = "A" THEN COLOR 15, 0 ELSE IF Planet$(LOOPS) = "B" THEN COLOR 10, 0 ELSE IF Planet$(LOOPS) = "*" THEN COLOR 15, 0 LOCATE xpos, ypos: PRINT Planet$(LOOPS) '*** Keep track of the positions PlanetXposition(LOOPS) = xpos PlanetYposition(LOOPS) = ypos NEXT LOOPS 'Do you like the way the planets are spaced? COLOR 14, 0 'Draw a box LOCATE 1, 1: PRINT CHR$(201) LOCATE 4, 1: PRINT CHR$(200) LOCATE 1, 20: PRINT CHR$(187) LOCATE 4, 20: PRINT CHR$(188) FOR y = 2 TO 19: LOCATE 1, y: PRINT CHR$(205): NEXT y FOR y = 2 TO 19: LOCATE 4, y: PRINT CHR$(205): NEXT y FOR x = 2 TO 3: LOCATE x, 1: PRINT CHR$(186): NEXT x FOR x = 2 TO 3: LOCATE x, 20: PRINT CHR$(186): NEXT x FOR x = 2 TO 3: LOCATE x, 2: PRINT SPACE$(18): NEXT x COLOR 15, 0 LOCATE 2, 2: PRINT Player1$: LOCATE 2, 8: PRINT "has planet A" COLOR 10, 0 LOCATE 3, 2: PRINT Player2$: LOCATE 3, 8: PRINT "has planet B" 'Draw a box COLOR 14, 0 LOCATE 14, 1: PRINT CHR$(201) LOCATE 16, 1: PRINT CHR$(200) LOCATE 14, 19: PRINT CHR$(187) LOCATE 16, 19: PRINT CHR$(188) LOCATE 15, 1: PRINT CHR$(186) LOCATE 15, 19: PRINT CHR$(186) FOR y = 2 TO 18: LOCATE 14, y: PRINT CHR$(205): NEXT y FOR y = 2 TO 18: LOCATE 16, y: PRINT CHR$(205): NEXT y 'FOR x = 2 TO 3: LOCATE x, 2: PRINT SPACE$(18): NEXT x COLOR 15, 0 LOCATE 15, 2: PRINT "Is this OK. (Y/N)" DO ilikeit$ = INKEY$ IF ilikeit$ = "n" OR ilikeit$ = "N" THEN 'Clear any relocated planet messages 'COLOR 1, 1 'LOCATE 21, 55: PRINT " " 'LOCATE 22, 55: PRINT " " 'LOCATE 23, 55: PRINT " " 'Clear galaxy of planets COLOR 7, 0 FOR x = 2 TO 17 'Dots are 250 ASCII LOCATE x, 49: PRINT "ú ú ú ú ú ú ú ú ú ú ú ú ú ú ú ú" NEXT x RESTORE GOTO StartsubGETPLANETS END IF IF ilikeit$ = "y" OR ilikeit$ = "Y" THEN Planet$(1) = "A" Planet$(2) = "B" CALL RedrawScreen EXIT SUB END IF IF ilikeit$ <> "" THEN SOUND 2000, 1 LOOP END SUB SUB LastScreen COLOR 15, 0: CLS LOCATE 1, 1 PRINT " total total total total ships in ships at average average" PRINT "Player score planets ships prod. transit base kill% production" PRINT "------ ----- ------- ----- ----- --------- -------- ------ ----------" FOR x = 1 TO Planets 'Get number of planets: IF PlanetOwner$(x) = Player1$ THEN P1PlanetTotal = P1PlanetTotal + 1 IF PlanetOwner$(x) = Player2$ THEN P2PlanetTotal = P2PlanetTotal + 1 'Get the ships IF PlanetOwner$(x) = Player1$ THEN P1shiptotal = P1shiptotal + PLANETSHIPS(x) IF PlanetOwner$(x) = Player2$ THEN P2shiptotal = P2shiptotal + PLANETSHIPS(x) 'get the production IF PlanetOwner$(x) = Player1$ THEN P1prodtotal = P1prodtotal + PLANETPRODUCTION(x) IF PlanetOwner$(x) = Player2$ THEN P2prodtotal = P2prodtotal + PLANETPRODUCTION(x) 'get the kill IF PlanetOwner$(x) = Player1$ THEN P1killtotal = P1killtotal + PLANETKILL(x) IF PlanetOwner$(x) = Player2$ THEN P2killtotal = P2killtotal + PLANETKILL(x) NEXT x 'I have no idea how Raddatz came up with a score. 'The score = number of ships times average kill, plus 50 points per planet. P1score = INT(P1killtotal / P1PlanetTotal) * P1shiptotal P1score = INT(P1score / 8) + (P1PlanetTotal * 50) IF P1score < 0 THEN P1score = 0 P2score = INT(P2killtotal / P2PlanetTotal) * P2shiptotal P2score = INT(P2score / 8) + (P2PlanetTotal * 50) IF P2score < 0 THEN P2score = 0 P1averageProd = INT(P1prodtotal / P1PlanetTotal) IF P1averageProd < 0 THEN P1averageProd = 0 P2averageProd = INT(P2prodtotal / P2PlanetTotal) IF P2averageProd < 0 THEN P2averageProd = 0 P1averageKill = INT(P1killtotal / P1PlanetTotal) IF P1averageKill < 0 THEN P1averageKill = 0 P2averageKill = INT(P2killtotal / P2PlanetTotal) IF P2averageKill < 0 THEN P2averageKill = 0 IF P1score > P2score THEN COLOR 15, 0: LOCATE 4, 1: PRINT Player1$ COLOR 10, 0: LOCATE 5, 1: PRINT Player2$ COLOR 15, 0: LOCATE 4, 7: PRINT ":" COLOR 10, 0: LOCATE 5, 7: PRINT ":" COLOR 15, 0: LOCATE 4, 8: PRINT P1score COLOR 10, 0: LOCATE 5, 8: PRINT P2score COLOR 15, 0: LOCATE 4, 16: PRINT P1PlanetTotal COLOR 10, 0: LOCATE 5, 16: PRINT P2PlanetTotal COLOR 15, 0: LOCATE 4, 23: PRINT P1shiptotal COLOR 10, 0: LOCATE 5, 23: PRINT P2shiptotal 'same number as "ships at base" COLOR 15, 0: LOCATE 4, 49: PRINT P1shiptotal COLOR 10, 0: LOCATE 5, 49: PRINT P2shiptotal COLOR 15, 0: LOCATE 4, 30: PRINT P1prodtotal COLOR 10, 0: LOCATE 5, 30: PRINT P2prodtotal COLOR 15, 0: LOCATE 4, 71: PRINT P1averageProd COLOR 10, 0: LOCATE 5, 71: PRINT P2averageProd COLOR 15, 0: LOCATE 4, 61: PRINT P1averageKill COLOR 10, 0: LOCATE 5, 61: PRINT P2averageKill COLOR 15, 0: LOCATE 4, 41: PRINT "0" COLOR 10, 0: LOCATE 5, 41: PRINT "0" ELSE COLOR 15, 0: LOCATE 4, 1: PRINT Player2$ COLOR 10, 0: LOCATE 5, 1: PRINT Player1$ COLOR 15, 0: LOCATE 4, 7: PRINT ":" COLOR 10, 0: LOCATE 5, 7: PRINT ":" COLOR 15, 0: LOCATE 4, 8: PRINT P2score COLOR 10, 0: LOCATE 5, 8: PRINT P1score COLOR 15, 0: LOCATE 4, 16: PRINT P2PlanetTotal COLOR 10, 0: LOCATE 5, 16: PRINT P1PlanetTotal COLOR 15, 0: LOCATE 4, 23: PRINT P2shiptotal COLOR 10, 0: LOCATE 5, 23: PRINT P1shiptotal 'same number as "ships at base" COLOR 15, 0: LOCATE 4, 49: PRINT P2shiptotal COLOR 10, 0: LOCATE 5, 49: PRINT P1shiptotal COLOR 15, 0: LOCATE 4, 30: PRINT P2prodtotal COLOR 10, 0: LOCATE 5, 30: PRINT P1prodtotal COLOR 15, 0: LOCATE 4, 71: PRINT P2averageProd COLOR 10, 0: LOCATE 5, 71: PRINT P1averageProd COLOR 15, 0: LOCATE 4, 61: PRINT P2averageKill COLOR 10, 0: LOCATE 5, 61: PRINT P1averageKill COLOR 15, 0: LOCATE 4, 41: PRINT "0" COLOR 10, 0: LOCATE 5, 41: PRINT "0" END IF LOCATE 8, 1: COLOR 14, 0 PRINT "Thank you for playing this clone of GALACTIC CONQUEST." PRINT COLOR 7, 0 PRINT "Congratulations to "; IF P1score > P2score THEN COLOR 15, 0: PRINT RTRIM$(Player1$); ELSE COLOR 15, 0: PRINT RTRIM$(Player2$); END IF COLOR 7, 0: PRINT " for defeating your worthy opponent." COLOR 2, 0 PRINT "If it isn't too late and there is still a half a case of beer left," IF P1score > P2score THEN COLOR 10, 0: PRINT RTRIM$(Player2$); ELSE COLOR 10, 0: PRINT RTRIM$(Player1$); END IF COLOR 2, 0 PRINT " should demand a rematch!" COLOR 15, 0: LOCATE 23, 5: INPUT ; "Press Any Key", keypress$ SLEEP CALL THEKEEP END END SUB SUB LoadFile CALL Clearbuffer CLS '-------------------------------------------------------------- 'SELECT.BAS By Richard Vannoy 'PO Box 600002, San Diego, CA 92160-0002 'Released to the Public Domain, January 1994 'A program to - Get the files in a subdirectory. ' - Sort them alphabetically. ' - Put them in a scrolling window where you ' can use the arrow keys and PgUp/PgDn keys ' to browse the list until you...... ' - Select the file you wish to process. ' 'Note: For MONO machines, change COLOR statements to ' COLOR 15, 0 'White on Black ' COLOR 0, 15 'Black on White ' 'COLOR 14, 4: CLS 'This makes regular and extended keys easier to spot later. UpArrow$ = CHR$(0) + CHR$(72): DnArrow$ = CHR$(0) + CHR$(80) PageUp$ = CHR$(0) + CHR$(73): PageDn$ = CHR$(0) + CHR$(81) Enter$ = CHR$(13): ESCape$ = CHR$(27) cmd$ = "dir *.sav > LIST.DIR" SHELL _HIDE cmd$ SOUND 2000, 1: SOUND 2600, 1 'Make an array for the files and OPEN the text DIR file. OPEN "LIST.DIR" FOR INPUT AS #1 MaxFiles = 480 '480 is the max (to keep an array under 32,768 bytes) if 'you use the whole DOS file name line which is 39 'characters long. If you want to store ONLY the file 'names, you can reduce the string length to 12 for just 'file names only, then you can DIM the file array up to '32,768\12 = 2730 files. DIM fils(1 TO MaxFiles) AS STRING * 42 'CLS : n = 0 n = 0 DO 'Main LOOP LINE INPUT #1, lin$ 'Get a line IF RIGHT$(lin$, 3) = "SAV" THEN lin$ = RIGHT$(lin$, 12): lin$ = UCASE$(lin$) 'parse the line 'Fill the fils() array IF n >= MaxFiles THEN EXIT DO 'Don't overfill array ' +++++++++++++++++++++++++++++++++++++++++++++++++++ FIX FOR QB64 TMP$ = lin$ FOR check = 1 TO LEN(TMP$) IF MID$(TMP$, check, 1) = " " THEN 'blank space found in name TMP$ = RIGHT$(TMP$, (12 - check)) EXIT FOR END IF NEXT check lin$ = TMP$ '+++++++++++++++++++++++++++++++++++++++++++++++++++++ n = n + 1: fils(n) = lin$ FOR i = n - 1 TO 1 STEP -1 'Insertion Sort IF fils(i) > fils(i + 1) THEN 'Fastest sort if SWAP fils(i), fils(i + 1) 'reading from an ELSE 'already sorted or almost sorted list EXIT FOR END IF NEXT i END IF 'END IF LOOP WHILE NOT EOF(1) CLOSE 'Done with the directory text file. SELECTFILE: COLOR 15, 4: CLS 'Set up screen messages. Center each one. LOCATE 2, 35: PRINT "LOAD GAME": COLOR 14, 4 MSG$ = "Use the up and down arrows and page up/page down" LOCATE 3, 40 - (LEN(MSG$) \ 2): PRINT MSG$; MSG$ = "to select the file you desire, then press ENTER." LOCATE 4, 40 - (LEN(MSG$) \ 2): PRINT MSG$; MSG$ = " Press to exit menu" LOCATE 5, 40 - (LEN(MSG$) \ 2): PRINT MSG$; 'msg$ = "Richard Vannoy, 1994, Released to Public Domain." 'LOCATE 25, 40 - (LEN(msg$) \ 2): PRINT msg$; COLOR 14, 1 x = 19: WindowTop = 8: WindowBot = 21 'Set window limits LOCATE WindowTop - 1, x - 2 'Draw the window TOP PRINT CHR$(201) + STRING$(44, 205) + CHR$(187); FOR i = WindowTop TO WindowBot 'Draw the side lines LOCATE i, x - 2 PRINT CHR$(186) + STRING$(44, 32) + CHR$(186); NEXT i 'It's usually easier to understand if you use the 'real high ASCII characters here. For example, in the 'PRINT line just above it would be clearer to show the 'bottom left corner of a single line box than CHR$(179). 'I did it this way to avoid putting high ASCII characters 'on the network. LOCATE WindowBot + 1, x - 2 'Draw the window bottom PRINT CHR$(200) + STRING$(44, 205) + CHR$(188); HiLite = 8 'HiLite limits 8 to 21 'HiLite tells which record is INVERSE or high lighted FirstRec = 1 'Start at the beginning 'FirstRec & LastRec keep track of the FIRST & LAST records 'to be in the window at the present time. done = 0 'The "Are you done yet?" flag COLOR 15 DO 'The next ten lines account for the uÇser running "off the 'end" of the top or bottom of the window, and will not 'let the user leave the box IF FirstRec < 1 THEN 'User ran out the top of the box FirstRec = 1 'Adjust first/last records to be seen IF LastRec > n THEN LastRec = n END IF LastRec = FirstRec + 13: y = WindowTop IF LastRec > n THEN 'User ran out the bottom of the box LastRec = n 'Adjust first/last records to be seen FirstRec = n - 13 IF FirstRec < 1 THEN FirstRec = 1 END IF FOR i = FirstRec TO LastRec 'Paint the box with records COLOR 15, 1 LOCATE y, x: PRINT fils(i);: y = y + 1 NEXT i COLOR 1, 15: LOCATE HiLite, x 'Inverse the selected file recno = FirstRec + HiLite - 8 'Compute the record number PRINT fils(recno); 'Reprint the inversed record COLOR 15, 1 'Restore COLOR DO: k$ = INKEY$: LOOP UNTIL LEN(k$) 'Wait for a key SELECT CASE k$ 'WHAT KEY WAS PRESSED? CASE UpArrow$ 'UP ARROW HiLite = HiLite - 1 'Push everything up one IF HiLite < 8 THEN 'Bust out of the top of the box? HiLite = 8 'If so, fix it! FirstRec = FirstRec - 1 END IF CASE DnArrow$ 'DOWN ARROW HiLite = HiLite + 1 'Push everything down one 'Next line prevents the HiLite from running off the 'bottom of a very short (<17) file list. 'having trbl with the next line 'IF HiLite > n + 4 THEN HiLite = n + 4 IF HiLite > n + 6 THEN HiLite = n + 7 IF HiLite > 21 THEN 'Fall out of the bottom of the box? HiLite = 21 'If so, fix it! FirstRec = FirstRec + 1 END IF CASE PageUp$ FirstRec = FirstRec - 14 'Move a whole page UP CASE PageDn$ FirstRec = FirstRec + 14 'Move a whole page DOWN CASE Enter$, ESCape$ 'OUT 'O here! done = 1 CASE ELSE SOUND 100, 2 END SELECT LOOP UNTIL done IF k$ = CHR$(27) THEN CLS: EXIT SUB CLS ': PRINT "You have selected: "; fils(recno) 'Make the next two lines into one line 'filename$ = RIGHT$(fils(recno), 9) filename$ = fils(recno) filename$ = RTRIM$(filename$): filename$ = LTRIM$(filename$) 'COLOR 14, 4: PRINT filename$: SLEEP 'FOR QUICKBASIC filename$ = RTRIM$(LEFT$(fils(recno), 8)) + "." 'filename$ = filename$ + MID$(fils(recno), 10, 3) IF filename$ = ". " THEN GOTO SELECTFILE FOIL$ = filename$ SOUND 2000, 1: SOUND 2600, 1 IF RIGHT$(FOIL$, 3) <> "SAV" THEN EXIT SUB 'there are no saved games OPEN "I", 1, FOIL$ INPUT #1, Player1$ INPUT #1, Player2$ INPUT #1, TurnNumber INPUT #1, MAXTURNS INPUT #1, Planets INPUT #1, atk INPUT #1, move INPUT #1, move2 FOR LOOPS = 1 TO Planets INPUT #1, Planet$(LOOPS), PlanetOwner$(LOOPS), PlanetXposition(LOOPS), PlanetYposition(LOOPS), PLANETKILL(LOOPS), PLANETPRODUCTION(LOOPS), PLANETSHIPS(LOOPS) NEXT LOOPS FOR InTransit = 1 TO move INPUT #1, AttackerOne$(InTransit), P1To$(InTransit), P1ships(InTransit) NEXT InTransit FOR InTransit = 1 TO move2 INPUT #1, AttackerTwo$(InTransit), P2To$(InTransit), P2ships(InTransit) NEXT InTransit CLOSE #1 'cmd$ = "DEL LIST.DIR" 'SHELL cmd$ 'Delete the file 'CLS IF AskingInput$ = "YES" THEN AskingInput$ = "" CALL DRAWBOARD CALL RedrawScreen CALL StatsScreen CALL PopulateStats CALL RunGame END IF END SUB SUB Menu PCOPY 0, 1 StartMenu: AskingInput$ = "" COLOR 14, 1 LOCATE 4, 5: PRINT "ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»"; LOCATE 5, 5: PRINT "º <> º"; LOCATE 6, 5: PRINT "º S = Save Game º"; LOCATE 7, 5: PRINT "º L = Load Game º"; LOCATE 8, 5: PRINT "º R = Toggle Remarks º"; LOCATE 9, 5: PRINT "º A = Toggle AutoSave º"; LOCATE 10, 5: PRINT "º Q = Quit Game º"; LOCATE 11, 5: PRINT "º º"; LOCATE 12, 5: PRINT "º = Exit Menu º"; LOCATE 13, 5: PRINT "ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ"; 'LOCATE 14, 11: PRINT Remark$ CALL Clearbuffer M1: item$ = INKEY$ IF item$ = "" THEN GOTO M1 IF item$ = CHR$(13) THEN SOUND 2000, 1: SOUND 2600, 1: GOTO ExitMenu IF (item$ = "a" OR item$ = "A") AND AutoSave$ = "ON" THEN AutoSave$ = "OFF" LOCATE 11, 11: SOUND 2000, 1: SOUND 2600, 1: COLOR 20, 15: PRINT "AutoSave is OFF." SLEEP 2 LOCATE 11, 11: COLOR 14, 1: PRINT " " GOTO StartMenu END IF IF (item$ = "a" OR item$ = "A") AND AutoSave$ = "OFF" THEN AutoSave$ = "ON" LOCATE 11, 11: SOUND 2000, 1: SOUND 2600, 1: COLOR 20, 15: PRINT "AutoSave is ON." SLEEP 2 LOCATE 11, 11: COLOR 14, 1: PRINT " " GOTO StartMenu END IF IF (item$ = "r" OR item$ = "R") AND Remark$ = "ON" THEN Remark$ = "OFF" LOCATE 11, 11: SOUND 2000, 1: SOUND 2600, 1: COLOR 20, 15: PRINT "Remarks are OFF." SLEEP 2 LOCATE 11, 11: COLOR 14, 1: PRINT " " GOTO StartMenu END IF IF (item$ = "r" OR item$ = "R") AND Remark$ = "OFF" THEN Remark$ = "ON" LOCATE 11, 11: SOUND 2000, 1: SOUND 2600, 1: COLOR 20, 15: PRINT "Remarks are ON." SLEEP 2 LOCATE 11, 11: COLOR 14, 1: PRINT " " GOTO StartMenu END IF IF item$ = "s" OR item$ = "S" THEN LOCATE 6, 5: PRINT "º º"; LOCATE 7, 5: PRINT "º Enter name of file to save º"; LOCATE 8, 5: PRINT "º º"; LOCATE 9, 5: PRINT "º º"; LOCATE 10, 5: PRINT "º º"; LOCATE 11, 5: PRINT "º º"; LOCATE 8, 15: INPUT filename$: filename$ = LEFT$(filename$, 8): filename$ = filename$ + ".sav": filename$ = UCASE$(filename$) IF filename$ = ".SAV" GOTO StartMenu CALL SaveFile LOCATE 10, 11: SOUND 2000, 1: SOUND 2600, 1: COLOR 20, 15: PRINT "GAME HAS BEEN SAVED." SLEEP 2 LOCATE 10, 11: COLOR 14, 1: PRINT " " GOTO StartMenu END IF IF item$ = "l" OR item$ = "L" THEN CALL LoadFile: GOTO GameLoaded IF item$ = "q" OR item$ = "Q" THEN AutoSave$ = "OFF" MAXTURNS = TurnNumber LOCATE 11, 9: COLOR 20, 15: PRINT "THIS IS YOUR LAST TURN." SOUND 2000, 1: SOUND 2600, 1 'PLAY "T180 o2 P2 P8 L8 GGG L2 E-" 'PLAY "P24 P8 L8 FFF L2 D" SLEEP 3 LOCATE 11, 9: COLOR 14, 1: PRINT " " GOTO M1 END IF item$ = "" GOTO M1 ExitMenu: COLOR 15, 4 'SLEEP 1 PCOPY 1, 0 EXIT SUB GameLoaded: CALL DRAWBOARD CALL RedrawScreen CALL StatsScreen CALL PopulateStats CALL RunGame END SUB SUB Messages 'Clear the last message VIEW PRINT 1 TO 25 LOCATE 25, 10: COLOR 1, 1: PRINT SPACE$(60); 'We only want a message 33% of the time. RANDOMIZE TIMER MSGDISPLAY = INT(RND * 100) + 1 IF MSGDISPLAY > 33 THEN COLOR 15, 4: EXIT SUB 'PLAY "T180 o2 P2 P8 L8 GGG L2 E-" COLOR 15, 1 RANDOMIZE TIMER MSG = INT(RND * 48) + 1 Message$(1) = "Well, that was a stupid move." Message$(2) = "All those ships will die!" Message$(3) = "You're a damn fool!" Message$(4) = "Fang, son of Great Fang, concurs." Message$(5) = "Do you really think that will work?" Message$(6) = "A CHILD could do THAT!" Message$(7) = "Dead ships flying." Message$(8) = "They go quietly into the night." Message$(9) = "Did you think that one through?" Message$(10) = "Off they go, into the wild black yonder." Message$(11) = "Death to all who oppose you!" Message$(12) = "Your opponent will be PWNED!" Message$(13) = "Blood will spill, yes it will!" Message$(14) = "Have another beer!" Message$(15) = "Get ready to hear, " + CHR$(34) + "GOD DAMN YOU TO HELL!!" + CHR$(34) Message$(16) = "Really?" Message$(17) = "That was a good move. A darn good move." Message$(18) = "That was brave." Message$(19) = "That's a good one!" Message$(20) = "You can do better than that." Message$(21) = "He's dead, Jim." Message$(22) = "I'm watching your every move." Message$(23) = "I see everything you type." Message$(24) = "I don't know about that one." Message$(25) = "Are you sure? Too late now!" Message$(26) = "If I were you, I'd grab another beer." Message$(27) = "You know that won't accomplish anything." Message$(28) = "Relax. You'll be dead soon enough." Message$(29) = "That will teach him a lesson!" Message$(30) = "Yes! KILL them!!" Message$(31) = "A cat walking on the keyboard could do better." Message$(32) = "You must lead them to glory, or more likely, to death." Message$(33) = "It's " + LEFT$(TIME$, 5) + ". Hurry up with your moves!" Message$(34) = "In your name they will slaughter." Message$(35) = "Look to Carol Alt for inspiration." Message$(36) = "Have you ever played this game before?" Message$(37) = "In your name they will die." Message$(38) = "All bent their knee." Message$(39) = "It's " + LEFT$(TIME$, 2) + " o'clock and time to die. Dum de-dum de-dum." Message$(40) = "Into the planet of death warp the 600." Message$(41) = "Theirs not to reason why, theirs but to do and die." Message$(42) = "You NEED another beer." Message$(43) = "Ka-Spuck." Message$(44) = "Do you know what you're doing?" Message$(45) = "That was NOT a good idea." Message$(46) = "Keep your eye on your home planet." Message$(47) = "BIG mistake." Message$(48) = "Excellent move!" 'LOCATE 25, 40 - (LEN(Message$(MSG)) \ 2): PRINT Message$(MSG); 'Erase$ = SPACE$(LEN(Message$(MSG))) 'Column = 80 - (LEN(Message$(MSG))) 'NewColumn = 40 - (LEN(Message$(MSG)) \ 2) ' FOR Text = NewColumn TO Column ' LOCATE 25, Column: PRINT Message$(MSG); ' _DELAY .02 ' LOCATE 25, Column: PRINT Erase$; ' Column = Column - 1 ' NEXT Text 'LOCATE 25, 40 - (LEN(Message$(MSG)) \ 2): PRINT Message$(MSG); 'A BETTER WAY TO SCROLL THE MESSAGES CurrentMessage$ = Message$(MSG) Length = (LEN(CurrentMessage$)) 'SCROLL THE MESSAGES column = 80 FOR letters = 1 TO 40 + Length 'START ERASING THE CHARACTER IN COLUMN 80, THEN 79, 78, 77, ETC. EraseChar = column + (Length): IF EraseChar > 80 THEN EraseChar = 1 LOCATE 25, EraseChar: PRINT SPACE$(1); 'PRINT THE MESSAGE, WILL STOP IN CENTER OF PAGE. LOCATE 25, column: PRINT LEFT$(CurrentMessage$, letters); column = column - 1 IF column < 41 - (Length \ 2) THEN column = 41 - (Length \ 2) _DELAY .02 NEXT letters COLOR 15, 4 END SUB SUB Navigator 'This sub alternates the moves among players. 'Since the players will not be making the same amount 'of attacks per turn, the sub is split into three sections. 'move = Player 1 'move2 = Player 2 'These variables are passed from the "EnterMOVES" sub. 'FOR HalfTurns = 1 TO 2 '------------------------------------------------ IF move > move2 THEN FOR atk = 1 TO move CALL TravelThroughSpace IF atk > move2 THEN GOTO SkipPlayer2 CALL TravelThruSpace2 SkipPlayer2: NEXT atk END IF '------------------------------------------------- IF move2 > move THEN FOR atk = 1 TO move2 CALL TravelThruSpace2 IF atk > move THEN GOTO SkipPlayer1 CALL TravelThroughSpace SkipPlayer1: NEXT atk END IF '-----------------------< DEFAULT >---------------- IF move = move2 THEN FOR atk = 1 TO move CALL TravelThroughSpace CALL TravelThruSpace2 NEXT atk END IF 'NEXT HalfTurns CALL Event END SUB SUB NavigatorEnd 'June 22, 2016 'January 5, 2018 'This SUB will process any ships left flying around after the last turn. 'It will move the ships two dots and update Planet Production, then repeat. 'Since the DistanceToGo is set to "" after an attack has hit we need to 'look at all the AttackerOne$ and AttackerTwo$ till they are empty. 'When all DistanceToGo = 0 the game is over. 'Start looping. Loop will exit when there are no more ships left in space. FOR flushmoves = 1 TO 25 'LOCATE 18, 5: PRINT "Flushing "; flushmoves; " times": SLEEP 2 TOTALa = 0 TOTALb = 0 IF move > move2 THEN Lastmove = move ELSE Lastmove = move2 FOR a = 1 TO Lastmove 'Looking for ships in flight after final turn. 'Look for ships of Player 1 Check1(a) = VAL(MID$(AttackerOne$(a), 4, 5)) Checker = Check1(a) TOTALa = TOTALa + Checker 'Look for ships of Player 2 Check2(a) = VAL(MID$(AttackerTwo$(a), 4, 5)) Checker2 = Check2(a) TOTALb = TOTALb + Checker2 NEXT a 'FOR Blank = 10 TO 19: LOCATE Blank, 2: PRINT " ": NEXT Blank 'LOCATE 10, 2: PRINT "AttackerOne$(A)="; AttackerOne$(A) 'LOCATE 11, 2: PRINT "AttackerTwo$(A)="; AttackerTwo$(A) 'LOCATE 12, 2: PRINT "VAL(MID$(AttackerTwo$(A), 5, 2))= "; VAL(MID$(AttackerTwo$(A), 5, 2)) 'LOCATE 13, 2: PRINT "Check1(A)= "; Check1(A); " "; Check2(A) 'LOCATE 14, 2: PRINT "MAXTURNS= "; MAXTURNS 'LOCATE 15, 2: PRINT "move= "; move 'LOCATE 16, 2: PRINT "move2= "; move2 'LOCATE 17, 2: PRINT "TOTALa= "; TOTALa 'LOCATE 18, 2: PRINT "TOTALb= "; TOTALb 'LOCATE 19, 2: PRINT "atk= "; atk 'SLEEP IF TOTALa + TOTALb = 0 THEN GOTO GameOverMan LOCATE 20, 3: PRINT "Ships have moved" LOCATE 21, 3: PRINT flushmoves * 2; "light years." SLEEP 2 'FOR HalfTurns = 1 TO 2 '------------------------------------------------ IF move > move2 THEN FOR atk = 1 TO move CALL TravelThroughSpace IF atk > move2 THEN GOTO SkipPlayerTwo CALL TravelThruSpace2 SkipPlayerTwo: NEXT atk END IF '------------------------------------------------- IF move2 > move THEN FOR atk = 1 TO move2 CALL TravelThruSpace2 IF atk > move THEN GOTO SkipPlayerOne CALL TravelThroughSpace SkipPlayerOne: NEXT atk END IF '-----------------------< DEFAULT >---------------- IF move = move2 THEN FOR atk = 1 TO move CALL TravelThroughSpace CALL TravelThruSpace2 NEXT atk END IF 'NEXT HalfTurns CALL Event CALL ProcessMoves NEXT flushmoves GameOverMan: LOCATE 25, 27: COLOR 14, 1: PRINT "Game Over, Man! GAME OVER!"; SLEEP 1 END SUB SUB OpeningScreens IF AskingInput$ = "YES" THEN GOTO BeginInput CALL Banner COLOR 15, 1: CLS COLOR 0, 0 LOCATE 1, 1: PRINT " " LOCATE 2, 1: PRINT " " LOCATE 3, 1: PRINT " " LOCATE 4, 1: PRINT " " COLOR 10, 0 'LOCATE 3, 30 'PRINT "GALACTIC CONQUEST" LOCATE 2, 3: PRINT "ÛßßÛ ÛßßÛ Û ÛßßÛ ÛßßÛ ßÛß Û ÛßßÛ ÛßßÛ ÛßßÛ Û Û ÛßßßÛ Û Û Ûßßß Ûßßß ßÛß" LOCATE 3, 3: PRINT "Û ÜÜ ÛÜÜÛ Û ÛÜÜÛ Û Û Û Û Û Û Û ÛßÜ Û Û Ü Û Û Û ÛÜÜÜ ÛÜÜÜ Û " LOCATE 4, 3: PRINT "ÛÜÜÛ Û Û ÛÜÜ Û Û ÛÜÜÛ Û Û ÛÜÜÛ ÛÜÜÛ ÛÜÜÛ Û ßÛ ÛÜÜßÜ ÛÜÜÛ ÛÜÜÜ ÜÜÜÛ Û " COLOR 12, 0 'LOCATE 5, 1: FOR X = 1 TO 80: PRINT CHR$(205); : NEXT X LOCATE 5, 1: PRINT "ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ" COLOR 15, 1 LOCATE 7, 15: PRINT "Galactic Conquest -- Copyright 1988, Rick Raddatz" PRINT PRINT " This is a two player game which has the look and feel of Rick's famous" PRINT " game, GALCON24. Frustrated by planets revolting in the original version," PRINT " we decided to write our own version, but with revolts that would fail." PRINT PRINT " If a planet revolts, the rebels are caught, tortured and killed." PRINT PRINT " The game is played like 'Risk.' Ships move two dots (light years) per turn." PRINT PRINT " "; COLOR 14, 4 PRINT "You won't see your moves as you enter them, otherwise, so would your opponent!" COLOR 15, 1 PRINT PRINT " NOTE: If Player A accidentally presses an extra and ends up" PRINT " in Player B's turn, he can press the to get back." PRINT PRINT " Press ESC or * during the game for the Menu. Have fun! - Mike Simpson" PRINT " Press a key" SLEEP DO anykey$ = INKEY$ IF anykey$ <> "" THEN EXIT DO LOOP WHILE INKEY$ = "" CALL Clearbuffer SOUND 2000, 1: SOUND 2600, 1 '=========================================================================== BeginInput: SCREEN 0 VIEW PRINT 1 TO 25 AskingInput$ = "YES" COLOR 14, 1: CLS COLOR 15, 1: LOCATE 20, 30: PRINT "Enter "; CHR$(34); "L"; CHR$(34); " to load saved game.": COLOR 14, 1 LOCATE 3, 8 'INPUT "How many people are playing ? (2-7) :", player PRINT "How many people are playing ? (2)": Player = 2 HowManyTurns: LOCATE 5, 8 INPUT "How many turns do you want to play ? :", MAXTURNS$ IF MAXTURNS$ = "l" OR MAXTURNS$ = "L" THEN CALL LoadFile: GOTO BeginInput MAXTURNS = VAL(MAXTURNS$) IF MAXTURNS = 0 THEN GOTO HowManyTurns PlanetCount: LOCATE 7, 8 INPUT "How many planets ? (2 - 40) :", Planets$ IF Planet$ = "l" OR Planet$ = "L" THEN CALL LoadFile: GOTO BeginInput Planets = VAL(Planets$) IF Planets > 40 THEN Planets = 40 IF Planets < 2 THEN GOTO PlanetCount LOCATE 20, 30: PRINT " " Player1: LOCATE 13, 8 INPUT "What is the name of player number 1 (5 chars max) ? ", PLAYERNUMBER1$ IF PLAYERNUMBER1$ = "" THEN GOTO Player1 PLAYERNUMBER1$ = PLAYERNUMBER1$ + " " Player1$ = LEFT$(PLAYERNUMBER1$, 5) Player2: LOCATE 14, 8 INPUT "What is the name of player number 2 (5 chars max) ? ", PLAYERNUMBER2$ IF PLAYERNUMBER2$ = "" THEN GOTO Player2 PLAYERNUMBER2$ = PLAYERNUMBER2$ + " " Player2$ = LEFT$(PLAYERNUMBER2$, 5) 'LOCATE 18, 18: COLOR 14, 4: PRINT "Press during game for menu.": SLEEP 2 'COLOR 14, 1 CLS AskingInput$ = "" END SUB SUB PopulateStats Row = 3 FOR x = 1 TO 20 COLOR 7, 0 IF PlanetOwner$(x) = Player1$ THEN COLOR 15, 0 IF PlanetOwner$(x) = Player2$ THEN COLOR 10, 0 Row = Row + 1 LOCATE Row, 2 PRINT Planet$(x) IF PlanetOwner$(x) = "Neutral" OR PlanetOwner$(x) = "" THEN COLOR 0, 0 LOCATE Row, 4 PRINT PLANETSHIPS(x) LOCATE Row, 8 PRINT PLANETPRODUCTION(x) LOCATE Row, 11 PRINT PLANETKILL(x) LOCATE Row, 15 IF PlanetOwner$(x) <> "Neutral" THEN PRINT PlanetOwner$(x) NEXT x Row = 3 FOR x = 21 TO 40 COLOR 7, 0 IF PlanetOwner$(x) = Player1$ THEN COLOR 15, 0 IF PlanetOwner$(x) = Player2$ THEN COLOR 10, 0 Row = Row + 1 LOCATE Row, 22 PRINT Planet$(x) IF PlanetOwner$(x) = "Neutral" OR PlanetOwner$(x) = "" THEN COLOR 0, 0 LOCATE Row, 24 PRINT PLANETSHIPS(x) LOCATE Row, 28 PRINT PLANETPRODUCTION(x) LOCATE Row, 31 PRINT PLANETKILL(x) LOCATE Row, 35 IF PlanetOwner$(x) <> "Neutral" THEN PRINT PlanetOwner$(x) NEXT x END SUB SUB ProcessMoves FOR LOOPS = 1 TO Planets IF PlanetOwner$(LOOPS) = Player1$ OR PlanetOwner$(LOOPS) = Player2$ THEN PLANETSHIPS(LOOPS) = PLANETSHIPS(LOOPS) + PLANETPRODUCTION(LOOPS) END IF NEXT END SUB SUB RedBox 'Draw small red box COLOR 15, 4 LOCATE 20, 48: PRINT CHR$(201) LOCATE 24, 48: PRINT CHR$(200) LOCATE 20, 80: PRINT CHR$(187) LOCATE 24, 80: PRINT CHR$(188) FOR y = 49 TO 79: LOCATE 20, y: PRINT CHR$(205): NEXT y FOR y = 49 TO 79: LOCATE 24, y: PRINT CHR$(205): NEXT y FOR x = 21 TO 23: LOCATE x, 48: PRINT CHR$(186): NEXT x FOR x = 21 TO 23: LOCATE x, 80: PRINT CHR$(186): NEXT x FOR x = 21 TO 23: LOCATE x, 49: PRINT " ": NEXT x 'LOCATE 24, 6: PRINT "NEAR STACK MEMORY FREE= "; FRE(0) END SUB SUB RedrawScreen 'CALL DRAWBOARD CALL DrawGameBox FOR x = 1 TO Planets LOCATE PlanetXposition(x), PlanetYposition(x) COLOR 6, 0 IF PlanetOwner$(x) = Player1$ THEN COLOR 15, 0 ELSE IF PlanetOwner$(x) = Player2$ THEN COLOR 10, 0 PRINT Planet$(x) NEXT x CALL StatsScreen IF TurnNumber = MAXTURNS - 1 THEN CALL AddTurns: CALL StatsScreen '(again) CALL PopulateStats END SUB SUB RunGame GameIsRunning: CALL EnterMOVES CALL EnterMOVES2 IF Backupflag = 1 GOTO GameIsRunning CALL Navigator CALL ProcessMoves IF AutoSave$ = "ON" THEN CALL AutoSaveGame CALL RedrawScreen GOTO GameIsRunning END SUB SUB SaveFile OPEN "O", 1, filename$ PRINT #1, Player1$ PRINT #1, Player2$ PRINT #1, TurnNumber PRINT #1, MAXTURNS PRINT #1, Planets PRINT #1, atk PRINT #1, move PRINT #1, move2 FOR info = 1 TO Planets PRINT #1, Planet$(info), ","; PlanetOwner$(info), ","; PlanetXposition(info), ","; PlanetYposition(info), ","; PLANETKILL(info), ","; PLANETPRODUCTION(info), ","; PLANETSHIPS(info) NEXT info FOR InTransit = 1 TO move PRINT #1, AttackerOne$(InTransit), ","; P1To$(InTransit), ","; P1ships(InTransit) NEXT InTransit FOR InTransit = 1 TO move2 PRINT #1, AttackerTwo$(InTransit), ","; P2To$(InTransit), ","; P2ships(InTransit) NEXT InTransit CLOSE #1 END SUB SUB StatsScreen 'Draw Stats window COLOR 14, 0 LOCATE 1, 1: PRINT CHR$(201) LOCATE 24, 1: PRINT CHR$(200) LOCATE 1, 40: PRINT CHR$(187) LOCATE 24, 40: PRINT CHR$(188) FOR y = 2 TO 39: LOCATE 1, y: PRINT CHR$(205): NEXT y FOR y = 2 TO 39: LOCATE 24, y: PRINT CHR$(205): NEXT y FOR x = 2 TO 23: LOCATE x, 1: PRINT CHR$(186): NEXT x FOR x = 2 TO 23: LOCATE x, 40: PRINT CHR$(186): NEXT x LOCATE 2, 2: COLOR 15, 0 PRINT "P Ship Pr %% Owner P Ship Pr %% Owner" LOCATE 3, 2 PRINT "- ---- -- -- ----- - ---- -- -- -----" FOR x = 4 TO 23: LOCATE x, 2: PRINT SPACE$(38): NEXT x CALL RedBox END SUB SUB TravelThroughSpace 'Take the DistanceToGo which has been passed from the 'EnterMOVES sub in AttackerOne$ and move two "light years." 'When the DistanceToGo is zero, an attack has hit. 'Which planet is attacking? Attacker$ = (LEFT$(AttackerOne$(atk), 1)) player1loop = atk 'Get the distance to the attacked planet DistanceToGo = VAL(MID$(AttackerOne$(atk), 4, 5)) 'If an attack has hit, make sure it doesn't hit again. IF DistanceToGo = 0 OR DistanceToGo < 0 GOTO done '------------------------------------------ 'Now move the ships '------------------------------------------ DistanceToGo = DistanceToGo - 2 'This is a fix to prevent exponential numbers: IF DistanceToGo < 1 AND DistanceToGo > 0 THEN DistanceToGo = 1 '---------------------------------------- IF DistanceToGo = 0 OR DistanceToGo < 0 THEN AttackedPlanet$ = P1To$(atk) 'PRINT "ATTACKED PLANET IS "; AttackedPlanet$: SLEEP 2 CALL AttackPlanet END IF done: 'Put the string back together with new values AttackerOne$(atk) = Attacker$ + " " + STR$(DistanceToGo) IF DistanceToGo = 0 OR DistanceToGo < 0 THEN AttackerOne$(atk) = "" 'clear array P1To$(atk) = "" 'clear array END IF 'LOCATE 11, 2: PRINT " " 'LOCATE 11, 2: PRINT "AttackerTwo(atk)= "; AttackerOne$(atk): SLEEP 1 'LOCATE 11, 2: PRINT "AttackerOne$(atk)= "; AttackerOne$(atk) 'IF AttackerOne$ = "" THEN 'LOCATE 11, 2: PRINT "AttackerOne$(atk)= NULL" 'END IF END SUB SUB TravelThruSpace2 'Take the DistanceToGo which has been passed from the 'EnterMOVES2 sub in AttackerTwo$ and move two "light years." 'When the DistanceToGo is zero, an attack has hit. 'Which planet is attacking? Attacker2$ = (LEFT$(AttackerTwo$(atk), 1)) player2loop = atk 'Get the distance to the attacked planet DistanceToGo = VAL(MID$(AttackerTwo$(atk), 4, 5)) 'If an attack has hit, make sure it doesn't hit again. IF DistanceToGo = 0 OR DistanceToGo < 0 GOTO done2 '------------------------------------------ 'Now move the ships '------------------------------------------ DistanceToGo = DistanceToGo - 2 'Fix to prevent exponential numbers: IF DistanceToGo < 1 AND DistanceToGo > 0 THEN DistanceToGo = 1 '---------------------------------------- IF DistanceToGo = 0 OR DistanceToGo < 0 THEN AttackedPlanet$ = P2To$(atk) 'PRINT "ATTACKED PLANET IS "; AttackedPlanet$: SLEEP 2 CALL AttackPlanet2 END IF done2: 'Put the string back together with new values AttackerTwo$(atk) = Attacker2$ + " " + STR$(DistanceToGo) IF DistanceToGo = 0 OR DistanceToGo < 0 THEN AttackerTwo$(atk) = "" 'clear array P2To$(atk) = "" 'clear array END IF 'LOCATE 11, 2: PRINT " " 'LOCATE 11, 2: PRINT "AttackerTwo(atk)= "; AttackerTwo$(atk) 'LOCATE 11, 2: PRINT "AttackerTwo$(atk)= "; AttackerTwo$(atk) 'IF AttackerTwo$ = "" THEN 'LOCATE 11, 2: PRINT "AttackerTwo$(atk)= NULL" 'END IF 'SLEEP 1 END SUB SUB THEKEEP CLS COLOR 12, 0 LOCATE 2, 2: PRINT "±±±±±±±±±±"; COLOR 8, 0 LOCATE 2, 12: PRINT "Ü"; COLOR 15, 0 LOCATE 2, 15: PRINT "Call:"; COLOR 12, 0 LOCATE 2, 46: PRINT "ú"; COLOR 8, 0 LOCATE 2, 57: PRINT "ú"; COLOR 12, 0 LOCATE 3, 2: PRINT "±±"; COLOR 8, 0 LOCATE 3, 4: PRINT "Ûß"; COLOR 12, 0 LOCATE 3, 6: PRINT "±±"; COLOR 8, 0 LOCATE 3, 8: PRINT "Ûß"; COLOR 12, 0 LOCATE 3, 10: PRINT "±±"; COLOR 8, 0 LOCATE 3, 12: PRINT "Û"; COLOR 15, 0 LOCATE 3, 42: PRINT "."; LOCATE 3, 68: PRINT "."; COLOR 8, 0 LOCATE 4, 3: PRINT "ßß"; COLOR 12, 0 LOCATE 4, 6: PRINT "±±"; COLOR 8, 0 LOCATE 4, 8: PRINT "Û"; LOCATE 4, 11: PRINT "ßß"; COLOR 12, 0 LOCATE 4, 14: PRINT "±±"; COLOR 8, 0 LOCATE 4, 16: PRINT "Ü"; COLOR 12, 0 LOCATE 4, 18: PRINT "±±"; COLOR 8, 0 LOCATE 4, 20: PRINT "Ü"; COLOR 12, 0 LOCATE 4, 22: PRINT "±±±±±±"; COLOR 8, 0 LOCATE 4, 28: PRINT "Ü"; COLOR 3, 0 LOCATE 4, 61: PRINT "³"; COLOR 12, 0 LOCATE 4, 62: PRINT "ÛÛ"; LOCATE 5, 6: PRINT "±±"; COLOR 8, 0 LOCATE 5, 8: PRINT "Û"; COLOR 12, 0 LOCATE 5, 14: PRINT "±±"; COLOR 8, 0 LOCATE 5, 16: PRINT "Û"; COLOR 12, 0 LOCATE 5, 18: PRINT "±±"; COLOR 8, 0 LOCATE 5, 20: PRINT "Û"; COLOR 12, 0 LOCATE 5, 22: PRINT "±±"; COLOR 8, 0 LOCATE 5, 24: PRINT "Ûßßßß"; COLOR 3, 0 LOCATE 5, 34: PRINT "ú"; LOCATE 5, 50: PRINT "ú"; COLOR 3, 0 LOCATE 5, 61: PRINT "³"; COLOR 3, 0 LOCATE 5, 73: PRINT "ú"; COLOR 12, 0 LOCATE 6, 6: PRINT "±±"; COLOR 8, 0 LOCATE 6, 8: PRINT "Û"; COLOR 12, 0 LOCATE 6, 14: PRINT "±±±±±±"; COLOR 8, 0 LOCATE 6, 20: PRINT "Û"; COLOR 12, 0 LOCATE 6, 22: PRINT "±±±±"; COLOR 8, 0 LOCATE 6, 26: PRINT "Ü"; COLOR 15, 0 LOCATE 6, 52: PRINT "."; COLOR 3, 0 LOCATE 6, 61: PRINT "³"; COLOR 12, 0 LOCATE 7, 6: PRINT "±±"; COLOR 8, 0 LOCATE 7, 8: PRINT "Û"; COLOR 15, 0 LOCATE 7, 12: PRINT "."; COLOR 12, 0 LOCATE 7, 14: PRINT "±±"; COLOR 8, 0 LOCATE 7, 16: PRINT "Ûß"; COLOR 12, 0 LOCATE 7, 18: PRINT "±±"; COLOR 8, 0 LOCATE 7, 20: PRINT "Û"; COLOR 12, 0 LOCATE 7, 22: PRINT "±±"; COLOR 8, 0 LOCATE 7, 24: PRINT "Ûßß"; COLOR 15, 0 LOCATE 7, 34: PRINT "."; LOCATE 7, 58: PRINT "Û"; LOCATE 7, 60: PRINT "Ü"; COLOR 3, 0 LOCATE 7, 61: PRINT "³"; COLOR 15, 0 LOCATE 7, 62: PRINT "Ü"; LOCATE 7, 64: PRINT "Ü"; COLOR 15, 7 LOCATE 7, 66: PRINT "Û"; COLOR 12, 0 LOCATE 8, 5: PRINT "±±±±"; COLOR 8, 0 LOCATE 8, 9: PRINT "Û"; COLOR 12, 0 LOCATE 8, 14: PRINT "±±"; COLOR 8, 0 LOCATE 8, 16: PRINT "Û"; COLOR 12, 0 LOCATE 8, 18: PRINT "±±"; COLOR 8, 0 LOCATE 8, 20: PRINT "Û"; COLOR 12, 0 LOCATE 8, 22: PRINT "±±±±±±"; COLOR 8, 0 LOCATE 8, 28: PRINT "Ü"; COLOR 3, 0 LOCATE 8, 40: PRINT "³"; COLOR 12, 0 LOCATE 8, 41: PRINT "ÛÛ"; COLOR 15, 0 LOCATE 8, 58: PRINT "ÛÛÛÛÛÛÛÛÛ"; COLOR 3, 0 LOCATE 8, 74: PRINT "³"; COLOR 12, 0 LOCATE 8, 75: PRINT "ÛÛ"; COLOR 8, 0 LOCATE 9, 6: PRINT "ßßßß"; LOCATE 9, 15: PRINT "ßß"; LOCATE 9, 19: PRINT "ßß"; LOCATE 9, 23: PRINT "ßßßßßß"; COLOR 3, 0 LOCATE 9, 40: PRINT "³"; LOCATE 9, 46: PRINT "³"; COLOR 12, 0 LOCATE 9, 47: PRINT "ÛÛ"; COLOR 15, 7 LOCATE 9, 59: PRINT "ÜÜÜÜÜÜÜ"; COLOR 3, 0 LOCATE 9, 74: PRINT "³"; COLOR 12, 0 LOCATE 10, 1: PRINT "±±±"; COLOR 8, 0 LOCATE 10, 4: PRINT "Ü"; COLOR 12, 0 LOCATE 10, 6: PRINT "±±±±"; COLOR 8, 0 LOCATE 10, 10: PRINT "Ü"; COLOR 15, 0 LOCATE 10, 17: PRINT "."; LOCATE 10, 28: PRINT "."; COLOR 7, 0 LOCATE 10, 37: PRINT "Û"; LOCATE 10, 39: PRINT "Ü"; COLOR 3, 0 LOCATE 10, 40: PRINT "³"; COLOR 7, 0 LOCATE 10, 41: PRINT "Ü"; COLOR 8, 7 LOCATE 10, 43: PRINT "²"; COLOR 3, 0 LOCATE 10, 46: PRINT "³"; COLOR 15, 0 LOCATE 10, 59: PRINT "ÛßÛÛÜÛ"; COLOR 15, 7 LOCATE 10, 65: PRINT "Û"; COLOR 7, 0 LOCATE 10, 71: PRINT "Û"; LOCATE 10, 73: PRINT "Ü"; COLOR 3, 0 LOCATE 10, 74: PRINT "³"; COLOR 7, 0 LOCATE 10, 75: PRINT "Ü"; COLOR 8, 7 LOCATE 10, 77: PRINT "²"; COLOR 12, 0 LOCATE 11, 2: PRINT "±±"; COLOR 8, 0 LOCATE 11, 4: PRINT "Û"; COLOR 12, 0 LOCATE 11, 6: PRINT "±±"; COLOR 8, 0 LOCATE 11, 8: PRINT "Ûßß"; COLOR 0, 7 LOCATE 11, 37: PRINT "ÚÚÚÚ"; COLOR 8, 7 LOCATE 11, 41: PRINT "°±²"; COLOR 7, 0 LOCATE 11, 45: PRINT "Ü"; COLOR 3, 0 LOCATE 11, 46: PRINT "³"; COLOR 7, 0 LOCATE 11, 47: PRINT "Ü"; COLOR 8, 7 LOCATE 11, 49: PRINT "²"; COLOR 15, 0 LOCATE 11, 59: PRINT "ÛÛÛÛÛÛ"; COLOR 15, 7 LOCATE 11, 65: PRINT "Û"; COLOR 7, 0 LOCATE 11, 67: PRINT "Û"; LOCATE 11, 69: PRINT "Ü"; COLOR 0, 7 LOCATE 11, 71: PRINT "ÚÚÚÚ"; COLOR 8, 7 LOCATE 11, 75: PRINT "°±²"; COLOR 12, 0 LOCATE 12, 2: PRINT "±±"; COLOR 8, 0 LOCATE 12, 4: PRINT "Û"; COLOR 12, 0 LOCATE 12, 6: PRINT "±±"; COLOR 8, 0 LOCATE 12, 8: PRINT "Û"; COLOR 12, 0 LOCATE 12, 13: PRINT "±±±±±±"; COLOR 8, 0 LOCATE 12, 19: PRINT "Ü"; COLOR 12, 0 LOCATE 12, 21: PRINT "±±±±±±"; COLOR 8, 0 LOCATE 12, 27: PRINT "Ü"; COLOR 12, 0 LOCATE 12, 29: PRINT "±±±±±±"; COLOR 8, 0 LOCATE 12, 35: PRINT "Ü"; COLOR 8, 7 LOCATE 12, 38: PRINT "±±±²²"; COLOR 0, 7 LOCATE 12, 43: PRINT "ÚÚÚÚ"; COLOR 8, 7 LOCATE 12, 47: PRINT "°±²"; COLOR 15, 0 LOCATE 12, 59: PRINT "ÛÛßÛÛÛ"; COLOR 15, 7 LOCATE 12, 65: PRINT "Û"; COLOR 0, 7 LOCATE 12, 67: PRINT "ÚÚÚÚ"; COLOR 7, 0 LOCATE 12, 71: PRINT "Û"; COLOR 8, 7 LOCATE 12, 72: PRINT "±±±²²"; COLOR 12, 0 LOCATE 13, 2: PRINT "±±±±±±±±"; COLOR 8, 0 LOCATE 13, 10: PRINT "Ü"; COLOR 12, 0 LOCATE 13, 13: PRINT "±±"; COLOR 8, 0 LOCATE 13, 15: PRINT "Ûßßßß"; COLOR 12, 0 LOCATE 13, 21: PRINT "±±"; COLOR 8, 0 LOCATE 13, 23: PRINT "Ûßßßß"; COLOR 12, 0 LOCATE 13, 29: PRINT "±±"; COLOR 8, 0 LOCATE 13, 31: PRINT "Ûß"; COLOR 12, 0 LOCATE 13, 33: PRINT "±±"; COLOR 8, 0 LOCATE 13, 35: PRINT "Û"; COLOR 7, 0 LOCATE 13, 38: PRINT "Ûß"; COLOR 8, 7 LOCATE 13, 40: PRINT "°±²"; LOCATE 13, 44: PRINT "±±±²²"; COLOR 15, 0 LOCATE 13, 59: PRINT "ÛÛÛÛÛÛ"; COLOR 15, 7 LOCATE 13, 65: PRINT "Û"; COLOR 8, 7 LOCATE 13, 68: PRINT "±±±²"; COLOR 7, 0 LOCATE 13, 72: PRINT "Ûß"; COLOR 8, 7 LOCATE 13, 74: PRINT "°±²"; COLOR 12, 0 LOCATE 14, 2: PRINT "±±"; COLOR 8, 0 LOCATE 14, 4: PRINT "Ûßßß"; COLOR 12, 0 LOCATE 14, 8: PRINT "±±"; COLOR 8, 0 LOCATE 14, 10: PRINT "Û"; COLOR 12, 0 LOCATE 14, 13: PRINT "±±±±"; COLOR 8, 0 LOCATE 14, 17: PRINT "Ü"; COLOR 12, 0 LOCATE 14, 21: PRINT "±±±±"; COLOR 8, 0 LOCATE 14, 25: PRINT "Ü"; COLOR 12, 0 LOCATE 14, 29: PRINT "±±±±±±"; COLOR 8, 0 LOCATE 14, 35: PRINT "Û"; COLOR 7, 0 LOCATE 14, 38: PRINT "ÛÛ"; COLOR 8, 7 LOCATE 14, 40: PRINT "°±²"; COLOR 7, 0 LOCATE 14, 44: PRINT "ÛÛ"; COLOR 8, 7 LOCATE 14, 46: PRINT "°±²"; COLOR 7, 0 LOCATE 14, 50: PRINT "Ü"; LOCATE 14, 52: PRINT "Ü"; LOCATE 14, 54: PRINT "Ü"; LOCATE 14, 56: PRINT "Ü"; LOCATE 14, 58: PRINT "Ü"; COLOR 15, 0 LOCATE 14, 59: PRINT "Û"; COLOR 15, 7 LOCATE 14, 60: PRINT "ß"; COLOR 15, 0 LOCATE 14, 61: PRINT "Û"; COLOR 15, 7 LOCATE 14, 62: PRINT "ß"; COLOR 15, 0 LOCATE 14, 63: PRINT "Û"; COLOR 15, 7 LOCATE 14, 64: PRINT "ßÛ"; COLOR 7, 0 LOCATE 14, 66: PRINT "Ü"; LOCATE 14, 68: PRINT "Ûß"; COLOR 8, 7 LOCATE 14, 70: PRINT "°±"; COLOR 7, 0 LOCATE 14, 72: PRINT "ÛÛ"; COLOR 8, 7 LOCATE 14, 74: PRINT "°±²"; COLOR 12, 0 LOCATE 15, 2: PRINT "±±"; COLOR 8, 0 LOCATE 15, 4: PRINT "Û"; COLOR 12, 0 LOCATE 15, 8: PRINT "±±"; COLOR 8, 0 LOCATE 15, 10: PRINT "Û"; COLOR 12, 0 LOCATE 15, 13: PRINT "±±"; COLOR 8, 0 LOCATE 15, 15: PRINT "Ûßß"; COLOR 12, 0 LOCATE 15, 21: PRINT "±±"; COLOR 8, 0 LOCATE 15, 23: PRINT "Ûßß"; COLOR 12, 0 LOCATE 15, 29: PRINT "±±"; COLOR 8, 0 LOCATE 15, 31: PRINT "Ûßßßß"; COLOR 7, 0 LOCATE 15, 38: PRINT "ÛÛ"; COLOR 8, 7 LOCATE 15, 40: PRINT "°±²"; COLOR 7, 0 LOCATE 15, 43: PRINT "ÛÛÛÛÛÛÛÛÛÛÛÛÛßßßßßÛÛÛÛÛÛÛÛÛÛ²ÛÛ"; COLOR 8, 7 LOCATE 15, 74: PRINT "°±²"; COLOR 12, 0 LOCATE 16, 1: PRINT "±±±±"; COLOR 8, 0 LOCATE 16, 5: PRINT "Û"; COLOR 12, 0 LOCATE 16, 7: PRINT "±±±±"; COLOR 8, 0 LOCATE 16, 11: PRINT "Û"; COLOR 12, 0 LOCATE 16, 13: PRINT "±±±±±±"; COLOR 8, 0 LOCATE 16, 19: PRINT "Ü"; COLOR 12, 0 LOCATE 16, 21: PRINT "±±±±±±"; COLOR 8, 0 LOCATE 16, 27: PRINT "Ü"; COLOR 12, 0 LOCATE 16, 29: PRINT "±±"; COLOR 8, 0 LOCATE 16, 31: PRINT "Û"; COLOR 7, 0 LOCATE 16, 38: PRINT "ÛÜ"; COLOR 8, 7 LOCATE 16, 40: PRINT "°±²"; COLOR 7, 0 LOCATE 16, 43: PRINT "ÛÛÛÛÛÛ"; LOCATE 16, 50: PRINT "Û"; LOCATE 16, 52: PRINT "ÛÛÛß"; COLOR 6, 0 LOCATE 16, 57: PRINT "²²²"; COLOR 7, 0 LOCATE 16, 61: PRINT "ßÛÛÛ"; LOCATE 16, 66: PRINT "Û"; LOCATE 16, 68: PRINT "ÛÛÛ²ÛÜ"; COLOR 8, 7 LOCATE 16, 74: PRINT "°±²"; COLOR 8, 0 LOCATE 17, 2: PRINT "ßßßß"; LOCATE 17, 8: PRINT "ßßßß"; LOCATE 17, 14: PRINT "ßßßßßß"; LOCATE 17, 22: PRINT "ßßßßßß"; LOCATE 17, 30: PRINT "ßß"; COLOR 7, 0 LOCATE 17, 38: PRINT "ÛÛ"; COLOR 8, 7 LOCATE 17, 40: PRINT "°±²"; COLOR 7, 0 LOCATE 17, 43: PRINT "ÛÛÛÛÛÛÛÛÛÛÛÛ"; COLOR 6, 0 LOCATE 17, 56: PRINT "²²²²²"; COLOR 7, 0 LOCATE 17, 62: PRINT "ÛÛÛÛÛÛÛÛÛ²ÛÛ"; COLOR 8, 7 LOCATE 17, 74: PRINT "°±²"; COLOR 7, 0 LOCATE 18, 38: PRINT "ÛÛ"; COLOR 8, 7 LOCATE 18, 40: PRINT "°±²"; COLOR 7, 0 LOCATE 18, 43: PRINT "ÛÛÛÛÛÛÛÛÛÛÛÛ"; COLOR 6, 0 LOCATE 18, 56: PRINT "²²²²²"; COLOR 7, 0 LOCATE 18, 62: PRINT "ÛÛÛÛÛÛÛÛÛ²ÛÛ"; COLOR 8, 7 LOCATE 18, 74: PRINT "°±²"; COLOR 11, 0 LOCATE 19, 6: PRINT "Sysop:"; LOCATE 19, 14: PRINT "Andrew"; LOCATE 19, 21: PRINT "Ramsey"; COLOR 2, 0 LOCATE 19, 35: PRINT "ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»"; LOCATE 20, 35: PRINT "º"; COLOR 11, 0 LOCATE 20, 37: PRINT "Node"; LOCATE 20, 42: PRINT "#1"; LOCATE 20, 45: PRINT "(215)"; LOCATE 20, 51: PRINT "NNN-XXXX"; LOCATE 20, 61: PRINT "USR"; LOCATE 20, 65: PRINT "HST/DS"; LOCATE 20, 72: PRINT "28800"; COLOR 2, 0 LOCATE 20, 79: PRINT "º"; LOCATE 21, 35: PRINT "º"; COLOR 11, 0 LOCATE 21, 37: PRINT "Node"; LOCATE 21, 42: PRINT "#2"; LOCATE 21, 45: PRINT "(215)"; LOCATE 21, 51: PRINT "NNN-XXXX"; LOCATE 21, 61: PRINT "USR"; LOCATE 21, 65: PRINT "HST/DS"; LOCATE 21, 72: PRINT "14400"; COLOR 2, 0 LOCATE 21, 79: PRINT "º"; LOCATE 22, 35: PRINT "º"; COLOR 14, 0 LOCATE 22, 1: PRINT "These numbers were for" LOCATE 23, 1: PRINT "The KEEP BBS in 1991" COLOR 11, 0 LOCATE 22, 37: PRINT "Node"; LOCATE 22, 42: PRINT "#3"; LOCATE 22, 45: PRINT "(215)"; LOCATE 22, 51: PRINT "NNN-XXXX"; LOCATE 22, 61: PRINT "USR"; LOCATE 22, 65: PRINT "HST/DS"; LOCATE 22, 72: PRINT "14400"; COLOR 2, 0 LOCATE 22, 79: PRINT "º"; LOCATE 23, 35: PRINT "ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ"; COLOR 7, 0 END SUB SUB AutoSaveGame Field1$ = LEFT$(DATE$, 2) Field2$ = MID$(DATE$, 4, 2) Field3$ = RIGHT$(DATE$, 4) FileDate$ = Field1$ + Field2$ + Field3$ + ".SAV" OPEN "O", 1, FileDate$ PRINT #1, Player1$ PRINT #1, Player2$ PRINT #1, TurnNumber PRINT #1, MAXTURNS PRINT #1, Planets PRINT #1, atk PRINT #1, move PRINT #1, move2 FOR info = 1 TO Planets PRINT #1, Planet$(info), ","; PlanetOwner$(info), ","; PlanetXposition(info), ","; PlanetYposition(info), ","; PLANETKILL(info), ","; PLANETPRODUCTION(info), ","; PLANETSHIPS(info) NEXT info FOR InTransit = 1 TO move PRINT #1, AttackerOne$(InTransit), ","; P1To$(InTransit), ","; P1ships(InTransit) NEXT InTransit FOR InTransit = 1 TO move2 PRINT #1, AttackerTwo$(InTransit), ","; P2To$(InTransit), ","; P2ships(InTransit) NEXT InTransit CLOSE #1 END SUB