.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