smashtv/BACKUP/RBOSS.NEW

2184 lines
42 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters!

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

.FILE 'RBOSS.ASM'
.TITLE 'ROBOT BOSS MODULE'
.WIDTH 132
.OPTION B,D,L,T
.MNOLIST
;
; INITIATED: JAN 9, 1990
; MODIFIED: FOREVER....
; SOFTWARE: EUGENE JARVIS
;
; COPYRIGHT (C) 1990 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"
.INCLUDE "MARK.EQU"
;
;SYMBOLS EXTERNALLY DEFINED
;
.REF ECON,FRANIM,BOOM2,BIG3,SCRADD2,P1DATA,P2DATA
.REF PEXPLSND,ONESND,PSTOP,PLYRPRCS
.REF GET_VALID_XY,GAMSTATE,WAVEYX,BEGIN_OBJ,BEGIN_OBJ2,EHALT
.REF RANDPER,RANDOM,RANGRAND,DRINF,SET_GATE_2,GET_WVADDR,DEXIT
.REF RANDU,SRAND,PLYROBJS,SCORPLAY,GETPLYR,OFSCRTST
.REF GETPLYR,SCORPLAY,OFSCRTST,ORBBNDCK
.REF FINDPAL,PALSET,DELPAL,GETFPAL
.REF BOMBSND
.REF SMLEXP,BOOM2
.REF EXPTLXY,EXPLRXY,CLUSTER,SHAKER
.REF SCORPLAY,BOOM4,PCNT
*
*SYMBOLS DEFINED IN THIS FILE
*
.DEF FLATFACE,FACBUL,FACEON,PUSHFC,BLOE2,STFVEL,COLCYC
;
.BSS RBFLG,16 ;RBOSS FLAG 0=HEAD,1=BLOWING,2=SKULL
.BSS FACEON,16
.BSS FACEXV,32 ;XVEL,YVEL
.BSS FACEYV,32
.BSS PAL1,16*16*2 ;ALLOCATE 2 X COLOR AREA IN RAM
; .BSS PAL2,64*16*2
.BSS PAL3,64*16*2
.BSS FACSTOR,35*16*4 ;FACE POINTER AREA
.BSS SKLFFLG,16 ;SKULL FIRE FLAG
.BSS RBANIFLG,16 ;ANIMATION IN PROGRESS FLAG
.BSS RBMODE,16 ;MODE FLAG
*BOSS ENEMY DATA OBJECT BLOCK STRUCT
*
OBJPTR .SET >0 ;IMAGE OBJECT POINTER
HITCNT .SET >20 ;IMAGE HIT COUNTER
AFRAME .SET >28 ;CURRENT ANIMATION FRAME
DAMAGEL .SET >30 ;DAMAGE LEVEL
*>040=IMAGE 1 ETC.
*
* ROBOT BOSS PROCESS
* A8=OBJECT BLOCK CONTAINING OBJECT POINTERS
* A9=ANIMATION SCRIPT FLAG
* A11=PLAYER TO SEEK
* A13=PROCESS
* PDATA+>40=XACC
* PDATA+>50=YACC
*
FLATFACE
***************************************
;TEMP PATCH FOR GALAGAS
***************************************
.REF GALST
.REF COBST
; JAUC GALST
JAUC COBST
***************************************
MOVK 1,A0
MOVB A0,@FACEON
MOVI FCE1,A8
MOVI PAL1,A9
MOVI [53,61],A10
MOVK 3,A11
CREATE 0,COLCYC ;COLOR CYCLER
CLR A0
MOVE A0,@RBMODE,W
MOVE A0,@RBFLG,W
MOVE A0,@FACEXV,L
MOVE A0,@FACEYV,L
MOVE A0,@SKLFFLG,W
MOVE A0,*A13(PDATA),W ;CLEAR ANIMATION POINTER
MOVE @WORLDTLX,A0,L ;GET STARTING COORD
ADDI >800000,A0
MOVE @WORLDTLY,A1,L
ADDI >800000,A1
CLR A11 ;DAMAGE LEVEL
CALLR RBINIT ;INITIALIZE FACE
RBWAIT
SLEEP 2
MOVE @EHALT,A0
JRNZ RBWAIT ;WAIT FOR PLAYER TO ENTER
CALLA GETPLYR ;FIND PLAYER TO SEEK
MOVE A0,A11
CALLR GETRBV ;GET ROBOT BOSS VELOCITY
RBLP:
MOVI 10,A0
CALLA RANDPER ;ANIMATE BOSS??
JRNC RBOSS0
*DO SOME ANIMATION HERE
MOVE @RAND,A0,W
ZEXT A0,W ;GET RID OF SIGN EXTEND
SRL 13,A0
SLL 6,A0
ADDI ANIANITB,A0
MOVE *A0+,A9,L
MOVE *A0,A10,L
CREATE TYPFACE,ANISEQ
RBOSS0
MOVI 150,A0 ;FOLLOW WITH EYES?
CALLA RANDPER
JRNC RBOSS01 ;NO
MOVE @RBANIFLG,A0,W
JRNE RBOSS01
CALLR FOLOEYE ;FOLLOW HIS EYES!!!!
RBOSS01
MOVI 200,A0 ;GET NEW VELOCITY?
CALLA RANDPER
JRNC MVV01 ;NO
CALLR GETRBV
MOVI 40,A0 ;GET NEW PLAYER TO SEEK
CALLA RANDPER
JRNC MVV01 ;NO
CALLA GETPLYR
MOVE A0,A11
MVV01
MOVI >28,A0 ;CHANGE CHASE MODE
CALLA RANDPER
JRNC MVV01A ;NO
CLR A1
CMPI 16,A0
JRLS MVV010
INC A1
MVV010
MOVE A1,@RBMODE,W
MVV01A
MOVE *A13(PDATA+>40),A2,W ;GET ACCELERATIONS
MOVE *A13(PDATA+>50),A3,W
MOVE @FACEXV,A0,L
MOVE @FACEYV,A1,L
MOVE A0,A4
MOVE A1,A5
ABS A4
ABS A5
ADD A4,A5
CMPI >30000,A5
JRHS MVV01B
SLL 2,A2 ;INCREASE THRUST FOR LOW VELOCITY
SLL 2,A3
MVV01B
ADD A0,A2
ADD A1,A3
MOVE A2,A0
MOVE A3,A1
SRA 4,A2 ;SUB OUT DAMPING FACTOR
SRA 4,A3
SUB A2,A0
SUB A3,A1
MOVE *A8,A8,L ;GET FIRST OBJECT
CALLA GETANIXY ;RET A2=YVAL,A3=XVAL
MOVE @WORLDTLX,A4,L ;ADJUST FOR SCREEN RELATIVE
MOVE @WORLDTLY,A5,L
SUB A4,A3
SUB A5,A2
MMTM SP,A2,A3
*ARE WE EMBEDDED IN SIDE?
CMPI >580000,A3
JRHS MVV02 ;NOT TO THE LEFT
SUBI >580000,A3 ;BRING HIM IN BOUNDS
JRUC MVV02A
MVV02
CMPI >1400000,A3
JRLS MVV03 ;NOT TO THE RIGHT
SUBI >1400000,A3
MVV02A
NEG A3
MOVE A3,A0
MVV03
CMPI >1B0000,A2
JRHS MVV04
SUBI >1B0000,A2
JRUC MVV04A
MVV04 CMPI >880000,A2
JRLS MVV05
SUBI >880000,A2
MVV04A
NEG A2
MOVE A2,A1
*CHECK FOR OUT AFTER VELOCITY ADD
MVV05
MMFM SP,A2,A3
ADD A0,A3
ADD A1,A2
CMPI >580000,A3
JRHS MVV06 ;NOT TO THE LEFT
CLR A0
MVV06
CMPI >1400000,A3
JRLS MVV07 ;NOT TO THE RIGHT
CLR A0
MVV07
CMPI >1B0000,A2
JRHS MVV08
CLR A1
MVV08 CMPI >880000,A2
JRLS MVV09
CLR A1
MVV09
MOVE A0,@FACEXV,L
MOVE A1,@FACEYV,L
MOVI FACSTOR,A8
CALLR STFVEL ;STUFF VELOCITY IN ALL PARTS
; CALLR RBBNDCK ;CHECK BOUNDARY COLLISION
CALLR GETDMGE
ANDI >000000F0,A0
ADDI FIRETAB,A0
MOVE *A0,A0,W ;GET FIRE PROBABILITY BASED ON DAMAGE TABLE
CALLA RANDPER
JRNC RBOSS1
CALLR BOSSFIRE
RBOSS1
SLEEP 2
JRUC RBLP
*FIRE PROB TABLE
FIRETAB .WORD 15,20,20,25,30,30,35,38
.WORD 40,40,40,40,40,40,40,40
*
*SKULL PROCESS
*
SKULPRC
MOVI FACSTOR,A8
MOVI SKEYE,A9 ;GET EYBALLS ANIMATING
MOVI 2,A10
CREATE TYPFACE,SKSEQ
CALLA GETPLYR ;FIND PLAYER TO SEEK
MOVE A0,A11
CALLR GETRBV ;GET SKULL VELOCITY
SKLP:
MOVI 100,A0 ;GET NEW VELOCITY?
CALLA RANDPER
JRNC SKV01 ;NO
CALLR GETRBV
MOVI 20,A0 ;GET NEW PLAYER TO SEEK
CALLA RANDPER
JRNC SKV01 ;NO
CALLA GETPLYR
MOVE A0,A11
SKV01
MOVE *A13(PDATA+>40),A2,W ;GET ACCELERATIONS
MOVE *A13(PDATA+>50),A3,W
MOVE @FACEXV,A0,L
MOVE @FACEYV,A1,L
ADD A0,A2
ADD A1,A3
MOVE A2,A0
MOVE A3,A1
SRA 4,A2 ;SUB OUT DAMPING FACTOR
SRA 4,A3
SUB A2,A0
SUB A3,A1
MOVE *A8,A8,L ;GET FIRST OBJECT
CALLA GETANIXY ;RET A2=YVAL,A3=XVAL
MOVE @WORLDTLX,A4,L ;ADJUST FOR SCREEN RELATIVE
MOVE @WORLDTLY,A5,L
SUB A4,A3
SUB A5,A2
MMTM SP,A2,A3
*ARE WE EMBEDDED IN SIDE?
CMPI >580000,A3
JRHS SKV02 ;NOT TO THE LEFT
SUBI >580000,A3 ;BRING HIM IN BOUNDS
JRUC SKV02A
SKV02
CMPI >1400000,A3
JRLS SKV03 ;NOT TO THE RIGHT
SUBI >1400000,A3
SKV02A
NEG A3
MOVE A3,A0
SKV03
CMPI >1B0000,A2
JRHS SKV04
SUBI >1B0000,A2
JRUC SKV04A
SKV04 CMPI >880000,A2
JRLS SKV05
SUBI >880000,A2
SKV04A
NEG A2
MOVE A2,A1
*CHECK FOR OUT AFTER VELOCITY ADD
SKV05
MMFM SP,A2,A3
ADD A0,A3
ADD A1,A2
CMPI >580000,A3
JRHS SKV06 ;NOT TO THE LEFT
CLR A0
SKV06
CMPI >1400000,A3
JRLS SKV07 ;NOT TO THE RIGHT
CLR A0
SKV07
CMPI >1B0000,A2
JRHS SKV08
CLR A1
SKV08 CMPI >880000,A2
JRLS SKV09
CLR A1
SKV09
MOVE A0,@FACEXV,L
MOVE A1,@FACEYV,L
MOVI FACSTOR,A8
CALLR STFVEL ;STUFF VELOCITY IN ALL PARTS
MOVI 25,A0 ;SHOOT DUDES OUT OF MOUTH??
CALLA RANDPER
JRNC SKULP1
MOVE @SKLFFLG,A0,W
JRNE SKULP1
MOVK 1,A0
MOVE A0,@SKLFFLG,W
CREATE TYPFACE,SKULFIRE
SKULP1
MOVI 25,A0 ;ANIMATE MOUTH??
CALLA RANDPER
JRNC SKULP2
MOVI SKMOUTH,A9,L
MOVK 20,A10
CREATE TYPFACE,ANISEQ
SKULP2
SLEEP 2
JRUC SKLP
GETSKV RETS
*
*SKULL FIRES PHOTON AT YOU
*A8=SKULL DATA BLOCK
*A11=PLAYER SKULL IS AFTER
*
SKULFIRE
MOVI >FFE00000,A4 ;X POS OFFSET
MOVI >200000,A5 ;Y POS OFFSET
CALLR SKLFSUB
MOVI >100000,A4 ;X POS OFFSET
MOVI >200000,A5 ;Y POS OFFSET
CALLR SKLFSUB
*BLINK OFF THE EYES
MOVI CLSENMY|TYPFACE|SUBER,A0
CLR A1
NOT A1
CALLA EXISTOBJ
MOVI >8000,A2
MOVE A2,*A0(OFLAGS),W
MOVE A0,A8
MOVI CLSENMY|TYPFACE|SUBEL,A0
CALLA EXISTOBJ
MOVE A2,*A0(OFLAGS),W
MOVE A0,A9
SLEEP 30
*TURN ON EYES
MOVI DMAWNZ+M_PIXSCAN,A2
MOVE A2,*A9(OFLAGS),W
MOVI DMAWNZ+M_PIXSCAN+M_FLIPH,A2
MOVE A2,*A8(OFLAGS),W
CLR A2
MOVE A2,@SKLFFLG,W ;DONE FIRING
DIE
SKLFSUB
MOVE *A11(OXVAL),A6,L
MOVE *A11(OYVAL),A7,L
MOVI FACSTOR,A8
MOVE *A8,A8,L ;GET OBJ POINTER TO FIRST PART
CALLA GETANIXY
MOVE A2,A1
MOVE A3,A0
ADD A4,A0
ADD A5,A1
SUB A0,A6 ;FIND DELTA
SUB A1,A7
SRA 5,A6 ;SHIFT TO CALC VELOCITY
SRA 5,A7
MOVE A2,A1
MOVE A3,A0
ADD A4,A0
ADDI >200000,A0 ;X ADJUST
MOVI photon1,A2 ;(OIMG)
MOVI 231,A3 ;(OZPOS)
MOVI DMAWNZ,A4 ;(OFLAGS) NON-ZERO VALUE
MOVI CLSENMY|TYPCBALL,A5 ;(OID)
CALLA BEGIN_OBJ2
CREATE 0,PHOTPRC ;SPITBALL PROCESS
MOVE A0,*A8(OPLINK),L ;FIX PROCESS LINK
RETS
BULLEXP
MOVE *A8(OIMG),A1,L ;ADJUST ANIMATION POINT TO TOPLEFT
MOVE *A1(>20),A2
NEG A2
MOVE *A8(OXPOS),A3,W
ADD A2,A3
MOVE A3,*A8(OXPOS),W
MOVE *A1(>30),A2
NEG A2
MOVE *A8(OYPOS),A3,W
ADD A2,A3
MOVE A3,*A8(OYPOS),W
MOVI MEDEXP,A9
MOVK 1,A1 ;COMMAND PASSED TO FRANIM
JSRP FRANIM
;
; DELETE OBJECT FROM OBJLST
;
MOVE A8,A0
CALLA DELOBJ
DIE
CLOSE
;OBJECT IN A8 CLOSE TO RANDOM PLAYER
;
MOVB @PCNT,A1
ANDI 01,A1
SLL 5,A1
MOVI PLYROBJS,A0,L
ADD A1,A0
MOVE *A0,A0,L
JRNZ BLO1
XORI 32,A1
ADDI PLYROBJS,A1,L
MOVE *A1,A0,L
JRNZ BLO1
NOEXP
CLRC
RETS
BLO1 MOVE *A8(OXPOS),A1
MOVE *A0(OXPOS),A2
;A0=PLAYER PNTR
ADDI 10,A2
SUB A1,A2
ABS A2
CMPI 16,A2 ;LEFT OF PLAYER
JRHI NOEXP
YSEXP
;A0=PLAYER PNTR
MOVE *A8(OYPOS),A1
MOVE *A0(OYPOS),A2
ADDI 15,A2
SUB A1,A2
ABS A2
CMPI 10H,A2 ;OVER PLYRS HEAD
JRHI NOEXP
YSEXP2
SETC
RETS
*
*PHOTON FLY PROCESS
*A8=PHOTON OBJECT
*A9=ANIMATION
*A10=COUNT
*PDATA=XACC, PDATA+>20=YACC
*
PHOTPRC:
MOVI >400,A0 ;GET XACC
CALLA SRAND
MOVE A0,*A13(PDATA),L
MOVI >400,A0 ;GET YACC
CALLA SRAND
MOVE A0,*A13(PDATA+>20),L
MOVK 24,A10
PHOTP00
MOVI PHOTFLY,A9
PHOTP0
MOVE *A8(OXVEL),A0,L ;DO SOME ACCELERATION
MOVE *A13(PDATA),A1,L
ADD A1,A0
MOVE A0,*A8(OXVEL),L
MOVE *A8(OYVEL),A0,L
MOVE *A13(PDATA+>20),A1,L
ADD A1,A0
MOVE A0,*A8(OYVEL),L
CALLR CLOSE ;CHECK TO SEE IF WE SHOULD EXPLODE BULLET!
JRC BULLEXP ;SET=EXP
SLEEP 1
CALLA ORBBNDCK ;BOUNCE BALLS OF WALL
MOVK 4,A1
JSRP FRANIM ;ANIMATE THE SUCKER
JRNC PHOTP0
DEC A10
JRGE PHOTP00
MOVE A8,A0
CALLA DELOBJ
CALLA DELPAL
DIE
*
*FOLLOW PLAYER WITH EYES
*A11=PLAYER TO FOLLOW
*A8=BOSS DATA STRUCT
*
FOLOEYE
MOVE *A8,A4,L ;GET BOSS COORD
MOVE *A4(OXPOS),A0,W
MOVE *A4(OYPOS),A1,W
MOVE *A11(OXPOS),A2,W
MOVE *A11(OYPOS),A3,W
SUB A3,A1 ;GET YOUR DELTA'S DUDES
SUB A2,A0
MOVE A1,A3
MOVE A0,A2
ABS A0
ABS A1
CMP A0,A1 ;DX OR DY BIGGER
JRLS FOLOX ;DX BIGGER
MOVI EYESUP,A9
MOVE A3,A3
JRNN FOLOXX
MOVI EYESDWN,A9
JRUC FOLOXX
FOLOX
MOVI EYESLFT,A9
MOVE A2,A2
JRNN FOLOXX
MOVI EYESRT,A9
FOLOXX
CALLR ANIBOSS
RETS
*
*FLATFACE FIRES SHIT AT YOU
*A8=FLATFACE DATA BLOCK
*A11=PLAYER FLATFACE IS AFTER
BOSSFIRE
MMTM SP,A0,A1,A7
CREATE TYPFACE,FIREP
MMFM SP,A0,A1,A7
RETS
*
*SHOOT A FIREBALL AT YOU
*A8=BOSS DATA BLOCK PTR
*A11= PLAYER TO SHOOT
*
FIREP:
*OPEN YOUR MOUTH, DUDE !
MOVI BLOW,A9
CALLR ANIBOSS
*FIRE OUT A BALL
MOVI 50,A0 ;GET GOAL X,Y
CALLA SRAND
MOVE A0,A1
MOVI 50,A0
CALLA SRAND
MOVE *A11(OXPOS),A6,W
MOVE *A11(OYPOS),A7,W
ADD A0,A6
ADD A1,A7
MOVE *A8,A4,L ;GET OBJ POINTER TO FIRST PART
MOVE *A4(OXPOS),A0,W
MOVE *A4(OYPOS),A1,W
ADDI >28,A0 ;ADJUST START COORD X ,Y
ADDI >40,A1
SUB A0,A6 ;FIND DELTA
SUB A1,A7
SLL 10,A6 ;SHIFT TO CALC VELOCITY
SLL 10,A7
SLL 16,A0 ;ADJUST POSITION
SLL 16,A1
MOVI SPTBLL1,A2 ;(OIMG)
MOVI 231,A3 ;(OZPOS)
MOVI DMAWNZ,A4 ;(OFLAGS) NON-ZERO VALUE
MOVI CLSENMY|TYPCBALL,A5 ;(OID)
PUSH A8
CALLA BEGIN_OBJ2
CREATE 0,SPTPRC ;SPITBALL PROCESS
MOVE A0,*A8(OPLINK),L ;FIX PROCESS LINK
PULL A8
SLEEP 18
MOVI BITECL,A9 ;CLOSE YOUR MOUTH
CALLR ANIBOSS
DIE
*
*SPIT BALL FLY PROCESS
*A8=SPIT BALL OBJECT
*A9=ANIMATION
*A10=COUNT
*PDATA=XACC, PDATA+>20=YACC
SPTPRC:
MOVI >400,A0 ;GET XACC
CALLA SRAND
MOVE A0,*A13(PDATA),L
MOVI >400,A0 ;GET YACC
CALLA SRAND
MOVE A0,*A13(PDATA+>20),L
MOVK 6,A10
FIREP00
MOVI SPITFLY,A9
FIREP0
MOVE *A8(OXVEL),A0,L ;DO SOME ACCELERATION
MOVE *A13(PDATA),A1,L
ADD A1,A0
MOVE A0,*A8(OXVEL),L
MOVE *A8(OYVEL),A0,L
MOVE *A13(PDATA+>20),A1,L
ADD A1,A0
MOVE A0,*A8(OYVEL),L
CALLR CLOSE ;CHECK TO SEE IF WE SHOULD EXPLODE BULLET!
JRC BULLEXP ;SET=EXP
SLEEP 1
CALLA ORBBNDCK ;BOUNCE BALLS OF WALL
MOVK 4,A1
JSRP FRANIM ;ANIMATE THE SUCKER
JRNC FIREP0
DEC A10
JRGE FIREP00
MOVE A8,A0
CALLA DELOBJ
CALLA DELPAL
DIE
*
*GET ROBOT BOSS VELOCITY
*A11=PLAYER TO SEEK
*RETURNS PDATA+>40 XACC; PDATA+>50 YACC
*
GETRBV
MOVI 50,A0
CALLA SRAND
MOVE A0,A1
MOVI 50,A0
CALLA SRAND
MOVE *A11(OXPOS),A2,W
MOVE *A11(OYPOS),A3,W
ADD A0,A2
ADD A1,A3
MOVE *A8,A4,L ;GET POINTER TO A PIECE
MOVE *A4(OXPOS),A0,W
MOVE *A4(OYPOS),A1,W
SUB A0,A2
SUB A1,A3
SLL 6,A2
SLL 6,A3
MOVE A2,*A13(PDATA+>40),W
MOVE A3,*A13(PDATA+>50),W
RETS
*
*CHECK ROBOT BOSS OUT OF BOUNDS
*A0,A1,A2,A3 DESTROYED
*
RBBNDCK:
PUSH A8
MOVE *A8,A8,L ;GET FIRST OBJECT
MOVI [>2E,>2A],A2 ;BOUNDS CHECK
MOVI [>98,>116],A3
CALLR OFPNTTST ;IS IT IN BOUNDS ?
JRNE MV0
MMFM SP,A8 ;ON SCREEN O.K.
RETS
MV0
MOVE *A8(OXVEL),A1,L
MOVE *A8(OYVEL),A2,L
DEC A0
JRNE MV01
ABS A1 ;MAKE XV POSITIVE
JRUC MV00
MV01
DEC A0
JRNE MV02
ABS A1 ;MAKE XV NEGATIVE
NEG A1
JRUC MV00
MV02
ABS A2
DEC A0
JREQ MV00 ;UP CASE
NEG A2 ;DOWN WALL CASE
MV00
MOVE A1,A0
MOVE A2,A1
MMFM SP,A8
CALLR STFVEL ;STUFF THE SUCKER WITH NEW VELS
RETS
*
*CHEAP COLOR CYCLER
*CYCLES ANY NUMBER OF COLORS
*A8=PALETTE NAME
*A9=RAM STORAGE AREA
*A10=MSW START COLOR, LSW END COLOR
*A11=SPEED
*
COLCYC
SLEEP 4
MOVE A8,A0
CALLA FINDPAL ;FIND PALETTE
JREQ COLCYC ;WAIT TILL IT SHOWS UP FOLKS...
*GET THE COLORS INTO RAM
CLR A1
MOVX A10,A1 ;GET END COLOR
SRL 16,A10 ;ADJUST START COLOR
SUB A10,A1 ;GET COUNT
MOVE A1,*A13(PDATA),W ;SAVE COUNT
MOVE A1,A4
SLL 4,A1 ;COUNT IN WORDS
MOVE A10,A5
SLL 4,A5 ;OFFSET INTO PALETTE
ADD A8,A5
ADDK 16,A5 ;SKIP PALETTE WORD COUNT
MOVE A9,A3
MOVE A9,A6
ADD A1,A6
MOVE A6,A8
COLCYC1
MOVE *A5+,A7,W ;TRANSFER IT TWICE
MOVE A7,*A3+,W
MOVE A7,*A6+,W
DSJS A4,COLCYC1
SRL 8,A0
SLL 8,A0
ADD A0,A10 ;COLRAM DESTINATION
MOVE A9,*A13(PDATA+>20),L ;SAVE RAM ADDRESS
COLCYCP
MOVE A9,A0 ;GET SOURCE ADDRESS
MOVE A10,A1 ;GET DESTINATION CONSTANT
MOVE *A13(PDATA),A2,W ;GET COUNT
CALLA PALSET
ADDK 16,A9
CMP A8,A9
JRLO CCYCSLP
MOVE *A13(PDATA+>20),A9,L ;GET SOURCE TABLE START
CCYCSLP
MOVE A11,A0 ;GET SLEEP TIME
CALLA PRCSLP
JRUC COLCYCP
*
*TEST IF OXPOS,OYPOS POINT OFF SCREEN
*A2=TOP LEFT Y:X SCREEN REL BOUNDARIES
*A3=BOT RT Y:X SCREEN REL BOUNDARIES
*A8=OBJECT
*RETURNS EQ IF ON SCREEN
*A0=LEFT=1,RIGHT=2,UP=3,DOWN=4 (OFF SCREEN)
OFPNTTST
MMTM SP,A1,A2,A3,A4
MOVE *A8(OYPOS),A0,W
MOVE *A8(OXPOS),A1,W
SLL 16,A0
MOVX A1,A0 ;GET TOP LEFT OF OBJECT
MOVE @WORLDTL,A1,L
SUBXY A1,A0 ;SUBTRACT OUT WORLD BASE
CLR A4
CMPXY A2,A0
JRYLE PNTTFU ;ABOVE...
JRXLE PNTTFL ;TO THE LEFT..
CMPXY A3,A0 ;IS IT LOWER THAN LOWER RT?
JRXGE PNTTFR ;TO THE RIGHT
JRYLT OFPNTTX ;NOT LOWER
PNTTFD INC A4
PNTTFU INC A4
PNTTFR INC A4
PNTTFL INC A4
OFPNTTX
MOVE A4,A0
MMFM SP,A1,A2,A3,A4
RETS
*
*INITIALIZE THE SKULL
*A0=XPOS,A1=YPOS,A11=DAMAGE LEVEL
*
SKINIT
MMTM SP,A2,A3,A12,A13
MOVI SKLTAB,A12 ;INIT ROBOT BOSS TABLE
JRUC RBI0
*
*INITIALIZE ROBOT BOSS
*A0=XPOS,A1=YPOS,A11=DAMAGE LEVEL
*
RBINIT
MMTM SP,A2,A3,A12,A13
MOVI RBITAB,A12 ;INIT ROBOT BOSS TABLE
RBI0
MMTM SP,A0,A1 ;SAVE XY COORDS
CREATE TYPFACE,STICKP ;STICK TOGETHER HEAD
MMFM SP,A0,A1
MOVI FACSTOR,A13
RBILP
MOVE *A12+,A4,W ;GET (OFLAGS)
JREQ RBIDON ;END OF LIST
BTST B_FLIPH,A4
JRZ RBI1
SUBI >50000,A0 ;BRING RIGHT SIDE BACK A FEW
RBI1
MOVE *A12+,A5,W ;GET (OID)
MOVE *A12+,A6,W ;GET ANI FRAME #
MOVB A6,*A13(AFRAME) ;STORE FRAME POINTER
DEC A6
MOVI RBANITB1-RBANITB,A7
MPYU A6,A7 ;ADJUST FOR LENGTH OF ENTRY
ADDI RBANITB,A7 ;ADD TABLE BASE
MOVE A11,A3 ;GET DAMAGE LEVEL
SRL 1,A3
SLL 5,A3 ;ADJUST FOR LONG WORD
ADD A3,A7
MOVE *A7,A2,L ;GET OIMG POINTER
CLR A6 ;(OXVEL)
CLR A7 ;(OYVEL)
MOVI 130,A3 ;(OZPOS)
CALLA BEGIN_OBJ2 ;STUFF OBJ
MOVE A13,*A8(OPLINK),L ;LINK OBJECT TO BLOCK STRUCTURE
MOVE A8,*A13,L ;SAVE POINTER TO GUY
MOVE A11,*A13(DAMAGEL),W ;INIT DAMAGE LEVEL
ADDI >40,A13 ;INCREMENT IT ALONG
JRUC RBILP
RBIDON
CLR A14
MOVE A14,*A13,L ;ZERO OUT LAST POINTER TO MARK END
MOVI FACSTOR,A8
MMFM SP,A2,A3,A12,A13
RETS
*
*PUSH THE FACE WITH RINGS
*A0=PLAYER
*A8=FLATFACE PART HIT
PUSHFC
MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8
CALLA GETANIXY ;A2=YVAL, A3=XVAL
MOVE *A0(OXVAL),A4,L
MOVE *A0(OYVAL),A5,L
ADDI >400000,A2 ;ADJUST YVAL FOR CENTER
SUB A4,A3 ;FORM DELTA X
SUB A5,A2 ;FORM DELTA Y
SRA 6,A3
SRA 6,A2
; MOVI [>30,>2C],A4 ;BOUNDS CHECK
; MOVI [>95,>113],A5
; MOVE *A8(OYPOS),A6,W
; MOVE *A8(OXPOS),A7,W
; SLL 16,A6
; MOVX A7,A6 ;GET TOP LEFT OF OBJECT
; MOVE @WORLDTL,A1,L
; SUBXY A1,A6 ;SUBTRACT OUT WORLD BASE
;
; CMPXY A4,A6
; JRYGT PUSH1 ;Y NOT OFF ABOVE...
; MOVE A2,A2
; JRNN PUSH1
; CLR A2 ;CAN NEG Y VEL
; CMPXY A4,A6
;PUSH1
; JRXGT PUSH2 ;X NOT OFF TO THE LEFT..
; MOVE A3,A3
; JRNN PUSH2
; CLR A3 ;CAN NEG X VEL
;PUSH2
; CMPXY A5,A6 ;IS IT LOWER THAN LOWER RT?
; JRXLT PUSH3 ;NOT OFF TO THE RIGHT
; MOVE A3,A3
; JRN PUSH3
; CLR A3 ;CAN PLUS XVEL
; CMPXY A5,A6 ;IS IT LOWER THAN LOWER RT?
;PUSH3
; JRYLT PUSH4 ;NOT OFF LOWER
; MOVE A2,A2
; JRN PUSH4
; CLR A2
; MMFM SP,A2,A3 ;FACE OUT OF BOUNDS, PUSH PLAYER
; SLL 2,A3
; SLL 2,A2
; MOVE *A1(OPLINK),A1,L ;RING PROCESS
; MOVB *A1(MYPLYR),A1 ;GET PLAYER #
; DEC A1
; SLL 5,A1
; ADDI PLYRPRCS,A1 ;GET TORSO OF PLAYER
; MOVE *A1,A1,L
; MOVE *A1(LEG_PTR),A1,L
; MOVE *A1(OXVAL),A4,L
; MOVE *A1(OYVAL),A5,L
; NEG A2
; NEG A3
; ADD A3,A4
; ADD A2,A5
; MOVE A4,*A1(OXVAL),L
; MOVE A5,*A1(OYVAL),L
; JRUC PUSHFCX
PUSH4
PUSHFC0
MOVE @FACEYV,A1,L
MOVE @FACEXV,A0,L
SRA 1,A0
SRA 1,A1
ADD A3,A0
ADD A2,A1
; MOVI FACSTOR,A8
; CALLA STFVEL ;STUFF NEW VELOCITY
MOVE A1,@FACEYV,L
MOVE A0,@FACEXV,L
PUSHFCX
MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8
RETS
*
*COUNT UP CUMULATIVE DAMAGE TO HEAD
*RETURNS DAMAGE TOTAL IN A0
*
GETDMGE
MMTM SP,A1,A8
CLR A0
MOVI FACSTOR,A8
GETDML
MOVE *A8,A1,L
JREQ GETDMX
MOVE *A8(DAMAGEL),A1,W
ADD A1,A0
ADDI >40,A8
JRUC GETDML
GETDMX
MMFM SP,A1,A8
RETS
*
*BULLET SUBTYPE SHIFT TABLE
*SUBLZR 01 ;REGULAR LAZER SHOTS
*SUBSPRY 02 ;SPRAY SUB TYPE
*SUBSPEW 03 ;SPEW TYPE WEAPON (3)
*SUBGRND 04 ;GRENADE
*SUBNOSTP 05 ;NON STOPPING BULLET
*
BULSHTAB
.WORD 0,0,0,>FFFF,>FFFF,3,0,0 ;VELOCITY FUNCTION
.WORD 1,1,1,2,4,2,1,1 ;DAMAGE LEVEL
.WORD >100,>100,>100,>200,>400,>200,>100,>100 ;SCORE LEVEL
*
*PART OF BOSS MONSTER TAKES A HIT
*A8=OBJECT
*A0=WHAT HIT HIM
*
FACBUL
MMTM SP,A0
MOVE @RBFLG,A0,W ;DUDE BLOWING?
BTST 0,A0
JRNE FACBULX ;YES, BAG IT
CMPI 2,A0
JRNE FCB00
CALLR GETDMGE
CMPI 100,A0
MMFM SP,A0
JRLS FACBUL0
MMTM SP,A0,A1,A7
CREATE 0,SKBLO ;BLOW THE SKULL
MOVK 3,A0
MOVE A0,@RBFLG,W
MMFM SP,A0,A1,A7
RETS
FCB00
*GROWL?
MOVI 100,A0
CALLA RANDPER
JRNC FCB000
MMTM SP,A8,A9,A10,A1,A7
MOVI GROWL,A9
MOVK 20,A10
MOVI FACSTOR,A8
CREATE TYPFACE,ANISEQ
MMFM SP,A8,A9,A10,A1,A7
FCB000
*CHECK IF EYES ARE BLOWN
MOVE @FACSTOR+DAMAGEL+((LFTEYE-1)*64),A0,W
CMPI 8,A0
JRLS FCB01
MOVE @FACSTOR+DAMAGEL+((RTEYE-1)*64),A0,W
CMPI 8,A0
JRLS FCB01 ;EYES NOT BAGGED
CALLR GETDMGE ;GET DAMAGE COUNT
CMPI 250,A0
FCB01
MMFM SP,A0
JRLS FACBUL0
MMTM SP,A0,A1,A7
CREATE 0,RBBLO
MOVK 1,A0
MOVE A0,@RBFLG,W ;DUDE IS BLOWING, IGNORE
MMFM SP,A0,A1,A7
RETS
FACBULX
MMFM SP,A0
RETS
FACBUL0
MMTM SP,A0,A1,A2,A3,A4,A9,A10
MOVE *A0(OXVEL),A1,L ;GIVE IT A PUSH
MOVE *A8(OXVEL),A3,L
MOVE *A0(OYVEL),A2,L
MOVE *A8(OYVEL),A4,L
CALLR POPFACE
MOVE @RBMODE,A10,W
JREQ FACBUL00
SRA 3,A1 ;REDUCE SHOT EFFECTIVENESS
SRA 3,A2
JRUC FACBULL01
FACBUL00
SRA 2,A1
SRA 1,A3
SRA 2,A2
SRA 1,A4
FACBULL01
MOVE *A0(OID),A10,W ;ISOLATE SUBTYPE
SLL 28,A10
SRL 24,A10
ADDI BULSHTAB,A10 ;VARIABLE SHIFT BASED ON SUBTYPE
MOVE *A10,A9,W
JRNN FACBUL1
*MOVE HEAD AWAY FROM PLAYER THAT SHOT IT
MMTM SP,A0,A3,A4
MOVE *A0(OPLINK),A1,L
MOVB *A1(MYPLYR),A1 ;A0=PLAYER NUMBER 1 OR 2
SLL 5,A1
ADDI PLYROBJS-32,A1
MOVE *A1,A9,L ;GET PLAYER POINTER
MOVE *A9(OXVAL),A1,L
MOVE *A9(OYVAL),A4,L
CALLA GETANIXY
ADDI >400000,A2 ;GET HEAD DELTA
SUB A1,A3 ;MOVE AWAY
SUB A4,A2
SRA 6,A3
SRA 6,A2
MOVE A3,A1
CALLA RANDOM ;GET RANDOM VELOCITY +-1
SRA 31,A0
SLL 18,A0
ADD A0,A1
CALLA RANDOM
SRA 31,A0
SLL 18,A0
ADD A0,A2
MMFM SP,A0,A3,A4
JRUC FACBUL2
FACBUL1
SLL A9,A1
SLL A9,A2
FACBUL2
ADD A3,A1
ADD A4,A2
MOVE A1,@FACEXV,L
MOVE A2,@FACEYV,L
MOVE *A8(OPLINK),A9,L ;GET HIS POINTER TO MASTER STRUCTURE
MOVE *A10(100H),A1,W ;GET SCORE
CALLA SCORPLAY
MOVE *A9(DAMAGEL),A3,W ;INCREMENT DAMAGE LEVEL
MOVE *A10(80H),A2,W ;GET DAMAGE DEGREE
ADD A2,A3
CMPI 10,A3 ;MAX OUT AT 2x5
JRLS BOSSHIT1
MOVK 10,A3
BOSSHIT1
MOVE A3,*A9(DAMAGEL),W
CALLR BLOWEYE ;CHECK FOR EYE BLOW OUT
MOVB *A9(AFRAME),A1 ;GET FRAME POINTER
DEC A1
MOVI RBANITB1-RBANITB,A2
MPYU A2,A1 ;ADJUST FOR LENGTH OF ENTRY
ADDI RBANITB,A1 ;ADD TABLE BASE
MOVE *A8(OFLAGS),A4,W ;GET FLAGS
SRL 1,A3
SLL 5,A3 ;ADJUST FOR LONG WORD
ADD A3,A1
MOVE *A1,A1,L ;GET OIMG
CALLA ANI ;ANIMATE IT
CALLR BULEXP
MMFM SP,A0,A1,A2,A3,A4,A9,A10
RETS
*
*POP FACE
*A1=DELTA X
*A2=DELTA Y
*A8=POINTER TO OBJECT POINTER BLOCK
*
POPFACE
MMTM SP,A1,A2,A3,A4,A8
MOVI FACSTOR,A8
SRA 2,A1
SRA 2,A2
POPFACP
MOVE *A8,A3,L
JREQ POPFACX ;ALL DONE, NULL POINTER
MOVE *A3(OXVAL),A4,L
ADD A1,A4
MOVE A4,*A3(OXVAL),L
MOVE *A3(OYVAL),A4,L
ADD A2,A4
MOVE A4,*A3(OYVAL),L
ADDI >40,A8
JRUC POPFACP
POPFACX
MMFM SP,A1,A2,A3,A4,A8
RETS
*
*FLATFACE BULLET EXPLOSION
*A0=BULLET
*A8=FACE PART
*A10=SUBTYPE TABLE INDEX
*
BULEXP
MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9
MOVE *A0(OYVAL),A1,L
MOVE *A0(OXVAL),A0,L
MOVI EXPb1,A2 ;(OIMG)
MOVI 231,A3 ;(OZPOS)
MOVI DMAWNZ,A4 ;(OFLAGS) NON-ZERO VALUE
MOVI CLSNEUT,A5 ;(OID)
CLR A6 ;XV
CLR A7 ;YV
CALLA BEGIN_OBJ2
MOVI SMLEXP,A9
MOVE *A10(80H),A2,W ;GET DAMAGE DEGREE
DEC A2
JRLS BULEXP1
MOVI BOOM4,A9
BULEXP1
CREATE 0,FEXPRC
MOVE A0,*A8(OPLINK),L ;FIX PROCESS LINK
MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9
RETS
*
*BULLET EXPLOSION ON FACE
*A8=OBJECT
*A9=ANIMATION
FEXPRC
MOVI BOMBSND,A0 ;AUDIO BOMB EXPLODE
CALLA ONESND
MOVK 1,A1
JSRP FRANIM
MOVE A8,A0 ;KILL THE SHIT AND DIE
CALLA DELOBJ
CALLA DELPAL
JAUC SUCIDE
*
*BLOW OUT THE EYE
*A0=WHAT HIT ME
*A2=DAMAGE ADD
*A3=DAMAGE LEVEL
*A8=EYE LOCATION
*
BLOWEYE
MMTM SP,A3
CMPI 6,A3 ;TIME TO BLOW?
JRLO BLOIXX ;NO
SUB A2,A3
CMPI 6,A3
JRHS BLOIXX
MMTM SP,A0,A1,A7,A9,A10,A11
MOVE *A8(OID),A9,W
ZEXT A9,W ;CAN SIGN EXTEND
CMPI CLSENMY|TYPFACE|SUBER,A9
JREQ BLOI1
CMPI CLSENMY|TYPFACE|SUBEL,A9
JRNE BLOIX
BLOI1
MOVE *A0(OXVEL),A10,L ;PASS VELOCITY
MOVE *A0(OYVEL),A11,L
CREATE 0,BLOEYEP
CREATE 0,BLOEYEP
CREATE 0,BLOEYEP
CREATE 0,BLOEYEP
BLOIX
MMFM SP,A0,A1,A7,A9,A10,A11
BLOIXX
MMFM SP,A3
RETS
*
*BLOW EYE PROCESS
*MAKE A BLOW EYE DUDE
*SPIN OF AT CONSTANT VEL AND DIE
*A8=EYE OBJECT
*A9=OID OF EYE
*A10=XV OF BULLET
*A11=YV OF BULLET
*
BLOEYEP:
MOVE *A8(OXVEL),A6,L ;GET EXISTING VELOCITY
MOVE *A8(OYVEL),A7,L
MOVI >28000,A0 ;GET RANDOM XV, YV
CALLA SRAND
ADD A0,A6
MOVI >28000,A0
CALLA SRAND
ADD A0,A7
SRA 3,A10
ADD A10,A6
SRA 3,A11
ADD A11,A7
SRA 2,A6 ;CUT DOWN VELOCITY
SRA 2,A7
MOVE *A8(OXVAL),A0,L
MOVE *A8(OYVAL),A1,L
CMPI CLSENMY|TYPFACE|SUBER,A9
JREQ BLOE1
ADDI >F0000,A0 ;ADJUST START COORD X ,Y
ADDI >E0000,A1
JRUC BLOE2
BLOE1
ADDI >180000,A0
ADDI >E0000,A1
BLOE2
MOVI EYEFLY,A9
BLOE2A
MOVI I1,A2 ;(OIMG)
MOVI 231,A3 ;(OZPOS)
MOVI DMAWNZ,A4 ;(OFLAGS) NON-ZERO VALUE
MOVI CLSNEUT|TYPNEUT,A5 ;(OID)
CALLA BEGIN_OBJ2
MOVK 1,A1
JSRP FRANIM ;ANIMATE THE SUCKER
MOVE A8,A0
CALLA DELOBJ
CALLA DELPAL
DIE
*
*BLOW OUT THE BOSS PARTS CHUNKER
*
RBSUB
MOVI FACSTOR,A9,L
MOVE *A9,A8,L
CALLA GETANIXY ;GET ANIMATION POINT A2=Y,A3=X
ADDI >400000,A2 ;ADJUST FOR CENTER
*
*GET PART VELOCITIES AND BLOW OUT
*
RBBLO1
MOVE *A8(OXPOS),A6,W
MOVE *A8(OSIZEX),A1,W
SRL 1,A1
ADD A1,A6
SLL 16,A6
SUB A3,A6
MOVE *A8(OYPOS),A1,W
MOVE *A8(OSIZEY),A4,W
SRL 1,A4
ADD A4,A1
SLL 16,A1
SUB A2,A1
SRA 3,A1
SRA 3,A6
MOVE A6,*A8(OXVEL),L
MOVE A1,*A8(OYVEL),L
MOVI CLSNEUT,A6 ;(OID)
MOVE A6,*A8(OID),W ;NEUTRAL OBJECT
CREATE 0,BLOPART ;CREATE BLOW APART PROCESS MONITOR
ADDI >40,A9
MOVE *A9,A8,L
JRNE RBBLO1
CALLR KILFACE
RETS
*
*BLOW A CLUSTER ABOUT THE HEAD
*A10= # TO BLOW OUT
*
BLOCLUST
MMTM SP,A2,A3,A8,A9
MOVI FACSTOR,A9,L
MOVE *A9,A8,L
CALLA GETANIXY ;GET ANIMATION POINT A2=Y,A3=X
MOVE @WORLDTLX,A8,L
SUB A8,A3 ;MAKE SCREEN RELATIVE
MOVE @WORLDTLY,A8,L
SUB A8,A2 ;MAKE SCREEN RELATIVE
ADDI >400000,A2 ;ADJUST FOR CENTER
SRL 16,A3 ;SHIFT DOWN XANI PT
SUBI >30,A3
SUBI >300000,A2
MOVX A3,A2
MOVE A2,@EXPTLXY,L ;EXPLOSION BOUNDARIES
ADDI >600060,A2
MOVE A2,@EXPLRXY,L
CALLA CLUSTER
MMFM SP,A2,A3,A8,A9
RETS
*KILL FACE PROCESSES
KILFACE
CLR A1
NOT A1
MOVI TYPFACE,A0 ;KILL ALL FACE PROCESSES
JAUC KILALL
*SHAKE THE BOSS, DUDE
BOSSHAK
MOVI >80000,A0
CALLA SRAND
MOVE A0,A1
MOVI >80000,A0
CALLA SRAND
MOVI FACSTOR,A8
CALLR STFVEL ;STUFF VELOCITY IN ALL PARTS
CALLR RBBNDCK ;MAKE SURE HE DOESN'T GO OUT
SLOOP 1,BOSSHAK
*
*BLOW OUT THE BOSS PROCESS
*
RBBLO
*SHAKE THE SCREEN AND MAKE CLUSTER BOMBS
CALLR KILFACE
CLR A1
CLR A0
MOVI FACSTOR,A8
CALLR STFVEL ;STUFF VELOCITY IN ALL PARTS
*ROLL EYES + GRIMACE RAPIDLY
*A9=ANI SEQ TABLE ADDR
*A10=SLEEP TIME
MOVI BLOW,A9 ;PUCKER UP
CALLR ANIBOSS
CREATE TYPFACE,BOSSHAK
MOVK 3,A11
MOVI BOSSROLL,A9
MOVK 8,A10
JSRP ANILP
MOVI GROWL,A9 ;GRIN AND BEAR IT !
CALLR ANIBOSS
CLR A1
CLR A0
MOVI FACSTOR,A8
CALLR STFVEL ;STUFF VELOCITY IN ALL PARTS
MOVI 120,A10
CALLA SHAKER
MOVI 15,A10
CALLR BLOCLUST
SLEEP 35
MOVI 15,A10
CALLR BLOCLUST
SLEEP 45
MOVK 2,A0
MOVE A0,*A13(PDATA),W
RBBLOLP
CALLR RBSUB
*REMAKE DUDE
MOVK 10,A11 ;MAX DAMAGE LEVEL
MOVE A3,A0
MOVE A2,A1
SUBI >400000,A1 ;GET INITIAL COORDS.
CALLR RBINIT ;INITIALIZE THE SKULL
MOVI FACSTOR,A8
MOVI GROWL,A9 ;GRIN AND BEAR IT !
CALLR ANIBOSS
SLEEP 16
DECW *A13(PDATA)
JRNE RBBLOLP
*START THE SKULL GOING
CALLR RBSUB
CLR A11
MOVE A3,A0
MOVE A2,A1
SUBI >400000,A1 ;GET INITIAL COORDS.
CALLR SKINIT ;INITIALIZE THE SKULL
CREATE TYPFACE,SKULPRC
MOVK 2,A0 ;SKULL IS HAPPENING
MOVE A0,@RBFLG,W
; MOVI FCE3,A8
; MOVI PAL3,A9
; MOVI [0,63],A10
; MOVK 1,A11
; CREATE 0,COLCYC ;COLOR CYCLER
DIE
*
*BLOW OUT THE SKULL DUDES
*
SKBLO
*SHAKE THE SCREEN AND MAKE CLUSTER BOMBS
CALLR KILFACE
CLR A1
CLR A0
MOVI FACSTOR,A8
CALLR STFVEL ;STUFF VELOCITY IN ALL PARTS
; MOVI FCE3,A8
; MOVI PAL3,A9
; MOVI [0,63],A10
; MOVK 1,A11
; CREATE 0,COLCYC ;COLOR CYCLER
MOVI 120,A10
CALLA SHAKER
MOVI 15,A10
CALLR BLOCLUST
SLEEP 45
MOVI 15,A10
CALLR BLOCLUST
SLEEP 45
MOVK 10,A0
MOVE A0,*A13(PDATA),W
SKBLOLP
CALLR RBSUB
*REMAKE DUDE
MOVI 5,A11 ;MAX DAMAGE LEVEL
MOVE A3,A0
MOVE A2,A1
SUBI >400000,A1 ;GET INITIAL COORDS.
CALLR SKINIT ;INITIALIZE THE SKULL
SLEEP 12
DECW *A13(PDATA)
JRNE SKBLOLP
*START THE SKULL GOING
CALLR RBSUB
DIE ;ITS TOTALLY FUCKING OVER !!!!
*
*BLOW THE PIECE OUT
*A8=PART
*
BLOPART
MOVI 30,A0
CALLA RANDU
ADDK 10,A0
MOVE A0,A10
BLOPARTL
DEC A10
JRN BLOPART1
SLEEP 1
MOVI [>23-5,>1A],A2 ;BOUNDS CHECK
MOVI [>FC,>171+5],A3
CALLA OFSCRTST ;IS IT OUT OF BOUNDS ?
JREQ BLOPARTL ;NO
BLOPART1
CALLR CENTEX
MOVE A8,A0
CALLA DELOBJ
CALLA DELPAL
DIE
*GET ACTUAL CENTER OF OBJECT
CENTEX
MMTM SP,A8
MOVE *A8(OXPOS),A0,W
MOVE *A8(OYPOS),A1,W
MOVE *A8(OSIZEX),A2,W
MOVE *A8(OSIZEY),A3,W
SRL 1,A2
SRL 1,A3
ADD A2,A0
ADD A3,A1
SLL 16,A0
SLL 16,A1
CLR A6
CLR A7
MOVI 199,A3 ;259
MOVI DMAWNZ|M_NOCOLL|M_FLIPV,A4 ;NON-ZERO VALUE
MOVI CLSNEUT|TYPNEUT,A5
MOVI EXPb1,A2
CALLA BEGIN_OBJ2
CREATE 0,BIGGIE1
MMFM SP,A8
RETS
BIGGIE1
MOVI BOOM2,A9
MOVK 1,A1
JSRP FRANIM
MOVE A8,A0
; CALLA DELPAL ;NEEDED? NOT IF IN PLYR PAL!
CALLA DELOBJ
DIE
*
*STICK TOGETHER PROCESS
*
STICKP
MOVI FACSTOR,A8
CALLR STICKER
SLOOP 6,STICKP
*
*HOLD BIG GUY TOGETHER
*A8=BIG GUY DATA BLOCK
*FOLLOW FIRST PIECE
STICKER
MMTM SP,A12,A13
MOVE A8,A9
MOVE *A8,A10,L ;FIRST PIECE INDEX
MOVE *A10(OIMG),A1,L
MOVE *A10(OSIZE),A2,L
MOVE *A10(OFLAGS),A4,W
CALLA GANIOF ;GET X Y ANI OFFSET
MOVE A6,A12 ;SAVE X ANIOFF
MOVE A7,A13 ;SAVE Y ANIOFF
JRUC STICK2
STICKL
MOVE *A8(OIMG),A1,L
MOVE *A8(OSIZE),A2,L
MOVE *A8(OFLAGS),A4,W
CALLA GANIOF ;GET X Y ANI OFFSET
BTST B_FLIPH,A4
JREQ STICK1
ADDI >50000,A6 ;ADJUST FLIP KLUDGE
STICK1
MOVE *A10(OXVAL),A0,L
ADD A12,A0
SUB A6,A0
MOVE A0,*A8(OXVAL),L
MOVE *A10(OYVAL),A1,L
ADD A13,A1
SUB A7,A1
MOVE A1,*A8(OYVAL),L
STICK2
ADDI >40,A9
MOVE *A9,A8,L ;GET NEXT INDEX
JRNE STICKL ;DONE STICKING
MMFM SP,A12,A13
RETS
*
*STUFF NEW VELOCITY INTO BOSS OBJECT
*A0=XVEL
*A1=YVEL
*A8=POINTER TO OBJECT POINTER BLOCK
STFVEL
MMTM SP,A2,A8
STFVELP
MOVE *A8,A2,L
JREQ STFVELX ;ALL DONE, NULL POINTER
MOVE A0,*A2(OXVEL),L
MOVE A1,*A2(OYVEL),L
ADDI >40,A8
JRUC STFVELP
STFVELX
MMFM SP,A2,A8
RETS
*
*STUFF NEW POSITION IN BOSS OBJECT
*
*A0=XPOS
*A1=YPOS
*A8=POINTER TO OBJECT POINTER BLOCK
*
STFPOS
MMTM SP,A2,A8
STFPOSP
MOVE *A8,A2,L
JREQ STFPOSX ;ALL DONE, NULL POINTER
MOVE A0,*A2(OXPOS),L
MOVE A1,*A2(OYPOS),L
ADDI >40,A8
JRUC STFPOSP
STFPOSX
MMFM SP,A2,A8
RETS
*
*SKULL SEQUENCER
*A11=ANI SEQ TABLE ADDR
*A10=SLEEP TIME
*
SKSEQ
MOVE A9,A11
SKSEQ0
MOVE A11,A9
SKSEQL
MOVE A10,A0
JSRP ANIBSEQ
JRNC SKSEQL ;FREE RUN FOREVER
JRUC SKSEQ0
*
*ANISEQ
*A9=ANI SEQ TABLE ADDR
*A10=SLEEP TIME
ANISEQ
INCW @RBANIFLG
ANISEQL
MOVE A10,A0
JSRP ANIBSEQ
JRNC ANISEQL
DECW @RBANIFLG
DIE
*ANILP
*A9=ANI SEQ TABLE ADDR
*A10=SLEEP TIME
*A11=LOOP COUNT
ANILP
MMTM A12,A9
ANILPL
MOVE A10,A0
JSRP ANIBSEQ
JRNC ANILPL
MMFM A12,A9
DEC A11
JRNE ANILP
RETP
*
*ANIMATE BOSS MONSTER FRAME
*A0=SLEEP TIME, 0= NO SLEEP
*A8=POINTER TO OBJECT POINTER BLOCK
*A9=ANIMATION SEQUENCE ADDR
*RET CS IF SEQ ENDED
ANIBSEQ
MOVE *A9,A1,W ;NULL FRAME?
JREQ ANIBSQX ;YES, ITS ALL OVER
CALLR ANIBOSS
CALLA PRCSLP
CLRC
RETP
ANIBSQX
SETC
RETP
*
*ANIMATE BOSS MONSTER
*A8=POINTER TO OBJECT POINTER BLOCK
*A9=ANIMATION TABLE ADDR
*RETS A9 POINTING TO NEXT FRAME
ANIBOSS
MMTM SP,A0,A1,A2,A3,A4,A7,A8,A10
MOVE A8,A10
ANIBSL
MOVB *A9,A7 ;GET PART NUMBER
ADDK 8,A9 ;INCREMENT POINTER
DEC A7
SLL 6,A7
ADD A10,A7
MOVE *A7,A8,L ;GET OBJECT POINTER
MOVB *A9,A1 ;GET NEW FRAME NUMBER
ABS A1
MOVB A1,*A7(AFRAME)
DEC A1 ;ELIMINATE 0 CASE
MOVI RBANITB1-RBANITB,A2
MPYU A2,A1 ;ADJUST FOR LENGTH OF ENTRY
ADDI RBANITB,A1 ;ADD TABLE BASE
MOVE *A7(DAMAGEL),A3,W ;GET DAMAGE LEVEL
SRL 1,A3
SLL 5,A3 ;ADJUST FOR LONG WORD
ADD A3,A1
MOVE *A1,A1,L ;GET OIMG
MOVE *A8(OFLAGS),A4,W ;GET FLAGS
CALLA ANI ;ANIMATE IT
ADDK 8,A9 ;INCREMENT POINTER
MOVB *A9(-8),A1 ;WAS LAST ENTRY NEG?
JRNN ANIBSL ;NOPE, STILL GOING
ANIBDON
MMFM SP,A0,A1,A2,A3,A4,A7,A8,A10
RETS
*
*ANIMATION SCRIPTS
*
*ANIMATION TABLE
*PART #, ANI FRAME
*NEG=END OF FRAME
*
*ANIMATION NUMBERS
GLASS .SET 1
SHLLL1 .SET 2
EYECNT .SET 3
EYEUP .SET 4
EYELFT .SET 5
EYEDWN .SET 6
EYERT .SET 7
EYEBUG .SET 8
MTHCL .SET 9
MTHGR .SET 10
MTHOP .SET 11
CHEEK .SET 12
NOSE .SET 13
SHLLL2 .SET 14
SHLLL3 .SET 15
SHLLL4 .SET 16
SHLLL5 .SET 17
SHLLL6 .SET 18
SHLLL7 .SET 19
SHLLL8 .SET 20
MTHBLO .SET 21
SHLLIN1 .SET 22
SKLL1 .SET 23
SKLL2 .SET 24
PHOT1 .SET 25
PHOT2 .SET 26
PHOT3 .SET 27
PHOT4 .SET 28
PHOT5 .SET 29
SHLLIN2 .SET 30
SHLLIN3 .SET 31
SHLLIN4 .SET 32
SKLLI .SET 33
*
*PART NUMBERS
LFTEYE .SET 5
RTEYE .SET 6
LFTMTH .SET 7
RTMTH .SET 8
*
*ANIANITB
*SEQ(32),TIME(32)
*
ANIANITB
.LONG BITE,8,BITE,15,ROLLEYES,10,BITE,20
.LONG ROLLEYES,30,ROLLEYES,15,BITE,10,GROWL,10
*OPEN MOUTH
*
BLOW
.BYTE LFTMTH,MTHBLO,RTMTH,-MTHBLO
BITE
.BYTE LFTMTH,MTHOP,RTMTH,-MTHOP
BITECL
.BYTE LFTMTH,MTHCL,RTMTH,-MTHCL
.WORD 0
*
*GROWL
*
GROWL
.BYTE LFTMTH,MTHGR,RTMTH,MTHGR
.BYTE LFTEYE,EYEBUG,RTEYE,-EYEBUG ;EYES BUGGED
.BYTE LFTMTH,MTHCL,RTMTH,MTHCL
.BYTE LFTEYE,EYECNT,RTEYE,-EYECNT ;EYES CENTERED
.WORD 0
*
*ROLL EYES
*
ROLLEYES
EYESUP
.BYTE LFTEYE,EYEUP,RTEYE,-EYEUP ;EYES UP
EYESLFT
.BYTE LFTEYE,EYELFT,RTEYE,-EYERT ;EYES LEFT
EYESDWN
.BYTE LFTEYE,EYEDWN,RTEYE,-EYEDWN ;EYES DOWN
EYESRT
.BYTE LFTEYE,EYERT,RTEYE,-EYELFT ;EYES RIGHT
.BYTE LFTEYE,EYEUP,RTEYE,-EYEUP ;EYES UP
.BYTE LFTEYE,EYEBUG,RTEYE,-EYEBUG ;EYES BUGGED
.BYTE LFTEYE,EYECNT,RTEYE,-EYECNT ;EYES CENTERED
.WORD 0
BOSSROLL
.BYTE LFTEYE,EYEUP,RTEYE,-EYEUP ;EYES UP
.BYTE LFTEYE,EYELFT,RTEYE,-EYELFT ;EYES LEFT
.BYTE LFTEYE,EYEDWN,RTEYE,-EYEDWN ;EYES DOWN
.BYTE LFTEYE,EYERT,RTEYE,-EYERT ;EYES RIGHT
.WORD 0
SKEYE
.BYTE LFTEYE,PHOT1,RTEYE,-PHOT5
.BYTE LFTEYE,PHOT2,RTEYE,-PHOT4
.BYTE LFTEYE,PHOT3,RTEYE,-PHOT3
.BYTE LFTEYE,PHOT4,RTEYE,-PHOT2
.BYTE LFTEYE,PHOT5,RTEYE,-PHOT1
.WORD 0
SKMOUTH
.BYTE 3,SKLL2,4,-SKLL2
.BYTE 3,SKLL1,4,-SKLL1
.WORD 0
.EVEN
*
*TABLE OF ROBOT BOSS ANIMATIONS
*0-255; 0=NULL
*FLAGS(16), OIMG(32) DAMAGE LEVEL 1-6
RBANITB
* 1 GLASS
.LONG GLSS1,GLSS2,GLSS3,GLSS4,GLSS5,GLSS5A
RBANITB1
* 2 OUTER SHELL PIECE 1
.LONG SHLL1,SHLL1A,SHLL1A,SHLL1B,SHLL1C,SHLL1D
* 3 EYE CENTERED
.LONG EYE1,EYE1,EYE6,EYE7,EYE8,EYE9
* 4 EYE UP
.LONG EYE2,EYE2,EYE6,EYE7,EYE8,EYE9
* 5 EYE LEFT
.LONG EYE3,EYE3,EYE6,EYE7,EYE8,EYE9
* 6 EYE DOWN
.LONG EYE4,EYE4,EYE6,EYE7,EYE8,EYE9
* 7 EYE RIGHT
.LONG EYE5,EYE5,EYE6,EYE7,EYE8,EYE9
* 8 EYE BUGGED
.LONG EYE10,EYE10,EYE6,EYE7,EYE8,EYE9
* 9 MOUTH CLOSED
.LONG MTH1,MTH1A,MTH1A,MTH1B,MTH1B,MTH1C
* 10 MOUTH GROWL
.LONG MTH2,MTH2A,MTH2A,MTH2B,MTH2B,MTH2C
* 11 MOUTH OPEN
.LONG MTH4,MTH4,MTH4A,MTH4B,MTH4B,MTH4C
* 12 CHEEK
.LONG CHCK1,CHCK1,CHCK1A,CHCK1A,CHCK1A,CHCK1B
* 13 NOSE
.LONG NSE1,NSE1A,NSE1A,NSE1B,NSE1B,NSE1C
* 14 OUTER SHELL PIECE 2
.LONG SHLL2,SHLL2A,SHLL2A,SHLL2B,SHLL2C,SHLL2D
* 15 OUTER SHELL PIECE 3
.LONG SHLL3,SHLL3A,SHLL3A,SHLL3B,SHLL3C,SHLL3D
* 16 OUTER SHELL PIECE 4
.LONG SHLL4,SHLL4A,SHLL4A,SHLL4B,SHLL4C,SHLL4D
* 17 OUTER SHELL PIECE 5
.LONG SHLL5,SHLL5A,SHLL5A,SHLL5B,SHLL5C,SHLL5D
* 18 OUTER SHELL PIECE 6
.LONG SHLL6,SHLL6A,SHLL6A,SHLL6B,SHLL6C,SHLL6D
* 19 OUTER SHELL PIECE 7
.LONG SHLL7,SHLL7A,SHLL7A,SHLL7B,SHLL7C,SHLL7D
* 20 OUTER SHELL PIECE 8
.LONG SHLL8,SHLL8A,SHLL8A,SHLL8B,SHLL8C,SHLL8D
* 21 MOUTH BLOWING
.LONG MTH3,MTH3A,MTH3A,MTH3B,MTH3B,MTH3C
* 22 INNER SHELL PIECE 1
.LONG FCSH1,FCSH1A,FCSH1A,FCSH1B,FCSH1B,FCSH1C
* 23 SKULL MOUTH CLOSED
.LONG SKLLM1,SKLLM1A,SKLLM1A,SKLLM1B,SKLLM1B,SKLLM1C
* 24 SKULL WITH MOUTH OPEN
.LONG SKLLM2,SKLLM2A,SKLLM2A,SKLLM2B,SKLLM2B,SKLLM2C
* 25 PHOTON 1 EYEBALL
.LONG photon1,photon1,photon1,photon1,photon1,photon1
* 26 PHOTON 2 EYEBALL
.LONG photon2,photon2,photon2,photon2,photon2,photon2
* 27 PHOTON 3 EYEBALL
.LONG photon3,photon3,photon3,photon3,photon3,photon3
* 28 PHOTON 4 EYEBALL
.LONG photon4,photon4,photon4,photon4,photon4,photon4
* 29 PHOTON 5 EYEBALL
.LONG photon5,photon5,photon5,photon5,photon5,photon5
* 30 INNER SHELL PIECE 2
.LONG FCSH2,FCSH2A,FCSH2A,FCSH2B,FCSH2B,FCSH2C
* 31 INNER SHELL PIECE 3
.LONG FCSH3,FCSH3A,FCSH3A,FCSH3B,FCSH3B,FCSH3C
* 32 INNER SHELL PIECE 4
.LONG FCSH4,FCSH4A,FCSH4A,FCSH4B,FCSH4B,FCSH4C
* 33 SKULL EYE PIECE
.LONG SKLLI1,SKLLI1A,SKLLI1A,SKLLI1B,SKLLI1B,SKLLI1C
*
*INITIALIZE ROBOT BOSS TABLE
*
RBITAB:
*PART 1 LEFT GLASS
.WORD DMAWNZ ;FLAGS
.WORD CLSENMY|TYPFACE|SUBGLL ;TYPE
.WORD GLASS ;ANIMATION #
*PART 2 RIGHT GLASS
.WORD DMAWNZ+M_FLIPH
.WORD CLSENMY|TYPFACE|SUBGLR
.WORD GLASS
*PART 3 LEFT OUTER SHELL PIECE 1
.WORD DMAWNZ+M_PIXSCAN
.WORD CLSENMY|TYPFACE|SUBSHL
.WORD SHLLL1
*PART 4 RIGHT OUTER SHELL PIECE 1
.WORD DMAWNZ+M_PIXSCAN+M_FLIPH
.WORD CLSENMY|TYPFACE|SUBSHR
.WORD SHLLL1
*PART 5 LEFT EYE
.WORD DMAWNZ
.WORD CLSENMY|TYPFACE|SUBEL
.WORD EYECNT
*PART 6 RIGHT EYE
.WORD DMAWNZ+M_FLIPH
.WORD CLSENMY|TYPFACE|SUBER
.WORD EYECNT
*PART 7 LEFT MOUTH CLOSED
.WORD DMAWNZ
.WORD CLSENMY|TYPFACE|SUBMTL
.WORD MTHCL
*PART 8 RIGHT MOUTH CLOSED
.WORD DMAWNZ+M_FLIPH
.WORD CLSENMY|TYPFACE|SUBMTR
.WORD MTHCL
*PART 9 LEFT CHEEK
.WORD DMAWNZ
.WORD CLSENMY|TYPFACE|SUBCKL
.WORD CHEEK
*PART 10 RIGHT CHEEK
.WORD DMAWNZ+M_FLIPH
.WORD CLSENMY|TYPFACE|SUBCKR
.WORD CHEEK
*PART 11 LEFT NOSE
.WORD DMAWNZ
.WORD CLSENMY|TYPFACE|SUBNSL
.WORD NOSE
*PART 12 RIGHT NOSE
.WORD DMAWNZ+M_FLIPH
.WORD CLSENMY|TYPFACE|SUBNSR
.WORD NOSE
*PART 13 LEFT OUTER SHELL PIECE 2
.WORD DMAWNZ+M_PIXSCAN
.WORD CLSENMY|TYPFACE|SUBSHL
.WORD SHLLL2
*PART 14 RIGHT OUTER SHELL PIECE 2
.WORD DMAWNZ+M_PIXSCAN+M_FLIPH
.WORD CLSENMY|TYPFACE|SUBSHR
.WORD SHLLL2
*PART 15 LEFT OUTER SHELL PIECE 3
.WORD DMAWNZ+M_PIXSCAN
.WORD CLSENMY|TYPFACE|SUBSHL
.WORD SHLLL3
*PART 16 RIGHT OUTER SHELL PIECE 3
.WORD DMAWNZ+M_PIXSCAN+M_FLIPH
.WORD CLSENMY|TYPFACE|SUBSHR
.WORD SHLLL3
*PART 17 LEFT OUTER SHELL PIECE 4
.WORD DMAWNZ+M_PIXSCAN
.WORD CLSENMY|TYPFACE|SUBSHL
.WORD SHLLL4
*PART 18 RIGHT OUTER SHELL PIECE 4
.WORD DMAWNZ+M_PIXSCAN+M_FLIPH
.WORD CLSENMY|TYPFACE|SUBSHR
.WORD SHLLL4
*PART 19 LEFT OUTER SHELL PIECE 5
.WORD DMAWNZ+M_PIXSCAN
.WORD CLSENMY|TYPFACE|SUBSHL
.WORD SHLLL5
*PART 20 RIGHT OUTER SHELL PIECE 5
.WORD DMAWNZ+M_PIXSCAN+M_FLIPH
.WORD CLSENMY|TYPFACE|SUBSHR
.WORD SHLLL5
*PART 21 LEFT OUTER SHELL PIECE 6
.WORD DMAWNZ+M_PIXSCAN
.WORD CLSENMY|TYPFACE|SUBSHL
.WORD SHLLL6
*PART 22 RIGHT OUTER SHELL PIECE 6
.WORD DMAWNZ+M_PIXSCAN+M_FLIPH
.WORD CLSENMY|TYPFACE|SUBSHR
.WORD SHLLL6
*PART 23 LEFT OUTER SHELL PIECE 7
.WORD DMAWNZ+M_PIXSCAN
.WORD CLSENMY|TYPFACE|SUBSHL
.WORD SHLLL7
*PART 24 RIGHT OUTER SHELL PIECE 7
.WORD DMAWNZ+M_PIXSCAN+M_FLIPH
.WORD CLSENMY|TYPFACE|SUBSHR
.WORD SHLLL7
*PART 25 LEFT OUTER SHELL PIECE 8
.WORD DMAWNZ+M_PIXSCAN
.WORD CLSENMY|TYPFACE|SUBSHL
.WORD SHLLL8
*PART 26 RIGHT OUTER SHELL PIECE 8
.WORD DMAWNZ+M_PIXSCAN+M_FLIPH
.WORD CLSENMY|TYPFACE|SUBSHR
.WORD SHLLL8
*PART 27 LEFT INNER SHELL PIECE 1
.WORD DMAWNZ+M_PIXSCAN
.WORD CLSENMY|TYPFACE|SUBSHL
.WORD SHLLIN1
*PART 28 RIGHT INNER SHELL PIECE 1
.WORD DMAWNZ+M_PIXSCAN+M_FLIPH
.WORD CLSENMY|TYPFACE|SUBSHR
.WORD SHLLIN1
*PART 29 LEFT INNER SHELL PIECE 2
.WORD DMAWNZ+M_PIXSCAN
.WORD CLSENMY|TYPFACE|SUBSHL
.WORD SHLLIN2
*PART 30 RIGHT INNER SHELL PIECE 2
.WORD DMAWNZ+M_PIXSCAN+M_FLIPH
.WORD CLSENMY|TYPFACE|SUBSHR
.WORD SHLLIN2
*PART 31 LEFT INNER SHELL PIECE 3
.WORD DMAWNZ+M_PIXSCAN
.WORD CLSENMY|TYPFACE|SUBSHL
.WORD SHLLIN3
*PART 32 RIGHT INNER SHELL PIECE 3
.WORD DMAWNZ+M_PIXSCAN+M_FLIPH
.WORD CLSENMY|TYPFACE|SUBSHR
.WORD SHLLIN3
*PART 33 LEFT INNER SHELL PIECE 4
.WORD DMAWNZ+M_PIXSCAN
.WORD CLSENMY|TYPFACE|SUBSHL
.WORD SHLLIN4
*PART 34 RIGHT INNER SHELL PIECE 4
.WORD DMAWNZ+M_PIXSCAN+M_FLIPH
.WORD CLSENMY|TYPFACE|SUBSHR
.WORD SHLLIN4
.WORD 0 ;END OF LIST
*
*INITIALIZE SKULL TABLE
*
SKLTAB:
*PART 1 LEFT INNER SHELL PIECE 1
.WORD DMAWNZ ;FLAGS
.WORD CLSENMY|TYPFACE|SUBSHL ;TYPE
.WORD SHLLIN1 ;ANIMATION #
*PART 2 RIGHT INNER SHELL PIECE 1
.WORD DMAWNZ+M_FLIPH
.WORD CLSENMY|TYPFACE|SUBSHR
.WORD SHLLIN1
*PART 3 LEFT SKULL MOUTH
.WORD DMAWNZ+M_PIXSCAN
.WORD CLSENMY|TYPFACE|SUBSHL
.WORD SKLL1
*PART 4 RIGHT SKULL MOUTH
.WORD DMAWNZ+M_PIXSCAN+M_FLIPH
.WORD CLSENMY|TYPFACE|SUBSHR
.WORD SKLL1
*PART 5 LEFT EYEBALL
.WORD DMAWNZ+M_PIXSCAN
.WORD CLSENMY|TYPFACE|SUBEL
.WORD PHOT1
*PART 6 RIGHT EYEBALL
.WORD DMAWNZ+M_PIXSCAN+M_FLIPH
.WORD CLSENMY|TYPFACE|SUBER
.WORD PHOT1
*PART 7 LEFT INNER SHELL PIECE 2
.WORD DMAWNZ ;FLAGS
.WORD CLSENMY|TYPFACE|SUBSHL ;TYPE
.WORD SHLLIN2 ;ANIMATION #
*PART 8 RIGHT INNER SHELL PIECE 2
.WORD DMAWNZ+M_FLIPH
.WORD CLSENMY|TYPFACE|SUBSHR
.WORD SHLLIN2
*PART 9 LEFT INNER SHELL PIECE 3
.WORD DMAWNZ ;FLAGS
.WORD CLSENMY|TYPFACE|SUBSHL ;TYPE
.WORD SHLLIN3 ;ANIMATION #
*PART 10 RIGHT INNER SHELL PIECE 3
.WORD DMAWNZ+M_FLIPH
.WORD CLSENMY|TYPFACE|SUBSHR
.WORD SHLLIN3
*PART 11 LEFT INNER SHELL PIECE 4
.WORD DMAWNZ ;FLAGS
.WORD CLSENMY|TYPFACE|SUBSHL ;TYPE
.WORD SHLLIN4 ;ANIMATION #
*PART 12 RIGHT INNER SHELL PIECE 4
.WORD DMAWNZ+M_FLIPH
.WORD CLSENMY|TYPFACE|SUBSHR
.WORD SHLLIN4
*PART 13 LEFT SKULL EYE
.WORD DMAWNZ ;FLAGS
.WORD CLSENMY|TYPFACE|SUBSHL ;TYPE
.WORD SKLLI ;ANIMATION #
*PART 14 RIGHT SKULL EYE
.WORD DMAWNZ+M_FLIPH
.WORD CLSENMY|TYPFACE|SUBSHR
.WORD SKLLI
.WORD 0 ;END OF LIST
*
*EYEBALL FLYING THROUGH THE AIR
*
EYEFLY
.LONG I1
.WORD 6
.LONG I2
.WORD 6
.LONG I3
.WORD 6
.LONG I4
.WORD 6
.LONG I5
.WORD 6
.LONG I6
.WORD 6
.LONG I6
.WORD FLIPBITS|6,M_FLIPH
.LONG I5
.WORD 6
.LONG I4
.WORD 6
.LONG I3
.WORD 6
.LONG I2
.WORD 6
.LONG I1
.WORD 6
.LONG 0
*
*PHOTON
*
PHOTFLY
.LONG photon1
.WORD 3
.LONG photon2
.WORD 3
.LONG photon3
.WORD 3
.LONG photon4
.WORD 3
.LONG photon5
.WORD 3
.LONG 0
*
*SPITBALL FLYING THROUGH THE AIR
*
SPITFLY
.LONG SPTBLL1
.WORD 2
.LONG SPTBLL2
.WORD 2
.LONG SPTBLL3
.WORD 2
.LONG SPTBLL4
.WORD 2
.LONG SPTBLL5
.WORD 2
.LONG SPTBLL6
.WORD 2
.LONG SPTBLL7
.WORD 2
.LONG SPTBLL8
.WORD 2
.LONG SPTBLL9
.WORD 2
.LONG SPTBLL10
.WORD 2
.LONG SPTBLL9
.WORD 2
.LONG SPTBLL8
.WORD 2
.LONG SPTBLL7
.WORD 2
.LONG SPTBLL6
.WORD 2
.LONG SPTBLL5
.WORD 2
.LONG SPTBLL4
.WORD 2
.LONG SPTBLL3
.WORD 2
.LONG SPTBLL2
.WORD 2
.LONG SPTBLL1
.WORD 2
.LONG 0
MEDEXP
.LONG EXPb1
.WORD NEWPALET|3
.LONG BULLET ;NEW PAL NAME
.LONG EXPb2
.WORD 3
.LONG EXPb3
.WORD 4
.LONG EXPb2
.WORD 5
.LONG EXPb1
.WORD 5
.LONG 0
.END