trog/TROGEGGS.ASM

2601 lines
64 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 'TROGEGGS.ASM'
.TITLE " <<< T R O G -- EGG AND HOUSE 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 "TROGAEQU.ASM" ;GET THE ANIMATION EQUATES
.DEF EGG_START, EGG_OBJ, RECLAIM_LAND, HOUSE_SEL, EGGCOLL
.DEF EGG_START_IMM, HOUSEB_SND, ISHOME, GET_EXIT_ANI
.DEF DINO_FIND_CLOSEST, DINO_FIND_FURTHEST, DINO_RING
.DEF LAY_EGGS, HOUSEB_SND2, WAVE_ENTERS, ALLOT_EGGS, LAY_MAN
.REF WAVEEGGS, GPLAYNUM, GETCMOVE, DINOS_NEAR_PNT, TOMOVE
.REF GETAMOVE, GPLAYD, FINDMOVE, SEND2SCR, TUNNEL, TUNNEL_UP
.REF TUNNEL_PIT, DINOLOAD, HOUSES, GETEMOVE, HOUSE_TAB, EGG_TAB
.REF BGND_TYPE, FINDCMOVE, HOUSE_ANIS, THRASHFLG, MAINTUNE
.REF GET_DINO_CPNT, FIND_CLOSE_MPNT, ONE_MOVE, TUTOR
.REF FIND_CLOSE_EPNT, EGG_LIST, HOUSEZPOS, REXHL1
.REF HOMEU1, HOMEL1, HOMEC1, HOMEC2, BONE_OBLITERATE, EGGS_LAID
.REF GETMOVE, BONUS_WAVE, SENDOBJ, EGG_DIVISOR, EGG_GROUPS
.REF COUNT_FREE_CMOVES, FINDAMOVE, NOTDIR, EGGS_AT_ONCE
.REF REXSCORE_SND, OUTEGGS, EGG_SCHEME
.TEXT
**************************************************************************
* *
* ALLOT_EGGS - CALCULATE THE WAVEEGGS VARIABLE ACCORDING TO THE CURRENT *
* # OF FREE CENTER MOVES, AND THE NUMBER OF ACTIVE *
* PLAYERS. MAKE SURE THIS IS CALLED AFTER ALL OTHER *
* IMMOBILE OBJECTS HAVE BEEN PLACED. *
* *
**************************************************************************
ALLOT_EGGS
MMTM SP,A0,A3
CALLA COUNT_FREE_CMOVES ;GET THE NUMBER OF FREE CMOVES
MOVE A0,A3
CALLR WAVE_ENTERS ;GET THE NUMBER OF PLAYERS ABOUT TO PLAY
**** MOVK 6,A14
**** SUB A0,A14
**** SUB A14,A3
SUBK 2,A3 ;LEAVE A COUPLE OF SPOTS FOR TROG
MOVE @EGG_SCHEME,A14,W ;SIMPLE OR COMPLEX EGG SCHEME?
JRNZ AE_COMPLEX ;BR = COMPLEX
DIVU A0,A3 ;THIS IS THE NUMBER OF EGGS FOR EACH
MOVE A3,@WAVEEGGS,W ;THIS MANY EGGS PER PLAYER
JRUC AE_FINISH
AE_COMPLEX
MOVE A3,@WAVEEGGS,W ;THIS MANY EGGS PER PLAYER
DIVU A0,A3 ;THIS IS THE NUMBER OF EGGS FOR EACH
AE_FINISH
MOVE A3,@EGGS_AT_ONCE,W ;STORE FOR THIS MANY EGGS AT A BLAST
MOVE A0,@EGG_DIVISOR,W ;STORE FOR NEW PLAYER REFERENCE
MMFM SP,A0,A3
RETS
**************************************************************************
* *
* DINO_RING - CREATE THE RING THAT SHOWS THE DINO AS INVINCIBLE. *
* A8 = PTR TO UNINSERTED, INITIALIZED RING OBJECT. *
* A10 = PTR TO DINOSAUR OBJECT WE ARE RINGING. *
* A11 = PTR TO PROCESS OF THE DINOSAUR WE ARE RINGING. *
* *
**************************************************************************
DINO_RING
CLR A0
MOVE A0,*A13(PDATA),W
MOVI 0F0FH,A0
MOVE A0,*A8(OCONST),W
CALLA OBJ_OFF
MOVI RING_ANI,A9
MOVK 4,A1
JSRP FRANIM
CALLA INSERT_OBJ
MOVE A8,A0
CALLA SET_TZPOS
DR_WAIT
MOVB *A11(DTREXFLG),A0
JRZ DR_ANI
CALLA OBJ_OFF
SLOOP 1,DR_WAIT
DR_ANI
CALLA OBJ_ON ;ON FOR SURE
MOVE *A11(DINVPROC),A0,L
MOVE A10,A6
CALLA GETA10
SWAP A10,A6
CMPI 80,A6 ;IS TIME RUNNING OUT FOR THIS DINO
JRHI DR_NORM ;BR = NO
MOVE *A13(PDATA),A0,W ;FLASH ON?
JRNZ DR_NORM ;BR = YES, GO BACK TO NORMAL
MOVI SHIELD4,A1
MOVE *A8(OFLAGS),A4,W
CALLA ANI
MOVK 2,A4 ;FLASH RING THIS FAST
MOVK 1,A0
JRUC DR_FRAME
DR_NORM
MOVK 4,A1
JSRP FRANIM
JRNC DR_NFRM
MOVI RING_ANI,A9
JRUC DR_NORM
DR_NFRM
MOVE A0,A4 ;KEEP FRAME TICKS HERE
CLR A0
DR_FRAME
MOVE A0,*A13(PDATA),W
DR_AL_LP
PUSHP A4
SWAP A10,A8
CALLA GETANIXY_PACKED
SWAP A10,A8
CALLA OBJ_TO_PNT
MOVE *A10(OZVAL),A0,L
DEC A0
MOVE A0,*A8(OZVAL),L
SLEEP 1
PULLP A4
DSJ A4,DR_AL_LP
JRUC DR_ANI
*
*ANIMATION FOR THE RINGO STARR
*THIS IS PROCESSED BY A CUSTOM ROUTINE, NOT FRANIM, NO FLAGS PLEASE!
RING_ANI
.LONG SHIELD1
.WORD 4
.LONG SHIELD2
.WORD 4
.LONG SHIELD3
.WORD 4
.LONG 0
**************************************************************************
* *
* LAY_MAN - PROCESS TO PERIODICALLY LAY EGGS, IF A PLAYER NEEDS THEM. *
* START AT WAVE_START AND LET RUN FOR THE DURATION *
* *
**************************************************************************
LAY_MAN
*LAYING IN WAIT OF THE NEXT TIME WE MAY INTRODUCE SOME EGGS
MOVE @EGG_LIST,A14,L ;ARE WE IN THE BUSINESS?
JRZ LM_LAYBABY ;BR = YES, AND WE ARE OPEN!
SLOOP 600,LAY_MAN ;HANG AROUND FOR ANY NEW OPPORTUNITIES
LM_LAYBABY
MOVI 600/5,A11
LAY_WAIT_LP
SLEEP 5
MOVE @WAVEEGGS,A10,W
CLR A6
ALLPLYR INC_LAY_IMMEADIATE
MOVE A6,A6
JRNZ LAY_MAN_NOW
DSJS A11,LAY_WAIT_LP
LAY_MAN_NOW
CALLA COUNT_FREE_CMOVES ;GET THE NUMBER OF FREE CMOVES
SUBK 2,A0 ;SAVE ROOM FOR TROG
JRLE LAY_MAN ;NO SPACES...MUST WAIT....
MOVE A0,A9
MOVE @WAVEEGGS,A10,W
ALLPLYR CLR_PLAYMAN
CLR A6
ALLPLYR INC_LAY_PLAY ;SEE WHO'S CURRENTLY PLAYING
MOVE A6,A6
JRZ LAY_MAN ;BR = HOLD UP, NO ONE NEEDS EGGS
MOVE A10,A5
DIVU A6,A5 ;THIS MANY EGGS AT ONCE, THIS TIME
JRUC LAY_MAN_ALLOC_1ST
LAY_MAN_ALLOC_LP
CLR A6
ALLPLYR INC_LAY_PLAY ;SEE WHO'S CURRENTLY PLAYING
LAY_MAN_ALLOC_1ST
MOVE A9,A3
DIVU A6,A3 ;MAX SPACES FOR EACH
MOVE A9,A8 ;STORE LAST SPACES COUNT
ALLPLYR LAY_CHECK_MY_NEEDS
CMP A9,A8
JRNE LAY_MAN_ALLOC_LP
ALLPLYR SET_PLAYMAN
MOVE @NPLAYERS,A8,W
MOVI P1DATA,A11
LAY_MAN_LP
MOVE *A11(POBJ),A0,L ;FIRST OF ALL, DOES HE EXIST?
JRZ LM_NEXT ;BR = NO
MOVE *A11(PEGGOUT),A0,W
CMP A10,A0 ;HAVE WE PLOPPED ALL OF HIS EGGS?
JRHS LM_NEXT ;BR = YES
PUSHP A5
MOVE *A11(PEGGACTIVE),A3,W
SUB A3,A5
JRLE LM_NEXT_PULLPA5
MOVE *A11(PLAYMAN),A9,W
MOVE A11,A2
CALLR QUICK_EGG_START ;START SOME MORE EGGS!
SLEEP 1
LM_NEXT_PULLPA5
PULLP A5
LM_NEXT
ADDI PDSIZE,A11
DEC A8
JRNN LAY_MAN_LP
JRUC LAY_MAN
*
*CHEAP CODE FOR LAY_MAN
* MAKE PLAYMAN EQUAL MAX SPACES AVAILABLE FOR ALL PLAYERS
* WITH A ZERO PLAYMAN
*A2 = PTR TO PLAYER DATA
*A3 = NUMBER OF SPACES PER PLAYER
SET_PLAYMAN
MOVE *A2(PLAYMAN),A14,W
JRNZ SP_X
MOVE A3,*A2(PLAYMAN),W
SP_X
RETS
*
*CHEAP CODE FOR LAY_MAN
* CHECKS WHAT A PLAYER NEEDS, HE WILL ONLY TAKE THE SPACES
* THAT HE NEEDS FOR EGGS
*A2 = PTR TO PLAYER
*A3 = NUMBER OF SPACES PER PLAYER
*A5 = THIS MANY EGGS AT ONCE
*A9 = TOTAL NUMBER FREE
*A10 = WAVE EGGS
*TRASHES A4,A6
LAY_CHECK_MY_NEEDS
MOVE *A2(POBJ),A14,L
JRZ LCMN_X
MOVE *A2(PLAYMAN),A14,W ;HAVE WE SELECTED FOR THIS GUY
JRNZ LCMN_X ;BR = YES
MOVE *A2(PEGGOUT),A14,W
MOVE A10,A6
SUB A14,A6 ;A6 = AMOUNT LEFT TO LAY
JRLE LCMN_X ;BR = HE'S LAYED THEM ALL
MOVE *A2(PEGGACTIVE),A14,W
MOVE A5,A4
SUB A14,A4 ;A4 = ADD THIS MANY EGGS TO FILL
JRGT LCMN_MORE_EGGS ;BR = HE HAS MORE TO GIVE
INCM *A2(PLAYMAN),W ;FOOL CODE
ADD A3,A9 ;ADD HIS ON TO THOSE AVAILABLE
JRUC LCMN_X
LCMN_MORE_EGGS
CMP A6,A4
JRLE LCMN_CHECK_COUNT
MOVE A6,A4
LCMN_CHECK_COUNT
MOVE A3,A14
SUB A4,A14
JRLE LCMN_X ;WE WANT MORE THAN AVAILABLE
ADD A14,A9 ;GIVE THESE SPACES BACK TO OTHERS
MOVE A4,*A2(PLAYMAN),W ;LAY THIS MANY EGGS
LCMN_X
RETS
*
*CHEAP CODE FOR LAY_MAN
*A2 = PTR TO PLAYER
*A10 = CURRENT WAVEEGGS
*RETURNS
* A6 INCREMENTED IF PLAYER IS CURRENTLY PLAYING
INC_LAY_PLAY
MOVE *A2(POBJ),A14,L
JRZ ILP_X
MOVE *A2(PLAYMAN),A14,W ;HAVE WE SELECTED FOR THIS GUY
JRNZ ILP_X ;BR = YES
MOVE *A2(PEGGOUT),A14,W
CMP A10,A14 ;WILL THIS PLAYER LAY ANYMORE
JRHS ILP_X ;BR = NO
INC A6
ILP_X
RETS
*
*CHEAP CODE FOR LAY_MAN
*A2 = PTR TO PLAYER
*A10 = WAVEEGGS
*RETURNS
* A6 INCREMENTED IF PLAYER IS CURRENTLY PLAYING
INC_LAY_IMMEADIATE
MOVE *A2(POBJ),A14,L
JRZ LCP_X
MOVE *A2(PEGGOUT),A14,W
CMP A10,A14 ;WILL THIS PLAYER LAY ANYMORE
JRHS LCP_X ;BR = NO
MOVE *A2(PEGGACTIVE),A14,W ;IS THIS GUY OUT OF EGGS?
JRNZ LCP_X
INC A6
LCP_X
RETS
**************************************************************************
* *
* CLR_PLAYMAN - ROUTINE TO CLEAR THE PLAYER VARIABLE PLAYMAN *
* A2 = PTR TO PLAYER DATA *
* *
**************************************************************************
CLR_PLAYMAN
CLRM *A2(PLAYMAN),W
RETS
**************************************************************************
* *
* QUICK_EGG_START - ROUTINE TO USE FOR OUTPUTTING MORE EGGS DURING THE *
* WAVE, IF A PLAYER SHOULD HAVE MORE. *
* A2 = PTR TO PLAYER DATA *
* A9 = MAX NUMBER ALLOWED *
* *
**************************************************************************
QUICK_EGG_START
MMTM SP,A0,A4,A8,A9,A11
MOVE @EGG_LIST,A14,L ;SHOULD WE RANDOMLY OUTPUT EGGS?
JRNZ QEGG_SX ;BR = NO
MOVE *A2(PEGGLAY),A14,W ;ARE WE CURRENTLY LAYING SOME EGGS?
JRNZ QEGG_SX ;BR = YES
MOVE *A2(PEGGOUT),A14,W ;GET THE CURRENT NUMBER OF EGGS OUT
MOVE @WAVEEGGS,A4,W
SUB A14,A4 ;HAVE WE PLOPPED ENOUGH EGGS?
JRLE QEGG_SX ;BR = YES
MOVE @EGGS_AT_ONCE,A11,W ;WE CAN LAY THIS MANY EGGS AT ONCE
JRLE QES_USE_REST ;SAFETY CHECK
CMP A11,A4
JRHS QES_LAYEM
QES_USE_REST
MOVE A4,A11
QES_LAYEM
CMP A9,A11 ;IS THERE ENOUGH FOR THIS LAY?
JRLS QES_SPACE_FOR_EGGS
MOVE A9,A11 ;TONE DOWN THE OUTPUT
JRZ QEGG_SX ;NO SPACE FOR EGGS
QES_SPACE_FOR_EGGS
CLR A8
CALLA GPLAYNUM
MOVE A0,A9
SLL 5,A9
ADDI EGG_TAB,A9
MOVE *A9,A9,L ;GET THE PTR TO THE EGG INIT TABLE
CALLR QUICK_EGGHATCH
QEGG_SX:
MMFM SP,A0,A4,A8,A9,A11
RETS
**************************************************************************
* *
* EGG_START - ROUTINE TO DO THE INITIAL WAVE EGG LAY FOR A PLAYER. *
* EGGS_AT_ONCE IS USED TO DETERMINE THE NUMBER *
* OF EGGS TO LAY. *
* IT WILL ALSO TURN ALL OF THE CURRENT EGGS TO *
* EASTER EGGS IF THE CALLING PLAYER IS STARTING IN *
* THE MIDDLE OF A WAVE. *
* A2 = PTR TO PLAYER DATA *
* *
**************************************************************************
EGG_START
MMTM SP,A0,A1,A3,A4,A7,A8,A9,A11
MOVE @EGG_LIST,A1,L ;SHOULD WE RANDOMLY OUTPUT EGGS?
JRNZ EGG_SX ;BR = NO
MOVE *A2(PEGGLAY),A1,W ;ARE WE CURRENTLY LAYING SOME EGGS?
JRNZ EGG_SX ;BR = YES
MOVE *A2(PEGGINIT),A1,W ;IS THIS VIRGIN TERRITORY I SMELL?
JRNZ EGG_SX ;BR = NO
*CHECK IF ANOTHER PLAYER IS JOINING US, IF HE IS, THEN PLOP EASTER EGGS
MOVE @EGG_DIVISOR,A1,W
JRZ ES_OK
MOVE @EGG_GROUPS,A0,W
INC A0
MOVE A0,@EGG_GROUPS,W
CMP A1,A0
JRLS ES_OK
MOVK 1,A1
MOVE A1,*A2(PEGGINIT),W
CALLR CONVERT_EGGS ;CONVERT EGGS TO EASTER EGGS
JRUC EGG_SX ;AND EXIT
ES_OK
MOVE @EGGS_AT_ONCE,A11,W ;WE CAN LAY THIS MANY EGGS AT ONCE
JRLE EGG_SX ;SAFETY CHECK
CLR A8
CALLA GPLAYNUM
MOVE A0,A9
SLL 5,A9
ADDI EGG_TAB,A9
MOVE *A9,A9,L ;GET THE PTR TO THE EGG INIT TABLE
CREATE INDPID,EGGHATCH
JRZ EGG_SX ;NO MORE PROCESS SPACE
MOVE A2,*A0(DPLAYER),L ;PASS THE POINTER TO THE PLAYER
MOVK 1,A0
MOVE A0,*A2(PEGGLAY),W ;FLAG THE LAY
MOVE A0,*A2(PEGGINIT),W ;FLAG THE TRIP THROUGH EGG LAND
EGG_SX:
MMFM SP,A0,A1,A3,A4,A7,A8,A9,A11
RETS
**************************************************************************
* *
* WAVE_ENTERS - RETURN THE NUMBER OF PLAYERS THAT PLAYED THIS WAVE OR *
* ARE READY TO ENTER THIS WAVE. USED FOR PRE-WAVE *
* PLAYER CENSUSES. *
* RETURNS: *
* A0 = # OF PLAYERS THIS WAVE *
* *
**************************************************************************
WAVE_ENTERS:
MMTM SP,A1,A2,A3
CLR A0
MOVE @NPLAYERS,A1,W
MOVI P1DATA,A2
WAVE_E_LP:
MOVE *A2(PWAVEST),A3,W
JRNZ WAVE_E_INC
MOVE *A2(POBJ),A3,L
JRNZ WAVE_E_INC
MOVE *A2(PENTER),A3,W
JRZ WAVE_E_NXT
WAVE_E_INC
INC A0
WAVE_E_NXT:
ADDI PDSIZE,A2
DEC A1
JRNN WAVE_E_LP
MMFM SP,A1,A2,A3
RETS
**************************************************************************
* *
* EGG_START_IMM - START ONE STUPID EGG ON A GIVEN SPOT REGARDLESS *
* OF WHAT IS THERE. *
* A2 = PTR TO PLAYER DATA *
* A10 = [Y,X] POSITION TO START IT UPON *
* *
**************************************************************************
EGG_START_IMM:
MMTM SP,A0,A1,A7,A8,A9
MOVE @WAVEEGGS,A8,W ;GET THE COUNT
JRZ EGG_SIX ;BR = THERE ARE NONE
CLR A8
MOVE A2,A2
JRZ ESI_MULTI
CALLA GPLAYNUM
MOVE A0,A9
SLL 5,A9
ADDI EGG_TAB,A9
MOVE *A9,A9,L ;GET THE PTR TO THE EGG INIT TABLE
ESI_MULTI
CREATE INDPID,EGGHATCH_IMM
JRZ EGG_SIX ;NO MORE PROCESS SPACE
MOVE A2,*A0(DPLAYER),L ;PASS THE POINTER TO THE PLAYER
EGG_SIX:
MMFM SP,A0,A1,A7,A8,A9
RETS
**************************************************************************
* *
* LAY_EGGS - ROUTINE TO PROCESS A LIST OF EGG LAYS. *
* A1 = PTR TO LIST OF POINTS *
* RETURNS: *
* A1 = POINTING TO WORD AFTER EGG LIST *
* *
**************************************************************************
LAY_EGGS
MMTM SP,A0,A1,A2,A7,A10,A11
MOVE @BONUS_WAVE,A0,W ;BONUS WAVE?
JRZ LE_OK ;BR = NO
CMPI BONUSW_2,A0 ;IS IT THE GEM WAVE?
JRNZ LE_X ;BR = NO
LE_OK
MOVE @EGGS_LAID,A0,W ;HAVE WE DUMPED THIS MORNING?
JRNZ LE_X ;BR = YES
INC A0
MOVE A0,@EGGS_LAID,W ;MARK IT DONE THIS TIME
CLR A2
INC A1
JRNZ LE_LIST
MOVE @WAVEEGGS,A11,W ;GET THE COUNT
JRZ LE_X ;BR = THERE ARE NONE
CALLR WAVE_ENTERS ;GET THE NUMBER OF PLAYERS ABOUT TO PLAY
DEC A0
JRNN LE_WE_SAFE ;SAFETY CHECK FOR NEGATIVE
CLR A0
LE_WE_SAFE
SLL 1,A0
ADD A0,A11
SLL 2,A11 ;EGGS x 4
CREATE INDPID,EGGHATCH
JRZ LE_X ;NO MORE PROCESS SPACE
MOVE A2,*A0(DPLAYER),L ;PASS THE POINTER TO THE PLAYER
JRUC LE_X
LE_LIST
INC A1
JRZ LE_X
SUBK 2,A1
LE_LP
MOVE *A1+,A10,L
JRZ LE_X
CALLR EGG_START_IMM
JRUC LE_LP
LE_X
MMFM SP,A0,A1,A2,A7,A10,A11
RETS
**************************************************************************
* *
* CONVERT_EGGS - ROUTINE TO CONVERT ALL CURRENT EGGS ON THE PLAYFIELD *
* TO EASTER EGGS. IF THERE ARE NO EGGS LEFT THEN THE *
* PLAYERS HOUSE IS EXTENDED. *
* A2 = PTR TO PLAYER DATA AREA *
* *
**************************************************************************
CONVERT_EGGS
MMTM SP,A0,A1,A3,A4,A5,A6,A7,A8,A9
MOVE @EGGS,A8,L
JRZ CE_HOUSE
MOVE @EGG_LIST,A1,L ;HAVE WE DONE THIS?
JRNZ CE_X ;BR = YES
MOVI EASTEREGG,A9
MOVE *A9(ICMAP),A7,L
MOVI DMAWNZ,A4
MOVI EGGOID|PXPLAYER,A5
MOVI PXPLAYER,A6
CE_LP
CALLA OBJPROC_KILL ;KILL ANY CONNECTING PROCESS
MOVE *A8(OIMG),A1,L
MOVE *A1(ISIZEY),A1,W
MOVE *A8(OSIZEY),A3,W
SUB A3,A1 ;CHECK THE DIFFERENCE
JRZ CE_BIG_AND_TALL ;THERE IS NONE, HE IS TALL ENOUGH
ADD A1,A3
MOVE A3,*A8(OSIZEY),W ;MAKE SURE EGG IS BIG AND TALL
MOVE *A8(OYPOS),A3,W
SUB A1,A3 ;ALSO OFFSET THE POSITION CORRECTLY
MOVE A3,*A8(OYPOS),W
CE_BIG_AND_TALL
CALLA GETANIXY_PACKED
MOVE A9,A1
CALLA ANI ;CHANGE HIS CLOTHES
MOVE A7,A0
CALLA CHANGE_PAL ;HIS COLORS
MOVE A5,*A8(OID),W ;AND HIS I.D.
CALLA FINDCMOVE ;HOPEFULLY WE GET IT ON THIS SHOT
JRC CE_STUFF ;BR = GREAT, WE DID IT!
CALLA FINDAMOVE ;GO FOR THE BONER MOVES
JRNC CE_NXT ;BR = NOT THERE EITHER, LOST???
CE_STUFF
MOVB A6,*A1(CMOVEEGG) ;STUFF A NEW ASSHOLE
CE_NXT
MOVE *A8(OSLINK),A8,L
JRNZ CE_LP
CLR A1
NOT A1
MOVE A1,@EGG_LIST,L ;MARK IT DONE
ALLPLYR DELETE_HOUSE ;DELETE ANY EXISTING HOUSES
ALLPLYR OUTEGGS ;CLEAR THE EGG COUNTS
JRUC CE_X
CE_HOUSE
MOVE *A2(POBJ),A8,L ;GET THE DINO OBJECT
JRZ CE_X ;NON-EXISTANT, FALSE ALARM
MOVE *A8(OID),A9,W
MOVE A9,A1
SLL 28,A1
SRL 28,A1
ORI HOUSEPID,A1
MOVI FIRST_HOUSE,A7 ;CREATE THE HOUSE
CALLA GETPRC
JRZ CE_X ;COULDN'T BUILD THE HOUSE
MOVE A2,*A0(DPLAYER),L ;PASS THE PLAYER DATA BLOCK
MOVE @WAVEEGGS,A7,W
MOVE A7,*A2(PEGGOUT),W ;FOOL LAY_MAN
MOVE A7,*A2(PEGGS),W ;FOOL THEM ALL!
CALLA OUTEGGS
CE_X
MMFM SP,A0,A1,A3,A4,A5,A6,A7,A8,A9
RETS
**************************************************************************
* *
* EGGHATCH_IMM - PROCESS TO HATCH AN EGG ON A GIVEN SPOT NO MATTER *
* WHAT! *
* A8 = ANIMATION TABLE FOR THIS EGG. *
* A9 = EGG INITIALIZATION TABLE *
* A10 = [Y,X] CENTER POINT ON WHICH TO START THE EGG. *
* *A13(DPLAYER),L = PTR TO THE PLAYER IN CONTROL. *
* *
**************************************************************************
EGGHATCH_IMM:
MOVK 1,A11
MOVE A10,A3
CALLA FINDCMOVE
JRNC EGGHX
MOVE A1,A5
JRUC EGGHERE
**************************************************************************
* *
* EGGHATCH - THIS PROCESS WILL CREATE AN EGG, THEN HATCH AROUND THE *
* TIME, SPECIFIED BY HATCH_TIME. THIS IS DIFF ADJUSTABLE *
* A8 = ANIMATION TABLE FOR THIS EGG *
* A9 = EGG INTIALIZATION TABLE *
* A11 = NUMBER OF EGGS TO HATCH *
* *A13(DPLAYER),L = PTR TO THE PLAYER IN CONTROL OF THIS DINO *
* *
**************************************************************************
EGGHATCH
SLEEP 4 ;LET SHIT GET CREATED
EGG_HATCH_LP
MMTM A12,A8,A9,A11
MOVE *A13(DPLAYER),A2,L
JRNZ EGGH_SINGLE
MOVI DINOOID,A2
MOVI 0FFF0H,A1
JRUC EGGH_SRCH
*A2 = PTR TO PLAYER DATA AREA
EGGH_SINGLE
MOVE *A9(INITOID),A2,W
SLL 28,A2
SRL 28,A2
ORI DINOOID,A2 ;I.D. OF DINO TO AVOID
CLR A1
NOT A1 ;FORM A MASK
EGGH_SRCH
MOVE @CMOVECNT,A7,W ;GET THE NUMBER OF CENTER MOVES
JRZ EGG_AUXILARY ;BR = NO CENTERS, TRY AUXILARY
MOVK 10,A6 ;THIS MANY TRIES UNTIL FAILURE
EGGFIND:
MOVE A7,A0
CALLA RANDU ;FIND A CENTER POINT
DEC A0 ;MAKE IT ZERO BASED
CALLA GETCMOVE
MOVB *A0(CMOVEEGG),A3 ;IS THERE AN EGG ON THIS SPOT?
INC A3
JRNZ EGGFINDNXT ;BR = YES
MOVE *A0(CMOVEPOS),A3,L ;GET THE POSITION OF THIS POINT
MOVE A0,A5 ;STORE THE POINT
MOVE A2,A0
CALLA DINOS_NEAR_PNT
JRZ EGGHERE
EGGFINDNXT:
DSJ A6,EGGFIND
*RANDOM FAILURE MODE, JUST LOOK FOR THE FIRST AVAILABLE CENTER
MOVI CMOVEMAP,A0
EGGCFIND:
MOVB *A0(CMOVEEGG),A3 ;SPOT EMPTY?
INC A3
JRNZ EGGCFINDNXT ;BR = NO
MOVE *A0(CMOVEPOS),A3,L ;GET THE POSITION OF THIS POINT
MOVE A0,A5 ;STORE THE POINT
MOVE A2,A0
CALLA DINOS_NEAR_PNT
JRZ EGGHERE
MOVE A5,A0 ;RESTORE CENTER MOVE POINT
EGGCFINDNXT:
ADDI CMOVESIZE,A0
DSJ A7,EGGCFIND
*NO OPEN CENTER SPACES, WE'LL GO FOR AUXILARY SPACES
EGG_AUXILARY:
MOVE @AMOVECNT,A7,W ;GET THE NUMBER OF CENTER MOVES
JRZ EGGHX ;THERE ARE NO AUXILARY MOVES, whAT?
MOVK 10,A6 ;THIS MANY TRIES UNTIL FAILURE
EGGAFIND:
MOVE A7,A0
CALLA RANDU ;FIND A RANDOM AUXILARY POINT
DEC A0 ;MAKE IT ZERO BASED
CALLA GETAMOVE
MOVB *A0(CMOVEEGG),A3 ;IS THERE AN EGG ON THIS SPOT?
INC A3
JRNZ EGGAFINDNXT ;BR = YES
MOVE *A0(CMOVEMPTR),A3,L
JRN EGGA_NOC
CALLR EDGE_CHECK
JRZ EGGAFINDNXT
MOVB *A3(MOVEPLYR),A3
CMPI PXPLAYER,A3
JREQ EGGAFINDNXT
EGGA_NOC
MOVE *A0(CMOVEPOS),A3,L ;GET THE POSITION OF THIS POINT
MOVE A0,A5 ;STORE THE POINT
MOVE A2,A0
CALLA DINOS_NEAR_PNT
JRZ EGGHERE
EGGAFINDNXT:
DSJ A6,EGGAFIND
*RANDOM FAILURE MODE, JUST LOOK FOR THE FIRST AVAILABLE AUXILARY
MOVI AMOVEMAP,A0
EGGAFFIND:
MOVB *A0(CMOVEEGG),A3 ;SPOT EMPTY?
INC A3
JRNZ EGGAFFINDNXT ;BR = NO
MOVE *A0(CMOVEMPTR),A3,L
JRN EGGA_FNOC
CALLR EDGE_CHECK
JRZ EGGAFFINDNXT
MOVB *A3(MOVEPLYR),A3
CMPI PXPLAYER,A3
JREQ EGGAFFINDNXT
EGGA_FNOC
MOVE *A0(CMOVEPOS),A3,L ;GET THE POSITION OF THIS POINT
MOVE A0,A5 ;STORE AUX MOVE
MOVE A2,A0
CALLA DINOS_NEAR_PNT
JRZ EGGHERE
MOVE A5,A0 ;RESTORE AUXILARY MOVE POINT
EGGAFFINDNXT:
ADDI AMOVESIZE,A0
DSJ A7,EGGAFFIND
JRUC EGGHX ;FUCK! NO OPEN SPACES ANYWHERE
*PLACE THE EGG UPON THIS SPOT
*A5 = PTR TO SPOT
*A8 = PTR TO EGG ANIMATION TABLE
*A9 = INITIALIZATION TABLE
EGGHERE
MOVE A8,*A13(DATABLE),L ;STORE ANIMATION TABLE
MOVE *A13(DPLAYER),A2,L
JRNZ EGG_PLAY
MOVE A5,A7
MOVE @BONUS_WAVE,A0,W
CMPI BONUSW_2,A0
JRNE EH_EASTER
MOVI 200,A0
CALLA RANDPER
JRNC EH_EMERALD
MOVI DIAMOND_INIT,A5
JRUC EH_SPEC_CO
EH_EMERALD
MOVI 300,A0
CALLA RANDPER
JRNC EH_RUBY
MOVI EMERALD_INIT,A5
JRUC EH_SPEC_CO
EH_RUBY
MOVI RUBY_INIT,A5
JRUC EH_SPEC_CO
EH_EASTER
MOVI EASTEREGG_INIT,A5
EH_SPEC_CO
MOVE A5,*A13(DINITTAB),L ;STORE INITIALIZATION TABLE
CALLA CREATE_OBJ
JRZ EGGHX
MOVE A0,A8
MOVE A7,A5
JRUC EGG_SET
*A2 = PTR TO PLAYER DATA AREA
EGG_PLAY
MOVE A9,*A13(DINITTAB),L ;STORE INITIALIZATION TABLE
MOVE A9,A14 ;INIT TABLE IN THE CORRECT SPOT
CALLA GPALOBJSTF
JRZ EGGHX ;BR = WE FAILED TO GET AN OBJECT
MOVE A0,A8
INCM *A2(PEGGOUT),W ;KNOCK UP ANOTHER EGG OUT THE DOOR
INCM *A2(PEGGACTIVE),W ;KNOCK UP ACTIVE EGG
EGG_SET
MOVE A5,A0
CALLA TOMOVE ;PLACE THE EGG ON THE CENTER MOVE
MOVE *A8(OID),A1,W
SLL 28,A1
SRL 28,A1
MOVB A1,*A0(CMOVEEGG) ;MARK THIS SPACE AS TAKEN!
MOVE A13,*A8(OPLINK),L ;LINK THE PROC TO THE OBJ
MOVE *A13(DATABLE),A10,L ;RELOAD THE ANIMATION TABLE
MOVE A8,A0 ;LET'S INSERT
CALLA SET_MZPOS
MOVI EGGS,A1
CALLA INSERT_OBJ_SUPP ;PUT IT ON ALL LISTS
CLR A0
MOVE A0,*A8(OPLINK),L ;CLEAR THE LINKSTER
MMFM A12,A8,A9,A11
DSJ A11,EGG_HATCH_LP
EGGHX:
MOVE *A13(DPLAYER),A2,L
JRZ EGGHXXX
CLRM *A2(PEGGLAY),W ;CLEAR THE LAY FLAG
EGGHXXX
DIE
**************************************************************************
* *
* QUICK_EGGHATCH - ROUTINE TO CREATE SOME EGGS. *
* A2 = PTR TO PLAYER DATA *
* A9 = EGG INTIALIZATION TABLE *
* A11 = NUMBER OF EGGS TO HATCH *
* *
**************************************************************************
QUICK_EGGHATCH
MMTM SP,A0,A1,A3,A4,A5,A6,A7,A8
MOVE *A9(INITIMG),A4,L
MOVE *A4(ISIZEY),A4,W
DEC A4 ;ADD THIS MUCH TO EACH EGG
MOVK 1,A3 ;SIZE TO STUFF
QEGG_HATCH_LP
QEGGH_SRCH
MOVE @CMOVECNT,A7,W ;GET THE NUMBER OF CENTER MOVES
JRZ QEGG_X ;BR = NO CENTERS, BUMMER
MOVK 5,A6 ;THIS MANY TRIES UNTIL FAILURE
QEGGFIND:
MOVE A7,A0
CALLA RANDU ;FIND A CENTER POINT
DEC A0 ;MAKE IT ZERO BASED
CALLA GETCMOVE
MOVB *A0(CMOVEEGG),A14 ;IS THERE AN EGG ON THIS SPOT?
INC A14
JRNZ QEGGFINDNXT ;BR = YES
MOVE A0,A5 ;STORE THE POINT
JRUC QEGGHERE
QEGGFINDNXT:
DSJ A6,QEGGFIND
*RANDOM FAILURE MODE, JUST LOOK FOR THE FIRST AVAILABLE CENTER
MOVI CMOVEMAP,A0
QEGGCFIND:
MOVB *A0(CMOVEEGG),A14 ;SPOT EMPTY?
INC A14
JRNZ QEGGCFINDNXT ;BR = NO
MOVE A0,A5 ;STORE THE POINT
JRUC QEGGHERE
QEGGCFINDNXT:
ADDI CMOVESIZE,A0
DSJ A7,QEGGCFIND
JRUC QEGG_X
*PLACE THE EGG UPON THIS SPOT
*A2 = PTR TO PLAYER
*A5 = PTR TO SPOT
*A9 = INITIALIZATION TABLE
QEGGHERE
MOVE A9,A14 ;INIT TABLE IN THE CORRECT SPOT
CALLA GPALOBJSTF
JRZ QEGG_X ;BR = WE FAILED TO GET AN OBJECT
MOVE A0,A8
INCM *A2(PEGGOUT),W ;KNOCK UP ANOTHER EGG OUT THE DOOR
INCM *A2(PEGGACTIVE),W
MOVE A5,A0
CALLA TOMOVE ;PLACE THE EGG ON THE CENTER MOVE
MOVE *A8(OID),A1,W
SLL 28,A1
SRL 28,A1
MOVB A1,*A0(CMOVEEGG) ;MARK THIS SPACE AS TAKEN!
MOVE A8,A0 ;LET'S INSERT
CALLA SET_MZPOS
CREATE INDPID,EGG_GROW ;GET THE GROW PROC
JRZ QEGG_NOGROW ;BR = NONE LEFT
MOVE A0,*A8(OPLINK),L ;LINK THE PROCESS
ADDRM A4,*A8(OYPOS),W ;DOWN IN THE GROUND
MOVE A3,*A8(OSIZEY),W ;AND CLIPPER McGEE
QEGG_NOGROW
MOVI EGGS,A1
CALLA INSERT_OBJ_SUPP ;PUT IT ON ALL LISTS
DSJ A11,QEGG_HATCH_LP
QEGG_X:
MMFM SP,A0,A1,A3,A4,A5,A6,A7,A8
RETS
**************************************************************************
* *
* EGG_GROW - MAKE AN EGG GROW OUT OF THE GROUND. *
* A8=OBJECT(ALREADY CLIPPED TO ONE PIXEL *
* *
**************************************************************************
EGG_GROW:
MOVE *A8(OIMG),A9,L
MOVE *A9(ISIZEY),A9,W
MOVK 3,A0
CALLA RANDU
MOVE A0,A10
EG_LP
MOVE *A8(OSIZEY),A0,W
INC A0
CMP A9,A0
JRHI EG_DONE
MOVE A0,*A8(OSIZEY),W ;ADJUST HT.
MOVE *A8(OYPOS),A1,W ;ADJUST TOP LEFT Y
DEC A1
MOVE A1,*A8(OYPOS),W
SLOOPR A10,EG_LP
EG_DONE:
CLR A0
MOVE A0,*A8(OPLINK),L
DIE
**************************************************************************
* *
* EDGE_CHECK - SEE IF THE GIVEN MOVE POINT IS ON AN EDGE. *
* A3 = PTR TO MOVE POINT THAT IS BEING BEING CHECKED. *
* RETURNS *
* Z = IT IS UPON AN EDGE *
* NZ = IT IS NOT *
* *
**************************************************************************
EDGE_CHECK
MMTM SP,A0,A1,A3
MOVE A3,A0
CLR A3
EC_LP
MOVE A3,A1
CALLA ONE_MOVE
JRZ EC_X
INC A3
CMPI RIGHT,A3
JRLS EC_LP
EC_X
MMFM SP,A0,A1,A3
RETS
**************************************************************************
* *
* EGGDINO - EGG COLLIDED WITH A DINOSAUR *
* A0 = EGG POINTER *
* A8 = DINOSAUR POINTER *
* *
**************************************************************************
EGGDINO
MMTM SP,A0,A1,A2,A3,A4,A7,A8,A9,A10,A14
MOVE *A8(OPLINK),A10,L ;GET THE DINOSAURS CONTROL
JRZ EGGDINOX ;THE DINO IS OUT OF CONTROL
MOVE *A0(OID),A3,W
MOVE *A8(OID),A4,W
SLL 28,A3
SRL 28,A3
SLL 28,A4
SRL 28,A4
CMPI PXPLAYER,A3
JREQ EVERY_EGG
CMP A3,A4
JRNE EGGDINOFL ;NOT OF THE SAME BREED
EVERY_EGG
MOVE A0,A8
CALLA OBJPROC_KILL ;KILL THE CONTROL
MOVE *A8(OIMG),A1,L
MOVE *A1(ISIZEY),A1,W
MOVE A1,A0
MOVE *A8(OSIZEY),A3,W
MOVE A0,*A8(OSIZEY),W ;MAKE SURE EGG IS BIG AND TALL
SUB A3,A1 ;CHECK THE DIFFERENCE
MOVE *A8(OYPOS),A3,W
SUB A1,A3 ;ALSO OFFSET THE POSITION CORRECTLY
MOVE A3,*A8(OYPOS),W
MOVE A4,A0
CALLA GETANIXY_PACKED
CALLA GPLAYD ;GET THE PLAYER DATA AREA
CALLA FINDMOVE ;GET MOVE THAT THIS EGG IS ON
JRNC EGGNOC ;BR = DIDN'T FIND A MOVE
MOVE *A1(MOVECPTR),A3,L ;IS IT A CENTER MOVE?
JRNN EGG_DEL ;BR = YES, DO THE DIRTY WORK
MOVE *A1(MOVEAPTR),A3,L ;IS IT AN AUXILLARY MOVE?
JRN EGGNOC ;BR = NO, THEN DON'T DO ANYTHING
EGG_DEL:
MOVB *A3(CMOVEEGG),A1
CMPI PXPLAYER,A1
JREQ EGG_FREE
CMP A4,A1 ;IS THIS MY EGG?
JRNE EGGNOC ;BR = NO
EGG_FREE
CLR A1
NOT A1
MOVB A1,*A3(CMOVEEGG) ;CLEAR THE USER OF THIS EGG SPOT
EGGNOC:
MOVE @BONUS_WAVE,A1,W ;BONUS TIME
CMPI BONUSW_2,A1 ;IS THIS A GEM WAVE?
JRNE EGG_SCORE ;BR = NO, HANDLE NORMAL SCORING
CALLR GEM_SCORE
JRUC NENUFF_EGGS ;AND EXIT GRACEFULLY
*EGG SCORING
*
EGG_SCORE
MOVE *A2(PEGGSTHISLIFE),A1,W
MOVE A1,A3 ;THE MORE YOU PICK UP IN ONE LIFE
INC A3 ;THE MORE YOU SCORE!
MOVE A3,*A2(PEGGSTHISLIFE),W ;STORE HIS NEW EGG COUNT
CLRM *A2(PLASTEGG),L ;DING THE EGG TIMER
**** SRL 4,A3
**** SRL 4,A1
**** CMPI NUMEGGSCRS,A3 ;HAVE WE MAXED THE SCORE?
**** JRLE EGGSCR ;BR = NO
**** MOVI NUMEGGSCRS-1,A1 ;DEFLT MAX NUMBER OF SCORES, ZERO BASED
****EGGSCR:
**** SLL 28,A1 ;MASK ALL BUT THE LOW FOUR BITS
**** SRL 23,A1 ;RETURN MULTIPLIED BY 32
**** ADDI EGGSCRTAB,A1 ;INDEX INTO SCORE TAB
**** MOVE *A1,A1,L ;GET THE SCORE
MOVI 50H,A1
**** MOVE A3,A0 ;LET'S SELECT THE SOUND
**** CMPI NUMEGGSNDS,A3
**** JRLO EGGSNDMAX ;BR = HAVEN'T MAXED OUT THE SOUNDS YET
**** MOVI NUMEGGSNDS-1,A0
****EGGSNDMAX:
**** SLL 5,A0
**** ADDI EGGSNDTAB,A0
**** MOVE *A0,A0,L ;GET THE PROPER SOUND CALL
MOVI EGGP1_SND,A0
CALLA SENDOBJ ;SEND THE OBJECT TO THE SCORE AREA
MOVI EGGS,A1
CALLA DELETE_SUPP ;TAKE EGG OFF OF THE LIST
*
*TOTAL EGG INCREMENT
*
MOVE *A2(PEGGS),A3,W
**** CMPI 1,A3 ;MAX'D OUT?
**** JRHI EGGDINO_NORM ;BR = YES
**** MOVE *A10(DFURTHEST),A4,L
**** CMP A4,A8 ;IS IT THE SAME AS THIS EGG?
**** JRNE EGGDINO_NORM ;BR = NO
**** MOVE @TUNNEL,A4,W
**** JRZ EGGDINO_NORM ;BR = NO TUNNELING THIS WAVE
**** MOVE @TUNNEL_UP,A4,W ;DOES A TUNNEL ALREADY EXIST?
**** JRNZ EGGDINO_NORM ;BR = YES, THEN NO MORE
**** MOVE @GAME_STATE,A4,W
**** CMPI INAMODE,A4 ;ARE WE IN ATTRACT MODE?
**** JREQ EGGDINO_NORM ;BR = YES, THEN DON'T GIVE ANY SECRETS
**** MOVE *A2(PWAVEDEATHS),A4,W ;HAS THE PLAYER DIED THIS WAVE?
**** JRNZ EGGDINO_NORM ;BR = YES, DISQUALIFY
**** MOVK 1,A4
**** MOVE A4,@TUNNEL_UP,W ;FLAG TUNNEL AS HERE
**** CREATE INDPID,TUNNEL_PIT
**** MOVI 2753H,A1 ;SCORE FOR OPENING TUNNEL
**** CALLA SCORE
****EGGDINO_NORM:
INC A3 ;WE WANT IT HERE FOR HOUSE COMPARE
MOVE A3,*A2(PEGGS),W
MOVE @BONUS_WAVE,A0,W
JRNE NENUFF_EGGS ;NO HOUSES DURING BONUS WAVES
MOVE @EGG_LIST,A0,L ;IS THIS A COMMON LIST OF EGGS?
JRNZ ED_SKIP_SPECIFIX ;BR = YES, NO SPECIFIC CHECKING
MOVE *A2(PEGGACTIVE),A0,W
DEC A0 ;LESS ONE ACTIVE EGG
MOVE A0,*A2(PEGGACTIVE),W
CALLA OUTEGGS
MOVE *A2(PEGGOUT),A0,W
MOVE @WAVEEGGS,A1,W
CMP A1,A0 ;ARE ALL THE EGGS OUT YET?
JRLO NENUFF_EGGS ;BR = NO
ED_SKIP_SPECIFIX
MOVE *A8(OID),A0,W
MOVI EGGS,A1 ;SAFETY CHECK IN CASE OF EGG ERROR
CALLA ISSUPPID ;DOES HE HAVE ANY MORE EGGS?
JRZ EGGDINO_BUILD ;BR = NO, YOU MUST BUILD NOW
*
*THIS IS A SAFETY CHECK IN CASE ANY EGG MARKS WERE DESTROYED BY ROGISH
*CODE.
*A0 = *A8(OID),W
SLL 28,A0
SRL 28,A0 ;GET PLAYER NUMBER OFF OF THE EGG
CALLR CNT_CMOVEEGG_CMOVE ;ANY EGGS OF THIS TYPE ON THE CMOVEMAP
JRNZ NENUFF_EGGS ;BR = YES, THEN THE DINO CAN PICK THEM
CALLR CNT_CMOVEEGG_AMOVE ;ANY EGGS OF THIS TYPE ON THE AMOVEMAP
JRNZ NENUFF_EGGS ;BR = YES, THEN THE DINO CAN PICK THEM
;<--- AUDIT EGG SAFETY HERE
*
*TIME TO BUILD A HOUSE
*
EGGDINO_BUILD:
*FIRST CHECK TO SEE IF HE SAVED THE BEST EGG FOR LAST (THAT MEANS WARPAGE)
MOVE *A10(DFURTHEST),A4,L
CMP A4,A8 ;IS IT THE SAME AS THIS EGG?
JRNE EGGDINO_HOUSE ;BR = NO
MOVE @TUNNEL,A4,W
JRZ EGGDINO_HOUSE ;BR = NO TUNNELING THIS WAVE
MOVE @TUNNEL_UP,A4,W ;DOES A TUNNEL ALREADY EXIST?
JRNZ EGGDINO_HOUSE ;BR = YES, THEN NO MORE
MOVE @GAME_STATE,A4,W
CMPI INAMODE,A4 ;ARE WE IN ATTRACT MODE?
JREQ EGGDINO_HOUSE ;BR = YES, THEN DON'T GIVE ANY SECRETS
MOVE *A2(PWAVEDEATHS),A4,W ;HAS THE PLAYER DIED THIS WAVE?
JRNZ EGGDINO_HOUSE ;BR = YES, DISQUALIFY
MOVK 1,A4
MOVE A4,@TUNNEL_UP,W ;FLAG TUNNEL AS HERE
CREATE INDPID,TUNNEL_PIT
MOVI 2753H,A1 ;SCORE FOR OPENING TUNNEL
CALLA SCORE
*ERECT THIS DUDES HOUSE. TIME TO COMPLETE THE WAVE!
EGGDINO_HOUSE
MOVE *A8(OID),A9,W
MOVE A9,A1
SLL 28,A1
SRL 28,A1
ORI HOUSEPID,A1
MOVI FIRST_HOUSE,A7
CALLA GETPRC
JRZ NENUFF_EGGS ;COULD'NT BUILD THE HOUSE
MOVE *A10(DATABLE),*A0(DATABLE),L ;TRANSFER THE DINOSAURS ANIMATION TAB
MOVE *A10(DPLAYER),*A0(DPLAYER),L ;AND PLAYER CONTROL
NENUFF_EGGS:
SETZ ;END O' SCAN
JRUC EGGDINOX
EGGDINOFL:
CLRZ
EGGDINOX:
MMFM SP,A0,A1,A2,A3,A4,A7,A8,A9,A10,A14
RETS
**************************************************************************
* *
* GEM_SCORE - HANDLE THE SCORING AND DELETING OF A GEM OBJECT *
* A2 = PTR TO PLAYER PICKING UP *
* A8 = PTR TO GEM OBJECT *
* RETURNS: *
* GEM OBJECT DELETED FROM EGGS LISTS *
* *
**************************************************************************
GEM_SCORE
MMTM SP,A0,A1
MOVE *A8(OIMG),A1,L
CMPI GEMDIAMOND,A1
JRNE GS_2
MOVI 2000H,A1
MOVI EGGP5_SND,A0
JRUC GEM_SEND
GS_2
CMPI GEMSPHERE,A1
JRNE GS_DEFAULT
MOVI 1000H,A1
MOVI EGGP3_SND,A0
JRUC GEM_SEND
GS_DEFAULT
MOVI 500H,A1
MOVI EGGP1_SND,A0
GEM_SEND
CALLA SEND2SCR ;SEND THE OBJECT TO THE SCORE AREA
MOVI EGGS,A1
CALLA DELETE_SUPP ;TAKE EGG OFF OF THE LIST
INCM *A2(PEGGS),W
MMFM SP,A0,A1
RETS
EASTEREGG_INIT
.LONG DUMCOLL,[5,5]
.WORD DMAWNZ,EGGOID|PXPLAYER
.LONG EASTEREGG
RUBY_INIT
.LONG DUMCOLL,[5,5]
.WORD DMAWNZ,EGGOID|PXPLAYER
.LONG GEMSQUARE
EMERALD_INIT
.LONG DUMCOLL,[5,5]
.WORD DMAWNZ,EGGOID|PXPLAYER
.LONG GEMSPHERE
DIAMOND_INIT
.LONG DUMCOLL,[5,5]
.WORD DMAWNZ,EGGOID|PXPLAYER
.LONG GEMDIAMOND
**************************************************************************
* *
* EGG_OBJ - PICK UP AN EGG ON A CENTER OR AUXILLARY POINT IF THERE IS *
* ONE. *
* A5 = PTR TO CENTER OR AUXILLARY POINT(SAME THING) *
* A8 = PTR TO DINO OBJECT LOOKING FOR THE EGG *
* RETURNS: *
* Z = NO EGG FOUND *
* NZ = EGG FOUND *
* *
**************************************************************************
EGG_OBJ:
MMTM SP,A1,A6
CLR A1
MOVB *A5(CMOVEEGG),A6 ;IS THERE AN EGG HERE?
INC A6
JRZ EGG_OBJ_X
DEC A6
ANDI 0FFFFFFF0H,A6 ;SOMETHING OTHER THAN AN EGG
JRNE EGG_OBJ_X ;BR = YES
PUSH A0
MOVI EGGS,A1
MOVE *A5(CMOVEPOS),A0,L
CALLA ISSUPPANI
JRZ EGG_OBJ_FL
MOVE A1,A0
CALLR EGGDINO
EGG_OBJ_FL:
PULL A0
EGG_OBJ_X:
MOVE A1,A1
MMFM SP,A1,A6
RETS
**************************************************************************
* *
* CNT_CMOVEEGG_CMOVE - COUNT THE OCCURANCES OF A GIVEN I.D. IN THE *
* CMOVEEGG AREA OF THE CMOVEMAP. *
* A0 = I.D. TO COUNT *
* RETURNS: *
* A4 = COUNT (Z BIT REFLECTS A4) *
* *
**************************************************************************
CNT_CMOVEEGG_CMOVE:
MMTM SP,A1,A5,A6
CLR A4
MOVE @CMOVECNT,A6,W
MOVI CMOVEMAP,A1
CNT_CMOVEEGG_LP:
MOVB *A1(CMOVEEGG),A5
CMP A0,A5
JRNE CNT_CMOVEEGG_NXT
INC A4
CNT_CMOVEEGG_NXT:
ADDI CMOVESIZE,A1
DSJ A6,CNT_CMOVEEGG_LP
MOVE A4,A4
MMFM SP,A1,A5,A6
RETS
*
*SAME AS CNT_CMOVEEGG_CMOVE, EXCEPT CHECK THE AUXILLARY MAP
*
CNT_CMOVEEGG_AMOVE:
MMTM SP,A1,A5,A6
CLR A4
MOVE @AMOVECNT,A6,W
MOVI AMOVEMAP,A1
JRUC CNT_CMOVEEGG_LP
**************************************************************************
* *
* DINO_FIND_CLOSEST - FIND THE CLOSEST EGG TO THE GIVEN DINOSAUR. IF HIS *
* HOUSE IS UP, IT WILL PASS THAT BACK. *
* A8 = PTR TO DINOSAUR *
* A13 = PTR TO DINOSAUR DATA STRUCTURE *
* RETURNS: *
* Z = NOTHING FOUND (A1 = UNDEFINED) *
* NZ = FOUND SOMETHING (A1 = PTR TO OBJECT) *
* *
**************************************************************************
DINO_FIND_CLOSEST:
MMTM SP,A0,A2,A3,A4,A5,A6,A8
MOVI HOUSELST,A1
MOVI HOUSEOID|PXPLAYER,A0
CALLA ISSUPPID ;LOOK FOR GLOBAL HOUSE FIRST
JRNZ DINO_FIND_X
MOVE *A13(DPLAYER),A2,L ;GET CONTROLLING PLAYER
JRZ DINO_FIND_EGG ;BR = NONE
MOVE *A2(PEXITPNT),A1,L ;GET THIS PLAYERS EXIT POINT
JRZ DINO_FIND_EGG ;BR = HE DOESN'T HAVE ONE
MOVE *A1(EMOVEOBJ),A1,L ;IS HIS HOUSE THERE YET?
JRNZ DINO_FIND_X ;BR = YES, RETURN IT
DINO_FIND_EGG:
MOVE *A8(OID),A4,W
SLL 28,A4
SRL 28,A4
ORI EGGOID,A4 ;LET'S FIND A CLOSE EGG
MOVE *A13(TCURMPOS),A5,L ;KEEP HIS CURRENT MOVE POSITION
MOVI 7FFFH,A6 ;BEST VECTOR SO FAR
CLR A1 ;BEST OBJECT
MOVE @EGGS,A8,L
JRZ DINO_FIND_X
DINO_FIND_EGG_LP:
MOVE *A8(OID),A3,W
CMPI EGGOID|PXPLAYER,A3
JREQ DFE_FND1
CMP A3,A4
JRNE DINO_FIND_NXT ;NOT THE SAME TYPE OF EGG
DFE_FND1
CALLA GETANIXY
SRL 16,A3
MOVY A2,A3
SUBXY A5,A3 ;GET VECTOR COMPONENTS
MOVY A3,A2 ;MAKE THEM ABSOLUTE
SRA 16,A2
ABS A2
SEXT A3
ABS A3
ADD A2,A3 ;VECTOR FOR THIS EGG
CMP A6,A3 ;BETTER THAN THE BEST
JRHS DINO_FIND_NXT ;BR = NO
MOVE A3,A6 ;KEEP THIS AS THE BEST
MOVE A8,A1
DINO_FIND_NXT:
MOVE *A8(OSLINK),A8,L
JRNZ DINO_FIND_EGG_LP
MOVE A1,A1
DINO_FIND_X:
MMFM SP,A0,A2,A3,A4,A5,A6,A8
RETS
**************************************************************************
* *
* DINO_FIND_FURTHEST - FIND THE FURTHEST EGG TO THE GIVEN DINOSAUR, *
* THAT IS NOT IN A DIRECT X OR Y LINE. *
* A8 = PTR TO DINOSAUR *
* A13 = PTR TO DINOSAUR DATA STRUCTURE *
* RETURNS: *
* Z = NOTHING FOUND (A1 = 0) *
* NZ = FOUND SOMETHING (A1 = PTR TO OBJECT) *
* *
**************************************************************************
DINO_FIND_FURTHEST:
MMTM SP,A0,A2,A3,A4,A5,A6,A7,A8
CALLA GET_DINO_CPNT
CALLA FIND_CLOSE_MPNT
MOVE A3,A5
MOVE *A8(OID),A4,W
SLL 28,A4
SRL 28,A4
ORI EGGOID,A4 ;LET'S FIND A FAR EGG
CLR A6 ;BIGGEST VECTOR SO FAR
CLR A1 ;BEST OBJECT
MOVE @EGGS,A8,L
JRZ DINO_FINDF_X
DINO_FINDF_EGG_LP:
MOVE *A8(OID),A3,W
CMPI EGGOID|PXPLAYER,A3
JREQ DFFE_FND1
CMP A3,A4
JRNE DINO_FINDF_NXT ;NOT THE SAME TYPE OF EGG
DFFE_FND1
CALLA GETANIXY
SRL 16,A3
MOVY A2,A3
MOVE A3,A7 ;KEEP A GOOD COPY
SUBXY A5,A3 ;GET VECTOR COMPONENTS
MOVY A3,A2 ;MAKE THEM ABSOLUTE
SRA 16,A2
JRNZ DINO_FINDF_XNZ ;BR = ON THE SAME X LINE
CALLR EGG_BETWEEN ;IS THERE ANOTHER EGG TO PICK UP FIRST
JRZ DINO_FINDF_NXT ;BR = NO, CAN'T HAVE THIS
DINO_FINDF_XNZ:
ABS A2
SEXT A3
JRNZ DINO_FINDF_YNZ ;BR = ON THE SAME Y LINE
CALLR EGG_BETWEEN
JRZ DINO_FINDF_NXT
DINO_FINDF_YNZ:
ABS A3
ADD A2,A3 ;VECTOR FOR THIS EGG
CMP A6,A3 ;FARTHER THAN THE FARTHEST
JRLS DINO_FINDF_NXT ;BR = NO
MOVE A3,A6 ;KEEP THIS AS THE FARTHEST
MOVE A8,A1
DINO_FINDF_NXT:
MOVE *A8(OSLINK),A8,L
JRNZ DINO_FINDF_EGG_LP
MOVE A1,A1
DINO_FINDF_X:
MMFM SP,A0,A2,A3,A4,A5,A6,A7,A8
RETS
**************************************************************************
* *
* EGG_BETWEEN - DETERMINE IF THERE IS AN EGG OF A GIVEN I.D. BETWEEN *
* TWO MOVE POINTS. *
* THESE POINTS ARE EXPECTED TO BE ON EITHER THE SAME *
* Y OR X LINE. *
* A4 = EGG OBJECT I.D. *
* A5 = ENDING [Y,X] *
* A7 = STARTING [Y,X] *
* Z = NO EGG BETWEEN *
* NZ = EGG BETWEEN *
* NOTE: TRASHES A14 *
* *
**************************************************************************
EGG_BETWEEN
MMTM SP,A0,A1,A3,A4
MOVE A7,A3
CALLA FINDMOVE
JRNC EGG_B_NO
SLL 28,A4
SRL 28,A4
MOVE A1,A0
CMPXY A5,A7
JRYGT EGG_B_UP
JRYLT EGG_B_DOWN
JRXGT EGG_B_LEFT
MOVI RIGHT,A1
JRUC EGG_B_SEARCH
EGG_B_LEFT
MOVI LEFT,A1
JRUC EGG_B_SEARCH
EGG_B_DOWN
MOVI DOWN,A1
JRUC EGG_B_SEARCH
EGG_B_UP:
MOVI UP,A1
EGG_B_SEARCH
MOVE A1,A3
CALLA ONE_MOVE
JRZ EGG_B_NO
MOVE A1,A0
MOVE A3,A1
MOVE *A0(MOVECPTR),A3,L
JRN EGG_B_AMOVE
EGG_B_CCHK
MOVB *A3(CMOVEEGG),A3
CMPI PXPLAYER,A3
JREQ EGG_B_YES
CMP A3,A4
JREQ EGG_B_YES
JRUC EGG_B_SEARCH
EGG_B_AMOVE
MOVE *A0(MOVEAPTR),A3,L
JRN EGG_B_SEARCH
JRUC EGG_B_CCHK
EGG_B_YES
CLRZ
JRUC EGG_B_X
EGG_B_NO
SETZ
EGG_B_X
MMFM SP,A0,A1,A3,A4
RETS
**************************************************************************
* *
* ISHOME - CHECK TO SEE IF THE DINOSAUR IS IN PROXIMITY OF HIS HOME. *
* A8 = PTR TO DINOSAUR OBJECT *
* *A13(DDIR),W = DINOSAURS CURRENT DIRECTION *
* RETURNS *
* Z = NOT NEAR HIS HOME (A0 = UNDEFINED) *
* NZ = HE IS HOME (A0 = PTR TO THE HOUSE OBJECT) *
* A1 = [Y,X] POSITION OF EXIT POINT *
* A4 = PTR TO EXIT POINT DATA AREA *
* NOTE: TRASHES A14 AND MAYBE A0 *
* *
**************************************************************************
ISHOME
MMTM SP,A3,A9,A11
CALLA GET_DINO_CPNT
CALLA FIND_CLOSE_EPNT
MOVE A0,A4
MOVE *A8(OID),A9,W ;GET THE OBJECT I.D.
SLL 28,A9
SRL 28,A9 ;GET JUST THE DINO/PLAYER NUMBER
MOVE *A13(DDIR),A11,W ;GET THE DINOSAURS DIRECTION
MOVB *A4(EMOVEDIR),A0
CMP A11,A0 ;CHECK DIRECTION
JREQ ISHOME_CKOBJ ;BR = ALRIGHT, HE'S HOME
CALLA NOTDIR
CMP A11,A0 ;CHECK OPPOSITE DIRECTION FOR SAFETY
JRNE ISHOMEFL ;BR = NO, NADA, NOT
ISHOME_CKOBJ
MOVE A3,A1 ;MOVE [Y,X] HERE FOR RETURN
MOVB *A4(EMOVEPLYR),A3
JRN ISHOMEFL ;BR = THERE IS NO HOUSE HERE
CMPI PXPLAYER,A3
JREQ ISHOMEYES
CMP A3,A9
JRNE ISHOMEFL ;BR = THE HOUSE IS NOT HIS
*THERE'S A HOUSE HERE, NOW FIND ITS POINTER
ISHOMEYES
MOVE *A4(EMOVEOBJ),A0,L
JRNZ ISHOMEX ;BR = RUN WITH THE LOOT
ISHOMEFL
SETZ
ISHOMEX
MMFM SP,A3,A9,A11
RETS
**************************************************************************
* *
* GET_EXIT_ANI - GET THE ANIMATION CENTER POINT FOR EXIT STUFF. *
* A4 = PTR TO EXIT POINT DATA *
* RETURNS: *
* Z = SOMETHING IS WRONG *
* A3 = UNDEFINED *
* NZ = GOT THE POINT *
* A3 = [Y,X] ANIMATION CENTER POINT *
* *
**************************************************************************
GET_EXIT_ANI
PUSH A1
MOVE *A4(EMOVEMPTR),A3,L ;GET THE CORRESPONDING MOVE
JRN GET_EXIT_ANI_FL
MOVB *A4(EMOVEDIR),A1 ;GET THE DIRECTION
CMPI UP,A1
JREQ GET_EXIT_ANI_UP
CMPI DOWN,A1
JREQ GET_EXIT_ANI_DOWN
CMPI LEFT,A1
JREQ GET_EXIT_ANI_LEFT
MOVI [0,16],A1
JRUC GET_EXIT_ANI_OPEN
GET_EXIT_ANI_UP
MOVI [-16,0],A1
JRUC GET_EXIT_ANI_OPEN
GET_EXIT_ANI_DOWN
MOVI [16,0],A1
JRUC GET_EXIT_ANI_OPEN
GET_EXIT_ANI_LEFT
MOVI [0,-16],A1
JRUC GET_EXIT_ANI_OPEN
GET_EXIT_ANI_OPEN
MOVE *A3(MOVEPOS),A3,L
ADDXY A1,A3
MOVE A3,A3
GET_EXIT_ANI_X
PULL A1
RETS
GET_EXIT_ANI_FL
CLR A3
JRUC GET_EXIT_ANI_X
**************************************************************************
* *
* FIRST_HOUSE - ROUTINE TO BUILD THE DINOSAURS FIRST HOUSE. *
* A9 = OID OF EGG OR DINOSAUR THAT'S BUILDING *
* A13(DATABLE),L = PTR TO DINOSAURS ANIMATION TABLE *
* A13(DPLAYER),L = PTR TO DINOSAURS PLAYER CONTROL *
* *
**************************************************************************
FIRST_HOUSE:
MOVE *A13(DPLAYER),A2,L
JRZ BOZO_HOUSE ;BR = MUST BE A DRONE
MOVE *A2(PEXITPNT),A10,L
JRNZ HOUSEB ;BR = HOUSE, COOL
**************************************************************************
* *
* BOZO_HOUSE - THIS PROCESS WILL BUILD ANOTHER DINO HOUSE, IN ADDITION *
* TO HIS FIRST_HOUSE. *
* A9 = OID OF EGG OR DINOSUAR THAT CAUSED THIS, WE WANT THE LOW 4 BITS. *
* A13(DATABLE),L = PTR TO DINOSAURS ANIMATION TABLE *
* A13(DPLAYER),L = PTR TO DINOSAURS PLAYER CONTROL *
* *
**************************************************************************
BOZO_HOUSE:
CALLR FIND_OPEN_EXIT
JRZ HOUSEBX ;THERE ARE NO EXIT POINTS
MOVE A0,A10 ;STORE EXIT POINT HERE
*ENTRY: A9 = DINO I.D., A10 = PTR TO EXIT POINT ON WHICH TO BUILD HOUSE.
HOUSEB:
SLL 28,A9 ;MASK ALL BUT THE LOW 4 BITS
SRL 28,A9
MOVB A9,*A10(EMOVEPLYR) ;MARK THIS SPACE AS TAKEN!
MOVE *A13(PROCID),A1,W
MOVI ISLE_EXTEND,A7
CALLA GETPRC ;EXTEND IN MY IMAGE
CMPI PXPLAYER,A9
JRNE HOUSE_MINE
*THIS CODE IS FOR THE GLOBAL PLAYER HOUSE ONLY
MOVI ALLHOUSE_INIT,A5
CALLA CREATE_OBJ
JRNZ GLOBAL_HOUSE
CLR A1 ;NO HOUSE OBJECT RECIEVED
NOT A1
MOVB A1,*A10(EMOVEPLYR) ;UNMARK THIS SPACE
JRUC HOUSEBX ;AND EXIT
GLOBAL_HOUSE
MOVE A0,*A10(EMOVEOBJ),L ;STUFF THE OBJECT PTR
MOVE A0,A8
MOVE *A10(EMOVEMPTR),A0,L
CALLA TOMOVE ;PLACE THE HOUSE ON THE MOVE
**** CALLA BONE_OBLITERATE
MOVE A13,*A8(OPLINK),L ;LINK THE PROC TO THE OBJ
MOVB *A10(EMOVEDIR),A1
SLL 5,A1
ADDI GHOUSE_ANIS,A1
MOVE *A1,A9,L
JRUC HOUSE_ANIMATE
*THIS CODE IS FOR PLAYER SPECIFIC HOUSES
HOUSE_MINE
SLL 5,A9
ADDI HOUSE_TAB,A9
MOVE *A9+,A14,L ;GET THE HOUSE INIT TABLE
HOUSE_STF
CALLA GPALOBJSTF
JRNZ HOUSEOK ;BR = GOT THE HOUSE, NOW BUILD IT
CLR A1 ;NO HOUSE OBJECT RECIEVED
NOT A1
MOVB A1,*A10(EMOVEPLYR) ;UNMARK THIS SPACE
JRUC HOUSEBX ;AND EXIT
HOUSEOK:
MOVE A0,*A10(EMOVEOBJ),L ;STUFF THE OBJECT PTR
MOVE A0,A8
MOVE *A10(EMOVEMPTR),A0,L
CALLA TOMOVE ;PLACE THE HOUSE ON THE MOVE
MOVE A13,*A8(OPLINK),L ;LINK THE PROC TO THE OBJ
MOVE *A13(DPLAYER),A2,L
CALLA GPLAYNUM
SLL 7,A0
MOVB *A10(EMOVEDIR),A1
SLL 5,A1
ADD A1,A0
ADDI HOUSE_ANIS,A0
MOVE *A0,A9,L
HOUSE_ANIMATE
MOVE A9,A11
MOVK 4,A1
JSRP FRANIM ;ANIMATE IN THE FIRST FRAME
MOVE A11,A9
CALLA OBJ_OFF
MOVE A8,A0 ;LET'S INSERT
CALLA SET_TZPOS
MOVI HOUSELST,A1
CALLA INSERT_OBJ_SUPP
SLEEP 38H ;PAUSE
CALLA OBJ_ON ;NOW TURN IT ON
MOVI INDPID,A0
MOVE A0,*A13(PROCID),W ;YOU CAN'T SEE ME ANYMORE
MOVE @HOUSES,A0,W ;IS THIS THE FIRST HOUSE BUILT?
JRNE HOUSE_NOT_1ST ;BR = NO
MOVE @THRASHFLG,A0,W ;IS THE THRASH MUSIC PLAYING?
JRNE HOUSE_NOT_1ST ;BR = YES, THEN DON'T START TUNE
SOUND1 HOUSEB_SND
JRUC HOUSE_GROW
HOUSE_NOT_1ST:
SOUND1 HOUSEB_SND2
HOUSE_GROW:
MOVK 1,A0
MOVE A0,@HOUSES,W ;FLAG FIRST HOUSE
MOVE A0,@MAINTUNE,W ;CHANGE MAIN TUNE
MOVI 100H,A11 ;THIS WILL BE OUR DECREMENTING SLEEPX
HOUSE_FLASH_LP:
MOVE A11,A1
SLL 16,A1 ;SLEEP MULTIPLIER
ORI [0,0202H],A1 ;ANIMATE TWO FRAMES
JSRP FRANIM
JRC HOUSE_FLASH_DONE ;BR = SCRIPT ENDED?
CMPI 40H,A11 ;HAVE WE HIT THE FASTEST?
JRLE HOUSE_FLASH_LP ;BR = YES, JUST STICK HERE
DEC A11
JRUC HOUSE_FLASH_LP
HOUSE_FLASH_DONE:
CLR A0
MOVE A0,*A8(OPLINK),L ;CLEAR THE LINKSTER
HOUSEBX:
DIE
**************************************************************************
* *
* DELETE_HOUSE - DELETE A PLAYERS HOUSE IF IT IS HIS AND HIS ONLY. *
* A2 = PTR TO PLAYER DATA AREA. *
* *
**************************************************************************
DELETE_HOUSE
MMTM SP,A0,A1,A8
MOVE *A2(PEXITPNT),A0,L ;GET PLAYERS EXIT POINT
JRZ DH_X ;BR = NO EXIT POINT ALLOCATED
MOVE *A0(EMOVEOBJ),A8,L ;DOES HE HAVE A HOUSE UPON IT?
JRZ DH_X ;BR = NO
CLR A8
MOVE A8,*A0(EMOVEOBJ),L ;CLEAR THE HOUSE OBJECT POINTER
CALLA GPLAYNUM ;GET THE PLAYER NUMBER
MOVE A0,A8
ORI HOUSEPID,A0
CALLA KILLPROC_ALL ;KILL ANY HOUSE PROCESSES
MOVE A8,A0
ORI HOUSEOID,A0
MOVI HOUSELST,A8
CLR A1
NOT A1
CALLA DELETE_SUPP_ID ;KILL ALL OF THE HOUSE OBJECTS
DH_X
MMFM SP,A0,A1,A8
RETS
**************************************************************************
* *
* ISLE_EXTEND - PROCESS TO ADD THE HOME EXTENSION OF THE ISLAND TO AN *
* EXIT POINT. *
* A10 = EXIT POINT THAT NEEDS THIS EXTENSION *
* *
**************************************************************************
ISLE_EXTEND:
MOVB *A10(EMOVEDIR),A9
MOVE *A10(EMOVEMPTR),A11,L
MOVE *A11(MOVEPOS),A11,L
MOVB *A10(EMOVEPLYR),A10
JSRP RECLAIM_LAND
DIE
**************************************************************************
* *
* RECLAIM_LAND - PROCESS SUBROUTINE TO SLIDE A PIECE OFF OF THE ISLAND *
* AND BUILD A GUYS HOME UPON IT. *
* A9 = DIRECTION OF PIECE TO SLIDE *
* A10 = PLAYER # *
* A11 = [Y,X] ANIMATION POINT TO BASE EXTENSION *
* RETURNS: *
* NOTHING *
* NOTE: TRASHES EVERYTHING EXCEPT A10 AND A11 *
* *
**************************************************************************
RECLAIM_LAND:
MOVE @BGND_TYPE,A6,W ;INIT WITH CORRECT EXTENSION
SLL 6,A6
ADDI EXTENDERS,A6
MOVE *A6+,A14,L ;GET THE INIT TABLE
MOVE *A6+,A1,L ;AND THE EXTEND TABLE
RECLAIM_INIT:
CALLA GPALOBJSTF
JRZ ISLE_EXTEND_X ;BR = DIDN'T GET THE EXTENSION
MOVE A0,A8
MOVE A10,A4
ORI HOUSEOID,A4
MOVE A4,*A8(OID),W
MOVE *A8(OFLAGS),A4,L
MOVE A9,A14
SLL 5,A14 ;USE DIRECTION AS AN INDEX
ADD A14,A1
MOVE *A1+,A1,L ;GET THE ISLE EXTEND IMAGE
CALLA ANI
MOVE A11,A3
CALLA OBJ_TO_PNT ;CONNECT IT TO THE ISLAND
CALLA SET_TZPOS
CMPI UP,A9
JREQ ISLEBONES_UP
CMPI DOWN,A9
JREQ ISLEBONES_DOWN
CMPI LEFT,A9
JREQ ISLEBONES_LEFT
*RIGHT SIDE BONES HERE
MOVK 2,A0
MOVK 12,A1
MOVK 24,A2
JSRP SLIDE_OUT_RIGHT
MOVI ISLE_BORDER_RIGHT,A9
JRUC ISLE_BUILD_BORDER
ISLEBONES_UP:
MOVK 2,A0
MOVK 10,A1
MOVK 24,A2
JSRP SLIDE_OUT_UP
MOVI ISLE_BORDER_UP,A9
JRUC ISLE_BUILD_BORDER
ISLEBONES_DOWN:
MOVK 2,A0
MOVK 13,A1
MOVK 24,A2
JSRP SLIDE_OUT_DOWN
MOVI ISLE_BORDER_DOWN,A9
JRUC ISLE_BUILD_BORDER
ISLEBONES_LEFT:
MOVK 2,A0
MOVK 13,A1
MOVK 24,A2
JSRP SLIDE_OUT_LEFT
MOVI ISLE_BORDER_LEFT,A9
JRUC ISLE_BUILD_BORDER
ISLE_BUILD_BORDER:
MOVE A11,A4
MOVE *A9+,A5,L
MOVE A5,A14
CALLR ISLE_BUILD_SUB
JRZ ISLE_EXTEND_X
MOVE A5,A14
CALLR ISLE_BUILD_SUB
JRZ ISLE_EXTEND_X
MOVE *A9+,A14,L
MOVE A10,A1
SLL 5,A1
ADD A14,A1
MOVE *A1,A14,L
MOVE A14,A5
CALLR ISLE_BUILD_SUB
JRZ ISLE_EXTEND_X
MOVE A5,A14
CALLR ISLE_BUILD_SUB
JRZ ISLE_EXTEND_X
MOVE *A9+,A14,L
MOVE A10,A1
SLL 5,A1
ADD A14,A1
MOVE *A1,A14,L
CALLR ISLE_BUILD_SUB
ISLE_EXTEND_X:
RETP
*
*SUBROUTINE FOR ISLE_EXTEND ONLY
*A4 = [Y,X] START
*A9 = TABLE TO PULL OFFSET
*A14 = OBJECT INIT TABLE
*RETURNS:
* Z = OBJECT FAILURE
* NZ = SUCCESS
ISLE_BUILD_SUB:
CALLA GPALOBJSTF
JRZ ISLE_BSUB_X
MOVE A0,A8
MOVE A10,A3
ORI HOUSEOID,A3
MOVE A3,*A8(OID),W
MOVE *A9+,A3,L
ADDXY A4,A3
CALLA OBJ_TO_PNT
CALLA SET_ZPOS
MOVI HOUSELST,A1
CALLA INSERT_OBJ_SUPP
MOVE A8,A8
ISLE_BSUB_X:
RETS
**************************************************************************
* *
* SLIDE_OUT_LEFT - UNCLIP AN OBJECT WHILE SLIDING IT LEFT *
* A0 = SLEEP TIME BETWEEN CLIPS *
* A1 = AMOUNT TO LEAVE UNCLIPPED INITIALLY, MUST BE LESS THAN ISIZEX. *
* A2 = AMOUNT OF PIXELS TO SLIDE (ADDED TO OXPOS INITIALLY). *
* A8 = UNINSERTED OBJECT PTR TO BE SLID *
* NOTE: CALL WITH JSRP *
* *
**************************************************************************
SLIDE_OUT_LEFT:
MMTM A12,A10,A11
MOVE A0,A10
MOVE A2,A11
MOVE *A8(OXPOS),A0,W ;ADJUST CURRENT XPOS
ADD A11,A0
MOVE A0,*A8(OXPOS),W
MOVE *A8(OIMG),A0,L
MOVE *A0(ISIZEX),A2,W
SUB A1,A2
CLR A3
CALLA CLIPOBJ
MOVE A2,A9
ADDK 3,A9
SRL 2,A9
SLL 2,A9
MOVE *A8(OSIZEX),A0,W
SUB A0,A9 ;CLIP THIS MANY
MOVI HOUSELST,A1
CALLA INSERT_OBJ_SUPP ;STICK THE OBJECT ON THE LIST
SLIDOUTL1:
MOVI [0,-1],A2
CLR A3
CALLA CLIPOBJ ;CLIP NEG ONE OFF THE RIGHT SIDE
MOVE A11,A11
JRZ SLIDOUTL_SKIP_MOVE
MOVE *A8(OXPOS),A0,W ;GET THE CURRENT XPOS
DEC A0 ;AND MOVE BACK
MOVE A0,*A8(OXPOS),W
DEC A11
SLIDOUTL_SKIP_MOVE:
MOVE A10,A0
CALLA PRCSLP
DSJS A9,SLIDOUTL1
MMFM A12,A10,A11
RETP
**************************************************************************
* *
* SLIDE_OUT_RIGHT - UNCLIP AN OBJECT WHILE SLIDING IT RIGHT *
* A0 = SLEEP TIME BETWEEN CLIPS *
* A1 = AMOUNT TO LEAVE UNCLIPPED INITIALLY, MUST BE LESS THAN ISIZEX. *
* A2 = AMOUNT OF PIXELS TO SLIDE (SUBTRACTED OXPOS INITIALLY). *
* A8 = UNINSERTED OBJECT PTR TO BE SLID *
* NOTE: CALL WITH JSRP *
* *
**************************************************************************
SLIDE_OUT_RIGHT:
MMTM A12,A10,A11
MOVE A0,A10
MOVE A2,A11
MOVE *A8(OXPOS),A0,W ;ADJUST CURRENT XPOS
SUB A11,A0
MOVE A0,*A8(OXPOS),W
MOVE *A8(OIMG),A0,L
MOVE *A0(ISIZEX),A3,W
SUB A1,A3
CLR A2
CALLA CLIPOBJ
MOVE A3,A9
ADDK 3,A9
SRL 2,A9
SLL 2,A9
MOVE *A8(OSIZEX),A0,W
SUB A0,A9 ;CLIP THIS MANY
MOVI HOUSELST,A1
CALLA INSERT_OBJ_SUPP ;STICK THE OBJECT ON THE LIST
SLIDOUTR1:
MOVI [0,-1],A3
CLR A2
CALLA CLIPOBJ ;CLIP NEG ONE OFF THE LEFT
MOVE A11,A11
JRZ SLIDOUTR_SKIP_MOVE
MOVE *A8(OXPOS),A0,W ;GET THE CURRENT XPOS
INC A0 ;AND MOVE AHEAD
MOVE A0,*A8(OXPOS),W
DEC A11
SLIDOUTR_SKIP_MOVE:
MOVE A10,A0
CALLA PRCSLP
DSJS A9,SLIDOUTR1
MMFM A12,A10,A11
RETP
**************************************************************************
* *
* SLIDE_OUT_UP - UNCLIP AN OBJECT WHILE SLIDING IT UP *
* A0 = SLEEP TIME BETWEEN CLIPS *
* A1 = AMOUNT TO LEAVE UNCLIPPED INITIALLY, MUST BE LESS THAN ISIZEY. *
* A2 = AMOUNT OF PIXELS TO SLIDE (ADDED TO OYPOS INITIALLY). *
* A8 = UNINSERTED OBJECT PTR TO BE SLID *
* NOTE: CALL WITH JSRP *
* *
**************************************************************************
SLIDE_OUT_UP:
MMTM A12,A10,A11
MOVE A0,A10
MOVE A2,A11
MOVE *A8(OYPOS),A0,W ;ADJUST CURRENT YPOS
ADD A11,A0
MOVE A0,*A8(OYPOS),W
MOVE *A8(OIMG),A0,L
MOVE *A0(ISIZEY),A2,W
SUB A1,A2
MOVE A2,A9
SLL 16,A2
CLR A3
CALLA CLIPOBJ
MOVI HOUSELST,A1
CALLA INSERT_OBJ_SUPP ;STICK THE OBJECT ON THE LIST
SLIDOUTU1:
MOVI [-1,0],A2
CLR A3
CALLA CLIPOBJ ;CLIP NEG ONE OFF THE BOTTOM
MOVE A11,A11
JRZ SLIDOUTU_SKIP_MOVE
MOVE *A8(OYPOS),A0,W ;GET THE CURRENT YPOS
DEC A0 ;AND MOVE UP
MOVE A0,*A8(OYPOS),W
DEC A11
SLIDOUTU_SKIP_MOVE:
MOVE A10,A0
CALLA PRCSLP
DSJS A9,SLIDOUTU1
MMFM A12,A10,A11
RETP
**************************************************************************
* *
* SLIDE_OUT_DOWN - UNCLIP AN OBJECT WHILE SLIDING IT DOWN *
* A0 = SLEEP TIME BETWEEN CLIPS *
* A1 = AMOUNT TO LEAVE UNCLIPPED INITIALLY, MUST BE LESS THAN ISIZEY. *
* A2 = AMOUNT OF PIXELS TO SLIDE (SUBTRACTED FROM OYPOS INITIALLY). *
* A8 = UNINSERTED OBJECT PTR TO BE SLID *
* NOTE: CALL WITH JSRP *
* *
**************************************************************************
SLIDE_OUT_DOWN:
MMTM A12,A10,A11
MOVE A0,A10
MOVE A2,A11
MOVE *A8(OYPOS),A0,W ;ADJUST CURRENT YPOS
SUB A11,A0
MOVE A0,*A8(OYPOS),W
MOVE *A8(OIMG),A0,L
MOVE *A0(ISIZEY),A3,W
SUB A1,A3
MOVE A3,A9
SLL 16,A3
CLR A2
CALLA CLIPOBJ
MOVI HOUSELST,A1
CALLA INSERT_OBJ_SUPP ;STICK THE OBJECT ON THE LIST
SLIDOUTD1:
MOVI [-1,0],A3
CLR A2
CALLA CLIPOBJ ;CLIP NEG ONE OFF THE TOP
MOVE A11,A11
JRZ SLIDOUTD_SKIP_MOVE
MOVE *A8(OYPOS),A0,W ;GET THE CURRENT YPOS
INC A0 ;AND MOVE DOWN
MOVE A0,*A8(OYPOS),W
DEC A11
SLIDOUTD_SKIP_MOVE:
MOVE A10,A0
CALLA PRCSLP
DSJS A9,SLIDOUTD1
MMFM A12,A10,A11
RETP
**************************************************************************
* *
* HOUSE_SEL - SELECT THE INITIAL HOME LOCATIONS FOR THE FOR DINOSAURS. *
* SELECTIONS ARE PLACED IN RAM AREA HOMES. *
* *
**************************************************************************
HOUSE_SEL:
ALLPLYR PLAYER_HOUSE
RETS
**************************************************************************
* *
* PLAYER_HOUSE - FIND A LOCATION FOR A PLAYERS HOUSE. *
* A2 = PTR TO PLAYER DATA AREA *
* *
**************************************************************************
PLAYER_HOUSE:
MMTM SP,A0,A1,A3
MOVE @TUTOR,A0,W
JRZ PH_RAND
CALLA GPLAYNUM ;FIXED PICK IN TUTOR MODE
SLL 5,A0
ADDI PH_TABLE,A0
MOVE *A0,A1,L
CALLA FIND_CLOSE_EPNT
MOVE A0,A0 ;SET STATUS
JRUC PH_STUFF
PH_RAND
CALLR FIND_OPEN_EXIT ;RANDOM PICK NORMALLY
PH_STUFF
MOVE A0,*A2(PEXITPNT),L
JRZ PLAYER_HOUSEX
MOVE A0,A1
CALLA GPLAYNUM
MOVB A0,*A1(EMOVEPLYR) ;MARK THIS SPACE AS TAKEN!
PLAYER_HOUSEX:
MMFM SP,A0,A1,A3
RETS
*
*TABLE OF MOVE POINTS THAT ARE CLOSE TO THE PLAYERS EXIT FOR THIS
*WAVE.
*
PH_TABLE
.LONG [232,66],[232,130],[232,258],[232,322]
**************************************************************************
* *
* FIND_OPEN_EXIT - RETURN AN OPEN EXIT POINT. *
* RETURNS: *
* Z = NO OPEN EXIT POINTS *
* NZ = A0 = EXIT POINT FOUND. *
* *
**************************************************************************
FIND_OPEN_EXIT:
MMTM SP,A1,A5,A6
MOVE @EMOVECNT,A0,W ;GET THE NUMBER OF EXIT POINTS
JRZ FOE_X ;THERE ARE NO EXIT POINTS
MOVE A0,A5
MOVK 10,A6 ;THIS MANY TRIES UNTIL FAILURE
FOE_RANDOM:
MOVE A5,A0
CALLA RANDU
DEC A0
CALLA GETEMOVE
MOVB *A0(EMOVEPLYR),A1
JRNN FOE_OCC ;BR = OCCUPIED BY A HOUSE CURRENTLY
MOVE A0,A1
MOVE *A0(EMOVERET),A0,W ;GET THE RETURN MOVE POINT
JRN FOE_NORET ;BR = THERE ISN'T ONE
CALLA GETMOVE ;GET THE MOVE POINT
CALLR HOUSE_BLOCK_CHECK ;IS THE MOVE BLOCKED?
JRZ FOE_OCC ;BR = YES, NO HOUSE ALLOWED
FOE_NORET
MOVE A1,A0
MOVE *A0(EMOVETYPE),A1,W ;GET THE TYPE OF EXIT AREA
CMPI TYPE_CLIFF,A1 ;IS THIS A CLIFF
JREQ FOE_HERE ;BR = YES, ONLY PLACE TO BUILD A HOUSE
FOE_OCC:
DSJ A6,FOE_RANDOM
*RANDOM FAILURE MODE, JUST LOOK FOR THE FIRST AVAILABLE CENTER
MOVI EMOVEMAP,A0
FOE_STRAIGHT:
MOVB *A0(EMOVEPLYR),A1
JRNN FOE_COCC
MOVE A0,A1
MOVE *A0(EMOVERET),A0,W ;GET THE RETURN MOVE POINT
JRN FOE_CNORET ;BR = THERE ISN'T ONE
CALLA GETMOVE ;GET THE MOVE POINT
CALLR HOUSE_BLOCK_CHECK ;IS THE MOVE BLOCKED?
JRNZ FOE_CNORET ;BR = NO, BUILD HOUSE HERE
MOVE A1,A0
JRUC FOE_COCC ;RESTORE AND NEXT PLEASE
FOE_CNORET
MOVE A1,A0
MOVE *A0(EMOVETYPE),A1,W ;GET THE TYPE OF EXIT AREA
CMPI TYPE_CLIFF,A1 ;IS THIS A CLIFF
JREQ FOE_HERE ;BR = YES, ONLY PLACE TO BUILD A HOUSE
FOE_COCC:
ADDI EMOVESIZE,A0
DSJ A5,FOE_STRAIGHT
CLR A0
FOE_HERE:
MOVE A0,A0 ;SET OR CLR Z
FOE_X:
MMFM SP,A1,A5,A6
RETS
**************************************************************************
* *
* HOUSE_BLOCK_CHECK - ROUTINE TO SEE IF THE GIVEN MOVE IS BLOCKED. *
* I.E. THERE EXISTS A ROCK, TREE, TRANSPORTER, ETC. *
* SPECIAL VERSION FOR THE DINO HOME *
* A0 = PTR TO MOVE *
* Z = MOVE IS BLOCKED *
* NZ = NUTTIN' SITTIN' HERE *
* *
**************************************************************************
HOUSE_BLOCK_CHECK
MMTM SP,A0,A1
MOVE *A0(MOVECPTR),A0,L ;MUST BE A CENTER POINT
JRN HCB_OK ;BR = NOPE
MOVB *A0(CMOVEEGG),A1 ;IS THERE SOMETHING HERE?
INC A1
JRZ HCB_OK ;BR = NOTHING EXISTS
DEC A1
CMPI HAUSID,A1
JREQ HCB_X
CMPI ROCKID,A1
JREQ HCB_X
CMPI CATID,A1
JREQ HCB_X
CMPI TGENID,A1
JREQ HCB_X
HCB_OK
CLR A0
INC A0 ;CLEAR Z BIT TO MARK SPOT O.K.
HCB_X
MMFM SP,A0,A1
RETS
.DATA
**************************************************************************
* *
* EGG DATA *
* *
**************************************************************************
*THIS MUST BE HIGHER THAN THE FREE MAN SOUND
HOUSEB_SND:
.WORD >F3E1,>78,>8004,0 ;FIRST HOUSE BUILD SOUND
HOUSEB_SND2:
.WORD >F3DF,>78,>8096,0 ;SUBSEQUENT HOUSE BUILD SOUND
EGGSNDTAB
.LONG EGGP1_SND,EGGP2_SND,EGGP3_SND,EGGP4_SND,EGGP5_SND
NUMEGGSNDS .EQU 5
EGGP1_SND .WORD >F310,>3C,>8087,0 ;1st EGG PICK-UP SOUND
EGGP2_SND .WORD >F310,>3C,>808F,0 ;2nd EGG PICK-UP SOUND
EGGP3_SND .WORD >F310,>3C,>8090,0 ;3rd EGG PICK-UP SOUND
EGGP4_SND .WORD >F310,>3C,>8091,0 ;4th EGG PICK-UP SOUND
EGGP5_SND .WORD >F310,>3C,>8092,0 ;5th AND AFTER EGG PICK-UP SOUND
*
*EGG SCORE TABLE, THE VALUES INCREASE AS HE PICKS UP MORE
NUMEGGSCRS .EQU 16
EGGSCRTAB:
.LONG 500H
.LONG 1000H
.LONG 2000H
.LONG 3000H
.LONG 4000H
.LONG 5000H
.LONG 6000H
.LONG 7000H
.LONG 8000H
.LONG 9000H
.LONG 10000H
.LONG 10000H
.LONG 10000H
.LONG 10000H
.LONG 10000H
.LONG 10000H
**************************************************************************
* *
* EGGCOLL - EGG COLLISION TABLE *
* *
**************************************************************************
EGGCOLL:
.WORD DINOOID,0FFF0H ;COLLIDE WITH ALL DINOS
.LONG EGGDINO
.WORD 0
.LONG DUMCRETS ;DO NOTHING
**************************************************************************
* *
* DINOSAUR HOUSE ISLAND STUFF *
* *
**************************************************************************
*
*TABLE OF EXTENSIONS INDEXED BY BGND_TYPE
EXTENDERS:
.LONG ISLEU_INIT ;EXTEND INIT TABLE
.LONG GREENEXTEND_TAB ;EXTENSION DIRECTION TABLE
.LONG VISLEU_INIT ;VOLCANO ISLAND
.LONG LAVAEXTEND_TAB
.LONG EISLEU_INIT ;TROG ENTER ISLAND
.LONG GREENEXTEND_TAB
.LONG CISLEU_INIT ;TROG CLUB ISLAND
.LONG GREENEXTEND_TAB
.LONG WISLEU_INIT ;TROG WHEEL ISLAND
.LONG WHEELEXTEND_TAB
.LONG SISLEU_INIT ;TROG SPRING ISLAND
.LONG SPRINGEXTEND_TAB
.LONG ISLEU_INIT ;CRAYOLA ISLAND
.LONG GREENEXTEND_TAB
.LONG DISLEU_INIT ;DESERT ISLAND
.LONG DESERTEXTEND_TAB
GREENEXTEND_TAB:
.LONG HOMBASU1,HOMBASL1,HOMBASC1,HOMBASC2
LAVAEXTEND_TAB:
.LONG VHOMBASU1,VHOMBASL1,VHOMBASC1,VHOMBASC2
WHEELEXTEND_TAB:
.LONG WELANHOMU1,WELANHOML1,WELANHOMC1,WELANHOMC2
SPRINGEXTEND_TAB:
.LONG SPRLNDHOMU1,SPRLNDHOML1,SPRLNDHOMC1,SPRLNDHOMC2
DESERTEXTEND_TAB:
.LONG DESHOMU1,DESHOML1,DESHOMC1,DESHOMC2
ISLEU_INIT:
.LONG 0,0
.WORD 0,0
.LONG HOMBASU1,0,DUMCOLL
.WORD DMAWNZ,JUNKOID
VISLEU_INIT:
.LONG 0,0
.WORD 0,0
.LONG VHOMBASU1,0,DUMCOLL
.WORD DMAWNZ,JUNKOID
EISLEU_INIT:
.LONG 0,0
.WORD 0,0
.LONG EHOMBASU1,0,DUMCOLL
.WORD DMAWNZ,JUNKOID
CISLEU_INIT:
.LONG 0,0
.WORD 0,0
.LONG CHOMBASU1,0,DUMCOLL
.WORD DMAWNZ,JUNKOID
WISLEU_INIT:
.LONG 0,0
.WORD 0,0
.LONG WELANHOMU1,0,DUMCOLL
.WORD DMAWNZ,JUNKOID
SISLEU_INIT:
.LONG 0,0
.WORD 0,0
.LONG SPRLNDHOMU1,0,DUMCOLL
.WORD DMAWNZ,JUNKOID
DISLEU_INIT:
.LONG 0,0
.WORD 0,0
.LONG DESHOMU1,0,DUMCOLL
.WORD DMAWNZ,JUNKOID
*
*ISLE BORDER TABLES
*
ISLE_BORDER_UP:
.LONG POST_INIT,[-32,16],[-32,-16]
.LONG ISLEVBON_TAB,[-16,16],[-16,-16]
.LONG ISLEHBON_TAB,[-32,0]
ISLE_BORDER_DOWN:
.LONG POST_INIT,[32,16],[32,-16]
.LONG ISLEVBON_TAB,[16,16],[16,-16]
.LONG ISLEHBON_TAB,[32,0]
ISLE_BORDER_LEFT:
.LONG POST_INIT,[16,-32],[-16,-32]
.LONG ISLEHBON_TAB,[-16,-16],[16,-16]
.LONG ISLEVBON_TAB,[0,-32]
ISLE_BORDER_RIGHT:
.LONG POST_INIT,[16,32],[-16,32]
.LONG ISLEHBON_TAB,[-16,16],[16,16]
.LONG ISLEVBON_TAB,[0,32]
ISLEHBON_TAB:
.LONG P1HINIT,P2HINIT,P3HINIT,P4HINIT,PXHINIT
ISLEVBON_TAB:
.LONG P1VINIT,P2VINIT,P3VINIT,P4VINIT,PXVINIT
POST_INIT:
.LONG 0,0
.WORD 0,0
.LONG HOUSEPOST,0,DUMCOLL
.WORD DMAWNZ,JUNKOID
P1HINIT
.LONG 0,0
.WORD 0,0
.LONG P1HBON,[5,5],DUMCOLL
.WORD DMAWNZ,JUNKOID
P2HINIT
.LONG 0,0
.WORD 0,0
.LONG P2HBON,[5,5],DUMCOLL
.WORD DMAWNZ,JUNKOID
P3HINIT
.LONG 0,0
.WORD 0,0
.LONG P3HBON,[5,5],DUMCOLL
.WORD DMAWNZ,JUNKOID
P4HINIT
.LONG 0,0
.WORD 0,0
.LONG P4HBON,[5,5],DUMCOLL
.WORD DMAWNZ,JUNKOID
PXHINIT
.LONG 0,0
.WORD 0,0
.LONG HBONREDH,[5,5],DUMCOLL
.WORD DMAWNZ,JUNKOID
P1VINIT
.LONG 0,0
.WORD 0,0
.LONG P1VBON,[5,5],DUMCOLL
.WORD DMAWNZ,JUNKOID
P2VINIT
.LONG 0,0
.WORD 0,0
.LONG P2VBON,[5,5],DUMCOLL
.WORD DMAWNZ,JUNKOID
P3VINIT
.LONG 0,0
.WORD 0,0
.LONG P3VBON,[5,5],DUMCOLL
.WORD DMAWNZ,JUNKOID
P4VINIT
.LONG 0,0
.WORD 0,0
.LONG P4VBON,[5,5],DUMCOLL
.WORD DMAWNZ,JUNKOID
PXVINIT
.LONG 0,0
.WORD 0,0
.LONG HBONBLUEV,[5,5],DUMCOLL
.WORD DMAWNZ,JUNKOID
*GLOBAL HOUSE STUFF
ALLHOUSE_INIT:
.LONG DUMCOLL,[20,0]
.WORD DMAWNZ,HOUSEOID|PXPLAYER
.LONG REXHL1
GHOUSE_ANIS:
.LONG GHOUSE_U,GHOUSE_D,GHOUSE_L,GHOUSE_R
GHOUSE_U:
.LONG HOMEU1
.WORD 30|NEWPALET
.LONG RED16
.LONG HOMEU1
.WORD 30|NEWPALET
.LONG BLUE16
.LONG HOMEU1
.WORD 30|NEWPALET
.LONG YELLOW16
.LONG HOMEU1
.WORD 30|NEWPALET|SCRIPT
.LONG PINK16
.LONG GHOUSE_U
GHOUSE_D:
.LONG HOMEL1
.WORD 30|NEWPALET
.LONG RED16
.LONG HOMEL1
.WORD 30|NEWPALET
.LONG BLUE16
.LONG HOMEL1
.WORD 30|NEWPALET
.LONG YELLOW16
.LONG HOMEL1
.WORD 30|NEWPALET|SCRIPT
.LONG PINK16
.LONG GHOUSE_D
GHOUSE_L:
.LONG HOMEC1
.WORD 30|NEWPALET
.LONG RED16
.LONG HOMEC1
.WORD 30|NEWPALET
.LONG BLUE16
.LONG HOMEC1
.WORD 30|NEWPALET
.LONG YELLOW16
.LONG HOMEC1
.WORD 30|NEWPALET|SCRIPT
.LONG PINK16
.LONG GHOUSE_L
GHOUSE_R:
.LONG HOMEC2
.WORD 30|NEWPALET
.LONG RED16
.LONG HOMEC2
.WORD 30|NEWPALET
.LONG BLUE16
.LONG HOMEC2
.WORD 30|NEWPALET
.LONG YELLOW16
.LONG HOMEC2
.WORD 30|NEWPALET|SCRIPT
.LONG PINK16
.LONG GHOUSE_R
.END