4743 lines
130 KiB
NASM
4743 lines
130 KiB
NASM
.MLIB "TROGMACS.LIB"
|
||
.FILE 'TROGDINO.ASM'
|
||
.TITLE " <<< T R O G -- DINOSAUR ROUTINES >>>"
|
||
.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" ;GET THE AUDIT STUFF
|
||
.INCLUDE "TROGAEQU.ASM" ;GET THE ANIMATION EQUATES
|
||
.INCLUDE "TROGSEQU.ASM" ;GET OTHER EQUATES
|
||
|
||
.DEF DINO_START, DINOCOLL, DINO_TROG_OOF
|
||
.DEF FIND_OPEN_CPNT, VALIDHITX, VALIDHITY, WIN_SND
|
||
.DEF DINO_PNT_TST, DINOINIT_PNT_FIND, DINOLOAD, DINOTURN, NOTDIR
|
||
.DEF ANIMATE_DIR, DINOLOOK_TURN, BUMP, DINOLOOK
|
||
.DEF FIND_SAFEST, ANIMATE_TURN, DINOPUNCH, CK_PIT_CENT, DINO_VEL
|
||
.DEF DINO_FRANIM, BONE_BETWEEN, BUMPCK, DINO_TROG_CLUB
|
||
.DEF DINO_CENTER, DINOREV, LOAD_DIR, SEARCH_SAFE
|
||
.DEF DINO_ADD_VEL, CELEBRATE_MESS
|
||
.DEF FRANIMATE_DIR, GET_DINO_MPNT, NUM_WIN_MESSAGES
|
||
.DEF GET_DINO_CPNT, DINOMADXFER, DINO_SQUASH, DINO_SPROING
|
||
.DEF ALIGNTAB, START_INVINCIBILITY, DINOWXFER, WIN_MESSAGES
|
||
.DEF KILL_INVINCIBILITY, PLANT_STALL, CELEBRATEAMATE, COMPSNDTAB
|
||
.DEF IS_DINO_DEAD_A0, IS_DINO_DEAD_A8, MARK_DINO_DEAD
|
||
|
||
.REF REXINIT, ELVISINIT, BLOOPINIT, SPIKEINIT
|
||
.REF GETMOVE, GETCMOVE, SUBLIFE, PLAYER_DELETE, GAME_OVER, TOMOVE
|
||
.REF WAVEEGGS, SEND2SCR, GPLAYD, WAVE_END, FINDCMOVE
|
||
.REF BOUNDRY_CHECK, PNAME_TAB, COLOR_START, WIPE_FROM_MID, GPLAYNUM
|
||
.REF FINDMOVE, TWO_MOVES, DSRCH_CLR, GET_EXIT_ANI, FINDAMOVE
|
||
.REF STOP_WAITING, STOP_GREETING, STOP_SEARCH, START_BONE
|
||
.REF FIRE_UP_MONKEY_SHIT, PIT_CLOSE, TAROUT
|
||
.REF GAME_OVER_FLY, GETAMOVE, DINOSPEED, FIND_CLOSE_CPNT
|
||
.REF FIND_CLOSE_MPNT, ONE_MOVE, OUTLIVES, CLR_PDINOCNT
|
||
.REF FREE_MOVE_EGG, BUYINWIN, BUYNOW, CLIP_INTO, BONE_OBJ
|
||
.REF BONED_IN, CENTER_CHECK, GET_BEST_DIRECTION, HOUSE_PIT
|
||
.REF HOUSE_PITS, WAVE_PLAYERS, BORDER_MARQUEE
|
||
.REF TUNNEL, TUNNEL_UP, TARBUBBLE_SND, TIME_WARP
|
||
.REF WAIT_WAVE_END, SPARKLE, EGG_OBJ, ATSTRT, WIPEOUT
|
||
.REF CLR_DRONE, SPSTP0, APLAYDONE, BGND_TYPE, ISHOME
|
||
.REF DINOXFORM, TREX_KILL, TROG_BUMP, BSPIKEFALL
|
||
.REF BONE_OBLITERATE, SPIKEUP, REXGROWL_SND, GROWL_TAB
|
||
.REF DINO_FIND_CLOSEST, DINO_FIND_FURTHEST, FIND_CLOSE_EPNT
|
||
.REF TREX_STOMP, WHLFIRE_EXT, DTREX_LEAP, BTYPE_CK
|
||
.REF DANCE_STUFF, BUYWIN_Z, PARTY_STUFF, FIREWERK, DINO_RING
|
||
.REF DINOFLY_ANIM, DINOCHEER_ANIM, SEE_STARS, FREEZE_EM
|
||
.REF DINOS_NEAR_PNT, DINO_LOOK_HOME, SPIT_FIRE, ENEMIES_NEAR_PNT
|
||
.REF BONUS_WAVE, SKYDOWN, PUNCHED, START_SCORE, PUNCH_SND
|
||
.REF TROGHEAD_SND, TROGCLUB_SND, BINBCD, POWERUP_DURATION
|
||
.REF ANIMATE_BUTTON, SLEEP_START, ALLOW_CONTINUE, BONED_IN_GREY
|
||
|
||
.IF PRINTER
|
||
.REF PGAMEWAVE
|
||
.ENDIF
|
||
|
||
*
|
||
*TENSION CONSTANTS
|
||
TENSION_PUNCH .EQU 10 ;AMOUNT OF TENSION FOR ONE PUNCH
|
||
TENSION_BUMP .EQU 7 ;AMOUNT OF TENSION FOR ONE BUMP
|
||
TENSION_REV .EQU 5 ;AMOUNT OF TENSION FOR ONE REVERSE
|
||
TENSION_WAIT .EQU 5 ;AMOUNT OF TENSION FOR ONE WAITING
|
||
PUNCH_LEVEL .EQU 1*TENSION_BUMP ;TENSION LEVEL AT WHICH THE DINO WILL PUNCH
|
||
*
|
||
*FRUSTRATION CONSTANTS
|
||
***FRUST_WALK .EQU 1 ;AMOUNT TO RELEASE WHILE WALKING
|
||
FRUST_TURN .EQU 3 ;AMOUNT TO ADD PER TURN
|
||
FRUST_WONDER .EQU 9 ;DINO HAS A QUESTION IN HIS MIND
|
||
FRUST_MAD1 .EQU 14 ;DINO IS PISSED
|
||
FRUST_MAD2 .EQU 23 ;DINO IS MORE PISSED
|
||
FRUST_MAD3 .EQU 29 ;DINO IS REALLY PISSED
|
||
|
||
DWAIT_TIME .EQU 120 ;NUMBER OF TICKS A DINO WILL STAY STOPPED
|
||
HITS_TO_KO .EQU 5 ;NUMBER OF HITS REQUIRED TO KNOCKOUT DINO
|
||
.TEXT
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINO_START - START THE PLAYERS DINOSAUR(S) FOR THIS WAVE *
|
||
* A2 = PTR TO PLAYER DATA *
|
||
* *
|
||
**************************************************************************
|
||
DINO_START
|
||
MMTM SP,A0,A1,A3,A4,A7,A8,A9,A10,A11
|
||
MOVE *A2(PDINO),A3,L ;GET TABLE FOR THIS DINO
|
||
MOVE *A3+,A8,L ;GET ANIMATIONS
|
||
MOVE *A3+,A9,L ;GET INITIALIZATION TABLE
|
||
CMPI P2DATA,A2 ;IS THIS BLOOP?
|
||
JRNE DS_NORM ;BR = NO
|
||
MOVE @NPLAYERS,A7,W
|
||
CMPI 1,A7 ;ARE WE A TWO PLAYER ONLY?
|
||
JRNE DS_NORM ;BR = NO
|
||
MOVE @P4DATA+PDINO,A3,L ;USE GWENS SPOT IN THIS CASE
|
||
ADDI 64,A3 ;SKIP USELESS GARBAGE
|
||
DS_NORM
|
||
MOVE *A3+,A10,L
|
||
MOVE *A3+,A11,L
|
||
CREATE DINOPID,DINOWALK
|
||
JRZ DINO_SX ;NO MORE PROCESS SPACE
|
||
MOVE A2,*A0(DPLAYER),L ;PASS THE POINTER TO THE PLAYER
|
||
DINO_SX
|
||
MMFM SP,A0,A1,A3,A4,A7,A8,A9,A10,A11
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINOWALK - WALK THE DINOSAUR PROCESS *
|
||
* A8 = ANIMATION FOR THIS DINOSAUR *
|
||
* A9 = DINOSAUR INITIALIZATION TABLE *
|
||
* A10 = [Y,X] STARTING COORDINATE OF DINOSAUR *
|
||
* A11 = DIRECTION TO START WALKING (0 = UP, 1 = DN, 2 = LF, 3 = RT) *
|
||
* *A13(DPLAYER),L = PTR TO PLAYER CONTROLLING THIS DINOSAUR *
|
||
* *
|
||
**************************************************************************
|
||
DINOWALK
|
||
MOVE *A13(DPLAYER),A2,L ;GRAB THIS BEFORE WIPING AREA
|
||
CALLA CLRPDATA ;CLEAR OUR DATA AREA
|
||
MOVB *A2(PDRONEFLG),*A13(DDRONE) ;SET DRONE FLAG IF APPLICABLE
|
||
MOVE A2,*A13(DPLAYER),L ;RESTORE PLAYER POINTER
|
||
MOVE A8,*A13(DATABLE),L ;STORE ANIMATION TABLE
|
||
MOVE A9,*A13(DINITTAB),L ;STORE INITIALIZATION TABLE
|
||
MOVI SPIKEUP,A1
|
||
MOVE A1,*A13(DWALKFRM),L ;INITIALIZE THE WALKING FRAME
|
||
MOVE @DINOSPEED,A1,W ;GET THIS WAVES INITIAL VELOCITY
|
||
MOVE A1,*A13(DSPEED),W ;KEEP THE INITIAL SPEED
|
||
MOVK 1,A0
|
||
MOVB A0,*A13(DDIZZYFLG) ;MAKE HIM SAFE FROM DANGER RIGHT NOW
|
||
MOVE *A2(PDTHPOS),A0,L ;GET THE LAST DINOSAUR DEATH POSITION
|
||
JRZ DINO_WAVE_1ST ;BR = HASN'T STARTED YET
|
||
MOVE A0,*A13(DINITPOS),L
|
||
JRUC DINOWALK_1ST
|
||
DINO_WAVE_1ST
|
||
MOVE A10,*A13(DINITPOS),L ;STORE THE POSITION
|
||
MOVE A11,*A13(DINITDIR),W ;STORE INITIAL DIRECTION
|
||
MOVK 1,A0
|
||
MOVE A0,*A13(PTEMP1),W ;USE THIS AS A FLAG FOR FIRST START
|
||
JRUC DINOWALK_1ST ;ENTER HERE FOR FIRST TIME
|
||
*TRANSFER HERE AFTER DINOSAUR DEATH
|
||
*ABOVE VARIABLES MUST BE CORRECT
|
||
*ONLY RETURN HERE AFTER THE OLD DINO HAS BEEN DELETED
|
||
* *A13(DINITPOS),L = RE-START POSITION [Y,X] CENTER POINT OF INITIAL FRAME
|
||
* *A13(DINITDIR),W = RE-START DIRECTION
|
||
*REMBER TO RE-INITIALIZE THE Z POSITION AFTER A DEATH.
|
||
DINODEATH_XFER
|
||
CLR A0
|
||
MOVB A0,*A13(DPUNCHFLG) ;CLEAR FLAGS
|
||
MOVB A0,*A13(DVNFLAG) ;RETURN TO NORMAL SPEED
|
||
MOVB A0,*A13(DINVIN) ;TURN OFF HIS INVINCIBILITY
|
||
MOVB A0,*A13(DFIREFLG) ;HE CAN NO LONGER FIRE BULLETS
|
||
MOVE A0,*A13(PTEMP1),W ;FLAG SAFE SEARCH
|
||
MOVE A0,*A13(DSPEED2),W ;TURN OFF SPEED INCREASE
|
||
MOVB A0,*A13(THITS) ;CLEAR HIS HIT COUNT
|
||
MOVB A0,*A13(DWAIT) ;WAIT TIMER
|
||
**** MOVK 1,A0
|
||
MOVK 2,A0
|
||
MOVB A0,*A13(DDIZZYFLG) ;MAKE HIM SAFE FROM DANGER RIGHT NOW
|
||
*ENTER HERE THE FIRST TIME A DINO IS STARTED DURING A WAVE
|
||
DINOWALK_1ST
|
||
MOVI ISAVES,A0
|
||
MOVE A0,*A13(DSAVES),W ;SAVE COUNT
|
||
MOVE *A13(DPLAYER),A2,L
|
||
|
||
MOVB *A13(DDRONE),A0 ;IS THIS A DRONE DINO?
|
||
JRZ DINOWALK_PLAYER ;BR = NO
|
||
MOVB *A13(DDRONEDEL),A0 ;IS IT TIME TO DELETE THIS DRONE?
|
||
JRNZ DINOWX ;BR = YES
|
||
JRUC DINOWALK_ALWAYS
|
||
|
||
DINOWALK_PLAYER
|
||
MOVE *A2(PDINOCNT),A0,W
|
||
MOVE *A2(PLIVES),A1,W
|
||
CMP A0,A1
|
||
JRLE DINOWX ;DON'T START ME FOR I AM TOO MANY
|
||
|
||
DINOWALK_ALWAYS
|
||
MOVE *A2(POBJ),A8,L ;RESTORE THE DINO OBJECT
|
||
JRZ DINOWX ;THERE ISN'T ONE?
|
||
|
||
MOVE A13,*A8(OPLINK),L ;LINK THE PROC TO THE OBJ
|
||
|
||
INCM *A2(PDINOCNT),W ;TALLY UP ANOTHER DINOSAUR
|
||
|
||
MOVE *A13(DSPEED),A1,W ;GET THE CORRECT VELOCITY
|
||
ZEXT A1
|
||
SLL 4,A1
|
||
CALLR DINO_VEL ;SETUP THE INITIAL VELOCITY
|
||
|
||
MOVE *A13(DATABLE),A10,L ;RELOAD THE ANIMATION TABLE
|
||
|
||
MOVE *A13(DINITPOS),A3,L ;APPEAR HERE
|
||
**** CALLR DINO_PNT_TST ;IS THIS SPOT COOL?
|
||
**** JRZ DINOINIT_OKP ;BR = YEAH, NO PROBLEM
|
||
|
||
**** SLEEP 5 ;DINO WILL SEARCH HERE FOR A SPOT
|
||
**** 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
|
||
**** CALLR DINOINIT_PNT_FIND ;FIND A FREE POINT
|
||
**** CALLA DSRCH_CLR ;CLEAR THE SEARCH MARKS
|
||
**** MOVE *A13(DPLAYER),A2,L
|
||
|
||
DINOINIT_OKP
|
||
MOVE *A2(PCONSECUTIVE),A5,W ;WE'LL NEED THIS A FEW TIMES
|
||
|
||
MOVE A3,A1
|
||
MOVE A3,*A13(DINITPOS),L ;STORE AWAY FOR SAFE KEEPING
|
||
CALLR DINO_NEW_PNT ;CENTER THE DINOSAUR ON THIS NEW PNT.
|
||
|
||
CALLA FIND_CLOSE_MPNT ;GET ADDRESS IN CASE IT'S NEW
|
||
MOVE A0,A1
|
||
MOVE A1,*A13(PTEMP3),L
|
||
|
||
**** MOVE @STOP_WAITING,A0,W
|
||
**** CMP A0,A5 ;NO MORE WAITING?
|
||
**** JRHS DINOINIT_NOSRCH ;BR = NO
|
||
|
||
**** CALLR FIND_SAFEST ;SEE IF THE SAFEST DIRECTION IS DEATH
|
||
|
||
**** MOVE A4,A4 ;ARE WE FACING DEATH?
|
||
**** JREQ DINOINIT_NOSRCH ;BR = NO
|
||
|
||
**** CMPI 1,A3 ;ARE WE REAL CLOSE TO IT?
|
||
**** JRHI DINOINIT_NOSRCH ;BR = NO
|
||
|
||
**** MOVK 2,A0
|
||
**** MOVE A0,*A13(PTEMP2),W ;FLAG SCRATCH ANIMATION
|
||
**** MOVK DOWN,A0
|
||
**** MOVE A0,*A13(DDIR),W ;FACE DOWN
|
||
**** MOVI WONDER,A0 ;LET'S SCRATCH OUR HEADS
|
||
**** JRUC DINOINIT_LOAD
|
||
|
||
****DINOINIT_NOSRCH
|
||
CLR A0
|
||
MOVE A0,*A13(PTEMP2),W ;CLR FLAG FOR ANIMATION
|
||
|
||
**** MOVE *A13(DDRONE),A0,W ;IS THIS A DRONE?
|
||
**** JRNE DINOINIT_DRONE ;BR = YES, THEN WE WILL NOT WAVE
|
||
**** MOVE @BONUS_WAVE,A0,W ;IS THIS A BONUS WAVE?
|
||
**** JRNZ DINOINIT_DRONE ;BR = YES, NO WAVING
|
||
**** MOVE @STOP_GREETING,A0
|
||
**** CMP A0,A5 ;SHOULD WE WAVE AT THE PLAYER?
|
||
**** JRLO DINOINIT_WAVE ;BR = YES
|
||
****
|
||
****DINOINIT_DRONE
|
||
MOVE *A13(DINITDIR),A11,W ;GET INIT DIRECTION
|
||
MOVE A11,*A13(DDIR),W ;STORE IT FOR USE
|
||
MOVI STANDU,A0 ;LET'S LOAD THE STANDING FRAME
|
||
ADD A11,A0 ;OFFSET FOR THE CORRECT DIRECTION
|
||
**** JRUC DINOINIT_LOAD
|
||
|
||
****DINOINIT_WAVE
|
||
**** MOVK 1,A0
|
||
**** MOVE A0,*A13(PTEMP2),W
|
||
**** MOVK DOWN,A0
|
||
**** MOVE A0,*A13(DDIR),W ;FACE DOWN FOR HAND WAVE
|
||
**** MOVI INTRODUCE,A0 ;WAVE AT THE PLAYER
|
||
****
|
||
****DINOINIT_LOAD
|
||
CALLR DINOLOAD
|
||
MOVK 4,A1
|
||
JSRP FRANIM ;LOAD THE NEW FRAME
|
||
MOVE A0,A6 ;STORE SLEEP TIME HERE
|
||
|
||
MOVI DINOS,A1
|
||
CALLA INSERT_SUPP ;INSERT THIS 'TING
|
||
CALLA OBJ_ON ;AND TURN IT ON
|
||
CALLR MARK_DINO_LIVE ;MAKE SURE HE LOOKS ALIVE
|
||
|
||
MOVE *A13(DPLAYER),A2,L
|
||
CALLA OUTLIVES ;UPDATE THE PLAYER LIFE DISPLAY
|
||
|
||
MOVE @GAME_STATE,A0,W
|
||
CMPI INPLAY,A0 ;ARE WE IN PLAY MODE
|
||
JREQ DINOPLAY ;YES, JUST CONTINUE NORMALLY
|
||
CMPI INAMODE,A0 ; ALLOW AMODE WALKING
|
||
JREQ DINOPLAY
|
||
|
||
MOVE *A2(PEGGS),A0
|
||
MOVE @WAVEEGGS,A1,W ;CHECK THE EGG COUNT
|
||
CMP A1,A0 ;ENOUGH EGGS TO FINISH?
|
||
JRHS DINOMADXFER ;BR = YES
|
||
JRUC DINOQUESXFER ;OTHERWISE JUST WONDER WHY.
|
||
|
||
*POSITION DINO TO PLAY
|
||
DINOPLAY
|
||
MOVE A10,A0
|
||
MOVI 500,A10
|
||
CALLR START_INVINCIBILITY ;THROW A RING OUT THERE.
|
||
MOVE A0,A10
|
||
|
||
MOVE *A13(PTEMP2),A0,W ;INITIAL ANIMATION?
|
||
JRZ DINO_SKIPANIM ;BR = NO
|
||
|
||
**** CMPI 2,A0 ;WAITING BEFORE DEATH?
|
||
**** JREQ DINO_SCRATCH ;YES'M
|
||
|
||
SLEEPR A6 ;SLEEP THE CORRECT TIME
|
||
MOVK 1,A1
|
||
JSRP FRANIM
|
||
|
||
DINO_SKIPANIM
|
||
MOVE *A13(PTEMP1),A0,W ;FIRST START THIS WAVE?
|
||
JRNZ DINO_START_MOVING ;BR = YES
|
||
MOVE *A13(DPLAYER),A2,L
|
||
MOVE *A2(PINSTRUCT),A0,W ;IS HE IN INSTRUCTION MODE?
|
||
JRNZ DINO_START_MOVING ;BR = YES, THEN DON'T SEARCH NEW
|
||
|
||
CALLA DINO_FIND_CLOSEST ;GET THE CLOSEST EGG OR HOUSE
|
||
JRZ DINO_START_SAFE ;BR = NONE EXIST
|
||
MOVE A1,A4
|
||
MOVE *A13(PTEMP3),A0,L
|
||
CALLA GET_BEST_DIRECTION ;FIND THE WAY TO THE EGG OR HOUSE
|
||
JRZ DINO_START_SAFE ;BR = CAN'T GO THAT WAY
|
||
MOVE A1,A11
|
||
JRUC DINO_START_MOVING
|
||
|
||
DINO_START_SAFE
|
||
MOVE *A13(PTEMP3),A1,L
|
||
CALLR DINO_FIND_BEST ;FIND US THE BEST MOVE FROM HERE
|
||
MOVE A2,*A13(DINITDIR),W ;NEW INITIAL DIRECTION
|
||
MOVE A2,A11
|
||
|
||
*TURN DINO TO INITIAL DIRECTION AND START MOVING
|
||
DINO_START_MOVING
|
||
SLEEP 5
|
||
CALLR DINO_HALTED ;IS THIS GUY HALTED
|
||
JRNZ DINO_START_MOVING ;BR = NO, WAIT FOR FLAG TO RELEASE
|
||
JSRP DINOTURN
|
||
SLEEP 35 ;SLEEP LONGER FOR LEARNERS
|
||
JRUC DINO_END_INIT
|
||
|
||
*
|
||
*END OF DINOSAUR INITIALIZATION
|
||
DINO_END_INIT
|
||
CALLA DINO_FIND_FURTHEST ;GET THE FURTHEST EGG
|
||
MOVE A1,*A13(DFURTHEST),L ;STORE FOR LATER USE
|
||
MOVE @TUNNEL,A0,W
|
||
JRZ DINO_END_NO_TUNNEL
|
||
MOVE @TUNNEL_UP,A0,W
|
||
JRNZ DINO_END_NO_TUNNEL
|
||
MOVE *A13(DPLAYER),A2,L
|
||
MOVE *A2(PEGGS),A0,W
|
||
JRNZ DINO_END_NO_TUNNEL
|
||
MOVE *A2(PWAVEDEATHS),A0,W
|
||
JRNZ DINO_END_NO_TUNNEL
|
||
MOVE A1,A9
|
||
MOVE A2,A11
|
||
CREATE INDPID,SPARKLE
|
||
DINO_END_NO_TUNNEL
|
||
SLEEP 20
|
||
CALLR KILL_INVINCIBILITY
|
||
|
||
MOVE @BONUS_WAVE,A0,W
|
||
CMPI BONUSW_1,A0 ;IS THIS THE TREX WAVE?
|
||
JRNE DWX_1 ;BR = NO
|
||
MOVE *A13(DPLAYER),A2,L
|
||
MOVE *A2(PPID),A1,W
|
||
ORI PTREXPID,A1 ;FORM PROCID UNIQUE TO THIS PLAYER
|
||
MOVI DINOXFORM,A7
|
||
CALLA GETPRC ;AND CREATE THE TREX PROCESS
|
||
JRUC DINOWXFER
|
||
DWX_1
|
||
CMPI BONUSW_2,A0
|
||
JRNE DWX_2
|
||
JRUC DINOWXFER
|
||
DWX_2
|
||
CMPI BONUSW_3,A0 ;IS THIS THE BARBEQUE?
|
||
JRNE DWX_3 ;BR = NO
|
||
MOVE *A13(DPLAYER),A2,L
|
||
MOVE *A2(PPID),A1,W
|
||
MOVE A13,A10
|
||
ORI PFIREPID,A1
|
||
MOVI SPIT_FIRE,A7
|
||
CALLA GETPRC ;CREATE THE FIRE SPIT PROCESS
|
||
MOVI 1500,A10
|
||
CALLR START_INVINCIBILITY
|
||
JRUC DINOWXFER
|
||
DWX_3
|
||
|
||
*DO THIS FOR NON-BONUS WAVE SHIT
|
||
MOVI 200,A10
|
||
CALLR START_INVINCIBILITY
|
||
|
||
*
|
||
*PROCESS TRANSFER POINT FOR DINOSAUR WALKING PROCESS
|
||
* A8 = PTR TO DINOSAUR OBJECT
|
||
* *A13(DATABLE),L = PTR TO DINOSAUR ANIMATION TABLE
|
||
* *A13(DDIR),W = CURRENT DINOSAUR DIRECTION
|
||
* *A13(DPLAYER),L = DATA AREA OF PLAYER CONTROLLING THIS GUY
|
||
*NOTE: PROCESS STACK IS RESET IMMEADIATELY, NO STACK PASSING HERE PLEASE
|
||
DINOWXFER
|
||
MOVE A13,A12
|
||
ADDI PRCSIZ,A12 ;RESET PROCESS STACK POINTER
|
||
|
||
ANDNIM M_NOCOLL,*A8(OFLAGS),W ;MAKE SURE COLLISIONS ARE ON
|
||
|
||
CLR A0
|
||
MOVB A0,*A13(DPUNCHFLG) ;CLEAR FLAGS
|
||
MOVB A0,*A13(DDIZZYFLG)
|
||
|
||
MOVE *A13(DDIR),A11,W ;GET THE NEW DIRECTION
|
||
|
||
CALLR DINO_STICK
|
||
JRC DWX_DOIT
|
||
JRZ DWX_DOIT
|
||
MOVE A6,A11
|
||
MOVE A11,*A13(DDIR),W
|
||
DWX_DOIT
|
||
MOVE *A13(DATABLE),A10,L ;RESTORE THE ANIMATION TABLE
|
||
CALLR DINO_WALK_LOAD
|
||
|
||
MOVB *A13(DTREXFLG),A0 ;IS THIS GUY A TYRANNO
|
||
JREQ DINOWX_SIF ;BR = NO
|
||
|
||
MOVI 500,A0
|
||
CALLA RANDPER ;SHOULD WE GROWL?
|
||
JRNC DINOWX_SIF ;BR = NO
|
||
|
||
MOVE A11,A0
|
||
SLL 5,A0
|
||
ADDI GROWL_TAB,A0
|
||
MOVE *A0,A9,L ;STICK IN OUR OLD FRIEND
|
||
MOVE A9,*A13(DWALKFRM),L ;STORE THIS AS THE CURRENT WALK FRAME
|
||
|
||
DINOWX_SIF
|
||
CALLR DINO_NEW_MOVE ;SET THE DINO ON THE NEW MOVE
|
||
JRC DINOWXFER_END ;BR = IT WAS AND AUXILLARY MOVE
|
||
CALLA BONED_IN ;LOOK FOR ADJACENT BONES
|
||
SRL 16,A4 ;CHECK TO SEE IF THERE IS A BONE AHEAD
|
||
BTST A11,A4
|
||
JREQ DINOWXFER_END ;BR = NOPE
|
||
MOVE A11,A1 ;LET'S FIND THE BONE
|
||
CALLA ONE_MOVE ;GOT TO BE THIS WAY
|
||
JRZ DINOWXFER_END
|
||
MOVE A1,A0
|
||
CALLA BONE_OBJ ;GET THE BONE OBJECT
|
||
JRZ DINOWXFER_END ;NONE FOUND
|
||
MOVE A1,A9
|
||
JRUC DINODEFL ;ACT LIKE YOU RAN INTO IT
|
||
DINOWXFER_END
|
||
SLEEP 3 ;COLLISION PAUSE
|
||
*
|
||
*A9 = PTR TO CORRECT WALKING ANIMATION
|
||
*
|
||
DINOWLP
|
||
MOVE *A13(DDIR),A11,W
|
||
MOVE A9,*A13(DWALKFRM),L ;STORE THIS AS THE CURRENT WALK FRAME
|
||
CALLR DINO_HALTED
|
||
JRZ DINOWLP_MOVE
|
||
*HALTED FOR SOFTWARE REASONS
|
||
CALLA PSTOP ;STOP HIM NOW!
|
||
MOVK 1,A0
|
||
MOVB A0,*A13(DDIZZYFLG) ;DON'T LET PEOPLE FUCK WITH HIM
|
||
DINOWLP_WAIT
|
||
SLEEP 5
|
||
ANDNIM M_NOCOLL,*A8(OFLAGS),W
|
||
CALLR DINO_HALTED
|
||
JRNZ DINOWLP_WAIT
|
||
CLR A0
|
||
MOVB A0,*A13(DDIZZYFLG)
|
||
JRUC DINO_SAVE_WALK
|
||
DINOWLP_MOVE
|
||
CALLA STOPPED ;IS THE DINO CURRENTLY STOPPED
|
||
JRNZ DINOWLP_WALK ;BR = NO, HE'S WALKING
|
||
MOVB *A13(DWAIT),A1
|
||
INC A1
|
||
CMPI DWAIT_TIME,A1 ;HAS HE BEEN STOPPED TOO LONG?
|
||
JRLS DINOWLP_STOPPED ;BR = NO, WAIT SOME MORE
|
||
MOVE *A13(TCURMPOS),A3,L
|
||
CALLA FINDAMOVE ;ARE WE ON AN AUXILLARY MOVE?
|
||
JRNC DINOWLP_NOREV ;BR = NO, THEN DO NOTHING (HU HU HU)
|
||
CALLR NOTDIR
|
||
JSRP DINOTURN ;REVERSE DINO, NO FREEBIES
|
||
CALLR DINO_WALK_LOAD
|
||
JRUC DINOWLP_WALK ;START TO WALKIN'
|
||
DINOWLP_NOREV
|
||
CLR A1 ;RESET WAIT TIMER
|
||
DINOWLP_STOPPED
|
||
MOVB A1,*A13(DWAIT)
|
||
SLEEP 1
|
||
JRUC DINOWLP_CHECK
|
||
|
||
DINOWLP_WALK
|
||
CLR A1
|
||
MOVB A1,*A13(DWAIT) ;RESET THE WAIT TIMER
|
||
MOVK 4,A1
|
||
JSRP DINO_FRANIM ;NEXT FRAME PLEASE
|
||
MOVE A9,*A13(DWALKFRM),L ;STORE THIS AS THE CURRENT WALK FRAME
|
||
MOVE A0,*A13(PTEMP1),W
|
||
DINOWLP_SLEEP
|
||
SLEEP 1
|
||
MOVE *A13(PTEMP1),A0,W
|
||
DEC A0
|
||
JRZ DINOWLP_CHECK
|
||
MOVE A0,*A13(PTEMP1),W
|
||
CALLR DINO_STICK
|
||
JRC DINOWLP_SLEEP
|
||
JRZ DINOWLP_SLEEP
|
||
JRUC DINO_NEW_DIRECTION
|
||
|
||
DINOWLP_CHECK
|
||
ANDNIM M_NOCOLL,*A8(OFLAGS),W ;MAKE SURE COLLISIONS ARE ON
|
||
MOVE A11,A1 ;AND PUT IT IN THE CORRECT PLACE
|
||
CALLR DINO_VEL_NORMAL ;RETURN DINO VELOCITY TO NORMAL
|
||
CALLA BOUNDRY_CHECK ;IS THE DINO STILL ON THE ISLAND
|
||
JRNE DINO_OUT_OF_BOUNDS ;BR = DINO IS DEAD
|
||
|
||
CALLR DINO_STICK
|
||
JRNC DINO_NEW_STICK
|
||
JRNZ DINO_NEXT_MOVE
|
||
JRUC DINOWLP
|
||
DINO_NEW_STICK
|
||
JRZ DINOW_SAME_DIR
|
||
*A0 = PTR TO CURRENT MOVE HERE
|
||
DINO_NEW_DIRECTION
|
||
MOVE A6,A11
|
||
JSRP DINOTURN
|
||
CALLR DINO_WALK_LOAD
|
||
JRUC DINOWLP ;START IN THE NEW DIRECTION
|
||
|
||
DINOW_SAME_DIR
|
||
MOVE *A13(TCURMPOS),A2,L ;GET THE CURRENT CENTER POINT
|
||
CMP A2,A3 ;SAME MOVE AS LAST TIME?
|
||
JREQ DINOWLP ;BR = YES, THEN KEEP ON TRUCKIN'
|
||
|
||
DINO_NEXT_MOVE
|
||
MOVI [4,4],A2 ;DINO MUST BE WITHIN THIS RANGE
|
||
CALLA PNT_IN_RANGE ;IS HE?
|
||
JRNC DINOWLP ;BR = NO
|
||
|
||
MOVE A3,*A13(TCURMPOS),L ;STORE THIS NEW [Y,X] OF THE MOVE PNT
|
||
|
||
MOVE *A0(MOVECPTR),A5,L
|
||
JRN DINO_CHECK_APNT
|
||
|
||
CLRB *A13(THITS) ;SO CLEAR HIS HIT COUNT
|
||
|
||
CALLA EGG_OBJ
|
||
MOVE A6,A6
|
||
JRN DINO_SAFETY
|
||
CMP A6,A11
|
||
JREQ DINO_SAFETY
|
||
CALLR DINO_CENTER
|
||
JRUC DINO_NEW_DIRECTION
|
||
|
||
DINO_CHECK_APNT
|
||
MOVE *A0(MOVEAPTR),A5,L
|
||
JRN DINO_SAFETY
|
||
CALLA EGG_OBJ ;CHECK FOR AN EGG
|
||
|
||
DINO_SAFETY
|
||
MOVE *A13(DPLAYER),A2,L ;GET CONTROLLING PLAYER
|
||
JRZ DINO_SAFETY_LOCAL ;BR = NONE
|
||
|
||
MOVE A0,A6
|
||
MOVI HOUSELST,A1
|
||
MOVI HOUSEOID|PXPLAYER,A0
|
||
CALLA ISSUPPID ;LOOK FOR GLOBAL HOUSE FIRST
|
||
MOVE A6,A0
|
||
MOVE A1,A1 ;DOES ONE EXIST?
|
||
JRNZ DS_LH ;BR = YES, DO THE STRAIGHT AWAY CK
|
||
|
||
MOVE *A2(PEXITPNT),A6,L ;GET THIS PLAYERS EXIT POINT
|
||
JRZ DINO_SAFETY_LOCAL ;BR = HE DOESN'T HAVE ONE (BOO HOO)
|
||
|
||
MOVE *A6(EMOVEOBJ),A6,L ;IS HIS HOUSE THERE YET?
|
||
JRZ DINO_SAFETY_LOCAL ;BR = NO
|
||
DS_LH
|
||
MOVE A11,A1
|
||
CALLA DINO_LOOK_HOME ;IS HOME STRAIGHT AHEAD?
|
||
JRZ DINO_SAFETY_LOCAL ;BR = NO
|
||
JRUC DINOWLP ;FUCK SAFETY, I'M GOING HOME
|
||
|
||
DINO_SAFETY_LOCAL
|
||
*
|
||
*DO SAFETY CHECK HERE FOR THE BOZO OR THE SMARTER DINO
|
||
*
|
||
MOVE *A0(MOVEEPTR),A4,L ;IS THIS A DEATH SPOT?
|
||
JRN DINO_NOT_NEAR_EXIT ;BR = NO
|
||
|
||
MOVB *A4(EMOVEDIR),A5 ;GET THE DIRECTION OF THE EXIT
|
||
CMP A11,A5 ;IS HE WALKING THAT WAY?
|
||
JRNE DINO_NOT_NEAR_EXIT ;BR = NO
|
||
|
||
*
|
||
*A0 = CURRENT MOVE PTR.
|
||
DINO_NEAR_EXIT
|
||
MOVB *A13(DSMART),A6
|
||
JRNZ DINO_SAVE_FROM_DEATH
|
||
|
||
MOVE *A13(DPLAYER),A2,L
|
||
JRZ DINO_SAVE_FROM_DEATH
|
||
|
||
MOVB *A13(DINVIN),A6
|
||
JRZ DINOWLP
|
||
**** JRNZ DINO_SAVE_FROM_DEATH
|
||
|
||
**** MOVE *A2(PBOZO),A6,W
|
||
**** CMPI 3,A6 ;BOZO ENOUGH TO SAVE
|
||
**** JRLO DINOWLP ;BR = NO
|
||
**** DECM *A13(DSAVES),W ;MORE SAVES ALLOWED?
|
||
**** JRLT DINOWLP ;BR = NO
|
||
|
||
DINO_SAVE_FROM_DEATH
|
||
**** MOVI STANDU,A0
|
||
**** JSRP ANIMATE_DIR ;STAND
|
||
**** JRUC DINOWLP ;AND WAIT THERE
|
||
|
||
MOVE *A13(DATABLE),A10,L ;FIRST WE NEED THE ANIMATION TABLE
|
||
MOVE *A13(DDIR),A0,W ;AND THEN WE NEED THE DIRECTION
|
||
ADDK STANDU,A0
|
||
CALLR DINOLOAD
|
||
MOVK 4,A1
|
||
JSRP FRANIM
|
||
JRUC DINOWLP
|
||
|
||
**** SLEEP 10 ;PAUSE
|
||
**** CALLR NOTDIR
|
||
**** JSRP DINOTURN ;ABOUTFACE
|
||
|
||
*WATCH OUT! MANY DIVERSE DUDES MAY JUMP TO THIS SPOT.
|
||
*A8 = OBJECT
|
||
*A10 = DATABLE
|
||
*A11 = DDIR
|
||
DINO_SAVE_WALK
|
||
CALLR DINO_WALK_LOAD
|
||
JRUC DINOWLP ;START TO WALKIN'
|
||
|
||
DINO_NOT_NEAR_EXIT
|
||
MOVE A11,A1
|
||
CALLA ONE_MOVE ;GET ADJACENT MOVE
|
||
JRZ DINO_NEAR_EXIT ;BR = MUST BE NEAR AN EDGE?
|
||
|
||
MOVE *A0(MOVECPTR),A5,L ;IS CURRENT MOVE A CENTER POINT?
|
||
JRNN DINO_CK_LOOK ;BR = YES, JUST TRY TO LOOK
|
||
|
||
MOVE *A1(MOVECPTR),A4,L ;IS ADJACENT MOVE A CENTER?
|
||
JRN DINO_CK_LOOK ;BR = NO HANDLE NORMAL SCAN
|
||
MOVE A0,A6
|
||
MOVE A4,A0
|
||
CALLA CENTER_CHECK
|
||
JRZ DINO_NOT_NEAR_DANGER ;OK TO CONTINUE IN THIS DIRECTION
|
||
|
||
MOVB *A13(DTREXFLG),A0 ;ARE WE DEALING WITH THE BIG GUY?
|
||
JRNE DTREX_CK_DANGER
|
||
MOVB *A13(DINVIN),A0 ;IS HE INVINCIBLE?
|
||
JRNE DINO_NOT_NEAR_DANGER ;BR = NOTHING CAN HURT HIM
|
||
JRUC DINO_LITTLE
|
||
|
||
DTREX_CK_DANGER
|
||
MOVB *A4(CMOVEEGG),A0
|
||
CMPI FIREID,A0 ;IS THE FIRE A BURNIN'
|
||
JREQ DINOWLP ;BR = YES, THEN STOMP IT OUT
|
||
|
||
MOVE *A4(CMOVEMPTR),A0,L
|
||
MOVE A1,A4
|
||
MOVE A0,A1
|
||
MOVE *A13(DDIR),A0,W
|
||
CALLA TWO_MOVES ;GO TWO MOVES AHEAD
|
||
JRZ DTREX_EDGED ;BR = NOTHING THERE, JUST DO NORMAL
|
||
|
||
MOVE *A1(MOVECPTR),A0,L
|
||
JRNN DTREX_CK_LAND
|
||
MOVE A1,A0
|
||
JAUC DTREX_LEAP
|
||
|
||
DTREX_CK_LAND
|
||
MOVB *A0(CMOVEEGG),A1
|
||
CMPI FIREID,A1
|
||
JAEQ DTREX_LEAP
|
||
|
||
CALLA CENTER_CHECK
|
||
JAZ DTREX_LEAP ;MAKE THE LONG JUMP
|
||
|
||
DTREX_EDGED
|
||
MOVE A4,A1
|
||
DINO_LITTLE
|
||
MOVE A6,A0
|
||
JRUC DINO_NEAR_EXIT ;SAVE ME FROM DEATH PLEASE
|
||
|
||
DINO_NOT_NEAR_DANGER
|
||
MOVE A6,A0
|
||
*
|
||
*A0 = CURRENT MOVE PTR
|
||
*A1 = ADJACENT MOVE IN THE CURRENT DIRECTION
|
||
*A5 = *A0(MOVECPTR),L
|
||
*
|
||
DINO_CK_LOOK
|
||
MOVB *A13(DSMART),A6 ;IS HE A SMARTIE PANTS?
|
||
JREQ DINOWLP ;BR = NO
|
||
|
||
MOVE A5,A5 ;EEZ ZEES A ZENTER POYANT?
|
||
JRN DINOWLP ;BR = NO
|
||
|
||
PUSHP A0
|
||
CLR A1
|
||
JSRP DINO_FRANIM ;TAKE ONE MORE STEP
|
||
PULLP A0
|
||
|
||
CALLA DINO_FIND_CLOSEST ;GET THE CLOSEST EGG OR HOUSE
|
||
MOVE A1,A4
|
||
|
||
CALLA GET_BEST_DIRECTION ;FIND THE WAY TO THE EGG OR HOUSE
|
||
JRZ DINOWLP ;BR = CAN'T GO THAT WAY
|
||
CMP A1,A11 ;IS THE BEST, THE SAME?
|
||
JREQ DINOWLP ;YES, JUST WALK
|
||
|
||
CALLR DINO_CENTER ;CENTER THIS GUY
|
||
MOVE A1,A11
|
||
JSRP DINOTURN ;AND HEAD TOWARDS IT
|
||
CALLR DINO_WALK_LOAD
|
||
JRUC DINOWLP
|
||
|
||
*
|
||
*JUMP HERE WHEN THE DINO STEPS OUT OF BOUNDS
|
||
*A11 = CURRENT DIRECTION
|
||
DINO_OUT_OF_BOUNDS
|
||
CALLA ISHOME ;SEE IF THE DINOSAUR MADE IT HOME
|
||
JRZ DINODTH5
|
||
|
||
MOVE @CURPLYRS,A0,W ;ARE THERE PLAYERS PLAYING?
|
||
JRNZ CELEBRATE ;BR = YES, YOU CAN GO HOME
|
||
MOVE @GAME_STATE,A0,W
|
||
CMPI INAMODE,A0 ;ARE WE IN ATTRACT MODE?
|
||
JREQ CELEBRATE ;BR = YES, THEN RUN THE FIRST PART
|
||
|
||
DINO_OUT_AND_BACK
|
||
SLEEP 2 ;PAUSE
|
||
CALLR NOTDIR
|
||
JSRP DINOTURN ;ABOUTFACE
|
||
CALLR DINO_WALK_LOAD
|
||
MOVI 0802H,A1 ;ANIMATE A LITTLE WAY BEFORE RESUMING
|
||
JSRP DINO_FRANIM
|
||
JRUC DINOWLP ;START TO WALKIN'
|
||
|
||
DINODTH5
|
||
MOVB *A13(DTREXFLG),A0 ;ARE WE TREX?
|
||
JRNE DINO_OUT_AND_BACK ;BR = YES, THEN NO DEATH ALLOWED
|
||
|
||
PUSHP A4 ;STORE THE PTR TO EXIT AREA
|
||
|
||
CALLR MARK_DINO_DEAD
|
||
|
||
MOVB *A4(EMOVEDIR),A11
|
||
MOVE A11,*A13(DDIR),W
|
||
|
||
CALLR NOTDIR
|
||
|
||
MOVE A11,*A13(DINITDIR),W ;MAKE THIS THE NEW DIRECTION
|
||
CMPI TYPE_PIT,A5 ;DID WE DIE IN A PIT?
|
||
JREQ DINOBIGPIT ;BR = YES SIR
|
||
|
||
CMPI TYPE_VOLCANO,A5 ;DID WE BUMP A VOLCANO?
|
||
JREQ DINOVOLCANO ;BR = YES SIR
|
||
|
||
*
|
||
* CHECK TO SEE IF ANYONE ELSE HAS A HOUSE ON THIS SPOT
|
||
*
|
||
MOVE *A4(EMOVEOBJ),A0,L
|
||
JRZ DINO_DEATH_OFF_EDGE
|
||
|
||
MOVE *A13(DDIR),A11,W
|
||
CMPI DOWN,A11
|
||
JRNE DINO_DEATH_HOUSE_PIT
|
||
|
||
MOVI [0,0302H],A1 ;TAKE SOME EXTRA STEPS
|
||
JSRP DINO_FRANIM
|
||
MOVE *A12,A4,L ;RETRIEVE THE EXIT POINTER
|
||
DINO_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 DINO_DEATH_DONE
|
||
|
||
DINO_DEATH_OFF_EDGE
|
||
CALLA BTYPE_CK
|
||
JRNZ DDEATHLAVA
|
||
|
||
MOVI DEATH_UP,A0 ;DEFAULT ON NORMAL DEATH
|
||
JRUC DDEATHLAN
|
||
|
||
DDEATHLAVA
|
||
MOVI LAVADIEU,A0
|
||
JRUC DDEATHLAN
|
||
|
||
DDEATHLAN
|
||
JSRP FRANIMATE_DIR
|
||
JRUC DINO_DEATH_DONE
|
||
*
|
||
*ANIMATE PIT DEATH ANIMATION WITH CENTER POINT DRIFT
|
||
*A6 = PIT [Y,X] CENTER POINT
|
||
DINOBIGPIT
|
||
PUSHP A6
|
||
MOVI PIT_DEATH_UP,A0
|
||
JSRP FRANIMATE_DIR ;ANIMATE THE FLAIL
|
||
CALLA GETCPNT ;GET THE DINO 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 DINO_DEATH_DONE
|
||
|
||
*
|
||
*WHAT TO DO IF WE HIT A VOLCANO
|
||
DINOVOLCANO
|
||
PULLP A4
|
||
MOVI STANDU,A0
|
||
JSRP ANIMATE_DIR ;STAND
|
||
|
||
**** SLEEP 5 ;PAUSE
|
||
**** CALLR NOTDIR
|
||
**** JSRP DINOLOOK_TURN ;ABOUTFACE
|
||
**** CALLR DINO_WALK_LOAD
|
||
****
|
||
**** MOVI 0802H,A1 ;ANIMATE A LITTLE WAY BEFORE RESUMING
|
||
**** JSRP DINO_FRANIM
|
||
|
||
CALLR MARK_DINO_LIVE
|
||
JRUC DINOWLP ;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
|
||
DINO_DEATH_DONE
|
||
MOVI DINOS,A1
|
||
CALLA DELETE_SUPP
|
||
CALLA OBJ_OFF ;TURN THAT DINO OFF
|
||
|
||
MOVE *A13(DPLAYER),A2,L ;RESTORE HIS PLAYER POINTER
|
||
|
||
MOVE *A2(PPALID),A0,L
|
||
CALLA CHANGE_PAL ;RESTORE OLD PALETTE
|
||
|
||
MOVE *A13(DINITTAB),A1,L ;RESTORE INITIALIZATION TABLE
|
||
MOVE *A1(INITIMG),A1,L
|
||
MOVE *A8(OFLAGS),A4,W
|
||
CALLA ANI ;RESTORE FORWARD STANDARD FRAME
|
||
|
||
CALLR KILL_INVINCIBILITY
|
||
|
||
MOVE *A2(PPID),A0,W
|
||
ORI PSPEEDPID,A0
|
||
CALLA KILLPROC_ALL ;KILL ALL THE SPEEDERS AND SLOWERS
|
||
|
||
MOVE *A2(PPID),A0,W
|
||
ORI PFIREPID,A0 ;KILL THE FIRE MEN
|
||
CALLA KILLPROC_ALL
|
||
|
||
CALLA TREX_KILL ;KILL THE TREX IF NECESSARY
|
||
|
||
CLR A0
|
||
MOVE A0,*A2(PLASTDTH),L ;CLEAR TIME SINCE LAST DEATH
|
||
MOVE A0,*A2(PEGGSTHISLIFE),W ;CLEAR THE CONTINUAL EGG COUNT
|
||
DECM *A2(PDINOCNT),W ;DECREMENT THE ACTIVE DINO COUNT
|
||
INCM *A2(PWAVEDEATHS),W ;INCREMENT DEATH COUNT THIS WAVE
|
||
MOVK 1,A0
|
||
MOVE A0,*A2(PDTHFLAG),W ; FLAG THE GUY AS DEAD
|
||
|
||
MOVK 10H,A1
|
||
CALLA SCORE ;GIVE THE DUDE SOME POINTS FOR DYING
|
||
|
||
PULLP A4
|
||
MOVE A4,A4
|
||
JREQ DINODEATH_OLD_RET
|
||
MOVE *A4(EMOVERET),A0,W
|
||
JRN DINODEATH_OLD_RET ;BR = RETURN TO THE OLD POSITION
|
||
CALLA GETMOVE ;GET THE MOVE POINT
|
||
MOVE *A0(MOVEPOS),*A13(DINITPOS),L ;AND GET THE POSITION
|
||
DINODEATH_OLD_RET
|
||
MOVE *A13(DINITPOS),*A2(PDTHPOS),L
|
||
MOVE *A2(PDRONEFLG),A0,W
|
||
JRNZ DINO_ETERNAL
|
||
MOVE @BONUS_WAVE,A0,W ;IS THIS SOME TYPE OF BONUS WAVE
|
||
JRNZ DINO_ETERNAL ;BR = YES, NO DEATH FOR US
|
||
|
||
CALLA SUBLIFE ;SUBTRACT A LIFE
|
||
JRC DINO_PLAYERX ;ALL LIVES EXTINGUISHED, BLOW OFF
|
||
DINO_ETERNAL
|
||
|
||
**** SLEEP 60 ;WAIT A LITTLE BIT BEFORE RE-INIT
|
||
MOVI 60,A0
|
||
MOVE *A13(DPLAYER),A2,L
|
||
JSRP SLEEP_START
|
||
|
||
JRUC DINODEATH_XFER
|
||
|
||
*
|
||
*A2 = PTR TO PLAYER DATA BLOCK
|
||
*A4 = RETURN MOVE POINTER
|
||
DINO_PLAYERX
|
||
MOVE A2,A11 ; PLAYER DATA AREA
|
||
MOVE A4,A4
|
||
JREQ DINO_GAMEOVER_CPNT ;BR = NO DEATH RETURN, DO IT FROM CENT
|
||
MOVE *A13(DINITPOS),A9,L ;IT'S ALREADY BEEN DONE FOR US
|
||
JRUC DINO_GAMEOVER_FLY
|
||
DINO_GAMEOVER_CPNT
|
||
CALLA GETCPNT
|
||
MOVE A1,A9
|
||
DINO_GAMEOVER_FLY
|
||
CREATE INDPID,GAME_OVER_FLY
|
||
MOVK 1,A0 ; KEEP SCORPROC FROM BEING A PAIN
|
||
MOVE A0,*A11(PDEAD),W
|
||
CALLA PLAYER_DELETE ;DELETE THIS PLAYER
|
||
JRNE DINOWX ;GAMES NOT OVER
|
||
|
||
**** ADJUST ADJBUYIN ;ARE GAME CONTINUES ALLOWED?
|
||
**** CMPI 0,A0
|
||
**** JAEQ GAME_OVER ;BR = NEVER
|
||
**** CMPI 2,A0
|
||
**** JREQ DINO_BUYBUY ;BR = ALWAYS
|
||
**** MOVE *A2(PCONSECUTIVE),A0,W
|
||
**** CMPI 1,A0
|
||
**** JAHI GAME_OVER ;BR = SOMETIMES
|
||
|
||
CALLA ALLOW_CONTINUE
|
||
JAZ GAME_OVER
|
||
|
||
DINO_BUYBUY
|
||
**** AUDIT AUDCONTOFFER ;CLICK A CONTINUE OFFERED
|
||
DINO_BUYBUY_LP
|
||
CREATE BUYINPID,BUYINWIN ;CREATE BUYIN WINDOW
|
||
JRNZ DINO_BUYIWT4
|
||
SLOOP 4,DINO_BUYBUY_LP
|
||
DINO_BUYIWT4
|
||
MOVK 1,A0
|
||
MOVE A0,@BUYNOW,W
|
||
DINO_BUYIWT5
|
||
*WAIT ON BUYIN MESSAGE TO CRUISE
|
||
MOVE @BUYNOW,A0,W
|
||
JRZ DINO_BUYIWT6 ;BR = WINDOW IS GONE.
|
||
SLOOP 1,DINO_BUYIWT5
|
||
DINO_BUYIWT6
|
||
MOVE @CURPLYRS,A0,W ;IS THERE A NEW DUDE?
|
||
JAZ GAME_OVER ;BR = NO
|
||
**** AUDIT AUDCONTTAKEN ;CLICK A CONTINUE TAKEN
|
||
DINOWX
|
||
DIE
|
||
|
||
DINODIE_SND
|
||
.WORD >F320,>3E,>808A,0 ;DEATH SOUND
|
||
|
||
DINO_MOVE_TAB
|
||
.BYTE 0FFH,UP,DOWN,0FFH
|
||
.BYTE LEFT,0FFH,0FFH,0FFH
|
||
**** .BYTE LEFT,(LEFT*16)+UP,(LEFT*16)+DOWN,0FFH
|
||
.BYTE RIGHT,0FFH,0FFH,0FFH
|
||
**** .BYTE RIGHT,(RIGHT*16)+UP,(RIGHT*16)+DOWN,0FFH
|
||
.BYTE 0FFH,0FFH,0FFH,0FFH
|
||
|
||
****UPTABLE
|
||
**** .BYTE 0FFH,0FFH,DOWN,DOWN
|
||
**** .BYTE LEFT,LEFT,LEFT,0FFH
|
||
**** .BYTE RIGHT,RIGHT,RIGHT,0FFH
|
||
**** .BYTE RIGHT,0FFH,0FFH,0FFH
|
||
****
|
||
****DNTABLE
|
||
**** .BYTE 0FFH,UP,0FFH,UP
|
||
**** .BYTE LEFT,LEFT,LEFT,0FFH
|
||
**** .BYTE RIGHT,RIGHT,RIGHT,0FFH
|
||
**** .BYTE RIGHT,0FFH,0FFH,0FFH
|
||
****
|
||
****LFTABLE
|
||
**** .BYTE 0FFH,UP,DOWN,UP
|
||
**** .BYTE 0FFH,UP,DOWN,0FFH
|
||
**** .BYTE RIGHT,UP,DOWN,0FFH
|
||
**** .BYTE RIGHT,0FFH,0FFH,0FFH
|
||
****
|
||
****RTTABLE
|
||
**** .BYTE 0FFH,UP,DOWN,UP
|
||
**** .BYTE LEFT,UP,DOWN,0FFH
|
||
**** .BYTE 0FFH,UP,DOWN,0FFH
|
||
**** .BYTE LEFT,0FFH,0FFH,0FFH
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINO_NEW_MOVE - SET DINO ON THE NEAREST MOVE POINT. *
|
||
* A8 = PTR TO DINO *
|
||
* A13 = PTR TO DINO PROCESS *
|
||
* RETURNS *
|
||
* NC = MOVE WAS A CENTER *
|
||
* C = MOVE WAS AN AUXILLARY *
|
||
* A0 = PTR TO MOVE DATA *
|
||
* A1 = [Y,X] DINO CENTER *
|
||
* A3 = [Y,X] MOVE POSITION *
|
||
* *
|
||
**************************************************************************
|
||
DINO_NEW_MOVE
|
||
PUSH A5
|
||
CALLR GET_DINO_MPNT
|
||
MOVE A3,*A13(TCURMPOS),L ;AND STORE IT AS HIS CURRENT MOVE POS
|
||
|
||
MOVE *A0(MOVECPTR),A5,L ;ARE WE SITTING ON A CENTER POINT
|
||
JRNN DNM_CPNT ;BR = YES
|
||
|
||
MOVE *A0(MOVEAPTR),A5,L ;HOW 'ABOUT AN AUX POINT
|
||
JRN DNM_AFAIL ;BR = NO
|
||
CALLA EGG_OBJ ;CHECK FOR AN EGG
|
||
DNM_AFAIL
|
||
SETC
|
||
JRUC DNM_X
|
||
DNM_CPNT
|
||
CALLA EGG_OBJ ;CHECK FOR AN EGG
|
||
CLRC
|
||
DNM_X
|
||
PULL A5
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINO_STICK - ROUTINE TO DETERMINE IF THIS SHOULD CHANGE DIRECTION. *
|
||
* A8 = PTR TO DINO *
|
||
* A11 = CURRENT DIRECTION *
|
||
* A13 = PTR TO DINO PROCESS *
|
||
* RETURNS: *
|
||
* C = NOT ALLOWED TO GO IN THE DIRECTION SPECIFIED. *
|
||
* Z = STILL ON SAME SPOT *
|
||
* NZ = DINO HAS MOVED TO A NEW SPOT *
|
||
* NC = NEW STICK DIRECTION *
|
||
* Z = NEW STICK IS THE SAME AS CURRENT DIRECTION *
|
||
* NZ = NEW STICK REQUIRES A TURN *
|
||
* A0 = PTR TO MOVE THAT DINO IS CURRENTLY UPON *
|
||
* A1 = [Y,X] CENTER OF DINO *
|
||
* A2 = PTR TO PLAYER DATA *
|
||
* A3 = [Y,X] CENTER OF MOVE *
|
||
* A6 = NEW DIRECTION *
|
||
* *
|
||
**************************************************************************
|
||
DINO_STICK
|
||
MMTM SP,A5,A7
|
||
CALLR GET_DINO_MPNT ;GET THE DINOSAURS PHYSICAL MOVE PNT
|
||
|
||
MOVE *A13(DPLAYER),A2,L
|
||
MOVE *A2(PJOYSTCK),A6,W ;CHECK THE CONTROL STICK
|
||
SLL 28,A6
|
||
SRL 25,A6
|
||
|
||
ADDI DINO_MOVE_TAB,A6
|
||
MOVB *A6,A6 ;TRANSLATE TO A MOVE
|
||
JRN DS_SAME_DIR ;BR = ILLEGAL STICK, JUST CONTINUE
|
||
|
||
**** CMPI RIGHT,A6 ;DO WE HAVE A SINGLE DIRECTION
|
||
**** JRLS DS_ONE_WAY ;BR = YES
|
||
|
||
*HERE WE HAVE A CASE WHERE TWO SWITCHES ARE MAKING AT ONCE.
|
||
*FIRST DIRECTION IS CHECKED, IF IT IS NOT CURRENT DINO DIRECTION
|
||
*THEN IT IS TAKEN, OTHERWISE, DIRECTION #2 IS TAKEN
|
||
**** MOVE A6,A7
|
||
**** SLL 28,A6
|
||
**** SRL 28,A6
|
||
**** CMP A6,A11 ;CHECK NUMBER ONE DIRECTION
|
||
**** JRNE DS_DIR_PICKED ;BR = NOT SAME, TAKE IT
|
||
**** MOVE A7,A6
|
||
**** SLL 28,A6
|
||
**** SRL 28,A6
|
||
**** JRUC DS_DIR_PICKED ;DEFAULT TO #2
|
||
|
||
****DS_ONE_WAY
|
||
CMP A6,A11 ;STICK DIR SAME AS DINO DIR?
|
||
JREQ DS_SAME_DIR ;BR = YES
|
||
****DS_DIR_PICKED
|
||
MOVE A1,A7
|
||
MOVE A6,A1 ;LOOK ONE MOVE IN THE STICK DIRECTION
|
||
CALLA ONE_MOVE
|
||
JRZ DS_CK_NEW ;BR = THERE IS NO MOVE THERE
|
||
|
||
MOVB *A1(MOVEPLYR),A5 ;IS THERE A BONE UPON THIS SPOT?
|
||
JRN DS_CK_NEW ;BR = NO, GO FOR NEW DIRECTION
|
||
|
||
MOVE A7,A1
|
||
MOVE A11,A6 ;CONTINUE IN THE SAME DIRECTION
|
||
|
||
MOVE *A13(TCURMPOS),A5,L ;GET THE CURRENT SOFTWARE MOVE POINT
|
||
CMP A5,A3 ;SAME AS PHYSICAL?
|
||
JRNE DS_SAMEDIR_NEWSPOT ;BR = NO, FLAG THE NEW POINT
|
||
JRUC DS_SAMEDIR_SAMESPOT
|
||
|
||
DS_CK_NEW
|
||
MOVE A7,A1
|
||
MOVE A11,A5
|
||
CALLA NOTDIR
|
||
SWAP A11,A5
|
||
CMP A6,A5
|
||
JREQ DS_NEW_DIRECTION
|
||
|
||
MOVE *A13(TCURMPOS),A5,L ;GET THE CURRENT MOVE POINT
|
||
CMP A5,A3 ;SAME MOVE AS LAST TIME?
|
||
JREQ DS_CENT_CK ;BR = YES, LOOK FOR CENTER
|
||
DS_SAMEDIR_NEWSPOT
|
||
SETC
|
||
CLRZ
|
||
JRUC DS_X
|
||
|
||
DS_CENT_CK
|
||
MOVE *A0(MOVECPTR),A5,L ;IS THIS MOVE A CENTER?
|
||
JRNN DS_ND_CENTER ;BR = TAKE THE DIRECTION, CENTER 1st
|
||
DS_SAMEDIR_SAMESPOT
|
||
SETC
|
||
SETZ
|
||
JRUC DS_X
|
||
|
||
DS_ND_CENTER
|
||
CALLR DINO_CENTER
|
||
DS_NEW_DIRECTION
|
||
CLRC
|
||
CLRZ
|
||
JRUC DS_X
|
||
|
||
DS_SAME_DIR
|
||
CLRC
|
||
SETZ
|
||
JRUC DS_X
|
||
DS_X
|
||
MMFM SP,A5,A7
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINO_WALK_LOAD - ROUTINE TO LOAD THE DINOSAURS CORRECT WALKING SCRIPT. *
|
||
* A8 = PTR TO DINOSAUR *
|
||
* A10 = PTR TO DINOSAUR ANIMATION TABLE *
|
||
* A11 = PTR TO CURRENT DINOSAUR DIRECTION *
|
||
* A13 = PTR TO DINOSAUR PROCESS *
|
||
* RETURNS: *
|
||
* A9 = PTR TO ANIMATION *
|
||
* X,Y & Z VELOCITIES STUFFED IN THE OBJECT *
|
||
* NOTE: TRASHES A0 *
|
||
* *
|
||
**************************************************************************
|
||
DINO_WALK_LOAD
|
||
**** MOVB *A13(DFIREFLG),A0
|
||
**** JRZ DWL_GO
|
||
**** MOVI SPITFIREU,A0
|
||
****DWL_GO
|
||
CLR A0
|
||
|
||
ADD A11,A0
|
||
CALLR DINOLOAD
|
||
MOVE A9,*A13(DWALKFRM),L
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINO_HALTED - CHECK TO SEE IF THE DINOSAUR IS SOFTWARE HALTED. *
|
||
* A13 = PTR TO DINO PROCESS *
|
||
* RETURNS: *
|
||
* Z = NOT HALTED (A0 = 0) *
|
||
* NZ = HALTED (A0 <> 0) *
|
||
* A2 = PTR TO PLAYER DATA BLOCK *
|
||
* *
|
||
**************************************************************************
|
||
DINO_HALTED
|
||
MOVE *A13(DPLAYER),A2,L
|
||
JRZ DINO_HALTED_X
|
||
MOVE *A2(PDINOSTOP),A0,W ;DO WE WANT TO STOP THIS GUY?
|
||
DINO_HALTED_X
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINO_PNT_TST - TEST THIS POINT FOR THE EXISTENCE OF OTHER *
|
||
* DINOSAURS. *
|
||
* A3 = [Y,X] POINT TO TEST *
|
||
* RETURNS: *
|
||
* Z = PNT CLEAR OF OTHER DINOSAURS *
|
||
* NZ = PNT NOT CLEAR *
|
||
* NOTE: TRASHES A4 *
|
||
* *
|
||
**************************************************************************
|
||
DINO_PNT_TST
|
||
MMTM SP,A0,A1
|
||
MOVI DINOOID,A0
|
||
MOVI 0FFF0H,A1
|
||
CALLA DINOS_NEAR_PNT ;ARE THERE DINOS ABOUT?
|
||
JRNZ DINO_PNT_TST_X ;BR = YES SIR
|
||
CLR A1
|
||
CALLA ENEMIES_NEAR_PNT ;ARE THERE ANY ENEMIES ABOUT
|
||
DINO_PNT_TST_X
|
||
MMFM SP,A0,A1
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINOINIT_PNT_FIND - FIND A SPOT FREE OF DINOS SO THAT WE CAN PLOP *
|
||
* ONE DOWN. *
|
||
* A0 = DIRECTION TO SEARCH FIRST *
|
||
* A1 = STARTING MOVE DATA *
|
||
* RETURNS: *
|
||
* Z = PNT COULD NOT BE FOUND. *
|
||
* NZ = PNT FOUND. (A3 = [Y,X] POINT) *
|
||
* NOTE: TRASHES A14 *
|
||
* *
|
||
**************************************************************************
|
||
DINOINIT_PNT_FIND
|
||
MOVE *A1(MOVEPOS),A3,L ;GET THIS DUDES POSITION
|
||
CALLR DINO_PNT_TST
|
||
JRNZ DINO_PNT_SRCH ;BR = POINT NOT OPEN, WE MUST SEARCH
|
||
CLRZ
|
||
RETS
|
||
DINO_PNT_SRCH
|
||
MMTM SP,A0,A5,A6
|
||
CLR A14
|
||
NOT A14
|
||
MOVB A14,*A1(MOVEDSRCH) ;MARK THIS AS SEARCHED
|
||
MOVK 4,A5
|
||
DINO_PNT_FIND_LP
|
||
MOVE A1,A6
|
||
CALLA TWO_MOVES ;GET THE MOVE IN THIS DIRECTION
|
||
JRZ DINO_PNT_FIND_NXT ;BR = NO MOVE THAT DIRECTION
|
||
|
||
MOVB *A1(MOVEDSRCH),A14 ;HAVE WE SEARCHED HERE ALREADY?
|
||
JRN DINO_PNT_FIND_NXT ;BR = YES
|
||
|
||
MOVE *A1(MOVEPOS),A3,L ;GET THIS DUDES POSITION
|
||
CALLR DINOINIT_PNT_FIND ;NOW FIND ONE FROM HERE
|
||
JRZ DINO_PNT_FIND_NXT ;DIDN'T FIND ONE, NEXT PLEASE
|
||
|
||
MOVE A6,A1
|
||
CLRZ
|
||
MMFM SP,A0,A5,A6
|
||
RETS
|
||
|
||
DINO_PNT_FIND_NXT
|
||
MOVE A6,A1
|
||
INC A0 ;GET NEXT DIRECTION
|
||
CMPI RIGHT,A0
|
||
JRLS DINO_PNT_DEC_LP
|
||
CLR A0 ;RESET TO UP
|
||
DINO_PNT_DEC_LP
|
||
DSJ A5,DINO_PNT_FIND_LP
|
||
SETZ
|
||
MMFM SP,A0,A5,A6
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CELEBRATE - CELEBRATE THE ENDING OF A WAVE *
|
||
* A0 = PTR TO THE HOME OBJECT *
|
||
* A4 = PTR TO THE EXIT MOVE THAT WE ARE HAPPY ABOUT. *
|
||
* A8 = PTR TO DINOSAUR OBJECT *
|
||
* A10 = PTR TO DINOSAUR ANIMATION TABLE *
|
||
* *A13(DATABLE),L = PTR TO DINOSAUR ANIMATION TABLE *
|
||
* *A13(DDIR),W = CURRENT DINOSAUR DIRECTION *
|
||
* *A13(DPLAYER),L = DATA AREA OF PLAYER CONTROLLING THIS GUY *
|
||
* *
|
||
* NOTE: JUMP HERE FROM A PROCESS, IT WILL NOT RETURN. *
|
||
* *
|
||
**************************************************************************
|
||
CELEBRATE
|
||
CALLR KILL_INVINCIBILITY
|
||
MOVE A0,*A13(PTEMP1),L ;KEEP HOUSE PTR
|
||
CALLA GET_EXIT_ANI ;GET THE EXIT ANIMATION POINT
|
||
MOVE A3,A0
|
||
MOVI HOUSE_PITS,A1
|
||
CALLA ISSUPPANI ;IS THERE A DEATH PIT HERE?
|
||
JRZ CELEBRATE_AWAY ;BR = NO
|
||
MOVE A8,A0 ;RID US OF THAT PIT
|
||
MOVE A1,A8
|
||
CALLA OBJPROC_KILL
|
||
MOVI HOUSE_PITS,A1
|
||
CALLA DELETE_OBJ_SUPP
|
||
MOVE A0,A8
|
||
CELEBRATE_AWAY
|
||
MOVE @GAME_STATE,A0,W
|
||
CMPI INGAMEOV,A0
|
||
JREQ CELE_SKIP_ST
|
||
CMPI INAMODE,A0
|
||
JREQ CELE_SKIP_ST
|
||
CMPI INGAME,A0
|
||
JREQ DINOMADXFER ;SKIP BECAUSE WE ARE ALREADY COMPLETE
|
||
|
||
MOVI INGAME,A0 ;WE ARE THE FIRST TO PASS
|
||
MOVE A0,@GAME_STATE,W
|
||
|
||
CELE_SKIP_ST
|
||
MOVK 1,A0
|
||
MOVE A0,@WAVE_OVER,W ;FLAG THE WAVE DONE
|
||
|
||
MOVI COLLPID,A0
|
||
MOVI 0FFF0H,A1
|
||
CALLA KILALL ;KILL THE COLLISION PROCESSES
|
||
|
||
CALLR DINOMAD ;MAKE THE OTHER DINOSAURS MAD AT THIS
|
||
|
||
CALLA TREX_KILL ;KILL THE TREX IF NECESSARY
|
||
|
||
MOVE *A13(DPLAYER),A2,L
|
||
MOVE *A2(PDRONEFLG),*A13(PTEMP4),W ;STORE DRONE FLAG FOR LATER
|
||
|
||
**** ALLPLYR CLR_DRONE ;CLEAR THE DRONE STATUS OF ALL PLAYERS
|
||
|
||
**** INCM *A2(PWINS),W
|
||
|
||
CLR A4
|
||
MOVE *A2(PWINS),A5,W
|
||
JRNZ CEL_NO_BONUS
|
||
MOVE @START_SCORE,A1,L
|
||
JRZ CEL_NO_BONUS
|
||
CALLA SCORE ;AWARD START AHEAD BONUS, IF ANY
|
||
INC A4
|
||
CEL_NO_BONUS
|
||
MOVE A4,*A13(PTEMP2),W
|
||
INC A5
|
||
MOVE A5,*A2(PWINS),W
|
||
|
||
MOVE @WAVE,A0,W
|
||
MOVE A0,*A2(PLASTWIN),W
|
||
* MAKE ALL OF THE OTHER PWAVETIMEs TO BIG TO OUTPUT TIMER
|
||
MOVE @NPLAYERS,A0,W
|
||
MOVI P1DATA,A3
|
||
MOVI 7FFFH,A4
|
||
CEL_CLEAR_LP
|
||
CMP A2,A3
|
||
JREQ CEL_NEXT_CLEAR
|
||
MOVE A4,*A3(PWAVETIME),L
|
||
CEL_NEXT_CLEAR
|
||
ADDI PDSIZE,A3
|
||
DEC A0
|
||
JRNN CEL_CLEAR_LP
|
||
|
||
MOVE *A13(DDIR),*A13(PTEMP3),W ;SAVE THE EXIT DIRECTION
|
||
MOVK DOWN,A11
|
||
JSRP DINOTURN
|
||
|
||
MOVI STANDU,A0
|
||
JSRP ANIMATE_DIR ;MAKE SURE HE STANDING STILL
|
||
|
||
MOVI 7FFF0002H,A1
|
||
MOVE A1,*A8(OZVAL),L
|
||
|
||
SLEEP 10
|
||
|
||
MOVE @GAME_STATE,A0,W
|
||
CMPI INAMODE,A0 ;DID WE DO THIS FOR FREE?
|
||
JREQ CELEBRATE_AMODE_DIE ;BR = YES!
|
||
|
||
JSRP WAIT_WAVE_END
|
||
|
||
SLEEP 30
|
||
MOVI 2000H,A9
|
||
CREATE SKYPID,SKYDOWN
|
||
|
||
MOVI PHELPPID,A0
|
||
MOVI PPROCMASK,A1
|
||
CALLA KILALL ;KILL ALL OF THE HELPER BOXES
|
||
|
||
SOUND1 ALLOFF
|
||
SLEEP 4
|
||
|
||
SOUND1 WIN_SND ;MAKE THE WINNER SOUND
|
||
|
||
CLR A0
|
||
MOVI 0E000h,A1
|
||
CALLA KILALL ;KILL EVERYTHING WE CAN
|
||
|
||
ALLPLYR CLR_DRONE ;CLEAR THE DRONE STATUS OF ALL PLAYERS
|
||
|
||
MOVK 30,A11
|
||
CREATE INDPID,WIPE_FROM_MID ;CLEAR THE SCREEN
|
||
|
||
MOVE *A8(OXPOS),A2,W
|
||
MOVE *A8(OYPOS),A3,W
|
||
SLL 16,A3
|
||
MOVY A3,A2
|
||
MOVI [180,185],A3
|
||
MOVI 10*4,A4 ;LONGER THAN WIPE_FROM_MID SLEEP
|
||
CALLA SLINEVEL
|
||
MOVE A1,*A8(OXVEL),L
|
||
MOVE A2,*A8(OYVEL),L
|
||
|
||
MOVI DINOFLY_ANIM,A9
|
||
MOVK 1,A1
|
||
JSRP FRANIM
|
||
|
||
CALLA PSTOP
|
||
|
||
CLR A1
|
||
CALLA KILOBJ_XA8 ;RID OF ALL OBJECTS EXCEPT WINNER
|
||
|
||
CLR A0 ;SCREEN SHALL BE BLACK
|
||
MOVE A0,@IRQSKYE,W
|
||
|
||
CALLA KILB2OBJ
|
||
CALLA KILBOBJ
|
||
|
||
CALLA CLRBPAL ;CLEAR THE BACKGROUND PALETTES
|
||
|
||
ALLPLYR CLR_PDINOCNT ;CLEAR THE DINOSAUR COUNTS
|
||
CALLA SCORAREA ;REPLOT THE SCORE AREA
|
||
MOVE *A13(DPLAYER),A2,L
|
||
**** CALLA OUT_TIME ;AND GIVE US THE TIME
|
||
|
||
MOVI BUYWIN_Z,A1
|
||
MOVE A1,*A8(OZVAL),L
|
||
|
||
MOVE A2,A11 ;PLAYER DATA HERE FOR PROCESSES
|
||
CALLA PARTY_STUFF
|
||
SLEEP 40
|
||
CALLA DANCE_STUFF ;MAKE SURE A11 STILL IS PLAYER DATA
|
||
|
||
MOVE *A13(PTEMP2),A2,W
|
||
JRZ CEL_SKIP_WB
|
||
MMTM A12,A8,A9,A10,A11
|
||
MOVI WINB_MESS,A8
|
||
JSRP LM_PRINTF
|
||
MMFM A12,A8,A9,A10,A11
|
||
MOVI TEXTOID,A0
|
||
MOVI BTITLEOID,A1
|
||
CALLA CHANGOID ;LETTERS SHOULD BE NON-DISCERNABLE
|
||
|
||
CEL_SKIP_WB
|
||
MOVE *A8(OID),A2,W
|
||
SLL 30,A2
|
||
SRL 24,A2
|
||
MOVE A2,A4
|
||
ADDI DINOCHEER_ANIM,A4
|
||
MOVE *A4+,A9,L
|
||
CREATE INDPID,CELEBRATEAMATE
|
||
MOVE A0,*A8(OPLINK),L
|
||
|
||
MOVE *A4+,A9,L ;DOES HE HAVE ANOTHER PART?
|
||
JRZ CELE_1PART ;BR = NO
|
||
|
||
CALLA GETOBJ ;ADD A SECOND PART
|
||
JRZ CELE_1PART
|
||
|
||
CALLA COPY_OBJ
|
||
MMTM A12,A2,A8,A9
|
||
MOVE A0,A8
|
||
MOVK 4,A1
|
||
JSRP FRANIM
|
||
CALLA INSERT_OBJ
|
||
PULLP A9
|
||
CREATE INDPID,CELEBRATEAMATE
|
||
MOVE A0,*A8(OPLINK),L
|
||
MOVE A8,*A13(PTEMP2),L
|
||
MMFM A12,A2,A8
|
||
JRUC CB_CONTINUE
|
||
|
||
CELE_1PART
|
||
CLR A0
|
||
MOVE A0,*A13(PTEMP2),L ;FLAG FOR NO EXTRA PARTS
|
||
|
||
CB_CONTINUE
|
||
MOVE @GAME_STATE,A0,W
|
||
CMPI INAMODE,A0 ;DID WE DO THIS FOR FREE?
|
||
JREQ CELEBRATE_AMODE_DIE ;BR = YES!
|
||
|
||
MOVE A8,*A13(PTEMP1),L ;KEEP DINO PTR FOR LATER
|
||
|
||
SRL 1,A2
|
||
ADDI COMPSNDTAB,A2
|
||
MOVE *A2,A0,L
|
||
CALLA ONESND ;MAKE HIS COMPLETION SOUND
|
||
|
||
MOVE *A8(OID),A4,W
|
||
SLL 28,A4
|
||
SRL 23,A4
|
||
ADDI PNAME_TAB,A4
|
||
MOVE *A4,A4,L
|
||
MOVE A4,@STRING1,L
|
||
|
||
MOVE *A13(PTEMP4),A0,W ;DRONE WIN?
|
||
JRZ CELEBRATE_NORM_TEXT ;BR = NO
|
||
MOVI WIN_MESS,A8 ;ALWAYS PUT THIS MESSAGE FOR DRONE WIN
|
||
JRUC CELEBRATE_PRINT
|
||
|
||
CELEBRATE_NORM_TEXT
|
||
CALLA WAVE_PLAYERS
|
||
CMPI 1,A0 ;DID MORE THAN ONE GUY PLAY?
|
||
JRHI CELEBRATE_WIN ;BR = YES, THEN THIS GUY WON
|
||
MOVI COMP_MESSAGES,A8 ;COMPLETE TEXT TABLE
|
||
JRUC CELEBRATE_TEXT
|
||
CELEBRATE_WIN
|
||
MOVI WIN_MESSAGES,A8 ;WIN TEXT TABLE
|
||
CELEBRATE_TEXT
|
||
MOVK NUM_WIN_MESSAGES,A0
|
||
CALLA RANDU ;SELECT A RANDOM MESSAGE
|
||
DEC A0 ;ZERO BASED
|
||
SLL 29,A0
|
||
SRL 24,A0
|
||
ADD A0,A8
|
||
MOVE *A8,A8,L
|
||
CELEBRATE_PRINT
|
||
PUSH A8
|
||
MOVI CELEBRATE_MESS,A8
|
||
CALLA LM_SETUP
|
||
PULL A8
|
||
JSRP PRINTF
|
||
|
||
MOVI BTITLEOID,A0
|
||
CALLA KILOBJ_ALL
|
||
|
||
SLEEP 10
|
||
|
||
CALLA WAVE_PLAYERS
|
||
CMPI 1,A0
|
||
JRLS CELE_SKIP_WINNER_BONUS
|
||
DEC A0
|
||
MOVI 25000,A1
|
||
MPYU A0,A1 ;POINTS BASED ON # OF PLAYERS
|
||
MOVE A1,A0
|
||
MOVE A0,@STRING2,L
|
||
CALLA BINBCD ;CONVERT FOR SCORE
|
||
MOVE A0,A1
|
||
MOVE *A13(DPLAYER),A2,L ;SCORE TO THIS PLAYER
|
||
CALLA SCORE
|
||
MOVI WINPOINT_MESS,A8
|
||
JSRP LM_PRINTF ;SEND OUT THE MESSAGE
|
||
|
||
CELE_SKIP_WINNER_BONUS
|
||
MOVI TEXTOID,A0
|
||
MOVI JUNKOID,A1
|
||
CALLA CHANGOID ;LETTERS SHOULD BE NON-DISCERNABLE
|
||
|
||
SLEEP 85
|
||
SOUND1 YAMOFF ;TURN THE CURRENT YAMAHA EFFECT OFF
|
||
|
||
**** MOVE *A13(PTEMP4),A0,W ;IS THIS A DRONE THAT WON?
|
||
**** JRNZ CELEBRATE_END ;BR = YES
|
||
|
||
**** SLEEP 5
|
||
|
||
**** SOUND1 BONUSM_SND ;START THE BONUS SOUND
|
||
|
||
**** MOVE *A13(PTEMP1),A8,L
|
||
**** CALLA OBJPROC_KILL
|
||
|
||
**** CALLA GETANIXY_PACKED
|
||
**** MOVE A3,A2
|
||
**** MOVI [100,193],A3
|
||
**** MOVI 10*4,A4 ;LONGER THAN WIPE_FROM_MID SLEEP
|
||
**** CALLA SLINEVEL
|
||
**** MOVE A1,*A8(OXVEL),L
|
||
**** MOVE A2,*A8(OYVEL),L
|
||
|
||
**** MOVE A8,A9
|
||
**** MOVE *A13(PTEMP2),A8,L
|
||
**** JRZ CB_NOEXTRA
|
||
**** CALLA OBJPROC_KILL
|
||
**** MOVE A8,A0
|
||
**** CALLA DELOBJ ;RID O' EXTRA OBJECT
|
||
|
||
****CB_NOEXTRA
|
||
**** MOVE A9,A8
|
||
**** MOVI BSPIKEFALL,A9
|
||
**** MOVK 1,A1
|
||
**** JSRP FRANIM
|
||
**** CALLA PSTOP
|
||
|
||
**** MOVE *A13(DATABLE),A10,L
|
||
**** MOVK 4,A0
|
||
**** CALLA RANDU
|
||
**** DEC A0
|
||
**** ADDK CHEER1,A0
|
||
**** CALLR DINOLOAD
|
||
**** CREATE INDPID,CELEBRATEAMATE
|
||
**** MOVE A0,*A8(OPLINK),L
|
||
|
||
**** MOVE *A8(OID),A0,W
|
||
**** SLL 28,A0
|
||
**** SRL 28,A0
|
||
**** CALLA GPLAYD ;GET THAT PLAYERS DATA AREA
|
||
|
||
.IF PRINTER
|
||
CALLA PGAMEWAVE
|
||
.ENDIF
|
||
|
||
**** MOVE A2,A11
|
||
|
||
**** CALLA GETANIXY_PACKED
|
||
**** MOVE A3,A10
|
||
**** CREATE GOODIEPID,FIREWERK
|
||
|
||
**** MOVI [149,81],A10 ;PUT THAT MARQUEE HERE
|
||
**** MOVE A2,A11
|
||
**** CREATE INDPID,BORDER_MARQUEE
|
||
**** CREATE BONUSPID,BONUS_COUNT
|
||
|
||
****CELEBRATE_BONUS_WAIT
|
||
**** SLEEP 10
|
||
**** MOVI BONUSPID,A0
|
||
**** CLR A1
|
||
**** NOT A1
|
||
**** CALLA EXISTP
|
||
**** JRNZ CELEBRATE_BONUS_WAIT
|
||
****CELEBRATE_END
|
||
JAUC WAVE_END
|
||
*
|
||
*DIE HERE IF WE ARE IN AMODE PLAY. THIS LEAVES THE DINO RUNNING HIS
|
||
*MONDO BIG ANIMATION.
|
||
CELEBRATE_AMODE_DIE
|
||
MOVK 1,A0
|
||
MOVE A0,@APLAYDONE,W ;FLAG THE A-MODE PLAY AS FINISHED
|
||
SLEEP 60
|
||
MOVE @APLAYDONE,A0,W
|
||
JRZ CADNOW
|
||
*SAFETY TRAP FOR BOGUS HAPPENINGS DURING ATTRACT MODE
|
||
CALLA WIPEOUT
|
||
CALLA ATSTRT
|
||
CADNOW
|
||
DIE
|
||
|
||
BONUSM_SND
|
||
.WORD >F231,>1,>8009,0 ;BONUS MUSIC
|
||
|
||
|
||
WINB_MESS
|
||
MESS_MAC RD7FONT,2,197,206+SKYTOPOF,DINO_PWHITE,STRCNRMO,0
|
||
.STRING "LEVEL BONUS AWARDED",0
|
||
.EVEN
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TABLE OF MESSAGES TO OUTPUT UPON COMPLETION *
|
||
* OF A WAVE WITH MULTIPLE PLAYERS PLAYING. *
|
||
* *
|
||
**************************************************************************
|
||
WINPOINT_MESS
|
||
MESS_MAC RD7FONT,2,197,206+SKYTOPOF,DINO_PWHITE,STRCNRMO,0
|
||
.STRING "%,ld POINTS FOR WINNING.",0
|
||
.LONG STRING2
|
||
|
||
NUM_WIN_MESSAGES .EQU 5
|
||
|
||
*COMMON HEADER FOR ALL OF THE CELEBRATION MESSAGES
|
||
CELEBRATE_MESS
|
||
MESS_MAC RD20FONT,2,197,10+SKYTOPOF,01010000H,STRCNRMO,0
|
||
|
||
WIN_MESSAGES
|
||
.LONG WIN_MESS, BEST_MESS, VICTOR_MESS, TD_MESS
|
||
.LONG DINO_MESS, DINO_MESS, DINO_MESS, DINO_MESS
|
||
|
||
WIN_MESS
|
||
.STRING "%p\a!\a\n\bThe Winner\a!\a",0
|
||
.LONG STRING1
|
||
.WORD 60
|
||
.WORD 0
|
||
.WORD 0D0DH
|
||
.WORD 30
|
||
.WORD 0
|
||
|
||
BEST_MESS
|
||
.STRING "%p\a!\a\n\bThe Best\a!\a",0
|
||
.LONG STRING1
|
||
.WORD 60
|
||
.WORD 0
|
||
.WORD 0D0DH
|
||
.WORD 30
|
||
.WORD 0
|
||
|
||
VICTOR_MESS
|
||
.STRING "%p\a!\a\n\bThe Victor\a!\a",0
|
||
.LONG STRING1
|
||
.WORD 60
|
||
.WORD 0
|
||
.WORD 0D0DH
|
||
.WORD 30
|
||
.WORD 0
|
||
|
||
TD_MESS
|
||
.STRING "%p\a!\a\n\bTop Dino\a!\a",0
|
||
.LONG STRING1
|
||
.WORD 60
|
||
.WORD 0
|
||
.WORD 0D0DH
|
||
.WORD 30
|
||
.WORD 0
|
||
|
||
DINO_MESS
|
||
.STRING "%p\a!\a\n\bDINO-MITE\a!\a",0
|
||
.LONG STRING1
|
||
.WORD 60
|
||
.WORD 0
|
||
.WORD 0D0DH
|
||
.WORD 30
|
||
.WORD 0
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TABLE OF MESSAGES TO OUTPUT UPON COMPLETION *
|
||
* OF A WAVE WITH ONE PLAYER PLAYING. *
|
||
* *
|
||
**************************************************************************
|
||
COMP_MESSAGES
|
||
.LONG CONGRAT_MESS, GJ_MESS, EXCEL_MESS, WTG_MESS
|
||
.LONG DINO_MESS, DINO_MESS, DINO_MESS, DINO_MESS
|
||
|
||
CONGRAT_MESS
|
||
.STRING "%p\a!\a\n\bCongratulations\a!\a",0
|
||
.LONG STRING1
|
||
.WORD 60
|
||
.WORD 0
|
||
.WORD 0D0DH
|
||
.WORD 30
|
||
.WORD 0
|
||
|
||
GJ_MESS
|
||
.STRING "%p\a!\a\n\bGOod Job\a!\a",0
|
||
.LONG STRING1
|
||
.WORD 60
|
||
.WORD 0
|
||
.WORD 0D0DH
|
||
.WORD 30
|
||
.WORD 0
|
||
|
||
EXCEL_MESS
|
||
.STRING "%p\a!\a\n\bExcellent\a!\a",0
|
||
.LONG STRING1
|
||
.WORD 60
|
||
.WORD 0
|
||
.WORD 0D0DH
|
||
.WORD 30
|
||
.WORD 0
|
||
|
||
WTG_MESS
|
||
.STRING "%p\a!\a\n\bWay To Go\a!\a",0
|
||
.LONG STRING1
|
||
.WORD 60
|
||
.WORD 0
|
||
.WORD 0D0DH
|
||
.WORD 30
|
||
.WORD 0
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINOMAD - MAKE THE OTHER DINOSAURS MAD THAT THIS ONE FINISHED. *
|
||
* A8 = PTR TO WINNING DINOSAUR *
|
||
* *
|
||
**************************************************************************
|
||
DINOMAD
|
||
MMTM SP,A0,A1,A2,A3,A4,A5,A7,A8
|
||
MOVE *A8(OID),A4,W
|
||
MOVE A8,A5
|
||
MOVI DINOS,A8
|
||
MOVE *A8,A8,L
|
||
JRZ DINOMADX
|
||
MOVI INDPID,A1
|
||
DINOMADCK
|
||
CMP A8,A5
|
||
JREQ DINOMADNXT ;SAME DINOSAUR
|
||
MOVE *A8(OID),A3,W
|
||
CMP A4,A3 ;DINOSAUR OF THE SAME NAME SMELLS
|
||
JREQ DINOCELE
|
||
|
||
MOVE A3,A0 ;GET AHOLD OF PLAYER IN CONTROL
|
||
SRL 4,A3
|
||
SLL 4,A3
|
||
CMPI DINOOID,A3
|
||
JRNE DINOMADNXT
|
||
SLL 28,A0
|
||
SRL 28,A0
|
||
CALLA GPLAYD ;GET THE PLAYER DATA AREA
|
||
MOVE *A2(PEGGS),A0,W ;CHECK EGG COUNT AGAINST REQUIRED
|
||
MOVE @WAVEEGGS,A7,W ;# OF EGGS GIVEN THIS WAVE / PLAYER
|
||
CMP A7,A0
|
||
JRHS DINO_MAD_EGGS ;BR = I HAD ENOUGH EGGS TOO, WAAAAA
|
||
|
||
MOVI DINOQUESXFER,A7 ;LOAD UP THE QUESTION XFER
|
||
JRUC DINOMADDO
|
||
DINO_MAD_EGGS
|
||
MOVI DINOMADXFER,A7 ;LOAD UP THE MAD XFER POINT
|
||
JRUC DINOMADDO
|
||
DINOCELE
|
||
MOVI DINOCELEXFER,A7 ;LOAD UP THE CELEBRATE XFER POINT
|
||
DINOMADDO
|
||
CALLA OBJPROC_XFER
|
||
DINOMADNXT
|
||
MOVE *A8(OSLINK),A8,L
|
||
JRNZ DINOMADCK
|
||
DINOMADX
|
||
MMFM SP,A0,A1,A2,A3,A4,A5,A7,A8
|
||
RETS
|
||
*
|
||
*DINOCELEXFER - ALL OTHER DINOSAURS CELEBRATE XFER POINT
|
||
*
|
||
DINOCELEXFER
|
||
CALLA TREX_KILL
|
||
MOVE *A13(DATABLE),A10,L
|
||
MOVK DOWN,A11
|
||
JSRP DINOTURN
|
||
MOVK 4,A0
|
||
CALLA RANDU
|
||
DEC A0
|
||
ADDK CHEER1,A0
|
||
CALLR DINOLOAD
|
||
JRUC CELEBRATEAMATE
|
||
*
|
||
*DINOMADXFER - MAD DINOSAUR TRANSFER POINT
|
||
*
|
||
DINOMADXFER
|
||
CALLA TREX_KILL
|
||
MOVE *A13(DATABLE),A10,L
|
||
MOVE *A13(DDIR),A11,W
|
||
MOVE A11,A0
|
||
ADDI MADU,A0
|
||
CALLR DINOLOAD
|
||
JRUC CELEBRATEAMATE
|
||
|
||
*
|
||
*DINOQUESXFER - DINOSUAR LOOKS AT YOU STUPIDLY XFER POINT
|
||
*
|
||
DINOQUESXFER
|
||
CALLA TREX_KILL
|
||
MOVE *A13(DATABLE),A10,L
|
||
MOVK DOWN,A11
|
||
JSRP DINOTURN ;FACE FORWARD
|
||
MOVK 4,A0
|
||
CALLA RANDU
|
||
DEC A0
|
||
ADDI QUESTION,A0
|
||
CALLR DINOLOAD
|
||
JRUC CELEBRATEAMATE
|
||
|
||
*
|
||
*COMPLETE SOUNDS
|
||
COMPSNDTAB
|
||
.LONG REXCOMP_SND,BLOOPCOMP_SND,ELVISCOMP_SND,SPIKECOMP_SND
|
||
|
||
REXCOMP_SND
|
||
.WORD >F321,>78,>8083,0 ;REX COMPLETE SOUND
|
||
BLOOPCOMP_SND
|
||
.WORD >F321,>78,>8086,0 ;BLOOP COMPLETE SOUND
|
||
ELVISCOMP_SND
|
||
.WORD >F321,>78,>8085,0 ;ELVIS COMPLETE SOUND (NEW NAME SPIKE)
|
||
SPIKECOMP_SND
|
||
.WORD >F321,>78,>8084,0 ;SPIKE COMPLETE SOUND (NEW NAME GWEN)
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CELEBRATEAMATE - PROCESS TO KEEP RUNNING THE CELEBRATION ANIMATION SCR *
|
||
* A8 = OBJECT *
|
||
* A9 = SCRIPT *
|
||
* *
|
||
**************************************************************************
|
||
CELEBRATEAMATE
|
||
MOVK 3,A1
|
||
JSRP FRANIM
|
||
DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINOLOAD - LOAD THE DINOSAUR WALKING ANIMATION AND CORRECT VELOCITIES *
|
||
* A0 = INDEX *
|
||
* A8 = PTR TO DINOSAUR *
|
||
* A10 = PTR TO DINOSAUR ANIMATION TABLE *
|
||
* *A13(DVEL),L = CURRENT DINOSAUR VELOCITY *
|
||
* RETURNS: *
|
||
* A9 = PTR TO ANIMATION *
|
||
* X,Y & Z VELOCITIES STUFFED IN THE OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
DINOLOAD
|
||
MMTM SP,A0,A1,A2
|
||
MOVE A0,A1
|
||
SLL 6,A0
|
||
SLL 5,A1
|
||
ADD A1,A0
|
||
ADD A10,A0
|
||
MOVE *A0+,A9,L
|
||
MOVE *A0+,A1,L
|
||
MOVE *A0+,A2,L
|
||
CALLR UPDATE_VEL
|
||
MMFM SP,A0,A1,A2
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* UPDATE_VEL - UPDATE THE DINOSAUR WITH NEW VELOCITIES WITH RESPECT TO *
|
||
* *A13(DEVL),L. *
|
||
* A1 = CURRENT X VELOCITY *
|
||
* A2 = CURRENT Y VELOCITY *
|
||
* A8 = PTR TO DINOSAUR *
|
||
* *A13(DVEL),L = ABSOLUTE VELOCITY *
|
||
* *
|
||
**************************************************************************
|
||
UPDATE_VEL
|
||
PUSH A1
|
||
MOVE A1,A1 ;CHECK XVEL
|
||
JRZ UPDATE_V0X ;BR = IT'S ZERO
|
||
JRN UPDATE_VNX ;BR = NEGATIVE
|
||
MOVE *A13(DVEL),A1,L
|
||
JRUC UPDATE_V0X
|
||
UPDATE_VNX
|
||
MOVE *A13(DVEL),A1,L
|
||
NEG A1
|
||
UPDATE_V0X
|
||
MOVE A1,*A8(OXVEL),L ;STUFF NEW XVEL
|
||
MOVE A2,A1
|
||
JRZ UPDATE_V0Y
|
||
JRN UPDATE_VNY
|
||
MOVE *A13(DVEL),A1,L
|
||
JRUC UPDATE_V0Y
|
||
UPDATE_VNY
|
||
MOVE *A13(DVEL),A1,L
|
||
NEG A1
|
||
UPDATE_V0Y
|
||
MOVE A1,*A8(OYVEL),L ;STUFF NEW YVEL
|
||
MOVE A1,*A8(OZVEL),L ;A COPY FOR MISTER Z
|
||
PULL A1
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINO_VEL - ADJUST FOR A NEW X & Y VELOCITY. *
|
||
* A1 = ABSOLUTE VALUE OF THE NEW VELOCITY *
|
||
* A13 = PTR TO DINO DATA STRUCTURE *
|
||
* *
|
||
**************************************************************************
|
||
DINO_VEL
|
||
MMTM SP,A1,A3,A10
|
||
CMPI 18000H,A1
|
||
JRLS DV_OK
|
||
MOVI 18000H,A1 ;MAX DINOSAUR VELOCITY IS THIS
|
||
DV_OK
|
||
MOVE A1,*A13(DVEL),L ;SET THIS AS THE NEW VELOCITY
|
||
MOVI 96*RIGHT,A3
|
||
MOVE *A13(DATABLE),A10,L
|
||
ADD A10,A3
|
||
ADDK 32,A3
|
||
MOVE *A3,A3,L ;GET THE BASE VELOCITY
|
||
CMP A3,A1
|
||
JRNE DINO_VEL_SMULT ;THEY ARE NOT EQUAL, NEW DSMULT
|
||
CLR A3 ;0 = NO SCRIPT MULTIPLY
|
||
JRUC DINO_VEL_SX
|
||
DINO_VEL_SMULT
|
||
SLL 8,A3
|
||
DIVU A1,A3 ;CALCULATE A NEW SCRIPT MULTIPLIER
|
||
DINO_VEL_SX
|
||
MOVE A3,*A13(DSMULT),W
|
||
MMFM SP,A1,A3,A10
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINO_ADD_VEL - INCREASE/DECREASE CURRENT DINOSAUR VELOCITY BY THE *
|
||
* GIVEN AMOUNT. THE ABS(DVEL) IS NOT ALLOWED TO GO BELOW *
|
||
* DSPEED/2 + 1000H OR HIGHER THAN DSPEED*2 *
|
||
* A0 = AMOUNT TO INCREASE/DECREASE. *
|
||
* A8 = PTR TO DINOSAUR *
|
||
* A13 = PTR TO DINO DATA STRUCTURE. *
|
||
* *
|
||
**************************************************************************
|
||
DINO_ADD_VEL:
|
||
MMTM SP,A1,A2
|
||
MOVE *A13(DVEL),A1,L
|
||
ADD A0,A1
|
||
MOVE *A13(DSPEED),A2,W
|
||
ZEXT A2
|
||
SLL 5,A2 ;DSPEED*2 IS MAX
|
||
CMP A2,A1 ;TOO HIGH?
|
||
JRLE DINOAV_CK_LO ;BR = NO, CHECK THE LOW ROAD
|
||
MOVE A2,A1 ;GIVE MAX
|
||
JRUC DINOAV_ADJ
|
||
DINOAV_CK_LO
|
||
SRL 2,A2 ;DSPEED/2
|
||
ADDI 1000H,A2 ;+ 1000H
|
||
CMP A2,A1 ;TOO LOW?
|
||
JRGE DINOAV_ADJ ;BR = NO
|
||
MOVE A2,A1
|
||
DINOAV_ADJ
|
||
CALLR DINO_VEL ;RE-CALCULATE FOR THE NEW VELOCITY
|
||
MOVE *A8(OXVEL),A1,L
|
||
MOVE *A8(OYVEL),A2,L
|
||
CALLR UPDATE_VEL
|
||
MMFM SP,A1,A2
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINO_INIT_VEL - RESTORE THE DINOSAURS INITIAL VELOCITY TO THE CURRENT *
|
||
* WORKING VELOCITY. *
|
||
* A13 = PTR TO DINO DATA STRUCTURE *
|
||
* A8 = PTR TO DINOSAUR *
|
||
* *A13(DSPEED),W IS THE PACKED VEL. BITS 0 - 11 FRAC.; BITS 12-15 INT. *
|
||
* *
|
||
**************************************************************************
|
||
DINO_INIT_VEL:
|
||
MMTM SP,A1,A2
|
||
MOVB *A13(DVNFLAG),A1 ;ARE WE ALLOWED TO DO THIS
|
||
JRNE DINO_IVX ;BR = NO
|
||
MOVE *A13(DSPEED2),A1,W ;ARE WE ON SECONDARY VELOCITY
|
||
JRNZ DINO_IV_DS2 ;BR = YES, THEN USE IT
|
||
MOVE *A13(DSPEED),A1,W
|
||
DINO_IV_DS2
|
||
ZEXT A1
|
||
SLL 4,A1
|
||
CALLR DINO_VEL ;SETUP THE INITIAL VELOCITY
|
||
MOVE *A8(OXVEL),A1,L
|
||
MOVE *A8(OYVEL),A2,L
|
||
CALLR UPDATE_VEL
|
||
DINO_IVX
|
||
MMFM SP,A1,A2
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINO_VEL_NORMAL - ADVANCE THE CURRENT DINOSAUR SPEED TOWARD *
|
||
* THE VALUE IN DSPEED OR IF DSPEED2 <>0 THEN DSPEED2. *
|
||
* A13 = PTR TO DINOSAUR DATA STRUCTURE. *
|
||
* A8 = PTR TO DINOSAUR *
|
||
* *A13(DVNFLAG),B = IF<>0 THEN DO NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
DINO_VEL_NORMAL:
|
||
MMTM SP,A0,A1,A2
|
||
MOVB *A13(DVNFLAG),A1 ;ARE WE ALLOWED TO DO THIS
|
||
JRNE DINO_VNX ;BR = NO
|
||
MOVE *A13(DSPEED2),A1,W
|
||
JRNZ DINO_VN_DS2
|
||
MOVE *A13(DSPEED),A1,W
|
||
DINO_VN_DS2
|
||
ZEXT A1
|
||
SLL 4,A1 ;GET THE BASE DINO SPEED
|
||
MOVE *A13(DVEL),A0,L
|
||
SUB A0,A1
|
||
JRZ DINO_VNX ;BR = THEY ARE EQUAL, NO CHANGE NECES.
|
||
JRN DINO_VNN ;BR = MUST ADD NEGATIVE
|
||
MOVI 100H,A0
|
||
JRUC DINO_VN
|
||
DINO_VNN
|
||
MOVI -100H,A0
|
||
DINO_VN
|
||
CALLR DINO_ADD_VEL
|
||
DINO_VNX
|
||
MMFM SP,A0,A1,A2
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINO_FRANIM - FRANIM PRE-PROCESSOR TO ADD SCRIPT MULTIPLIER TO THE *
|
||
* FRANIM COMMAND. THEN CALL FRANIM. *
|
||
* CALL WITH FRANIM PARAMETERS *
|
||
* *A13(DSMULT),W = SCRIPT MULTIPLIER *
|
||
* RETURNS: *
|
||
* DIRECTLY FROM FRANIM *
|
||
* NOTE: CALL WITH JSRP *
|
||
* *
|
||
**************************************************************************
|
||
DINO_FRANIM:
|
||
MOVE *A13(DSMULT),A2,W
|
||
SLL 16,A2
|
||
MOVY A2,A1
|
||
JAUC FRANIM
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINOLOOK_TURN - HAVE DINOSAUR LOOK IN THE DIRECTION HE WILL TURN. *
|
||
* THEN TURN THAT WAY. *
|
||
* A8 = PTR TO DINOSAUR OBJECT *
|
||
* A10 = PTR TO DINOSAUR ANIMATION TABLE *
|
||
* A11 = NEW DIRECTION *
|
||
* *A13(DDIR),W = CURRENT DIRECTION *
|
||
* RETURNS: *
|
||
* A9 = PTR TO NEXT ANIMATION SCRIPT(SHOULD BE THE TURN ANIMATION) *
|
||
* A8,A10,A11 AS THEY WERE *
|
||
* NOTE: CALL WITH JSRP *
|
||
* *
|
||
**************************************************************************
|
||
DINOLOOK_TURN:
|
||
JSRP DINOLOOK
|
||
*
|
||
* JUST ANIMATE THE TURN SCRIPT TO GET TO THE NEW DIRECTION,
|
||
* CALL WITH THE SAME PARAMETERS AS DINOLOOK_TURN.
|
||
ANIMATE_TURN:
|
||
MOVK 1,A1
|
||
JSRP DINO_FRANIM ;AND ANIMATE IT
|
||
MOVE A11,*A13(DDIR),W
|
||
RETP
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINOLOOK - HAVE DINOSAUR LOOK IN THE DIRECTION HE WILL TURN. *
|
||
* A8 = PTR TO DINOSAUR OBJECT *
|
||
* A10 = PTR TO DINOSAUR ANIMATION TABLE *
|
||
* A11 = NEW DIRECTION *
|
||
* *A13(DDIR),W = CURRENT DIRECTION *
|
||
* RETURNS: *
|
||
* A9 = PTR TO NEXT ANIMATION SCRIPT(SHOULD BE THE TURN ANIMATION *
|
||
* A8,A10,A11 AS THEY WERE *
|
||
* NOTE: CALL WITH JSRP *
|
||
* DOES NOT STUFF THE NEW DIRECTION. *
|
||
* *
|
||
**************************************************************************
|
||
DINOLOOK:
|
||
MOVE *A13(DDIR),A1,W
|
||
SLL 5,A1
|
||
ADDI TURNTAB,A1
|
||
MOVE *A1,A1,L ;GET THE CORRECT TABLE TO SELECT FROM
|
||
MOVE A11,A2
|
||
SLL 3,A2
|
||
ADD A1,A2
|
||
MOVB *A2,A0
|
||
JRNN DINOLANI ;JUST DO THE LOOK
|
||
|
||
NOT A0
|
||
JRNZ DINOLOOKX
|
||
MOVE *A13(DDIR),A1,W ;FUCKIN' ABOUT FACE, MAN!
|
||
SLL 1,A1
|
||
ADDI ABOUTUL,A1
|
||
CALLA RANDOM ;LOOK IN A RANDOM DIRECTION
|
||
SRL 1,A0
|
||
JRNC DINOLOOK0
|
||
ADDK 1,A1
|
||
DINOLOOK0
|
||
MOVE A1,A0
|
||
DINOLANI
|
||
CALLR DINOLOAD ;LOAD THE CORRECT ANIMATION
|
||
MOVK 1,A1
|
||
JSRP DINO_FRANIM ;AND ANIMATE IT
|
||
DINOLOOKX
|
||
RETP
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINOTURN - TURN THE DINOSAUR FROM HIS CURRENT DIRECTION TO THE NEW *
|
||
* ONE GIVEN. *
|
||
* A8 = PTR TO DINOSAUR OBJECT *
|
||
* A10 = PTR TO DINOSAUR ANIMATION TABLE *
|
||
* A11 = NEW DIRECTION *
|
||
* *A13(DDIR),W = CURRENT DIRECTION *
|
||
* RETURNS: *
|
||
* A9 = PTR TO NEXT ANIMATION SCRIPT *
|
||
* A8,A10,A11 AS THEY WERE *
|
||
* NOTE: CALL WITH JSRP *
|
||
* *
|
||
**************************************************************************
|
||
DINOTURN:
|
||
MOVE *A13(DDIR),A1,W
|
||
SLL 5,A1
|
||
ADDI TURNTAB,A1
|
||
MOVE *A1,A1,L ;GET THE CORRECT TABLE TO SELECT FROM
|
||
MOVE A11,A2
|
||
SLL 3,A2
|
||
ADD A1,A2
|
||
MOVB *A2,A0
|
||
JRNN DINOTANI ;JUST DO THE TURN
|
||
NOT A0
|
||
JRNZ DINOTURNX ;BR = TABLE LOOKUP ERROR
|
||
|
||
MOVE *A13(DDIR),A1,W ;FUCKIN' ABOUT FACE, MAN!
|
||
SLL 1,A1
|
||
ADDI ABOUTUL,A1
|
||
CALLA RANDOM ;TURN IN A RANDOM DIRECTION
|
||
SRL 1,A0
|
||
JRNC DINOABOUT0
|
||
ADDK 1,A1
|
||
DINOABOUT0
|
||
MOVE A1,A0
|
||
|
||
DINOTANI
|
||
CALLR DINOLOAD ;LOAD THE CORRECT ANIMATION
|
||
|
||
****DINOTANIS
|
||
**** CALLA FRAMSKIP ;SKIP LOOK AROUND, JUST TURN
|
||
**** JRNC DINOTANIS ;BR = WE MUST SKIP TO THE END
|
||
CALLR SKIP_ANIMATION
|
||
|
||
**** MOVE A11,*A13(DDIR),W ;LET'S SEE WHAT HAPPENS
|
||
MOVK 1,A1
|
||
JSRP DINO_FRANIM ;AND ANIMATE IT
|
||
MOVE A11,*A13(DDIR),W
|
||
DINOTURNX
|
||
RETP
|
||
|
||
*
|
||
*TURN TABLE, SELECT CORRECT TABLE BASED ON CURRENT DIRECTION
|
||
TURNTAB
|
||
.LONG FROMUP,FROMDN,FROMLF,FROMRT
|
||
*
|
||
*DINOLOAD INDEX TABLES
|
||
* 0FEH = DO NOTHING, SAME DIRECTION
|
||
* 0FFH = ABOUT FACE
|
||
FROMUP .BYTE 0FEH,0FFH,TURNLU,TURNRU
|
||
FROMDN .BYTE 0FFH,0FEH,TURNLD,TURNRD
|
||
FROMLF .BYTE TURNUL,TURNDL,0FEH,0FFH
|
||
FROMRT .BYTE TURNUR,TURNDR,0FFH,0FEH
|
||
|
||
.EVEN
|
||
*
|
||
*DIRECTIONS TO ABOUT FACE FROM A GIVEN DIRECTION
|
||
ABOUT_TAB
|
||
.WORD RIGHT,LEFT
|
||
.WORD LEFT,RIGHT
|
||
.WORD UP,DOWN
|
||
.WORD DOWN,UP
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINOHHIT - DINO HIT A HORIZONTAL BAR *
|
||
* A0 = PTR TO DINOSAUR *
|
||
* A8 = PTR TO BAR *
|
||
* *
|
||
**************************************************************************
|
||
DINOHHIT:
|
||
PUSH A1
|
||
CALLR BUMP ;BASHES A1
|
||
BTST 1,A1
|
||
JREQ DINOHITX ;DIDN'T DO IT
|
||
JRUC DDEFLECT
|
||
**************************************************************************
|
||
* *
|
||
* DINOVHIT - DINO HIT A VERTICAL BAR *
|
||
* A0 = PTR TO DINOSAUR *
|
||
* A8 = PTR TO BAR *
|
||
* *
|
||
**************************************************************************
|
||
DINOVHIT:
|
||
PUSH A1
|
||
CALLR BUMP ;BASHES A1
|
||
BTST 0,A1
|
||
JREQ DINOHITX ;NOT A VALID COLLISION
|
||
*ENTRY POINT TO DEFLECT THE DINOSUAR
|
||
DDEFLECT:
|
||
CALLR IS_DINO_DEAD_A0
|
||
JRZ DINOHITX
|
||
|
||
MMTM SP,A0,A4,A3,A7,A8,A9
|
||
|
||
MOVE *A0(OPLINK),A4,L
|
||
JRZ DINOHIT_BAIL ;BR = NO PROCESS. BUM!
|
||
|
||
MOVB *A4(DTREXFLG),A3
|
||
JREQ DINOHIT_NORM
|
||
|
||
MOVE *A4(TCURMPOS),A3,L
|
||
MOVE A0,A9
|
||
CALLA FINDCMOVE
|
||
JRC DINOHIT_NTREX
|
||
ORIM M_NOCOLL,*A9(OFLAGS),W
|
||
JRUC DINOHIT_BAIL
|
||
DINOHIT_NTREX
|
||
MOVE A9,A0
|
||
DINOHIT_NORM
|
||
MOVE A8,A9 ;PASS WALL OBJECT
|
||
MOVE A0,A8 ;PASS THE DINOSAUR
|
||
MOVE A4,A0 ;PUT PROCESS PTR HERE FOR XFERPROC
|
||
MOVI DINODEFL,A7
|
||
CALLA XFERPROC_ID ;TRANSFER CONTROL OF THE PROCESS
|
||
|
||
DINOHIT_BAIL
|
||
MMFM SP,A0,A4,A3,A7,A8,A9
|
||
DINOHITX
|
||
PULL A1
|
||
DUMCRETS ;COLLISION RETURN TO CONTINUE SCAN
|
||
CLRZ
|
||
RETS
|
||
DUMSRETS
|
||
SETZ ;COLLISION RETURN TO STOP SCAN
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINODINO - DINO HIT ANOTHER DINOSAUR *
|
||
* A0 = PTR TO DINOSAUR *
|
||
* A8 = PTR TO OTHER DINOSAUR *
|
||
* *
|
||
**************************************************************************
|
||
DINODINO
|
||
MMTM SP,A1,A4,A5
|
||
|
||
CALLR IS_DINO_DEAD_A0 ;IS THIS DINO DEAD?
|
||
JRZ DINODINOX ;BR = YES
|
||
|
||
CALLR IS_DINO_DEAD_A8 ;IS THE OTHER DINO DEAD?
|
||
JRZ DINODINOX ;BR = YES
|
||
|
||
MOVE *A0(OPLINK),A4,L ;GET THIS DINOS CONTROL PROCESS
|
||
JRZ DINODINOX ;BR = NO CONTROLLING PROCESS, BAIL
|
||
MOVE *A8(OPLINK),A5,L ;GET THE OTHER DINOS CONTROL PROCESS
|
||
JRZ DINODINOX ;BR = NO CONTROL
|
||
|
||
MOVB *A5(DTREXFLG),A1 ;IS THE OTHER DINO A TYRANNO
|
||
JRNE DINODINOX ;BR = YES
|
||
|
||
MOVB *A5(DINVIN),A1 ;IS THE OTHER DINO INVINCIBLE
|
||
JRNE DINODINOX ;BR = YES, THEN DON'T FUCK WITH HIM
|
||
|
||
MOVB *A5(DDIZZYFLG),A1 ;CHECK DIZZY FLAG
|
||
JRNZ DINODINOX ;BR = HE'S A DIZ
|
||
|
||
MMTM SP,A0,A6,A7,A8,A9,A11
|
||
|
||
MOVB *A4(DTREXFLG),A1 ;IS THIS DINO A TYRANNO
|
||
JREQ DD_PUNCH_CK ;BR = NO
|
||
|
||
CALLA TROG_BUMP ;EASY BUMPER
|
||
JRZ DINODINO_BAIL
|
||
|
||
CALLR BONE_BETWEEN ;IS THERE A BONE BETWEEN THESE TWO
|
||
JRNZ DINODINO_BAIL ;BR = YES
|
||
|
||
*
|
||
*TREX SHALL JUMP UPON THE LITTLE DINO HERE
|
||
*
|
||
MOVB *A4(DPUNCHFLG),A7
|
||
JRNZ DINODINO_BAIL
|
||
CALLA PSTOP
|
||
MOVE A4,A11 ;TYRANNO PROC
|
||
MOVE A0,A9 ;TYRANNO OBJ
|
||
MOVK 2,A7
|
||
MOVB A7,*A5(DDIZZYFLG)
|
||
MOVB A7,*A4(DPUNCHFLG)
|
||
ORIM M_NOCOLL,*A8(OFLAGS),W ;MAKE SURE DINO COLLISIONS ARE OFF
|
||
MOVI DINO_STOMPED,A7
|
||
MOVE A5,A0
|
||
CALLA XFERPROC_ID ;TRANSFER THE SMASHEE
|
||
|
||
SWAP A8,A9
|
||
CALLA PSTOP
|
||
ORIM M_NOCOLL,*A8(OFLAGS),W ;MAKE SURE COLLISIONS ARE OFF
|
||
MOVE A5,A11
|
||
MOVI TREX_STOMP,A7
|
||
MOVE A4,A0
|
||
JRUC DINODINO_XFER
|
||
|
||
*
|
||
*CHECK IF THESE DINOS ARE PUNCHERS
|
||
*
|
||
DD_PUNCH_CK
|
||
MOVE A4,A1
|
||
MOVI GET_DINO_MPNT,A6
|
||
MOVI GET_DINO_MPNT,A7
|
||
CALLA PUNCHED
|
||
JRNZ DINODINO_BAIL
|
||
|
||
MOVE A0,A9
|
||
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
|
||
MOVI DINOOOF,A7
|
||
JRUC DINODINO_XFER
|
||
|
||
DINODINO_XFER
|
||
CALLA XFERPROC_ID ;TRANSFER CONTROL OF THE PROCESS
|
||
DINODINO_BAIL ;BAIL-OUT POINT FOR ERRORS
|
||
MMFM SP,A0,A6,A7,A8,A9,A11
|
||
DINODINOX
|
||
MMFM SP,A1,A4,A5
|
||
JRUC DUMCRETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINO_STOMPED - DINO IS TO BE STOMPED BY TREX *
|
||
* A8 = PTR TO DINO *
|
||
* A9 = PTR TO TREX OBJECT *
|
||
* A11 = PTR TO TREX PROCESS *
|
||
* A13 = PTR TO DINO PROCESS *
|
||
* *
|
||
**************************************************************************
|
||
DINO_STOMPED:
|
||
SLEEP 18
|
||
MOVE *A9(OZVAL),A0,L
|
||
DEC A0
|
||
MOVE A0,*A8(OZVAL),L ;DINO IS BEHIND TREX
|
||
MOVI SPROINGU,A0
|
||
JSRP FRANIMATE_DIR
|
||
MOVE A8,A0
|
||
CALLA SET_TZPOS ;LIE HIM FLAT
|
||
SLEEP 60
|
||
MOVI STANDU,A0
|
||
JSRP FRANIMATE_DIR
|
||
MOVE A8,A0
|
||
CALLA SET_ZPOS
|
||
JRUC DINOWXFER
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINOTAR - WALKED INTO A TAR PIT *
|
||
* A0 = PTR TO DINOSAUR *
|
||
* A8 = PTR TO TAR PIT *
|
||
* *
|
||
**************************************************************************
|
||
*
|
||
*SPECIAL ENTRY FOR BAITER TAR PIT. SKIPS THE BUMP CALL.
|
||
DINO_BAITTAR:
|
||
PUSH A1
|
||
JRUC DINOTARG
|
||
*
|
||
*THIS IS THE NORMAL ENTRY POINT
|
||
DINOTAR:
|
||
PUSH A1
|
||
CALLR BUMP ;BASHES A1
|
||
JRZ DINOTARX
|
||
DINOTARG
|
||
CALLR IS_DINO_DEAD_A0
|
||
JRZ DINOTARX
|
||
|
||
CALLA CK_OBJ_CENT
|
||
JRNC DINOTARX ;BR = HE'S STUCK IN IT
|
||
|
||
MOVE *A0(OPLINK),A1,L
|
||
JRZ DINOTARX ;BR = NO CONTROLLING PROCESS
|
||
|
||
MMTM SP,A0,A7,A8,A9
|
||
|
||
MOVB *A1(DTREXFLG),A7 ;IS THIS A TYRANNO MAN?
|
||
JRNZ DINOTAR_BAIL ;BR = YES, NO DEATHS FOR HIM
|
||
|
||
MOVB *A1(DINVIN),A7 ;IS HE INVINCIBLE?
|
||
JRNZ DINOTAR_BAIL ;BR = YES, NO DEATHS
|
||
|
||
MOVE A8,A9 ;PASS TAR OBJECT FOR YUKS
|
||
MOVE A0,A8 ;PASS THE DINOSAUR
|
||
MOVE A1,A0 ;FOR XFERPROC
|
||
MOVI DINOTAR_SINK,A7
|
||
CALLA XFERPROC_ID ;TRANSFER CONTROL OF THE PROCESS
|
||
|
||
CALLR MARK_DINO_DEAD
|
||
|
||
DINOTAR_BAIL
|
||
MMFM SP,A0,A7,A8,A9
|
||
DINOTARX
|
||
PULL A1
|
||
MOVE A0,A0 ;WITH Z BIT SET TO CONTINUE COLLISION
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINOFIRE - WALKED INTO A FIRE *
|
||
* A0 = PTR TO DINOSAUR *
|
||
* A8 = PTR TO FIRE *
|
||
* *
|
||
**************************************************************************
|
||
DINOFIRE:
|
||
PUSH A1
|
||
|
||
CALLR IS_DINO_DEAD_A0
|
||
JRZ DINOFIREX
|
||
|
||
CALLR BUMP ;BASHES A1
|
||
JRZ DINOFIREX ;BR = NO VALID COLLISIONS
|
||
|
||
CALLA CK_OBJ_CENT
|
||
JRNC DINOFIREX ;BR = HE'S SAFE
|
||
|
||
MOVE *A0(OPLINK),A1,L
|
||
JRZ DINOFIREX ;BR = NO CONTROLLING PROCESS
|
||
MMTM SP,A0,A7,A8,A9
|
||
|
||
MOVB *A1(DTREXFLG),A7 ;TYRANNO?
|
||
JRZ DINOFIRE_B ;BR = NO, JUST BURN
|
||
|
||
MOVE A8,A9 ;PASS FIRE OBJECT
|
||
MOVE A0,A8 ;PASS THE DINOSAUR
|
||
CREATE INDPID,WHLFIRE_EXT ;STOMP OUT THE FIRE
|
||
JRUC DINOFIRE_BAIL
|
||
|
||
DINOFIRE_B
|
||
MOVB *A1(DINVIN),A7 ;IS HE INVINCIBLE?
|
||
JRNZ DINOFIRE_BAIL ;BR = YES, NO DEATHS
|
||
|
||
MOVE A8,A9 ;PASS FIRE OBJECT FOR YUKS
|
||
MOVE A0,A8 ;PASS THE DINOSAUR
|
||
MOVI DINOFIRE_BURN,A7
|
||
MOVE A1,A0 ;FOR XFERPROC
|
||
CALLA XFERPROC_ID ;TRANSFER CONTROL OF THE PROCESS
|
||
|
||
CALLR MARK_DINO_DEAD
|
||
|
||
DINOFIRE_BAIL
|
||
MMFM SP,A0,A7,A8,A9
|
||
DINOFIREX:
|
||
PULL A1
|
||
MOVE A0,A0 ;WITH Z BIT SET TO CONTINUE COLLISION
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINOPIT - WALKED INTO A LOCAL PIT. *
|
||
* A0 = PTR TO DINOSAUR *
|
||
* A8 = PTR TO PIT *
|
||
* *
|
||
**************************************************************************
|
||
DINOPIT:
|
||
PUSH A1
|
||
|
||
CALLR IS_DINO_DEAD_A0
|
||
JRZ DINOPITX
|
||
|
||
CALLR BUMP ;BASHES A1
|
||
JRZ DINOPITX
|
||
CALLR CK_PIT_CENT ;CHECK IF WE'RE NEAR THE PIT CENTER
|
||
JRNC DINOPITX ;BR = HE'S SAFE
|
||
|
||
MOVE *A0(OPLINK),A1,L
|
||
JRZ DINOPITX ;BR = NO CONTROLLING PROCESS
|
||
MMTM SP,A0,A7,A8,A9
|
||
|
||
MOVB *A1(DTREXFLG),A7 ;IS HE QUITE LARGE?
|
||
JRNZ DINOPIT_BAIL ;BR = YES, THEN NO DEATH
|
||
|
||
MOVB *A1(DINVIN),A7 ;IS HE INVINCIBLE?
|
||
JRNZ DINOPIT_BAIL ;BR = YES, NO DEATHS
|
||
|
||
MOVE A8,A9 ;PASS PIT OBJECT
|
||
MOVE A0,A8 ;PASS THE DINOSAUR
|
||
MOVE A1,A0 ;FOR XFERPROC
|
||
MOVI DINOPIT_FALL,A7
|
||
CALLA XFERPROC_ID ;TRANSFER CONTROL OF THE PROCESS
|
||
|
||
CALLR MARK_DINO_DEAD
|
||
|
||
DINOPIT_BAIL
|
||
MMFM SP,A0,A7,A8,A9
|
||
DINOPITX:
|
||
PULL A1
|
||
MOVE A0,A0 ;WITH Z BIT SET TO CONTINUE COLLISION
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINOTUNNEL - WALKED INTO A TUNNEL. *
|
||
* A0 = PTR TO DINOSAUR *
|
||
* A8 = PTR TO TUNNEL *
|
||
* *
|
||
**************************************************************************
|
||
DINOTUNNEL:
|
||
PUSH A1
|
||
MOVE @CURPLYRS,A1,W
|
||
JRZ DINOTUNNEL_X
|
||
|
||
CALLR IS_DINO_DEAD_A0
|
||
JRZ DINOTUNNEL_X
|
||
|
||
CALLR BUMP ;BASHES A1
|
||
JRZ DINOTUNNEL_X
|
||
CALLR CK_PIT_CENT ;CHECK IF WE'RE NEAR THE PIT CENTER
|
||
JRNC DINOTUNNEL_X ;BR = HE'S SAFE
|
||
|
||
MOVE *A0(OPLINK),A1,L
|
||
JRZ DINOTUNNEL_X ;BR = NO CONTROLLING PROCESS
|
||
MMTM SP,A0,A7,A8,A9
|
||
MOVE A8,A9 ;PASS TUNNEL OBJECT
|
||
MOVE A0,A8 ;PASS THE DINOSAUR
|
||
MOVE A1,A0 ;FOR XFERPROC
|
||
MOVI INDPID,A1
|
||
MOVI TIME_WARP,A7
|
||
CALLA XFERPROC ;TRANSFER CONTROL OF THE PROCESS
|
||
|
||
CALLR MARK_DINO_DEAD
|
||
|
||
MMFM SP,A0,A7,A8,A9
|
||
DINOTUNNEL_X:
|
||
PULL A1
|
||
MOVE A0,A0 ;WITH Z BIT SET TO CONTINUE COLLISION
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINOFLOWER - DINOSAUR COLLIDES WITH FLOWER *
|
||
* A0 = PTR TO DINOSAUR *
|
||
* A8 = PTR TO FLOWER *
|
||
* *
|
||
**************************************************************************
|
||
DINOFLOWER:
|
||
MMTM SP,A0,A1,A2,A3,A7,A8,A10,A11
|
||
MOVI PSPEEDPID,A1
|
||
MOVI DINO_SPEEDUP,A7
|
||
JRUC DINO_PLANT_HIT
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINOSHROOM - DINOSAUR COLLIDES WITH MUSHROOM *
|
||
* A0 = PTR TO DINOSAUR *
|
||
* A8 = PTR TO FLOWER *
|
||
* *
|
||
**************************************************************************
|
||
DINOSHROOM:
|
||
MMTM SP,A0,A1,A2,A3,A7,A8,A10,A11
|
||
MOVI PSPEEDPID,A1
|
||
MOVI DINO_SLOWDOWN,A7
|
||
JRUC DINO_PLANT_HIT
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINOPAPPLE - DINOSAUR COLLIDES WITH THE POWER PINEAPPLE. *
|
||
* A0 = PTR TO DINOSAUR *
|
||
* A8 = PTR TO PINEAPPLE *
|
||
* *
|
||
**************************************************************************
|
||
DINOPAPPLE
|
||
MMTM SP,A0,A1,A2,A3,A7,A8,A10,A11
|
||
MOVI PTREXPID,A1
|
||
MOVI DINOXFORM,A7
|
||
JRUC DINO_PLANT_HIT
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINOHSHOE - DINOSAUR COLLIDES WITH THE "LUCKY" HORSESHOE. *
|
||
* A0 = PTR TO DINOSAUR *
|
||
* A8 = PTR TO HORSESHOE *
|
||
* *
|
||
**************************************************************************
|
||
DINOHSHOE
|
||
MMTM SP,A0,A1,A2,A3,A7,A8,A10,A11
|
||
MOVI INDPID,A1
|
||
MOVI CAN_INV,A7
|
||
JRUC DINO_PLANT_HIT
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINOICE - DINOSAUR COLLIDES WITH THE ICE CUBE. *
|
||
* A0 = PTR TO DINOSAUR *
|
||
* A8 = PTR TO ICE CUBE *
|
||
* *
|
||
**************************************************************************
|
||
DINOICE
|
||
MMTM SP,A0,A1,A2,A3,A7,A8,A10,A11
|
||
MOVI INDPID,A1
|
||
MOVI FREEZE_EM,A7
|
||
JRUC DINO_PLANT_HIT
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINOCHILI - DINOSAUR COLLIDES WITH THE CHILI PEPPER. *
|
||
* A0 = PTR TO DINOSAUR *
|
||
* A8 = PTR TO CHILI PEPPER *
|
||
* *
|
||
**************************************************************************
|
||
DINOCHILI
|
||
MMTM SP,A0,A1,A2,A3,A7,A8,A10,A11
|
||
MOVI PFIREPID,A1
|
||
MOVI SPIT_FIRE,A7
|
||
JRUC DINO_PLANT_HIT
|
||
|
||
*
|
||
*ENTRY FOR STUPID "ENEMY" THINGS
|
||
* A1 = PLAYER PROCID SUB-TYPE
|
||
* A7 = PROCESS TO CREATE FOR DINO
|
||
* A0 = DINO
|
||
* A8 = THING
|
||
*NOTE: A14 IS TRASHED
|
||
DINO_PLANT_HIT:
|
||
CALLR CK_PIT_CENT
|
||
JRNC DINO_PH_FL ;BR = DIDN'T CENTER UP ON THE PLANT
|
||
|
||
MOVE *A0(OPLINK),A10,L ;GET THE DINOSAURS CONTROL
|
||
JRZ DINO_PH_FL ;THE DINO IS OUT OF CONTROL
|
||
|
||
CALLR IS_DINO_DEAD_A0
|
||
JRZ DINO_PH_FL
|
||
|
||
MOVE A8,A11
|
||
MOVE A0,A8
|
||
MOVE *A10(DPLAYER),A2,L
|
||
MOVE *A2(PPID),A3,W
|
||
OR A3,A1 ;FORM PROCID UNIQUE TO THIS PLAYER
|
||
CALLA GETPRC ;AND CREATE THE PROCESS
|
||
;SEND: A8 = DINOSAUR PTR
|
||
; A10 = PTR TO DINOSAUR PROCESS
|
||
MOVI 775H,A1
|
||
CALLA SCORE
|
||
MOVE A11,A8
|
||
CALLA FREE_MOVE_EGG
|
||
|
||
MOVE *A8(OPLINK),A0,L
|
||
JRZ DP_DEL
|
||
MOVI PLANT_STALL,A7
|
||
CALLA XFERPROC_ID
|
||
DP_DEL
|
||
MOVI ENEMIES,A1
|
||
CALLA DELETE_OBJ_SUPP
|
||
SETZ ;END THIS SCAN PLEASE
|
||
JRUC DINO_PH_X
|
||
DINO_PH_FL
|
||
CLRZ
|
||
DINO_PH_X
|
||
MMFM SP,A0,A1,A2,A3,A7,A8,A10,A11
|
||
RETS
|
||
*
|
||
*PLANT_STALL - JUST MAKE THE PLANT PROC HANG HERE FOR SOMETIME.
|
||
*
|
||
PLANT_STALL
|
||
MOVI 5*60,B0
|
||
MOVI 8*60,B1
|
||
CALLA RANGRAND
|
||
SLEEPR A0
|
||
DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINO_SPEEDUP - PROCESS TO SPEED UP THE DINOSAUR FOR A WHILE *
|
||
* A8 = PTR TO DINOSAUR *
|
||
* *
|
||
**************************************************************************
|
||
DINO_SPEEDUP
|
||
MOVE *A13(PROCID),A0,W
|
||
CLR A1
|
||
NOT A1
|
||
CALLA KILALLA8 ;KILL THIS DINOS PROCS
|
||
MOVE *A8(OPLINK),A10,L
|
||
JRZ DINO_SU_X
|
||
MOVB *A10(DTREXFLG),A0
|
||
JREQ DINO_SNS
|
||
MOVI REXGROWL_SND,A0
|
||
JRUC DINO_SS
|
||
DINO_SNS
|
||
MOVI DINOSPEED_SND,A0
|
||
DINO_SS
|
||
CALLA ONESND
|
||
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(DVEL),A0,L
|
||
MOVI 4000H,A0
|
||
CALLA DINO_ADD_VEL
|
||
MOVE A11,A13 ;RETRIEVE CURPROC FOR SLEEP
|
||
SLEEP 12*60
|
||
CLR A0
|
||
MOVB A0,*A10(DVNFLAG) ;VELOCITY TO NORMAL
|
||
DINO_SU_X
|
||
DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINO_SLOWDOWN - PROCESS TO SLOW DOWN THE DINOSAUR FOR A WHILE *
|
||
* A8 = PTR TO DINOSAUR *
|
||
* *
|
||
**************************************************************************
|
||
DINO_SLOWDOWN:
|
||
MOVE *A13(PROCID),A0,W
|
||
CLR A1
|
||
NOT A1
|
||
CALLA KILALLA8
|
||
MOVE *A8(OPLINK),A10,L
|
||
JRZ DINO_SD_X
|
||
MOVB *A10(DTREXFLG),A0
|
||
JREQ DINO_SDNS
|
||
MOVI REXGROWL_SND,A0
|
||
JRUC DINO_SDS
|
||
DINO_SDNS
|
||
MOVI DINOSHROOM_SND,A0
|
||
DINO_SDS
|
||
CALLA ONESND
|
||
MOVE A13,A11 ;SAVE CURPROC POINTER
|
||
MOVE A10,A13 ;PASS DINO DATA STRUCTURE
|
||
MOVK 1,A0
|
||
MOVB A0,*A13(DVNFLAG) ;I AM MASTER
|
||
MOVI -4000H,A0
|
||
CALLA DINO_ADD_VEL
|
||
MOVE A11,A13 ;RETRIEVE CURPROC FOR SLEEP
|
||
SLEEP 5*60
|
||
CLR A0
|
||
MOVB A0,*A10(DVNFLAG)
|
||
DINO_SD_X:
|
||
DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CAN_INV - TURN THIS DINOSAUR INVINCIBLE FOR A CANNED AMOUNT OF TIME. *
|
||
* A8 = PTR TO DINOSAUR *
|
||
* *
|
||
**************************************************************************
|
||
CAN_INV
|
||
MOVE *A8(OPLINK),A11,L
|
||
JRZ CAN_INVX
|
||
|
||
**** MOVI 280,A10
|
||
MOVE @POWERUP_DURATION,A10,W
|
||
SRL 2,A10
|
||
ADDI 50,A10
|
||
|
||
SWAP A11,A13
|
||
CALLR START_INVINCIBILITY
|
||
SWAP A11,A13
|
||
SOUND1 HSHOE_SND
|
||
CAN_INVX
|
||
DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* BUMP - CHECK TO SEE IF THE OBJECT IN A0 BUMPED INTO THE OBJECT IN A8. *
|
||
* A0 = OBJECT TO BE CHECKED *
|
||
* 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 *
|
||
* *
|
||
**************************************************************************
|
||
BUMP
|
||
PUSH A2
|
||
CLR A1
|
||
MOVE *A0(OXVEL),A2,L
|
||
JRZ BUMPCKY ;NOT MOVING IN X, NO BUMP
|
||
CALLA WHICHSID
|
||
CALLR BUMPCK
|
||
JRZ BUMPCKY
|
||
MOVE *A8(OXVEL),A2,L
|
||
JRZ BUMPA8XY
|
||
NOTC ;LEFT/RIGHT SWAP
|
||
CALLR BUMPCK
|
||
JRNZ BUMPEDINX ;HE BUMPED WHILE MOVING IN X
|
||
JRUC BUMPCKY ;HE'S FREE TO ROAM
|
||
BUMPA8XY
|
||
MOVE *A8(OYVEL),A2,L
|
||
JRZ BUMPEDINX ;NO DOUBT ABOUT IT, HE BUMPED IT
|
||
CALLA ABOVBELO
|
||
NOTC ;ABOVE/BELOW SWAP
|
||
CALLR BUMPCK
|
||
JRZ BUMPCKY
|
||
BUMPEDINX
|
||
CALLR VALIDHITX
|
||
JRNC BUMPCKY ;BR = THEY WERE NOT ON THE SAME PATH
|
||
BSET 0,A1 ;SHOW THE X BUMP
|
||
BUMPCKY
|
||
MOVE *A0(OYVEL),A2,L
|
||
JRZ BUMPX
|
||
CALLA ABOVBELO ;ABOVE OR BELOW THE OBJECT
|
||
CALLR BUMPCK
|
||
JRZ BUMPX
|
||
MOVE *A8(OYVEL),A2,L
|
||
JRZ BUMPA8YX
|
||
NOTC ;ABOVE/BELOW SWAP
|
||
CALLR BUMPCK
|
||
JRNZ BUMPEDINY ;HE BUMPED WHILE MOVING IN Y
|
||
JRUC BUMPX ;HE'S FREE TO ROAM
|
||
BUMPA8YX
|
||
MOVE *A8(OXVEL),A2,L
|
||
JRZ BUMPEDINY ;NO DOUBT ABOUT IT, HE BUMPED IT
|
||
CALLA WHICHSID
|
||
NOTC ;LEFT/RIGHT SWAP
|
||
CALLR BUMPCK
|
||
JRZ BUMPX
|
||
BUMPEDINY
|
||
CALLR VALIDHITY
|
||
JRNC BUMPX ;BR = THEY WERE NOT ON THE SAME PATH
|
||
BSET 1,A1
|
||
BUMPX
|
||
MOVE A1,A1 ;SET THE STATUS REGISTER
|
||
PULL A2
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* BUMPCK - DETERMINE WHETHER OR NOT THE GIVEN VALUES COULD POSSIBLY *
|
||
* CONSTITUTE A VALID BUMP BASED ON THE FOLLOWING TABLES: *
|
||
* X+ X- Y+ Y- *
|
||
* ---------- ---------- *
|
||
* LEFT | 1 0 | ABOVE | 1 0 | *
|
||
* RIGHT | 0 1 | BELOW | 0 1 | *
|
||
* ---------- ---------- *
|
||
* A2 = VELOCITY (32) *
|
||
* C = AS RETURNED FROM "WHICHSID" OR "ABOVBELO" *
|
||
* RETURNS: *
|
||
* Z = FALSE *
|
||
* NZ = TRUE *
|
||
* C = UNCHANGED *
|
||
* NOTE: A14 IS NOT GUARANTEED TO RETURN *
|
||
* *
|
||
**************************************************************************
|
||
BUMPCK
|
||
MOVE A2,A2 ;SET N,Z,V
|
||
JRC BUMPRORB ;THIS IS A RIGHT OR BELOW CASE
|
||
JRNN BUMPCKX ;1 IF HE'S MOVING RIGHT, 0 IF STOPPED
|
||
SETZ ;RETURN FALSE
|
||
JRUC BUMPCKX
|
||
BUMPRORB
|
||
JRN BUMPCKX ;TRUE IF HE'S MOVING
|
||
SETZ ;OTHERWISE FALSE
|
||
BUMPCKX
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* VALIDHITX - CHECK TWO COLLIDED OBJECTS TO MAKE SURE THEY ARE ON THE *
|
||
* SAME X PATH. *
|
||
* A0 = OBJECT THAT HIT *
|
||
* A8 = OBJECT THAT WAS HIT *
|
||
* RETURNS: *
|
||
* C = VALID HIT *
|
||
* NC = NOT VALID *
|
||
* *
|
||
**************************************************************************
|
||
VALIDHITX
|
||
MMTM SP,A1,A2,A3,A8
|
||
CALLA GETCPNT ;GET OBJECTS CENTER POINT
|
||
MOVY A1,A2
|
||
SRL 16,A2
|
||
MOVE A2,A3
|
||
MOVE @BOXDIM+16,A1,W ;GET THE TYPICAL Y OF A BOX
|
||
SRA 1,A1
|
||
SUB A1,A2
|
||
ADD A1,A3
|
||
MOVE A0,A8
|
||
CALLA GETCPNT
|
||
SRL 16,A1
|
||
CALLA CHKRANGE ;CENTER Y WITHIN BAR?
|
||
MMFM SP,A1,A2,A3,A8
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* VALIDHITY - CHECK TWO COLLIDED OBJECTS TO MAKE SURE THEY ARE ON THE *
|
||
* SAME Y PATH. *
|
||
* A0 = OBJECT THAT HIT *
|
||
* A8 = OBJECT THAT WAS HIT *
|
||
* RETURNS: *
|
||
* C = VALID HIT *
|
||
* NC = NOT VALID *
|
||
* *
|
||
**************************************************************************
|
||
VALIDHITY
|
||
MMTM SP,A1,A2,A3,A8
|
||
CALLA GETCPNT ;GET CENTER POINT OF THE THING HIT
|
||
CLR A2
|
||
MOVX A1,A2
|
||
MOVE A2,A3
|
||
MOVE @BOXDIM,A1,W ;GET THE TYPICAL X OF A BOX
|
||
SRA 1,A1
|
||
SUB A1,A2
|
||
ADD A1,A3
|
||
MOVE A0,A8
|
||
CALLA GETCPNT
|
||
ZEXT A1
|
||
CALLA CHKRANGE ;CENTER X WITHIN BAR?
|
||
MMFM SP,A1,A2,A3,A8
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* BONE_BETWEEN - DETERMINE IF THERE IS A BONE BETWEEN TWO DUDES. *
|
||
* A0 = PTR TO ONE DUDES OBJECT *
|
||
* A4 = PTR TO HIS PROCESS *
|
||
* A5 = PTR TO OTHER DUDES PROCESS *
|
||
* A8 = PTR TO OTHER DUDES OBJECT *
|
||
* RETURNS: *
|
||
* Z = NO BONES BETWEEN *
|
||
* NZ = BONE *
|
||
* NOTE: TRASHES A14 *
|
||
* *
|
||
**************************************************************************
|
||
BONE_BETWEEN
|
||
MMTM SP,A0,A1,A3,A6,A7,A8
|
||
MOVE A0,A7
|
||
CALLA GETCPNT ;GET ONE CENTER
|
||
CALLA FIND_CLOSE_CPNT
|
||
MOVE A3,A6
|
||
MOVE A7,A8
|
||
MOVE A0,A7
|
||
CALLA GETCPNT ;GET THE OTHER
|
||
CALLA FIND_CLOSE_CPNT
|
||
|
||
CMPXY A3,A6
|
||
JRYEQ BONE_BETWEEN_LR ;BR = SAME Y LINE CHECK LEFT OR RIGHT
|
||
JRXNE BONE_BETWEEN_NO ;BR = WIERD POINT, TEST NEGATIVE
|
||
JRYGT BONE_BETWEEN_DOWN
|
||
MOVI UP,A1
|
||
JRUC BONE_BETWEEN_TEST
|
||
BONE_BETWEEN_DOWN
|
||
MOVK DOWN,A1
|
||
JRUC BONE_BETWEEN_TEST
|
||
BONE_BETWEEN_LR
|
||
JRXEQ BONE_BETWEEN_NO ;BR = SAME POINT
|
||
JRXGT BONE_BETWEEN_RIGHT
|
||
MOVK LEFT,A1
|
||
JRUC BONE_BETWEEN_TEST
|
||
BONE_BETWEEN_RIGHT
|
||
MOVK RIGHT,A1
|
||
BONE_BETWEEN_TEST
|
||
MOVE *A0(CMOVEMPTR),A0,L ;GET THE MOVE PTR FOR THIS GUY
|
||
CALLA ONE_MOVE ;GET ONE MOVE AWAY
|
||
MOVB *A1(MOVEPLYR),A1 ;IS THERE A BONE HERE
|
||
JRN BONE_BETWEEN_NO ;BR = NO
|
||
**** JRUC BONE_BETWEEN_YES
|
||
BONE_BETWEEN_YES
|
||
CLRZ
|
||
JRUC BONE_BETWEEN_X
|
||
BONE_BETWEEN_NO
|
||
SETZ
|
||
BONE_BETWEEN_X
|
||
MMFM SP,A0,A1,A3,A6,A7,A8
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINODEFL - DINOSAUR BAR DEFLECT PROCESS. *
|
||
* A8 = PTR TO DINOSAUR OBJECT *
|
||
* A9 = PTR TO BAR OBJECT *
|
||
* A13 = PTR TO DINOSAUR PROCESS DATA STRUCTURE *
|
||
* NOTE: THIS PROCESS TRANSFERS TO DINOWXFER *
|
||
* *
|
||
**************************************************************************
|
||
DINODEFL
|
||
MOVE *A13(DATABLE),A10,L ;FIRST WE NEED THE ANIMATION TABLE
|
||
MOVE *A13(DDIR),A0,W ;AND THEN WE NEED THE DIRECTION
|
||
ADDK STANDU,A0
|
||
CALLR DINOLOAD
|
||
MOVK 4,A1
|
||
JSRP FRANIM ;LOAD THE STANDING FRAME
|
||
CALLR DINO_NEW_MOVE ;CHECK FOR A NEW MOVE
|
||
CALLA BONED_IN_GREY
|
||
JRNZ DD_NO_BLOCK
|
||
|
||
*JUST IN CASE DINO BOY IS STUCK IN FOUR GREY BONES?
|
||
MOVE A0,A5 ;SAVE CURRENT MOVE POINT
|
||
|
||
MOVE A0,A1
|
||
MOVE *A13(DDIR),A0,W ;AND THEN WE NEED THE DIRECTION
|
||
CALLA TWO_MOVES
|
||
JRNZ DD_NEW_MOVE
|
||
|
||
*CASE, NEXT TWO MOVES IN DINO DIRECTION ARE NON-EXISTANT
|
||
* JUST LOOK FOR A GOOD ONE
|
||
CLR A0 ;MOVK UP,A0
|
||
|
||
DD_NEXT_SRCH
|
||
MOVE A5,A1
|
||
CALLA TWO_MOVES
|
||
JRNZ DD_NEW_MOVE
|
||
INC A0
|
||
CMPI RIGHT,A0
|
||
JRLS DD_NEXT_SRCH
|
||
JRUC DD_NO_BLOCK ;FAILURE ALL THE WAVE
|
||
|
||
*A1 = NEW MOVE POINT, TWO AWAY
|
||
DD_NEW_MOVE
|
||
MOVE *A1(MOVEPOS),A1,L
|
||
CALLR DINO_NEW_PNT ;ALIGN THE DINO
|
||
CALLR DINO_NEW_MOVE ;AND DO THE HONORS
|
||
|
||
DD_NO_BLOCK
|
||
MOVE A13,A12
|
||
ADDI PRCSIZ,A12 ;RESET PROCESS STACK POINTER
|
||
JRUC DINOWLP ;AND STOP HIM
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINOCHOOSE - CHOOSE WHICH WAY TO TURN OUT OF THREE GIVEN DIRECTIONS. *
|
||
* A0 = PTR TO MOVE THAT THE DINOSAUR IS CURRENTLY ON. *
|
||
* A5 = ABOUT FACE *
|
||
* A6 = ADJACENT DIRECTION 1 *
|
||
* A7 = ADJACENT DIRECTION 2 *
|
||
* A8 = PTR TO DINOSAUR *
|
||
* *A13(DDIR),W = CURRENT DINOSAUR DIRECTION. *
|
||
* RETURNS: *
|
||
* A11 = CHOSEN DIRECTION *
|
||
* *
|
||
**************************************************************************
|
||
DINOCHOOSE
|
||
PUSH A0
|
||
JRUC DINOCHOOSE_G
|
||
*
|
||
*DINOCHOOSE_CENT - ENTRYPOINT WITH PTR TO CENTER POINT IN A0
|
||
DINOCHOOSE_CENT
|
||
PUSH A0
|
||
MOVE *A0(CMOVEMPTR),A0,L ;GET THE CORRESPONDING MOVE POINTER
|
||
DINOCHOOSE_G
|
||
MMTM SP,A1,A2,A3,A4,A5,A6,A7,A9,A10
|
||
MOVE A0,A1
|
||
MOVE A0,A10
|
||
MOVE A5,A2
|
||
MOVE A6,A3
|
||
MOVE A7,A4
|
||
|
||
MOVE A6,A0
|
||
CALLR DINO_SEARCH_SAFE
|
||
MOVE A7,A0
|
||
MOVE A5,A7
|
||
MOVE A6,A9
|
||
CALLR DINO_SEARCH_SAFE
|
||
|
||
*ADD THIS CODE TO ADD THE DIFFICULTY OF A STUPID DINO
|
||
**** MOVE *A8(OPLINK),A0,L ;GET THE PROCESS LINK
|
||
**** JRZ DINOCHOOSE_EASY ;BR = NO CONTROL, CHOOSE EASY
|
||
**** MOVE *A0(DPLAYER),A0,L ;GET THE PLAYER PTR
|
||
**** JRZ DINOCHOOSE_EASY ;BR = NOT A PLAYER
|
||
**** MOVE *A0(PCONSECUTIVE),A1,W ;WE'LL NEED THIS A FEW TIMES
|
||
**** MOVE *A0(PBOZO),A0,W ;IS HE A BOZO
|
||
**** JRNZ DINOCHOOSE_EASY ;BR = YES
|
||
**** MOVE @START_BONE,A0,W
|
||
**** CMP A0,A1
|
||
**** JRGE DINOCHOOSE_HARD
|
||
**** MOVE @STOP_SEARCH,A0,W
|
||
**** CMP A0,A1
|
||
**** JRGE DINOCHTOSS
|
||
|
||
*
|
||
*CHOOSE THE EASIEST WAY
|
||
DINOCHOOSE_EASY
|
||
CMPI EGG_RATING,A6 ;IS THERE AT LEAST AN EGG IN SIGHT?
|
||
JRHS DINOC_EASY_CMP ;BR = YES
|
||
CMPI EGG_RATING,A9 ;HOW ABOUT THIS DIRECTION?
|
||
JRHS DINOC_EASY_CMP ;BR = YES
|
||
*GRAB THE THE BEST DIRECTION TO THE NEXT EGG OR HOUSE
|
||
CALLA DINO_FIND_CLOSEST ;GET THE CLOSEST EGG OR HOUSE
|
||
JRZ DINOC_EASY_CMP
|
||
MOVE A10,A0 ;RESTORE CURRENT MOVE POINTER
|
||
MOVE A4,A10 ;SAVE CHOOSE1
|
||
MOVE A1,A4 ;PASS OBJECT TO GET_BEST
|
||
CALLA GET_BEST_DIRECTION ;FIND THE WAY TO THE EGG OR HOUSE
|
||
JRZ DINOC_EASY_DIR ;BR = CAN'T GO THAT WAY
|
||
MOVE A10,A4
|
||
CMP A1,A3 ;IS THE BEST, AN ADJACENT?
|
||
JREQ DINOCH0 ;YES, CHOOSE IT
|
||
CMP A1,A4 ;HOW A BOUT THE OTHER ADJACENT
|
||
JREQ DINOCH1 ;YES, CHOOSE IT
|
||
DINOC_EASY_DIR
|
||
MOVE A10,A4
|
||
DINOC_EASY_CMP
|
||
CMP A6,A9 ;COMPARE RATINGS
|
||
JRLT DINOCH1
|
||
JRNE DINOCH0
|
||
CMP A5,A7
|
||
JRLT DINOCH1
|
||
JRNE DINOCH0
|
||
JRUC DINOCHTOSS
|
||
*
|
||
*CHOOSE THE HARDEST WAY
|
||
DINOCHOOSE_HARD
|
||
CMP A6,A9 ;COMPARE RATINGS
|
||
JRLT DINOCH0
|
||
JRNE DINOCH1
|
||
CMP A5,A7
|
||
JRLT DINOCH0
|
||
JRNE DINOCH1
|
||
*
|
||
*BOTH ARE EQUAL, TOSS A COIN
|
||
DINOCHTOSS
|
||
CALLA RANDOM
|
||
SLL 1,A0
|
||
JRC DINOCH1
|
||
DINOCH0
|
||
MOVE A3,A11
|
||
JRUC DINOCHX
|
||
DINOCH1
|
||
MOVE A4,A11
|
||
DINOCHX
|
||
MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A9,A10
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINOPUNCH - TRANSFER THE DINOSAUR PROCESS HERE WHEN YOU WISH TO PUNCH. *
|
||
* A8 = PTR TO DINO OBJECT *
|
||
* A13 = PTR TO DINO PROCESS *
|
||
* RETURN ADDRESS OF DINO PROCESS SHOULD BE PUSHED ON THE PROCESS STACK *
|
||
* *
|
||
**************************************************************************
|
||
DINOPUNCH
|
||
MOVE *A8(OIMG),A1,L
|
||
MOVE *A8(OXVEL),A2,L
|
||
MOVE *A8(OYVEL),A3,L
|
||
MOVE *A8(OZVEL),A4,L
|
||
|
||
MMTM A12,A1,A2,A3,A4,A9 ;SAVE MOST VITAL INFO
|
||
|
||
MOVE *A13(DDIR),A11,W
|
||
CALLR DINO_STICK
|
||
JRC DP_DOIT
|
||
JRZ DP_DOIT
|
||
MOVE A6,A11
|
||
MOVE A11,*A13(DDIR),W
|
||
MOVK 1,A0
|
||
JRUC DP_DIR_CHANGED
|
||
DP_DOIT
|
||
CLR A0
|
||
DP_DIR_CHANGED
|
||
PUSHP A0
|
||
MOVI PUNCHU,A0
|
||
CALLA LOAD_DIR
|
||
CALLA RANDOM
|
||
JRN DP_RIGHTHOOK
|
||
|
||
CALLA SKIP_ANIMATION
|
||
|
||
DP_RIGHTHOOK
|
||
MOVK 1,A1
|
||
JSRP FRANIM
|
||
MOVK 2,A1
|
||
MOVB A1,*A13(DPUNCHFLG)
|
||
SLEEP 4 ;ALLOW OTHERS TO INTERACT
|
||
CLR A1
|
||
MOVB A1,*A13(DPUNCHFLG)
|
||
PULLP A0
|
||
MOVE A0,A0
|
||
JRZ DP_NO_CHANGE
|
||
MMFM A12,A1,A2,A3,A4,A9
|
||
MOVE *A13(DWALKFRM),A0,L
|
||
CMP A0,A9
|
||
JRNE DP_NOT_WALKING
|
||
CALLR DINO_WALK_LOAD
|
||
PULLP A0
|
||
JRUC DP_JUMP
|
||
DP_NOT_WALKING
|
||
PULLP A0
|
||
JRUC DP_RESTUFF_VEL
|
||
DP_NO_CHANGE
|
||
MMFM A12,A0,A1,A2,A3,A4,A9
|
||
DP_RESTUFF_VEL
|
||
MOVE A2,*A8(OXVEL),L
|
||
MOVE A3,*A8(OYVEL),L
|
||
MOVE A4,*A8(OZVEL),L
|
||
MOVE *A8(OFLAGS),A4,W
|
||
CALLA ANI ;RESTORE OLD FRAME
|
||
DP_JUMP
|
||
JUMP A0 ;AND JUMP BACK TO OLD CODE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINOOOF - PROCESS TO MAKE DINO REACT TO PUNCH THEN FALL DOWN. *
|
||
* COMMUNCATES WITH DINOPUNCH VIA PCOMM IN THE PROCESS BLOCK *
|
||
* A8 = PTR TO DINOSAUR OBJECT *
|
||
* A9 = PTR TO PUNCHING DINOSAUR *
|
||
* A13 = PTR TO DINOSAUR PROCESS *
|
||
* NOTE: THIS PROCESS ULTIMATELY TRANSFERS TO DINOWXFER *
|
||
* *
|
||
**************************************************************************
|
||
DINOOOF:
|
||
MOVK 1,A0
|
||
MOVB A0,*A13(DDIZZYFLG)
|
||
MOVE *A13(DATABLE),A10,L ;FIRST WE NEED THE ANIMATION TABLE
|
||
MOVE *A13(DDIR),A11,W ;AND THEN WE NEED THE DIRECTION
|
||
MOVI OOFU,A0
|
||
ADD A11,A0
|
||
CALLA DINOLOAD
|
||
|
||
MOVB *A13(THITS),A0
|
||
INC A0
|
||
CMPI HITS_TO_KO,A0
|
||
JRHS DO_KNOCKOUT
|
||
MOVB A0,*A13(THITS)
|
||
|
||
SOUND1 TROGCLUB_SND
|
||
MOVK 1,A1
|
||
JSRP FRANIM ;DO A HEAD BOP
|
||
JRUC DINOWXFER
|
||
|
||
DO_KNOCKOUT
|
||
CLR A0
|
||
MOVB A0,*A13(THITS)
|
||
|
||
SOUND1 TROGHEAD_SND
|
||
**** MOVK 1,A1
|
||
**** JSRP FRANIM ;DO A HEAD BOP
|
||
|
||
MOVK 2,A0 ;MAKE HIM A DIFFERENT DIZZY
|
||
MOVB A0,*A13(DDIZZYFLG)
|
||
CALLA SEE_STARS
|
||
MOVI BUMPU,A0
|
||
JSRP FRANIMATE_DIR
|
||
JRUC DINOWXFER ;GET BACK ON YOUR FEET
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINO_TROG_CLUB - PROCESS TO MAKE DINO REACT TO A TROG CLUB THEN JUMP *
|
||
* TO THE EATING SEQUENCE. *
|
||
* COMMUNCATES WITH TROG_PUNCH VIA PCOMM IN THE PROCESS BLOCK *
|
||
* A8 = PTR TO DINOSAUR OBJECT *
|
||
* *A13(DATABLE),L = PTR TO ANIMATION TABLE *
|
||
* *A13(DDIR),W = CURRENT DINO DIRECTION *
|
||
* NOTE: THIS PROCESS ULTIMATELY TRANSFERS TO DINODEATH_XFER *
|
||
* *
|
||
**************************************************************************
|
||
DINO_TROG_CLUB
|
||
CALLR MARK_DINO_DEAD
|
||
|
||
MOVK 1,A0
|
||
MOVB A0,*A13(DDIZZYFLG)
|
||
|
||
CALLA GETCPNT
|
||
CALLA FIND_CLOSE_CPNT ;GET THE CURRENT CLOSEST C-POINT
|
||
MOVE A3,*A13(DINITPOS),L ;KEEP IN CASE WE DEFAULT AFTER PUNCH
|
||
MOVI CLUBOUTU,A0
|
||
JSRP ANIMATE_DIR
|
||
|
||
CALLA SEE_STARS
|
||
|
||
MOVK 1,A1
|
||
JSRP FRANIM ;BE DIZZY
|
||
|
||
MOVK ACK_TROG_PUNCH,A0
|
||
MOVB A0,*A13(PCOMM) ;TELL TROG WE ARE TRASHED
|
||
|
||
MOVK 1,A1
|
||
JSRP FRANIM ;AND ANIMATE THE DROP
|
||
|
||
JRUC DTOOF_COMM_WAIT
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINO_TROG_OOF - PROCESS TO MAKE DINO REACT TO A TROG PUNCH AND EAT. *
|
||
* COMMUNCATES WITH TROG_PUNCH VIA PCOMM IN THE PROCESS BLOCK *
|
||
* A8 = PTR TO DINOSAUR OBJECT *
|
||
* *A13(DATABLE),L = PTR TO ANIMATION TABLE *
|
||
* *A13(DDIR),W = CURRENT DINO DIRECTION *
|
||
* NOTE: THIS PROCESS ULTIMATELY TRANSFERS TO DINODEATH_XFER *
|
||
* *
|
||
**************************************************************************
|
||
DINO_TROG_OOF
|
||
CALLR MARK_DINO_DEAD
|
||
MOVK 1,A0
|
||
MOVB A0,*A13(DDIZZYFLG)
|
||
CALLA GETCPNT
|
||
CALLA FIND_CLOSE_CPNT ;GET THE CURRENT CLOSEST C-POINT
|
||
MOVE A3,*A13(DINITPOS),L ;KEEP IN CASE WE DEFAULT AFTER PUNCH
|
||
|
||
MOVK ACK_TROG_PUNCH,A0
|
||
MOVB A0,*A13(PCOMM) ;ACKNOWLEDGE COMMAND RECIEVED
|
||
|
||
MOVI KOU,A0
|
||
JSRP FRANIMATE_DIR
|
||
|
||
DTOOF_COMM_WAIT
|
||
MOVI 60H,A11 ;DEFAULT COUNT
|
||
DTOOF_LP
|
||
MOVB *A13(PCOMM),A1 ;CHECK THE COMMUNICATION LINE
|
||
JRNZ DTOOF_COMM
|
||
DTOOF_COMM_INV
|
||
DEC A11
|
||
JRZ DTOOF_DEFAULT ;BR = TIMEOUT ON PUNCH COMMAND
|
||
SLOOP 1,DTOOF_LP
|
||
DTOOF_COMM
|
||
MOVK ACK_TROG_PUNCH,A0
|
||
MOVB A0,*A13(PCOMM) ;ACKNOWLEDGE COMMAND RECIEVED
|
||
CMPI COMMAND_ESC,A1
|
||
JREQ DINO_TROG_ESCAPE
|
||
CMPI COMMAND_EAT,A1
|
||
JRNE DTOOF_COMM_INV
|
||
DTOOF_EAT
|
||
*NOTE: DO NOT SLEEP WHILE CREATING THE DINO SKELETON
|
||
MOVE A1,A5
|
||
CALLA GETCPNT
|
||
CALLA FIND_CLOSE_CPNT ;GET THE CLOSEST C-POINT
|
||
MOVE A3,*A13(DINITPOS),L ;WE'LL BE BACK
|
||
CLR A4
|
||
PUSHP A4 ;RETURN POINT ALREADY STUFFED
|
||
MOVE *A13(DINITTAB),A14,L
|
||
CALLA GPALOBJSTF
|
||
JRZ DTOOF_FAILED_SKEL
|
||
MOVE A13,*A0(OPLINK),L
|
||
CALLA GETANIXY
|
||
SRL 16,A3
|
||
MOVY A2,A3
|
||
MOVE A8,A10
|
||
MOVE A0,A8
|
||
PUSHP A3
|
||
MOVE *A10(OFLAGS),*A8(OFLAGS),W ;COPY FLAGS
|
||
MOVK 4,A1
|
||
JSRP FRANIM
|
||
PULLP A3
|
||
CALLA OBJ_TO_PNT
|
||
CALLA INSERT_OBJ
|
||
MOVE A8,A0
|
||
MOVE A10,A8
|
||
MOVE A0,A10
|
||
MOVE *A8(OZVAL),A1,L
|
||
DEC A1
|
||
MOVE A1,*A10(OZVAL),L
|
||
JRUC DTOOF_EAT_ACTION
|
||
DTOOF_FAILED_SKEL
|
||
CLR A10
|
||
CALLA FRAMSKIP ;SKIP THE FRAME
|
||
JRUC DTOOF_EAT_ACTION
|
||
DTOOF_EAT_COMM_WAIT
|
||
MOVI 60H,A11 ;DEFAULT COUNT
|
||
DTOOF_EAT_COMM_LP
|
||
MOVB *A13(PCOMM),A5 ;CHECK THE COMMUNICATION LINE
|
||
JRNZ DTOOF_EAT_ACTION
|
||
DTOOF_EAT_COMM_INV
|
||
DEC A11
|
||
JRZ DTOOF_EAT_DONE ;BR = TIMEOUT ON EAT COMMAND
|
||
SLOOP 1,DTOOF_EAT_COMM_LP
|
||
DTOOF_EAT_ACTION
|
||
MOVK ACK_TROG_EAT,A0
|
||
MOVB A0,*A13(PCOMM) ;ACKNOWLEDGE COMMAND RECIEVED
|
||
CMPI COMMAND_EAT_DONE,A5
|
||
JREQ DTOOF_EAT_DONE
|
||
CMPI COMMAND_ESC,A5
|
||
JREQ DINO_TROG_ESCAPE
|
||
CMPI COMMAND_EAT,A5
|
||
JRNE DTOOF_EAT_COMM_INV ;INVALID COMMAND
|
||
DTOOF_EAT_LP
|
||
MOVK 4,A1
|
||
JSRP FRANIM ;GRAB THE FIRST FRAME OF THE HEAD BOP
|
||
JRC DTOOF_EAT_OFF ;BR = 'TWAS THE END, WAIT FOR NEXT
|
||
MOVE A0,A11 ;STORE TICKS FOR LOOP
|
||
DTOOF_EAT_SLP_LP
|
||
SLEEP 1
|
||
MOVB *A13(PCOMM),A1
|
||
CMPI COMMAND_ESC,A1
|
||
JREQ DINO_TROG_ESCAPE
|
||
CMPI COMMAND_EAT,A1 ;CHECK COMMAND FOR ANOTHER BITE
|
||
JREQ DTOOF_EAT_COMM_LP ;BR = HE WANTS TO EAT MORE
|
||
DSJ A11,DTOOF_EAT_SLP_LP ;IF MORE TICKS SLEEP, IF NOT NEXT FRM
|
||
JRUC DTOOF_EAT_LP
|
||
DTOOF_EAT_OFF
|
||
MOVE *A9,A1,L ;ARE WE AT THE BITTER END?
|
||
JRNZ DTOOF_EAT_COMM_WAIT ;BR = NO, GO WAIT FOR NEXT FRAME
|
||
CALLA OBJ_OFF
|
||
JRUC DTOOF_EAT_COMM_WAIT
|
||
DTOOF_EAT_DONE
|
||
MOVE A10,A0
|
||
JRZ DTOOF_EAT_NO_SKEL
|
||
CALLA DELPAL
|
||
CALLA DELSOBJ
|
||
DTOOF_EAT_NO_SKEL
|
||
JRUC DINO_DEATH_DONE
|
||
DTOOF_DEFAULT
|
||
*
|
||
*NOTE: WORRY ABOUT DDIZZYFLG IF YOU CHANGE THE WAY DINOREV OPERATES
|
||
*
|
||
**** CLR A0
|
||
**** MOVB A0,*A13(DDIZZYFLG)
|
||
MOVE *A13(DINITPOS),A1,L
|
||
CALLR DINO_NEW_PNT
|
||
CALLR MARK_DINO_LIVE
|
||
JRUC DINOREV ;DINO REV ULTIMATELY RESETS DDIZZYFLG
|
||
*
|
||
*ESCAPE THE WRATH OF THE DREADED TROGSTER
|
||
DINO_TROG_ESCAPE
|
||
MOVE *A13(DINITPOS),A1,L
|
||
CALLR DINO_NEW_PNT ;RE-ALIGN
|
||
CALLR MARK_DINO_LIVE
|
||
JRUC DINOWXFER ;KEEP ON KEEPIN' ON
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINOBUMP - PROCESS TO MAKE DINO REACT TO HEAD-ON BUMP *
|
||
* THEN TURN AWAY FROM IT. *
|
||
* A8 = PTR TO DINOSAUR OBJECT *
|
||
* *A13(DATABLE),L = PTR TO ANIMATION TABLE *
|
||
* *A13(DDIR),W = CURRENT DINO DIRECTION *
|
||
* NOTE: THIS PROCESS TRANSFERS TO DINOWXFER *
|
||
* *
|
||
**************************************************************************
|
||
*
|
||
*SPECIAL ENTRY POINT WHEN A DINOSAUR BUMPS INTO ANOTHER DINOSAUR
|
||
*A9 = PTR TO THE OTHER DINOSAUR
|
||
****DINO_BUMP_DINO
|
||
**** MOVE *A8(OID),A1,W
|
||
**** MOVE *A9(OID),A0,W
|
||
**** CMP A1,A0
|
||
**** JREQ DINOREV ;BR = SAME TYPE OF DINOS
|
||
**** MOVI TENSION_BUMP,A1
|
||
**** CALLR BUILD_TENSION ;GET MAD AT THE GUY YOU BUMPED
|
||
**** SOUND1 DINOBUMP_SND ;CLUNK HEADS
|
||
****DINOBUMP
|
||
**** MOVK 1,A0
|
||
**** MOVB A0,*A13(DDIZZYFLG)
|
||
**** MOVI BUMPU,A0
|
||
**** JSRP ANIMATE_DIR
|
||
**** JRUC DINOREV
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINOREV - REVERSE THE DINOSAUR DIRECTION DUE TO COLLISION *
|
||
* WITH ANOTHER, USE PSTOP FIRST. *
|
||
* A8 = PTR TO DINOSAUR OBJECT *
|
||
* *A13(DATABLE),L = PTR TO ANIMATION TABLE *
|
||
* *A13(DDIR),W = CURRENT DINO DIRECTION *
|
||
* NOTE: THIS PROCESS TRANSFERS TO DINOWXFER *
|
||
* *
|
||
**************************************************************************
|
||
*
|
||
*SPECIAL ENTRY POINT WHEN A DINOSAUR REVERSES BECAUSE HE CAN'T PASS ANOTHER
|
||
*A9 = PTR TO THE OTHER DINOSAUR
|
||
****DINO_REV_DINO
|
||
**** MOVE *A8(OID),A1,W
|
||
**** MOVE *A9(OID),A0,W
|
||
**** CMP A1,A0
|
||
**** JREQ DINOREV ;BR = SAME TYPE DINOS, NO TENSION
|
||
**** MOVI TENSION_REV,A1
|
||
**** CALLR BUILD_TENSION ;GET MAD AT THE GUY YOU CAN'T PASS
|
||
DINOREV
|
||
MOVE *A13(DATABLE),A10,L ;FIRST WE NEED THE ANIMATION TABLE
|
||
MOVE *A13(DDIR),A11,W ;AND THEN WE NEED THE DIRECTION
|
||
|
||
CALLR GET_DINO_MPNT
|
||
|
||
MOVE *A0(MOVECPTR),A0,L ;IS IT A CENTER?
|
||
JRNZ DINO_REV_REV ;BR = NO
|
||
MOVE A3,A1 ;EVERYBODY! GET...IN...LINE.
|
||
CALLR DINO_NEW_PNT ;PUT THE DINO RIGHT ON THIS POINT
|
||
CMPI UP,A11
|
||
JRNE DINO_REV_T1
|
||
MOVK DOWN,A5
|
||
MOVK LEFT,A6
|
||
MOVK RIGHT,A7
|
||
JRUC DINO_REV_CHOOSE
|
||
DINO_REV_T1
|
||
CMPI DOWN,A11
|
||
JRNE DINO_REV_T2
|
||
CLR A5 ;MOVK UP,A5
|
||
MOVK RIGHT,A6
|
||
MOVK LEFT,A7
|
||
JRUC DINO_REV_CHOOSE
|
||
DINO_REV_T2
|
||
CMPI LEFT,A11
|
||
JRNE DINO_REV_T3
|
||
MOVK RIGHT,A5
|
||
MOVK DOWN,A6
|
||
CLR A7 ;MOVK UP,A7
|
||
JRUC DINO_REV_CHOOSE
|
||
DINO_REV_T3
|
||
MOVK LEFT,A5
|
||
CLR A6 ;MOVK UP,A6
|
||
MOVK DOWN,A7
|
||
DINO_REV_CHOOSE
|
||
CALLR DINOCHOOSE_CENT
|
||
JRUC DINO_REV_TURN
|
||
DINO_REV_REV
|
||
CALLR NOTDIR ;GET THE OTHER DIRECTION
|
||
DINO_REV_TURN
|
||
JSRP DINOTURN ;TURN THE DINOSAUR
|
||
JRUC DINOWXFER
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINO_PAUSE - PAUSE THE DINOSAUR FOR AN INSTANT, USE PSTOP FIRST. *
|
||
* A8 = PTR TO DINOSAUR OBJECT *
|
||
* *A13(DATABLE),L = PTR TO ANIMATION TABLE *
|
||
* *A13(DDIR),W = CURRENT DINO DIRECTION *
|
||
* NOTE: THIS PROCESS TRANSFERS TO DINOWXFER *
|
||
* *
|
||
**************************************************************************
|
||
*
|
||
*SPECIAL ENTRY POINT WHEN A DINOSAUR PAUSES BECAUSE HE CAN'T PASS ANOTHER
|
||
*A9 = PTR TO THE OTHER DINOSAUR
|
||
****DINO_PAUSE_DINO
|
||
**** MOVE *A8(OID),A1,W
|
||
**** MOVE *A9(OID),A0,W
|
||
**** CMP A1,A0
|
||
**** JREQ DINO_PAUSE ;BR = SAME TYPE DINOS, NO TENSION
|
||
**** MOVI TENSION_REV,A1
|
||
**** CALLR BUILD_TENSION ;GET MAD AT THE GUY YOU CAN'T PASS
|
||
****DINO_PAUSE
|
||
**** MOVE *A13(DATABLE),A10,L ;FIRST WE NEED THE ANIMATION TABLE
|
||
**** MOVE *A13(DDIR),A11,W ;AND THEN WE NEED THE DIRECTION
|
||
**** MOVI STANDU,A0
|
||
**** JSRP ANIMATE_DIR
|
||
**** SLEEP 10
|
||
**** JRUC DINOWXFER
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINOTAR_SINK - PROCESS TO MAKE DINO SINK INTO TAR AND DIE. *
|
||
* A8 = PTR TO DINOSAUR OBJECT *
|
||
* A9 = PTR TO TAR OBJECT *
|
||
* *A13(DATABLE),L = PTR TO ANIMATION TABLE *
|
||
* *A13(DDIR),W = CURRENT DINO DIRECTION *
|
||
* NOTE: THIS PROCESS ULTIMATELY TRANSFERS TO DINO_DEATH_DONE *
|
||
* *
|
||
**************************************************************************
|
||
DINOTAR_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
|
||
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 DINOTAR_SKC ;BR = SKIP THE CENTERING, NOT A MOVE
|
||
MOVE A1,A0
|
||
CALLR DINO_CENTER ;CENTER TO DINO ON THIS POINT
|
||
DINOTAR_SKC
|
||
MOVI TARU,A0
|
||
**** JSRP FRANIMATE_DIR ;ANIMATE THIS GUY
|
||
CALLA LOAD_DIR
|
||
JSRP ANIMATE_BUTTON
|
||
|
||
SOUND1 TARBUBBLE_SND
|
||
MOVI 08000H,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 DINO_DEATH_DONE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINOFIRE_BURN - PROCESS TO MAKE DINO BURN IN THE FIRE. *
|
||
* A8 = PTR TO DINOSAUR 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 DINOWXFER IF NO DEATH *
|
||
* DINO_DEATH_DONE IF HE DIED. *
|
||
* *
|
||
**************************************************************************
|
||
DINOFIRE_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 DINOFIRE_SKC ;BR = SKIP THE CENTERING, NOT A MOVE
|
||
MOVE A1,A0
|
||
CALLR DINO_CENTER ;CENTER TO DINO ON THIS POINT
|
||
MOVE *A8(OYPOS),A5,W
|
||
SUBK 12,A5
|
||
MOVE A5,*A8(OYPOS),W
|
||
DINOFIRE_SKC
|
||
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
|
||
SLEEP 1
|
||
|
||
MOVI SKELU,A0 ;NO BONES ABOUT IT, YOU'RE DEAD
|
||
JSRP FRANIMATE_DIR ;ANIMATE IT
|
||
|
||
CLR A4
|
||
PUSHP A4 ;RETURN POINT ALREADY STUFFED
|
||
JRUC DINO_DEATH_DONE
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINO_SPROING - PROCESS TO GET THE DINO SQUASHED BY THE SPRING SHOES. *
|
||
* A8 = PTR TO DINOSAUR OBJECT *
|
||
* A9 = PTR TO TROG SPRING SHOE OBJECT *
|
||
* A10 = PTR TO TROG SPRING SHOE PROCESS *
|
||
* A13 = PTR TO DINO PROCESS *
|
||
* *
|
||
**************************************************************************
|
||
DINO_SPROING
|
||
MOVE *A9(OZVAL),A0,L
|
||
DEC A0
|
||
MOVE A0,*A8(OZVAL),L ;DINO IS BEHIND WHEEL
|
||
MOVE *A10(DSMULT),A4,W
|
||
MOVI SPROINGU,A0
|
||
CALLR LOAD_DIR
|
||
JRUC DINO_SQUASH_ALL
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINO_SQUASH - PROCESS TO SQUASH THE DINO WITH THE WHEEL *
|
||
* A8 = PTR TO DINOSAUR OBJECT *
|
||
* A9 = PTR TO WHEEL OBJECT *
|
||
* A10 = PTR TO WHEEL PROCESS *
|
||
* A13 = PTR TO DINO PROCESS *
|
||
* NOTE: THIS PROCESS ULTIMATELY TRANSFERS TO DINO_DEATH_DONE. *
|
||
* *
|
||
**************************************************************************
|
||
DINO_SQUASH
|
||
MOVE *A9(OZVAL),A0,L
|
||
DEC A0
|
||
MOVE A0,*A8(OZVAL),L ;DINO IS BEHIND WHEEL
|
||
|
||
MOVE *A13(DDIR),A0,W
|
||
SLL 2,A0
|
||
MOVE *A10(DDIR),A1,W
|
||
ADD A1,A0
|
||
MOVE *A10(DSMULT),A4,W
|
||
ADDI SQUISHUU,A0
|
||
MOVE *A13(DATABLE),A10,L
|
||
CALLA DINOLOAD
|
||
|
||
*A4 = CORRECT SLEEP MULTIPLIER
|
||
*A9 = ANIMATION SCRIPT
|
||
DINO_SQUASH_ALL
|
||
CALLA GET_DINO_CPNT
|
||
ADDI [5,0],A1
|
||
CALLA FIND_CLOSE_CPNT ;FIND US A RETURN POINT
|
||
MOVE A3,*A13(DINITPOS),L
|
||
|
||
MOVK 1,A1
|
||
SLL 16,A4
|
||
MOVY A4,A1 ;ANIMATE AT THE SPEED OF THE WHEEL
|
||
JSRP FRANIM
|
||
MOVE A8,A0
|
||
CALLA SET_TZPOS ;LIE HIM FLAT
|
||
|
||
**** SLEEP 80
|
||
MOVI 80,A0
|
||
MOVE *A13(DPLAYER),A2,L
|
||
JSRP SLEEP_START
|
||
|
||
MOVI [3,1],A9
|
||
JSRP OSINK ;SINK THAT PANCAKE
|
||
CLR A4
|
||
PUSHP A4 ;RETURN POINT ALREADY STUFFED
|
||
JRUC DINO_DEATH_DONE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CK_PIT_CENT - DETERMINE IF OBJECT IS NEAR THE CENTER OF A PIT. *
|
||
* A0 = OBJECT *
|
||
* A8 = PIT OBJECT *
|
||
* RETURNS: *
|
||
* NC = NOT EVEN CLOSE *
|
||
* C = CLOSE *
|
||
* *
|
||
**************************************************************************
|
||
CK_PIT_CENT
|
||
MMTM SP,A8,A1,A2,A3
|
||
CALLA GETCPNT ;CENTER POINT OF FIRST OBJECT
|
||
SUBI [7,0],A1 ;FUDGE FACTOR
|
||
MOVE A1,A3
|
||
MOVE A0,A8
|
||
CALLA GETCPNT ;AND CENTER POINT OF THE SECOND
|
||
MOVI [15,15],A2 ;FIX THE RANGE
|
||
CALLA PNT_IN_RANGE
|
||
MMFM SP,A8,A1,A2,A3
|
||
RETS
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CK_DINO_CENT - DETERMINE IF DINO IS NEAR THE CENTER OF AN OBJECT. *
|
||
* A0 = OBJECT *
|
||
* A8 = DINO *
|
||
* RETURNS: *
|
||
* NC = NOT EVEN CLOSE *
|
||
* C = CLOSE *
|
||
* *
|
||
**************************************************************************
|
||
CK_DINO_CENT
|
||
MMTM SP,A1,A2,A3,A8
|
||
CALLR GET_DINO_CPNT ;CENTER POINT OF FIRST OBJECT
|
||
ADDI [5,0],A1 ;FUDGE FACTOR
|
||
MOVE A1,A3
|
||
MOVE A0,A8
|
||
CALLA GETCPNT ;AND CENTER POINT OF THE SECOND
|
||
MOVI [6,6],A2 ;FIX THE RANGE
|
||
CALLA PNT_IN_RANGE
|
||
MMFM SP,A1,A2,A3,A8
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINOPIT_FALL - PROCESS TO MAKE DINO FALL DOWN A SMALL PIT *
|
||
* A8 = PTR TO DINOSAUR OBJECT *
|
||
* A9 = PTR TO PIT OBJECT *
|
||
* *A13(DATABLE),L = PTR TO ANIMATION TABLE *
|
||
* *A13(DDIR),W = CURRENT DINO DIRECTION *
|
||
* NOTE: THIS PROCESS ULTIMATELY TRANSFERS TO DINO_DEATH_DONE. *
|
||
* *
|
||
**************************************************************************
|
||
DINOPIT_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 DINO
|
||
MOVE A1,A2
|
||
MOVI 4*25,A4
|
||
CALLA SLINEVEL
|
||
MMTM A12,A1,A2
|
||
CALLA PSTOP
|
||
MOVI OGPITU,A0
|
||
JSRP FRANIMATE_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 THE DINOSAUR OFF
|
||
MOVE A8,A5
|
||
PULLP A8 ;GET FIRE 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 DINO_DEATH_DONE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* ANIMATE_DIR - ANIMATE A SCRIPT BASED ON THE DINOS CURRENT DIRECTION. *
|
||
* A0 = ANIMATION SCRIPT OFFSET *
|
||
* A8 = PTR TO DINOSAUR OBJECT *
|
||
* *A13(DATABLE),L = PTR TO ANIMATION TABLE *
|
||
* *A13(DDIR),W = CURRENT DINO DIRECTION *
|
||
* RETURNS: *
|
||
* A8 = PTR TO OBJECT *
|
||
* A9 = WORD AFTER SCRIPT *
|
||
* A10 = PTR TO ANIMATION TABLE *
|
||
* A11 = DIRECTION WHEN CALLED *
|
||
* *
|
||
* NOTE: CALL WITH JSRP *
|
||
* *
|
||
**************************************************************************
|
||
ANIMATE_DIR
|
||
MOVE *A13(DATABLE),A10,L ;FIRST WE NEED THE ANIMATION TABLE
|
||
MOVE *A13(DDIR),A11,W ;AND THEN WE NEED THE DIRECTION
|
||
ADD A11,A0
|
||
CALLA DINOLOAD
|
||
MOVK 1,A1
|
||
JRUC DINO_FRANIM
|
||
|
||
**************************************************************************
|
||
* *
|
||
* FRANIMATE_DIR - ANIMATE A SCRIPT BASED ON THE DINOS CURRENT DIRECTION. *
|
||
* JUMPS STRAIGHT TO FRANIM, BYPASSING DINO_FRANIM, THE *
|
||
* THE RESULT IS A NORMAL SPEED ANIMATION. *
|
||
* A0 = ANIMATION SCRIPT OFFSET *
|
||
* A8 = PTR TO DINOSAUR OBJECT *
|
||
* *A13(DATABLE),L = PTR TO ANIMATION TABLE *
|
||
* *A13(DDIR),W = CURRENT DINO DIRECTION *
|
||
* RETURNS: *
|
||
* A8 = PTR TO OBJECT *
|
||
* A9 = WORD AFTER SCRIPT *
|
||
* A10 = PTR TO ANIMATION TABLE *
|
||
* A11 = DIRECTION WHEN CALLED *
|
||
* *
|
||
* NOTE: CALL WITH JSRP *
|
||
* *
|
||
**************************************************************************
|
||
FRANIMATE_DIR
|
||
MOVE *A13(DATABLE),A10,L ;FIRST WE NEED THE ANIMATION TABLE
|
||
MOVE *A13(DDIR),A11,W ;AND THEN WE NEED THE DIRECTION
|
||
ADD A11,A0
|
||
CALLA DINOLOAD
|
||
MOVK 1,A1
|
||
JAUC FRANIM
|
||
|
||
**************************************************************************
|
||
* *
|
||
* LOAD_DIR - LOAD AN ANIMATION SCRIPT BASED ON THE CURRENT DIRECTION. *
|
||
* A0 = ANIMATION SCRIPT OFFSET *
|
||
* A8 = PTR TO OBJECT *
|
||
* *A13(DATABLE),L = PTR TO ANIMATION TABLE *
|
||
* *A13(DDIR),W = CURRENT DIRECTION *
|
||
* RETURNS: *
|
||
* A9 = PTR TO SCRIPT *
|
||
* *
|
||
**************************************************************************
|
||
LOAD_DIR
|
||
MMTM SP,A0,A10,A11
|
||
MOVE *A13(DATABLE),A10,L ;FIRST WE NEED THE ANIMATION TABLE
|
||
MOVE *A13(DDIR),A11,W ;AND THEN WE NEED THE DIRECTION
|
||
ADD A11,A0
|
||
CALLA DINOLOAD
|
||
MMFM SP,A0,A10,A11
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* NOTDIR - COMPLEMENT THE GIVEN DIRECTION. *
|
||
* (I.E. UP -> DOWN, RIGHT -> LEFT) *
|
||
* A11 = DIRECTION TO COMPLEMENT *
|
||
* RETURNS: *
|
||
* A11 = COMPLEMENT *
|
||
* *
|
||
**************************************************************************
|
||
NOTDIR
|
||
CMPI UP,A11
|
||
JRNE NOTDCD ;NOT UP, CHECK DOWN
|
||
MOVK DOWN,A11 ;UP -> DOWN
|
||
JRUC NOTDIRX
|
||
NOTDCD
|
||
CMPI DOWN,A11
|
||
JRNE NOTDCL ;NOT DOWN, CHECK LEFT
|
||
CLR A11 ;MOVK UP,A11 ;DOWN -> UP
|
||
JRUC NOTDIRX
|
||
NOTDCL
|
||
CMPI LEFT,A11
|
||
JRNE NOTDR ;NOT LEFT, MUST BE RIGHT
|
||
MOVK RIGHT,A11 ;LEFT -> RIGHT
|
||
JRUC NOTDIRX
|
||
NOTDR
|
||
MOVK LEFT,A11 ;RIGHT -> LEFT
|
||
NOTDIRX
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* IS_DINO_DEAD - ROUTINE TO DETERMINE IF THE GIVEN DINOSAUR OBJECT *
|
||
* IS CONSIDERED DEAD! *
|
||
* RETURNS *
|
||
* Z = DINO IS DEAD. *
|
||
* NZ = DINO IS NOT DEAD. *
|
||
* *
|
||
**************************************************************************
|
||
*
|
||
*PASS DINO OBJECT IN A8
|
||
*
|
||
IS_DINO_DEAD_A8
|
||
PUSH A1
|
||
MOVE *A8(OID),A1,W
|
||
JRUC IDD_G
|
||
*
|
||
*PASS DINO OBJECT IN A0
|
||
*
|
||
IS_DINO_DEAD_A0
|
||
PUSH A1
|
||
MOVE *A0(OID),A1,W
|
||
IDD_G
|
||
SRL 4,A1
|
||
SLL 4,A1
|
||
CMPI DEADDINOOID,A1 ;IS HE DYING?
|
||
PULL A1
|
||
RETS
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* MARK_DINO_LIVE - ROUTINE TO MARK THE DINOSAUR OBJECT "ALIVE." *
|
||
* A8 = PTR TO THE DINOSAUR OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
MARK_DINO_LIVE
|
||
PUSH A0
|
||
MOVE *A8(OID),A0,W
|
||
SLL 28,A0
|
||
SRL 28,A0
|
||
ORI DINOOID,A0 ;MARK HIM AS DEAD, DEAD I SAY
|
||
MOVE A0,*A8(OID),W
|
||
PULL A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* MARK_DINO_DEAD - ROUTINE TO MARK THE DINOSAUR OBJECT "DEAD." *
|
||
* A8 = PTR TO THE DINOSAUR OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
MARK_DINO_DEAD
|
||
PUSH A1
|
||
MOVE *A8(OID),A1,W
|
||
SLL 28,A1
|
||
SRL 28,A1
|
||
ORI DEADDINOOID,A1 ;MARK HIM AS DEAD, DEAD I SAY
|
||
MOVE A1,*A8(OID),W
|
||
PULL A1
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* GET_DINO_CPNT - GET THE DINOSAURS CENTER POINT, BASED ON HIS INITIAL *
|
||
* FRAME WITH RESPECT TO HIS CURRENT ANIMATION POINT. *
|
||
* A8 = PTR TO DINOSAUR OBJECT *
|
||
* RETURNS: *
|
||
* A1 = [Y,X] CENTER POINT OF DINO *
|
||
* *
|
||
**************************************************************************
|
||
GET_DINO_CPNT:
|
||
PUSH A4
|
||
MOVE *A8(OID),A4,W
|
||
SLL 28,A4
|
||
SRL 23,A4 ;GET TYPE I.D. AND MULT x 32
|
||
ADDI ALIGNTAB,A4
|
||
MOVE *A4,A4,L ;GET THE CORRECT INIT TABLE
|
||
CALLA GET_INIT_CPNT
|
||
PULL A4
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* GET_DINO_MPNT - FIND MOVE POINT THAT DINOSAUR IS CLOSEST TO. *
|
||
* A8 = PTR TO DINOSAUR *
|
||
* RETURNS *
|
||
* A0 = PTR TO CLOSEST MOVE POINT DATA *
|
||
* A1 = [Y,X] DINOSAUR CENTER POINT *
|
||
* A3 = [Y,X] POSITION OF CLOSEST MOVE POINT *
|
||
* *
|
||
**************************************************************************
|
||
GET_DINO_MPNT
|
||
CALLR GET_DINO_CPNT ;THIS IS HIS NEW CENTER
|
||
ADDI [5,0],A1
|
||
JAUC FIND_CLOSE_MPNT ;FIND THE CLOSEST MOVE POINT
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINO_CENTER - ALIGN THE CENTER OF THE DINOSAUR 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 DINOSAUR *
|
||
* *
|
||
**************************************************************************
|
||
DINO_CENTER:
|
||
PUSH A1
|
||
MOVE *A0(MOVEPOS),A1,L
|
||
CALLR DINO_NEW_PNT
|
||
PULL A1
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINO_NEW_PNT - ALIGN THE CENTER OF THE DINOSAUR ON A NEW PNT. *
|
||
* A1 = [Y,X] PNT TO ALIGN DINOSAUR ON *
|
||
* A8 = PTR TO DINOSAUR *
|
||
* *
|
||
**************************************************************************
|
||
DINO_NEW_PNT:
|
||
MMTM SP,A0,A1,A7
|
||
SUBI [3,0],A1 ;MOVE HIM UP
|
||
MOVE A1,A7 ;STORE ALIGNMENT POINT
|
||
CALLR GET_DINO_CPNT
|
||
MOVE A7,A0
|
||
CALLA ALIGNOBJ
|
||
MOVE A8,A0
|
||
CALLA SET_ZPOS
|
||
MMFM SP,A0,A1,A7
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* BUILD_TENSION - BUILD THIS DINOSAURS TENSION LEVEL TOWARDS ANOTHER *
|
||
* DINOSAUR. *
|
||
* A0 = OID OF DINOSAUR TO BUILD AGAINST *
|
||
* A1 = AMOUNT TO ADD *
|
||
* A13 = PTR PROCESS OF DINOSAUR BUILDING TENSION *
|
||
* *
|
||
**************************************************************************
|
||
****BUILD_TENSION
|
||
**** MMTM SP,A0,A2
|
||
**** CALLR GET_TENSION_AREA
|
||
**** MOVB *A0,A2
|
||
**** ADD A1,A2 ;ADD IT UP
|
||
**** SLL 24,A2 ;CHECK TO SEE IF THE BYTES GONE NEGATIVE
|
||
**** SRA 24,A2 ;BRING IT BACK DOWN IN CASE WE MUST STORE
|
||
**** JRN SKIP_BUILD ;BR = THAT PUTS US OVER
|
||
**** MOVB A2,*A0 ;AND PUT IT BACK
|
||
****SKIP_BUILD
|
||
**** MMFM SP,A0,A2
|
||
**** RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* RELEASE_TENSION - RELEASE TENSION AGAINST ANOTHER DINOSAUR. *
|
||
* A0 = OID OF DINOSAUR TO RELEASE FROM *
|
||
* A1 = AMOUNT TO RELEASE *
|
||
* A13 = PTR PROCESS OF DINOSAUR RELEASING TENSION *
|
||
* *
|
||
**************************************************************************
|
||
****RELEASE_TENSION
|
||
**** MMTM SP,A0,A2
|
||
**** CALLR GET_TENSION_AREA
|
||
**** MOVB *A0,A2
|
||
**** SUB A1,A2 ;TAKE IT OFF
|
||
**** JRNN BUILD_T_OK ;WE DIDN'T GROUND OUT
|
||
**** CLR A2 ;DON'T GO BELOW ZERO
|
||
****BUILD_T_OK
|
||
**** MOVB A2,*A0 ;AND RESTORE
|
||
**** MMFM SP,A0,A2
|
||
**** RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CLEAR_TENSION - CLEAR THE TENSION BETWEEN TO DINOSAURS *
|
||
* A0 = OID OF DINOSAUR TO CLEAR TENSION AGAINST *
|
||
* A13 = PTR PROCESS OF DINOSAUR CLEARING TENSION *
|
||
* *
|
||
**************************************************************************
|
||
****CLEAR_TENSION
|
||
**** PUSH A1
|
||
**** CALLR GET_TENSION_AREA
|
||
**** CLR A1
|
||
**** MOVB A1,*A0
|
||
**** PULL A1
|
||
**** RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* GET_TENSION - GET THE AMOUNT OF TENSION TOWARDS A DINOSAUR. *
|
||
* A0 = OID OF DINOSAUR AGAINST *
|
||
* A13 = PTR TO THIS DINOSAURS PROCESS *
|
||
* RETURNS: *
|
||
* A1 = TENSION LEVEL *
|
||
* *
|
||
**************************************************************************
|
||
****GET_TENSION
|
||
**** PUSH A0
|
||
**** CALLR GET_TENSION_AREA
|
||
**** MOVB *A0,A1 ;GET TENSE BABY
|
||
**** PULL A0
|
||
**** RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* GET_TENSION_AREA - GET THE TENSION AREA OF A DINOSAUR AGAINST *
|
||
* ANOTHER. *
|
||
* A0 = OID OF AGAINST *
|
||
* A13 = PTR TO PROCESS OF DINOSAUR TO GET TENSION *
|
||
* RETURNS: *
|
||
* A0 = PTR TO TENSION AREA *
|
||
* *
|
||
**************************************************************************
|
||
****GET_TENSION_AREA
|
||
**** SLL 30,A0 ;ONLY HANDLE FOUR TYPES OF DINOS
|
||
**** SRL 27,A0 ;THE SIZE IS ONE BYTE PER DINO
|
||
**** ADDI DD0TENSE,A0
|
||
**** ADD A13,A0 ;OFFSET TO PROCESS TENSION AREA
|
||
**** RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* ADD_FRUST - ADD TO THE GENERAL FRUSTRATION LEVEL OF THE DINOSAUR *
|
||
* A0 = AMOUNT TO ADD *
|
||
* A13 = PTR TO DINOSAUR PROCESS *
|
||
* RETURNS: *
|
||
* A0 = NEW FRUSTRATION LEVEL *
|
||
* *
|
||
**************************************************************************
|
||
****ADD_FRUST
|
||
**** PUSH A1
|
||
**** MOVB *A13(DFRUST),A1
|
||
**** ADD A0,A1 ;ADD THE VALUE
|
||
**** SLL 24,A1 ;CHECK TO SEE IF THE BYTES GONE NEGATIVE
|
||
**** SRA 24,A1 ;BRING IT BACK DOWN IN CASE WE MUST STORE
|
||
**** JRN SKIP_FRUST_ADD ;BR = THAT PUTS US OVER
|
||
**** MOVB A1,*A13(DFRUST)
|
||
**** MOVE A1,A0 ;RETURN HERE
|
||
**** JRUC ADD_FRUSTX
|
||
****SKIP_FRUST_ADD
|
||
**** MOVB *A13(DFRUST),A0 ;RESTORE THE OLD VALUE
|
||
****ADD_FRUSTX
|
||
**** PULL A1
|
||
**** RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* EASE_FRUST - EASE SOME OF THE FRUSTRATIONS OF THE DINOSAUR. *
|
||
* WILL NOT ALLOW THE LEVEL TO GO NEGATIVE. *
|
||
* A0 = AMOUNT TO EASE *
|
||
* A13 = PTR TO DINOSAUR PROCESS *
|
||
* RETURNS: *
|
||
* A0 = NEW FRUSTRATION LEVEL *
|
||
* *
|
||
**************************************************************************
|
||
****EASE_FRUST
|
||
**** PUSH A1
|
||
**** MOVB *A13(DFRUST),A1
|
||
**** SUB A0,A1 ;ADD THE VALUE
|
||
**** JRNN EASE_F_OK ;BR = LEVEL HAS NOT GONE NEGATIVE
|
||
**** CLR A1 ;SURFACE
|
||
****EASE_F_OK
|
||
**** MOVB A1,*A13(DFRUST)
|
||
**** MOVE A1,A0 ;AND RETURN IT
|
||
**** PULL A1
|
||
**** RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* ADD_TURNQ - ADD A TURN TO THE TURN QUEUE *
|
||
* A0 = DIRECTION HE WILL TURN *
|
||
* A1 = MOVE INDEX OF TURN POINT *
|
||
* A13 = PTR TO DINOSAUR PROCESS *
|
||
* RETURNS: *
|
||
* Z = TURN ALREADY EXITS IN THE QUEUE *
|
||
* NZ = TURN WAS ADDED *
|
||
* *
|
||
**************************************************************************
|
||
****ADD_TURNQ
|
||
**** MMTM SP,A2,A3,A4,A5,A6
|
||
**** MOVB *A13(DTURNQCNT),A2 ;GET THE QUEUE STUFF
|
||
**** SLL 24,A2
|
||
**** SRL 24,A2 ;RID O' SIGN
|
||
**** MOVE A2,A3
|
||
**** MOVI DTURNQ,A4 ;GET THE OFFSET HERE
|
||
**** SRL 4,A3 ;GET THE SEARCH COUNT
|
||
**** JRZ ADD_TURNQ_NOW ;BR = NO TURNS TO SEARCH
|
||
**** MOVE A13,A5
|
||
**** ADD A4,A5
|
||
****ADD_TURNQ_LP
|
||
**** MOVE *A5(DTURNQMOVE),A6,W ;CHECK PREVIOUS MOVE PNT
|
||
**** CMP A6,A1
|
||
**** JRNE ADD_TURNQ_CNT ;BR = NO MATCH HERE
|
||
**** MOVB *A5(DTURNQDIR),A6
|
||
**** CMP A6,A0
|
||
**** JREQ ADD_TURNQ_X ;WE FOUND THE MOVE, EXIT
|
||
****ADD_TURNQ_CNT
|
||
**** ADDI DTURNQSIZE,A5 ;TRY NEXT TURN
|
||
**** DSJ A3,ADD_TURNQ_LP
|
||
**** MOVE A2,A3
|
||
**** SRL 4,A3
|
||
**** CMPI NDTURNS,A3
|
||
**** JREQ ADD_TURNQ_NEXT
|
||
****ADD_TURNQ_NOW
|
||
**** INC A3 ;CLICK THE TURN COUNTER
|
||
****ADD_TURNQ_NEXT
|
||
**** SLL 4,A3 ;BACK INTO POSITION
|
||
**** SLL 28,A2
|
||
**** SRL 28,A2
|
||
**** MOVI DTURNQSIZE,A5
|
||
**** MPYU A2,A5 ;OFFSET TO NEW Q STORAGE LOCATION
|
||
**** ADD A4,A5 ;OFFSET INTO PROCESS BLOCK
|
||
**** ADD A13,A5 ;NOW OFFSET TO THE CORRECT PROCESS
|
||
**** MOVE A1,*A5(DTURNQMOVE),W ;STUFF IN THE MOVE
|
||
**** MOVB A0,*A5(DTURNQDIR) ;AND THE DIRECTION
|
||
**** CMPI NDTURNS-1,A2 ;MAX Q OFFSET?
|
||
**** JRNE ADD_TURNQ_MORE ;BR = NO
|
||
**** CLR A2 ;GO BACK TO THE BEGINNING
|
||
**** JRUC ADD_TURNQ_COMB
|
||
****ADD_TURNQ_MORE
|
||
**** INC A2
|
||
****ADD_TURNQ_COMB
|
||
**** ADD A3,A2 ;COMBINE SEARCH COUNT:INDEX, CLR Z
|
||
**** MOVB A2,*A13(DTURNQCNT)
|
||
****ADD_TURNQ_X
|
||
**** MMFM SP,A2,A3,A4,A5,A6
|
||
**** RETS
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINO_FIND_BEST - FIND THE BEST PATH FROM THE GIVEN MOVE POINT. *
|
||
* A1 = STARTING MOVE PNT DATA *
|
||
* A8 = PTR TO DINOSAUR OBJECT *
|
||
* RETURNS: *
|
||
* A2 = BEST DIRECTION *
|
||
* A3 = # OF STEPS 'TIL END *
|
||
* A4 = PATH RATING *
|
||
* *
|
||
**************************************************************************
|
||
DINO_FIND_BEST
|
||
MMTM SP,A0,A5,A6
|
||
CLR A2
|
||
CLR A3
|
||
CLR A4
|
||
CLR A0 ;MOVK UP,A0
|
||
DINO_FIND_BLP
|
||
CALLR DINO_SEARCH_SAFE
|
||
CMP A4,A6 ;HOW DOES THIS COMPARE WITH THE BEST
|
||
JRLT DINO_FIND_BSK ;BR = DOESN'T
|
||
JRGT DINO_FIND_BNEW
|
||
CMP A3,A5
|
||
JRLO DINO_FIND_BSK
|
||
DINO_FIND_BNEW
|
||
MOVE A0,A2
|
||
MOVE A5,A3
|
||
MOVE A6,A4
|
||
DINO_FIND_BSK
|
||
INC A0
|
||
CMPI RIGHT,A0
|
||
JRLS DINO_FIND_BLP
|
||
MMFM SP,A0,A5,A6
|
||
RETS
|
||
|
||
WALL_RATING .EQU 1
|
||
EGG_RATING .EQU 2
|
||
PINEAPPLE_RATING .EQU 3
|
||
HOUSE_RATING .EQU 5
|
||
**************************************************************************
|
||
* *
|
||
* DINO_SEARCH_SAFE - SEARCH A DIRECTION UNTIL WE FIND SOMETHING THAT *
|
||
* WOULD BE GOOD FOR A DINOSAUR. *
|
||
* A0 = DIRECTION TO SEARCH *
|
||
* A1 = PTR TO STARTING MOVE PNT *
|
||
* A8 = PTR TO DINOSAUR OBJECT *
|
||
* RETURNS: *
|
||
* A5 = STEPS 'TIL END *
|
||
* A6 = RATING (0=DEATH,1=WALL, >1 = SAFER) *
|
||
* *
|
||
**************************************************************************
|
||
DINO_SEARCH_SAFE
|
||
MMTM SP,A0,A1,A3,A4
|
||
MOVE *A8(OID),A4,W
|
||
SLL 28,A4
|
||
SRL 28,A4 ;ISOLATE PLAYER NUMBER
|
||
SWAP A0,A1
|
||
SLL 4,A1
|
||
ADDI MOVEREL,A1
|
||
CLR A5 ;CLEAR STEP COUNT
|
||
CLR A6 ;CLEAR RATING
|
||
DINO_SRCH_SAFLP
|
||
MOVE A0,A3
|
||
ADD A1,A0
|
||
MOVE *A0,A0,W
|
||
JRNN DINO_SRCH_MOVE ;WE HAVE NOT HIT THE END
|
||
MOVE *A3(MOVEEPTR),A0,L ;IS THIS AN EXIT POINT
|
||
JRN DINO_SRCH_X ;BR = NO, THIS IS CERTAIN DEATH
|
||
MOVB *A0(EMOVEPLYR),A3 ;IS THIS A PLAYERS SPOT?
|
||
JRN DINO_SRCH_X ;BR = NO
|
||
CMPI PXPLAYER,A3
|
||
JREQ DS_HOUSE_SPOT
|
||
CMP A4,A3 ;IS THIS MY EXIT?
|
||
JRNE DINO_SRCH_X ;BR = NO
|
||
DS_HOUSE_SPOT
|
||
MOVE *A0(EMOVEOBJ),A3,L ;IS MY HOUSE THERE?
|
||
JRZ DINO_SRCH_X ;BR = NO
|
||
ADDK HOUSE_RATING,A6 ;HOME SWEET HOME
|
||
JRUC DINO_SRCH_X
|
||
DINO_SRCH_MOVE
|
||
CALLA GETMOVE
|
||
MOVB *A0(MOVEPLYR),A3 ;DID WE HIT A WALL?
|
||
JRNN DINO_SRCH_WALL ;BR = YES
|
||
MOVE *A0(MOVECPTR),A3,L ;GRAB THE CENTER MOVE PTR
|
||
JRN DINO_SRCH_NOCMV ;BR = NOT A CENTER MOVE
|
||
MOVB *A3(CMOVEEGG),A3 ;IS THERE AN EGG ON THIS SPOT
|
||
INC A3
|
||
JREQ DINO_SRCH_NOTHING ;BR = NOTHING HERE
|
||
DEC A3
|
||
CMPI PXPLAYER,A3
|
||
JREQ DINO_SRCH_EGG
|
||
CMP A3,A4 ;IS THIS AN EGG?
|
||
JREQ DINO_SRCH_EGG ;YES, COOL
|
||
CMPI PINEAPPLEID,A3
|
||
JREQ DINO_SRCH_PINEAPPLE
|
||
CMPI TARID,A3 ;ARE WE DEALING WITH A TAR PIT HERE?
|
||
JREQ DINO_SRCH_X ;BR = YES WE ARE
|
||
CMPI FIREID,A3 ;FIRE?
|
||
JREQ DINO_SRCH_X ;BR = YES
|
||
CMPI PITID,A3 ;LOCAL PIT?
|
||
JREQ DINO_SRCH_X ;BR = YES
|
||
JRUC DINO_SRCH_NOTHING
|
||
DINO_SRCH_NOCMV
|
||
MOVE *A0(MOVEAPTR),A3,L ;GRAB THE AUXILLARY
|
||
JRN DINO_SRCH_NOTHING ;BR = NOT AN A MOVE
|
||
MOVB *A3(CMOVEEGG),A3 ;IS THERE AN EGG ON THIS SPOT
|
||
INC A3
|
||
JREQ DINO_SRCH_NOTHING ;BR = NOTHING HERE
|
||
DEC A3
|
||
CMP A3,A4 ;IS THIS AN EGG?
|
||
JRNE DINO_SRCH_NOTHING
|
||
DINO_SRCH_EGG
|
||
ADDK EGG_RATING,A6 ;RATE THIS EGG
|
||
DINO_SRCH_NOTHING
|
||
INC A5 ;INCREMENT THE STEP COUNT
|
||
JRUC DINO_SRCH_SAFLP
|
||
DINO_SRCH_PINEAPPLE
|
||
ADDK PINEAPPLE_RATING,A6
|
||
JRUC DINO_SRCH_NOTHING
|
||
DINO_SRCH_WALL
|
||
ADDK WALL_RATING,A6
|
||
JRUC DINO_SRCH_X
|
||
DINO_SRCH_X
|
||
MMFM SP,A0,A1,A3,A4
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* FIND_SAFEST - FIND THE SAFEST PATH FROM THE GIVEN MOVE POINT. *
|
||
* A1 = STARTING MOVE PNT DATA *
|
||
* RETURNS: *
|
||
* A2 = SAFEST DIRECTION *
|
||
* A3 = # OF STEPS 'TIL END *
|
||
* A4 = END TYPE (0 = WALL, 1 = DEATH) *
|
||
* *
|
||
**************************************************************************
|
||
FIND_SAFEST
|
||
MMTM SP,A0,A5,A6
|
||
CLR A2
|
||
CLR A3
|
||
CLR A4
|
||
CLR A0 ;MOVK UP,A0
|
||
FIND_SAFLP
|
||
CALLR SEARCH_SAFE
|
||
CMP A3,A5
|
||
JRLO FIND_SAFSK
|
||
MOVE A0,A2
|
||
MOVE A5,A3
|
||
MOVE A6,A4
|
||
FIND_SAFSK
|
||
INC A0
|
||
CMPI RIGHT,A0
|
||
JRLS FIND_SAFLP
|
||
MMFM SP,A0,A5,A6
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* FIND_OPEN_CPNT - FIND A RANDOM OPEN CENTER POINT. *
|
||
* RETURNS: *
|
||
* Z = NO OPEN CENTER POINTS WERE FOUND, A1 = DESTROYED *
|
||
* NZ = A1 = PTR TO OPEN SPACE *
|
||
* *
|
||
**************************************************************************
|
||
FIND_OPEN_CPNT
|
||
MMTM SP,A0,A3,A4,A6,A7
|
||
MOVE @CMOVECNT,A7,W ;GET THE NUMBER OF CENTER MOVES
|
||
JRZ FOCPX ;THERE ARE NO CENTER MOVES, whAT?
|
||
MOVK 10,A6 ;THIS MANY TRIES UNTIL FAILURE
|
||
FOCPLP
|
||
MOVE A7,A0
|
||
CALLA RANDU ;FIND A CENTER POINT
|
||
DEC A0 ;MAKE IT ZERO BASED
|
||
CALLA GETCMOVE
|
||
MOVB *A0(CMOVEEGG),A1 ;SPOT EMPTY?
|
||
INC A1
|
||
JRNE FOCPNXT ;BR = NO
|
||
MOVB *A0(CMOVETROG),A1 ;IS THE FUTURE OF THIS SPOT CLEAR?
|
||
INC A1
|
||
JRNE FOCPNXT ;BR = NO
|
||
MOVE *A0(CMOVEPOS),A3,L ;GET THE POSITION OF THIS POINT
|
||
CALLR DINO_PNT_TST
|
||
JRZ FOCPHERE
|
||
FOCPNXT
|
||
DSJ A6,FOCPLP
|
||
*RANDOM FAILURE MODE, JUST LOOK FOR THE FIRST AVAILABLE CENTER
|
||
MOVI CMOVEMAP,A0
|
||
FOCPCLP
|
||
MOVB *A0(CMOVEEGG),A1 ;SPOT EMPTY?
|
||
INC A1
|
||
JRNE FOCPCNXT ;BR = NO
|
||
MOVB *A0(CMOVETROG),A1 ;IS THE FUTURE OF THIS SPOT CLEAR?
|
||
INC A1
|
||
JRNE FOCPCNXT ;BR = NO
|
||
|
||
MOVE *A0(CMOVEPOS),A3,L ;GET THE POSITION OF THIS POINT
|
||
CALLR DINO_PNT_TST
|
||
JRZ FOCPHERE
|
||
FOCPCNXT
|
||
ADDI CMOVESIZE,A0
|
||
DSJ A7,FOCPCLP
|
||
CLR A0 ;NO OPEN SPACES, SET Z WITH THIS
|
||
FOCPHERE
|
||
MOVE A0,A1 ;SET OR CLR Z
|
||
FOCPX
|
||
MMFM SP,A0,A3,A4,A6,A7
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* SEARCH_SAFE - SEARCH A DIRECTION UNTIL A WALL OR DEATH IS HIT *
|
||
* A0 = DIRECTION TO SEARCH *
|
||
* A1 = PTR TO STARTING MOVE PNT *
|
||
* RETURNS: *
|
||
* A5 = # OF STEPS 'TIL END *
|
||
* A6 = END TYPE (0 = WALL, 1 = DEATH) *
|
||
* *
|
||
**************************************************************************
|
||
SEARCH_SAFE
|
||
MMTM SP,A0,A1
|
||
SWAP A0,A1
|
||
SLL 4,A1
|
||
ADDI MOVEREL,A1
|
||
CLR A5
|
||
SRCH_SAFLP
|
||
ADD A1,A0
|
||
MOVE *A0,A0,W
|
||
JRN SRCH_DEATH
|
||
CALLA GETMOVE
|
||
MOVB *A0(MOVEPLYR),A6
|
||
JRNN SRCH_WALL
|
||
MOVE *A0(MOVECPTR),A6,L ;GRAB THE CENTER MOVE PTR
|
||
JRN SRCH_NOCMV ;BR = NOT A CENTER MOVE
|
||
MOVB *A6(CMOVEEGG),A6 ;IS THERE AN EGG ON THIS SPOT
|
||
INC A6
|
||
JREQ SRCH_NOCMV ;BR = YES
|
||
DEC A6
|
||
CMPI TARID,A6 ;ARE WE DEALING WITH A TAR PIT HERE?
|
||
JREQ SRCH_DEATH ;BR = YES WE ARE
|
||
CMPI FIREID,A6 ;FIRE?
|
||
JREQ SRCH_DEATH ;BR = YES
|
||
CMPI PITID,A6 ;LOCAL PIT?
|
||
JREQ SRCH_DEATH ;BR = YES
|
||
SRCH_NOCMV
|
||
INC A5
|
||
JRUC SRCH_SAFLP
|
||
SRCH_WALL
|
||
CLR A6
|
||
MMFM SP,A0,A1
|
||
RETS
|
||
SRCH_DEATH
|
||
MOVK 1,A6
|
||
MMFM SP,A0,A1
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* START_INVINCIBILITY - ROUTINE TO START THE DINO INVINCIBILITY PROCESS. *
|
||
* A8 = PTR TO THE DINOSAUR OBJECT *
|
||
* A10 = INVINCIBILITY TIME *
|
||
* A13 = PTR TO DINO PROCESS *
|
||
* NOTE: TRASHES A14 *
|
||
* *
|
||
**************************************************************************
|
||
START_INVINCIBILITY
|
||
MMTM SP,A0,A1,A7,A8,A10,A11
|
||
MOVE *A13(DINVPROC),A0,L
|
||
JRZ START_I_NONE ;BR = NONE CURRENTLY
|
||
MOVE A10,A7
|
||
CALLA GETA10
|
||
ADD A7,A10 ;ADD SOME MORE TIME TO THE KITTY
|
||
CMPI 600,A10
|
||
JRLS SI_NOTOP
|
||
MOVI 600,A10
|
||
SI_NOTOP
|
||
CALLA PUTA10
|
||
JRUC SI_NO_RING ;AND BLOW THIS JOINT
|
||
START_I_NONE
|
||
MOVE A13,A11
|
||
CREATE INDPID,DINO_INVINCIBLE
|
||
MOVE A0,*A13(DINVPROC),L ;KEEP THIS IN CASE OF DEATH
|
||
JRZ SI_NO_RING
|
||
MOVE *A13(DINITTAB),A14,L
|
||
CALLA GPALOBJ
|
||
JRZ SI_NO_RING
|
||
CALLA COPY_OBJ
|
||
CALLA ADD_SLAVE
|
||
MOVE A8,A10
|
||
MOVE A0,A8
|
||
CREATE INDPID,DINO_RING
|
||
MOVE A0,*A8(OPLINK),L
|
||
JRNZ SI_NO_RING
|
||
CALLA DELETE_PAL
|
||
MOVE A8,A0
|
||
CALLA FREEOBJ
|
||
SI_NO_RING
|
||
MMFM SP,A0,A1,A7,A8,A10,A11
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* KILL_INVINCIBILITY - ROUTINE TO KILL THE DINO INVINCIBILITY PROCESS. *
|
||
* A8 = PTR TO THE DINOSAUR OBJECT *
|
||
* A13 = PTR TO DINO PROCESS *
|
||
* *
|
||
**************************************************************************
|
||
KILL_INVINCIBILITY
|
||
PUSH A0
|
||
CALLA DELETE_SLAVES
|
||
CLR A0
|
||
MOVB A0,*A13(DINVIN) ;DOWN FLAG
|
||
MOVE *A13(DINVPROC),A0,L
|
||
JRZ KI_NOPROC
|
||
CALLA KILL ;KILL THE INVINCIBLE
|
||
CLR A0
|
||
MOVE A0,*A13(DINVPROC),L
|
||
KI_NOPROC
|
||
PULL A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINO_INVINCIBLE - PROCESS TO MAKE THE DINOSAUR INVINCIBLE. *
|
||
* A10 = TICKS TO STAY INVINCIBLE *
|
||
* A11 = PTR TO DINOSAUR PROCESS *
|
||
* NOTES: REMAINING TIME MUST STAY IN A10. *
|
||
* THIS IS THE ONLY PROCESS ALLOWED TO CHANGE DINVIN. *
|
||
* *
|
||
**************************************************************************
|
||
DINO_INVINCIBLE
|
||
MOVE A11,A0
|
||
CALLA GETA8
|
||
CALLR IS_DINO_DEAD_A8 ;RACE CHECK, IS DINO DEAD?
|
||
JRZ DINO_INV_END ;BR = YES, THEN DON'T KEEP SAYING NO
|
||
|
||
MOVK 1,A0
|
||
MOVB A0,*A11(DINVIN)
|
||
DINO_INV_LP
|
||
SLEEP 10
|
||
SUBK 10,A10
|
||
JRGT DINO_INV_LP
|
||
|
||
MOVE A11,A0 ;REDUNDANT CODE FOR SAFETY
|
||
CALLA GETA8
|
||
DINO_INV_END
|
||
CALLA DELETE_SLAVES
|
||
CLR A0
|
||
MOVB A0,*A11(DINVIN)
|
||
MOVE A0,*A11(DINVPROC),L
|
||
DIE
|
||
|
||
.DATA
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINO SOUNDS *
|
||
* *
|
||
**************************************************************************
|
||
WIN_SND
|
||
.WORD >F340,>38,>808C,0 ;SOMEBODY JUST WON
|
||
DINOSPEED_SND
|
||
.WORD >F010,>70,>8039,0 ;DINO EATS A SPEED PLANT
|
||
DINOSHROOM_SND
|
||
.WORD >F010,>5D,>803B,0 ;DINO EATS A MUSHROOM
|
||
|
||
|
||
****DINOFIGHT_SNDTAB
|
||
**** .LONG DINOF1_SND,DINOF2_SND,DINOF3_SND,DINOF4_SND
|
||
**** .LONG DINOF2_SND,DINOF1_SND,DINOF4_SND,DINOF3_SND
|
||
|
||
****NUMFIGHTSNDS .EQU 8
|
||
****DINOF1_SND
|
||
**** .WORD >F005,>25,>8031,0 ;DINO REACTING TO PUNCHES
|
||
****DINOF2_SND
|
||
**** .WORD >F005,>19,>8032,0 ;DINO REACTING TO PUNCHES
|
||
****DINOF3_SND
|
||
**** .WORD >F005,>45,>8033,0 ;DINO REACTING TO PUNCHES
|
||
****DINOF4_SND
|
||
**** .WORD >F005,>22,>8034,0 ;DINO REACTING TO PUNCHES
|
||
****DINOBUMP_SND
|
||
**** .WORD >F010,>C,>805F,0 ;DINO CLUNKS HIS HEAD
|
||
****DINOHUH1_SND
|
||
**** .WORD >F001,>A,>8018,0 ;DINO CONFUSED BY STUPID PLAYER
|
||
HSHOE_SND
|
||
.WORD >F310,>3C,>80AD,0 ;DINO PICKS UP HORSESHOE
|
||
|
||
*
|
||
*TABLE OF INIT TABLES, USED TO GET THE INITIAL IMAGE BASED ON THE DINOSAUR
|
||
*TYPE I.D.
|
||
ALIGNTAB
|
||
.LONG REXINIT,BLOOPINIT,ELVISINIT,SPIKEINIT
|
||
.LONG SPIKEINIT,SPIKEINIT,SPIKEINIT,SPIKEINIT
|
||
.LONG SPIKEINIT,SPIKEINIT,SPIKEINIT,SPIKEINIT
|
||
.LONG SPIKEINIT,SPIKEINIT,SPIKEINIT,SPIKEINIT
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DINOSAUR COLLISION LIST(S) *
|
||
* *
|
||
**************************************************************************
|
||
|
||
DINOCOLL
|
||
.WORD HBAROID,08FFFH ;IGNORE PLAYER #
|
||
.LONG DINOHHIT
|
||
.WORD VBAROID,08FFFH
|
||
.LONG DINOVHIT
|
||
.WORD DINOOID,0FFF0H ;COLLIDE WITH ALL OTHER DINOS
|
||
.LONG DINODINO
|
||
.WORD TARBAITOID,0FFFFH
|
||
.LONG DINO_BAITTAR
|
||
.WORD TAROID,0FFF0H
|
||
.LONG DINOTAR
|
||
.WORD FIREOID,0FFF0H
|
||
.LONG DINOFIRE
|
||
.WORD PITOID,0FFFFH
|
||
.LONG DINOPIT
|
||
.WORD FLOWEROID,0FFFFH
|
||
.LONG DINOFLOWER
|
||
.WORD SHROOMOID,0FFFFH
|
||
.LONG DINOSHROOM
|
||
.WORD TUNNELOID,0FFFFH
|
||
.LONG DINOTUNNEL
|
||
.WORD PINEAPPLEOID,0FFFFH
|
||
.LONG DINOPAPPLE
|
||
.WORD HSHOEOID,0FFFFH
|
||
.LONG DINOHSHOE
|
||
.WORD ICEOID,0FFFFH
|
||
.LONG DINOICE
|
||
.WORD CHILIOID,0FFFFH
|
||
.LONG DINOCHILI
|
||
DUMCOLL ;LABEL FOR THE COMMON CAUSE
|
||
.WORD 0
|
||
.LONG DUMCRETS ;DO NOTHING
|
||
|
||
.END
|
||
|