trog/TROGBAR.ASM

784 lines
20 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.

.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