smashtv/SHOTS.ASM

3058 lines
49 KiB
NASM
Raw Permalink Normal View History

2021-04-06 15:09:56 -07:00
.FILE 'SHOTS.ASM'
.TITLE 'ROBO-RAMA GAME PROGRAM SHOTS STUFF'
.WIDTH 132
.OPTION B,D,L,T
.MNOLIST
;
; INITIATED: APRIL 13,1989
; 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 "ROBO.EQU"
;
;SOUNDS EXTERNAL
;
.REF SCASH,GIFT,ICON,SHOT,MISS,EXP3,EXP1,TING,FREESND
.REF BUBL,RIFL,EXP3HI,FSHOT,PZLSND,GRNSND,ICSND
.REF WOO1,WOO2,BINGO,EXP3HIB
;
;SYMBOLS EXTERNALLY DEFINED
;
.REF SMRT_GAL,ZEROCNTS,RINGTIME,MCON,CNTDIG1
; .REF GAMSTATE
.REF FACEON,SCRADD2,FFLG,TOID_ON,CIRCUIT,GETFPAL,PCNT
.REF P1CSH,P2CSH,P1PZ1,P2PZ1,WNTOUT,KILL_OB
.REF SCORETYP,P2LVS,P1LVS,RFACEP,LFACEP,OBJOFF,OBJON
.REF METERP1,METERP2,STATUS
.REF FRANIM,DELPAL,DRINF,BOOM2,WAVEYX
.REF RANGRAND,RINGS,SHAKER,KILL_H1,KILL_F2
.REF KEEP_TOPL_GATE,KEEP_TOPR_GATE,KILL_TK,KILL_TS
.REF RSIDEVW,LSIDEVW,KILL_CBALL,P1DATA,P2DATA
.REF LASRX,LASRY,FILLUP,METERS,SHK_ON
.REF KILL,XYSEEK2,KILL_R1,KILL_SK1
.REF ICNFLG,PZFLG,PZON,PRZ_LIT
;
;SYMBOLS DEFINED IN THIS FILE
;
.DEF SPRAYON,PODON,GRENON,KEYON,NSTPON,RINGON,SHOEON
.DEF FIRE_DIRECTION,BULL_EXP_LIST,SMRTON,KOFFC
.DEF BLT_CNT,MAXBLT,SMLEXP,BAD0
.DEF B_DIR,KILL_BULL,BLTDIR,STRT_WPN,REGEXP
.DEF MV_BULL,KILL_BULLT,TPZ1,TPZ2,TPZ3,TCSH,TITM
.DEF BOSSON,SENDCRNR
;
;UNINITIALIZED RAM DEFINITIONS
;
.BSS BOSSON,8
.BSS NXT_XVEL,32
.BSS NXT_YVEL,32
.BSS BLT_CNT,8 ;TOTAL BULLETS ACTIVE
.BSS B_DIR,16 ;BULLET DIRECTION 1-9 BUT NOT 3!
;
;EQUATES FIRST ORIGINATED IN THIS FILE
;
;PUT IN ANGLE VELOCITIES!
BLTYVEL .EQU 072000H ;>164000
BLTXVEL .EQU 072000H ;>164000
BLT5YVEL .EQU 038000H ;>164000
BLT5XVEL .EQU 040000H ;>164000
GRNYVEL .EQU 000H
GRNXVEL .EQU 2000H
;-18000 FOR FLATFACE
GRNYVEL2 .EQU -018000H
GRNXVEL2 .EQU -018000H
MAXBLT .EQU 45
.TEXT
;
TITM
;TOUCH CASH ON FLOOR
CLR A10
;CHANGE OID, RAISE ZPOS, SEND TOWARD P1/P2 TV MONITOR, SLEEP 2 SEC, KILL, DIE
MMTM SP,A1,A2,A3,A4,A5,A6,A7,A9
MOVI P1DATA,A2
PUSH A0
MOVE *A0(OPLINK),A0,L
MOVB *A0(PNUM),A1
CMPI 1,A1
JRZ TR5
MOVI P2DATA,A2
TR5
MOVI PZPT2,A1
CALLA SCRADD2
PULL A0
; MOVE @MCON,A1
; JRZ NOMC
; CALLR SEND2
; JRUC MC
;NOMC
CALLR SEND
;MC
CREATE FLYPID,KOFFC2
MMFM SP,A1,A2,A3,A4,A5,A6,A7,A9
RETS
TCSH:
;TOUCH CASH ON FLOOR
CLR A10
;CHANGE OID, RAISE ZPOS, SEND TOWARD P1/P2 TV MONITOR, SLEEP 2 SEC, KILL, DIE
MMTM SP,A1,A2,A3,A4,A5,A6,A7,A9
CALLR SEND
CREATE FLYPID,KOFFC
MMFM SP,A1,A2,A3,A4,A5,A6,A7,A9
RETS
;SEND2
; MOVE *A0(OPLINK),A0,L
; MOVB *A0(PNUM),A9 ;PLAYER 1 OR 2
; MOVI WOO1,A0 ;GET CASH PICKUP SND
; JRUC SEN2A
SEND
MOVE *A0(OPLINK),A0,L
MOVB *A0(PNUM),A9 ;PLAYER 1 OR 2
MOVI SCASH,A0 ;GET CASH PICKUP SND
;SEN2A
CALLA ONESND
SENDCRNR
MOVI CLSNEUT|TYPNEUT,A0
MOVE A0,*A8(OID)
MOVI DMAWNZ|M_NOCOLL,A0
MOVE A0,*A8(OFLAGS)
MOVI 200,A0
MOVE A0,*A8(OZPOS)
;
CLR A5
CLR A6
MOVE @WAVEYX,A0,L ;WAVE TL OFFSET
MOVY A0,A6 ;Y VALUE TO SCROLL TO IN A10
SRL 16,A6
ADDI 40,A6
MOVX A0,A5 ;X VALUE TO SCROLL TO IN A9
ADDI 30,A5
CMPI 1,A9
JREQ UPLC
;PLYR 2 TV SEEK
ADDI 340,A5
MOVE @MCON,A0
JRNZ UPLC2
MOVE @P2CSH,A0
INC A0
INC A0
MOVE A0,@P2CSH
JRUC UPLC2
UPLC
MOVE @MCON,A0
JRNZ UPLC2
MOVE @P1CSH,A0
INC A0
INC A0
MOVE A0,@P1CSH
UPLC2 CALLA XYSEEK2
MOVE A5,*A8(OXVEL),L
MOVE A6,*A8(OYVEL),L
RETS
;
KOFFC
MOVE @WAVEYX,A0,L ;WAVE TL OFFSET
MOVY A0,A11 ;Y VALUE TO SCROLL TO IN A10
SRL 16,A11
ADDI 35,A11
MOVI 18,A10 ;A10 IS TIMER
SLPC SLEEP 10
MOVE *A8(OYPOS),A0
CMP A0,A11
JRNC DNSLPC
DSJS A10,SLPC
DNSLPC
;DELETE FLOATING CASH IMAGE
MOVE A8,A0
CALLA DELOBJ
DIE
KOFFC2
MOVE A8,A0
MOVE *A0(OPLINK),A0,L
CALLA KILL
MOVE @WAVEYX,A0,L ;WAVE TL OFFSET
MOVY A0,A11 ;Y VALUE TO SCROLL TO IN A10
SRL 16,A11
ADDI 35,A11
MOVI 18,A10 ;A10 IS TIMER
LPC SLEEP 10
MOVE *A8(OYPOS),A0
CMP A0,A11
JRNC NSLPC
DSJS A10,LPC
NSLPC
;HAS REACHED TOP
;KILL PRIZE, REMOVE FACE, REMOVE LIVES, PLACE GIFT PICTURE, START COLOR CYCLE
;REMOVE SCORE DIGITS, PLACE TEXT MESSAGE
;SLEEP, TURN OFF PRIZE & TEXT, REPLACE FACE & LIVES, KILL COLOR CYCLE
;A10=0,1,2 FOR PRIZE TYPE
;DELETE FLOATING CASH IMAGE
MOVE A8,A0
CALLA DELOBJ
DIE
TPZ1:
;TOUCHED PRIZE 1
CLR A10
INHR
;CHANGE OID, RAISE ZPOS, SEND TOWARD P1/P2 TV MONITOR, SLEEP 2 SEC, KILL, DIE
;RESET PZFLG
MMTM SP,A1,A2,A3,A4,A5,A6,A7,A9
MOVE *A0(OPLINK),A0,L
MOVB *A0(PNUM),A9 ;PLAYER 1 OR 2
MOVK 1,A0
MOVB A0,@PZFLG
MOVE @CIRCUIT,A0
SLL 5,A0
ADDI PZLSND,A0
MOVE *A0,A0,L
MOVE A10,A1
SLL 5,A1
ADD A1,A0
MOVE *A0,A0,L
CALLA ONESND
MOVI CLSNEUT|TYPNEUT,A0
MOVE A0,*A8(OID)
MOVI DMAWNZ|M_NOCOLL,A0
MOVE A0,*A8(OFLAGS)
MOVI 200,A0
MOVE A0,*A8(OZPOS)
;
CLR A5
CLR A6
MOVE @WAVEYX,A0,L ;WAVE TL OFFSET
MOVY A0,A6 ;Y VALUE TO SCROLL TO IN A10
SRL 16,A6
ADDI 40,A6
MOVX A0,A5 ;X VALUE TO SCROLL TO IN A9
ADDI 30,A5
CMPI 1,A9
JREQ UPL
;PLYR 2 TV SEEK
;INC P2PZ CNT
MOVI P2DATA,A2
MOVI PZPT,A1
CALLA SCRADD2
MOVE A10,A0
SLL 3,A0
ADDI P2PZ1,A0
MOVB *A0,A1
ADDK 10,A1
MOVB A1,*A0
ADDI 340,A5
JRUC UPL2
UPL
;INC P1PZ CNT
MOVI P1DATA,A2
MOVI PZPT,A1
CALLA SCRADD2
MOVE A10,A0
SLL 3,A0
ADDI P1PZ1,A0
MOVB *A0,A1
ADDK 10,A1
MOVB A1,*A0
UPL2
CALLA XYSEEK2
MOVE A5,*A8(OXVEL),L
MOVE A6,*A8(OYVEL),L
CREATE FLYPID,KOFF
MMFM SP,A1,A2,A3,A4,A5,A6,A7,A9
RETS
;
KOFF
MOVE @WAVEYX,A0,L ;WAVE TL OFFSET
MOVY A0,A11 ;Y VALUE TO SCROLL TO IN A10
SRL 16,A11
ADDI 35,A11
SLP SLEEP 4
SLP2 MOVE *A8(OYPOS),A0
CMP A0,A11
JRC SLP
MOVE A9,A0
DEC A0
SLL 3,A0
ADDI CNTDIG1,A0
MOVB *A0,A0
JRNZ OUT
MOVB @WNTOUT,A0
JRZ SLP2Z
OUT
;WANTOUT OF ARENA!
CLR A0
MOVB A0,@WNTOUT
MOVE A8,A0
CALLA DELOBJ
DIE
SLP2Z
;HAS REACHED TOP
;KILL PRIZE, REMOVE FACE, REMOVE LIVES, PLACE GIFT PICTURE, START COLOR CYCLE
;REMOVE SCORE DIGITS, PLACE TEXT MESSAGE
;SLEEP, TURN OFF PRIZE & TEXT, REPLACE FACE & LIVES, KILL COLOR CYCLE
;A10=0,1,2 FOR PRIZE TYPE
; MOVE @GAMSTATE,A0,W
; CMPI INAMODE,A0
; JRZ CLEANUP
MOVI GIFT,A0
CALLA ONESND
CMPI 1,A9
JREQ LSD
;RIGHT SIDE
MOVE @RFACEP,A0,L
CALLA OBJOFF
MOVE @P2LVS,A0,L
CALLA OBJOFF
MOVE @METERP2,A0,L
CALLA OBJOFF
MOVE @SCORETYP,A0
ANDI 01,A0
MOVE A0,@SCORETYP
;PLACE CORRECT PRIZE AND TEXT IN PLYR 2 AREA
;CIRCUIT 1
SLL 5,A10
MOVE @CIRCUIT,A6
SLL 5,A6
ADDI PZL,A6
MOVE *A6,A6,L
; MOVI PZPIC,A6
ADD A10,A6
MOVE @RFACEP,A0,L
MOVE *A0(OYPOS),A1
ADDI 6,A1
MOVE A1,*A8(OYPOS)
MOVE *A0(OXPOS),A1
SUBI 10,A1
MOVE A1,*A8(OXPOS)
CLR A0
MOVE A0,*A8(OXVEL),L
MOVE A0,*A8(OYVEL),L
MOVI 300,A0
MOVE A0,*A8(OZPOS)
MOVE *A6,A1,L
MOVE *A8(OFLAGS),A4
;CHANGE TO PRZ PALETTE!
MOVI PRZ,A0
CALLA GETFPAL
MOVE A0,*A8(OPAL),W
CALLA ANI
; NOW PLACE TEXT ON SCORE BOARD
;CIRCUIT 1
MOVI [0112H,0],A0
MOVI [35H,0],A1
MOVE @CIRCUIT,A2
SLL 5,A2
ADDI TLST,A2
MOVE *A2,A2,L
ADD A2,A10
; ADDI TTXT,A10
MOVE *A10,A2,L
MOVI 19,A3 ;259
MOVI DMAWNZ|M_NOCOLL,A4 ;NON-ZERO VALUE
MOVI CLSNEUT|TYPNEUT,A5
CLR A6
CLR A7
PUSH A8
CALLA BEGINOBJ
MOVE A8,A9
PULL A8
MOVB @PZON,A0
JRNE SP2
CREATE 0,PRZ_LIT
SP2
MOVB @PZON,A0
ADDI 250,A0
MOVB A0,@PZON
;NEED TO WAKE UP FROM THIS SLEEP SOONER IF WNTOUT IS SET TO 1!
MOVK 24,A10
R4 SLEEP 5
MOVB @WNTOUT,A0
JRNZ WNT2
DSJS A10,R4
WNT2
CLR A0
MOVB A0,@WNTOUT
MOVK 1,A0
MOVB A0,@PZON ;COLOR CYCLER WILL TURN IT OFF
MOVE @METERP2,A0,L
CALLA OBJON
MOVE @RFACEP,A0,L
CALLA OBJON
MOVE @P2LVS,A0,L
CALLA OBJON
MOVE @SCORETYP,A0
ORI 2,A0
MOVE A0,@SCORETYP
;DELETE FLOATING PRIZE PACKAGE
MOVE A9,A0
CALLA DELOBJ
;CLEANUP
MOVE A8,A0
CALLA DELOBJ
DIE
LSD
;LEFT SIDE
MOVE @LFACEP,A0,L
CALLA OBJOFF
MOVE @P1LVS,A0,L
CALLA OBJOFF
MOVE @METERP1,A0,L
CALLA OBJOFF
MOVE @SCORETYP,A0
ANDI 02,A0
MOVE A0,@SCORETYP
;PLACE CORRECT PRIZE AND TEXT IN PLYR 1 AREA
;CIRCUIT 1
SLL 5,A10
MOVE @CIRCUIT,A6
SLL 5,A6
ADDI PZL,A6
MOVE *A6,A6,L
; MOVI PZPIC,A6
ADD A10,A6
MOVE @LFACEP,A0,L
MOVE *A0(OYPOS),A1
ADDI 6,A1
MOVE A1,*A8(OYPOS)
MOVE *A0(OXPOS),A1
SUBI 10,A1
MOVE A1,*A8(OXPOS)
CLR A0
MOVE A0,*A8(OXVEL),L
MOVE A0,*A8(OYVEL),L
MOVI 300,A0
MOVE A0,*A8(OZPOS)
MOVE *A6,A1,L
MOVE *A8(OFLAGS),A4
;CHANGE TO PRZ PALETTE!
MOVI PRZ,A0
CALLA GETFPAL
MOVE A0,*A8(OPAL),W
CALLA ANI
MOVI [024H,0],A0
MOVI [35H,0],A1
MOVE @CIRCUIT,A2
SLL 5,A2
ADDI TLST,A2
MOVE *A2,A2,L
ADD A2,A10
MOVE *A10,A2,L
MOVI 19,A3 ;259
MOVI DMAWNZ|M_NOCOLL,A4 ;NON-ZERO VALUE
MOVI CLSNEUT|TYPNEUT,A5
CLR A6
CLR A7
PUSH A8
CALLA BEGINOBJ
MOVE A8,A9
PULL A8
MOVB @PZON,A0
JRNE SP1
CREATE 0,PRZ_LIT
SP1
MOVB @PZON,A0
ADDI 150,A0
MOVB A0,@PZON
MOVK 24,A10
R5 SLEEP 5
MOVB @WNTOUT,A0
JRNZ WNT3
DSJS A10,R5
WNT3
CLR A0
MOVB A0,@WNTOUT
MOVK 1,A0
MOVB A0,@PZON
MOVE @METERP1,A0,L
CALLA OBJON
MOVE @LFACEP,A0,L
CALLA OBJON
MOVE @P1LVS,A0,L
CALLA OBJON
MOVE @SCORETYP,A0
ORI 1,A0
MOVE A0,@SCORETYP
;DELETE FLOATING PRIZE PACKAGE
MOVE A8,A0
CALLA DELOBJ
MOVE A9,A0
CALLA DELOBJ
DIE
TPZ2:
MOVK 1,A10
JRUC INHR
TPZ3:
MOVK 2,A10
JRUC INHR
TTXT .LONG TTSTR,TCAR,TVCR
T2TXT .LONG TTV,TLUGG,TTRIP
T3TXT .LONG THGM,TMWR,TMEAT
TLST .LONG TTXT,T2TXT,T3TXT
PZPIC .LONG TSTR,CRPRZ,VCR
PZ2PIC .LONG TVPRZ,LUGG,TRPPRZ
PZ3PIC .LONG HGMPRZ,MWRPRZ,MTPRZ
PZL .LONG PZPIC,PZ2PIC,PZ3PIC
RINGON:
;TURN RING ON AROUND PLAYER ICON PICKUP
;REDUCE MMTM!!!
MMTM SP,A1,A7,A9
MOVE *A0(OPLINK),A0,L
MOVB *A0(PNUM),A9
MOVE @RINGTIME,A10
; MOVI 300,A10 ;TIME RINGS ARE ON
CREATE RNGPID,RINGS ;PLACE RING AROUND PLAYER X
MOVE A8,A0
CALLA DELOBJ
MOVK 1,A0
MOVB A0,@ICNFLG
MOVI ICSND,A0
CALLA ONESND
MMFM SP,A1,A7,A9
RETS
KEYON:
;PLAYER NOW CARRIES KEY
;REDUCE MMTM!!!
MMTM SP,A1,A2,A3,A4,A5,A6,A7
MOVE *A0(OPLINK),A0,L
MOVB *A0(PNUM),A9
MOVI P1DATA,A2
MOVI KEYPT,A1
CMPI 1,A9
JRZ KEY1
MOVI P2DATA,A2
KEY1 CALLA SCRADD2
; MOVE A8,A0
; CALLA DELOBJ
MOVK 1,A0
MOVB A0,@ICNFLG
MOVI FREESND,A0
CALLA ONESND
CALLA SENDCRNR
CREATE FLYPID,KOFFC
MMFM SP,A1,A2,A3,A4,A5,A6,A7
RETS
SHOEON:
;FAST SHOES
;REDUCE MMTM!!!
MMTM SP,A1,A2
MOVE *A0(OPLINK),A0,L ;A0=PLAYER WHO GOT THIS ICON
MOVE *A0(LEG_PRC),A0,L
MOVI 300,A1 ;TIME SHOES ARE ON
MOVE @CIRCUIT,A2
CMPI 2,A2
JRNZ SH1
MOVI 500,A1 ;TIME SHOES ARE ON
SH1
MOVB A1,@ICNFLG
MOVE A1,*A0(SHOECNT),W
MOVE A8,A0
CALLA DELOBJ
MOVI WOO2,A0
CALLA ONESND
MMFM SP,A1,A2
RETS
SMRTON:
;SMART BOMB EVERYTHING ON SCREEN
;REDUCE MMTM!!!
MMTM SP,A1,A7,A9,A11
MOVE A0,A9 ;KEEP PLAYER IMAGE WHO PICKED ME UP
MOVK 1,A1
MOVB A1,@ICNFLG
MOVE A8,A0
CALLA DELOBJ
CREATE 0,SBSND
CREATE 0,SBOMB
MMFM SP,A1,A7,A9,A11
RETS
SBSND
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
MOVE *A9(OID),A0
MOVI P1DATA,A9
CMPI CLSPLYR|TYPPLYR|SUBPL_1,A0
JREQ NC
MOVI P2DATA,A9
;A9=P1 OR P2DATA FOR SCORING SMART BOMB POINTS
NC MOVB @SHK_ON,A0
JRNZ BAD0
MOVI 30,A10
CALLA SHAKER
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|TYPFAT,A0
MOVI 0FFFFH,A1
CALLA EXISTOBJ
JRZ BAD3
;FOUND A FAT
MOVE A0,A8
;NO SCORE FOR THESE FAT GUYS
CALLA KILL_F2 ;KILL_FAT
JRUC BAD1
BAD3
MOVI CLSNEUT|TYPTANK,A0
MOVI 0FFFFH,A1
CALLA EXISTOBJ
JRZ BAD4A
;FOUND A TANK BOTTOM
MOVE A0,A8
;WHO GETS SCORE HERE?
CALLA KILL_TK
JRUC BAD3
BAD4A
MOVI CLSENMY|TYPTANK,A0
MOVI 0FFFFH,A1
CALLA EXISTOBJ
JRZ BAD4
;FOUND A TANK BOTTOM
MOVE A0,A8
;WHO GETS SCORE HERE?
CALLA KILL_TK
JRUC BAD4A
BAD4
MOVI CLSENMY|TYPTORSO,A0
MOVI 0FFFFH,A1
CALLA EXISTOBJ
JRZ BAD5
;FOUND A TORSO
MOVE A0,A8
CALLA KILL_TS
JRUC BAD4
BAD5
MOVI CLSENMY|TYPORB,A0
MOVI 0FFFFH,A1
CALLA EXISTOBJ
JRZ BAD6
;NO!!
;FOUND AN ORB
MOVE A0,A8
CALLA KILL_OB
JRUC BAD5
BAD6
MOVI CLSENMY|TYPRBTA,A0
MOVI 0FFFFH,A1
CALLA EXISTOBJ
JRZ BAD7
;NO!!
;FOUND AN ORB
MOVE A0,A8
CALLA KILL_R1
JRUC BAD6
BAD7
MOVI CLSENMY|TYPGAL,A0 ;(OID)
MOVI 0FFC0H,A1
CALLA EXISTOBJ
JRZ BAD8
;FOUND GALAGA
MOVE A0,A8
CALLA SMRT_GAL
JRUC BAD7
BAD8
MOVI CLSENMY|TYPSNK,A0
MOVI 0FFFFH,A1
CALLA EXISTOBJ
JRZ BADCLN
;NO!!
;FOUND AN SNAKE
MOVE A0,A8
CALLA KILL_SK1
JRUC BAD8
;INSERT OTHERS HERE
BADCLN
BAD2
SLEEP 1
MOVI CLSENMY|TYPCBALL,A0
MOVI 0FFFFH,A1
CALLA EXISTOBJ
JRZ BAD9
;FOUND A CBALL/SHRAPNEL
;NO SCORE
MOVE A0,A8
CALLA KILL_CBALL
JRUC BAD2
BAD9
;RESET ALL CNTS!
CALLA ZEROCNTS
DIE
NSTPON:
;NON STOPPING BULLET
;REDUCE MMTM!!!
MMTM SP,A1,A2,A3,A4,A5,A6,A7,A10
MOVE *A0(OPLINK),A0,L ;A0=PLAYER WHO GOT THIS ICON
MOVK 4,A1
MOVB A1,@ICNFLG
MOVE A1,*A0(WPN_TYP),W
MOVE A0,A10 ;A10=PLAYER
MOVE A8,A0
CALLA DELOBJ
CREATE 0,FILLUP
MOVI ICON,A0
CALLA ONESND
MOVK 1,A0
MOVB A0,@FFLG ;SOMEONE FILLING UP FLAG
MMFM SP,A1,A2,A3,A4,A5,A6,A7,A10
RETS
GRENON:
;REDUCE MMTM!!!
MMTM SP,A1,A2,A3,A4,A5,A6,A7,A10
MOVE *A0(OPLINK),A0,L
;TURN ON RINGS IF FLATFACE IS OUT!
MOVB @FACEON,A1
JREQ GRENON1
MMTM SP,A0
MOVB *A0(PNUM),A9
MOVI 270,A10 ;TIME RINGS ARE ON ;320
CREATE RNGPID,RINGS ;PLACE RING AROUND PLAYER X
MMFM SP,A0
GRENON1
MOVK 3,A1
MOVB A1,@ICNFLG
MOVE A1,*A0(WPN_TYP),W
MOVE A0,A10
MOVE A8,A0
CALLA DELOBJ
CREATE 0,FILLUP
MOVI ICON,A0
CALLA ONESND
MOVK 1,A0
MOVB A0,@FFLG ;SOMEONE FILLING UP FLAG
MMFM SP,A1,A2,A3,A4,A5,A6,A7,A10
RETS
;
SPRAYON:
MMTM SP,A1,A2,A3,A4,A5,A6,A7,A10
;A8=ICON IMAGE
;A0=PLAYER WHO GOT ME
MOVE *A0(OPLINK),A0,L
MOVK 1,A1
MOVB A1,@ICNFLG
MOVE A1,*A0(WPN_TYP),W
MOVE A0,A10
MOVE A8,A0
CALLA DELOBJ ;KILL ICON IMAGE
CREATE 0,FILLUP ;FILL METER UP
MOVI ICON,A0
CALLA ONESND
MOVK 1,A0
MOVB A0,@FFLG ;SOMEONE FILLING UP FLAG
MMFM SP,A1,A2,A3,A4,A5,A6,A7,A10
RETS
;
PODON:
MMTM SP,A1,A2,A3,A4,A5,A6,A7,A10
MOVE *A0(OPLINK),A0,L
MOVB @FACEON,A1
JREQ PODON1
MMTM SP,A0
MOVB *A0(PNUM),A9
MOVI 260,A10 ;TIME RINGS ARE ON ;300
CREATE RNGPID,RINGS ;PLACE RING AROUND PLAYER X
MMFM SP,A0
PODON1
MOVK 2,A1
MOVB A1,@ICNFLG
MOVE A1,*A0(WPN_TYP),W
MOVE A0,A10
MOVE A8,A0
CALLA DELOBJ
CREATE 0,FILLUP
MOVI ICON,A0
CALLA ONESND
MOVK 1,A0
MOVB A0,@FFLG ;SOMEONE FILLING UP FLAG
MMFM SP,A1,A2,A3,A4,A5,A6,A7,A10
RETS
;
MV_BULL:
;DEFLECT BULLET
MOVE *A8(OID),A0
ANDI F_SUBT,A0
;CAN WE JUST NEGATE ALL BULLET TYPES VELOCITIES?
CMPI SUBLZR,A0
JRNE KILL_BULL
; JRNE RT
MMTM SP,A1,A6,A7,A2,A3,A4,A13
;GET NEW X,Y VELS THEN SET BLTDIR (IN PDATA) ACCORDINGLY
MOVI 1,B0
MOVI 9,B1
CALLA RANGRAND
CMPI 3,A0
JRNE DX
DEC A0
DX
MOVE A0,@B_DIR
MOVE *A8(OPLINK),A13,L
CALLR GET_CNVRT
CALLR STUFIT
MOVE A2,A1
CALLA ANI
;A6=XVEL,A7=YVEL,A4=FLAGS,A2=OIMG OF NEW BULLET
MOVE A6,*A8(OXVEL),L
MOVE A7,*A8(OYVEL),L
MMFM SP,A1,A6,A7,A2,A3,A4,A13
RT RETS
KILL_BULL:
; DELETE OBJ, UPDATE BLT_CNT, KILL BULLETS PROC
MOVE *A8(OID),A0,W
ANDI 0FFFFH,A0
CMPI CLSPLYR|TYPPLBL|SUBGRND,A0
JRNE KB0
;MUST KILL SHADOW OF GRENADE ALSO!
MOVE *A8(OPLINK),A0,L
CALLA GETA9
CALLA KILL ;KILLS PROCESS IN A0
MOVE A9,A0
CALLA DELOBJ
JRUC KB
KB0 MOVE *A8(OPLINK),A0,L
CALLA KILL ;KILLS PROCESS IN A0
KB:
MOVE A8,A0
CALLA DELOBJ
RETS
KILL_BULLT:
; DELETE OBJ, UPDATE BLT_CNT, KILL BULLETS PROC
MOVE *A0(OPLINK),A0,L
MOVB *A0(PDATA),A0 ;ADRIVER IN TANKS FILE! CAREFUL!
JREQ KILL_BULL
RETS
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
ADDI 1,A6
NXT1:
BTST BMPFDOWN,A5
JRZ NXT2
ADDI 2,A6
NXT2:
BTST BMPFLEFT,A5
JRZ NXT3
ADDI 7,A6
NXT3:
BTST BMPFRYTE,A5
JRZ ALL_DIR
ADDI 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
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
STRT_WPN:
;FROM TORSO PROCESS
MOVB *A13(PNUM),A11 ;PLAYER WHO FIRED ME PASSED IN A11
MOVE *A13(WPN_TYP),A0,W
JRNZ W1
;WEAPON 1 - NORMAL FIRE POWER
CREATE BULPID,WPN1
MOVE *A13(LSRPTR),A0,L ;HELPER ON FLAG 1=YES
JRZ NOLASER
CREATE BULPID,WPN1A
NOLASER:
MOVI SHOT,A0 ;RIFLE SHOT
CALLA ONESND
RETS
W1
CMPI 1,A0
JRNE W2
;SPRAY WEAPON
;WEAPON 2
MOVE *A13(SHOTCNT),A0
DEC A0
MOVE A0,*A13(SHOTCNT)
JRGT S7
;UPDATE METER
MOVE A13,A10
CALLA METERS
S7:
CLR A10
CREATE BULPID,WPN2
MOVK 1,A10
CREATE BULPID,WPN2
MOVK 2,A10
CREATE BULPID,WPN2
MOVE *A13(LSRPTR),A0,L
JRZ NOLASER2
MOVE *A13(SHOTCNT),A0
DEC A0
MOVE A0,*A13(SHOTCNT)
JRGT S7A
;UPDATE METER
MOVE A13,A10
CALLA METERS
S7A:
CLR A10
CREATE BULPID,WPN2A
MOVK 1,A10
CREATE BULPID,WPN2A
MOVK 2,A10
CREATE BULPID,WPN2A
NOLASER2
MOVI RIFL,A0 ;SPRY
CALLA ONESND
RETS
W2
CMPI 2,A0
JRNE GR
;BUBBLE WEAPON
;WEAPON 3
MOVE *A13(SHOTCNT),A0
DEC A0
MOVE A0,*A13(SHOTCNT)
JRGT S8
;UPDATE METER
MOVE A13,A10
CALLA METERS
S8:
MOVI FSHOT,A0
CALLA ONESND
CREATE BULPID,WPN3
MOVE *A13(LSRPTR),A0,L
JRZ NZ3
; MOVE *A13(SHOTCNT),A0
; DEC A0
; MOVE A0,*A13(SHOTCNT)
; JRGT S9
;UPDATE METER
; MOVE A13,A10
; CALLA METERS
;S9:
CREATE BULPID,WPN3A
NZ3:
RETS
GR:
CMPI 3,A0
JRNE NS
;GRENADE
;WEAPON 4
MOVE *A13(SHOTCNT),A0
DEC A0
MOVE A0,*A13(SHOTCNT)
JRGT SA
;UPDATE METER
MOVE A13,A10
CALLA METERS
SA:
MOVI GRNSND,A0 ;WHISTLE UP SND
CALLA ONESND
CREATE BULPID,WPN4
RETS
NS:
;NON STOPPING BULLET
;WEAPON 5 - NORMAL FIRE POWER
MOVE *A13(SHOTCNT),A0
DEC A0
MOVE A0,*A13(SHOTCNT)
JRGT SA5
;UPDATE METER
MOVE A13,A10
CALLA METERS
SA5:
CREATE BULPID,WPN5
MOVE *A13(LSRPTR),A0,L
JRZ NO5
MOVE *A13(SHOTCNT),A0
DEC A0
MOVE A0,*A13(SHOTCNT)
JRGT SA5A
;UPDATE METER
MOVE A13,A10
CALLA METERS
SA5A:
CREATE BULPID,WPN5A
NO5
MOVI MISS,A0
CALLA ONESND
RETS
WPN5A:
;WEAPON 5 - NON STOPPING BULLET
;MAKE MORE EFFICIENT!
;NOW STUFF CORRECT BULLET AND CORRECT FLIP INFO
CALLR GET_CNVRT
;
CALLR STUFIT5
;ORBS X,Y POSITION HERE
;X IN A0, Y IN A1
MOVE @LASRX,A0,L
MOVE @LASRY,A1,L
DO_MISS
MOVI CLSPLYR|TYPPLBL|SUBNOSTP,A5
;ID IN A5
MOVI 159,A3
;ZPOS IN A3
;XVEL IN A6
;YVEL IN A7
CALLA BEGINOBJ2
LPZ_TP:
;REGULAR BULLETS
MOVI [>21,>20],A2 ;23,21
MOVI [>FC,>173],A3
CALLA SCRTSTG
JRZ ZC1
;
;A0=1,2,3 OR 4 WHICH IS RETURNED FROM SCRTSTG!
;
MOVE A0,A10 ;KEEP B_DIR 1,2,3,OR 4
; NOW CHECK TO SEE IF BULLET IS PASSING THROUGH A GATE
CMPI 4,A0
JREQ BULLGN
;
;CHECK TO SEE IF BULLET IS WITHIN EDGES OF DOOR
;
MOVE A0,A1
SLL 5,A0
ADDI DRINF,A0
MOVE *A0,A0,L
MOVB *A0,A0
JREQ REGEXPNO
MOVE A1,A0
CALLR YESWALL
JRC REGEXPNO ;PROJECTILE HIT WALL NOT A DOORWAY
SLEEP 10
MOVE A8,A0
; CALLA DELPAL ;NEEDED? NO!!!!
CALLA DELOBJ
DIE
ZC1:
MOVB @PCNT,A0
ANDI 01H,A0
JRZ ZC1A
SLEEP 1 ;SLEEP 2 MAYBE?
JRUC LPZ_TP
ZC1A SLEEP 2 ;SLEEP 2 MAYBE?
JRUC LPZ_TP
WPN5:
;WEAPON 5 - NON STOPPING BULLET
;MAKE MORE EFFICIENT!
;NOW STUFF CORRECT BULLET AND CORRECT FLIP INFO
CALLR GET_CNVRT
;
CALLR STUFIT5
;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 X5_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 Y5_OFFSET,A8
ADD A3,A8
MOVE *A8,A8,L
ADD A8,A1
;YVAL IN A1
JRUC DO_MISS
STUFIT5:
MOVI BUL5XV,A3
ADD A0,A3
MOVE *A3,A6,L
MOVI BUL5YV,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 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
RETS
WPN4:
;WEAPON 4 - GRENADE
;MAKE MORE EFFICIENT!
;NOW STUFF CORRECT BULLET AND CORRECT FLIP INFO
;GET RID OF THIS CONVERT!
CALLR GET_CNVRT
;
; WEAPON 4 STUFF
;
;GET VELS FOR THIS PROJECTILE
MOVI GRNXV,A3
ADD A0,A3
MOVE *A3,A6,L
MOVI GRNYV,A3
FYYS ADD A0,A3
MOVE *A3,A7,L ;YV
;IMG IN A2
MOVI DMAWNZ,A4
;FLAGS IN A4
MOVI GRND1,A2
MOVE *A8(OXVAL),A0,L
MOVE *A8(OYVAL),A1,L
MOVI X4_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 Y4_OFFSET,A8
ADD A3,A8
MOVE *A8,A8,L
ADD A8,A1
MOVI TOSSDIR,A11
ADD A3,A11
MOVE *A11,A11,L ;LIST OF OFFSET BYTES!
ADDI TOSS2DIR,A3
MOVE *A3,A10,L
;YVAL IN A1
DOME4:
MOVI CLSNEUT|TYPNEUT,A5
;ID IN A5
MOVI 253,A3
;ZPOS IN A3
;XVEL IN A6
;YVEL IN A7
PUSH A0
CALLA BEGINOBJ2
PULL A0
PUSH A8
ADDI 0180000H,A1
MOVI GSHAD1,A2
MOVI 58,A3
CALLA BEGINOBJ2
MOVE A8,A9
PULL A8
CLR A7
MOVB A7,*A13(GTMP)
MOVB A7,*A13(SLIDEY)
MOVB A7,*A13(SLIDEX)
W4_TP:
MOVB *A13(GTMP),A7
MOVE A7,A1
SLL 5,A1
ADDI TOSSG,A1
MOVE *A1,A1,L
JRZ BLWUP
CMPI 15,A7 ;19
JRNZ V1
;SET OID
MOVI CLSPLYR|TYPPLBL|SUBGRND,A5
MOVE A5,*A8(OID),W
V1
MOVI DMAWNZ,A4 ;GET NEW FLAGS (SAME!)
CALLA ANI
MOVB *A11,A0 ;GET X OFFSET
ADDI 8,A11
MOVB *A10,A2 ;GET X OFFSET
ADDI 8,A10
MOVB *A13(SLIDEX),A1
JRNE AC0
MOVE *A8(OXPOS),A1,W
ADD A0,A1
MOVE A1,*A8(OXPOS),W
MOVE *A9(OXPOS),A1,W
ADD A2,A1
MOVE A1,*A9(OXPOS),W
JRUC AC
AC0
MOVE *A8(OXPOS),A1,W
SUB A0,A1
MOVE A1,*A8(OXPOS),W
MOVE *A9(OXPOS),A1,W
SUB A2,A1
MOVE A1,*A9(OXPOS),W
AC MOVB *A11,A0
ADDI 8,A11
MOVB *A10,A2
ADDI 8,A10
MOVB *A13(SLIDEY),A1
JRNZ AC2
MOVE *A8(OYPOS),A1,W
ADD A0,A1
MOVE A1,*A8(OYPOS),W
MOVE *A9(OYPOS),A1,W
ADD A2,A1
MOVE A1,*A9(OYPOS),W
JRUC AC1
AC2 MOVE *A8(OYPOS),A1,W
SUB A0,A1
MOVE A1,*A8(OYPOS),W
AC1 INC A7
MOVB A7,*A13(GTMP)
;GRENADES
MOVI [>23-5,>21-1],A2
MOVI [>FC,>171+5],A3
CALLA SCRTSTG
JRZ C41 ;BR=NOT INTO WALL
CMPI 4,A0
JREQ BLW2
;DO CLEVER SLIDE DOWN WALL HERE!
CMPI 3,A0
JRNE Z1
MOVE *A13(BLTDIR),A1
CMPI 3,A1
JREQ C41
CMPI 7,A1
JREQ C41
MOVK 1,A1
MOVB A1,*A13(SLIDEY)
JRUC C41
Z1:
MOVE *A13(BLTDIR),A1
CMPI 1,A1
JREQ C41
CMPI 5,A1
JREQ C41
MOVK 1,A1
MOVB A1,*A13(SLIDEX)
C41:
;IF FLATFACE, SLEEP 1!
MOVB @FACEON,A0
JRZ S02
SLEEP 1
JRUC W4_TP
S02
SLEEP 2
JRUC W4_TP
BLWUP:
MOVI EXP3,A0 ;AUDIO BOMB EXPLODE
CALLA ONESND
BLW2:
CLR A0
MOVE A0,*A8(OXVEL),L
MOVE A0,*A8(OYVEL),L
MOVE A9,A0 ;DELETE SHADOW
CALLA DELOBJ
MOVI CLSNEUT|TYPNEUT,A5
MOVE A5,*A8(OID),W
MOVI BOOM2,A9
MOVK 1,A1
JSRP FRANIM
MOVE A8,A0
CALLA DELOBJ
DIE
;
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
NEED3:
MOVI 5,B0
MOVI 18,B1
CALLA RANGRAND
MOVE A0,*A13(AGE),W
;GET RID OF THIS CONVERT!
CALLR GET_CNVRT
;
; WEAPON 3 STUFF
;
;GET VELS FOR THIS PROJECTILE
MOVI BXL,A1 ;BUBBLE X LOW VEL
ADD A0,A1
MOVE *A1,A1,L
MOVE A1,B0
MOVI BXH,A1
ADD A0,A1
MOVE *A1,A1,L
MOVE A1,B1
PUSH A0
CALLA RANGRAND
MOVE A0,A6
; ADD A9,A6 ;A9=PLAYERX XVEL
PULL A0
MOVI BYL,A1 ;BUBBLE X LOW VEL
ADD A0,A1
MOVE *A1,A1,L
MOVE A1,B0
MOVI BYH,A1
ADD A0,A1
MOVE *A1,A1,L
MOVE A1,B1
CALLA RANGRAND
MOVE A0,A7
; ADD A10,A7 ;A10=PLAYERS YVEL
MOVI PODA,A2
;IMG IN A2
MOVI DMAWNZ,A4
;THESE BULLETS ARE PIXEL SCANNED! CHECK FLAGS TABLE
;FLAGS IN A4
;
RETS
WPN3A:
CALLR NEED3
;ORBS X,Y POSITION HERE
;X IN A0, Y IN A1
MOVE @LASRX,A0,L
MOVE @LASRY,A1,L
JRUC DOME
WPN3:
;WEAPON 3 - MULTIPLE BUBBLE BULLETS RELEASED
;MAKE MORE EFFICIENT!
;NOW STUFF CORRECT BULLET AND CORRECT FLIP INFO
CALLR NEED3
;A8=TORSO PTR OF PLAYER THAT FIRED ME
MOVE *A8(OXVAL),A0,L
MOVE *A8(OYVAL),A1,L
MOVI X3_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 Y3_OFFSET,A8
ADD A3,A8
MOVE *A8,A8,L
ADD A8,A1
;YVAL IN A1
DOME:
MOVI CLSPLYR|TYPPLBL|SUBSPEW,A5
; MOVB @BOSSON,A3 ;FLAT FACE ON!?
; JRZ DMY
; CLR A5
;ID IN A5
;DMY
MOVI 159,A3
;ZPOS IN A3
;XVEL IN A6
;YVEL IN A7
CALLA BEGINOBJ2
; UPDATE BULLET COUNT AND RESET RAPID FIRE DELAY
MOVI SIZZLE,A9
W3_TP:
MOVE *A13(AGE),A0,W
DEC A0
MOVE A0,*A13(AGE),W
JRNE L31
MOVE A0,*A8(OXVEL),L
MOVE A0,*A8(OYVEL),L
;AGE TIMED OUT
MOVI CLSPLYR|TYPPLBL|SUBSPEW2,A5
MOVE A5,*A8(OID)
MOVI SMLEXP,A9
MOVK 1,A1
JSRP FRANIM
CALLR KB
MOVI EXP3HI,A0 ;AUDIO BOMB EXPLODE
CALLA ONESND
DIE
L31:
;GREEN BOMBS
MOVI [>23,>21],A2
MOVI [>FC,>171],A3
CALLA SCRTSTG
JRZ C31 ;BR=NOT INTO WALL
;
;A0=1,2,3 OR 4 WHICH IS RETURNED FROM SCRTSTG!
;
MOVE A0,A10 ;KEEP B_DIR 1,2,3,OR 4
; NOW CHECK TO SEE IF BULLET IS PASSING THROUGH A GATE
CMPI 4,A0
JREQ BULLGN
;
MOVE A0,A1
SLL 5,A0
ADDI DRINF,A0
MOVE *A0,A0,L
MOVB *A0,A0
JREQ REGEXPNO
MOVE A1,A0
CALLR YESWALL
JRC REGEXPNO ;PROJECTILE HIT WALL NOT A DOORWAY
SLEEP 30
MOVE A8,A0
CALLA DELOBJ
DIE
C31:
CLR A1
JSRP FRANIM
JRNC C32
MOVI SIZZLE,A9
C32:
JRUC W3_TP
NEED:
CALLR GET_CNVRT
;
; WEAPON 2 STUFF
;
;GET VELS FOR THIS PROJECTILE
MOVI 60,A1 ;AGE
MOVE A1,*A13(AGE),W
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 BALL,A2
; MOVI DMAWNZ,A4
MOVI DMAWNZ+M_PIXSCAN,A4
;TAKE OUT PIXSCAN?
;THESE BULLETS ARE PIXEL SCANNED! CHECK FLAGS TABLE
;FLAGS IN A4
RETS
WPN2A:
CALLR NEED
;ORBS X,Y POSITION HERE
;X IN A0, Y IN A1
MOVE @LASRX,A0,L
MOVE @LASRY,A1,L
MOVI CLSPLYR|TYPPLBL|SUBSPRY,A5
JRUC DO_IT
WPN2:
;WEAPON 2 - 3 BULLETS SPRAYED OUT
;MAKE MORE EFFICIENT!
;NOW STUFF CORRECT BULLET AND CORRECT FLIP INFO
CALLR NEED
MOVE *A8(OXVAL),A0,L
MOVE *A8(OYVAL),A1,L
MOVI X2_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 Y2_OFFSET,A8
ADD A3,A8
MOVE *A8,A8,L
ADD A8,A1
;YVAL IN A1
MOVI CLSPLYR|TYPPLBL|SUBSPRY,A5
JRUC DO_IT
STUFIT:
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
RETS
WPN1A:
;WEAPON 1 - NORMAL BULLET
;MAKE MORE EFFICIENT!
;NOW STUFF CORRECT BULLET AND CORRECT FLIP INFO
CALLR GET_CNVRT
MOVI 60*2,A1
MOVE A1,*A13(AGE),W
;
CALLR STUFIT
;ORBS X,Y POSITION HERE
;X IN A0, Y IN A1
MOVE @LASRX,A0,L
MOVE @LASRY,A1,L
MOVI CLSPLYR|TYPPLBL|SUBLZR,A5
JRUC DO_IT
WPN1:
;WEAPON 1 - NORMAL BULLET
;MAKE MORE EFFICIENT!
;NOW STUFF CORRECT BULLET AND CORRECT FLIP INFO
CALLR GET_CNVRT
MOVI 60,A1
MOVE A1,*A13(AGE),W
;
CALLR STUFIT
;THESE BULLETS ARE PIXEL SCANNED! CHECK FLAGS TABLE
;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 159,A3
;ZPOS IN A3
;XVEL IN A6
;YVEL IN A7
CALLA BEGINOBJ2
LP_TP:
;REGULAR BULLETS
MOVI [>21,>20],A2 ;23,21
MOVI [>FC,>173],A3
CALLA SCRTSTG
JRZ C1
;
;A0=1,2,3 OR 4 WHICH IS RETURNED FROM SCRTSTG!
;
MOVE A0,A10 ;KEEP B_DIR 1,2,3,OR 4
; NOW CHECK TO SEE IF BULLET IS PASSING THROUGH A GATE
CMPI 4,A0
JREQ BULLGN
;
;CHECK TO SEE IF BULLET IS WITHIN EDGES OF DOOR
;
MOVE A0,A1
SLL 5,A0
ADDI DRINF,A0
MOVE *A0,A0,L
MOVB *A0,A0
JREQ REGEXP
MOVE A1,A0
CALLR YESWALL
JRC REGEXP ;PROJECTILE HIT WALL NOT A DOORWAY
SLEEP 10
MOVE A8,A0
; CALLA DELPAL ;NEEDED? NO!!!!
CALLA DELOBJ
DIE
C1:
MOVB @PCNT,A0
ANDI 01H,A0
JRZ C1X
SLEEP 1 ;SLEEP 2 MAYBE?
JRUC LP_TP
C1X SLEEP 2 ;SLEEP 2 MAYBE?
JRUC LP_TP
;
YESWALL:
;
; COLLISION WITH WALL
;
MOVE @WORLDTL,A5,L
CMPI 3,A0
JRNE HZCK
MOVB @TOID_ON,A0
JRZ NOTOID
;BIGGER HOLE!
MOVX A5,A4
SLL 16,A4
MOVE *A8(OXVAL),A0,L
SUB A4,A0
CMPI GATELFT-2D0000H,A0
JRLT NO1
CMPI GATERGT+2D0000H,A0
JRGE NO1
JRUC KEEP_GOING
NOTOID MOVX A5,A4
SLL 16,A4
MOVE *A8(OXVAL),A0,L
SUB A4,A0
CMPI GATELFT,A0
JRLT NO1
CMPI GATERGT,A0
JRGE NO1
JRUC KEEP_GOING
;CHECK HORZ DOORWAYS
HZCK: MOVE *A8(OYVAL),A0,L
CLR A4
MOVY A5,A4
SUB A4,A0
CMPI GATETOP,A0
JRLT NO1
CMPI GATEBOT,A0
JRLT KEEP_GOING ;CHECK GATE STATE NOW
NO1:
SETC
RETS
KEEP_GOING:
;NOW CHECK TO SEE IF BULLET IS COLLIDING WITH TOP GATE.
CLRC ;INDICATES KEEP ON GOING THROUGH GATE
RETS
BULLGN
; ANYTHING ELSE TO DO HERE? WHEN DELETING AN OBJECT?
;
; DELETE OBJECT FROM OBJLST
;
MOVI TING,A0
CALLA ONESND
MOVE A8,A0
CALLA DELOBJ
DIE
REGEXP:
;REGULAR EXPLOSION HERE
MOVI TING,A0
CALLA ONESND
REGEXPNO
;ENTER HERE IF THIS BULLET DOES NOT WANT A TING SND
CLR A4
MOVE A4,*A8(OXVEL),L
MOVE A4,*A8(OYVEL),L
;CHANGE THE ID
MOVE *A8(OFLAGS),A0
ORI M_NOCOLL,A0
MOVE A0,*A8(OFLAGS)
;MAYBE TAKE THIS OID CHANGE OUT!
MOVI CLSNEUT|TYPNEUT,A0
MOVE A0,*A8(OID)
MOVI BULL_EXP_LIST,A2 ;MOVE BASE TABLE ADDRESS INTO A2
;A10=WALL 1,2,3 OR 4 WHICH WAS RETURNED FROM SCRTSTG
DEC A10
SLL 5,A10 ;BDIR*32 FOR LONG WORD LOOKUP TABLE
ADD A10,A2 ;CALCULATE OFFSET IN TABLE
MOVE *A2,A9,L ;MOVE TABLE VALUE INTO A4
;POSSIBLY PLACE THIS OBJECT ON ANOTHER LIST
;EXPLODE BULLET NOW!
MOVK 1,A1 ;COMMAND PASSED TO FRANIM
JSRP FRANIM
;NOW DELETE OBJECT FROM OBJLST
MOVE A8,A0
; CALLA DELPAL
CALLA DELOBJ
DIE
;UPDT_CNT:
; CLR A4
; MOVE A4,*A8(OXVEL),L
; MOVE A4,*A8(OYVEL),L
; MOVB @BLT_CNT,A3 ;DELETE A BULLET FROM CNT
; DEC A3
; MOVB A3,@BLT_CNT
; RETS
;
B1_TYP: ;NORMAL WEAPON (1)
.LONG 0,BULLETUP,BULLETUP,0,BULLETSIDE,BULLET45
.LONG BULLET45,BULLETSIDE,BULLET45,BULLET45
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!
;ADD M_PIXSCAN!
.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
X_OFFSET: ;NORMAL WEAPON (1)
.LONG 0,060000H,050000H,0,0100000H,0A0000H,0E0000H,0FFFFFFFBH
.LONG 040000H,060000H
Y_OFFSET: ;NORMAL WEAPON
.LONG 0,000000H,0120000H,0,050000H,040000H,00C0000H,050000H
.LONG 030000H,00B0000H
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
; .LONG GRND8,GRND4,0,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
; .LONG EXPb1
; .WORD 3 ;NEWPALET|3
; .LONG BULLET ;NEW PAL NAME
; .LONG EXPb2
; .WORD 3
; .LONG EXPb1
; .WORD 3
; .LONG 0
SIZZLE:
.LONG PODA
.WORD FLIPBITS|3,0
.LONG PODB
.WORD 3
.LONG PODC
.WORD 3
.LONG PODD
.WORD 3
.LONG PODB
.WORD 3
.LONG PODA
.WORD FLIPBITS|3,(M_FLIPH)
.LONG PODB
.WORD 3
.LONG PODC
.WORD 3
.LONG PODD
.WORD 3
.LONG PODB
.WORD 3
.LONG 0
.END