total-carnage/SHOTS.ASV

2256 lines
36 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

.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