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