24K Cassette or 32K Disk
by Mark Comeau
Your mission, should you choose to accept it, is to recover the lost plans to the top secret satellite. You will be flying a superpowered, highly maneuverable spy plane. You must dodge enemy lasers, rockets and an active volcano. You will either succeed or die in the process. Seven cases of plans must be recovered from the seven multi-colored screens. Report to the base immediately and get your spy plane flying!
Spy Plane is a fast moving, BASIC game that will test your arcade skills to the limit. You must fly your plane through a long cavern full of lasers and missiles. The objective is to capture the seven cases of plans that were stolen from your government base. Only one case is present in the cavern at once. If you get all seven cases, the intermission comes up, you are rewarded 100 points and get an extra man.
You get ten points for every case recovered and 100 points for every set of cases. After seven cases, the lasers fire faster, and the missiles come out of the silos faster.
When you run the game, the screen will go blank for thirty seconds. After that the Spy Plane logo will appear (if you typed it in correctly). Press the fire button and hold it down to see the score display screen. Let go of the button, and the game will begin. If you are hit or you collide with anything, hold down the button to see your score and how many men you have. If you press START on the score display, the game will end.
Spy Plane uses player-missile graphics and character sets in graphics mode 2+16. In this mode you can create graphics 7-type graphics, but you can display them a lot more quickly. When you run the program, the screen will turn white for twenty seconds, then blue for ten seconds. While the screen is white, the computer is setting up the character sets. While the screen is blue, the computer is setting up the player-missile graphics.
When programming a BASIC game, use anything that you can get. I used Tom Hudson's P/M mover from ANALOG #10 and Steven Pogatch's character set initializer from ANALOG #8. Both do their job effectively, and I am sure that you can hack them out of there for your own use.
The main objective with a BASIC game is not to make it too slow; you should make your main loop as small as possible.
If you took at Lines 1330-2280, you will notice that all of the screens are displayed with print statements. If you want to make your own screen, just modify the print statements. If you want lasers or something special, you will have to modify the screen subroutines. It isn't that hard, I promise you!
Type in the program exactly as it appears. Be careful with the data statements. Use D:CHECK or C:CHECK to check your work.
One of the best ways to learn about how to make your own games is to analyze other people's games. When you finish typing in this game, improve it! Change it! Learn it! That's how I learned to make games.
Lines | Function |
---|---|
60-100 | Initial title |
160-300 | Main loop |
210-450 | Death |
460-620 | GOTO screen |
630-690 | Screen #1 (Turns radar) |
700-820 | Screen #2 (Fires laser) |
830-960 | Screen #3 (Fires missile) |
970-1080 | Screen #4 (Fires laser) |
1090-1150 | Screen #5 (Volcano) |
1160-1310 | Screen #6 (Fires laser) |
1320-2290 | Displays screens |
2300-2420 | Screen #7 (Fires laser) |
2430-2590 | Intermission |
2600-2880 | Score display |
2890-2980 | Game over display |
2990-3090 | Enters data for case pos. |
3100-3170 | Data for case positions |
3180-3190 | DIMension everything |
3220-3320 | P/M mover -- Tom Hudson |
3330-3380 | Char.Set initializer -- Steven Pogatch |
3390-3740 | Char.Set data |
3750-3780 | P/M mover data |
3790-3840 | P/M graphics data |
A | For P/M mover |
C | Color of character under player |
D1$ | 1st piece of dying plane |
D2$ | 2nd piece of dying plane |
E | Also character number of laser |
E | Random number for laser |
FL | Counter for screen subroutines |
LGO$ | Characters of logo |
MN | Number of planes |
NB | Number of screens |
P(E) | Positions of cases |
PD | DRAWTO position of laser |
PE | DRAWTO position of laser |
PMC | Data for player facing left |
PMD | Data for player facing right |
POS | Players' current shape |
PX | Horizontal position of laser |
PY | Vertical position of laser |
PO$ | Data for player |
P1$ | Data for player |
P2$ | Data for missile (screen #3) |
S | Stick position |
SC | Score |
SCR | Screen number |
T | Varied uses |
X | Horizontal position of player |
Y | Vertical position of player |
Z$ | Data for blank |
1 DATA 62,334,58,584,70,259,976,412,94
4,518,793,852,842,41,365,7110
150 DATA 731,164,816,62,11,526,116,871
,565,431,714,231,733,28,362,6361
300 DATA 150,81,596,87,719,361,619,794
,976,673,114,663,666,782,977,8258
450 DATA 95,98,101,61,254,950,100,431,
81,414,159,447,813,745,934,5683
600 DATA 84,87,90,953,149,693,700,707,
710,39,947,636,79,283,428,6585
750 DATA 433,442,449,621,108,711,614,6
01,959,903,230,169,173,638,311,7362
900 DATA 52,651,772,987,684,511,997,97
4,661,376,310,310,441,444,461,8631
1050 DATA 941,946,989,450,212,52,804,9
12,151,989,810,215,789,652,440,9352
1200 DATA 579,434,453,460,467,477,484,
213,316,997,889,288,923,832,286,8098
1350 DATA 637,916,917,918,919,125,546,
446,136,778,796,932,965,337,338,9706
1500 DATA 532,819,149,239,505,178,326,
923,882,803,934,292,85,862,27,7556
1650 DATA 446,253,448,837,450,668,606,
14,803,943,378,944,80,596,326,7792
1800 DATA 321,388,285,86,821,681,88,81
0,952,306,92,481,258,65,790,6424
1950 DATA 371,795,842,190,620,153,782,
926,19,815,272,894,864,739,734,9016
2100 DATA 732,688,981,482,688,789,935,
388,1,522,801,732,708,606,373,9426
2250 DATA 652,638,708,8,796,33,791,258
,202,151,177,597,607,443,947,7008
2400 DATA 996,895,795,547,716,164,49,2
92,907,196,1,168,6,187,996,6915
2550 DATA 539,221,206,85,301,326,988,4
22,406,785,984,935,265,741,751,7955
2700 DATA 298,325,614,748,789,74,517,2
83,61,988,370,402,479,611,71,6630
2850 DATA 851,926,692,897,939,111,752,
902,874,47,388,866,22,324,287,8878
3000 DATA 327,426,571,28,485,980,467,8
47,503,930,12,890,94,536,536,7632
3150 DATA 531,540,546,418,6,66,38,727,
82,84,86,717,51,53,394,4339
3300 DATA 540,111,877,567,954,582,709,
377,738,903,92,222,989,757,392,8810
3450 DATA 272,455,385,88,901,382,378,1
15,796,241,67,938,305,452,671,6446
3600 DATA 441,405,96,342,996,8,982,814
,782,107,302,186,269,393,584,6707
3750 DATA 883,970,239,418,915,313,942,
944,338,575,934,825,8296