smashtv/RBOSS.ASM

2577 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.

.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 "FLATFACE.TBL"
;
;SOUNDS
;
.REF EXP3HI,MISS,VICMSC,OUCH,EXP3,EXP3HIA
.REF AWWSND,EESND,ONOSND,HA2SND,WPWPSND,WPSSND
.REF AWWSND2,MCSPK8
;
;SYMBOLS EXTERNALLY DEFINED
;
.REF RINGS,STATUS,CLNPAL
.REF ECON,FRANIM,BOOM2,BIG3,SCRADD2,P1DATA,P2DATA,CHEERS
.REF PSTOP,BOSSON,DEXIT,FLASHME
.REF GET_VALID_XY,GAMSTATE,WAVEYX,BEGINOBJ,BEGINOBJ2,EHALT
.REF RANDPER,RANDOM,RANGRAND,DRINF,SET_GATE_2,GET_WVADDR
.REF RANDU,SRAND,PLYROBJS,SCORPLAY,GETPLYR,OFSCRTST
.REF GETPLYR,OFSCRTST,ORBBNDCK
.REF FINDPAL,PALSET,GETFPAL
.REF SMLEXP,BOOM2,DOSHK0
.REF EXPTLXY,EXPLRXY,CLUSTER,SHAKER
.REF BOOM4,PCNT,CKPLYR,HALT
*
*SYMBOLS DEFINED IN THIS FILE
*
.DEF O_FACE
.DEF FLATFACE,FACBUL,FACEON,PUSHFC,BLOE2,STFVEL,COLCYC
.DEF VMAX,SPTPRC
;
.BSS SNDCNT,16
.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 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
.BSS CANFLG,16 ;CANNON ON FLAG
.BSS PUMLCNT,16
*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.
*
O_FACE
CREATE TYPFACE,FLATFACE
RETS
BOSSIT
;SHAKE SCREEN
MOVI EXP3HI,A0
CALLA ONESND
CALLA DOSHK0
SLEEP 5
CALLA DOSHK0
SLEEP 5
MOVI EXP3HI,A0
CALLA ONESND
CALLA DOSHK0
SLEEP 5
CALLA DOSHK0
MOVI EXP3HI,A0
CALLA ONESND
SLEEP 5
CALLA DOSHK0
CREATE 0,OCH
DIE
OCH SLEEP 23
MOVI NOWAY2,A0
CALLA ONESND
DIE
* 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
CREATE 0,BOSSIT
;FIRST FREE UP SOME PALS!
;GET RID OF UNEEDED PALS!
; SLEEP 8*60 ;FROM BEGIN OF SCROLL TO APPEAR ON SCREEN!
SLEEP 15 ;8
; MOVI DLST3,A1
; CALLA UNGET
CALLA CLNPAL
MOVK 1,A0
MOVE A0,@FACEON,W
MOVB A0,@BOSSON
CLR A0
MOVE A0,@CANFLG,W
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 >2E00000,A0
MOVE @WORLDTLY,A1,L
ADDI >800000,A1
CLR A11 ;DAMAGE LEVEL
CALLR RBINIT ;INITIALIZE FACE
SLEEP 3
MMTM SP,A8,A9,A10,A11
MOVI FCE1,A8 ;PAL NAME
MOVI PAL1,A9 ;RAM AREA
; .BSS PAL1,16*16*2 ;ALLOCATE 2 X COLOR AREA IN RAM
MOVI [53,61],A10 ;BEGIN/END COLOR #
MOVK 3,A11 ;RATE IN TICKS
CREATE CYCPID,COLCYC ;COLOR CYCLER ON
MMFM SP,A8,A9,A10,A11
SLEEP 2
; MOVI DLST,A1
; CALLA UNGET
CALLA CLNPAL
RBWAIT
SLEEP 2
MOVE @EHALT,A0
JRNZ RBWAIT ;WAIT FOR PLAYER TO ENTER
; MOVI DLST2,A1
; CALLA UNGET
CALLA CLNPAL
MOVE @STATUS,A0
CMPI 3,A0
JRZ P2A
CMPI 2,A0
JRZ P1A
MOVK 1,A9
MOVI 190,A10 ;TIME RINGS ARE ON
CREATE RNGPID,RINGS ;PLACE RING AROUND PLAYER X
JRUC P2OUT
P2A
MOVK 1,A9
MOVI 190,A10 ;TIME RINGS ARE ON
CREATE RNGPID,RINGS ;PLACE RING AROUND PLAYER X
P1A
MOVK 2,A9
MOVI 190,A10 ;TIME RINGS ARE ON
CREATE RNGPID,RINGS ;PLACE RING AROUND PLAYER X
P2OUT
MOVK 1,A0 ;REDO THIS CRAP FOR TURMELL BUG
MOVE A0,@FACEON,W
MOVB A0,@BOSSON
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 21,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 >20000,A5 ;>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
CMPI >40000,A5 ;MORE DAMP FOR HIGHER VELOCITY
JRHS MVV01C
SRA 1,A2
SRA 1,A3
MVV01C
SRA 3,A2 ;SUB OUT DAMPING FACTOR
SRA 3,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
MOVE @HALT,A0,W
JRNE RBOSS1 ;DONT FIRE UPON HALT
CALLR GETDMGE
SRL 1,A0
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
;MAYBE SOME GALAGAS
DLST2 .LONG YBG,WHITE,ORANGE,BLUE,GREEN,0
DLST .LONG GALP,GALP2,NUORB
DLST3 .LONG TKCOL1,GRNTG,PRZ,0; PALS TO WIPE
*FIRE PROB TABLE
FIRETAB .WORD 15,20,20,25,25,30,35,40
.WORD 40,40,40,40,50,50,60,60
*
*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
MOVK 1,A0
MOVE A0,@RBMODE,W ;MAKE SKULL HARDER TO PUSH
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
MOVE @HALT,A0,W
JRNE SKULP1 ;DONT FIRE UPON HALT
MOVI 52,A0 ;32 ;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
CALLA CKPLYR ;MAKE SURE PLAYER IS ALIVE
JREQ SKLFX
MOVI MISS,A0
CALLA ONESND
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
SKLFX
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
MMTM SP,A0
MOVI >60000,A0 ;LIMIT VELOCITIES
CALLA VMAX
MMFM SP,A0
MOVI photon1,A2 ;(OIMG)
MOVI 231,A3 ;(OZPOS)
MOVI DMAWNZ,A4 ;(OFLAGS) NON-ZERO VALUE
; MOVI CLSENMY|TYPCBALL,A5 ;(OID)
MOVI CLSENMY|TYPCBALL,A5 ;(OID)
; MOVI CLSENMY|TYPCBL2,A5 ;(OID)
CALLA BEGINOBJ2
CREATE 0,PHOTPRC ;PHOTON 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 DELPAL
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 MISS,A0
CALLA ONESND
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
JRUC BULLEXP
; 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
CALLA CKPLYR ;MAKE SURE PLAYER IS ALIVE
JREQ BSSFIRX
MOVI TYPFACE,A1
MOVI FIREP,A7
MOVI 320,A0 ;275
CALLA RANDPER
JRNC BOSSFIR1
MOVE @CANFLG,A0,W ;CANNON ALREADY ON?
JRNE BOSSFIR1 ;YES, DON'T FIRE
MOVI BOSSCAN,A7
BOSSFIR1
CALLA GETPRC
CALLA GETSPK
BSSFIRX
MMFM SP,A0,A1,A7
RETS
*
*SHOOT A CANNON VOLLEY AT YOU
*A8=BOSS DATA BLOCK PTR
*A11= PLAYER TO SHOOT
*
BOSSCAN
*OPEN YOUR MOUTH, DUDE !
MOVK 1,A0
MOVE A0,@CANFLG,W ;NO MORE CANNONS
MOVI BITE,A9
CALLR ANIBOSS
MOVI 10,A0
CALLA RANDU
ADDK 9,A0
BSSCNLP
CALLR CANST
DSJS A0,BSSCNLP
SLEEP 18
MOVI BITECL,A9 ;CLOSE YOUR MOUTH
CALLR ANIBOSS
SLEEP 37
CLR A0
MOVE A0,@CANFLG,W
DIE
*
*START A CANNON
*A8=BOSS DATA BLOCK PTR
*A11= PLAYER TO SHOOT
*
CANST
*FIRE OUT A BALL
MMTM SP,A0,A8
CALLA CKPLYR ;MAKE SURE PLAYER IS ALIVE
JREQ CANSTX
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(OYPOS),A1,W ;RANDOMIZE START A BIT
MOVK 5,A0
CALLA SRAND
ADD A0,A1
MOVK 5,A0
CALLA SRAND
MOVE *A4(OXPOS),A2,W
ADD A2,A0
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
MOVE A6,A2
MOVE A7,A3
ABS A2
ABS A3
ADD A2,A3
CMPI >28000,A3 ;IF VELOCITY TOO HIGH, HALVE IT
JRLS CANST1
SRA 1,A6
SRA 1,A7
CANST1
SLL 16,A0 ;ADJUST POSITION
SLL 16,A1
MOVI CNNBLL,A2 ;(OIMG)
MOVI 231,A3 ;(OZPOS)
MOVI DMAWNZ,A4 ;(OFLAGS) NON-ZERO VALUE
MOVI CLSENMY|TYPCBL2,A5 ;(OID)
CALLA BEGINOBJ2
CREATE 0,CANPRC ;SPITBALL PROCESS
MOVE A0,*A8(OPLINK),L ;FIX PROCESS LINK
CANSTX
MMFM SP,A0,A8
RETS
*
*CANNON BALL FLY PROCESS
*A8=CANNON OBJECT
*A10=COUNT
*PDATA=XACC, PDATA+>20=YACC
CANPRC:
MOVI 100,A10
CANPRCL
CALLA CLOSE ;CHECK TO SEE IF WE SHOULD EXPLODE BULLET!
JRC BULLEXP ;SET=EXP
MOVI [>1E,>21],A2
MOVI [>FC,>171],A3
CALLA SCRTSTG
JRNE BULLEXP
SLEEP 2
DSJS A10,CANPRCL
MOVE A8,A0
; CALLA DELPAL
CALLA DELOBJ
DIE
*
*SHOOT A FIREBALL AT YOU
*A8=BOSS DATA BLOCK PTR
*A11= PLAYER TO SHOOT
*
FIREP:
*OPEN YOUR MOUTH, DUDE !
MOVI BITE,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
MMTM SP,A0
MOVI >60000,A0 ;LIMIT VELOCITIES
CALLA VMAX
MMFM SP,A0
SLL 16,A0 ;ADJUST POSITION
SLL 16,A1
MOVI BLB1A,A2 ;(OIMG)
MOVI 231,A3 ;(OZPOS)
MOVI DMAWNZ,A4 ;(OFLAGS) NON-ZERO VALUE
MOVI CLSENMY|TYPCBALL,A5 ;(OID)
PUSH A8
CALLA BEGINOBJ2
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
*
*LIMIT VELOCITIES
*CALLING PARAMS: A0=LIMIT,A6=XV,A7,YV
*RET A6,A7 UNDER LIMIT A6+A7 < A0
VMAX
MMTM SP,A2,A3,A4,A5
MOVE A7,A5
MOVE A6,A4
SRA 3,A5
SRA 3,A4
VMAXL
MOVE A6,A2
MOVE A7,A3
ABS A2
ABS A3
ADD A2,A3
CMP A3,A0
JRHS VMAXX
SUB A4,A6
SUB A5,A7
JRUC VMAXL
VMAXX
MMFM SP,A2,A3,A4,A5
RETS
*
*SPIT BALL FLY PROCESS
*A8=SPIT BALL OBJECT
*A9=ANIMATION
*A10=COUNT
*PDATA=XACC, PDATA+>20=YACC
SPTPRC:
MOVI MISS,A0
CALLA ONESND
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 10,A10 ;6
FIREP00
MOVI SPITFLY,A9
FIREP0
MOVE *A8(OXVEL),A0,L ;DO SOME ACCELERATION
MOVE *A13(PDATA),A1,L
ADD A1,A0
MOVE A0,A1
ABS A1
CMPI >50000,A1 ;MAX IT OUT
JRHS FIREP01
MOVE A0,*A8(OXVEL),L
FIREP01
MOVE *A8(OYVEL),A0,L
MOVE *A13(PDATA+>20),A1,L
ADD A1,A0
MOVE A0,A1
ABS A1
CMPI >50000,A1 ;MAX IT OUT
JRHS FIREP02
MOVE A0,*A8(OYVEL),L
FIREP02
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
JRUC BULLEXP
; 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, A11=NEGATIVE FOR REVERSE CYCLER
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
; ABS A11
; JRNN COLCYCB
;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
COLCYCB
MOVE A8,*A13(PDATA+>20),L ;SAVE RAM ADDRESS
COLCYCBL
MOVE A8,A0 ;GET SOURCE ADDRESS
MOVE A10,A1 ;GET DESTINATION CONSTANT
MOVE *A13(PDATA),A2,W ;GET COUNT
CALLA PALSET
SUBK 16,A8
CMP A8,A9
JRLO CCYCBSLP
MOVE *A13(PDATA+>20),A8,L ;GET SOURCE TABLE START
CCYCBSLP
MOVE A11,A0 ;GET SLEEP TIME
CALLA PRCSLP
JRUC COLCYCBL
*
*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 BEGINOBJ2 ;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
MOVE @FACEYV,A1,L
MOVE @FACEXV,A0,L
SRA 1,A0
SRA 1,A1
ADD A3,A0
ADD A2,A1
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
*SUBSPEW2 06
BULSHTAB
.WORD 0,0,0,>FFFF,>FFFF,3,>FFFF,0
; .WORD 2,2,2,4,8,4,2,2 ;DAMAGE LEVEL
.WORD 2,2,2,4,6,4,1,1 ;DAMAGE LEVEL
.WORD >250,>250,>250,>500,>1000,>500,>250,>250 ;SCORE LEVEL
*
*PART OF BOSS MONSTER TAKES A HIT
*A8=OBJECT
*A0=WHAT HIT HIM
*
FACBUL
MMTM SP,A0
; MOVI EXP3HI,A0
; CALLA ONESND
MOVE @RBFLG,A0,W ;DUDE BLOWING?
BTST 0,A0
JRNE FACBULX ;YES, BAG IT
CMPI 2,A0
JRNE FCB00
CALLR GETDMGE
CMPI 210,A0
MMFM SP,A0
JRLS FACBUL0
MMTM SP,A0,A1,A7
MOVI RBOS1,A1 ;75K FOR BLOWING SKULL DUDE
CALLA SCORPLAY
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
CALLA GETSPK
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 16,A0
JRLS FCB01
MOVE @FACSTOR+DAMAGEL+((RTEYE-1)*64),A0,W
CMPI 16,A0
JRLS FCB01 ;EYES NOT BAGGED
CALLR GETDMGE ;GET DAMAGE COUNT
CMPI 510,A0
FCB01
MMFM SP,A0
JRLS FACBUL0
MMTM SP,A0,A1,A7
MOVI RBOS1,A1 ;75K FOR BLOWING HEAD
CALLA SCORPLAY
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 1,A1 ;REDUCE SHOT EFFECTIVENESS
SRA 1,A2
FACBUL00
SRA 2,A1
SRA 2,A2
SRA 1,A3
SRA 1,A4
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 5,A3
SRA 5,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 *A9(DAMAGEL),A3,W ;INCREMENT DAMAGE LEVEL
CMPI 20,A3
JRHS BOSSHIT00 ;NO SCORE IF MAX DAMAGE
MOVE *A10(100H),A1,W ;GET SCORE
MOVE *A8(OID),A2,W ;GET TYPE
SLL 28,A2
SRL 28,A2
CMPI SUBSHL,A2 ;EXTERIOR?
JRNZ CONT ;NO
;FLASH THIS SHELL PC
MMTM SP,A0,A1,A7,A9,A11
MOVI 34340000H,A9
CREATE 0,FLASHME
MMFM SP,A0,A1,A7,A9,A11
JRUC BSSHT000
CONT
CALLA SCORPLAY ;NO, TRIPLE SCORE INTERIOR
CALLA SCORPLAY
BSSHT000
CALLA SCORPLAY
BOSSHIT00
MOVE *A10(80H),A2,W ;GET DAMAGE DEGREE
MOVE @RBFLG,A1,W
JREQ BOSSHIT0
SRL 1,A2 ;SHIFT IT AGAIN FOR SKULL
BOSSHIT0
MOVE A0,-*SP,L
MOVI 210,A0 ;TOSSING OUT 20% OF HITS
CALLA RANDPER
MOVE *SP+,A0,L
JRC NODAM
ADD A2,A3
NODAM
CMPI 20,A3 ;MAX OUT AT 4x5
JRLS BOSSHIT1
CALLR PUMMEL ;PUMMEL UNDAMAMGED STUFF ON DEAD BANGING
MOVK 20,A3
BOSSHIT1
CALLR DAMASUB
BOSSHIT2
CALLR BULEXP
MMFM SP,A0,A1,A2,A3,A4,A9,A10
RETS
*
*DAMAGE ANIMATION SUB
*A3=DAMAGE LEVEL
*A9=STRUCT INDEX
DAMASUB
MOVE A3,*A9(DAMAGEL),W
CALLR BLOWEYE ;CHECK FOR EYE BLOW OUT
MOVB *A9(AFRAME),A1 ;GET FRAME POINTER
DEC A1
CMPI LSTANI,A1
JRHS DAMAX ;OUT OF RANGE
DAMA1
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 2,A3 ; 1/4 OF DAMAGE COUNT
SLL 5,A3 ;ADJUST FOR LONG WORD
ADD A3,A1
MOVE *A1,A1,L ;GET OIMG
JAUC ANI
DAMAX
RETS
*
*PUMMEL THE DUDE: DAMAGE OTHER SHIT EVENTUALLY ON DEAD BANGING
*A2= DAMAGE AMOUNT DOWN
PUMMEL
MMTM SP,A1,A2,A3,A4,A8,A9
MOVE @PUMLCNT,A1,W
ADDK 1,A1
MOVE A1,@PUMLCNT,W
SLL 28,A1 ;1 OF 16
JRNE PUMMLX
MOVI FACSTOR,A9
PUMLL
MOVE *A9,A8,L
JREQ PUMMLX
MOVE *A9(DAMAGEL),A3,W
CMPI 20,A3
JRHS PUMLLP
ADD A2,A3
CMPI 20,A3
JRLS PUMLL0
MOVK 20,A3
PUMLL0
CALLR DAMASUB
JRUC PUMMLX
PUMLLP
ADDI >40,A9
JRUC PUMLL
PUMMLX
MMFM SP,A1,A2,A3,A4,A8,A9
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 BEGINOBJ2
MOVI SMLEXP,A9
MOVE *A10(80H),A2,W ;GET DAMAGE DEGREE
SUBK 2,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
GETSPK
MMTM SP,A0
MOVE @SNDCNT,A0
INC A0
MOVE A0,@SNDCNT
ANDI 03H,A0
SLL 5,A0
ADDI SNDLST,A0
MOVE *A0,A0,L
CALLA ONESND
MMFM SP,A0
RETS
SNDLST .LONG AWWSND2,OUCH,EXP3HIA,ONOSND
*
*BULLET EXPLOSION ON FACE
*A8=OBJECT
*A9=ANIMATION
FEXPRC
MOVI 50,A0
CALLA RANDPER
JRNC FEXZ
;DO ROAR INSTEAD
CALLA GETSPK
JRUC FEXZ2
FEXZ
MOVI EXP3,A0 ;AUDIO BOMB EXPLODE
CALLA ONESND
FEXZ2
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 12,A3 ;TIME TO BLOW?
JRLO BLOIXX ;NO
SUB A2,A3
CMPI 12,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
CALLA GETSPK
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 BEGINOBJ2
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 0,RORS
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 EXP3HI,A0
CALLA ONESND
MOVI 15,A10
CALLR BLOCLUST
SLEEP 35
MOVI EXP3HI,A0
CALLA ONESND
MOVI 15,A10
CALLR BLOCLUST
SLEEP 45
MOVI EXP3HI,A0
CALLA ONESND
MOVK 2,A0
MOVE A0,*A13(PDATA),W
RBBLOLP
CALLR RBSUB
*REMAKE DUDE
MOVK 20,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
SLEEP 5
MOVI NOWAY2,A0
CALLA ONESND
DIE
NOWAY2 .WORD >F4FF-04H,>50,>803F,0 ;"NO WAY"
RORS SLEEP 40
CALLA GETSPK
SLEEP 60
CALLA GETSPK
SLEEP 60
CALLA GETSPK
DIE
*
*BLOW OUT THE SKULL DUDES
*
SKBLO
; CALLA GETSPK
*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
CREATE 0,EXPSNDS
MOVI EXP3HI,A0
CALLA ONESND
MOVI 15,A10
CALLR BLOCLUST
SLEEP 45
MOVI EXP3HI,A0
CALLA ONESND
MOVI 15,A10
CALLR BLOCLUST
SLEEP 45
MOVI OUCH,A0
CALLA ONESND
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
SLEEP 120
MOVI MCSPK8,A0
CALLA ONESND
SLEEP 100
MOVI HA2SND,A0
CALLA ONESND
;TURN ON VICTORY MUSIC!
MOVI VICMSC,A0
CALLA ONESND
SLEEP 60
CREATE 0,DEXIT
DIE ;ITS TOTALLY FUCKING OVER !!!!
EXPSNDS MOVK 30,A9
EXPM1 MOVI EXP3HI,A0
CALLA ONESND
SLEEP 15
DSJ A9,EXPM1
DIE
*
*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 BEGINOBJ2
CREATE 0,BIGGIE1
MMFM SP,A8
RETS
BIGGIE1
MOVI EXP3HI,A0
CALLA ONESND
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
CMPI 20,A3
JRLS ANIBSL1
MOVK 20,A3
ANIBSL1
SRL 2,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
LSTANI .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|SUBSHL
.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|SUBSHL
.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|SUBSHL
.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|SUBSHL
.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|SUBSHL
.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|SUBSHL
.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|SUBSHL
.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|SUBSHL
.WORD SHLLL8
*PART 27 LEFT INNER SHELL PIECE 1
.WORD DMAWNZ+M_PIXSCAN
.WORD CLSENMY|TYPFACE|SUBSHR
.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|SUBSHR
.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|SUBSHR
.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|SUBSHR
.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|SUBSHL
.WORD SHLLIN1
*PART 3 LEFT SKULL MOUTH
.WORD DMAWNZ+M_PIXSCAN
.WORD CLSENMY|TYPFACE|SUBSHR
.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|SUBSHL
.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|SUBSHL
.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|SUBSHL
.WORD SHLLIN4
*PART 13 LEFT SKULL EYE
.WORD DMAWNZ ;FLAGS
.WORD CLSENMY|TYPFACE|SUBSHR ;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 BLB4A
.WORD 4
.LONG BLB3A
.WORD 4
.LONG BLB2A
.WORD 4
.LONG BLB1A
.WORD 4
.LONG BLB4A
.WORD 4
.LONG BLB3A
.WORD 4
.LONG BLB2A
.WORD 4
.LONG BLB1A
.WORD 4
.LONG BLB4A
.WORD 4
.LONG BLB3A
.WORD 4
.LONG BLB2A
.WORD 4
.LONG BLB1A
.WORD 4
.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