Listing of file='CHKSHP.MAC;0E' on disk='vmedia/laser_gun_joystick-sector.ccvf'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; CHKSHP - CHECK A SHIP FOR A HIT ; ; CHECKS A SHIP FOR A HIT AS INDICATED BY A WHITE ; FOREGROUND IN PART OF THE SHIP. SETS UP THE ; EXPLOSION GRAPHIC AND DURATION IF HIT. ; TITLE CHKSHP ENTRY CHKSHP ; ; VALUES ON ENTRY ARE IRRELEVANT ; ; RETURNS WITH THE <Z> BIT SET IF THERE IS A HIT, AND ; NOT SET IF NO HIT. ; EXTRN GETSCT,PUTSCT EXTRN HLSCT,SHPTYP,GRPTR,XPOS,YPOS,HORCNT,VRTCNT EXTRN XPLCNT,EXPLDE EXTRN RANDOM ; SHPWID EQU 10 SHPHGT EQU 3 ;.............................................................. ; CHKSHP: CALL GETSCT ;GET THE SCT LDA SHPTYP ;MAKE SURE THE SHIP EXISTS ORA A ; AND IF NOT ... JNZ CHKS10 MVI A,1 ; ... RETURN WITH <Z> NOT SET ORA A RET CHKS10: LDA XPLCNT ;SEE IF SHIP ALREADY EXPLODING ORA A ; AND IF SO ... RNZ ; ... RETURN WITH <Z> NOT SET CALL SCNSHP ;SCAN SHIPS FOR HITS RNZ ;RETURN IF SHIP NOT HIT (<Z> NOT SET) MVI A,8 ;SELECT RANDOM DURATION FOR EXPLOSION CALL RANDOM ADI 2 STA XPLCNT MVI A,SHPWID ;RANDOMLY CHOSE GRAPHIC CALL RANDOM RLC MOV E,A XRA A MOV D,A LXI H,EXPLDE DAD D SHLD GRPTR ;AND STORE IN GRAPHIC POINTER MVI A,1 ;SET MOVE COUNTERS TO ENSURE AN STA HORCNT ; IMMEDIATE MOVE AND DISPLAY STA VRTCNT CALL PUTSCT XRA A ;RETURN WITH <Z> BIT SET RET ;.............................................................. ; ; SCAN THE GRAPHIC LOOKING FOR A LASER HIT ; ENTRY SCNSHP ; ; VALUES ON ENTRY: ; IRRELEVANT ; ; ALL REGISTERS DESTROYED ; ; RETURNS WITH <Z> BIT SET IF A HIT, AND NOT SET IF ; NO HIT. A HIT IS INDICATED IF PART OF THE SHIP HAS ; A FOREGROUND COLOR OF WHITE I.E. LASER BEAM. THE ; SHIP GRAPHIC MUST THEREFORE NOT CONTAIN ANY WHITE ; SECTIONS. ; EXTRN XYADDR EXTRN X,Y ;COORDS OF END OF LASER BEAM LPS EQU 32 ;LINES PER SCREEN CPL EQU 64 ;CHARACTERS PER LINE BPL EQU 128 ;BYTES PER LINE SCNSHP: LDA XPOS MOV B,A LDA YPOS MOV C,A CALL XYADDR ;GET ADDRESS IN REFRESH RAM PUSH H SHLD CRTRAM MVI A,SHPHGT MOV L,A SCNS1: MOV A,C ;GO THROUGH EACH LINE OF THE FIGURE ORA A JP SCNS2 JMP SCNEND SCNS2: CPI LPS ;SEE IF OFF BOTTOM OF SCREEN JNC FIN ;AND RETURN IF TRUE MVI A,SHPWID ;OTHERWISE LOOK AT X-COORD RRC ;DIVIDE BY TWO ANI 7FH MOV H,A LDA XPOS MOV B,A SCNS3: MOV A,B ;CHECK X-COORD FOR EACH CHARACTER ORA A JP SCNS6 SCNS4: XTHL ;OFF SCREEN TO LEFT, INCREMENT INX H INX H XTHL SCNS5: INR B ;UPDATE X-COORD DCR H ;SEE IF THIS LINE OF FIGURE FINISHED JNZ SCNS3 JMP SCNEND SCNS6: CPI CPL ;CHECK FOR OFF SCREEN TO RIGHT JNC SCNEND XTHL SCNS7: INX H MOV A,M ;GET COMPOSITE COLOR CODE ANI 07H ;FIND FOREGROUND COLOR CPI 07H ;COMPARE TO WHITE JZ HIT ;AND RETURN IF TRUE (<Z> IS SET) INX H XTHL JMP SCNS5 SCNEND: INR C ;GO TO NEXT LINE OF FIGURE DCR L JZ FIN ;RETURN IF NONE LEFT XTHL LHLD CRTRAM ;UPDATE REFRESH RAM ADDRESS PUSH D LXI D,BPL DAD D POP D SHLD CRTRAM XTHL JMP SCNS1 ;REPEAT FOR THIS LINE FIN: MVI A,1 ;CLEAR <Z> BIT ORA A HIT: POP H RET MISS: MVI A,1 ;MISSED THE SHIP ORA A RET ; TEMPORARY STORAGE AREA CRTRAM: DS 2 ;ADDRESS IN REFRESH RAM END