4488 lines
119 KiB
NASM
4488 lines
119 KiB
NASM
.MLIB "TROGMACS.LIB"
|
||
.FILE 'TROGTROG.ASM'
|
||
.TITLE " <<< T R O G -- TROG, THE MAN, THE METHOD, THE CODE. >>>"
|
||
.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 "STRING.H"
|
||
.INCLUDE "TROGAUDN.ASM"
|
||
.INCLUDE "TROGAEQU.ASM" ;GET THE ANIMATION EQUATES
|
||
|
||
.DEF TROG_START, TROGCOLL, TROG_CENTER, CLIP_INTO, TROG_SQUASH
|
||
.DEF CENTER_CHECK, GET_BEST_DIRECTION, TROG_VEL_NORMAL, TROG_BUMP
|
||
.DEF GET_DIRECTIONS, GET_DIRECTIONS_TO_MOVE, DELETE_TROG
|
||
.DEF TROG_LOOK_COUNT, TROG_SEARCH_DIST
|
||
.DEF TROG_NEW_PNT, FIND_MVD, GET_TROG_CPNT, SCORE_TO_PLAYER
|
||
.DEF CK_TROG_CENT, SELECT_DINO, GET_TROG_MPNT
|
||
.DEF EXTRA_TROG_START, TROG_VALIDATE_CHASEE, CLEAR_PURSUIT
|
||
.DEF TROGWXFER, TROGDEATH_OLD_RET, TROG_OOF
|
||
.DEF TROG_START_WAIT, DIR_VELOCITY
|
||
**** .DEF TROG_SLOWDOWN, TROG_SPEEDUP
|
||
|
||
.REF ENEMY_START, TROGATAB, TROGINIT, TROG_INTRO_FLAG
|
||
.REF DINO_PNT_TST, DINOINIT_PNT_FIND, DSRCH_CLR, DINOLOAD
|
||
.REF FIND_SAFEST, FINDMOVE, GETCMOVE, DINOTURN
|
||
.REF GETMOVE, BOUNDRY_CHECK, ANIMATE_DIR, NOTDIR
|
||
.REF DINOLOOK, ANIMATE_TURN, DINO_TROG_OOF, DINO_TROG_CLUB
|
||
.REF SCOREOBJ, DINOPUNCH, TROG_PIT, FIND_OPEN_CPNT
|
||
.REF FINDCMOVE, PIT_CLOSE, CK_PIT_CENT, DINO_VEL
|
||
.REF TROGSPEED, FIND_CLOSE_MPNT, TOMOVE, FIND_CLOSE_CPNT
|
||
.REF ONE_MOVE, BONE_BETWEEN, BUMP, BUMPCK, DINOLOOK_TURN
|
||
.REF DINO_FRANIM, VALIDHITX, VALIDHITY, DINOREV, LOAD_DIR
|
||
.REF DINOS_NEAR_PNT, FREE_MOVE_EGG, DINO_ADD_VEL, TAROUT
|
||
.REF BONED_IN, GPLAYD, GPLAYNUM, TROG_PURSUIT, GET_DINO_MPNT
|
||
.REF TROG_PURSUIT_RESET, TROG_PIT_COMM
|
||
.REF FRANIMATE_DIR, SCORE, FIRE_UP_MONKEY_SHIT
|
||
.REF BONE_OBJ, HOUSE_PIT, FIND_CLOSE_EPNT, TROG_CLUB_ATAB
|
||
.REF BONE_SMASH, GET_DINO_CPNT, OPEN_PIT, LIGHT_MY_FIRE
|
||
.REF VALID_CPNT, DENT_GROUND, TWO_MOVES, TARBUBBLE_SND
|
||
.REF WHEEL_PROCESS, WHEEL_CNT, NUM_WHEELS
|
||
.REF FIND_CMOVE_X, FIND_CMOVE_Y, WAVEEGGS, BGND_TYPE
|
||
.REF DINO_MUNCH, TROGUHOH_SND, CK_TREX, TINIT_TAB, PUNCHED
|
||
.REF TROGSPRG_PROCESS, TROGUP, BTYPE_CK, POWERUP_DURATION
|
||
.REF FREEZE_TIME, BLOCK_CHECK, IS_DINO_DEAD_A8, BONUS_WAVE
|
||
.REF IS_DINO_DEAD_A0, TROG_CNT, NUM_TROGS, PUNCH_SND, TROGCLUB_SND
|
||
.REF TROGBXFER, EARTHSHAKER, DINO_PUNCHED, TGEN_CNT, TGEN_CPTRS
|
||
|
||
* NUMBER OF MOVES TROG WILL WALK BEFORE PICKING SOMEBODY TO CHASE
|
||
.BSS TROG_LOOK_COUNT,16 ;MOVES 'TIL NEXT LOOK IF NOT CHASING
|
||
*
|
||
*SEARCH DIFFICULTY VARIABLES
|
||
*
|
||
.BSS TROG_SEARCH_DIST,16 ;DISTANCE THAT TROG CAN SEE (> HARDER)
|
||
|
||
.TEXT
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TROG_START - START TROG(S) *
|
||
* A5 = [RANDOM # TO ADD, # TO START] *
|
||
* A6 = OID *
|
||
* *
|
||
**************************************************************************
|
||
TROG_START:
|
||
MMTM SP,A1,A7,A10
|
||
MOVI TROG_PROCESS,A7
|
||
MOVI TROGPID,A1
|
||
MOVE A6,A10
|
||
CALLA ENEMY_START
|
||
MOVK 2,A1
|
||
MOVE A1,@TROG_LOOK_COUNT,W
|
||
MOVK 4,A1
|
||
MOVE A1,@TROG_SEARCH_DIST,W
|
||
MMFM SP,A1,A7,A10
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* EXTRA_TROG_START - ROUTINE TO START EXTRA TROGS (THE TROG BROTHERS). *
|
||
* 1 PLAYER = 3 EXTRAS (GREEN, RED, BLUE) *
|
||
* 2 PLAYERS = 2 EXTRAS (GREEN, RED) *
|
||
* 3 PLAYERS = 1 EXTRA (GREEN) *
|
||
* A5 (BYTE 0) = MAX NUMBER OF EXTRAS ALLOWED, UP TO 3 *
|
||
* A5 (BYTE 1) = # OF EXTRA TROGS WITH CLUB *
|
||
* A5 (BYTE 2) = # OF EXTRA TROGS WITH WHEEL *
|
||
* A5 (BYTE 3) = # OF EXTRA TROGS WITH SPRING SHOES *
|
||
* A6 = START INTERVAL *
|
||
* *
|
||
**************************************************************************
|
||
EXTRA_TROG_START:
|
||
MMTM SP,A0,A1,A7,A9,A11
|
||
MOVI EXTRA_TROGS,A7
|
||
MOVI TROGPID,A1
|
||
MOVE A5,A9
|
||
MOVE A6,A11
|
||
CALLA GETPRC
|
||
MOVK 2,A1
|
||
MOVE A1,@TROG_LOOK_COUNT,W
|
||
MOVK 4,A1
|
||
MOVE A1,@TROG_SEARCH_DIST,W
|
||
MMFM SP,A0,A1,A7,A9,A11
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* EXTRA_TROGS - PROCESS TO START EXTRA TROGS AT THE BEGINNING OF A WAVE *
|
||
* ACCORDING TO THE NUMBER OF PLAYERS ACTIVE. *
|
||
* *
|
||
* A9 (BYTE 0) = NUMBER OF EXTRAS TO START THIS CALL *
|
||
* A9 (BYTE 1) = PORTION WHICH USE THE CLUB *
|
||
* A9 (BYTE 2) = PORTION WHICH USE THE WHEEL *
|
||
* A5 (BYTE 3) = PORTION WHICH USE THE SPRING SHOES *
|
||
* (ALL OTHERS ARE BARE HANDED) *
|
||
* A11 = START INTERVAL *
|
||
* *
|
||
**************************************************************************
|
||
TCLUBCNT .EQU PDATA
|
||
TWHEELCNT .EQU PDATA+10H
|
||
TSPRINGCNT .EQU PDATA+20H
|
||
|
||
EXTRA_TROGS:
|
||
MOVE A9,A0
|
||
SLL 16,A0
|
||
SRL 24,A0
|
||
MOVE A0,*A13(TCLUBCNT),W
|
||
MOVE A9,A0
|
||
SLL 8,A0
|
||
SRL 24,A0
|
||
MOVE A0,*A13(TWHEELCNT),W
|
||
MOVE A9,A0
|
||
SRL 24,A0
|
||
MOVE A0,*A13(TSPRINGCNT),W
|
||
SLL 24,A9
|
||
SRL 24,A9
|
||
ET_LOOP
|
||
CALLR ETS_SUB
|
||
JRLE ET_DIE
|
||
SLOOPR A11,ET_LOOP
|
||
ET_DIE
|
||
DIE
|
||
*
|
||
*SUBROUTINE FOR EXTRA_TROGS
|
||
*A10 = BASE I.D.
|
||
*RETURNS .GT. IF MORE TROGS TO START
|
||
* .LE. WE ARE DONE
|
||
* A10 = FULL EXTRA TROG OID
|
||
*NOTE: TRASHES A0
|
||
ETS_SUB
|
||
MOVE *A13(TSPRINGCNT),A0,W
|
||
JRZ ETS_1
|
||
MOVI TROGOID|GTROGID|SPRING,A10
|
||
**** ORI SPRING,A10
|
||
DEC A0
|
||
MOVE A0,*A13(TSPRINGCNT),W
|
||
CREATE TROGPID,TROGSPRG_PROCESS ;CREATE SPECIAL PROCESS
|
||
JRUC ETS_X
|
||
ETS_1
|
||
MOVE *A13(TWHEELCNT),A0,W
|
||
JRZ ETS_2
|
||
MOVI TROGOID|BTROGID|WHEEL,A10
|
||
**** ORI WHEEL,A10
|
||
DEC A0
|
||
MOVE A0,*A13(TWHEELCNT),W
|
||
JRUC ETS_CREATE
|
||
ETS_2
|
||
MOVE *A13(TCLUBCNT),A0,W
|
||
JRZ ETS_3
|
||
MOVI TROGOID|RTROGID|CLUB,A10
|
||
**** ORI CLUB,A10
|
||
DEC A0
|
||
MOVE A0,*A13(TCLUBCNT),W
|
||
JRUC ETS_CREATE
|
||
ETS_3
|
||
MOVE @TGEN_CNT,A10,W ;ARE WE IN WHACKO WAVE?
|
||
JRZ ETS_NORM_TROG ;BR = NO, CREATE NORMAL TROG
|
||
MOVI 4,A0 ;RANDO COLOR'D TROG
|
||
CALLA RANDU
|
||
DEC A0
|
||
SLL 30,A0 ;LAST MINUTE SAFETY
|
||
SRL 26,A0
|
||
ADDI TECHNICOLOR_TROGS,A0
|
||
MOVE *A0,A10,W
|
||
JRUC ETS_CREATE
|
||
ETS_NORM_TROG
|
||
MOVI TROGOID,A10 ;JUST START A NORMAL TROG
|
||
ETS_CREATE
|
||
CREATE TROGPID,TROG_PROCESS
|
||
ETS_X
|
||
DEC A9
|
||
RETS
|
||
|
||
TECHNICOLOR_TROGS
|
||
.WORD TROGOID,TROGOID|RTROGID,TROGOID|BTROGID,TROGOID|GTROGID
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TROG_START_WAIT - PROCESS SUBROUTINE TO WAIT FOR START OF TROG IF *
|
||
* THE NUMBERS ARE NOT CORRECT. *
|
||
* IF THERE ARE TOO MANY TROGS, THEN THIS WILL JUST *
|
||
* CAUSE THE PROCESS TO DIE, UNLESS WE ARE INVOLVED IN *
|
||
* A BONUS WAVE. *
|
||
* NOTE: CALL WITH JSRP *
|
||
* *
|
||
**************************************************************************
|
||
TROG_START_WAIT
|
||
PUSHP A11
|
||
MOVE *A13(PROCID),A11,W
|
||
MOVIM INDPID,*A13(PROCID),W
|
||
TSW_LP
|
||
MOVE @TROG_CNT,A0,W
|
||
MOVE @NUM_TROGS,A1,W
|
||
CMP A1,A0
|
||
JRLO TSW_X
|
||
MOVE @BONUS_WAVE,A0,W
|
||
JAEQ DUMDIE
|
||
SLOOP 10,TSW_LP
|
||
TSW_X
|
||
MOVE A11,*A13(PROCID),W
|
||
PULLP A11
|
||
RETP
|
||
|
||
*
|
||
*TROG ANIMATION TABLE INDEX IS LOW 4 BITS OF TROG'S OID
|
||
TROG_ANIM_TAB:
|
||
.LONG TROGATAB, TROG_CLUB_ATAB, TROGATAB, TROGATAB
|
||
.LONG TROGATAB, TROGATAB, TROGATAB, TROGATAB
|
||
.LONG TROGATAB, TROGATAB, TROGATAB, TROGATAB
|
||
.LONG TROGATAB, TROGATAB, TROGATAB, TROGATAB
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TROG_PROCESS - CREATE AND CONTROL THE BARE HAND TROG CHARACTER. *
|
||
* A10 = OID *
|
||
* *
|
||
**************************************************************************
|
||
TROG_PROCESS:
|
||
CALLA CLRPDATA ;CLEAR OUR DATA AREA
|
||
MOVE A10,A0
|
||
SLL 30,A0
|
||
SRL 30,A0
|
||
MOVB A0,*A13(TTYPE) ;STORE TROG'S TYPE
|
||
SLL 5,A0
|
||
ADDI TROG_ANIM_TAB,A0
|
||
MOVE *A0,A0,L ;PICK THE CORRECT ANIMATION TABLE
|
||
MOVE A0,*A13(DATABLE),L ;STORE ANIMATION TABLE
|
||
MOVK DOWN,A0
|
||
MOVE A0,*A13(DINITDIR),W ;STORE INITIAL DIRECTION
|
||
MOVE A10,*A13(DOID),W ;STORE THIS GUYS OID
|
||
MOVE @TROGSPEED,A1,W ;GET THIS WAVES INITIAL VELOCITY
|
||
ZEXT A1
|
||
MOVE A1,*A13(DSPEED),W ;KEEP THE INITIAL SPEED
|
||
ZEXT A1
|
||
SLL 4,A1
|
||
CALLA DINO_VEL ;SETUP THE INITIAL VELOCITY
|
||
MOVI TRAPTIME,A0 ;INITIAL DIG TIME
|
||
MOVE A0,*A13(TTRAPDIG),W
|
||
MOVI INITSPEEDUPS,A0 ;INITIAL SPEED UP COUNT
|
||
MOVB A0,*A13(TSPEEDUPS)
|
||
|
||
TROG_RANDOM_INIT:
|
||
JSRP TROG_RANDOM_FIND ;FIND A RANDOM SPOT TO APPEAR
|
||
CLR A0
|
||
MOVB A0,*A13(DPUNCHFLG) ;CLEAR FLAGS
|
||
MOVB A0,*A13(TPURSUIT) ;RESET PURSUIT FLAG
|
||
MOVB A0,*A13(TPRESET) ;CLEAR RESET PURSUIT FLAG COUNT
|
||
MOVE A0,*A13(TDINO),L ;CLEAR THE PURSUEE
|
||
MOVB A0,*A13(TTRAPPED) ;RESET TRAP VARIABLES
|
||
MOVE A0,*A13(TMINTL),L
|
||
MOVE A0,*A13(TMAXLR),L
|
||
MOVB A0,*A13(TSWINGS) ;CLEAR HIS CLUB SWING COUNT
|
||
MOVB A0,*A13(THITS) ;CLEAR HIS HIT POINTS
|
||
MOVB A0,*A13(TFREEZE)
|
||
NOT A0
|
||
MOVB A0,*A13(TPLAYER)
|
||
MOVB *A13(DDIZZYFLG),A0 ;IS HE DIZZY?
|
||
JRNZ TI_DIZZY ;BR = YES, THEN LEAVE FLAG ALONE
|
||
MOVK 1,A0 ;MAKE SURE HE'S NOT MUCKED WITH
|
||
MOVB A0,*A13(DDIZZYFLG)
|
||
|
||
TI_DIZZY
|
||
MOVB *A13(TTYPE),A3
|
||
CMPI TTYPE_WHL,A3 ;WHEEL GUY?
|
||
JREQ TI_SKIP_WAIT ;BR = YES, WHEEL COUNT IS ALL WE CARE
|
||
|
||
JSRP TROG_START_WAIT
|
||
|
||
TI_SKIP_WAIT
|
||
MOVE *A13(DOID),A14,W
|
||
SRL 2,A14
|
||
SLL 30,A14
|
||
SRL 25,A14
|
||
ADDI TINIT_TAB,A14
|
||
MOVE *A14,A14,L ;LOAD THE CORRECT TROG INITIALIZATION
|
||
CALLA GPALOBJSTF ;GET AN OBJECT AND STUFF
|
||
JRZ TROG_PROC_DIE ;BR = WE FAILED TO GET AN OBJECT
|
||
|
||
MOVE A0,A8
|
||
MOVE A13,*A8(OPLINK),L ;LINK THE PROC TO THE OBJ
|
||
MOVE *A13(DOID),*A8(OID),W ;STUFF THE I.D.
|
||
MOVE *A13(DATABLE),A10,L ;RELOAD THE ANIMATION TABLE
|
||
|
||
MOVB *A13(TTYPE),A3
|
||
CMPI TTYPE_WHL,A3 ;ARE WE A WHEEL WATCHER?
|
||
JREQ TROG_WHEEL ;BR = YES, DO ESPECIAL WHEEL STUFF
|
||
|
||
INCM @TROG_CNT,W
|
||
|
||
CMPI TTYPE_CLUB,A3 ;CLUB MAN
|
||
JRNE TROGI_NCL ;BR = NO
|
||
MOVK 1,A3
|
||
MOVE A3,@TROG_INTRO_FLAG,W ;CLUB GUY SHOULD NOT WAVE AT PLAYER
|
||
TROGI_NCL
|
||
MOVE @TGEN_CNT,A14,W
|
||
JRZ TROG_NORM_POINT
|
||
|
||
*WE DO THIS WHEN GENERATORS ARE PRESENT
|
||
MOVE *A13(DINITPOS),A1,L ;GET THE SELECTED GENERATOR
|
||
CALLR TROG_NEW_PNT ;CENTER TROG ON THIS NEW POINT
|
||
MOVIM DOWN,*A13(DINITDIR),W ;SET INITIAL DIRECTION
|
||
JRUC TROG_EMERGE
|
||
|
||
TROG_NORM_POINT
|
||
MOVE *A13(DINITPOS),A3,L ;LOOK FOR A GOOD SPOT, TO APPEAR
|
||
CALLA DINO_PNT_TST
|
||
JRZ TROGINIT_OKP ;BR = WE FOUND ONE, NO PROBLEM
|
||
SLEEP 30
|
||
MOVE *A13(DINITPOS),A3,L ;LET'S START LOOKING
|
||
CALLA FINDMOVE
|
||
JRNC TROGINIT_OKP ;BR = WIERDNESS, NO MOVE
|
||
MOVE *A13(DINITDIR),A0,W ;SHOW US THE WAY
|
||
CALLA DINOINIT_PNT_FIND ;FIND A FREE POINT
|
||
CALLA DSRCH_CLR ;CLEAR THE SEARCH MARKS
|
||
TROGINIT_OKP:
|
||
MOVE A3,A1
|
||
MOVE A3,*A13(DINITPOS),L ;STORE AWAY FOR SAFE KEEPING
|
||
CALLR TROG_NEW_PNT ;CENTER TROG ON THIS NEW POINT
|
||
CALLA FINDMOVE ;NOW FIND THIS MOVE
|
||
JRNC TROGINIT_NOSRCH ;BR = NOT A VALID MOVE, DON'T SEARCH
|
||
CALLA FIND_SAFEST ;FIND US THE SAFEST MOVE
|
||
MOVE A2,*A13(DINITDIR),W ;NEW INITIAL DIRECTION
|
||
MOVE A1,A0
|
||
MOVE A2,A1
|
||
CLR A3
|
||
CALLR FIND_MVD ;FIND A DINO TO CHASE
|
||
JRZ TROGINIT_NOSRCH ;BR = THERE ISN'T ONE
|
||
MOVE A2,*A13(DINITDIR),W ;NEW INITIAL DIRECTION
|
||
TROGINIT_NOSRCH:
|
||
MOVE *A13(DINITPOS),A9,L
|
||
|
||
CREATE TROGSUBPID,TROG_PIT ;START THE PIT FROM WHICH HE WILL EMERGE
|
||
|
||
SLEEP 61
|
||
*ENTRY POINT JUST TO MAKE TROG EMERGE FROM HIS SPACE
|
||
TROG_EMERGE
|
||
MOVK DOWN,A0
|
||
MOVE A0,*A13(DDIR),W ;HE WILL FACE DOWN FOR THIS
|
||
MOVI INTRODUCE,A0 ;WAVE AT THE PLAYER
|
||
CALLA DINOLOAD
|
||
MOVK 4,A1
|
||
JSRP FRANIM ;LOAD THE NEW FRAME
|
||
MOVI TROGUP,A1
|
||
MOVE A1,*A13(TWALKFRM),L ;INITIALIZE THE CURRENT WALKING FRAME
|
||
MOVI TROGS,A1
|
||
CALLA INSERT_OBJ_SUPP ;INSERT THIS 'TING
|
||
SLEEPR A0 ;SLEEP THE FRAME TIME
|
||
*PICK HERE WHICH SOUND WILL BE FIRED DEPENDING ON LAST DEATH
|
||
MOVB *A13(DDIZZYFLG),A0
|
||
CMPI 3,A0 ;DID HE BURN?
|
||
JREQ TROGINIT_COUGH ;BR = YES, THEN COUGH
|
||
**** SOUND1 TROGBIRTH_SND
|
||
JRUC TROGINIT_EMERGE
|
||
TROGINIT_COUGH:
|
||
SOUND1 TROGCOUGH_SND
|
||
TROGINIT_EMERGE:
|
||
MOVK 1,A1
|
||
JSRP FRANIM
|
||
SLEEP 10
|
||
**** MOVE @TROG_INTRO_FLAG,A0,W
|
||
**** JRNZ TROG_SKIP_INTRO
|
||
**** MOVK 1,A1
|
||
**** MOVE A1,@TROG_INTRO_FLAG,W
|
||
**** JSRP FRANIM
|
||
****TROG_SKIP_INTRO:
|
||
MOVE *A13(DINITDIR),A11,W
|
||
JSRP DINOTURN ;TURN THE DIRECTION YOU WISH TO GO
|
||
MOVE *A13(DINITPOS),*A13(TCURMPOS),L
|
||
|
||
**** MOVB @TROG_LOOK_COUNT,A6
|
||
**** MOVB A6,*A13(TNEXTLOOK)
|
||
MOVK 10,A0
|
||
CALLA RANDU
|
||
MOVB A0,*A13(TNEXTLOOK)
|
||
|
||
*
|
||
*PROCESS TRANSFER POINT FOR TROG WALKING PROCESS
|
||
* A8 = PTR TO TROG OBJECT
|
||
* *A13(DATABLE),L = PTR TO TROG ANIMATION TABLE
|
||
* *A13(DDIR),W = CURRENT TROG DIRECTION
|
||
* *A13(DOID) = OBJECT I.D. OF THIS TROG MAN
|
||
* *A13(TPLAYER),B = PLAYER # THAT TROG IS CURRENTLY CHASING
|
||
*
|
||
TROGWXFER
|
||
MOVE A13,A12
|
||
ADDI PRCSIZ,A12 ;RESET PROCESS STACK POINTER
|
||
|
||
CLR A0
|
||
MOVB A0,*A13(DPUNCHFLG) ;CLEAR FLAGS
|
||
MOVB A0,*A13(DDIZZYFLG)
|
||
MOVB A0,*A13(TFREEZE)
|
||
MOVE *A13(DOID),*A8(OID),W ;MAKE HIM A NORMAL TROGSTER
|
||
|
||
ANDNIM M_NOCOLL,*A8(OFLAGS),W ;MAKE SURE COLLISIONS ARE ON
|
||
|
||
MOVE *A13(DDIR),A11,W ;GET THE NEW DIRECTION
|
||
MOVE A11,A0
|
||
MOVE *A13(DATABLE),A10,L ;RESTORE THE ANIMATION TABLE
|
||
|
||
CALLR TROG_WALK_LOAD
|
||
|
||
**** CALLA GET_TROG_CPNT ;THIS IS HIS NEW CENTER
|
||
**** ADDI [5,0],A1
|
||
**** CALLA FIND_CLOSE_MPNT ;FIND THE CLOSEST MOVE POINT
|
||
CALLR GET_TROG_MPNT
|
||
MOVE A3,*A13(TCURMPOS),L ;AND STORE IT AS HIS CURRENT MOVE POS
|
||
|
||
CALLA BONED_IN ;ARE WE STUCK IN BONES?
|
||
JRNZ TROGBONE_BLOCK ;BR = NO SIR
|
||
|
||
MOVB *A13(TTYPE),A7
|
||
CMPI TTYPE_CLUB,A7 ;IS HE A CLUBBER?
|
||
JRNE TROG_TRAP_LOOK ;BR = NO
|
||
|
||
MOVE A11,A1 ;LET'S FIND A BONE TO SMASH
|
||
CALLA ONE_MOVE ;CHECK THE WAY WE ARE GOING
|
||
JRZ TROG_TRAP_LOOK ;BR = NO MOVE HERE
|
||
MOVB *A1(MOVEPLYR),A7 ;IS THERE A BONE WHERE WE TURNED
|
||
CMPI PXPLAYER,A7
|
||
JREQ TROG_TRAP_LOOK
|
||
MOVE A1,A0
|
||
JRUC TROG_BONE_SMASH ;SMASH-A-BONE!
|
||
|
||
TROG_TRAP_LOOK:
|
||
CALLR TRAP_CHECK ;IS HE STUCK HERE
|
||
JRNZ TROG_DIG ;BR = YES HE IS, DIG AWAY
|
||
TROGBONE_BLOCK:
|
||
SRL 16,A4 ;CHECK TO SEE IF THERE IS A BONE AHEAD
|
||
BTST A11,A4
|
||
JREQ TROGWLP ;BR = NOPE
|
||
MOVE A11,A1 ;LET'S FIND THE BONE
|
||
CALLA ONE_MOVE ;GOT TO BE THIS WAY
|
||
JRZ TROGWLP
|
||
MOVE A1,A0
|
||
CALLA BONE_OBJ ;GET THE BONE OBJECT
|
||
JRZ TROGWLP ;NONE FOUND
|
||
MOVE A1,A9
|
||
JRUC TROGDEFL ;ACT LIKE YOU RAN INTO IT
|
||
*
|
||
*A11 = CURRENT TROG DIRECTION HERE
|
||
*
|
||
TROGWLP
|
||
MOVE A9,*A13(TWALKFRM),L ;STORE THIS AS THE CURRENT WALK FRAME
|
||
MOVE @GAME_STATE,A1,W
|
||
CMPI INGAME,A1 ;ARE WE BONUSING?
|
||
JRNE TROG_CONTINUE
|
||
MOVI STANDU,A0
|
||
JSRP FRANIMATE_DIR
|
||
MOVE A11,A0
|
||
CALLA DINOLOAD ;RESET FOR NEXT
|
||
ANDNIM M_NOCOLL,*A8(OFLAGS),W
|
||
JRUC TROGWLP
|
||
TROG_CONTINUE:
|
||
CLR A1
|
||
JSRP DINO_FRANIM
|
||
ANDNIM M_NOCOLL,*A8(OFLAGS),W ;MAKE SURE COLLISIONS ARE ON
|
||
MOVE A11,A1 ;AND PUT IT IN THE CORRECT PLACE
|
||
CALLR TROG_VEL_NORMAL ;RETURN TROG VELOCITY TO NORMAL
|
||
CALLA BOUNDRY_CHECK
|
||
JRNE TROG_OUT_OF_BOUNDS
|
||
|
||
**** CALLR GET_TROG_CPNT ;GET TROG'S CENTER POINT
|
||
**** ADDI [5,0],A1 ;FUDGE FOR THE DOWN DIRECTION
|
||
**** CALLA FIND_CLOSE_MPNT ;AND FIND THE CLOSEST MOVE POINT
|
||
CALLR GET_TROG_MPNT
|
||
|
||
MOVE *A13(TCURMPOS),A2,L ;GET THE CURRENT CENTER POINT
|
||
CMP A2,A3 ;SAME MOVE AS LAST TIME?
|
||
JREQ TROGWLP ;BR = YES, THEN KEEP ON TRUCKIN'
|
||
MOVI [4,4],A2 ;TROG MUST BE WITHIN THIS RANGE
|
||
CALLA PNT_IN_RANGE ;IS HE?
|
||
JRNC TROGWLP ;BR = NO
|
||
|
||
MOVE A3,*A13(TCURMPOS),L ;STORE THIS NEW [Y,X] OF THE MOVE PNT
|
||
|
||
MOVB *A13(TNEXTLOOK),A6
|
||
DEC A6 ;DECREMENT NEXT LOOK COUNTER
|
||
MOVB A6,*A13(TNEXTLOOK)
|
||
|
||
*CHECK TO SEE IF TROG IS IN PURSUIT OF A DINOSAUR THAT HAS TURNED INTO TREX
|
||
MOVB *A13(TPURSUIT),A6
|
||
JREQ TROGW_NP
|
||
MOVE *A13(TDINO),A6,L
|
||
JRZ TROGW_NP
|
||
MOVE *A6(OPLINK),A6,L
|
||
JRZ TROGW_NP
|
||
MOVB *A6(DTREXFLG),A6
|
||
JRZ TROGW_NP
|
||
CALLR CLEAR_PURSUIT
|
||
|
||
**** MOVB @TROG_LOOK_COUNT,A6
|
||
**** MOVB A6,*A13(TNEXTLOOK) ;RE-LOAD NEXT LOOK
|
||
MOVK 10,A0
|
||
CALLA RANDU
|
||
MOVB A0,*A13(TNEXTLOOK)
|
||
|
||
MOVI CLUBOUTU,A0
|
||
JSRP FRANIMATE_DIR ;STAND AND SHUDDER
|
||
SLEEP 30
|
||
*A11 = TROG DIRECTION
|
||
TROG_MACHA_MACHA
|
||
SOUND1 TROGUHOH_SND
|
||
CALLA NOTDIR
|
||
JSRP DINOTURN
|
||
JRUC TROGWXFER
|
||
|
||
*CHECK IF BLIND PURSUIT IS OVER
|
||
TROGW_NP:
|
||
MOVB *A13(TPRESET),A6
|
||
DEC A6 ;DECREMENT PURSUIT FLAG RESET COUNTER
|
||
JRN TROG_P_RESET ;BR = TIME TO RESET
|
||
MOVB A6,*A13(TPRESET)
|
||
JRUC TROG_CK_EDGE
|
||
TROG_P_RESET:
|
||
CLR A6
|
||
MOVB A6,*A13(TPURSUIT) ;CLEAR THE PURSUIT FLAG
|
||
|
||
TROG_CK_EDGE:
|
||
MOVE *A0(MOVEEPTR),A4,L ;IS THIS A DEATH SPOT?
|
||
JRN TROG_NOT_NEAR_EXIT ;BR = NO
|
||
MOVB *A4(EMOVEDIR),A5 ;GET THE DIRECTION OF THE EXIT
|
||
CMP A11,A5 ;IS HE WALKING THAT WAY?
|
||
JRNE TROG_NOT_NEAR_EXIT ;BR = NO
|
||
*
|
||
*NOTE: MAKE TROG LOOK OVER THE EDGE HERE, PAUSE, THEN ABOUT FACE
|
||
*A0 NOT GUARANTEED TO HOLD MOVE PTR HERE
|
||
TROG_NEAR_EXIT:
|
||
MOVB *A13(TPURSUIT),A6 ;IS HE ON SOMEONES TAIL?
|
||
JRNZ TROGWLP ;BR = YES, THEN JUST FALL OFF
|
||
|
||
MOVI STANDU,A0
|
||
JSRP ANIMATE_DIR ;STAND
|
||
SLEEP 10 ;PAUSE
|
||
CALLA NOTDIR
|
||
JSRP DINOLOOK_TURN ;ABOUTFACE
|
||
MOVE A11,A0
|
||
CALLA DINOLOAD ;LOAD THE WALKING FRAME
|
||
JRUC TROGWLP ;START TO WALKIN'
|
||
|
||
TROG_NOT_NEAR_EXIT:
|
||
MOVE A11,A1
|
||
CALLA ONE_MOVE ;GET ADJACENT MOVE
|
||
JRZ TROG_NEAR_EXIT ;BR = MUST BE NEAR AN EDGE?
|
||
|
||
JSRP TROG_LOOK_FOLLOW ;MUST PRESERVE A0,A1 THROUGH HERE
|
||
JRC TROG_FOLLOW_CK ;BR = YES, BUT HE CAN'T SEE IT
|
||
JRNZ TROGWLP ;HE FOUND SOMETHING
|
||
TROG_FOLLOW_CK:
|
||
MOVE A11,A1
|
||
CALLA ONE_MOVE ;GET A NEW ADJACENT IN CASE HE TURNED
|
||
JRZ TROG_NEAR_EXIT ;BR = HE TURNED AND NOW FACES DEATH
|
||
|
||
MOVE *A0(MOVECPTR),A5,L ;IS CURRENT MOVE A CENTER POINT?
|
||
JRNN TROG_CK_LOOK ;BR = YES, JUST TRY TO LOOK
|
||
|
||
MOVB *A13(TPURSUIT),A6 ;IS HE ON SOMEONES TAIL?
|
||
JRNZ TROG_CK_LOOK ;YES, THEN JUST FOLLOW
|
||
|
||
MOVE *A1(MOVECPTR),A4,L ;IS ADJACENT MOVE A CENTER?
|
||
JRN TROG_CK_LOOK ;BR = NO HANDLE NORMAL SCAN
|
||
MOVE A0,A6
|
||
MOVE A4,A0
|
||
CALLR CENTER_CHECK
|
||
JRNZ TROG_NEAR_EXIT ;DO NOT CONTINUE IN THIS DIRECTION
|
||
JRC TROG_NO_POUND ;BR = NOT TOTALLY EMPTY
|
||
|
||
MOVB *A13(TTYPE),A7
|
||
CMPI TTYPE_CLUB,A7 ;CLUB MAN?
|
||
JRNE TROG_NO_POUND ;BR = NO
|
||
|
||
MOVB *A4(CMOVETROG),A7 ;DOES TROG WANT TO JAM THIS SPOT
|
||
**** INC A7
|
||
**** JRZ TROG_NO_PIT ;BR = NO
|
||
**** DEC A7
|
||
CMPI PITID,A7
|
||
JRNE TROG_NO_PIT
|
||
MOVE *A4(CMOVEMPTR),A0,L ;GET THE MOVE TO POUND
|
||
JRUC TROG_HOLE_OPEN
|
||
*
|
||
*CHECK REVERSE MOVE TO SEE IF WE SHOULD START THE FIRE
|
||
TROG_NO_PIT:
|
||
MOVE A6,A0
|
||
MOVE A11,A7
|
||
MOVE A1,A4
|
||
CALLR NOTDIR
|
||
MOVE A11,A1
|
||
CALLA ONE_MOVE
|
||
JRZ TROG_NO_FIRE
|
||
MOVE *A1(MOVECPTR),A0,L ;IS THE REVERSE MOVE A CENTER?
|
||
JRN TROG_NO_FIRE ;BR = NO, JUST CONTINUE
|
||
CALLR CENTER_CHECK ;CHECK THAT CENTER
|
||
JRC TROG_NO_FIRE ;BR = NOT TOTALLY EMPTY
|
||
MOVB *A0(CMOVETROG),A2
|
||
CMPI FIREID,A2 ;DO WE WANT TO START A FIRE HERE
|
||
JRNE TROG_NO_FIRE ;BR = NO
|
||
MOVE *A0(CMOVEMPTR),A0,L ;GET THE MOVE TO POUND
|
||
PUSHP A0
|
||
**** MOVI [0,0202H],A1
|
||
**** JSRP FRANIM ;TAKE A COUPLE MORE STEPS
|
||
JSRP DINOTURN ;ABOUT FACE
|
||
PULLP A0
|
||
JRUC TROG_FIRE_START
|
||
TROG_NO_FIRE:
|
||
MOVE A4,A1
|
||
MOVE A7,A11
|
||
|
||
*A6 = PTR TO CURRENT MOVE
|
||
TROG_NO_POUND:
|
||
MOVE A6,A0
|
||
|
||
*
|
||
*A0 = CURRENT MOVE PTR
|
||
*A1 = ADJACENT MOVE IN THE CURRENT DIRECTION
|
||
*A5 = *A0(MOVECPTR),L
|
||
TROG_CK_LOOK:
|
||
MOVE A5,A5 ;SAFETY CENTER CHECK
|
||
JRN TROG_CK_TRAP ;BR = NOT A CENTER
|
||
|
||
MOVB *A13(TTYPE),A3
|
||
CMPI TTYPE_CLUB,A3
|
||
JRNE TROG_CK_TRAP
|
||
|
||
MOVB *A13(TPURSUIT),A6 ;IS HE ON SOMEONES TAIL?
|
||
JRNZ TROG_CK_TRAP ;YES, THEN JUST FOLLOW
|
||
|
||
MOVB *A1(MOVEPLYR),A3 ;IS THERE AN ADJACENT BONE?
|
||
JRN TROG_CK_TRAP ;BR = NO
|
||
|
||
CMPI PXPLAYER,A3
|
||
JREQ TROG_CK_TRAP
|
||
|
||
MOVB *A13(TSWINGS),A3
|
||
CMPI 3,A3
|
||
JRLO TROG_MAY_SMASH
|
||
|
||
CLR A3
|
||
MOVB A3,*A13(TSWINGS)
|
||
JRUC TROG_CK_TRAP
|
||
|
||
TROG_MAY_SMASH
|
||
MOVE A1,A0
|
||
JRUC TROG_BONE_SMASH ;JUST BUST A MOVE
|
||
|
||
TROG_CK_TRAP:
|
||
MOVB *A13(TTRAPPED),A3
|
||
JRNZ TROG_TRAPPED
|
||
MOVE *A0(MOVEPOS),A3,L
|
||
CALLR TRAP_CHECK ;SEE IF HE IS TRAPPED
|
||
JRZ TROG_LOOK_OK ;BR = NO HE IS NOT
|
||
TROG_TRAPPED:
|
||
MOVE A5,A0 ;IS HE ON A CENTER POINT?
|
||
JRN TROGWLP ;BR = NO, WAIT UNTIL WE HIT ONE
|
||
JRUC TROG_DIG ;BR = DIG IT!
|
||
|
||
*A0 = MOVE POINT DATA
|
||
*A5 = CORRESPONDING CENTER POINT DATA
|
||
TROG_LOOK_OK:
|
||
MOVE *A13(TTYPE),A6
|
||
CMPI TTYPE_CLUB,A6
|
||
JRNE TROG_LOOK_FOR_NEXT
|
||
|
||
MOVE A5,A5 ;IS THE CURRENT POINT A CENTER?
|
||
JRN TROG_LOOK_FOR_NEXT ;BR = NO
|
||
|
||
MOVE A0,A6
|
||
MOVE A1,A7
|
||
MOVE A0,A1
|
||
MOVE A11,A0
|
||
CALLA TWO_MOVES ;GET THE MOVE THAT IS TWO AWAY
|
||
JRZ TROG_NOT_TWO ;BR = THERE IS NO MOVE THERE.
|
||
MOVE A1,A0
|
||
MOVE *A0(MOVECPTR),A1,L ;IS THIS A CENTER
|
||
JRN TROG_NOT_TWO ;BR = NO?
|
||
MOVB *A13(TPURSUIT),A2 ;IS HE ON SOMEONES TAIL?
|
||
JRNZ TROG_NOT_TWO ;YES, THEN JUST FOLLOW
|
||
|
||
MOVB *A1(CMOVEEGG),A2
|
||
INC A2 ;SOMETHING ON THAT SPOT?
|
||
JRZ TROG_NOT_TWO ;BR = NO
|
||
DEC A2
|
||
MOVB *A1(CMOVETROG),A1
|
||
CMP A2,A1 ;DID TROG PUT IT THERE?
|
||
JRNE TROG_NOT_TWO ;BR = NO
|
||
MOVE A6,A0
|
||
MOVE A7,A1
|
||
JRUC TROG_SHALL_LOOK
|
||
TROG_NOT_TWO:
|
||
MOVE A6,A0
|
||
MOVE A7,A1
|
||
|
||
TROG_LOOK_FOR_NEXT:
|
||
MOVB *A13(TNEXTLOOK),A6
|
||
JRGT TROGWLP ;BR = NOT TIME TO LOOK AROUND YET
|
||
|
||
TROG_SHALL_LOOK:
|
||
MOVE *A13(TDINO),A4,L ;IS TROG CHASING A DINOSAUR
|
||
JRZ TROG_SELECT_NEW_DINO ;BR = NO, GET A NEW ONE
|
||
|
||
MOVE A0,A6
|
||
MOVB *A13(TPLAYER),A0
|
||
CALLA GPLAYD
|
||
MOVE A6,A0
|
||
MOVE *A2(PBOZO),A6,W ;HAS THIS PLAYER BECOME A BOZO?
|
||
CMPI 2,A6
|
||
JRLO TROGWLP
|
||
**** JREQ TROGWLP ;BR = NO, KEEP AFTER HIS ASS
|
||
|
||
TROG_SELECT_NEW_DINO:
|
||
CALLR CLEAR_PURSUIT ;CLEAR THE PURSUIT SO WE CAN SNAG
|
||
CALLA SELECT_DINO
|
||
JRNZ TROG_STUFF_DINO
|
||
CLR A4
|
||
MOVE A4,*A13(TDINO),L
|
||
NOT A4
|
||
MOVB A4,*A13(TPLAYER)
|
||
JRUC TROG_NOT_AFTER
|
||
TROG_STUFF_DINO:
|
||
MOVE A4,*A13(TDINO),L
|
||
MOVE *A4(OID),A2,W
|
||
SLL 28,A2
|
||
SRL 28,A2
|
||
MOVB A2,*A13(TPLAYER)
|
||
CALLR CLEAR_TRAP
|
||
JRUC TROGWLP ;AND GO FOR HIM
|
||
|
||
TROG_NOT_AFTER:
|
||
MOVE A5,A5 ;EEZ ZEES A ZENTER POYANT?
|
||
JRN TROGWLP ;BR = NO
|
||
|
||
MOVB *A13(TTYPE),A6
|
||
CMPI TTYPE_CLUB,A6 ;CLUB MAN?
|
||
JRNE TROG_NOT_ANLK ;BR = NO, JUST CHECK FOR NEXT LOOK
|
||
|
||
CALLR TROG_FIND_TRAP ;FIND A PLACE TO SET A TRAP
|
||
JRZ TROG_NOT_ANLK ;COULDN'T FIND ANY THAT NEED SETTING
|
||
MOVE *A13(DDIR),A11,W ;RESTORE DIRECTION
|
||
MOVE A1,A4
|
||
CALLR GET_BEST_DIR_TO_MOVE ;GET THE DIRECTION TO THE POINT
|
||
JRZ TROGWLP
|
||
|
||
MOVK 2,A6
|
||
MOVB A6,*A13(TNEXTLOOK) ;NEXT LOOK WILL NOT TAKE AS LONG
|
||
|
||
CMP A1,A11
|
||
JREQ TROGWLP
|
||
|
||
MMTM A12,A0,A1
|
||
CLR A1
|
||
JSRP DINO_FRANIM ;TAKE ONE MORE STEP
|
||
MOVE *A12(20H),A0,L ;RESTORE MOVE FOR A SECOND
|
||
CALLR TROG_CENTER
|
||
MOVI LOOKBOTHU,A0
|
||
JSRP ANIMATE_DIR
|
||
MMFM A12,A0,A1
|
||
MOVE A1,A11
|
||
JSRP DINOTURN
|
||
JRUC TROGWXFER
|
||
|
||
TROG_NOT_ANLK:
|
||
PUSHP A0
|
||
|
||
**** MOVB @TROG_LOOK_COUNT,A6
|
||
**** MOVB A6,*A13(TNEXTLOOK) ;RE-LOAD NEXT LOOK
|
||
|
||
MOVK 10,A0
|
||
CALLA RANDU
|
||
MOVB A0,*A13(TNEXTLOOK)
|
||
|
||
CLR A1
|
||
JSRP DINO_FRANIM ;TAKE ONE MORE STEP
|
||
MOVE *A12,A0,L ;RESTORE MOVE FOR A SECOND
|
||
CALLR TROG_CENTER
|
||
MOVI LOOKBOTHU,A0
|
||
JSRP ANIMATE_DIR
|
||
PULLP A0
|
||
MOVE *A13(DDIR),A11,W
|
||
|
||
CMPI UP,A11
|
||
JRNE TROG_CKD
|
||
TROG_LR:
|
||
MOVI LEFT,A6
|
||
MOVI RIGHT,A7
|
||
JRUC TROG_CK_CHOOSE
|
||
TROG_CKD:
|
||
CMPI DOWN,A11
|
||
JREQ TROG_LR
|
||
MOVI UP,A6
|
||
MOVI DOWN,A7
|
||
TROG_CK_CHOOSE:
|
||
CALLA NOTDIR
|
||
MOVE A11,A5
|
||
CALLR TROGCHOOSE
|
||
JSRP DINOTURN
|
||
JRUC TROGWXFER
|
||
|
||
TROG_OUT_OF_BOUNDS:
|
||
|
||
CALLR SCORE_TO_PLAYER ;SCORE TO THE WORLD, TROG IS DEAD
|
||
|
||
CALLA GET_TROG_CPNT ;GET THE CENTER POINT OF TROGGY
|
||
CALLA FIND_CLOSE_EPNT ;FIND OUT WHERE HE FELL OFF
|
||
MOVE A0,A4
|
||
PUSHP A4 ;STORE THE PTR TO EXIT AREA
|
||
|
||
CALLA NOTDIR ;APPEAR IN THE REVERSE DIRECTION
|
||
MOVE A11,*A13(DINITDIR),W ;MAKE THIS THE NEW DIRECTION
|
||
|
||
CMPI TYPE_PIT,A5 ;DID WE DIE IN A PIT?
|
||
JREQ TROG_PIT_DEATH ;BR = YES SIR
|
||
|
||
CMPI TYPE_VOLCANO,A5
|
||
JREQ TROGVOLCANO
|
||
|
||
TROG_CLIFF_DEATH:
|
||
MOVI DEADTROGOID,A0 ;MARK TROG AS DEAD
|
||
MOVE A0,*A8(OID),W
|
||
*CHECK TO SEE IF ANYONE HAD A HOUSE HERE
|
||
MOVE A4,A4
|
||
JRZ TROG_OFF_EDGE
|
||
MOVE *A4(EMOVEOBJ),A0,L
|
||
JRZ TROG_OFF_EDGE
|
||
MOVE *A13(DDIR),A11,W
|
||
CMPI DOWN,A11
|
||
JRNE TROG_DEATH_HOUSE_PIT
|
||
MOVI [0,0302H],A1 ;TAKE SOME EXTRA STEPS
|
||
JSRP DINO_FRANIM
|
||
MOVE *A12,A4,L ;RETRIEVE THE EXIT POINTER
|
||
TROG_DEATH_HOUSE_PIT:
|
||
MOVE A4,A9
|
||
CREATE INDPID,HOUSE_PIT
|
||
MOVI OGPITU,A0
|
||
JSRP FRANIMATE_DIR
|
||
MOVK 1,A1
|
||
JSRP FRANIM ;RUN THE REST OF THE SCRIPT
|
||
JRUC TROG_DEATH_DONE
|
||
TROG_OFF_EDGE:
|
||
CALLA BTYPE_CK
|
||
JRNZ TDEATHLAVA
|
||
|
||
MOVI DEATH_UP,A0 ;DEFAULT ON NORMAL DEATH
|
||
JRUC TDEATHLAN
|
||
TDEATHLAVA:
|
||
MOVI LAVADIEU,A0
|
||
JRUC TDEATHLAN
|
||
TDEATHLAN:
|
||
JSRP FRANIMATE_DIR
|
||
JRUC TROG_DEATH_DONE
|
||
*
|
||
*ANIMATE PIT DEATH ANIMATION WITH CENTER POINT DRIFT
|
||
*A6 = PIT [Y,X] CENTER POINT
|
||
TROG_PIT_DEATH:
|
||
MOVI DEADTROGOID,A0 ;MARK TROG AS DEAD
|
||
MOVE A0,*A8(OID),W
|
||
PUSHP A6
|
||
|
||
MOVI PIT_DEATH_UP,A0
|
||
JSRP FRANIMATE_DIR ;ANIMATE THE FLAIL
|
||
CALLA GETCPNT ;GET TROGS CENTER POINT
|
||
MOVE A1,A2
|
||
PULLP A3
|
||
MOVI 25*4,A4 ;AVERAGE SPIN DURATION
|
||
CALLA SLINEVEL
|
||
MOVE A1,*A8(OXVEL),L
|
||
MOVE A2,*A8(OYVEL),L
|
||
MOVK 1,A1
|
||
JSRP FRANIM ;NOW ANIMATE THE REST
|
||
CALLA PSTOP
|
||
JRUC TROG_DEATH_DONE
|
||
|
||
TROGVOLCANO:
|
||
PULLP A4
|
||
MOVI STANDU,A0
|
||
JSRP ANIMATE_DIR ;STAND
|
||
SLEEP 5 ;PAUSE
|
||
CALLA NOTDIR
|
||
JSRP DINOLOOK_TURN ;ABOUTFACE
|
||
|
||
**** MOVE A11,A0
|
||
**** CALLA DINOLOAD ;LOAD THE WALKING FRAME
|
||
CALLR TROG_WALK_LOAD
|
||
|
||
MOVI 0802H,A1 ;ANIMATE A LITTLE WAY BEFORE RESUMING
|
||
JSRP DINO_FRANIM
|
||
MOVE *A13(DOID),*A8(OID),W ;STUFF THE I.D.
|
||
JRUC TROGWLP ;START TO WALKIN'
|
||
|
||
*
|
||
*MUST HAVE PTR TO EXIT MOVE PUSHED ON THE PROCESS STACK
|
||
*IF = 0 THEN BLOW OFF THEN *A13(DINITPOS),L IS STUFFED
|
||
TROG_DEATH_DONE:
|
||
PULLP A4
|
||
MOVE A4,A4
|
||
JREQ TROGDEATH_OLD_RET
|
||
MOVE *A4(EMOVERET),A0,W
|
||
JRN TROGDEATH_OLD_RET ;BR = RETURN TO THE OLD POSITION
|
||
CALLA GETMOVE ;GET THE MOVE POINT
|
||
MOVE *A0(MOVEPOS),*A13(DINITPOS),L ;AND GET THE POSITION
|
||
|
||
TROGDEATH_OLD_RET:
|
||
MOVE *A13(DOID),A10,W ;RESTORE HIS I.D.
|
||
CLR A1
|
||
MOVB A1,*A13(DPUNCHFLG)
|
||
|
||
CALLR DELETE_TROG
|
||
|
||
**** MOVE @BONUS_WAVE,A0,W
|
||
**** JRNE TROG_PROC_DIE
|
||
|
||
**** SLEEP 150 ;WAIT A LITTLE BIT BEFORE RE-INIT
|
||
**** JRUC TROG_RANDOM_INIT ;FIND A RANDOM START POSITION
|
||
|
||
****TROGDEATH_EATEN
|
||
**** MOVE *A13(DOID),A10,W ;RESTORE HIS I.D.
|
||
**** CLR A1
|
||
**** MOVB A1,*A13(DPUNCHFLG)
|
||
|
||
**** CALLR DELETE_TROG
|
||
|
||
**** MOVE @BONUS_WAVE,A0,W ;ARE WE ON THE BONUS
|
||
**** JRNE TROG_PROC_DIE ;BR = BLOW THIS OFF
|
||
|
||
**** SLEEPM @POWERUP_DURATION,W
|
||
|
||
****TROGDEATH_WTREX
|
||
**** SLEEP 60 ;DEFAULT WAIT
|
||
**** CALLA CK_TREX ;WAIT FOR THE TREX TO GO
|
||
**** JRNZ TROGDEATH_WTREX
|
||
**** JRUC TROG_RANDOM_INIT ;FIND A RANDOM START POSITION
|
||
|
||
TROG_PROC_DIE:
|
||
DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DELETE_TROG - ROUTINE TO REMOVE TROG FROM PLAY. *
|
||
* A8 = PTR TO TROG *
|
||
* NOTE: TRASHES A14 *
|
||
* *
|
||
**************************************************************************
|
||
DELETE_TROG
|
||
PUSH A1
|
||
MOVI TROGS,A1
|
||
CALLA DELETE_OBJ_SUPP ;OFF THE LISTS
|
||
DECM @TROG_CNT,W
|
||
PULL A1
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TROG_WALK_LOAD - ROUTINE TO LOAD THE TROGS CORRECT WALKING SCRIPT. *
|
||
* A8 = PTR TO TROG *
|
||
* A10 = PTR TO TROG ANIMATION TABLE *
|
||
* A11 = PTR TO CURRENT TROG DIRECTION *
|
||
* A13 = PTR TO TROG PROCESS *
|
||
* RETURNS: *
|
||
* A9 = PTR TO ANIMATION *
|
||
* X,Y & Z VELOCITIES STUFFED IN THE OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
TROG_WALK_LOAD
|
||
MOVE A11,A0
|
||
CALLA DINOLOAD
|
||
MOVE A9,*A13(TWALKFRM),L
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TROG_WHEEL - JUMP HERE FOR TROG TO CONTROL THE WHEEL *
|
||
* A8 = PTR TO ALLOCATED OBJECT NOT YET INSERTED ON LISTS. *
|
||
* A10 = PTR TROG ANIMATION TABLE *
|
||
* A13 = PTR TO INITIALIZED TROG PROCESS. *
|
||
* *
|
||
**************************************************************************
|
||
TROG_WHEEL:
|
||
MOVE @WHEEL_CNT,A0,W
|
||
MOVE @NUM_WHEELS,A1,W
|
||
CMP A1,A0
|
||
JRHS TROGWHL_SLEEP
|
||
|
||
JSRP TROG_RANDOM_FIND ;LOOK FOR A GOOD SPOT TO APPEAR
|
||
MOVE *A13(DINITPOS),A3,L
|
||
CALLA DINO_PNT_TST ;TEST THAT SPOT
|
||
JRZ TROGWHL_OKP ;BR = IT'S CLEAR TO APPEAR
|
||
SLEEP 30
|
||
MOVE *A13(DINITPOS),A1,L ;LET'S START LOOKING
|
||
CALLA FIND_CLOSE_MPNT
|
||
MOVE A0,A1
|
||
MOVE *A13(DINITDIR),A0,W ;SHOW US THE WAY
|
||
CALLA DINOINIT_PNT_FIND ;FIND A FREE POINT
|
||
CALLA DSRCH_CLR ;CLEAR THE SEARCH MARKS
|
||
TROGWHL_OKP:
|
||
MOVE A3,A1
|
||
MOVE A3,*A13(DINITPOS),L ;STORE AWAY FOR SAFE KEEPING
|
||
CALLR TROG_NEW_PNT ;CENTER TROG ON THIS NEW POINT
|
||
CALLA FIND_CLOSE_MPNT ;GET ADDRESS IN CASE IT'S NEW
|
||
MOVE A0,A1
|
||
CALLA FIND_SAFEST ;FIND US THE SAFEST MOVE
|
||
MOVE A2,*A13(DINITDIR),W ;NEW INITIAL DIRECTION
|
||
MOVE A1,A0
|
||
MOVE A2,A1
|
||
MOVK 1,A3
|
||
CALLR FIND_MVD ;FIND A DINO TO CHASE
|
||
JRZ TROGWHL_RESTD ;BR = THERE ISN'T ONE
|
||
MOVE A2,*A13(DINITDIR),W ;NEW INITIAL DIRECTION
|
||
JRUC TROGWHL_LOOKT
|
||
TROGWHL_RESTD
|
||
MOVE A1,A2 ;RESTORE OLD DIRECTION
|
||
TROGWHL_LOOKT
|
||
MOVE A0,A1
|
||
MOVE A2,A0
|
||
CALLR BLOCK_IN_TWO
|
||
JRZ TROGWHL_SLEEP
|
||
|
||
*
|
||
*POSITION IS PICKED, NOW BRING TROG OUT AND TOSS A WHEEL
|
||
*
|
||
TROGWHL_NOSRCH:
|
||
MOVE *A13(DINITPOS),A9,L
|
||
MOVE A13,A11
|
||
CLR A1
|
||
MOVE A1,*A13(PCOMM),W ;CLEAR THE COMMUNICATION LINE
|
||
CREATE TROGSUBPID,TROG_PIT_COMM ;START THE PIT FROM WHICH HE WILL EMERGE
|
||
JRZ TROGWHL_SLEEP ;BR = NO PIT, JUST HANG OUT
|
||
MOVE A0,A11 ;KEEP THE PIT POINTER HERE
|
||
SLEEP 1 ;LET THE PIT CREATE PROC TRY
|
||
MOVE *A13(PCOMM),A0,W
|
||
CMPI COMM_PIT_FAIL,A0 ;DID IT FAIL?
|
||
JREQ TROGWHL_SLEEP ;BR = YES, TRY LATER
|
||
MOVI COMM_PIT_OPEN,A2
|
||
MOVI 100,A3
|
||
JSRP COMM_WAIT ;WAIT FOR PIT TO OPEN
|
||
JRNZ TROGWHL_SLEEP
|
||
|
||
MOVE *A13(DINITDIR),*A13(DDIR),W ;FACE HIM IN THE THROW DIRECTION
|
||
MOVI WHEELU,A0 ;WAVE AT THE PLAYER
|
||
CALLA LOAD_DIR
|
||
MOVK 4,A1
|
||
JSRP FRANIM ;LOAD THE NEW FRAME
|
||
MOVI TROGS,A1
|
||
CALLA INSERT_OBJ_SUPP ;INSERT THIS 'TING
|
||
MOVE A0,A5
|
||
CREATE WHEELPID,WHEEL_PROCESS
|
||
SLEEPR A5 ;SLEEP THE FRAME TIME
|
||
CLR A1
|
||
MOVB A1,*A13(DDIZZYFLG) ;BUST'EM OR BLAST'EM
|
||
MOVK 1,A1
|
||
JSRP DINO_FRANIM
|
||
SLEEP 60
|
||
|
||
TROGWHL_DONE
|
||
MOVK 1,A1
|
||
MOVB A1,*A13(DDIZZYFLG)
|
||
JSRP FRANIM
|
||
|
||
MOVI TROGS,A1
|
||
CALLA DELETE_OBJ_SUPP ;OFF THE LISTS
|
||
|
||
MOVE *A11(PROCID),A0,W
|
||
CMPI TROGSUBPID,A0 ;IS A11 STILL THE PIT PROCESS?
|
||
JRNE TROGWHL_SLEEP ;BR = NO
|
||
|
||
MOVI COMM_PIT_CLOSE,A1
|
||
CALLA SEND_COMM
|
||
|
||
TROGWHL_SLEEP:
|
||
DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* BLOCK_IN_TWO - CHECK TO SEE IF THERE IS A BLOCK TWO MOVES AWAY. *
|
||
* A0 = DIRECTION *
|
||
* A1 = PTR TO MOVE *
|
||
* RETURNS *
|
||
* Z = THERE IS A BLOCK IN THAT DIRECTION *
|
||
* NZ = NO BLOCK *
|
||
* *
|
||
**************************************************************************
|
||
BLOCK_IN_TWO
|
||
MMTM SP,A0,A1
|
||
CALLA TWO_MOVES
|
||
JRZ BIT_X
|
||
MOVE A1,A0
|
||
CALLA BLOCK_CHECK
|
||
BIT_X
|
||
MMFM SP,A0,A1
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TROG_RANDOM_FIND - PROCESS SUBROUTINE TO FIND A RANDOM CENTER POINT *
|
||
* FOR TROG TO APPEAR. *
|
||
* A13 = PTR TO TROG STRUCTURE. *
|
||
* RETURNS: *
|
||
* *A13(DINITPOS),L = [Y,X] POSITION TO APPEAR *
|
||
* NOTE: CALL WITH JSRP *
|
||
* TRASHES ALL BUT A8,A9,A10,A11 *
|
||
* *
|
||
**************************************************************************
|
||
TROG_RANDOM_FIND:
|
||
MOVE @TGEN_CNT,A0,W
|
||
JRNZ TRF_GENERATOR
|
||
|
||
CALLA FIND_OPEN_CPNT
|
||
JRNZ TROG_RANDOM_CPNT
|
||
TROG_RANDOM_AGAIN:
|
||
SLOOP 10,TROG_RANDOM_FIND
|
||
TROG_RANDOM_CPNT:
|
||
MOVB *A13(TTRAPPED),A2
|
||
JRZ TROG_RANDOM_OK
|
||
MOVE *A13(TMINTL),A3,L
|
||
MOVE *A13(TMAXLR),A4,L
|
||
MOVE A4,A5
|
||
SUB A3,A5
|
||
MOVI TRAPSIZE,A6
|
||
CMPXY A6,A5
|
||
JRXLE TROG_RANDOM_CK
|
||
JRYGT TROG_RANDOM_OK ;BR=TRAP BOX IS HUGE,TOO HUGE TO CARE
|
||
TROG_RANDOM_CK:
|
||
MOVE *A1(CMOVEPOS),A2,L
|
||
CMPXY A3,A2
|
||
JRXLT TROG_RANDOM_OK
|
||
JRYLT TROG_RANDOM_OK
|
||
CMPXY A4,A2
|
||
JRXGT TROG_RANDOM_OK
|
||
JRYLE TROG_RANDOM_AGAIN ;BR = THIS POINT IS IN THE TRAP BOX
|
||
TROG_RANDOM_OK:
|
||
MOVE *A1(CMOVEPOS),*A13(DINITPOS),L ;FIND US A STARTING MARK
|
||
RETP
|
||
*
|
||
*TROG GENERATORS ARE PRESENT, MAKE HIM APPEAR IN ONE OF THOSE
|
||
*A0 = GENERATOR COUNT
|
||
TRF_GENERATOR
|
||
CALLA RANDU ;PICK FROM THE BATCH OF GENERATORS
|
||
DEC A0
|
||
SLL 5,A0
|
||
ADDI TGEN_CPTRS,A0
|
||
MOVE *A0,A1,L ;GRAB THE CENTER POINT DATA
|
||
JRUC TROG_RANDOM_OK ;AND RETURN
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TROG_BONE_SMASH - ENTRY POINT FOR TROG TO SWING AND SMASH A BONE. *
|
||
* A0 = PTR TO MOVE THAT THE BONE IS RESTING UPON *
|
||
* A8 = TROG OF COURSE *
|
||
* A13 = PTR TO TROGS DATA STRUCTURE *
|
||
* NOTE: JUMPS TO TROGWXFER *
|
||
* *
|
||
**************************************************************************
|
||
TROG_BONE_SMASH:
|
||
PUSHP A0
|
||
MOVI CLUBU,A0
|
||
JSRP ANIMATE_DIR ;THIS RETURNS A10 & A11 CORRECTLY
|
||
PULLP A0
|
||
CALLA BONE_SMASH
|
||
PUSHP A0
|
||
JSRP DINO_FRANIM
|
||
PULLP A0
|
||
|
||
MOVB *A0(MOVEPLYR),A6 ;DID TROG DESTROY THE BONE?
|
||
JRNN TROG_BONE_STILL ;BR = NO
|
||
|
||
CLR A3
|
||
*** MOVE *A13(DDIR),A11,W
|
||
MOVE A11,A1
|
||
CALLR SEARCH_DINO ;DID WE UNCOVER SOMETHING?
|
||
JRZ TROG_BONE_STILL ;BR = NO
|
||
|
||
MOVE *A4(OPLINK),A6,L
|
||
JRZ TROG_BONE_STILL
|
||
MOVB *A6(DTREXFLG),A6
|
||
JRZ TROG_BONE_AHA
|
||
|
||
*** MOVE *A13(DATABLE),A10,L
|
||
CLR A6
|
||
MOVB A6,*A13(TPURSUIT) ;RESET PURSUIT VARIABLES
|
||
MOVB A6,*A13(TPRESET)
|
||
JRUC TROG_MACHA_MACHA
|
||
|
||
TROG_BONE_AHA
|
||
SOUND1 TROGAHA_SND
|
||
|
||
TROG_BONE_STILL:
|
||
MOVB *A13(TSWINGS),A6
|
||
INC A6
|
||
MOVB A6,*A13(TSWINGS)
|
||
CLR A6
|
||
MOVB A6,*A13(TPURSUIT) ;RESET PURSUIT VARIABLES
|
||
MOVB A6,*A13(TPRESET)
|
||
JRUC TROGWXFER
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TROG_HOLE_OPEN - ENTRY POINT FOR TROG TO BUST A HOLE IN THE GROUND. *
|
||
* A0 = PTR TO MOVE THAT TROG WISHES TO BUST OPEN *
|
||
* A8 = TROG OF COURSE *
|
||
* A13 = PTR TO TROGS DATA STRUCTURE *
|
||
* NOTE: JUMPS TO TROGWXFER *
|
||
* *
|
||
**************************************************************************
|
||
TROG_HOLE_OPEN:
|
||
MOVE *A0(MOVECPTR),A1,L ;IS THIS INDEED A CENTER POINT
|
||
JRZ TROGWXFER ;BR = NO
|
||
MOVE A0,A11 ;KEEP MOVE POINT
|
||
MOVK 3,A0 ;POUND IT THIS MANY TIMES BEFORE HOLE
|
||
TROG_HOLE_LP:
|
||
CALLA VALID_CPNT ;IS IT VALID?
|
||
JRZ TROGWXFER ;BR = NO
|
||
MMTM A12,A0,A1,A11
|
||
MOVI CLUBHOLEU,A0
|
||
JSRP ANIMATE_DIR
|
||
MMFM A12,A0,A1,A11
|
||
DEC A0
|
||
JRZ TROG_OPEN_PIT
|
||
MMTM A12,A0,A1,A11
|
||
CREATE INDPID,DENT_GROUND
|
||
MOVK 1,A1
|
||
JSRP FRANIM
|
||
MMFM A12,A0,A1,A11
|
||
JRUC TROG_HOLE_LP
|
||
TROG_OPEN_PIT:
|
||
MOVE A9,A11
|
||
MOVE A1,A9
|
||
CREATE INDPID,OPEN_PIT
|
||
MOVE A11,A9
|
||
MOVK 1,A1
|
||
JSRP FRANIM ;ANIMATE THE FINAL RECOIL
|
||
MOVK 1,A6
|
||
MOVB A6,*A13(TNEXTLOOK)
|
||
JRUC TROG_REV
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TROG_FIRE_START - ENTRY POINT FOR TROG TO START A FIRE. *
|
||
* A0 = PTR TO MOVE THAT TROG WISHES TO LIGHT. *
|
||
* A8 = TROG OF COURSE *
|
||
* A13 = PTR TO TROGS DATA STRUCTURE *
|
||
* NOTE: JUMPS TO TROGWXFER *
|
||
* *
|
||
**************************************************************************
|
||
TROG_FIRE_START:
|
||
MOVE *A0(MOVECPTR),A10,L ;IS THIS INDEED A CENTER POINT
|
||
JRZ TROGWXFER ;BR = NO
|
||
MOVE *A13(DSMULT),A9,W ;PASS TROG'S SLEEP MULTIPLIER
|
||
MOVE *A13(DDIR),A11,W
|
||
CREATE TROGSUBPID,LIGHT_MY_FIRE
|
||
MOVI STOKEFIREU,A0
|
||
JSRP FRANIMATE_DIR
|
||
MOVK 1,A6
|
||
MOVB A6,*A13(TNEXTLOOK)
|
||
JRUC TROG_REV
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TROG_LOOK_FOLLOW - TROG LOOKS FOR A DINO THEN TRIES TO FOLLOW HIM, *
|
||
* IF HE CAN. *
|
||
* A0 = PTR TO CURRENT TROG MOVE *
|
||
* A8 = PTR TO TROG *
|
||
* A10 = PTR TO ANIMATION TABLE *
|
||
* A11 = CURRENT DIRECTION *
|
||
* A13 = PTR TO TROG PROCESS DATA STRUCTURE *
|
||
* RETURNS: *
|
||
* Z = NOTHING WAS FOUND, NO CHANGES WERE MADE *
|
||
* NZ = HE IS NOW FOLLOWING SOMETHING. *
|
||
* C = HE'S FOLLOWING SOMETHING HE CAN'T SEE *
|
||
* NC & Z = DON'T CARE. *
|
||
* C & NZ = HE'S FOLLOWING SOMETHING HE CAN SEE *
|
||
* NOTE: CALL WITH JSRP *
|
||
* ASSUME THIS SLEEPS AND TRASHES EVERYTHING BUT A0,A1 *
|
||
* *
|
||
**************************************************************************
|
||
TROG_LOOK_FOLLOW:
|
||
PUSHP A1
|
||
|
||
MOVE @BONUS_WAVE,A1,W
|
||
JRNZ TROG_NOT_FOLLOWING ;BR = EXIT IMMEADIATELY
|
||
|
||
CALLR TROG_VALIDATE_CHASEE ;VALIDATE THE CURRENT CHASEE
|
||
|
||
MOVE A11,A1
|
||
|
||
MOVB *A13(TTYPE),A3 ;GET HIS TYPE
|
||
CMPI TTYPE_CLUB,A3
|
||
JREQ TROG_LOOK_FOR_MVD
|
||
CLR A3
|
||
TROG_LOOK_FOR_MVD:
|
||
CALLR FIND_MVD ;IS THERE A DINO ABOUT
|
||
JRNZ TROG_LOOK_CLOSER ;BR = YES
|
||
|
||
MOVE *A13(TDINO),A4,L ;INTERESTED IN A DINO HE CAN'T SEE
|
||
JRZ TROG_NOT_FOLLOWING ;BR = NO, CAN THE SCAN
|
||
|
||
MOVB *A13(TPURSUIT),A6 ;IS HE ON SOMEONES TAIL?
|
||
JRNZ TROG_NOT_FOLLOWING ;YES, THEN JUST WALK
|
||
|
||
CALLR GET_BEST_DIRECTION ;FIND THE DUDE
|
||
JRZ TROG_NOT_FOLLOWING ;CAN'T GO TOWARDS HIM, JUST KEEP ON
|
||
|
||
MOVE *A4(OPLINK),A6,L
|
||
JRZ TROGLF_NP
|
||
MOVB *A6(DTREXFLG),A6 ;IS THIS GUY A TYRANNO?
|
||
JRZ TROGLF_NP ;BR = NO
|
||
|
||
CALLR CLEAR_PURSUIT ;DON'T FOLLOW THIS GUY ANYMORE!
|
||
CMP A1,A11 ;ARE WE HEADING TOWARDS HIM?
|
||
JRNE TROG_NOT_FOLLOWING
|
||
|
||
PUSHP A0
|
||
MOVI CLUBOUTU,A0
|
||
JSRP FRANIMATE_DIR ;STAND AND SHUDDER
|
||
SLEEP 15
|
||
SOUND1 TROGUHOH_SND
|
||
CALLA NOTDIR
|
||
JSRP DINOTURN
|
||
|
||
**** MOVE A11,A0
|
||
**** CALLA DINOLOAD ;LOAD WALKING FRAMES AND GIVE VELS
|
||
CALLR TROG_WALK_LOAD
|
||
|
||
PULLP A0
|
||
JRUC TROG_NOT_FOLLOWING
|
||
|
||
TROGLF_NP
|
||
CMP A1,A11 ;IS THE BEST, THE SAME?
|
||
JREQ TROG_NOT_FOLLOWING ;YES, JUST WALK
|
||
|
||
PUSHP A0
|
||
CALLR TROG_CENTER ;CENTER TROGGY
|
||
MOVE A1,A11
|
||
JSRP DINOLOOK_TURN
|
||
|
||
**** MOVE A11,A0
|
||
**** CALLA DINOLOAD ;LOAD UP THE NEW WALKING FRAMES
|
||
CALLR TROG_WALK_LOAD
|
||
|
||
PULLP A0
|
||
MOVK 1,A4
|
||
SETC
|
||
JRUC TROG_LOOK_FOLLOW_X
|
||
|
||
TROG_NOT_FOLLOWING:
|
||
CLR A4
|
||
CLRC
|
||
JRUC TROG_LOOK_FOLLOW_X
|
||
|
||
TROG_LOOK_CLOSER:
|
||
MOVE *A13(TDINO),A3,L ;CHECK TO SEE IF THIS IS THE SAME DINO
|
||
CMP A3,A4
|
||
JRNE TROG_DIFF_DINO ;BR = DEFINITELY NOT
|
||
CMP A2,A11 ;STRAIGHT AHEAD?
|
||
JREQ TROG_FOLLOW ;BR = YES
|
||
MOVB *A13(TPURSUIT),A3 ;IS HE ON SOMEONES TAIL?
|
||
JRNZ TROG_NOT_FOLLOWING ;YES, THEN JUST WALK
|
||
JRUC TROG_TURN_FOLLOW ;BR = TURN TO GET HIM
|
||
TROG_DIFF_DINO:
|
||
MOVB *A13(TPURSUIT),A3 ;IS HE ON SOMEONES TAIL?
|
||
JRNZ TROG_NOT_FOLLOWING ;YES, THEN JUST WALK
|
||
CALLR CK_CHASE ;IS THERE ANOTHER TROG AFTER THIS DINO?
|
||
JRNZ TROG_NOT_FOLLOWING ;BR = YES, THEN DON'T YOU GO AFTER HIM
|
||
CLR A3
|
||
MOVB A3,*A13(TPRESET) ;MAKE SURE HE RESETS THE PURSUIT FLAG
|
||
CMP A2,A11
|
||
JREQ TROG_FOLLOW_NOT_IN_PURSUIT ;BR = YES
|
||
MOVE A11,A3
|
||
CALLA NOTDIR
|
||
SWAP A3,A11
|
||
CMP A2,A3 ;IS HE BEHIND US?
|
||
JREQ TROG_TURN_FOLLOW ;BR = YES, TURN AND FOLLOW HIM
|
||
|
||
MOVE @TROG_SEARCH_DIST,A3,W
|
||
CMP A3,A5 ;IS THIS ONE TOO FAR AWAY
|
||
JRHI TROG_NOT_FOLLOWING ;BR = NO
|
||
|
||
TROG_TURN_FOLLOW:
|
||
MMTM A12,A0,A1,A4,A5
|
||
CALLR TROG_CENTER
|
||
MOVE A2,A11
|
||
JSRP DINOLOOK_TURN
|
||
|
||
**** MOVE A11,A0
|
||
**** CALLA DINOLOAD ;LOAD UP THE NEW WALKING FRAMES
|
||
CALLR TROG_WALK_LOAD
|
||
|
||
MMFM A12,A0,A1,A4,A5
|
||
JRUC TROG_NO_PURSUIT
|
||
|
||
TROG_FOLLOW:
|
||
MOVB *A13(TPURSUIT),A3 ;ARE WE ALREADY IN PURSUIT?
|
||
JRNE TROG_FOLLOW_IN_PURSUIT ;BR = YES, THEN CONTINUE
|
||
TROG_FOLLOW_NOT_IN_PURSUIT:
|
||
MOVE *A4(OPLINK),A3,L
|
||
JRZ TROG_NO_PURSUIT ;DON'T PURSUE A DINO OUT OF CONTROL
|
||
MOVE *A4(OXVEL),A6,L ;IS HE ON THE MOVE?
|
||
JRNE TROG_FOLLOW_SAME ;BR = YES
|
||
MOVE *A4(OZVEL),A6,L
|
||
JREQ TROG_FOLLOW_IN_PURSUIT_1ST ;BR = HE'S STOPPED, FOLLOW 'IM
|
||
TROG_FOLLOW_SAME:
|
||
MOVE *A3(DDIR),A3,W
|
||
CMP A11,A3 ;GOING THE SAME DIRECTION?
|
||
JRNE TROG_NO_PURSUIT ;BR = NO, THEN YOU CANNOT BE
|
||
TROG_FOLLOW_IN_PURSUIT_1ST:
|
||
TROG_FOLLOW_IN_PURSUIT:
|
||
MOVE A0,A6
|
||
MOVE *A4(OID),A0,W
|
||
|
||
**** CALLA GET_TENSION ;GET THE TENSION TOWARD THIS DINO
|
||
CLR A1
|
||
|
||
SLL 28,A0
|
||
SRL 28,A0
|
||
CALLA GPLAYD
|
||
MOVE A6,A0
|
||
MOVE *A2(PBOZO),A6,W ;IS HE A BOZO?
|
||
JRZ TROG_FOLLOW_NO_BOZO ;BR = NO
|
||
MOVK MAXPURSUIT,A6 ;MAKE IT EASY FOR THE BOZO'S
|
||
JRUC TROG_EVEN_P_R
|
||
TROG_FOLLOW_NO_BOZO:
|
||
SRL 1,A1 ;IS HE PISSED AT THIS GUY?
|
||
JRZ TROG_FOLLOW_NORM ;BR = NO, DO A NORMAL FOLLOW
|
||
*TROG DOES THIS TO GUYS WHO KILL HIM TOO MUCH
|
||
MOVE @TROG_PURSUIT,A6
|
||
SUB A1,A6
|
||
CMPI MINPURSUIT,A6 ;IS HE MIN'D OUT?
|
||
JRGE TROG_EVEN_P_R ;BR = NO
|
||
MOVK MINPURSUIT,A6 ;YES, DON'T GET TO SMART TROG
|
||
TROG_EVEN_P_R:
|
||
CMP A6,A5 ;IS TROG CONSIDERED ON HIS TAIL?
|
||
JRHI TROG_NO_PURSUIT ;BR = NO
|
||
MOVB A6,*A13(TPRESET)
|
||
MOVK 1,A6 ;YES, GET MOVIN'
|
||
MOVB A6,*A13(TPURSUIT)
|
||
JRUC TROG_GOTO_NEXT
|
||
|
||
TROG_FOLLOW_NORM:
|
||
MOVE @TROG_PURSUIT,A6
|
||
CMP A6,A5 ;IS TROG CONSIDERED ON HIS TAIL?
|
||
JRHI TROG_NO_PURSUIT ;BR = NO
|
||
MOVK 1,A6 ;YES, GET MOVIN'
|
||
MOVB A6,*A13(TPURSUIT)
|
||
MOVE @TROG_PURSUIT_RESET,A6
|
||
MOVB A6,*A13(TPRESET)
|
||
JRUC TROG_GOTO_NEXT
|
||
|
||
TROG_NO_PURSUIT:
|
||
CLR A6
|
||
MOVB A6,*A13(TPURSUIT)
|
||
MOVB A6,*A13(TPRESET)
|
||
*
|
||
*A4 = DINO TO FOLLOW OBJECT POINTER
|
||
TROG_GOTO_NEXT:
|
||
MOVE A4,*A13(TDINO),L ;KEEP TRACK OF THE DINO BEING CHASED
|
||
MOVE *A4(OID),A6,W
|
||
SLL 28,A6
|
||
SRL 28,A6
|
||
MOVB A6,*A13(TPLAYER)
|
||
CALLR CLEAR_TRAP ;HE CAN'T BE TRAPPED NOW
|
||
MOVE @TROG_LOOK_COUNT,A6
|
||
CMP A6,A5
|
||
JRHS TROG_LOAD_NEXT
|
||
MOVE A6,A5 ;FEWEST NUMBER OF MOVES 'TIL CLEAR
|
||
TROG_LOAD_NEXT:
|
||
MOVB A5,*A13(TNEXTLOOK)
|
||
CLRC
|
||
*A4 = PTR TO DINOSAUR TO FOLLOW, OR ZERO IF NOT FOLLOWING ANYONE
|
||
TROG_LOOK_FOLLOW_X:
|
||
MOVE A4,A4 ;CLEAR Z, DO NOT FUCK WITH C!
|
||
PULLP A1
|
||
RETP
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TROG_VALIDATE_CHASEE - MAKE SURE THE CURRENT OBJECT THAT TROG IS *
|
||
* CHASING IS STILL VALID. *
|
||
* A13 = PTR TO TROG DATA STRUCTURE *
|
||
* RETURNS: *
|
||
* TROG PURSUIT VARIABLES CLEARED IF OBJECT NO LONGER EXISTS *
|
||
* *
|
||
**************************************************************************
|
||
TROG_VALIDATE_CHASEE:
|
||
MMTM SP,A0,A1
|
||
MOVE *A13(TDINO),A0,L ;IS TROG AFTER SOMEONE?
|
||
JRZ TROG_NO_CHASE ;BR = NO
|
||
MOVI DINOS,A1 ;VALIDATE DINO THAT TROG IS CHASING
|
||
CALLA ISSUPP ;DOES IT STILL EXIST?
|
||
JRNZ TROG_NO_CHASE ;BR = YES
|
||
CALLR CLEAR_PURSUIT
|
||
TROG_NO_CHASE:
|
||
MMFM SP,A0,A1
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TROG_DIG - TROG DIGS INTO THE ISLAND AND APPEARS ELSEWHERE. *
|
||
* A8 = PTR TO TROG. *
|
||
* A13 = PTR TO TROGS CONTROL PROCESS *
|
||
* NOTE: JUMPS TO TROGDEATH_OLD_RET *
|
||
* *
|
||
**************************************************************************
|
||
TROG_DIG:
|
||
MOVE @BONUS_WAVE,A0,W ;IS THIS A BONUS WAVE?
|
||
JREQ TROG_DIG_OK ;BR = NO, OK TO DIG
|
||
|
||
MOVE *A13(DDIR),A11,W
|
||
MOVE *A13(TWALKFRM),A9,L
|
||
JRUC TROGWLP ;ABORT TO WALKING
|
||
|
||
TROG_DIG_OK
|
||
CALLR TROG_VALIDATE_CHASEE
|
||
|
||
MOVI TRAPDEC,A0
|
||
|
||
MOVE *A13(TTRAPDIG),A1,W
|
||
SUB A0,A1
|
||
CMPI TRAPMINTIME,A1
|
||
JRGE TROG_STUF_TTIME
|
||
|
||
MOVB *A13(TSPEEDUPS),A0 ;ANYMORE SPEED-UPS FOR TROG
|
||
JRLT TROG_NOMORE_SPEED ;BR = NO
|
||
DEC A0
|
||
MOVB A0,*A13(TSPEEDUPS) ;ONE LESS
|
||
MOVE *A13(DSPEED),A0,W
|
||
ADDI 0200H,A0 ;ADD SOME FUEL TO THE FIRE
|
||
MOVE A0,*A13(DSPEED),W
|
||
TROG_NOMORE_SPEED:
|
||
MOVI TRAPMINTIME,A1
|
||
TROG_STUF_TTIME:
|
||
MOVE A1,*A13(TTRAPDIG),W
|
||
|
||
**** CALLA ADD_FRUST ;ADD SOME FRUSTRATION
|
||
|
||
**** MOVE *A13(TDINO),A0,L ;WHAT DINO MADE ME DIG?
|
||
**** JRZ TROG_DIG_NBT ;BR = NOBODY
|
||
**** MOVE *A0(OID),A0,W
|
||
**** MOVK 1,A1
|
||
**** CALLA BUILD_TENSION ;GET PISSED AT HIM
|
||
*
|
||
*ENTER HERE IF YOU WANT TO SKIP THE TENSION AND SPEED BUILDING STUFF
|
||
*
|
||
TROG_DIG_NBT:
|
||
MOVI DEADTROGOID,A1
|
||
MOVE A1,*A8(OID),W ;MAKE HIM DEAD
|
||
|
||
CALLR GET_TROG_MPNT
|
||
|
||
MOVE A0,*A13(PTEMP1),L
|
||
MOVE A3,*A13(DINITPOS),L ;RETURN POINT IF NEEDED
|
||
CALLA PSTOP
|
||
CALLA TROG_CENTER
|
||
MOVI DIGU,A0
|
||
JSRP ANIMATE_DIR
|
||
MOVE *A13(PTEMP1),A11,L
|
||
CREATE TROGSUBPID,WHIRL_PIT
|
||
MOVI 0A000H,A2 ;SINK RATE
|
||
JSRP CLIP_INTO
|
||
JRUC TROGDEATH_OLD_RET
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* WHIRL_PIT - START A WHIRLING DUST CLOUD, THEN START A PIT AND DELETE *
|
||
* EVERYTHING. *
|
||
* A11 = MOVE POINT TO CENTER EVERYTHING UPON *
|
||
* *
|
||
**************************************************************************
|
||
WHIRL_PIT:
|
||
MOVI WHIRLINIT,A14
|
||
CALLA GPALOBJSTF ;DO THE OBJECT
|
||
JRZ WHIRL_PIT_DIE
|
||
MOVE A13,*A0(OPLINK),L ;LINK IT UP
|
||
MOVE A0,A8
|
||
MOVE *A11(MOVEPOS),A3,L
|
||
CALLA OBJ_TO_PNT
|
||
CALLA SET_MZPOS
|
||
CALLA INSERT_OBJ
|
||
MOVI WHIRL_SCRIPT,A9
|
||
MOVK 1,A1
|
||
JSRP FRANIM ;FEEL THE POWER OF THE WIND
|
||
MOVK 1,A1
|
||
JSRP FRANIM ;FINISH THE FART
|
||
CALLA DELETE_OBJ
|
||
WHIRL_PIT_DIE:
|
||
DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TRAP_CHECK - FIND OUT IF THE GUY HAS BEEN TRAPPED IN AN AREA TOO LONG. *
|
||
* A3 = CURRENT POSITION OF DUDE *
|
||
* A13 = PTR TO DUDES PROCESS(DINO TYPE) *
|
||
* RETURNS: *
|
||
* Z = NOT TRAPPED *
|
||
* NZ = TRAPPED *
|
||
* *A13(TMINTL),L = ADJUSTED IF NECESSARY. *
|
||
* *A13(TMAXLR),L = ADJUSTED IF NECESSARY. *
|
||
* *A13(TTRAPTIME),W = CLR IF HE'S OUT, INCREMENTED IF HE'S IN *
|
||
* *A13(TTRAPPED),B = 1 IF THE GUY IS TRAPPED. *
|
||
* *
|
||
**************************************************************************
|
||
TRAP_CHECK
|
||
MMTM SP,A1,A2,A3,A4
|
||
MOVE *A13(TMINTL),A1,L
|
||
JRZ TRAP_CHECK_INIT ;BR = INITIALIZE BOTH
|
||
CLR A4
|
||
CMPXY A1,A3 ;COMPARE NEW AGAINST CURRENT
|
||
JRYGE TRAP_CK_MINX
|
||
MOVE A3,A2
|
||
SRL 16,A2
|
||
MOVE A2,*A13(TMINTL+16),W ;STORE NEW TLY
|
||
INC A4
|
||
CMPXY A1,A3 ;COMPARE NEW AGAINST CURRENT
|
||
TRAP_CK_MINX:
|
||
JRXGE TRAP_CHECK_NEXT
|
||
MOVE A3,*A13(TMINTL),W ;STORE NEW TLX
|
||
JRUC TRAP_CHECK_CLR
|
||
TRAP_CHECK_NEXT:
|
||
MOVE A4,A4
|
||
JRNE TRAP_CHECK_CLR
|
||
MOVE *A13(TMAXLR),A1,L ;CHECK NEW AGAINST LOWER RIGHT
|
||
JRZ TRAP_CHECK_INIT ;BR = LR IS INTACT
|
||
CLR A4
|
||
|
||
CMPXY A1,A3 ;COMPARE NEW AGAINST CURRENT
|
||
JRYLE TRAP_CK_MAXX
|
||
MOVE A3,A2
|
||
SRL 16,A2
|
||
MOVE A2,*A13(TMAXLR+16),W ;STORE NEW LRY
|
||
INC A4
|
||
CMPXY A1,A3 ;COMPARE NEW AGAINST CURRENT
|
||
TRAP_CK_MAXX:
|
||
JRXGT TRAP_NEW_LRX
|
||
MOVE A4,A4
|
||
JRNE TRAP_CHECK_CLR
|
||
JRUC TRAP_CHECK_INC ;HE'S STUCK IN A BOX
|
||
TRAP_NEW_LRX:
|
||
MOVE A3,*A13(TMAXLR),W ;STORE NEW TLX
|
||
TRAP_CHECK_CLR:
|
||
CLR A1
|
||
MOVE A1,*A13(TTRAPTIME),W
|
||
JRUC TRAP_CHECK_X ;EXIT WITH Z BIT SET
|
||
TRAP_CHECK_INIT:
|
||
MOVE A3,*A13(TMINTL),L ;INITIALIZE BOTH
|
||
MOVE A3,*A13(TMAXLR),L
|
||
JRUC TRAP_CHECK_CLR
|
||
TRAP_CHECK_INC:
|
||
MOVE *A13(TTRAPTIME),A1,W
|
||
INC A1
|
||
MOVE A1,*A13(TTRAPTIME),W
|
||
MOVE *A13(TTRAPDIG),A2,W
|
||
CMP A2,A1 ;HAS HE BEEN HERE TOO LONG?
|
||
JRLO TRAP_CHECK_NOT ;BR = NO
|
||
MOVI 1,A1 ;MUST EXIT WITH Z CLR, MOVI O.K.
|
||
JRUC TRAP_CHECK_X
|
||
TRAP_CHECK_NOT:
|
||
CLR A1
|
||
TRAP_CHECK_X:
|
||
MOVB A1,*A13(TTRAPPED) ;DO THE RIGHT THING WITH THE FLAG
|
||
MMFM SP,A1,A2,A3,A4
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CLEAR_TRAP - CLEAR TROGS TRAP VARIABLES. *
|
||
* A13 = PTR TO TROG PROCESS *
|
||
* *
|
||
**************************************************************************
|
||
CLEAR_TRAP:
|
||
PUSH A0
|
||
CLR A0
|
||
MOVB A0,*A13(TTRAPPED) ;RESET TRAP VARIABLES
|
||
MOVE A0,*A13(TMINTL),L
|
||
MOVE A0,*A13(TMAXLR),L
|
||
PULL A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CLEAR_PURSUIT - CLEAR TROGS PURSUIT VARIABLES. *
|
||
* A13 = PTR TO TROG PROCESS *
|
||
* *
|
||
**************************************************************************
|
||
CLEAR_PURSUIT:
|
||
PUSH A0
|
||
CLR A0
|
||
MOVB A0,*A13(TPURSUIT) ;RESET PURSUIT VARIABLES
|
||
MOVB A0,*A13(TPRESET)
|
||
MOVE A0,*A13(TDINO),L
|
||
PULL A0
|
||
RETS
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TROG_VEL_NORMAL - ADVANCE THE CURRENT TROG SPEED TOWARD *
|
||
* THE VALUE IN DSPEED. *
|
||
* A13 = PTR TO TROG DATA STRUCTURE. *
|
||
* A8 = PTR TO TROG *
|
||
* *A13(DVNFLAG),B = IF<>0 THEN DO NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
TROG_VEL_NORMAL:
|
||
MMTM SP,A0,A1,A2
|
||
MOVB *A13(DVNFLAG),A1 ;ARE WE ALLOWED TO DO THIS
|
||
JRNE TROG_VNX ;BR = NO
|
||
MOVE *A13(DSPEED),A1,W
|
||
ZEXT A1
|
||
SLL 4,A1 ;GET THE BASE TROG SPEED
|
||
MOVE *A13(DVEL),A0,L
|
||
SUB A0,A1
|
||
JRZ TROG_VNX ;BR = THEY ARE EQUAL, NO CHANGE NECES.
|
||
JRN TROG_VNN ;BR = MUST ADD NEGATIVE
|
||
MOVI 100H,A0
|
||
JRUC TROG_VN
|
||
TROG_VNN:
|
||
MOVI -100H,A0
|
||
TROG_VN:
|
||
CALLA DINO_ADD_VEL
|
||
TROG_VNX:
|
||
MMFM SP,A0,A1,A2
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CLIP_INTO - CLIP AN OBJECT COMPLETELY INTO SOMETHING WHILE ANIMATING *
|
||
* ABORTS IF END OF SCRIPT WAS REACHED BEFORE CLIP COMPLETE *
|
||
* A2 = CLIP RATE (+Y VEL) *
|
||
* A8 = OBJECT *
|
||
* A9 = ANIMATION SCRIPT *
|
||
* RETURNS: *
|
||
* A9 = PTR TO NEXT FRAME AFTER CLIP IS COMPLETE. *
|
||
* OBJECT IS STOPPED AND TURNED OFF UPON COMPLETION. *
|
||
* NOTE: CALL WITH JSRP *
|
||
* *
|
||
**************************************************************************
|
||
CLIP_INTO:
|
||
MMTM A12,A10,A11
|
||
MOVE *A8(OYPOS),A10,W
|
||
MOVE A2,*A8(OYVEL),L ;GIVE HIM SOME VELOCITY
|
||
DIG_NXT:
|
||
**** MOVE *A8(OIMG),A1,L ;RESET SIZE TO AVOID CONFUSION
|
||
**** MOVE *A1(ISIZEY),A2,W
|
||
**** MOVE A2,*A8(OSIZEY),W
|
||
MOVK 4,A1
|
||
JSRP FRANIM
|
||
JRC DIG_X
|
||
MOVE *A8(OIMG),A1,L ;LOAD IMAGE HEADER FOR CLIP
|
||
MOVE A0,A11
|
||
JRUC DIG_CLIP
|
||
DIG_LP:
|
||
MOVE *A8(OIMG),A1,L
|
||
MOVE *A8(OFLAGS),A4,W
|
||
**** MOVE *A1(ISIZEY),A2,W ;RESET SIZE TO AVOID CONFUSION
|
||
**** MOVE A2,*A8(OSIZEY),W
|
||
XORI M_PZPLUS,A4 ;FAKE ANI INTO ANIMATING YOURSELF
|
||
CALLA ANI ;ANIMATE TO YOURSELF, RESETTING CLIP
|
||
DIG_CLIP:
|
||
MOVE *A1(ISIZEY),A3,W
|
||
MOVE *A8(OYPOS),A2,W
|
||
SUB A10,A2
|
||
JRN DIG_SKIP_CLIP ;NO NEGATIVE CLIPPING
|
||
CMP A3,A2
|
||
JRGE DIG_X ;DONE...
|
||
SLL 16,A2 ;CLIP OFF THE BOTTOM
|
||
CLR A3
|
||
CALLA CLIPOBJ
|
||
DIG_SKIP_CLIP:
|
||
SLEEP 1
|
||
DSJ A11,DIG_LP
|
||
JRUC DIG_NXT
|
||
DIG_X:
|
||
CALLA PSTOP
|
||
CALLA OBJ_OFF
|
||
MMFM A12,A10,A11
|
||
RETP
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TROGHHIT - TROG HIT A HORIZONTAL BAR *
|
||
* A0 = PTR TO TROG *
|
||
* A8 = PTR TO BAR *
|
||
* *
|
||
**************************************************************************
|
||
TROGHHIT:
|
||
PUSH A1
|
||
CALLR TROG_BUMP ;BASHES A1
|
||
BTST 1,A1
|
||
JREQ TROGHITX ;DIDN'T DO IT
|
||
JRUC TDEFLECT
|
||
**************************************************************************
|
||
* *
|
||
* TROGVHIT - TROG HIT A VERTICAL BAR *
|
||
* A0 = PTR TO TROG *
|
||
* A8 = PTR TO BAR *
|
||
* *
|
||
**************************************************************************
|
||
TROGVHIT:
|
||
PUSH A1
|
||
CALLR TROG_BUMP ;BASHES A1
|
||
BTST 0,A1
|
||
JREQ TROGHITX ;NOT A VALID COLLISION
|
||
*ENTRY POINT TO DEFLECT TROG
|
||
TDEFLECT:
|
||
MOVE *A0(OID),A1,W
|
||
CMPI DEADTROGOID,A1 ;IS HE DYING?
|
||
JREQ TROGHITX ;BR = HE'S ALREADY DEAD, NO MORE
|
||
MOVE *A0(OPLINK),A1,L
|
||
JRZ TROGHITX ;BR = NO PROCESS, BUM!
|
||
MMTM SP,A0,A7,A8,A9
|
||
MOVE A8,A9 ;PASS WALL OBJECT
|
||
MOVE A0,A8 ;PASS THE TROG PTR
|
||
MOVE A1,A0 ;PUT PROCESS PTR HERE FOR XFERPROC
|
||
MOVI TROGDEFL,A7
|
||
CALLA XFERPROC_ID ;TRANSFER CONTROL OF THE PROCESS
|
||
MMFM SP,A0,A7,A8,A9
|
||
TROGHITX:
|
||
PULL A1
|
||
MOVE A0,A0 ;WITH Z BIT SET TO CONTINUE COLLISION
|
||
RETS
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TROGDINO - TROG HIT A DINOSAUR *
|
||
* A0 = PTR TO TROG *
|
||
* A8 = PTR TO DINOSAUR *
|
||
* *
|
||
**************************************************************************
|
||
TROGDINO:
|
||
PUSH A1
|
||
|
||
MOVE *A0(OID),A1,W
|
||
CMPI DEADTROGOID,A1 ;IS TROG CURRENTLY DYING?
|
||
JREQ TROGDINOX ;BR = YES, BLOW THIS OFF
|
||
|
||
CALLR TROG_BUMP ;BASHES A1
|
||
JRZ TROGDINO_ARGH ;BR = TROG DID NOT BUMP DINO
|
||
|
||
*
|
||
*A1 AS RETURNED FROM TROG_BUMP
|
||
TROG_PUNCH_DINO:
|
||
MMTM SP,A0,A4,A5,A6,A7,A8,A9,A11
|
||
|
||
MOVE @FREEZE_TIME,A7,W
|
||
JRNZ TROGDINO_BAIL
|
||
|
||
MOVE *A0(OPLINK),A4,L ;GET TROG'S CONTROL PROCESS
|
||
JRZ TROGDINO_BAIL ;BR = NO CONTROLLING PROCESS, BAIL
|
||
|
||
MOVE *A8(OPLINK),A5,L ;GET THE OTHER DINOS CONTROL PROCESS
|
||
JRZ TROGDINO_BAIL ;BR = NO CONTROL
|
||
|
||
MOVB *A4(TTYPE),A7
|
||
CMPI TTYPE_WHL,A7 ;IS HE THE WHEEL DUDE
|
||
JREQ TROGDINO_BAIL ;BR = YES, NO COLLISIONS ALLOWED
|
||
|
||
*CHECK IF TROG IS ATTACKING FROM BEHIND. IF HE IS AND HE IS BARE HANDED
|
||
* THEN BLOW OFF THE COLLISION UNTIL HE'S WAY IN THERE
|
||
BTST 0,A1 ;WAS IT AN X HIT?
|
||
JRZ TROGDINO_HIT ;BR = NO
|
||
|
||
MOVE *A0(OXVEL),A1,L
|
||
JRN TROGDINO_XLEFT ;BR = TROG IS MOVING LEFT
|
||
MOVE *A8(OXVEL),A1,L ;IS DINO MOVING RIGHT ALSO
|
||
JRN TROGDINO_HIT ;BR = NO
|
||
JRNZ TROGDINO_BEHIND ;BR = YES
|
||
MOVE *A8(OFLAGS),A1,W
|
||
BTST B_FLIPH,A1 ;IS DINO FACING RIGHT?
|
||
JRNE TROGDINO_HIT ;BR = NO
|
||
TROGDINO_BEHIND:
|
||
CALLA CK_TROGDINO_CENT
|
||
JRNC TROGDINO_BAIL ;BR = HE'S NOT CLOSE ENOUGH TO HIT
|
||
JRUC TROGDINO_HIT
|
||
TROGDINO_XLEFT
|
||
MOVE *A8(OXVEL),A1,L ;IS DINO MOVING LEFT ALSO
|
||
JRN TROGDINO_BEHIND ;BR = YES
|
||
JRNZ TROGDINO_HIT ;BR = COMING AT HIM, QUICK! PUNCH!
|
||
MOVE *A8(OFLAGS),A1,W
|
||
BTST B_FLIPH,A1 ;IS DINO FACING LEFT?
|
||
JRNE TROGDINO_BEHIND ;BR = YES
|
||
|
||
TROGDINO_HIT:
|
||
CALLA BONE_BETWEEN ;IS THERE A BONE BETWEEN THESE TWO
|
||
JRNZ TROGDINO_BAIL ;BR = YES
|
||
|
||
MOVB *A5(DDIZZYFLG),A1 ;IS THIS DINOSAUR DIZZY?
|
||
JRNE TROGDINO_REV ;BR = YES
|
||
|
||
MOVB *A5(DTREXFLG),A1
|
||
JRNE TROGDINO_REV
|
||
|
||
MOVE *A8(OID),A7,W
|
||
MOVE A7,A1
|
||
SRL 4,A1
|
||
SLL 4,A1
|
||
CMPI DEADDINOOID,A1 ;IS THE DINO DYING?
|
||
JREQ TROGDINO_REV ;BR = YES, JUST REVERSE
|
||
|
||
MOVE *A5(DPLAYER),A6,L ;GET THE PLAYER POINTER
|
||
JRZ TROGDINO_PUNCH ;NO PLAYER CONTROL
|
||
|
||
**** MMTM SP,A0,A13
|
||
**** MOVE A4,A13
|
||
**** MOVE A7,A0
|
||
**** CALLA GET_TENSION ;GET THE TENSION TOWARD THIS DINO
|
||
**** MMFM SP,A0,A13
|
||
****
|
||
**** CMPI TROGTOOPISSED,A1 ;IS TROG NOT INTO THIS GUY?
|
||
**** JRHS TROGDINO_PUNCH ;BR = NOT AT ALL
|
||
|
||
MOVE *A6(PBOZO),A1,W
|
||
CMPI 3,A1 ;TOO PITIFUL TO KILL
|
||
JRHS TROGDINO_REV ;BR = YES
|
||
|
||
MOVB *A5(DINVIN),A1 ;IS THIS DINO INVINCIBLE?
|
||
JRNZ TROGDINO_REV ;BR = YES
|
||
|
||
*TAKE A SWING AT THE DINOSAUR
|
||
TROGDINO_PUNCH:
|
||
MOVE A5,A9 ;LET'S PASS THE PUNCHEE PROCESS
|
||
MOVE A0,A8 ;NOW LET'S CREATE THE PUNCHING TROG
|
||
CALLA PSTOP ;STOP FIRST
|
||
MOVE A4,A0 ;GET THE PROCESS LINK
|
||
MOVK 1,A1
|
||
MOVB A1,*A0(DPUNCHFLG) ;TROG IS PUNCHING
|
||
CLR A1
|
||
MOVB A1,*A0(DDIZZYFLG) ;AND IS NOT DIZZY
|
||
MOVI TROG_PUNCH,A7
|
||
JRUC TROGDINO_XFER
|
||
|
||
*SEE IF THE DINO GOT TROG
|
||
TROGDINO_ARGH:
|
||
MMTM SP,A0,A4,A5,A6,A7,A8,A9,A11
|
||
SWAP A0,A8
|
||
|
||
CALLA IS_DINO_DEAD_A0
|
||
JRZ TROGDINO_BAIL
|
||
|
||
MOVE *A8(OPLINK),A4,L ;GET TROG'S CONTROL PROCESS
|
||
JRZ TROGDINO_BAIL ;BR = NO CONTROLLING PROCESS, BAIL
|
||
|
||
MOVE *A0(OPLINK),A5,L ;GET THE DINOS CONTROL PROCESS
|
||
JRZ TROGDINO_BAIL ;BR = NO CONTROL
|
||
|
||
MOVB *A5(DTREXFLG),A1 ;IS THIS DUDE IN REX MODE?
|
||
JREQ TROGDINO_DN ;BR = NO
|
||
|
||
CALLR TROG_BUMP ;AGGRESSOR BUMPAGE
|
||
JRNZ TD_TRYMUNCH ;BR = TREX DID VALIDLY HIT TROG
|
||
|
||
CALLR TREX_CLOSE_TROG ;ARE THEY ON THE SAME MOVE?
|
||
JRNZ TROGDINO_BAIL ;BR = NO
|
||
|
||
TD_TRYMUNCH
|
||
MOVB *A5(DPUNCHFLG),A1
|
||
JRNZ TROGDINO_BAIL ;TY IS ALREADY MUNCHING
|
||
|
||
*INITIATE THE FEAST (IT IS LIKE I HAVE ALWAYS SAID, "EAT OR BE EATEN.")
|
||
MOVE A8,A6
|
||
MOVE A0,A8 ;PASS THE DINO OBJECT
|
||
MOVE A5,A0 ;LET'S XFER TO THE DINO MUNCHER
|
||
CALLA PSTOP ;FIRST WE MUST STOP
|
||
MOVK 1,A1
|
||
MOVB A1,*A0(DPUNCHFLG) ;YES, HE IS MUNCHING
|
||
CLR A1
|
||
MOVB A1,*A0(DDIZZYFLG) ;NO, HE IS NOT GETTING PUNCHED
|
||
MOVE A1,*A0(PCOMM),W ;CLEAR THE COMMUNICATION LINE
|
||
MOVI DINO_MUNCH,A7
|
||
MOVE A4,A9 ;PASS TROG'S PROCESS
|
||
MOVE A6,A11 ;SEND THE TROGGY OBJECT
|
||
CALLA XFERPROC_ID ;WAKE UP IN A DAZE
|
||
|
||
MOVE A6,A8 ;TRANSFER TO TROG GETTING EATEN
|
||
CALLA PSTOP ;STOP FIRST
|
||
MOVE A4,A0 ;GET THE PROCESS LINK
|
||
MOVI DEADTROGOID,A1 ;HE'S FREAKIN' DEAD
|
||
MOVE A1,*A8(OID),W
|
||
MOVK 1,A1
|
||
MOVB A1,*A0(DDIZZYFLG) ;TROG IS GETTING MUNCHED, HA HA
|
||
CLR A1
|
||
MOVB A1,*A0(DPUNCHFLG) ;AND IS NOT PUNCHING
|
||
ORIM M_NOCOLL,*A8(OFLAGS),W ;MAKE SURE COLLISIONS ARE OFF
|
||
CALLA GETA11
|
||
MOVI TROG_EATEN,A7
|
||
MOVE A5,A9 ;PASS THE PTR TO THE DINOSAUR PROCESS
|
||
JRUC TROGDINO_XFER
|
||
|
||
TROGDINO_DN
|
||
MOVE A5,A1
|
||
MOVI GET_DINO_MPNT,A6
|
||
MOVI GET_TROG_MPNT,A7
|
||
CALLA DINO_PUNCHED
|
||
JREQ TD_DINO_PUNCH
|
||
|
||
MOVE @FREEZE_TIME,A7,W
|
||
JRNZ TROGDINO_BAIL
|
||
|
||
MOVB *A5(DINVIN),A7 ;DID THE DINO TURN INVINCIBLE?
|
||
JRNZ TROGDINO_BAIL ;BR = YES
|
||
|
||
SWAP A0,A8
|
||
MOVE A4,A1
|
||
MOVI GET_TROG_MPNT,A6
|
||
MOVI GET_DINO_MPNT,A7
|
||
CALLA PUNCHED
|
||
JRNE TROGDINO_BAIL
|
||
|
||
MOVE A0,A6 ;STORE THE TROG OBJECT HERE
|
||
MOVE A5,A0 ;LET'S XFER TO THE PUNCHEE PROCESS
|
||
CALLA PSTOP ;FIRST WE MUST STOP
|
||
MOVK 1,A1
|
||
MOVB A1,*A0(DDIZZYFLG) ;YES, HE IS GETTING PUNCHED
|
||
CLR A1
|
||
MOVB A1,*A0(DPUNCHFLG) ;NO, HE IS NOT PUNCHING BACK
|
||
MOVE A1,*A0(PCOMM),W ;CLEAR DINO COMM LINE
|
||
MOVE A1,*A4(PCOMM),W ;CLEAR TROG COMM LINE
|
||
|
||
MOVB *A4(TTYPE),A7
|
||
CMPI TTYPE_CLUB,A7 ;IS HE THE CLUB DUDE
|
||
JRNE TROGDINO_P_EAT ;BR = NO, THEN NORMAL EAT
|
||
MOVI DINO_TROG_CLUB,A7
|
||
JRUC TROGDINO_EAT_XFER
|
||
TROGDINO_P_EAT:
|
||
MOVI DINO_TROG_OOF,A7
|
||
TROGDINO_EAT_XFER:
|
||
CALLA XFERPROC_ID ;WAKE UP IN A DAZE
|
||
|
||
MOVE A0,A11 ;PASS THE PUNCHEE
|
||
MOVE A6,A8 ;NOW LET'S CREATE THE PUNCHING TROG
|
||
CALLA PSTOP ;STOP FIRST
|
||
MOVE A4,A0 ;GET THE PROCESS LINK
|
||
CALLA GETA9
|
||
MOVI TROG_EAT,A7
|
||
MOVK 1,A1
|
||
MOVB A1,*A0(DPUNCHFLG) ;HE IS NO LONGER DEADLY
|
||
JRUC TROGDINO_XFER
|
||
|
||
|
||
*MAKE DINOSAUR SMACK TROG
|
||
TD_DINO_PUNCH
|
||
CALLA PSTOP ;STOP FIRST
|
||
MOVE A4,A0 ;GET THE PROCESS LINK
|
||
MOVK 1,A1
|
||
MOVB A1,*A0(DDIZZYFLG) ;TROG IS GETTING PUNCHING, HA HA
|
||
CLR A1
|
||
MOVB A1,*A0(DPUNCHFLG) ;AND IS NOT PUNCHING
|
||
ORIM M_NOCOLL,*A8(OFLAGS),W ;TURN COLLISIONS OFF AT THIS POINT
|
||
MOVI TROG_OOF,A7
|
||
MOVE A5,A9 ;PASS THE PTR TO THE DINOSAUR PROCESS
|
||
CALLA GETA11 ;MAKE SURE A11 STAYS CORRECT
|
||
|
||
**** JRUC TROGDINO_XFER
|
||
CALLA XFERPROC_ID ;TRANSFER CONTROL OF THE PROCESS
|
||
MMFM SP,A0,A4,A5,A6,A7,A8,A9,A11
|
||
PULL A1
|
||
JAUC DUMSRETS ;RESET TROG/DINO COLLISIONS
|
||
|
||
*
|
||
*REVERSE DINOSAUR
|
||
*A0 = PTR TO DINO
|
||
*A5 = PTR TO DINO PROCESS
|
||
****TROGDINO_DINOREV:
|
||
**** MOVE A0,A8
|
||
**** CALLA PSTOP ;AND STOP THE DINOSAUR
|
||
**** MOVE A5,A0 ;GET THE PROCESS LINK
|
||
**** MOVI DINOREV,A7
|
||
**** JRUC TROGDINO_XFER
|
||
*
|
||
*REVERSE TROG
|
||
*A0 = PTR TO TROG
|
||
*A4 = PTR TO TROG PROCESS
|
||
TROGDINO_REV:
|
||
MOVE A0,A8 ;PASS TROG
|
||
CALLA PSTOP ;AND STOP HIM
|
||
MOVE A4,A0 ;GET THE PROCESS LINK
|
||
MOVI TROG_REV,A7
|
||
JRUC TROGDINO_XFER
|
||
|
||
TROGDINO_XFER:
|
||
CALLA XFERPROC_ID ;TRANSFER CONTROL OF THE PROCESS
|
||
TROGDINO_BAIL: ;BAIL-OUT POINT FOR ERRORS
|
||
MMFM SP,A0,A4,A5,A6,A7,A8,A9,A11
|
||
TROGDINOX:
|
||
PULL A1
|
||
JAUC DUMCRETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TROG_EATEN - TROG IS TO BE EATEN *
|
||
* A8 = PTR TO TROG *
|
||
* A9 = PTR TO DINO PROCESS *
|
||
* A11 = TROG PROCESS A11 *
|
||
* A13 = PTR TO TROG PROCESS *
|
||
* *
|
||
**************************************************************************
|
||
TROG_EATEN:
|
||
MOVE *A13(PROCID),A0,W
|
||
PUSHP A0
|
||
MOVI INDPID,A0
|
||
MOVE A0,*A13(PROCID),W ;BE INDISTINGUISHABLE
|
||
MOVB *A13(TTYPE),A0
|
||
CMPI TTYPE_WHL,A0
|
||
JREQ TE_WHEEL
|
||
MOVI CLUBOUTU,A0
|
||
JSRP FRANIMATE_DIR
|
||
TE_X
|
||
PULLP A0
|
||
MOVE A0,*A13(PROCID),W
|
||
|
||
**** JRUC TROGDEATH_EATEN
|
||
CALLR DELETE_TROG
|
||
DIE
|
||
|
||
TE_WHEEL
|
||
SLEEP 30
|
||
JRUC TO_WHEEL_OUT
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TROGPIT - WALKED INTO A LOCAL PIT. *
|
||
* A0 = PTR TO TROG *
|
||
* A8 = PTR TO PIT *
|
||
* *
|
||
**************************************************************************
|
||
TROGPIT:
|
||
PUSH A1
|
||
MOVE *A0(OID),A1,W
|
||
CMPI DEADTROGOID,A1 ;IS HE DYING?
|
||
JREQ TROGPITX ;BR = HE'S ALREADY DEAD, NO MORE
|
||
*** CALLR TROG_BUMP ;BASHES A1
|
||
*** JRZ TROGPITX
|
||
|
||
CALLR CK_TROG_CENT ;CHECK IF WE'RE NEAR THE PIT CENTER
|
||
JRNC TROGPITX ;BR = HE'S SAFE
|
||
|
||
MOVE *A0(OPLINK),A1,L
|
||
JRZ TROGPITX ;BR = NO CONTROLLING PROCESS
|
||
MMTM SP,A0,A7,A8,A9
|
||
MOVE A8,A9 ;PASS PIT OBJECT
|
||
MOVE A0,A8 ;PASS THE TROGSTER
|
||
MOVE A1,A0 ;FOR XFERPROC
|
||
MOVI TROGPIT_FALL,A7
|
||
CALLA XFERPROC_ID ;TRANSFER CONTROL OF THE PROCESS
|
||
MOVI DEADTROGOID,A1
|
||
MOVE A1,*A8(OID),W ;MARK HIM AS DEAD RIGHT AWAY
|
||
MMFM SP,A0,A7,A8,A9
|
||
TROGPITX:
|
||
PULL A1
|
||
MOVE A0,A0 ;WITH Z BIT SET TO CONTINUE COLLISION
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TROGTAR - TROG WALKED INTO A TAR PIT *
|
||
* A0 = PTR TO TROG *
|
||
* A8 = PTR TO TAR PIT *
|
||
* *
|
||
**************************************************************************
|
||
TROGTAR:
|
||
PUSH A1
|
||
MOVE *A0(OID),A1,W
|
||
CMPI DEADTROGOID,A1 ;IS HE DYING?
|
||
JREQ TROGTARX ;BR = HE'S ALREADY DEAD, NO MORE
|
||
CALLA CK_TROG_CENT
|
||
JRNC TROGTARX ;BR = HE'S NOT STUCK
|
||
MOVE *A0(OPLINK),A1,L
|
||
JRZ TROGTARX ;BR = NO CONTROLLING PROCESS
|
||
MMTM SP,A0,A7,A8,A9
|
||
MOVE A8,A9 ;PASS TAR OBJECT FOR YUKS
|
||
MOVE A0,A8 ;PASS THE TROGSAUR
|
||
MOVE A1,A0 ;FOR XFERPROC
|
||
MOVI TROGTAR_SINK,A7
|
||
CALLA XFERPROC_ID ;TRANSFER CONTROL OF THE PROCESS
|
||
MOVI DEADTROGOID,A1 ;MARK HIM AS DEAD, RIGHT THIS INSTANT
|
||
MOVE A1,*A8(OID),W
|
||
MMFM SP,A0,A7,A8,A9
|
||
TROGTARX:
|
||
PULL A1
|
||
MOVE A0,A0 ;WITH Z BIT SET TO CONTINUE COLLISION
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TROGFIRE - WALKED INTO A FIRE *
|
||
* A0 = PTR TO TROG *
|
||
* A8 = PTR TO FIRE *
|
||
* *
|
||
**************************************************************************
|
||
TROGFIRE:
|
||
PUSH A1
|
||
MOVE *A0(OID),A1,W
|
||
CMPI DEADTROGOID,A1 ;IS HE DYING?
|
||
JREQ TROGFIREX ;BR = HE'S ALREADY DEAD, NO MORE
|
||
CALLA CK_TROG_CENT
|
||
JRNC TROGFIREX ;BR = HE'S SAFE
|
||
|
||
MOVE *A0(OPLINK),A1,L
|
||
JRZ TROGFIREX ;BR = NO CONTROLLING PROCESS
|
||
MMTM SP,A0,A7,A8,A9
|
||
MOVE A8,A9 ;PASS FIRE OBJECT FOR YUKS
|
||
MOVE A0,A8 ;PASS THE DINOSAUR
|
||
MOVE A1,A0 ;FOR XFERPROC
|
||
MOVI TROGFIRE_BURN,A7
|
||
CALLA XFERPROC_ID ;TRANSFER CONTROL OF THE PROCESS
|
||
MOVI DEADTROGOID,A1
|
||
MOVE A1,*A8(OID),W
|
||
MMFM SP,A0,A7,A8,A9
|
||
TROGFIREX:
|
||
PULL A1
|
||
MOVE A0,A0 ;WITH Z BIT SET TO CONTINUE COLLISION
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TROGFLOWER - TROG COLLIDES WITH FLOWER *
|
||
* A0 = PTR TO TROG *
|
||
* A8 = PTR TO FLOWER *
|
||
* *
|
||
**************************************************************************
|
||
****TROGFLOWER:
|
||
**** MMTM SP,A0,A1,A7,A8,A10,A11
|
||
**** MOVI TROGSPEEDPID,A1
|
||
**** MOVI TROG_SPEEDUP,A7
|
||
**** JRUC TROG_PLANT_HIT
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TROGSHROOM - TROG COLLIDES WITH MUSHROOM *
|
||
* A0 = PTR TO TROG *
|
||
* A8 = PTR TO FLOWER *
|
||
* *
|
||
**************************************************************************
|
||
****TROGSHROOM:
|
||
**** MMTM SP,A0,A1,A7,A8,A10,A11
|
||
**** MOVI TROGSPEEDPID,A1
|
||
**** MOVI TROG_SLOWDOWN,A7
|
||
**** JRUC TROG_PLANT_HIT
|
||
*
|
||
*ENTRY FOR STUPID "ENEMY" THINGS
|
||
* A7 = PROCESS TO CREATE FOR TROG
|
||
* A0 = TROG
|
||
* A8 = THING
|
||
*NOTE: A14 IS TRASHED
|
||
****TROG_PLANT_HIT:
|
||
**** CALLR CK_TROG_CENT ;IS HE CLOSE ENOUGH TO GRAB IT?
|
||
**** JRNC TROG_PH_FL ;BR = NO
|
||
**** MOVE *A0(OPLINK),A10,L ;GET TROGS CONTROL
|
||
**** JRZ TROG_PH_FL ;THE TROG IS OUT OF CONTROL
|
||
**** MOVE A8,A11
|
||
**** MOVE A0,A8
|
||
**** CALLA GETPRC ;AND CREATE THE PROCESS
|
||
**** MOVE A11,A8
|
||
**** CALLA FREE_MOVE_EGG ;WIPE OUT THIS THING
|
||
**** CALLA OBJPROC_KILL
|
||
**** MOVI ENEMIES,A1
|
||
**** CALLA DELETE_OBJ_SUPP
|
||
**** SETZ ;END THIS SCAN PLEASE
|
||
**** JRUC TROG_PH_X
|
||
****TROG_PH_FL:
|
||
**** CLRZ
|
||
****TROG_PH_X:
|
||
**** MMFM SP,A0,A1,A7,A8,A10,A11
|
||
**** RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TROG_SPEEDUP - PROCESS TO SPEED UP TROG FOR A WHILE. *
|
||
* A8 = PTR TO TROG *
|
||
* *
|
||
**************************************************************************
|
||
****TROG_SPEEDUP:
|
||
**** MOVE *A13(PROCID),A0,W
|
||
**** CLR A1
|
||
**** NOT A1
|
||
**** CALLA KILALLA8 ;KILL THIS DINOS PROCS
|
||
**** MOVE *A8(OPLINK),A10,L
|
||
**** JRZ TROG_SU_X
|
||
**** SOUND1 TROGSPEED_SND
|
||
**** MOVE A13,A11 ;SAVE CURPROC POINTER
|
||
**** MOVE A10,A13 ;PASS TROG DATA STRUCTURE
|
||
**** MOVK 1,A0
|
||
**** MOVB A0,*A13(DVNFLAG) ;I AM MASTER
|
||
**** MOVE *A13(DVEL),A0,L
|
||
|
||
**** MOVE *A13(DSPEED),A0,W
|
||
**** ZEXT A0
|
||
**** SLL 3,A0
|
||
|
||
**** CALLA DINO_ADD_VEL
|
||
**** MOVE A11,A13 ;RETRIEVE CURPROC FOR SLEEP
|
||
**** SLEEP 10*60
|
||
**** CLR A0
|
||
**** MOVB A0,*A10(DVNFLAG) ;VELOCITY TO NORMAL
|
||
****TROG_SU_X:
|
||
**** DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TROG_SLOWDOWN - PROCESS TO SLOW DOWN THE TROG FOR A WHILE *
|
||
* A8 = PTR TO TROG *
|
||
* *
|
||
**************************************************************************
|
||
****TROG_SLOWDOWN:
|
||
**** MOVE *A13(PROCID),A0,W
|
||
**** CLR A1
|
||
**** NOT A1
|
||
**** CALLA KILALLA8
|
||
**** MOVE *A8(OPLINK),A10,L
|
||
**** JRZ TROG_SD_X
|
||
**** SOUND1 TROGSHROOM_SND
|
||
**** MOVE A13,A11 ;SAVE CURPROC POINTER
|
||
**** MOVE A10,A13 ;PASS DINO DATA STRUCTURE
|
||
**** MOVK 1,A0
|
||
**** MOVB A0,*A13(DVNFLAG) ;I AM MASTER
|
||
|
||
**** MOVE *A13(DSPEED),A0,W
|
||
**** ZEXT A0
|
||
**** SLL 3,A0
|
||
**** NEG A0
|
||
|
||
**** CALLA DINO_ADD_VEL
|
||
**** MOVE A11,A13 ;RETRIEVE CURPROC FOR SLEEP
|
||
**** SLEEP 10*60
|
||
**** CLR A0
|
||
**** MOVB A0,*A10(DVNFLAG)
|
||
****TROG_SD_X:
|
||
**** DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TROG_BUMP - CHECK TO SEE IF TROG (IN A0) BUMPED INTO THE OBJECT IN A8. *
|
||
* A0 = TROG *
|
||
* A8 = OBJECT TO CHECK AGAINST *
|
||
* RETURNS: *
|
||
* Z = A0 DID NOT BUMP INTO A8 *
|
||
* NZ = THEY BUMPED: *
|
||
* A1 = BIT 0: SET = BUMPED IN X *
|
||
* BIT 1: SET = BUMPED IN Y *
|
||
* NOTE: BASHES A14 *
|
||
* *
|
||
**************************************************************************
|
||
TROG_BUMP:
|
||
PUSH A2
|
||
CLR A1
|
||
MOVE *A0(OXVEL),A2,L
|
||
JRZ TROG_BUMPCKY ;NOT MOVING IN X, NO BUMP
|
||
CALLA WHICHSID
|
||
CALLA BUMPCK
|
||
JRZ TROG_BUMPCKY
|
||
MOVE *A8(OYVEL),A2,L
|
||
JRZ TROG_BUMPEDINX ;NO DOUBT ABOUT IT, HE BUMPED IT
|
||
CALLA ABOVBELO
|
||
NOTC ;ABOVE/BELOW SWAP
|
||
CALLA BUMPCK
|
||
JRZ TROG_BUMPCKY
|
||
TROG_BUMPEDINX:
|
||
CALLA VALIDHITX
|
||
JRNC TROG_BUMPCKY ;BR = THEY WERE NOT ON THE SAME PATH
|
||
BSET 0,A1 ;SHOW THE X BUMP
|
||
TROG_BUMPCKY:
|
||
MOVE *A0(OYVEL),A2,L
|
||
JRZ TROG_BUMPX
|
||
CALLA ABOVBELO ;ABOVE OR BELOW THE OBJECT
|
||
CALLA BUMPCK
|
||
JRZ TROG_BUMPX
|
||
MOVE *A8(OXVEL),A2,L
|
||
JRZ TROG_BUMPEDINY ;NO DOUBT ABOUT IT, HE BUMPED IT
|
||
CALLA WHICHSID
|
||
NOTC ;LEFT/RIGHT SWAP
|
||
CALLA BUMPCK
|
||
JRZ TROG_BUMPX
|
||
TROG_BUMPEDINY:
|
||
CALLA VALIDHITY
|
||
JRNC TROG_BUMPX ;BR = THEY WERE NOT ON THE SAME PATH
|
||
BSET 1,A1
|
||
TROG_BUMPX:
|
||
MOVE A1,A1 ;SET THE STATUS REGISTER
|
||
PULL A2
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TREX_CLOSE_TROG - DETERMINE IF TREX AND TROG ARE ON THE SAME SPOT. *
|
||
* A0 = PTR TO TREX *
|
||
* A8 = PTR TO TROG *
|
||
* RETURNS: *
|
||
* Z = THEY ARE CLOSE TO THE SAME SPOT *
|
||
* NZ = NOT IN THE SAME VICINITY *
|
||
* *
|
||
**************************************************************************
|
||
TREX_CLOSE_TROG:
|
||
MMTM SP,A0,A1,A2,A3
|
||
MOVE A8,A2
|
||
MOVE A0,A8
|
||
CALLA GET_DINO_MPNT
|
||
MOVE A2,A8
|
||
MOVE A3,A2
|
||
CALLR GET_TROG_MPNT
|
||
CMP A2,A3
|
||
MMFM SP,A0,A1,A2,A3
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TROGDEFL - TROG BAR DEFLECT PROCESS. *
|
||
* A8 = PTR TO TROG OBJECT *
|
||
* A9 = PTR TO BAR OBJECT *
|
||
* A13 = PTR TO TROG PROCESS DATA STRUCTURE *
|
||
* NOTE: THIS PROCESS TRANSFERS TO TROGWXFER *
|
||
* *
|
||
**************************************************************************
|
||
TROGDEFL
|
||
**** CALLA GET_TROG_CPNT ;THIS IS HIS NEW CENTER
|
||
**** ADDI [5,0],A1
|
||
**** CALLA FIND_CLOSE_MPNT ;FIND THE CLOSEST MOVE POINT
|
||
CALLR GET_TROG_MPNT
|
||
|
||
MOVE *A13(DATABLE),A10,L ;FIRST WE NEED THE ANIMATION TABLE
|
||
MOVE *A13(DDIR),A11,W ;AND THEN WE NEED THE DIRECTION
|
||
|
||
MOVE A11,*A13(PTEMP1),W ;KEEP THIS IN CASE WE CHANGE
|
||
|
||
PUSHP A9 ;SAVE THIS NEW GUY
|
||
JSRP TROG_LOOK_FOLLOW ;IS HE AFTER SOMEONE?
|
||
PULLP A9
|
||
JRZ TROGDEFL_CONT ;BR = NO, JUST CONTINUE
|
||
|
||
MOVE *A0(MOVECPTR),A6,L
|
||
JRN TROGDEFL_NOCTR ;BR = NOT A CENTER POINT, NO SMASH
|
||
|
||
MOVB *A13(TTYPE),A6
|
||
CMPI TTYPE_CLUB,A6 ;IS HE CLUBBING?
|
||
JRNE TROGDEFL_NOCTR ;BR = NO
|
||
|
||
MOVE A11,A1
|
||
CALLA ONE_MOVE ;GET THE BONER MOVE
|
||
JRZ TROGDEFL_NOCTR
|
||
|
||
MOVB *A1(MOVEPLYR),A6 ;IS THERE A BONE WHERE WE TURNED
|
||
JRN TROGWXFER ;BR = NO, JUST WALK
|
||
|
||
CMPI PXPLAYER,A6
|
||
JREQ TROGDEFL_CONT_NOCENT
|
||
|
||
MOVB *A13(TSWINGS),A6
|
||
CMPI 3,A6 ;CAN HE STILL SWING, BAIL OUT
|
||
JRHI TROGDEFL_CONT_NOCENT ;BR = NO
|
||
|
||
MOVE A1,A0
|
||
JRUC TROG_BONE_SMASH ;CRUSH THAT BONE
|
||
|
||
TROGDEFL_NOCTR:
|
||
MOVE *A13(PTEMP1),A6,W
|
||
CMP A6,A11 ;GOING THE SAME WAY
|
||
JRNE TROGWXFER ;BR = NO, THEN JUST FOLLOW
|
||
|
||
MOVB *A0(MOVEPLYR),A6 ;IS THERE A BONE HERE?
|
||
JRN TROGWXFER ;BR = NO, DON'T WORRY
|
||
*
|
||
*WE FALL HERE IF TROG IS NOT CHASING A DINOSAUR OR TROG IS NOT ON A CENTER
|
||
*POINT.
|
||
TROGDEFL_CONT:
|
||
MOVE *A0(MOVECPTR),A6,L
|
||
JRN TROGDEFL_CONT_NOCENT ;BR = NOT A CENTER POINT, NO SMASH
|
||
|
||
MOVB *A13(TTYPE),A6
|
||
CMPI TTYPE_CLUB,A6 ;IS HE CLUBBING?
|
||
JRNE TROGDEFL_CONT_NOCENT ;BR = NO
|
||
|
||
MOVB *A13(TSWINGS),A6
|
||
CMPI 3,A6 ;CAN HE STILL SWING
|
||
JRHI TROGDEFL_CONT_NOCENT ;BR = NO
|
||
|
||
MOVE A11,A1
|
||
CALLA ONE_MOVE ;THE THE MOVE JUST AHEAD, BONE IS THERE
|
||
JRZ TROGDEFL_CONT_NOCENT
|
||
|
||
MOVB *A1(MOVEPLYR),A0 ;WHAT HAVE WE HERE
|
||
CMPI PXPLAYER,A0
|
||
JREQ TROGDEFL_CONT_NOCENT
|
||
|
||
MOVE A1,A0
|
||
JRUC TROG_BONE_SMASH ;CRUSH THAT BONE
|
||
|
||
TROGDEFL_CONT_NOCENT:
|
||
MOVE *A9(OATTRIB),A0,W
|
||
CALLA GETMOVE ;GET THE MOVE DATA AREA
|
||
MOVE A0,A3 ;STORE THE MOVE POINT LOCATION
|
||
CMPI UP,A11
|
||
JREQ TROGHDEFU ;DEFLECTING HORIZ. WHILE GOING UP
|
||
CMPI DOWN,A11
|
||
JREQ TROGHDEFD ;HORIZ. DEFLECT WHILE GOING DOWN
|
||
CLR A6 ;MOVK UP,A6
|
||
MOVK DOWN,A7 ;DIRECTIONS FOR DEFLECTION
|
||
CMPI LEFT,A11
|
||
JREQ TROGVDEFL ;VERT. DEFLECT WHILE GOING LEFT
|
||
*HANDLE DEFLECTION IN THE RIGHT DIRECTION
|
||
MOVE *A0(MOVEUL),A1,W ;WALLS TO BE CONCERNED WITH
|
||
MOVE *A0(MOVEDL),A2,W
|
||
MOVE *A0(MOVELF),A4,W
|
||
MOVK LEFT,A5 ;ABOUT FACE DIRECTION
|
||
JRUC TROGVDEC
|
||
*DEFLECTION IN THE LEFT DIRECTION
|
||
TROGVDEFL
|
||
MOVE *A0(MOVEUR),A1,W
|
||
MOVE *A0(MOVEDR),A2,W
|
||
MOVE *A0(MOVERT),A4,W
|
||
MOVK RIGHT,A5 ;ABOUT FACE DIRECTION
|
||
JRUC TROGVDEC
|
||
*DEFLECT WHILE GOING UP
|
||
TROGHDEFU
|
||
MOVE *A0(MOVEDR),A1,W
|
||
MOVE *A0(MOVEDL),A2,W
|
||
MOVE *A0(MOVEDN),A4,W
|
||
MOVK DOWN,A5
|
||
MOVK RIGHT,A6
|
||
MOVK LEFT,A7
|
||
JRUC TROGVDEC
|
||
*DEFLECT WHILE GOING DOWN
|
||
TROGHDEFD
|
||
MOVE *A0(MOVEUR),A1,W
|
||
MOVE *A0(MOVEUL),A2,W
|
||
MOVE *A0(MOVEUP),A4,W
|
||
CLR A5 ;MOVK UP,A5
|
||
MOVK RIGHT,A6
|
||
MOVK LEFT,A7
|
||
JRUC TROGVDEC
|
||
*DECIDE WHICH DIRECTION TO PROCEED
|
||
TROGVDEC
|
||
MOVE A4,A4
|
||
JRN TROGSKIP ;HE'S OUTSIDE, TRYING TO GET IN
|
||
CMP A1,A2
|
||
JRNE TROGDEC1 ;THERE MUST BE A MOVE SOMEWHERE
|
||
MOVE A1,A1
|
||
JRN TROGSKIP ;NO ADJACENT MOVES, SKIP THE COLL.
|
||
|
||
TROGDEC1:
|
||
MOVE A4,A0
|
||
CALLA GETMOVE ;GET THE REVERSE MOVE
|
||
MOVE *A0(MOVECPTR),A0,L ;CENTER, IT SHOULD BE
|
||
JRZ TROGDEFL_NOCC ;BR = NO
|
||
|
||
MOVE *A9(OID),A14,W
|
||
SRL 4,A14
|
||
SLL 4,A14
|
||
CMPI PXOID,A14 ;IS THIS A NON-DESTRUCTIBLE BONE?
|
||
JREQ TROGDEFL_NOCC ;BR = YES, THEN NO PASS
|
||
|
||
CALLR CENTER_CHECK
|
||
**** JRNZ TROGSKIP
|
||
JRNZ TROGDEFL_ABORT
|
||
|
||
MMTM SP,A1,A3,A4
|
||
MOVE *A0(CMOVEPOS),A3,L
|
||
CLR A1
|
||
CALLA DINOS_NEAR_PNT
|
||
MMFM SP,A1,A3,A4
|
||
**** JRNZ TROGSKIP
|
||
JRZ TROGDEFL_NOCC
|
||
|
||
*ABORT THIS DEFLECTION BECAUSE OF THE GUY IN THE CENTER BEHIND US
|
||
TROGDEFL_ABORT:
|
||
ORIM M_NOCOLL,*A8(OFLAGS),W ;MAKE SURE COLLISIONS ARE OFF
|
||
MOVE *A13(TWALKFRM),A9,L ;RESTORE THE CURRENT WALKING FRAME
|
||
JRUC TROGWLP
|
||
|
||
TROGDEFL_NOCC:
|
||
CALLA PSTOP ;AND STOP HIM
|
||
MOVE A2,A0
|
||
CALLA GETMOVE
|
||
MOVE A0,A2 ;STORE DOWN INFO HERE
|
||
MOVE A1,A0
|
||
CALLA GETMOVE
|
||
|
||
*NOTE: DON'T JUMP TO TROGSKIP UNTIL REMOVING THE REGISTERS ABOUT TO BE PUSHED.
|
||
MMTM A12,A0,A2,A3,A4 ;PUSH VITAL STUFF FOR SLEEP
|
||
|
||
MOVB *A0(MOVEPLYR),A3 ;ANY"BAR"DY HOME?
|
||
JRNN TROGVDD ;YES, HOPE FOR DOWN
|
||
MOVB *A2(MOVEPLYR),A4
|
||
JRN TROGVHMM ;WE CAN EITHER GO UP OR DOWN
|
||
MOVE A6,A11
|
||
JRUC TROGDONE
|
||
*HMMMMM I WONDER WHICH WAY TO GO?
|
||
TROGVHMM
|
||
MOVE *A12,A0,W ;GET THE MOVE POINT INDEX
|
||
CALLA GETMOVE ;GET THE MOVE DATA AREA
|
||
CALLR TROGCHOOSE
|
||
JRUC TROG_DEFL_CENTER
|
||
*LOOKING FOR AN OUT HERE, IF THERE IS ONE WE TAKE IT, OTHERWISE ABOUT FACE
|
||
TROGVDD
|
||
MOVB *A2(MOVEPLYR),A4
|
||
JRNN TROGAROUND
|
||
MOVE A7,A11
|
||
JRUC TROGDONE
|
||
*SEND THE DINOSAUR ABOUT FACE
|
||
TROGAROUND:
|
||
MOVE A5,A11
|
||
TROGDONE:
|
||
MOVE *A12,A0,W ;GET THE MOVE POINT INDEX
|
||
CALLA GETMOVE ;GET THE MOVE DATA AREA
|
||
TROG_DEFL_CENTER:
|
||
CALLR TROG_CENTER ;CENTER TROG ON THE MOVE POINT
|
||
MMTM A12,A5,A6,A7
|
||
JSRP DINOLOOK ;MAKE THE DINOSAUR LOOK AT NEW DIR.
|
||
MMFM A12,A5,A6,A7
|
||
MMFM A12,A0,A2,A3,A4
|
||
MOVE A4,*A13(PTEMP1),W ;NO SLEEPING 'TIL END
|
||
MOVB *A3(MOVEPLYR),A3
|
||
JRN TROGSKIP ;THE WALL HAS BEEN REMOVED, WALK ON
|
||
*TAKE A SECOND LOOK AT THE WALLS TO SEE IF ANYTHING CHANGED WHILE WE
|
||
*WERE SLEEPING.
|
||
MOVB *A0(MOVEPLYR),A3 ;ANY"BAR"DY HOME?
|
||
JRNN TROG2NDL ;YES, HOPE FOR DOWN
|
||
MOVB *A2(MOVEPLYR),A4
|
||
JRNN TROG2NDL0
|
||
CMP A5,A11 ;WAS HE GOING TO ABOUT FACE?
|
||
JRNE TROGSAME ;BR = NO, JUST DO THE SAME THING
|
||
MOVE *A13(PTEMP1),A0,W
|
||
CALLA GETMOVE
|
||
CALLR TROGCHOOSE
|
||
JRUC TROGFINALT
|
||
TROG2NDL0:
|
||
MOVE A6,A3
|
||
JRUC TROGFINAL
|
||
*LOOKING FOR AN OUT HERE, IF THERE IS ONE WE TAKE IT, OTHERWISE ABOUT FACE
|
||
TROG2NDL:
|
||
MOVB *A2(MOVEPLYR),A4
|
||
JRNN TROGABT
|
||
MOVE A7,A3
|
||
JRUC TROGFINAL
|
||
*SEND THE DINOSAUR ABOUT FACE
|
||
TROGABT:
|
||
MOVE A5,A3
|
||
TROGFINAL:
|
||
CMP A3,A11
|
||
JREQ TROGSAME
|
||
MOVE A3,A11
|
||
TROGFINALT:
|
||
JSRP DINOTURN
|
||
JRUC TROGSKIP
|
||
TROGSAME:
|
||
JSRP ANIMATE_TURN ;OTHERWISE ANIMATE THE REST
|
||
TROGSKIP:
|
||
JRUC TROGWXFER
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TROGCHOOSE - CHOOSE WHICH WAY TO TURN OUT OF THREE GIVEN DIRECTIONS. *
|
||
* A0 = PTR TO MOVE THAT TROG IS CURRENTLY ON. *
|
||
* A5 = ABOUT FACE *
|
||
* A6 = ADJACENT DIRECTION 1 *
|
||
* A7 = ADJACENT DIRECTION 2 *
|
||
* A8 = PTR TO TROG *
|
||
* RETURNS: *
|
||
* A11 = CHOSEN DIRECTION *
|
||
* *
|
||
**************************************************************************
|
||
TROGCHOOSE:
|
||
MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A9
|
||
MOVE A0,A1
|
||
MOVE A5,A2
|
||
MOVE A6,A3
|
||
MOVE A7,A4
|
||
MOVE A6,A0
|
||
CALLR TROG_SEARCH
|
||
MOVE A7,A0
|
||
MOVE A5,A7
|
||
MOVE A6,A9
|
||
CALLR TROG_SEARCH
|
||
CMP A6,A9 ;COMPARE RATINGS
|
||
JRLT TROGCH1
|
||
JRNE TROGCH0
|
||
CMP A5,A7
|
||
JRLT TROGCH1
|
||
JRNE TROGCH0
|
||
TROGCHTOSS:
|
||
CALLA RANDOM
|
||
SLL 1,A0
|
||
JRC TROGCH1
|
||
TROGCH0:
|
||
MOVE A3,A11
|
||
JRUC TROGCHX
|
||
TROGCH1:
|
||
MOVE A4,A11
|
||
TROGCHX:
|
||
MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A9
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TROG_PUNCH - PROCESS TO MAKE TROG THROW A PUNCH. *
|
||
* A8 = PTR TO TROG OBJECT *
|
||
* A13 = PTR TO TROG PROCESS *
|
||
* NOTE: THIS PROCESS ULTIMATELY TRANSFERS TO TROGWXFER *
|
||
* *
|
||
**************************************************************************
|
||
TROG_PUNCH:
|
||
MOVI PUNCHU,A0
|
||
MOVB *A13(TTYPE),A1
|
||
CMPI TTYPE_CLUB,A1
|
||
JREQ TROG_SWING_CLUB
|
||
|
||
JSRP ANIMATE_DIR
|
||
MOVK 2,A1
|
||
MOVB A1,*A13(DPUNCHFLG)
|
||
SLEEP 4
|
||
MOVK 1,A1
|
||
MOVB A1,*A13(DPUNCHFLG)
|
||
TROG_PUNCH_MISS
|
||
MOVK 1,A1
|
||
JSRP DINO_FRANIM
|
||
JRUC TROGWXFER
|
||
|
||
TROG_SWING_CLUB
|
||
JSRP ANIMATE_DIR
|
||
MOVK 2,A1
|
||
MOVB A1,*A13(DPUNCHFLG)
|
||
SLEEP 4
|
||
MOVK 1,A1
|
||
MOVB A1,*A13(DPUNCHFLG)
|
||
SOUND1 TROGCLUB_SND
|
||
CREATE INDPID,EARTHSHAKER
|
||
JRUC TROG_PUNCH_MISS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TROG_EAT - TROG HAS CONNECTED WITH A DINOSAUR, NOW MAKE HIM FEAST *
|
||
* A8 = PTR TO TROG *
|
||
* A11 = PTR TO DINO PROCESS *
|
||
* A13 = PTR TO TROG PROCESS *
|
||
* *
|
||
**************************************************************************
|
||
TROG_EAT
|
||
MOVK 1,A1
|
||
JSRP FRANIM ;ANIMATE THE REST
|
||
|
||
MOVI EATU,A0
|
||
CALLA LOAD_DIR
|
||
MOVK 4,A1
|
||
JSRP FRANIM
|
||
|
||
MOVI ACK_TROG_PUNCH,A2
|
||
MOVI 200,A3
|
||
JSRP COMM_WAIT_REMOTE
|
||
JRNZ TROG_PUNCH_DEFAULT
|
||
|
||
CALLA GET_TROG_CPNT ;GET TROG'S CENTER POINT
|
||
MOVE *A13(DDIR),A4,W ;AND LET'S FIND A DIRECTION
|
||
CMPI UP,A4
|
||
JRNE TROG_PUNCH_CK_D
|
||
ADDI [-7,0],A1
|
||
JRUC TROG_PUNCH_LINEUP
|
||
TROG_PUNCH_CK_D:
|
||
CMPI DOWN,A4
|
||
JRNE TROG_PUNCH_CK_L
|
||
ADDI [12,0],A1
|
||
JRUC TROG_PUNCH_LINEUP
|
||
TROG_PUNCH_CK_L:
|
||
CMPI LEFT,A4
|
||
JRNE TROG_PUNCH_R
|
||
ADDI [0,-20],A1
|
||
JRUC TROG_PUNCH_LINEUP
|
||
TROG_PUNCH_R:
|
||
ADDI [0,20],A1
|
||
TROG_PUNCH_LINEUP:
|
||
MOVE A1,A3
|
||
MOVE A8,A5
|
||
MOVE A11,A0
|
||
CALLA GETA8 ;GET DINO OBJECT FROM PROCESS
|
||
JRZ TROG_PUNCH_NOLINE ;BR = NOT THERE?
|
||
CALLA GET_DINO_CPNT ;GET THIS CENTER POINT
|
||
MOVE A8,A6
|
||
MOVE A5,A8
|
||
CMP A1,A3
|
||
JREQ TROG_GRUB ;BR = HE'S ALREADY THERE
|
||
MOVE A1,A2
|
||
MOVI 40,A4
|
||
CALLA SLINEVEL
|
||
MOVE A1,*A6(OXVEL),L
|
||
MOVE A2,*A6(OYVEL),L
|
||
MOVE A2,*A6(OZVEL),L
|
||
PUSHP A6
|
||
|
||
**** CLR A1
|
||
**** JSRP FRANIM ;ANIMATE FIRST TROG FRAME
|
||
SLEEP 40
|
||
|
||
MOVE A8,A5
|
||
PULLP A8
|
||
CALLA PSTOP ;STOP THE DINO NOW!
|
||
TROG_PUNCH_NOLINE:
|
||
MOVE A5,A8 ;RESTORE TROG OBJECT POINTER
|
||
|
||
*GET DOWN ON SOME SERIOUS GRUB ACTION!
|
||
TROG_GRUB
|
||
MOVE *A11(DPLAYER),A2,L
|
||
CLRM *A2(PSTARTESC),W ;ALLOW AN ESCAPE FROM THIS MADNESS
|
||
JRUC TROG_EAT_1ST
|
||
|
||
TROG_EAT_LP:
|
||
MOVE *A11(DPLAYER),A2,L
|
||
MOVE *A2(PSTARTESC),A14,W ;DOES THE PLAYER WANT TO LEAVE?
|
||
JRNZ TROG_PUNCH_EARLY ;BR = YES, ALLOW HIM TO DO SO
|
||
|
||
TROG_EAT_1ST
|
||
MOVK 1,A1
|
||
JSRP FRANIM
|
||
MOVE *A9,A1,L ;CHECK FOR SECOND NULL
|
||
JRZ TROG_EAT_DONE ;BR = WE ARE FINISHED PUNCHING
|
||
MOVK COMMAND_EAT,A1
|
||
MOVB A1,*A11(PCOMM) ;SEND THE REACT COMMAND
|
||
MOVI 60H,A10
|
||
TROG_EAT_ACK:
|
||
MOVB *A11(PCOMM),A1
|
||
CMPI ACK_TROG_EAT,A1
|
||
JREQ TROG_EAT_LP
|
||
DEC A10
|
||
JRZ TROG_PUNCH_DEFAULT
|
||
SLOOP 1,TROG_EAT_ACK
|
||
TROG_EAT_DONE:
|
||
MOVK COMMAND_EAT_DONE,A1
|
||
MOVB A1,*A11(PCOMM) ;SEND THE EAT DONE COMMAND
|
||
ADDK 32,A9
|
||
MOVK 1,A1
|
||
JSRP FRANIM
|
||
MOVE *A13(DATABLE),A10,L
|
||
MOVE *A13(DDIR),A11,W ;GET THE CURRENT DIRECTION
|
||
CALLA NOTDIR
|
||
MOVK DOWN,A0
|
||
MOVE A0,*A13(DDIR),W ;THIS IS THE WAY HE'S FACING
|
||
JSRP DINOTURN
|
||
SLEEP 10
|
||
TROG_EAT_EARLY
|
||
CLR A0
|
||
MOVB A0,*A13(DPUNCHFLG) ;CLEAR PUNCH FLAG
|
||
CALLR CLEAR_TRAP
|
||
CALLR CLEAR_PURSUIT
|
||
MOVE @GAME_STATE,A0,W
|
||
CMPI INAMODE,A0
|
||
JREQ TROG_DIG_NBT ;NO AUDIT DURING ATTRACT MODE
|
||
AUDIT AUDDCHOW
|
||
JRUC TROG_DIG_NBT
|
||
|
||
TROG_PUNCH_DEFAULT:
|
||
CLR A0
|
||
MOVB A0,*A13(DPUNCHFLG) ;CLEAR PUNCH FLAG
|
||
CALLR CLEAR_TRAP
|
||
JRUC TROG_REV
|
||
*
|
||
*SOMETHING HAPPENED, WE NEED TO ESCAPE
|
||
TROG_PUNCH_ESCAPE:
|
||
MOVK COMMAND_ESC,A1
|
||
MOVB A1,*A11(PCOMM) ;SEND THE ESCAPE COMMAND
|
||
CLR A0
|
||
MOVB A0,*A13(DPUNCHFLG) ;CLEAR PUNCH FLAG
|
||
JRUC TROGWXFER ;AND CONTINUE
|
||
*
|
||
*EARLY ESCAPE FROM THE FEAST
|
||
TROG_PUNCH_EARLY
|
||
MOVK COMMAND_EAT_DONE,A1
|
||
MOVB A1,*A11(PCOMM) ;SEND THE ESCAPE COMMAND
|
||
JRUC TROG_EAT_EARLY ;AND CONTINUE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PUNCH_ABORT - DETERMINE IF WE SHOULD ABORT THE PUNCHING SEQUENCE. *
|
||
* A8 = PTR TO TROG OBJECT *
|
||
* A11 = PTR TO DINO PROCESS *
|
||
* RETURNS *
|
||
* Z = DO NOT ABORT *
|
||
* NZ = MUST ABORT *
|
||
* NOTE: DESTROYS A14 *
|
||
* *
|
||
**************************************************************************
|
||
PUNCH_ABORT
|
||
PUSH A0
|
||
MOVE A11,A0
|
||
MOVE A8,A14
|
||
CALLA GETA8
|
||
MOVE A8,A0
|
||
MOVE A14,A8
|
||
CALLA BONE_BETWEEN ;CHECK IF A BONE CAME BETWEEN US
|
||
JRNZ PA_X
|
||
MOVB *A11(DINVIN),A0 ;DID THE DINO GO INVINCIBLE
|
||
PA_X
|
||
PULL A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TROG_OOF - PROCESS TO MAKE TROG REACT TO PUNCH. *
|
||
* A8 = PTR TO TROG OBJECT *
|
||
* A9 = PROCESS BLOCK OF THE DINO DOING THE PUNCHING *
|
||
* A13 = PTR TO TROG PROCESS *
|
||
* *
|
||
**************************************************************************
|
||
TROG_OOF:
|
||
MOVK 1,A0
|
||
MOVB A0,*A13(DDIZZYFLG)
|
||
MOVE A9,*A13(PTEMP2),L ;STORE THE PTR TO THE DINO PROCESS
|
||
MOVE *A9(DDIR),*A13(PTEMP3),W ;GRAB THE DINOSAUR DIR FOR LATER
|
||
|
||
MOVE *A13(PTEMP2),A2,L
|
||
MOVE *A2(DPLAYER),A2,L
|
||
MOVI 100H,A1
|
||
CALLA SCORE
|
||
|
||
MOVK 1,A1
|
||
MOVB A1,*A13(TPURSUIT) ;PUT HIM IN PURSUIT OF THIS DINO NOW!
|
||
MOVB A1,*A13(TPRESET) ;PUSH HIM IN IF YOU CAN
|
||
MOVE *A2(POBJ),*A13(TDINO),L
|
||
CALLA GPLAYNUM
|
||
MOVB A0,*A13(TPLAYER)
|
||
|
||
SOUND1 PUNCH_SND
|
||
|
||
MOVB *A13(TTYPE),A0
|
||
CMPI TTYPE_WHL,A0 ;IS THIS THE WHEEL MAN?
|
||
JREQ TROG_OOF_WHEEL ;BR = YES, THEN HANDLE IT THAT WAY
|
||
|
||
MOVE @FREEZE_TIME,A0,W ;IS HE FROZEN?
|
||
JRNZ TROG_OUTTA_HERE ;BR = YES, THEN HE CAN BE SMACKED OUT
|
||
|
||
MOVB *A13(THITS),A0
|
||
INC A0
|
||
CMPI 3,A0
|
||
JRHS TROG_OUTTA_HERE
|
||
MOVB A0,*A13(THITS)
|
||
|
||
MOVI OOFU,A0
|
||
JSRP ANIMATE_DIR
|
||
|
||
ANDNIM M_NOCOLL,*A8(OFLAGS),W
|
||
CLR A0
|
||
MOVB A0,*A13(DDIZZYFLG)
|
||
|
||
MOVB *A13(TTYPE),A0
|
||
CMPI TTYPE_SPRING,A0
|
||
JAEQ TROGBXFER
|
||
|
||
JRUC TROGWXFER
|
||
|
||
*DO THIS TO THE WHEEL GUY
|
||
TROG_OOF_WHEEL
|
||
SUBIM 12,*A8(OYPOS),W
|
||
SLEEP 4
|
||
ADDIM 12,*A8(OYPOS),W
|
||
TO_WHEEL_OUT
|
||
MOVI WHEELU,A0
|
||
CALLA LOAD_DIR
|
||
CALLA SKIP_ANIMATION
|
||
MOVK 4,A1
|
||
JSRP FRANIM
|
||
JRUC TROGWHL_DONE
|
||
|
||
TROG_OUTTA_HERE
|
||
SOUND1 TROGUGH_SND
|
||
|
||
MOVE *A13(PTEMP2),A2,L
|
||
MOVE *A2(DPLAYER),A2,L
|
||
MOVI 500H,A1
|
||
CALLA SCORE
|
||
INCM *A2(PTROGKILLS),W
|
||
|
||
MOVI KOU,A0
|
||
CALLA LOAD_DIR
|
||
CREATE INDPID,TA_FALL
|
||
|
||
MOVE *A13(PTEMP3),A0,W
|
||
MOVI [8,0],A1
|
||
CALLR DIR_VELOCITY
|
||
|
||
MOVIM PIZPOS,*A8(OZPOS),W
|
||
|
||
MOVE *A13(PTEMP2),A11,L
|
||
MOVE *A11(DPLAYER),A11,L
|
||
|
||
MOVE A11,A2
|
||
MOVI 500H,A1
|
||
CALLA SCORE
|
||
|
||
TOH_WAIT
|
||
MOVE A11,A2
|
||
MOVK 5,A1
|
||
CALLA SCORE
|
||
SLEEP 5
|
||
CALLA SCRTST
|
||
JREQ TOH_WAIT
|
||
CALLR DELETE_TROG
|
||
DIE ;AND BYE BYE BIRDIE
|
||
|
||
*
|
||
*JUST ANIMATE AND DIE
|
||
*A8 = OBJECT
|
||
*A9 = SCRIPT
|
||
TA_FALL
|
||
MOVK 1,A1
|
||
JSRP FRANIM
|
||
DIE
|
||
**************************************************************************
|
||
* *
|
||
* DIR_POSITION - ADD THE GIVEN PIXELS TO THE CURRENT POSITION OF AN *
|
||
* OBJECT WITH RESPECT TO THE GIVEN DIRECTION. *
|
||
* A0 = DIRECTION *
|
||
* A1 = PIXELS TO ADD *
|
||
* A8 = PTR TO OBJECT *
|
||
* RETURNS: *
|
||
* A1 = PIXELS ADDED *
|
||
* *
|
||
**************************************************************************
|
||
DIR_POSITION
|
||
CMPI UP,A0
|
||
JREQ DP_UP
|
||
CMPI DOWN,A0
|
||
JREQ DP_DOWN
|
||
CMPI LEFT,A0
|
||
JREQ DP_LEFT
|
||
DP_RIGHT
|
||
ADDRM A1,*A8(OXPOS),W
|
||
RETS
|
||
DP_LEFT
|
||
NEG A1
|
||
JRUC DP_RIGHT
|
||
DP_DOWN
|
||
ADDRM A1,*A8(OYPOS),W
|
||
RETS
|
||
DP_UP
|
||
NEG A1
|
||
JRUC DP_DOWN
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DIR_VELOCITY - STUFF THE GIVEN VELOCITY INTO THE CORRECT COMPONENT *
|
||
* OF AN OBJECT WITH RESPECT TO THE GIVEN DIRECTION. *
|
||
* A0 = DIRECTION *
|
||
* A1 = VELOCITY *
|
||
* A8 = PTR TO OBJECT *
|
||
* RETURNS: *
|
||
* A1 = VELOCITY STUFFED *
|
||
* *
|
||
**************************************************************************
|
||
DIR_VELOCITY
|
||
CMPI UP,A0
|
||
JREQ DV_UP
|
||
CMPI DOWN,A0
|
||
JREQ DV_DOWN
|
||
CMPI LEFT,A0
|
||
JREQ DV_LEFT
|
||
DV_RIGHT
|
||
MOVE A1,*A8(OXVEL),L
|
||
RETS
|
||
DV_LEFT
|
||
NEG A1
|
||
JRUC DV_RIGHT
|
||
DV_DOWN
|
||
MOVE A1,*A8(OYVEL),L
|
||
RETS
|
||
DV_UP
|
||
NEG A1
|
||
JRUC DV_DOWN
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TROGPIT_FALL - PROCESS TO MAKE TROG FALL DOWN A SMALL PIT *
|
||
* A8 = PTR TO TROG OBJECT *
|
||
* A9 = PTR TO PIT OBJECT *
|
||
* *A13(DATABLE),L = PTR TO ANIMATION TABLE *
|
||
* *A13(DDIR),W = CURRENT TROG DIRECTION *
|
||
* NOTE: THIS PROCESS ULTIMATELY TRANSFERS TO TROG_DEATH_DONE. *
|
||
* *
|
||
**************************************************************************
|
||
TROGPIT_FALL:
|
||
MOVE *A9(OID),A0,W
|
||
CMPI TUNNELOID,A0
|
||
JREQ TROGTUNNEL_FALL
|
||
PUSHP A9
|
||
MOVE A8,A5
|
||
MOVE A9,A8
|
||
CALLA OBJPROC_KILL ;KILL THE CONTROL
|
||
CALLA GETANIXY ;LET'S GET A RETURN POINT
|
||
SRL 16,A3
|
||
MOVY A2,A3
|
||
MOVE A3,*A13(DINITPOS),L
|
||
MOVE A5,A8
|
||
CALLA GETCPNT ;GET THE CENTER POINT OF THE TROG
|
||
MOVE A1,A2
|
||
MOVI 38H,A4
|
||
CALLA SLINEVEL
|
||
MMTM A12,A1,A2
|
||
CALLA PSTOP
|
||
|
||
CALLR SCORE_TO_PLAYER
|
||
|
||
MOVI OGPITU,A0
|
||
JSRP ANIMATE_DIR
|
||
MMFM A12,A1,A2
|
||
MOVE A1,*A8(OXVEL),L
|
||
MOVE A2,*A8(OYVEL),L
|
||
MOVK 1,A1
|
||
JSRP FRANIM ;ANIMATE THE REST OF THE FALL
|
||
CALLA PSTOP
|
||
CALLA OBJ_OFF ;TURN TROG OFF
|
||
MOVE A8,A5
|
||
PULLP A8 ;GET PIT POINTER
|
||
MOVE A8,A0
|
||
MOVI ENEMIES,A1
|
||
CALLA ISSUPP
|
||
JRZ FALL_NOPIT ;BR = PIT IS GONE, DON'T WORRY HERE
|
||
CALLA DELSUPP ;TAKE IT OFF FOR COLLISIONS
|
||
PITNSUPP:
|
||
CALLA FREE_MOVE_EGG
|
||
PUSHP A5
|
||
MOVI PIT_CLOSE,A9
|
||
MOVK 1,A1
|
||
JSRP FRANIM
|
||
PULLP A5
|
||
CALLA DELETE_OBJ
|
||
FALL_NOPIT:
|
||
MOVE A5,A8
|
||
|
||
**** SLEEP 1
|
||
**** CLR A4
|
||
**** PUSHP A4 ;RETURN POINT ALREADY STUFFED
|
||
**** JRUC TROG_DEATH_DONE
|
||
CALLR DELETE_TROG
|
||
DIE
|
||
|
||
*
|
||
*SIMPLE TROG FALL W/NO PIT CLOSE
|
||
*A8 = TROG
|
||
*A9 = PIT
|
||
*A13 = TROG PROCESS
|
||
TROGTUNNEL_FALL:
|
||
MOVE A8,A5
|
||
MOVE A9,A8
|
||
CALLA GETANIXY ;LET'S GET A RETURN POINT
|
||
SRL 16,A3
|
||
MOVY A2,A3
|
||
MOVE A3,*A13(DINITPOS),L
|
||
MOVE A5,A8
|
||
CALLA GETCPNT ;GET THE CENTER POINT OF TROG
|
||
MOVE A1,A2
|
||
MOVI 38H,A4
|
||
CALLA SLINEVEL
|
||
MMTM A12,A1,A2
|
||
CALLA PSTOP
|
||
|
||
CALLR SCORE_TO_PLAYER
|
||
|
||
MOVI OGPITU,A0
|
||
JSRP ANIMATE_DIR
|
||
MMFM A12,A1,A2
|
||
MOVE A1,*A8(OXVEL),L
|
||
MOVE A2,*A8(OYVEL),L
|
||
MOVK 1,A1
|
||
JSRP FRANIM ;ANIMATE THE REST OF THE FALL
|
||
CALLA PSTOP
|
||
CALLA OBJ_OFF ;TURN TROG OFF
|
||
**** SLEEP 1
|
||
**** CLR A4
|
||
**** PUSHP A4 ;RETURN POINT ALREADY STUFFED
|
||
**** JRUC TROG_DEATH_DONE
|
||
CALLR DELETE_TROG
|
||
DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TROGTAR_SINK - PROCESS TO MAKE TROG SINK INTO TAR AND DIE. *
|
||
* A8 = PTR TO TROG OBJECT *
|
||
* A9 = PTR TO TAR OBJECT *
|
||
* *A13(DATABLE),L = PTR TO ANIMATION TABLE *
|
||
* *A13(DDIR),W = CURRENT DIRECTION *
|
||
* *A13(DVEL),L = CURRENT VELOCITY *
|
||
* NOTE: THIS PROCESS ULTIMATELY TRANSFERS TO TROG_DEATH_DONE *
|
||
* *
|
||
**************************************************************************
|
||
TROGTAR_SINK:
|
||
MOVE A9,A0
|
||
MOVE A9,A4 ;STORE HERE DURING LOAD
|
||
MOVI ENEMIES,A1
|
||
CALLA ISSUPP
|
||
JRZ TARNSUPP ;BR = TAR NOT ON SUPP LIST
|
||
CALLA DELSUPP ;TAKE IT OFF FOR COLLISIONS
|
||
JRUC TARNPUSH
|
||
TARNSUPP:
|
||
CLR A9
|
||
TARNPUSH:
|
||
PUSHP A9
|
||
MOVE A8,A5
|
||
MOVE A4,A8
|
||
MOVE *A8(OPLINK),A0,L
|
||
JRZ TAR_POS
|
||
CALLA GETA9
|
||
MOVK 1,A11
|
||
MOVI INDPID,A1
|
||
MOVI ANIMATOR,A7
|
||
CALLA XFERPROC ;TRANSFER TO A LESSER GOD
|
||
TAR_POS:
|
||
MOVE *A13(DDIR),A0,W
|
||
CMPI UP,A0
|
||
JREQ TAR_FROM_DOWN
|
||
PUSHP A8
|
||
MOVE A5,A8
|
||
MOVE *A13(DATABLE),A10,L
|
||
CALLA DINOLOAD
|
||
MOVI [0,0402H],A1
|
||
JSRP DINO_FRANIM
|
||
MOVE A8,A5
|
||
PULLP A8
|
||
TAR_FROM_DOWN:
|
||
CALLA GETANIXY ;LET'S GET A RETURN POINT
|
||
MOVE A5,A8
|
||
SRL 16,A3
|
||
MOVY A2,A3
|
||
MOVE A3,*A13(DINITPOS),L
|
||
CALLA FINDMOVE
|
||
JRNC TROGTAR_SKC ;BR = SKIP THE CENTERING, NOT A MOVE
|
||
MOVE A1,A0
|
||
MOVE *A0(MOVEPOS),A1,L
|
||
SUBI [5,0],A1
|
||
CALLR TROG_NEW_PNT
|
||
|
||
TROGTAR_SKC:
|
||
CALLR SCORE_TO_PLAYER
|
||
|
||
MOVI TARU,A0
|
||
JSRP FRANIMATE_DIR ;ANIMATE THIS GUY
|
||
SOUND1 TARBUBBLE_SND ;BUBBLE THE TAR
|
||
MOVI 04000H,A2
|
||
JSRP CLIP_INTO
|
||
MOVE A8,A5
|
||
PULLP A8 ;GET TAR POINTER
|
||
MOVE A8,A8 ;IS THERE SOMETHING THERE?
|
||
JRZ SINK_NOTAR ;BR = ALREADY TAKEN CARE OF
|
||
PUSHP A5
|
||
CALLA OBJPROC_KILL ;KILL THE TAR CONTROL
|
||
MOVI TAROUT,A9
|
||
MOVK 1,A1
|
||
JSRP FRANIM ;FADE THE TAR FROM EXISTANCE
|
||
PULLP A5
|
||
CALLA FREE_MOVE_EGG
|
||
CALLA DELETE_OBJ
|
||
SINK_NOTAR:
|
||
MOVE A5,A8
|
||
|
||
**** CLR A4
|
||
**** PUSHP A4 ;RETURN POINT ALREADY STUFFED
|
||
**** JRUC TROG_DEATH_DONE
|
||
CALLR DELETE_TROG
|
||
DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TROGFIRE_BURN - PROCESS TO MAKE TROG BURN IN THE FIRE. *
|
||
* A8 = PTR TO TROG OBJECT *
|
||
* A9 = PTR TO FIRE OBJECT *
|
||
* *A13(DATABLE),L = PTR TO ANIMATION TABLE *
|
||
* *A13(DDIR),W = CURRENT DINO DIRECTION *
|
||
* NOTE: THIS PROCESS ULTIMATELY TRANSFERS TO TROG_DEATH_DONE *
|
||
* *
|
||
**************************************************************************
|
||
TROGFIRE_BURN:
|
||
MOVE A9,A0
|
||
MOVE A9,A4 ;STORE HERE DURING LOAD
|
||
MOVI ENEMIES,A1
|
||
CALLA ISSUPP
|
||
JRZ FIRENSUPP ;BR = FIRE NOT ON SUPP LIST
|
||
CALLA DELSUPP ;TAKE IT OFF FOR COLLISIONS
|
||
JRUC FIRENPUSH
|
||
FIRENSUPP:
|
||
CLR A9
|
||
FIRENPUSH:
|
||
PUSHP A9
|
||
FIRENPROC:
|
||
MOVE A8,A5
|
||
MOVE A4,A8
|
||
MOVE *A8(OPLINK),A0,L
|
||
JRZ FIRE_POS
|
||
MOVI FIRE_UP_MONKEY_SHIT,A9
|
||
MOVK 1,A11
|
||
MOVI INDPID,A1
|
||
MOVI ANIMATOR,A7
|
||
CALLA XFERPROC ;TRANSFER TO A LESSER GOD
|
||
FIRE_POS:
|
||
CALLA GETANIXY ;LET'S GET A RETURN POINT
|
||
MOVE A5,A8
|
||
SRL 16,A3
|
||
MOVY A2,A3
|
||
MOVE A3,*A13(DINITPOS),L
|
||
CALLA FINDMOVE
|
||
JRNC TROGFIRE_SKC ;BR = SKIP THE CENTERING, NOT A MOVE
|
||
MOVE A1,A0
|
||
CALLR TROG_CENTER ;CENTER TROG ON THIS POINT
|
||
TROGFIRE_SKC:
|
||
MOVE *A8(OYPOS),A5,W
|
||
SUBK 12,A5
|
||
MOVE A5,*A8(OYPOS),W
|
||
|
||
CALLR SCORE_TO_PLAYER
|
||
|
||
MOVI FIREU,A0
|
||
JSRP FRANIMATE_DIR
|
||
|
||
MOVE *A8(OYPOS),A5,W
|
||
ADDK 12,A5
|
||
MOVE A5,*A8(OYPOS),W
|
||
|
||
MOVE A8,A5
|
||
PULLP A8 ;GET FIRE POINTER
|
||
MOVE A8,A8 ;IS THERE SOMETHING THERE?
|
||
JRZ BURN_NOFIRE ;BR = ALREADY TAKEN CARE OF
|
||
|
||
CALLA FREE_MOVE_EGG
|
||
CALLA OBJPROC_KILL ;KILL THE CONTROL
|
||
CALLA DELETE_OBJ
|
||
|
||
BURN_NOFIRE:
|
||
MOVE A5,A8
|
||
|
||
MOVK 1,A1
|
||
JSRP FRANIM ;ANIMATE THE BURN
|
||
|
||
MOVK 3,A4
|
||
MOVB A4,*A13(DDIZZYFLG) ;RETURN BURNT
|
||
|
||
**** CLR A4
|
||
**** PUSHP A4
|
||
**** JRUC TROG_DEATH_DONE
|
||
CALLR DELETE_TROG
|
||
DIE
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TROG_SQUASH - PROCESS TO SQUASH TROG WITH THE WHEEL. *
|
||
* A8 = PTR TO TROG OBJECT *
|
||
* A10 = PTR TO WHEEL PROCESS *
|
||
* A11 = TROG PROCESS A11 *
|
||
* A13 = PTR TO TROG PROCESS *
|
||
* NOTE: THIS PROCESS ULTIMATELY TRANSFERS TO TROG_DEATH_DONE. *
|
||
* *
|
||
**************************************************************************
|
||
TROG_SQUASH:
|
||
MOVE A11,*A13(PTEMP1),L
|
||
CALLA GET_TROG_CPNT
|
||
ADDI [5,0],A1
|
||
CALLA FIND_CLOSE_CPNT ;FIND US A RETURN POINT
|
||
MOVE A3,*A13(DINITPOS),L
|
||
CALLR SCORE_TO_PLAYER ;GIVE SOME SCORE TO THE PLAYER
|
||
MOVE *A9(OZVAL),A0,L
|
||
DEC A0
|
||
MOVE A0,*A8(OZVAL),L ;TROG IS BEHIND WHEEL
|
||
MOVE *A13(DDIR),A0,W
|
||
SLL 2,A0
|
||
MOVE *A10(DDIR),A1,W
|
||
ADD A1,A0
|
||
MOVE *A10(DSMULT),A3,W
|
||
ADDI SQUISHUU,A0
|
||
MOVE *A13(DATABLE),A10,L
|
||
CALLA DINOLOAD
|
||
MOVK 1,A1
|
||
SLL 16,A3
|
||
MOVY A3,A1 ;ANIMATE AT THE SPEED OF THE WHEEL
|
||
JSRP FRANIM
|
||
MOVE A8,A0
|
||
CALLA SET_MZPOS ;LIE HIM FLAT
|
||
SLEEP 80
|
||
|
||
MOVB *A13(TTYPE),A1
|
||
CMPI TTYPE_WHL,A1
|
||
JREQ TS_WHEEL
|
||
|
||
MOVK 1,A1
|
||
JSRP FRANIM ;ANIMATE HIM BACK INTO THE HOLE
|
||
CALLR DELETE_TROG
|
||
DIE
|
||
|
||
TS_WHEEL
|
||
MOVE *A13(PTEMP1),A11,L
|
||
JRUC TROGWHL_DONE
|
||
**************************************************************************
|
||
* *
|
||
* TROG_REV - REVERSE THE TROGSTER *
|
||
* A13 = PTR TO TROGS PROCESS *
|
||
* NOTE: ENDS UP AT TROGWXFER *
|
||
* *
|
||
**************************************************************************
|
||
TROG_REV
|
||
MOVE *A13(DATABLE),A10,L ;FIRST WE NEED THE ANIMATION TABLE
|
||
MOVE *A13(DDIR),A11,W ;AND THEN WE NEED THE DIRECTION
|
||
|
||
**** CALLR GET_TROG_CPNT
|
||
**** ADDI [5,0],A1
|
||
**** CALLA FIND_CLOSE_MPNT ;FIND OUR CLOSEST MOVE POINT
|
||
CALLR GET_TROG_MPNT
|
||
|
||
MOVE *A0(MOVECPTR),A0,L ;IS IT A CENTER?
|
||
JRNZ TROG_REV_REV ;BR = NO
|
||
MOVE A3,A1 ;EVERYBODY! GET...IN...LINE.
|
||
|
||
TROG_REV_REV:
|
||
CALLA NOTDIR ;GET THE OTHER DIRECTION
|
||
JSRP DINOTURN ;TURN THE TROG
|
||
JRUC TROGWXFER
|
||
|
||
**************************************************************************
|
||
* *
|
||
* GET_TROG_CPNT - GET THE CENTER POINT OF THE INTIAL TROG FRAME, *
|
||
* WITH RESPECT TO HIS CURRENT ANIMATION POINT. *
|
||
* A8 = PTR TO TROG OBJECT *
|
||
* RETURNS: *
|
||
* A1 = [Y,X] CENTER POINT *
|
||
* *
|
||
**************************************************************************
|
||
GET_TROG_CPNT:
|
||
PUSH A4
|
||
MOVI TROGINIT,A4
|
||
CALLA GET_INIT_CPNT ;GET TROG'S INTIAL CENTER POINT
|
||
PULL A4
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* GET_TROG_MPNT - GET THE CLOSEST MOVE POINT TO TROG. *
|
||
* A8 = PTR TO THE TROG OBJECT *
|
||
* RETURNS: *
|
||
* A0 = CLOSEST MOVE POINT DATA *
|
||
* A1 = [Y,X] CENTER POINT OF TROG *
|
||
* A3 = [Y,X] MOVE POINT OF TROG *
|
||
* *
|
||
**************************************************************************
|
||
GET_TROG_MPNT
|
||
CALLR GET_TROG_CPNT ;THIS IS HIS NEW CENTER
|
||
ADDI [5,0],A1
|
||
JAUC FIND_CLOSE_MPNT
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TROG_CENTER - ALIGN THE CENTER OF TROG ON THE CENTER *
|
||
* OF THE BOX HE IS IN, WITH ANIMATION. *
|
||
* A0 = PTR TO MOVE THAT IS IN THE CENTER OF THE BOX *
|
||
* A8 = PTR TO TROG *
|
||
* *
|
||
**************************************************************************
|
||
TROG_CENTER:
|
||
PUSH A1
|
||
MOVE *A0(MOVEPOS),A1,L
|
||
CALLR TROG_NEW_PNT
|
||
PULL A1
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TROG_NEW_PNT - ALIGN THE CENTER OF TROG ON A NEW PNT. *
|
||
* A1 = [Y,X] PNT TO ALIGN TROG ON *
|
||
* A8 = PTR TO TROG *
|
||
* *
|
||
**************************************************************************
|
||
TROG_NEW_PNT:
|
||
MMTM SP,A0,A1,A7
|
||
SUBI [5,0],A1 ;MOVE HIM UP
|
||
MOVE A1,A7 ;STORE ALIGNMENT POINT
|
||
CALLR GET_TROG_CPNT
|
||
MOVE A7,A0
|
||
CALLA ALIGNOBJ
|
||
MOVE A8,A0
|
||
CALLA SET_ZPOS
|
||
MMFM SP,A0,A1,A7
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CK_TROG_CENT - CHECK IF TROGS CENTER PNT IS IN RANGE OF THE CENT. OF *
|
||
* ANOTHER OBJECT. *
|
||
* A0 = TROG OBJECT *
|
||
* A8 = THE OTHER OBJECT *
|
||
* RETURNS: *
|
||
* NC = NOT EVEN CLOSE *
|
||
* C = CLOSE *
|
||
* *
|
||
**************************************************************************
|
||
CK_TROG_CENT:
|
||
MMTM SP,A1,A2,A3,A8
|
||
CALLA GETCPNT ;GET CENTER POINT OF OTHER OBJECT
|
||
MOVE A1,A3
|
||
MOVE A0,A8
|
||
CALLR GET_TROG_CPNT
|
||
ADDI [0AH,0],A1 ;ADD A FUDGE FACTOR
|
||
MOVI [8,8],A2 ;FIX THE RANGE
|
||
CALLA PNT_IN_RANGE
|
||
MMFM SP,A1,A2,A3,A8
|
||
RETS
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CK_TROGDINO_CENT - CHECK IF TROGS CENTER IS CLOSE ENOUGH TO A DINOS *
|
||
* CENTER TO HIT HIM WITH BARE HANDS. *
|
||
* A0 = TROG OBJECT *
|
||
* A8 = THE OTHER OBJECT *
|
||
* RETURNS: *
|
||
* NC = NOT EVEN CLOSE *
|
||
* C = CLOSE *
|
||
* *
|
||
**************************************************************************
|
||
CK_TROGDINO_CENT:
|
||
MMTM SP,A1,A2,A3,A8
|
||
CALLA GETCPNT ;GET CENTER POINT OF OTHER OBJECT
|
||
MOVE A1,A3
|
||
MOVE A0,A8
|
||
CALLR GET_TROG_CPNT
|
||
ADDI [5,0],A1 ;ADD A FUDGE FACTOR
|
||
MOVI [12,8],A2 ;FIX THE RANGE
|
||
CALLA PNT_IN_RANGE
|
||
MMFM SP,A1,A2,A3,A8
|
||
RETS
|
||
|
||
WALL_RATING .EQU 1
|
||
FLOWER_RATING .EQU 2
|
||
DINO_RATING .EQU 10
|
||
**************************************************************************
|
||
* *
|
||
* TROG_SEARCH - SEARCH A DIRECTION UNTIL WE FIND SOMETHING THAT *
|
||
* WOULD BE GOOD FOR TROG. *
|
||
* A0 = DIRECTION TO SEARCH *
|
||
* A1 = PTR TO STARTING MOVE PNT *
|
||
* RETURNS: *
|
||
* A5 = STEPS 'TIL END *
|
||
* A6 = RATING (0=DEATH,1=WALL, >1 = SAFER) *
|
||
* *
|
||
**************************************************************************
|
||
TROG_SEARCH:
|
||
MMTM SP,A0,A1,A3,A4
|
||
SWAP A0,A1
|
||
SLL 4,A1
|
||
ADDI MOVEREL,A1
|
||
CLR A5 ;CLEAR STEP COUNT
|
||
CLR A6 ;CLEAR RATING
|
||
TROG_SRCH_SAFLP:
|
||
MOVE A0,A3
|
||
ADD A1,A0
|
||
MOVE *A0,A0,W ;NEXT MOVE PLEASE
|
||
JRN TROG_SRCH_X ;BR = WE HAVE HIT THE END
|
||
TROG_SRCH_MOVE:
|
||
CALLA GETMOVE
|
||
MOVE *A0(MOVEPOS),A3,L
|
||
MMTM SP,A0,A1
|
||
CLR A1
|
||
CALLA DINOS_NEAR_PNT
|
||
MMFM SP,A0,A1
|
||
JRNZ TROG_SRCH_DINO ;WE GOT WHAT WE WANT!
|
||
MOVB *A0(MOVEPLYR),A3 ;DID WE HIT A WALL?
|
||
JRNN TROG_SRCH_WALL ;BR = YES
|
||
MOVE *A0(MOVECPTR),A3,L ;GRAB THE CENTER MOVE PTR
|
||
JRN TROG_SRCH_NOTHING ;BR = NOT A CENTER MOVE
|
||
MOVB *A3(CMOVEEGG),A3 ;IS THERE AN EGG ON THIS SPOT
|
||
INC A3
|
||
JREQ TROG_SRCH_NOTHING ;BR = NOTHING HERE
|
||
DEC A3
|
||
CMPI TARID,A3 ;ARE WE DEALING WITH A TAR PIT HERE?
|
||
JREQ TROG_SRCH_X ;BR = YES WE ARE
|
||
CMPI FIREID,A3 ;FIRE?
|
||
JREQ TROG_SRCH_X ;BR = YES
|
||
CMPI PITID,A3 ;LOCAL PIT?
|
||
JREQ TROG_SRCH_X ;BR = YES
|
||
CMPI SHROOMID,A3
|
||
JREQ TROG_SRCH_X
|
||
CMPI FLOWERID,A3
|
||
JREQ TROG_SRCH_FLOWER
|
||
TROG_SRCH_NOTHING:
|
||
INC A5 ;INCREMENT THE STEP COUNT
|
||
JRUC TROG_SRCH_SAFLP
|
||
TROG_SRCH_WALL:
|
||
ADDK WALL_RATING,A6
|
||
JRUC TROG_SRCH_X
|
||
TROG_SRCH_DINO:
|
||
ADDK DINO_RATING,A6
|
||
JRUC TROG_SRCH_X
|
||
TROG_SRCH_FLOWER:
|
||
ADDK FLOWER_RATING,A6
|
||
JRUC TROG_SRCH_X
|
||
TROG_SRCH_X:
|
||
MMFM SP,A0,A1,A3,A4
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* FIND_MVD - FIND THE MOST VALUABLE DINO FROM THE GIVEN MOVE POINT. *
|
||
* STARTS IN THE GIVEN DIRECTION. IF THE MOVE POINT IS *
|
||
* NOT A CENTER POINT THEN ONLY THAT DIRECTION AND *
|
||
* THE OPPOSITE ARE SEARCHED. *
|
||
* A0 = PTR TO MOVE POINT *
|
||
* A1 = STARTING DIRECTION *
|
||
* A3 = SEE THROUGH FLAG, *
|
||
* IF 0, STOP IF YOU HIT A BONE. *
|
||
* IF 1, SEE THROUGH THE BONES (CLUB MAN). *
|
||
* *A13(TDINO),L = PTR TO DINO THAT TROG IS CURRENTLY PURSUING *
|
||
* RETURNS: *
|
||
* Z = NOTHING FOUND *
|
||
* A2 = 0 *
|
||
* A4 = 0 *
|
||
* A5 = 0 *
|
||
* NZ = DINO FOUND *
|
||
* A2 = DIRECTION *
|
||
* A4 = PTR TO DINOSAUR OBJECT *
|
||
* A5 = # STEPS AWAY FROM DINOSAUR *
|
||
* *
|
||
**************************************************************************
|
||
FIND_MVD:
|
||
MMTM SP,A1,A6,A7,A8,A9,A11
|
||
CLR A2
|
||
CLR A7 ;FOUND DINO FLAG
|
||
CLR A6
|
||
CLR A8
|
||
MOVE *A0(MOVECPTR),A2,L ;IS THIS A CENTER
|
||
JRN FMVD_2WAY ;BR = NO, JUST SEARCH TWO WAYS
|
||
MOVE A1,A9
|
||
FIND_MVD_LP:
|
||
CALLR SEARCH_DINO
|
||
JRZ FMVD_NEXT_DIR
|
||
CALLR FMVD_COMPARE
|
||
FMVD_NEXT_DIR:
|
||
INC A1
|
||
CMPI RIGHT,A1
|
||
JRLS FMVD_NOT_TOPPED
|
||
MOVI UP,A1
|
||
FMVD_NOT_TOPPED:
|
||
CMP A1,A9 ;HAVE WE HIT THE STARTING POINT?
|
||
JRNE FIND_MVD_LP ;BR = NO
|
||
FMVD_X:
|
||
MOVE A8,A5
|
||
MOVE A6,A4
|
||
MMFM SP,A1,A6,A7,A8,A9,A11
|
||
RETS
|
||
*JUST SEARCH BOTH FOWARD AND BACKWARD HERE
|
||
FMVD_2WAY:
|
||
CALLR SEARCH_DINO
|
||
JRZ FMVD_OPP
|
||
CALLR FMVD_COMPARE
|
||
FMVD_OPP:
|
||
MOVE A1,A11
|
||
CALLA NOTDIR
|
||
MOVE A11,A1
|
||
CALLR SEARCH_DINO
|
||
JRZ FMVD_X
|
||
CALLR FMVD_COMPARE
|
||
JRUC FMVD_X
|
||
*
|
||
*SUBROUTINE FOR FIND_MVD
|
||
*USE ONLY WITH FIND_MVD
|
||
*A1 = DIRECTION
|
||
*A4 = DINO PTR
|
||
*A5 = STEPS AWAY
|
||
*A13(TDINO),L = DINO THAT TROG IS CURRENTLY CHASING
|
||
*RETURNS:
|
||
*A2 = DIRECTION OF BEST DINOSAUR
|
||
*A6 = BEST DINOSAUR
|
||
*A8 = # OF STEPS TO BEST DINOSAUR
|
||
*A7 = FOUND FLAG/RATING
|
||
FMVD_COMPARE:
|
||
MMTM SP,A10,A11
|
||
|
||
MOVE *A4(OPLINK),A11,L
|
||
JRZ FMVD_CX
|
||
MOVB *A11(DTREXFLG),A10 ;IS THIS DINO MAD?
|
||
JRNZ FMVD_CX ;BR = YES, HE'S NOT VERY VALUABLE
|
||
|
||
MOVE *A13(TDINO),A10,L
|
||
CMP A4,A10 ;IS THIS WHO I'VE BEEN LOOKING FOR?
|
||
JRNE FMVD_TEST_REST ;BR = NO
|
||
MOVK 1,A7
|
||
JRUC FMVD_ADD_NEW
|
||
FMVD_TEST_REST:
|
||
MOVB *A11(DDIZZYFLG),A10 ;IS THIS GUY DISABLED?
|
||
JRNE FMVD_CX ;BR = YES, THEN DON'T BOTHER HIM
|
||
MOVB *A11(DINVIN),A10 ;IS THIS GUY INVINCIBLE?
|
||
JRNE FMVD_CX ;BR = YES, THEN DON'T BOTHER HIM
|
||
MOVE *A11(DPLAYER),A10,L
|
||
MOVE *A10(PBOZO),A10,W ;IS THIS GUY A BOZO
|
||
CMPI 2,A10
|
||
JRHS FMVD_CX ;BR = YES, DON'T PICK ON HIM
|
||
**** JRNE FMVD_CX
|
||
|
||
MOVE A7,A7 ;HAS ONE BEEN FOUND AT ALL?
|
||
JRZ FMVD_ADD_2 ;BR = NO, THEN THIS IS THE ONE
|
||
CMPI 2,A7 ;IS THE LOADED GUY A BOZO
|
||
JRHI FMVD_ADD_2 ;BR = YES, THEN LOAD THIS ONE NOW
|
||
JRLO FMVD_CX ;BR = LOWER ONE
|
||
CMP A8,A5 ;IS THIS ONE, CLOSER?
|
||
JRHI FMVD_CX ;BR = NO
|
||
FMVD_ADD_2:
|
||
MOVK 2,A7
|
||
FMVD_ADD_NEW:
|
||
MOVE A4,A6
|
||
MOVE A1,A2
|
||
MOVE A5,A8
|
||
FMVD_CX:
|
||
MMFM SP,A10,A11
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* SEARCH_DINO - LOOK ALONG A STRAIGHT LINE FOR ANY DINOS THAT MAY EXIST. *
|
||
* A0 = STARTING MOVE POINT *
|
||
* A1 = DIRECTION TO SEARCH *
|
||
* A3 = SEE THROUGH FLAG, *
|
||
* IF 0, STOP IF YOU HIT A BONE. *
|
||
* IF 1, SEE THROUGH THE BONES (CLUB MAN). *
|
||
* RETURNS: *
|
||
* Z = NO DINO FOUND: *
|
||
* A4 = 0 *
|
||
* A5 = UNDEFINED *
|
||
* NZ = DINO FOUND: *
|
||
* A4 = PTR TO DINO OBJECT *
|
||
* A5 = # OF STEPS *
|
||
* *
|
||
**************************************************************************
|
||
SEARCH_DINO:
|
||
MMTM SP,A0,A1,A2,A3,A6,A7,A8,A9
|
||
MOVE A3,A9 ;KEEP BONE FLAG HERE
|
||
MOVI DINOOID,A7
|
||
MOVI 0FFF0H,A2
|
||
MOVE A1,A6
|
||
CLR A5
|
||
SEARCH_DINO_LP:
|
||
CALLA ONE_MOVE
|
||
JRZ SEARCH_DINO_FL ;BR = NO MORE MOVES ALONG THIS POINT
|
||
MOVE A9,A9 ;CAN WE SEARCH THROUGH BONES?
|
||
JRNZ SEARCH_DINO_AL ;BR = YES
|
||
MOVB *A1(MOVEPLYR),A3 ;CHECK FOR A BONE
|
||
JRNN SEARCH_DINO_FL ;BR = THERE IS ONE, BETTER CAN IT
|
||
SEARCH_DINO_AL:
|
||
INC A5
|
||
MOVE A1,A8
|
||
MOVE *A1(MOVEPOS),A3,L
|
||
MOVE A7,A0
|
||
MOVE A2,A1
|
||
CALLA DINOS_NEAR_PNT
|
||
JRNZ SEARCH_DINO_FOUND
|
||
MOVE A8,A0
|
||
MOVE A6,A1
|
||
JRUC SEARCH_DINO_LP
|
||
SEARCH_DINO_FL:
|
||
CLR A0
|
||
SEARCH_DINO_FOUND:
|
||
MOVE A0,A4
|
||
MMFM SP,A0,A1,A2,A3,A6,A7,A8,A9
|
||
RETS
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* GET_BEST_DIR_TO_MOVE - GET THE BEST DIRECTION TO GO FROM THIS MOVE POI *
|
||
* TO ANOTHER MOVE POINT. *
|
||
* A0 = PTR TO CURRENT MOVE POINT *
|
||
* A4 = PTR TO OTHER MOVE POINT *
|
||
* A8 = PTR TO CHASING OBJECT *
|
||
* A11 = CURRENT DIRECTION OF THE CHASING OBJECT *
|
||
* RETURNS: *
|
||
* Z = NO NEW DIRECTION COULD BE FOUND, I.E. 1x1 BOX, *
|
||
* A1 = 0 *
|
||
* NZ = NEW DIRECTION FOUND, *
|
||
* A1 = DIRECTION *
|
||
* *
|
||
**************************************************************************
|
||
GET_BEST_DIR_TO_MOVE:
|
||
MMTM SP,A2,A3
|
||
SWAP A0,A4
|
||
CALLR GET_DIRECTIONS_TO_MOVE
|
||
SWAP A0,A4
|
||
JRUC GET_BEST_GEN
|
||
**************************************************************************
|
||
* *
|
||
* GET_BEST_DIRECTION - GET THE BEST DIRECTION TO GO FROM THIS MOVE POINT *
|
||
* TO CATCH ANOTHER OBJECT. *
|
||
* A0 = PTR TO CURRENT MOVE POINT *
|
||
* A4 = PTR TO OBJECT TO CATCH *
|
||
* A8 = PTR TO THE CHASING OBJECT *
|
||
* A11 = CURRENT DIRECTION OF THE CHASING OBJECT *
|
||
* RETURNS: *
|
||
* Z = NO NEW DIRECTION COULD BE FOUND, I.E. 1x1 BOX, *
|
||
* A1 = 0 *
|
||
* NZ = NEW DIRECTION FOUND, *
|
||
* A1 = DIRECTION *
|
||
* *
|
||
**************************************************************************
|
||
GET_BEST_DIRECTION:
|
||
MMTM SP,A2,A3
|
||
CALLR GET_DIRECTIONS
|
||
*
|
||
*ENTRYPOINT FOR GET_BEST_DIRECTIONS
|
||
*A1 = FIRST CHOICE DIR
|
||
*A2 = SECOND
|
||
GET_BEST_GEN:
|
||
MOVE A11,A3
|
||
CALLA NOTDIR
|
||
SWAP A11,A3
|
||
CMP A3,A1 ;IS THE BEST THE SAME AS REVERSING
|
||
JREQ GET_BEST_CHECK_NEXT ;BR = YES
|
||
CALLR CHECK_DIRECTION
|
||
JRNZ GET_BEST_X
|
||
GET_BEST_CHECK_NEXT:
|
||
MOVE A2,A1
|
||
CMP A3,A1 ;IS THE SECOND THE SAME AS REVERSING
|
||
JREQ GET_BEST_X ;BR = YES
|
||
CALLR CHECK_DIRECTION
|
||
JRNZ GET_BEST_X
|
||
CLR A2
|
||
GET_BEST_X:
|
||
MMFM SP,A2,A3
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CHECK_DIRECTION - CHECK TO SEE IF IT IS O.K. TO MOVE IN THIS DIRECTION *
|
||
* LOOKS FOR THINGS LIKE BONES, ILLEGAL MOVES AND BADIES. *
|
||
* A0 = CURRENT MOVE *
|
||
* A1 = DIRECTION *
|
||
* A8 = OBJECT TRYING TO MOVE THIS DIRECTION *
|
||
* RETURNS: *
|
||
* Z = NOT GOOD *
|
||
* NZ = O.K. IN THIS DIRECTION *
|
||
* *
|
||
**************************************************************************
|
||
CHECK_DIRECTION:
|
||
MMTM SP,A0,A1,A2,A3
|
||
|
||
MOVE *A0(MOVECPTR),A2,L ;IS THIS A CENTER POINT
|
||
JRN CHECK_AUX ;BR = NO
|
||
|
||
*CENTER POINT CHECK
|
||
MOVE A1,A2
|
||
CALLA ONE_MOVE ;GO ONE MOVE FOWARD
|
||
JRZ CHECK_DIR_EXIT_MOVE ;BR = NO MOVE THERE?
|
||
|
||
MOVE *A8(OID),A3,W ;GET THE I.D. OF THIS DOG
|
||
MOVE A3,A0
|
||
SRL 4,A0
|
||
SLL 4,A0
|
||
CMPI TROGOID,A0 ;IS THIS TROG?
|
||
JRNE CHECK_DIRECTION_ALL ;BR = NO, THEN ALWAYS CHECK THESE
|
||
MOVE A3,A0
|
||
SLL 30,A0
|
||
SRL 30,A0
|
||
CMPI TTYPE_CLUB,A0 ;IS THIS A CLUB TROG?
|
||
JREQ CHECK_DIR_SKIP_BONE ;BR = YES, BONES DON'T MATTER
|
||
|
||
CHECK_DIRECTION_ALL:
|
||
MOVB *A1(MOVEPLYR),A0
|
||
JRNN CHECK_DIR_FL
|
||
CHECK_DIR_SKIP_BONE:
|
||
MOVE A1,A0
|
||
MOVE A2,A1
|
||
CALLA ONE_MOVE ;GO ON TO THE NEXT
|
||
JRZ CHECK_DIR_EXIT_MOVE ;BR = NOTHING THERE
|
||
MOVE *A1(MOVECPTR),A0,L ;GET CENTER POINT
|
||
JRN CHECK_DIR_FL ;BR = NOT A CENTER?
|
||
CALLR CENTER_CHECK ;SOMETHING DANGEROUS?
|
||
JRNZ CHECK_DIR_FL
|
||
CHECK_DIR_OK:
|
||
CLR A1
|
||
INC A1
|
||
JRUC CHECK_DIR_X
|
||
*
|
||
*CHECK HERE TO SEE IF THIS IS A DINOSAUR LOOKING.
|
||
* IF IT IS THEN CHECK FOR HOUSE AT EXIT MOVE.
|
||
CHECK_DIR_EXIT_MOVE:
|
||
MOVE *A8(OID),A2,W
|
||
MOVE A2,A1
|
||
SRL 4,A2
|
||
SLL 4,A2
|
||
CMPI DINOOID,A2 ;ARE WE DEALING WITH A DINOSAUR
|
||
JRNE CHECK_DIR_FL ;BR = NO, JUST FAIL
|
||
MOVE *A0(MOVEEPTR),A2,L ;IS THIS AN EXIT MOVE?
|
||
JRN CHECK_DIR_AUX ;BR = NO
|
||
MOVE *A2(EMOVEOBJ),A3,L ;IS THERE AN OBJECT HERE
|
||
JRZ CHECK_DIR_AUX ;BR = NO
|
||
MOVB *A2(EMOVEPLYR),A3 ;DOES IT BELONG TO A PLAYER
|
||
JRN CHECK_DIR_AUX ;BR = NO
|
||
CMPI PXPLAYER,A3 ;COMMUNITY HOUSE?
|
||
JREQ CHECK_DIR_OK ;BR = YES
|
||
SLL 28,A1
|
||
SRL 28,A1
|
||
CMP A1,A3
|
||
JREQ CHECK_DIR_OK
|
||
CHECK_DIR_AUX:
|
||
MOVE *A0(MOVEAPTR),A2,L ;IS THIS AN AUXILLARY POINT?
|
||
JRN CHECK_DIR_FL ;BR = NO
|
||
MOVB *A2(CMOVEEGG),A3
|
||
SLL 28,A1
|
||
SRL 28,A1
|
||
CMP A1,A3
|
||
JREQ CHECK_DIR_OK
|
||
JRUC CHECK_DIR_FL
|
||
*AUXILLARY POINT CHECK
|
||
CHECK_AUX:
|
||
MOVE A1,A2
|
||
CALLA ONE_MOVE ;GO ONE MOVE FOWARD
|
||
JRZ CHECK_DIR_EXIT_MOVE ;BR = NO MOVE THERE, MUST BE AN EDGE
|
||
MOVE *A1(MOVECPTR),A0,L ;GET CENTER POINT
|
||
JRN CHECK_DIR_FL ;BR = NOT A CENTER, MUST BE A ROCK
|
||
CALLR CENTER_CHECK
|
||
JRNZ CHECK_DIR_FL
|
||
MOVE A1,A0
|
||
MOVE A2,A1
|
||
CALLA ONE_MOVE ;GO ON TO THE NEXT
|
||
JRZ CHECK_DIR_EXIT_MOVE ;BR = NOTHING THERE?
|
||
MOVB *A1(MOVEPLYR),A0
|
||
JRN CHECK_DIR_OK
|
||
CHECK_DIR_FL:
|
||
CLR A1
|
||
CHECK_DIR_X:
|
||
MMFM SP,A0,A1,A2,A3
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CENTER_CHECK - CHECK A CENTER POINT FOR THINGS THAT CAUSE DEATH. *
|
||
* A0 = PTR TO CENTER POINT DATA *
|
||
* RETURNS: *
|
||
* Z = NOTHING WORTH CONCERING YOURSELF ABOUT *
|
||
* NZ = DANGER LURKS *
|
||
* C = NOTHING DANGEROUS, BUT THERE IS SOMETHING HERE. *
|
||
* NC = NOBODY, AT ALL, IN HERE *
|
||
* *
|
||
**************************************************************************
|
||
CENTER_CHECK:
|
||
PUSH A4
|
||
MOVB *A0(CMOVEEGG),A4 ;IS THERE SOMETHING HERE?
|
||
INC A4
|
||
JRNZ CENTER_CK_ITEM ;BR = YES
|
||
CLRC
|
||
JRUC CENTER_CK_X
|
||
CENTER_CK_ITEM:
|
||
DEC A4
|
||
|
||
CMPI FLOWERID,A4 ;IS IT A FLOWER?
|
||
JREQ CENTER_CK_X ;BR = OK TO WALK OVER IT
|
||
|
||
CMPI SHROOMID,A4 ;IS IT A MUSHROOM?
|
||
JREQ CENTER_CK_X ;BR = OK TO WALK OVER IT
|
||
|
||
CMPI TUNNELID,A4 ;IS IT A TUNNEL?
|
||
JREQ CENTER_CK_X ;BR = OK
|
||
|
||
CMPI TROGPITID,A4 ;IS IT A TROG PIT?
|
||
JREQ CENTER_CK_X ;BR = OK
|
||
|
||
CMPI PINEAPPLEID,A4 ;IS IT SOMETHING FRUITY?
|
||
JREQ CENTER_CK_X ;BR = YES, EAT IT
|
||
|
||
CMPI CATID,A4 ; IS IT A CATAPULT?
|
||
JREQ CENTER_CK_X ; BR = YES, GO FOR A RIDE
|
||
|
||
CMPI HAUSID,A4 ; IS IT A TRANSPORT HOUSE?
|
||
JREQ CENTER_CK_X ; BR = YES, GO FOR A RIDE
|
||
|
||
CMPI HSHOEID,A4 ;IS IT A HORSESHOE?
|
||
JREQ CENTER_CK_X ;BR = YES, GET LUCKY
|
||
|
||
CMPI ICEID,A4 ;IS IT AN ICE CUBE?
|
||
JREQ CENTER_CK_X ;BR = YES, FREEZE TROGS BALLS
|
||
|
||
CMPI CHILIID,A4 ;IS IT A RED HOT CHILI PEPPER?
|
||
JREQ CENTER_CK_X ;BR = YES, HANG FIRE
|
||
|
||
ANDI 0FFFFFFF0H,A4 ;IS IT SOMETHING TO WORRY ABOUT?
|
||
JREQ CENTER_CK_X ;BR = NO
|
||
*
|
||
* CHECK ALL ENEMIES AND GOODIES HERE, AND SEE IF IT IS O.K. TO WALK ON THEM
|
||
*
|
||
CLR A4 ;FLAG FAILURE
|
||
INC A4
|
||
SETC
|
||
CENTER_CK_X:
|
||
PULL A4
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* GET_DIRECTIONS_TO_MOVE - GET THE BEST DIRECTIONS TO TRAVEL TOWARDS *
|
||
* THE GIVEN MOVE POINT. *
|
||
* A0 = PTR TO MOVE THAT YOU WISH TO REACH *
|
||
* A8 = PTR TO THIS OBJECT *
|
||
* RETURNS: *
|
||
* A1 = FIRST CHOICE *
|
||
* A2 = SECOND CHOICE *
|
||
* *
|
||
**************************************************************************
|
||
GET_DIRECTIONS_TO_MOVE:
|
||
MMTM SP,A5,A6
|
||
CALLA GETCPNT
|
||
MOVE A1,A2 ;SEARCHING OBJECT CENTER IN A2
|
||
MOVE *A0(MOVEPOS),A1,L
|
||
SUBXY A1,A2 ;SIGNED [Y,X] DIFFERENCE IN A2
|
||
JRYGT GET_DIRTM_UP
|
||
JRXGT GET_DIRTM_DOWNLEFT
|
||
*TARGET POINT IS DOWN AND TO THE RIGHT
|
||
MOVI DOWN,A5
|
||
MOVI RIGHT,A6
|
||
JRUC GET_DIRTM_CMP
|
||
*TARGET POINT IS DOWN AND TO THE LEFT
|
||
GET_DIRTM_DOWNLEFT:
|
||
MOVI DOWN,A5
|
||
MOVI LEFT,A6
|
||
JRUC GET_DIRTM_CMP
|
||
GET_DIRTM_UP:
|
||
JRXGT GET_DIRTM_UPLEFT
|
||
*TARGET POINT IS UP AND TO THE RIGHT
|
||
MOVI UP,A5
|
||
MOVI RIGHT,A6
|
||
JRUC GET_DIRTM_CMP
|
||
*TARGET POINT IS UP AND TO THE LEFT
|
||
GET_DIRTM_UPLEFT:
|
||
MOVI UP,A5
|
||
MOVI LEFT,A6
|
||
*A5 = Y DIRECTION TO PROCEED
|
||
*A6 = X DIRECTION TO PROCEED
|
||
GET_DIRTM_CMP:
|
||
MOVY A2,A1
|
||
SRA 16,A1 ;SIGNED Y DIFFERENCE IN A1
|
||
SEXT A2 ;SIGNED X DIFFERENCE IN A2
|
||
ABS A1
|
||
ABS A2
|
||
CMP A1,A2 ;COMPARE DISTANCES
|
||
JRGT GET_DIRTM_XBEST ;LET'S GO FOR THE FARTHEST FIRST
|
||
CMPI 5,A2 ;IS THE X ON TARGET?
|
||
JRHI GET_DIRTM_YHI ;BR = NO
|
||
MOVE A5,A1 ;Y IS THE ONLY WAY TO GO
|
||
MOVE A5,A2
|
||
JRUC GET_DIRTM_X
|
||
GET_DIRTM_YHI:
|
||
MOVE A5,A1 ;Y IS THE BEST WAY TO GO
|
||
MOVE A6,A2
|
||
JRUC GET_DIRTM_X
|
||
GET_DIRTM_XBEST:
|
||
CMPI 5,A1 ;IS THE Y ON TARGET?
|
||
JRHI GET_DIRTM_XHI ;BR = NO
|
||
MOVE A6,A1 ;X IS THE ONLY WAY
|
||
MOVE A6,A2
|
||
JRUC GET_DIRTM_X
|
||
GET_DIRTM_XHI:
|
||
MOVE A6,A1 ;X IS THE BEST WAY
|
||
MOVE A5,A2
|
||
GET_DIRTM_X:
|
||
MMFM SP,A5,A6
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* GET_DIRECTIONS - GET THE DIRECTIONS THAT THIS OBJECT MUST TRAVEL *
|
||
* TO CATCH THE OTHER OBJECT. *
|
||
* A4 = PTR TO OBJECT TO CATCH *
|
||
* A8 = PTR TO THIS OBJECT *
|
||
* RETURNS: *
|
||
* A1 = FIRST CHOICE DIRECTION *
|
||
* A2 = SECOND CHOICE DIRECTION *
|
||
* *
|
||
**************************************************************************
|
||
GET_DIRECTIONS:
|
||
MMTM SP,A5,A6
|
||
CALLA GETCPNT
|
||
MOVE A1,A2 ;SEARCHING OBJECT CENTER IN A2
|
||
SWAP A4,A8
|
||
CALLA GETCPNT ;SEARCHEE OBJECT CENTER IN A1
|
||
SWAP A4,A8
|
||
*
|
||
*ENTRYPOINT FOR BEST DIRECTIONS
|
||
*A1 = [Y,X] TO REACH
|
||
*A2 = CURRENT [Y,X]
|
||
GET_DIR_GEN:
|
||
SUBXY A1,A2 ;SIGNED [Y,X] DIFFERENCE IN A2
|
||
JRYGT GET_DIR_UP
|
||
JRXGT GET_DIR_DOWNLEFT
|
||
*TARGET OBJECT IS DOWN AND TO THE RIGHT
|
||
MOVI DOWN,A5
|
||
MOVI RIGHT,A6
|
||
JRUC GET_DIR_CMP
|
||
*TARGET OBJECT IS DOWN AND TO THE LEFT
|
||
GET_DIR_DOWNLEFT:
|
||
MOVI DOWN,A5
|
||
MOVI LEFT,A6
|
||
JRUC GET_DIR_CMP
|
||
GET_DIR_UP:
|
||
JRXGT GET_DIR_UPLEFT
|
||
*TARGET OBJECT IS UP AND TO THE RIGHT
|
||
MOVI UP,A5
|
||
MOVI RIGHT,A6
|
||
JRUC GET_DIR_CMP
|
||
*TARGET OBJECT IS UP AND TO THE LEFT
|
||
GET_DIR_UPLEFT:
|
||
MOVI UP,A5
|
||
MOVI LEFT,A6
|
||
*A5 = Y DIRECTION TO PROCEED
|
||
*A6 = X DIRECTION TO PROCEED
|
||
GET_DIR_CMP:
|
||
MOVE *A4(OYVEL+16),A1,W ;ADD IN VELOCITIES FOR ACCURACY
|
||
SLL 16,A1
|
||
ADDXY A1,A2
|
||
MOVE *A4(OXVEL+16),A1,W
|
||
ZEXT A1
|
||
ADDXY A1,A2
|
||
MOVY A2,A1
|
||
SRA 16,A1 ;SIGNED Y DIFFERENCE IN A1
|
||
SEXT A2 ;SIGNED X DIFFERENCE IN A2
|
||
ABS A1
|
||
ABS A2
|
||
CMP A1,A2 ;COMPARE DISTANCES
|
||
JRGT GET_DIR_XBEST ;LET'S GO FOR THE FARTHEST FIRST
|
||
MOVE A5,A1 ;Y IS THE WAY WE SHOULD GO
|
||
MOVE A6,A2
|
||
JRUC GET_DIR_X
|
||
GET_DIR_XBEST:
|
||
MOVE A6,A1 ;X IS THE WAY
|
||
MOVE A5,A2
|
||
GET_DIR_X:
|
||
MMFM SP,A5,A6
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* SELECT_DINO - SELECT A DINO TO GO AFTER, BECAUSE WE CANNOT SEE ONE *
|
||
* FROM HERE. *
|
||
* RETURNS: *
|
||
* Z = COULD NOT FIND A DINO WORTH JAPPING. *
|
||
* A4 = UNDEFINED *
|
||
* NZ = FOUND ONE *
|
||
* A4 = DINOSAUR OBJECT PTR *
|
||
* *
|
||
**************************************************************************
|
||
SELECT_DINO:
|
||
MMTM SP,A0,A2,A3
|
||
MOVE @BONUS_WAVE,A4,W
|
||
JRZ SD_OK
|
||
CLR A4
|
||
JRUC SELECT_DINO_X
|
||
SD_OK
|
||
CALLR SELECT_PLAYER
|
||
JRZ SELECT_DINO_X
|
||
CALLA GPLAYNUM
|
||
MOVE @DINOS,A4,L
|
||
JRZ SELECT_DINO_X
|
||
SELECT_DINO_TST:
|
||
MOVE *A4(OID),A2,W
|
||
SLL 28,A2
|
||
SRL 28,A2
|
||
CMP A0,A2
|
||
JRNE SELECT_DINO_NEXT
|
||
MOVE *A4(OPLINK),A2,L
|
||
JRZ SELECT_DINO_NEXT
|
||
MOVB *A2(DINVIN),A3
|
||
JRNE SELECT_DINO_NEXT
|
||
MOVB *A2(DTREXFLG),A3
|
||
JRNE SELECT_DINO_NEXT
|
||
CALLR CK_CHASE
|
||
JRNE SELECT_DINO_NEXT
|
||
MOVE A4,A4
|
||
JRUC SELECT_DINO_X
|
||
SELECT_DINO_NEXT:
|
||
MOVE *A4(OSLINK),A4,L
|
||
JRNZ SELECT_DINO_TST
|
||
SELECT_DINO_X:
|
||
MMFM SP,A0,A2,A3
|
||
RETS
|
||
|
||
|
||
.BSS SELECTP_RAM,32*MAXPLAYERS,1
|
||
|
||
**************************************************************************
|
||
* *
|
||
* SELECT_PLAYER - SELECT A PLAYER TO BE WASTED. IF THE PLAYER IS ANY *
|
||
* KIND OF BOZO, HE WILL NOT BE SELECTED. *
|
||
* RETURNS: *
|
||
* Z = NO PLAYER WORTH WASTING *
|
||
* A2 = UNDEFINED *
|
||
* NZ = FOUND A PLAYER *
|
||
* A2 = PLAYER DATA AREA *
|
||
* *
|
||
**************************************************************************
|
||
SELECT_PLAYER:
|
||
MMTM SP,A0,A4,A5,A6
|
||
CLR A0
|
||
MOVI SELECTP_RAM,A4
|
||
MOVI P1DATA,A2
|
||
MOVE @NPLAYERS,A6,W
|
||
SELECT_P_LP:
|
||
MOVE *A2(POBJ),A5,L
|
||
JRZ SELECT_P_NXT
|
||
MOVE *A2(PBOZO),A5,W
|
||
CMPI 2,A5
|
||
JRHS SELECT_P_NXT
|
||
*** JRNE SELECT_P_NXT
|
||
MOVE A2,*A4+,L
|
||
INC A0
|
||
SELECT_P_NXT:
|
||
ADDI PDSIZE,A2
|
||
DEC A6
|
||
JRNN SELECT_P_LP
|
||
MOVE A0,A0 ;DID WE FIND ONE?
|
||
JRZ SELECT_P_X ;BR = NO, JUST EXIT
|
||
CALLA RANDU ;SELECT FROM THE CHOSEN
|
||
DEC A0
|
||
SLL 5,A0
|
||
ADDI SELECTP_RAM,A0
|
||
MOVE *A0,A2,L ;GET THAT PLAYER
|
||
SELECT_P_X:
|
||
MMFM SP,A0,A4,A5,A6
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* SCORE_TO_PLAYER - GIVE SOME SCORE TO THE PLAYER THAT KILLED TROG *
|
||
* A13 = PTR TO TROG'S PROCESS *
|
||
* *
|
||
**************************************************************************
|
||
SCORE_TO_PLAYER:
|
||
MMTM SP,A0,A1,A2,A4
|
||
CALLR TROG_VALIDATE_CHASEE
|
||
MOVE *A13(TDINO),A4,L ;WHAT DINO MADE ME DIE?
|
||
JRZ SCORE_TOP_NBT ;BR = NOBODY
|
||
**** MOVE *A4(OID),A0,W
|
||
**** MOVK 1,A1
|
||
**** CALLA BUILD_TENSION ;GET PISSED AT HIM
|
||
SCORE_TOP_NBT:
|
||
MOVB *A13(TPLAYER),A0 ;GET GUILTY PLAYER
|
||
JRN SCORE_TOP_NO ;BR = NONE TO BE HAD
|
||
MOVB *A13(TPURSUIT),A1 ;ARE WE PURSUING THIS GUY?
|
||
JRZ SCORE_TOP_X ;BR = NO
|
||
CALLA GPLAYD ;A2 GETS PLAYER DATA AREA
|
||
MOVE A4,A0
|
||
CALLR SCORE_TROG_KILL ;SCORE THE KILL
|
||
SCORE_TOP_NO:
|
||
CLR A1
|
||
MOVE A1,*A13(TDINO),L ;RESET CHASE/SCORE VARIABLES
|
||
NOT A1
|
||
MOVB A1,*A13(TPLAYER)
|
||
SCORE_TOP_X
|
||
MMFM SP,A0,A1,A2,A4
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* SCORE_TROG_KILL - SCORE POINTS FOR KILLING TROG *
|
||
* A2 = PTR TO PLAYER DATA AREA *
|
||
* A8 = PTR TO TROG OBJECT *
|
||
* NOTE: TRASHES A14 *
|
||
* *
|
||
**************************************************************************
|
||
SCORE_TROG_KILL:
|
||
MMTM SP,A1,A2,A3,A7,A8,A9,A10,A11
|
||
MOVE A2,A11
|
||
INCM *A2(PTROGKILLS),W
|
||
CALLA GETANIXY
|
||
SRL 16,A3
|
||
MOVY A2,A3
|
||
MOVE A3,A8
|
||
CLR A9 ;NO SOUND FOR NOW
|
||
MOVI 1000H,A10 ;1000 SCORE FOR NOW
|
||
CREATE INDPIDE,SCOREOBJ
|
||
JRNZ SCORE_TROG_K_OK
|
||
MOVE A11,A2 ;NO PROC, JUST SCORE
|
||
MOVE A10,A1
|
||
CALLA SCORE
|
||
SCORE_TROG_K_OK:
|
||
MMFM SP,A1,A2,A3,A7,A8,A9,A10,A11
|
||
RETS
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TROG_FIND_TRAP - FIND THE CLOSEST POINT TO SET A TRAP FOR THE DINOS. *
|
||
* A13 = PTR TO TROG DATA STRUCTURE *
|
||
* RETURNS: *
|
||
* Z = NOTHING FOUND (A1 = UNDEFINED) *
|
||
* NZ = FOUND SOMETHING (A1 = PTR TO MOVE POINT TO SET THE TRAP) *
|
||
* *
|
||
**************************************************************************
|
||
TROG_FIND_TRAP:
|
||
MMTM SP,A2,A3,A4,A5,A6,A8
|
||
MOVE *A13(TCURMPOS),A5,L ;KEEP HIS CURRENT MOVE POSITION
|
||
MOVI 7FFFH,A6 ;BEST VECTOR SO FAR
|
||
CLR A1 ;BEST MOVE POINT SO FAR
|
||
|
||
MOVE @CMOVECNT,A4,W
|
||
JRZ TROG_FIND_TRAP_X
|
||
MOVI CMOVEMAP,A8 ;LET'S SCAN THE CENTER POINT MAP
|
||
TROG_FIND_TRAP_LP:
|
||
MOVB *A8(CMOVETROG),A3
|
||
INC A3 ;DOES HE WANT TO PUT ONE HERE?
|
||
JRZ TROG_FIND_TRAP_NXT ;BR = NO
|
||
DEC A3
|
||
MOVB *A8(CMOVEEGG),A2 ;SEE WHAT'S ACTUALLY THERE
|
||
INC A2
|
||
JRNZ TROG_FIND_TRAP_NXT ;BR = SOMETHING, THIS ONE'S NO GOOD
|
||
MOVE *A8(CMOVEPOS),A3,L
|
||
SUBXY A5,A3 ;GET VECTOR COMPONENTS
|
||
MOVY A3,A2 ;MAKE THEM ABSOLUTE
|
||
SRA 16,A2
|
||
ABS A2
|
||
SEXT A3
|
||
ABS A3
|
||
ADD A2,A3 ;VECTOR FOR THIS MOVE
|
||
CMP A6,A3 ;BETTER THAN THE BEST
|
||
JRHS TROG_FIND_TRAP_NXT ;BR = NO
|
||
MOVE A3,A6 ;KEEP THIS AS THE BEST
|
||
MOVE A8,A1
|
||
TROG_FIND_TRAP_NXT:
|
||
ADDI CMOVESIZE,A8
|
||
DSJ A4,TROG_FIND_TRAP_LP
|
||
MOVE A1,A1
|
||
JRZ TROG_FIND_TRAP_X
|
||
MOVE *A1(CMOVEMPTR),A1,L ;RETURN THE MOVE
|
||
TROG_FIND_TRAP_X:
|
||
MMFM SP,A2,A3,A4,A5,A6,A8
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CK_CHASE - ROUTINE TO CHECK IF THERE IS A TROG SOMEWHERE AFTER THIS *
|
||
* DINO. *
|
||
* A4 = PTR TO DINO OBJECT *
|
||
* RETURNS: *
|
||
* Z = NOBODY IS AFTER THIS GUY *
|
||
* NZ = SOME TROG IS AFTER HIM *
|
||
* *
|
||
**************************************************************************
|
||
CK_CHASE
|
||
MMTM SP,A0,A8
|
||
MOVE @TROGS,A8,L
|
||
JRZ CK_CHASE_X
|
||
CK_CHASE_LP
|
||
MOVE *A8(OID),A0,W
|
||
SRL 4,A0
|
||
SLL 4,A0
|
||
CMPI TROGOID,A0
|
||
JRNE CK_CHASE_NXT
|
||
MOVE *A8(OPLINK),A0,L
|
||
JRZ CK_CHASE_NXT
|
||
MOVE *A0(TDINO),A0,L
|
||
CMP A0,A4
|
||
JREQ CK_CHASE_FND
|
||
CK_CHASE_NXT
|
||
MOVE *A8(OSLINK),A8,L
|
||
JRNZ CK_CHASE_LP
|
||
CK_CHASE_X
|
||
MMFM SP,A0,A8
|
||
RETS
|
||
CK_CHASE_FND
|
||
MOVE A4,A4 ;CLEAR THE ZERO
|
||
JRUC CK_CHASE_X
|
||
|
||
.DATA
|
||
|
||
**************************************************************************
|
||
* *
|
||
* ASSORTED SOUNDS FOR THIS MODULE *
|
||
* *
|
||
**************************************************************************
|
||
TROGAHA_SND:
|
||
.WORD >F010,>3C,>804A,0 ;A-HA
|
||
TROGBIRTH_SND:
|
||
.WORD >F005,>32,>804C,0 ;TROG GRUNTS HIS WAY OUT OF THE GROUND
|
||
TROGCOUGH_SND:
|
||
.WORD >F005,>23,>805C,>805C,0 ;TROG COUGHS BEFORE COMING OUT OF GROUND
|
||
TROGSPEED_SND:
|
||
.WORD >F010,>2D,>801C,>801D,0 ;TROG EATS A SPEED PLANT
|
||
TROGSHROOM_SND:
|
||
.WORD >F010,>46,>801B,0 ;TROG EATS A MUSHROOM
|
||
TROGOOF_SND
|
||
.WORD >F009,>20,>801D,0 ;TROG GETS PUNCHED
|
||
TROGUGH_SND:
|
||
.WORD >F010,>3C,>8040,0 ;TROG GETS KNOCKED OUT
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TROG COLLISION LIST *
|
||
* *
|
||
**************************************************************************
|
||
TROGCOLL:
|
||
.WORD HBAROID,08FFFH ;IGNORE PLAYER #
|
||
.LONG TROGHHIT
|
||
.WORD VBAROID,08FFFH
|
||
.LONG TROGVHIT
|
||
.WORD DINOOID,0FFF0H
|
||
.LONG TROGDINO
|
||
.WORD TAROID,0FFF0H
|
||
.LONG TROGTAR
|
||
.WORD FIREOID,0FFF0H
|
||
.LONG TROGFIRE
|
||
.WORD PITOID,0FFFFH
|
||
.LONG TROGPIT
|
||
**** .WORD FLOWEROID,0FFFFH
|
||
**** .LONG TROGFLOWER
|
||
**** .WORD SHROOMOID,0FFFFH
|
||
**** .LONG TROGSHROOM
|
||
.WORD TUNNELOID,0FFFFH
|
||
.LONG TROGPIT
|
||
.WORD 0
|
||
.LONG DUMCRETS ;DO NOTHING
|
||
|
||
*
|
||
*WHIRLING DUST CLOUD INITIALIZATION TABLE
|
||
WHIRLINIT:
|
||
.LONG 0,0
|
||
.WORD 0,0
|
||
.LONG WHIRL1a,[40,0],DUMCOLL
|
||
.WORD DMAWNZ,JUNKOID
|
||
|
||
WHIRL_SCRIPT:
|
||
.LONG WHIRL3c
|
||
.WORD 6
|
||
.LONG WHIRL2c
|
||
.WORD 6
|
||
.LONG WHIRL1c
|
||
.WORD 6
|
||
.LONG WHIRL3b
|
||
.WORD 4
|
||
.LONG WHIRL2b
|
||
.WORD 4
|
||
.LONG WHIRL1b
|
||
.WORD 4
|
||
.LONG WHIRL3a
|
||
.WORD 4
|
||
.LONG WHIRL2a
|
||
.WORD 4
|
||
.LONG WHIRL1a
|
||
.WORD 4
|
||
.LONG 0
|
||
.LONG WHIRL3a
|
||
.WORD 3
|
||
.LONG WHIRL2a
|
||
.WORD 3
|
||
.LONG WHIRL1a
|
||
.WORD 3
|
||
.LONG WHIRL3a
|
||
.WORD 3
|
||
.LONG WHIRL2a
|
||
.WORD 3
|
||
.LONG WHIRL1a
|
||
.WORD 3
|
||
.LONG WHIRL3b
|
||
.WORD 3
|
||
.LONG WHIRL2b
|
||
.WORD 3
|
||
.LONG WHIRL1b
|
||
.WORD 3
|
||
.LONG WHIRL3c
|
||
.WORD 3
|
||
.LONG WHIRL2c
|
||
.WORD 3
|
||
.LONG WHIRL1c
|
||
.WORD 3
|
||
.LONG 0
|
||
|
||
|