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