2619 lines
69 KiB
NASM
2619 lines
69 KiB
NASM
.FILE 'NARC1A.ASM'
|
||
.TITLE " <<< NARC GENERAL PURPOSE SUBROUTINES PART II >>>"
|
||
|
||
**************************************************************************
|
||
* *
|
||
* COPYRIGHT (C) 1988 WILLIAMS ELECTRONICS GAMES, INC. *
|
||
* ALL RIGHTS RESERVED. *
|
||
* *
|
||
**************************************************************************
|
||
|
||
.WIDTH 132
|
||
.OPTION B,D,L
|
||
.MNOLIST
|
||
|
||
* GET THE SYSTEM STUFF
|
||
.INCLUDE "\video\MPROCEQU.ASM" ;MPROC equates
|
||
.INCLUDE "\video\DISPEQU.ASM" ;Display processor equates
|
||
.INCLUDE "\video\GSP.INC" ;GSP assembler equates
|
||
.INCLUDE "\video\SYS.INC" ;Zunit system equates
|
||
.INCLUDE "\video\MACROS.HDR" ;Macros, Yeah!
|
||
* LOCAL STUFF
|
||
.INCLUDE "NARCEQU.ASM" ;NARC Equates
|
||
.INCLUDE "NARCTEQU.ASM" ;NARC Todd Equates
|
||
.INCLUDE "NARCAUDN.ASM" ;NARC Audit Equates
|
||
.INCLUDE "IMGTBL.GLO" ;Image Label Equates
|
||
|
||
*
|
||
*GLOBALS IN THIS FILE
|
||
.GLOBAL PPOSADDX,ESCAPEJ,INVINCO,INVINCNF,PXFERCRD,PFLYNDIE
|
||
.GLOBAL PFLASH2,PLEGOFF,PLAYERCON,PIJDECEL,PDELETE,PLEGON,PLEGOFF
|
||
.GLOBAL PTORSON,BUYINWIN,BOTHPON,GAMEOTXT,DUMPWTCH,AUDPLWAV,AUD1
|
||
.GLOBAL STRNGLEN,FLYTOPL,BUYINLP,BWAITCLD
|
||
*
|
||
*EXTERNALS
|
||
.GLOBAL CR_CONTP,OUTMBIGS,BTIME
|
||
|
||
.BSS XPALRAM,256*16 ;RAM FOR FADE PALETTE XFERS
|
||
.BSS BTIMERST,16 ;BUY-IN TIMER RESET FLAG
|
||
|
||
.EVEN
|
||
.TEXT
|
||
|
||
**************************************************************************
|
||
* *
|
||
* MUSICSYN - WATCH FOR THE SYNC BEAT FROM THE SOUND BOARD AND *
|
||
* INCREMENT RAM. *
|
||
* I.D. = MSYNPID *
|
||
* *
|
||
**************************************************************************
|
||
MUSICSYN
|
||
MOVE *A13(PROCID),A0,W
|
||
CLR A1
|
||
NOT A1
|
||
CALLA KILALL
|
||
CLR A0
|
||
MOVE A0,@BEATCNT,W
|
||
MSYN1
|
||
MOVE @SWITCH,A0,L
|
||
BTST 26,A0
|
||
JREQ MUSICINC
|
||
SLOOP 1,MSYN1
|
||
MUSICINC
|
||
MOVE @BEATCNT,A0,W
|
||
INC A0
|
||
MOVE A0,@BEATCNT,W
|
||
SLOOP 4,MSYN1
|
||
|
||
**************************************************************************
|
||
* *
|
||
* XPALETTE - PALETTE INTENSITY MULTIPLIER *
|
||
* A1 = XFACTOR *
|
||
* A2 = PTR TO ROM PALETTE *
|
||
* A3 = CURRENT PALETTE ALLOCATION # *
|
||
* A4 = STARTING COLOR # *
|
||
* A5 = ENDING COLOR # *
|
||
* *
|
||
**************************************************************************
|
||
XPALETTE
|
||
MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8
|
||
MOVE *A2+,A6,W ;GET THE COLOR COUNT
|
||
CLR A8 ;INCREMENTAL COUNTER
|
||
MOVI XPALRAM,A7 ;GET THE RAM
|
||
XPALET1
|
||
MOVE *A2+,A0,W
|
||
CMP A4,A8
|
||
JRLO XPJUSTUF ;BELOW LOWER BOUND
|
||
CMP A5,A8
|
||
JRHI XPJUSTUF ;ABOVE UPPER BOUND
|
||
CALLR XCOLOR ;MULTIPLY THIS GUY
|
||
XPJUSTUF
|
||
MOVE A0,*A7+,W
|
||
INC A8
|
||
CMP A6,A8
|
||
JRLO XPALET1 ;BR = NOT DONE WITH MULTIPLY
|
||
MOVI XPALRAM,A0
|
||
CLR A1
|
||
MOVE A3,A1
|
||
SLL 16,A1
|
||
MOVE A6,A2
|
||
CALLA PALSET ;SET UP THE XFER
|
||
MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* XCOLOR - COLOR VALUE MULTIPLIER *
|
||
* A0 = COLOR VALUE *
|
||
* A1 = X FACTOR (MSW:INTEGER LSW:FRACTION) *
|
||
* RETURNS *
|
||
* A0 = X COLOR VALUE *
|
||
* *
|
||
**************************************************************************
|
||
XCOLOR
|
||
MMTM SP,A3,A4
|
||
CLR A4
|
||
MOVE A0,A3
|
||
SLL 27,A3
|
||
SRL 27,A3 ;NOW I GOT 'DA BLUES
|
||
MPYU A1,A3
|
||
SLL 11,A3
|
||
SRL 27,A3
|
||
OR A3,A4
|
||
MOVE A0,A3
|
||
SLL 22,A3
|
||
SRL 27,A3 ;GREENS
|
||
MPYU A1,A3
|
||
SLL 11,A3 ;STRIP GARBAGE
|
||
SRL 27,A3
|
||
SLL 5,A3
|
||
OR A3,A4
|
||
MOVE A0,A3
|
||
SLL 17,A3
|
||
SRL 27,A3 ;NOW REDS
|
||
MPYU A1,A3
|
||
SLL 11,A3
|
||
SRL 27,A3
|
||
SLL 10,A3
|
||
OR A3,A4
|
||
MOVE A4,A0
|
||
MMFM SP,A3,A4
|
||
RETS
|
||
**************************************************************************
|
||
* *
|
||
* AUTOEOFF - TURN OFF AUTO ERASE *
|
||
* NOTE: BE SURE THE DIRQ IS OFF BEFORE CALLING *
|
||
* *
|
||
**************************************************************************
|
||
AUTOEOFF
|
||
PUSH A0
|
||
PUSHST
|
||
DINT
|
||
MOVE @SYSCOPY,A0,W
|
||
ORI AUTOERAS,A0 ;DISABLE AUTO ERASE
|
||
MOVE A0,@SYSCOPY,W ;STORE EVERYWHERE I DID GO
|
||
POPST
|
||
MOVE A0,@SYSCTRL,W
|
||
PULL A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* AUTOEON - TURN ON AUTO ERASE *
|
||
* NOTE: BE SURE THE DIRQ IS OFF BEFORE CALLING *
|
||
* *
|
||
**************************************************************************
|
||
AUTOEON
|
||
PUSH A0
|
||
MOVE @NOAUTOE,A0,W
|
||
JRNE AUTOEON1 ;BR = DEBUGGER MAN SAYS NO AUTOERASE
|
||
PUSHST
|
||
DINT
|
||
MOVE @SYSCOPY,A0,W
|
||
ANDNI AUTOERAS,A0 ;AUTO ERASE IS ENABLED LOW
|
||
MOVE A0,@SYSCOPY,W ;STORE EVERYWHERE I DID GO
|
||
POPST
|
||
MOVE A0,@SYSCTRL,W
|
||
AUTOEON1
|
||
PULL A0
|
||
RETS
|
||
|
||
*
|
||
*MAKE AND OBJECT WITH Z INITIALIZATION
|
||
*RETURN(S)
|
||
*A0 = OBJECT BLOCK
|
||
MAKOBJZ
|
||
CALLA GETOBJ
|
||
JRZ MAKOBZX ;NONE LEFT
|
||
CALLA STFOBJ
|
||
CALLA SETZPOS
|
||
CALLA INSOBJ
|
||
MOVE A0,A0 ;RETURN NON-ZERO
|
||
MAKOBZX
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* COPYOBJ - COPIES THE CONTENTS OF ONE OBJECT BLOCK TO THE OTHER. *
|
||
* A0 = PTR TO DESTINATION BLOCK *
|
||
* A8 = PTR TO SOURCE BLOCK *
|
||
* *
|
||
**************************************************************************
|
||
COPYOBJ
|
||
MMTM SP,A0,A6,A8
|
||
MOVI OBSIZ,A6,W ;GET THE SIZE OF THE BLOCK IN WORDS
|
||
ADDI 64,A0
|
||
ADDI 64,A8 ;DON'T COPY THE LINKS
|
||
SRL 4,A6 ;DIVIDE BY 16
|
||
SUBK 4,A6 ;SUBTRACT TO ACCOUNT FOR THE 1st TWO LINKS
|
||
COPYOBJL
|
||
MOVE *A8+,*A0+,W ;MOVE A WORD
|
||
DSJS A6,COPYOBJL
|
||
MMFM SP,A0,A6,A8
|
||
PUSH A6 ;KLUDGE TO ZERO MISPLACED LINKS
|
||
CLR A6
|
||
MOVE A6,*A0(OSHAD),L
|
||
PULL A6
|
||
RETS
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* STRINGER - OUTPUT A TEXT STRING, THIS IS A PROCESS! *
|
||
* A0 = SLEEP TIME BETWEEN CHARACTERS *
|
||
* A4 = DMA CONTROL *
|
||
* A6 = COLOR (16 BITS) *
|
||
* A8 = PTR TO STRING *
|
||
* A9 = [Y,X] SCREEN ADDRESS OF STRING *
|
||
* A10 = [Y,X] SPACING *
|
||
* A11 = POINTER TO FONT TABLE *
|
||
* A14 = FLAGS - INSERT:JUSTIFY *
|
||
* BIT 16 = 1 INSERT ON OBJECT LIST, 0 JUST QUEUE THE DMA *
|
||
* JUSTIFY = 0 LEFT JUSTIFY *
|
||
* 1 CENTER JUSTIFY *
|
||
* 2 RIGHT JUSTIFY *
|
||
* RETURNS: *
|
||
* A8 = POINTS TO NEXT BYTE AFTER STRING TERMINATOR *
|
||
* A9 = NEXT CURSOR POSITION AFTER THE STRING *
|
||
* NOTE: CALL WITH JSRP *
|
||
* *
|
||
**************************************************************************
|
||
*
|
||
*STRING ENTRYPOINT, LEFT JUSTIFY, NORMAL, NOT PUT ON THE OBJECT LIST
|
||
STRLNRM
|
||
MMTM A12,A1,A4,A6,A14
|
||
MOVI DMACNZ,A4
|
||
CLR A14
|
||
JRUC STRINGR1
|
||
*
|
||
*STRING ENTRYPOINT, CENTER JUSTIFY, NORMAL, NOT ON THE OBJECT LIST
|
||
STRCNRM
|
||
MMTM A12,A1,A4,A6,A14
|
||
MOVI DMACNZ,A4
|
||
MOVK 1,A14
|
||
JRUC STRINGR1
|
||
*
|
||
*STRING ENTRYPOINT, RIGHT JUSTIFY, NORMAL, NOT PUT ON THE OBJECT LIST
|
||
STRRNRM
|
||
MMTM A12,A1,A4,A6,A14
|
||
MOVI DMACNZ,A4
|
||
MOVK 2,A14
|
||
JRUC STRINGR1
|
||
*
|
||
*STRING ENTRYPOINT, LEFT JUSTIFY, INVERTED, NOT ON THE OBJECT LIST
|
||
STRLINV
|
||
MMTM A12,A1,A4,A6,A14
|
||
MOVI DMACZ,A4
|
||
CLR A14
|
||
JRUC STRINGR1
|
||
*
|
||
*STRING ENTRYPOINT, CENTER JUSTIFY, INVERTED, NOT ON THE OBJECT LIST
|
||
STRCINV
|
||
MMTM A12,A1,A4,A6,A14
|
||
MOVI DMACZ,A4
|
||
MOVK 1,A14
|
||
JRUC STRINGR1
|
||
|
||
*
|
||
*STRING ENTRYPOINT, LEFT JUSTIFY, NORMAL, OBJECT LIST
|
||
STRLNRMO
|
||
MMTM A12,A1,A4,A6,A14
|
||
MOVI DMACNZ,A4
|
||
MOVI 10000H,A14
|
||
JRUC STRINGR1
|
||
*
|
||
*STRING ENTRYPOINT, CENTER JUSTIFY, NORMAL, OBJECT LIST
|
||
STRCNRMO
|
||
MMTM A12,A1,A4,A6,A14
|
||
MOVI DMACNZ,A4
|
||
MOVI 10001H,A14
|
||
JRUC STRINGR1
|
||
|
||
STRINGER
|
||
MMTM A12,A1,A4,A6,A14
|
||
STRINGR1
|
||
MOVE A6,A5
|
||
SLL 16,A5 ;SETUP CONSTANT COLOR IN FIXED PALETTE
|
||
|
||
CLR A7
|
||
MOVX A14,A7
|
||
DEC A7
|
||
JRN STRINGR2 ;NORMAL LEFT JUSTIFY
|
||
JREQ STRINGRC
|
||
*RIGHT JUSTIFY
|
||
CALLR STRNGLEN ;GET THE STRING LENGTH
|
||
JRUC STRINGRA
|
||
*CENTER JUSTIFY
|
||
STRINGRC
|
||
CALLR STRNGLEN
|
||
SRL 1,A7 ;STRNGLEN/2
|
||
STRINGRA
|
||
SUBXY A7,A9 ;ADJUST STRING STARTING POSITION
|
||
STRINGR2
|
||
MOVB *A8,A7 ;GET A CHARACTER
|
||
SLL 24,A7
|
||
SRL 24,A7 ;MAKE SURE WE'RE POSITIVE
|
||
JREQ STRINGRX ;BR = STRING BE GONE BROTHA
|
||
|
||
ADDK 8,A8 ;NEXT BYTE
|
||
|
||
PUSH A0
|
||
|
||
CMPI 20H,A7
|
||
JRNE STRNCHAR ;BR = IT'S KOSH BABY
|
||
|
||
MOVK 5,A7 ;HARD CODE A SPACE
|
||
ADDXY A7,A9 ;AND ADD IT IN
|
||
ADDXY A10,A9 ;ADD SPACING
|
||
PULL A0
|
||
JRUC STRINGR2 ;DON'T SLEEP ON A SPACE, IT LOOKS STUPID!!!
|
||
|
||
STRNCHAR
|
||
MMTM SP,A2,A3,A4,A10,A14
|
||
|
||
MOVE A11,A1 ;ESCAPE TO THE OTHER SIDE
|
||
|
||
SUBI 21H,A7 ;GET A BASE
|
||
SLL 5,A7
|
||
ADD A7,A1
|
||
MOVE *A1,A1,L ;LOAD THE ADDRESS OF THE IMAGE HEADER
|
||
CALLA GSAGOF
|
||
CALLA GANIOF
|
||
|
||
BTST 16,A14
|
||
JREQ STRNQDMA ;BR = DO NORMAL DMA OF STRING
|
||
|
||
*CREATE THE CHARACTER AS AN OBJECT, HERE
|
||
CALLA GETOBJ
|
||
JREQ STRNGDUN ;BR = NO OBJECT
|
||
|
||
MOVE A1,*A0(OIMG),L
|
||
MOVE A5,*A0(OPAL),L
|
||
MOVE A0,A14
|
||
ADDI OSIZE+20H,A14
|
||
MMTM A14,A2,A3,A4 ;STUFF VITAL SHIT
|
||
CLR A14
|
||
ADDI OZVEL+20H,A0
|
||
MOVK 6,A4
|
||
STRNGOL
|
||
MOVE A14,-*A0,L
|
||
DSJS A4,STRNGOL ;ZERO OUT THE VELS & POSITIONS
|
||
SUBI 64,A0 ;BACK TO NORMAL
|
||
|
||
MOVI TEXTOID,A14
|
||
MOVE A14,*A0(OID),W ;STUF A FINDABLE I.D.
|
||
|
||
MOVE A9,A14
|
||
MOVE A14,*A0(OXPOS),W
|
||
SRL 16,A14
|
||
MOVE A14,*A0(OYPOS),W ;STUFF POSITIONS
|
||
MOVI 7FFF000AH,A14
|
||
MOVE A14,*A0(OZVAL),L
|
||
CALLA ADJSTWTL ;PUT US IN THE WORLD
|
||
CALLA INSOBJ ;STUFF THIS SHEEEEEEET
|
||
JRUC STRNGDUN
|
||
|
||
*SIMPLY DMA THE SUCKER, HERE
|
||
STRNQDMA
|
||
MOVE A1,A10
|
||
MOVE A5,A1 ;CONSTANT:PALETTE
|
||
MOVE A4,A5 ;OFFSET:CONTROL
|
||
MOVE A3,A4 ;SAG
|
||
|
||
CLR A14
|
||
MOVY A9,A14
|
||
CLR A3
|
||
MOVX A9,A3
|
||
SRL 16,A6
|
||
SUBXY A6,A3
|
||
SUBXY A7,A14 ;MOVE TO CORRECT POSITION
|
||
MOVY A14,A3 ;A3 = DAG
|
||
CALLA DMAN
|
||
MOVE A1,A5
|
||
MOVE A10,A1
|
||
STRNGDUN
|
||
MOVE *A1(ISIZE),A6,W ;GET THE VISIBLE HORIZONTAL SIZE
|
||
MMFM SP,A2,A3,A4,A10,A14
|
||
|
||
ADDXY A6,A9 ;GET TO THE OTHER SIDE
|
||
ADDXY A10,A9
|
||
MOVE *SP+,A0,L
|
||
JREQ STRINGR2 ;BR = NO SLEEP
|
||
MMTM A12,A0,A4,A5,A14
|
||
CALLA PRCSLP
|
||
MMFM A12,A0,A4,A5,A14
|
||
JRUC STRINGR2
|
||
STRINGRX
|
||
ADDK 8,A8 ;GET TO THE NEXT BYTE
|
||
MMFM A12,A1,A4,A6,A14
|
||
RETP
|
||
|
||
**************************************************************************
|
||
* *
|
||
* STRNGLEN - RETURNS THE LENGTH, IN PIXELS, OF A GIVEN STRING *
|
||
* A8 = PTR TO STRING *
|
||
* A10 = [Y,X] SPACING OF STRING *
|
||
* A11 = PTR TO FONT TABLE *
|
||
* RETURNS: *
|
||
* A7 = LENGTH OF STRING *
|
||
* Z BIT SET IF LENGTH IS ZERO *
|
||
* *
|
||
**************************************************************************
|
||
STRNGLEN
|
||
MMTM SP,A8,A14
|
||
CLR A14
|
||
MOVB *A8,A7
|
||
SLL 24,A7
|
||
SRL 24,A7 ;MAKE SURE WE'RE POSITIVE
|
||
JREQ STRNLENX
|
||
STRNLEN
|
||
ADDK 8,A8 ;POINT TO NEXT
|
||
CMPI 20H,A7
|
||
JRNE STRNLEN1 ;BR = IT'S NOT A SPACE
|
||
MOVK 5,A7 ;HARD CODE A SPACE
|
||
JRUC STRNLEN2
|
||
STRNLEN1
|
||
SUBI 21H,A7 ;GET A BASE
|
||
SLL 5,A7
|
||
ADD A11,A7 ;A7 = PTR TO CORRECT CHARACTER HEADER
|
||
MOVE *A7,A7,L
|
||
MOVE *A7(ISIZE),A7,W ;GET THE ACTUAL X LENGTH
|
||
STRNLEN2
|
||
ADDXY A7,A14 ;ADD DIGIT LENGTH
|
||
MOVX A10,A7
|
||
ADDXY A7,A14 ;ADD SPACE LENGTH
|
||
MOVB *A8,A7
|
||
SLL 24,A7
|
||
SRL 24,A7 ;MAKE SURE WE'RE POSITIVE
|
||
JRNE STRNLEN ;NEXT CHARACTER
|
||
STRNLENX
|
||
MOVE A14,A7 ;PASS RETURN VALUE IN A7
|
||
MMFM SP,A8,A14
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* HEXTOASC - CONVERTS A 32 BIT HEX # TO AN ASCII STRING TERMINATED *
|
||
* BY 0 *
|
||
* A8 = HEX # *
|
||
* RETURNS: *
|
||
* A8 PTR TO THE STRING *
|
||
* *
|
||
**************************************************************************
|
||
HEXTOASC
|
||
MMTM SP,A1,A2,A9
|
||
CLR A1
|
||
CLR A2 ;COMMA COUNT
|
||
MOVE A1,-*SP,W ;HERE'S THE NULL TERMINATOR
|
||
MOVK 10,A1 ;DIVISOR FOR DECIMAL
|
||
MOVE A8,A9
|
||
HEXTASC2
|
||
CLR A8
|
||
DIVU A1,A8
|
||
ADDI '0',A9 ;MAKE THE REMAINDER ASCII
|
||
MOVE A9,-*SP,W ;SAVE HERE
|
||
MOVE A8,A9
|
||
JRZ HEXTASC3 ;BR = DONE!
|
||
INC A2
|
||
CMPI 3,A2 ;COMMA CHECK
|
||
JRLO HEXTASC2 ;BR = NO COMMA
|
||
MOVI ',',A2
|
||
MOVE A2,-*SP,W ;STUFF A COMMA
|
||
CLR A2
|
||
JRUC HEXTASC2
|
||
HEXTASC3
|
||
MOVI STRNGRAM,A1 ;STORE HERE FOR BLOW OUT
|
||
MOVE A1,A8
|
||
|
||
HEXTASC4
|
||
MOVE *SP+,A9,W
|
||
MOVB A9,*A1
|
||
ADDK 8,A1
|
||
MOVE A9,A9
|
||
JRNZ HEXTASC4
|
||
MMFM SP,A1,A2,A9
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PPOSADDX - ADD LONG KONSTANT TO PLAYER X POSITION. *
|
||
* A0 = 32 BIT KONSTANT *
|
||
* A4 = PTR TO PLAYER LEGS *
|
||
* A8 = PTR TO PLAYER TORSO *
|
||
* *
|
||
**************************************************************************
|
||
PPOSADDX
|
||
MMTM SP,A1,A2,A3,A5,A6,A7,A14
|
||
PUSHST
|
||
DINT
|
||
MOVE *A8(OXVAL),A1,L
|
||
MOVE *A4(OXVAL),A2,L
|
||
MOVE *A8(OSHAD),A3,L
|
||
MOVE *A3(OXVAL),A6,L
|
||
MOVE *A4(OSHAD),A5,L
|
||
MOVE *A5(OXVAL),A7,L
|
||
POPST
|
||
ADD A0,A1
|
||
ADD A0,A2
|
||
ADD A0,A6
|
||
ADD A0,A7
|
||
MOVE A1,*A8(OXVAL),L
|
||
MOVE A2,*A4(OXVAL),L
|
||
MOVE A3,A3
|
||
JREQ PPADDX1
|
||
MOVE A6,*A3(OXVAL),L
|
||
PPADDX1
|
||
MOVE A5,A5
|
||
JREQ PPADDX2
|
||
MOVE A7,*A5(OXVAL),L
|
||
PPADDX2
|
||
MMFM SP,A1,A2,A3,A5,A6,A7,A14
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* ESCAPEJ - ESCAPE FROM THE CAR BY WAY OF THE JUMP BUTTON *
|
||
* A11 = PLINDX *
|
||
* *
|
||
**************************************************************************
|
||
ESCAPEJ
|
||
CMPI P1DATA,A11
|
||
JRNE ESCAPP2
|
||
MOVI P1CTRL,A11
|
||
JRUC ESCAPEJ1
|
||
ESCAPP2
|
||
MOVI P2CTRL,A11
|
||
ESCAPEJ1
|
||
MOVE *A11,A0,W
|
||
ORI PJUMP,A0
|
||
MOVE A0,*A11,W
|
||
SLEEP 12
|
||
MOVE *A11,A0,W
|
||
ANDNI PJUMP,A0
|
||
MOVE A0,*A11,W
|
||
DIE
|
||
**************************************************************************
|
||
* *
|
||
* INVINCO - THE PLAYER INVINCIBLE EFFECT *
|
||
* THIS PROCESS WILL SET AND CLEAR THE INVINCIBLE FLAG. *
|
||
* A8 = PTR TO OBJECT BLOCK OF PART 1 *
|
||
* A9 = PTR TO PLAYER DATA BLOCK *
|
||
* A10 = ITERATION COUNT *
|
||
* A11 = PTR TO OBJECT BLOCK OF PART 2 *
|
||
* *
|
||
**************************************************************************
|
||
INVINCO
|
||
MOVE *A13(PROCID),A0,W
|
||
CLR A1
|
||
NOT A1
|
||
CALLA EXISTP
|
||
JRZ INVINCA ;BR = NO OTHER INVINCO PROCESS
|
||
MOVE A10,A1
|
||
CALLA GETA10
|
||
ADD A1,A10 ;JUST TACK ON SOME MORE TIME
|
||
CALLA PUTA10 ;AND STUFF IT
|
||
DIE
|
||
INVINCA
|
||
MOVE *A9(PEXEFLAG),A0,W
|
||
ORI MINVINC,A0
|
||
MOVE A0,*A9(PEXEFLAG),W ;SET THE FLAGS
|
||
INVINCO1
|
||
MOVE A9,A2
|
||
CALLA PLAYEROF
|
||
SLEEP 1
|
||
MOVE A9,A2
|
||
CALLA PLAYERON
|
||
SLEEP 3
|
||
DSJ A10,INVINCO1
|
||
MOVE *A9(PEXEFLAG),A0,W
|
||
ANDNI MINVINC,A0
|
||
MOVE A0,*A9(PEXEFLAG),W ;SORRY BUDDY
|
||
DIE
|
||
*
|
||
*INVINCNF - SAME AS INVINCO, BUT WITH NO PLAYER FLASHY
|
||
* A8 = PTR TO OBJECT BLOCK OF PART 1
|
||
* A9 = PTR TO PLAYER DATA BLOCK
|
||
* A10 = ITERATION COUNT
|
||
* A11 = PTR TO OBJECT BLOCK OF PART 2
|
||
INVINCNF
|
||
MOVE *A13(PROCID),A0,W
|
||
CLR A1
|
||
NOT A1
|
||
CALLA EXISTP
|
||
JRZ INVINCNA ;BR = NO OTHER INVINCO PROCESS
|
||
MOVE A10,A1
|
||
CALLA GETA10
|
||
ADD A1,A10 ;JUST TACK ON SOME MORE TIME
|
||
CALLA PUTA10 ;AND STUFF IT
|
||
DIE
|
||
INVINCNA
|
||
MOVE *A9(PEXEFLAG),A0,W
|
||
ORI MINVINC,A0
|
||
MOVE A0,*A9(PEXEFLAG),W ;SET THE FLAGS
|
||
INVINCN1
|
||
SLEEP 4
|
||
DSJ A10,INVINCN1
|
||
MOVE *A9(PEXEFLAG),A0,W
|
||
ANDNI MINVINC,A0
|
||
MOVE A0,*A9(PEXEFLAG),W ;SORRY BUDDY
|
||
DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PXFERCRD - XFER CARDS TO OTHER ACTIVE PLAYER *
|
||
* A2 = PTR PLAYER DOING THE XFERING *
|
||
* *
|
||
**************************************************************************
|
||
PXFERCRD
|
||
RETS
|
||
**************************************************************************
|
||
* *
|
||
* MMTM SP,A0,A1,A2,A3 *
|
||
* CMPI P1DATA,A2 *
|
||
* JRNE PXFER21 *
|
||
* MOVI P2DATA,A3 *
|
||
* JRUC PXFERNOW *
|
||
* PXFER21 *
|
||
* MOVI P1DATA,A3 *
|
||
* PXFERNOW *
|
||
* MOVE *A2(PCARDS),A0,L *
|
||
* MOVE *A3(PCARDS),A1,L *
|
||
* ADD A0,A1 *
|
||
* MOVE A1,*A3(PCARDS),L *
|
||
* CLR A0 *
|
||
* MOVE A0,*A2(PCARDS),L *
|
||
* MOVE *A2(PCARDS1),A0,L *
|
||
* MOVE *A3(PCARDS1),A1,L *
|
||
* ADD A0,A1 *
|
||
* MOVE A1,*A3(PCARDS1),L *
|
||
* CLR A0 *
|
||
* MOVE A0,*A2(PCARDS1),L *
|
||
* *XFER MR. BIG KILLS ALSO *
|
||
* MOVE *A2(PMBIGS),A0,W *
|
||
* MOVE *A3(PMBIGS),A1,W *
|
||
* ADD A0,A1 *
|
||
* MOVE A1,*A3(PMBIGS),W *
|
||
* CLR A0 *
|
||
* MOVE A0,*A2(PMBIGS),W *
|
||
* *
|
||
* CALLA OUTCARDS ;SHOW THIS GUYS CARDS OR LACK TH *
|
||
* CALLA OUTMBIGS *
|
||
* MOVE A3,A2 *
|
||
* CALLA OUTCARDS ;SHOW THE OTHER GUYS ADDED CARDS *
|
||
* CALLA OUTMBIGS *
|
||
* MMFM SP,A0,A1,A2,A3 *
|
||
* RETS *
|
||
* *
|
||
**************************************************************************
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PDROPALL - DROP ALL OF THE PLAYERS CARDS AND SHIT *
|
||
* A2 = PTR TO PLAYER DATA STRUCTURE *
|
||
* A8 = PTR TO PLAYER OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
**************************************************************************
|
||
* *
|
||
* PDROPALL *
|
||
* MMTM SP,A0,A4,A5,A6,A7,A9,A14 *
|
||
* MOVI CARDCOLD,A7 ;THIS IS THE PROCESS TO CREATE *
|
||
* MOVE *A8(OXPOS),A5,W *
|
||
* MOVE *A8(OYPOS),A6,W *
|
||
* SLL 16,A6 *
|
||
* MOVY A6,A5 *
|
||
* CLR A6 *
|
||
* MOVI 00100000H|CARDOID,A14 *
|
||
* *
|
||
* MOVB *A2(PSCARD),A4 ;GET THE # SILVER CARDS *
|
||
* JREQ DRPS1A2 *
|
||
* ORI SILVER,A14 *
|
||
* DRPS1A1 *
|
||
* CALL A7 *
|
||
* ADDI 20,A5 *
|
||
* DSJS A4,DRPS1A1 *
|
||
* MOVB A4,*A2(PSCARD) *
|
||
* DRPS1A2 *
|
||
* MOVB *A2(PBCARD),A4 ;GET THE # OF BLUE CARDS *
|
||
* JREQ DRPS1A4 *
|
||
* SRL 4,A14 *
|
||
* SLL 4,A14 *
|
||
* ORI BLUE,A14 *
|
||
* DRPS1A3 *
|
||
* CALL A7 *
|
||
* ADDI 20,A5 *
|
||
* DSJS A4,DRPS1A3 *
|
||
* MOVB A4,*A2(PBCARD) *
|
||
* DRPS1A4 *
|
||
* MOVB *A2(PRCARD),A4 ;GET THE # OF RED CARDS *
|
||
* JREQ DRPS1A6 *
|
||
* SRL 4,A14 *
|
||
* SLL 4,A14 *
|
||
* ORI RED,A14 *
|
||
* DRPS1A5 *
|
||
* CALL A7 *
|
||
* ADDI 20,A5 *
|
||
* DSJS A4,DRPS1A5 *
|
||
* MOVB A4,*A2(PRCARD) *
|
||
* DRPS1A6 *
|
||
* MOVB *A2(PGCARD),A4 ;GET THE # OF GOLD CARDS *
|
||
* JREQ DRPS1A8 *
|
||
* SRL 4,A14 *
|
||
* SLL 4,A14 *
|
||
* ORI GOLD,A14 *
|
||
* DRPS1A7 *
|
||
* CALL A7 *
|
||
* ADDI 20,A5 *
|
||
* DSJS A4,DRPS1A7 *
|
||
* MOVB A4,*A2(PGCARD) *
|
||
* DRPS1A8 *
|
||
* MOVB *A2(PGRCARD),A4 ;GET THE # OF GOLD CARDS *
|
||
* JREQ DRPS1AA *
|
||
* SRL 4,A14 *
|
||
* SLL 4,A14 *
|
||
* ORI GREEN,A14 *
|
||
* DRPS1A9 *
|
||
* CALL A7 *
|
||
* ADDI 20,A5 *
|
||
* DSJS A4,DRPS1A9 *
|
||
* MOVB A4,*A2(PGRCARD) *
|
||
* DRPS1AA *
|
||
* CALLA OUTCARDS *
|
||
* MMFM SP,A0,A4,A5,A6,A7,A9,A14 *
|
||
* RETS *
|
||
* *
|
||
**************************************************************************
|
||
|
||
**************************************************************************
|
||
* *
|
||
* SLOWPCAR - SLOW THE PLAYER'S CAR DOWN BY A CONSTANT, SWITCHED PROC. *
|
||
* *
|
||
**************************************************************************
|
||
SLOWPCAR
|
||
MOVE @PLAYCAR,A10,L
|
||
JRZ SLOWPDI ;NO CAR, NO SLOW DOWN
|
||
MOVE *A10(OPLINK),A0,L
|
||
JRZ SLOWPDI ;BR = NO CONTROL
|
||
MOVE A13,A14
|
||
MOVE A0,A13 ;PROC BLOK PTR HERE
|
||
CALLA GETA8 ;GET THE DRIVER PTR
|
||
MOVE *A10(OXVEL),A1,L ;FUCK WITH X VELOCITY
|
||
JRZ SLOWPSWP ;BR = THERE WASN'T ANY
|
||
JRN SLPCBAD ;BR = NEGATIVE SO ADD TO REDUCE
|
||
SUBI [0,7FFFH],A1
|
||
JRNN SLPCBSX ;BR = DIDN'T CHANGE SIGNS
|
||
CLR A1 ;ZERO IN THIS CASE
|
||
JRUC SLPCBSX
|
||
SLPCBAD
|
||
ADDI [0,7FFFH],A1
|
||
JRN SLPCBSX ;DIDN'T SWITCH TO POSITIVE
|
||
CLR A1
|
||
SLPCBSX
|
||
CALLA CARXVEL
|
||
SLOWPSWP
|
||
MOVE A14,A13
|
||
SLOWPDI
|
||
DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* POUTOFRK - PLAYER OUT OF ROCKETS SOUND PROCESS *
|
||
* *
|
||
**************************************************************************
|
||
POUTOFRK
|
||
SOUND1 OUTOROCK ;SOUND OFF
|
||
DIE
|
||
|
||
OUTOROCK .WORD >F3A0,>01,>80A7,0 ;OUT OF ROCKETS SOUND
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PFLYNDIE - MAKE THE PLAYER FLY THROUGH THE AIR AND FLAIL HELPLESSLY *
|
||
* A2 = PLAYER DATA AREA *
|
||
* A8 = PTR TO TORSO *
|
||
* A11 = PTR TO LEGS *
|
||
* NOTE: CALL WITH JSRP, MAKE SURE ALL RELEVANT PLAYER FLAGS ARE SET. *
|
||
* *
|
||
**************************************************************************
|
||
PFLYNDIE
|
||
MOVE *A2(PIRQFLAG),A0,W
|
||
BTST BDRIVER,A0
|
||
JREQ PFLYND1
|
||
*PLAYER IS DRIVING, LET'S VAULT HIM OUT OF THE CAR
|
||
MOVE @PUPDATE,A1,W
|
||
MOVK 1,A3
|
||
MOVE A3,@PUPDATE,W
|
||
MOVE *A2(PIRQFLAG),A0,W
|
||
ANDNI MDRIVER|MSITIN,A0
|
||
MOVE A0,*A2(PIRQFLAG),W
|
||
MOVE A1,@PUPDATE,W
|
||
|
||
MOVE *A8(OSHAD),A0,L
|
||
JRNZ PFLYND0 ;BR = SHADOW ALREADY EXISTS
|
||
CALLA SHADST2 ;RE-START TORSO SHADOW
|
||
PFLYND0
|
||
MOVE *A11(OSHAD),A0,L
|
||
JRNZ PFLYND0A
|
||
SWAP A11,A8
|
||
CALLA SHADST ;RE-START LEG SHADOW
|
||
SWAP A11,A8
|
||
PFLYND0A
|
||
CALLR PCAROYZ
|
||
NEG B2 ;NEGATE THE Z VELOCITY
|
||
|
||
MOVE @PLAYCAR,A0,L ;GET THE CAR
|
||
JRZ PFLYND2
|
||
|
||
MOVE *A0(OZMINUS),A1,W
|
||
MOVE *A0(OZPOS),A14,W
|
||
SUB A1,A14
|
||
SUBK 20,A14
|
||
*** MOVE @PLZMIN,A1,W
|
||
*** CMP A1,A14
|
||
*** JRGE PFLYND0B
|
||
*** MOVE A1,A14
|
||
***PFLYND0B
|
||
MOVE A14,*A8(OZPOS),W
|
||
|
||
MOVE *A0(OPLINK),A0,L
|
||
JRZ PFLYND2 ;WIERDNESS, NO PROC
|
||
MOVE A8,B0
|
||
CLR A8
|
||
CALLA PUTA8 ;ZERO OUT THE DRIVER POINTER
|
||
MOVE B0,A8
|
||
JRUC PFLYND2
|
||
PFLYND1
|
||
MOVE *A2(PIRQFLAG),A0,W ;RELOAD FOR SAFETY
|
||
BTST BPASSEN,A0
|
||
JREQ PFLYND1C
|
||
|
||
MOVE @PUPDATE,A1,W
|
||
MOVK 1,A3
|
||
MOVE A3,@PUPDATE,W
|
||
MOVE *A2(PIRQFLAG),A0,W
|
||
ANDNI MPASSEN|MSITIN,A0
|
||
MOVE A0,*A2(PIRQFLAG),W
|
||
MOVE A1,@PUPDATE,W
|
||
|
||
MOVE *A8(OSHAD),A0,L
|
||
JRNZ PFLYND1A ;BR = SHADOW ALREADY EXISTS
|
||
CALLA SHADST2 ;RE-START TORSO SHADOW
|
||
PFLYND1A
|
||
MOVE *A11(OSHAD),A0,L
|
||
JRNZ PFLYND1B
|
||
SWAP A11,A8
|
||
CALLA SHADST ;RE-START LEG SHADOW
|
||
SWAP A11,A8
|
||
PFLYND1B
|
||
CALLR PCAROYZ
|
||
MOVE @PLAYCAR,A0,L ;GET THE CAR
|
||
JRZ PFLYND2
|
||
|
||
MOVE *A0(OZPLUS),A1,W
|
||
MOVE *A0(OZPOS),A14,W
|
||
ADD A1,A14
|
||
ADDK 5,A14
|
||
*** MOVE @PLZMAX,A1,W
|
||
*** CMP A1,A14
|
||
*** JRLE PFLYND1B0
|
||
*** MOVE A1,A14
|
||
***PFLYND1B0
|
||
MOVE A14,*A8(OZPOS),W
|
||
|
||
MOVE *A0(OPLINK),A0,L
|
||
JRZ PFLYND2 ;WIERDNESS, NO PROC
|
||
CLR A1
|
||
MOVE A1,*A0(PASSPTR),L ;CLEAR THE PASSENGER PTR
|
||
JRUC PFLYND2
|
||
PFLYND1C
|
||
CALLA GETYZVEL ;GET THE MEGA LEGA EXPLODING VEL
|
||
ABS B3
|
||
CMPI [6,0],B3
|
||
JRLS PFLYND2 ;O.K. UP VEL, DO IT BABY
|
||
MOVI [6,0],B3
|
||
PFLYND2
|
||
MOVE A11,A4 ;GOT TO HAVE THIS MAAHN
|
||
CALLA PLEGOFF
|
||
MOVE A11,A0
|
||
MOVI PLAYERS,A1
|
||
CALLA ISSUPP
|
||
JRZ PFLYND3 ;BR = ALREADY OFF YOU NIT WIT
|
||
CALLA DELSUPP ;RID O' LEGS
|
||
PFLYND3
|
||
NEG B3 ;GO UP
|
||
ADD B2,B3 ;MAKE IT REALISTIC
|
||
MOVE A8,B0
|
||
MOVE B2,*B0(OZVEL),L
|
||
MOVE B3,*B0(OYVEL),L
|
||
|
||
MOVI PFLAIL,A9
|
||
PUSHP A11
|
||
PFLYND4
|
||
MOVK 4,A1
|
||
JSRP FRANIM
|
||
JRC PFLYND7 ;THE END WAS HIT
|
||
MOVE A0,A11
|
||
PFLYND5
|
||
SLEEP 1
|
||
MOVE *A8(OYVEL),A3,L ;GET THE CURRENT Y VELOCITY
|
||
MOVE *A8(OZVEL),A2,L
|
||
SUB A2,A3
|
||
JRLE PFLYND6 ;BR = NOT GOING DOWN, DON'T CHECK GROUND HIT
|
||
|
||
CALLA DFRMGRND ;DID HE HIT THE GROUND?
|
||
JRLE PFLYND8 ;BR = YES
|
||
|
||
PFLYND6
|
||
ADDI GRAVITY,A3
|
||
ADD A2,A3
|
||
MOVE A3,*A8(OYVEL),L
|
||
|
||
MOVE *A8(OXVEL),A5,L
|
||
JRNZ PFLYND6A ;HE'S STILL MOVING IN X
|
||
CALLA GETANIX ;IF HE STOPPED IN X
|
||
MOVE @WORLDTLX+16,A5,W
|
||
SUB A5,A0 ;MAKE THE ANIMATION PNT SCREEN REL
|
||
CMPI 256,A0 ;START HIM MOVING TOWARDS THE MIDDLE
|
||
JRGT PFLYND60
|
||
MOVI [1,0],A5 ;MOVE RIGHT
|
||
JRUC PFLYND61
|
||
PFLYND60
|
||
MOVI [-1,0],A5 ;MOVE LEFT
|
||
PFLYND61
|
||
MOVE A5,*A8(OXVEL),L
|
||
|
||
*CHECK FOR ZERO Z VEL
|
||
PFLYND6A
|
||
MOVE *A8(OZVEL),A5,L
|
||
JRNZ PFLYND6B ;HE'S STILL MOVING IN Z
|
||
MOVE *A8(OZPOS),A5,W ;NOW GET THE Z POSITION
|
||
MOVE @PLZMID,A0
|
||
CMP A0,A5
|
||
JRLT PFLYND6A0
|
||
MOVI [-1,0],A5
|
||
JRUC PFLYND6A1
|
||
PFLYND6A0
|
||
MOVI [1,0],A5
|
||
PFLYND6A1
|
||
MOVE A5,*A8(OZVEL),L ;LET'S KEEP TRUCKIN'
|
||
MOVE *A8(OYVEL),A0,L
|
||
ADD A5,A0
|
||
MOVE A0,*A8(OYVEL),L
|
||
|
||
PFLYND6B
|
||
DSJ A11,PFLYND5
|
||
JRUC PFLYND4
|
||
PFLYND7
|
||
MOVI PFLAIL,A9
|
||
JRUC PFLYND4
|
||
PFLYND8
|
||
PULLP A11
|
||
MOVE A11,A4
|
||
CALLA PLSTOP
|
||
RETP
|
||
**************************************************************************
|
||
* *
|
||
* PCAROYZ - GET SOME YZ VELOCITIES FOR GETTING OUSTED FROM THE CAR *
|
||
* RETURNS: *
|
||
* B2 = POSITIVE Z VEL *
|
||
* B3 = CORRECT Y VEL *
|
||
* *
|
||
**************************************************************************
|
||
PCAROYZ
|
||
PUSH A0
|
||
MOVI [1,0],A0
|
||
CALLA SRAND
|
||
ADDI [3,0],A0
|
||
MOVE A0,B3
|
||
NEG B3
|
||
MOVI 0800H,A0
|
||
CALLA SRAND
|
||
ADDI 18000H,A0
|
||
MOVE A0,B2
|
||
PULL A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PFLASH2 - FLASH A PLAYER WITH A CONSTANT COLOR. *
|
||
* A11 = PTR TO PLAYER DATA STRUCTURE *
|
||
* *
|
||
**************************************************************************
|
||
PFLASH2
|
||
MOVI 0FFFFh,A0
|
||
MOVE *A11(POBJ),A1,L
|
||
MOVE A0,*A1(OCONST),W ;SELECT CONSTANT COLOR
|
||
MOVE *A11(PLOBJ),A1,L
|
||
MOVE A0,*A1(OCONST),W ;FOR BOTH OBJECTS
|
||
PFLSH21
|
||
MOVE A11,A2
|
||
CALLA PLAYERCON ;CONSTANT ON
|
||
SLEEP 2
|
||
MOVE A11,A2
|
||
CALLA PLAYERON ;NORMAL
|
||
SLEEP 4
|
||
JRUC PFLSH21
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PIJDECEL - DECELERATE A PLAYER DURING HIS GAMEPLAY INTRO *
|
||
* A9 = PTR TO PLAYER CONTROL LOCATION *
|
||
* A10 = PTR TO VEHICLE THAT PLACEHOLDER IS ABOARD *
|
||
* A11 = PTR TO PLAYER DATA BLK *
|
||
* *
|
||
**************************************************************************
|
||
PIJDECEL
|
||
MOVE A11,A2
|
||
MOVE A9,A11
|
||
MOVE *A2(POBJ),A8,L
|
||
MOVE *A2(PLOBJ),A9,L
|
||
MOVE *A10(OXVEL),A10,L
|
||
CMPI [3,0],A10
|
||
JRGT PIJDEC1
|
||
MOVI [4,0],A10
|
||
JRUC PIJDEC2
|
||
PIJDEC1
|
||
CMPI [15,0],A10
|
||
JRLT PIJDEC2
|
||
MOVI [14,0],A10
|
||
PIJDEC2
|
||
SLEEP 6
|
||
MOVE A10,*A8(OXVEL),L
|
||
MOVE A10,*A9(OXVEL),L
|
||
MOVE *A8(OYVEL),A3,L
|
||
ADDI [-2,0],A3
|
||
MOVE A3,*A8(OYVEL),L
|
||
MOVE A3,*A9(OYVEL),L
|
||
SLEEP 4
|
||
PLJSLP
|
||
SUBI 3000H,A10
|
||
MOVE *A8(OXVEL),A1,L
|
||
ABS A1
|
||
CMPI [2,1000H],A1
|
||
JRLE PLJDECX
|
||
MOVE A10,*A8(OXVEL),L
|
||
MOVE A10,*A9(OXVEL),L
|
||
SLOOP 1,PLJSLP
|
||
PLJDECX
|
||
MOVI PRYTE,A0
|
||
MOVE A0,*A11,W
|
||
SLEEP 16
|
||
CLR A0
|
||
MOVE A0,*A11,W
|
||
DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PLAYER DELETE ROUTINE *
|
||
* A2=PLINDX=PLAYER DATA STRUCTURE *
|
||
* RETURNS: *
|
||
* Z BIT SET = LAST PLAYER TO DIE *
|
||
* Z BIT CLR = ANOTHER PLAYER LEFT *
|
||
* *
|
||
**************************************************************************
|
||
PDELETE:
|
||
MMTM SP,A0,A1,A4,A6,A8
|
||
MOVI PLAYERS,A1 ;DELETE FROM THIS LIST
|
||
MOVE @NPLYRS,A6,W
|
||
DEC A6 ;DECREMENT NUMBER OF PLAYERS
|
||
MOVE A6,@NPLYRS,W
|
||
MOVE *A2(PLOBJ),A0,L ;GET THE LEGS
|
||
JREQ PDELETE1 ;BR = NO LEGS
|
||
MOVE *A0(OFLAGS),A4,W
|
||
SRL 4,A4
|
||
SLL 4,A4
|
||
ORI 2,A4
|
||
MOVE A4,*A0(OFLAGS),W
|
||
CALLA DELSUPP
|
||
MOVE A6,A6
|
||
JREQ PDELETE1
|
||
MOVE A0,A8
|
||
CREATE 0DFH,PLSINK
|
||
PDELETE1
|
||
MOVE *A2(POBJ),A0,L ;GET THE OBJECT BLOCK PTR
|
||
MOVE *A0(OFLAGS),A4,W
|
||
SRL 4,A4
|
||
SLL 4,A4
|
||
ORI 2,A4
|
||
MOVE A4,*A0(OFLAGS),W
|
||
CALLA DELSUPP
|
||
MOVE A6,A6
|
||
JREQ PDELETE2
|
||
MOVE A0,A8
|
||
CREATE 0DFH,DSINK
|
||
**** CALLA PDROPALL ;DROP ALL OF HIS CARDS
|
||
CALLA PXFERCRD ;XFER CARDS
|
||
|
||
CLR A0
|
||
MOVE A0,*A2(POBJ),L ;AND MAKE HIS OBJECT PTR NULL
|
||
MOVE A0,*A2(PLOBJ),L
|
||
MOVE *A2(PSCORE),A0,L
|
||
CALLA OUTSCR ;TURN OFF THE FLASH OF HIS SCORE
|
||
|
||
|
||
*** MOVI INTR1OID|CBODYID,A0
|
||
*** MOVI CARLIST,A1
|
||
*** CALLA ISSUPPID
|
||
*** JRZ PDELETE3 ;BR = NO INTRO VEHICLE AROUND
|
||
***
|
||
*** MMTM SP,A2,A3,A5,A14
|
||
*** MOVE *A1(OPLINK),A5,L
|
||
*** CMPI P2DATA,A2
|
||
*** JREQ PDELTOT1
|
||
*** MOVI P1TINIT,A14
|
||
*** CALLA GPALOBJ
|
||
*** JRZ PDELTOTX
|
||
*** MOVE A0,*A5(PASSPTR),L ;STUFF THE PLAYER 1 PTR
|
||
*** MOVE A5,*A0(OPLINK),L
|
||
*** MOVI CARLIST,A14
|
||
*** JRUC PDELTOT2
|
||
***PDELTOT1
|
||
*** MOVI P2TINIT,A14
|
||
*** CALLA GPALOBJ
|
||
*** JRZ PDELTOTX
|
||
*** MOVE A0,A8
|
||
*** MOVE A5,A0
|
||
*** CALLA PUTA8
|
||
*** MOVE A8,A0
|
||
*** MOVE A5,*A0(OPLINK),L
|
||
*** MOVI ENEMIES,A14
|
||
***PDELTOT2
|
||
*** CALLA STFOBJ
|
||
*** MOVE A1,A8
|
||
*** MOVE *A8(OZPOS),A1,W
|
||
*** INC A1
|
||
*** MOVE A1,*A0(OZPOS),W
|
||
*** MOVE *A8(OXVEL),*A0(OXVEL),L
|
||
*** MOVE *A8(OYVEL),*A0(OYVEL),L
|
||
*** MOVE *A8(OZVEL),*A0(OZVEL),L
|
||
*** CALLA GETANIXY ;GET ROCKET APOINT POSITION
|
||
*** MOVE *A8(OFLAGS),A4,W ;AND ROCKET FLAGS
|
||
*** CALLA GANISAG ;ADJUST FOR NEW IMAGE AND POSS. FLIP
|
||
*** CALLA INSOBJ ;PUT IT ON THE LIST
|
||
*** MOVE A14,A1
|
||
*** CALLA ADDSUPP ;O.K., WE'RE HAPPENING
|
||
***PDELTOTX
|
||
*** MMFM SP,A2,A3,A5,A14
|
||
|
||
PDELETE3
|
||
MOVE A6,A6
|
||
MMFM SP,A0,A1,A4,A6,A8
|
||
RETS
|
||
PDELETE2
|
||
MOVE A0,A4
|
||
CLR A0
|
||
MOVE A0,*A2(POBJ),L ;AND MAKE HIS OBJECT PTR NULL
|
||
MOVE *A2(PSCORE),A0,L
|
||
CALLA OUTSCR ;TURN OFF THE FLASH OF HIS SCORE
|
||
MOVE A4,*A2(POBJ),L
|
||
JRUC PDELETE3
|
||
*
|
||
*PLSINK - PLAYER LEG SINK,NO PALETTE DELETE
|
||
*A8 = PTR TO PLAYER LEG OBJECT
|
||
PLSINK
|
||
MOVI [1,1],A9
|
||
JSRP OSINK
|
||
MOVE A8,A0
|
||
CALLA DELSOBJ ;GET RID OF THIS THING
|
||
JAUC SUCIDE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PLEGOFF - TURN THE PLAYERS LEGS AND SHADOW OFF *
|
||
* A2 = PTR TO PLAYER DATA BLOCK *
|
||
* A4 = PTR TO OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
PLEGOFF
|
||
MMTM SP,A0,A1
|
||
MOVE *A4(OFLAGS),A0,W
|
||
SRL 4,A0
|
||
SLL 4,A0
|
||
MOVE A0,*A4(OFLAGS),W ;TURN OFF THE LEGS
|
||
MOVE *A4(OSHAD),A0,L
|
||
JREQ PLEGOFF1
|
||
MOVE *A0(OFLAGS),A1,W
|
||
SRL 4,A1
|
||
SLL 4,A1
|
||
MOVE A1,*A0(OFLAGS),W ;TURN OFF THE LEG SHADOW
|
||
PLEGOFF1
|
||
MMFM SP,A0,A1
|
||
RETS
|
||
**************************************************************************
|
||
* *
|
||
* PLEGON - TURN THE PLAYERS LEGS AND SHADOW ON *
|
||
* A4 = PTR TO OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
PLEGON
|
||
MMTM SP,A0,A1
|
||
MOVE *A4(OFLAGS),A0,W
|
||
SRL 4,A0
|
||
SLL 4,A0
|
||
ADDK 2,A0
|
||
MOVE A0,*A4(OFLAGS),W ;TURN ON THE LEGS
|
||
MOVE *A4(OSHAD),A0,L
|
||
JREQ PLEGON1
|
||
MOVE *A0(OFLAGS),A1,W
|
||
SRL 4,A1
|
||
SLL 4,A1
|
||
ADDK 8,A1
|
||
MOVE A1,*A0(OFLAGS),W ;TURN ON THE LEG SHADOW
|
||
PLEGON1
|
||
MMFM SP,A0,A1
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PTORSON - TURN THE PLAYERS TORSO AND SHADOW ON *
|
||
* A8 = PTR TO TORSO OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
PTORSON
|
||
MMTM SP,A0,A1
|
||
MOVE *A8(OFLAGS),A0,W
|
||
SRL 4,A0
|
||
SLL 4,A0
|
||
ADDK 2,A0
|
||
MOVE A0,*A8(OFLAGS),W ;TURN ON THE TORSO
|
||
MOVE *A8(OSHAD),A0,L
|
||
JREQ PTORSON1
|
||
MOVE *A0(OFLAGS),A1,W
|
||
SRL 4,A1
|
||
SLL 4,A1
|
||
ADDK 8,A1
|
||
MOVE A1,*A0(OFLAGS),W ;TURN ON THE LEG SHADOW
|
||
PTORSON1
|
||
MMFM SP,A0,A1
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* BOTHPON - TURN BOTH PLAYERS ON IF ACTIVE *
|
||
* *
|
||
**************************************************************************
|
||
BOTHPON
|
||
MMTM SP,A0,A2
|
||
MOVI P1DATA,A2
|
||
MOVE *A2(POBJ),A0,L
|
||
JRZ BOTHP2ON
|
||
CALLA PLAYERON
|
||
BOTHP2ON
|
||
MOVI P2DATA,A2
|
||
MOVE *A2(POBJ),A0,L
|
||
JRZ BOTHPXON
|
||
CALLA PLAYERON
|
||
BOTHPXON
|
||
MMFM SP,A0,A2
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TSHADST - CREATES A NEW PLAYER TORSO SHADOW IF NONE EXISTED. *
|
||
* A2 = PTR TO PLAYER DATA BLOCK *
|
||
* *
|
||
**************************************************************************
|
||
TSHADST1 ;PLAYER ONE ENTRY
|
||
MOVI P1DATA,A2
|
||
JRUC TSHADST
|
||
TSHADST2 ;PLAYER TWO ENTRY
|
||
MOVI P2DATA,A2
|
||
TSHADST
|
||
MOVE *A2(POBJ),A8,L
|
||
MOVE *A8(OSHAD),A0,L
|
||
JRNZ TSHADSTX ;BR = SHADOW ALREADY EXISTS
|
||
CALLA SHADST2
|
||
TSHADSTX
|
||
DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* LSHADST - CREATES A NEW PLAYER LEG SHADOW IF NONE EXISTED. *
|
||
* A2 = PTR TO PLAYER DATA BLOCK *
|
||
* *
|
||
**************************************************************************
|
||
LSHADST1 ;PLAYER ONE ENTRY
|
||
MOVI P1DATA,A2
|
||
JRUC LSHADST
|
||
LSHADST2 ;PLAYER TWO ENTRY
|
||
MOVI P2DATA,A2
|
||
LSHADST
|
||
MOVE *A2(PLOBJ),A8,L
|
||
JRZ LSHADSTX
|
||
MOVE *A8(OSHAD),A0,L
|
||
JRNZ LSHADSTX ;BR = SHADOW ALREADY EXISTS
|
||
CALLA SHADST
|
||
LSHADSTX
|
||
DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TSHADDEL - DELETE THE PLAYER TORSO SHADOW. *
|
||
* A2 = PTR TO PLAYER DATA *
|
||
* *
|
||
**************************************************************************
|
||
TSHADDL1
|
||
MOVI P1DATA,A2
|
||
JRUC TSHADDEL
|
||
TSHADDL2
|
||
MOVI P2DATA,A2
|
||
TSHADDEL
|
||
MOVE *A2(POBJ),A8,L
|
||
MOVE *A8(OSHAD),A0,L
|
||
JRZ TSHADDLX ;BR = NO SHADOW
|
||
CALLA DELOBJ
|
||
CLR A0
|
||
MOVE A0,*A8(OSHAD),L
|
||
TSHADDLX
|
||
DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* LSHADDEL - DELETE THE PLAYER LEG SHADOW. *
|
||
* A2 = PTR TO PLAYER DATA *
|
||
* *
|
||
**************************************************************************
|
||
LSHADDL1
|
||
MOVI P1DATA,A2
|
||
JRUC LSHADDEL
|
||
LSHADDL2
|
||
MOVI P2DATA,A2
|
||
LSHADDEL
|
||
MOVE *A2(PLOBJ),A8,L
|
||
JRZ LSHADDLX
|
||
MOVE *A8(OSHAD),A0,L
|
||
JRZ LSHADDLX ;BR = NO SHADOW
|
||
CALLA DELOBJ
|
||
CLR A0
|
||
MOVE A0,*A8(OSHAD),L
|
||
LSHADDLX
|
||
DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PCONTST - START PLAYER CONTINUATION MESSAGES, IF NECESSARY *
|
||
* *
|
||
**************************************************************************
|
||
PCONTST
|
||
PUSH A2
|
||
MOVI P1DATA,A2
|
||
CALLR STRTCONT
|
||
MOVI P2DATA,A2
|
||
CALLR STRTCONT
|
||
PULL A2
|
||
RETS
|
||
**************************************************************************
|
||
* *
|
||
* STRTCONT - START A PLAYER'S CONTINUATION MESSAGE IF HE'S DEAD. *
|
||
* A2 = PLINDX *
|
||
* *
|
||
**************************************************************************
|
||
STRTCONT
|
||
MMTM SP,A0,A1,A7,A11
|
||
MOVE *A2(POBJ),A0,L
|
||
JREQ STRTCNT1 ;BR = NO PLAYER TO BE FOUND
|
||
MOVE *A2(PFLAGS),A0,L
|
||
BTST BBUYIN,A0
|
||
JREQ STRTCNTX ;BR = NOT BUY-IN TIME
|
||
STRTCNT1
|
||
MOVE A2,A11
|
||
MOVE *A2(PPID),A1
|
||
ORI PMPID,A1
|
||
MOVI PRESCONT,A7
|
||
CALLA GETPRC ;FLASH THE BUY-IN MESSAGE
|
||
STRTCNTX
|
||
MMFM SP,A0,A1,A7,A11
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* OWINDOW - OPEN A TEXT WINDOW, ON THE OBJECT LIST. *
|
||
* ZVAL WILL BE = 7FFF0000H *
|
||
* A8 = WINDOW SIZE *
|
||
* A10 = CENTER POINT OF WINDOW (SCREEN RELATIVE) *
|
||
* RETURNS: *
|
||
* A8 = PTR WINDOW OBJECT *
|
||
* ZBIT SET = FAILURE TO CREATE *
|
||
* ZBIT CLR = WINDOW IS OPEN *
|
||
* NOTE: CALL WITH JSRP *
|
||
* TRASHES A9,A10 & A11 *
|
||
* *
|
||
**************************************************************************
|
||
OWINDOW
|
||
MOVI WINDINIT,A14
|
||
CALLA GPALOBJ
|
||
MOVE A8,A11
|
||
MOVE A0,A8
|
||
JRZ OWINDOWX ;BR = FAILED MISERBLY
|
||
CALLA STFOBJ
|
||
MOVE A10,*A8(OXPOS),W
|
||
MOVY A10,A1
|
||
SRL 16,A1
|
||
MOVE A1,*A8(OYPOS),W
|
||
MOVI 0101H,A1
|
||
MOVE A1,*A8(OCONST),W
|
||
CALLA ADJSTWTL ;ADJUST TO THE WORLD TOP LEFT
|
||
CALLA INSOBJ
|
||
MOVE *A8(OXPOS),A10,W
|
||
MOVE *A8(OYPOS),A0,W
|
||
SLL 16,A0
|
||
MOVY A0,A10 ;GET NEW WORLD COORDS.
|
||
MOVE A10,A0 ;STORE HERE
|
||
MOVY A11,A1
|
||
SRL 17,A1
|
||
SLL 16,A1 ;DIVIDE Y BY 2
|
||
SLL 16,A11
|
||
SRL 17,A11 ;AND X
|
||
MOVY A1,A11
|
||
SUBXY A11,A10
|
||
ADDXY A0,A11
|
||
MOVI 16,A0
|
||
JSRP OBJEXP32
|
||
MOVE A8,A8
|
||
OWINDOWX
|
||
RETP
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CWINDOW - CLOSE A TEXT WINDOW, ON THE OBJECT LIST. *
|
||
* A8 = PTR TO WINDOW OBJECT *
|
||
* RETURNS: *
|
||
* WITH WINDOW OBJECT DELETED *
|
||
* NOTE: CALL WITH JSRP *
|
||
* TRASHES A9,A10 & A11 *
|
||
* *
|
||
**************************************************************************
|
||
CWINDOW
|
||
MOVE *A8(OXPOS),A10,W
|
||
MOVE *A8(OYPOS),A11,W
|
||
SLL 16,A11
|
||
MOVY A11,A10
|
||
MOVE *A8(OSIZE),A11,L
|
||
MOVY A11,A1
|
||
SRL 17,A1
|
||
SLL 16,A1
|
||
SLL 16,A11
|
||
SRL 17,A11
|
||
MOVY A1,A11
|
||
ADDXY A11,A10
|
||
MOVE A10,A11 ;CALCULATED CENTER OF OBJECT
|
||
MOVI 20,A0
|
||
JSRP OBJEXP32
|
||
MOVE A8,A0
|
||
CALLA DELPAL
|
||
CALLA DELOBJ
|
||
RETP
|
||
|
||
**************************************************************************
|
||
* *
|
||
* OBJEXP32 - SHRINK OR EXPAND AN OBJECT FROM THE CURRENT SIZE *
|
||
* TO THE GIVEN SIZE IN A GIVEN AMOUNT OF TICKS. *
|
||
* A0 = # OF TICKS *
|
||
* A8 = PTR TO OBJECT *
|
||
* A10 = NEW OBJTL *
|
||
* A11 = NEW OBJLR *
|
||
* NOTE: CALL WITH JSRP *
|
||
* TRASHES A9 *
|
||
* *
|
||
**************************************************************************
|
||
OBJEXP32
|
||
MOVE *A8(OXPOS),A1,W
|
||
MOVE *A8(OYPOS),A14,W
|
||
SLL 16,A14
|
||
MOVX A1,A14 ;A14 = OBJECT UL
|
||
|
||
SLL 16,A1
|
||
CLR A2
|
||
MOVY A14,A2
|
||
SUBXY A10,A14
|
||
MOVX A14,A5
|
||
SLL 16,A5
|
||
DIVS A0,A5
|
||
NEG A5
|
||
MOVE A5,A6
|
||
CLR A5
|
||
MOVY A14,A5
|
||
DIVS A0,A5
|
||
NEG A5
|
||
MOVE A5,A7
|
||
|
||
MOVE *A8(OXPOS),A3,W
|
||
MOVE *A8(OYPOS),A14,W
|
||
SLL 16,A14
|
||
MOVX A3,A14
|
||
MOVE *A8(OSIZE),A3,L
|
||
ADDXY A3,A14 ;A14 = OBJECT LR
|
||
|
||
PUSH A8 ;STACK OBJECT
|
||
MOVX A14,A3
|
||
SLL 16,A3
|
||
CLR A4
|
||
MOVY A14,A4
|
||
SUBXY A11,A14
|
||
MOVX A14,A5
|
||
SLL 16,A5
|
||
DIVS A0,A5
|
||
NEG A5
|
||
MOVE A5,A8
|
||
CLR A5
|
||
MOVY A14,A5
|
||
DIVS A0,A5
|
||
NEG A5
|
||
MOVE A5,A9
|
||
MOVE A0,A5
|
||
PULL A14 ;KEEP OBJECT HERE
|
||
OBJTIMLP
|
||
ADD A6,A1 ;ADD THE TLX INCREMENT
|
||
ADD A7,A2 ;ADD THE TLY INCREMENT
|
||
ADD A8,A3 ;ADD THE LRX INCREMENT
|
||
ADD A9,A4 ;ADD THE LRY INCREMENT
|
||
MMTM A12,A1,A2,A3,A4,A5,A6,A7,A14
|
||
MOVE A1,*A14(OXVAL),L
|
||
MOVE A2,*A14(OYVAL),L
|
||
SUB A1,A3
|
||
SUB A2,A4 ;GET A SIZE FOR THE WINDOW
|
||
SRL 16,A3
|
||
MOVY A4,A3
|
||
CALLR FIXA3XY
|
||
MOVE A3,*A14(OSIZE),L
|
||
SLEEP 1
|
||
MMFM A12,A1,A2,A3,A4,A5,A6,A7,A14
|
||
DSJS A5,OBJTIMLP
|
||
MOVE A10,*A14(OXPOS),W
|
||
MOVY A10,A1
|
||
SRL 16,A1
|
||
MOVE A1,*A14(OYPOS),W
|
||
MOVE A11,A9
|
||
SUBXY A10,A11
|
||
MOVE A11,A3
|
||
CALLR FIXA3XY
|
||
MOVE A3,*A14(OSIZE),L ;MATCH WHAT THE CALLER WANTED
|
||
MOVE A9,A11 ;PRESERVE FOR YUKS
|
||
MOVE A14,A8
|
||
RETP
|
||
|
||
**************************************************************************
|
||
* *
|
||
* FIXA3XY - CHECKS THE X AND Y COMPONENT OF A3, ANY ONE THAT IS ZERO *
|
||
* WILL BE SET TO ONE. KEEPS OSIZE IN ORDER. *
|
||
* A3 = [Y,X] *
|
||
* *
|
||
**************************************************************************
|
||
FIXA3XY
|
||
PUSH A0
|
||
CLR A0
|
||
MOVY A3,A0
|
||
MOVE A0,A0
|
||
JRNZ FA3YOK
|
||
MOVK 1,A0
|
||
SLL 16,A0
|
||
MOVY A0,A3
|
||
FA3YOK
|
||
CLR A0
|
||
MOVX A3,A0
|
||
MOVE A0,A0
|
||
JRNZ FA3XOK
|
||
MOVK 1,A0
|
||
MOVX A0,A3
|
||
FA3XOK
|
||
PULL A0
|
||
RETS
|
||
|
||
*INIT TABLE FOR WINDOW
|
||
WINDINIT
|
||
.LONG 0,0,0,0,7FFF0000H,WINDOBJ,0,0
|
||
.WORD DMACAL,TEXTWOID,0,0
|
||
*INITIAL WINDOW OBJECT
|
||
WINDOBJ
|
||
.WORD 1,1,0,0
|
||
.LONG 02000000H,NARCS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* BUYINWIN - PUT UP THE BUY-IN WINDOW PROCESS *
|
||
* A10 = PTR TO PLAYER DATA CAUSING THIS *
|
||
* *
|
||
**************************************************************************
|
||
BUYINWIN
|
||
PUSHP A10 ;KEEP PLINDX
|
||
MOVI [65+SKYTOPOF,255],A10
|
||
MOVI [120,230],A8
|
||
JSRP OWINDOW ;OPEN THE WINDOW
|
||
JRZ BUYINWDI ;COULDN'T DO IT
|
||
SOUND1 BUYMUSIC
|
||
CALLR INIBTIME ;INITIALIZE BUY IN TIME
|
||
CALLR INIBMESS ;INITIALIZE BUY IN MESSAGE
|
||
MOVK 1,A0
|
||
MOVE A0,@BUYNOW,W
|
||
PBUYOLP
|
||
MOVI BUYTICK,A11
|
||
PBUYILP
|
||
MOVE *A12,A2,L
|
||
MOVE *A2(PENERGY),A0,L
|
||
JRGT PBUYDONE
|
||
MOVE @NPLYRS,A0,W
|
||
DEC A0
|
||
JRNZ PBUYDONE ;OTHER GUY BOUGHT IN
|
||
SLEEP BUYSLP
|
||
CALLR UPBMESS1 ;UPDATE BUYIN MESSAGE 1
|
||
CALLR UPBMESS2
|
||
DSJS A11,PBUYILP
|
||
CALLR DECBTIME ;DECREMENT BUYIN TIME
|
||
JRGE PBUYOLP ;WE ARE NOT DONE YET
|
||
*SOMEBODY JUST BOUGHT IN OR TIME IS UP
|
||
PBUYDONE
|
||
CALLR CLRBTIME
|
||
CALLR CLRBMESS
|
||
SOUND1 BUYMOFF
|
||
JSRP CWINDOW
|
||
CLR A0
|
||
MOVE A0,@BUYNOW,W
|
||
BUYINWDI
|
||
DIE
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* BUYINLP - PUT UP THE BUY-IN WINDOW PROCESS AND LOOP BACK ON BUY-IN. *
|
||
* A10 = PTR TO PLAYER DATA CAUSING THIS *
|
||
* *
|
||
**************************************************************************
|
||
BUYINLP
|
||
PUSHP A10 ;KEEP PLINDX
|
||
MOVI [65+SKYTOPOF,255],A10
|
||
MOVI [120,230],A8
|
||
JSRP OWINDOW ;OPEN THE WINDOW
|
||
JRZ BUYINLPDI ;COULDN'T DO IT
|
||
SOUND1 BUYMUSIC
|
||
CALLR INIBTIME ;INITIALIZE BUY IN TIME
|
||
CALLR INIBMESS ;INITIALIZE BUY IN MESSAGE
|
||
*YES IT'S BUY-IN TIME AGAIN!
|
||
MOVI INGAME,A0
|
||
MOVE A0,@GAMSTATE,W ;TAKE US OUT OF GAME PLAY
|
||
MOVI IBUYINS,A0
|
||
MOVE A0,@P1DATA+PBUYINS,W
|
||
MOVE A0,@P2DATA+PBUYINS,W
|
||
MOVK 1,A0
|
||
MOVE A0,@BUYNOW,W
|
||
BUYLPOLP
|
||
MOVI BUYTICK,A11
|
||
BUYLPILP
|
||
MOVE *A12,A2,L
|
||
MOVE *A2(PENERGY),A0,L
|
||
JRGT BUYLPBAK
|
||
MOVE @NPLYRS,A0,W
|
||
DEC A0
|
||
JRNZ BUYLPBAK ;OTHER GUY BOUGHT IN
|
||
SLEEP BUYSLP
|
||
CALLR UPBMESS1 ;UPDATE BUYIN MESSAGE 1
|
||
CALLR UPBMESS2
|
||
DSJS A11,BUYLPILP
|
||
CALLR DECBTIME ;DECREMENT BUYIN TIME
|
||
JRGE BUYLPOLP ;WE ARE NOT DONE YET
|
||
*YOUR TIIIIIIIIIIIIIIME IS UP!
|
||
CALLR CLRBTIME
|
||
CALLR CLRBMESS
|
||
SOUND1 BUYMOFF
|
||
MOVI INGAMEOV,A0
|
||
MOVE A0,@GAMSTATE,W
|
||
JSRP CWINDOW
|
||
CLR A0
|
||
MOVE A0,@BUYNOW,W
|
||
BUYINLPDI
|
||
DIE
|
||
*
|
||
*SOMEBODY JUST BOUGHT IN
|
||
*IT IS TIME TO LOOP BACK TO THE BEGINNING
|
||
BUYLPBAK
|
||
CLR A0
|
||
MOVE A0,@BUYNOW,W
|
||
AUDIT AUDLOOP
|
||
CALLR CLRBTIME
|
||
CALLR CLRBMESS
|
||
SOUND1 BUYMOFF
|
||
JSRP CWINDOW
|
||
|
||
CALLA KILLWAVE
|
||
SOUND1 MUSICOFF
|
||
SOUND1 YAMOFF
|
||
|
||
CLR A0
|
||
MOVE A0,@PUPDATE,W
|
||
CLR A9
|
||
MOVE A9,@IRQSKYE,W ;CLEAR AUTO-ERASE COLOR
|
||
|
||
MOVK 1,A0
|
||
MOVE A0,@GAMERASE,W
|
||
MOVI SCRNMID,A10
|
||
MOVI SCRNMID,A11
|
||
MOVI 20,A0
|
||
JSRP SCREXP32 ;NOW GO THE CENTER
|
||
CLR A0
|
||
MOVE A0,@DISPLAYON,W
|
||
CALLA DMAQWAIT
|
||
CALLA MYOINIT
|
||
MOVI SCRNMID,A0
|
||
MOVE A0,@SCRNTL,L
|
||
MOVE A0,@SCRNLR,L
|
||
CALLA WRAMINIT ;INITIALIZE WAVE RAM
|
||
|
||
MOVE @LOOPWAVE,A0,W
|
||
JRN BLPCURR ;USE SAME WAVE
|
||
|
||
MOVE A0,@WAVE,W
|
||
MOVE @LOOPBACK,A10,L
|
||
MOVE @LOOPDISP,A7,L
|
||
MOVE *A10(0E0H),A6,L ;FIX THIS SOUND KLUDGE
|
||
JRUC BLPWWBK
|
||
BLPCURR
|
||
MOVE @WAVE,A0,W ;RELOAD CURRENT WAVE HERE
|
||
DEC A0
|
||
SLL 28,A0
|
||
SRL 23,A0
|
||
MOVE A0,A10
|
||
ADDI WAVEBGND,A10
|
||
MOVE *A10,A10,L
|
||
MOVE A0,A6
|
||
ADDI WAVMUSIC,A6
|
||
MOVE *A6,A6,L
|
||
MOVI MASTERDP,A7
|
||
BLPWWBK
|
||
CALLA GETWAVE ;SET UP WAVE DIFFICULTY PARAMS
|
||
|
||
MOVK 1,A0
|
||
MOVE A0,@PUPDATE,W
|
||
|
||
MOVE A6,A0
|
||
CALLA ONESND ;START ROOM MUSIC
|
||
|
||
MOVI BAKSTAKS,A1
|
||
MOVE A1,@BAKSTAKP,L ;INITIALIZE BACKGROUND STACK POINTER
|
||
|
||
MOVI OBJSTAKS,A1
|
||
MOVE A1,@OBJSTAKP,L ;INITIALIZE OBJECT STACK POINTER
|
||
|
||
CALLA BBINIT
|
||
CALLA INITBGND
|
||
MOVK 1,A0
|
||
MOVE A0,@DISPLAYON,W ;TURN THE DISPLAY PROC ON
|
||
*TIME TO RE-INITIALIZE PLAYER 1
|
||
MOVI P1DATA,A2
|
||
CALLR CLRPBODY
|
||
MOVI P1INITTL,A14
|
||
CALLA PLWAVEST
|
||
*TIME TO RESET PLAYER 2
|
||
MOVI P2DATA,A2
|
||
CALLR CLRPBODY
|
||
MOVI P2INITT,A14
|
||
CALLA PLWAVEST
|
||
CALLA SCORAREA ;OUTPUT THE SCORE AREA
|
||
|
||
CLR A0
|
||
MOVE A0,@PUPDATE,W
|
||
|
||
MOVI INPLAY,A0
|
||
MOVE A0,@GAMSTATE,W ;START YOUR ENGINES
|
||
|
||
MOVI MASTERID,A1 ;A7 SHOULD BE LOADED ABOVE
|
||
CALLA GETPRC ;GET THE DISPATCH PROC
|
||
|
||
CREATE BUPDPID,BBOFSCRN ;CREATE THE BACKGROUND UPDATE PROCESS
|
||
MOVK 32,A0
|
||
MOVI SCRNST,A10
|
||
MOVI SCRNEND,A11
|
||
JSRP SCREXP32 ;BLOW UP THE SCREEN AGAIN
|
||
SOUND1 ALLOFF
|
||
SOUND1 YAMOFF
|
||
MOVK 2,A0
|
||
MOVE A0,@GAMERASE,W ;TURN ON HALF SCREEN AUTOERASE
|
||
CREATE 0BACH,BSCHKG ;START THE SCROLL CHECKER
|
||
CREATE BUYCPID,BUYWAIT ;CREATE THE BUY-IN WAIT
|
||
DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CLRPBODY - CLEAR THE PLAYER IF HIS DEAD BODY WAS HANGING AROUND. *
|
||
* I.E. POBJ STUFFED, NO LIFE, NO OBJECT *
|
||
* A2 = PLINDX *
|
||
* *
|
||
**************************************************************************
|
||
CLRPBODY
|
||
PUSH A0
|
||
MOVE *A2(POBJ),A0,L
|
||
JRZ PBODCLRD ;NOBODY TO CLEAR
|
||
MOVE *A2(PLIVES),A0,W
|
||
JRGT PBODCLRD ;HE'S GOT LIFE
|
||
MOVE *A2(PENERGY),A0,L
|
||
JRGT PBODCLRD ;A LITTLE ENERGY LEFT
|
||
CLR A0
|
||
MOVE A0,*A2(POBJ),L ;O.K. WASTE HIM
|
||
MOVE A0,*A2(PLOBJ),L
|
||
MOVE @NPLYRS,A0,W
|
||
DEC A0 ;A MUST TO KEEP IN PACE
|
||
MOVE A0,@NPLYRS,W
|
||
CALLR PXFERCRD ;TRANSFER ANY HELD CARDS
|
||
PBODCLRD
|
||
PULL A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* BWAITCLD - START THE BUYIN WAIT PROCESS, USED AS A COLD START BY *
|
||
* THE DISPATCHERS IN LOOP BACK POINTS. *
|
||
* *
|
||
**************************************************************************
|
||
BWAITCLD
|
||
MOVI IBUYINS,A0 ;MAKE SURE BUY-IN IS ACTIVE
|
||
MOVE A0,@P1DATA+PBUYINS,W
|
||
MOVE A0,@P2DATA+PBUYINS,W
|
||
CREATE BUYCPID,BUYWAIT
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* BUYWAIT - WAIT AWHILE BEFORE CUTTING OFF BUYIN AGAIN *
|
||
* *
|
||
**************************************************************************
|
||
BUYWAIT
|
||
MOVE *A13(PROCID),A0,W
|
||
CLR A1
|
||
NOT A1
|
||
CALLA KILALL ;KILL THE OTHER GOONS
|
||
CLR A8
|
||
MOVI BUYTICK*BUYTIME,A9
|
||
BUYWAITLP
|
||
*** CALLA CR_CONTP ;ENOUGH TO CONTINUE
|
||
*** JRLO BUYWAITS
|
||
*** MOVE A8,A8
|
||
*** JRNZ BUYWAITS ;WE'VE ALREADY RESET THE TIMER ONCE
|
||
*** MOVI BUYTICK*BUYTIME,A9 ;RESET THE WAIT TIMER
|
||
*** MOVK 1,A8 ;AND FLAG IT
|
||
***BUYWAITS
|
||
SLEEP BUYSLP
|
||
DSJ A9,BUYWAITLP
|
||
CALLA CLRBUYIN ;CUT IF OFF AGAIN
|
||
*** CLR A0 ;CUT IT OFF AGAIN
|
||
*** MOVE A0,@P1DATA+PBUYINS,W
|
||
*** MOVE A0,@P2DATA+PBUYINS,W
|
||
DIE
|
||
|
||
BUYMUSIC
|
||
.WORD >F3FE,>01,>8041,0
|
||
BUYMOFF
|
||
.WORD >F3FE,>01,>8042,0
|
||
**************************************************************************
|
||
* *
|
||
* INIBMESS - INITIALIZE THE BUY IN MESSAGE *
|
||
* *
|
||
**************************************************************************
|
||
INIBMESS
|
||
MMTM SP,A0,A1,A2,A6,A8,A9,A10,A11
|
||
CALLA CR_CONTP ;ENOUGH TO CONTINUE?
|
||
JRLO INIBMIN ;BR = NO
|
||
MOVI PRESSMSG,A8
|
||
CLR A0
|
||
MOVE A0,@BTIMERST,W
|
||
JRUC INIBM1
|
||
INIBMIN
|
||
MOVI INSRTMSG,A8
|
||
MOVK 1,A0
|
||
MOVE A0,@BTIMERST,W
|
||
INIBM1
|
||
CALLR GWINCENT ;POSITION
|
||
MOVE A0,A2 ;KEEP
|
||
SUBI [50,0],A0 ;OFFSET FROM BOX CENTER
|
||
MOVE @WORLDTL,A1,L
|
||
SUB A1,A0
|
||
MOVE A0,A9
|
||
CLR A0
|
||
MOVI 0F0F0H,A6
|
||
MOVI RD20FONT,A11 ;BIG OLD LETTERS
|
||
MOVK 1,A10 ;ONE SPACE BETWEEN LETTERS
|
||
JSRP STRCNRMO ;OUTPUT THE TIME
|
||
MOVI TEXTOID,A0
|
||
MOVI BMES1OID,A1
|
||
CALLA CHNGOID ;CHANGE THE OID
|
||
|
||
MOVI TOCONMSG,A8
|
||
MOVI 0F4F4H,A6
|
||
|
||
MOVE A2,A0
|
||
SUBI [22,0],A0 ;OFFSET FROM BOX CENTER
|
||
MOVE @WORLDTL,A1,L
|
||
SUB A1,A0
|
||
MOVE A0,A9
|
||
CLR A0
|
||
JSRP STRCNRMO ;"TO"
|
||
|
||
MOVE A2,A0
|
||
ADDI [5,0],A0 ;OFFSET FROM BOX CENTER
|
||
MOVE @WORLDTL,A1,L
|
||
SUB A1,A0
|
||
MOVE A0,A9
|
||
CLR A0
|
||
JSRP STRCNRMO ;"CONTINUE"
|
||
|
||
MOVI TEXTOID,A0
|
||
MOVI BMES2OID,A1
|
||
CALLA CHNGOID ;CHANGE THE OID
|
||
|
||
MMFM SP,A0,A1,A2,A6,A8,A9,A10,A11
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* INIBTIME - INITIALIZE THE BUY IN TIMER *
|
||
* *
|
||
**************************************************************************
|
||
INIBTIME
|
||
MMTM SP,A0,A1,A6,A8,A9,A10,A11
|
||
CALLR CLRBTIME
|
||
MOVI BUYTIME,A8
|
||
MOVE A8,@BTIME,W ;STORE IT AWAY
|
||
CALLR HEXTOASC
|
||
|
||
CALLR GWINCENT ;POSITION
|
||
ADDI [35,0],A0 ;OFFSET FROM BOX CENTER
|
||
MOVE @WORLDTL,A1,L
|
||
SUB A1,A0
|
||
MOVE A0,A9
|
||
|
||
CLR A0
|
||
MOVI 0F5F5H,A6
|
||
MOVI RD20FONT,A11 ;BIG OLD LETTERS
|
||
MOVK 1,A10 ;ONE SPACE BETWEEN LETTERS
|
||
JSRP STRCNRMO ;OUTPUT THE TIME
|
||
MOVI TEXTOID,A0
|
||
MOVI BTIMEOID,A1
|
||
CALLA CHNGOID ;CHANGE THE OID
|
||
MMFM SP,A0,A1,A6,A8,A9,A10,A11
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DECBTIME - DECREMENT THE BUY IN TIMER *
|
||
* RETURNS: *
|
||
* Z BIT SET = BUY IN TIME DONE *
|
||
* Z BIT CLR = HURRY WHILE SPECIALS LAST! *
|
||
* *
|
||
**************************************************************************
|
||
DECBTIME
|
||
MMTM SP,A0,A1,A6,A8,A9,A10,A11
|
||
CALLR CLRBTIME
|
||
MOVE @BTIME,A8,W
|
||
DEC A8
|
||
JRLT DECBTX
|
||
MOVE A8,@BTIME,W
|
||
CALLR HEXTOASC
|
||
|
||
CALLR GWINCENT ;POSITION
|
||
ADDI [35,0],A0 ;OFFSET FROM BOX CENTER
|
||
MOVE @WORLDTL,A1,L
|
||
SUB A1,A0
|
||
MOVE A0,A9
|
||
|
||
CLR A0
|
||
MOVI 0F5F5H,A6
|
||
MOVI RD20FONT,A11 ;BIG OLD LETTERS
|
||
MOVK 1,A10 ;ONE SPACE BETWEEN LETTERS
|
||
JSRP STRCNRMO ;OUTPUT THE TIME
|
||
MOVI TEXTOID,A0
|
||
MOVI BTIMEOID,A1
|
||
CALLA CHNGOID ;CHANGE THE OID
|
||
MOVE @BTIME,A8,W ;SET STATUS
|
||
DECBTX
|
||
MMFM SP,A0,A1,A6,A8,A9,A10,A11
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* UPBMESS1 - UPDATE THE "PRESS START" OR "INSERT COIN" MESSAGE. *
|
||
* RETURNS: *
|
||
* A11 = UPDATED SLEEP LOOP TIME FOR BUYIN THING *
|
||
* *
|
||
**************************************************************************
|
||
UPBMESS1
|
||
MMTM SP,A0,A1,A6,A8 ;MORE PUSHING TO COME
|
||
CALLA CR_CONTP ;ENOUGH TO CONTINUE?
|
||
JRLO UPBMIN ;BR = NO
|
||
*** MOVE @BTIMERST,A0,W
|
||
*** JRZ UPBPTW ;BR = DO NOT RESET TIMER, NOT A NEW COIN
|
||
*** CLR A0
|
||
*** MOVE A0,@BTIMERST,W
|
||
*** MOVI BUYTICK,A11 ;RESET BUY-IN LOOP TIMER
|
||
*** CALLR INIBTIME ;RE-INITIALIZE THE BUY-IN TIME
|
||
***UPBPTW
|
||
MOVI PRESSMSG,A8
|
||
JRUC UPBM1
|
||
UPBMIN
|
||
MOVI INSRTMSG,A8
|
||
UPBM1
|
||
MMTM SP,A9,A10,A11 ;WATCH OUT FOR THIS BOGUSNESS
|
||
CALLR GWINCENT ;POSITION
|
||
SUBI [50,0],A0
|
||
MOVE @WORLDTL,A1,L
|
||
SUB A1,A0 ;MAKE'UM SCREEN RELATIVE
|
||
MOVE A0,A9
|
||
CLR A0
|
||
MOVI 0F0F0H,A6
|
||
MOVI RD20FONT,A11 ;BIG OLD LETTERS
|
||
MOVK 1,A10 ;ONE SPACE BETWEEN LETTERS
|
||
JSRP STRCNRMO ;OUTPUT THE TIME
|
||
|
||
MOVI BMES1OID,A0
|
||
CLR A1
|
||
NOT A1
|
||
CALLA KILOBJ ;KILL OLD MESSAGE
|
||
|
||
MOVI TEXTOID,A0
|
||
MOVI BMES1OID,A1
|
||
CALLA CHNGOID ;CHANGE THE OID
|
||
MMFM SP,A0,A1,A6,A8,A9,A10,A11
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* UPBMESS2 - UPDATE THE "TO CONTIMUE" MESSAGE, TO INSURE ALIGNMENT. *
|
||
* *
|
||
**************************************************************************
|
||
UPBMESS2
|
||
MMTM SP,A0,A1,A2,A6,A8,A9,A10,A11
|
||
|
||
MOVI RD20FONT,A11 ;BIG OLD LETTERS
|
||
MOVK 1,A10 ;ONE SPACE BETWEEN LETTERS
|
||
|
||
CALLR GWINCENT ;POSITION
|
||
MOVE A0,A2
|
||
|
||
MOVI TOCONMSG,A8
|
||
MOVI 0F4F4H,A6
|
||
|
||
SUBI [22,0],A0 ;OFFSET FROM BOX CENTER
|
||
MOVE @WORLDTL,A1,L
|
||
SUB A1,A0
|
||
MOVE A0,A9
|
||
CLR A0
|
||
JSRP STRCNRMO ;"TO"
|
||
|
||
MOVE A2,A0
|
||
ADDI [5,0],A0 ;OFFSET FROM BOX CENTER
|
||
MOVE @WORLDTL,A1,L
|
||
SUB A1,A0
|
||
MOVE A0,A9
|
||
CLR A0
|
||
JSRP STRCNRMO ;"CONTINUE"
|
||
|
||
MOVI BMES2OID,A0
|
||
CLR A1
|
||
NOT A1
|
||
CALLA KILOBJ ;KILL OLD MESSAGE
|
||
|
||
MOVI TEXTOID,A0
|
||
MOVI BMES2OID,A1
|
||
CALLA CHNGOID ;CHANGE THE OID
|
||
|
||
MMFM SP,A0,A1,A2,A6,A8,A9,A10,A11
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CLRBMESS - CLEAR THE BUY-IN MESSAGE TEXT. *
|
||
* *
|
||
**************************************************************************
|
||
CLRBMESS
|
||
MMTM SP,A0,A1
|
||
MOVI BMES1OID,A0
|
||
CLR A1
|
||
NOT A1
|
||
CALLA KILOBJ
|
||
MOVI BMES2OID,A0
|
||
CALLA KILOBJ
|
||
MMFM SP,A0,A1
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CLRBTIME - CLEAR THE BUY-IN TIME TEXT. *
|
||
* *
|
||
**************************************************************************
|
||
CLRBTIME
|
||
MMTM SP,A0,A1
|
||
MOVI BTIMEOID,A0
|
||
CLR A1
|
||
NOT A1
|
||
CALLA KILOBJ
|
||
MMFM SP,A0,A1
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* GWINCENT - GET THE CURRENT TEXT WINDOW CENTER POINT. *
|
||
* RETURNS: *
|
||
* A0 = CENTER PNT. *
|
||
* *
|
||
**************************************************************************
|
||
GWINCENT
|
||
MMTM SP,A1,A8
|
||
MOVI TEXTWOID,A0
|
||
CLR A1
|
||
NOT A1
|
||
CALLA EXISTOBJ
|
||
JRZ GWINCX
|
||
MOVE A0,A8
|
||
CALLA GETCPNT
|
||
MOVE A1,A0
|
||
GWINCX
|
||
MMFM SP,A1,A8
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* GAMEOTXT - PROCESS TO PUT "GAME OVER" UP AND KEEP IT CENTERED *
|
||
* *
|
||
**************************************************************************
|
||
GAMEOTXT
|
||
CLR A0
|
||
MOVI 0F5F5H,A6
|
||
MOVI GAMOVMSG,A8
|
||
MOVI [90+SKYTOPOF,255],A9
|
||
MOVK 2,A10
|
||
MOVI RD20FONT,A11 ;SET UP FONT
|
||
JSRP STRCNRMO ;"GAME OVER"
|
||
|
||
MOVI GOTXTOID,A0
|
||
CLR A1
|
||
NOT A1
|
||
CALLA KILOBJ ;KILL OLD MESSAGE
|
||
|
||
MOVI TEXTOID,A0
|
||
MOVI GOTXTOID,A1
|
||
CALLA CHNGOID ;CHANGE THE OID
|
||
SLOOP 1,GAMEOTXT
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CHNGOID - CHANGE ALL MATCHING OID'S ON THE OBJECT LIST TO A NEW ONE. *
|
||
* A0 = OID TO CHANGE *
|
||
* A1 = NEW OID *
|
||
* *
|
||
**************************************************************************
|
||
CHNGOID
|
||
MMTM SP,A2,A3
|
||
MOVI OBJLST,A2
|
||
CHNGOLP
|
||
MOVE *A2,A2,L
|
||
JRZ CHNGOIDX ;BR = DONE WITH THE LIST
|
||
MOVE *A2(OID),A3,W
|
||
CMP A0,A3
|
||
JRNE CHNGOLP ;THIS IS NOT ONE OF THEM
|
||
MOVE A1,*A2(OID),W ;STUFF THE NEW ONE
|
||
JRUC CHNGOLP
|
||
CHNGOIDX
|
||
MMFM SP,A2,A3
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DUMPWTCH - CREATE THE DUMPSTER MAN WATCH PROCESS *
|
||
* *
|
||
**************************************************************************
|
||
DUMPWTCH
|
||
CREATE INDPID,DUMPWTP
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DUMPWTP - DUMPSTER MAN WATCH PROCESS, CONSTANTLY CHECKS DUMPCNT *
|
||
* WHEN IT IS 0 IT WILL CLEAR THE XSCROLLS *
|
||
* *
|
||
**************************************************************************
|
||
DUMPWTP
|
||
SLEEP 60 ;HOLD FOR A SECOND BEFORE STARTING
|
||
DUMPWLP
|
||
MOVE @DUMPCNT,A0,W
|
||
JRZ DUMPCLRX
|
||
SLOOP 4,DUMPWLP
|
||
DUMPCLRX
|
||
CLR A0
|
||
MOVE A0,@XSCROLLS,W ;LET'S CLEAR THE SCROLL STOPPER
|
||
DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* AUDPLWAV - AUDIT THE PLAYER'S FOR THIS WAVE WHO HAVE NOT YET BEEN. *
|
||
* *
|
||
**************************************************************************
|
||
AUDPLWAV
|
||
PUSH A0
|
||
MOVE @WAVE,A0,W
|
||
AUDPLWVL
|
||
CALLR AUDPLYRS ;AUDIT ALL PLAYERS THIS WAVE
|
||
DSJS A0,AUDPLWVL ;AND ALL PREVIOUS WAVES
|
||
AUDPLWVX
|
||
PULL A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* AUDPLYRS - CLICK AN AUDIT COUNTER FOR EACH PLAYER THAT IS ACTIVE *
|
||
* AND HAS NOT YET BEEN AUDITED. *
|
||
* A0 = WAVE # TO AUDIT *
|
||
* *
|
||
**************************************************************************
|
||
AUDPLYRS
|
||
PUSH A2
|
||
MOVI P1DATA,A2
|
||
CALLR CKPAUD
|
||
MOVI P2DATA,A2
|
||
CALLR CKPAUD
|
||
PULL A2
|
||
RETS
|
||
*
|
||
*CKPAUD - CHECK PLAYER FOR AUDITABLITIY, AND CLICK IF O.K.
|
||
*A0 = WAVE # AUDIT
|
||
*A2 = PLINDX
|
||
CKPAUD
|
||
MMTM SP,A0,A1,A3,A4
|
||
CMPI AUDWLAST,A0
|
||
JRHI CKPAUDX
|
||
DEC A0
|
||
MOVE A0,A3
|
||
ADDI AUDWAVE1,A0 ;GET AUDIT # TO CLICK
|
||
|
||
MOVE *A2(POBJ),A1,L
|
||
JRZ CKPAUDX ;BR = NOT EVEN ACTIVE
|
||
MOVE *A2(PAUDIT),A1,W
|
||
BTST A3,A1
|
||
JRNE CKPAUDX ;THIS WAVE IS AUDITED
|
||
MOVK 1,A4
|
||
SLL A3,A4
|
||
OR A4,A1
|
||
MOVE A1,*A2(PAUDIT),W ;THE SCARLET WORD
|
||
CALLA AUD1
|
||
CKPAUDX
|
||
MMFM SP,A0,A1,A3,A4
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* 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
|
||
PUSHP A2
|
||
CALLA PSTOP
|
||
MOVE *A2(PSCRAD),A3,L ;SET UP FOR EFFECT
|
||
|
||
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
|
||
|
||
**************************************************************************
|
||
* *
|
||
* BONUSCR - CONSTRUCT THE BONUS SCREEN AND INSERT IT ON THE OBJECT LIST. *
|
||
* A10 = [Y,X] POSITION OFFSET *
|
||
* *
|
||
* NOTE: DON'T CALL WITH A NULL BONUSTAB, BOYEEEE *
|
||
**************************************************************************
|
||
BONUSCR
|
||
MMTM SP,A0,A1,A2,A14
|
||
MOVI BONUSTAB,A14 ;GET THE BONUS SCREEN TABLE
|
||
BSCRNLP
|
||
CALLA GPALOBJ ;GET US AN OBJECT
|
||
JRNZ BSCRN1
|
||
CALLA GBPALOBJ ;TRY HERE, WE'LL TAKE WHAT WE CAN GET
|
||
JRNZ BSCRN1
|
||
ADDI INITSIZE+16,A14 ;NO DICE CHROME-DOME
|
||
JRUC BSCRN2
|
||
BSCRN1
|
||
CALLA STFOBJ
|
||
CALLA ADJSTWTL ;MAKE US BE, WHEREVER WE ARE!
|
||
MOVE *A14+,A1,W ;GET THE CONSTANT COLOR
|
||
MOVE A1,*A0(OCONST),W ;STUFF THE CONSTANT COLOR
|
||
MOVE *A0(OXPOS),A1,W
|
||
MOVE *A0(OYPOS),A2,W
|
||
SLL 16,A2
|
||
MOVY A2,A1
|
||
ADDXY A10,A1
|
||
MOVY A1,A2
|
||
SRL 16,A2
|
||
MOVE A2,*A0(OYPOS),W
|
||
MOVE A1,*A0(OXPOS),W
|
||
CALLA INSOBJ ;POP THAT SUCKER ON
|
||
BSCRN2
|
||
MOVE *A14,A1,W
|
||
INC A1
|
||
JRNZ BSCRNLP
|
||
MMFM SP,A0,A1,A2,A14
|
||
RETS
|
||
*
|
||
*THE BONUS SCREEN CONSTRUCTION TABLE
|
||
|
||
.INCLUDE "NARCBON.TBL" ;BONUS SCREEN SHITMAGES
|
||
|
||
BONUSTAB
|
||
.LONG 0,0,(0*10000H),(80*Y),0,BV17320,0,0
|
||
.WORD DMACAL,0,0,0,0B8B8H
|
||
|
||
.LONG 0,0,(493*10000H),(80*Y),0,BV17320,0,0
|
||
.WORD DMACAL,0,0,0,0B8B8H
|
||
|
||
.LONG 0,0,(17*10000H),(80*Y),0,BH47826,0,0
|
||
.WORD DMACAL,0,0,0,0B8B8H
|
||
|
||
.LONG 0,0,(17*10000H),(376*Y),0,BH47826,0,0
|
||
.WORD DMACAL,0,0,0,0B8B8H
|
||
|
||
.LONG 0,0,(253*10000H),(103*Y),0,BV8274,0,0
|
||
.WORD DMACAL,0,0,0,0B8B8H
|
||
|
||
.LONG 0,0,(17*10000H),(106*Y),10000H,BH2349,0,0
|
||
.WORD DMACAL,0,0,0,08585H
|
||
|
||
.LONG 0,0,(261*10000H),(106*Y),10000H,BH2349,0,0
|
||
.WORD DMACAL,0,0,0,08585H
|
||
|
||
.LONG 0,0,(17*10000H),(112*Y),0,BV7264,0,0
|
||
.WORD DMACAL,0,0,0,0C0C0H
|
||
|
||
.LONG 0,0,(245*10000H),(112*Y),0,BV5264,0,0
|
||
.WORD DMACAL,0,0,0,0C0C0H
|
||
|
||
.LONG 0,0,(261*10000H),(112*Y),0,BV5264,0,0
|
||
.WORD DMACAL,0,0,0,0C0C0H
|
||
|
||
.LONG 0,0,(486*10000H),(112*Y),0,BV7264,0,0
|
||
.WORD DMACAL,0,0,0,0C0C0H
|
||
|
||
.LONG 0,0,(24*10000H),(370*Y),0,BH2246,0,0
|
||
.WORD DMACAL,0,0,0,0CCCCH
|
||
|
||
.LONG 0,0,(266*10000H),(370*Y),0,BH2206,0,0
|
||
.WORD DMACAL,0,0,0,0CCCCH
|
||
|
||
*PLAYER ONE BORDER PARTS
|
||
.IF BLUEP1
|
||
*DRAW AS BLUE
|
||
.LONG 0,0,(88*10000H),(115*Y),0,BH15629,0,0
|
||
.WORD DMACAL,0,0,0,0FDFDH
|
||
|
||
.LONG 0,0,(25*10000H),(112*Y),0,BV4258,0,0
|
||
.WORD DMACAL,0,0,0,0FDFDH
|
||
|
||
.LONG 0,0,(25*10000H),(366*Y),0,BH2164,0,0
|
||
.WORD DMACAL,0,0,0,0FDFDH
|
||
|
||
.LONG 0,0,(241*10000H),(112*Y),0,BV4258,0,0
|
||
.WORD DMACAL,0,0,0,0FDFDH
|
||
.ELSE
|
||
*DRAW AS RED
|
||
.LONG 0,0,(88*10000H),(115*Y),0,BH15629,0,0
|
||
.WORD DMACAL,0,0,0,0F9F9H
|
||
|
||
.LONG 0,0,(25*10000H),(112*Y),0,BV4258,0,0
|
||
.WORD DMACAL,0,0,0,0F9F9H
|
||
|
||
.LONG 0,0,(25*10000H),(366*Y),0,BH2164,0,0
|
||
.WORD DMACAL,0,0,0,0F9F9H
|
||
|
||
.LONG 0,0,(241*10000H),(112*Y),0,BV4258,0,0
|
||
.WORD DMACAL,0,0,0,0F9F9H
|
||
.ENDIF
|
||
*PLAYER 2 BONUS BORDER PARTS
|
||
.IF BLUEP1
|
||
*DRAW AS RED
|
||
.LONG 0,0,(269*10000H),(112*Y),0,BV4258,0,0
|
||
.WORD DMACAL,0,0,0,0F9F9H
|
||
|
||
.LONG 0,0,(482*10000H),(112*Y),0,BV4258,0,0
|
||
.WORD DMACAL,0,0,0,0F9F9H
|
||
|
||
.LONG 0,0,(270*10000H),(115*Y),0,BH15629,0,0
|
||
.WORD DMACAL,0,0,0,0F9F9H
|
||
|
||
.LONG 0,0,(269*10000H),(366*Y),0,BH2164,0,0
|
||
.WORD DMACAL,0,0,0,0F9F9H
|
||
.ELSE
|
||
*DRAW AS BLUE
|
||
.LONG 0,0,(269*10000H),(112*Y),0,BV4258,0,0
|
||
.WORD DMACAL,0,0,0,0FDFDH
|
||
|
||
.LONG 0,0,(482*10000H),(112*Y),0,BV4258,0,0
|
||
.WORD DMACAL,0,0,0,0FDFDH
|
||
|
||
.LONG 0,0,(270*10000H),(115*Y),0,BH15629,0,0
|
||
.WORD DMACAL,0,0,0,0FDFDH
|
||
|
||
.LONG 0,0,(269*10000H),(366*Y),0,BH2164,0,0
|
||
.WORD DMACAL,0,0,0,0FDFDH
|
||
.ENDIF
|
||
*BONUS SCREEN IMAGES
|
||
.LONG 0,0,(43*10000H),(83*Y),20000H,EVIDENCE,0,0
|
||
.WORD DMAWNZ,0,0,0,0
|
||
|
||
.LONG 0,0,(154*10000H),(83*Y),20000H,BONUS,0,0
|
||
.WORD DMAWNZ,0,0,0,0
|
||
|
||
.LONG 0,0,(288*10000H),(83*Y),20000H,EVIDENCE,0,0
|
||
.WORD DMAWNZ,0,0,0,0
|
||
|
||
.LONG 0,0,(404*10000H),(83*Y),20000H,BONUS,0,0
|
||
.WORD DMAWNZ,0,0,0,0
|
||
|
||
.LONG 0,0,(0*10000H),(106*Y),20000H,BADGE7a,0,0
|
||
.WORD DMAWNZ,0,0,0,0
|
||
|
||
.LONG 0,0,(19*10000H),(128*Y),30000H,MAXB,0,0
|
||
.WORD DMAWNZ,0,0,0,0
|
||
|
||
.LONG 0,0,(55*10000H),(145*Y),30000H,B357,0,0
|
||
.WORD DMAWNZ,0,0,0,0
|
||
|
||
.LONG 0,0,(397*10000H),(106*Y),20000H,BADGE7a,0,0
|
||
.WORD DMAWNZ,0,0,0,0
|
||
|
||
.LONG 0,0,(428*10000H),(127*Y),30000H,HITB,0,0
|
||
.WORD DMAWNZ,0,0,0,0
|
||
|
||
.LONG 0,0,(452*10000H),(145*Y),30000H,B999,0,0
|
||
.WORD DMAWNZ,0,0,0,0
|
||
|
||
.LONG 0,0,(17*10000H),(360*Y),20000H,BONANG1,0,0
|
||
.WORD DMAWNZ,0,0,0,0
|
||
|
||
.LONG 0,0,(261*10000H),(360*Y),20000H,BONANG1,0,0
|
||
.WORD DMAWNZ,0,0,0,0
|
||
|
||
.LONG 0,0,(493*10000H),(360*Y),20000H,BONANG1,0,0
|
||
.WORD DMAWNZ|M_FLIPH,0,0,0,0
|
||
|
||
.LONG 0,0,(251*10000H),(360*Y),20000H,BONANG1,0,0
|
||
.WORD DMAWNZ|M_FLIPH,0,0,0,0
|
||
|
||
.LONG 0,0,(237*10000H),(106*Y),20000H,BONANG3,0,0
|
||
.WORD DMAWNZ,0,0,0,0
|
||
|
||
.LONG 0,0,(276*10000H),(106*Y),20000H,BONANG3,0,0
|
||
.WORD DMAWNZ|M_FLIPH,0,0,0,0
|
||
|
||
.LONG 0,0,(1*10000H),(85*Y),20000H,BONBOLT,0,0
|
||
.WORD DMAWNZ,0,0,0,0
|
||
|
||
.LONG 0,0,(16*10000H),(85*Y),20000H,BONBOLT,0,0
|
||
.WORD DMAWNZ|M_FLIPH,0,0,0,0
|
||
|
||
.LONG 0,0,(248*10000H),(85*Y),20000H,BONBOLT,0,0
|
||
.WORD DMAWNZ,0,0,0,0
|
||
|
||
.LONG 0,0,(263*10000H),(85*Y),20000H,BONBOLT,0,0
|
||
.WORD DMAWNZ|M_FLIPH,0,0,0,0
|
||
|
||
.LONG 0,0,(491*10000H),(85*Y),20000H,BONBOLT,0,0
|
||
.WORD DMAWNZ,0,0,0,0
|
||
|
||
.LONG 0,0,(506*10000H),(85*Y),20000H,BONBOLT,0,0
|
||
.WORD DMAWNZ|M_FLIPH,0,0,0,0
|
||
|
||
.LONG 0,0,(1*10000H),(235*Y),20000H,BONBOLT,0,0
|
||
.WORD DMAWNZ,0,0,0,0
|
||
|
||
.LONG 0,0,(16*10000H),(235*Y),20000H,BONBOLT,0,0
|
||
.WORD DMAWNZ|M_FLIPH,0,0,0,0
|
||
|
||
.LONG 0,0,(494*10000H),(235*Y),20000H,BONBOLT,0,0
|
||
.WORD DMAWNZ,0,0,0,0
|
||
|
||
.LONG 0,0,(509*10000H),(235*Y),20000H,BONBOLT,0,0
|
||
.WORD DMAWNZ|M_FLIPH,0,0,0,0
|
||
|
||
.LONG 0,0,(1*10000H),(382*Y),20000H,BONBOLT,0,0
|
||
.WORD DMAWNZ,0,0,0,0
|
||
|
||
.LONG 0,0,(16*10000H),(382*Y),20000H,BONBOLT,0,0
|
||
.WORD DMAWNZ|M_FLIPH,0,0,0,0
|
||
|
||
.LONG 0,0,(124*10000H),(382*Y),20000H,BONBOLT,0,0
|
||
.WORD DMAWNZ,0,0,0,0
|
||
|
||
.LONG 0,0,(139*10000H),(382*Y),20000H,BONBOLT,0,0
|
||
.WORD DMAWNZ|M_FLIPH,0,0,0,0
|
||
|
||
.LONG 0,0,(249*10000H),(382*Y),20000H,BONBOLT,0,0
|
||
.WORD DMAWNZ,0,0,0,0
|
||
|
||
.LONG 0,0,(264*10000H),(382*Y),20000H,BONBOLT,0,0
|
||
.WORD DMAWNZ|M_FLIPH,0,0,0,0
|
||
|
||
.LONG 0,0,(376*10000H),(382*Y),20000H,BONBOLT,0,0
|
||
.WORD DMAWNZ,0,0,0,0
|
||
|
||
.LONG 0,0,(391*10000H),(382*Y),20000H,BONBOLT,0,0
|
||
.WORD DMAWNZ|M_FLIPH,0,0,0,0
|
||
|
||
.LONG 0,0,(494*10000H),(382*Y),20000H,BONBOLT,0,0
|
||
.WORD DMAWNZ,0,0,0,0
|
||
|
||
.LONG 0,0,(509*10000H),(382*Y),20000H,BONBOLT,0,0
|
||
.WORD DMAWNZ|M_FLIPH,0,0,0,0
|
||
|
||
.WORD 0FFFFH ;END IT ALL
|
||
*
|
||
*KLUDGED BONUS SCREEN IMAGE HEADERS
|
||
BV17320
|
||
.WORD 17,320,0,0
|
||
.LONG 02000000H,NARCS
|
||
BH47826
|
||
.WORD 478,26,0,0
|
||
.LONG 02000000H,NARCS
|
||
BV8274
|
||
.WORD 8,274,0,0
|
||
.LONG 02000000H,NARCS
|
||
BH15629
|
||
.WORD 156,29,0,0
|
||
.LONG 02000000H,NARCS
|
||
BH2349
|
||
.WORD 234,9,0,0
|
||
.LONG 02000000H,NARCS
|
||
BH2246
|
||
.WORD 224,6,0,0
|
||
.LONG 02000000H,NARCS
|
||
BH2206
|
||
.WORD 220,6,0,0
|
||
.LONG 02000000H,NARCS
|
||
BV7264
|
||
.WORD 7,264,0,0
|
||
.LONG 02000000H,NARCS
|
||
BV5264
|
||
.WORD 5,264,0,0
|
||
.LONG 02000000H,NARCS
|
||
BV4258
|
||
.WORD 4,258,0,0
|
||
.LONG 02000000H,NARCS
|
||
|
||
BH2164 .WORD 216,4,0,0
|
||
.LONG 02000000H,NARCS
|
||
|
||
*
|
||
*PLAYER TRANSPORT PLACEHOLDER INIT. ROUTINES
|
||
P1TINIT
|
||
.LONG 0,0,256*10000H,200*Y ;PLAYER 1 HELD AS PASSENGER
|
||
.WORD 0,0
|
||
.LONG jtpassen1,PZSIZ,DUMCOLL
|
||
.WORD DMAWNZ,P1PLACE
|
||
.LONG 0
|
||
P2TINIT
|
||
.LONG 0,0,256*10000H,200*Y ;PLAYER 2 HELD AS DRIVER
|
||
.WORD 0,0
|
||
.LONG ytdrive1,PZSIZ,DUMCOLL
|
||
.WORD DMAWNZ,P2PLACE
|
||
.LONG 0
|
||
|
||
*
|
||
*FLAIL ABOUT WHILE IN THE AIR
|
||
PFLAIL
|
||
.LONG flail1
|
||
.WORD 7
|
||
.LONG flail2
|
||
.WORD 7
|
||
.LONG flail3
|
||
.WORD 7
|
||
.LONG flail4
|
||
.WORD 7
|
||
.LONG 0
|
||
|
||
*
|
||
*SOME MESSAGES
|
||
INSRTMSG
|
||
.STRING "INSERT COIN"
|
||
.BYTE 0
|
||
PRESSMSG
|
||
.STRING "PRESS START"
|
||
.BYTE 0
|
||
TOCONMSG
|
||
.STRING "TO"
|
||
.BYTE 0
|
||
.STRING "CONTINUE"
|
||
.BYTE 0
|
||
.EVEN
|
||
|
||
.END
|
||
|