MISSILE COMMAND

• The default high score table is the result of an informal two day high score contest with everyone who contributed to the game. The contest happened near the end of the game’s development, the result of which became the default table (see picture):

DFT - Dave Theurer (designer and lead programmer)
DLS - Dave Sherman (hardware lead)
SRC - Steve Calfee (Chief Engineer of Software Engineering
RDA - Rich Adam (junior programmer. Contributed many sound routines and contributed idea for bombers and satellites)
MJP - Mary Pepper (electrical engineer)
JED - Jed Margolin (Head of Special Projects in Engineering. Designed power supply and other components)
DEW - Dave Wiebenson
GJL - Gerry Lichac (Trak-Ball designer)

• There's an unpopulated portion of the board that is there to drive lights on the prototype's marquee that responded to events in the game. Someone has reverse-engineered and gotten it to work though the code to drive it hasn't been found (LINK).

• There are 6 different score multipliers and 10 different screen color combinations:

1x - black with yellow ground. Waves 1 and 2
2x - black with blue ground. Waves 3 and 4
3x - black with red ground. Waves 5 and 6
4x - black with red ground. Waves 7 and 8
5x - dark blue with yellow ground. Waves 9 and 10
6x - light blue with yellow ground. Waves 11 and 12
6x - purple with green ground. Waves 13 and 14
6x - yellow with green ground. Waves 15 and 16
6x - white with red ground. Waves 17 and 18
6x - red with yellow ground. Waves 19 and 20

Starting with wave 21, the color combinations start to repeat.

• BUG: The 2nd manual revision has the trak-ball dip switch settings reversed.

• BUG: Hard waves – Starting at wave 101, an extra missile or two are launched out at the same time as the others (so, 4 instead of 3 for example).  This continues for a good 50 screens or so. {Tony Temple}

• BUG: Free cities – At about 810,000 points you’re awarded exactly 176 bonus cities.  At that point, you can’t earn any more until you roll the score.

• BUG: 0x waves – Wave 255 is a 0x score multiplier wave. This score multiplier is really 256 times the missiles and cities you have left. When you clear this wave and the next 0x wave (256) starts, it's not playable and it immediately tallies your missiles and cities. Wave 257 actually takes the player back to wave 1 (black with yellow ground), skipping the white/red and red/yellow combinations. The difficulty also resets back to wave 1.

• BUG: Reset – If you have too many extra cities (255 or within a few of it) on a 0x wave, the game will reset. The 810K 176 extra city bug awards all the extras instantaneously, so the city count can roll over 256 at that point, and this is key in managing city count throughout a marathon. The 0x scoring bonanza does not award all the cities instantaneously, the game just dishes out loads of points then tallies up the earned cities at board's end as usual.

Once a player reaches wave 255, the following code is executed to calculate the point values* bonus multiplier. When the screen number ($A7) is 255, the addition of 1 gives a value of 0 in Reg A. When this is compared to 6, it is less, so 0 will be used as the multiplier. In the code after label LBL295, 0 is used as a counter to sum up the bonus, but when the counter is decremented the first time, 0 goes to 255, causing the code to do (25*256) instead of the wanted (25*6). On wave 256, this same problem will occur. The wave number will be 0; adding 1 to this and then doing a LSR will give a value of 0 in Reg A.

As for why there is no attack on wave 256, the following code explains it. On wave 256, the screen number value is 0, which is used as an index in a lookup table to get the number of missiles and smart bombs for that wave. However, the programmer never expected a player to get to screen 256, so the lookup in the table is not valid. Luckily, the values read are both 0. This tells the game that there are no missiles or smart bombs to launch, so the wave is over and the game just adds up the 30 missiles and the remaining cities. After this, the wave number increments to 1, which is the value at the start of the game, so that's why it looks like the game starts over.

In the code below, entering subroutine 170, the dip switches are read and used to get the number of points for a bonus city. If the game is set to no bonus cities then the code is not run, which is why the bug is not seen when the game is set for no bonus cities awarded. The upper 4 digits of the player score are read and stored in $98 and $99. The 6502 is put in Binary Coded Decimal mode to do the actual calculation. The bonus city value is then subtracted from the users score, and if the result is not negative then the temp bonus city counter is incremented. If the players score is still positive after the subtraction then it is done again. The bug occurs when the upper 2 digits are 81. When the bonus city value of 1 is subtracted, the result is 80, letting the N flag be set causing the BMI branch to be taken in error. When the bonus city calculation is done after LBL357, the temp city count is 0 because of the error. The previous bonus city value is 0x50 because of the city awarded at 800K. When we do 0 - 0x50 we get 0xb0, which is 176 added to the bonus city count. The previous city count is then updated to 0. As long as the score stays over 810K, the BMI branch will be taken in error and no more bonus cities will be given until the score roles over.

SUB145:
     LDA    #$00        ;Load A with 0x00
     STA    $BA         ;Clear out $BA
     STA    $BB         ;Clear out $BB
     LDA    $A7         ;Load screen number
     CLC                ;Get ready for add
     ADC    #$01        ;INC screen number
     LSR                ;Do div 2 so bonus increases 2 screens
     CMP    #$06        ;See if we are at 6X
     BCC    LBL295      ;If it's less than 6
     LDA    #$06        ;Else set to 6
LBL295:
     STA    $DD         ;Save to bonus multiplier
     TAX                ;Move multiplier to X to be used as a counter
LBL296:                 ;Calc 25*bonus and save in $BB,$BA in BCD
     SED                ;Set BCD mode
     LDA    $BA         ;Get lower byte
     CLC                ;Get ready for add
     ADC    #$25        ;Add 25 to it
     STA    $BA         ;Save 
     LDA    $BB         ;Get upper byte
     ADC    #$00        ;Add carry if any
     STA    $BB         ;Save upper byte
     CLD                ;Clear BCD mode
     DEX                ;Dec bonus count
     BNE    LBL296      ;If we are not at 0

 


Return to main menu