2601 lines
64 KiB
NASM
2601 lines
64 KiB
NASM
.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
|
||
|