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
|
|||
|
|