2403 lines
60 KiB
NASM
2403 lines
60 KiB
NASM
.MLIB "TROGMACS.LIB"
|
||
|
||
.FILE 'TROGSCOR.ASM'
|
||
.TITLE " <<< T R O G -- SCORING 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 "TROGEQU.ASM"
|
||
.INCLUDE "IMGTBL.GLO"
|
||
.INCLUDE "TROGSCOR.TBL"
|
||
.INCLUDE "STRING.H"
|
||
.INCLUDE "TROGSEQU.ASM"
|
||
.INCLUDE "TROGAUDN.ASM"
|
||
|
||
.DEF UPDSL, OUTLIVES, OUTSCR, SUBLIFE, SEND2SCR, SENDOBJ
|
||
.DEF P1BOXBONEh, P1BOXBONEv, OUTEGGS
|
||
|
||
.DEF SCOREHILITE, P0_P1_SCORE, SCOREOBJ
|
||
.DEF SCORPROC, GAME_OVER_FLY
|
||
.DEF HIGHSCORECHECK, SCORE_IF_ACTIVE
|
||
.DEF G_CRED, BCDADD
|
||
.DEF ISLAND_NUM, SCIDONE
|
||
.DEF LOOKSTICK, LOOKFIRE
|
||
.DEF MARQUEE
|
||
.DEF SCORE2XOBJ
|
||
.DEF AWARD_EXTRAS
|
||
|
||
.REF CR_STRTP, CR_CONTP, CR_BOTH
|
||
.REF P_FORK, GET_CSTR
|
||
.REF PCYCLEHI,PCYCLELO
|
||
.REF CKHSTD,TRYADD, CHECK_INITS, GPLAYNUM, FAST_TIME
|
||
.REF STORY_MODE, ADD_HSHOLD, ALLOW_CONTINUE
|
||
.REF gwenegg, spikeegg, bloopegg, rexegg
|
||
.REF EGG_LIST, BONUS_WAVE, WAVEEGGS, EGG_SCHEME
|
||
|
||
.BSS PALINTENS,32 ; FOR PALETTE DECAY
|
||
.BSS WORKNUM,16
|
||
.BSS FUNKYCOLOR,32
|
||
.BSS CANSTRT,16
|
||
.BSS HISEEN,16 ; HOW MANY "HI"S IN A ROW
|
||
|
||
.EVEN
|
||
.TEXT
|
||
|
||
|
||
.IF 0
|
||
**************************************************************************
|
||
* *
|
||
* BIG_HSCHECK - CHECK IF A PLAYER MADE IT IN THE HIGH SCORE TAB. *
|
||
* AND GIVE HIM BIG INITIALS IF HE DID *
|
||
* A2 = PLAYER DATA *
|
||
* RETURNS: *
|
||
* Z = NO HIGH SCORE *
|
||
* NZ = HIGH SCORE CREATED *
|
||
* NOTE: TRASHES A14 *
|
||
* *
|
||
**************************************************************************
|
||
BIG_HSCHECK:
|
||
MMTM SP,A0,A1,A7,A8,A11
|
||
|
||
ADJUST ADJHSON
|
||
JRZ BHSRET
|
||
|
||
MOVE *A2(PSCORE),A0,L ; GET THE SCORE
|
||
CALLA CKHSTD
|
||
JRZ BHSRET ; BR = DIDN'T MAKE IT
|
||
|
||
MOVE *A2(PPID),A1,W
|
||
ORI PINITIALPID,A1
|
||
MOVI BIGSCORINIT,A7 ; PROCESS TO LAUNCH
|
||
MOVE A2,A11 ; PASS THE PLAYER DATA AREA
|
||
CALLA GETPRC ; FIRE AWAY
|
||
|
||
BHSRET
|
||
MMFM SP,A0,A1,A7,A8,A11
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* BIGSCORINIT *
|
||
* *
|
||
* BIGGIE SCORE INITIAL ENTRY THINGIE *
|
||
* *
|
||
* ENTRY *
|
||
* A11 PLAYER DATA AREA *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
BIGSCORINIT:
|
||
MOVI BIGINSMESS,A8
|
||
PUSH A11
|
||
CALLA LM_SETUP
|
||
JSRP PRINTF ; KICK IT OUT
|
||
PULL A11
|
||
MOVI TEXTOID,A0
|
||
MOVI JUNKOID,A1
|
||
CALLA CHANGOID ; CLEAN OUT ALL THE TEXT THINGS
|
||
MOVK 1,A0
|
||
MOVE A0,*A13(BIGSCORE),W ; FLAG IT AS "THE BIG TIME"
|
||
MOVE A11,A8
|
||
JRUC SCORRUN ; HANDLE EVERYTHING
|
||
|
||
BIGINSMESS:
|
||
MESS_MAC RD7FONT,1,197,(180+SKYTOPOF),TROG_PWHITE,STRCNRMO,0
|
||
.STRING "Use Up/Down Stick to change letters."
|
||
.STRING "\nEnter with BONE button.",0
|
||
.EVEN
|
||
|
||
.ENDIF
|
||
|
||
**************************************************************************
|
||
* *
|
||
* HIGHSCORECHECK *
|
||
* *
|
||
* A ROUTINE THAT IS CALLED WHEN THE PLAYER DIES *
|
||
* *
|
||
* ENTRY *
|
||
* A2 PLAYER DATA AREA *
|
||
* *
|
||
* EXIT *
|
||
* BLAH *
|
||
* *
|
||
* NOTE: TRASHES A14 *
|
||
* *
|
||
**************************************************************************
|
||
HIGHSCORECHECK:
|
||
MMTM SP,A0,A1,A7,A8
|
||
|
||
ADJUST ADJHSON
|
||
JREQ HSRET
|
||
|
||
MOVE *A2(PSCORE),A0,L ; GET THE SCORE
|
||
CALLA CKHSTD
|
||
JRZ HSRET ; BR = DIDN'T MAKE IT
|
||
MOVE *A2(PPID),A1,W
|
||
ORI PINITIALPID,A1
|
||
MOVI SCORINIT,A7 ; PROCESS TO LAUNCH
|
||
MOVE A2,A8 ; PASS THE PLAYER DATA AREA
|
||
CALLA GETPRC ; FIRE AWAY
|
||
JRZ HSRET
|
||
CLRM *A0(PCOMM),W
|
||
HSRET
|
||
MMFM SP,A0,A1,A7,A8
|
||
RETS
|
||
|
||
SCORINIT:
|
||
CLR A0
|
||
MOVE A0,*A13(BIGSCORE),W
|
||
JRUC SCORRUN
|
||
|
||
**************************************************************************
|
||
* *
|
||
* SCORRUN *
|
||
* *
|
||
* PROCESS TO SNAG THE PLAYER'S INITIALS *
|
||
* *
|
||
* ENTRY *
|
||
* A8 PLAYER DATA AREA *
|
||
* *A13(PCOMM),W = 0 *
|
||
* *
|
||
* EXIT *
|
||
* WOOF WOOF WHO CARES *
|
||
* *
|
||
* NOTE : *
|
||
* *
|
||
* PDATA CONTAINS SOME NEAT THINGS LIKE THE INITIALS. *
|
||
* *
|
||
* PCOMM IS USED AS A FLAG TO EXIT EARLY, IF THIS IS *
|
||
* <> 1 UPON WAKE UP THE PLAYER GETS WHAT HE HAS ENTERED. *
|
||
* *
|
||
* PCOMM MUST BE CLEARED BY THE GUY WHO STARTS THIS PROCESS *
|
||
* *
|
||
**************************************************************************
|
||
|
||
INITIAL1 EQU PDATA
|
||
INITIAL2 EQU PDATA+8
|
||
INITIAL3 EQU PDATA+16
|
||
PLANTLET EQU PDATA+32 ; FOR PLANTING STUFF
|
||
BDEBOUNCE EQU PLANTLET+32 ; DRAW BUTTON DEBOUNCE
|
||
JDIR EQU BDEBOUNCE+16 ; LAST JOYSTICK DIRECTION
|
||
JTIMER EQU JDIR+16 ; JOYSTICK TIMER COUNTER
|
||
LASTSEC EQU JTIMER+32 ; LAST TIME LOOKED AT
|
||
DIRTY EQU LASTSEC+16 ; SET IF HE ENTERED SOMETHING
|
||
BIGSCORE EQU DIRTY+16 ; 1 IF THE BIG SCORE ROUTINE
|
||
ADDTIMES EQU BIGSCORE+16 ; TIMES LEFT FOR ADDING TO TIME
|
||
|
||
ENTER_TIME EQU 15
|
||
MAX_TIMES EQU 4 ; SOME TOTALLY BOGUS NUMBER HERE
|
||
|
||
SCORRUN:
|
||
MOVE *A13(PROCID),A0,W
|
||
MOVI MAX_TIMES,A1
|
||
MOVE A1,*A13(ADDTIMES),W ; ONLY RESET TIME 3 TIMES
|
||
CLR A1
|
||
MOVE A1,*A13(LASTSEC),W ; CLEAR LAST TIME SEEN
|
||
MOVE A1,*A13(DIRTY),W ; HASN'T CHANGED ANTYHING
|
||
NOT A1
|
||
CALLA KILALL ;KILL ANY OTHER INITIAL PROCS FOR THIS PLAYER
|
||
MOVK 1,A0
|
||
MOVE A0,*A8(PDEAD),W ; TURN OFF SCORPROC
|
||
MOVE A8,A2
|
||
MOVE *A8(PSCRAD),A3,L
|
||
CALLR PSENCL
|
||
CLR A4 ; PALETTE 0
|
||
|
||
MOVE A2,A8
|
||
MOVI 20202020H,A0 ; " "
|
||
MOVE A0,*A13(INITIAL1),L ; SPACIZE THE INITIALS
|
||
MOVI 41H,A1
|
||
MOVB A1,*A13(INITIAL1) ; "A "
|
||
MOVK 1,A3 ; HIGHLIGHT THE FIRST CHAR
|
||
CALLR PLOTINITIALS
|
||
MOVK 1,A9 ; WORKING ON THE FIRST INITIAL
|
||
CLR A0
|
||
MOVE A0,*A13(JDIR),W ; NO PREVIOUS DIRECTION
|
||
MOVE A0,*A13(JTIMER),L ; NO TIMER
|
||
MOVK ENTER_TIME,A0
|
||
MOVE A0,*A8(PITIME),W ; SCORE ENTRY TIME
|
||
;
|
||
; A8 IS THE PLAYER DATA AREA
|
||
; A9 IS NUMBER OF UNDERLINE BEING USED
|
||
;
|
||
MOVE A8,A2
|
||
CALLR ERASEINITIALS ; GET EVERYTHING ERASED
|
||
SCILOOP:
|
||
SLEEP 3
|
||
*
|
||
*LEAVE IT THIS WAY, IN CASE WE FEEL GENEROUS SOMEDAY AND GIVE THE GUY
|
||
*HIS INITIALS IF HE HITS THE START BUTTON.(G N P)
|
||
*
|
||
MOVE *A13(PCOMM),A0,W ;DID THE PLAYER START?
|
||
JRNZ SCI_DIE ;BR = YES, DON'T ENTER ANYTHING
|
||
|
||
MOVE A8,A2 ; UPDATE THE PLAYER INFO
|
||
|
||
MOVE *A8(PITIME),A0,W ; CHECK TO SEE IF TIMED OUT
|
||
JRZ SCIDONE ; BR = YES, TRY AND ENTER IT
|
||
MOVE *A13(LASTSEC),A1,W ; COMPARE AGAINST LAST TIME
|
||
CMP A0,A1
|
||
JRZ SCI2
|
||
MOVE A0,*A13(LASTSEC),W ; UPDATE THE TIME LAST SEEN
|
||
CALLR ERASETIME
|
||
CALLR PLOTTIME
|
||
SCI2
|
||
CALLR LOOKSTICK
|
||
|
||
MOVE *A13(JDIR),A1,W ; GET LAST DIRECTION
|
||
CMP A0,A1 ;
|
||
JRZ SCIJD1
|
||
MOVE A0,*A13(JDIR),W ; SET NEW DIRECTION
|
||
CLR A1
|
||
MOVE A1,*A13(JTIMER),L ; CLEAR THE TIMER
|
||
JRUC SCIJUDGE
|
||
SCIJD1
|
||
MOVE *A13(JTIMER),A1,L
|
||
ADDI 3,A1
|
||
MOVE A1,*A13(JTIMER),L ; INCREMENT THE TIMER
|
||
CMPI 9,A1
|
||
JRLO SCICK2
|
||
CLR A1
|
||
MOVE A1,*A13(JTIMER),L ; CLEAR THE TIMER
|
||
MOVE A0,A0
|
||
JRZ SCICK2 ; NOTHING -- CHECK FIRE BUTTON
|
||
SCIJUDGE
|
||
|
||
CMPI 1,A0 ; UP
|
||
JRNZ SCIL0
|
||
MOVK 1,A0
|
||
MOVE A0,*A13(DIRTY),W ; SET IT
|
||
MOVE A9,A3
|
||
CLR A4
|
||
CALLR FLIPLETTER
|
||
JRUC SCIPROC
|
||
SCIL0
|
||
CMPI 2,A0 ; DOWN
|
||
JRNZ SCICK2
|
||
MOVK 1,A0
|
||
MOVE A0,*A13(DIRTY),W ; SET IT
|
||
MOVE A9,A3
|
||
MOVK 1,A4
|
||
CALLR FLIPLETTER
|
||
JRUC SCIPROC
|
||
;
|
||
SCICK2
|
||
CALLR LOOKFIRE ; CHECK THE FIRE BUTTON
|
||
JRZ SCICK3 ; NOT DEPRESSED
|
||
MOVE *A13(ADDTIMES),A0,W ; CHECK TO SEE IF EXPIRED
|
||
JRZ SCICK2WOOF
|
||
DEC A0
|
||
MOVE A0,*A13(ADDTIMES),W ; DEC AND SET
|
||
MOVK ENTER_TIME,A0
|
||
MOVE A0,*A8(PITIME),W ; RESET HIS TIME
|
||
SCICK2WOOF
|
||
MOVE *A13(BDEBOUNCE),A0,W ; GET DEBOUNCE FLAG
|
||
JRNZ SCIPROC ; HASN'T LET UP YET
|
||
MOVK 1,A0
|
||
MOVE A0,*A13(BDEBOUNCE),W
|
||
;
|
||
; CHECK HERE FOR RUB CHAR
|
||
;
|
||
MOVE A9,A3 ; LETTER WE ARE ON
|
||
DEC A3 ; 0 BASE IT
|
||
SLL 3,A3
|
||
ADDI INITIAL1,A3 ; GET TO FIRST INITIAL
|
||
ADD A13,A3
|
||
MOVB *A3,A0 ; GET THE LETTER
|
||
CMPI 7FH,A0 ; CHECK FOR RUB
|
||
JRNZ SCI3
|
||
MMTM A12,A2,A3
|
||
MOVE A9,A3
|
||
MOVE A8,A2 ; PLAYER DATA AREA
|
||
CALLR ERASEONEINITIAL
|
||
MMFM A12,A2,A3
|
||
MOVK 20H,A0
|
||
MOVB A0,*A3 ; CLEAR CHARACTER
|
||
DEC A9 ; MOVE LEFT 1
|
||
JRNZ SCIPROC
|
||
MOVK 1,A9
|
||
JRUC SCIPROC
|
||
SCI3
|
||
INC A9
|
||
CMPI 4,A9 ; CHECK FOR FAR RIGHT
|
||
JRLO SCIPROC
|
||
;
|
||
; THE GUY JUST ENTERED HIS INITIALS HERE!
|
||
;
|
||
JRUC SCIDONE
|
||
|
||
SCICK3
|
||
CLR A0
|
||
MOVE A0,*A13(BDEBOUNCE),W ; CLEAR THE DEBOUNCER
|
||
JRUC SCIPROC
|
||
;
|
||
SCIPROC
|
||
MOVE A9,A3
|
||
MOVE A8,A2
|
||
MOVK 1,A1
|
||
MOVE A1,*A2(PDEAD),W
|
||
; CALLR ERASEINITIALS
|
||
CALLR ERASEONEINITIAL
|
||
CALLR PLOTINITIALS
|
||
JRUC SCILOOP
|
||
;
|
||
; HERE WE ARE -- INITIALS ARE ENTERED AND EVERYTHING
|
||
;
|
||
SCIDONE
|
||
MOVE *A13(DIRTY),A1,W
|
||
JRZ SCINONE ; DIDN'T ENTER ANYTHING -- OUTTA HERE
|
||
MOVE A13,A1
|
||
ADDI INITIAL1,A1 ; POINT TO FIRST INITIAL
|
||
CALLA CHECK_INITS ; CHECK TO SEE IF ALL SPACES
|
||
JRZ SCINONE ; BR = STUPID ENTRY
|
||
MOVE *A8(PSCORE),A0,L ; GET THE SCORE
|
||
CALLA CKHSTD
|
||
JRZ SCINONE ; BR = DIDN'T MAKE IT
|
||
; CALLA TRYADD ; ADD IT, BABY!
|
||
CALLA ADD_HSHOLD ; PUT IT IN TEMPORARY STORAGE
|
||
SCINONE
|
||
MOVE A8,A2
|
||
|
||
*** CALLR PSENCL ; CLEAR OUT AREA
|
||
MOVE *A13(BIGSCORE),A1,W
|
||
JRNZ SCI_DIE ; DON'T UPDATE SCORE AREA
|
||
CALLR UPDSL
|
||
SCI_DIE:
|
||
CLR A0
|
||
MOVE A0,*A8(PDEAD),W ; START UP REGULAR PROCESSES
|
||
MOVE A0,*A8(PITIME),W
|
||
DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* FLIPLETTER *
|
||
* *
|
||
* INCREMENT/DECREMENT THE LETTER *
|
||
* *
|
||
* ENTRY *
|
||
* A2 POINTER TO PLAYER DATA AREA *
|
||
* A3 WHICH LETTER *
|
||
* A4 DIRECTION ( 0 = INCREMENT, 1 = DECREMENT ) *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
FLIPLETTER:
|
||
MMTM SP,A0,A1,A5
|
||
MOVE A13,A0
|
||
CMPI 1,A3
|
||
JRNZ FL1
|
||
ADDI INITIAL1,A0
|
||
JRUC FLGOLET
|
||
FL1
|
||
CMPI 2,A3
|
||
JRNZ FL2
|
||
ADDI INITIAL2,A0
|
||
JRUC FLGOLET
|
||
FL2
|
||
ADDI INITIAL3,A0
|
||
FLGOLET
|
||
MOVB *A0,A1 ; SNAG THE LETTER
|
||
CALLR FINDLETTER
|
||
MOVE A4,A4
|
||
JRNZ FLDEC
|
||
;
|
||
; INCREMENT THE LETTER
|
||
;
|
||
ADDI 8,A5 ; MOVE UP IN TABLE
|
||
CMPI LASTLEGAL,A5
|
||
JRLS FLCOOL
|
||
MOVI LEGALCHARS,A5 ; WRAP TO START
|
||
JRUC FLCOOL
|
||
;
|
||
; DECREMENT THE LETTER
|
||
;
|
||
FLDEC
|
||
SUBI 8,A5
|
||
CMPI LEGALCHARS,A5
|
||
JRHS FLCOOL
|
||
MOVI LASTLEGAL,A5 ; END OF TABLE
|
||
;
|
||
FLCOOL
|
||
MOVB *A5,*A0 ; GET THE LETTER
|
||
MMFM SP,A0,A1,A5
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* FINDLETTER *
|
||
* *
|
||
* LOOKUP THE LETTER IN A1 IN THE TABLE *
|
||
* *
|
||
* ENTRY *
|
||
* A1 CHAR TO FIND *
|
||
* *
|
||
* EXIT *
|
||
* A5 TABLE ADDRESS *
|
||
* *
|
||
**************************************************************************
|
||
|
||
FINDLETTER:
|
||
MMTM SP,A0,A2
|
||
MOVI LEGALCHARS,A0
|
||
FILLOOP
|
||
MOVB *A0,A2 ; TABLE LETTER
|
||
JRZ FILNOLET ; ENDOFTABLE, NO LETTER
|
||
CMP A1,A2
|
||
JRZ FILDONE
|
||
ADDI 8,A0
|
||
JRUC FILLOOP
|
||
FILDONE
|
||
MOVE A0,A5 ; ADDRESS OF LETTER
|
||
JRUC FILRET
|
||
FILNOLET
|
||
MOVI LEGALLET,A5 ; DEFAULT = 'A'
|
||
FILRET
|
||
MMFM SP,A0,A2
|
||
RETS
|
||
|
||
LEGALCHARS
|
||
.BYTE 20H
|
||
LEGALLET
|
||
.BYTE 41H,42H,43H,44H,45H,46H,47H,48H
|
||
.BYTE 49H,4AH,4BH,4CH,4DH,4EH,4FH,50H
|
||
.BYTE 51H,52H,53H,54H,55H,56H,57H,58H
|
||
.BYTE 59H, 5AH
|
||
.BYTE 21H,2AH,2BH,2EH,2FH,3FH ; SPEC CHARS
|
||
LASTLEGAL
|
||
.BYTE 7FH ; RUB CHAR
|
||
.LONG 0 ; ENDUS MAXIMUS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* LOOKSTICK *
|
||
* *
|
||
* FIGURE OUT WHICH STICK IS THE PLAYERS, DO THE MASKING *
|
||
* AND THINGS AND RETURN A NUMBER FROM 0 TO 4 ABOUT WHAT *
|
||
* IS GOING ON.. *
|
||
* *
|
||
* ENTRY *
|
||
* A2 PLAYER DATA AREA *
|
||
* *
|
||
* EXIT *
|
||
* A0 STICK VALUE (ZERO FLAG WILL BE SET) *
|
||
* 0 = NOTHING *
|
||
* 1 = UP *
|
||
* 2 = DOWN *
|
||
* 3 = LEFT *
|
||
* 4 = RIGHT *
|
||
* *
|
||
* NOTE : THIS IS ONLY FOR JAMMA GAMES! *
|
||
* *
|
||
**************************************************************************
|
||
|
||
LOOKSTICK:
|
||
PUSH A1
|
||
CMPI P1DATA,A2 ; PLAYER 1 DATA AREA
|
||
JRNZ LS2
|
||
MOVE @SWITCH,A1,L ; GET SWITCHES
|
||
ANDI 000FH,A1 ; MASK OFF STICK
|
||
JRUC LSOUT
|
||
LS2
|
||
CMPI P2DATA,A2 ; PLAYER 2 DATA AREA
|
||
JRNZ LS3
|
||
MOVE @SWITCH,A1,L
|
||
ANDI 00F00H,A1 ; MASK OFF STICK
|
||
SRL 8,A1
|
||
JRUC LSOUT
|
||
LS3
|
||
CMPI P3DATA,A2 ; PLAYER 3 DATA AREA
|
||
JRNZ LS4
|
||
MOVE @SWITCH,A1,L
|
||
ANDI 78000000H,A1 ; SNAG THAT STICK, BABY!
|
||
SRL 27,A1
|
||
JRUC LSOUT
|
||
LS4
|
||
MOVE @SWITCH+32,A1,L
|
||
LSOUT
|
||
NOT A1
|
||
BTST 0,A1 ; UP
|
||
JRZ LSO1
|
||
MOVK 1,A0
|
||
JRUC LSRET
|
||
LSO1
|
||
BTST 1,A1 ; DOWN
|
||
JRZ LSO2
|
||
MOVK 2,A0
|
||
JRUC LSRET
|
||
LSO2
|
||
BTST 2,A1 ; LEFT
|
||
JRZ LSO3
|
||
MOVK 3,A0
|
||
JRUC LSRET
|
||
LSO3
|
||
BTST 3,A1 ; RIGHT
|
||
JRZ LSO4
|
||
MOVK 4,A0
|
||
JRUC LSRET
|
||
LSO4
|
||
CLR A0
|
||
LSRET
|
||
PULL A1
|
||
MOVE A0,A0 ; MAKE SURE SOME BITS BE SET
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* LOOKFIRE *
|
||
* *
|
||
* CHECK TO SEE IF THE FIRE BUTTON IS DOWN *
|
||
* *
|
||
* ENTRY *
|
||
* A2 PLAYER DATA AREA *
|
||
* *
|
||
* EXIT *
|
||
* .NZ. YES, IT IS *
|
||
* *
|
||
**************************************************************************
|
||
|
||
LOOKFIRE:
|
||
PUSH A1
|
||
CMPI P1DATA,A2 ; PLAYER 1 DATA AREA
|
||
JRNZ LF2
|
||
MOVE @SWITCH,A1,L ; GET SWITCHES
|
||
NOT A1
|
||
ANDI 00000010H,A1
|
||
JRUC LFOUT
|
||
LF2
|
||
CMPI P2DATA,A2 ; PLAYER 2 DATA AREA
|
||
JRNZ LF3
|
||
MOVE @SWITCH,A1,L
|
||
NOT A1
|
||
ANDI 00001000H,A1
|
||
JRUC LFOUT
|
||
LF3
|
||
CMPI P3DATA,A2 ; PLAYER 3 DATA AREA
|
||
JRNZ LF4
|
||
MOVE @SWITCH,A1,L
|
||
NOT A1
|
||
ANDI 80000000H,A1
|
||
JRUC LFOUT
|
||
LF4
|
||
MOVE @SWITCH+32,A1,L
|
||
NOT A1
|
||
ANDI 00000010H,A1
|
||
LFOUT
|
||
PULL A1
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PLOTTIME *
|
||
* *
|
||
* PLOT THE TIME LEFT FOR A GIVEN PLAYER *
|
||
* *
|
||
* ENTRY *
|
||
* A2 PLAYER DATA AREA *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
PLOTTIME:
|
||
MMTM SP,A0,A1,A3,A4,A5,A8,A9,A11
|
||
MOVE *A13(BIGSCORE),A3,W ; ARE WE IN BIG SCORE MODE?
|
||
JRNZ PTBYP1
|
||
MOVI RD7FONT,A11
|
||
CLR A4
|
||
MOVI TROG_LF,A5
|
||
MOVI ENTERMESS,A8
|
||
MOVI SCIMESS,A9
|
||
CALLR SCORSTR ; BLOW OUT THIS ONE
|
||
PTBYP1
|
||
MOVE *A2(PITIME),A8,W
|
||
CALLA HEXTOASC
|
||
MOVE *A2(PPALID),A4
|
||
MOVI 0E0EH,A5
|
||
MOVE *A13(BIGSCORE),A3,W ; ARE WE IN BIG SCORE MODE?
|
||
JRZ PTBYP2
|
||
;
|
||
MOVI [150+SKYTOPOF,197],A9
|
||
MOVI RD15FONT,A11
|
||
CALLR SCORSTR
|
||
MOVI TEXTOID,A0
|
||
MOVI BTIMEOID,A1
|
||
CALLA CHANGOID
|
||
JRUC PTRET
|
||
PTBYP2
|
||
MOVI SCITIME,A9
|
||
CALLR SCORSTR
|
||
PTRET
|
||
MMFM SP,A0,A1,A3,A4,A5,A8,A9,A11
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PLOTINITIALS *
|
||
* *
|
||
* PLOT THE PLAYER INITIALS AS THEY CURRENTLY STAND *
|
||
* *
|
||
* ENTRY *
|
||
* A2 PLAYER DATA AREA *
|
||
* A3 WHICH ONE TO EMPHASIZE *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
BSCILET1 EQU [117+SKYTOPOF,160]
|
||
BSCILET2 EQU [117+SKYTOPOF,197]
|
||
BSCILET3 EQU [117+SKYTOPOF,234]
|
||
|
||
PLOTINITIALS:
|
||
MMTM SP,A0,A1,A2,A3,A5,A6,A7,A8,A9
|
||
MOVI RD15FONT,A11
|
||
MOVE A13,A8
|
||
ADDI PLANTLET,A8 ; GET THE PLANT LETTER PLACE
|
||
|
||
CALLA GPLAYNUM
|
||
ADDI PCOLROFFST/16,A0
|
||
MOVE A0,A6
|
||
SLL 8,A0
|
||
OR A0,A6
|
||
|
||
MOVI 0E0EH,A5 ; COLOR
|
||
MOVE *A2(PPALID),A4,L ; PALETTE
|
||
CMPI 1,A3
|
||
JRNZ PI1
|
||
MOVE A6,A5
|
||
MOVI PCYCLEPAL,A4
|
||
PI1
|
||
MOVI SCILET1,A9
|
||
MOVE *A13(BIGSCORE),A1,W
|
||
JRZ PI1BYP
|
||
MOVI RD15FONT,A11
|
||
MOVI BSCILET1,A9
|
||
PI1BYP
|
||
MOVB *A13(INITIAL1),A1
|
||
MOVE A1,*A8,W
|
||
CALLR SCORSTR
|
||
|
||
MOVI 0E0EH,A5 ; COLOR
|
||
MOVE *A2(PPALID),A4,L ; PALETTE
|
||
CMPI 2,A3
|
||
JRNZ PI2
|
||
MOVE A6,A5
|
||
MOVI PCYCLEPAL,A4
|
||
PI2
|
||
MOVI SCILET2,A9
|
||
MOVE *A13(BIGSCORE),A1,W
|
||
JRZ PI2BYP
|
||
MOVI RD15FONT,A11
|
||
MOVI BSCILET2,A9
|
||
PI2BYP
|
||
MOVB *A13(INITIAL2),A1
|
||
MOVE A1,*A8,W
|
||
CALLR SCORSTR
|
||
|
||
MOVI 0E0EH,A5 ; COLOR
|
||
MOVE *A2(PPALID),A4,L ; PALETTE
|
||
CMPI 3,A3
|
||
JRNZ PI3
|
||
MOVE A6,A5
|
||
MOVI PCYCLEPAL,A4
|
||
PI3
|
||
MOVI SCILET3,A9
|
||
MOVE *A13(BIGSCORE),A1,W
|
||
JRZ PI3BYP
|
||
MOVI RD15FONT,A11
|
||
MOVI BSCILET3,A9
|
||
PI3BYP
|
||
MOVB *A13(INITIAL3),A1
|
||
MOVE A1,*A8,W
|
||
CALLR SCORSTR
|
||
MOVE *A13(BIGSCORE),A1,W
|
||
JRZ PIRET
|
||
MOVI TEXTOID,A0
|
||
MOVI BMES1OID,A1
|
||
CALLA CHANGOID ; CLEAN OUT ALL THE TEXT THINGS
|
||
PIRET
|
||
MMFM SP,A0,A1,A2,A3,A5,A6,A7,A8,A9
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* SCORSTR *
|
||
* *
|
||
* PLOT A STRING IN THE SCOR AREA *
|
||
* *
|
||
* ENTRY *
|
||
* A2 PLAYER DATA AREA *
|
||
* A4 PALETTE TO USE *
|
||
* A5 COLOR TO USE ( NOT PALETTIZED ) *
|
||
* A8 STRING *
|
||
* A9 SCORE AREA OFFSET *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
SCORSTR:
|
||
MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A10,A11
|
||
SLL 16,A5 ; THIS IS THE CONSTANT DRAW COLOR
|
||
MOVE A4,A4
|
||
JRZ NONEED
|
||
CMPI PCYCLEPAL,A4 ; PALETTE CYCLER?
|
||
JRNZ LOOKUP_PAL ; A REAL MEMORY LOCATION
|
||
MOVX A4,A5
|
||
JRUC NONEED
|
||
LOOKUP_PAL
|
||
MOVE *A2(PPALID),A0,L ; LOOKUP THE CURRENT PALETTE
|
||
CALLA FINDPAL ; MAKE SURE IT HAS A PALETTE
|
||
MOVX A0,A5
|
||
NONEED:
|
||
MOVB *A8,A0
|
||
CMPI 20H,A0 ; CHECK FOR SPACE
|
||
JRNZ SCGO
|
||
MOVI UNDERLINE,A8
|
||
SCGO
|
||
CLR A0 ; SLEEP TIME BETWEEN CHARS
|
||
MOVK 1,A10 ; SIMPLE SPACING
|
||
MOVE *A13(BIGSCORE),A1,W ; CHECK FOR BIG SCORE MODE
|
||
JRZ SCLITTLE
|
||
JSRP STRCNRMO
|
||
JRUC SCRET
|
||
SCLITTLE
|
||
MOVE *A2(PSCRAD),A1,L ; SCORE BOX CENTER
|
||
ADD A1,A9 ; CENTER IT FOR REAL
|
||
JSRP STRCNRM
|
||
SCRET
|
||
MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A10,A11
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* ERASEINITIALS *
|
||
* *
|
||
* ERASE THE PLAYER INITIALS AREA *
|
||
* *
|
||
* ENTRY *
|
||
* A2 PLAYER DATA AREA *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
ERASEINITIALS:
|
||
MMTM SP,A0,A1,A3,A4,A8
|
||
MOVE *A13(BIGSCORE),A3,W
|
||
JRZ ERA1
|
||
ERASEBIGIES
|
||
MOVI BMES1OID,A0 ; INITIALS ARE IN THIS OID
|
||
CLR A1
|
||
NOT A1
|
||
CALLA KILOBJ ; LATER, DUDES!
|
||
JRUC ERARET
|
||
ERA1
|
||
MOVE *A2(PSCRAD),A3,L ; CENTER OF SCORE BOX
|
||
ADDI SCIERA,A3 ; ADD ON THE OFFSETS
|
||
MOVI SCIERAS,A4 ; SIZE OF SCORE BOX ERASE
|
||
CALLA BLNKAREA
|
||
ERARET
|
||
MMFM SP,A0,A1,A3,A4,A8
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* ERASEONEINITIAL *
|
||
* *
|
||
* ERASE ONLY ONE OF THE LETTERS -- GOTTA STOP THIS GLITCHING SHIT *
|
||
* *
|
||
* ENTRY *
|
||
* A2 PLAYER DATA AREA *
|
||
* A3 WHICH ONE IS BEING WORKED ON ( 1 BASED! ) *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
* CALL *
|
||
* CALLR *
|
||
* *
|
||
**************************************************************************
|
||
|
||
ERASEONEINITIAL
|
||
MMTM SP,A0,A1,A3,A4,A8
|
||
MOVE *A13(BIGSCORE),A0,W
|
||
JRNZ ERASEBIGIES
|
||
DEC A3
|
||
ANDI 3,A3
|
||
SLL 5,A3
|
||
ADDI ERAONETAB,A3
|
||
MOVE *A3,A0,L
|
||
MOVE *A2(PSCRAD),A3,L ; CENTER OF SCORE BOX
|
||
ADD A0,A3
|
||
SUBI 1000AH,A3 ; GET IT MOVED OVER SOME MORE
|
||
|
||
MOVI SCILETSIZE,A4 ; SIZE OF SCORE BOX ERASE
|
||
CALLA BLNKAREA
|
||
MMFM SP,A0,A1,A3,A4,A8
|
||
RETS
|
||
|
||
ERAONETAB
|
||
.LONG SCILET1,SCILET2,SCILET3
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* ERASETIME *
|
||
* *
|
||
* ERASE THE TIME MESSAGE THAT WAS PUT THERE BY THE COMMUNIST *
|
||
* BIG SCORE PROC STUFF *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
ERASETIME:
|
||
MMTM SP,A0,A1
|
||
MOVE *A13(BIGSCORE),A0,W ; CHECK OUT IF IN BIGSCORE MODE
|
||
JRNZ ET1
|
||
MOVE *A2(PSCRAD),A3,L ; CENTER OF SCORE BOX
|
||
ADDI SCITERA,A3 ; ADD ON THE OFFSETS
|
||
MOVI SCITES,A4 ; SIZE OF SCORE BOX ERASE
|
||
CALLA BLNKAREA
|
||
JRUC ETRET
|
||
ET1
|
||
MOVI BTIMEOID,A0 ; TIME IS IN THIS OID
|
||
CLR A1
|
||
NOT A1
|
||
CALLA KILOBJ ; LATER, DUDES!
|
||
ETRET
|
||
MMFM SP,A0,A1
|
||
RETS
|
||
|
||
ENTERMESS:
|
||
.STRING "Initials!",0
|
||
.EVEN
|
||
|
||
UNDERLINE:
|
||
.STRING "-",0
|
||
.EVEN
|
||
|
||
**************************************************************************
|
||
* *
|
||
* SCORPROC - SIMPLE SCORE PROCESS FOR FLASHING PRESS START *
|
||
* *
|
||
* ENTRY : *
|
||
* A11 POINTER TO PLAYER DATA AREA *
|
||
* *
|
||
* RETURNS : *
|
||
* NEVER EXITS *
|
||
* *
|
||
* NOTE : *
|
||
* A8 MESSAGE PART FLAG *
|
||
* A9 CURRENTLY ACTIVE PALETTE *
|
||
* *
|
||
**************************************************************************
|
||
|
||
SCORPROC:
|
||
CALLR ERASE_MESSAGES ; CLEAR OUT EVERYTHING TO START WITH
|
||
MOVK 1,A8
|
||
MOVE A8,@HISEEN,W ; GROSS, BUT....
|
||
CLR A8 ; MESSAGE PART 0
|
||
SCORPLP2
|
||
CALLA CR_BOTH
|
||
MOVE A2,@CANSTRT,W ; START/CONTINUE FLAG
|
||
MOVE @NPLAYERS,A11,W ; NUMBER OF PLAYERS
|
||
MOVI P1DATA,A2 ; ALWAYS ASSUME AT LEAST 1 PLAYER
|
||
CALLR SCORMESS
|
||
MOVE A11,A11 ; CHECK FOR 2 PLAYERS
|
||
JRZ SCORPLP3
|
||
MOVI P2DATA,A2
|
||
CALLR SCORMESS
|
||
DEC A11 ; CHECK FOR 3 PLAYERS
|
||
JRZ SCORPLP3
|
||
MOVI P3DATA,A2
|
||
CALLR SCORMESS
|
||
DEC A11 ; CHECK FOR 4 PLAYERS
|
||
JRZ SCORPLP3
|
||
MOVI P4DATA,A2
|
||
CALLR SCORMESS
|
||
SCORPLP3
|
||
SLEEPK 2
|
||
MOVE @PCYCLELO,A14,W ; CHECK TO SEE IF WE NEED TO ERASE
|
||
JRZ SCORPCK2
|
||
CLR A14
|
||
MOVE A14,@PCYCLELO,W ; GROSS
|
||
MOVE A14,@HISEEN,W ; CLEAR OUT WHO PLOTTED LAST
|
||
CALLR ERASE_MESSAGES
|
||
JRUC SCORPLP3
|
||
SCORPCK2
|
||
MOVE @PCYCLEHI,A14,W ; CHECK TO SEE IF WE NEED TO REPLOT
|
||
JRZ SCORPLP3
|
||
MOVE @HISEEN,A14,W
|
||
JRZ SCORPCOOL
|
||
CALLR ERASE_MESSAGES ; SOMETHING GOT OUT OF SYNC HERE
|
||
SCORPCOOL
|
||
MOVK 1,A14
|
||
MOVE A14,@HISEEN,W
|
||
CLR A14
|
||
MOVE A14,@PCYCLEHI,W ; NICE RACE CONDITION
|
||
NOT A8 ; FLIP MESSAGE
|
||
JRUC SCORPLP2 ; PLOT IT AGAIN, SAM
|
||
|
||
**************************************************************************
|
||
* *
|
||
* SCORMESS FIGURE OUT WHAT MESSAGE TO PUT IN THE SCORE BOX *
|
||
* *
|
||
* ENTRY *
|
||
* A2 : POINTER TO CURRENT PLAYER BANK *
|
||
* A8 : 0 IF FIRST PART OF MESSAGE, ~0 IF SECOND PART *
|
||
* A9 : COLOR TO USE IN PALETTE *
|
||
* *
|
||
* RETURN *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
SCORMESS:
|
||
MMTM SP,A8,A9,A10,A11
|
||
|
||
SCORMRETRY:
|
||
MOVK 1,A11 ; ASSUME IN STORY MODE
|
||
MOVE @STORY_MODE,A0,W
|
||
JRNZ SCORMAMODE
|
||
|
||
CLR A11 ; NOT IN ATTRACT MODE
|
||
MOVE *A2(PDEAD),A0,W ; CHECK FOR DEAD MESSAGE
|
||
JRNZ SCORM3
|
||
|
||
MOVE *A2(PDRONEFLG),A0,W
|
||
JRNZ SCORMAMODE
|
||
MOVE *A2(POBJ),A0,L ; CHECK TO SEE IF HAS OBJECT
|
||
JRNZ SCORMRET
|
||
MOVE *A2(PENTER),A0,W ; CHECK FOR ENTERING
|
||
JRNZ SCORMRET
|
||
|
||
SCORMAMODE
|
||
; CALLR ERASE_SCORE_MESS
|
||
|
||
MOVE A8,A8 ; CHECK SEQUENCER
|
||
JRNZ SCORM1 ; WORKING ON SECOND MESSAGE
|
||
|
||
MOVE A11,A11 ;ARE WE IN ATTRACT MODE?
|
||
JRNZ SCD_START_CREDITS ;BR = ALWAYS CHECK FOR STARTING CREDS
|
||
;
|
||
MOVE *A2(PSCORE),A3,L ; CHECK THE SCORE
|
||
JRNZ SCO1
|
||
SCD_START_CREDITS
|
||
MOVE @CANSTRT,A0,W ; ENOUGH STARTING CREDITS?
|
||
ANDI 1,A0
|
||
JRZ SCOPOOR
|
||
SCDNAME
|
||
CALLA GPLAYNUM ; ( OFF OF A2 )
|
||
SLL 5,A0
|
||
ADDI DINO_START_TAB,A0
|
||
MOVE *A0,A8,L
|
||
JRUC SCORMGO
|
||
SCO1
|
||
CALLA ALLOW_CONTINUE
|
||
JRZ SCORM_GAME_OVER
|
||
MOVE @CANSTRT,A0,W
|
||
ANDI 2,A0
|
||
JRNZ SCDNAME ; BR = YES, ENOUGH CONTINUE CREDITS
|
||
;
|
||
SCOPOOR
|
||
MOVI SCORINSERT,A8 ; INSERT COIN
|
||
JRUC SCORMGO
|
||
;
|
||
SCORM1
|
||
MOVE A11,A11
|
||
JRNZ SCORM10 ; IN ATTRACT MODE -- FORCE START
|
||
|
||
MOVE @GAME_STATE,A8,W ; CHECK FOR GAME STATE HERE
|
||
CMPI INGAMEOV,A8 ; GAME OVER, GOTTA START
|
||
JRZ SCORM10
|
||
MOVE *A2(PSCORE),A8,L ; CHECK TO SEE IF PREVIOUS SCORE
|
||
JRNZ SCORM2 ; YEAH, USE "CONTINUE" MESSAGE
|
||
SCORM10
|
||
MOVI SCORTOPLAY,A8 ; "TO PLAY"
|
||
JRUC SCORMGO
|
||
|
||
SCORM2
|
||
CALLA ALLOW_CONTINUE
|
||
JRZ SCORM_GAME_OVER
|
||
MOVI SCORCONTINUE,A8 ; "TO CONTINUE"
|
||
JRUC SCORMGO
|
||
|
||
SCORM_GAME_OVER
|
||
MOVK 2,A0
|
||
MOVE A0,*A2(PDEAD),W
|
||
SCORM3 ; A0 CONTAINS PDEAD HERE
|
||
CMPI 1,A0,W ; CHECK FOR BLANK
|
||
JRZ SCORMRET ; NOTHING TO PLOT
|
||
CMPI 2,A0,W ; GAME OVER PLOTTED
|
||
JRZ SCORM4
|
||
CLR A0
|
||
MOVE A0,*A2(PDEAD),W ; CLEAR PDEAD CONDITION
|
||
MOVK 1,A10 ; FORCE AN ERASE
|
||
CALLR ERASE_SCORE_MESS
|
||
JRUC SCORMRETRY
|
||
SCORM4
|
||
MOVI SCORGAMEOVER,A8 ; "GAME OVER, DUDE!" MESSAGE
|
||
; JRUC SCORMPAL ; BYPASS FLASHING COLOR
|
||
;
|
||
; PLOT THE MESSAGE IN A8 AT THE RIGHT LOCATION
|
||
;
|
||
SCORMPLAYERPAL
|
||
MOVI 0E0EH,A1
|
||
SLL 16,A1 ; THIS IS THE CONSTANT DRAW COLOR
|
||
MOVE *A2(PPALID),A0,L ; LOOKUP THE CURRENT PALETTE
|
||
CALLA FINDPAL ; MAKE SURE IT HAS A PALETTE
|
||
MOVX A0,A1
|
||
JRUC SCORMGOOBJ
|
||
*
|
||
SCORMGO
|
||
SCORMPAL
|
||
CALLA GPLAYNUM
|
||
ADDI PCOLROFFST/16,A0
|
||
MOVI PCYCLEPAL,A1
|
||
SLL 16,A0
|
||
MOVY A0,A1
|
||
SLL 8,A0
|
||
OR A0,A1
|
||
|
||
SCORMGOOBJ
|
||
MOVE *A2(PSCRAD),A3,L ; SCORE BOX CENTER
|
||
ADDI SCRCTR,A3 ; START OF TEXT
|
||
MOVE *A8(IANIOFFX),A14,L
|
||
SUB A14,A3 ; ADJUST THE ANIMATION POINT
|
||
MOVE *A8(ISIZE),A2,L ; GET THE SIZE
|
||
MOVE *A8(ISAG),A4,L ; GET STARTING ADDRESS
|
||
MOVI DMACNZ,A5 ; FLAGS
|
||
CALLA DMAN ; OUTPUT THE SUCKER
|
||
SCORMRET
|
||
MMFM SP,A8,A9,A10,A11
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* ERASE_MESSAGES *
|
||
* *
|
||
* ERASE ALL THE MESSAGES IN THE SCORE AREA OF A GIVEN PLAYER *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
* CALL *
|
||
* CALLR *
|
||
* *
|
||
**************************************************************************
|
||
|
||
ERASE_MESSAGES
|
||
MOVI PDTAB,A14
|
||
MOVE @NPLAYERS,A3,W ; NUMBER OF PLAYERS
|
||
INC A3
|
||
ERASE_M_LOOP
|
||
MOVE *A14+,A2,L
|
||
JRZ ERASE_RET
|
||
DEC A3
|
||
JRLT ERASE_RET
|
||
MOVE @STORY_MODE,A0,W ; CHECK FOR STORY MODE
|
||
JRNZ ERASE_IT
|
||
MOVE *A2(PDRONEFLG),A0,W ; CHECK TO SEE IF A DRONE
|
||
JRNZ ERASE_IT ; BR = FORCE ERASE
|
||
MOVE *A2(POBJ),A0,L ; CHECK TO SEE IF HAS OBJECT
|
||
JRNZ ERASE_M_LOOP
|
||
MOVE *A2(PENTER),A0,W ; CHECK FOR ENTERING
|
||
JRNZ ERASE_M_LOOP
|
||
MOVE *A2(PITIME),A0,W
|
||
JRNZ ERASE_M_LOOP
|
||
MOVE *A2(PDEAD),A0,W ; CHECK FOR DEAD MESSAGE
|
||
JRNZ ERASE_M_LOOP
|
||
ERASE_IT
|
||
CALLR ERASE_SCORE_MESS
|
||
JRUC ERASE_M_LOOP
|
||
ERASE_RET
|
||
RETS
|
||
|
||
PDTAB .LONG P1DATA,P2DATA,P3DATA,P4DATA,0
|
||
|
||
DINO_START_TAB:
|
||
.LONG SCORREX,SCORBLOOP,SCORSPIKE,SCORGWEN
|
||
|
||
**************************************************************************
|
||
* *
|
||
* GAME_OVER_FLY FLY THE GAME OVER BOX UP TO THE PLAYER'S SCORE AREA *
|
||
* *
|
||
* ENTRY *
|
||
* A9 CENTER POINT WHERE DINO DIED *
|
||
* A11 PLAYER POINTER *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
GAME_OVER_FLY:
|
||
MOVK 1,A0 ; KEEP SCORPROC FROM BEING A PAIN
|
||
MOVE A0,*A11(PDEAD),W
|
||
;
|
||
MOVI GAMEOVERINIT,A14 ; GAME OVER BOX
|
||
CALLA GETOBJ
|
||
JRZ GAME_OVER_FLY_NOOBJ
|
||
MOVE A0,A8 ; GAME OVER OBJECT
|
||
MOVE *A11(PPALID),A0,L ; LOOKUP THE CURRENT PALETTE
|
||
CALLA FINDPAL ; MAKE SURE IT HAS A PALETTE
|
||
MOVE A0,@CURPAL,W ; MAKE STFOBJ PUT THIS IN THE PALETTE
|
||
MOVE A8,A0
|
||
|
||
CALLA STFOBJ
|
||
**** MOVI 0E0EH,A1
|
||
**** MOVE A1,*A8(OCONST),W ; ONLY IN THIS COLOR
|
||
;
|
||
MOVE A9,A3
|
||
CALLA OBJ_TO_PNT ; CENTER OBJECT ON POINT
|
||
CALLA INSOBJ
|
||
;
|
||
SLEEP 30 ; GIVE PLAYER 1/2 SECOND
|
||
MOVI 60,A4 ; CRUISE UP IN 1 SECOND
|
||
MOVE A11,A2 ; POINTER TO PLAYER
|
||
JSRP FLYTOPL ; ZOOM HIM UP TO TOP OF SCREEN
|
||
|
||
MOVE A8,A0
|
||
CALLA DELOBJ
|
||
GAME_OVER_FLY_NOOBJ:
|
||
;
|
||
; NOW FLASH A GAME OVER UP THERE
|
||
;
|
||
MOVE *A11(PDEAD),A0,W ;IS THE PLAYER DEAD?
|
||
JRZ GAME_OVER_FLY_DIE ;BR = NOT ANYMORE
|
||
|
||
MOVE *A11(PPID),A0,W
|
||
ORI PINITIALPID,A0
|
||
CLR A1
|
||
NOT A1
|
||
CALLA EXISTP ;IS THIS DUDE ENTERING HIS INITIALS?
|
||
JRNE GAME_OVER_FLY_DIE ;BR = YES, THEN DON'T BOGE IT OUT
|
||
|
||
MOVE *A11(PSCRAD),A9,L ; SCORE BOX CENTER
|
||
ADDI SCRCTR,A9 ; START OF TEXT
|
||
CALLR ERASE_SCORE_MESS ; ERASE THE SCORE MESSAGE AREA
|
||
MOVK 2,A0 ; TURN ON THE GAME OVER MESS
|
||
MOVE A0,*A11(PDEAD),W
|
||
;
|
||
MOVI SCORGAMEOVER,A8 ; "GAME OVER, DUDE!" MESSAGE
|
||
MOVI 0E0EH,A1
|
||
SLL 16,A1 ; THIS IS THE CONSTANT DRAW COLOR
|
||
MOVE *A11(PPALID),A0,L ; LOOKUP THE CURRENT PALETTE
|
||
CALLA FINDPAL ; MAKE SURE IT HAS A PALETTE
|
||
MOVX A0,A1
|
||
MOVE *A11(PSCRAD),A3,L ; SCORE BOX CENTER
|
||
ADDI SCRCTR,A3 ; START OF TEXT
|
||
MOVE *A8(IANIOFFX),A14,L
|
||
SUB A14,A3 ; ADJUST THE ANIMATION POINT
|
||
MOVE *A8(ISIZE),A2,L ; GET THE SIZE
|
||
MOVE *A8(ISAG),A4,L ; GET STARTING ADDRESS
|
||
MOVI DMACNZ,A5 ; FLAGS
|
||
CALLA DMAN ; OUTPUT THE SUCKER
|
||
|
||
SLEEP 180
|
||
|
||
CALLA ALLOW_CONTINUE
|
||
JRZ GAME_OVER_FLY_DIE
|
||
|
||
MOVE *A11(PDEAD),A0,W ;IS THE PLAYER DEAD?
|
||
JRZ GAME_OVER_FLY_DIE ;BR = NOT ANYMORE
|
||
MOVK 3,A0 ; PAUSE DONE, LET SCORPROC SYNC UP
|
||
MOVE A0,*A11(PDEAD),W
|
||
GAME_OVER_FLY_DIE:
|
||
DIE
|
||
|
||
|
||
GAMEOVERINIT:
|
||
.LONG 0,0
|
||
.WORD 0,7FFFH
|
||
.LONG GAMEOVER,0,DUMCOLL
|
||
.WORD DMAWNZ,JUNKOID
|
||
|
||
**************************************************************************
|
||
* *
|
||
* ERASE_SCORE_MESS ERASE ANY SCORE AREA MESSAGES *
|
||
* *
|
||
* ENTRY *
|
||
* A2 POINTER TO PLAYER DATA AREA *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
ERASE_SCORE_MESS:
|
||
|
||
MMTM SP,A3,A4
|
||
MOVE *A2(PSCRAD),A3,L ; CENTER OF SCORE BOX
|
||
ADDI SCRERA,A3 ; ADD ON THE OFFSETS
|
||
|
||
MOVI SCRERAS,A4 ; SIZE OF SCORE BOX ERASE
|
||
CALLA BLNKAREA
|
||
MMFM SP,A3,A4
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* SCORAREA - OUTPUT THE SCORE AREA AND UPDATE ALL PLAYER STATUS *
|
||
* *
|
||
**************************************************************************
|
||
SCORAREA
|
||
CALLR UPSTAT ;UPDATE PLAYERS STATUS
|
||
CALLR MARQUEE
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* P0_P1_SCORE - PLOT THE SCORE AREA ON BOTH DISPLAY PAGES. *
|
||
* *
|
||
**************************************************************************
|
||
P0_P1_SCORE:
|
||
PUSH A0
|
||
CALLR SCORAREA
|
||
MOVK 1,A0
|
||
MOVE A0,@PAGE,W
|
||
CALLR SCORAREA
|
||
CLR A0
|
||
MOVE A0,@PAGE,W
|
||
PULL A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* SCOREHILITE - HILITE THE PLAYERS SCORE DISPLAY *
|
||
* A2 = PTR TO PLAYER DATA BLOCK *
|
||
* *
|
||
**************************************************************************
|
||
SCOREHILITE:
|
||
MMTM SP,A0,A1
|
||
CALLR PSENCL
|
||
MOVE *A2(PSCORE),A0,L
|
||
CALLR OUTSCRHI
|
||
CALLR OUTLIVES
|
||
CALLR OUTEGGS
|
||
; CALLA OUTTSHIRT
|
||
MMFM SP,A0,A1
|
||
RETS
|
||
**************************************************************************
|
||
* *
|
||
* SCORELOLITE - DIM THE PLAYERS SCORE DISPLAY *
|
||
* A2 = PTR TO PLAYER DATA BLOCK *
|
||
* *
|
||
**************************************************************************
|
||
SCORELOLITE:
|
||
PUSH A0
|
||
CALLR PSENCL
|
||
MOVE *A2(PSCORE),A0,L
|
||
CALLR OUTSCRLO
|
||
PULL A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* MARQUEE - OUTPUT THE MARQUEE, THIS INCLUDES THE CREDIT/ISLAND MESSAGE *
|
||
* *
|
||
**************************************************************************
|
||
MARQUEE:
|
||
MMTM SP,A0,A1,A2,A3,A4,A5,A6,A14
|
||
MOVI MARQTAB,A0
|
||
CLR A6
|
||
JRUC SSOUT1
|
||
|
||
**************************************************************************
|
||
* *
|
||
* G_CRED - OUTPUT "CREDITS: xx" DURING GAMEPLAY *
|
||
* A8 = PTR CREDITS STRING, READY FOR STRINGER *
|
||
* *
|
||
**************************************************************************
|
||
*ENTRY CALLED EVERY TIME A COIN IS PUT IN
|
||
G_CRED:
|
||
MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11
|
||
MOVE @STORY_MODE,A0,W
|
||
JRNZ CREDIT_LP
|
||
MOVE @GAME_STATE,A0,W
|
||
CMPI INDIAG,A0
|
||
JREQ G_CRED_X
|
||
CMPI INAMODE,A0
|
||
JREQ G_CRED_X
|
||
|
||
CREDIT_LP:
|
||
MOVB *A8,A4
|
||
JRZ G_CRED_X ;BR = ERROR IN CREDIT STRING
|
||
CMPI 20H,A4
|
||
JREQ CREDIT_FOUND
|
||
ADDK 8,A8
|
||
JRUC CREDIT_LP
|
||
CREDIT_FOUND:
|
||
ADDK 8,A8 ;RID 'O SPACE
|
||
MOVB *A8,A4
|
||
JRZ G_CRED_X
|
||
CMPI 20H,A4
|
||
JREQ CREDIT_FOUND
|
||
PUSH A8
|
||
MOVE @NPLAYERS,A3,W
|
||
SLL 5,A3
|
||
ADDI CRED_TAB,A3
|
||
MOVE *A3,A3,L
|
||
PUSH A3 ; PUSH THE BASE LOCATION
|
||
; MOVI CRDBOX,A3
|
||
MOVI CRDSIZE,A4
|
||
CALLA BLNKAREA ;CLEAR THE AREA
|
||
ADJUST ADJFREPL
|
||
JRZ CREDIT_CREDIT
|
||
MOVI FREE_MESS,A8 ;PUT OUT THE WORD "FREE"
|
||
JRUC CREDIT_PLOT
|
||
CREDIT_CREDIT:
|
||
MOVI CREDIT_MESS,A8 ;PUT OUT THE WORD "CREDIT"
|
||
CREDIT_PLOT:
|
||
CALLA LM_SETUP
|
||
PULL A9 ; PULL NEW STARTING LOCATION
|
||
PUSH A9 ; SAVE IT AGAIN
|
||
ADDI CRDTXT,A9 ; ADD ON TEXT OFFSET
|
||
JSRP LM_FINIS
|
||
PULL A9
|
||
PULL A8
|
||
ADDI CRDNUM,A9
|
||
*GNP CHANGE 5/24/90
|
||
MOVI [0F0FH,0101H],A5
|
||
JSRP STRCNRM ;NOW TELL HOW MANY
|
||
G_CRED_X:
|
||
MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11
|
||
RETS
|
||
|
||
CREDIT_MESS:
|
||
MESS_MAC RD5FONT,1,CRDX,CRDY,01010000H,STRCNRM,0
|
||
.STRING "CREDIT",0
|
||
.EVEN
|
||
|
||
FREE_MESS:
|
||
*GNP CHANGE 5/24/90
|
||
MESS_MAC RD5FONT,1,CRDX,CRDY,0F0F0101H,STRCNRM,0
|
||
.STRING "FREE",0
|
||
.EVEN
|
||
|
||
CRED_TAB
|
||
.LONG CRD1BOX, CRD2BOX, CRD3BOX, CRD4BOX
|
||
|
||
**************************************************************************
|
||
* *
|
||
* ISLAND_NUM - PRINT OUT THE CURRENT ISLAND NUMBER *
|
||
* *
|
||
**************************************************************************
|
||
ISLAND_NUM:
|
||
MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11
|
||
MOVE @NPLAYERS,A0,W
|
||
SLL 5,A0
|
||
ADDI ISLE_TAB,A0
|
||
MOVE *A0,A3,L ; LOCATION OF ISLE BOX
|
||
PUSH A3
|
||
; MOVI ISLEBOX,A3
|
||
MOVI ISLESIZE,A4
|
||
CALLA BLNKAREA ;CLEAR THE AREA
|
||
MOVI ISLE_MESS,A8 ;PUT OUT THE WORD "ISLAND"
|
||
CALLA LM_SETUP
|
||
PULL A9
|
||
PUSH A9
|
||
ADDI ISLETXT,A9
|
||
JSRP LM_FINIS
|
||
PULL A9
|
||
ADDI ISLENUM,A9
|
||
; MOVI ISLENUMXY,A9
|
||
*GNP CHANGE 5/24/90
|
||
MOVI [0F0FH,0101H],A5
|
||
MOVE @WAVE,A8,W
|
||
CALLA HEXTOASC
|
||
JSRP STRCNRM ;NOW TELL HOW MANY
|
||
MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11
|
||
RETS
|
||
|
||
|
||
ISLE_MESS:
|
||
MESS_MAC RD5FONT,1,ISLEX,ISLEY,01010000H,STRCNRM,0
|
||
.STRING "ISLAND",0
|
||
.EVEN
|
||
|
||
ISLE_TAB:
|
||
.LONG ISLE1BOX, ISLE2BOX, ISLE3BOX, ISLE4BOX
|
||
|
||
**************************************************************************
|
||
* *
|
||
* SSOUT - OUTPUT SOME SCORE/STATUS AREA PIECES VIA A TABLE. *
|
||
* FIRST ENTRY IS AREA TO BLANK *
|
||
* A0 = PTR TO TABLE *
|
||
* A6 = [Y,X] OFFSET TO ADD TO EVERYTHING (DAG FOR BLNKAREA) *
|
||
* RETURNS *
|
||
* A0 = PTING TO NEXT WORD AFTER THE TABLE *
|
||
* *
|
||
**************************************************************************
|
||
SSOUT:
|
||
MMTM SP,A0,A1,A2,A3,A4,A5,A6,A14
|
||
SSOUT1:
|
||
MOVE *A0+,A4,L
|
||
JRZ SSOUT_BLANK_SKIP
|
||
MOVE A6,A3
|
||
CALLA BLNKAREA
|
||
SSOUT_BLANK_SKIP:
|
||
CLR A1 ;CONSTANT:PALETTE
|
||
MOVI DMAWNZ,A5 ;DRAW
|
||
MOVE *A0+,A14,L ;KICK IT OFF COUSIN
|
||
SSOUTL:
|
||
MOVE *A0+,A3,L
|
||
ADDXY A6,A3
|
||
CALLA DTIME ;DO IT
|
||
MOVE *A0+,A14,L ;GET THE NEXT
|
||
JRNZ SSOUTL ;BR = DO IT AGAIN
|
||
MMFM SP,A0,A1,A2,A3,A4,A5,A6,A14
|
||
RETS
|
||
|
||
MARQTAB
|
||
.LONG 0
|
||
.LONG ROCKLINE
|
||
.LONG [35,0]
|
||
.LONG ROCKLINE
|
||
.LONG [35,158]
|
||
.LONG ROCKLINE
|
||
.LONG [35,316]
|
||
.LONG 0
|
||
|
||
P1SCOREAREA:
|
||
.LONG PBOXSIZ
|
||
.LONG P1BOXBONEh
|
||
.LONG [0,1]
|
||
.LONG P1BOXBONEh
|
||
.LONG [29,1]
|
||
.LONG P1BOXBONEv
|
||
.LONG [4,0]
|
||
.LONG P1BOXBONEv
|
||
.LONG [4,85]
|
||
.LONG 0
|
||
|
||
P2SCOREAREA:
|
||
.LONG PBOXSIZ
|
||
.LONG P2BOXBONEh
|
||
.LONG [0,1]
|
||
.LONG P2BOXBONEh
|
||
.LONG [29,1]
|
||
.LONG P2BOXBONEv
|
||
.LONG [4,0]
|
||
.LONG P2BOXBONEv
|
||
.LONG [4,85]
|
||
.LONG 0
|
||
|
||
P3SCOREAREA:
|
||
.LONG PBOXSIZ
|
||
.LONG P3BOXBONEh
|
||
.LONG [0,1]
|
||
.LONG P3BOXBONEh
|
||
.LONG [29,1]
|
||
.LONG P3BOXBONEv
|
||
.LONG [4,0]
|
||
.LONG P3BOXBONEv
|
||
.LONG [4,85]
|
||
.LONG 0
|
||
|
||
P4SCOREAREA:
|
||
.LONG PBOXSIZ
|
||
.LONG P4BOXBONEh
|
||
.LONG [0,1]
|
||
.LONG P4BOXBONEh
|
||
.LONG [29,1]
|
||
.LONG P4BOXBONEv
|
||
.LONG [4,0]
|
||
.LONG P4BOXBONEv
|
||
.LONG [4,85]
|
||
.LONG 0
|
||
|
||
*
|
||
*UPDATE ALL PLAYER STATUS AREAS
|
||
UPSTAT
|
||
MMTM SP,A2,A7
|
||
ALLPLYR UPDSL ;USES A7
|
||
MMFM SP,A2,A7
|
||
RETS
|
||
|
||
*
|
||
*UPDATE THE PLAYERS SCORE,LIVES & WHATEVER ELSE.
|
||
*A2 = PLAYER DATA STRUCTURE
|
||
UPDSL
|
||
MMTM SP,A0,A1
|
||
MOVE *A2(PPID),A0,W
|
||
ORI PINITIALPID,A0
|
||
CLR A1
|
||
NOT A1
|
||
CALLA EXISTP ;ARE THERE INITIALS BEING ENTERED?
|
||
JRNZ UPDSL_X ;BR = YES
|
||
CALLA PSENCL ;FIRST RE-INIT THE AREA
|
||
MOVE *A2(PSCORE),A0,L ;GET THE SCORE IN A0
|
||
CALLA OUTSCR ;AND OUTPUT IT
|
||
CALLA OUTLIVES
|
||
CALLR OUTEGGS
|
||
; CALLA OUTTSHIRT
|
||
UPDSL_X:
|
||
MMFM SP,A0,A1
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PSENCL - CREATE THE PLAYER SCORE ENCLOSURE *
|
||
* A2 = PLAYER DATA *
|
||
* *
|
||
**************************************************************************
|
||
PSENCL:
|
||
MMTM SP,A0,A6
|
||
MOVE *A2(PSCRAD),A6,L
|
||
MOVI PBOXOF,A0
|
||
ADDXY A0,A6 ;STARTING BOX POINT
|
||
|
||
CMPI P1DATA,A2
|
||
JRNE PSENCL_CKP2
|
||
MOVI P1SCOREAREA,A0
|
||
JRUC PSENCL_BUILD
|
||
PSENCL_CKP2:
|
||
CMPI P2DATA,A2
|
||
JRNE PSENCL_CKP3
|
||
MOVI P2SCOREAREA,A0
|
||
JRUC PSENCL_BUILD
|
||
PSENCL_CKP3:
|
||
CMPI P3DATA,A2
|
||
JRNE PSENCL_CKP4
|
||
MOVI P3SCOREAREA,A0
|
||
JRUC PSENCL_BUILD
|
||
PSENCL_CKP4:
|
||
CMPI P4DATA,A2
|
||
JRNE PSENCL_X
|
||
MOVI P4SCOREAREA,A0
|
||
PSENCL_BUILD:
|
||
CALLR SSOUT
|
||
PSENCL_X:
|
||
MMFM SP,A0,A6
|
||
RETS
|
||
|
||
|
||
|
||
*
|
||
*EUGENE'S SCORE ROUTINES
|
||
*
|
||
*BCD ADD ROUTINE
|
||
*A0=SCORE (8 DIGIT BCD) 32 BITS
|
||
*A1=NUMBER TO ADD TO A0 (8 DIGIT BCD)
|
||
*PACKED BCD FORMAT 4-BITS/ DIGIT
|
||
BCDADD:
|
||
MMTM SP,A1,A3,A4,A5,A6
|
||
MOVK 8,A5 ;DO 8 DIGITS
|
||
CLRC ;CLEAR THE CARRY
|
||
MOVK 0Ah,A6
|
||
BCDLP:
|
||
MOVK 0Fh,A3
|
||
MOVK 0Fh,A4
|
||
AND A1,A3 ;MASK GARBAGE
|
||
AND A0,A4
|
||
ADDC A3,A4
|
||
CMP A6,A4 ;NEED TO ADJUST?
|
||
JRLO BCDAD1
|
||
ADDK 6,A4
|
||
SRL 4,A0
|
||
SLL 28,A4
|
||
ADD A4,A0
|
||
SRL 4,A1
|
||
SETC
|
||
DSJS A5,BCDLP
|
||
JRUC BCDADX
|
||
BCDAD1:
|
||
SRL 4,A0
|
||
SLL 28,A4
|
||
ADD A4,A0
|
||
SRL 4,A1
|
||
CLRC
|
||
DSJS A5,BCDLP
|
||
BCDADX:
|
||
MMFM SP,A1,A3,A4,A5,A6
|
||
RETS
|
||
|
||
*
|
||
*PLAYER SCORE ROUTINE
|
||
*A1=SCORE VALUE
|
||
*A2=PLAYER INDEX
|
||
SCORE:
|
||
MMTM SP,A0,A2
|
||
MOVE @GAME_STATE,A0,W
|
||
CMPI INAMODE,A0
|
||
JREQ SCOREX ;NO SCORING IN ATTRACT MODE
|
||
MOVE *A2(PDRONEFLG),A0,W
|
||
JRNZ SCOREX
|
||
MOVE *A2(PSCORE),A0,L ;GET SCORE
|
||
CALLR BCDADD ;ADD IN NEW VALUE
|
||
CALLR REPCK ;CHECK REPLAY
|
||
MOVE A0,*A2(PSCORE),L ;STORE SCORE
|
||
CALLR CHECK_INITIALS ;ARE INITIALS BEING ENTERED
|
||
JRNZ SCOREX ;BR = YES, THEN DON'T SCORE
|
||
CALLR OUTSCR ;OUTPUT CURRENT PLAYER SCORE
|
||
SCOREX
|
||
MMFM SP,A0,A2
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* SCORE_IF_ACTIVE - GIVE THE PLAYER THIS SCORE IFF HE IS ACTIVE. *
|
||
* A1 = BCD SCORE VALUE *
|
||
* A2 = PTR TO PLAYER DATA *
|
||
* *
|
||
**************************************************************************
|
||
SCORE_IF_ACTIVE:
|
||
PUSH A0
|
||
MOVE *A2(POBJ),A0,L
|
||
JRZ SCORE_IA_X
|
||
CALLR SCORE
|
||
SCORE_IA_X:
|
||
PULL A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CHECK_INITIALS - DETERMINE IF A PLAYER IS ENTERING HIS INITIALS IN *
|
||
* HIS SCORE DISPLAY. *
|
||
* A2 = PTR TO PLAYER DATA AREA *
|
||
* RETURNS: *
|
||
* Z = NOT ENTERING *
|
||
* NZ = ENTERING *
|
||
* *
|
||
**************************************************************************
|
||
CHECK_INITIALS:
|
||
MMTM SP,A0,A1
|
||
MOVE *A2(PPID),A0,W
|
||
ORI PINITIALPID,A0
|
||
CLR A1
|
||
NOT A1
|
||
CALLA EXISTP
|
||
MMFM SP,A0,A1
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* REPCK - CHECK TO SEE IF A PLAYER HAS SCORED A REPLAY AND IF SO *
|
||
* AWARD A NEW DUDE. *
|
||
* A0 = CURRENT PLAYER SCORE *
|
||
* A2 = PLAYER DATA AREA *
|
||
* RETURNS: *
|
||
* NOTHING *
|
||
* NOTE: DESTROYS A14 *
|
||
* *
|
||
**************************************************************************
|
||
REPCK
|
||
MMTM SP,A0,A1,A3,A4
|
||
|
||
MOVE *A2(PEXTRAS),A1,W
|
||
JRZ REPCKX ;BR = LAST ONE EXTINGUISHED
|
||
|
||
MOVE *A2(PNEXTREP),A1,L
|
||
JRZ REPCKX ;0 = NO EXTRA DUDES
|
||
|
||
CLR A3 ;KEEP COUNT OF HOW MANY LIVES WE OWE
|
||
MOVE A0,A4 ;KEEP THE SCORE HERE BECAUSE OF BCDADD
|
||
REPCKLP:
|
||
CMP A1,A4 ;HAVE WE EXCEEDED THIS LEVEL?
|
||
JRLO REPCK_CASH_OUT ;BR = NO, CASH OUT
|
||
|
||
ADJUST ADJEXTRA ;GET EXTRA MAN EVERY ADJUSTMENT
|
||
|
||
CALLR BCDADD
|
||
|
||
MOVE A0,A1
|
||
DECM *A2(PEXTRAS),W
|
||
JRNZ REPCK1
|
||
CLR A1 ;NO MORE REPLAYS JOE
|
||
REPCK1
|
||
MOVE A1,*A2(PNEXTREP),L ;NEW REPLAY LEVEL
|
||
SOUND1 FREE_SND
|
||
MOVE A4,A0 ;RESTORE THE SCORE
|
||
INC A3 ;INCREMENT THE LIFE COUNT
|
||
INCM *A2(PEXTRAEARN),W ;ADD ONE TO THE EXTRA MEN EARNED THIS WAVE
|
||
MOVE A1,A1
|
||
JRNZ REPCKLP ;CHECK FOR MORE
|
||
REPCK_CASH_OUT:
|
||
MOVE A3,A0
|
||
JRZ REPCKX ;WE OWE HIM NOTHING
|
||
CALLR ADDNLIFE ;PAY THE MAN
|
||
*
|
||
MOVE A0,A1
|
||
MOVI AUDDEARNED,A0
|
||
CALLA AUD ;COUNT IT OUT
|
||
REPCKX:
|
||
MMFM SP,A0,A1,A3,A4
|
||
RETS
|
||
FREE_SND .WORD >F3E0,>3C,>80B3,0 ;FREE MAN SOUND
|
||
|
||
**************************************************************************
|
||
* *
|
||
* OUTSCRHI - OUTPUT SCORE TO SCREEN, ALWAYS BRIGHT *
|
||
* A0 = PLAYER SCORE *
|
||
* A2 = PLAYER DATA AREA *
|
||
* *
|
||
**************************************************************************
|
||
OUTSCRHI:
|
||
MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A14
|
||
MOVI 0D0D0000H,A1 ;BRIGHTEN THE SCENE
|
||
JRUC OUTSCRG
|
||
**************************************************************************
|
||
* *
|
||
* OUTSCRLO - OUTPUT SCORE TO SCREEN, ALWAYS DIM *
|
||
* A0 = PLAYER SCORE *
|
||
* A2 = PLAYER DATA AREA *
|
||
* *
|
||
**************************************************************************
|
||
OUTSCRLO:
|
||
MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A14
|
||
MOVI 05050000H,A1 ;DIMMER COLOR
|
||
JRUC OUTSCRG
|
||
**************************************************************************
|
||
* *
|
||
* OUTSCR - OUTPUT SCORE TO SCREEN, BRIGHT OR DIM DEPENDING ON PLAYER *
|
||
* A0 = PLAYER SCORE *
|
||
* A2 = PLAYER DATA AREA *
|
||
* *
|
||
**************************************************************************
|
||
OUTSCR:
|
||
MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A14
|
||
MOVE @STORY_MODE,A14,W
|
||
JRNZ OUTSCRD
|
||
MOVE *A2(PENTER),A14,W
|
||
JRNZ OUTSCRH ;BR = PLAYER WILL ENTER SOON
|
||
MOVE *A2(POBJ),A14,L
|
||
JRZ OUTSCRD
|
||
OUTSCRH:
|
||
MOVI 0D0D0000H,A1 ;BRIGHTEN THE SCENE
|
||
JRUC OUTSCRG
|
||
OUTSCRD:
|
||
MOVI 05050000H,A1 ;DIMMER COLOR FOR NON-ACTIVE PLAYER
|
||
*
|
||
*OUTSCR - ENTRY POINT WITH FIXED CONSTANT COLOR IN A1
|
||
OUTSCRG:
|
||
MOVK 8,A6 ;DIGIT COUNT
|
||
MOVE *A2(PSCRAD),A3,L ;PLAYER SCORE ADDRESS
|
||
MOVE @PAGE,A14,W
|
||
JRZ OUTSCRP0
|
||
MOVI PAGE1XY,A14
|
||
ADDXY A14,A3 ;OFFSET TO PAGE 1
|
||
OUTSCRP0
|
||
MOVI SCRSPC,A8 ;SPACING BETWEEN DIGITS
|
||
CLR A7 ;INIT BLANKING FLAG
|
||
MOVI 9|8000H,A5 ;CONTROL REGISTER
|
||
|
||
MOVE A0,A14 ;STORE THE SCORE HERE
|
||
|
||
MOVE *A2(PPALID),A4,L
|
||
MOVE A4,A0
|
||
CALLA FINDPAL ;MAKE SURE IT HAS A PALETTE
|
||
JRNZ OUTSC01 ;BR = THERE EXISTS A PALETTE
|
||
MOVE A4,A0
|
||
CALLA GETFPAL ;MAKE A PALETTE EXIST
|
||
OUTSC01
|
||
MOVX A0,A1
|
||
*NOTE:A2 GETS DESTROYED UPON THE FIRST ITERATION OF THIS LOOP
|
||
OUTSCL:
|
||
MOVE A14,A0
|
||
SRL 28,A0
|
||
JRNE OUTSC1 ;NON-ZERO DIGIT
|
||
CMPI 2,A6
|
||
JRLS OUTSC1 ;LAST DIGITS - OUTPUT ANYWAY
|
||
MOVE A7,A7 ;BLANKING OVER?
|
||
JREQ OUTSC2 ;NO
|
||
OUTSC1:
|
||
INC A7 ;BLANKING IS OVER
|
||
SLL 7,A0 ;MULTIPLY BY 128
|
||
ADDI SPFONT0,A0 ;ADDRESS OF IMAGE HEADER
|
||
MOVE *A0(ISAG),A4,L ;GET STARTING ADDRESS
|
||
MOVE *A0(ISIZE),A2,L ;GET THE SIZE
|
||
CALLA DMAN ;OUTPUT THE SUCKER
|
||
OUTSC2:
|
||
ADDXY A8,A3 ;SPACE TO NEXT DIGIT
|
||
SLL 4,A14
|
||
DSJ A6,OUTSCL
|
||
|
||
MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A14
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PLAYER LIFE ROUTINES *
|
||
* *
|
||
**************************************************************************
|
||
|
||
**************************************************************************
|
||
* *
|
||
* AWARD_EXTRAS - AWARD ONE EXTRA MAN TO ALL ACTIVE PLAYERS. *
|
||
* NOTE: CALL WITH JSRP *
|
||
* *
|
||
**************************************************************************
|
||
AWARD_EXTRAS
|
||
ALLPLYR AWEB
|
||
RETP
|
||
|
||
**************************************************************************
|
||
* *
|
||
* AWEB - AWARD ONE EXTRA MAN TO PLAYER IF ACTIVE AT THE *
|
||
* TIME OF CALLING. *
|
||
* A2 = PTR TO PLAYER DATA *
|
||
* *
|
||
**************************************************************************
|
||
AWEB
|
||
PUSH A0
|
||
MOVE *A2(POBJ),A0,L
|
||
JRZ AWEB_X
|
||
CALLR ADDLIFE
|
||
AWEB_X
|
||
PULL A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* ADD LIFE *
|
||
* A0 = # OF LIVES TO ADD *
|
||
* A2 = PLINDX=PLAYER DATA AREA *
|
||
* *
|
||
**************************************************************************
|
||
*
|
||
*ADD ONE LIFE
|
||
ADDLIFE:
|
||
MOVK 1,A0
|
||
*
|
||
*ADD N LIFE(VES)
|
||
ADDNLIFE
|
||
MMTM SP,A0,A1,A3
|
||
MOVE *A2(PLIVES),A1,W ;CURRENT # OF LIVES
|
||
ADD A0,A1
|
||
MOVE A1,*A2(PLIVES),W
|
||
CALLR OUTLIVES
|
||
; CALLR OUTTSHIRT
|
||
MMFM SP,A0,A1,A3
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* SUBxLIFE SUBTRACT LIFE(VES) *
|
||
* A0 = # OF LIVES TO SUBTRACT *
|
||
* A2 = PLINDX=PLAYER DATA AREA *
|
||
* RETURN(S): *
|
||
* CARRY SET=NO MORE LIVES *
|
||
* *
|
||
**************************************************************************
|
||
*
|
||
*SUBTRACT ONE LIFE
|
||
SUBLIFE:
|
||
MOVK 1,A0
|
||
*
|
||
*SUBTRACT N LIFE(VES)
|
||
SUBNLIFE
|
||
MMTM SP,A0,A1
|
||
MOVE *A2(PLIVES),A1,W ;GET REMAINING # OF LIVES
|
||
JRLE SUBLF1 ;WE'VE HIT BOTTOM
|
||
SUB A0,A1
|
||
MOVE A1,*A2(PLIVES),W
|
||
CALLR OUTLIVES ;AND DISPLAY THE REST
|
||
; CALLR OUTTSHIRT
|
||
MOVE A1,A1 ;IS THAT IT?
|
||
JRLE SUBLF1 ;BR = YES
|
||
CLRC
|
||
JRUC SUBLFX
|
||
SUBLF1:
|
||
SETC
|
||
SUBLFX:
|
||
MMFM SP,A0,A1
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* OUTPUT NUMBER OF PLAYER LIVES *
|
||
* A2=PLINDX=PLAYER DATA AREA *
|
||
* *
|
||
**************************************************************************
|
||
OUTLIVES:
|
||
MMTM SP,A0,A3,A4,A5,A6,A7,A10,A14
|
||
|
||
MOVE @STORY_MODE,A0,W
|
||
JRNZ OUTLIVEX
|
||
|
||
MOVE *A2(PDRONEFLG),A0,W
|
||
JRNZ OUTLIVEX
|
||
|
||
MOVE @PAGE,A14,W
|
||
JRZ OUTLIVESP0
|
||
MOVI PAGE1XY,A10
|
||
JRUC OUTLIVESGO
|
||
OUTLIVESP0:
|
||
CLR A10
|
||
OUTLIVESGO:
|
||
MOVE *A2(PLICON),A14,L ;GET THE ICON
|
||
|
||
MOVE *A2(PSCRAD),A3,L ;PLAYER SCORE ADDRESS
|
||
MOVI PLIFECOF,A0
|
||
ADDXY A0,A3 ;ADD OFFSET FOR ACCOUNT CLEAR
|
||
ADDXY A10,A3 ;ADD THE PAGE OFFSET
|
||
MOVI PLIFESIZ,A4 ;SIZE OF LIFE ACCOUNTING AREA
|
||
|
||
CALLA BLNKAREA ;ZAP IT
|
||
|
||
*OUTPUT THE CURRENT # OF LIVES
|
||
MOVE *A2(PLIVES),A7,W ;CURRENT # OF LIVES
|
||
JRLE OUTLIVEX ;BR = NO LIVES
|
||
MOVE *A2(PDINOCNT),A0,W
|
||
SUB A0,A7 ;NOW ADJUST FOR THE NUMBER OF DINOS
|
||
JRLE OUTLIVEX ;BR = DEFINITELY OUT OF LIVES NOW
|
||
|
||
**** MOVE *A2(PPALID),A0,L
|
||
**** CALLA FINDPAL ;MAKE SURE IT HAS A PALETTE
|
||
**** JRNZ OUTLIVPL ;BR = THERE EXISTS A PALETTE
|
||
**** MOVE *A2(PPALID),A0,L
|
||
**** CALLA GETFPAL ;MAKE A PALETTE EXIST
|
||
****OUTLIVPL:
|
||
CALLR GET_ICON_PAL
|
||
|
||
MOVE *A2(PSCRAD),A3,L ;PLAYER SCORE ADDRESS
|
||
MOVI PLIFEOF,A0
|
||
ADDXY A0,A3 ;A3 = STARTING SCREEN ADDRESS OF LIVES
|
||
ADDXY A10,A3 ;ADD PAGE OFFSET
|
||
|
||
MOVI LIFESPC,A4 ;SPACING BETWEEN LIVES
|
||
MOVK NLIVES,A6
|
||
MOVI DMAWNZ,A5
|
||
OUTLIVE5
|
||
CALLA DTIME ;DMA THE NEW LIFE COUNT
|
||
ADDXY A4,A3
|
||
DEC A6 ;MAX ROCKET COUNT
|
||
DSJNE A7,OUTLIVE5
|
||
|
||
OUTLIVEX
|
||
MMFM SP,A0,A3,A4,A5,A6,A7,A10,A14
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* GET_ICON_PAL - ROUTINE TO GET THE NUMBER OF THE ICON PALETTE FOR *
|
||
* THIS PLAYER. IF IT DOES NOT EXIST, MAKE IT. *
|
||
* A2 = PTR TO PLAYER *
|
||
* RETURNS *
|
||
* A0 = PALETTE NUMBER FOR USE IN OPAL *
|
||
* *
|
||
**************************************************************************
|
||
GET_ICON_PAL
|
||
MOVE *A2(PPALID),A0,L
|
||
CALLA FINDPAL ;MAKE SURE IT HAS A PALETTE
|
||
JRNZ GIP_X ;BR = THERE EXISTS A PALETTE
|
||
MOVE *A2(PPALID),A0,L
|
||
CALLA GETFPAL ;MAKE A PALETTE EXIST
|
||
GIP_X
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* SENDOBJ - SEND AN OBJECT TO A PLAYERS SCORE AREA AND AWARD A SCORE *
|
||
* A0 = SOUND TO MAKE (IF = 0 THEN NO SOUND) *
|
||
* A1 = SCORE TO GIVE (IF = 0 THEN NO SCORE) *
|
||
* A2 = PTR TO THE PLAYER DATA AREA *
|
||
* A8 = PTR TO THE OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
SENDOBJ
|
||
PUSH A1
|
||
CALLR SCORE
|
||
CLR A1
|
||
CALLR SEND2SCR
|
||
PULL A1
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* SEND2SCR - SEND AN OBJECT AND IT'S SCORE TO A PLAYERS SCORE AREA. *
|
||
* A0 = SOUND TO MAKE (IF = 0 THEN NO SOUND) *
|
||
* A1 = SCORE TO GIVE (IF = 0 THEN NO SCORE) *
|
||
* A2 = PTR TO PLAYER DATA *
|
||
* A8 = OBJECT *
|
||
* RETURNS: *
|
||
* REGS INTACT *
|
||
* *
|
||
**************************************************************************
|
||
SEND2SCR:
|
||
MMTM SP,A0,A1,A7,A9,A10,A11
|
||
MOVE A0,A9
|
||
MOVE A1,A10
|
||
MOVE A2,A11 ;ALL IN PROPER PROCESS REGS
|
||
CREATE INDPIDE,OBJSCORE
|
||
JRNE SEND2OK ;BR = PROCESS WAS CREATED W/SUCCESS
|
||
CALLA DELETE_OBJ ;JUST DELETE THE OBJECT
|
||
MOVE A10,A1
|
||
JRZ S2_NOSCORE ;BR = NO SCORE TO GIVE
|
||
CALLR SCORE ;SCORE THE POINTS MAN
|
||
S2_NOSCORE:
|
||
MOVE A9,A0
|
||
JRZ SEND2OK ;BR = NO SOUND TO MAKE
|
||
CALLA ONESND ;AND MAKE A SOUND
|
||
SEND2OK:
|
||
MMFM SP,A0,A1,A7,A9,A10,A11
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* OBJSCORE - PROCESS TO SEND AN OBJECT TO THE PLAYERS SCORE AREA *
|
||
* ALONG WITH A VISIBLE SCORE VALUE. *
|
||
* A8 = OBJECT *
|
||
* A9 = SOUND (IF = 0 THEN NO SOUND) *
|
||
* A10 = SCORE TO AWARD (IF = 0 THEN NO SCORE) *
|
||
* A11 = PTR TO PLAYER DATA *
|
||
* *
|
||
* NOTE: OBJECT PASSED MUST BE OFF ALL SUPPLEMENTAL LISTS *
|
||
* CREATE AS A WAVE-END-WAIT PROCESS *
|
||
* *
|
||
**************************************************************************
|
||
OBJSCORE:
|
||
MOVE A8,A5
|
||
MOVE *A5(ODMAXY),A8,L
|
||
MOVE *A5(OSIZEX),A4,W
|
||
SRL 1,A4
|
||
ADDXY A4,A8
|
||
MOVE A11,A2
|
||
CREATE INDPIDE,SCOREOBJ
|
||
JRNZ OBJSCRFLY ;O.K. WE'VE CREATED THE SCORE SEND
|
||
MOVE A10,A1 ;FAILURE TO CREATE
|
||
JRZ OS_NOSCORE ;BR = NO SCORE
|
||
CALLA SCORE ;JUST SCORE
|
||
OS_NOSCORE:
|
||
MOVE A9,A0
|
||
JRZ OBJSCRFLY ;BR = NO SOUND
|
||
CALLA ONESND ;AND SOUND
|
||
OBJSCRFLY:
|
||
MOVE A5,A8
|
||
MOVI 40,A4 ;1/2 SECOND AIR TIME
|
||
JSRP FLYTOPLC
|
||
CALLA DELETE_OBJ
|
||
DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* SCOREOBJ - PROCESS TO CREATE A SCORE OBJECT AND FLOAT IT TO THE PLAYER *
|
||
* SCORE AREA. THIS PROCESS MAKES THE SOUND AND ALL. *
|
||
* A8 = [Y,X] POSITION TO START SCORE OBJECT *
|
||
* A9 = SOUND (IF = 0 THEN NO SOUND) *
|
||
* A10 = SCORE TO AWARD (IF = 0 THEN NO SCORE) *
|
||
* A11 = PTR TO PLAYER DATA *
|
||
* *
|
||
*NOTE: CREATE AS A WAVE-END-WAIT PROCESS *
|
||
* *
|
||
**************************************************************************
|
||
SCOREOBJ:
|
||
MOVI SCORETAB,A1
|
||
JRUC SCOBJ_EXE
|
||
|
||
*
|
||
*SCORE2XOBJ - SAME AS SCOREOBJ EXCEPT USES A DIFFERENT LOOK-UP TABLE
|
||
SCORE2XOBJ:
|
||
MOVI SCORETAB2X,A1
|
||
JRUC SCOBJ_EXE
|
||
|
||
SCOBJ_EXE
|
||
MOVE A9,A0
|
||
CALLA ONESND ;LET'S MAKE SOME NOISE
|
||
MOVE A10,A10
|
||
JRZ SO_DIE ;BR = NO SCORE TO MAKE
|
||
MOVE A10,A9 ;KEEP THE SCORE HERE
|
||
SO_SCLP:
|
||
MOVE *A1+,A4,L
|
||
JRZ SO_SCORE ;THE SCORE IMAGE CANNOT BE FOUND
|
||
CMP A4,A9
|
||
JREQ SO_SFOUND ;BR = FOUND A SCORE
|
||
ADDK 32,A1
|
||
JRUC SO_SCLP ;SEARCH AGAIN
|
||
|
||
SO_SFOUND:
|
||
MOVE *A1,A1,L ;GET THE IMAGE
|
||
MOVE A8,A10
|
||
|
||
CALLA GETOBJ ;GET AN OBJECT FOR THE SCORE
|
||
JRZ SO_SCORE
|
||
MOVE A0,A8
|
||
MOVE *A11(PPALID),A0,L
|
||
CALLA GETFPAL
|
||
MOVE A0,@CURPAL,W
|
||
MOVE A8,A0
|
||
MOVI SCRIMGINIT,A14
|
||
CALLA STFOBJ
|
||
|
||
MOVE *A8(OFLAGS),A4,W
|
||
CALLA ANI ;ANIMATE IN THE SCORE
|
||
MOVE A10,A3
|
||
CALLA OBJ_TO_PNT
|
||
CALLA INSOBJ
|
||
SLEEP 20 ;PAUSE THE SCORE FOR A SECOND
|
||
MOVE A11,A2 ;GET THE PLINDX
|
||
MOVI 100,A4
|
||
JSRP FLYTOPLC
|
||
CALLA DELETE_OBJ ;RID O' THE OBJECT
|
||
SO_SCORE
|
||
MOVE A9,A1
|
||
MOVE A11,A2 ;GET THE PLINDX
|
||
CALLA SCORE ;TALLY THIS SCORE
|
||
SO_DIE:
|
||
DIE
|
||
|
||
*
|
||
*GENERIC SCORE IMAGE INIT TABLE
|
||
SCRIMGINIT:
|
||
.LONG 0,0
|
||
.WORD 0,2000H
|
||
.LONG SCR1000,0,DUMCOLL
|
||
.WORD DMAWNZ,JUNKOID
|
||
|
||
*
|
||
*TABLE OF BCD SCORES AND THEIR ASSOCIATED IMAGES
|
||
* .LONG BCD SCORE, PTR TO IMAGE
|
||
* .LONG 0
|
||
SCORETAB
|
||
*GNP CHANGE 5/25/90
|
||
.LONG 500H,SCR500
|
||
.LONG 1000H,SCR1000,2000H,SCR2000,3000H,SCR3000,4000H,SCR4000
|
||
.LONG 5000H,SCR5000,6000H,SCR6000,7000H,SCR7000,8000H,SCR8000
|
||
.LONG 9000H,SCR9000,10000H,SCR10000,15000H,SCR15000
|
||
.LONG 20000H,SCR20000,25000H,SCR25000,40000H,SCR40000
|
||
.LONG 80000H,SCR80000,0
|
||
|
||
SCORETAB2X
|
||
*GNP CHANGE 5/25/90
|
||
.LONG 500H,SCR500
|
||
.LONG 1000H,SCR1000,2000H,SCR2000,3000H,SCR3000,4000H,SCR4000
|
||
.LONG 5000H,SCR5000,6000H,SCR6000,7000H,SCR7000,8000H,SCR8000
|
||
.LONG 9000H,SCR9000,10000H,SCR10000,15000H,SCR15000
|
||
.LONG 20000H,SCR2X10K,25000H,SCR25000,40000H,SCR2X20K
|
||
.LONG 80000H,SCR2X40K,160000H,SCR2X80K,0
|
||
|
||
**************************************************************************
|
||
* *
|
||
* FLYTOPL - SEND AN OBJECT TO THE PLAYER STATUS AREA. *
|
||
* A2 = PTR TO PLAYER DATA *
|
||
* A4 = TRAVEL TIME IN TICKS *
|
||
* A8 = PTR TO OBJECT *
|
||
* RETURNS WHEN THE OBJECT HAS MADE IT. *
|
||
* NOTE: CALL WITH JSRP *
|
||
* *
|
||
**************************************************************************
|
||
FLYTOPL
|
||
CLR A0
|
||
JRUC FLYTOPLG
|
||
FLYTOPLC
|
||
MOVI PBOXSIZ,A0
|
||
MOVY A0,A1
|
||
ZEXT A0
|
||
SRL 1,A0
|
||
SRL 17,A1
|
||
SLL 16,A1
|
||
MOVY A1,A0
|
||
JRUC FLYTOPLG
|
||
*ENTRYPOINT:
|
||
*A0 = [Y,X] OFFSET TO ADD TO PSCRAD
|
||
FLYTOPLG
|
||
PUSHP A2
|
||
CALLA PSTOP
|
||
MOVE *A2(PSCRAD),A3,L ;SET UP FOR EFFECT
|
||
ADDXY A0,A3
|
||
MOVE A8,A0
|
||
CALLA GSCRNREL
|
||
SRL 16,A1
|
||
MOVX A1,A2
|
||
CALLA SLINEVEL ;GET THE VELOCITIES
|
||
FLYTOP1
|
||
MOVE A1,*A8(OXVEL),L
|
||
MOVE A2,*A8(OYVEL),L ;STUFF THE VELOCITIES
|
||
MMTM A12,A1,A2
|
||
MOVE A8,A0
|
||
CALLA SCRNRELV ;MAKE THE VELOCITIES SCREEN RELATIVE
|
||
SLEEP 1
|
||
MMFM A12,A1,A2
|
||
CALLA SCRTST ;CHECK FOR OFF SCREEN
|
||
JREQ FLYTOP1
|
||
PULLP A2
|
||
RETP
|
||
|
||
**************************************************************************
|
||
* *
|
||
* OUTEGGS - ROUTINE TO OUTPUT THE NUMBER OF PLAYER EGGS LEFT. *
|
||
* A2 = PTR TO PLAYER DATA AREA *
|
||
* *
|
||
**************************************************************************
|
||
OUTEGGS
|
||
MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11
|
||
|
||
MOVE @STORY_MODE,A14,W
|
||
JRNZ OUTEGGX
|
||
|
||
MOVE @EGG_SCHEME,A14,W ;ARE WE IN COMPLEX EGG MODE?
|
||
JRZ OUTEGGX ;BR = NO
|
||
|
||
MOVE *A2(PSCRAD),A3,L ;PLAYER SCORE ADDRESS
|
||
MOVI PEGGCOF,A0
|
||
ADDXY A0,A3 ;ADD OFFSET FOR ACCOUNT CLEAR
|
||
MOVI PEGGSIZ,A4 ;SIZE OF LIFE ACCOUNTING AREA
|
||
CALLA BLNKAREA ;ZAP IT
|
||
|
||
MOVE @EGG_LIST,A14,L ;NO EGG PLOT IF THERE IS A SPECIFIC
|
||
JRNZ OUTEGGX ;LIST!
|
||
|
||
MOVE @BONUS_WAVE,A14,W ;BONUS WAVE?
|
||
JRNZ OUTEGGX ;BR = NO EGG OUTPUT
|
||
|
||
MOVE *A2(POBJ),A14,L
|
||
JRZ OUTEGGX
|
||
|
||
CALLA GPLAYNUM
|
||
SLL 5,A0
|
||
ADDI DINO_EGG_TAB,A0
|
||
MOVE *A0,A14,L
|
||
|
||
MOVE *A14(ISIZEX),A9,W
|
||
ADDI [3,2],A9 ;START NUMBERS HERE
|
||
ADDXY A3,A9
|
||
|
||
MOVI DMAWNZ,A5
|
||
CALLA DTIME ;PLOP THE EGG THING
|
||
|
||
*OUTPUT THE CURRENT # OF EGGS LEFT
|
||
MOVE @WAVEEGGS,A8,W
|
||
MOVE *A2(PEGGS),A14,W
|
||
SUB A14,A8
|
||
JRGE OUTEGG_NUM
|
||
CLR A8
|
||
OUTEGG_NUM
|
||
CALLR GET_ICON_PAL ;GET THE CORRECT PALETTE FOR THIS
|
||
MOVI 0E0E0000H,A5
|
||
MOVX A0,A5
|
||
MOVK 1,A10
|
||
MOVI RD7FONT,A11
|
||
CALLA HEXTOASC ;CONVERT
|
||
CLR A0
|
||
JSRP STRLNRM
|
||
OUTEGGX
|
||
MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11
|
||
RETS
|
||
|
||
DINO_EGG_TAB
|
||
.LONG rexegg,bloopegg,spikeegg,gwenegg
|
||
|
||
*STOP WATCH CODE COMMENTED OUT 8/24/90
|
||
.IF 0
|
||
**************************************************************************
|
||
* *
|
||
* STOP_WATCH - PROCESS TO OUPUT THE NUMBER OF SECONDS LEFT FOR FAST *
|
||
* FINISH. *
|
||
* *
|
||
**************************************************************************
|
||
STOP_WATCH:
|
||
ALLPLYR UPDATE_TIME
|
||
SLOOP 60,STOP_WATCH
|
||
|
||
**************************************************************************
|
||
* *
|
||
* OUT_TIME - SPECIAL ROUTINE TO OUTPUT THE TIMER. THIS ONE PUSHES *
|
||
* REGISTERS. TO BE CALLED BY ANYONE *
|
||
* NOTE: A14 IS TRASHED *
|
||
* *
|
||
**************************************************************************
|
||
OUT_TIME:
|
||
MMTM SP,A0,A1,A2,A3,A4,A5,A6,A8,A9,A10,A11
|
||
CALLR UPDATE_TIME
|
||
MMFM SP,A0,A1,A2,A3,A4,A5,A6,A8,A9,A10,A11
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* OUT_TIME - OUTPUT A PLAYERS CURRENT TIME *
|
||
* A2 = PLAYER DATA *
|
||
* NOTE: TRASHES A-FILE REGISTERS EXCEPT A7. *
|
||
* *
|
||
**************************************************************************
|
||
UPDATE_TIME:
|
||
MOVE *A2(POBJ),A14,L
|
||
JRZ UP_TIME_X
|
||
|
||
MOVE @STORY_MODE,A14,W
|
||
JRNZ UP_TIME_X
|
||
MOVE *A2(PDRONEFLG),A14,W
|
||
JRNZ UP_TIME_X
|
||
*
|
||
MOVE *A2(PINSTRUCT),A14,W
|
||
JRNZ UP_TIME_X
|
||
|
||
MOVE *A2(PSCRAD),A3,L
|
||
ADDI STOPW,A3 ;THIS IS WHERE WE'LL PUT IT
|
||
MOVE A3,A9
|
||
SUBK 1,A9
|
||
MOVI STOPWSIZ,A4
|
||
CALLA BLNKAREA
|
||
|
||
*GNP CHANGES 5/14/90
|
||
**** MOVI 1923,A8
|
||
MOVE @FAST_TIME,A8,W
|
||
*END GNP CHANGES
|
||
MOVE *A2(PWAVETIME),A0,L
|
||
SUB A0,A8
|
||
JRN UP_TIME_X
|
||
SRL 6,A8 ;DIVIDE ROUGHLY BY 62.5 FOR SECONDS
|
||
|
||
MOVE *A2(PPALID),A0,L
|
||
CALLA FINDPAL ;MAKE SURE IT HAS A PALETTE
|
||
MOVI 0E0E0000H,A5
|
||
MOVX A0,A5
|
||
MOVK 1,A10
|
||
MOVI RD5FONT,A11
|
||
CALLA HEXTOASC ;CONVERT
|
||
|
||
MOVI ':',A0
|
||
MOVE A8,A1
|
||
|
||
UP_TIME_INSLP:
|
||
MOVB *A1,A3
|
||
MOVB A0,*A1
|
||
ADDK 8,A1
|
||
MOVE A3,A0
|
||
JRNZ UP_TIME_INSLP
|
||
MOVB A0,*A1 ;STUFF THAT NULL BACK ON
|
||
CLR A0
|
||
PUSH A7
|
||
JSRP STRLNRM
|
||
PULL A7
|
||
UP_TIME_X:
|
||
RETS
|
||
|
||
.ENDIF
|
||
|
||
.END
|
||
|
||
|