01 ;JS15G:USED TO LOAD GUN DRAWING 02 ;INTO PLAYER MEMORY 10 JS15G LDA #70 ;VERT ENDING POS 20 STA END1 ;OF GUN DRAWINGS 30 STA END1+1 40 LDA #62 ;VERT START POS 50 STA TOP1 ;OF GUN DRAWINGS 60 STA TOP1+1 70 STA $D003 ;SAVE HORIZ POS OF PLAYER3 80 LDA #183 ;HORIZ POS OF 90 STA $D002 ;PLAYER2 0100 LDX #8 ;POINTER TO GUN DRAWING BYTE 0110 G1 LDA GUN,X ;LOAD DRAWING BYTE 0120 STA PL3R+62,X ;SAVE IN PLAYER MEMORY 0130 LDA GUN2,X ;DRAWING BYTE 0140 STA PL2R+62,X ;SAVE IN PLAYER MEMORY 0150 DEX ;NEXT BYTE 0160 BPL G1 ;IF<0 THEN ALL BYTES MOVED 0170 RTS 0171 ; 0172 ;T12P3:LOADS ADDRESS OF PLAYER 3 0173 ;INTO TEMP12 0180 T12P3 LDA #PL3R/256 ;LOAD ADDRESS 0190 STA TEMP12+1 ;OF PLAYER3 0200 LDA #PL3R&$FF ;INTO TEMP POINTER 0210 STA TEMP12 0220 RTS 0221 ; 0222 ;T12MS:LOADS ADDRESS OF PLAYER 2 0223 ;INTO TEMP12 0230 T12MS LDA #PL2R/256 ;LOAD ADDRESS 0240 STA TEMP12+1 ;OF PLAYER2 0250 LDA #PL2R&$FF ;INTO TEMP POINTER 0260 STA TEMP12 0270 RTS 0271 ; 0272 ;JOYSTG0:MOVES GUN (DRAWING IN 0273 ;PLAYER MEMORY) UP OR DOWN 0274 ; 0280 JOYSTG0 LDA (TEMPS),Y ;LOAD JOYSTICK VALUE 0290 CMP #13 ;TEST FOR POS 13 0300 BNE G14 ;BRANCH TO TEST FOR 14 0310 LDA END1,X ;LOAD VERT END POS OF GUN 0320 CMP #192 ;IS IT AT LOWER LIMIT 0330 BCS EXITG ;IF >OR= THEN EXIT 0340 INC END1,X ;ELSE ADD 1 TO 0350 INC TOP1,X ;VERT POS OF GUN 0360 LDX #12 ;#OF BYTES OF GUNDRAWING TO MOVE 0370 TAY ;LOAD ENDING POS OF GUN 0380 DOWNG DEY ;SET TO BYTE TO BE MOVED 0390 LDA (TEMP12),Y 0400 INY ;SET TO DESTINATION 0410 STA (TEMP12),Y 0420 DEY ;NEXT BYTE TO MOVE 0430 DEX ;DEC # OF BYTES TO MOVE 0440 BNE DOWNG 0450 RTS 0460 G14 CMP #14 ;IS JOYSTICK VALUE 14 0470 BNE EXITG ;IF NOT THEN EXIT 0480 LDA TOP1,X ;VERT START POS OF GUN 0490 CMP #64 ;IS IT AT UPPER LIMIT 0500 BCC EXITG ;IF < THEN EXIT 0510 DEC END1,X ;ELSE SUB 1 FROM 0520 DEC TOP1,X ;GUN'S VERT POS 0530 TAY ;LOAD VERT START OF GUN DRAWING 0540 LDX #12 ;#OF BYTES OF GUN DRAWING TO BE MOVED 0550 UPG INY ;SET TO POINT TO BYTE TO BE MOVED 0560 LDA (TEMP12),Y 0570 DEY ;SET TO DESTINATION BYTE 0580 STA (TEMP12),Y 0590 INY ;NEXT BYTE TO BE MOVED 0600 DEX ;DEC #OF BYTES TO BE MOVED 0610 BNE UPG 0620 EXITG RTS 0621 ; 0622 ;FIREBOMB:MOVES MISSILE BOMB 0623 ;OR EXPLODES MISSILE 0630 FIREBOMB LDA P0+2 ;LOAD COUNTER FOR 0640 BEQ FIRE ;HOW LONG BOMB EXPLODES 0650 DEC P0+2 0660 LDA P0+2 0670 BNE EXIT84 ;IF = THEN 0680 SEC ;SUB 2 TO FIND 0690 LDA P0+1 ;LOWEST POS 0700 SBC #2 ;OF EXPLODING DRAWING 0710 TAY 0720 LDX #5 ;# OF BYTES TO BE CLEARED 0730 LDA #0 0740 DISP STA PL0R,Y ;CLEAR EXPLODE 0750 INY ;DRAWING IN PLAYER0 0760 DEX ;ALL BYTES CLEARED 0770 BPL DISP 0771 LDA #0 0772 STA $D202 0780 RTS 0790 FIRE LDA TEMP1+5 ;TEST FLAG FOR BOMB ALREADY FIRED 0800 BEQ EXIT84 0810 LDY #0 ;CLEAR Y 0820 LDA (T1Y),Y ;LOAD TRIGGER VALUE 0830 BNE EXIT84 ;IF NOT PRESSED EXIT 0840 STA TEMP1+5 ;SET FLAG FOR BOMB FIRED 0850 CLC 0860 LDX T15 0870 LDA TOP1,X ;START OF GUN DRAWING 0880 ADC #4 ;FIND MIDDLE OF GUN 0890 TAY 0900 LDA T16 ;POS WHERE BOMB STARTS 0910 STA $D000 ;SAVE BOMB HORIZ POS 0920 STA P0 ;SAVE IN POINTER 0930 LDA #24 ;BOMB DRAWING 0940 STA PL0R,Y ;SAVE IN PLAYER MEMORY 0950 STY P0+1 0960 LDA #218 ;SET BOMB COLOR 0970 STA $02C0 0971 LDA #160 0972 STA SDELAY1+1 0980 EXIT84 RTS 0981 ; 0982 ;MOVEBOMB:MOVES BOMB TO LEFT 0983 ;AND EXPLODES BOMB 0984 ; 0990 MOVEBOMB LDA TEMP1+5 ;IF FLAG= 0 THEN 1000 BEQ MOV ;MOVE BOMB 1010 RTS 1020 MOV DEC P0 ;SET NEW POS 1030 DEC P0 1040 LDA P0 ;HAS BOMB REACHED 1050 CMP #63 ;LEFT LIMIT,IF YES 1060 BCC EXPLODE ;THEN EXPLODE BOMB 1070 STA $D000 ;ELSE SAVE NEW POS 1071 DEC SDELAY1+1 1072 LDA SDELAY1+1 1073 STA $D202 1080 RTS 1090 EXPLODE LDA #1 ;SET FLAG FOR EXPLOSION 1100 STA TEMP1+5 1110 SEC ;SET VERT POS FOR 1120 LDA P0+1 ;WHERE BOMB 1130 SBC #2 ;WILL EXPLODE 1140 TAY 1150 LDX #5 ;#OF BYTES IN EXPLODE DRAWING 1160 EXPL LDA EXPLD,X ;LOAD EXPLODE DRAW BYTE 1170 STA PL0R,Y ;SAVE IN PLAYER MEMORY 1180 INY ;NEXT STORAGE BYTE 1190 DEX ;NEXT DRAWING BYTE 1200 BPL EXPL 1210 LDA #5 ;SET FLAG FOR HOW 1220 STA P0+2 ;LONG EXPLODE DRAWING LAST 1230 LDA #14 ;SET EXPLODE COLOR 1240 STA $02C0 1241 LDA #250 1242 STA $D202 1250 RTS 1251 ; 1252 ;MOVEBOM2:MOVES MISSILE TO RIGHT 1253 ;AND EXPLODES MISSILE 1260 MOVEBOM2 LDA TEMP1+5 1270 BEQ MOV2 1280 RTS 1290 MOV2 INC P0 ;SET NEW POS 1300 INC P0 1310 LDA P0 ;HAS IT REACHED THE 1320 CMP #183 ;RIGHT LIMIT,IF YES 1330 BCS EXPLODE ;THEN EXPLODE BOMB 1340 STA $D000 ;ELSE SAVE NEW POS 1341 DEC SDELAY1+1 1342 LDA SDELAY1+1 1343 STA $D202 1350 RTS 1360 FIREVAR1 LDA #65 1370 STA T16 1380 LDA #$84 1390 STA T1Y 1400 LDA #0 1410 STA T15 1420 RTS 1430 FIREVAR2 LDA #183 1440 STA T16 1450 LDA #$85 1460 STA T1Y 1470 LDA #1 1480 STA T15 1490 RTS