trog/TROGDIN2.ASM

1523 lines
33 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.

.MLIB "TROGMACS.LIB"
.FILE 'TROGDIN2.ASM'
.TITLE " <<< T R O G -- DINOSAUR ROUTINES, PART II >>>"
.WIDTH 132
.OPTION B,D,L,T
.MNOLIST
**************************************************************************
* *
* COPYRIGHT (C) 1990 MIDWAY MANUFACTURING COMPANY, *
* MANUFACTURERS OF BALLY/MIDWAY AMUSEMENT GAMES. *
* ALL RIGHTS RESERVED. *
* *
**************************************************************************
* GET THE SYSTEM STUFF
.INCLUDE "MPROCEQU.ASM" ;MPROC equates
.INCLUDE "DISPEQU.ASM" ;Display processor equates
.INCLUDE "GSPINC.ASM" ;GSP assembler equates
.INCLUDE "SYSINC.ASM" ;Zunit system equates
.INCLUDE "IMGTBL.GLO"
.INCLUDE "TROGEQU.ASM"
.INCLUDE "TROGAEQU.ASM" ;GET THE ANIMATION EQUATES
.INCLUDE "TROGSEQU.ASM"
.DEF DINOFLY_ANIM, DINOCHEER_ANIM, SEE_STARS, FREEZE_EM
.DEF DINO_LOOK_HOME, SPIT_FIRE, FIREBALL, DINOS_NEAR_PNT
.DEF ENEMIES_NEAR_PNT, OBJ_NEAR_CENT, OBJ_WHOLE_CENT
.DEF PUNCHED, FIREBALL_XFER, ANIMATE_BUTTON, SLEEP_START
.DEF DINO_PUNCHED
.REF GETMOVE, CENTER_CHECK, FREEZE_TIME, POWERUP_DURATION
.REF LOAD_DIR, GPLAYNUM, FIRESTART_SND, FIREOUT_SND
.REF DINOWXFER, FRANIMATE_DIR, GPLAYD, TROGWXFER
.REF TROGSSDEATH_OLD_RET, TROGDEATH_OLD_RET, BONUS_WAVE
.REF LOAD_DIR, DELETE_TROG, WHEEL_STOP, WHL_OOF, WHL_KO_HITS
.REF FB_HOUSE
.TEXT
**************************************************************************
* *
* SLEEP_START - SLEEP THE GIVEN NUMBER OF TICKS OR UNTIL THE PLAYERS *
* START BUTTON IS PRESSED. *
* A0 = TICKS TO SLEEP *
* A2 = PLAYER DATA AREA *
* RETURNS *
* Z = SLEPT ENTIRE DURATION *
* A0 = 0 *
* NZ = EARLY ESCAPE DUE TO SWITCH *
* A0 = TICKS REMAINING *
* NOTE: CALL WITH JSRP *
* A2 IS DESTROYED *
* *
**************************************************************************
SLEEP_START
MMTM A12,A10,A11
MOVE A2,A11
MOVE A0,A10
CLRM *A11(PSTARTESC),W
SS_LOOP
SLEEP 1
MOVE *A11(PSTARTESC),A0,W
JRNE SS_X
DSJS A10,SS_LOOP
SS_X
MOVE A10,A0
MMFM A12,A10,A11
RETP
**************************************************************************
* *
* ANIMATE_BUTTON - ANIMATE A DINOSAUR SCRIPT TO COMPLETION. ESCAPE FROM *
* CURRENT FRAME IS GAINED BY HITTING THE PLAYER BUTTON. *
* A8 = PTR TO DINO *
* A9 = PTR TO SCRIPT TO ANIMATE *
* A13 = PTR TO DINO PROCESS (MOST IMPORTANT) *
* RETURNS: *
* A9 = NEXT WORD AFTER ANIMATION SCRIPT *
* NOTE: CALL WITH JSRP *
* *
**************************************************************************
ANIMATE_BUTTON
MMTM A12,A10,A11
MOVE *A13(DPLAYER),A11,L
AB_NEXT
MOVK 4,A1
JSRP FRANIM
JRC AB_X
MOVE A0,A10
CLRM *A11(PSWITCHESC),W
AB_SLOOP
SLEEP 1
MOVE *A11(PSWITCHESC),A0,W
JRNZ AB_NEXT
DSJS A10,AB_SLOOP
JRUC AB_NEXT
AB_X
MMFM A12,A10,A11
RETP
**************************************************************************
* *
* PUNCHED - ROUTINE TO DETERMINE IF ONE OBJECT COULD HAVE PUNCHED *
* ANOTHER. *
* A0 = PUNCHER *
* A1 = PTR TO PUNCHER PROCESS *
* A6 = PUNCHER MOVE POINT ROUTINE *
* A7 = PUNCHEE MOVE POINT ROUTINE *
* A8 = PUNCHEE *
* RETURNS: *
* Z = YES, HE COULD HAVE PUNCHED *
* NZ = NO CHANCE *
* NOTE: TRASHES A1,A3,A6,A7 *
* *
**************************************************************************
PUNCHED
PUSH A5
MOVB *A1(DPUNCHFLG),A5
CMPI 2,A5
JRNE PUNCHED_X
MOVE A1,A5
MMTM SP,A0,A8
MOVE A0,A8
CALL A6
MOVE A3,A6
PULL A8
CALL A7
PULL A0
CMP A3,A6
JREQ PUNCHED_X
MOVE *A5(DDIR),A7,W
CMPI UP,A7
JREQ TD_UP
CMPI DOWN,A7
JREQ TD_DOWN
CMPI LEFT,A7
JREQ TD_LEFT
CMPXY A6,A3
JRYNE PUNCHED_FAIL ;BR = NOT ON THE SAME Y LINE
JRXGT PUNCHED_SUCC
JRUC PUNCHED_FAIL
TD_LEFT
CMPXY A6,A3
JRYNE PUNCHED_FAIL ;BR = NOT ON THE SAME Y LINE
JRXLT PUNCHED_SUCC
JRUC PUNCHED_FAIL
TD_DOWN
CMPXY A6,A3
JRXNE PUNCHED_FAIL ;BR = NOT ON THE SAME X LINE
JRYGT PUNCHED_SUCC
JRUC PUNCHED_FAIL
TD_UP
CMPXY A6,A3
JRXNE PUNCHED_FAIL ;BR = NOT ON THE SAME X LINE
JRYGE PUNCHED_FAIL
PUNCHED_SUCC
CLR A5
JRUC PUNCHED_X
PUNCHED_FAIL
CLR A5
INC A5
PUNCHED_X
PULL A5
RETS
**************************************************************************
* *
* DINO_PUNCHED - SPECIAL CASE ROUTINE TO DETERMINE IF PLAYER DINO OBJECT *
* COULD HAVE PUNCHED AN ENEMY. *
* A0 = PUNCHER *
* A1 = PTR TO PUNCHER PROCESS *
* A6 = PUNCHER MOVE POINT ROUTINE *
* A7 = PUNCHEE MOVE POINT ROUTINE *
* A8 = PUNCHEE *
* RETURNS: *
* Z = YES, HE COULD HAVE PUNCHED *
* NZ = NO CHANCE *
* NOTE: TRASHES A1,A3,A6,A7 *
* *
**************************************************************************
DINO_PUNCHED
PUSH A5
MOVB *A1(DPUNCHFLG),A5
CMPI 2,A5
JRNE PUNCHED_X
MOVE A1,A5
MMTM SP,A0,A8
MOVE A0,A8
CALL A6
MOVE A3,A6
PULL A8
CALL A7
PULL A0
CMP A3,A6
JREQ PUNCHED_X
MOVE *A5(DDIR),A7,W
CMPI UP,A7
JREQ DTD_UP
CMPI DOWN,A7
JREQ DTD_DOWN
CMPI LEFT,A7
JREQ DTD_LEFT
CMPXY A6,A3
JRXGT PUNCHED_SUCC
JRUC PUNCHED_FAIL
DTD_LEFT
CMPXY A6,A3
JRXLT PUNCHED_SUCC
JRUC PUNCHED_FAIL
DTD_DOWN
CMPXY A6,A3
JRYGT PUNCHED_SUCC
JRUC PUNCHED_FAIL
DTD_UP
CMPXY A6,A3
JRYGE PUNCHED_FAIL
JRUC PUNCHED_SUCC
**************************************************************************
* *
* SPIT_FIRE - PROCESS TO HANDLE THE DINOSAUR SPITTING FIRE BALLS FOR *
* SOME AMOUT OF TIME. *
* A8 = PTR TO THE DINOSAUR *
* A10 = PTR TO THE DINOSAUR PROCESS *
* *
**************************************************************************
SPIT_FIRE
MOVE @BONUS_WAVE,A0,W
JRNE SF_SKIP_SOUND
SOUND1 CHILI_SND
SF_SKIP_SOUND
MOVE *A13(PROCID),A0,W
CLR A1
NOT A1
CALLA EXISTP ;IS THERE ALREADY A CHILI PROC
JRZ SF_NEW ;BR = NEW, CREATE DUDE, CREATE!
CALLA GETA11
ADDM @POWERUP_DURATION,A11,W
CALLA PUTA11
DIE
SF_NEW
MOVK 1,A0
MOVB A0,*A10(DFIREFLG)
**** MOVE A10,A0
**** CALLA GETA9 ;CURRENT DINO FRAME PTR
**** MOVE *A10(DWALKFRM),A1,L ;AND HIS CURRENT WALK FRAME
**** CMP A1,A9 ;ARE THEY EQUAL
**** JREQ SF_STUFF ;BR = YES, STUFF SPIT WALK
**** SWAP A1,A9
**** CALLA FRAMSKIP ;CHECK NEXT FRAME JUST IN CASE
**** CMP A1,A9 ;SAME AS INDICATED WALKER?
**** JRNE SF_NOSTUF ;BR = NO, THEN DON'T STUFF
****SF_STUFF
**** SWAP A13,A10
**** MOVI SPITFIREU,A0
**** CALLA LOAD_DIR ;LOAD THE NEW ANIMATION
**** SWAP A13,A10
**** MOVE A9,*A10(DWALKFRM),L
**** MOVE A10,A0
**** CALLA PUTA9
SF_NOSTUF
MOVE @POWERUP_DURATION,A11,W
SF_WAIT
SLEEP 5
SUBK 5,A11
JRGT SF_WAIT
SF_WAIT_BONUS
MOVE @BONUS_WAVE,A0,W
JREQ SF_DONE
SLOOP 10,SF_WAIT_BONUS
SF_DONE
CLR A0
MOVB A0,*A10(DFIREFLG)
DIE
**************************************************************************
* *
* FIREBALL - PROCESS TO MAKE THE DINO SHOOT A FIRE BALL *
* OUT OF HIS MOUTH. *
* A8 = PTR TO THE DINOSAUR. *
* A10 = [Y,X] OFFSET FOR DINO FIREBALL *
* *
**************************************************************************
FIREBALL
MOVE *A8(OPLINK),A4,L ;GET THE DINOS PROCESS
JRZ FB_DIE ;BR = NONE AROUND
MOVE *A4(DDIR),A11,W ;GET THE DINOSAURS DIRECTION
CMPI LEFT,A11
JRNE FB_ADDXY
CLR A3
MOVX A10,A3
SEXT A3
NEG A3 ;MUST NEGATE X IN THE LEFT DIRECTION
MOVX A3,A10
FB_ADDXY
CALLA GETANIXY_PACKED
ADDXY A10,A3 ;NOW WE HAVE A STARTING POSITION
MOVI FB_INIT,A5
CALLA CREATE_OBJ
JRZ FB_DIE
MOVE A8,A6
MOVE A13,*A0(OPLINK),L
MOVE A0,A8
SWAP A13,A4
CLR A0
CALLA LOAD_DIR
SWAP A13,A4
MOVE *A8(OYVEL),A1,L
SLL 2,A1
MOVE *A8(OXVEL),A2,L
SLL 2,A2
MOVE A1,*A8(OYVEL),L
MOVE A1,*A8(OZVEL),L
MOVE A2,*A8(OXVEL),L
MOVE *A6(OZVAL),A1,L
CMPI UP,A11
JRNE FB_FIREIT
SUBI [2,0],A1
FB_FIREIT
MOVE A1,*A8(OZVAL),L
MOVE *A4(DPLAYER),A2,L
JRZ FB_NOPLYR
CALLA GPLAYNUM
ORM A0,*A8(OID),W
FB_NOPLYR
CALLA OBJ_TO_PNT
SLL 5,A11
ADDI FB_TABLE,A11
MOVE *A11,A9,L
MOVK 4,A1
JSRP FRANIM
MOVI DINOS,A1
CALLA INSERT_OBJ_SUPP
SLEEPR A0
FB_LP
CLR A1
JSRP FRANIM
CALLA SCRTST
JRZ FB_LP
FB_DEL
MOVI DINOS,A1
CALLA DELETE_OBJ_SUPP
FB_DIE
DIE
*
*A11 = FIREBALL DIRECTION
*
FIREBALL_XFER
MOVE A13,A12
ADDI PRCSIZ,A12 ;RESET PROCESS STACK POINTER
ANDNIM M_NOCOLL,*A8(OFLAGS),W ;AND RETURN COLLISION STATUS
MOVI FB_ANIM,A9
JRUC FB_LP
**************************************************************************
* *
* FB_SPLASH - MAKE THE FIREBALL SPLASH AGAINST AN OBJECT. *
* A8 = PTR TO THE FIREBALL *
* A13 = FIREBALL PROCESS *
* *
**************************************************************************
FB_SPLASH
MOVE *A8(OXVEL),A1,L
JRZ FB_SUD
MOVI FB_ANI_SLR,A9
JRUC FB_STOP
FB_SUD
MOVI FB_ANI_SUD,A9
FB_STOP
CALLA PSTOP
MOVK 1,A1
JSRP FRANIM
CALLA DELETE_OBJ
DIE
**************************************************************************
* *
* FB_BONEHIT - COLLSION SERVICE FOR THE FIREBALL SLAMMING A BONE *
* A0 = PTR TO THE FIREBALL *
* A8 = PTR TO THE BONE *
* *
**************************************************************************
FB_BONEHIT
MMTM SP,A0,A1,A7,A8
CALLR FB_EXTINGUISH
FB_BHX
CLR A0 ;Z BIT SET TO STOP COLLISION
MMFM SP,A0,A1,A7,A8
RETS
**************************************************************************
* *
* FB_EXTINGUISH - ROUTINE TO BE USED ONLY WITH FIREBALL COLLISION *
* SERVICE TO START THE EXTINGUISH PROCEDURE. *
* A0 = PTR TO FIREBALL *
* NOTE: DESTROYS A1 & A7 *
* *
**************************************************************************
FB_EXTINGUISH
MMTM SP,A0,A8
MOVE A0,A8
MOVE *A8(OPLINK),A0,L
JRZ FBE_X
MOVI FB_SPLASH,A7
CALLA XFERPROC_ID
MOVI DINOS,A1
CALLA DELETE_SUPP
FBE_X
MMFM SP,A0,A8
RETS
**************************************************************************
* *
* FB_DINO - COLLISION SERVICE FOR THE FIREBALL HITTING A DINOSAUR. *
* A0 = PTR TO THE FIREBALL *
* A8 = PTR TO THE DINOSAUR *
* *
**************************************************************************
FB_DINO:
PUSH A1
MOVE *A8(OID),A1,W
SRL 4,A1
SLL 4,A1
CMPI DEADDINOOID,A1 ;IS HE DYING?
JREQ FB_DINOX ;BR = HE'S ALREADY DEAD, NO MORE
CALLA CK_OBJ_CENT
JRNC FB_DINOX ;BR = HE'S SAFE
MMTM SP,A0,A7,A8
MOVE *A0(OID),A7,W
MOVE *A8(OID),A1,W
SLL 28,A7
SRL 28,A7
SLL 28,A1
SRL 28,A1
CMP A7,A1 ;SAME DINO?
JREQ FB_DINOBAIL ;BR = YES
MOVE *A8(OPLINK),A1,L
JRZ FB_DINOBAIL ;BR = NO CONTROLLING PROCESS
MOVB *A1(DINVIN),A7
JRNE FB_DINOBAIL
MOVB *A1(DDIZZYFLG),A7
JRNE FB_DINOBAIL
MOVB *A1(DTREXFLG),A7 ;TYRANNO?
JRZ FB_DINOB ;BR = NO, JUST BURN
CALLR FB_EXTINGUISH
JRUC FB_DINOCEND
FB_DINOB
MOVK 2,A7
MOVB A7,*A1(DDIZZYFLG)
MOVI DINO_FIREBALL,A7
SWAP A0,A1
CALLA XFERPROC_ID ;TRANSFER CONTROL OF THE PROCESS
ORIM M_NOCOLL,*A8(OFLAGS),W
MOVE A1,A0
CALLR FB_EXTINGUISH
FB_DINOCEND
CLR A0 ;CAN THE COLLISION AFTER EXTINGUISH
MMFM SP,A0,A7,A8
PULL A1
RETS
FB_DINOBAIL
MMFM SP,A0,A7,A8
FB_DINOX
PULL A1
MOVE A0,A0 ;WITH Z BIT SET TO CONTINUE COLLISION
RETS
**************************************************************************
* *
* FB_WHEEL - COLLSION SERVICE FOR THE FIREBALL SLAMMING A WHEEL *
* A0 = PTR TO THE FIREBALL *
* A8 = PTR TO THE WHEEL *
* *
**************************************************************************
FB_WHEEL
MMTM SP,A0,A1,A7,A8,A9
CALLR FB_EXTINGUISH
MOVE *A8(OID),A1,W
CMPI DEADWHLOID,A1 ;IS THE WHEEL "DEAD"
JREQ FB_WHX ;BR = YES, NOTHING
MOVE *A8(OPLINK),A7,L
JRZ FB_WHX
MOVB *A7(THITS),A1
CMPI WHL_KO_HITS/3,A1
JRHS FB_WFLY
INC A1
MOVB A1,*A7(THITS)
JRUC FB_WHX
FB_WFLY
MOVE *A0(OID),A0,W
SLL 29,A0
SRL 29,A0
CALLA GPLAYD
MOVE *A2(POBJ),A9,L
MOVE *A9(OPLINK),A9,L
MOVE A7,A0
MOVI WHL_OOF,A7
CALLA XFERPROC_ID
FB_WHX
CLR A0 ;Z BIT SET TO STOP COLLISION
MMFM SP,A0,A1,A7,A8,A9
RETS
**************************************************************************
* *
* DINO_FIREBALL - PROCESS TO MAKE DINO REACT TO A FIREBALL IN THE ASS. *
* A8 = PTR TO DINOSAUR OBJECT *
* A13 = PTR TO DINOSAUR PROCESS *
* NOTE: THIS PROCESS ULTIMATELY TRANSFERS TO DINOWXFER *
* *
**************************************************************************
DINO_FIREBALL
MOVE *A8(OYPOS),A5,W
SUBK 12,A5
MOVE A5,*A8(OYPOS),W
MOVI FIREU,A0
JSRP FRANIMATE_DIR
MOVE *A8(OYPOS),A5,W
ADDK 12,A5
MOVE A5,*A8(OYPOS),W
JAUC DINOWXFER
**************************************************************************
* *
* FB_TROG - COLLISION SERVICE FOR THE FIREBALL HITTING TROG. *
* A0 = PTR TO THE FIREBALL *
* A8 = PTR TO TROG *
* *
**************************************************************************
FB_TROG:
PUSH A1
MOVE *A8(OID),A1,W
CMPI DEADTROGOID,A1 ;IS HE DEAD ALREADY?
JREQ FB_TROGX ;BR = HE'S ALREADY DEAD, NO MORE
CALLA CK_OBJ_CENT
JRNC FB_TROGX ;BR = HE'S SAFE
MMTM SP,A0,A2,A7,A8
**** MOVE @FREEZE_TIME,A1,W ;FREEZER TIME?
**** JRNZ FB_TROGSPLAT ;BR = NO
MOVE *A8(OPLINK),A1,L
JRZ FB_TROGBAIL ;BR = NO CONTROLLING PROCESS
MOVB *A1(TTYPE),A7
CMPI TTYPE_WHL,A7 ;IS HE IN THE HOLE?
JREQ FB_TROGBAIL ;BR = YOU CAN'T BURN THIS!
CMPI TTYPE_SPRING,A7
JRNE FB_NORM_TROG
*SPECIAL CHECK FOR THE SPRING TYPE TROG
MOVB *A1(DDIZZYFLG),A7
CMPI 4,A7 ;IS SPRING BOY IN FLIGHT?
JREQ FB_TROGBAIL ;BR = YES
MOVI TROGSPRING_FIREBALL,A7
JRUC FB_TROG_XFER
FB_NORM_TROG
MOVB *A1(DDIZZYFLG),A7
JRNE FB_TROGBAIL
MOVI TROG_FIREBALL,A7
FB_TROG_XFER
SWAP A0,A1
CALLA XFERPROC_ID ;TRANSFER CONTROL OF THE PROCESS
ORIM M_NOCOLL,*A8(OFLAGS),W
MOVE *A1(OID),A0,W
SLL 29,A0
SRL 29,A0
CALLA GPLAYD
MOVE A1,A0
MOVI 1000H,A1 ;GIVE SOME SCORE FOR SMOKIN' TROG
CALLA SCORE
INCM *A2(PTROGKILLS),W ;INCREMENT THE KILL COUNT
*A0 = FIREBALL OBJECT PTR
FB_TROGSPLAT
CALLR FB_EXTINGUISH
CLR A0 ;SET Z BIT TO END COLLISION
MMFM SP,A0,A2,A7,A8
PULL A1
RETS
FB_TROGBAIL
MMFM SP,A0,A2,A7,A8
FB_TROGX
PULL A1
MOVE A0,A0 ;WITH Z BIT CLR TO CONTINUE COLLISION
RETS
**************************************************************************
* *
* TROG_FIREBALL - PROCESS TO MAKE TROG REACT TO A FIREBALL IN THE ASS. *
* A8 = PTR TO TROG OBJECT *
* A13 = PTR TO TROG PROCESS *
* NOTE: THIS PROCESS ULTIMATELY TRANSFERS TO TROGDEATH_OLD_RET *
* *
**************************************************************************
TROG_FIREBALL
MOVI TROGDEATH_OLD_RET,A7
JRUC TROG_FB_G
**************************************************************************
* *
* TROGSPRING_FIREBALL - SAME AS TROG_FIREBALL EXCEPT FOR THE SPRING DUDE *
* *
**************************************************************************
TROGSPRING_FIREBALL
MOVI TROGSSDEATH_OLD_RET,A7
TROG_FB_G
MOVE *A13(PROCID),A6,W
MMTM A12,A6,A7
MOVI INDPID,A6
MOVE A6,*A13(PROCID),W
MOVE *A8(OYPOS),A5,W
SUBK 12,A5
MOVE A5,*A8(OYPOS),W
MOVI FIREU,A0
JSRP FRANIMATE_DIR
MOVE *A8(OYPOS),A5,W
ADDK 12,A5
MOVE A5,*A8(OYPOS),W
MOVI TROGS,A1
CALLA DELETE_SUPP
MOVI [80H,1],A1
JSRP FRANIM
****TFB_WAIT
**** MOVE @FREEZE_TIME,A0,W
**** JRZ TFB_RECREATE
**** SLOOP 5,TFB_WAIT
TFB_RECREATE
MOVI TROGS,A1
CALLA INSERT_SUPP
MMFM A12,A6,A7
MOVE A6,*A13(PROCID),W
**** JUMP A7
CALLA DELETE_TROG
DIE
**************************************************************************
* *
* DINO_LOOK_HOME - SEARCH A DIRECTION AND DETERMINE IF THE DINOS HOME *
* IS IN UNOBSTRUCTED VIEW. *
* A0 = PTR TO STARTING MOVE PNT *
* A1 = DIRECTION TO SEARCH *
* A8 = PTR TO DINOSAUR OBJECT *
* RETURNS: *
* Z = NO HOME AHEAD *
* NZ = HOME AHEAD, CRUISE AGAIN *
* *
**************************************************************************
DINO_LOOK_HOME
MMTM SP,A0,A1,A3,A4
MOVE *A8(OID),A4,W
SLL 28,A4
SRL 28,A4 ;ISOLATE PLAYER NUMBER
SLL 4,A1
ADDI MOVEREL,A1
DINO_LOOKH_LP
MOVE A0,A3
ADD A1,A0
MOVE *A0,A0,W
JRNN DINO_LOOKH_MOVE ;WE HAVE NOT HIT THE END
MOVE *A3(MOVEEPTR),A0,L ;IS THIS AN EXIT POINT
JRN DINO_LOOKH_FL ;BR = NO, THIS IS CERTAIN DEATH
MOVB *A0(EMOVEPLYR),A3 ;IS THIS A PLAYERS SPOT?
JRN DINO_LOOKH_FL ;BR = NO
CMPI PXPLAYER,A3
JREQ DLH_SPOT
CMP A4,A3 ;IS THIS MY EXIT?
JRNE DINO_LOOKH_FL ;BR = NO
DLH_SPOT
MOVE *A0(EMOVEOBJ),A3,L ;IS MY HOUSE THERE?
JRNZ DINO_LOOKH_X
DINO_LOOKH_MOVE
CALLA GETMOVE
MOVB *A0(MOVEPLYR),A3 ;DID WE HIT A WALL?
JRNN DINO_LOOKH_FL ;BR = YES
MOVE *A0(MOVECPTR),A3,L ;GRAB THE CENTER MOVE PTR
JRN DINO_LOOKH_LP ;BR = NOT A CENTER MOVE
SWAP A3,A0
CALLA CENTER_CHECK
JRNZ DINO_LOOKH_FL
SWAP A3,A0
JRUC DINO_LOOKH_LP
DINO_LOOKH_FL
CLR A3 ;SET Z
DINO_LOOKH_X
MMFM SP,A0,A1,A3,A4
RETS
**************************************************************************
* *
* FREEZE_EM - PROCESS TO FREEZE THE ENEMIES FOR A LITTLE BIT. *
* *
**************************************************************************
FREEZE_EM
SOUND1 CUBE_SND
**** MOVE @FREEZE_TIME,A0,W ;ARE WE CURRENTLY FROZEN?
**** JRZ FM_FIRST ;BR = NO
**** MOVE @POWERUP_DURATION,A1,W
**** SRL 1,A1
**** ADD A1,A0 ;ADD SOME MORE FREEZE TIME
**** MOVE A0,@FREEZE_TIME,W
**** DIE
FM_FIRST
MOVI INDPID,A1
MOVE A1,*A13(PROCID),W ;MAKE SURE WE ARE NOT P SPEC
MOVE @ACTIVE,A0,L
JRZ FM_DI
MOVI ENEMY_ICE_LIST,A5
MOVI ENEMY_FREEZE,A7
FM_LP
MOVE A5,A3
MOVE *A0(PROCID),A2,W
SRL 4,A2
SLL 4,A2
MOVE *A3+,A4,W
FM_LP2
CMP A4,A2
JREQ FREEZE_IT
MOVE *A3+,A4,W
JRNZ FM_LP2
FM_NEXT
MOVE *A0,A0,L
JRNZ FM_LP
MOVE @FREEZE_TIME,A0,W ;ARE WE CURRENTLY FROZEN?
JRZ FM_NEW ;BR = NO
MOVE @POWERUP_DURATION,A1,W
SRL 1,A1
ADD A1,A0 ;ADD SOME MORE FREEZE TIME
MOVE A0,@FREEZE_TIME,W
JRUC FM_DI
FM_NEW
MOVE @POWERUP_DURATION,A0,W
SRL 1,A0
MOVE A0,@FREEZE_TIME,W
JREQ FM_DI
FM_LP3
SLEEP 5
SUBIM 5,@FREEZE_TIME,W ;FREEZE TIMEOUT
JRGT FM_LP3 ;BR = NOT DONE YET
CLR A0
MOVE A0,@FREEZE_TIME,W ;USE THIS AS A FREEZE OVER FLAG
FM_DI
DIE
FREEZE_IT
MOVB *A0(TFREEZE),A6 ;IS THIS GUY ALREADY FROZEN?
JRNZ FM_NEXT ;BR = YES, THEN DON'T FREEZE
MOVE *A0(PSPTR),A6,L
MMFM A6,A1,A8,A9,A10,A11
MMTM A6,A1,A7,A8,A9,A10,A11 ;PUT IT BACK +1
MOVE A6,*A0(PSPTR),L
MOVK 1,A6
MOVE A6,*A0(PTIME),W
MOVB A6,*A0(TFREEZE) ;MARK IT FROZEN
JRUC FM_NEXT
*
*LIST OF PROCESS I.D.s TO BE FROZEN BY THE ICE CUBE
ENEMY_ICE_LIST
.WORD TROGPID,WHEELPID,TROGSUBPID,0
**************************************************************************
* *
* ENEMY_FREEZE - TRANSFER ENEMY PROCESS HERE TO FREEZE OBJECT AT ITS *
* CURRENT POSITION. THEN RESTORE AND CONTINUE. *
* THE ROUTINE THAT IS BEING HELD HOSTAGE MUST BE PUSHED ON THE PROCESS *
* STACK SO THAT WHEN THIS PROC WAKES UP, ITS FIRST PSTACK PULL YIELDS *
* THE RETURN ADDRESS. *
* *
**************************************************************************
ENEMY_FREEZE
MOVE *A8(OPLINK),A0,L
CMP A13,A0 ;IS THIS MY OBJECT?
JRNE EF_WAIT_ONLY ;BR = NO, JUST WAIT
PULLP A1
MOVE *A8(OXVEL),A2,L
MOVE *A8(OYVEL),A3,L
MOVE *A8(OZVEL),A4,L ;KEEP OLD VELS
CALLA PSTOP ;STOP THE OBJECT
MMTM A12,A1,A2,A3,A4 ;SAVE THIS AWAY
MOVIM DINO_INTENSE,*A8(OCONST),W ;WE FLASH WHITE WITH THIS
MOVE *A13(PROCID),A0,W
SRL 4,A0
SLL 4,A0
CMPI TROGPID,A0
JREQ EF_FREEZEPAL
CMPI WHEELPID,A0
JRNE EF_LP
EF_FREEZEPAL
MOVE A8,A0
MOVI TROGS,A1
CALLA ISSUPP ;IS THIS TROG ON THE LIST?
JRZ EF_LP ;BR = NO
MOVE *A8(OPAL),A0,W
CALLA GET_PALID
PUSHP A0
MOVI BLUZOM,A0
CALLA CHANGE_PAL ;SWITCH TO THE FROZEN PALETTE
EF_LP
CALLA IS_OBJ_OFF
JRZ EF_SON
CALLA OBJ_ON
EF_SON
SLEEP 4
MOVE @FREEZE_TIME,A0,W ;FREEZE OVER?
JRZ EF_DONE ;BR = NO
CMPI 100,A0
JRLS EF_FTW ;BR = FLASH AT END
MOVE @POWERUP_DURATION,A1,W
SRL 1,A1
SUB A0,A1
CMPI 60,A1 ;FLASH FOR FREEZE START?
JRGT EF_LP
EF_FTW
MOVE *A13(PROCID),A0,W
SRL 4,A0
SLL 4,A0
CMPI TROGPID,A0
JREQ EF_FLASH
CMPI WHEELPID,A0
JRNE EF_LP
EF_FLASH
CALLA IS_OBJ_OFF
JRZ ES_SC
MOVE *A8(OFLAGS),A0,W
SRL 4,A0
SLL 4,A0
ORI DMACNZ,A0
MOVE A0,*A8(OFLAGS),W
ES_SC
SLOOP 4,EF_LP
EF_DONE
MOVE *A13(PROCID),A0,W
SRL 4,A0
SLL 4,A0
CMPI TROGPID,A0
JREQ EF_OLDPAL
CMPI WHEELPID,A0
JRNE EF_VELBACK
EF_OLDPAL
MOVE A8,A0
MOVI TROGS,A1
CALLA ISSUPP ;IS THIS TROG ON THE LIST?
JRZ EF_VELBACK ;BR = NO
PULLP A0
CALLA CHANGE_PAL ;SWITCH TROG BACK TO HIS CORRECT PAL
EF_VELBACK
MMFM A12,A1,A2,A3,A4
MOVE A2,*A8(OXVEL),L
MOVE A3,*A8(OYVEL),L
MOVE A4,*A8(OZVEL),L ;RESTORE VELS
MOVE *A8(OID),A0,W
SRL 4,A0
SLL 4,A0
CMPI TROGOID,A0 ;IS THIS TROG WE ARE TALKING ABOUT?
JRNE EF_JUMPOUT ;BR = NO
MOVB *A13(DPUNCHFLG),A0 ;WAS TROG IN HIS DINO EAT PHASE
JREQ EF_JUMPOUT
MOVI TROGWXFER,A1 ;A BOLD MANUEVER, JUST START TROG WALKING
EF_JUMPOUT
CLRB *A13(TFREEZE)
JUMP A1 ;JUMP BACK JACK
EF_WAIT_ONLY
SLEEP 8
MOVE @FREEZE_TIME,A0,W
JRNZ EF_WAIT_ONLY
CLRB *A13(TFREEZE)
PULLP A1
JUMP A1
**************************************************************************
* *
* DINOS_NEAR_PNT - DETERMINE IF SOMETHING ON THE DINOS SUPPLEMENTAL LIST *
* IS NEAR A PNT. *
* A0 = OID TO SEARCH FOR *
* A1 = MASK *
* A3 = [Y,X] POINT *
* RETURNS: *
* Z = NO OBJECT FOUND (A0 = 0) *
* NZ = OBJECT FOUND (A0 = PTR TO OBJECT) *
* A4 = PTR TO DINOS SUPP LIST. *
* *
**************************************************************************
DINOS_NEAR_PNT
MOVI DINOS,A4
JRUC OBJ_NEAR_PNT
**************************************************************************
* *
* ENEMIES_NEAR_PNT - DETERMINE IF SOMETHING ON THE ENEMIES SUPP LIST *
* IS NEAR A PNT. *
* A0 = OID TO SEARCH FOR *
* A1 = MASK *
* A3 = [Y,X] POINT *
* RETURNS: *
* Z = NO OBJECT FOUND (A0 = 0) *
* NZ = OBJECT FOUND (A0 = PTR TO OBJECT) *
* NOTE: A4 IS TRASHED. *
* *
**************************************************************************
ENEMIES_NEAR_PNT
MOVI ENEMIES,A4
CALLR OBJ_NEAR_PNT
JRNZ ENP_X
MOVI TROGS,A4
CALLR OBJ_NEAR_PNT
ENP_X
RETS
**************************************************************************
* *
* OBJ_NEAR_PNT - DETERMINE IF THE CENTER OF AN OBJECT IS NEAR A POINT. *
* STOPS AT THE FIRST OBJECT IT FINDS. *
* A0 = OID OF OBJECTS TO CHECK *
* A1 = MASK, 0 BITS MEAN DON'T CARE *
* A3 = [Y,X] POINT *
* A4 = SUPPLEMENTAL LIST TO TRAVERSE *
* RETURNS: *
* Z = NO OBJECT FOUND (A0 = 0) *
* NZ = OBJECT FOUND (A0 = PTR TO OBJECT) *
* *
**************************************************************************
OBJ_NEAR_PNT
MMTM SP,A1,A2,A5,A6,A8
MOVE A0,A5
MOVE A1,A6
ZEXT A6 ;MAKE SURE TOP 16 BITS DON'T MATTER
AND A6,A5 ;FORM MATCH
MOVE @BOXDIM,A2,L ;A BOX WILL BE THE RANGE
HALFXY A2 ;MAKE IT A [Y,X] RANGE
MOVE *A4,A0,L
JRZ OBJ_NEAR_PNT_X ;BR = THE SUPP LIST IS EMPTY
JRUC OBJ_NEAR_PNT_T ;JUMP TO TEST SECTION
OBJ_NEAR_PNT_LP
MOVE *A0(OSLINK),A0,L
JRZ OBJ_NEAR_PNT_X ;BR = END OF SUPP LIST, NOTHING FOUND
OBJ_NEAR_PNT_T
MOVE *A0(OID),A1,W ;GET THE I.D.
AND A6,A1 ;MASK OFF DON'T CARE BITS
CMP A1,A5 ;IS THIS WHAT WE'RE LOOKING FOR
JRNE OBJ_NEAR_PNT_LP ;BR = NO!
MOVE A0,A8
CALLA GETCPNT ;GET THE CENTER POINT OF THE OBJECT
CALLA PNT_IN_RANGE ;CHECK OBJECT AGAINST THE BOX
JRNC OBJ_NEAR_PNT_LP ;BR = THIS IS NOT IT!
MOVE A0,A0 ;CLR Z
OBJ_NEAR_PNT_X
MMFM SP,A1,A2,A5,A6,A8
RETS
**************************************************************************
* *
* OBJ_NEAR_CENT - CHECK TO SEE IF AN OBJECT IS NEAR A CENTER POINT. *
* A8 = PTR TO OBJECT *
* RETURNS: *
* NC = NOT NEAR A CENTER POINT *
* C = NEAR A CENTER POINT *
* A0 = PTR TO CENTER POINT IFF C *
* A1 = [Y,X] POSITION OF CENTER POINT IFF C *
* *
**************************************************************************
OBJ_NEAR_CENT
MMTM SP,A2,A3,A4
MOVI [4,4],A2
OBJ_NEAR_CENT_G
CALLA GETCPNT
MOVE @CMOVECNT,A4
MOVI CMOVEMAP,A0 ;LET'S SCAN THE CENTER POINT MAP
OBJ_NEAR_LP
MOVE *A0(CMOVEPOS),A3,L
CALLA PNT_IN_RANGE ;CHECK POINT AGAINST CENTER POINT
JRC OBJ_IS_NEAR ;BR = THIS IS IT DUDE!
ADDI CMOVESIZE,A0
DSJS A4,OBJ_NEAR_LP
CLRC ;WE FAILED HARD
OBJ_IS_NEAR
MOVE A3,A1
MMFM SP,A2,A3,A4
RETS
*
*BIG VERSION OF OBJ_NEAR_CENT
OBJ_WHOLE_CENT
MMTM SP,A2,A3,A4
MOVI [16,16],A2
JRUC OBJ_NEAR_CENT_G
**************************************************************************
* *
* SEE_STARS - ROUTINE TO START STAR PROCESS ABOVE AN OBJECT. *
* A8 = OBJECT TO SEE STARS *
* RETURNS: *
* Z = NO PROCESS WAS CREATED, A0 = 0 *
* NZ = PROCESS CREATED, A0 = PTR TO PROCESS *
* *
**************************************************************************
SEE_STARS
MMTM SP,A1,A7,A9,A11
SOUND1 CUCKOO_SND
MOVI STAR_INIT,A11
MOVI STAR_ANIM,A9
CREATE INDPID,OVER_HEAD
MMFM SP,A1,A7,A9,A11
RETS
**************************************************************************
* *
* OVER_HEAD - PROCESS TO ANIMATE AN OBJECT AT THE GIVEN OBJECTS *
* ANIMATION POINT. *
* POSITIONING ONLY OCCURS ONCE. MAKE SURE THAT THE *
* GIVEN OBJECT DOES NOT MOTIVATE. *
* A8 = BASE OBJECT. *
* A9 = ANIMATION SCRIPT TO ANIMATE. *
* A11 = INIT TABLE OF OBJECT *
* *
**************************************************************************
OVER_HEAD
MOVE A11,A14
CALLA GPALOBJSTF
JRZ OVER_HEAD_X
MOVE *A8(OZVAL),A2,L
INC A2
MOVE A2,*A0(OZVAL),L
MOVE *A8(OFLAGS),*A0(OFLAGS),W
CALLA GETANIXY ;GET OLD OBJECT ANIMATION POINT
SRL 16,A3
MOVY A2,A3
MOVE A0,A8
CALLA OBJ_TO_PNT
CALLA INSERT_OBJ ;TOSS IT OUT FOR DISPLAY
MOVK 1,A1
JSRP FRANIM ;ANIMATE THE SCRIPT
CALLA DELETE_OBJ ;RID O' OBJECT
OVER_HEAD_X
DIE
.DATA
*
*SOUNDS USED IN THIS MODULE
*
CUCKOO_SND
.WORD >F310,>5D,>8099,0 ;DINO SEES STARS
CUBE_SND
.WORD >F310,>3C,>808E,0 ;DINO PICKS UP THE ICE CUBE
CHILI_SND
.WORD >F010,30,>803A,0 ;DINO PICKS UP THE RED HOT CHILI PEPPER
*
*STARS DATA
*
STAR_INIT
.LONG 0,0
.WORD 0,0
.LONG STARS1,0,DUMCOLL
.WORD DMAWNZ,JUNKOID
STAR_ANIM
.LONG STARS1
.WORD 4|NEWPALET
.LONG YELLOW16
.LONG STARS2
.WORD 4
.LONG STARS3
.WORD 4|NEWPALET
.LONG RED16
.LONG STARS4
.WORD 4
.LONG STARS5
.WORD 4|NEWPALET
.LONG PINK16
.LONG STARS6
.WORD 4
.LONG STARS1
.WORD 4|NEWPALET
.LONG BLUE16
.LONG STARS2
.WORD 4
.LONG STARS3
.WORD 4|NEWPALET
.LONG YELLOW16
.LONG STARS4
.WORD 4
.LONG STARS5
.WORD 4|NEWPALET
.LONG RED16
.LONG STARS6
.WORD 4
.LONG STARS1
.WORD 4|NEWPALET
.LONG PINK16
.LONG STARS2
.WORD 4
.LONG STARS3
.WORD 4|NEWPALET
.LONG BLUE16
.LONG STARS4
.WORD 4
.LONG STARS5
.WORD 4|NEWPALET
.LONG YELLOW16
.LONG STARS6
.WORD 4
.LONG STARS1
.WORD 4|NEWPALET
.LONG RED16
.LONG STARS2
.WORD 4
.LONG STARS3
.WORD 4|NEWPALET
.LONG PINK16
.LONG STARS4
.WORD 4
.LONG STARS5
.WORD 4|NEWPALET
.LONG BLUE16
.LONG STARS6
.WORD 4
.LONG 0
DINOFLY_ANIM
.LONG BSPSHP0F13
.WORD 4
.LONG BSPSHP0F12
.WORD 4
.LONG BSPSHP0F11
.WORD 4
.LONG BSPSHP0F10
.WORD 4
.LONG BSPSHP0F9
.WORD 4
.LONG BSPSHP0F8
.WORD 4
.LONG BSPSHP0F7
.WORD 4
.LONG BSPSHP0F6
.WORD 4
.LONG BSPSHP0F4
.WORD 4
.LONG BSPSHP0F3
.WORD 4
.LONG BSPSTP0
.WORD 1
.LONG 0
DINOCHEER_ANIM
.LONG REXCHEER, 0
.LONG BLOOPCHEER, BLOOPTONGUE
.LONG SPIKECHEER, 0
.LONG GWENCHEER, 0
REXCHEER
.LONG REXCHEERF1
.WORD 6|FLIPBITS,0
.LONG REXCHEERF2
.WORD 6
.LONG REXCHEERF3
.WORD 4
.LONG REXCHEERF4
.WORD 4
.LONG REXCHEERF3
.WORD 4
.LONG REXCHEERF2
.WORD 6
.LONG REXCHEERF3
.WORD 4
.LONG REXCHEERF4
.WORD 4
.LONG REXCHEERF3
.WORD 4
.LONG REXCHEERF2
.WORD 6
.LONG REXCHEERF3
.WORD 4
.LONG REXCHEERF4
.WORD 4
.LONG REXCHEERF3
.WORD 4
.LONG REXCHEERF2
.WORD 6
.LONG REXCHEERF1
.WORD 6
.LONG BSPSTP0
.WORD 2
.LONG REXCHEERF1
.WORD 6|FLIPBITS,M_FLIPH
.LONG REXCHEERF2
.WORD 6
.LONG REXCHEERF3
.WORD 4
.LONG REXCHEERF4
.WORD 4
.LONG REXCHEERF3
.WORD 4
.LONG REXCHEERF2
.WORD 6
.LONG REXCHEERF3
.WORD 4
.LONG REXCHEERF4
.WORD 4
.LONG REXCHEERF3
.WORD 4
.LONG REXCHEERF2
.WORD 6
.LONG REXCHEERF3
.WORD 4
.LONG REXCHEERF4
.WORD 4
.LONG REXCHEERF3
.WORD 4
.LONG REXCHEERF2
.WORD 6
.LONG REXCHEERF1
.WORD 6
.LONG BSPSTP0
.WORD 2|SCRIPT
.LONG REXCHEER
BLOOPCHEER
.LONG BLOOPCHEERF1
.WORD 4|FLIPBITS,0
.LONG BLOOPCHEERF2
.WORD 4
.LONG BLOOPCHEERF3
.WORD 4
.LONG BLOOPCHEERF4
.WORD 6
.LONG BLOOPCHEERF3
.WORD 4
.LONG BLOOPCHEERF2
.WORD 4
.LONG BLOOPCHEERF1
.WORD 4
.LONG BLOOPCHEERF1
.WORD 4|FLIPBITS,M_FLIPH
.LONG BLOOPCHEERF2
.WORD 4
.LONG BLOOPCHEERF3
.WORD 4
.LONG BLOOPCHEERF4
.WORD 6
.LONG BLOOPCHEERF3
.WORD 4
.LONG BLOOPCHEERF2
.WORD 4
.LONG BLOOPCHEERF1
.WORD 4|SCRIPT
.LONG BLOOPCHEER
BLOOPTONGUE
.LONG BLOOPTUNGF1
.WORD 4|FLIPBITS|NEWPALET,0
.LONG PINK16
.LONG BLOOPTUNGF2
.WORD 4
.LONG BLOOPTUNGF3
.WORD 4
.LONG BLOOPTUNGF4
.WORD 6
.LONG BLOOPTUNGF3
.WORD 4
.LONG BLOOPTUNGF2
.WORD 4
.LONG BLOOPTUNGF1
.WORD 4
.LONG BLOOPTUNGF1
.WORD 4|FLIPBITS,M_FLIPH
.LONG BLOOPTUNGF2
.WORD 4
.LONG BLOOPTUNGF3
.WORD 4
.LONG BLOOPTUNGF4
.WORD 6
.LONG BLOOPTUNGF3
.WORD 4
.LONG BLOOPTUNGF2
.WORD 4
.LONG BLOOPTUNGF1
.WORD 4|SCRIPT
.LONG BLOOPTONGUE
SPIKECHEER
.LONG BSPCHP0F1
.WORD 6|FLIPBITS,0
.LONG BSPCHP0F2
.WORD 6
.LONG BSPCHP0F3
.WORD 6
.LONG BSPCHP0F4
.WORD 4
.LONG BSPCHP0F3
.WORD 4
.LONG BSPCHP0F4
.WORD 4
.LONG BSPCHP0F3
.WORD 4
.LONG BSPCHP0F4
.WORD 4
.LONG BSPCHP0F3
.WORD 4
.LONG BSPCHP0F2
.WORD 6
.LONG BSPCHP0F1
.WORD 6
.LONG BSPCHP0F1
.WORD 6|FLIPBITS,M_FLIPH
.LONG BSPCHP0F2
.WORD 6
.LONG BSPCHP0F3
.WORD 6
.LONG BSPCHP0F4
.WORD 4
.LONG BSPCHP0F3
.WORD 4
.LONG BSPCHP0F4
.WORD 4
.LONG BSPCHP0F3
.WORD 4
.LONG BSPCHP0F4
.WORD 4
.LONG BSPCHP0F3
.WORD 4
.LONG BSPCHP0F2
.WORD 6
.LONG BSPCHP0F1
.WORD 6|SCRIPT
.LONG SPIKECHEER
GWENCHEER
.LONG GWENCHEERF3
.WORD 6|FLIPBITS,0
.LONG GWENCHEERF1
.WORD 6
.LONG GWENCHEERF2
.WORD 6
.LONG GWENCHEERF1
.WORD 6
.LONG GWENCHEERF2
.WORD 6
.LONG GWENCHEERF3
.WORD 6
.LONG GWENCHEERF1
.WORD 6|FLIPBITS,M_FLIPH
.LONG GWENCHEERF2
.WORD 6
.LONG GWENCHEERF1
.WORD 6
.LONG GWENCHEERF2
.WORD 6|SCRIPT
.LONG GWENCHEER
**************************************************************************
* *
* FIREBALL TABLES AND SCRIPTS *
* *
**************************************************************************
FB_INIT
.LONG FBCOLL,[12,12]
.WORD DMAWNZ,DINOFIREOID
.LONG FIREBALL1
FB_TABLE
.LONG FB_UD,FB_UD,FB_LR,FB_LR
FB_UD
.LONG FIREBALLP0F1
.WORD 4|MAKESOUND
.LONG FIRESTART_SND
.LONG FIREBALLP0F2
.WORD 4|SCRIPT
.LONG FB_ANIM
FB_LR
.LONG FIREBALLP4F1
.WORD 4|MAKESOUND
.LONG FIRESTART_SND
.LONG FIREBALLP4F2
.WORD 4
FB_ANIM
.LONG FIREBALL1
.WORD 4
.LONG FIREBALL2
.WORD 4
.LONG FIREBALL3
.WORD 4
.LONG FIREBALL4
.WORD 4|SCRIPT
.LONG FB_ANIM
FB_ANI_SUD
.LONG FIREBALLP0F3
.WORD 8|MAKESOUND
.LONG FIREOUT_SND
.LONG FIREBALLP0F2
.WORD 4
.LONG FIREBALLO1
.WORD 8|NEWPALET
.LONG FIXED3
.LONG FIREBALLO2
.WORD 8
.LONG FIREBALLO3
.WORD 8
.LONG 0
FB_ANI_SLR
.LONG FIREBALLP4F3
.WORD 8|MAKESOUND
.LONG FIREOUT_SND
.LONG FIREBALLP4F2
.WORD 4
.LONG FIREBALLO1
.WORD 8|NEWPALET
.LONG FIXED3
.LONG FIREBALLO2
.WORD 8
.LONG FIREBALLO3
.WORD 8
.LONG 0
FBCOLL
.WORD HBAROID,08FFFH ;IGNORE PLAYER #
.LONG FB_BONEHIT
.WORD VBAROID,08FFFH
.LONG FB_BONEHIT
.WORD WHEELOID,0FFF0H
.LONG FB_WHEEL
.WORD DINOOID,0FFF0H ;COLLIDE WITH THE DINOS
.LONG FB_DINO
.WORD TROGOID,0FFF0H
.LONG FB_TROG
.WORD HAUSOID,0FFFFH
.LONG FB_HOUSE
.WORD 0
.LONG DUMCRETS ;DO NOTHING
.END