Listing of file='FIREJ.MAC;12' on disk='vmedia/laser_gun_joystick-sector.ccvf'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; FIRCTL - FIRE CONTROL ROUTINE ; ; DOES ALL THE SHOOTING AT SHIPS. INTERNAL HIT ; AND SHOT COUNTERS ARE PUBLIC, AS ARE THE ; MESSAGES THAT PRINT THEM. MAKES SOUNDS FOR THE ; SHOT AND EXPLOSIONS (HITS). THE COUNT TO BE USED ; IN DEBOUNCING THE PUSH-BUTTON IS PUBLIC. ; ; *** JOYSTICK VERSION *** ; ; (USES JOYSTICK FOR BOTH DISTANCE AND DIRECTION) ; TITLE FIRCTL ENTRY FIRCTL PUBLIC FIRMSG,FIRED,HITMSG,HITS,DBCNT PUBLIC X,Y ; ; VALUES ON ENTRY: ; IRRELEVANT ; ; RETURNS: ; NOTHING - HITS AND SHOTS FIRED ARE PUBLIC ; ; DESTROYS: ; ALL REGISTERS ; ; ; EXTERNALS - REQUIRED SUBROUTINES ; EXTRN CHKSHP ;CHECKS A SHIP FOR A HIT EXTRN DELAY ;WASTE TIME EXTRN INCCNT ;INCREMENT ASCII COUNT EXTRN JOYSTK,PSHBUT ;JOYSTICK ROUTINES EXTRN LASER,BOOM ;MAKE SOUNDS EXTRN OSTR ;OUTPUT A STRING EXTRN SCT,HLSCT,BMPSCT,NSHIP ;IN MAIN PROGRAM ; ; PARAMETERS - ; ADJDEL EQU 20 ;DELAY TO ADJUST TIMING FOR WHEN A SHOT ; IS NOT FIRED. SHOULD BALANCE OUT THE ; TIME TAKEN IF A SHOT IS FIRED. ;.............................................................. FIRCTL: LDA DEBNCE ;DEBOUNCE THE PUSH-BUTTON ORA A JZ BUTTON DCR A STA DEBNCE JMP BUTT50 BUTTON: XRA A ;SET JOYSTICK NO. 0 CALL PSHBUT ;SEE IF BUTTON IS DEPRESSED JNZ BUTT50 XRA A CALL JOYSTK ;GET JOYSTICK POSITION MOV A,B RRC ;DIVIDE BY 2 ANI 7FH STA X ;SAVE X-COORD MOV A,C ;SAME FOR Y-COORD RRC ANI 7FH STA Y LXI H,WHITE ;SET COLOR CALL OSTR LXI H,BEAM ;DRAW THE LASER BEAM CALL OSTR LXI H,FIRED-1 ;INCREMENT COUNT OF SHOTS FIRED CALL INCCNT LXI H,FIRMSG ; AND PRINT MESSAGE CALL OSTR CALL LASER ;MAKE A LASER SOUND LXI H,SCT LDA NSHIP ;GET NUMBER OF SHIPS DCR A ;LEAVE ONE ALONE MOV B,A JNZ BUTT10 ;BUT MAKE SURE ITS NOT THE ONLY ONE INR B BUTT10: PUSH B SHLD HLSCT CALL CHKSHP ;SCAN EACH SHIP FOR A HIT JNZ BUTT20 LXI H,HITS-1 ;INCREMENT SCORE IF A HIT CALL INCCNT LXI H,HITMSG ; AND DISPLAY THE HIT COUNT CALL OSTR CALL BOOM ;MAKE EXPLOSION SOUND JMP BUTT40 BUTT20: MVI A,ADJDEL ;ADJUST TIMING IF NO HIT CALL DELAY BUTT40: LHLD HLSCT CALL BMPSCT ;STEP THROUGH SHIP CONTROL TABLE POP B DCR B JNZ BUTT10 LXI H,BLACK ;SET COLOR TO BLACK CALL OSTR LXI H,BEAM ;AND ERASE THE LASER BEAM CALL OSTR LDA DBCNT ;RESTORE THE DEBOUNCE COUNT STA DEBNCE RET BUTT50: LDA NSHIP MOV B,A BUTT60: MVI A,ADJDEL ;ADJUST TIMING IF NO SHOT FIRED CALL DELAY DCR B JNZ BUTT60 RET ;.............................................................. ; ; DATA AREA ; DBCNT: DB 4 ;COUNT FOR DEBOUNCING DEBNCE: DB 4 ;DEBOUNCE COUNTER ; ; MESSAGES ; FIRMSG: DB 15,3,10,30,6,2,'FIRED',10,26,26,26,26,26 DB '0000' FIRED: DB 239 ;SHOTS FIRED HITMSG: DB 15,3,50,30,6,2,'HITS',10,26,26,26,26,26 DB '0000' HITS: DB 239 ;NUMBER OF HITS WHITE: DB 6,7,239 BLACK: DB 6,0,239 BEAM: DB 2,64,64,242 ;LASER BEAM (PLOTTED VECTOR) X: DB 128 Y: DB 128 DB 255,239 END