Cybor by Andrew Clark from Sinclair User 47 (Feb.1986) Defend the planet Cybor against Alec [sic] the Malevolent and his army of droids in a fast moving game by Andrew Clark of Yorkey's Knob in Queensland, Australia. Dodge the citadels which rush towards you across the flat surface of the planet and try to shoot down as many droids as you can in the mean- time. Cybor runs on any Spectrum, and includes a high score feature. Line 3 The POKE in line three changes the cursor to CAPS mode, so that all further letters typed will appear in capitals. The program then goes to the subroutine at line 7000 which sets up the user-defined graphics. Lines 4-20 The instructions are held in subroutine 6000, and the program prints those if you want them. Important variables are set up and then subroutine 9000 is called, which draws the basic screen - sky and land. Lines 85-110 The lives are drawn in at the top of the screen, along with the current score and your spacecraft at the bottom. Remember to input the underlined letters in graphics mode! If the score is of any size, the program goes to a series of congratulation routines at line 8000 onwards. Lines 112-150 If you press a key, the program checks to see if it's the ENTER key (with code 13). If it is, it sends you to the shoot routine at line 2000. Otherwise, blank spaces are printed over your ship, the co-ordinates of the ship changed, and the new ship printed according to which way you moved. The co-ordinate is held in variable 'y'. Lines 160-170 Regardless of what you pressed, the program checks to see if it wants to put a droid on the screen. Variable 'ship' is set to 0 if there's no ship and 1 if there is. Line 160 is complicated. The expression "NOT ship" will be 1 if ship = 0 and 0 if ship = 1. "IF NOT ship" is the same as "IF NOT ship = 1", so if there's a ship on the screen nothing new happens, but if there isn't the program uses the random number generator to see if one will appear this time. At line 170 that has been decided, and "IF ship" works the same way. That is, if the variable 'ship' is equal to 1, then its coordinate 'x' is increased and the ship is printed at a new position on the screen. The reason Andrew uses this shorthand version of the normal IF statement is because it works a little faster, thus speeding up the game. Lines 800-1040 The variable 'stage' contains a number from 1000 to 1040, and controls the way in which the citadels which come towards you are printed. Each separate subroutine prints a larger citadel on the screen - the variable 'block' fixes its position. Line 805 checks to see if any part of the block touches your spacecraft, and line 810 increases the values of 'stage'. Lines 2000-2999 This is really just a combination of BEEPs and lines on the screen to simulate the laser. At 2035 the program checks to see if an enemy ship is on-screen and if you have hit it. Lines 3000-3099 The enemy plane is destroyed. All those commas have the effect of overprinting the three lines containing the plane. By using different BRIGHT and PAPER values in succession, a flashing effect is achieved. This sort of thing can only be done by experimentation. Lines 4000-4030 More graphical pyrotechnics as your ship is destroyed. Lines 4040-4199 One life is deducted, and if you have lost the lot you go to the score feature. If your score is the hi-score, you are asked to enter your initials. At 4130 to 4155 you are asked if you want another game. RANDOMIZE USR 0 is called a soft reset and has the effect of zapping out the entire program from memory, plus all user-defined graphics. Lines 6000-6070 This section prints out the instructions on the screen. Lines 7000-7999 This routine loads in the data for the user-defined graphics of spaceships, enemy planes and so on. Lines 8000-8100 This plays a congratulatory tune and gives you a message if you complete the game. Lines 9000-9020 Sets up the background screen. Line 9999 saves the game if you want to auto-run.