smashtv/SHOTS.ASM

3058 lines
49 KiB
NASM
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 '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