0 ;ADD4011:ADDS THE LENGHT OF A 01 ;PLAYFIELD ROW TO TEMP11 02 ;AND THEREBY,SETS TEMP11 TO 03 ;POINT TO NEXT ROW 05 ADD4011 LDA TEMP11 ;LOAD POINTER TO CURRENT ROW 10 CLC 15 ADC #40 ;ADD # OF BYTES PER ROW 20 STA TEMP11 25 LDA TEMP11+1 30 ADC #0 ;ADD CARRY TO HIGH BYTE 35 STA TEMP11+1 40 RTS 41 ; 42 ;LINECNT:MOVES POINTER TEMP11 43 ;TO NEXT ROW OR RESETS TEMP11 44 ;TO FIRST ROW 45 LINECNT JSR ADD4011 ;JMPSUB TO SET POINTER TO NEXT ROW 50 CMP #ENDSC/256 ;ENDSC IS END OF 55 BNE EXITSC ;PLAYFIELD SCREEN 60 LDA TEMP11 ;IF TEMP11<>ENDSC 65 CMP #ENDSC&$FF ;THEN EXIT 70 BNE EXITSC 75 ORIGIN1 LDA #ORIGIN/256 ;ELSE RESET TEMP11 80 STA TEMP11+1 ;TO FIRST ROW 85 LDA #ORIGIN&$FF 90 STA TEMP11 95 EXITSC RTS 0100 LINECNT2 JSR ADD4011 ;JMPSUB TO SET POINT TO NEXT ROW 0105 CMP #ENDSC2/256 ;ENDSC2 IS END OF PLAYFIELD 0110 BNE EXITSC2 ;IF TEMP11<>ENDSC2 0115 LDA TEMP11 ;THEN EXIT 0120 CMP #ENDSC2&$FF 0125 BNE EXITSC2 0130 ORIGINA LDA #ORIGIN2/256 ;ELSE RESET TEMP11 0135 STA TEMP11+1 ;TO POINT TO 1ST ROW 0140 LDA #ORIGIN2&$FF 0145 STA TEMP11 0150 EXITSC2 RTS 0151 ; 0152 ;WARS:USED TO HAVE TROLLS ATTACK 0153 ;WIZARDS CASTLE/WIZARD DEFENDERS. 0154 ;ALSO MOVES WIZARDS CHAR BOMB 0155 WARS LDY #2 ;START POSITION IN A ROW 0160 TLOOP LDA (TEMP11),Y ;LOAD PLAYFIELD BYTE 0165 CMP #$58 ;CMP TO BOMB CHAR 0170 BEQ T58A ;BRANCH TO CHANGE CHAR 0175 CMP #$59 ;CMP TO OTHER BOMB CHAR 0180 BEQ T59A ;BRANCH T CHANGE CHAR 0185 LDX T2 ;LOAD TABLE OFF-SET 0190 LDA T1,X ;LOAD DELAY VALUE 0195 CMP #1 ;IF VALUE >1 THEN 0200 BCS T79 ; DON'T MOVE ATTACKERS 0205 JMP TEND ;JMP TO TEST NEXT BYTE OR END LOOP 0210 T79 LDA (TEMP11),Y ;ELSE LOAD PLAYFIELD BYTE 0215 CMP #7 ;CMP TO TROLL CHAR 0220 BEQ T10 ;IF = THEN MOVE TROLL 0225 CMP #9 ;CMP TO TROLL CHAR 0230 BEQ T12 ;IF = MOVE TROLL 0235 JMP TEND ;ELSE JMP TO TEST NEXT BYTE OR END LOOP 0240 T10 LDA #9 ;LOAD NEW TROLL CHAR 0245 JSR SAVEVAL ;MOVE DRAWING WITHIN SAME BYTE 0250 JMP TEND ;NEXT BYTE OR END LOOP 0255 T12 CPY #34 ;CMP ROW OFFSET TO POS 1 BYTE 0260 BCC TOK ;TO LEFT OF WIZARD CHAR 0265 JSR STORZ0 ;IF>= REMOVE TROLL 0270 JSR KILL2 ;JMPSUB TO REMOVE WIZARD CHAR 0275 JMP TEND 0280 TOK INY ;SET BYTE POINTER TO NEW POS 0285 INY 0290 LDA (TEMP11),Y ;LOAD VALUE IN NEW POS 0295 DEY ;RESET POINTER 0300 DEY 0305 CMP #0 ;IF VALUE NOT 0 0310 BNE TEND ;THEN DON'T DISPLAY NEW TROLL 0315 LDA #0 ;ELSE USE 0 TO CLEAR 0320 STA (TEMP11),Y ;OLD CHAR 0325 INY ;SET NEW POS 0330 LDA #7 ;LOAD TROLL DRAWING CHAR 0335 JSR SAVEVAL ;JMPSUB TO DISPLAY TROLL 0340 JMP TEND 0345 T59A LDA #$58 ;LOAD OTHER BOMB CHAR 0350 STA TEMP1+8 ;TEMP SAVE 0355 JMP T589A 0360 T58A LDA #$59 ;LOAD OTHER BOMB CHAR 0365 STA TEMP1+8 0370 T589A LDA #0 ;USE 0 TO CLEAR 0375 STA (TEMP11),Y ;OLD BOMB CHAR 0380 DEY ;CHECK POINTER OF ROW BYTE 0385 CPY #5 ;IF<5 THEN EXIT 0390 BCC TEND 0395 LDA (TEMP11),Y ;ELSE LOAD VALUE IN NEW POS 0400 BEQ T98A ;IF = JMP TO DISPLAY BOMB 0405 DEY ;ELSE SET NEW POINTER POS 0410 JSR STORZ0 ;JMP TO CLEAR BYTES 0415 JMP TEND 0420 T98A LDA TEMP1+8 ;LDA BOMB CHAR 0425 STA (TEMP11),Y ;DISPLAY BOMB 0430 TEND INY ;NEXT ROW BYTE 0435 CPY #35 ;IF >= 35 THEN ALL 0440 BCS WED ;BYTES OF A ROW HAVE BEEN PROCESSED 0445 JMP TLOOP 0446 ; 0447 ;WARS2:USED TO HAVE WIZARDS ATTACK 0448 ;TROLLS CASTLE/TROLL DEFENDERS. 0449 ;ALSO MOVES TROLL CHAR BOMB 0450 WED RTS 0455 WARS2 LDY #3 ;STARTING POSITION IN A PLAYFIELD ROW 0460 TLOOP2 LDA (TEMP11),Y ;LOAD PLAYFIELD BYTE 0465 CMP #$58 ;CMP TO BOMB CHAR 0470 BEQ T58 ;IF = CHANGE CHAR 0475 CMP #$59 ;CMP TO OTHER BOMB CHAR 0480 BEQ T59 ;IF = CHANGE CHAR 0485 LDX T2 ;LOAD X WITH OFFSET FOR DELAY TABLE 0490 LDA T1,X ;LOAD DELAY VALUE 0495 CMP #1 ;IF =1 0500 BCS T2527 ;THEN MOVE ATTACKING WIZARD CHARS 0505 JMP TEND2 ;ELSE TEST TO SEE IF DONE 0510 T2527 LDA (TEMP11),Y ;LOAD PLAYFIELD BYTE 0515 CMP #25 ;CMP TO WIZARD CHAR 0520 BEQ T25 ;IF = MOVE WIZARD WITHIN BYTE 0525 CMP #27 ;CMP TO WIZARD CHAR 0530 BEQ T27 ;IF = MOVE WIZARD TO NEW POS 0535 JMP TEND2 ;TEST TO SEE IF DONE 0540 T25 LDA #27 ;LOAD NEW WIZARD CHAR 0545 JSR SAVEVAL ;JMPSUB TO DISPLAY WIZARD 0550 JMP TEND2 ;TEST TO SEE IF DONE 0555 T27 CPY #5 ;CMP ROW POS TO 5TH BYTE 0560 BCS WOK ;IF> THEN WIZ POS IS OK 0565 JSR STORZ0 ;ELSE REMOVE WIZARD CHAR 0570 JSR KILL ;JMPSUB TO REMOVE TROLL CHAR 0575 JMP TEND2 ;TEST TO SEE IF DONE 0580 WOK DEY ;SET NEW ROW POS 0585 LDA (TEMP11),Y ;LOAD PLAYFIELD BYTE 0590 INY ;RESET ROW POS 0595 CMP #0 ;TEST TO SEE IF PLAYFIELD BYTE IS CLEAR 0600 BNE TEND2 ;IF NOT THEN DON'T MOVE WIZARD 0605 DEY ;ELSE SET NEW POS 0610 LDA #25 ;LOAD NEW WIZARD CHAR 0615 JSR SAVEVAL ;DISPLAY WIZARD 0620 INY SET POINTER TO OLD CHAR 0625 LDA #0 ;USE 0 TO CLEAR OLD 0630 STA (TEMP11),Y ;PLAYFIELD BYTE 0635 JMP TEND2 ;TEST TO SEE IF DONE 0640 T59 LDA #$58 ;LOAD NEW BOMB CHAR 0645 STA TEMP1+8 0650 JMP T589 0655 T58 LDA #$59 ;LOAD NEW BOMB CHAR 0660 STA TEMP1+8 0665 T589 LDA #0 ;USE 0 TO CLEAR OLD 0670 STA (TEMP11),Y ;BOMB CHAR 0675 INY ;SET NEW BOMB POS IN ROW 0680 CPY #36 ;CMP TO RIGHT LIMIT OF ROW 0685 BEQ TEND2 ;IF = DON'T DISPLAY BOMB 0690 LDA (TEMP11),Y ;ELSE LOAD PLAYFIELD BYTE 0695 BEQ T98 ;IF DISPLAY BOMB IN NEW POS 0700 JSR STORZ0 ;ELSE REMOVE WIZARD CHARS 0705 JMP TEND2 0710 T98 LDA TEMP1+8 ;LOAD POINTER TO BOMB 0715 STA (TEMP11),Y ;SAVE BOMB CHAR IN PLAYFIELD 0720 TEND2 INY ;NEXT BYTE IN ROW 0725 CPY #37 ;IF = TO 37 THEN ALL BYTES PER 0730 BEQ TED ;ROW HAVE BEEN PROCESSED 0735 JMP TLOOP2 0740 TED RTS 0741 ; 0742 ;KILL:CALCULATES # OF WIZARDS 0743 ;THAT HAVE REACHED TROLL DEFENDERS 0744 ;ALSO REPLACES TROLL IF WIZARD IF NECESSARY 0745 KILL LDX T2 ;LOAD TABLE OFFSET 0750 DEC ROWT,X ;SUB 1 FROM TABLE VLUE 0755 LDA ROWT,X 0760 BNE EXITKILL ;IF<> THEN EXIT 0765 DEY ;ELSE SET Y TO POS OF CHAR 0770 DEY ;THAT IS TO BE REMOVED 0775 LDA (TEMP11),Y ;LOAD PLAYFIELD BYTE 0780 CMP #$72 ;CMP TO TROLL CHAR 0785 BEQ KILL1 ;IF = THEN REMOVE TROLL CHAR 0790 DEY ;ELSE TEST OTHER BYTE 0795 LDA (TEMP11),Y ;LOAD PLAYFIELD BYTE 0800 INY ;SET Y TO NEW POS 0805 CMP #$72 ;CMP PLAYFIELD BYTE TO TROLL CHAR 0810 BEQ KILL1 ;IF = THEN REMOVE TROLL CHAR 0815 RTS 0820 KILL1 DEY ;SET ROW POS 0825 LDA #23 ;LOAD WIZARD CHAR 0830 JSR SAVEVAL ;DISPLAY WIZARD 0835 DEY ;RESET Y 0840 DEC TOTALT ;SUB 1 FROM TOTAL # OF TROLL DEFENDERS 0845 LDA TOTALT 0850 BNE EXITKILL ;IF <> THEN EXIT 0855 STA TKING ;ELSE SET FLAG TO DISPLAY KING 0860 EXITKILL RTS 0861 ; 0862 ;KILL2:CALCULATES # OF TROLLS THAT 0863 ;HAVE REACHED WIZARD DEFENDERS 0864 ;AND REMOVES WIZARD IF NECESSARY 0865 KILL2 LDX T2 ;LOAD TABLE OFFSET 0870 DEC ROWW,X ;SUB 1 FROM TABLE VALUE 0875 LDA ROWW,X 0880 BNE EXITKIL2 ;IF VALUE <> THEN EXIT 0885 INY ;ELSE SET POINTER TO NEXT PLAYFIELD BYTE 0890 LDA (TEMP11),Y ;LOAD PLAYFIELD BYTE 0895 CMP #$F3 ;CMP TO WIZARD CHAR 0900 BEQ KILL12 ;IF = BRANCH TO REMOVE CHAR 0905 INY ;SET Y NEW NEXT PLAYFIELD BYTE 0910 LDA (TEMP11),Y ;LOAD PLAYFIELD BYTE 0915 DEY ;RESET Y 0920 CMP #$F3 ;CMP TO WIZARD CHAR 0925 BEQ KILL12 ;IF = BRANCH TO REMOVE CHAR 0930 RTS 0935 KILL12 LDA #1 ;LOAD TROLL CHAR 0940 JSR SAVEVAL ;DISPLAY NEW DRAWING 0945 DEC TOTALW ;SUB 1 FROM # OF WIZARD DEFENDERS 0950 LDA TOTALW 0955 BNE EXITKIL2 ;IF<> THEN EXIT 0960 STA WKING ;ELSE SET FLAG TO DISPLAY WIZ KING 0965 EXITKIL2 RTS 0966 ; 0967 ;SAVEVAL:TAKES CHAR AND SAVES 0968 ;ON PLAYFIELD.THEN ADDS 1 TO 0969 ;POINTER AND SAVE OTHER HALF OF CHAR 0970 SAVEVAL STA (TEMP11),Y ;SAVE NEW CHAR IN PLAYFIELD BYTE 0975 INY ;NEXT BYTE IN PLAYFIELD ROW 0980 TAX ;TRANSFER CHAR 0985 INX ;SET TO NEXT CHAR 0990 TXA 0995 STA (TEMP11),Y ;SAVE NEW CHAR IN PLAYFIELD BYTE 1000 RTS 1001 ; 1002 ;STORZ0:USED TO CLEAR 1003 ;TWO BYTES OF PLAYFIELD 1004 ; 1005 STORZ0 LDA #0 1010 STA (TEMP11),Y ;SAVE 0 IN PLAYFIELD BYTE 1015 INY ;NEXT BYTE IN PLAYFIELD ROW 1020 STA (TEMP11),Y ;SAVE 0 IN PLAYFIELD BYTE 1025 RTS