trog/TROGBAR.ASM

784 lines
20 KiB
NASM
Raw Permalink Normal View History

2021-04-06 15:17:57 -07:00
.MLIB "TROGMACS.LIB"
.FILE 'TROGBAR.ASM'
.TITLE " <<< T R O G -- BONE 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 "TROGAEQU.ASM"
.DEF BONED_IN, BONE_OBJ, BONE_SMASH, BONE_OBLITERATE, BONED_IN_4
.DEF PDRAW, COUNT_BONES, DELBAR
.DEF BARTAB, IND_BONE, BONED_IN_GREY
.DEF VOBLIT1, LAY_BONES
.REF GPLAYD, TOMOVE, GPLAYNUM, GETMOVE, SWITCH_ESCAPE, DINOPUNCH
.REF ONE_MOVE, TWO_MOVES, FIND_CLOSE_MPNT, FINDMOVE, PXBARS
.REF IS_DINO_DEAD_A8, FIREBALL
*LOCAL EQUATES
BARIZPOS .EQU 10H
MOVETEMP .EQU PDATA+60H
MOVEIDXTEMP .EQU PDATA+80H
.text
**************************************************************************
* *
* PDRAW - DRAW BUTTON PROCESS *
* *A13(PROCID) = 0000 0PPP 0000 0000 *
* WHERE: *
* PPP = PLAYER # *
* *
**************************************************************************
PDRAW
INCM @SWITCH_ESCAPE,W ;FLAG THE SWITCH FOR ESCAPEES
MOVE @GAME_STATE,A0,W
CMPI INPLAY,A0 ;ARE WE PLAYING?
JRNE PDRAWQDI ;BR = NO, DON'T DRAW
MOVE *A13(PROCID),A0,W
MOVE A0,A5 ;KEEP A COPY HERE
CLR A1
NOT A1
CALLA EXISTP ;CHECK FOR THE SAME PROCESS
JREQ PDRAWIT ;O.K. TO DRAW IT'S NOT THERE
DIE ;PROTECTION AGAINST FLAKO SWITCHES
PDRAWIT
MOVE A5,A0 ;GET BACK THE PROCID
SLL 21,A0
SRL 29,A0 ;BASED ON THIRD NIBBLE OF PID
DEC A0
CALLA GPLAYD
INCM *A2(PSWITCHESC),W ;FLAG THE BUTTON ACTION
MOVE @PAUSE_GAME,A8,W ;IS GAME PAUSED?
JRNZ PDRAWQDI ;BR = YES
MOVE *A2(POBJ),A8,L
JRZ PDRAWQDI ;NO PLAYER. DIE QUICKLY AND QUIETLY
CALLA IS_DINO_DEAD_A8
JRZ PDRAWQDI
MOVE *A8(OPLINK),A0,L
JRZ PDRAWQDI
MOVB *A0(DDIZZYFLG),A7
CMPI 2,A7
JREQ PDRAWQDI
*CHECK IF WE ARE ABLE TO FIRE A SPITBALL
PFIRE_CK
MOVB *A0(DFIREFLG),A7
JRZ PPUNCH_CK
MOVE *A0(DDIR),A11,W
SLL 30,A11
SRL 25,A11
ADDI FIRE_OFFSET,A11
MOVE *A11,A10,L
CREATE INDPID,FIREBALL
JRUC PDRAWDI
*PUNCHING IS THE LOWEST BUTTON ACTIVITY
PPUNCH_CK
MOVB *A0(DTREXFLG),A7 ;BUTTON DOES NOTHING WHILE TREX
JRNZ PDRAWQDI ;BR = THIS IS THE CASE
MOVB *A0(DPUNCHFLG),A7 ;IS HE ALREADY PUNCHING
JRNZ PDRAWQDI ;BR = NO
MOVE *A0(PSPTR),A3,L
MMFM A3,A7,A8,A9,A10,A11
MOVE A7,A1
MOVI DINOPUNCH,A7 ;TRANSFER TO THE PUNCHER
MMTM A3,A1,A7,A8,A9,A10,A11
MOVE A3,*A0(PSPTR),L
MOVK 1,A7
MOVB A7,*A0(DPUNCHFLG) ;MARK HIM AS A PUNCHER
MOVE A7,*A0(PTIME),W ;AND WAKE HIM UP IMMEADIATELY
PDRAWDI:
SLEEP 4 ;DEBOUNCE
PDRAWQDI:
DIE
FIRE_OFFSET
.LONG [-3,-1],[-2,-1],0,0
DUMBAR
MMTM SP,A1,A3,A8,A14
MOVE A0,A1
CALLA GPLAYNUM
MOVB *A1(MOVETYPE),A3
SLL 7,A3 ;OFFSET TO CORRECT BAR DIRECTION
SLL 5,A0 ;NOW GET TO THE CORRECT PLAYER IMAGE
ADD A0,A3
ADDI BARTAB,A3
MOVE *A3,A14,L ;AND GET US A BAR
CALLA GPALOBJSTF
JRZ DUMBARDI ;FAILED THE PALETTE TEST
MOVE A0,A8
MOVE A1,A0
CALLA TOMOVE ;ALIGN ON THE CURRENT MOVE POINT
MOVE A8,A0
CALLA SET_MZPOS
CALLA INSERT_OBJ
DUMBARDI
MOVE A0,A0
MMFM SP,A1,A3,A8,A14
RETS
**************************************************************************
* *
* LAY_BONES - LAY THE BONES FOR THIS WAVE. *
* A3 = PTR TO THE BONE LIST. *
* RETURNS: *
* A3 = PNTING TO THE WORD AFTER THE LIST TERMINATOR *
* NOTE: TRASHES A14 *
* *
**************************************************************************
LAY_BONES
MOVE A3,A3
JRZ LB_XXX
PUSH A1
JRUC LB_NEXT
LB_LP
CALLR IND_BONE
LB_NEXT
MOVE *A3+,A1,L
JRNZ LB_LP
PULL A1
LB_XXX
RETS
**************************************************************************
* *
* IND_BONE - MAKE AN INDESTRUCTIBLE BONE OBJECT. *
* A1 = [Y,X] VALUE OF MOVE TO PUT THIS BONE UPON. *
* RETURNS *
* A0 = BONE OBJECT *
* .EQ. FAIL *
* .NE. SUCCESS *
* NOTE: TRASHES A14 *
* *
**************************************************************************
IND_BONE
MMTM SP,A1,A3,A8
CALLA FIND_CLOSE_MPNT
CALLA FINDMOVE
MOVB *A1(MOVEPLYR),A3 ;IS THERE A BONE ON THIS SPOT?
JRNN IB_FAIL ;BR = YES
MOVB *A1(MOVETYPE),A3
CMPI HORBAR,A3
JREQ IB_HBONE
CMPI VERTBAR,A3
JRNE IB_FAIL
MOVI PXVINIT,A14
JRUC IB_DRAW
IB_HBONE
MOVI PXHINIT,A14
IB_DRAW
MOVE A0,A3
CALLA GPALOBJSTF
JRZ IB_X ;FAILED THE OBJECT
MOVE A3,*A0(OATTRIB),W
MOVE A0,A8
MOVE A1,A0
CALLA TOMOVE ;ALIGN ON THE CURRENT MOVE POINT
MOVI PXPLAYER,A14
MOVB A14,*A1(MOVEPLYR) ;MARK THIS POINT TAKEN
MOVE A8,A0
CALLA SET_MZPOS
MOVI PXBARS,A1
CALLA INSERT_OBJ_SUPP
IB_X
MOVE A0,A0
MMFM SP,A1,A3,A8
RETS
IB_FAIL
CLR A0
JRUC IB_X
**************************************************************************
* *
* DECPBARS - DECREMENT A PLAYERS BAR COUNT *
* A2 = PLAYER INDEX *
* *
**************************************************************************
DECPBARS
MMTM SP,A0,A1,A6,A8
MOVE *A2(PBARS),A6,W
MOVE @MAXBARS,A1,W
CMP A1,A6 ;WERE THE BARS MAXED?
JRLT DPB_NOKILL ;BR = NO
MOVE *A2(PSUPP),A1,L
CALLA FIND_SUPP_LAST
JRZ DPB_NOKILL
MOVE A0,A8
CALLA OBJPROC_KILL
CALLA OBJ_ON ;MAKE SURE IT'S LIT
DPB_NOKILL:
DEC A6
MOVE A6,*A2(PBARS),W
MMFM SP,A0,A1,A6,A8
RETS
**************************************************************************
* *
* FINDBAR - LOOK DOWN A SUPPLEMENTAL LIST FOR A BAR AT A MOVE POINT *
* A0 = # OF MOVE POINT *
* A1 = SUPPLEMENTAL LIST *
* RETURNS: *
* A0 = PTR TO OBJECT 0 = NOT FOUND, Z BIT RESPECTS A0 *
* *
**************************************************************************
FINDBAR
MMTM SP,A1,A2
SWAP A0,A1
MOVE *A0,A0,L
JRZ FINDBARX
FINDBARL
MOVE *A0(OATTRIB),A2,W
CMP A2,A1
JREQ FINDBARX
MOVE *A0(OSLINK),A0,L
JRNZ FINDBARL
FINDBARX
MOVE A0,A0
MMFM SP,A1,A2
RETS
**************************************************************************
* *
* DELBAR - DELETE A BAR OBJECT *
* A0 = PTR TO BAR OBJECT *
* A1 = PTR TO SUPPLEMENTAL LIST IT EXISTS ON *
* *
**************************************************************************
DELBAR
MMTM SP,A0,A1,A8
MOVE A0,A8
CALLA OBJPROC_KILL ;KILL THE ASSOCIATED PROCESS
CALLA DELETE_OBJ_SUPP
MOVE *A8(OATTRIB),A0,W ;GET THE POST #
CALLA GETMOVE ;GET THE MOVE ADDRESS
CLR A1
NOT A1
MOVB A1,*A0(MOVEPLYR) ;CLEAR PLAYER ASSOCIATION
MMFM SP,A0,A1,A8
RETS
**************************************************************************
* *
* DELETE_OLDEST - DELETE THE LAST OBJECT ON A SUPPLEMENTAL LIST. *
* A1 = PTR TO PLAYERS BAR SUPPLEMENTAL LIST. *
* *
**************************************************************************
DELETE_OLDEST:
PUSH A0
CALLA FIND_SUPP_LAST
JRZ DOX
CALLR DELBAR ;DELETE THIS BAR
DOX:
PULL A0
RETS
**************************************************************************
* *
* FLASH_OLDEST - FLASH THE LAST OBJECT ON A SUPPLEMENTAL LIST. *
* A1 = PTR TO PLAYERS BAR SUPPLEMENTAL LIST. *
* *
**************************************************************************
FLASH_OLDEST:
MMTM SP,A0,A1,A7,A8
CALLA FIND_SUPP_LAST
JRZ FOX
MOVE A0,A8
CALLA OBJPROC_KILL
CREATE INDPID,FLASH_BAR
JRZ FOX
MOVE A0,*A8(OPLINK),L
FOX:
MMFM SP,A0,A1,A7,A8
RETS
**************************************************************************
* *
* BONE_OBLITERATE - REMOVE ANY BONE FROM EXISTANCE IN ONE HIT. *
* A0 = PTR TO MOVE THAT BONE IS RESTING UPON. *
* RETURNS: *
* NOTHING *
* NOTE: TIED INTO BONE_SMASH *
* *
**************************************************************************
BONE_OBLITERATE:
MMTM SP,A0,A1,A2,A7,A8,A9,A11
CALLR BONE_OBJ
JRZ BONE_SMASH_X
MOVE A0,A7
MOVB *A7(MOVEPLYR),A0
CALLA GPLAYD ;GET THE PLAYER WE BELONG TO
MOVE A7,A0
MOVE A1,A8
MOVB *A0(MOVETYPE),A4 ;LET'S SEE WHAT TYPE IT IS
JRZ BONE_OB_H ;BR = OBLITERATING A HORIZONTAL BONE
CMPI VERTBAR,A4
JRNE BONE_SMASH_X ;BR = MOVE IS NOT COOL FOR A BONE
MOVI VOBLIT1,A9
JRUC BONE_DEL_STUFF ;CRUNCH AND GO
BONE_OB_H:
MOVI HOBLIT1,A9
JRUC BONE_DEL_STUFF
**************************************************************************
* *
* BONE_SMASH - ROUTINE TO SMASH A BONE. *
* A0 = PTR TO MOVE THAT BONE IS RESTING UPON. *
* RETURNS: *
* NOTHING *
* *
**************************************************************************
BONE_SMASH:
MMTM SP,A0,A1,A2,A7,A8,A9,A11
CALLR BONE_OBJ
JRZ BONE_SMASH_X
MOVE A0,A7
MOVB *A7(MOVEPLYR),A0
CALLA GPLAYD ;GET THE PLAYER WE BELONG TO
MOVE A7,A0
MOVB *A0(MOVETYPE),A4 ;LET'S SEE WHAT TYPE IT IS
JRZ BONE_SMASH_H ;BR = SMASHING A HORIZONTAL BONE
CMPI VERTBAR,A4
JRNE BONE_SMASH_X ;BR = MOVE IS NOT COOL FOR A BONE
*SMASHING A VERTICAL BONE
MOVE A1,A8
MOVE *A8(OIMG),A1,L ;LET'S SEE WHO THIS IS
CMPI VBONCR2,A1
JREQ BONE_SMASH_V2
CMPI VBONCR3,A1
JREQ BONE_SMASH_V3
MOVI VBONCR2,A1 ;STICK THIS IMAGE IN
MOVI VSMASH1,A9 ;ANIMATE THIS
JRUC BONE_SMASH_STUFF
BONE_SMASH_V2:
MOVI VBONCR3,A1
MOVI VSMASH1,A9
JRUC BONE_SMASH_STUFF
BONE_SMASH_V3:
MOVI VSMASH2,A9
JRUC BONE_DEL_STUFF
*SMASHING A HORIZONTAL BONE
BONE_SMASH_H:
MOVE A1,A8
MOVE *A8(OIMG),A1,L ;LET'S SEE WHO THIS IS
CMPI HBONCR2,A1
JREQ BONE_SMASH_H2
CMPI HBONCR3,A1
JREQ BONE_SMASH_H3
MOVI HBONCR2,A1 ;STICK THIS IMAGE IN
MOVI HSMASH1,A9 ;ANIMATE THIS
JRUC BONE_SMASH_STUFF
BONE_SMASH_H2:
MOVI HBONCR3,A1
MOVI HSMASH1,A9
JRUC BONE_SMASH_STUFF
BONE_SMASH_H3:
MOVI HSMASH2,A9
JRUC BONE_DEL_STUFF
*DELETE BONE FROM EXISTANCE
BONE_DEL_STUFF:
MOVE A0,A11
MOVE *A2(PSUPP),A1,L
MOVE A8,A0
CALLR DECPBARS
CALLR DELBAR ;WIPE THE SUCKER
MOVE A11,A0
JRUC BONE_SMASH_ANI
BONE_SMASH_STUFF:
MOVE *A8(OFLAGS),A4,W
CALLA ANI ;ANIMATE IN THE NEW FRAME
CALLA OBJPROC_KILL
MOVE A0,A11
CREATE INDPID,BONE_OFF_ON
MOVE A0,*A8(OPLINK),L
MOVE A11,A0
BONE_SMASH_ANI:
CALLR DUMBAR ;CREATE A BAR OBJECT
JRZ BONE_SMASH_X
MOVI JUNKOID,A1
MOVE A1,*A0(OID),W
MOVE A0,A8
MOVK 1,A11
CREATE INDPID,ANIMATE_DEL
BONE_SMASH_X:
MMFM SP,A0,A1,A2,A7,A8,A9,A11
RETS
**************************************************************************
* *
* BONE_OFF_ON - TURN A BONE OFF THEN ON, USED FOR BONE_SMASH *
* A8 = PTR TO BONE OBJECT *
* *
**************************************************************************
BONE_OFF_ON:
CALLA OBJ_OFF
SLEEP 10
CALLA OBJ_ON
CLR A0
MOVE A0,*A8(OPLINK),L
DIE
*BONE SMASH ANIMATIONS
VSMASH1:
.LONG VBONCR1
.WORD 10
.LONG 0
VSMASH2:
.LONG VBONCR4
.WORD 10
.LONG 0
HSMASH1:
.LONG HBONCR1
.WORD 10
.LONG 0
HSMASH2:
.LONG HBONCR4
.WORD 10
.LONG 0
*
*OBLITERATION SEQUENCES
VOBLIT1:
.LONG P1VBON
.WORD 5
.LONG VBONCR1
.WORD 10|MAKESOUND
.LONG BONESMASH_SND
.LONG VBONCR3
.WORD 10
.LONG 0
HOBLIT1:
.LONG P1HBON
.WORD 5
.LONG HBONCR1
.WORD 10|MAKESOUND
.LONG BONESMASH_SND
.LONG HBONCR3
.WORD 10
.LONG 0
*
*SOUND FOR SMASHING A BONE
BONESMASH_SND
.WORD >F005,>C,>805E,0 ;WHEEL CRUNCHES A BONE
**************************************************************************
* *
* FLASH_BAR - PROCESS TO FLASH A BAR ON AND OFF AT A RAPID RATE. *
* A8 = PTR TO BAR *
* *
**************************************************************************
FLASH_BAR:
CALLA OBJ_OFF
SLEEP 2
CALLA OBJ_ON
SLEEP 2
JRUC FLASH_BAR
**************************************************************************
* *
* BONED_IN - CHECK TO SEE IF THE GIVEN MOVE IS BONED IN. *
* BLOCKED IN THE DOWN DIRECTION IS DETERMINED BY *
* A BONE OR AN EDGE. THIS IS BECAUSE OF THE FUNKINESS *
* OF FINDING A CLOSE MOVE POINT WHEN AN OBJECT BUMPS *
* INTO AN UP BONE. *
* A0 = PTR TO MOVE DATA *
* RETURNS: *
* Z = BONED IN. *
* NZ = NOT BONED IN. *
* A4 (LOW WORD) = # OF ADJACENT BONES *
* A4 BIT 16 = IF 1 BONE EXISTS UP *
* A4 BIT 17 = IF 1 BONE EXISTS DOWN *
* A4 BIT 18 = IF 1 BONE EXISTS LEFT *
* A4 BIT 19 = IF 1 BONE EXISTS RIGHT *
* *
**************************************************************************
BONED_IN:
MMTM SP,A2,A3
CALLR ADJACENT_BONES
MOVE A4,A2
MOVY A2,A3
ZEXT A2
CMPI 4,A2 ;FOUR BONES AROUND ME?
JREQ BONED_IN_X ;BR = YES, I'M BONED
CMPI 3,A2 ;HOW ABOUT THREE?
JRNE BONED_IN_X ;BR = NO, NO GOOFY TRAPS
SRL 16,A3
BTST DOWN,A3 ;IS THE DOWN BONE MISSING?
JRNE BONED_IN_X ;BR = NO, NOT BONED IN WIERDLY
MMTM SP,A0,A1
MOVE A0,A1
MOVI DOWN,A0
CALLA TWO_MOVES ;THIS WILL SET THE Z BIT CORRECTLY
MMFM SP,A0,A1
BONED_IN_X:
MMFM SP,A2,A3
RETS
**************************************************************************
* *
* BONED_IN_4 - CHECK TO SEE IF THE GIVEN MOVE IS BONED IN. *
* A0 = PTR TO MOVE DATA *
* RETURNS: *
* Z = BONED IN. *
* NZ = NOT BONED IN. *
* A4 (LOW WORD) = # OF ADJACENT BONES *
* A4 BIT 16 = IF 1 BONE EXISTS UP *
* A4 BIT 17 = IF 1 BONE EXISTS DOWN *
* A4 BIT 18 = IF 1 BONE EXISTS LEFT *
* A4 BIT 19 = IF 1 BONE EXISTS RIGHT *
* *
**************************************************************************
BONED_IN_4:
PUSH A2
CALLR ADJACENT_BONES
CMPI 4,A2 ;ARE WE SURROUNDED BY INDESTRUCTOS?
JRLO BI4_NPX ;BR = NO
CLR A2
INC A2 ;CLEAR Z TO SAY WE ARE NOT BONED
JRUC BI4_X
BI4_NPX
MOVE A4,A2
ZEXT A2
CMPI 4,A2 ;FOUR BONES AROUND ME?
BI4_X
PULL A2
RETS
**************************************************************************
* *
* BONED_IN_GREY - CHECK TO SEE IF A GIVEN MOVE IS SURROUNDED BY *
* INDESTRUCTIBLE BONES. *
* A0 = PTR TO MOVE DATA *
* RETURNS: *
* Z = BONED IN GREY BONES. *
* NZ = NOT BONED IN GREY BONES. *
* A4 (LOW WORD) = # OF ADJACENT BONES *
* *
**************************************************************************
BONED_IN_GREY
PUSH A2
CALLR ADJACENT_BONES
CMPI 4,A2 ;ARE WE SURROUNDED BY INDESTRUCTOS?
PULL A2
RETS
**************************************************************************
* *
* ADJACENT_BONES - COUNT THE NUMBER OF ADJACENT BONES TO THE GIVEN *
* MOVE POINT. 4 IS THE MAX. *
* A0 = PTR TO MOVE POINT DATA *
* RETURNS: *
* A2 = NUMBER OF BONES THAT ARE OF PXPLAYER TYPE. *
* A4 (LOW WORD) = # OF ADJACENT BONES *
* A4 BIT 16 = IF 1 BONE EXISTS UP *
* A4 BIT 17 = IF 1 BONE EXISTS DOWN *
* A4 BIT 18 = IF 1 BONE EXISTS LEFT *
* A4 BIT 19 = IF 1 BONE EXISTS RIGHT *
* NOTE: TRASHES A14 *
* *
**************************************************************************
ADJACENT_BONES:
MMTM SP,A1,A3
CLR A4 ;CLEAR COUNT
CLR A2 ;CLEAR PXPLAYER COUNT
MOVI UP,A1
ABONE_LP:
MOVE A1,A3 ;SAVE CURRENT DIRECTION
CALLA ONE_MOVE ;GET MOVE IN THIS DIRECTION
JRZ ABONE_NEXT
MOVB *A1(MOVEPLYR),A1
JRN ABONE_NEXT
CMPI PXPLAYER,A1
JRNE ABONE_NPX
INC A2 ;INCREMENT THE PX COUNT
ABONE_NPX
INC A4 ;COUNT BONE
MOVE A3,A1
ADDK 16,A1
BSET A1,A4 ;SET CORRECT BIT
ABONE_NEXT:
MOVE A3,A1
INC A1
CMPI RIGHT,A1
JRLS ABONE_LP
MMFM SP,A1,A3
RETS
**************************************************************************
* *
* BONE_OBJ - RETURN THE PTR TO THE BONE OBJECT RESTING UPON THE *
* GIVEN MOVE. *
* A0 = PTR TO MOVE POINT *
* RETURNS: *
* Z = NO BONE FOUND *
* NZ = BONE FOUND (A1 = PTR TO BONE) *
* NOTE: WILL ALSO RETURN ZERO IF THIS IS AN INDESTRUCTIBLE BONE. *
* *
**************************************************************************
BONE_OBJ:
MMTM SP,A0,A2,A3
CLR A1
MOVE *A0(MOVEPOS),A3,L
MOVB *A0(MOVEPLYR),A0 ;GET BONE ON THIS SPOT
JRN BONE_OBJ_X ;BR = NONE FOUND
CMPI PXPLAYER,A0
JREQ BONE_OBJ_X
CALLA GPLAYD ;WHO'S IS IT
MOVE *A2(PSUPP),A1,L ;GET THE LIST TO SEARCH
MOVE A3,A0 ;POSITION TELLS ALL
CALLA ISSUPPANI
BONE_OBJ_X:
MOVE A1,A1
MMFM SP,A0,A2,A3
RETS
**************************************************************************
* *
* COUNT_BONES - COUNT THE BONES IN A GIVEN DIRECTION FROM A GIVEN *
* MOVE POINT. *
* A0 = MOVE POINT *
* A1 = DIRECTION *
* RETURNS *
* A5 = BONE COUNT *
* A6 = # OF MOVES SEARCHED *
* *
**************************************************************************
COUNT_BONES:
MMTM SP,A0,A2
CLR A5
CLR A6
COUNT_BLP:
MOVE A1,A2
CALLA ONE_MOVE ;GO TO THE NEXT MOVE
JRZ COUNT_BX ;WE HIT THE END
INC A6
MOVE A1,A0
MOVE A2,A1
MOVB *A0(MOVEPLYR),A2 ;BONE HERE?
JRN COUNT_BLP ;BR = NO
INC A5 ;TALLY BONE
JRUC COUNT_BLP
COUNT_BX
MOVE A2,A1
MMFM SP,A0,A2
RETS
.DATA
*
*TABLE OF BAR IMAGE HEADERS
*SOMEBODY PICK THIS UP, WOULD YA?
BARTAB
.LONG P1HINIT,P2HINIT,P3HINIT,P4HINIT
.LONG P1VINIT,P2VINIT,P3VINIT,P4VINIT
*
*TABLE OF BAR SUPPLEMENTAL LISTS
BARSUPP
.LONG P1BARS,P2BARS,P3BARS,P4BARS
**************************************************************************
* *
* BAR INITIALIZATION TABLES *
* *
**************************************************************************
P1HINIT
.LONG 0,0
.WORD 0,BARIZPOS
.LONG P1HBON,[5,5],DUMCOLL
.WORD DMAWNZ,P1OID|HBAROID
P2HINIT
.LONG 0,0
.WORD 0,BARIZPOS
.LONG P2HBON,[5,5],DUMCOLL
.WORD DMAWNZ,P2OID|HBAROID
P3HINIT
.LONG 0,0
.WORD 0,BARIZPOS
.LONG P3HBON,[5,5],DUMCOLL
.WORD DMAWNZ,P3OID|HBAROID
P4HINIT
.LONG 0,0
.WORD 0,BARIZPOS
.LONG P4HBON,[5,5],DUMCOLL
.WORD DMAWNZ,P4OID|HBAROID
PXHINIT
.LONG 0,0
.WORD 0,BARIZPOS
.LONG PXHBON,[5,5],DUMCOLL
.WORD DMAWNZ,PXOID|HBAROID
P1VINIT
.LONG 0,0
.WORD 0,BARIZPOS
.LONG P1VBON,[5,5],DUMCOLL
.WORD DMAWNZ,P1OID|VBAROID
P2VINIT
.LONG 0,0
.WORD 0,BARIZPOS
.LONG P2VBON,[5,5],DUMCOLL
.WORD DMAWNZ,P2OID|VBAROID
P3VINIT
.LONG 0,0
.WORD 0,BARIZPOS
.LONG P3VBON,[5,5],DUMCOLL
.WORD DMAWNZ,P3OID|VBAROID
P4VINIT
.LONG 0,0
.WORD 0,BARIZPOS
.LONG P4VBON,[5,5],DUMCOLL
.WORD DMAWNZ,P4OID|VBAROID
PXVINIT
.LONG 0,0
.WORD 0,BARIZPOS
.LONG PXVBON,[5,5],DUMCOLL
.WORD DMAWNZ,PXOID|VBAROID