trog/TROGENEM.ASM

3525 lines
79 KiB
NASM
Raw Permalink Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

.MLIB "TROGMACS.LIB"
.FILE 'TROGENEM.ASM'
.TITLE " <<< T R O G -- ENEMY DISPATCH ROUTINE AND TABLES >>>"
.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 "TROGEQU.ASM"
.INCLUDE "TROGAEQU.ASM"
.INCLUDE "trogaudn.asm"
.INCLUDE "IMGTBL.GLO"
.INCLUDE "TROGENEM.TBL" ;MODULE SPECIFIC IMAGES PLEASE
.DEF MASTERDP, ENEMY_START, TARBAITER, MASTBAIT
.DEF WAVE1DSP, WAVE3DSP, WAVE4DSP
.DEF WAVE7DSP, WAVE8DSP, WAVE9DSP, WAVE10DSP, WAVE11DSP, WAVE12DSP
.DEF WAVE13DSP, WAVE14DSP, WAVE15DSP, WAVE16DSP, WAVE17DSP
.DEF WAVE18DSP, WAVE19DSP, WAVE20DSP, WAVE21DSP, WAVE22DSP
.DEF WAVE23DSP, WAVE34DSP, WAVE36DSP, WAVE38DSP, WAVE32DSP
.DEF WAVE33DSP, WAVE42DSP, WAVE43DSP, WAVE45DSP, WAVE46DSP
.DEF WAVE47DSP, WAVE48DSP, WAVE49DSP
.DEF TAROUT, FIRE_UP_MONKEY_SHIT, PIT_CLOSE, TROG_PIT
.DEF HOUSE_PIT, VALID_CPNT, OPEN_PIT, LIGHT_MY_FIRE, DENT_GROUND
.DEF TUNNEL_PIT, FIRE_DOWN, TARBUBBLE_SND, FIRESTART_SND
.DEF FLAMEOUT6, FLAMEOUT7, FLAMEOUT8, FIREOUT_SND, TROG_PIT_COMM
**** .DEF TSHIRT_START
.DEF START_FIRE_LR, SMOKESTAR41, FIRE_ANIMII
.DEF FLOWERINIT, SHROOMINIT, PINEAPPLEINIT
.DEF FIREINIT, PITINIT, TARINIT, GETINIT_G
.DEF PINEAPPLESPIN,FLAMESM2
.DEF TAR_ANIM1, TAR1a
.DEF OGPIT11
.REF WAVETIME, DISPATCH_TABLE, FIND_OPEN_CPNT, TOMOVE, TROG_START
.REF OBJ_NEAR_CENT, SEARCH_SAFE , GETMOVE, TWO_MOVES, WHEEL_START
.REF FIND_CLOSE_CPNT
.REF INC_PLAYER_TIMERS
.REF FREE_MOVE_EGG, FIRE_DURATION, BGND_TYPE
.REF FINDMOVE, HOUSE_PITS, GET_EXIT_ANI, CENTER_CHECK, TUNNEL_CYCLE
.REF GPLAYNUM, GET_ADJ, GPLAYD, SEND2SCR, TROGSPRG_START
.REF EXTRA_TROG_START, BAITER_TIME, CK_TREX, PLANT_STALL
**** .REF OUTTSHIRT
.REF FIND_FARTHEST_CPNT, TUTOR, POWERUP_DURATION
.REF CATAPULT_START
.REF HOUSE_START
.REF ROCK_START, ROCK_TABLE_1, PALM_TABLE_1, TROGHENG1, ZIG_TABLE_1
.REF TROGSKULL1, TROGSKULL2, BONUS_WAVE, ZIG_TABLE_2
.REF HOUSE_TABLE_1, HOUSE_TABLE_2, HOUSE_TABLE_3
.REF TGEN_START, TGEN_TABLE_1, TGEN_CNT
.REF TROGSPEED, MAX_TROGSPEED, SPRGSPEED, EGG_DIVISOR
.TEXT
**************************************************************************
* *
* MASTERDP - MASTER DISPATCH PROCESS. *
* INITIAL DISPATCH: *
* THESE PROCS ARE DISPATCHED ONE TIME AT WAVE STAR *
* POSITION DISPATCH: *
* BASED ON THE CURRENT WORLD POSITION THE *
* POSITION TABLE IS USED TO DISPATCH THESE PROCS. *
* TIME DISPATCH: *
* DISPATCHES FROM THE TIME TABLE BASED ON THE *
* ELAPSED WAVE TIME. *
* ENFORCER BAITERS: *
* A PROCESS IS CREATED THAT LOOPS ON THE ENFORCER *
* TIME TAB. WHEN THE SPECIFIED ENFORCER TIME *
* IS REACHED. ONCE THIS STARTS THE PROCESS *
* LOOPS UNTIL WAVE END. *
* *
**************************************************************************
MASSTIME .EQU 3 ;MASTER DISPATCH SLEEP TIME CONSTANT
MASTERDP
MOVE @DISPATCH_TABLE,A2,L ;GET THE WAVE DISPATCH TABLE
*MASTER DISPATCH ENTRY FOR ARBITRARY DISPATCH TABLE
*A2 = PTR TO DISPATCH TABLE
MASTERG
MOVI MASTERID,A0
CLR A1
NOT A1
CALLA KILALL ;MAKE SURE NO OTHER DISPATCHERS ARE PRESENT
MASTINIL
MOVE *A2+,A4,L ;GET THE ROUTINE
JRZ MASTPT ;BR = DONE WITH INITIAL STUFF
MOVE *A2+,A5,L
MOVE *A2+,A6,L
MMTM SP,A2
CALL A4 ;DO THE ROUTINE
MMFM SP,A2
JRUC MASTINIL
MASTPT
MOVE *A2+,A9,L ;GET THE TIME TABLE
MOVE *A2+,A11,W
MOVE A11,@BAITER_TIME,W
CLR A11 ;CLEAR LOCAL TIMER
MOVE A11,@WAVETIME,L ;CLEAR MASTER WAVE TIMER
*DISPATCH ACCORDING TO TIME
MASTDPTM
MOVE A9,A9
JRZ MASTBAIT ;BR = NO TIME TABLE, SKIP
MOVE A9,*A13(PDATA),L
MOVE A11,A10
*
*MASTER DISPATCH LOOP
MASTDPL:
MOVE *A9,A1,W
JRZ MAST_RESET ;BR = CHECK AND INCREMENT TIMER
**** INC A1 ;END TABLE?
**** JRZ MASTBAIT ;BR = YES
**** DEC A1
ADD A10,A1 ;ADD LOOP TIMER OFFSET TO BASE
CMP A11,A1
JRGT MASTTDSP
ADDK 16,A9
MOVE *A9+,A4,L ;GET THE ROUTINE
MOVE *A9+,A5,L
MOVE *A9+,A6,L
MMTM SP,A8,A9,A10,A11
MOVE @TUTOR,A14,W
JRNZ MAST_SKIP_TIME
CALL A4 ;DO THE ROUTINE
MAST_SKIP_TIME
MMFM SP,A8,A9,A10,A11
MASTTDSP
CALLR MASTTINC
MASTPLAYLP:
SLEEP MASSTIME
MOVE @GAME_STATE,A0,W
CMPI INPLAY,A0
JRNE MASTPLAYLP ;BR = WAIT, WE ARE NOT PLAYING
JRUC MASTDPL
*
*RESET THE TIME TABLE AND DISPATCH AGAIN
MAST_RESET
MOVE @BONUS_WAVE,A0,W ;IS THIS A BONUS WAVE?
JRNE MASTBAIT ;BR = YES, THEN NO LOOPING
MOVE *A13(PDATA),A9,L
MOVE A11,A10
JRUC MASTTDSP
*HANG HERE AND INCREMENT TIMERS
MASTBAIT
CALLR MASTTINC
MASTBAITLP:
SLEEP MASSTIME
MOVE @GAME_STATE,A0,W
CMPI INPLAY,A0
JRNE MASTBAITLP
JRUC MASTBAIT
*
*MASTTINC - MASTER DISPATCH TIMER INCREMENT SUBROUTINE
MASTTINC
ADDK MASSTIME,A11 ;ADD THE MASTER DISPATCH SLEEP TIME
MOVK MASSTIME,A0
ADDRM A0,@WAVETIME,L ;TRASHES A14
ALLPLYR INC_PLAYER_TIMERS
RETS
**************************************************************************
* *
* ENEMY_START - START THE ENEMY PROCESS(ES) WITH THE GIVEN START *
* PARAMETERS. *
* A1 = PID OF PROCESS TO START *
* A7 = ADDRESS OF PROCESS TO START *
* A5 = [RANDOM # TO ADD, # TO START] *
* A8 - A11 = PASS TO PROCESS *
* *
**************************************************************************
ENEMY_START:
MMTM SP,A0,A5,A6
MOVY A5,A6
ZEXT A5
JRZ ENEMY_CK_RAND
ENEMY_START_LP:
CALLA GETPRC
DSJS A5,ENEMY_START_LP
ENEMY_CK_RAND:
SRL 16,A6
JRZ ENEMY_NO_RAND
MOVE A6,A0
CALLA RANDU
MOVE A0,A5
ENEMY_START_LP1:
CALLA GETPRC
DSJS A5,ENEMY_START_LP1
ENEMY_NO_RAND:
MMFM SP,A0,A5,A6
RETS
**************************************************************************
* *
* ENEMY_CALL - CALL ENEMY ROUTINE(S). *
* A5 = [RANDOM # TO ADD, # OF TIMES TO CALL] *
* A7 = ROUTINE TO CALL *
* *
**************************************************************************
ENEMY_CALL:
MMTM SP,A5,A6
MOVY A5,A6
ZEXT A5
JRZ ENEMY_CALL_RAND
ENEMY_CALL_LP:
CALL A7
DSJS A5,ENEMY_CALL_LP
ENEMY_CALL_RAND:
SRL 16,A6
JRZ ENEMY_CALL_NORAND
MOVE A6,A0
CALLA RANDU
MOVE A0,A5
ENEMY_CALL_LP1:
CALL A7
DSJS A5,ENEMY_CALL_LP1
ENEMY_CALL_NORAND:
MMFM SP,A5,A6
RETS
**************************************************************************
* *
* TAR_START - START SOME TAR PITS *
* A5 = [RANDOM # TO ADD, # TO START] *
* A6 = OID *
* *
**************************************************************************
TAR_START:
MMTM SP,A1,A7,A10
MOVI TARPID,A1
MOVI TAR_PROCESS,A7
MOVE A6,A10
CALLR ENEMY_START
MMFM SP,A1,A7,A10
RETS
**************************************************************************
* *
* TAR_PROCESS - PROCESS TO CREATE AND ANIMATE A TAR PIT *
* A10 = OID *
* *
**************************************************************************
TAR_PROCESS:
SLEEP 60 ; GIVE EVERYBODY A CHANCE TO WAKE UP
TAR_PROC_AGAIN:
MOVI 120,B0 ;SOMEWHERE BETWEEN 2 AND 15
MOVI 900,B1
CALLA RANGRAND
SLEEPR A0
CALLR FIND_COOL_CPNT ; A LITTLE SMARTER
JRZ TAR_PROC_AGAIN
CLR A8
MOVE A8,*A13(PDATA),L
MOVI SET_TZPOS,A8
MOVI TARIN,A9
CALLR GETTARINIT
MOVE A14,A11
JRUC PLANT_PROC_SELECT
**************************************************************************
* *
* TROG_FIRE_PICK - PICK SOME SPOTS FOR TROG TO PLACE HIS FIRES. *
* A5 = [RANDOM # TO ADD, # TO START] *
* *
**************************************************************************
TROG_FIRE_PICK:
MMTM SP,A0,A1,A7
MOVI FIREPID,A1
MOVI FIRE_PICK,A7
CALLR ENEMY_START
MMFM SP,A0,A1,A7
RETS
**************************************************************************
* *
* FIRE_PICK - PROCESS TO PICK A SPOT FOR TROG TO PLACE A FIRE HIMSELF. *
* *
**************************************************************************
FIRE_PICK:
CALLA FIND_OPEN_CPNT ;GET AN OPEN CENTER
JRNZ FIRE_PICKED ;BR = WE FOUND ONE
SLOOP 10,FIRE_PICK ;PLEASE TRY YOUR CALL AGAIN, LATER.
FIRE_PICKED:
MOVI FIREID,A0
MOVB A0,*A1(CMOVETROG)
DIE
**************************************************************************
* *
* LIGHT_MY_FIRE - PROCESS TO START A TROG FIRE ON A GIVEN CENTER POINT *
* A8 = PTR TO THE TROG OBJECT *
* A9 = TROG'S CURRENT SLEEP MULTIPLIER *
* A10 = PTR TO CENTER POINT *
* A11 = TROG'S CURRENT DIRECTION *
* *
**************************************************************************
LIGHT_MY_FIRE:
MOVB *A10(CMOVEEGG),A1
INC A1
JRNZ FIRE_PROC_DIE ;BR = SPACE IS TAKEN
MOVE A9,*A13(PTEMP1),W ;STORE SLEEP MULTIPLIER
MOVE A11,A0
SLL 6,A0
ADDI TROG_FIRE_TAB,A0
MOVE *A0+,A14,L
MOVE *A0,A9,L
CALLA GPALOBJSTF
JRZ FIRE_PROC_DIE ;BR = NO OBJECT TO FIRE
MOVI FIREID,A3
MOVB A3,*A10(CMOVEEGG) ;MARK IT TAKEN
MOVE A13,*A0(OPLINK),L ;LINK IT HOME
CALLA GETANIXY ;GET TROG'S ANIMATION POINT
SRL 16,A3
MOVY A2,A3
MOVE A0,A8 ;NOW LET'S ALIGN THE SMOKE
CALLA OBJ_TO_PNT
CALLA SET_ZPOS ;THIS NEEDS OBJECT IN A0
CALLA INSERT_OBJ ;VIEWABLE
MOVK 1,A1
**** MOVE *A13(PTEMP1),A2,W
**** SLL 16,A2
**** MOVY A2,A1 ;GIVE THIS THING THE CORRECT SPEED
JSRP FRANIM
CALLA OBJ_OFF ;OFF UNTIL WE RE ALIGN
MOVE A10,A0
CALLA TOMOVE ;ALIGN ON THE CENTER MOVE
MOVK 4,A1
JSRP FRANIM ;GET THE FLAME FRAME
MOVE A0,A7 ;KEEP THE SLEEP TIME
CALLA OBJ_ON ;TURN IT BACK ON
MOVE A8,A0
CALLA SET_MZPOS
SLEEPR A7
MOVK 1,A1
JSRP FRANIM ;BLOW UP IN TROG'S FACE
MOVI ENEMIES,A1
CALLA INSERT_SUPP
MOVI FIRE_ANIM_LP,A9
MOVI FIREPID,A0
MOVE A0,*A13(PROCID),W
ANDNIM M_NOCOLL,*A8(OFLAGS),W ;MAKE SURE COLLISIONS ARE ON
*
*A8 = FULLY INSERTED AND ALIGNED FIRE OBJECT, ALSO CENTER MOVE NEEDS
* TO BE MARKED
*A9 = ANIMATION SCRIPT THAT YOU LIKE
FIRE_BURN:
MOVE @FIRE_DURATION,A11,W ;GET THE BURN TIME
FIRE_BURN_LP:
MOVK 4,A1
JSRP FRANIM ;BURN BABY BURN, DISCO INFERNO!
SUB A0,A11 ;TAKE AWAY FROM OUR TIME
JRLE FLAME_OUT ;BR = OUR TIME IS UP
SLOOPR A0,FIRE_BURN_LP
FLAME_OUT:
MOVI ENEMIES,A1
CALLA DELETE_SUPP ;THIS IS NO LONGER DANGEROUS
CALLA FREE_MOVE_EGG ;FREE THE SPOT FOR ANOTHER FIRE
MOVI FIRE_DOWN,A9
MOVK 1,A1
JSRP FRANIM
CLR A0
MOVE A0,*A8(OPLINK),L
CALLA DELETE_OBJ
FIRE_PROC_DIE:
DIE
**************************************************************************
* *
* TROG_PIT_PICK - PICK SOME SPOTS FOR TROG TO BASH PITS. *
* A5 = [RANDOM # TO ADD, # TO START] *
* *
**************************************************************************
TROG_PIT_PICK:
MMTM SP,A0,A1,A7
MOVI PITPID,A1
MOVI PIT_PICK,A7
CALLR ENEMY_START
MMFM SP,A0,A1,A7
RETS
**************************************************************************
* *
* PIT_PICK - PROCESS TO PICK A SPOT FOR TROG TO PLACE A PIT HIMSELF. *
* *
**************************************************************************
PIT_PICK:
CALLA FIND_COOL_CPNT ;GET AN OPEN CENTER
JRNZ PIT_PICKED ;BR = GOT ONE
SLOOP 20,PIT_PICK ;TRY LATER
PIT_PICKED:
MOVI PITID,A0
MOVB A0,*A1(CMOVETROG)
DIE
**************************************************************************
* *
* OPEN_PIT - PROCESS TO CREATE A PIT ON A GIVEN CENTER POINT. *
* A9 = PTR TO CENTER POINT *
* *
**************************************************************************
OPEN_PIT:
MOVB *A9(CMOVEEGG),A1
INC A1
JRNZ PLANT_PROC_DIE ;BR = SPACE IS TAKEN
CLR A8
MOVE A8,*A13(PDATA),L
MOVI SET_TZPOS,A8
MOVE A9,A1
MOVI PIT_OPEN,A9
MOVI PITOID,A10
CALLR GETPITINIT
MOVE A14,A11
JRUC PLANT_PROC_SELECT
*
*ENTRYPOINT TO PLOP A PIT ON A CENTER POINT. MAKE SURE THE POINT IS
*CLEAR OF ANYTHING BEFORE YOU JUMP HERE.
*A1 = PTR TO CENTER POINT.
*A10 = PIT OID
PIT_PLACE:
MOVE A1,A5
CALLR GETPITINIT
CALLA GPALOBJSTF ;DO THE OBJECT
JRZ PIT_PROC_DIE
MOVE A13,*A0(OPLINK),L ;LINK IT UP
MOVE A10,*A0(OID),W
MOVE A0,A8
MOVE A5,A0
CALLA TOMOVE ;PLACE THE TAR ON THE CENTER MOVE
MOVI PITID,A0
MOVB A0,*A5(CMOVEEGG) ;MARK IT TAKEN
MOVE A8,A0
CALLA SET_TZPOS
CALLA INSERT_OBJ
MOVI PIT_OPEN,A9
MOVK 1,A1
JSRP FRANIM ;MAKE THE TARPIT GROW
MOVI ENEMIES,A1
CALLA INSERT_SUPP ;MAKE US COLLIDABLE
CLR A0
MOVE A0,*A8(OPLINK),L
PIT_PROC_DIE:
DIE
**************************************************************************
* *
* TROG_PIT - PROCESS TO OPEN PIT, HOLD, THEN CLOSE *
* A9 = [Y,X] PIT POSITION *
* *
**************************************************************************
TROG_PIT:
CALLR GETTROGPITINIT
CALLA GPALOBJSTF ;DO THE OBJECT
JRZ TROG_PIT_DIE
MOVE A13,*A0(OPLINK),L ;LINK IT UP
MOVE A0,A8
MOVE A9,A3
CALLA OBJ_TO_PNT
CALLA SET_TZPOS
MOVI ENEMIES,A1
CALLA INSERT_OBJ_SUPP
CALLA FINDMOVE
JRNC TROG_PIT_LOST ;BR = THIS IS NOT A KNOWN MOVE
MOVE *A1(MOVECPTR),A1,L
JRN TROG_PIT_LOST ;BR = THIS IS NOT A CENTER POINT
MOVB *A1(CMOVEEGG),A0 ;MAY WE CONTROL THIS POINT?
INC A0
JRNZ TROG_PIT_LOST ;BR = FOR SOME REASON WE CAN'T, OH WELL
MOVI TROGPITID,A0
MOVB A0,*A1(CMOVEEGG) ;MARK IT TAKEN
JRUC TROG_PIT_STORE
TROG_PIT_LOST:
CLR A1
TROG_PIT_STORE:
MOVE A1,*A13(PTEMP1),L ;STORE FOR UNMARK
MOVI PIT_OPEN,A9
MOVK 1,A1
JSRP FRANIM ;MAKE THE TARPIT GROW
SLEEP 15
MOVI PIT_CLOSE,A9
MOVK 1,A1
JSRP FRANIM
MOVI ENEMIES,A1
CALLA DELETE_OBJ_SUPP
MOVE *A13(PTEMP1),A1,L
JRZ TROG_PIT_DIE
CLR A0
NOT A0
MOVB A0,*A1(CMOVEEGG) ;MARK IT FREE
TROG_PIT_DIE:
DIE
**************************************************************************
* *
* TROG_PIT_COMM - PROCESS TO OPEN PIT, WAIT FOR PCOMM TO BE <> 0 THEN *
* CLOSE. *
* A9 = [Y,X] PIT POSITION *
* A11 = PTR TO TROG PROCESS TRYING TO CREATE THIS. *
* *
**************************************************************************
TROG_PIT_COMM:
CLR A0
MOVE A0,*A13(PCOMM),W ;FIRST CLEAR THAT COMM LINE
CALLR GETTROGPITINIT
CALLA GPALOBJSTF ;DO THE OBJECT
JRNZ TROG_PIT_COMM_OK ;BR = OK, DONE.
MOVI COMM_PIT_FAIL,A1
CALLA SEND_COMM
JRUC TROG_PIT_COMM_DIE
TROG_PIT_COMM_OK:
MOVE A13,*A0(OPLINK),L ;LINK IT UP
MOVE A0,A8
MOVE A9,A3
CALLA OBJ_TO_PNT
CALLA SET_TZPOS
MOVI ENEMIES,A1
CALLA INSERT_OBJ_SUPP
CALLA FINDMOVE
JRNC TROG_PIT_COMM_LOST ;BR = THIS IS NOT A KNOWN MOVE
MOVE *A1(MOVECPTR),A1,L
JRN TROG_PIT_COMM_LOST ;BR = THIS IS NOT A CENTER POINT
MOVB *A1(CMOVEEGG),A0 ;MAY WE CONTROL THIS POINT?
INC A0
JRNZ TROG_PIT_COMM_LOST ;BR = FOR SOME REASON WE CAN'T, OH WELL
MOVI TROGPITID,A0
MOVB A0,*A1(CMOVEEGG) ;MARK IT TAKEN
JRUC TROG_PIT_COMM_STORE
TROG_PIT_COMM_LOST:
CLR A1
TROG_PIT_COMM_STORE:
MOVE A1,*A13(PTEMP1),L ;STORE FOR UNMARK
MOVI PIT_OPEN,A9
MOVK 1,A1
JSRP FRANIM ;MAKE THE PIT OPEN UP
MOVI COMM_PIT_OPEN,A1
CALLA SEND_COMM
MOVI COMM_PIT_CLOSE,A2
MOVI 150,A3
JSRP COMM_WAIT ;CLOSE WHEN HE WANTS US TO
MOVI PIT_CLOSE,A9
MOVK 1,A1
JSRP FRANIM
MOVI ENEMIES,A1
CALLA DELETE_OBJ_SUPP
MOVE *A13(PTEMP1),A1,L
JRZ TROG_PIT_COMM_DIE
CLR A0
NOT A0
MOVB A0,*A1(CMOVEEGG) ;MARK IT FREE
TROG_PIT_COMM_DIE:
DIE
**************************************************************************
* *
* HOUSE_PIT - PROCESS TO OPEN PIT ON A HOME, HOLD, THEN CLOSE *
* A9 = PTR TO EXIT MOVE *
* *
**************************************************************************
HOUSE_PIT:
MOVE A9,A4
CALLA GET_EXIT_ANI
JRZ HOUSE_PIT_DIE
MOVE *A9(EMOVEOBJ),A6,L
JRZ HOUSE_PIT_DIE
CALLR GETPITINIT
CALLA GPALOBJSTF ;DO THE OBJECT
JRZ HOUSE_PIT_DIE
MOVE A0,A8
MOVE A13,*A8(OPLINK),L ;LINK IT UP
MOVE *A6(OZVAL),A1,L
INC A1
MOVE A1,*A8(OZVAL),L
CALLA OBJ_TO_PNT
MOVI HOUSE_PITS,A1
MOVE A3,A0 ;LET'S LOOK FOR ANOTHER PIT
CALLA ISSUPPANI ;IS THERE ONE?
JRZ HOUSE_PIT_ONLY ;BR = NO, I'M THE ONLY ONE
MOVE A8,A9
MOVE A1,A8
CALLA OBJPROC_KILL
MOVI HOUSE_PITS,A1
CALLA DELETE_OBJ_SUPP ;AND KILL THE OTHER PIT
MOVE A9,A8
MOVI HOUSE_PITS,A1
CALLA INSERT_OBJ_SUPP
MOVI PIT_FULL,A9
MOVK 1,A1
JSRP FRANIM
SLEEP 60 ;MAKE UP FOR THE MISSED OPENING
JRUC HOUSE_PIT_DUMP
HOUSE_PIT_ONLY:
MOVI HOUSE_PITS,A1
CALLA INSERT_OBJ_SUPP
MOVI PIT_OPEN,A9
MOVK 1,A1
JSRP FRANIM ;MAKE THE TARPIT GROW
HOUSE_PIT_DUMP:
SLEEP 15
MOVI PIT_CLOSE,A9
MOVK 1,A1
JSRP FRANIM
MOVI HOUSE_PITS,A1
CALLA DELETE_OBJ_SUPP
CLR A0
HOUSE_PIT_DIE:
DIE
**************************************************************************
* *
* TUNNEL_PIT - PROCESS TO OPEN A TUNNEL PIT *
* *
**************************************************************************
TUNNEL_PIT:
CALLA FIND_COOL_CPNT
JRNZ TUNNEL_PIT_FOUND
SLOOP 10,TUNNEL_PIT
TUNNEL_PIT_FOUND:
MOVE A1,A10
CALLR GETPITINIT
CALLA GPALOBJSTF
JRZ TUNNEL_DIE
MOVI TUNNELID,A6
MOVB A6,*A10(CMOVEEGG)
MOVE A0,A8
MOVE A10,A0
CALLA TOMOVE ;PLACE THE PIT ON THE CENTER MOVE
MOVE A8,A0
CALLA SET_TZPOS
MOVI TUNNELOID,A0
MOVE A0,*A8(OID),W
CALLA INSERT_OBJ
MOVI PIT_OPEN,A9
MOVK 1,A1
JSRP FRANIM ;MAKE THE PIT OPEN
MOVI ENEMIES,A1
CALLA INSERT_SUPP
MOVI TUNNELINIT,A14
CALLA GPALOBJSTF
JRZ TUNNEL_DIE
MOVE A0,A8
MOVE A10,A0
CALLA TOMOVE ;PLACE THE PIT ON THE CENTER MOVE
MOVE A8,A0
CALLA SET_TZPOS
MOVI ENEMIES,A1
CALLA INSERT_OBJ_SUPP
CREATE INDPID,TUNNEL_CYCLE
TUNNEL_DIE:
DIE
**************************************************************************
* *
* DENT_GROUND - PROCESS TO DENT THE GROUND ON A GIVEN MOVE POINT. *
* A11 = MOVE POINT TO PLACE DENT. *
* *
**************************************************************************
DENT_GROUND:
CALLR GETPITINIT
CALLA GPALOBJSTF ;DO THE OBJECT
JRZ DENT_GROUND_DIE
MOVE A13,*A0(OPLINK),L ;LINK IT UP
MOVE A0,A8
MOVE *A11(MOVEPOS),A3,L
CALLA OBJ_TO_PNT
CALLA SET_TZPOS
CALLA INSERT_OBJ
SLEEP 10 ;KEEP IT UP
CALLA DELETE_OBJ
DENT_GROUND_DIE:
DIE
**************************************************************************
* *
* GETPITINIT - GET THE CORRECT PIT INIT TABLE FOR THE WAVE. *
* GLOBALS: *
* BGND_TYPE,W *
* RETURNS: *
* A14 = CORRECT PIT INIT TO USE *
* *
**************************************************************************
GETPITINIT:
MOVI PIT_TAB,A14
JRUC GETINIT_G
**************************************************************************
* *
* GETTROGPITINIT - GET THE CORRECT PIT INIT TABLE FOR THE TROG APPEAR. *
* GLOBALS: *
* BGND_TYPE,W *
* RETURNS: *
* A14 = CORRECT PIT INIT TO USE *
* *
**************************************************************************
GETTROGPITINIT:
MOVI TROGPIT_TAB,A14
JRUC GETINIT_G
**************************************************************************
* *
* GETTARINIT - GET THE PROPER TARPIT INIT TABLE ACCORDING TO BACKGROUND. *
* RETURNS: *
* A14 = TAR INIT TABLE *
* *
**************************************************************************
GETTARINIT
MOVI TAR_TAB,A14
GETINIT_G:
PUSH A0
MOVE @BGND_TYPE,A0,W
SLL 5,A0
ADD A0,A14
MOVE *A14,A14,L
PULL A0
RETS
**************************************************************************
* *
* START_POWERUPS - ROUTINE TO START THE POWERUPS. *
* A5 = [SLEEP TIME BETWEEN POWERUPS, TOTAL OF EACH POWER UP] *
* A6 = [POWERUP COUNTS, POWERUP FLAGS] *
* POWERUP FLAGS: *
* BIT 0 = HORSESHOE *
* BIT 1 = PINEAPPLE *
* BIT 2 = ICE CUBE *
* BIT 4 = CHILI PEPPER *
* *
**************************************************************************
START_POWERUPS
MMTM SP,A0,A1,A7,A8,A10
MOVE A5,A8
MOVE A6,A10
MOVI POWERUPPID,A0
CLR A1
NOT A1
CALLA EXISTP
JRNZ SP_X
CREATE POWERUPPID,POWERUP_DISPATCH
SP_X
MMFM SP,A0,A1,A7,A8,A10
RETS
*
*FLAG EQUATES FOR "START_POWERUPS"
HSHOE .EQU 1
PAPPLE .EQU 2
ICE .EQU 4
CHILI .EQU 8
POWERUPCNT .EQU PDATA
POWERUPUSED .EQU PDATA+10H
POWERUPDATA .EQU PDATA+110H
NPOWERUPS .EQU 4
**************************************************************************
* *
* POWERUP_DISPATCH - PROCESS TO RANDOMLY SELECT FROM THE AVAILABLE *
* POWERUPS THIS WAVE AND OUTPUT THEM. *
* A8 = A5 FROM "START_POWERUPS" *
* A10 = A6 FROM "START_POWERUPS" *
* *
**************************************************************************
POWERUP_DISPATCH
CALLA CLRPDATA
MOVI POWERUP_TAB,A1
MOVE A13,A2
ADDI POWERUPDATA,A2
MOVI NPOWERUPS,A3
CLR A4
LD_INIT_LP
SRL 1,A10
JRNC LD_INIT_NXT
MOVE *A1+,*A2+,L ;GET THE ROUTINE
MOVE *A1+,*A2+,L ;GET THE OID AND PROCID
INC A4
LD_INIT_NXT
DSJ A3,LD_INIT_LP
MOVE A4,*A13(POWERUPCNT),W
CLR A9
MOVX A8,A9 ;TOTAL OBJECTS TO PUT OUT
SRL 16,A8 ;SLEEP TIME
JRUC LD_IMM
LD_LOOP
SLEEPR A8 ;MIN TIME BETWEEN OBJECTS
MOVE @TGEN_CNT,A1,W ;SKIP PAUSE IF WE ARE USING GENERATORS
JRNZ LD_IMM
MOVI EGGS,A1
CALLA CNTSUPP ;ARE THERE EGGS LEFT?
JRZ LD_LOOP ;BR = NO, JUST WAIT
LD_IMM
MOVI FLOWERPID,A0
MOVI 0FFF0H,A1
CALLA EXISTP ;IS THERE A POWERUP OUT THERE?
JRNZ LD_RAND_NXT ;BR = YES, WAIT FOR IT TO CRUISE
MOVE *A13(POWERUPCNT),A0,W
CALLA RANDU ;SELECT AN AVAILABLE POWERUP
DEC A0
MOVE A0,A6
SLL 4,A6
ADD A13,A6
ADDI POWERUPUSED,A6
MOVE *A6,A2,W
CMP A9,A2 ;HAVE WE USED ALL OF THIS TYPE?
JRLO LD_OK ;BR = NO
LD_RAND_NXT
SLOOP 5,LD_IMM
LD_OK
MOVE A0,A1
SLL 6,A1
ADDI POWERUPDATA,A1
ADD A13,A1
MOVE *A1+,A11,L
MOVE *A1+,A10,W
MOVE *A1+,A5,W
CMPI PINEAPPLE_SPINNER,A11
JRNE LD_OK_PCK
CALLA CK_TREX ;SPECIAL CHECK FOR THE PINEAPPLE
JRNZ LD_RAND_NXT
LD_OK_PCK
**** MOVE A5,A0
**** CLR A1
**** NOT A1
**** CALLA EXISTP
**** JRNZ LD_RAND_NXT
INC A2
MOVE A2,*A6,W ;SHOW THE NEW COUNT
MOVE A5,A1
MOVE A11,A7
CALLA GETPRC
SLEEP 4
MOVE *A13(POWERUPCNT),A4,W
MOVE A13,A1
ADDI POWERUPUSED,A1
LD_CK_LP
MOVE *A1+,A0,W ;SEE IF WE'VE EXHAUSTED ALL POWERUPS
CMP A9,A0
JRLO LD_LOOP
DSJS A4,LD_CK_LP
LD_HOLD_LP
SLOOP 300,LD_HOLD_LP ;JUST HANG TO STALL MORE POWERUPS
DIE
POWERUP_TAB
.LONG HSHOE_TOSS
.WORD HSHOEOID,HSHOEPID
.LONG PINEAPPLE_SPINNER
.WORD PINEAPPLEOID,PINEAPPLEPID
.LONG ICE_T
.WORD ICEOID,ICEPID
.LONG RED_HOT
.WORD CHILIOID,CHILIPID
**************************************************************************
* *
* PINEAPPLE_SPINNER *
* *
* SPIN THE PINEAPPLE AND GIVE EVERYBODY SOMETHING TO WATCH AND *
* KILL *
* *
* ENTRY *
* A10 OID TO USE *
* *
* EXIT *
* NOTHING *
* *
* CALL *
* CREATE *
* *
**************************************************************************
PINEAPPLE_SPINNER:
SLEEP 20 ; INSURES WE PICK UP STARTING
CLR A7
CALLA FIND_FARTHEST_CPNT
JRZ PINEAPPLE_SPINNER
MOVI PAPPLE_TIMEOUT,A8
MOVE A8,*A13(PDATA),L
CLR A8
MOVI PINEAPPLEGROW,A9
MOVI PINEAPPLEINIT,A11
JRUC PLANT_PROC_SELECT
**************************************************************************
* *
* PAPPLE_TIMEOUT - JUMP HERE TO TIME OUT THE PINEAPPLE ICON. *
* A8 = INSERTED PINEAPPLE OBJECT. *
* *
**************************************************************************
PAPPLE_TIMEOUT
MOVI PINEAPPLESPIN,A9
JSRP TIMEOUT_ANI
MOVI PINEAPPLE_OUT,A9
POWERUP_ANI_AND_DIE
MOVK 1,A1
JSRP FRANIM
CALLA FREE_MOVE_EGG
MOVI ENEMIES,A1
CALLA DELETE_OBJ_SUPP
JRUC POWERUP_TO
**************************************************************************
* *
* FLOWER_START - START SOME FLOWERS *
* A5 = [RANDOM # TO ADD, # TO START] *
* A6 = OID *
* *
**************************************************************************
FLOWER_START:
MMTM SP,A1,A7,A10
MOVI FLOWERPID,A1
MOVI FLOWER_PROCESS,A7
MOVE A6,A10
CALLR ENEMY_START
MMFM SP,A1,A7,A10
RETS
**************************************************************************
* *
* FLOWER_PROCESS - PROCESS TO CREATE AND ANIMATE A SPEED FLOWER *
* A10 = OID *
* *
**************************************************************************
FLOWER_PROCESS:
CLR A8
MOVE A8,*A13(PDATA),L
MOVI FLOWER_ANIM,A9
MOVI FLOWERINIT,A11
JRUC PLANT_PROC
**************************************************************************
* *
* SHROOM_PROCESS - PROCESS TO CREATE AND ANIMATE A MUSHROOM *
* A10 = OID *
* *
**************************************************************************
SHROOM_PROCESS
CLR A8
MOVE A8,*A13(PDATA),L
MOVI SHROOM_ANIM,A9
MOVI SHROOMINIT,A11
JRUC PLANT_PROC
**************************************************************************
* *
* HSHOE_TOSS - PROCESS TO CREATE AND ANIMATE A HORSESHOE *
* A10 = OID *
* *
**************************************************************************
HSHOE_TOSS
MOVI HSHOE_TIMEOUT,A8
MOVE A8,*A13(PDATA),L
MOVI SET_TZPOS,A8
MOVI HSHOE_ANIM,A9
MOVI HSHOEINIT,A11
OUT_IMMEADIATE:
SLEEP 10
CALLA FIND_OPEN_CPNT
JRZ OUT_IMMEADIATE
JRUC PLANT_PROC_SELECT
**************************************************************************
* *
* HSHOE_TIMEOUT - JUMP HERE TO TIME OUT THE HORSESHOE ICON. *
* A8 = INSERTED HORSEHOE OBJECT. *
* *
**************************************************************************
HSHOE_TIMEOUT
MOVI HSHOE_FLASH,A9
JSRP TIMEOUT_ANI
MOVI HSHOE_OUT,A9
JRUC POWERUP_ANI_AND_DIE
**** MOVK 1,A1
**** JSRP FRANIM
**** MOVI ENEMIES,A1
**** CALLA DELETE_OBJ_SUPP
**** JRUC POWERUP_TO
**************************************************************************
* *
* TIMEOUT_ANI - ANIMATION TIMEOUT FOR POWERUPS, SPEEDS ANIMATION OVER *
* TIME. USES POWERUP_DURATION AS ITS BASIS *
* A9 = ANIMATION SCRIPT TO TIMEOUT *
* NOTE: CALL WITH JSRP *
* TRASHES PTEMP1 *
* *
**************************************************************************
TIMEOUT_ANI
MMTM A12,A9,A10
MOVE @POWERUP_DURATION,A10,W ;GET THE NORMAL TIME
MOVE A9,*A13(PTEMP1),L
TOA_RELOAD
MOVE *A13(PTEMP1),A9,L
MOVE A10,A11
CMPI 100H,A11
JRHI TOA_HIGH
CMPI 20H,A11
JRHI TOA_OK
MOVI 20H,A11
JRUC TOA_OK
TOA_HIGH
CLR A11
TOA_OK
SLL 16,A11
TOA_FRAME
MOVK 4,A1
MOVY A11,A1 ;SEND IN THE MULTIPLIER
JSRP FRANIM
JRC TOA_RELOAD
SUB A0,A10
JRLE TOA_DONE
SLOOPR A0,TOA_FRAME
TOA_DONE
MMFM A12,A9,A10
RETP
**************************************************************************
* *
* ICE_T - PROCESS TO CREATE AND ANIMATE AN ICE CUBE *
* A10 = OID *
* *
**************************************************************************
ICE_T
MOVI ICE_MELT,A8
MOVE A8,*A13(PDATA),L
CLR A8
MOVI ICE_ANIM,A9
MOVI ICEINIT,A11
JRUC OUT_IMMEADIATE
**************************************************************************
* *
* ICE_MELT - JUMP HERE TO TIMEOUT ICE CUBE. *
* A8 = INSERTED ICE CUBE OBJECT *
* *
**************************************************************************
ICE_MELT
MOVI ICE_FLASH,A9
JSRP TIMEOUT_ANI
MOVI ICE_OUT,A9
MOVK 1,A1
JSRP FRANIM
JRUC DOUBLE_ANI_AND_DIE
**** MOVI ENEMIES,A1
**** CALLA DELETE_SUPP
**** MOVK 1,A1
**** JSRP FRANIM
**** CALLA FREE_MOVE_EGG
**** CALLA DELETE_OBJ
**** JRUC POWERUP_TO
**************************************************************************
* *
* RED_HOT - PROCESS TO CREATE AND ANIMATE THE RED HOT CHILI PEPPER *
* A10 = OID *
* *
**************************************************************************
RED_HOT
MOVI RED_COLD,A8
MOVE A8,*A13(PDATA),L
CLR A8
MOVI CHILI_ANIM,A9
MOVI CHILIINIT,A11
JRUC OUT_IMMEADIATE
**************************************************************************
* *
* RED_COLD - JUMP HERE TO TIMEOUT CHILI PEPPER. *
* A8 = INSERTED CHILI PEPPER OBJECT *
* *
**************************************************************************
RED_COLD
MOVI CHILI_BURN,A9
JSRP TIMEOUT_ANI
MOVI FIRE_DOWN,A9
DOUBLE_ANI_AND_DIE
MOVI ENEMIES,A1
CALLA DELETE_SUPP
MOVK 1,A1
JSRP FRANIM
CALLA FREE_MOVE_EGG
CALLA DELETE_OBJ
POWERUP_TO
CLR A0
MOVE A0,*A8(OPLINK),L
JAUC PLANT_STALL
**************************************************************************
* *
* PLANT_PROC - PROCESS TO START A PLANT. WILL SELECT AN OPEN CENTER. *
* A8 = Z POSITION ROUTINE TO CALL (0 = CALL SET_MZPOS) *
* A9 = ANIMATION SCRIPT *
* A10 = OID *
* A11 = INIT TABLE FOR THIS PLANT *
* *A13(PDATA),L = JUMP HERE AFTER ALL ANIMATIONS ARE DONE. (0 = NO JUMP) *
* *
**************************************************************************
PLANT_PROC:
SLEEP 60 ; GIVE EVERYBODY A CHANCE TO WAKE UP
PLANT_PROC_AGAIN:
MOVE @BONUS_WAVE,A0,W
JRZ PP_NORM
MOVK 5,A0
JRUC PP_SEARCH
PP_NORM
MOVI 120,B0 ; SOMEWHERE BETWEEN 2 AND 15
MOVI 900,B1
CALLA RANGRAND
PP_SEARCH
SLEEPR A0
CALLA FIND_OPEN_CPNT
JRZ PLANT_PROC_AGAIN
*
*A1 = PTR TO CENTER MOVE
*
PLANT_PROC_SELECT
MOVE A1,A5
MOVE A11,A14
CALLA GPALOBJSTF ;DO THE OBJECT
JRZ PLANT_PROC_DIE
MOVE A8,*A13(PDATA+20H),L
MOVE A13,*A0(OPLINK),L ;LINK IT UP
MOVE A10,*A0(OID),W
MOVE A0,A8
MOVE A5,A0
CALLA TOMOVE ;PLACE THE FLOWER ON THE CENTER MOVE
MOVB A10,*A5(CMOVEEGG) ;MARK IT TAKEN
MOVE A8,A0
MOVE *A13(PDATA+20H),A7,L
JRZ PP_MZSET
CALL A7
JRUC PP_INSERT
PP_MZSET
CALLA SET_MZPOS
PP_INSERT
CALLA INSERT_OBJ
MOVK 1,A1
JSRP FRANIM
MOVI ENEMIES,A1
CALLA INSERT_SUPP ;MAKE US COLLIDABLE
MOVK 1,A1
JSRP FRANIM
MOVE *A13(PDATA),A7,L ;SHALL WE JUMP SOMEWHERE?
JRZ PP_NRMX ;BR = NO
JUMP A7
PP_NRMX
CLR A0
MOVE A0,*A8(OPLINK),L
PLANT_PROC_DIE:
DIE
**************************************************************************
* *
* SHROOM_START - START SOME SHROOMS PITS *
* A5 = [RANDOM # TO ADD, # TO START] *
* A6 = OID *
* *
**************************************************************************
SHROOM_START:
MMTM SP,A1,A7,A10
MOVI SHROOMPID,A1
MOVI SHROOM_PROCESS,A7
MOVE A6,A10
CALLR ENEMY_START
MMFM SP,A1,A7,A10
RETS
**************************************************************************
* *
* BAITER PIT ROUTINES *
* *
**************************************************************************
TB_SLEEP .EQU 40 ;TICKS PER LOOP OF TAR BAITER DISPATCH
MAX_BAITERS .EQU 15 ;MAXIMUM BAITERS ALLOWED AT ONE TIME
**************************************************************************
* *
* TARBAITER - PROCESS TO CREATE TAR PIT BAITERS AS NEEDED *
* *
**************************************************************************
TARBAITER:
MOVE @BAITER_TIME,A9,W
JRZ TBDIE
MOVE @EGG_DIVISOR,A0,W
JRZ TB_SKIP_INC
DEC A0
MOVI 600,A1
MPYU A0,A1
ADD A1,A9 ;INCREASE BAITER TIME FOR EVERY PLAYER
TB_SKIP_INC
MOVE @TUTOR,A0,W
JRNZ TBDIE
MOVE @BONUS_WAVE,A0,W
JRNZ TBDIE
TB_WAIT_LP
SLEEP 10
MOVE @WAVETIME,A0,W
CMP A9,A0
JRLS TB_WAIT_LP
TB_START_LP
MOVI TARBAITOID,A10
CREATE TARBAITPID,BAIT_PROCESS
CLR A8
MOVE A9,A11
JRUC TBSLEEP
TBLOOP
MOVI TARBAITPID,A0
CLR A1
NOT A1
CALLA EXISTP
JRZ TB_START_LP
INC A8
TBSLEEP:
SLEEP TB_SLEEP
MOVE A11,A11
JRZ TBFINAL
CMPI 1,A8
JRNE TBREDUCE
SRL 1,A9
TBREDUCE
SUBI TB_SLEEP,A11
JRGT TBLOOP
CMPI TB_SLEEP,A9
JRLS TB_START_LP
*
*HANDLE WAVE SPEED UPS HERE
*
SOUND1 TEMPO_UP ;SPEED UP THE SOUNDS
MOVE @TROGSPEED,A0,W ;CURRENT TROG SPEED
MOVE @MAX_TROGSPEED,A1,W ;MAX TROG SPEED THIS WAVE
CMP A1,A0 ;HAVE WE SPED UP ENOUGH
JRHS TB_START_LP ;BR = YES
ADDI 100H,A0
MOVE A0,@TROGSPEED,W ;FUTURE TROGS WILL WALK FASTER
ADDIM 100H,@SPRGSPEED,W ;SPEED UP SPRING DUDE TOO
JRUC TB_START_LP
TBFINAL
SLOOP TB_SLEEP,TBLOOP
TBDIE
DIE
**************************************************************************
* *
* BAIT_PROCESS *
* *
* PROCESS TO RUN A BAITER PIT -- BRING IT IN AND THEN START *
* MOVING TOWARDS THE PLAYER *
* *
* NOTE : THERE NEEDS TO BE SOME WAY OF SPECIFYING HOW AGGRESSIVE *
* THE PIT WILL BE -- IN TERMS OF STARTING DISTANCE AND TIME *
* BETWEEN RELOCATIONS *
* *
* ENTRY *
* A10 OID *
* *
* EXIT *
* NOTHING *
* *
**************************************************************************
BAIT_PROCESS:
MOVE *A13(PROCID),A1,W
CALLA COUNT_PROCESSES
CMPI MAX_BAITERS,A0
JRHI BAIT_PROC_DIE
MOVK 8,A1 ; PLACE TO START FROM
MOVE A1,*A13(PTEMP1),L ; INTERNAL SEARCH THING
CALLR PIMP_DINO ; DINO TO PICK ON
MOVE A8,A8
JRZ BAIT_PROC_DIE
MOVE *A13(PTEMP1),A7,L ; STARTING DISTANCE FROM DINO
CALLR FIND_PIMP_CPNT ; LOCATE A STARTING PLACE
JRZ BAIT_PROC_DIE ; NOTHING MEETS THE CRITERION
MOVE A1,A5
CALLR GETTARINIT
CALLA GPALOBJSTF ;DO THE OBJECT
JRZ BAIT_PROC_DIE
MOVE A13,*A0(OPLINK),L ;LINK IT UP
MOVE A10,*A0(OID),W
MOVE A0,A8
CALLA OBJ_OFF
CALLA INSERT_OBJ
;
; MOVE THE PIT AROUND THE SCREEN
;
BAIT_LOOP:
MOVE A5,A0
MOVE A5,A11 ; SAVE LAST POSITION
CALLA TOMOVE ;PLACE THE TAR ON THE CENTER MOVE
MOVB *A5(CMOVEEGG),A0
INC A0
JRZ BTA_OK_SPOT ;BAITER MAY NOT TAKE THIS SPOT
SLEEP 5
JRUC BTA_NEXT
BTA_OK_SPOT
MOVI TARBAITID,A0
MOVB A0,*A5(CMOVEEGG) ; MARK IT TAKEN
BAIT_NO_SPOT:
MOVE A8,A0
CALLA SET_TZPOS
CALLA OBJ_ON
MOVI TARIN,A9
MOVK 1,A1
JSRP FRANIM ; MAKE THE TARPIT GROW
MOVI ENEMIES,A1
CALLA INSERT_SUPP ; MAKE US COLLIDABLE
MOVI TAR_ANIM1,A9
MOVI 100,A10
BTALOOP:
MOVK 4,A1
JSRP FRANIM ;TOIL, TOIL, BUBBLE AND BOIL
SUB A0,A10
JRN BTADONE
SLEEPR A0
JRUC BTALOOP
BTADONE
MOVI ENEMIES,A1
CALLA DELETE_SUPP ; MAKE US NON-COLLIDABLE
MOVI TAROUT,A9
MOVK 1,A1
JSRP FRANIM
CALLA FREE_MOVE_EGG ; MARK SPOT FREE
CALLA OBJ_OFF
BTA_NEXT
MMTM SP,A7,A8,A9
CALLR PIMP_DINO ; DINO TO PICK ON
MOVE A8,A8
JRNZ BLLIVEDINO
MMFM SP,A7,A8,A9
JRUC BAIT_PROC_DEL_DIE
BLLIVEDINO
MOVE *A13(PTEMP1),A7,L ; STARTING DISTANCE FROM DINO
DEC A7
JRP BL3
MOVK 1,A7
BL3 MOVE A7,*A13(PTEMP1),L
CALLR FIND_PIMP_CPNT ; LOCATE A STARTING PLACE
MMFM SP,A7,A8,A9
JRZ BL1 ; NOTHING MEETS THE CRITERION
BL2
MOVE A1,A5
JRUC BAIT_LOOP
BL1 MOVE A11,A1
JRUC BL2
BAIT_PROC_DEL_DIE
CALLA DELETE_OBJ
CLR A0
MOVE A0,*A8(OPLINK),L
BAIT_PROC_DIE:
DIE
**************************************************************************
* *
* FIND_PIMP_CPNT FIND THE PIMP CENTER POINT *
* *
* ENTRY *
* A7 NUMBER OF STEPS TO LOOK AHEAD *
* A8 DINO POINTER *
* A9 DINO OBJECT POINTER *
* *
* EXIT *
* A1 CENTER POINT TO STICK A PIT ( BEST GUESS ) *
* *
**************************************************************************
FIND_PIMP_CPNT:
MMTM SP,A0,A2,A7,A8,A9
MOVE *A8(DDIR),A2,W ; DIRECTION
MOVE A9,A8 ; GOTTA CALL SOMETHING HERE
CALLA GETCPNT
CALLA FIND_CLOSE_CPNT
;
MOVE *A0(CMOVEMPTR),A1,L ; GET MOVE POINTER
;
; A1 MOVE POINTER OF WHERE TO START LOOKING
; A2 FORWARD DIRECTION OF SEARCH
; A7 NUMBER OF STEPS TO LOOK FOR
;
CALLR LOOK_RECURSE ; LOOK FORWARD FROM GIVEN LOCATION
JRNZ FPCPRET ; FOUND A LOCATION
;
; OK, TURN AROUND AND LOOK BEHIND US
;
CALLR TURN_RIGHT
CALLR TURN_RIGHT ; ABOUT FACE ME
;
CALLR LOOK_RECURSE
JRNZ FPCPRET ; FOUND SOMETHING MEAN TO DO
;
MOVK 1,A7 ; OK HOTSHOT, TRY THIS ONE
CALLR LOOK_RECURSE
JRZ FPCRANDOM ; IN SOME WEIRD CASE
;
FPCPRET
;
; GOT A MOVE POINT -- TURN IT INTO A CENTER POINT FOR RETURN
;
MOVE *A1(MOVECPTR),A1,L ; GET THE CENTER MOVE BACK
JRNN FPCRET
;
FPCRANDOM
;
; COULDN'T MAKE ANYTHING WORK -- TAKE THE RANDOM CASE
;
CALLR FIND_COOL_CPNT ; GET ONE
;
FPCRET
MOVE A1,A1 ; SET SOME FLAGS
MMFM SP,A0,A2,A7,A8,A9
RETS
**************************************************************************
* *
* LOOK_RECURSE FOLLOW A MOVE AS FAR AS WE CAN GO *
* *
* ENTRY *
* A1 MOVE POINTER OF WHERE TO START LOOKING *
* A2 FORWARD DIRECTION OF SEARCH *
* A7 NUMBER OF STEPS TO LOOK FOR *
* *
* EXIT *
* A1 MOVE POINTER OF WHERE TO START LOOKING *
* Z COULDN'T FIND ANYTHING *
* NZ FOUND SOMETHING *
* *
**************************************************************************
LOOK_RECURSE:
MMTM SP,A0,A2,A3,A4,A5,A6,A7,A8
CALLR LOOK_AROUND ; GET MOVES AROUND ME
CMPI 0,A3 ; CHECK FOR STUCK IN A 1x1
JRNZ LRGO
CMPI 0,A4
JRNZ LRGO
CMPI 0,A5
JRNZ LRGO
CMPI 0,A6
JRNZ LRGO
**** MOVE *A1(MOVECPTR),A0,L
**** JRN LRINBOX
**** MOVB *A0(CMOVEEGG),A0
**** INC A0
**** JRNZ LRINBOX
JRUC LRRET
LRGO
CMP A7,A3 ; FORWARD > TOTAL
JRLT LRF1
MOVE A7,A0
CALLR MOVE_SPACES ; MOVE TOTAL SPACES FORWARD
JRUC LRRET
LRF1
CMPI 0,A3 ; FORWARD > 0
JRZ LRF2
MOVE A3,A0
CALLR MOVE_SPACES ; MOVE AS FAR FORWARD AS POSSIBLE
SUB A3,A7 ; TOTAL = TOTAL - FORWARD
CALLR LOOK_RECURSE ; START RECURSION
JRUC LRRET
LRF2
;
; OK, TAKE A RANDOM LOOK EITHER LEFT OR RIGHT
;
CLR A8 ; "ALREADY LOOKED" FLAG
CALLA RANDOM
ANDI 1,A0 ; ODD/EVEN
JRZ LRLEFT ; LOOK LEFT
JRUC LRRIGHT ; OR RIGHT
;
; LOOK LEFT
;
LRLEFT
CMP A7,A4 ; LEFT > TOTAL
JRLT LRL1
CALLR TURN_LEFT
MOVE A7,A0
CALLR MOVE_SPACES ; MOVE LEFT TOTAL SPACES
JRUC LRRET
LRL1
CMPI 0,A4 ; LEFT > 0
JRZ LRL2
CALLR TURN_LEFT
MOVE A4,A0
CALLR MOVE_SPACES ; MOVE AS FAR FORWARD AS POSSIBLE
SUB A4,A7 ; TOTAL = TOTAL - LEFT
CALLR LOOK_RECURSE ; START RECURSION
JRUC LRRET
LRL2
MOVE A8,A8
JRNZ LRINBOX ; WE ALREADY CHECKED RIGHT
MOVK 1,A8 ; FLAG WE LOOKED LEFT
;
; CHECK RIGHT
;
LRRIGHT
CMP A7,A5 ; RIGHT > TOTAL
JRLT LRR1
CALLR TURN_RIGHT
MOVE A7,A0
CALLR MOVE_SPACES ; MOVE RIGHT TOTAL SPACES
JRUC LRRET
LRR1
CMPI 0,A5 ; RIGHT > 0
JRZ LRR2
CALLR TURN_RIGHT
MOVE A5,A0
CALLR MOVE_SPACES ; MOVE AS FAR RIGHT AS POSSIBLE
SUB A5,A7 ; TOTAL = TOTAL - RIGHT
CALLR LOOK_RECURSE ; START RECURSION
JRUC LRRET
LRR2
MOVE A8,A8
JRNZ LRINBOX ; SITTING IN A BOX
MOVK 1,A6 ; FLAG WE LOOKED RIGHT
JRUC LRLEFT ; LOOK TO THE LEFT
;
LRINBOX
;
; FORWARD = LEFT = RIGHT = 0 -- WE CAN'T GO ANYWHERE
;
SETZ ; SET THE ZERO BIT
JRUC LRFRET
;
LRRET
MOVE A1,A1
LRFRET
MMFM SP,A0,A2,A3,A4,A5,A6,A7,A8
RETS
**************************************************************************
* *
* LOOK_AROUND GIVEN A DIRECTION AND START, RETURN DIRS FOR F,L,R,B *
* *
* ENTRY *
* A1 MOVE POINTER *
* A2 DIRECTION POINTER *
* *
* EXIT *
* A3 HOW FAR FORWARD *
* A4 HOW FAR LEFT *
* A5 HOW FAR RIGHT *
* A6 HOW FAR BEHIND *
* *
**************************************************************************
LOOK_AROUND:
MMTM SP,A0,A2,A7
CLR A3
CLR A4
CLR A5
CLR A6
MOVE A2,A0 ; DIRECTION ( FORWARD )
CALLA SEARCH_EMPTY ; SEE HOW FAR WE CAN GO
MOVE A5,A3 ; SAVE FORWARD DISTANCE
CALLR TURN_LEFT
MOVE A2,A0
CALLA SEARCH_EMPTY
MOVE A5,A4 ; SAVE LEFT DISTANCE
CALLR TURN_LEFT
MOVE A2,A0
CALLA SEARCH_EMPTY
MOVE A5,A7 ; SAVE BACKWARD DISTANCE
CALLR TURN_LEFT
MOVE A2,A0
CALLA SEARCH_EMPTY ; A5 IS RIGHT DISTANCE
MOVE A7,A6
SRL 1,A3
SRL 1,A4
SRL 1,A5
SRL 1,A6
MMFM SP,A0,A2,A7
RETS
**************************************************************************
* *
* SEARCH_EMPTY - 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_EMPTY:
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 SOMETHING ON THIS SPOT?
INC A6
JRNZ SRCH_DEATH
**** JRZ SRCH_NOCMV ;BR = NO
**** 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
**** CMPI FLOWERID,A6
**** JREQ SRCH_DEATH
**** CMPI SHROOMID,A6
**** JREQ SRCH_DEATH
**** ANDI 0FFFFFFF0H,A6 ;IS THERE A DUDE'S EGG ON THIS SPOT
**** JRZ SRCH_DEATH ;BR = YES, BAIL.
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
**************************************************************************
* *
* TURN_LEFT TURN IN THE LEFT DIRECTION *
* *
* ENTRY *
* A2 DIRECTION *
* *
* EXIT *
* A2 NEW DIRECTION *
* *
**************************************************************************
TURN_LEFT:
PUSH A8
MOVI TLEFT,A8 ; LEFT TURN TABLE
SLL 4,A2 ; TURN INTO A WORD OFFSET
ADD A2,A8
MOVE *A8,A2,W ; GET NEW DIRECTION
ANDI 7,A2
PULL A8
RETS
**************************************************************************
* *
* TURN_RIGHT TURN IN THE RIGHT DIRECTION *
* *
* ENTRY *
* A2 DIRECTION *
* *
* EXIT *
* A2 NEW DIRECTION *
* *
**************************************************************************
TURN_RIGHT:
PUSH A8
MOVI TRIGHT,A8 ; RIGHT TURN TABLE
SLL 4,A2 ; TURN INTO A WORD OFFSET
ADD A2,A8
MOVE *A8,A2,W ; GET NEW DIRECTION
ANDI 7,A2
PULL A8
RETS
TLEFT .WORD LEFT,RIGHT,DOWN,UP
TRIGHT .WORD RIGHT,LEFT,UP,DOWN
**************************************************************************
* *
* MOVE_SPACES MOVE A POINT AHEAD GIVEN A DIRECTION AND NUMBER OF STEPS *
* *
* ENTRY *
* A0 NUMBER OF STEPS *
* A1 MOVE POINTER *
* A2 DIRECTION *
* *
* EXIT *
* A1 MOVE POINTER *
* *
**************************************************************************
MOVE_SPACES:
MMTM SP,A0,A2
SWAP A0,A2
MSLOOP:
CALLA TWO_MOVES ; MOVE AHEAD AT LEAST ONCE
JRN MSEXIT ; NO MOVE IN THAT DIRECTION
DEC A2
JRNZ MSLOOP
MSEXIT
MMFM SP,A0,A2
RETS
**************************************************************************
* *
* PIMP_DINO FIND A DINO TO PIMP OUT *
* *
* ENTRY *
* NOTHING *
* *
* EXIT *
* A8 CONTAINS A POINTER TO A DINO TABLE ( NOT OBJECT ) *
* A9 CONTAINS A POINTER TO THE DINO OBJECT *
* *
* NOTE: A8 IS ZERO IF NOTHING IS ON THE LIST -- MAKE YOUR CHECKS *
* ACCORDINGLY! *
* *
**************************************************************************
LIFETIME EQU 30 ; IN SECONDS -- MIN CREDIT LIFE TIME
LASTDTH EQU 15 ; IN SECONDS -- MIN LIFE TIME
PIMP_DINO:
MMTM SP,A0,A2
MOVE @DINOS,A8,L ; START OF DINO SUPP LIST
JRZ PIMPDEOL ; END OF LIST
PIMPDLP
MOVE *A8(OID),A2,W ; GET THE ID
SRL 4,A2 ; MASK OFF THE IDENTIFIER
SLL 4,A2
CMPI DINOOID,A2 ; CHECK TO SEE IF DINO
JRNZ PIMPDNDINO ; BR = NO DINO
;
; RIGHT HERE WE HAVE A DINO SITTING IN A8
;
MOVE A8,A9 ; SAVE THE DINO POINTER
MOVE *A8(OPLINK),A8,L ; GET THE DINO DATA BLOCK
JRZ NOTTHISDINO ; NO CONTROLLING PROCESS
;
MOVE *A8(DPLAYER),A2,L ; GET THE PLAYER CONTROLLING THE DINO
MOVE *A2(PTOTTIME),A0,W ; TOTAL TIME OF PLAY
CMPI LIFETIME,A0
JRLO NOTTHISDINO ; GIVE HIM TIME TO ENJOY LOSING
MOVE *A2(PLIFETIME),A0,L ; TIME SINCE LAST DEATH
CMPI LASTDTH,A0
JRLO NOTTHISDINO ; NOT BEEN ALIVE THIS LIFE LONG ENUF
JRUC PIMPDRET ; FOR NOW USE THIS DINO
NOTTHISDINO:
MOVE A9,A8
PIMPDNDINO
MOVE *A8(OSLINK),A8,L ; GET NEXT LINK IN CHAIN
JRNZ PIMPDLP
PIMPDEOL
CLR A8
PIMPDRET
MMFM SP,A0,A2
RETS
**************************************************************************
* *
* UTILITY ROUTINES *
* *
**************************************************************************
**************************************************************************
* *
* FIND_COOL_CPNT - FIND AN OPEN CENTER POINT THAT ISN'T IN FRONT OF *
* A HOUSE, OR TOO CLOSE TOO ANOTHER ENEMY. *
* *
* ENTRY *
* NOTHING *
* *
* EXIT *
* A1 [ NZ ] = POINTER TO OPEN SPACE *
* Z = NO OPEN CENTER POINTS *
* *
**************************************************************************
FIND_COOL_CPNT:
PUSH A0
MOVK 2,A0 ; LOOK THIS MANY TIMES
FCCLOOP:
CALLA FIND_OPEN_CPNT ; GET AN OPEN CENTER POINT
JRZ FCCEXIT ; NO OPEN CENTER POINTS
CALLR CHECK_EPNT ; CHECK TO SEE IF DINO EXIT POINT
JRZ FCCRELOOP ; EXIT POINT
CALLR CHECK_DPNT ; CHECK TO SEE IF DINO SITTING HERE
JRZ FCCRELOOP ; BR = YES, DINO SITTING HERE
CALLR CK_ENEMY_PROXIMITY ;LOOK AROUND FOR ANOTHER ENEMY
JRNZ FCCEXIT ;BR = IT'S O.K. HERE
FCCRELOOP
DEC A0
JRNZ FCCLOOP ;BR = TRY AGAIN
FCCEXIT:
PULL A0
RETS
**************************************************************************
* *
* VALID_CPNT - CHECK TO SEE IF IT IS O.K. TO LAND AN ENEMY ON THIS *
* CENTER POINT. *
* A1 = PTR TO CENTER POINT *
* RETURNS: *
* Z = DO NOT PUT AN ENEMY HERE *
* NZ = DO AS YOU PLEASE *
* *
**************************************************************************
VALID_CPNT:
PUSH A0
MOVB *A1(CMOVEEGG),A0
INC A0
JRZ VALID_NOEGG
CLR A0
JRUC VALID_CPNT_X
VALID_NOEGG:
CALLR CHECK_EPNT ;IS THIS A DINOSAUR EXIT POINT?
JRZ VALID_CPNT_X ;BR = YES
CALLR CHECK_DPNT ;IS THERE A DINO SITTING HERE?
JRZ VALID_CPNT_X ;BR = YES
CALLR CK_ENEMY_PROXIMITY ;IS THERE AN ENEMY TOO CLOSE?
JRZ VALID_CPNT_X
VALID_CPNT_X:
PULL A0
RETS
**************************************************************************
* *
* CK_ENEMY_PROXIMITY - CHECK CENTER POINT TO SEE IF IT IS AT A SAFE *
* DISTANCE FROM OTHER ENEMIES, ALSO CHECKS *
* TO MAKE SURE THAT THE CENTER DOESN'T EXIST *
* ON A 1 WIDE PATH. *
* A1 = PTR TO CENTER POINT TO CHECK. *
* RETURNS: *
* Z = POINT IS NOT GOOD FOR AN ENEMY. *
* NZ = O.K. TO SET AN ENEMY HERE *
* NOTE: TRASHES A14 *
* *
**************************************************************************
CK_ENEMY_PROXIMITY:
MMTM SP,A0,A1,A2,A3,A4,A5
MOVE *A1(CMOVEMPTR),A1,L ;GET CORRESPONDING MOVE
JRN CK_EP_FL ;BR = FAILED THIS TEST
MOVE A1,A2 ;STORE THE POINT HERE
CLR A4 ;WE WILL FLAG ILLEGALS HERE
MOVI UP,A0 ;START FACING UP
CK_DP_LP:
MOVE A0,A3
CALLA TWO_MOVES ;GO FOR ADJACENT CENTER POINT
JRZ CK_EP_NOMOVE
MOVE *A1(MOVECPTR),A0,L ;GET THE CENTER POINTER
JRN CK_EP_NOMOVE ;BR = FUNKY SLIDE
CALLA CENTER_CHECK ;CHECK THAT CENTER
JRZ CK_EP_CMT ;BR = NO DANGER THERE
MOVB *A0(CMOVEEGG),A5
CMPI FIREID,A5 ;IS THE DANGER A FIRE?
JRNE CK_EP_FL ;BR = NO, THEN WE CANNOT PLACE
CK_EP_CMT:
MOVB *A0(CMOVETROG),A5
INC A5 ;IS TROG GOING TO DROP SOMETHING HERE?
JRZ CK_CMT_OK ;BR = NO
DEC A5
CMPI PITID,A5 ;IS IT A PIT?
JREQ CK_EP_FL ;BR = NO
CK_CMT_OK:
MOVE A3,A0
JRUC CK_EP_NEXT
CK_EP_NOMOVE:
MOVE A3,A0
BSET A0,A4 ;SET THE BIT
CK_EP_NEXT:
MOVE A2,A1 ;RESTORE ORIGINAL CENTER
INC A0
CMPI DOWN_RIGHT,A0
JRLS CK_DP_LP
*
*CHECK FOR OPPOSITE DEATH MOVES HERE, USING THE BITS SET IN A4
*
BTST UP,A4
JREQ CK_EP_LEFT
BTST DOWN,A4
JRNE CK_EP_FL
CK_EP_LEFT:
BTST LEFT,A4
JREQ CK_EP_UL
BTST RIGHT,A4
JRNE CK_EP_FL
CK_EP_UL:
BTST UP_LEFT,A4
JREQ CK_EP_DR
BTST UP_RIGHT,A4
JREQ CK_EP_UL_DL
BTST UP,A4
JREQ CK_EP_FL
CK_EP_UL_DL:
BTST DOWN_LEFT,A4
JREQ CK_EP_DR
BTST LEFT,A4
JREQ CK_EP_FL
CK_EP_DR:
BTST DOWN_RIGHT,A4
JREQ CK_EP_OK
BTST UP_RIGHT,A4
JREQ CK_EP_DR_DL
BTST RIGHT,A4
JREQ CK_EP_FL
CK_EP_DR_DL:
BTST DOWN_LEFT,A4
JREQ CK_EP_OK
BTST DOWN,A4
JREQ CK_EP_FL
*
*SPOT IS O.K. FOR BUILDING
*
CK_EP_OK:
CLR A1
INC A1
JRUC CK_EP_X
CK_EP_FL:
CLR A1
JRUC CK_EP_X
CK_EP_X:
MMFM SP,A0,A1,A2,A3,A4,A5
RETS
**************************************************************************
* *
* CHECK_EPNT CHECK TO SEE IF A CENTER POINT IS ALSO AN EXIT POINT *
* FOR ANY OF THE DINOS *
* *
* ENTRY *
* A1 POINTER TO CENTER POINT *
* *
* EXIT *
* NZ NOT A DINO POINT *
* Z DINO EXIT POINT ON THIS ONE *
* *
**************************************************************************
CHECK_EPNT:
MMTM SP,A0,A1,A2
MOVE *A1(CMOVEMPTR),A0,L ; GET THE ACTUAL MOVE POINTER
MOVE *A0(MOVEUP),A2 ; CHECK UP POSITION
CALLR CHECK_EPNT2
JRZ CKERET
MOVE *A0(MOVEDN),A2 ; CHECK DOWN POSITION
CALLR CHECK_EPNT2
JRZ CKERET
MOVE *A0(MOVELF),A2 ; CHECK LEFT POSITION
CALLR CHECK_EPNT2
JRZ CKERET
MOVE *A0(MOVERT),A2 ; CHECK RIGHT POSITION
CALLR CHECK_EPNT2
CKERET
MMFM SP,A0,A1,A2
RETS
**************************************************************************
* *
* CHECK_EPNT2 *
* *
* CHECK TO SEE IF A VALID MOVE IS PASSED IN A2, AND THEN WHETHER *
* IT IS A DINO EXIT POINT *
* *
* ENTRY *
* A2 MOVE INDEX *
* *
* EXIT *
* Z DINO EXIT POINT *
* NZ COOL *
* *
**************************************************************************
CHECK_EPNT2:
MMTM SP,A0,A1,A2
MOVE A2,A2 ; SET THE FLAGS
JRN CKE2RET
MOVE A2,A0 ; FOR GETMOVE
CALLA GETMOVE ; TURN INTO ANOTHER MOVE
MOVE *A0(MOVEEPTR),A1,L
CALLR CHECK_EXIT ; CHECK FOR DINO EXIT POINTS
CKE2RET
MMFM SP,A0,A1,A2
RETS
**************************************************************************
* *
* CHECK_EXIT *
* *
* CHECK TO SEE IF THE POINT PASSED IN A1 IS EQUAL TO ANY OF THE *
* DINO EXIT POINTS *
* *
* ENTRY *
* A1 EXIT POINT TO CHECK *
* *
* EXIT *
* Z MATCHES ONE OF THE DINOS *
* NZ NOT A MATCH *
* *
**************************************************************************
CHECK_EXIT:
PUSH A2
MOVI P1DATA,A2 ; PLAYER 1 DATA AREA
MOVE *A2(PEXITPNT),A2,L
CMP A1,A2
JRZ CKRET
MOVI P2DATA,A2 ; PLAYER 2
MOVE *A2(PEXITPNT),A2,L
CMP A1,A2
JRZ CKRET
MOVI P3DATA,A2 ; PLAYER 3
MOVE *A2(PEXITPNT),A2,L
CMP A1,A2
JRZ CKRET
MOVI P4DATA,A2 ; PLAYER 4
MOVE *A2(PEXITPNT),A2,L
CMP A1,A2
JRZ CKRET
PULL A2
RETS
CKRET
PULL A2
RETS
**************************************************************************
* *
* CHECK_DPNT CHECK TO SEE IF A DINO IS ON THIS POINT *
* *
* ENTRY *
* A1 POINTER TO CENTER POINT *
* *
* EXIT *
* NZ NO DINO ON THIS POINT *
* Z DINO IS COMING IN HERE *
* *
**************************************************************************
CHECK_DPNT:
MMTM SP,A0,A1,A2,A3,A8
MOVE A1,A3 ; MOVE IT OUT OF THE WAY
MOVE @DINOS,A8,L ; START OF DINO SUPP LIST
JRZ CKDEOL ; END OF LIST
CKDLOOP
MOVE *A8(OID),A2,W ; GET THE ID
SRL 4,A2 ; MASK OFF THE IDENTIFIER
SLL 4,A2
CMPI DINOOID,A2 ; CHECK TO SEE IF DINO
JRNZ CKDNDINO ; BR = NO DINO
CALLA OBJ_NEAR_CENT ; FIND ITS CENTER POINTER
JRNC CKDNDINO ; NOT NEAR A CENTER POINT
CMP A0,A3 ; EQUAL
JRZ CKDONDINO ; BR = LANDED ON DINO
CKDNDINO
MOVE *A8(OSLINK),A8,L ; GET NEXT LINK IN CHAIN
JRNZ CKDLOOP
CKDEOL
CLR A0
NOT A0 ; STUPID WAY TO SET FLAGS
CKDONDINO
MMFM SP,A0,A1,A2,A3,A8
RETS
**************************************************************************
* *
* DATA *
* *
**************************************************************************
.DATA
**************************************************************************
* *
* ENEMY INITIALIZATION TABLES *
* *
**************************************************************************
*
*FIRE INITIALIZATION TABLE
FIREINIT:
.LONG 0,0
.WORD 0,0
.LONG FLAMESM1,[12,12],DUMCOLL
.WORD DMAWNZ,FIREOID
*TABLE OF TAR PITS
TAR_TAB:
.LONG TARINIT, VTARINIT, ETARINIT, CTARINIT, WTARINIT, STARINIT
.LONG TARINIT, ETARINIT
*GREEN TAR PIT INITIALIZATION TABLE
TARINIT:
.LONG 0,0
.WORD 0,0
.LONG TAR5,[30,0],DUMCOLL
.WORD DMAWNZ,TAROID
*VOLCANO TAR PIT INITIALIZATION TABLE
VTARINIT:
.LONG 0,0
.WORD 0,0
.LONG VTAR5,[30,0],DUMCOLL
.WORD DMAWNZ,TAROID
*TROG ISLE TAR PIT INITIALIZATION TABLE
ETARINIT:
.LONG 0,0
.WORD 0,0
.LONG ETAR5,[30,0],DUMCOLL
.WORD DMAWNZ,TAROID
*TROG CLUB ISLE TAR PIT INITIALIZATION TABLE
CTARINIT:
.LONG 0,0
.WORD 0,0
.LONG CTAR5,[30,0],DUMCOLL
.WORD DMAWNZ,TAROID
*TROG WHEEL ISLE TAR PIT INITIALIZATION TABLE
WTARINIT:
.LONG 0,0
.WORD 0,0
.LONG WTAR5,[30,0],DUMCOLL
.WORD DMAWNZ,TAROID
*TROG SPRING ISLE TAR PIT INITIALIZATION TABLE
STARINIT:
.LONG 0,0
.WORD 0,0
.LONG STAR5,[30,0],DUMCOLL
.WORD DMAWNZ,TAROID
*TABLE OF PITS
PIT_TAB:
.LONG PITINIT, VPITINIT, EPITINIT, CPITINIT, WPITINIT, SPITINIT
.LONG PITINIT, EPITINIT
*
*PIT INITIALIZATION TABLE
*NOTE: MAKE SURE THIS STAYS OGPIT1, IF THERE IS A CHANGE, CHECK DENT_GROUND
PITINIT:
.LONG 0,0
.WORD 0,0
.LONG OGPIT1,[30,0],DUMCOLL
.WORD DMAWNZ,PITOID
*PIT TO USE IN THE VOLCANO WAVES
VPITINIT:
.LONG 0,0
.WORD 0,0
.LONG VOGPIT1,[30,0],DUMCOLL
.WORD DMAWNZ,PITOID
*PIT TO USE IN ON THE TROG ISLE
EPITINIT:
.LONG 0,0
.WORD 0,0
.LONG EOGPIT1,[30,0],DUMCOLL
.WORD DMAWNZ,PITOID
*PIT TO USE IN ON THE TROG CLUB ISLE
CPITINIT:
.LONG 0,0
.WORD 0,0
.LONG COGPIT1,[30,0],DUMCOLL
.WORD DMAWNZ,PITOID
*PIT TO USE IN ON THE TROG WHEEL ISLE
WPITINIT:
.LONG 0,0
.WORD 0,0
.LONG WOGPIT1,[30,0],DUMCOLL
.WORD DMAWNZ,PITOID
*PIT TO USE IN ON THE TROG SPRING ISLE
SPITINIT:
.LONG 0,0
.WORD 0,0
.LONG SOGPIT1,[30,0],DUMCOLL
.WORD DMAWNZ,PITOID
*TABLE OF TROG ENTRANCE PITS
TROGPIT_TAB:
.LONG TROGPITINIT, VTROGPITINIT, ETROGPITINIT, CTROGPITINIT
.LONG WTROGPITINIT, STROGPITINIT, TROGPITINIT
.LONG ETROGPITINIT
*SPECIAL INIT TABLE FOR THE PIT THAT TROG USES TO APPEAR
TROGPITINIT:
.LONG 0,0
.WORD 0,0
.LONG OGPIT1,[30,0],DUMCOLL
.WORD DMAWNZ,TROGPITOID
*TROGPIT TO USE IN THE VOLCANO WAVES
VTROGPITINIT:
.LONG 0,0
.WORD 0,0
.LONG VOGPIT1,[30,0],DUMCOLL
.WORD DMAWNZ,TROGPITOID
*TROGPIT TO USE ON TROG ISLE
ETROGPITINIT:
.LONG 0,0
.WORD 0,0
.LONG EOGPIT1,[30,0],DUMCOLL
.WORD DMAWNZ,TROGPITOID
*TROGPIT TO USE ON TROG CLUB ISLE
CTROGPITINIT:
.LONG 0,0
.WORD 0,0
.LONG COGPIT1,[30,0],DUMCOLL
.WORD DMAWNZ,TROGPITOID
*TROGPIT TO USE ON TROG WHEEL ISLE
WTROGPITINIT:
.LONG 0,0
.WORD 0,0
.LONG WOGPIT1,[30,0],DUMCOLL
.WORD DMAWNZ,TROGPITOID
*TROGPIT TO USE ON TROG SPRING ISLE
STROGPITINIT:
.LONG 0,0
.WORD 0,0
.LONG SOGPIT1,[30,0],DUMCOLL
.WORD DMAWNZ,TROGPITOID
TUNNELINIT:
.LONG 0,0
.WORD 0,0
.LONG TUNNELIMG,[30,0],DUMCOLL
.WORD DMAWNZ,TUNNELOID
;
; FLOWER INIT
;
FLOWERINIT:
.LONG 0,0
.WORD 0,0
.LONG SPEED1,[30,0],DUMCOLL
.WORD DMAWNZ,FLOWEROID
FLOWER_ANIM:
.LONG SPEED1
.WORD 6
.LONG SPEED2
.WORD 6
.LONG SPEED3
.WORD 6
.LONG SPEED4
.WORD 1
.LONG 0
.LONG SPEED4
.WORD 1
.LONG 0
;
; SHROOM INIT
;
SHROOMINIT:
.LONG 0,0
.WORD 0,0
.LONG SHROOM1,[30,0],DUMCOLL
.WORD DMAWNZ,SHROOMOID
SHROOM_ANIM:
.LONG SHROOM1
.WORD 6
.LONG SHROOM2
.WORD 6
.LONG SHROOM3
.WORD 6
.LONG SHROOM4
.WORD 1
.LONG 0
.LONG SHROOM4
.WORD 1
.LONG 0
PINEAPPLEINIT:
.LONG 0,0
.WORD 0,0
.LONG PAPPLE1,[30,0],DUMCOLL
.WORD DMAWNZ,PINEAPPLEOID
PINEAPPLEGROW:
.LONG PAPPLE1
.WORD 4
.LONG PAPPLE2
.WORD 4
.LONG PAPPLE3
.WORD 4
.LONG PAPPLE4
.WORD 4
.LONG PAPPLE5
.WORD 4
.LONG 0
PINEAPPLESPIN:
.LONG PAPPLE6a
.WORD 12
.LONG PAPPLE6b
.WORD 12
.LONG PAPPLE6c
.WORD 12
.LONG 0
PINEAPPLE_OUT
.LONG PAPPLE6c
.WORD 30
.LONG PAPPLE5
.WORD 4
.LONG PAPPLE4
.WORD 4
.LONG PAPPLE3
.WORD 4
.LONG PAPPLE2
.WORD 4
.LONG PAPPLE1
.WORD 4
.LONG 0
*
*THE "LUCKY" HORSESHOE
*
HSHOEINIT:
.LONG 0,0
.WORD 0,0
.LONG SHOE1,[30,0],DUMCOLL
.WORD DMAWNZ,HSHOEOID
HSHOE_ANIM
.LONG SHOE1
.WORD 6
.LONG SHOE2
.WORD 6
.LONG SHOE3
.WORD 1
.LONG 0
HSHOE_FLASH
.LONG SHOE3
.WORD 30
.LONG SHOE4
.WORD 30
.LONG 0
HSHOE_OUT
.LONG SHOE2
.WORD 6
.LONG SHOE1
.WORD 6
.LONG 0
*
*THE ICE CUBE
*
ICEINIT:
.LONG 0,0
.WORD 0,0
.LONG CUBE5,[30,0],DUMCOLL
.WORD DMAWNZ,ICEOID
ICE_ANIM
.LONG CUBE5
.WORD 8
.LONG CUBE5a
.WORD 8
.LONG CUBE5
.WORD 8
.LONG CUBE5a
.WORD 30
.LONG 0
ICE_FLASH
.LONG CUBE6
.WORD 30
.LONG CUBE7
.WORD 30
.LONG CUBE8
.WORD 30
.LONG 0
ICE_OUT
.LONG CUBE9
.WORD 6
.LONG CUBE10
.WORD 6
.LONG CUBE11
.WORD 6
.LONG CUBE12
.WORD 6
.LONG 0
.LONG CUBE13
.WORD 6
.LONG CUBE14
.WORD 6
.LONG CUBE15
.WORD 6
.LONG CUBE16
.WORD 6
.LONG CUBE17
.WORD 6
.LONG 0
*
*THE RED HOT CHILI PEPPER
CHILIINIT:
.LONG 0,0
.WORD 0,0
.LONG FLAMESM1,[12,12],DUMCOLL
.WORD DMAWNZ,CHILIOID
CHILI_ANIM
.LONG FLAMEBIG1
.WORD 4|MAKESOUND
.LONG FIRESTART_SND
.LONG FLAMEBIG2
.WORD 4
.LONG FLAMEBIG3
.WORD 4
.LONG FLAMEBIG4
.WORD 4
.LONG FLAMEBIG5
.WORD 4
.LONG FLAMEBIG6
.WORD 4
.LONG FLAMEBIG7
.WORD 4
.LONG FLAMEBIG8
.WORD 4
.LONG 0
CHILI_BURN
.LONG CHILI1
.WORD 10
.LONG CHILI2
.WORD 10
.LONG CHILI3
.WORD 10
.LONG CHILI4
.WORD 10
.LONG CHILI5
.WORD 10
.LONG 0
**************************************************************************
* *
* ENEMY ANIMATION SCRIPTS *
* *
**************************************************************************
TAR_SND:
.WORD >F305,>50,>80A6,0 ;TAR PIT CREATED
TARBUBBLE_SND
.WORD >F30E,>67,>80A5,0 ;TAR PIT BUBBLE UNDER
*
*TARPIT
TARIN:
.LONG TAR5
.WORD 15|MAKESOUND
.LONG TAR_SND
.LONG TAR4
.WORD 10
.LONG TAR3
.WORD 10
.LONG TAR2
.WORD 12
.LONG 0
TAR_ANIM1:
.LONG TAR1a
.WORD 10
.LONG TAR1b
.WORD 10
.LONG TAR1c
.WORD 10
.LONG TAR1d
.WORD 10|SCRIPT
.LONG TAR_ANIM1
TAROUT:
.LONG TAR2
.WORD 8
.LONG TAR3
.WORD 6
.LONG TAR4
.WORD 6
.LONG TAR5
.WORD 6
.LONG 0
*
*FIRE
FIRESTART_SND:
.WORD >F006,>5D,>8051,0 ;FIRE START SOUND
FIREOUT_SND:
.WORD >F305,>3C,>809F,0 ;FIRE OUT SOUND
FIRE_ANIM:
.LONG FLAMESM1
.WORD 6|MAKESOUND|SCRIPT
.LONG FIRESTART_SND
.LONG FIRE_ANIMII
FIRE_ANIM_LP:
.LONG FLAMESM1
.WORD 6
FIRE_ANIMII:
.LONG FLAMESM2
.WORD 6
.LONG FLAMESM3
.WORD 6
.LONG FLAMESM4
.WORD 6
.LONG FLAMESM5
.WORD 6
.LONG FLAMESM6
.WORD 6
.LONG FLAMESM7
.WORD 6
.LONG FLAMESM8
.WORD 6|SCRIPT
.LONG FIRE_ANIM_LP
.LONG 0
FIRE_UP_MONKEY_SHIT:
.LONG FLAMEBIG1
.WORD 4
.LONG FLAMEBIG2
.WORD 4
.LONG FLAMEBIG3
.WORD 4
.LONG FLAMEBIG4
.WORD 4
.LONG FLAMEBIG5
.WORD 4
.LONG FLAMEBIG6
.WORD 4
.LONG FLAMEBIG7
.WORD 4
.LONG FLAMEBIG8
.WORD 4|SCRIPT
.LONG FIRE_UP_MONKEY_SHIT
FIRE_DOWN:
.LONG FLAMEOUT1
.WORD 6
.LONG FLAMEOUT2
.WORD 6
.LONG FLAMEOUT3
.WORD 6
.LONG FLAMEOUT4
.WORD 7
.LONG FLAMEOUT5
.WORD 7|MAKESOUND
.LONG FIREOUT_SND
.LONG FLAMEOUT6
.WORD 8|NEWPALET
.LONG FIXED3
.LONG FLAMEOUT7
.WORD 8
.LONG FLAMEOUT8
.WORD 8
.LONG 0
*
*TABLE OF INITS AND SCRIPTS FOR TROG STARTING A FIRE WITH HIS CLUB
TROG_FIRE_TAB:
.LONG FIREU_INIT,START_FIRE_D
.LONG FIRED_INIT,START_FIRE_D
.LONG FIREL_INIT,START_FIRE_LR
.LONG FIRER_INIT,START_FIRE_LR
START_FIRE_D:
.LONG SMOKESTAR01
.WORD 4
.LONG SMOKESTAR02
.WORD 4
.LONG SMOKESTAR03
.WORD 4
.LONG SMOKESTAR01
.WORD 4
.LONG SMOKESTAR02
.WORD 4
.LONG SMOKESTAR03
.WORD 4
.LONG SMOKESTAR01
.WORD 4
.LONG SMOKESTAR02
.WORD 4
.LONG SMOKESTAR03
.WORD 4
.LONG SMOKESTAR01
.WORD 4
.LONG SMOKESTAR02
.WORD 4
.LONG SMOKESTAR03
.WORD 4
.LONG SMOKESTAR01
.WORD 4
.LONG SMOKESTAR02
.WORD 4
.LONG SMOKESTAR03
.WORD 2
.LONG SMOKESTAR01
.WORD 2
.LONG SMOKESTAR02
.WORD 2
.LONG SMOKESTAR03
.WORD 2
.LONG SMOKESTAR01
.WORD 2
.LONG SMOKESTAR02
.WORD 2
.LONG SMOKESTAR03
.WORD 2
.LONG SMOKESTAR01
.WORD 2
.LONG SMOKESTAR02
.WORD 2
.LONG SMOKESTAR03
.WORD 2
.LONG SMOKESTAR01
.WORD 2
.LONG SMOKESTAR02
.WORD 2
.LONG SMOKESTAR03
.WORD 2
.LONG SMOKESTAR01
.WORD 2
.LONG SMOKESTAR02
.WORD 2
.LONG SMOKESTAR03
.WORD 2
.LONG SMOKESTAR01
.WORD 2
.LONG SMOKESTAR02
.WORD 2
.LONG SMOKESTAR03
.WORD 2
.LONG SMOKESTAR01
.WORD 2
.LONG SMOKESTAR02
.WORD 2
.LONG SMOKESTAR03
.WORD 2|NEWPALET
.LONG flame
.LONG SMOKESTAR01
.WORD 2
.LONG SMOKESTAR02
.WORD 2
.LONG SMOKESTAR03
.WORD 2
.LONG SMOKESTAR01
.WORD 2
.LONG SMOKESTAR02
.WORD 2
.LONG SMOKESTAR03
.WORD 2
.LONG SMOKESTAR01
.WORD 2|NEWPALET
.LONG FIXED3
.LONG SMOKESTAR02
.WORD 2
.LONG SMOKESTAR03
.WORD 2
.LONG SMOKESTAR01
.WORD 2
.LONG SMOKESTAR02
.WORD 2
.LONG SMOKESTAR03
.WORD 2
.LONG SMOKESTAR01
.WORD 2|NEWPALET
.LONG flame
.LONG SMOKESTAR02
.WORD 2
.LONG SMOKESTAR03
.WORD 2
.LONG SMOKESTAR01
.WORD 2
.LONG 0
.LONG FLAMEBIG1
.WORD 6|MAKESOUND
.LONG FIRESTART_SND
.LONG FLAMEBIG2
.WORD 6
.LONG FLAMEBIG3
.WORD 6
.LONG FLAMEBIG4
.WORD 6
.LONG 0
START_FIRE_LR:
.LONG SMOKESTAR41
.WORD 4
.LONG SMOKESTAR42
.WORD 4
.LONG SMOKESTAR43
.WORD 4
.LONG SMOKESTAR41
.WORD 4
.LONG SMOKESTAR42
.WORD 4
.LONG SMOKESTAR43
.WORD 4
.LONG SMOKESTAR41
.WORD 4
.LONG SMOKESTAR42
.WORD 4
.LONG SMOKESTAR43
.WORD 4
.LONG SMOKESTAR41
.WORD 4
.LONG SMOKESTAR42
.WORD 4
.LONG SMOKESTAR43
.WORD 4
.LONG SMOKESTAR41
.WORD 4
.LONG SMOKESTAR42
.WORD 4
.LONG SMOKESTAR43
.WORD 2
.LONG SMOKESTAR41
.WORD 2
.LONG SMOKESTAR42
.WORD 2
.LONG SMOKESTAR43
.WORD 2
.LONG SMOKESTAR41
.WORD 2
.LONG SMOKESTAR42
.WORD 2
.LONG SMOKESTAR43
.WORD 2
.LONG SMOKESTAR41
.WORD 2
.LONG SMOKESTAR42
.WORD 2
.LONG SMOKESTAR43
.WORD 2
.LONG SMOKESTAR41
.WORD 2
.LONG SMOKESTAR42
.WORD 2
.LONG SMOKESTAR43
.WORD 2
.LONG SMOKESTAR41
.WORD 2
.LONG SMOKESTAR42
.WORD 2
.LONG SMOKESTAR43
.WORD 2
.LONG SMOKESTAR41
.WORD 2
.LONG SMOKESTAR42
.WORD 2
.LONG SMOKESTAR43
.WORD 2
.LONG SMOKESTAR41
.WORD 2
.LONG SMOKESTAR42
.WORD 2
.LONG SMOKESTAR43
.WORD 2|NEWPALET
.LONG flame
.LONG SMOKESTAR41
.WORD 2
.LONG SMOKESTAR42
.WORD 2
.LONG SMOKESTAR43
.WORD 2
.LONG SMOKESTAR41
.WORD 2
.LONG SMOKESTAR42
.WORD 2
.LONG SMOKESTAR43
.WORD 2
.LONG SMOKESTAR41
.WORD 2|NEWPALET
.LONG FIXED3
.LONG SMOKESTAR42
.WORD 2
.LONG SMOKESTAR43
.WORD 2
.LONG SMOKESTAR41
.WORD 2
.LONG SMOKESTAR42
.WORD 2
.LONG SMOKESTAR43
.WORD 2
.LONG SMOKESTAR41
.WORD 2|NEWPALET
.LONG flame
.LONG SMOKESTAR42
.WORD 2
.LONG SMOKESTAR43
.WORD 2
.LONG SMOKESTAR41
.WORD 2
.LONG 0
.LONG FLAMEBIG1
.WORD 6|MAKESOUND
.LONG FIRESTART_SND
.LONG FLAMEBIG2
.WORD 6
.LONG FLAMEBIG3
.WORD 6
.LONG FLAMEBIG4
.WORD 6
.LONG 0
*
*FIRE INITIALIZATION TABLES
FIREU_INIT:
.LONG 0,0
.WORD 0,0
.LONG SMOKESTAR01,[12,12],DUMCOLL
.WORD DMAWNZ&0F000H,FIREOID
FIRED_INIT:
.LONG 0,0
.WORD 0,0
.LONG SMOKESTAR01,[12,12],DUMCOLL
.WORD DMAWNZ,FIREOID
FIREL_INIT:
.LONG 0,0
.WORD 0,0
.LONG SMOKESTAR41,[12,12],DUMCOLL
.WORD DMAWNZ|M_FLIPH,FIREOID
FIRER_INIT:
.LONG 0,0
.WORD 0,0
.LONG SMOKESTAR41,[12,12],DUMCOLL
.WORD DMAWNZ,FIREOID
*
*OG ISLE PIT
PIT_OPEN:
.LONG OGPIT1
.WORD 6
.LONG OGPIT2
.WORD 6
.LONG OGPIT3
.WORD 6
.LONG OGPIT4
.WORD 6
.LONG OGPIT5
.WORD 6
.LONG OGPIT6
.WORD 6
.LONG OGPIT7
.WORD 6
.LONG OGPIT8
.WORD 6
.LONG OGPIT9
.WORD 6
.LONG OGPIT10
.WORD 6
.LONG OGPIT11
.WORD 1
.LONG 0
PIT_FULL:
.LONG OGPIT11
.WORD 1
.LONG 0
PIT_CLOSE:
.LONG OGPIT11
.WORD 4
.LONG OGPIT10
.WORD 4
.LONG OGPIT9
.WORD 4
.LONG OGPIT8
.WORD 4
.LONG OGPIT7
.WORD 4
.LONG OGPIT6
.WORD 4
.LONG OGPIT5
.WORD 4
.LONG OGPIT4
.WORD 4
.LONG OGPIT3
.WORD 4
.LONG OGPIT2
.WORD 4
.LONG OGPIT1
.WORD 1
.LONG 0
*
*INITIAL DISPATCH TABLE
* .LONG DISPATCH 1, PARAMS
* .
* .LONG DISPATCH N, PARAMS
* .LONG 0
* .LONG POSITION DISPATCH TABLE PTR (0=SKIP)
* .LONG TIME DISPATCH TABLE PTR (0=SKIP)
* .LONG ENFORCER BAITER TABLE PTR (0=SKIP)
* .WORD TIME UNTIL START OF BAITER PROCESS
*
*WAVE 1
*
WAVE1DSP
.LONG FLOWER_START,[1,3],[0,FLOWEROID]
.LONG SHROOM_START,[1,1],[0,SHROOMOID]
.LONG TAR_START,[0,1],[0,TAROID]
.LONG 0 ;END OF INITIAL TABLE
.LONG WAVE1TIME
.WORD 3500 ;ENFORCER BAITER TIME
WAVE1TIME
.WORD 300
.LONG TROG_START,[0,1],[0,TROGOID]
.WORD 400
.LONG START_POWERUPS,[5*60,3],HSHOE
.WORD 400
.LONG EXTRA_TROG_START,1,120
.WORD 0
*
*WAVE 3
*
WAVE3DSP
.LONG FLOWER_START,[1,1],[0,FLOWEROID]
.LONG TAR_START,[0,2],[0,TAROID]
.LONG 0 ;END OF INITIAL TABLE
.LONG WAVE3TIME
.WORD 2560 ;ENFORCER BAITER TIME
WAVE3TIME
.WORD 100
.LONG EXTRA_TROG_START,3,30
.WORD 400
.LONG START_POWERUPS,[5*60,3],HSHOE|PAPPLE
.WORD 400
.LONG EXTRA_TROG_START,4,30
.WORD 0
*
*WAVE 4
*
WAVE4DSP
.LONG ROCK_START,TROGHENG1,[0,ROCKOID]
.LONG FLOWER_START,[1,1],[0,FLOWEROID]
.LONG SHROOM_START,[0,1],[0,SHROOMOID]
.LONG TAR_START,[0,1],[0,TAROID]
.LONG 0 ;END OF INITIAL TABLE
.LONG WAVE4TIME
.WORD 0A00H ;ENFORCER BAITER TIME
WAVE4TIME
.WORD 100
.LONG EXTRA_TROG_START,3,30
.WORD 400
.LONG START_POWERUPS,[5*60,4],HSHOE|PAPPLE|ICE
.WORD 400
.LONG EXTRA_TROG_START,4,30
.WORD 0
*
*WAVE 7
*
WAVE7DSP
.LONG TROG_PIT_PICK,[0,3],[0,0]
.LONG 0 ;END OF INITIAL TABLE
.LONG WAVE7TIME ;TIME TABLE PTR
.WORD 3000 ;ENFORCER BAITER TIME
WAVE7TIME
.WORD 60
.LONG EXTRA_TROG_START,0404H,30
.WORD 400
.LONG START_POWERUPS,[5*60,4],HSHOE|PAPPLE|ICE|CHILI
.WORD 800
.LONG EXTRA_TROG_START,0303H,30
.WORD 0
*
*WAVE 8
*
WAVE8DSP
.LONG ROCK_START,TROGSKULL1,[0,ROCKOID]
.LONG FLOWER_START,[1,2],[0,FLOWEROID]
.LONG SHROOM_START,[1,1],[0,SHROOMOID]
.LONG TROG_PIT_PICK,[0,2],[0,0]
.LONG 0 ;END OF INITIAL TABLE
.LONG WAVE8TIME ;TIME TABLE PTR
.WORD 3000 ;ENFORCER BAITER TIME
WAVE8TIME
.WORD 60
.LONG EXTRA_TROG_START,0404H,30
.WORD 400
.LONG START_POWERUPS,[5*60,4],HSHOE|PAPPLE|ICE|CHILI
.WORD 400
.LONG EXTRA_TROG_START,4,30
.WORD 800
.LONG EXTRA_TROG_START,0303H,30
.WORD 0
*
*WAVE 9
*
WAVE9DSP
.LONG ROCK_START,TROGSKULL2,[0,ROCKOID]
.LONG FLOWER_START,[1,2],[0,FLOWEROID]
.LONG SHROOM_START,[1,1],[0,SHROOMOID]
.LONG TROG_PIT_PICK,[0,2],[0,0]
.LONG TAR_START,[0,2],[0,TAROID]
.LONG 0 ;END OF INITIAL TABLE
.LONG WAVE8TIME ;TIME TABLE PTR
.WORD 3000 ;ENFORCER BAITER TIME
*
*WAVE 10
*
WAVE10DSP
.LONG FLOWER_START,[0,5],[0,FLOWEROID]
.LONG 0 ;END OF INITIAL TABLE
.LONG WAVE10TIME ;TIME TABLE PTR
.WORD 3000 ;ENFORCER BAITER TIME
WAVE10TIME
.WORD 20
.LONG TROG_START,[4,8],[0,TROGOID]
.WORD 101
.LONG EXTRA_TROG_START,3,10
.WORD 600
.LONG TROG_START,[2,4],[0,TROGOID]
.WORD 850
.LONG EXTRA_TROG_START,303H,10
.WORD 0
*
*WAVE 11
*
WAVE11DSP
.LONG HOUSE_START,HOUSE_TABLE_1,[0,HAUSOID]
.LONG FLOWER_START,[1,2],[0,FLOWEROID]
.LONG SHROOM_START,[1,1],[0,SHROOMOID]
.LONG 0 ;END OF INITIAL TABLE
.LONG WAVE11TIME ;TIME TABLE PTR
.WORD 3000 ;ENFORCER BAITER TIME
WAVE11TIME
.WORD 11
.LONG EXTRA_TROG_START,4,10
.WORD 400
.LONG START_POWERUPS,[5*60,4],HSHOE|PAPPLE|ICE|CHILI
.WORD 0
*
*WAVE 12
*
WAVE12DSP
.LONG HOUSE_START,HOUSE_TABLE_2,[0,HAUSOID]
.LONG FLOWER_START,[1,2],[0,FLOWEROID]
.LONG SHROOM_START,[1,1],[0,SHROOMOID]
.LONG 0 ;END OF INITIAL TABLE
.LONG WAVE12TIME ;TIME TABLE PTR
.WORD 3000 ;ENFORCER BAITER TIME
WAVE12TIME
.WORD 11
.LONG EXTRA_TROG_START,4,10
.WORD 400
.LONG START_POWERUPS,[5*60,3],HSHOE|PAPPLE|ICE|CHILI
.WORD 800
.LONG EXTRA_TROG_START,0303H,30
.WORD 0
*
*WAVE 13
*
WAVE13DSP
.LONG HOUSE_START,HOUSE_TABLE_3,[0,HAUSOID]
.LONG FLOWER_START,[1,2],[0,FLOWEROID]
.LONG SHROOM_START,[1,1],[0,SHROOMOID]
.LONG 0 ;END OF INITIAL TABLE
.LONG WAVE12TIME ;TIME TABLE PTR
.WORD 3000 ;ENFORCER BAITER TIME
*
*WAVE 14
*
WAVE14DSP
.LONG ROCK_START,ZIG_TABLE_1,[0,ROCKOID]
.LONG FLOWER_START,[3,3],[0,FLOWEROID]
.LONG SHROOM_START,[1,2],[0,SHROOMOID]
.LONG 0 ;END OF INITIAL TABLE
.LONG WAVE14TIME ;TIME TABLE PTR
.WORD 3000 ;ENFORCER BAITER TIME
WAVE14TIME
.WORD 30
.LONG EXTRA_TROG_START,030003H,92
.WORD 400
.LONG START_POWERUPS,[5*60,5],HSHOE|PAPPLE|ICE|CHILI
.WORD 0
*
*WAVE 15
*
WAVE15DSP
.LONG ROCK_START,ZIG_TABLE_1,[0,ROCKOID]
.LONG FLOWER_START,[3,3],[0,FLOWEROID]
.LONG SHROOM_START,[1,2],[0,SHROOMOID]
.LONG 0 ;END OF INITIAL TABLE
.LONG WAVE15TIME ;TIME TABLE PTR
.WORD 3000 ;ENFORCER BAITER TIME
WAVE15TIME
.WORD 30
.LONG EXTRA_TROG_START,030003H,92
.WORD 400
.LONG START_POWERUPS,[5*60,5],HSHOE|PAPPLE|ICE|CHILI
.WORD 500
.LONG EXTRA_TROG_START,03H,30
.WORD 800
.LONG EXTRA_TROG_START,0303H,30
.WORD 0
*
*WAVE 16
*
WAVE16DSP
.LONG HOUSE_START,HOUSE_TABLE_1,[0,HAUSOID]
.LONG ROCK_START,ZIG_TABLE_1,[0,ROCKOID]
.LONG FLOWER_START,[3,3],[0,FLOWEROID]
.LONG SHROOM_START,[1,2],[0,SHROOMOID]
.LONG TAR_START,[0,2],[0,TAROID]
.LONG 0 ;END OF INITIAL TABLE
.LONG WAVE15TIME ;TIME TABLE PTR
.WORD 3000 ;ENFORCER BAITER TIME
*
*WAVE 17
*
WAVE17DSP
.LONG FLOWER_START,[0,3],[0,FLOWEROID]
.LONG 0 ;END OF INITIAL TABLE
.LONG 0 ;TIME TABLE PTR
.WORD 3000 ;ENFORCER BAITER TIME
*
*WAVE 18
*
WAVE18DSP
.LONG CATAPULT_START,[1,2],[0,CATOID]
.LONG FLOWER_START,[1,3],[0,FLOWEROID]
.LONG SHROOM_START,[1,2],[0,SHROOMOID]
.LONG 0 ;END OF INITIAL TABLE
.LONG WAVE18TIME ;TIME TABLE PTR
.WORD 3000 ;ENFORCER BAITER TIME
WAVE18TIME:
.WORD 60
.LONG EXTRA_TROG_START,03000003H,10
.WORD 400
.LONG START_POWERUPS,[5*60,5],HSHOE|PAPPLE|ICE|CHILI
.WORD 0
*
*WAVE 19
*
WAVE19DSP
.LONG CATAPULT_START,[1,2],[0,CATOID]
.LONG ROCK_START,ZIG_TABLE_1,[0,ROCKOID]
.LONG FLOWER_START,[1,3],[0,FLOWEROID]
.LONG SHROOM_START,[1,2],[0,SHROOMOID]
.LONG 0 ;END OF INITIAL TABLE
.LONG WAVE19TIME ;TIME TABLE PTR
.WORD 3000 ;ENFORCER BAITER TIME
WAVE19TIME:
.WORD 30
.LONG EXTRA_TROG_START,03000003H,10
.WORD 400
.LONG START_POWERUPS,[5*60,5],HSHOE|PAPPLE|ICE|CHILI
.WORD 0
*
*WAVE 20
*
WAVE20DSP
.LONG CATAPULT_START,[1,2],[0,CATOID]
.LONG ROCK_START,ZIG_TABLE_2,[0,ROCKOID]
.LONG FLOWER_START,[1,3],[0,FLOWEROID]
.LONG SHROOM_START,[1,2],[0,SHROOMOID]
.LONG 0 ;END OF INITIAL TABLE
.LONG WAVE20TIME ;TIME TABLE PTR
.WORD 3000 ;ENFORCER BAITER TIME
WAVE20TIME:
.WORD 60
.LONG EXTRA_TROG_START,03000003H,10
.WORD 400
.LONG START_POWERUPS,[5*60,5],HSHOE|PAPPLE|ICE|CHILI
.WORD 500
.LONG EXTRA_TROG_START,3,30
.WORD 0
*
*WAVE 21
*
WAVE21DSP
.LONG FLOWER_START,[0,3],[0,FLOWEROID]
.LONG 0 ;END OF INITIAL TABLE
.LONG WAVE21TIME ;TIME TABLE PTR
.WORD 0A00H ;ENFORCER BAITER TIME
WAVE21TIME
.WORD 1
.LONG TROG_START,[4,8],[0,TROGOID]
.WORD 101
.LONG EXTRA_TROG_START,3,10
.WORD 600
.LONG TROG_START,[2,4],[0,TROGOID]
.WORD 850
.LONG TROG_START,[2,2],[0,TROGOID]
.WORD 0
*
*WAVE 22
*
WAVE22DSP
.LONG ROCK_START,ROCK_TABLE_1,[0,ROCKOID]
.LONG FLOWER_START,[3,3],[0,FLOWEROID]
.LONG SHROOM_START,[1,2],[0,SHROOMOID]
.LONG TROG_PIT_PICK,[1,2],[0,0]
.LONG TAR_START,[0,2],[0,TAROID]
.LONG 0 ;END OF INITIAL TABLE
.LONG WAVE22TIME ;TIME TABLE PTR
.WORD 3000 ;ENFORCER BAITER TIME
WAVE22TIME:
.WORD 10
.LONG EXTRA_TROG_START,00010103H,10
.WORD 11
.LONG START_POWERUPS,[5*60,5],HSHOE|PAPPLE|ICE|CHILI
.WORD 300
.LONG EXTRA_TROG_START,00010103H,10
.WORD 800
.LONG EXTRA_TROG_START,00010103H,10
.WORD 0
*
*WAVE 23
*
WAVE23DSP
.LONG HOUSE_START,HOUSE_TABLE_1,[0,HAUSOID]
.LONG ROCK_START,PALM_TABLE_1,[0,ROCKOID]
.LONG FLOWER_START,[3,3],[0,FLOWEROID]
.LONG SHROOM_START,[1,2],[0,SHROOMOID]
.LONG TROG_PIT_PICK,[1,2],[0,0]
.LONG TAR_START,[0,2],[0,TAROID]
.LONG 0 ;END OF INITIAL TABLE
.LONG WAVE23TIME ;TIME TABLE PTR
.WORD 3000 ;ENFORCER BAITER TIME
WAVE23TIME
.WORD 10
.LONG EXTRA_TROG_START,01010104H,10
.WORD 11
.LONG START_POWERUPS,[5*60,5],HSHOE|PAPPLE|ICE|CHILI
.WORD 300
.LONG EXTRA_TROG_START,01010104H,10
.WORD 800
.LONG EXTRA_TROG_START,01010104H,10
.WORD 0
*
*WAVE 32
*
WAVE32DSP
.LONG FLOWER_START,[1,3],[0,FLOWEROID]
.LONG SHROOM_START,[1,1],[0,SHROOMOID]
.LONG TAR_START,[0,1],[0,TAROID]
.LONG TROG_FIRE_PICK,[1,2],[0,0]
.LONG 0 ;END OF INITIAL TABLE
.LONG WAVE42TIME
.WORD 3000 ;ENFORCER BAITER TIME
*
*WAVE 33
*
WAVE33DSP
.LONG FLOWER_START,[1,1],[0,FLOWEROID]
.LONG SHROOM_START,[1,1],[0,SHROOMOID]
.LONG TAR_START,[0,1],[0,TAROID]
.LONG TROG_FIRE_PICK,[1,4],[0,0]
.LONG 0 ;END OF INITIAL TABLE
.LONG WAVE42TIME
.WORD 3000 ;ENFORCER BAITER TIME
*
*WAVE 34
*
WAVE34DSP
.LONG 0 ;END OF INITIAL TABLE
.LONG WAVE7TIME ;TIME TABLE PTR
.WORD 3000 ;ENFORCER BAITER TIME
*
*WAVE 36
*
WAVE36DSP
.LONG CATAPULT_START,[1,2],[0,CATOID]
.LONG ROCK_START,ZIG_TABLE_1,[0,ROCKOID]
.LONG FLOWER_START,[3,3],[0,FLOWEROID]
.LONG SHROOM_START,[1,2],[0,SHROOMOID]
.LONG 0 ;END OF INITIAL TABLE
.LONG WAVE15TIME ;TIME TABLE PTR
.WORD 3000 ;ENFORCER BAITER TIME
*
*WAVE 38
*
WAVE38DSP
.LONG ROCK_START,ZIG_TABLE_1,[0,ROCKOID]
.LONG FLOWER_START,[3,3],[0,FLOWEROID]
.LONG SHROOM_START,[1,2],[0,SHROOMOID]
.LONG TROG_PIT_PICK,[1,2],[0,0]
.LONG TROG_FIRE_PICK,[1,4],[0,0]
.LONG TAR_START,[0,2],[0,TAROID]
.LONG 0 ;END OF INITIAL TABLE
.LONG WAVE23TIME ;TIME TABLE PTR
.WORD 3000 ;ENFORCER BAITER TIME
*
*WAVE 42
*
WAVE42DSP
.LONG ROCK_START,TROGHENG1,[0,ROCKOID]
.LONG FLOWER_START,[1,1],[0,FLOWEROID]
.LONG SHROOM_START,[0,1],[0,SHROOMOID]
.LONG TAR_START,[0,1],[0,TAROID]
.LONG TROG_FIRE_PICK,[2,4],[0,0]
.LONG 0 ;END OF INITIAL TABLE
.LONG WAVE42TIME
.WORD 3000 ;ENFORCER BAITER TIME
WAVE42TIME
.WORD 100
.LONG EXTRA_TROG_START,3,30
.WORD 400
.LONG START_POWERUPS,[5*60,4],HSHOE|PAPPLE|ICE
.WORD 400
.LONG EXTRA_TROG_START,0404H,30
.WORD 0
*
*WAVE 43
*
WAVE43DSP
.LONG ROCK_START,TROGSKULL2,[0,ROCKOID]
.LONG FLOWER_START,[1,2],[0,FLOWEROID]
.LONG SHROOM_START,[1,1],[0,SHROOMOID]
.LONG TROG_PIT_PICK,[0,2],[0,0]
.LONG TROG_FIRE_PICK,[2,4],[0,0]
.LONG 0 ;END OF INITIAL TABLE
.LONG WAVE7TIME ;TIME TABLE PTR
.WORD 3000 ;ENFORCER BAITER TIME
*
*WAVE 45
*
WAVE45DSP
.LONG HOUSE_START,HOUSE_TABLE_1,[0,HAUSOID]
.LONG ROCK_START,ZIG_TABLE_1,[0,ROCKOID]
.LONG FLOWER_START,[3,3],[0,FLOWEROID]
.LONG SHROOM_START,[1,2],[0,SHROOMOID]
.LONG TAR_START,[0,2],[0,TAROID]
.LONG TROG_FIRE_PICK,[2,4],[0,0]
.LONG 0 ;END OF INITIAL TABLE
.LONG WAVE45TIME ;TIME TABLE PTR
.WORD 3000 ;ENFORCER BAITER TIME
WAVE45TIME
.WORD 30
.LONG EXTRA_TROG_START,030003H,92
.WORD 400
.LONG START_POWERUPS,[5*60,5],HSHOE|PAPPLE|ICE|CHILI
.WORD 500
.LONG EXTRA_TROG_START,0303H,30
.WORD 800
.LONG EXTRA_TROG_START,0303H,30
.WORD 0
*
*WAVE 46
*
WAVE46DSP
.LONG CATAPULT_START,[1,2],[0,CATOID]
.LONG ROCK_START,ZIG_TABLE_2,[0,ROCKOID]
.LONG FLOWER_START,[1,3],[0,FLOWEROID]
.LONG SHROOM_START,[1,2],[0,SHROOMOID]
.LONG TROG_FIRE_PICK,[1,4],[0,0]
.LONG 0 ;END OF INITIAL TABLE
.LONG WAVE46TIME ;TIME TABLE PTR
.WORD 3000 ;ENFORCER BAITER TIME
WAVE46TIME:
.WORD 60
.LONG EXTRA_TROG_START,03000003H,10
.WORD 400
.LONG START_POWERUPS,[5*60,5],HSHOE|PAPPLE|ICE|CHILI
.WORD 500
.LONG EXTRA_TROG_START,0303H,30
.WORD 600
.LONG EXTRA_TROG_START,3,30
.WORD 0
*
*WAVE 47
*
WAVE47DSP
.LONG ROCK_START,ROCK_TABLE_1,[0,ROCKOID]
.LONG FLOWER_START,[3,3],[0,FLOWEROID]
.LONG SHROOM_START,[1,2],[0,SHROOMOID]
.LONG 0 ;END OF INITIAL TABLE
.LONG WAVE22TIME ;TIME TABLE PTR
.WORD 3000 ;ENFORCER BAITER TIME
*
*WAVE 48
*
WAVE48DSP
.LONG HOUSE_START,HOUSE_TABLE_1,[0,HAUSOID]
.LONG ROCK_START,PALM_TABLE_1,[0,ROCKOID]
.LONG FLOWER_START,[3,3],[0,FLOWEROID]
.LONG SHROOM_START,[1,2],[0,SHROOMOID]
.LONG TROG_PIT_PICK,[1,2],[0,0]
.LONG TAR_START,[0,2],[0,TAROID]
.LONG TROG_FIRE_PICK,[2,4],[0,0]
.LONG 0 ;END OF INITIAL TABLE
.LONG WAVE23TIME ;TIME TABLE PTR
.WORD 3000 ;ENFORCER BAITER TIME
*
*WAVE 49
*
WAVE49DSP
.LONG TGEN_START,TGEN_TABLE_1,[0,TGENOID]
.LONG FLOWER_START,[3,3],[0,FLOWEROID]
.LONG 0 ;END OF INITIAL TABLE
.LONG WAVE49TIME ;TIME TABLE PTR
.WORD 0 ;ENFORCER BAITER TIME
WAVE49TIME
.WORD 60
.LONG EXTRA_TROG_START,10,30
.WORD 400
.LONG START_POWERUPS,[5*60,4],HSHOE|PAPPLE|ICE|CHILI
.WORD 600
.LONG EXTRA_TROG_START,10,30
.WORD 800
.LONG EXTRA_TROG_START,0A0AH,30
.WORD 1000
.LONG EXTRA_TROG_START,0A0AH,30
.WORD 1200
.LONG EXTRA_TROG_START,01000001H,10
.WORD 0
.END