.FILE 'SHOTS.ASM' .TITLE 'PROJECTILES FROM PLAYERS STUFF' .WIDTH 132 .OPTION B,D,L,T .MNOLIST ; ; INITIATED: AUG 30,1990 ; MODIFIED: ! ; SOFTWARE: MARK TURMELL ; ; COPYRIGHT (C) 1989 WILLIAMS ELECTRONICS GAMES, INC. ; ; ; GET THE SYSTEM STUFF .INCLUDE "MPROC.EQU" ;MPROC EQUATES .INCLUDE "DISP.EQU" ;DISPLAY PROC. EQUATES .INCLUDE "\VIDEO\SYS\SYS.INC" ;Z UNIT SYSTEM EQUATES .INCLUDE "\VIDEO\SYS\MACROS.HDR" ;MACROS DEFINITIONS .INCLUDE "IMGTBL.GLO" .INCLUDE "GAME.EQU" ; ;SOUNDS EXTERNAL ; .REF SHOT,MISS2,RIFL,BINGO,FREESND,WOO2,MISS,ICSND,EXP3HIB,WOO1 .REF SCASH ; ;SYMBOLS EXTERNALLY DEFINED ; .REF PCNT,OUT_FLG,FRANIM,BCURRENT,CLEANUP,SHAKER,INHERE,RINGS .REF SCRADD2,P1DATA,P2DATA,DO_EXTRA,FREETOT,KILL_H1,ZEROCNTS .REF KILL_F2,GETFPAL,BGDO,HALT,FIREEXP,KILL_LY,COMEOUT ; ;SYMBOLS DEFINED IN THIS FILE ; .DEF B_DIR,STRT_WPN,FIRE_DIRECTION,KILL_BULL,SPRAYON,NSTPON .DEF KEYON,RINGON,SMRTON,SHOEON,EXTRA,BMBON,DEL_BULL,TCSH .DEF FIREON,GRENON,SPDGON,CLNICN,CHK_BULL,MAPON,SBOMB,KILL_BULL2 ; ;UNINITIALIZED RAM DEFINITIONS ; .BSS B_DIR,16 ;BULLET DIRECTION 1-9 BUT NOT 3! .BSS MAPON,16 ;MAP PICKED UP, FLAG FOR MESSAGES ; ;EQUATES FIRST ORIGINATED IN THIS FILE ; ;PUT IN ANGLE VELOCITIES! BLTYVEL .EQU 072000H ;>164000 BLTXVEL .EQU 072000H ;>164000 BL3YVEL .EQU 032000H ;>164000 BL3XVEL .EQU 039000H ;>164000 BLT5YVEL .EQU 038000H ;>164000 BLT5XVEL .EQU 040000H ;>164000 GRNYVEL .EQU 000H GRNXVEL .EQU 2000H ;-18000 FOR FLATFACE GRNYVEL2 .EQU -018000H GRNXVEL2 .EQU -018000H .TEXT RINGON: ;TURN RING ON AROUND PLAYER ICON PICKUP ;REDUCE MMTM!!! MMTM SP,A1,A7,A9 MOVE *A0(OPLINK),A0,L MOVE *A0(PNUM),A9 ; MOVE @RINGTIME,A10 ;IF ALREADY A RING FOR THIS PLYR ;KILL OLD PROC AND RESTART ANEW CMPI 1,A9 JRZ ONEP MOVI RNG2PID,A0 CLR A1 NOT A1 CALLA EXISTP JRZ STRT2 CALLA KILL STRT2 MOVI 60,A10 ;TIME RINGS ARE ON CREATE RNG2PID,RINGS ;PLACE RING AROUND PLAYER X JRUC ROUT ONEP MOVI RNG1PID,A0 CLR A1 NOT A1 CALLA EXISTP JRZ STRT1 CALLA KILL STRT1 MOVI 60,A10 ;TIME RINGS ARE ON CREATE RNG1PID,RINGS ;PLACE RING AROUND PLAYER X ROUT CALLR CLNICN MOVI ICSND,A0 CALLA ONESND MMFM SP,A1,A7,A9 RETS EXTRA: ;A0=PLYR ;A8=ICON MMTM SP,A1,A2,A3,A4,A5,A6,A7 MOVE *A8(OIMG),A1,L CMPI SPIN1,A1 ;WARP JRZ AWARP CMPI MAPBUTN,A1 JRNZ EX1 ;THIS IS A MAPBUTN MOVI BGDO,A7 MOVK 1,A0 MOVE A0,@HALT EX2 MOVE *A8(OPLINK),A0,L CALLA XFERPROC MOVE *A8(OFLAGS),A0 ORI M_NOCOLL,A0 MOVE A0,*A8(OFLAGS) MOVK 1,A0 MOVE A0,@OUT_FLG NOPE MMFM SP,A1,A2,A3,A4,A5,A6,A7 RETS AWARP MOVI COMEOUT,A7 MOVE A0,A9 JRUC EX2 EX1 CMPI PLAYER,A1 JRNZ NOPE ;FREE MAN ICON TOUCHED MOVE *A0(OPLINK),A10,L CREATE 0,FLASHME MOVB *A10(PNUM),A10 MOVI P1DATA,A2 CMPI 1,A10 JRZ TAG1 MOVI P2DATA,A2 TAG1 CALLA DO_EXTRA MOVE @FREETOT,A0 INC A0 MOVE A0,@FREETOT JRUC FLYCONT KEYON: ;PLAYER NOW CARRIES KEY ;A0=PLYR ;A8=ICON MMTM SP,A1,A2,A3,A4,A5,A6,A7 MOVE *A0(OPLINK),A10,L CREATE 0,FLASHME MOVB *A10(PNUM),A10 MOVI P1DATA,A2 MOVE A2,@MAPON MOVI KEYPT,A1 CMPI 1,A10 JRZ KEY1 MOVI P2DATA,A2 KEY1 CALLA SCRADD2 MOVI FREESND,A0 ;KEY VOICE CALL CALLA ONESND FLYCONT MOVI CLSDEAD,A0 MOVE A0,*A8(OID) MOVI DMAWNZ|M_NOCOLL,A0 MOVE A0,*A8(OFLAGS) MOVI 300,A0 MOVE A0,*A8(OZPOS) MOVE *A8(OPLINK),A0,L DEC A10 MOVK 1,A11 FLYCONT2 MOVI ICONPID,A1 MOVI INHERE,A7 ;FLOAT TOWARD SCORE BOARD CALLA XFERPROC MOVK 1,A0 MOVE A0,@OUT_FLG MMFM SP,A1,A2,A3,A4,A5,A6,A7 RETS TCSH: ;TOUCH CASH ON FLOOR ;A0=PLYR ;A8=BMB IMG MMTM SP,A1,A2,A3,A4,A5,A6,A7 MOVE *A0(OPLINK),A0,L MOVE *A0(PNUM),A10 DEC A10 MOVI P1DATA,A1 JRZ X0 MOVI P2DATA,A1 X0 MOVE *A1(CASHCNT),A0 INC A0 MOVE A0,*A1(CASHCNT) MOVI SCASH,A0 ;GET CASH PICKUP SND CALLA ONESND MOVI CLSDEAD,A0 MOVE A0,*A8(OID) MOVI DMAWNZ|M_NOCOLL,A0 MOVE A0,*A8(OFLAGS) MOVI 500,A0 ;300 MOVE A0,*A8(OZPOS) ;JEWEL ON GROUND JUMPS IN HERE ;A10=0 OR 1 FOR PLYR # ;A8=ICON IMG ;A11=1 IF FROM KEY FLOATING TO SCORE BOARD CLR A11 CREATE 0,INHERE MMFM SP,A1,A2,A3,A4,A5,A6,A7 RETS BMBON: ;PLAYER PICKED UP EXTRA BOMB ;A0=PLYR ;A8=BMB IMG MMTM SP,A1,A2,A3,A4,A5,A6,A7 MOVE *A0(OPLINK),A0,L MOVB *A0(PNUM),A10 MOVI WOO1,A0 CALLA ONESND CMPI 1,A10 JRNZ P2 MOVE @P1DATA+BMB_CNT,A2 INC A2 MOVE A2,@P1DATA+BMB_CNT FLY MOVI CLSDEAD,A0 MOVE A0,*A8(OID) MOVI DMAWNZ|M_NOCOLL,A0 MOVE A0,*A8(OFLAGS) MOVI 300,A0 MOVE A0,*A8(OZPOS) MOVE *A8(OPLINK),A0,L DEC A10 CLR A11 JRUC FLYCONT2 P2 MOVE @P2DATA+BMB_CNT,A2 INC A2 MOVE A2,@P2DATA+BMB_CNT JRUC FLY FLASHME ;A10=PROC OF PLYR TO FLASH (TORSO STRUCTURE) MOVE *A10(TSO_PTR),A8,L MOVE *A10(LEG_PTR),A11,L ; MOVE *A8(OPAL),A10,W ;GIVE THESE IMAGES OTHER PAL MOVI nup2a,A0 CALLA GETFPAL ;GET A COLOR MAP ASSIGNMENT MOVE A0,*A8(OPAL),W ;STORE THE NEW PALETTE MOVE A0,*A11(OPAL),W ;STORE THE NEW PALETTE SLEEP 8 ;GIVE THESE IMAGES OTHER PAL MOVI nup1,A0 MOVE *A10(PNUM),A1 CMPI 1,A1 JRZ XS MOVI nup2,A0 XS CALLA GETFPAL ;GET A COLOR MAP ASSIGNMENT MOVE A0,*A8(OPAL),W ;STORE THE NEW PALETTE MOVE A0,*A11(OPAL),W DIE SHOEON: ;A8=SHOE ICON ;FAST SHOES ;REDUCE MMTM!!! MMTM SP,A1,A7,A9,A10 MOVE *A0(OPLINK),A10,L PUSH A0 CREATE 0,FLASHME PULL A0 MOVE *A10(LEG_PRC),A9,L MOVE *A8(OIMG),A10,L CMPI SHOES,A10 JRZ BOOTS ;PICKED UP TENNIS SHOES! MOVI 08280H,A1 JRUC SH3 BOOTS MOVE *A9(SHOECNT),A1 JRZ SHOE2 BTST 15,A1 JRZ SH2 ;HAVE TENNIS SHOES ON! TAKE'EM OFF SHOE2 MOVE A0,A10 CREATE 0,FLOAT SH2 MOVI 150H,A1 ;TIME SHOES ARE ON SH3 MOVE A1,*A9(SHOECNT),W CALLR CLNICN MOVI WOO2,A0 CALLA ONESND MMFM SP,A1,A7,A9,A10 RETS FLOAT ;A10=LEG IMG ;A9=LEG PROCESS MOVE *A9(TSO_PTR),A8,L MOVK 15,A11 FLT2 SLEEP 8 MOVE *A9(SHOECNT),A0 JRZ DI BTST 15,A0 JRNZ DI MOVE *A10(OYPOS),A0 XORI 1,A0 MOVE A0,*A10(OYPOS) DSJ A11,FLT2 MOVK 15,A11 MOVE A8,A0 MOVE A10,A8 CALLA GETANIXY MOVE *A8(OFLAGS),A4,W ORI M_NOCOLL,A4 CALLA GANISAG MOVE A0,A8 ;TURN BACK ON TORSO OBJECT JRUC FLT2 DI DIE SMRTON: ;SMART BOMB EVERYTHING ON SCREEN MMTM SP,A1,A7,A10 MOVE *A0(OPLINK),A10,L CREATE 0,FLASHME MOVI 30,A10 CALLA SHAKER CALLR CLNICN CREATE 0,SBSND CREATE 0,SBOMB MMFM SP,A1,A7,A10 RETS SBSND ; MOVI SMRTCYC,A0 ; CLR A1 ; NOT A1 ; CALLA EXISTP ; CALLA KILL MOVI EXP3HIB,A0 CALLA ONESND SLEEP 5 MOVI EXP3HIB,A0 CALLA ONESND SLEEP 5 MOVI EXP3HIB,A0 CALLA ONESND SLEEP 5 MOVI EXP3HIB,A0 CALLA ONESND SLEEP 17 MOVI BINGO,A0 CALLA ONESND DIE SBOMB ;SMART BOMB ;A9=PLYR IMG PTR WHO GOT ME CALLA ZEROCNTS MOVE *A9(OID),A0 MOVI P1DATA,A9 CMPI CLSPLYR|TYPPLYR|SUBPL_1,A0 JREQ BAD0 MOVI P2DATA,A9 ;A9=P1 OR P2DATA FOR SCORING SMART BOMB POINTS BAD0 MOVI CLSENMY|TYPHULK,A0 MOVI 0FFFFH,A1 CALLA EXISTOBJ JRZ BAD1 ;FOUND A HULK MOVE A0,A8 CALLA KILL_H1 ;KILL_HULK JRUC BAD0 BAD1 MOVI CLSENMY|TYPFND,A0 MOVI 0FFFFH,A1 CALLA EXISTOBJ JRZ BAD2 ;FOUND A FIEND MOVE A0,A8 CALLA KILL_F2 ;KILL_FIEND JRUC BAD1 BAD2 MOVI CLSENMY|TYPGOO,A0 MOVI 0FFFFH,A1 CALLA EXISTOBJ JRZ BAD3 ;FOUND A GOOB MOVE A0,A8 MOVE *A8(OPLINK),A0,L CALLA KILL MOVE A8,A0 CALLA DELOBJ JRUC BAD2 BAD3 MOVI CLSENMY|TYPGRW,A0 MOVI 0FFFFH,A1 CALLA EXISTOBJ JRZ BAD4 ;FOUND A HULK GROWING MOVE A0,A8 CALLA KILL_H1 ;KILL_HULK JRUC BAD3 BAD4 MOVI CLSENMY|TYPLAYR,A0 MOVI 0FFFFH,A1 CALLA EXISTOBJ JRZ BAD5 ;FOUND A MINE LAYER MOVE A0,A8 CALLA KILL_LY ;KILL MINE LAYER TOO! JRUC BAD4 BAD5 MOVI CLSPLYR|TYPHLPR|SUBLAY,A0 MOVI 0FFFFH,A1 CALLA EXISTOBJ JRZ BAD6 MOVE *A0(OIMG),A8,L CMPI T72TNK,A8 JRZ BAD6 ;BR=DON'T SMART BOMB T72 TANK! CMPI BTR60,A8 JRZ BAD6 ;BR=DON'T SMART BOMB BTR60! CMPI BTRECK,A8 JRZ BAD6 ;BR=DON'T SMART BOMB BTR60 WRECK! ;FOUND A MINE LAYER WITH CLSPLYR BIT SET FOR A MOMENT! MOVE A0,A8 CALLA KILL_LY ;KILL MINE LAYER TOO! JRUC BAD5 BAD6 MOVI CLSENMY|TYPAHMD,A0 MOVI 0FFFFH,A1 CALLA EXISTOBJ JRZ BAD7 MOVE A0,A8 CALLA KILL_H1 ;KILL HULK AS WELL AS AHMED JRUC BAD6 BAD7 MOVI CLSENMY|TYPLAYR|SUBFLM,A0 MOVI 0FFFFH,A1 CALLA EXISTOBJ JRZ BAD8 ;FOUND A FLAME CALLA DELOBJ JRUC BAD7 BAD8 ; ;INSERT OTHERS HERE ; BADCLN MOVI CLSENMY|TYPSHOT,A0 MOVI 0FFFFH,A1 CALLA EXISTOBJ JRZ BADO ;FOUND A CBALL/SHRAPNEL ;NO SCORE MOVE A0,A8 ;ALSO USED FOR SHRAPNEL FROM FAT MAN MOVE *A8(OPLINK),A0,L JREQ BADCLN CLR A1 MOVE A1,*A8(OPLINK),L CALLA KILL MOVE A8,A0 CALLA DELOBJ JRUC BADCLN BADO ;RESET ALL CNTS! DIE NSTPON: MMTM SP,A1,A7 MOVK SUBNOSTP,A1 ;BULLET SUBTYPE CALLR DO_CNT JRUC ICONIN SPDGON: MMTM SP,A1,A7 MOVK SUBSPDG1,A1 ;BULLET SUBTYPE CALLR DO_CNT JRUC ICONIN GRENON: FIREON: MMTM SP,A1,A7 MOVK SUBFIRE1,A1 ;BULLET SUBTYPE CALLR DO_CNT JRUC ICONIN SPRAYON: MMTM SP,A1,A7 MOVK SUBSPRY,A1 ;BULLET SUBTYPE CALLR DO_CNT ICONIN ;A8=ICON IMAGE ;A0=PLAYER PROCESS WHO GOT ME MOVE A1,*A10(WPN_TYP),W CALLR CLNICN MOVI WOO2,A0 CALLA ONESND CREATE 0,FLASHME MMFM SP,A1,A7 RETS DO_CNT PUSH A1 SLL 4,A1 ADDI TIMERS,A1 MOVE *A1,A1 MOVE *A0(OPLINK),A10,L MOVE A1,*A10(SHOTCNT),W PULL A1 RETS ;STUFF SHOT CNT FOR THIS WEAPON ;SUBLZR .EQU 0001H ;REGULAR LAZER SHOTS ;SUBSPRY .EQU 0002H ;SPRAY SUB TYPE ;SUBFIRE1 .EQU 0003H ;FIRE BALL WPN ;SUBGRND .EQU 0004H ;GRENADE ;SUBNOSTP .EQU 0005H ;NON STOPPING BULLET ;SUBSPDG1 .EQU 0006H ;MACHINE GUN TYP WPN TIMERS: .WORD 0,0,38,43,20,43,100 CLNICN MOVE *A8(OFLAGS),A1 ORI M_NOCOLL,A1 MOVE A1,*A8(OFLAGS) MOVE *A8(OPLINK),A0,L MOVE *A0(PTIME),A9 ;TIME IT STILL HAD LEFT TO SLEEP MOVI CLEANUP,A7 MOVI ICONPID,A1 CALLA XFERPROC MOVK 1,A0 MOVE A0,@OUT_FLG RETS DEL_BULL: ;DEL BULLET OBJ ;NOW DELETE OBJECT FROM OBJLST MOVE *A8(OPLINK),A0,L CALLA KILL MOVE A8,A0 MOVE A8,@OUT_FLG ;TELL SCANNER TO STOP CALLA DELOBJ RETS KILL_BULL: ; KILL BULLET WITH AN EXPLOSION MOVI REGEXP,A7 KBL MOVE *A8(OPLINK),A0,L MOVE A7,@OUT_FLG ;TELL SCANNER TO STOP CALLA XFERPROC MOVE *A8(OFLAGS),A0 ORI M_NOCOLL,A0 MOVE A0,*A8(OFLAGS) RETS KILL_BULL2: ; KILL BULLET WITH AN EXPLOSION MOVI REGEXP2,A7 JRUC KBL REGEXP2: MOVI FIREEXP,A9 ;FRBALL JRUC ONON REGEXP: ;REGULAR EXPLOSION HERE MOVI FRBALL,A9 ;FRBALL MOVI 180,A4 MOVE A4,*A8(OZPOS) ONON: MOVE *A8(OXVEL),A4,L JRNN RG1 NEG A4 SRL 2,A4 NEG A4 JRUC RG2 RG1 SRL 2,A4 RG2 MOVE A4,*A8(OXVEL),L MOVE *A8(OYVEL),A4,L JRNN RG3 NEG A4 SRL 2,A4 NEG A4 JRUC RG4 RG3 SRL 2,A4 RG4 MOVE A4,*A8(OYVEL),L ;EXPLODE BULLET NOW! MOVK 1,A1 ;COMMAND PASSED TO FRANIM JSRP FRANIM ;DELBL ;NOW DELETE OBJECT FROM OBJLST MOVE A8,A0 CALLA DELOBJ DIE FRBALL .LONG FRBAL1 ;BULLET FIRE BALL EXPLOSION .WORD 2 .LONG FRBAL2 .WORD 2 .LONG FRBAL3 .WORD 2 .LONG 0 FRBL .LONG EXPb1 .WORD 5 .LONG EXPb2 .WORD 5 .LONG EXPb3 .WORD 4 .LONG EXPb4 .WORD 4 .LONG EXPb5 .WORD 4 .LONG 0 FIRE_DIRECTION: CLR A6 ;A6 IS A RUNNING CNT WHICH WILL END ;UP BEING A DIRECTION CNT (0-9) ;0 SHOULD NEVER BE RESULT! MOVE *A13(STICK),A5,L ;JOYSTICK 2 CONTROL READ MOVE *A5,A5,W ;GET ACTUAL VALUE OF STICK BTST BMPFUP,A5 JRZ NXT1 ADDK 1,A6 NXT1: BTST BMPFDOWN,A5 JRZ NXT2 ADDK 2,A6 NXT2: BTST BMPFLEFT,A5 JRZ NXT3 ADDK 7,A6 NXT3: BTST BMPFRYTE,A5 JRZ ALL_DIR ADDK 4,A6 ALL_DIR: CMPI 9,A6 JRLS RETSOUT MOVK 9,A6 RETSOUT MOVE A6,@B_DIR RETS BULYV: .LONG -BLTYVEL,-BLTYVEL,0,BLTYVEL,BLTYVEL,BLTYVEL,0,-BLTYVEL BULXV: .LONG 0,BLTXVEL,BLTXVEL,BLTXVEL,0,-BLTXVEL,-BLTXVEL,-BLTXVEL BUL3AYV: .LONG -BL3YVEL,-BL3YVEL,0,BL3YVEL,BL3YVEL,BL3YVEL,0,-BL3YVEL BUL3AXV: .LONG 0,BL3XVEL,BL3XVEL,BL3XVEL,0,-BL3XVEL,-BL3XVEL,-BL3XVEL BUL5YV: .LONG -BLT5YVEL,-BLT5YVEL,0,BLT5YVEL,BLT5YVEL,BLT5YVEL,0,-BLT5YVEL BUL5XV: .LONG 0,BLT5XVEL,BLT5XVEL,BLT5XVEL,0,-BLT5XVEL,-BLT5XVEL,-BLT5XVEL GRNYV: .LONG -GRNYVEL,-GRNYVEL,0,GRNYVEL,GRNYVEL,GRNYVEL,0,-GRNYVEL GRNXV: .LONG 0,GRNXVEL,GRNXVEL,GRNXVEL,0,-GRNXVEL,-GRNXVEL,-GRNXVEL GRNYV2: .LONG -GRNYVEL2,-GRNYVEL2,0,GRNYVEL2,GRNYVEL2,GRNYVEL2,0,-GRNYVEL2 GRNXV2: .LONG 0,GRNXVEL2,GRNXVEL2,GRNXVEL2,0,-GRNXVEL2,-GRNXVEL2,-GRNXVEL2 BUL2YV: .LONG -BLTYVEL,-BLTYVEL,-(BLTYVEL/2),BLTYVEL/2,BLTYVEL .LONG BLTYVEL,BLTYVEL/2,-BLTYVEL BUL2XV: .LONG -(BLTXVEL/2),BLTXVEL/2,BLTXVEL,BLTXVEL,BLTXVEL/2 .LONG -(BLTXVEL/2),-BLTXVEL,-(BLTXVEL/2) BUL3YV: .LONG -BLTYVEL,-(BLTYVEL/2),BLTYVEL/2,BLTYVEL,BLTYVEL .LONG BLTYVEL/2,-(BLTYVEL/2),-(BLTYVEL/2) BUL3XV: .LONG BLTXVEL/2,BLTXVEL,BLTXVEL,BLTXVEL/2,-(BLTXVEL/2) .LONG -BLTXVEL,-BLTXVEL,-BLTXVEL BXL: .LONG -010000H,008000H,0018000H,08000H,-010000H,-28000H,-30000H,-28000H BXH: .LONG 0010000H,028000H,030000H,28000H,010000H,-08000H,-018000H,-08000H BYL: .LONG -028000H,-28000H,-010000H,08000H,018000H,008000H,-010000H,-28000H BYH: .LONG -018000H,-08000H,0010000H,28000H,28000H,028000H,0010000H,-08000H WHICHYV: .LONG BULYV,BUL2YV,BUL3YV WHICHXV: .LONG BULXV,BUL2XV,BUL3XV ;SUBLZR .EQU 0001H ;REGULAR LAZER SHOTS ;SUBSPRY .EQU 0002H ;SPRAY SUB TYPE ;SUBFIRE1 .EQU 0003H ;FIRE BALL WPN ;SUBGRND .EQU 0004H ;GRENADE ;SUBNOSTP .EQU 0005H ;NON STOPPING BULLET ;SUBSPDG1 .EQU 0006H ;MACHINE GUN TYP WPN WPLIST ;SUB BULLET TYPES .LONG NORM,NORM,SPRY,FIREB,GREND,NSTP,MGUN STRT_WPN: ;FROM TORSO PROCESS MOVE *A13(PNUM),A11 ;PLAYER WHO FIRED ME PASSED IN A11 MOVE *A13(WPN_TYP),A1,W JRZ CONTA ;ANY WEAPON BUT STANDARD WILL DEC SHOTCNT MOVE *A13(SHOTCNT),A0 DEC A0 MOVE A0,*A13(SHOTCNT) JRNZ CONTA MOVE A0,*A13(WPN_TYP) CONTA SLL 5,A1 ADDI WPLIST,A1 MOVE *A1,A0,L JUMP A0 ***************************************************************************** NORM: ;WEAPON 1 - NORMAL FIRE POWER CREATE BULPID,WPN1 ;BULPID ; MOVE *A13(LSRPTR),A0,L ;HELPER ON FLAG 1=YES ; JRZ NOLASER ; CREATE BULPID,WPN1A ;NOLASER: MOVI SHOT,A0 ;RIFLE SHOT CALLA ONESND RETS NSTP: CREATE BULPID,WPN5 MOVI MISS,A0 CALLA ONESND RETS MGUN: ;MACHINE GUN CREATE BULPID,WPN4 MOVI MISS2,A0 CALLA ONESND RETS FIREB: ;FIRE BALL WEAPON CREATE BULPID,WPN3 MOVI SHOT,A0 ;RIFLE SHOT CALLA ONESND RETS GREND: SPRY: ;SPRAY WEAPON ;WEAPON 2 CLR A10 CREATE BULPID,WPN2 MOVK 1,A10 CREATE BULPID,WPN2 MOVK 2,A10 CREATE BULPID,WPN2 MOVI RIFL,A0 ;SPRY CALLA ONESND RETS CONVERT: .WORD 1,5,6,3,2,4,7,8,6 GET_CNVRT: ;TAKE OUT AND MAKE MORE EFFICIENT! MOVB A11,*A13(MYPLYR) ;A11=PLAYER 1 OR 2 WHO FIRED ME MOVE @B_DIR,A3,W ;MOVE BULLET DIRECTION INTO A3 DEC A3 SLL 4,A3 ADDI CONVERT,A3 MOVE *A3,A0,W MOVE A0,*A13(BLTDIR),W ;CONVERTED TO NORMAL! DEC A0 SLL 5,A0 RETS WPN5: ;WEAPON 5 - NON STOPPING BULLET ;MAKE MORE EFFICIENT! ;NOW STUFF CORRECT BULLET AND CORRECT FLIP INFO CALLR GET_CNVRT MOVI BUL5XV,A3 ADD A0,A3 MOVE *A3,A6,L MOVI BUL5YV,A3 ADD A0,A3 MOVE *A3,A7,L ;YV ;ADD IN PLAYER VELOCITIES MOVE *A8(OXVEL),A2,L ADD A2,A6 MOVE *A8(OYVEL),A2,L ADD A2,A7 ; GET IMG INFO BASED ON B_DIR MOVE @B_DIR,A3,W ;MOVE BULLET DIRECTION INTO A3 SLL 5,A3 ;BDIR*32 FOR LONG WORD LOOKUP TABLE ADDI B5_TYP,A3 MOVE *A3,A2,L ;MOVE TABLE VALUE INTO A4 ;IMG IN A2 MOVE @B_DIR,A3,W ;MOVE BULLET DIRECTION INTO A3 SLL 4,A3 ;(BDIR*32)/2 FOR WORD LOOKUP TABLE ADDI B1_INFO,A3 ;CALCULATE OFFSET IN TABLE MOVE *A3,A4,W ;MOVE TABLE VALUE INTO A4 ;FLAGS IN A4 ;THESE BULLETS ARE PIXEL SCANNED! CHECK FLAGS TABLE ;FLAGS IN A4 ;A8=TORSO PTR FOR PLAYER THAT FIRED ME MOVE *A8(OXVAL),A0,L MOVE *A8(OYVAL),A1,L MOVI X_OFFSET,A8 MOVE @B_DIR,A3,W ;MOVE BULLET DIRECTION INTO A3 SLL 5,A3 ;BDIR*32 FOR LONG WORD LOOKUP TABLE ADD A3,A8 MOVE *A8,A8,L ADD A8,A0 ;XVAL IN A0 MOVI Y_OFFSET,A8 ADD A3,A8 MOVE *A8,A8,L ADD A8,A1 ;YVAL IN A1 MOVI CLSPLYR|TYPPLBL|SUBNOSTP,A5 JRUC DO_IT WPN2: ;WEAPON 2 - 3 BULLETS SPRAYED OUT ;MAKE MORE EFFICIENT! ;NOW STUFF CORRECT BULLET AND CORRECT FLIP INFO CALLR GET_CNVRT ;GET VELS FOR THIS PROJECTILE SLL 5,A10 MOVI WHICHXV,A1 ADD A10,A1 MOVE *A1,A3,L ADD A0,A3 MOVE *A3,A6,L ;XVEL MOVI WHICHYV,A1 ADD A10,A1 MOVE *A1,A3,L ADD A0,A3 MOVE *A3,A7,L ;YV MOVI CNNBLL,A2 MOVI DMAWNZ,A4 ; MOVI DMAWNZ+M_PIXSCAN,A4 ;TAKE OUT PIXSCAN? ; ;THESE BULLETS ARE PIXEL SCANNED! CHECK FLAGS TABLE MOVE *A8(OXVAL),A0,L MOVE *A8(OYVAL),A1,L MOVI X_OFFSET,A8 MOVE @B_DIR,A3,W ;MOVE BULLET DIRECTION INTO A3 SLL 5,A3 ;BDIR*32 FOR LONG WORD LOOKUP TABLE ADD A3,A8 MOVE *A8,A8,L ADD A8,A0 ;XVAL IN A0 MOVI Y_OFFSET,A8 ADD A3,A8 MOVE *A8,A8,L ADD A8,A1 ;YVAL IN A1 MOVI CLSPLYR|TYPPLBL|SUBSPRY,A5 JRUC DO_IT WPN3 ;FIRE BALL CALLR GET_CNVRT MOVI BUL3AXV,A3 ADD A0,A3 MOVE *A3,A6,L MOVI BUL3AYV,A3 ADD A0,A3 MOVE *A3,A7,L ;YV ; GET IMG INFO BASED ON B_DIR ; MOVE @B_DIR,A3,W ;MOVE BULLET DIRECTION INTO A3 ; SLL 5,A3 ;BDIR*32 FOR LONG WORD LOOKUP TABLE ; ADDI B3_TYP,A3 ; MOVE *A3,A2,L ;MOVE TABLE VALUE INTO A4 MOVI FIRE1,A2 ;IMG IN A2 MOVI DMAWNZ,A4 ;NO PIXSCAN ;FLAGS IN A4 MOVE *A8(OXVAL),A0,L MOVE *A8(OYVAL),A1,L MOVI X_OFFSET,A8 MOVE @B_DIR,A3,W ;MOVE BULLET DIRECTION INTO A3 SLL 5,A3 ;BDIR*32 FOR LONG WORD LOOKUP TABLE ADD A3,A8 MOVE *A8,A8,L ADD A8,A0 ;XVAL IN A0 MOVI Y_OFFSET,A8 ADD A3,A8 MOVE *A8,A8,L ADD A8,A1 ;YVAL IN A1 MOVI CLSPLYR|TYPPLBL|SUBNOSTP,A5 ;ID IN A5 MOVI 158,A3 ;ZPOS IN A3 ;XVEL IN A6 ;YVEL IN A7 CALLA BEGINOBJ2 MOVI FRBL,A9 W3_TP: ;CHECK RECTANGLES CALLR CHK_BULL JRNC NOH ;HIT CLR A0 MOVE A0,*A8(OXVEL),L MOVE A0,*A8(OYVEL),L MOVK 1,A1 JSRP FRANIM C32X MOVE A8,A0 CALLA DELOBJ DIE NOH CLR A1 JSRP FRANIM JRC C32X JRUC W3_TP WPN4: ;WEAPON 4 - MACHINE GUN CALLR GET_CNVRT MOVI BULXV,A3 ADD A0,A3 MOVE *A3,A6,L MOVI BULYV,A3 ADD A0,A3 MOVE *A3,A7,L ;YV MOVE *A8(OXVEL),A2,L ADD A2,A6 MOVE *A8(OYVEL),A2,L ADD A2,A7 MOVI SPDBL,A2 ;IMG IN A2 MOVI DMAWNZ+M_PIXSCAN,A4 ;FLAGS IN A4 MOVE *A8(OXVAL),A0,L MOVE *A8(OYVAL),A1,L MOVI X_OFFSET,A8 MOVE @B_DIR,A3,W ;MOVE BULLET DIRECTION INTO A3 SLL 5,A3 ;BDIR*32 FOR LONG WORD LOOKUP TABLE ADD A3,A8 MOVE *A8,A8,L ADD A8,A0 ;XVAL IN A0 MOVI Y_OFFSET,A8 ADD A3,A8 MOVE *A8,A8,L ADD A8,A1 ;YVAL IN A1 MOVI CLSPLYR|TYPPLBL|SUBSPDG1,A5 JRUC DO_IT WPN1: ;WEAPON 1 - NORMAL BULLET ;MAKE MORE EFFICIENT! ;NOW STUFF CORRECT BULLET AND CORRECT FLIP INFO CALLR GET_CNVRT MOVI BULXV,A3 ADD A0,A3 MOVE *A3,A6,L MOVI BULYV,A3 ADD A0,A3 MOVE *A3,A7,L ;YV ; GET IMG INFO BASED ON B_DIR MOVE @B_DIR,A3,W ;MOVE BULLET DIRECTION INTO A3 SLL 5,A3 ;BDIR*32 FOR LONG WORD LOOKUP TABLE ADDI B1_TYP,A3 MOVE *A3,A2,L ;MOVE TABLE VALUE INTO A4 ;IMG IN A2 MOVE @B_DIR,A3,W ;MOVE BULLET DIRECTION INTO A3 SLL 4,A3 ;(BDIR*32)/2 FOR WORD LOOKUP TABLE ADDI B1_INFO,A3 ;CALCULATE OFFSET IN TABLE MOVE *A3,A4,W ;MOVE TABLE VALUE INTO A4 ;FLAGS IN A4 MOVE *A8(OXVAL),A0,L MOVE *A8(OYVAL),A1,L MOVI X_OFFSET,A8 MOVE @B_DIR,A3,W ;MOVE BULLET DIRECTION INTO A3 SLL 5,A3 ;BDIR*32 FOR LONG WORD LOOKUP TABLE ADD A3,A8 MOVE *A8,A8,L ADD A8,A0 ;XVAL IN A0 MOVI Y_OFFSET,A8 ADD A3,A8 MOVE *A8,A8,L ADD A8,A1 ;YVAL IN A1 MOVI CLSPLYR|TYPPLBL|SUBLZR,A5 DO_IT: ;ID IN A5 MOVI 158,A3 ;ZPOS IN A3 ;XVEL IN A6 ;YVEL IN A7 CALLA BEGINOBJ2 LP_TP: ;REGULAR BULLETS ;COULD DO THIS SCRTST LESS FREQUENTLY! MOVE *A13(AGE),A0 INC A0 MOVE A0,*A13(AGE) ANDI 03,A0 JRNZ C1 MOVI [>0,>0],A2 ;21,20 MOVI [>FF,>1A3],A3 ;FC,173 CALLA SCRTSTG JRZ C1 ; ;A0=1,2,3 OR 4 WHICH IS RETURNED FROM SCRTSTG! ; MOVE A8,A0 CALLA DELOBJ DIE C1: CALLR CHK_BULL JRNC NXT CLR A4 MOVE A4,*A8(OXVEL),L MOVI FRBALL,A9 ;FRBALL JRUC RG4 NXT SLEEP 4 ;SLEEP 2 MAYBE? JRUC LP_TP CHK_BULL ;CHECK FOR RECTANGLE COLLISIONS! MOVE *A8(OXVAL),A4,L MOVE *A8(OYVAL),A6,L SRL 16,A4 ;X SRL 16,A6 ;Y MOVE @BCURRENT,A0,L ;CURRENT RECT LIST NEXT0 MOVE *A0+,A1,W JRZ OUT CMP A1,A4 JRLT NEXT ;IF BRNCH RECT LFT EDGE > PLYR X MOVE *A0+,A1,W CMP A1,A6 JRLT NEXTA ;IF BRNCH RECT TOP EDGE > PLYR Y MOVE *A0+,A1,W CMP A1,A4 JRGT NEXTB ;IF BRNCH RECT RGT EDGE < PLYR X MOVE *A0+,A1,W CMP A1,A6 JRGT NEXT0 ;IF BRNCH RECT BOT EDGE < PLYR Y ;HIT SETC RETS NEXT ADDI 48,A0 JRUC NEXT0 NEXTA ADDK 32,A0 JRUC NEXT0 NEXTB ADDK 16,A0 JRUC NEXT0 OUT CLRC RETS B1_TYP: ;NORMAL WEAPON (1) .LONG 0,BULUP,BULUP,0,BULLFT,BULUPLFT .LONG BULUPLFT,BULLFT,BULUPLFT,BULUPLFT B5_TYP: ;NON STOPPING BULLET .LONG 0,B2UP,B2UP,0,B2SIDE,B245 .LONG B245,B2SIDE,B245,B245 B1_INFO: ;NORMAL WEAPON (1) ;THESE FLAGS INDICATE PIXEL SCAN IS ON! .WORD 0,DMAWNZ+M_PIXSCAN,DMAWNZ+M_FLIPV+M_PIXSCAN,0 .WORD DMAWNZ+M_FLIPH+M_PIXSCAN,DMAWNZ+M_FLIPH+M_PIXSCAN .WORD DMAWNZ+M_FLIPH+M_FLIPV+M_PIXSCAN,DMAWNZ+M_PIXSCAN .WORD DMAWNZ+M_PIXSCAN,DMAWNZ+M_FLIPV+M_PIXSCAN ; .WORD 0,DMAWNZ,DMAWNZ+M_FLIPV,0 ; .WORD DMAWNZ+M_FLIPH,DMAWNZ+M_FLIPH ; .WORD DMAWNZ+M_FLIPH+M_FLIPV,DMAWNZ ; .WORD DMAWNZ,DMAWNZ+M_FLIPV X_OFFSET: ;NORMAL WEAPON (1) .LONG 0,0F0000H,050000H,0,0190000H,0100000H,0170000H,010000H .LONG 040000H,030000H Y_OFFSET: ;NORMAL WEAPON .LONG 0,000000H,0190000H,0,0A0000H,050000H,0160000H,0A0000H .LONG 050000H,0160000H ;X2_OFFSET: ;SPRAY WEAPON (2) ; .LONG 0,0D0000H,030000H,0,0120000H,0E0000H,0100000H,050000H ; .LONG 060000H,060000H ;Y2_OFFSET: ;SPRAY ; .LONG 0,050000H,0F0000H,0,050000H,0050000H,0B0000H,050000H ; .LONG 060000H,0B0000H ;X3_OFFSET: ;POD WEAPON (3) ; .LONG 0,040000H,030000H,0,01C0000H,0E0000H,0160000H,-020000H ; .LONG 020000H,000000H ;Y3_OFFSET: ; ; .LONG 0,020000H,0110000H,0,060000H,010000H,0E0000H,060000H ; .LONG 020000H,0E0000H ;X4_OFFSET: ;GRENADE WEAPON (4) ; .LONG 0,0C0000H,030000H,0,0110000H,0C0000H,0190000H,020000H ; .LONG 0A0000H,020000H ;Y4_OFFSET: ; .LONG 0,020000H,0E0000H,0,040000H,030000H,040000H,030000H ; .LONG 090000H,040000H ;X5_OFFSET: ;NON STOPPING BULLET (5) ; .LONG 0,0E0000H,10000H,0,170000H,0A0000H,0130000H,0000H ; .LONG 070000H,040000H ;Y5_OFFSET: ; .LONG 0,0000H,0A0000H,0,020000H,20000H,090000H,020000H ; .LONG 10000H,090000H ; 1 ; 8 5 ;7 4 ; 9 6 ; 2 ;BULL_EXP_LIST: ; .LONG EXPL,EXPR,EXPT,EXPD ;EXPL .LONG BULLDINGSIDE ;BULLET COLLIDE WITH LEFT WALL ; .WORD FLIPBITS|3,0 ; .LONG BULLDINGSIDE2 ; .WORD 3 ; .LONG BULLDINGSIDE ; .WORD 3 ; .LONG 0 ;EXPR .LONG BULLDINGSIDE ;BULLET COLLIDE WITH LEFT WALL ; .WORD FLIPBITS|3,(M_FLIPH) ; .LONG BULLDINGSIDE2 ; .WORD 3 ; .LONG BULLDINGSIDE ; .WORD 3 ; .LONG 0 ;EXPT .LONG BULLDINGUP ; .WORD FLIPBITS|3,0 ; .LONG BULLDINGUP2 ; .WORD 3 ; .LONG BULLDINGUP ; .WORD 3 ; .LONG 0 ;EXPD .LONG BULLDINGUP ;BULLET COLLIDE WITH BOTTOM WALL ; .WORD FLIPBITS|3,(M_FLIPV) ; .LONG BULLDINGUP2 ; .WORD 3 ; .LONG BULLDINGUP ; .WORD 3 ; .LONG 0 ;SMLEXP ; .LONG EXPb1 ; .WORD NEWPALET|3 ; .LONG BULLET ;NEW PAL NAME ; .LONG EXPb2 ; .WORD 3 ; .LONG EXPb1 ; .WORD 3 ; .LONG 0 ;TOSSDIR .LONG 0,TSUP,TSDN,0,TSRT,TSUPRT,TSDNRT,TSLT,TSUPLT,TSDNLT ;TOSS2DIR: ; .LONG 0,TSUP2,TSDN2,0,TSRT2,TSUPRT2,TSDNRT2,TSLT2,TSUPLT2,TSDNLT2 ;TOSSG: .LONG GRND1,GRND2,GRND3,GRND4,GRND8,GRND9,GRND10,GRND11 ; .LONG GRND12,GRND13,GRND9,GRND10,GRND11,GRND12,GRND13,GRND9 ; .LONG GRND8,GRND4,GRND3,GRND2,GRND1,GRND1,0 TSRT: .BYTE 3 ;X .BYTE -2 ;Y ADJUST .BYTE 4 .BYTE -2 ;Y ADJUST .BYTE 4 .BYTE -2 ;Y ADJUST .BYTE 5 .BYTE -3 ;Y ADJUST .BYTE 5 .BYTE -3 ;Y ADJUST .BYTE 6 .BYTE -3 ;Y ADJUST .BYTE 6 .BYTE -2 ;Y ADJUST .BYTE 6 .BYTE -2 ;Y ADJUST .BYTE 6 .BYTE 0 ;Y ADJUST .BYTE 6 .BYTE 0 ;Y ADJUST .BYTE 6 .BYTE 0 ;Y ADJUST .BYTE 6 .BYTE 2 ;Y ADJUST .BYTE 6 .BYTE 2 ;Y ADJUST .BYTE 6 .BYTE 3 ;Y ADJUST .BYTE 6 .BYTE 3 ;Y ADJUST .BYTE 6 .BYTE 4 ;Y ADJUST .BYTE 6 .BYTE 5 ;Y ADJUST .BYTE 5 .BYTE 5 ;Y ADJUST .BYTE 4 .BYTE 5 ;Y ADJUST .BYTE 4 .BYTE 4 ;Y ADJUST .BYTE 4 .BYTE 4 ;Y ADJUST .BYTE 3 .BYTE 4 ;Y ADJUST .BYTE 2 .BYTE 3 ;Y ADJUST .BYTE 2 .BYTE 3 ;Y ADJUST TSLT: .BYTE -3 ;X .BYTE -2 ;Y ADJUST .BYTE -4 .BYTE -2 ;Y ADJUST .BYTE -4 .BYTE -2 ;Y ADJUST .BYTE -5 .BYTE -3 ;Y ADJUST .BYTE -5 .BYTE -3 ;Y ADJUST .BYTE -6 .BYTE -3 ;Y ADJUST .BYTE -6 .BYTE -2 ;Y ADJUST .BYTE -6 .BYTE -2 ;Y ADJUST .BYTE -6 .BYTE 0 ;Y ADJUST .BYTE -6 .BYTE 0 ;Y ADJUST .BYTE -6 .BYTE 0 ;Y ADJUST .BYTE -6 .BYTE 2 ;Y ADJUST .BYTE -6 .BYTE 2 ;Y ADJUST .BYTE -6 .BYTE 3 ;Y ADJUST .BYTE -6 .BYTE 3 ;Y ADJUST .BYTE -6 .BYTE 4 ;Y ADJUST .BYTE -6 .BYTE 5 ;Y ADJUST .BYTE -5 .BYTE 5 ;Y ADJUST .BYTE -4 .BYTE 5 ;Y ADJUST .BYTE -4 .BYTE 5 ;Y ADJUST .BYTE -4 .BYTE 4 ;Y ADJUST .BYTE -3 .BYTE 4 ;Y ADJUST .BYTE -2 .BYTE 3 ;Y ADJUST .BYTE -2 .BYTE 3 ;Y ADJUST TSUPLT: .BYTE 0 .BYTE -5 ;Y ADJUST .BYTE -1 .BYTE -6 ;Y ADJUST .BYTE -2 .BYTE -6 ;Y ADJUST .BYTE -2 .BYTE -6 ;Y ADJUST .BYTE -3 .BYTE -6 ;Y ADJUST .BYTE -3 .BYTE -6 ;Y ADJUST .BYTE -4 .BYTE -6 ;Y ADJUST .BYTE -4 .BYTE -6 ;Y ADJUST .BYTE -4 .BYTE -5 ;Y ADJUST .BYTE -5 .BYTE -5 ;Y ADJUST .BYTE -5 .BYTE -4 ;Y ADJUST .BYTE -6 .BYTE -3 ;Y ADJUST .BYTE -6 .BYTE -3 ;Y ADJUST .BYTE -6 .BYTE -2 ;Y ADJUST .BYTE -6 .BYTE -2 ;Y ADJUST .BYTE -5 .BYTE -2 ;Y ADJUST .BYTE -5 .BYTE -1 ;Y ADJUST .BYTE -4 .BYTE -1 ;Y ADJUST .BYTE -4 .BYTE 0 ;Y ADJUST .BYTE -4 .BYTE 0 ;Y ADJUST .BYTE -3 .BYTE 0 ;Y ADJUST .BYTE -3 .BYTE 0 ;Y ADJUST TSUPRT: .BYTE 0 .BYTE -5 ;Y ADJUST .BYTE 1 .BYTE -6 ;Y ADJUST .BYTE 2 .BYTE -6 ;Y ADJUST .BYTE 2 .BYTE -6 ;Y ADJUST .BYTE 3 .BYTE -6 ;Y ADJUST .BYTE 3 .BYTE -6 ;Y ADJUST .BYTE 4 .BYTE -6 ;Y ADJUST .BYTE 4 .BYTE -6 ;Y ADJUST .BYTE 4 .BYTE -5 ;Y ADJUST .BYTE 5 .BYTE -5 ;Y ADJUST .BYTE 5 .BYTE -4 ;Y ADJUST .BYTE 6 .BYTE -3 ;Y ADJUST .BYTE 6 .BYTE -3 ;Y ADJUST .BYTE 6 .BYTE -2 ;Y ADJUST .BYTE 6 .BYTE -2 ;Y ADJUST .BYTE 5 .BYTE -2 ;Y ADJUST .BYTE 5 .BYTE -1 ;Y ADJUST .BYTE 4 .BYTE -1 ;Y ADJUST .BYTE 4 .BYTE 0 ;Y ADJUST .BYTE 4 .BYTE 0 ;Y ADJUST .BYTE 3 .BYTE 0 ;Y ADJUST .BYTE 3 .BYTE 0 ;Y ADJUST TSDNLT: .BYTE -1 .BYTE 0 ;Y ADJUST .BYTE -2 .BYTE 0 ;Y ADJUST .BYTE -3 .BYTE 1 ;Y ADJUST .BYTE -4 .BYTE 1 ;Y ADJUST .BYTE -5 .BYTE 2 ;Y ADJUST .BYTE -5 .BYTE 2 ;Y ADJUST .BYTE -6 .BYTE 2 ;Y ADJUST .BYTE -6 .BYTE 3 ;Y ADJUST .BYTE -6 .BYTE 3 ;Y ADJUST .BYTE -6 .BYTE 4 ;Y ADJUST .BYTE -5 .BYTE 4 ;Y ADJUST .BYTE -5 .BYTE 5 ;Y ADJUST .BYTE -4 .BYTE 5 ;Y ADJUST .BYTE -3 .BYTE 6 ;Y ADJUST .BYTE -3 .BYTE 6 ;Y ADJUST .BYTE -2 .BYTE 6 ;Y ADJUST .BYTE -2 .BYTE 6 ;Y ADJUST .BYTE -1 .BYTE 6 ;Y ADJUST .BYTE -1 .BYTE 6 ;Y ADJUST .BYTE -1 .BYTE 6 ;Y ADJUST .BYTE 0 .BYTE 5 ;Y ADJUST .BYTE 0 .BYTE 5 ;Y ADJUST TSDNRT: .BYTE 1 .BYTE 0 ;Y ADJUST .BYTE 2 .BYTE 0 ;Y ADJUST .BYTE 3 .BYTE 1 ;Y ADJUST .BYTE 4 .BYTE 1 ;Y ADJUST .BYTE 5 .BYTE 2 ;Y ADJUST .BYTE 5 .BYTE 2 ;Y ADJUST .BYTE 6 .BYTE 2 ;Y ADJUST .BYTE 6 .BYTE 3 ;Y ADJUST .BYTE 6 .BYTE 3 ;Y ADJUST .BYTE 6 .BYTE 4 ;Y ADJUST .BYTE 5 .BYTE 4 ;Y ADJUST .BYTE 5 .BYTE 5 ;Y ADJUST .BYTE 4 .BYTE 5 ;Y ADJUST .BYTE 3 .BYTE 6 ;Y ADJUST .BYTE 3 .BYTE 6 ;Y ADJUST .BYTE 2 .BYTE 6 ;Y ADJUST .BYTE 2 .BYTE 6 ;Y ADJUST .BYTE 1 .BYTE 6 ;Y ADJUST .BYTE 1 .BYTE 6 ;Y ADJUST .BYTE 1 .BYTE 6 ;Y ADJUST .BYTE 0 .BYTE 5 ;Y ADJUST .BYTE 0 .BYTE 5 ;Y ADJUST TSUP: .BYTE 0 ;X ADJUST .BYTE -4 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -5 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -5 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -5 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -5 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -5 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -6 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -6 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -6 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -6 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -6 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -6 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -6 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -5 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -5 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -4 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -3 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -2 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -1 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 0 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 0 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 0 ;Y ADJUST TSDN: .BYTE 0 ;X ADJUST .BYTE 0 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 1 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 2 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 3 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 4 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 5 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 5 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 5 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 5 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 6 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 6 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 6 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 6 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 6 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 5 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 5 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 5 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 5 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 5 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 4 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 4 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 4 ;Y ADJUST TSRT2: .BYTE 3 ;X .BYTE 0 ;Y ADJUST .BYTE 4 .BYTE 0 ;Y ADJUST .BYTE 4 .BYTE 0 ;Y ADJUST .BYTE 5 .BYTE 0 ;Y ADJUST .BYTE 5 .BYTE 0 ;Y ADJUST .BYTE 6 .BYTE 0 ;Y ADJUST .BYTE 6 .BYTE 0 ;Y ADJUST .BYTE 6 .BYTE 0 ;Y ADJUST .BYTE 6 .BYTE 0 ;Y ADJUST .BYTE 6 .BYTE 0 ;Y ADJUST .BYTE 6 .BYTE 0 ;Y ADJUST .BYTE 6 .BYTE 0 ;Y ADJUST .BYTE 6 .BYTE 0 ;Y ADJUST .BYTE 6 .BYTE 0 ;Y ADJUST .BYTE 6 .BYTE 0 ;Y ADJUST .BYTE 6 .BYTE 0 ;Y ADJUST .BYTE 6 .BYTE 0 ;Y ADJUST .BYTE 5 .BYTE 0 ;Y ADJUST .BYTE 4 .BYTE 0 ;Y ADJUST .BYTE 4 .BYTE 0 ;Y ADJUST .BYTE 4 .BYTE 0 ;Y ADJUST .BYTE 3 .BYTE 0 ;Y ADJUST .BYTE 2 .BYTE 0 ;Y ADJUST .BYTE 2 .BYTE 0 ;Y ADJUST TSLT2: .BYTE -3 ;X .BYTE 0 ;Y ADJUST .BYTE -4 .BYTE 0 ;Y ADJUST .BYTE -4 .BYTE 0 ;Y ADJUST .BYTE -5 .BYTE 0 ;Y ADJUST .BYTE -5 .BYTE 0 ;Y ADJUST .BYTE -6 .BYTE 0 ;Y ADJUST .BYTE -6 .BYTE 0 ;Y ADJUST .BYTE -6 .BYTE 0 ;Y ADJUST .BYTE -6 .BYTE 0 ;Y ADJUST .BYTE -6 .BYTE 0 ;Y ADJUST .BYTE -6 .BYTE 0 ;Y ADJUST .BYTE -6 .BYTE 0 ;Y ADJUST .BYTE -6 .BYTE 0 ;Y ADJUST .BYTE -6 .BYTE 0 ;Y ADJUST .BYTE -6 .BYTE 0 ;Y ADJUST .BYTE -6 .BYTE 0 ;Y ADJUST .BYTE -6 .BYTE 0 ;Y ADJUST .BYTE -5 .BYTE 0 ;Y ADJUST .BYTE -4 .BYTE 0 ;Y ADJUST .BYTE -4 .BYTE 0 ;Y ADJUST .BYTE -4 .BYTE 0 ;Y ADJUST .BYTE -3 .BYTE 0 ;Y ADJUST .BYTE -2 .BYTE 0 ;Y ADJUST .BYTE -2 .BYTE 0 ;Y ADJUST TSUPLT2: .BYTE -5+5 .BYTE -1-10 ;Y ADJUST .BYTE -3 .BYTE -3 ;Y ADJUST .BYTE -4-5 .BYTE -4+10 ;Y ADJUST .BYTE -4 .BYTE -5 ;Y ADJUST .BYTE -4 .BYTE -5 ;Y ADJUST .BYTE -4 .BYTE -4 ;Y ADJUST 35 .BYTE -4 .BYTE -5 ;Y ADJUST .BYTE -4 .BYTE -5 ;Y ADJUST .BYTE -4 .BYTE -4 ;Y ADJUST .BYTE -4 .BYTE -5 ;Y ADJUST ;22 .BYTE -4 .BYTE -5 ;Y ADJUST .BYTE -4 .BYTE -4 ;Y ADJUST .BYTE -4 .BYTE -5 ;Y ADJUST .BYTE -4 .BYTE -5 ;Y ADJUST .BYTE -4 .BYTE -4 ;Y ADJUST .BYTE -4 .BYTE -5 ;Y ADJUST .BYTE -4 .BYTE -5 ;Y ADJUST .BYTE -4 .BYTE -4 ;Y ADJUST .BYTE -4 .BYTE -5 ;Y ADJUST .BYTE -4 .BYTE -4 ;Y ADJUST .BYTE -4 .BYTE -5 ;Y ADJUST .BYTE -2 ;78 .BYTE -4 ;Y ADJUST ;22 = 79 TSUPRT2: .BYTE 5+5 .BYTE -1-10 ;Y ADJUST .BYTE 3 .BYTE -3 ;Y ADJUST .BYTE 4-5 .BYTE -4+10 ;Y ADJUST .BYTE 4 .BYTE -5 ;Y ADJUST .BYTE 4 .BYTE -5 ;Y ADJUST .BYTE 4 .BYTE -4 ;Y ADJUST 35 .BYTE 4 .BYTE -5 ;Y ADJUST .BYTE 4 .BYTE -5 ;Y ADJUST .BYTE 4 .BYTE -4 ;Y ADJUST .BYTE 4 .BYTE -5 ;Y ADJUST ;22 .BYTE 4 .BYTE -5 ;Y ADJUST .BYTE 4 .BYTE -4 ;Y ADJUST .BYTE 4 .BYTE -5 ;Y ADJUST .BYTE 4 .BYTE -5 ;Y ADJUST .BYTE 4 .BYTE -4 ;Y ADJUST .BYTE 4 .BYTE -5 ;Y ADJUST .BYTE 4 .BYTE -5 ;Y ADJUST .BYTE 4 .BYTE -4 ;Y ADJUST .BYTE 4 .BYTE -5 ;Y ADJUST .BYTE 4 .BYTE -4 ;Y ADJUST .BYTE 4 .BYTE -5 ;Y ADJUST .BYTE 2 ;78 .BYTE -4 ;Y ADJUST ;22 = 79 TSDNLT2: .BYTE -3 .BYTE 11 ;Y ADJUST .BYTE -3 .BYTE 3 ;Y ADJUST .BYTE -3 .BYTE 2 ;Y ADJUST .BYTE -4 .BYTE 3 ;Y ADJUST .BYTE -3 .BYTE 3 ;Y ADJUST .BYTE -4 .BYTE 3 ;Y ADJUST 35 .BYTE -3 .BYTE 3 ;Y ADJUST .BYTE -4 .BYTE 3 ;Y ADJUST .BYTE -3 .BYTE 2 ;Y ADJUST .BYTE -3 .BYTE 3 ;Y ADJUST ;22 .BYTE -3 .BYTE 3 ;Y ADJUST .BYTE -3 .BYTE 2 ;Y ADJUST .BYTE -4 .BYTE 3 ;Y ADJUST .BYTE -3 .BYTE 2 ;Y ADJUST .BYTE -3 .BYTE 3 ;Y ADJUST .BYTE -3 .BYTE 2 ;Y ADJUST .BYTE -4 .BYTE 3 ;Y ADJUST .BYTE -3 .BYTE 2 ;Y ADJUST .BYTE -3 .BYTE 2 ;Y ADJUST .BYTE -3 .BYTE 2 ;Y ADJUST .BYTE -3 .BYTE 2 ;Y ADJUST .BYTE -3 ;78 .BYTE 2 ;Y ADJUST ;22 = 79 TSDNRT2: .BYTE 3 .BYTE 11 ;Y ADJUST .BYTE 3 .BYTE 3 ;Y ADJUST .BYTE 3 .BYTE 2 ;Y ADJUST .BYTE 4 .BYTE 3 ;Y ADJUST .BYTE 3 .BYTE 3 ;Y ADJUST .BYTE 4 .BYTE 3 ;Y ADJUST 35 .BYTE 3 .BYTE 3 ;Y ADJUST .BYTE 4 .BYTE 3 ;Y ADJUST .BYTE 3 .BYTE 2 ;Y ADJUST .BYTE 3 .BYTE 3 ;Y ADJUST ;22 .BYTE 3 .BYTE 3 ;Y ADJUST .BYTE 3 .BYTE 2 ;Y ADJUST .BYTE 4 .BYTE 3 ;Y ADJUST .BYTE 3 .BYTE 2 ;Y ADJUST .BYTE 3 .BYTE 3 ;Y ADJUST .BYTE 3 .BYTE 2 ;Y ADJUST .BYTE 4 .BYTE 3 ;Y ADJUST .BYTE 3 .BYTE 2 ;Y ADJUST .BYTE 3 .BYTE 2 ;Y ADJUST .BYTE 3 .BYTE 2 ;Y ADJUST .BYTE 3 .BYTE 2 ;Y ADJUST .BYTE 3 ;78 .BYTE 2 ;Y ADJUST ;22 = 79 TSUP2: .BYTE 0 ;X ADJUST .BYTE -4 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -5 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -5 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -5 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -5 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -5 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -5 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -5 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -5 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -5 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -6 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -6 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -6 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -6 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -6 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -6 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -6 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -6 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -5 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -5 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -4 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE -4 ;Y ADJUST TSDN2: .BYTE 0 ;X ADJUST .BYTE 0 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 1 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 2 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 3 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 4 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 5 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 5 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 5 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 5 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 5 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 5 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 5 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 4 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 4 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 3 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 3 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 3 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 3 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 3 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 2 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 1 ;Y ADJUST .BYTE 0 ;X ADJUST .BYTE 1 ;Y ADJUST .EVEN .END