0100 ;BLAST! 0110 ; 0120 *= $2000 0130 ; 0140 CHARSET 0150 .BYTE $00,$00,$00,$00,$00,$00,$00,$00 0160 .BYTE $00,$1C,$1C,$1C,$1C,$00,$1C,$1C 0170 .BYTE $00,$00,$3F,$3F,$3F,$3F,$3F,$3F 0180 .BYTE $00,$00,$F8,$FC,$3E,$3F,$3F,$3E 0190 .BYTE $3F,$3F,$3F,$3F,$3F,$3F,$3F,$3F 0200 .BYTE $FC,$FC,$3E,$3F,$3F,$3E,$FC,$F8 0210 .BYTE $00,$00,$FF,$FF,$FF,$FF,$FF,$FF 0220 .BYTE $00,$00,$03,$07,$0F,$1F,$3F,$3F 0230 .BYTE $00,$00,$F0,$F8,$FC,$FE,$3F,$3F 0240 .BYTE $FF,$FF,$3F,$3F,$3F,$3F,$3F,$3F 0250 .BYTE $00,$00,$0F,$1F,$3C,$3C,$1F,$0F 0260 .BYTE $00,$00,$FF,$FF,$00,$00,$C0,$F0 0270 .BYTE $00,$00,$0F,$0F,$0F,$0F,$0F,$0F 0280 .BYTE $00,$00,$3F,$3F,$0F,$0F,$0F,$0F 0290 .BYTE $00,$00,$FC,$FC,$F0,$F0,$F0,$F0 0300 .BYTE $00,$00,$F0,$F0,$F0,$F0,$F0,$F0 0310 .BYTE $00,$7F,$63,$63,$63,$67,$67,$7F 0320 .BYTE $00,$1C,$0C,$0C,$0C,$1E,$1E,$1E 0330 .BYTE $00,$7F,$03,$03,$7F,$60,$60,$7F 0340 .BYTE $00,$7E,$06,$06,$7F,$07,$07,$7F 0350 .BYTE $00,$70,$70,$70,$70,$77,$7F,$07 0360 .BYTE $00,$7F,$60,$60,$7F,$07,$07,$7F 0370 .BYTE $00,$7E,$66,$60,$7F,$63,$63,$7F 0380 .BYTE $00,$7F,$67,$07,$0E,$1C,$1C,$1C 0390 .BYTE $00,$3E,$36,$36,$7F,$77,$77,$7F 0400 .BYTE $00,$7F,$63,$63,$7F,$07,$07,$07 0410 .BYTE $00,$1C,$1C,$1C,$00,$1C,$1C,$1C 0420 .BYTE $FC,$FE,$FF,$FF,$FF,$FF,$FE,$FC 0430 .BYTE $0F,$0F,$00,$00,$0F,$0F,$0F,$0F 0440 .BYTE $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F 0450 .BYTE $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0 0460 .BYTE $F0,$F0,$00,$00,$F0,$F0,$F0,$F0 0470 .BYTE $00,$00,$08,$1C,$14,$55,$77,$5D 0480 .BYTE $00,$3E,$36,$36,$7F,$77,$77,$77 0490 .BYTE $00,$7E,$66,$66,$7F,$73,$73,$7F 0500 .BYTE $00,$7F,$67,$60,$60,$60,$63,$7F 0510 .BYTE $00,$7E,$63,$63,$73,$73,$73,$7E 0520 .BYTE $00,$7F,$60,$60,$7F,$70,$70,$7F 0530 .BYTE $00,$7F,$60,$60,$7F,$70,$70,$70 0540 .BYTE $00,$7F,$63,$60,$70,$77,$73,$7F 0550 .BYTE $00,$36,$36,$36,$7F,$77,$77,$77 0560 .BYTE $00,$18,$18,$18,$1C,$1C,$1C,$1C 0570 .BYTE $00,$03,$03,$03,$07,$67,$67,$7F 0580 .BYTE $00,$33,$33,$33,$7C,$73,$73,$73 0590 .BYTE $00,$30,$30,$30,$70,$70,$70,$7F 0600 .BYTE $00,$7F,$4B,$4B,$6B,$6B,$6B,$6B 0610 .BYTE $00,$73,$7B,$6F,$77,$77,$77,$77 0620 .BYTE $00,$7F,$63,$63,$67,$67,$67,$7F 0630 .BYTE $00,$7F,$63,$63,$7F,$70,$70,$70 0640 .BYTE $00,$7F,$63,$63,$63,$63,$6F,$7C 0650 .BYTE $00,$7E,$66,$66,$7F,$73,$73,$73 0660 .BYTE $00,$7F,$60,$60,$7F,$03,$03,$7F 0670 .BYTE $00,$7F,$1F,$1C,$1C,$1C,$1C,$1C 0680 .BYTE $00,$63,$63,$63,$73,$73,$73,$7F 0690 .BYTE $00,$63,$63,$63,$77,$76,$76,$7E 0700 .BYTE $00,$43,$43,$43,$6B,$6B,$6B,$7F 0710 .BYTE $00,$67,$67,$67,$3C,$73,$73,$73 0720 .BYTE $00,$63,$63,$63,$7F,$1C,$1C,$1C 0730 .BYTE $00,$7F,$73,$03,$7F,$70,$73,$7F 0740 .BYTE $00,$1E,$18,$18,$18,$18,$1E,$00 0750 .BYTE $00,$40,$60,$30,$18,$0C,$06,$00 0760 .BYTE $00,$78,$18,$18,$18,$18,$78,$00 0770 .BYTE $00,$08,$1C,$36,$63,$00,$00,$00 0780 .BYTE $00,$00,$00,$00,$00,$00,$FF,$00 0790 ; 0800 ; Zero page equates 0810 ; 0820 ADDER = $80 0830 PTR = $82 0840 EXPCOUNT = $89 0850 ALCOUNT = $8A 0860 SHIPX = $8B 0870 MOTHERX = $8C 0880 MOTHERDX = $8D 0890 FORCEY = $8E 0900 ROUND = $8F 0910 XTAB = $90 0920 YTAB = $9C 0930 DXTAB = $A8 0940 DYTAB = $B4 0950 DSTAB = $C0 ;STATUS 0960 ; 0970 ; OS equates 0980 ; 0990 STRIG0 = $0284 1000 HPOSP0 = $D000 1010 M0PF = $D000 1020 P0PF = $D004 1030 HITCLR = $D01E 1040 AUDF1 = $D200 ;Force field 1050 AUDC1 = $D201 1060 AUDF2 = $D202 ;Laser 1070 AUDC2 = $D203 1080 AUDF3 = $D204 ;Monster death 1090 AUDC3 = $D205 1100 AUDF4 = $D206 ;Needle falling 1110 AUDC4 = $D207 1120 RANDOM = $D20A 1130 ; 1140 SCREEN = $1000 1150 ; 1160 ; game screen dl 1170 ; 1180 MAINDL 1190 .BYTE $70,$50,$4D 1200 .WORD SCREEN 1210 .BYTE $0D,$0D,$0D 1220 .BYTE $0D,$0D,$0D,$0D 1230 .BYTE $0D,$0D,$0D,$0D 1240 .BYTE $0D,$0D,$0D,$0D 1250 .BYTE $0D,$0D,$0D,$0D 1260 .BYTE $0D,$0D,$0D,$0D 1270 .BYTE $0D,$0D,$0D,$0D 1280 .BYTE $0D,$0D,$0D,$0D 1290 .BYTE $0D,$0D,$0D,$0D 1300 .BYTE $0D,$0D,$0D,$0D 1310 .BYTE $0D,$0D,$0D,$0D 1320 .BYTE $0D,$0D,$0D,$0D 1330 .BYTE $0D,$0D,$0D,$0D 1340 .BYTE $0D,$0D,$0D,$0D 1350 .BYTE $0D,$0D,$0D,$0D 1360 .BYTE $0D,$0D,$0D,$0D 1370 .BYTE $0D,$0D,$0D,$0D 1380 .BYTE $0D,$0D,$0D,$0D 1390 .BYTE $0D,$0D,$0D,$0D 1400 .BYTE $0D,$0D,$0D,$0D 1410 .BYTE $0D,$0D,$0D,$0D 1420 .BYTE $0D,$0D,$0D,$0D 1430 .BYTE $0D,$0D,$8D,0 1440 .BYTE $47 1450 .WORD SCORELN 1460 .BYTE $41 1470 .WORD MAINDL 1480 ; 1490 ; "GAME OVER" display list 1500 ; 1510 GODL 1520 .BYTE $70,$70,$70,$70 1530 .BYTE $70,$70,$70,$70 1540 .BYTE $70,$70,$70,$70 1550 .BYTE $47 1560 .WORD GOLN 1570 .BYTE $41 1580 .WORD GODL 1590 ; 1600 ; Title page dl 1610 ; 1620 TITLEDL 1630 .BYTE $70,$70,$F0 1640 .BYTE $47 1650 .WORD TITLEPG-20 1660 .BYTE $07,$70,$06,$70 1670 .BYTE $06,$70,$70,$70 1680 .BYTE $70,$70,$07,$70 1690 .BYTE $70,$07,$70 1700 .BYTE $70,$07,$41 1710 .WORD TITLEDL 1720 ; 1730 ; Score line 1740 ; (at bottom, in graphics 2) 1750 ; Ships at +7 1760 ; score at +17 1770 ; 1780 SCORELN 1790 .SBYTE "BLAST! @@ SCORE:000" 1800 ; 1810 ; Game over 1820 ; 1830 GOLN .SBYTE " GAME OVER " 1840 ; 1850 ; Prelim. title page 1860 ; Last at +46, high at +55 1870 ; Speed at +72, skill at +92 1880 ; 1890 .BYTE 0,0,0,0,2,3,2,0,7,8,10,11,13,14,12,15,0,0,0,0 1900 TITLEPG .BYTE 0,0,0,0,4,5,4,6,4,9,2,27,29,30,28,31,0,0,0,0 1910 .SBYTE " BY STEVEN GRIMM " 1920 .SBYTE " LAST:000 HIGH:000 " 1930 .SBYTE " option slow " 1940 .SBYTE " select easy " 1950 .SBYTE "press start to begin" 1960 ; 1970 ; Y tables for bitmap routine 1980 ; 1990 TABLO 2000 .BYTE 0,40,80,120,160,200,240 2010 .BYTE 24,64,104,144,184,224 2020 .BYTE 8,48,88,128,168,208,248 2030 .BYTE 32,72,112,152,192,232 2040 .BYTE 16,56,96,136,176,216 2050 .BYTE 0,40,80,120,160,200,240 2060 .BYTE 24,64,104,144,184,224 2070 .BYTE 8,48,88,128,168,208,248 2080 .BYTE 32,72,112,152,192,232 2090 .BYTE 16,56,96,136,176,216 2100 .BYTE 0,40,80,120,160,200,240 2110 .BYTE 24,64,104,144,184,224 2120 .BYTE 8,48,88,128,168,208,248 2130 .BYTE 32,72,112,152,192,232 2140 .BYTE 16,56,96,136,176,216 2150 TABHI 2160 .BYTE 0,0,0,0,0,0,0 2170 .BYTE 1,1,1,1,1,1 2180 .BYTE 2,2,2,2,2,2,2 2190 .BYTE 3,3,3,3,3,3 2200 .BYTE 4,4,4,4,4,4 2210 .BYTE 5,5,5,5,5,5,5 2220 .BYTE 6,6,6,6,6,6 2230 .BYTE 7,7,7,7,7,7,7 2240 .BYTE 8,8,8,8,8,8 2250 .BYTE 9,9,9,9,9,9 2260 .BYTE 10,10,10,10,10,10,10 2270 .BYTE 11,11,11,11,11,11 2280 .BYTE 12,12,12,12,12,12,12 2290 .BYTE 13,13,13,13,13,13 2300 .BYTE 14,14,14,14,14,14 2310 WIDTH = $84 2320 ; 2330 ; Bitmap routine for Atari 2340 ; 2350 ; Enter: 2360 ; .x,.y screen coords to plot at 2370 ; PTR pointer to bitmap: 2380 ; height 2390 ; width 2400 ; pointer to shift 0 2410 ; pointer to shift 1 2420 ; pointer to shift 2 2430 ; pointer to shift 3 2440 ; start of data 2450 ; 2460 PLOTMAP 2470 TXA 2480 LSR A 2490 LSR A 2500 CLC 2510 ADC TABLO,Y 2520 STA ADDER 2530 LDA TABHI,Y 2540 ADC # >SCREEN 2550 STA ADDER+1 2560 TXA 2570 AND #3 2580 ASL A 2590 ADC #2 2600 PHA 2610 LDY #0 2620 LDA (PTR),Y 2630 TAX 2640 INY 2650 LDA (PTR),Y 2660 STA WIDTH 2670 PLA 2680 TAY 2690 LDA (PTR),Y 2700 PHA 2710 INY 2720 LDA (PTR),Y 2730 STA PTR+1 2740 PLA 2750 STA PTR 2760 CLV 2770 BVC ?PM1.5 2780 ?PM1 LDA ADDER 2790 CLC 2800 ADC #40 2810 STA ADDER 2820 BCC ?PM1.5 2830 INC ADDER+1 2840 ?PM1.5 LDY #0 2850 ?PM2 LDA (PTR),Y 2860 STA (ADDER),Y 2870 INY 2880 CPY WIDTH 2890 BCC ?PM2 2900 TYA 2910 CLC 2920 ADC PTR 2930 STA PTR 2940 BCC ?PM3 2950 INC PTR+1 2960 ?PM3 DEX 2970 BNE ?PM1 2980 RTS 2990 ; 3000 ; Erase bitmap - cheating 3010 ; method 3020 ; 3030 ERASEBM LDA ?PM2 3040 PHA 3050 LDA ?PM2+1 3060 PHA 3070 LDA #$A9 ;lda imm 3080 STA ?PM2 3090 LDA #0 3100 STA ?PM2+1 3110 JSR PLOTMAP 3120 PLA 3130 STA ?PM2+1 3140 PLA 3150 STA ?PM2 3160 RTS 3170 PLAYER0 = $3200 3180 PLAYER1 = $3280 3190 PLAYER2 = $3300 3200 PLAYER3 = $3380 3210 ; 3220 ; Player-missile routines. 3230 ; Includes player-missile init- 3240 ; ialization and startup. 3250 ; 3260 PMINIT LDA #[ >PLAYER0]-2 3270 STA $D407 ;pmbase 3280 LDX #0 3290 TXA 3300 ?PMI1 STA PLAYER0,X 3310 STA PLAYER2,X 3320 STA PLAYER0-$80,X 3330 INX 3340 BNE ?PMI1 3350 LDA #0 3360 STA $D008 ;sizep0 3370 STA $D00A ;sizep2 3380 STA $D00B ;sizep3 3390 LDA #192 3400 STA $D00C ;sizem 3410 LDA #1 3420 STA $D009 ;sizep1 3430 LDA #48 3440 STA $D002 ;hposp2 3450 LDA #200 3460 STA $D003 ;hposp3 3470 LDA #120 3480 STA $D001 ;hposp1 3490 LDA #124 3500 STA $D007 ;hposm3 3510 LDA #8 3520 STA 704 3530 LDA #$88 3540 STA 705 3550 LDA #$CC 3560 STA 706 3570 STA 707 3580 RTS 3590 ; 3600 ; Put up player's ship. 3610 ; 3620 PUTSHIP 3630 LDY #0 3640 ?PS2 LDA PLAYER,Y 3650 STA PLAYER0,X 3660 INX 3670 INY 3680 CPY #8 3690 BCC ?PS2 3700 RTS 3710 ; 3720 ; Move mother ship one unit. 3730 ; X position of center is in 3740 ; MOTHERX. 3750 ; 3760 MOVEMOM LDA MOTHERX 3770 CLC 3780 ADC MOTHERDX 3790 STA MOTHERX 3800 CMP #10 3810 BCS ?MMOM1 3820 LDA #1 3830 STA MOTHERDX 3840 ?MMOM1 CMP #144 3850 BCC ?MMOM2 3860 LDA #-1 3870 STA MOTHERDX 3880 ?MMOM2 LDA MOTHERX 3890 CLC 3900 ADC #44 3910 STA $D007 ;hposm3 3920 SEC 3930 SBC #4 3940 STA $D001 ;hposp1 3950 JMP ALIEN 3960 ; 3970 ; Plot mother ship in player 1 3980 ; with y-coord .y 3990 ; 4000 PLOTMOM 4010 TYA 4020 PHA 4030 LDX #0 4040 ?PMOM1 LDA MOTHER,X 4050 STA PLAYER1,Y 4060 INX 4070 INY 4080 CPX #7 4090 BCC ?PMOM1 4100 PLA 4110 CLC 4120 ADC #2 4130 TAY 4140 LDA #0 4150 STA MISSILES,Y 4160 LDA #$C0 4170 STA MISSILES+1,Y 4180 RTS 4190 ; 4200 ; Plot left and right force 4210 ; field generators in players 4220 ; at .y 4230 ; 4240 PLOTGEN 4250 LDX #0 4260 ?PGEN1 LDA LEFTGEN,X 4270 STA PLAYER2,Y 4280 LDA RIGHTGEN,X 4290 STA PLAYER3,Y 4300 INX 4310 INY 4320 CPX #10 4330 BCC ?PGEN1 4340 RTS 4350 ; 4360 ; Plot up force field in color 4370 ; .a and at FORCEY 4380 ; 4390 PLOTFIELD 4400 PHA 4410 LDY FORCEY 4420 LDA TABLO,Y 4430 STA ADDER 4440 LDA TABHI,Y 4450 CLC 4460 ADC # >SCREEN 4470 STA ADDER+1 4480 LDY #38 4490 PLA 4500 ?PFIELD1 STA (ADDER),Y 4510 DEY 4520 BNE ?PFIELD1 4530 RTS 4540 ; 4550 ; Put explosion number .x into 4560 ; player's ship area 4570 ; 4580 PUTEXP 4590 LDA TIMES7,X 4600 TAX 4610 LDY #94 4620 ?PX1 LDA SEXPLODE,X 4630 STA PLAYER0,Y 4640 INX 4650 INY 4660 CPY #101 4670 BCC ?PX1 4680 RTS 4690 TIMES7 .BYTE 0,7,14,21,28,35,42,49,56,63 4700 .LOCAL 4710 ; 4720 ; Movement routines for the 4730 ; monsters. 4740 ; 4750 ?TEMP .BYTE 0 4760 NEEDLEX .BYTE 0 4770 NEEDLEY .BYTE 0 4780 NEEDLEF .BYTE 0 4790 ?YT = $84 4800 ?XT = $85 4810 ; 4820 ; Move monster number .x 4830 ; 4840 MOVE1 4850 LDA XTAB,X 4860 STA ?XT 4870 LDA YTAB,X 4880 STA ?YT 4890 LDA DYTAB,X 4900 BMI ?M11 4910 INC ?YT 4920 LDA ?YT 4930 CMP #83 ;bottom 4940 BNE ?M12 4950 LDA #-1 4960 STA DYTAB,X 4970 BNE ?M12 4980 ?M11 DEC ?YT 4990 LDA ?YT 5000 CMP FORCEY ;check field 5010 BNE ?M12 5020 LDA #1 5030 STA DYTAB,X 5040 ?M12 LDA ?XT 5050 CLC 5060 ADC DXTAB,X 5070 STA ?XT 5080 CMP #8 5090 BNE ?M13 5100 LDA #1 5110 STA DXTAB,X 5120 ?M13 CMP #142 ;rt side 5130 BCC ?M1X 5140 LDA #-1 5150 STA DXTAB,X 5160 ?M1X LDA ?YT 5170 STA YTAB,X 5180 LDA ?XT 5190 STA XTAB,X 5200 RTS 5210 ; 5220 ; Get monster coords for bitmap 5230 ; 5240 GETCOORD LDA YTAB,X 5250 TAY 5260 STX ?TEMP 5270 LDA XTAB,X 5280 SEC 5290 SBC #4 5300 TAX 5310 RTS 5320 ; 5330 ; Plot monster number .x as 5340 ; bitmap in (.y.a) 5350 ; 5360 PLOTC STA PTR 5370 STY PTR+1 5380 JSR GETCOORD 5390 JSR PLOTMAP 5400 LDX ?TEMP 5410 RTS 5420 ; 5430 ; Animate 12 monsters 1 cycle 5440 ; each. 5450 ; 5460 CYCLE 5470 LDX #11 5480 ?CYC1 LDA DSTAB,X ;Status 0? 5490 BEQ ?CYC2 5500 BMI ?CYCM ;move if here 5510 AND #$FE 5520 TAY ;get right 5530 ASL A 5540 STA AUDF3 5550 LDA EXPLTAB,Y ;explosion 5560 PHA 5570 LDA EXPLTAB+1,Y 5580 TAY 5590 PLA 5600 JSR PLOTC ;next expl. 5610 INC DSTAB,X 5620 LDA DSTAB,X 5630 CMP #16 5640 BCC ?CYC2 5650 JSR KILLMON 5660 DEC MONLEFT 5670 LDA #0 5680 STA AUDC3 5690 JMP ?CYC2 5700 ?CYCM JSR MOVE1 ;move 5710 LDA # SQUARE 5730 JSR PLOTC ;draw 5740 ?CYC2 DEX 5750 BPL ?CYC1 5760 LDA NEEDLEY ;Extra man here? 5770 BEQ ?CYCX ;No, go away 5780 AND #7 ;Yes, do next 5790 TAX ;sound 5800 LDA NEEDLES,X 5810 STA AUDF4 5820 LDX # NEEDLE ;bitmap 5840 STX PTR 5850 STY PTR+1 5860 LDX NEEDLEX 5870 INC NEEDLEY ;Move it 5880 LDY NEEDLEY ;Off the 5890 CPY #89 ;screen? 5900 BCC ?NEED1 ;No, draw it 5910 JSR ERASEBM ;Yes, erase 5920 LDA #0 ;And de-flag 5930 STA NEEDLEY ;it. 5940 STA AUDC4 5950 ?CYCX RTS ;Exit here!!! 5960 ?NEED1 JMP PLOTMAP 5970 ; 5980 ; Initialize monster .x at x- 5990 ; coord in .a 6000 ; 6010 INITMON STA XTAB,X 6020 LDA #10 6030 STA YTAB,X 6040 LDA MOTHERDX 6050 LDY SKILL 6060 BEQ ?IMON1 6070 LDA RANDOM 6080 AND #1 6090 BNE ?IMON1 6100 LDA #$FF 6110 ?IMON1 STA DXTAB,X 6120 LDA #1 6130 STA DYTAB,X 6140 LDA #$80 6150 STA DSTAB,X ;status here 6160 INC MONHERE 6170 RTS 6180 ; 6190 ; Kill monster number .x 6200 ; 6210 KILLMON 6220 LDA # SQUARE 6250 STA PTR+1 6260 JSR GETCOORD 6270 JSR ERASEBM 6280 LDX ?TEMP 6290 LDA #0 6300 STA DSTAB,X ;kill it 6310 DEC MONHERE 6320 ?KM1 RTS 6330 ; 6340 ; Init a new wave of monsters 6350 ; 6360 MONSTERS .BYTE 0 6370 MONLEFT .BYTE 0 6380 MONHERE .BYTE 0 6390 INITWAVE LDA #12 6400 STA MONLEFT 6410 LDA #0 6420 STA NEEDLEF 6430 STA MONSTERS 6440 STA MONHERE 6450 LDX #[16*5]-1 6460 ?IWV1 STA XTAB,X 6470 DEX 6480 BPL ?IWV1 6490 RTS 6500 ; 6510 ; Put a monster on at interval 6520 ; of $A5 or $85 moves 6530 ; 6540 ALIEN DEC ALCOUNT 6550 BNE ?ALX 6560 LDA NEEDLEF 6570 BNE ?AL0 6580 LDA MONSTERS 6590 CMP #12 6600 BEQ ?AL0 6610 LDA RANDOM 6620 AND #7 6630 BNE ?AL0 6640 LDA MOTHERX 6650 CLC 6660 ADC #3 6670 STA NEEDLEX 6680 LDA #5 6690 STA NEEDLEY 6700 STA NEEDLEF 6710 LDA #$A6 6720 STA AUDC4 6730 BNE ?ALS 6740 ?AL0 LDA MONHERE 6750 CMP #6 6760 BCS ?ALX 6770 LDX MONSTERS 6780 CPX #12 6790 BCS ?ALX 6800 LDA MOTHERX 6810 JSR INITMON 6820 INC MONSTERS 6830 ?ALS LDA #$A5 6840 LDX SPEED 6850 BEQ ?ALP 6860 LDA #$65 6870 ?ALP STA ALCOUNT 6880 ?ALX RTS 6890 NEEDLES .BYTE 20,40,80,120,200,120,80,40 6900 ; 6910 ; Player ship move routines 6920 ; (also laser handling) 6930 ; 6940 .LOCAL 6950 ; 6960 ; Move player's ship one 6970 ; cycle based on joystick. 6980 ; 6990 MOVESHIP LDA $027C ;left stick? 7000 BNE ?MSHIP1 ;no, do next 7010 LDA SHIPX ;can he go further? 7020 CMP #8 7030 BEQ ?MSHIP1 ;no, exit 7040 DEC SHIPX ;yes, do it 7050 ?MSHIP1 LDA $027D ;check for right 7060 BNE ?MSHIPX 7070 LDA SHIPX 7080 CMP #144 7090 BEQ ?MSHIPX 7100 INC SHIPX 7110 ?MSHIPX LDA SHIPX 7120 CLC 7130 ADC #48 7140 STA $D000 ;do the move 7150 RTS 7160 ; 7170 ; Move player's laser one cycle 7180 ; or check for fire if no laser 7190 ; is up 7200 ; 7210 MISSILES = PLAYER0-$80 7220 MOVELASER LDA LASERY 7230 BEQ ?CFIRE 7240 DEC LASERY 7250 DEC LASERY 7260 DEC LASERY 7270 LDX LASERY 7280 STX AUDF2 7290 LDA #3 7300 STA MISSILES,X 7310 STA MISSILES+1,X 7320 STA MISSILES+2,X 7330 LDA #0 7340 STA MISSILES+6,X 7350 STA MISSILES+7,X 7360 STA MISSILES+8,X 7370 CPX #26 7380 BCS ?LEXIT 7390 JSR CLRLASER 7400 ?CFIRE LDA STRIG0 7410 BNE ?LEXIT 7420 LDA SHIPX 7430 CLC 7440 ADC #3 7450 STA LASERX 7460 ADC #48 7470 STA $D004 ;hposm0 7480 LDA #94 7490 STA LASERY 7500 LDA #$C4 7510 STA AUDC2 7520 ?LEXIT RTS 7530 ; 7540 ; Clear out laser. 7550 ; 7560 CLRLASER LDX LASERY 7570 LDA #0 7580 STA MISSILES,X 7590 STA MISSILES+1,X 7600 STA MISSILES+2,X 7610 STA MISSILES+3,X 7620 STA MISSILES+4,X 7630 STA MISSILES+5,X 7640 STA LASERY 7650 LDA #0 7660 STA $D203 ;AUDC2 7670 RTS 7680 LASERY .BYTE 0 7690 LASERX .BYTE 0 7700 SPEED .BYTE 0 7710 SKILL .BYTE 0 7720 ; 7730 ; Routines for title page, 7740 ; initialization, and 7750 ; game startup. 7760 ; 7770 .LOCAL 7780 ; 7790 ; Set up play screen: 7800 ; 1. Clear screen memory. 7810 ; 2. Initialize players 7820 ; 3. Do display list 7830 ; 4. Setup DLI 7840 ; 7850 PLAYSCRN LDA # >SCREEN 7860 STA ADDER+1 7870 LDA # MAINDL 8100 STA 561 8110 LDA #3 8120 STA 53277 ;gractl 8130 LDA # PLAYDLI 8160 STA $0201 8170 JSR $E465 ;SIOINV 8180 LDA #46 8190 STA 559 8200 RTS 8210 ; 8220 ; Display list interrupt for 8230 ; play screen 8240 ; 8250 PLAYDLI PHA 8260 LDA #$86 8270 STA $D40A ;wsync 8280 STA $D01A 8290 LDA #$0A 8300 STA $D016 8310 PLA 8320 RTI 8330 ; 8340 ; Wait for vertical blank. 8350 ; 8360 VBWAIT LDA $14 8370 ?VBW1 CMP $14 8380 BEQ ?VBW1 8390 RTS 8400 ; 8410 ; Lower mother ship (for game 8420 ; startup) and init her vars 8430 ; 8440 LOWERMOM LDA #0 8450 STA MOTHERDX 8460 LDA #$50 8470 STA AUDF1 8480 LDA #$48 8490 STA AUDC1 8500 ?LMOM1 LDY MOTHERDX 8510 JSR PLOTMOM 8520 JSR VBWAIT 8530 JSR VBWAIT 8540 JSR VBWAIT 8550 JSR VBWAIT 8560 JSR VBWAIT 8570 INC MOTHERDX 8580 LDA MOTHERDX 8590 CMP #17 8600 BCC ?LMOM1 8610 LDA #1 8620 STA MOTHERDX 8630 LDA #80 8640 STA MOTHERX 8650 LDA #0 8660 STA AUDC1 8670 RTS 8680 ; 8690 ; Lower generators to the proper 8700 ; height and do fancy force 8710 ; field startup (with sound). 8720 ; 8730 ?FLEVL .BYTE 0 8740 LOWERFORCE 8750 JSR CLRLASER 8760 LDX ROUND 8770 LDA FORCELEV,X 8780 STA FORCEY 8790 LDA #$A8 8800 STA AUDC1 8810 ?LFOR1 LDA ?FLEVL 8820 STA AUDF1 8830 SEC 8840 SBC #5 8850 TAY 8860 JSR PLOTGEN 8870 JSR VBWAIT 8880 JSR VBWAIT 8890 JSR VBWAIT 8900 INC ?FLEVL 8910 LDA ?FLEVL 8920 SEC 8930 SBC #11 8940 BMI ?LFOR1 8950 CMP FORCEY 8960 BCC ?LFOR1 8970 BEQ ?LFOR1 8980 LDA #$AA 8990 JSR PLOTFIELD 9000 LDA #$50 9010 STA AUDF1 9020 LDX #0 9030 ?LFOR2 LDA FORCETAB,X 9040 STA 709 9050 ORA #$60 9060 STA AUDC1 9070 JSR VBWAIT 9080 JSR VBWAIT 9090 JSR VBWAIT 9100 INX 9110 CPX #9 9120 BCC ?LFOR2 9130 LDA #$64 ;Force field 9140 STA AUDC1 ;Background 9150 LDA #$F0 ;Sound effect 9160 STA AUDF1 9170 RTS 9180 FORCETAB .BYTE $02,$08,$0E,$0E,$0C,$0A,$08,$06,$04 9190 FORCELEV .BYTE 15,30,40,45,50,55,60,65,70,72 9200 ; 9210 ; Put up and init player ship 9220 ; 9230 DOSHIP 9240 LDX #94 9250 JSR PUTSHIP 9260 LDA #76 9270 STA SHIPX 9280 LDA #76+48 9290 STA $D000 9300 JMP CLRLASER 9310 ; 9320 ; Combine it all into the startup 9330 ; sequence. 9340 ; 9350 STARTUP LDX #$7F 9360 LDA #0 9370 ?S1 STA $80,X 9380 DEX 9390 BPL ?S1 9400 STA NOSHIPS 9410 JSR SHIPSLFT 9420 JSR PLAYSCRN 9430 JSR CLRSCR 9440 JSR LOWERMOM 9450 LDA #0 9460 STA ?FLEVL 9470 STA ROUND 9480 JSR LOWERFORCE 9490 LDA #2 9500 STA NOSHIPS 9510 JSR SHIPSLFT 9520 JSR DOSHIP 9530 JSR INITWAVE 9540 STA $D01E ;hitclr 9550 JMP MLOOP 9560 ; 9570 ; DLI routine for title page 9580 ; 9590 TITLEDLI PHA 9600 TXA 9610 PHA 9620 TYA 9630 PHA 9640 DEC 256 9650 LDY #32 9660 LDX 256 9670 ?TDLI STX $D40A ;wsync 9680 STX $D016 9690 INX 9700 DEY 9710 BPL ?TDLI 9720 PLA 9730 TAY 9740 PLA 9750 TAX 9760 PLA 9770 RTI 9780 ; 9790 ; Display title page and wait 9800 ; for START. 9810 ; 9820 DOTITLE 9830 LDA # >CHARSET 9840 STA 756 9850 LDA #0 9860 STA 559 9870 STA $D208 ;AUDCTL 9880 STA 53277 ;gractl 9890 JSR VBWAIT 9900 LDA #$FA 9910 STA 709 9920 LDA #$A8 9930 STA 710 9940 LDA #$C8 9950 STA 711 9960 LDA # TITLEDL 9990 STA 561 010000 LDA # TITLEDLI 010030 STA $0201 010040 LDA #$C0 010050 STA $D40E ;nmien 010060 JSR PUTSKILL 010070 LDA #42 010080 STA 559 010090 ?DTL1 010100 LDA STRIG0 010110 BNE ?DTL1.5 010120 JMP STARTUP 010130 ?DTL1.5 LDA 53279 010140 CMP #6 010150 BNE ?DTL2 010160 JMP STARTUP 010170 ?DTL2 CMP #5 010180 BNE ?DTL3 010190 LDA SKILL 010200 EOR #1 010210 STA SKILL 010220 ?DOCON JSR PUTSKILL 010230 ?WTREL LDA 53279 010240 CMP #7 010250 BNE ?WTREL 010260 JMP ?DTL1 010270 ?DTL3 CMP #3 010280 BNE ?DTL1 010290 LDA SPEED 010300 EOR #1 010310 STA SPEED 010320 BPL ?DOCON 010330 ; 010340 ; Put skill level and speed up 010350 ; on title page. 010360 ; 010370 PUTSKILL 010380 LDA SPEED 010390 ASL A 010400 ASL A 010410 ADC #3 010420 TAX 010430 LDY #3 010440 ?PSK1 LDA XSPEED,X 010450 STA TITLEPG+72,Y 010460 DEX 010470 DEY 010480 BPL ?PSK1 010490 LDA SKILL 010500 ASL A 010510 ASL A 010520 ADC #3 010530 TAX 010540 LDY #3 010550 ?PSK2 LDA XSKILL,X 010560 STA TITLEPG+92,Y 010570 DEX 010580 DEY 010590 BPL ?PSK2 010600 RTS 010610 XSPEED .SBYTE "slowfast" 010620 XSKILL .SBYTE "easyhard" 010630 ; 010640 ; "You Win" sequence (...?) 010650 ; 010660 WIN 010670 JSR CLRLASER ;No laser 010680 LDA #60 010690 STA LASERY 010700 ?W0 JSR VBWAIT ;Delay 010710 JSR MOVEMOM 010720 JSR MOVEMOM 010730 DEC LASERY 010740 BPL ?W0 010750 LDA #0 ;Erase 010760 LDX #255 010770 ?WE STA PLAYER2,X ;the 010780 DEX ;Generators 010790 BNE ?WE 010800 LDA #8 ;Thrust 010810 STA AUDC1 ;sound 010820 LDA #24 010830 STA AUDF1 010840 LDA #97 010850 STA LASERY ;Move ship up 010860 ?W1 LDX LASERY 010870 JSR PUTSHIP 010880 JSR MOVEMOM 010890 JSR MOVEMOM 010900 JSR VBWAIT 010910 DEC LASERY 010920 LDA LASERY 010930 CMP #22 010940 BNE ?W1 010950 LDA #0 010960 STA AUDC1 010970 LDA SHIPX ;Line ship up 010980 SEC ;with middle 010990 SBC #3 ;of mother 011000 AND #$FE 011010 STA LASERY 011020 ?W2 JSR MOVEMOM 011030 JSR MOVEMOM 011040 JSR VBWAIT 011050 LDA MOTHERX 011060 CMP LASERY 011070 BNE ?W2 011080 LDX #$80 011090 ?W3 JSR VBWAIT 011100 DEX 011110 BPL ?W3 011120 TXS ;Clear stack 011130 JMP DHS 011140 ; 011150 ; Main loop inner cycle 011160 ; 011170 MAINCYCLE LDA #0 011180 STA $4D ;NO ATTRACT 011190 ?MC1 LDA $D40B ;VCOUNT 011200 CMP #30 011210 BNE ?MC1 011220 JSR MOVEMOM 011230 JSR MOVEMOM 011240 ?MC2 LDA $D40B 011250 CMP #105 011260 BCC ?MC2 011270 JSR CYCLE 011280 JSR HITMON 011290 LDA #$AA 011300 JSR PLOTFIELD 011310 LDA MONLEFT 011320 BNE ?ML0 011330 JSR NXTLEV 011340 ?ML0 011350 LDA 764 011360 CMP #33 011370 BNE ?MCYCX 011380 LDA #255 011390 STA 764 011400 LDA #0 011410 STA AUDC1 011420 STA AUDC2 011430 STA AUDC3 011440 STA AUDC4 011450 ?ML1 LDA 764 011460 CMP #33 011470 BNE ?ML1 011480 LDA #255 011490 STA 764 011500 LDA #$64 011510 STA AUDC1 011520 ?MCYCX RTS 011530 ; 011540 ; Real main loop 011550 ; 011560 MLOOP JSR MAINCYCLE 011570 JSR MOVESHIP 011580 JSR MOVELASER 011590 JSR HITSHIP 011600 JMP MLOOP 011610 ; 011620 ; Scorekeeping and collision 011630 ; detection routines 011640 ; 011650 .LOCAL 011660 ; 011670 ; Check for missile-pf2 011680 ; collision. If it's there, 011690 ; clear it, find out which 011700 ; monster is hit, and kill 011710 ; it. Then decrement the 011720 ; monsters left counter. 011730 ; 011740 HITMON LDA M0PF ;Did the laser 011750 AND #4 ;hit a monster? 011760 BEQ ?HMX ;no, exit 011770 STA HITCLR ;clear collision 011780 LDX #11 ;check monsters 011790 ?HM0 LDA LASERX ;to see which 011800 SEC ;one was hit 011810 SBC XTAB,X 011820 CMP #11 ;(monsters are 011830 BCC ?HM2 ; 9 wide) 011840 ?HM1 DEX ;check next one 011850 BPL ?HM0 ;if possible 011860 LDA NEEDLEY ;Was it the 011870 BEQ ?HMX ;needle? 011880 LDX # NEEDLE 011900 STX PTR 011910 STY PTR+1 ;Erase it 011920 LDX NEEDLEX 011930 LDY NEEDLEY 011940 JSR ERASEBM 011950 LDA #0 ;De-flag it 011960 STA NEEDLEY 011970 STA AUDC4 ;De-noise it 011980 JSR CLRLASER 011990 INC NOSHIPS ;Extra man 012000 JSR SHIPSLFT 012010 BNE ?HMX ;branch always 012020 ?HM2 LDA LASERY ;Now check the 012030 SEC ;y-coordinate. 012040 SBC #16 ;x-coord is ok 012050 SBC YTAB,X ;if it gets here. 012060 JSR ABSVAL 012070 CMP #10 012080 BCS ?HM1 012090 LDA DSTAB,X ;and it must be 012100 BPL ?HM1 ;alive too! 012110 LDA #1 ;We found it! 012120 STA DSTAB,X ;start killing... 012130 LDA XTAB,X 012140 CLC ;adjustment for 012150 ADC #4 ;bitmap size 012160 STA XTAB,X 012170 JSR ADDPTS ;give points 012180 JSR CLRLASER ;and stop laser 012190 LDA #8 ;Death sound 012200 STA AUDC3 012210 STA AUDF3 012220 ?HMX RTS 012230 ; 012240 ; Take the absolute value of .a 012250 ; 012260 ABSVAL CMP #0 ;Set up flags 012270 BPL ?ABSX ;Positive, exit 012280 EOR #$FF ;Otherwise do 012290 CLC ;two's-complement 012300 ADC #1 ;negative 012310 ?ABSX RTS 012320 ; 012330 ; Lower force field by 8 and 012340 ; prepare next level. 012350 ; 012360 NXTLEV LDA #0 ;erase the 012370 JSR PLOTFIELD ;force field 012380 INC ROUND ;next round 012390 LDA ROUND 012400 CMP #10 ;Last one? 012410 BNE ?NL1 ;No 012420 JMP WIN ;Yes, game won 012430 ?NL1 JSR LOWERFORCE ;lower gens. 012440 JMP INITWAVE ;setup monsters 012450 ; 012460 ; Clear score 012470 ; 012480 CLRSCR LDA #$10 ;Put 012490 STA SCORELN+17 ;zeros 012500 STA SCORELN+18 ;everywhere 012510 STA SCORELN+19 012520 RTS 012530 ; 012540 ; Add 1 to score 012550 ; 012560 ADDSCR LDX #2 ;Last digit 012570 SEC 012580 ?ADS1 LDA SCORELN+17,X ;Add 012590 ADC #0 012600 CMP #26 ;Over 10? 012610 BCC ?ADS2 ;No 012620 LDA #16 012630 ?ADS2 STA SCORELN+17,X 012640 DEX 012650 BPL ?ADS1 012660 RTS 012670 ; 012680 ; Add value in .a to score 012690 ; 012700 ADDA TAY 012710 ?ADDA1 JSR ADDSCR 012720 DEY 012730 BNE ?ADDA1 012740 RTS 012750 ; 012760 ; Add points for hitting alien 012770 ; 012780 ADDPTS LDX ROUND 012790 LDA VALUES,X 012800 JMP ADDA 012810 VALUES .BYTE 1,2,3,4,5,6,8,10,15,20 012820 ; 012830 ; Check for player ship hit. 012840 ; 012850 HITSHIP 012860 LDA P0PF ;Ship hit? 012870 AND #4 012880 BEQ ?HSX ;no, exit 012890 STA HITCLR ;clear collision 012900 JSR CLRLASER ;clear laser 012910 LDA #0 ;and start melting 012920 STA EXPCOUNT ;player's ship 012930 ?HS0 JSR MAINCYCLE 012940 JSR MAINCYCLE ;move monsters 012950 JSR MAINCYCLE ;and delay 012960 JSR MAINCYCLE ;while melting 012970 JSR MAINCYCLE ;the ship. 012980 LDX EXPCOUNT 012990 JSR PUTEXP ;next melt... 013000 INC EXPCOUNT 013010 LDA EXPCOUNT ;and keep going 013020 CMP #10 013030 BCC ?HS0 013040 INC EXPCOUNT ;Remove the 013050 ?HS.5 LDX EXPCOUNT ;monsters 013060 JSR KILLMON ;one by one 013070 DEC EXPCOUNT 013080 BPL ?HS.5 013090 LDA #0 ;no more on... 013100 STA MONHERE 013110 LDA #12 ;but don't do 013120 SEC ;the whole wave 013130 SBC MONLEFT ;again! 013140 STA MONSTERS 013150 DEC NOSHIPS ;lose a ship 013160 LDA NOSHIPS 013170 BMI GOVER ;Game over!!! 013180 JSR SHIPSLFT 013190 LDA #76 013200 STA SHIPX ;center ship 013210 LDA #76+48 013220 STA HPOSP0 013230 STA HITCLR 013240 JMP DOSHIP ;and plot it 013250 ?HSX RTS 013260 ; 013270 ; Game over 013280 ; 013290 GOVER PLA 013300 PLA 013310 LDA #0 ;DMA off 013320 STA 559 013330 STA AUDC1 013340 STA AUDC2 013350 STA AUDC3 013360 STA AUDC4 013370 JSR VBWAIT 013380 LDA # GODL ;(simple, but 013410 STA 561 ;it'll do...) 013420 DHS LDX #2 013430 ?GV1 LDA SCORELN+17,X ;Update 013440 ORA #$80 ;Last 013450 STA TITLEPG+46,X ;Score 013460 DEX ;display 013470 BPL ?GV1 013480 ?GV2 INX 013490 CPX #3 013500 BEQ ?GV4 013510 LDA TITLEPG+55,X ;Hi-score? 013520 CMP TITLEPG+46,X 013530 BCC ?GV3 ;Nope... 013540 BEQ ?GV2 013550 BNE ?GV4 013560 ?GV3 LDX #2 ;Yep... 013570 ?GV3.5 LDA TITLEPG+46,X 013580 STA TITLEPG+55,X 013590 DEX 013600 BPL ?GV3.5 013610 ?GV4 013620 LDA #42 013630 STA 559 013640 LDA #0 013650 STA 53277 013660 LDX #$40 ;Wait a bit 013670 ?GO1 JSR VBWAIT 013680 DEX 013690 BNE ?GO1 013700 JMP DOTITLE ;and go back 013710 ; 013720 ; Display ships left. 013730 ; 013740 NOSHIPS .BYTE 0 013750 SHIPSLFT 013760 LDA #$20 ;Ship symb. 013770 LDX #0 013780 ?SLF2 CPX NOSHIPS 013790 BCC ?SLF3 013800 LDA #0 013810 ?SLF3 STA SCORELN+7,X 013820 INX 013830 CPX #3 013840 BNE ?SLF2 013850 RTS 013860 ; 013870 ; Shapes for various items 013880 ; in game. 013890 ; 013900 .LOCAL 013910 ; 013920 ; First are the shapes that 013930 ; go in players. 013940 ; 1. Player ship 013950 ; 2. Mother ship 013960 ; 3. Left force field generator 013970 ; 4. Right " " " 013980 ; 5-. Explosion data for ship 013990 ; (10 cycles, 7 bytes each) 014000 ; 014010 PLAYER .BYTE $18,$3C,$24,$A5,$A5,$E7,$BD,$00 014020 MOTHER .BYTE $00,$18,$3C,$42,$5A,$A5,$FF 014030 LEFTGEN .BYTE 0,7,8,$10,$E0,$3C,$E0,$10,8,7 014040 RIGHTGEN .BYTE 0,$E0,$10,8,7,$3C,7,8,$10,$E0 014050 SEXPLODE 014060 .BYTE 0,$5A,$3C,$A5,$A5,$E7,$BD 014070 .BYTE 0,$42,$3C,$3C,$A5,$E7,$BD 014080 .BYTE 0,0,$3C,$24,$BD,$E7,$7E 014090 .BYTE 0,0,0,$3C,$24,$FF,$FF 014100 .BYTE 0,0,0,0,$3C,$FF,$FF 014110 .BYTE 0,0,0,0,0,$7E,$FF 014120 .BYTE 0,0,0,0,0,$3C,$7E 014130 .BYTE 0,0,0,0,0,$18,$3C 014140 .BYTE 0,0,0,0,0,0,$18 014150 .BYTE 0,0,0,0,0,0,0 014160 ; 014170 ; Bitmaps for aliens. 014180 ; 014190 SQUARE .BYTE 7,4 ;height,width 014200 .WORD SHIFT1 014210 .WORD SHIFT2 014220 .WORD SHIFT3 014230 .WORD SHIFT4 014240 SHIFT1 014250 .WORD 0,0 014260 .BYTE $00,$0F,$F0,$00 014270 .BYTE $00,$33,$FC,$00 014280 .BYTE $00,$3F,$CC,$00 014290 .BYTE $00,$0F,$F0,$00 014300 .BYTE $00,$30,$0C,$00 014310 SHIFT2 014320 .WORD 0,0 014330 .BYTE $00,$03,$FC,$00 014340 .BYTE $00,$0C,$FF,$00 014350 .BYTE $00,$0F,$F3,$00 014360 .BYTE $00,$03,$FC,$00 014370 .BYTE $00,$0C,$03,$00 014380 SHIFT3 014390 .WORD 0,0 014400 .BYTE $00,$00,$FF,$00 014410 .BYTE $00,$03,$FC,$C0 014420 .BYTE $00,$03,$3F,$C0 014430 .BYTE $00,$00,$FF,$00 014440 .BYTE $00,$03,$00,$C0 014450 SHIFT4 014460 .WORD 0,0 014470 .BYTE $00,$00,$3F,$C0 014480 .BYTE $00,$00,$FF,$30 014490 .BYTE $00,$00,$FC,$F0 014500 .BYTE $00,$00,$3F,$C0 014510 .BYTE $00,$00,$C0,$30 014520 .WORD 0,0 014530 ; 014540 ; Bitmap EXPL1 014550 ; 014560 EXPL1 .BYTE 6,3 014570 .WORD EXPL10,EXPL11,EXPL12,EXPL13 014580 EXPL10 014590 .BYTE $00,$00,$00 014600 .BYTE $05,$50,$00 014610 .BYTE $11,$54,$00 014620 .BYTE $15,$44,$00 014630 .BYTE $05,$50,$00 014640 .BYTE $10,$04,$00 014650 EXPL11 014660 .BYTE $00,$00,$00 014670 .BYTE $01,$54,$00 014680 .BYTE $04,$55,$00 014690 .BYTE $05,$51,$00 014700 .BYTE $01,$54,$00 014710 .BYTE $04,$01,$00 014720 EXPL12 014730 .BYTE $00,$00,$00 014740 .BYTE $00,$55,$00 014750 .BYTE $01,$15,$40 014760 .BYTE $01,$54,$40 014770 .BYTE $00,$55,$00 014780 .BYTE $01,$00,$40 014790 EXPL13 014800 .BYTE $00,$00,$00 014810 .BYTE $00,$15,$40 014820 .BYTE $00,$45,$50 014830 .BYTE $00,$55,$10 014840 .BYTE $00,$15,$40 014850 .BYTE $00,$40,$10 014860 ; 014870 ; Bitmap EXPL2 014880 ; 014890 EXPL2 .BYTE 6,3 014900 .WORD EXPL20,EXPL21,EXPL22,EXPL23 014910 EXPL20 014920 .BYTE $00,$00,$00 014930 .BYTE $05,$50,$00 014940 .BYTE $10,$54,$00 014950 .BYTE $15,$04,$00 014960 .BYTE $05,$50,$00 014970 .BYTE $00,$00,$00 014980 EXPL21 014990 .BYTE $00,$00,$00 015000 .BYTE $01,$54,$00 015010 .BYTE $04,$15,$00 015020 .BYTE $05,$41,$00 015030 .BYTE $01,$54,$00 015040 .BYTE $00,$00,$00 015050 EXPL22 015060 .BYTE $00,$00,$00 015070 .BYTE $00,$55,$00 015080 .BYTE $01,$05,$40 015090 .BYTE $01,$50,$40 015100 .BYTE $00,$55,$00 015110 .BYTE $00,$00,$00 015120 EXPL23 015130 .BYTE $00,$00,$00 015140 .BYTE $00,$15,$40 015150 .BYTE $00,$41,$50 015160 .BYTE $00,$54,$10 015170 .BYTE $00,$15,$40 015180 .BYTE $00,$00,$00 015190 ; 015200 ; Bitmap EXPL3 015210 ; 015220 EXPL3 .BYTE 5,3 015230 .WORD EXPL30,EXPL31,EXPL32,EXPL33 015240 EXPL30 015250 .BYTE $00,$00,$00 015260 .BYTE $05,$50,$00 015270 .BYTE $10,$14,$00 015280 .BYTE $14,$04,$00 015290 .BYTE $05,$50,$00 015300 EXPL31 015310 .BYTE $00,$00,$00 015320 .BYTE $01,$54,$00 015330 .BYTE $04,$05,$00 015340 .BYTE $05,$01,$00 015350 .BYTE $01,$54,$00 015360 EXPL32 015370 .BYTE $00,$00,$00 015380 .BYTE $00,$55,$00 015390 .BYTE $01,$01,$40 015400 .BYTE $01,$40,$40 015410 .BYTE $00,$55,$00 015420 EXPL33 015430 .BYTE $00,$00,$00 015440 .BYTE $00,$15,$40 015450 .BYTE $00,$40,$50 015460 .BYTE $00,$50,$10 015470 .BYTE $00,$15,$40 015480 ; 015490 ; Bitmap EXPL4 015500 ; 015510 EXPL4 .BYTE 5,3 015520 .WORD EXPL40,EXPL41,EXPL42,EXPL43 015530 EXPL40 015540 .BYTE $00,$00,$00 015550 .BYTE $05,$50,$00 015560 .BYTE $10,$04,$00 015570 .BYTE $10,$04,$00 015580 .BYTE $04,$10,$00 015590 EXPL41 015600 .BYTE $00,$00,$00 015610 .BYTE $01,$54,$00 015620 .BYTE $04,$01,$00 015630 .BYTE $04,$01,$00 015640 .BYTE $01,$04,$00 015650 EXPL42 015660 .BYTE $00,$00,$00 015670 .BYTE $00,$55,$00 015680 .BYTE $01,$00,$40 015690 .BYTE $01,$00,$40 015700 .BYTE $00,$41,$00 015710 EXPL43 015720 .BYTE $00,$00,$00 015730 .BYTE $00,$15,$40 015740 .BYTE $00,$40,$10 015750 .BYTE $00,$40,$10 015760 .BYTE $00,$10,$40 015770 ; 015780 ; Bitmap EXPL5 015790 ; 015800 EXPL5 .BYTE 5,3 015810 .WORD EXPL50,EXPL51,EXPL52,EXPL53 015820 EXPL50 015830 .BYTE $00,$00,$00 015840 .BYTE $05,$50,$00 015850 .BYTE $10,$04,$00 015860 .BYTE $10,$04,$00 015870 .BYTE $00,$00,$00 015880 EXPL51 015890 .BYTE $00,$00,$00 015900 .BYTE $01,$54,$00 015910 .BYTE $04,$01,$00 015920 .BYTE $04,$01,$00 015930 .BYTE $00,$00,$00 015940 EXPL52 015950 .BYTE $00,$00,$00 015960 .BYTE $00,$55,$00 015970 .BYTE $01,$00,$40 015980 .BYTE $01,$00,$40 015990 .BYTE $00,$00,$00 016000 EXPL53 016010 .BYTE $00,$00,$00 016020 .BYTE $00,$15,$40 016030 .BYTE $00,$40,$10 016040 .BYTE $00,$40,$10 016050 .BYTE $00,$00,$00 016060 ; 016070 ; Bitmap EXPL6 016080 ; 016090 EXPL6 .BYTE 4,3 016100 .WORD EXPL60,EXPL61,EXPL62,EXPL63 016110 EXPL60 016120 .BYTE $00,$00,$00 016130 .BYTE $05,$50,$00 016140 .BYTE $10,$04,$00 016150 .BYTE $00,$00,$00 016160 EXPL61 016170 .BYTE $00,$00,$00 016180 .BYTE $01,$54,$00 016190 .BYTE $04,$01,$00 016200 .BYTE $00,$00,$00 016210 EXPL62 016220 .BYTE $00,$00,$00 016230 .BYTE $00,$55,$00 016240 .BYTE $01,$00,$40 016250 .BYTE $00,$00,$00 016260 EXPL63 016270 .BYTE $00,$00,$00 016280 .BYTE $00,$15,$40 016290 .BYTE $00,$40,$10 016300 .BYTE $00,$00,$00 016310 ; 016320 ; Bitmap EXPL7 016330 ; 016340 EXPL7 .BYTE 3,3 016350 .WORD EXPL70,EXPL71,EXPL72,EXPL73 016360 EXPL70 016370 .BYTE $00,$00,$00 016380 .BYTE $05,$50,$00 016390 .BYTE $00,$00,$00 016400 EXPL71 016410 .BYTE $00,$00,$00 016420 .BYTE $01,$54,$00 016430 .BYTE $00,$00,$00 016440 EXPL72 016450 .BYTE $00,$00,$00 016460 .BYTE $00,$55,$00 016470 .BYTE $00,$00,$00 016480 EXPL73 016490 .BYTE $00,$00,$00 016500 .BYTE $00,$15,$40 016510 .BYTE $00,$00,$00 016520 ; 016530 ; Bitmap EXPL8 016540 ; 016550 EXPL8 .BYTE 2,3 016560 .WORD EXPL80,EXPL81,EXPL82,EXPL83 016570 EXPL80 016580 .BYTE $00,$00,$00 016590 .BYTE $01,$40,$00 016600 EXPL81 016610 .BYTE $00,$00,$00 016620 .BYTE $00,$50,$00 016630 EXPL82 016640 .BYTE $00,$00,$00 016650 .BYTE $00,$14,$00 016660 EXPL83 016670 .BYTE $00,$00,$00 016680 .BYTE $00,$05,$00 016690 ; 016700 ; Table of explosion addresses 016710 ; 016720 EXPLTAB 016730 .WORD EXPL1,EXPL2,EXPL3 016740 .WORD EXPL4,EXPL5,EXPL6 016750 .WORD EXPL7,EXPL8 016760 ; 016770 ; Bitmap NEEDLE 016780 ; 016790 NEEDLE .BYTE 13,4 016800 .WORD NEEDLE0,NEEDLE1,NEEDLE2,NEEDLE3 016810 NEEDLE0 016820 .BYTE $00,$00,$00,$00 016830 .BYTE $00,$FC,$00,$00 016840 .BYTE $0C,$30,$C0,$00 016850 .BYTE $03,$33,$00,$00 016860 .BYTE $3C,$FC,$F0,$00 016870 .BYTE $03,$9B,$00,$00 016880 .BYTE $03,$9B,$00,$00 016890 .BYTE $03,$9B,$00,$00 016900 .BYTE $00,$EC,$00,$00 016910 .BYTE $00,$EC,$00,$00 016920 .BYTE $00,$30,$00,$00 016930 .BYTE $00,$30,$00,$00 016940 .BYTE $00,$30,$00,$00 016950 NEEDLE1 016960 .BYTE $00,$00,$00,$00 016970 .BYTE $00,$3F,$00,$00 016980 .BYTE $03,$0C,$30,$00 016990 .BYTE $00,$CC,$C0,$00 017000 .BYTE $0F,$3F,$3C,$00 017010 .BYTE $00,$E6,$C0,$00 017020 .BYTE $00,$E6,$C0,$00 017030 .BYTE $00,$E6,$C0,$00 017040 .BYTE $00,$3B,$00,$00 017050 .BYTE $00,$3B,$00,$00 017060 .BYTE $00,$0C,$00,$00 017070 .BYTE $00,$0C,$00,$00 017080 .BYTE $00,$0C,$00,$00 017090 NEEDLE2 017100 .BYTE $00,$00,$00,$00 017110 .BYTE $00,$0F,$C0,$00 017120 .BYTE $00,$C3,$0C,$00 017130 .BYTE $00,$33,$30,$00 017140 .BYTE $03,$CF,$CF,$00 017150 .BYTE $00,$39,$B0,$00 017160 .BYTE $00,$39,$B0,$00 017170 .BYTE $00,$39,$B0,$00 017180 .BYTE $00,$0E,$C0,$00 017190 .BYTE $00,$0E,$C0,$00 017200 .BYTE $00,$03,$00,$00 017210 .BYTE $00,$03,$00,$00 017220 .BYTE $00,$03,$00,$00 017230 NEEDLE3 017240 .BYTE $00,$00,$00,$00 017250 .BYTE $00,$03,$F0,$00 017260 .BYTE $00,$30,$C3,$00 017270 .BYTE $00,$0C,$CC,$00 017280 .BYTE $00,$F3,$F3,$C0 017290 .BYTE $00,$0E,$6C,$00 017300 .BYTE $00,$0E,$6C,$00 017310 .BYTE $00,$0E,$6C,$00 017320 .BYTE $00,$03,$B0,$00 017330 .BYTE $00,$03,$B0,$00 017340 .BYTE $00,$00,$C0,$00 017350 .BYTE $00,$00,$C0,$00 017360 .BYTE $00,$00,$C0,$00 017370 ; 017380 *= $02E0 017390 .WORD DOTITLE 017400 .END