total-carnage/SHOTS.ASV

2256 lines
36 KiB
Plaintext
Raw Normal View History

2021-04-06 15:15:31 -07:00
.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