roadkill/RKDEATH/DRS.ASM

1511 lines
24 KiB
NASM
Raw Permalink Blame History

This file contains invisible Unicode characters!

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

***
*** FILE: DRS.ASM
***
*** SCORE ROUTINES
***
*** SSO 06 AUG 92; STARTED
*** JFL 30 SEP 92; REDONE
*** JFL 06 OCT 92; NEW SCORE
*** JFL 07 OCT 92
*** JFL 27 OCT 92; HANDLE NPC
*** JFL 30 OCT 92
*** JFL 26 JAN 93; COLOR CODED SCORE BOX
*** JFL 10 FEB 93
*** JFL 12 APR 93; YET ANOTHER SCORE BOX
*** JFL 13 APR 93; ADDED LMINE COUNT
***
.MLIB "APMACS.LIB"
.FILE "SCORE.ASM"
.TITLE " <<< DERBY RACE -- SCORING AND DISPLAY ROUTINES >>>"
.WIDTH 132
.OPTION B,D,L,T
.MNOLIST
***************************************************************************
*
* COPYRIGHT (C) 1992 MIDWAY MANUFACTURING COMPANY.
* ALL RIGHTS RESERVED.
*
***************************************************************************
* GET THE SYSTEM STUFF
.INCLUDE "AP.H"
.INCLUDE "DR.I"
.INCLUDE "DRS.I"
.INCLUDE "DRP.I"
.INCLUDE "DRPAL.I"
.INCLUDE "IMGTBLB1.GLO"
** DEFINE ROUTINES FOR OTHERS TO USE
.DEF SCOREINIT ;DRS.ASM
.DEF SCOREVALADD ;DRS.ASM
.DEF SCOREVALADDOID ;DRS.ASM
.DEF SCORESETDAMAGE ;DRS.ASM
.DEF SCORESETDAMAGEOID ;DRS.ASM
.DEF SCORESETMISL ;DRS.ASM
.DEF SCORESETLMINE ;DRS.ASM
.DEF SCORESETTURBO ;DRS.ASM
.DEF SCORESETTURBOOID ;DRS.ASM
.DEF SCORESETTIME ;DRS.ASM
.DEF SCORETIMEDOWN ;DRS.ASM
.DEF SCORESETPLBACK ;DRS.ASM
.DEF SCORESETPLBACKOID ;DRS.ASM
.DEF SCOREBOXCENTERTBL ;DRS.ASM
.DEF PLPALCONSTTBL ;DRS.ASM
.DEF TURBOBARCLIPTBL ;DRS.ASM
** ROUTINES USED
.REF GETFPAL ;APPALL.ASM
.REF FREEPAL ;APPALL.ASM
.REF SCOREDATA ;DR.ASM
.REF SCORELIST ;APD.ASM
.REF CREATE_COPY ;APD.ASM
.REF SCRATCH2K ;DR.ASM
.REF SCDM ;DR.ASM
** WE USE -- RAM
.TEXT
.EVEN
**
** DEFINES
**
DIGITSINSCORE EQU 9 ;HOW MANY
**
** PARTIDS
**
SCIDTURBO EQU 1 ;SPEC ID -- TURBO
SCIDMISL EQU 2 ;SPEC ID -- MISSILE
SCIDLMINE EQU 3 ;SPEC ID -- MISSILE
SCIDDAMAGEBAR EQU 4 ;SPEC ID -- DAMAGE BAR
SCIDPLBACK EQU 5 ;SPEC ID -- PLAYER BACK
M_SCOFF EQU 80000000H ;SPEC ID -- START WITH OBJ OFF
**
** SCOREINIT
**
** TRASHES: A0,A1,A2,A3,A4,A5,A6,A7,A9
**
** JFL 30 SEP 92
** JFL 06 OCT 92
**
SCOREINIT
MMTM SP,A8
;
;INIT OUR STRUCTURES
;
;CLEAR SCORE DATA PLAYERS
MOVI SCOREDATA,A0
MOVI DRPLAYERS*SCDSIZE/16,A1
CLR A14
SILOOP
MOVW A14,*A0+
DSJS A1,SILOOP
;CLEAR SCORE DATA MISC
MOVI SCDM,A0
MOVI SCDMSIZE/16,A1
CLR A14
SILOOP2
MOVW A14,*A0+
DSJS A1,SILOOP2
;
;SET UP OUR OBJ LIST
;
;SET UP A BLANK OBJ
MOVI OBJSCOREBLANK,A0
MOVI SCRATCH2K,A1
MOVK COSIZE/32,A2
SIOILOOP
MOVL *A0+,*A1+
DSJS A2,SIOILOOP
;SET UP FOR THE LOOP
MOVI SCOREDATA,A6 ;SCORE DATA
CLR A7 ;PLAYER NUMBER
;
;SET UP THE PLAYER SCORE AREAS
;
SIOPLAYERS
CLR A3 ;Z
MOVI OBJSCOREINIT,A4 ;SCORE INIT DATA
MOVE A7,A8
SLL 5,A8 ;SIZEOF PLAYERXYTBL
ADDI PLAYERXYTBL,A8
MOVL *A8,A8 ;GET Y:X OFFSET OF PLAYER
CALLR SIOLOOP ;A3,A4,A8
CALLR SPECOBJPOSTINIT ;IN:A0-A5,A6,A7,A8 SC,SCD,PL#,YXOFFSET
;NEXT PLAYER
ADDI SCDSIZE,A6
INC A7
CMPI DRPLAYERS,A7
JRLT SIOPLAYERS
;
;SET UP THE TIMER
;
.IF 0 ;NOTIMER
CLR A3 ;Z
MOVI OBJMISCINIT,A4 ;SCORE INIT DATA
MOVL @PLAYERXYTBL+32*DRPLAYERS,A8 ;Y:X OFFSET
CALLR SIOLOOP ;A3,A4,A8
.ENDIF ;NOTIMER
SIOX
MMFM SP,A8
RETS
**
** SIOLOOP
**
** IN
** A7 PLAYER
** (OTHER STUFF I DONT WANT TO COMMENT NOW)
**
** JFL 06 OCT 92
**
SIOLOOP
;REG USE
; A0 OBJ
; A1
; A2 SCRATCH
; A3 Z
; A4 SCORE INIT DATA
; A5 CREATE_OBJ SCRATCH
; A6 SPECIAL INIT REG1 -- PLAYER SCORE DATA
; A7 SPECIAL INIT REG2 -- PLAYER NUMBER
; A8 Y:X OFFSET
; A9 SPECIAL INIT REG3 -- OBJ LINKS
; A10 SPECIAL INIT REG4 -- CHAR POINTER
;GET NEXT IMAGE
MOVI SCRATCH2K,A5
MOVL *A4+,A1 ;GET IMAGE
JRZ SIONEXTLOOP
MOVL A1,*A5 ;SAVE IMAGE
;SET CREATE OBJ STUFF
MOVW *A1(ICTRL),A14
ORI DMAWNZ,A14
MOVW A14,*A5(COCTRL)
CALLA CREATE_OBJ
LOCKON Z
;SET SCORE ID
MOVL *A4+,A14
JRZ SIOXX
JRP SIOXX
;M_SCOFF TURN OFF OBJ
SETF 1,0,0
MOVE SP,*A0(OCTRL+B_INUSE),0
SETF 16,1,0
SIOXX
MOVW A14,*A0(OPARTID)
;SET UP THE OBJECT
MOVE A8,A1
MOVL *A4+,A14 ;GET EXTRA OFFSET Y:X
ADDXY A14,A1
CALLR SIOSETUPOBJ ;IN: A0,A1 OBJ,OFFSET
DEC A3 ;MAKE Z CLOSER
;HANDLE SPECIAL INIT FUNCTION
MOVL *A4+,A2
JRZ SIOLOOP
CALL A2
JRUC SIOLOOP
SIONEXTLOOP
RETS
**
** SCRBOXPAL
**
** A0 OBJ
** A6 SCD
**
** JFL 26 JAN 93
** JFL 12 APR 93; NO FREE PAL
**
SCRBOXPAL
;FREE PAL & USE PLAYER PAL
MOVE A0,A2 ;SAVE
;SET PAL BASED ON PLAYER
MOVE A7,A14
SLL 5,A14 ;SIZEOF PLAYERPALTBL
ADDI PLAYERPALTBL,A14
.IF DEBUG
CMPI PLAYERPALTBLX,A14
TLOCKON HS
.ENDIF ;DEBUG
MOVL *A14,A0
CALLA GETFPAL ;IN:A0 PALPTR
MOVE A0,A14
MOVE A2,A0 ;UNSAVE
MOVW A14,*A0(OPAL)
RETS
**
** SCOREFIRSTDIGIT
**
** IN
** A0 OBJ
** A6 SCD
**
** JFL 06 OCT 92
**
SCOREFIRSTDIGIT
MOVL A0,*A6(SCDSCOREOBJ)
MOVE A0,A9
RETS
**
** TIMEFIRSTDIGIT
**
** IN
** A0 OBJ
** A6 SCD
**
** JFL 06 OCT 92
**
TIMEFIRSTDIGIT
MOVI SCDM,A9
MOVL A0,*A9(SCDMTIMEOBJ)
MOVE A0,A9
RETS
**
** SCORENEXTDIGIT
**
** IN
** A0 OBJ
** A6 SCD
** A9 PREV SCORE
**
** JFL 06 OCT 92
**
SCORENEXTDIGIT
MOVL A0,*A9(OSLINK)
MOVE A0,A9
RETS
**
** SPECFIRSTDIGIT
**
** IN
** A0 OBJ
** A6 SCD
**
** JFL 06 OCT 92
**
SPECFIRSTDIGIT
MOVL *A6(SCDSPECOBJ),A14
JRZ SFDFIRST
SFDLOOP
MOVE A14,A9
MOVL *A9(OSLINK),A14
JRNZ SFDLOOP
;ADD TO END
MOVL A0,*A9(OSLINK)
JRUC SFDX
SFDFIRST
MOVL A0,*A6(SCDSPECOBJ)
SFDX
MOVE A0,A9
RETS
**
** SPECNEXTDIGIT
**
** IN
** A0 OBJ
** A6 SCD
** A9 PREV SCORE
**
** JFL 06 OCT 92
**
SPECNEXTDIGIT
MOVL A0,*A9(OSLINK)
MOVE A0,A9
RETS
**
** SPECOBJPOSTINIT
** RUN THROUGH SPECIAL OBJECTS AFTER INIT TO DO MORE STUFF
**
** IN
** A0-A5 SCRATCH
** A6 SCD
** A7 PL#
** A8 YXOFFSET
**
** JFL 13 APR 93
**
SPECOBJPOSTINIT
MOVL *A6(SCDSPECOBJ),A0
TLOCKON Z ;HOW CAN WE INIT THE TURBO?
JRZ SOPIX
SCOPITLOOP
;LOOK FOR THE TURBO & RECORD THE DAG
MOVW *A0(OPARTID),A14
CMPI SCIDTURBO,A14
JREQ SOPITURBO
MOVL *A0(OSLINK),A0
JRNZ SCOPITLOOP
TLOCKON Z ;HOW CAN WE INIT THE TURBO?
JRUC SOPIX
SOPITURBO
;FOUND THE TURBO SPEC OBJ, SAVE ITS ORGINAL DAG
MOVL *A0(ODAG),*A0(OSCDAG) ;SAVE THE DAG
SOPIX
RETS
**
**
** TIMENEXTDIGIT
**
** IN
** A0 OBJ
** A6 SCD
** A9 PREV SCORE
**
** JFL 06 OCT 92
**
TIMENEXTDIGIT
MOVL A0,*A9(OSLINK)
MOVE A0,A9
RETS
**
** PLNUMBACK
**
** SCRATCH A2,A9,A10
**
** JFL 10 DEC 92
**
PLNUMBACK
;FREE PAL & USE SYSTEM PAL
MOVE A0,A2 ;SAVE
CLR A0 ;SYSTEM PAL
CALLA INC_PALCNT ;IN:A0 PALID
MOVE A2,A0 ;UNSAVE
MOVE A7,A14
SLL 5,A14
ADDI PLNUMBACKPALCONSTTBL,A14
MOVL *A14,A14
MOVL A14,*A0(OPAL)
MOVI PLNUMBACKSIZE,A14
MOVL A14,*A0(OUSIZE)
MOVL A14,*A0(OSIZE)
MOVI [100H,100H],A14
MOVL A14,*A0(OSCALEDMA)
MOVI DMACAL-M_INUSE,A14
MOVW A14,*A0(OCTRL)
MOVI SCIDPLBACK,A14
MOVW A14,*A0(OPARTID)
;LINK IN AT END
MOVL *A6(SCDSPECOBJ),A14
JRNZ PLNBLOOP
MOVL A0,*A6(SCDSPECOBJ)
JRUC PLNBX
PLNBLOOP
MOVE A14,A2
MOVL *A2(OSLINK),A14
JRNZ PLNBLOOP
MOVL A0,*A2(OSLINK)
PLNBX
RETS
**
** CHANGEOBJ
**
** IN
** A0 OBJ
** A2 NEW IHDR INFO
**
** JFL 10 DEC 92
** JFL 12 APR 93; NO FREE PAL
**
CHANGEOBJ
MMTM SP,A1
MOVL A2,*A0(OIMG)
;CHANGE PAL
MOVE A0,A1 ;SAVE
MOVL *A2(ICMAP),A0
CALLA GETFPAL ;IN A0 PALADR OUT A0 PALID
TLOCKON Z
MOVW A0,*A1(OPAL)
MOVE A1,A0 ;RESTORE
;GET REST OF INFO
MOVL *A2(ISAG),*A0(OSAG)
MOVW *A2(ICTRL),A14
ORI DMAWNZ,A14
MOVW A14,*A0(OCTRL)
MOVL *A2(ISIZE),A14
MOVL A14,*A0(OUSIZE)
MOVL A14,*A0(OSIZE)
MMFM SP,A1
RETS
**
** SIOSETUPOBJ -- SUBROUTINE
**
** IN
** A0 OBJ
** A1 OFFSET Y:X
** A3 Z
**
** SCRATCHES: A1,A2,A5
**
**
** JFL 06 OCT 92
**
SIOSETUPOBJ
;SET UP OBJECT
MOVE A1,A5 ;COPY Y:X OFFSET
MOVL *A0(OUANIOFF),A1
MOVL *A0(OUSIZE),A2
MOVW *A0(OCTRL),A14
SUBXY A1,A2 ;FIND SIZ - ANI FOR FLIPPING
BTST B_FLIPH,A14
JREQ SIOTRYV
MOVX A2,A1
SIOTRYV BTST B_FLIPV,A14
JREQ SIOANI
MOVY A2,A1
SIOANI SUBXY A1,A5 ;ADJUST FOR ANI
;MOVE B4,A1 ;SUBTRACT OUT PLANE OFFSET
;SUBXY A1,A5
MOVL A5,*A0(ODAG) ;SAVE DAG FOR CLIPPING COMPUTATION
MOVW A5,*A0(OXPOS)
SRL 16,A5
MOVW A5,*A0(OYPOS)
MOVW A3,*A0(OZPOS)
;SET UP MISC
MOVI SCALE1TO1,A14
MOVL A14,*A0(OSCALEDMA)
;LINK IT IN
MOVE B0,A2 ;SAVE B0
MOVI SCORELIST,B0
CALLA INSPLANE ;B0 plane ptr
MOVE A2,B0 ;RESTORE B0
RETS
***
*** ----------------------------------------------------------------------
***
**
** SCOREVALADD
** SCOREVALADDOID
**
** IN
** A2 OBJ / OID
** A3 VALUE (IN SCORE-VALUE FORMAT)
**
** JFL 30 SEP 92
** JFL 27 OCT 92; HANDLE NPC
** JFL 10 FEB 93; SCOREVALADDOID
**
SCOREVALADDOID
MMTM SP,A4,A5,A6,A7,A8,A9
JRUC SVAOID
SCOREVALADD
MMTM SP,A4,A5,A6,A7,A8,A9
;TURN OID INTO SCORE DATA INDEX
MOVW *A2(OID),A2
SVAOID
SLL SL_POID,A2
SRL SR_POID,A2
DEC A2
JRN SVAX
MOVE A3,A3
JRZ SVAX
.IF DEBUG
CMPI DRPLAYERS,A2
LOCKON GE
.ENDIF ;DEBUG
SLL SCDSIZEOF,A2 ;SIZEOF SCDATA
ADDI SCOREDATA,A2
;GET RIGHTMOST DIGIT
MOVL *A2(SCDSCOREOBJ),A8
JRZ SVAX
;SKIP TO DIGIT
MOVL *A8(OSLINK),A8
JRZ SVAX
;ADD IN SCORE
MOVK 0FH,A5 ;NIBBLE MASK
CLR A7 ;CLEAR NEWVALUE
MOVK 8,A9 ;HOW MANY ROLLS WE'VE GOT LEFT
MOVL *A2(SCDVAL),A4 ;GET CUR VAL
JRUC SVAFIRST
SVALOOP
MOVL *A8(OSLINK),A8
JRZ SVADONE
DEC A9 ;LOOP COUNT
LOCKON Z
RL 28,A7 ;ROLL NEWVALUE
SRL 4,A4 ;SHIFT CURVALUE
SRL 4,A3 ;SHIFT ADDVALUE
JRNZ SVAFIRST
MOVE A4,A4
JRZ SVADONEOFF ;NO MORE SCORE
SVAFIRST
;REG USE
; A2 SCOREDATA
; A3 ADDVALUE 8:7:6:5:4:3:2:1:0
; A4 CURVALUE 8:7:6:5:4:3:2:1:0
; A5 NIBBLE MASK
; A6 DIGIT
; A7 NEWVALUE 8:7:6:5:4:3:2:1:0
; A8 DIGIT OBJ
; A9 COUNT
;ADD TWO SCORE NIBBLES
MOVE A3,A14
AND A5,A14
MOVE A4,A6
AND A5,A6
ADD A14,A6 ;A6 NEW DIGIT
CMPI 10,A6
JRLT SVACARRYDONE
SUBK 10,A6 ;SUBTRACT OUT CARRY
ADDK 10H,A4 ;ADD CARRY TO NEXT DIGIT
SVACARRYDONE
OR A6,A7 ;FORM NEWVALUE
;SELECT IMAGE FOR THIS DIGIT
SLL 5,A6 ;SIZEOF SCOREDIGITTBL
ADDI SCOREDIGITTBL,A6
MOVL *A6,A6
MOVL *A6(ISAG),*A8(OSAG) ;UPDATE SAG
MOVL *A6(ISIZE),A14
MOVL A14,*A8(OUSIZE)
;MAKE SURE OBJ IS ON
MOVW *A8(OCTRL),A14
ORI M_INUSE,A14
MOVW A14,*A8(OCTRL)
JRUC SVALOOP
SVADONEOFF
;MAKE SURE ZERO OBJS ARE OFF
MOVW *A8(OCTRL),A14
ANDNI M_INUSE,A14
MOVW A14,*A8(OCTRL)
MOVL *A8(OSLINK),A8
JRNZ SVADONEOFF
SVADONE
;GET NEWVALUE LINED UP & SAVE NEW VALUE
RL 28,A7 ;ROLL NEWVALUE
DSJS A9,SVADONE
MOVL A7,*A2(SCDVAL)
SVAX
MMFM SP,A4,A5,A6,A7,A8,A9
RETS
**
** SCORESETMISL
**
** IN
** A2 OBJ
** A3 MISSILES
**
** JFL 06 OCT 92
** JFL 27 OCT 92; HANDLE NPC
** JFL 26 JAN 93
**
SCORESETMISL
MMTM SP,A8
;TURN OID INTO SCORE DATA INDEX
MOVW *A2(OID),A2
SLL SL_POID,A2
SRL SR_POID,A2
DEC A2
JRN SSMX
.IF DEBUG
CMPI DRPLAYERS,A2
LOCKON GE
MOVE A3,A3
LOCKON N
.ENDIF ;DEBUG
SLL SCDSIZEOF,A2 ;SIZEOF SCDATA
ADDI SCOREDATA,A2
;GET DIGIT
MOVL *A2(SCDSPECOBJ),A8
JRNZ SSMFIRST
JRZ SSMX
SSMFIND
MOVL *A8(OSLINK),A8
JRZ SSMX
SSMFIRST
MOVW *A8(OPARTID),A14
CMPI SCIDMISL,A14
JRNE SSMFIND
CMPI 9,A3
JRLE SSMOK
MOVK 9,A3
SSMOK
SLL 5,A3 ;SIZEOF DIGITTBL
ADDI MISLDIGITTBL,A3
MOVL *A3,A3
MOVL *A3(ISAG),*A8(OSAG)
MOVL *A3(ISIZE),A14
MOVL A14,*A8(OUSIZE)
SSMX
MMFM SP,A8
RETS
**
** SCORESETLMINE
**
** IN
** A2 OBJ
** A3 MISSILES
**
** JFL 06 OCT 92
** JFL 27 OCT 92; HANDLE NPC
** JFL 26 JAN 93
**
SCORESETLMINE
MMTM SP,A8
;TURN OID INTO SCORE DATA INDEX
MOVW *A2(OID),A2
SLL SL_POID,A2
SRL SR_POID,A2
DEC A2
JRN SSLX
.IF DEBUG
CMPI DRPLAYERS,A2
LOCKON GE
MOVE A3,A3
LOCKON N
.ENDIF ;DEBUG
SLL SCDSIZEOF,A2 ;SIZEOF SCDATA
ADDI SCOREDATA,A2
;GET DIGIT
MOVL *A2(SCDSPECOBJ),A8
JRNZ SSLFIRST
JRZ SSLX
SSLFIND
MOVL *A8(OSLINK),A8
JRZ SSLX
SSLFIRST
MOVW *A8(OPARTID),A14
CMPI SCIDLMINE,A14
JRNE SSLFIND
CMPI 9,A3
JRLE SSLOK
MOVK 9,A3
SSLOK
SLL 5,A3 ;SIZEOF DIGITTBL
ADDI LMINEDIGITTBL,A3
MOVL *A3,A3
MOVL *A3(ISAG),*A8(OSAG)
MOVL *A3(ISIZE),A14
MOVL A14,*A8(OUSIZE)
SSLX
MMFM SP,A8
RETS
**
** SCORESETTIME
** SCOREDISPLAYTIME
**
** IN
** A3 TIME 0..99
**
** JFL 06 OCT 92
**
SCORESETTIME
;SAVE CURRENT TIME
MOVI SCDM,A2
MOVW A3,*A2(SCDMTIME)
SCOREDISPLAYTIME
;TRANSLATE INTO BCD
SLL 3,A3 ;SIZEOF TIMEBCDTBL
ADDI TIMEBCDTBL,A3
.IF DEBUG
CMPI TIMEBCDTBLX,A3
LOCKON HS
.ENDIF ;DEBUG
MOVB *A3,A3
SLL 24,A3
SRL 24,A3
;GET DIGIT
MOVL *A2(SCDMTIMEOBJ),A2
JRZ SSTMX
;DISPLAY CURRENT TIME -- RIGHTMOST DIGIT
MOVE A3,A14
SLL 28,A14
SRL 28,A14
SLL 5,A14 ;SIZEOF DIGITTBL
ADDI TIMEDIGITTBL,A14
MOVL *A14,A14
MOVL *A14(ISAG),*A2(OSAG)
MOVL *A14(ISIZE),A14
MOVL A14,*A2(OUSIZE)
;NEXT DIGIT
MOVL *A2(OSLINK),A2
JRZ SSTMX
;DISPLAY CURRENT TIME -- RIGHTMOST DIGIT
SRL 4,A3
JRNZ SSTMON
;TURN DIGIT OFF
MOVW *A2(OCTRL),A14
ANDNI M_INUSE,A14
MOVW A14,*A2(OCTRL)
JRUC SSTMX
SSTMON
;SET DIGIT
SLL 5,A3 ;SIZEOF DIGITTBL
ADDI TIMEDIGITTBL,A3
MOVL *A3,A3
MOVL *A3(ISAG),*A2(OSAG)
MOVL *A3(ISIZE),A14
MOVL A14,*A2(OUSIZE)
;TURN DIGIT ON
MOVW *A2(OCTRL),A14
ORI M_INUSE,A14
MOVW A14,*A2(OCTRL)
SSTMX
RETS
**
** SCORETIMEDOWN
**
** OUT
** Z IF TIMED OUT
**
** JFL 06 OCT 92
**
SCORETIMEDOWN
MMTM SP,A4
;GET CURRENT TIME
MOVI SCDM,A2
MOVW *A2(SCDMTIME),A3
DEC A3
MOVW A3,*A2(SCDMTIME)
MOVE A3,A4
CALLR SCOREDISPLAYTIME
INC A4
MMFM SP,A4
RETS
**
** SCORESETTURBO
** SCORESETTURBOOID
**
** IN
** A2 OBJ / OID
** A3 TURBO 0..TURBOMAX (ANYTHING BIGGER IS TRUNCATED)
**
** JFL 06 OCT 92
** JFL 27 OCT 92; HANDLE NPC
** JFL 13 APR 93
**
SCORESETTURBOOID
MMTM SP,A8
JRUC SSTOID
SCORESETTURBO
MMTM SP,A8
;TURN OID INTO SCORE DATA INDEX
MOVW *A2(OID),A2
SSTOID
SLL SL_POID,A2
SRL SR_POID,A2
DEC A2
JRN SSTX
.IF DEBUG
CMPI DRPLAYERS,A2
LOCKON GE
MOVE A3,A3
LOCKON N
.ENDIF ;DEBUG
SLL SCDSIZEOF,A2 ;SIZEOF SCDATA
ADDI SCOREDATA,A2
;GET DIGIT
MOVL *A2(SCDSPECOBJ),A8
JRNZ SSTFIRST
JRZ SSTX
SSTFIND
MOVL *A8(OSLINK),A8
JRZ SSTX
SSTFIRST
MOVW *A8(OPARTID),A14
CMPI SCIDTURBO,A14
JRNE SSTFIND
;TRUNC IF NEC
CMPI TURBOSINGLEMAX,A3
JRLO SSTOK
MOVK TURBOSINGLEMAX,A3
SSTOK
SLL 4,A3 ;SIZEOF CLIPTBL
JRZ SSTOFF
ADDI TURBOBARCLIPTBL,A3
MOVW *A3,A3 ;CLIP SIZE
;BASE HEIGHT ON ORG IMG
MOVL *A8(OIMG),A2
MOVW *A2(ISIZEY),A14
SUB A3,A14 ;SUBTRACT OUT TO FIND THE NEW SIZE
JRP SSTP
SSTOFF
;TURN OFF
SETF 1,0,0
MOVE SP,*A8(OCTRL+B_INUSE),0
SETF 16,1,0
JRUC SSTX
SSTP
;SET HEIGHT BY THROWING AWAY FROM THE BOTTOM
MOVW A14,*A8(OUSIZEY)
;ADJUST DAG DOWN
MOVL *A8(OSCDAG),A14 ;ORG DAG
SLL 16,A3 ;CLIPSIZE:0
ADDXY A3,A14 ;NEW DAG
MOVL A14,*A8(ODAG)
;TURN ON
SETF 1,0,0
MOVK 1,A3
MOVE A3,*A8(OCTRL+B_INUSE),0
SETF 16,1,0
SSTX
MMFM SP,A8
RETS
**
** SCORESETDAMAGE
** SCORESETDAMAGEOID
**
** IN
** A2 OBJ
** A3 AMOUNT 0..FF (TOP 24 BITS DROPPED HERE)
**
** JFL 30 SEP 92
** JFL 27 OCT 92; HANDLE NPC
** JFL 10 FEB 93
**
SCORESETDAMAGEOID
MMTM SP,A8
JRUC SSDOID
SCORESETDAMAGE
MMTM SP,A8
;TURN OID INTO SCORE DATA INDEX
MOVW *A2(OID),A2
SSDOID
SLL SL_POID,A2
SRL SR_POID,A2
DEC A2
JRN SSDX
.IF DEBUG
CMPI DRPLAYERS,A2
LOCKON GE
.ENDIF ;DEBUG
SLL SCDSIZEOF,A2 ;SIZEOF SCDATA
ADDI SCOREDATA,A2
;GET DAMAGE BAR
MOVL *A2(SCDSPECOBJ),A8
JRNZ SSDFIRST
JRZ SSDX
SSDFIND
MOVL *A8(OSLINK),A8
JRZ SSDX
SSDFIRST
MOVW *A8(OPARTID),A14
CMPI SCIDDAMAGEBAR,A14
JRNE SSDFIND
;LOOKUP CLIP VALUE
;DROP SIGN OF BYTE
SLL 24,A3
SRL 24-4,A3 ;SIZEOF CLIPTBL
ADDI DAMAGEBARCLIPTBL,A3
MOVW *A3,A3
JRN SSDOFF
JRNZ SSDCLIP
;TURN ON, NO CLIPPING
MOVW *A8(OCTRL),A14
ORI M_INUSE,A14
SLL 16,A14
MOVL A14,*A8(OFSET) ;STUFF OFSET & CTRL FIELDS
JRUC SSDX
SSDOFF
;TURN OFF, NO CLIPPING
MOVW *A8(OCTRL),A14
ANDNI M_INUSE,A14
SLL 16,A14
MOVL A14,*A8(OFSET) ;STUFF OFSET & CTRL FIELDS
JRUC SSDX
SSDCLIP
;TURN ON, CLIP
MOVW *A8(OCTRL),A14
ORI M_INUSE|M_LRCLIP,A14
SLL 16,A14
MOVX A3,A14
MOVL A14,*A8(OFSET) ;STUFF OFSET & CTRL FIELDS
SSDX
MMFM SP,A8
RETS
RETS
**
** SCORESETPLBACK
** SCORESETPLBACKOID
**
** IN
** A2 OBJ
** A3 COLOR FROM SPAL
**
** JFL 30 SEP 92
** JFL 27 OCT 92; HANDLE NPC
** JFL 11 DEC 92
** JFL 19 FEB 93; OID VERSION
**
SCORESETPLBACKOID
MMTM SP,A8
JRUC SSPBOID
SCORESETPLBACK
MMTM SP,A8
;TURN OID INTO SCORE DATA INDEX
MOVW *A2(OID),A2
SSPBOID
SLL SL_POID,A2
SRL SR_POID,A2
DEC A2
JRN SSPBX
.IF DEBUG
CMPI DRPLAYERS,A2
LOCKON GE
.ENDIF ;DEBUG
SLL SCDSIZEOF,A2 ;SIZEOF SCDATA
ADDI SCOREDATA,A2
;GET BACK
MOVL *A2(SCDSPECOBJ),A8
JRNZ SSPBFIRST
JRZ SSPBX
SSPBFIND
MOVL *A8(OSLINK),A8
JRZ SSPBX
SSPBFIRST
MOVW *A8(OPARTID),A14
CMPI SCIDPLBACK,A14
JRNE SSPBFIND
MOVE A3,A3
JRNZ SSPBSET
;TURN OFF
SETF 1,0,0
CLR A14
MOVE A14,*A8(OCTRL+B_INUSE),0
SETF 16,1,0
JRUC SSPBX
SSPBSET
;SET COLOR -- USE SYSTEM PALETTE, CHANGE CONSTANT COLOR VALUE
MOVE A3,A14
SLL 8,A14
OR A3,A14
MOVW A14,*A8(OCONST)
;TURN ON
SETF 1,0,0
MOVK 1,A14
MOVE A14,*A8(OCTRL+B_INUSE),0
SETF 16,1,0
SSPBX
MMFM SP,A8
RETS
RETS
***
*** -----------------------------------------------------------------------
***
**
** OBJSCOREBLANK
**
** JFL 06 OCT 92
**
OBJSCOREBLANK
.LONG 0 ;IMAGE
.LONG 0 ;COLLISION VECTOR
.WORD OID_JUNK ;OID
.WORD DMAWNZ ;OCTRL
.WORD M_NOAUTOZ ;OFLAGS
.WORD STYPNONE ;OSCALETYPE
.LONG 0 ;CFUNC
**
** PLAYERNAMETBL
**
** JFL 06 OCT 92
**
PLAYERNAMETBL
.BYTE 'J','F','L',0
.BYTE 'J','F','L',0
.BYTE 'J','F','L',0
**
** OBJSCOREINIT
**
** .LONG IMG,OPARTID,OFFSET Y:X,INIT()
**
** ENTRIES ARE IN REVERSE ORDER OF DRAWING
**
** JFL 06 OCT 92
** JFL 12 APR 93; NEW BOX
**
OBJSCOREINIT
;COLOR BLOCK BEHIND THE SCORE BOX -- ANY IMAGE WILL DO
.LONG SCRBOXR_1,SCIDPLBACK,[PLNUMBGYOFF,PLNUMBGXOFF],PLNUMBACK
;SCORE -- THESE OBJECTS ARE ALL LINKED TOGETHER
.LONG SCOR_0,0,[SCYOFF,SCXOFF-0*SCXSPACE],SCOREFIRSTDIGIT
.LONG SCOR_0,M_SCOFF,[SCYOFF,SCXOFF-1*SCXSPACE],SCORENEXTDIGIT
.LONG SCOR_0,M_SCOFF,[SCYOFF,SCXOFF-2*SCXSPACE],SCORENEXTDIGIT
.LONG SCOR_0,M_SCOFF,[SCYOFF,SCXOFF-3*SCXSPACE],SCORENEXTDIGIT
.LONG SCOR_0,M_SCOFF,[SCYOFF,SCXOFF-4*SCXSPACE],SCORENEXTDIGIT
.LONG SCOR_0,M_SCOFF,[SCYOFF,SCXOFF-5*SCXSPACE],SCORENEXTDIGIT
.LONG SCOR_0,M_SCOFF,[SCYOFF,SCXOFF-6*SCXSPACE],SCORENEXTDIGIT
.LONG SCOR_0,M_SCOFF,[SCYOFF,SCXOFF-7*SCXSPACE],SCORENEXTDIGIT
.LONG SCOR_0,M_SCOFF,[SCYOFF,SCXOFF-8*SCXSPACE],SCORENEXTDIGIT
;SPECIAL -- THESE OBJECTS ARE ALL LINKED TOGETHER
;BEST TO KEEP IN ORDER OF FREQUENCY OF USE
.LONG SCR_BAR,SCIDTURBO,[TURBOYOFF,TURBOXOFF],SPECFIRSTDIGIT
.LONG SCOR_0,SCIDMISL,[MISLYOFF,MISLXOFF],SPECNEXTDIGIT
.LONG SCOR_0,SCIDLMINE,[LMINEYOFF,LMINEXOFF],SPECNEXTDIGIT
.LONG SCRBOX_8,SCIDDAMAGEBAR,0,SPECNEXTDIGIT
;THE SCORE BOX
.LONG SCRBOXR_1,0,0,SCRBOXPAL
.LONG SCRBOXG_2,0,0,SCRBOXPAL
.LONG SCRBOXB_3,0,0,SCRBOXPAL
.LONG SCRBOX_4,0,0,SCRBOXPAL
.LONG SCRBOX_5,0,0,SCRBOXPAL
.LONG SCRBOX_6,0,0,SCRBOXPAL
.LONG SCRBOX_7,0,0,SCRBOXPAL
.LONG SCR_TUR,0,0,0
.LONG SCR_DOL,0,0,0
.LONG SCR_DOL,0,0,0
.LONG SCR_MISS,0,0,0
.LONG SCR_SPEC,0,0,0
.LONG SCR_MINE,0,0,0
.LONG 0
**
** OBJMISCINIT
**
** SAME FORMAT AS OBJSCOREINIT
**
** JFL 06 OCT 92
**
OBJMISCINIT
.LONG RRD0,0,[0,-0*TIMEXSPACE],TIMEFIRSTDIGIT
.LONG RRD0,0,[0,-1*TIMEXSPACE],TIMENEXTDIGIT
.LONG 0
**
** TIMEBCDTBL
**
** JFL 06 OCT 92
** JFL 26 JAN 93; REDONE AS BYTE TBL
**
TIMEBCDTBL
.BYTE 0000H
.BYTE 0001H
.BYTE 0002H
.BYTE 0003H
.BYTE 0004H
.BYTE 0005H
.BYTE 0006H
.BYTE 0007H
.BYTE 0008H
.BYTE 0009H
.BYTE 0010H
.BYTE 0011H
.BYTE 0012H
.BYTE 0013H
.BYTE 0014H
.BYTE 0015H
.BYTE 0016H
.BYTE 0017H
.BYTE 0018H
.BYTE 0019H
.BYTE 0020H
.BYTE 0021H
.BYTE 0022H
.BYTE 0023H
.BYTE 0024H
.BYTE 0025H
.BYTE 0026H
.BYTE 0027H
.BYTE 0028H
.BYTE 0029H
.BYTE 0030H
.BYTE 0031H
.BYTE 0032H
.BYTE 0033H
.BYTE 0034H
.BYTE 0035H
.BYTE 0036H
.BYTE 0037H
.BYTE 0038H
.BYTE 0039H
.BYTE 0040H
.BYTE 0041H
.BYTE 0042H
.BYTE 0043H
.BYTE 0044H
.BYTE 0045H
.BYTE 0046H
.BYTE 0047H
.BYTE 0048H
.BYTE 0049H
.BYTE 0050H
.BYTE 0051H
.BYTE 0052H
.BYTE 0053H
.BYTE 0054H
.BYTE 0055H
.BYTE 0056H
.BYTE 0057H
.BYTE 0058H
.BYTE 0059H
.BYTE 0060H
.BYTE 0061H
.BYTE 0062H
.BYTE 0063H
.BYTE 0064H
.BYTE 0065H
.BYTE 0066H
.BYTE 0067H
.BYTE 0068H
.BYTE 0069H
.BYTE 0070H
.BYTE 0071H
.BYTE 0072H
.BYTE 0073H
.BYTE 0074H
.BYTE 0075H
.BYTE 0076H
.BYTE 0077H
.BYTE 0078H
.BYTE 0079H
.BYTE 0080H
.BYTE 0081H
.BYTE 0082H
.BYTE 0083H
.BYTE 0084H
.BYTE 0085H
.BYTE 0086H
.BYTE 0087H
.BYTE 0088H
.BYTE 0089H
.BYTE 0090H
.BYTE 0091H
.BYTE 0092H
.BYTE 0093H
.BYTE 0094H
.BYTE 0095H
.BYTE 0096H
.BYTE 0097H
.BYTE 0098H
.BYTE 0099H
TIMEBCDTBLX
.EVEN
LMINEDIGITTBL
MISLDIGITTBL
TURBODIGITTBL
SCOREDIGITTBL
.LONG SCOR_0
.LONG SCOR_1
.LONG SCOR_2
.LONG SCOR_3
.LONG SCOR_4
.LONG SCOR_5
.LONG SCOR_6
.LONG SCOR_7
.LONG SCOR_8
.LONG SCOR_9
TIMEDIGITTBL
.LONG RRD0
.LONG RRD1
.LONG RRD2
.LONG RRD3
.LONG RRD4
.LONG RRD5
.LONG RRD6
.LONG RRD7
.LONG RRD8
.LONG RRD9
**
** PLPALCONSTTBL
**
** .LONG NON-PLAYER
** .LONG PLAYER1
** .LONG PLAYER2
** .LONG PLAYER3
**
** JFL 11 FEB 93
**
PLPALCONSTTBL
.LONG [SPALYELLOW+SPALYELLOW*256,SPAL+SPAL*256]
.LONG [SPALGREEN+SPALGREEN*256,SPAL+SPAL*256]
.LONG [SPALBLUE+SPALBLUE*256,SPAL+SPAL*256]
.LONG [SPALRED+SPALRED*256,SPAL+SPAL*256]
PLNUMBACKPALCONSTTBL
.LONG [SPALRED+SPALRED*256,SPAL+SPAL*256]
.LONG [SPALRED+SPALRED*256,SPAL+SPAL*256]
.LONG [SPALRED+SPALRED*256,SPAL+SPAL*256]
PLAYERPALTBL
.LONG SCORG_P
.LONG SCORB_P
.LONG SCORR_P
PLAYERPALTBLX
SCTM .MACRO LOOPC,WIDTH
.ASG :WIDTH:*1000/:LOOPC:,LOOPINC
.ASG :WIDTH:*1000,LOOPVAL
.LOOP :LOOPC:
.IF LOOPVAL/1000<:WIDTH:
.BYTE 0,LOOPVAL/1000
.ELSE
.WORD -1
.ENDIF
.EVAL LOOPVAL-LOOPINC,LOOPVAL
.ENDLOOP
.ENDM
**
** DAMAGEBARCLIPTBL
** THIS IS THE DAMAGE BAR WIDTH TABLE
**
** SCTM DIVISIONS,FULLSIZEDWIDTH <- GET FROM SCRBOX_8 WIDTH
**
** JFL 07 OCT 92
**
DAMAGEBARCLIPTBL
SCTM 256,109
TBCM .MACRO DIVI,MULT
.ASG :DIVI:,LOOPVAL
.LOOP :DIVI:+1
.WORD LOOPVAL*:MULT:
.EVAL LOOPVAL-1,LOOPVAL
.ENDLOOP
.ENDM
**
** TURBOBARCLIPTBL
** THIS IS THE TURBO BAR HEIGHT TBL
**
** TBCM DIVISIONS,SIZEOF EACH GRAPHIC INCREMENT
**
** JFL 13 APR 93
**
TURBOBARCLIPTBL
TBCM TURBOSINGLEMAX,3
**
**
** SCORE BOX IMAGE INFO
**
PLWIDTH EQU 113 ;WIDTH FROM SCRBOX_1
PLMIDX EQU PLWIDTH/2
PLMIDY EQU 31 ;-Y ANIM FROM SCRBOX_2
PLANIX EQU 0 ;X ANIM FROM SCRBOX_1
PLANIY EQU 0 ;Y ANIM FROM SCRBOX_1
**
** POSITIONING OF PLAYER SCORE BOXES
**
PLGAPX EQU 6
PLOFFX EQU 24
PLOFFY EQU 2
PL1X EQU PLOFFX+0*PLGAPX+0*PLWIDTH
PL1Y EQU PLOFFY
PL2X EQU PLOFFX+1*PLGAPX+1*PLWIDTH
PL2Y EQU PLOFFY
PL3X EQU PLOFFX+2*PLGAPX+2*PLWIDTH
PL3Y EQU PLOFFY
**
** PLAYERXYTBL
**
** JFL 06 OCT 92
**
PLAYERXYTBL
.LONG [PL1Y,PL1X]
.LONG [PL2Y,PL2X]
.LONG [PL3Y,PL3X]
.LONG [230,354] ;TIMER
**
** SCOREBOXCENTERTBL
** USED FOR SENDING SCORES AND THINGS TO PLAYER
**
** JFL 10 FEB 93
**
SCOREBOXCENTERTBL
.LONG [PL1Y+PLMIDY-PLANIY,PL1X+PLMIDX-PLANIX]
.LONG [PL2Y+PLMIDY-PLANIY,PL2X+PLMIDX-PLANIX]
.LONG [PL3Y+PLMIDY-PLANIY,PL3X+PLMIDX-PLANIX]
**
** OFFSETS
**
** JFL 06 OCT 92
**
SCXOFF EQU 104
SCYOFF EQU 9
SCXSPACE EQU 8
MISLXOFF EQU 48
MISLYOFF EQU 28
LMINEXOFF EQU 104
LMINEYOFF EQU 28
TURBOXOFF EQU 0
TURBOYOFF EQU 0
PLNUMBGXOFF EQU 2
PLNUMBGYOFF EQU 2
TIMEXSPACE EQU 9
PLNUMBACKSIZE EQU [35,107]
.END
* EOF