smashtv/HULKS.ASM

4373 lines
70 KiB
NASM
Raw Normal View History

2021-04-06 15:09:56 -07:00
.FILE 'HULKS.ASM'
.TITLE 'ROBO-RAMA GAME PROGRAM'
.WIDTH 132
.OPTION B,D,L,T
.MNOLIST
;
; INITIATED: APRIL 26,1989
; MODIFIED: !
; SOFTWARE: MARK TURMELL
;
; COPYRIGHT (C) 1989 WILLIAMS ELECTRONICS GAMES, INC.
;
;
; GET THE SYSTEM STUFF
.INCLUDE "MPROC.EQU" ;MPROC EQUATES
.INCLUDE "DISP.EQU" ;DISPLAY PROC. EQUATES
.INCLUDE "\VIDEO\SYS\SYS.INC" ;Z UNIT SYSTEM EQUATES
.INCLUDE "\VIDEO\SYS\MACROS.HDR" ;MACROS DEFINITIONS
.INCLUDE "IMGTBL.GLO"
.INCLUDE "ROBO.EQU"
.INCLUDE "FINGRNT.TBL"
;
;SOUNDS EXTERNAL
;
.REF EXP1,UGH,HEXP,EXP3HI,EXP3,UGH2,UGH3
;
;SYMBOLS EXTERNALLY DEFINED
;
.REF GPALOBJ,GETFPAL,BLOE2,FACEON,ZOOM4,FRANIM_DIE
.REF ADJSTWTL,PCNT,CIRCUIT,GALTYP
.REF RANGRAND,FRANIM
.REF P2DATA,P1DATA,SCRADD2
.REF GAMSTATE,WAVEYX
.REF KEEPXY,RAMXY,WAVE_RAM,HALT,EHALT
.REF GETANIX
.REF SET_GATE_2,RANDPER,KP_LS,KP_RS,KP_TS
.REF WAVE
.REF KILOBJ
.REF DEXIT
.REF FROMDR,PLYROBJS,PLYRPRCS
;
;SYMBOLS DEFINED IN THIS FILE
;
.DEF OVALBLD,SWAPSK,BAT_PLYR,BLOW,NEWV,ARMOFF,ARMOFF2,TWOCHNKS
.DEF CHNKS2,SETUP_DIR,ADDRPCS,BIG3A,NEW_OV
.DEF SPAWN_HULKS,KILL_HULK,ONSCRN_HULKS,HULK_DN,HULK_CNT,BIG2,BIG3
.DEF RED_CARPETX,RED_CARPETY,PIECES,NXT,DRINF,MAXHULK,KILL_H2
.DEF INTO,INFOTBL,GET_WVADDR,DO_DIFF2,GET_VALID_XY,INTO16
.DEF ADDPCS2,ADPCS3,ADPCS1,KILL_H1,PCTOT,GET_VALID_DOOR
.DEF ADPCS2,ADPCS4
.DEF XVEL,YVEL
; .DEF BEGIN_OBJ,GENERIC_INIT,BEGIN_OBJ2
.DEF BOOM2,BOOM3,HULKTYP,SPINFLGS
;
;UNINITIALIZED RAM DEFINITIONS
;
.BSS GENERIC_INIT,7*32-16
.BSS MAXHULK,8 ;MAX NUMBER OF HULKS ALLOWED ON SCRN
.BSS TMP1,32
.BSS TMP2,32
.BSS NXT,8
.BSS LASTPC,32
.BSS PCTOT,8
.BSS HULK_CNT,16 ;TOTAL HULKS ON SCREEN
.BSS TMP,16
.BSS LDOOR_INFO,32*2
.BSS RDOOR_INFO,32*2
.BSS TDOOR_INFO,32*2
.BSS BDOOR_INFO,32*2
.BSS HULK_DN,16
.BSS HULKTYP,16
.BSS PCINFO,(32+16+32)*PCSMAX
;
;EQUATES FOR THIS FILE
;
;FOR STARTING AN OBJECT
XVAL .EQU GENERIC_INIT
YVAL .EQU XVAL+32
IMG .EQU YVAL+32
ZPOS .EQU IMG+32
FLAGS .EQU ZPOS+16
ID .EQU FLAGS+16
XVEL .EQU ID+16
YVEL .EQU XVEL+32
;
;HULK DATA STRUCTURE
;
HAGE .EQU PDATA ;OBJECT AGE
DIR .EQU PDATA+16 ;OBJECT DIRECTION
DIS .EQU PDATA+32 ;OBJECT DISTANCE COUNT
CFLAGS .EQU PDATA+48 ;CONTROL FLAGS FOR OBJECT
SK_DIR .EQU PDATA+64 ;SEEK DIR FOR SPIN
LEVEL .EQU PDATA+80 ;DIFFICULTY LEVEL FOR SPEEDS ETC.
HSPD .EQU PDATA+96
H2SPD .EQU PDATA+128
VSPD .EQU PDATA+160
V2SPD .EQU PDATA+192
KPAGE .EQU PDATA+224 ;UHW
OSCILLATE .EQU PDATA+240 ;UHW
SKPLYR .EQU PDATA+256 ;UHB PLAYER # TO PURSUE
IBAT .EQU PDATA+264 ;UHB BAT FLAG 0=OFF, 1=ON
;
MAXLEVEL .EQU 10
;
HSPEED .EQU 08000H
.TEXT
;
SPAWN_HULKS:
;SPAWN HULKS IS CALLED FROM 'WAVE OVERLORD' CODE WHICH DISPERSES
;BAD GUYS THROUGHOUT A WAVE
; MOVE @HULK_DN,A0
; JRNZ HULK_OUT
MOVE @HULK_CNT,A2 ;MOVE BYTE (# HULKS ON SCRN) TO A2
MOVB @MAXHULK,A3
CMP A3,A2 ;HULKS MAXED OUT?
JRGT HULK_OUT
MOVI 140,A0
CALLA RANDPER
JRC GANG
CREATE HULKPID,AHULK ;START ONE HULK
HULK_OUT:
RETS
DRINF .LONG 0,KP_LS,KP_RS,KP_TS
GANG:
CLR B0
MOVK 4,B1
CALLA RANGRAND
;ANDI WAVE # AND CAUSE GANGS TO USE DIFFERENT DOORS!
MOVE A0,A1
SLL 5,A1
ADDI DRINF,A1
MOVE *A1,A1,L
MOVB *A1,A1 ;GET KP_LS ETC.
CMPI 1,A1
JRNE GT
;DOOR THIS GANG WANTS TO ORIGINATE IS CLOSING RIGHT NOW!
;SHIFT THIS GANG TO BOTTOM DOOR
MOVK 4,A0
GT MOVI 58,A1
PUSH A0
CALLA SET_GATE_2
PULL A0
DEC A0 ;DOOR TO GANG UP ON!
MOVE A0,A8
MOVI HULK,A2
CALLR GET_WVADDR
MOVE *A0(16),A0 ;GET HULKS LEFT TO RELEASE THIS WAVE!
CMPI 16,A0 ;MIN HULKS BEFORE GANG
JRLT GH1 ;RELEASE ALL OF THEM!
MOVK 7,B0 ;# OF HULKS IN A GANG
MOVK 16,B1
CALLA RANGRAND
GH1:
PUSH A0
CREATE HULKPID,GHULK
PULL A0
DSJNE A0,GH1
RETS
ONSCRN_HULKS:
MOVE @CIRCUIT,A0
CMPI 2,A0
JRC REGS
;CIRCUIT 2/3 (LAST TWO!)
MOVE @WAVE,A0
SLL 3,A0
ADDI HTYP,A0
MOVB *A0,A0
MOVE A0,@HULKTYP,W
REGS MOVK 16,A9 ;31 IS HOW MANY MAKE UP CIRCLE AROUND
;PLAYER WALKWAY INTO ARENA
MOVE A9,@TMP
;A2=# OF HULKS TO CREATE ON SCREEN
OH1 PUSH A2 ;CREATE A BUNCH OF THEM
CREATE HULKPID,OHULK
PULL A2
DSJNE A2,OH1
RETS
HTYP
;0=REGULAR HULKS
;2=SNAKE GRUNTS
;3=TECH CREW
.BYTE 0,2,2,0,2,0,0,2,0,2,2,0,0,2,0,0,2,0,0,0,0,0,0,0,0
.EVEN
OHULK:
;OHULK IS CALLED AT THE START OF A WAVE TO PLACE X # OF HULKS ON SCREEN
;AT THE BEGINNING OF A WAVE
MOVE *A13(CFLAGS),A0
ORI 01H,A0
MOVE A0,*A13(CFLAGS),W ;HULK IS IN STANDING MODE AT FIRST
MOVI HULK,A11
CALLA GET_VALID_XY ;MAKE SURE NEW HULK IS NOT
;OVERLAPPING ANY EXISTING SHAPE
;WHICH IS ALREADY ON SCRN AT START
;A0 & A1 ARE SET UP
;ADD IN OFFSETS FOR THIS PARTICULAR ARENA
MOVE @GAMSTATE,A2
CMPI INAMODE,A2
JREQ DMD
MOVE @WAVEYX,A2,L
;A2=PACKED OFFSETS
MOVX A2,A3
SLL 16,A3
ADD A3,A0 ;ADJUSTED A0 XVAL!
ANDI 0FFFF0000H,A2
ADD A2,A1 ;ADJUSTED A1 YVAL!
DMD CALLR IH1 ;INIT HULK (BEGIN_OBJ)
CALLA BEGINOBJ2
MOVI 3,A0 ;HULK STARTS FACING RIGHT
MOVE A0,*A13(DIR)
CALLR SETUP_HULK ;INC CNT, SET DIR, SET DEATH FLAG, ETC
CALLR DO_DIFF
CALLR JUST_SK
CALLR GET_STAND ;HULK STANDS AND SPINS UNTIL A MATCH
;THIS GETS CORRECT OIMG, OFLAGS
;POSSIBLY SLEEP HERE??!?? TO ALLEVIATE OSCILLATE PROBLEM? AT BEGINNING.
JRUC LUP_TOP
GXL: .LONG -400000H,01900000H,0AD0000H,0AD0000H
GXR: .LONG -010000H,01D00000H,0DD0000H,0DD0000H
GYT: .LONG 0600000H,0600000H,-600000H,00F80000H
GYB: .LONG 0880000H,0880000H,-100000H,01480000H
REALO:
MOVE A8,A0
; CALLA DELPAL ;NEEDED? NOT IF IN PLYR PAL!
CALLA DELOBJ
MOVE @HULK_CNT,A3
DEC A3
MOVE A3,@HULK_CNT
DIE
GHULK:
;GHULK PUTS X # OF HULKS BEHIND A DOOR IN GANG FORMATION!
;A0=DOOR TO GANG UP ON
;
SLL 4,A8
MOVI 30,A1
MOVE A1,*A13(DIS)
MOVI SD,A1
ADD A8,A1
MOVE *A1,A1
MOVE A1,*A13(DIR)
SLL 1,A8
MOVI GXL,A1
ADD A8,A1
MOVE *A1,A2,L ;GET X LEFT BOUNDARY
MOVI GXR,A1
ADD A8,A1
MOVE *A1,A3,L ;GET X RIGHT SIDE BOUNDARY
MOVI GYT,A1
ADD A8,A1
MOVE *A1,A4,L ;GET Y TOP
MOVI GYB,A1
ADD A8,A1
MOVE *A1,A5,L ;GET Y BOT
MOVE A2,B0
MOVE A3,B1
CALLA RANGRAND
MOVE A0,A6 ;A6 IS X
MOVE A4,B0
MOVE A5,B1
CALLA RANGRAND
MOVE A0,A1 ;A1 IS Y
MOVE A6,A0
CALLR IH1
CALLA BEGINOBJ
CALLR SETUP_HULK ;INC CNT, SET DIR, SET DEATH FLAG, ETC
CLR B0
MOVK 4,B1
MOVE @GALTYP,A0
JRZ R4
MOVK 1,B0
MOVK 5,B1
R4 CALLA RANGRAND
DEC A0
MOVE A0,*A13(LEVEL)
CALLR DO_DIFF
MOVE *A13(DIR),A0
CALLR INTO
CALLR GET_RUN
MOVE *A13(CFLAGS),A0 ;INDICATE GANG MEMBER FOR RUN IN
ORI 010H,A0
MOVE A0,*A13(CFLAGS)
SLEEP 2
JRUC LUP_TOP
AHULK:
;YES A NEW HULK WILL APPEAR
;UPDATE WAVE_INFO RAM TABLE TO REFLECT THIS NEW ENTRY!
;THIS HULK WAS SPAWNED FROM 'WAVE OVERLORD' CODE
;
CALLR SETUP_HULK ;INC CNT, SET DIR, SET DEATH FLAG, ETC
CALLR INIT_HULK ;INITIAL HULK PARAMS (BEGIN_OBJ)
JRNC OKZ
;CARRY SET MEANS THIS GUY WILL DIE BECAUSE HE WAS GOING TO COME
;OUT CLOSED DOOR
DIE
OKZ
MOVE *A13(LEVEL),A0
CMPI 4,A0 ;4
JRLT OKZ0
;CHANGE TO PURPLE PAL
MOVI GRNTP,A0
MOVE @HULKTYP,A1
JRZ YAH
MOVI SNKGP,A0
CMPI 2,A1
JRZ YAH
MOVI SNKGP,A0
YAH
CALLA GETFPAL ;GET A COLOR MAP ASSIGNMENT
MOVE A0,*A8(OPAL),W ;STORE THE NEW PALETTE
OKZ0 CALLR DO_DIFF
MOVE *A13(CFLAGS),A0
ORI 02H,A0
MOVE A0,*A13(CFLAGS) ;FROM DOORWAY!
BTST 2,A0 ;CHECK FOR PAUSE DELAY BEHIND DOOR
JRNZ LR
MOVE *A13(DIR),A0
CALLR INTO
LR
CALLR GET_RUN ;GET FIRST FRANIM PNTR FOR
;THIS HULKS DIRECTION
;
; LOOP TOP FOR HULKS
;
LUP_TOP:
;TOP OF HULK LOGIC
MOVE @HALT,A0
JRNZ CONT1
MOVB *A13(IBAT),A0
JRZ LP5
;A0=PLAYER 1 OR 2
;THIS HULK IS BATTING
;START BAT SWING
CLR A1
MOVE A1,*A8(OXVEL),L
MOVE A1,*A8(OYVEL),L
DEC A0
SLL 5,A0
ADDI PLYROBJS,A0
MOVE *A0,A0,L
MOVE *A0(OYPOS),A2 ;A2=Y OF PLYR I HIT
MOVE *A0(OXPOS),A1 ;A1=X
MOVE *A8(OYPOS),A3 ;A3=THIS HULKS' Y
MOVE *A8(OXPOS),A4 ;A4=THIS HULKS' X
CMP A3,A2
JRC SUP ;BR=BAT UPWARD
CMP A4,A1
JRC B8O ;BR=8 O'CLOCK SWING NEEDED
;4 O'CLOCK
MOVI BAT4O,A9
MOVE @HULKTYP,A0
JRZ GBAT
MOVI BAT4OS,A9
CMPI 2,A0
JRZ GBAT
;4TH CIRCUIT
MOVI BAT4OS,A9
GBAT MOVE A9,A10
MOVK 1,A1
JSRP FRANIM
MOVE A10,A9
MOVK 1,A1
JSRP FRANIM
JRUC BATDN
B8O
;8
MOVI BAT8O,A9
MOVE @HULKTYP,A0
JRZ GBAT1
MOVI BAT8OS,A9
CMPI 2,A0
JRZ GBAT1
;4TH CIRCUIT
GBAT1 MOVE A9,A10
MOVK 1,A1
JSRP FRANIM
MOVE A10,A9
MOVK 1,A1
JSRP FRANIM
JRUC BATDN
SUP CMP A4,A1
JRC B10O
;2 O'CLOCK
MOVI BAT2O,A9
MOVE @HULKTYP,A0
JRZ GBAT2
MOVI BAT2OS,A9
CMPI 2,A0
JRZ GBAT2
;4TH CIRCUIT
MOVI BAT2O,A9
GBAT2 MOVE A9,A10
MOVK 1,A1
JSRP FRANIM
MOVE A10,A9
MOVK 1,A1
JSRP FRANIM
JRUC BATDN
B10O
MOVI BAT10O,A9
MOVE @HULKTYP,A0
JRZ GBAT3
MOVI BAT10OS,A9
CMPI 2,A0
JRZ GBAT3
;4TH CIRCUIT
MOVI BAT10O,A9
GBAT3 MOVE A9,A10
MOVK 1,A1
JSRP FRANIM
MOVE A10,A9
MOVK 1,A1
JSRP FRANIM
BATDN CLR A0
MOVB A0,*A13(IBAT)
MOVE *A13(DIR),A0
MOVE A10,A9
CALLA INTO
SLEEP 1
JRUC LUP_TOP
LP5 MOVE *A13(CFLAGS),A0
BTST 2,A0
JREQ DOLOGIC
MOVE @HULK_DN,A1
JRNE REALO
BTST 3,A0
JRZ DOHULK
;END OF WAVE
;CHECK TO SEE IF DOOR IS IN PROCESS OF CLOSING
;IF SO, DELAY INTO CODE!
ANDI 0FFF3H,A0
MOVE A0,*A13(CFLAGS)
MOVE *A13(DIR),A0
CALLR INTO
;
; DO HULK MOVEMENT LOGIC A8=CURRENT OBJECT POINTER (HULK IMAGE)
;
DOLOGIC:
MOVE @EHALT,A0
JRZ MV ;BR=HALT ALL HULKS!!
;PLAYER IS WALKING INTO ARENA
;MAKE HULK FACE PLAYER AS HE ENTERS
;PUT HULKS INTO STAND MODE
; MOVE @HALT,A0 ;FOR WHEN PLAYER DIES AND EVERYTHING
;MUST HALT! NO RUNNING OFF SCRN!
; JRNZ DONE_SPIN
CLR A1
NOT A1
MOVI BUYINPID,A0
CALLA EXISTP
JRNZ DONE_SPIN
CLR A0
MOVE A0,*A8(OXVEL),L
MOVE A0,*A8(OYVEL),L
MOVE *A13(CFLAGS),A0
ORI 01H,A0
MOVE A0,*A13(CFLAGS),W ;SET STAND MODE FOR THIS HULK
MOVE *A13(SK_DIR),A1
MOVE *A13(DIR),A0,W
CMP A0,A1
JREQ DONE ;BR=ALREADY FACING IN CORRECT DIR
CALLR WAY
DONE_SPIN:
SLEEP 2
JRUC LUP_TOP
DONE:
;GET NEW SEEK DIR
;IGNORE (DIS) TIMER AND GET NEW SEEK DIR RIGHT AWAY!
CALLR SETUP_DIR
CALLR DO_DIFF
JRUC DONE_SPIN
MV:
;FIRST, DO AGE/LEVEL UPDATE
MOVE *A13(HAGE),A0
ANDI 03FFH,A0
DEC A0
MOVE A0,*A13(HAGE)
JRNZ C7
MOVE *A13(LEVEL),A0
CMPI MAXLEVEL,A0
JREQ C7
INC A0
MOVE A0,*A13(LEVEL)
; CMPI 4,A0
; JRNE MVB
; MOVI GRNTP,A0
; CALLA GETFPAL ;GET A COLOR MAP ASSIGNMENT
; MOVE A0,*A8(OPAL),W ;STORE THE NEW PALETTE
;MVB
CALLR DO_DIFF
MOVE *A13(KPAGE),A0
MOVE A0,*A13(HAGE)
C7: MOVE *A13(CFLAGS),A0
BTST 0,A0
JRZ NOSPN
; THIS HULK IS SPINNING, DO SPIN
MOVE *A13(SK_DIR),A1
MOVE *A13(DIR),A0,W
CMP A0,A1
JRNE CONT
; HULK HAS SPUN TO CORRECT DIR, NOW START HIM WALKING AGAIN
; SET DIS CNTR ALSO
; CHECK TO MAKE THIS DIR IS STILL HEADING TOWARD PLAYER!
; IF SO, START RUN WITH CORRECT VELOCITY STUFFED TO COLLIDE WITH PLAYER
; IF NOT, SPIN SOME MORE!
; IF NEW SEEK IS <> OLD SEEK, THEN SET STAND FLAG
MOVE *A13(CFLAGS),A0
BTST 1,A0 ;REGULAR HULK RUN IN FLAG
JRZ R0
; HULK HAS RUN IN, NOW ANGLE HIM OFF RANDOMLY
MOVK 15,A0
MOVE A0,*A13(DIS)
MOVE *A13(CFLAGS),A0
ANDI 0FFFDH,A0
MOVE A0,*A13(CFLAGS)
JRUC GOODNEWS
R0 PUSH A1
CALLA JUST_SK ;WILL STUFF NEW VEL
PULL A1
MOVE *A13(SK_DIR),A0
CMP A0,A1 ;NEW CMP OLD SEEK
JREQ GOODNEWS
;HULK SPUN TO CORRECT DIR THEN CHECKED AGAIN AND THE PLAYER HAD MOVED
MOVE *A13(OSCILLATE),A0
JRNZ GNW
MOVK 1,A0
MOVE A0,*A13(OSCILLATE)
;SET HULK SPIN FLAG AGAIN BECAUSE PLAYER MOVED!
MOVE *A13(CFLAGS),A0
ORI 01H,A0
MOVE A0,*A13(CFLAGS),W
SLEEP 1
JRUC LUP_TOP
GNW MOVK 6,A0
MOVE A0,*A13(DIS)
GOODNEWS:
CLR A0
MOVE A0,*A13(OSCILLATE)
CALLR GET_RUN ;ZEROS STAND FLAG ALSO
SLEEP 1
JRUC LUP_TOP
CONT:
CALLR WAY ;WHICH WAY TO SPIN/THEN ANI STAND VW
CONT1: SLEEP 3
JRUC LUP_TOP
NOSPN: MOVE *A13(DIS),A0 ;UPDATE DISTANCE COUNT
DEC A0
MOVE A0,*A13(DIS) ;STUFF NEW COUNT
JRNZ DOHULK ;BR=CONTINUE CURRENT DIRECTION
MOVE *A13(CFLAGS),A0
BTST 4,A0
JRZ NGNG ;BR=NOT A GANG MEMBER
;GANG MEMBER WHO WANTS TO TURN TOWARD PLAYER
;HE MUST WAIT TILL HE IS ON SCREEN!
MOVE *A8(OYVAL),A5,L
MOVE *A8(OXVAL),A4,L
MOVE @PLYRPRCS,A7,L
JRNZ TOK
;GET BND FROM OTHER PLAYER
MOVE @PLYRPRCS+32,A7,L
TOK MOVE *A7(LFTBND),A0,L
CMP A0,A4
JRLO BAD
MOVE *A7(RGTBND),A0,L
CMP A0,A4
JRHI BAD
MOVE *A7(UPBND),A0,L
CMP A0,A5
JRLO BAD
MOVE *A7(DNBND),A0,L
CMP A0,A5
JRLO OK
BAD MOVK 5,A0
MOVE A0,*A13(DIS) ;STUFF NEW COUNT
JRUC DOHULK ;BR=CONTINUE CURRENT DIRECTION
OK MOVE *A13(CFLAGS),A0
ANDI 0FFEFH,A0
MOVE A0,*A13(CFLAGS)
JRUC T3
NGNG MOVE *A13(CFLAGS),A0
BTST 1,A0
JRZ T3
;THIS HULK JUST RUNNING IN! GIVE THIS ONE A BOGUS SEEK DIR
;IF WITHIN WALLS THEN CONT, OTHERWISE RESET DIS CNTR
MOVE *A13(DIR),A3
DEC A3
SLL 5,A3
ADDI NEWANG,A3
MOVK 1,B0
MOVK 4,B1
CALLA RANGRAND
MOVE *A3,A3,L
DEC A0
SLL 4,A0
ADD A0,A3
MOVE *A3,A0 ;NEW SEEK DIR
MOVE A0,*A13(SK_DIR)
CALLR INTO
JRUC T4
NEWANG: .LONG ANG1,0,ANG3,0,ANG5,0,ANG7
ANG5: .WORD 7,6,4,3
ANG1: .WORD 7,3,8,2
ANG3: .WORD 1,5,2,4
ANG7: .WORD 8,6,1,5
;
;
;NOW POINT THIS HULK AT CURRENT POSITION OF PLAYER
T3: MOVE *A13(SK_DIR),A7,W
;IF NEW SEEK IS <> OLD SEEK, THEN SET STAND FLAG
CALLA JUST_SK ;WILL STUFF NEW VEL
MOVE *A13(SK_DIR),A0
CMP A0,A7 ;NEW CMP OLD SEEK
JREQ DOHULK
T4: MOVE *A13(CFLAGS),A0 ;SAYS I AM SPINNING
ORI 01H,A0
MOVE A0,*A13(CFLAGS),W
MOVK 2,A0
MOVE A0,*A13(OSCILLATE)
SLEEP 3
JRUC LUP_TOP
DOHULK:
CLR A1
JSRP FRANIM
JRNC CHECK_NEXT ;BR=NOT AT END OF SCRIPT YET
CALLR GET_RUN
CHECK_NEXT:
JRUC LUP_TOP
;
SETUP_HULK:
;DIR IS BASED ON WHAT DOOR HE IS ENTERING THROUGH!
;IF THIS IS AN ONSCREEN HULK, THEN ANY DIR IS OKAY!
;
MOVK 5,A0 ;1
MOVE A0,*A13(SK_DIR)
CLR A0
MOVE A0,*A13(CFLAGS)
MOVB A0,*A13(IBAT) ;NO BATTING AT START!
MOVI 0,B0
MOVK 10,B1
CALLA RANGRAND ;TIE THIS IN WITH DIFFICULTY!
SLL 4,A0
ADDI AGTBL,A0
MOVE *A0,A0
SLL 1,A0 ;TAKE OUT! MODIFY TABLE
MOVE A0,*A13(HAGE)
MOVE A0,*A13(KPAGE)
;
; UPDATE HULK COUNT
;
MOVE @HULK_CNT,A0
INC A0
MOVE A0,@HULK_CNT
;CHOOSE PLAYER TO SEEK
ANDI 01,A0
MOVB A0,*A13(SKPLYR)
MOVE A0,A1
SLL 5,A1
ADDI PLYROBJS,A1
MOVE *A1,A1,L
MOVE *A1(OXPOS),A1
JRNZ ZY ;BR=OKAY TO SEEK THIS PLAYER
;PLAYER I AM SEEKING IS IN DIE MODE
XORI 1,A0
MOVB A0,*A13(SKPLYR)
ZY
MOVI HULK,A2
CALLR GET_WVADDR
MOVE *A0(32),A1,W ;GET DIFFICULTY LEVEL
MOVE A1,*A13(LEVEL),W
MOVE *A0(16),A1,W ;DEC WAVE RAM CNT FOR THIS HULK
DEC A1
MOVE A1,*A0(16),W
JRNZ BZ
;END OF THIS WAVES HULK CNT
MOVK 1,A1
MOVE A1,@HULK_DN
CREATE 0,DEXIT
;
BZ
RETS
GET_WVADDR:
;A2=ENEMY TYPE LOOKING FOR
;IE.HULK,TANK
MOVI WAVE_RAM,A0
HU1: MOVE *A0,A1,W ;TYPE
CMP A2,A1
JREQ YSID
ADDI 6*16,A0
JRUC HU1
YSID: RETS
;
JUST_SK:
CALLR GET_DIS
CALLR SETUP_DIR
RETS
DO_DIFF:
MOVI HSPEED,A1
DO_DIFF2:
MOVE *A13(LEVEL),A0
Z0 JRZ Z1
ADDI 02000H,A1
DEC A0
JRUC Z0
Z1 MOVE A1,*A13(HSPD),L
MOVE A1,A5
SUBI 01000H,A5
MOVE A5,*A13(VSPD),L
MOVK 10,A3
DIVU A3,A1 ;DIVIDE A1 BY 10
MOVK 8,A4
MPYU A4,A1 ;A1 * .8
MOVE A1,*A13(H2SPD),L
DIVU A3,A5
MPYU A4,A5
MOVE A5,*A13(V2SPD),L
RETS
LEVTBL:
; .WORD 9,9,8,8,7,7,6,6,5,5,4,4,3,3,3,3
.WORD 11,10,9,8,7,7,6,6,5,5,4,4,3,3,3,3
AGTBL: .WORD 80,150,90,110,140,210,250,50,70,125,45,80
;AGTBL: .WORD 03,13,23,32,43,53,63,8,18,03,3,7
;
GET_DIS:
MOVK 1,B0
MOVE *A13(LEVEL),A0
SLL 4,A0
ADDI LEVTBL,A0
MOVE *A0,A2
MOVE A2,B1
CALLA RANGRAND
MOVE A0,*A13(DIS) ;TIME BEFORE WE GET NEW VELOCITIES
RETS
WAY:
;A1=SEEK DIR
;A0=DIR IMAGE IS FACING NOW
SUB A0,A1
MOVE A1,A2
ABS A1
CMPI 5,A1
JRLT N0
NEG A2
N0: BTST 31,A2
JRZ IC
DEC A0
JRP T1
MOVK 8,A0
JRUC T1
IC: INC A0 ;ROTATE TOWARD PLAYER
CMPI 9,A0
JRNE T1
MOVK 1,A0
T1: MOVE A0,*A13(DIR),W
CALLA GET_STAND ;DOES ANI OF CORRECT VIEW
RETS
SWAPSK
;SEEK ANOTHER PLAYER ROUTINE
;A10=0 OR 1 FOR WHICH PLAYER DIED
CLR A1
NOT A1
MOVI HULKPID,A0
CALLA EXISTP
JRZ OUTZ
;FOUND HULK
MOVB *A0(SKPLYR),A1
CMP A1,A10
JRZ YES
MOVI TP2PID,A1
MOVE A1,*A0(PROCID),W
JRUC SWAPSK
YES MOVI TEMPPID,A1
MOVI SWAPIT,A7
CALLA GETA8
CALLA GETA9
CALLA XFERPROC
JRUC SWAPSK
OUTZ
CLR A1
NOT A1
MOVI TP2PID,A0
CALLA EXISTP
JRZ OUTB
;FOUND TEMP HULK
MOVI HULKPID,A1
MOVE A1,*A0(PROCID),W
JRUC OUTZ
OUTB RETS
SWAPIT
;HULKS FALL INTO HERE IF PLAYER THEY WERE SEEKING HAS DIED. THEY WILL
;NOW SEEK OTHER PLAYER
MOVI HULKPID,A0
MOVE A0,*A13(PROCID),W
MOVB *A13(SKPLYR),A2
XORI 1,A2
MOVE A2,A1
SLL 5,A1
ADDI PLYROBJS,A1
MOVE *A1,A1,L
JRZ ZCT ;BR=OTHER PLAYER DOES NOT EXIST!
MOVB A2,*A13(SKPLYR)
ZCT
SLEEP 1
JAUC LUP_TOP
SETUP_DIR:
;GET NEW VELOCITIES AND SEEK DIR FOR THIS HULK
;SET SEEK DIR FOR THIS HULK
;MAKE SURE THIS LEG_PTR HAS A VALID VALUE! THE PLAYER MUST BE INITIALIZED!
;DETERMINE WHICH OF TWO PLAYERS THIS HULK IS SEEKING!
;NORMAL
MOVB *A13(SKPLYR),A2
MOVE A2,A1
SLL 5,A1
ADDI PLYROBJS,A1
MOVE *A1,A1,L
JRNZ ZCV
;PLAYER NO LONGER EXISTS! GET OTHER
WIT
CMPI 3,A2
JRLT WIT2
;OH OH! BOTH ARE DEAD
MOVI >111,A0
MOVE A0,@EHALT
RETS
WIT2 XORI 1,A2
MOVB A2,*A13(SKPLYR)
SLL 5,A2
ADDI PLYROBJS,A2
MOVE *A2,A1,L
ZCV
MOVE *A1(OXPOS),A0,W
JRZ WIT
MOVE *A1(OYPOS),A2,W
SLL 16,A2
MOVY A2,A0
CALLA GETXY ;A8 TO SEEK A0
INC A0
MOVE A0,*A13(SK_DIR) ;DIR WE WANT TO BE FACING!
;
;NEEDED?!!
;
MOVE @EHALT,A1 ;IN CASE HULKS MOVE SLIGHTLY
JRNE NRM
;FALLS INTO THIS
INTO:
;A0=DIR FROM 1-8
SLL 5,A0
ADDI JTBL,A0
MOVE *A0,A0,L
JUMP A0
JTBL .LONG 0,IN1,IN2,IN3,IN4,IN5,IN6,IN7,IN8
INTO16:
;A0=DIR FROM 1-16
SLL 5,A0
ADDI JTBL16,A0
MOVE *A0,A0,L
JUMP A0
JTBL16 .LONG LK,IN1,LK,IN2,LK,IN3,LK,IN4,LK,IN5,LK,IN6,LK,IN7,LK,IN8,LK
; 01
; 16 02
; 15 03
; 14 04
; 13 05
; 12 06
; 11 07
; 10 08
; 09
;
LK
; LOCKUP
IN1
;IS 0 DIR
MOVE *A13(VSPD),A0,L
NEG A0
CLR A1
MOVE A1,*A8(OXVEL),L
MOVE A0,*A8(OYVEL),L
NRM RETS
IN2
MOVE *A13(V2SPD),A0,L
NEG A0
MOVE *A13(H2SPD),A1,L
MOVE A1,*A8(OXVEL),L
MOVE A0,*A8(OYVEL),L
RETS
IN3
CLR A0
MOVE *A13(HSPD),A1,L
MOVE A1,*A8(OXVEL),L
MOVE A0,*A8(OYVEL),L
RETS
IN4
MOVE *A13(V2SPD),A0,L
MOVE *A13(H2SPD),A1,L
MOVE A1,*A8(OXVEL),L
MOVE A0,*A8(OYVEL),L
RETS
IN5
MOVE *A13(VSPD),A0,L
CLR A1
MOVE A1,*A8(OXVEL),L
MOVE A0,*A8(OYVEL),L
RETS
IN6
MOVE *A13(V2SPD),A0,L
MOVE *A13(H2SPD),A1,L
NEG A1
MOVE A1,*A8(OXVEL),L
MOVE A0,*A8(OYVEL),L
RETS
IN7
CLR A0
MOVE *A13(HSPD),A1,L
NEG A1
MOVE A1,*A8(OXVEL),L
MOVE A0,*A8(OYVEL),L
RETS
IN8
MOVE *A13(H2SPD),A1,L
NEG A1
MOVE *A13(V2SPD),A0,L
NEG A0
MOVE A1,*A8(OXVEL),L
MOVE A0,*A8(OYVEL),L
RETS
GET_RUN:
;GET FRANIM BASE ADDRESS FOR THIS HULKS DIRECTION
;
MOVE *A13(DIR),A4
DEC A4
SLL 5,A4 ;*32 FOR LONG WORD LOOKUP TABLE
MOVE @HULKTYP,A0
JRZ NORM
CMPI 2,A0
JRZ NORM1
;4TH CIRCUIT
JRUC NORM ;SPO
NORM1
MOVE *A13(LEVEL),A0
CMPI 2,A0 ;3
JRLT SLOA
CMPI 5,A0 ;6
JRLT MEDA
ADDI WALK_LISTFA,A4
JRUC SPO
MEDA ADDI WALK_LISTMA,A4
JRUC SPO
SLOA ADDI WALK_LISTA,A4 ;CALCULATE OFFSET IN TABLE
JRUC SPO
NORM MOVE *A13(LEVEL),A0
CMPI 2,A0 ;3
JRLT SLO
CMPI 5,A0 ;6
JRLT MED
ADDI WALK_LISTF,A4
JRUC SPO
MED ADDI WALK_LISTM,A4
JRUC SPO
SLO ADDI WALK_LIST,A4 ;CALCULATE OFFSET IN TABLE
SPO MOVE *A4,A9,L ;MOVE TABLE VALUE INTO A9
;NEW ANIMATION SCRIPT
MOVE *A13(CFLAGS),A0
ANDI 0FFFEH,A0 ;
MOVE A0,*A13(CFLAGS) ;ZERO STANDING FLAG
RETS
GET_STAND:
;ANI ONTO SCREEN THIS HULKS STANDING POSITION
;
MOVE *A13(DIR),A0 ;CURRENT DIR HULK IS FACING
DEC A0
MOVE A0,A2
SLL 5,A0
MOVE @HULKTYP,A4
JRZ C1
CMPI 2,A4
JRZ C2
;4TH CIRCUIT
JRUC C1
C2 ADDI SPINFRMS2,A0
JRUC COUT
C1 ADDI SPINFRMS,A0
COUT MOVE *A0,A1,L ;NEW OIMG
SLL 4,A2
ADDI SPINFLGS,A2
MOVE *A2,A4,W ;NEW OFLAGS
CALLA ANI
RETS
**************************************************************************
GETXY:
* gets direction from Obj in A8 to Z:X coors in A0, where dir
* is expressed as
* 7 0 1
* 6 * 2
* 5 4 3
* The direction is returned in A0
mmtm SP,A2,A3,A4,A5
movy A0,A3
srl 16,A3
movx A0,A2
zext A2,W
calla GETANIX ;A0 - MBIG X
sub A0,A2 ;A2 = XDELTA
; SHOULD BE ANIMATION Y COOR!
move *A8(OYPOS),A0,W
sub A0,A3 ;A3 = ZDELTA
move A2,A4
move A3,A5
abs A4
abs A5
sll 16,A5
clr A0 ;set Direction
divu A4,A5 ;A5 = A5/A4 = ABS(ZDELTA)/ABS(XDELTA) = TAN(THETA)
jrv GotD0 ;Overflow indicates XDELTA=0
cmpi >269FB,A5 ;Tan(22.5deg) = 2.414 as 16.16
jrgt GotD0
inc A0
cmpi >69FB,A5 ;Tan(67.5deg) = .414 as 16.16
jrgt GotD0
inc A0
GotD0:
;* Must Adjust for Quadrant
move A2,A2 ;check sign of XDELTA
jrn Q34
move A3,A3 ;ck sign of ZDELTA
jrn Q1
;* Quadrant 2, X+,Z+
neg A0
addk 4,A0
jruc GotD1
Q34:
move A3,A3 ;ck sign of ZDELTA
jrn Q4
Q3:
;* Quadrant 3, X-,Z+
addk 4,A0
jruc GotD1
Q4:
;* Quadrant 4, X-,Z-
neg A0
jrz GotD1
addk 8,A0
jruc GotD1
Q1:
;* Quadrant 1, X+,Z-
GotD1:
mmfm SP,A2,A3,A4,A5
rets
SX: .LONG -080000H,01980000H,0AD0000H,0AD0000H
SY: .LONG 05D0000H,05D0000H,-220000H,0F80000H
SOX: .LONG 0,0,0180000H,0180000H
SOY: .LONG 0130000H,0130000H,0,0
SD: .WORD 3,7,5,1
INFOTBL:
.LONG LDOOR_INFO,RDOOR_INFO,TDOOR_INFO,BDOOR_INFO
GET_VALID_DOOR
MOVI 0,B0
MOVI 4,B1
CALLA RANGRAND ;TIE THIS IN WITH DIFFICULTY!
MOVE A0,A1
SLL 5,A1
ADDI DRINF,A1
MOVE *A1,A1,L
MOVB *A1,A1
JRZ G
CMPI 06,A1
JRGE G
;DOOR THIS GUY WILL BE SENT TO IS CLOSING RIGHT NOW. SO SEND HIM TO DOOR 4
MOVI 4,A0 ;DOOR 4
G MOVE A0,@TMP
DEC A0
MOVE A0,A2
RETS
INIT_HULK:
;INITIAL HULK POSITION,IMAGE SHAPE,AGE ETC....
;DO STFOBF AND GET A0 PNTR
;
CALLR GET_VALID_DOOR
MOVI SD,A1
SLL 4,A2
ADD A2,A1
MOVE *A1,A1
MOVE A1,*A13(DIR)
MOVI SOX,A1 ;OFFSETS
SLL 1,A2
ADD A2,A1
MOVE *A1,A8,L ;XOFFSET FOR EACH NEW SPACE
MOVI SOY,A1
ADD A2,A1
MOVE *A1,A9,L ;YOFFSET
MOVI SX,A1
ADD A2,A1
MOVE *A1,A0,L
MOVI SY,A1
ADD A2,A1
MOVE *A1,A1,L
ADDI INFOTBL,A2
MOVE *A2,A3,L
MOVE *A3,A4,L ;CORRECT PNTR1 FOR DOOR INFO
JRNE SPC1 ;FIRST SPACE FOR THIS DOOR IS OPEN
AS MOVE A13,*A3,L
MOVE *A13(CFLAGS),A4
ORI 04H,A0
MOVE A0,*A13(CFLAGS)
JRUC STUFFED
SPC1 ADDI 32,A3
ADD A9,A1
ADD A8,A0
MOVE *A3,A4,L
JREQ AS
;3RD SPACE AVAILABLE
MOVE @TMP,A2
CMPI 4,A2
JREQ OV
DEC A2
SLL 5,A2
ADDI DRINF,A2
MOVE *A2,A2,L
MOVB *A2,A2 ;GET KP_LS RS
; .IF DEBUG
CMPI 1,A2
JRNE OV
;DOOR THESE GUYS WANT TO COME OUT OF IS CLOSING
;SEND THEM TO BOTTOM DOOR!
SETC
RETS
OV
; .ENDIF
CALLR NEW_OV
STUFFED:
MOVI 38,A3
MOVE A3,*A13(DIS) ;CHANGE BASED ON HULKS SPEED?
CALLR IH1
CALLA BEGINOBJ
CLRC ;INDICATES GOOD HULK
RETS
NEW_OV
ADD A9,A1
ADD A8,A0
SUBI 32,A3
CLR A6
MOVK 2,A5
SPCFULL:
MOVE *A3,A2,L
MOVE A6,*A3,L
MOVE *A2(CFLAGS),A4
ORI 08H,A4 ;PAUSE FLAG FOR BEHIND DOORS
MOVE A4,*A2(CFLAGS)
ADDI 32,A3
DSJS A5,SPCFULL
MMTM SP,A0,A1
MOVE @TMP,A0
MOVI >17,A1
CALLA SET_GATE_2
MMFM SP,A0,A1
RETS
IH1: ;ENTER HERE IF ON SCRN HULK
MOVI gb6w5a,A2 ;DOES NOT MATTER
MOVE @HULKTYP,A3
JRZ IH1A
MOVI SNG6A,A2 ;DOES NOT MATTER
CMPI 2,A3
JRZ IH1A
;4TH CIRCUIT TECHNICIAN GRUNT
IH1A
MOVI 159,A3
MOVI DMAWNZ+M_FLIPH,A4 ;NON-ZERO VALUE
MOVI CLSENMY|TYPHULK,A5
CLR A6
CLR A7
RETS
CTBL:
.WORD 0000000011111100B ;IF SET, THAT WAVE HAS CIRCLE
;ALIGNMENT
CTBL1 .LONG TABLEX,TABLEX,TABLEX3,TABLEX,TABLEX,TABLEX1,TABLEX,TABLEX3
.LONG TABLEX,TABLEX,TABLEX3
GET_VALID_XY:
CMPI HULK,A11
JRNE GV
MOVE @GAMSTATE,A0
CMPI INAMODE,A0
JREQ GV
MOVE @WAVE,A0
DEC A0
MOVE @CTBL,A1
BTST A0,A1
JREQ GV ;TABLE SAYS NO CIRCLE IF BR
;THIS WAVE WANTS CIRCLE ALIGNMENT
MOVE @HULKTYP,A5 ;FOR OTHER CIRCUITS - NO CIRCLE ALIGN
JRNZ GV
; ALIGN HULKS ON CIRCLE!
MOVE @TMP,A5
JRZ GV
DEC A5
MOVE A5,@TMP
SLL 5,A5
MOVI CTBL1,A1
MOVE @WAVE,A0
DEC A0
SLL 5,A0
ADD A1,A0
MOVE *A0,A0,L ;WHAT KIND OF CIRCLE TBL
ADD A0,A5
MOVE *A5,A1,L ;VALUES FOR CIRCLE TABLE
MOVX A1,A0
SLL 16,A0
MOVE A0,A2
MOVY A1,A3
SRL 16,A2
MOVX A2,A3
JRUC OEXIT
GV:
;BOUNDARIES NOW REFLECT THE NEXT WAVES BOUNDARIES!
;FROM WAVESYX
MOVI 0C10000H,B1 ;E1
MOVI 0210000H,B0 ;21
CALLA RANGRAND
MOVE A0,@YVAL,L
MOVI 02A0000H,B0
MOVI 01570000H,B1
CALLA RANGRAND
MOVE @YVAL,A1,L
;A0=X,A1=Y
;A2 SHOULD EQUAL WHAT DOOR PLAYER IS COMING FROM SO HULKS LINE UP
;AROUND CORRECT AISLE
;CHECK PROPER RED CARPET!
MOVE @FROMDR,A2
JREQ ZTV
SLL 5,A2
ZTV MOVE A2,A5
ADDI RED_CARPETX,A2
MOVE *A2,A2,L
CLR A3
MOVY A2,A3
MOVX A2,A4
SLL 16,A4
; A3=LEFT X,A4=RGT X
CMP A3,A0
JRLT OUT
CMP A4,A0
JRGT OUT
ADDI RED_CARPETY,A5
MOVE *A5,A5,L
MOVY A5,A3
MOVX A5,A4
SLL 16,A4
CMP A3,A1
JRLT OUT
CMP A4,A1
JRGT OUT
;IT IS ON RED CARPET! GET ANOTHER X,Y POSITION
JRUC GET_VALID_XY
OUT:
MOVE A0,A2
MOVY A1,A3
SRL 16,A2
MOVX A2,A3
;
;CHECK FOR OTHER SHAPES NOW
;
; CMPI BUST,A11
; JREQ EXIT ;DON'T CHECK BUST TYPE ENEMY
MOVI RAMXY,A2
TCK: MOVE *A2+,A4,L
JRZ OEXIT
;AN EXISTING SHAPE MUST BE CHECKED
MOVX A4,A5 ;A4 = Y VAL (32 BIT)
SLL 16,A5 ;A5 = X VAL
ADDI 01C0000H,A4 ;ADD IN HEIGHT OF OBJ
; ADDI 0130000H,A4 ;ADD IN HEIGHT OF OBJ
CMP A4,A1
JRGT VALID ;BR IF A1>A4
SUBI 0380000H,A4
; SUBI 0260000H,A4
CMP A4,A1
JRLT VALID ;BR IF A1<A4
;NEW Y VAL IS IN ANOTHER SHAPES Y BAND
;NOW CHECK X
ADDI 01A0000H,A5
; ADDI 0130000H,A5
CMP A5,A0
JRGT VALID ;BR IF A5>A0
SUBI 0340000H,A5
; SUBI 0260000H,A5
CMP A5,A0
JRLT VALID
;SOME SHAPE IS ALREADY THERE!
JRUC GET_VALID_XY
;HIT
VALID:
JRUC TCK
OEXIT:
MOVE @KEEPXY,A4,L
MOVE A3,*A4+,L
MOVE A4,@KEEPXY,L
RETS
KILL_H1
;A8=HULK IMAGE TO SMART BOMB
;A9=P1DATA OR P2DATA FOR SCORE UPDATE
;SMART BOMB ENTRY
;ENTER HERE WITH SMART BOMB
CREATE 0,HSMRT ;BULLETS DIR WILL BE IN A10
;HULK_EXP WHEN IT WAKES UP
MOVI CLSNEUT|TYPNEUT,A0
MOVE A0,*A8(OID)
MOVE *A8(OPLINK),A0,L
CALLA KILL ;KILLS PROCESS IN A0
CLR A0
MOVE A0,*A8(OXVEL),L
MOVE A0,*A8(OYVEL),L
RETS
HSMRT
MOVE @HULK_CNT,A3 ;DELETE A BNCR FROM CNT
DEC A3
MOVE A3,@HULK_CNT
MOVE A9,A2
;A2=P1DATA OR P2DATA
MOVI HLKPT,A1 ;AMOUNT OF SCORE
CALLA SCRADD2 ;DO IT!
MOVE *A8(OYPOS),A2
ADDI 01CH,A2 ;A2=Y OFFSET
MOVE A2,*A8(OYPOS)
BLW2 MOVI BOOM3,A9 ;BOOM3 CHANGES PALETTE TO EXPLOSION!
JAUC FRANIM_DIE
; MOVK 1,A1
; JSRP FRANIM
; MOVE A8,A0
; CALLA DELPAL ;NEEDED? NOT IF IN PLYR PAL!
; CALLA DELOBJ
; DIE
BLOW
MOVE *A8(OYPOS),A0
ADDI 20,A0
MOVE A0,*A8(OYPOS)
JRUC BLW2
BAT_PLYR:
;STOP HULK FROM MOVING
;DECIDE WHICH OF FOUR SWING ANGLES TO USE
;TELL MAIN LOGIC THIS HULK IS SWINGING
MOVE *A0(OPLINK),A0,L
MOVB *A0(PNUM),A0
MOVE *A8(OPLINK),A8,L
MOVB A0,*A8(IBAT)
RETS
KILL_H2 ;IF TANK KILLED THIS HULK
MMTM SP,A1
MOVE *A0(OID),A9,W ;KILLERS OID
MOVE *A0(OPLINK),A10,L
;WILL BE BOGUS IF SOMETHING OTHER THAN A BULLET STRUCK HULK!
MOVE *A8(OPLINK),A0,L
MOVE *A0(DIR),A11 ;HULKS DIR
CREATE 0,HULK_X2 ;BULLETS DIR WILL BE IN A10
;HULK_EXP WHEN IT WAKES UP
JRUC TAG
KILL_HULK:
;A8=HULK IMG PNTR, A0=KILLER IMG PNTR
MMTM SP,A1
MOVE *A0(OID),A9,W ;KILLERS OID
MOVE *A0(OPLINK),A10,L
;WILL BE BOGUS IF SOMETHING OTHER THAN A BULLET STRUCK HULK!
MOVE *A8(OPLINK),A0,L
MOVE *A0(DIR),A11 ;HULKS DIR
CREATE 0,HULK_EXP ;BULLETS DIR WILL BE IN A10
;HULK_EXP WHEN IT WAKES UP
TAG MOVE *A8(OPLINK),A0,L
CALLA KILL ;KILLS PROCESS IN A0
MOVE A8,A0
CALLA DELOBJ
MOVI EXP1,A0 ;GDTH1,2,EXP1
MOVE @HULKTYP,A1
JRZ YAG
MOVB @PCNT,A1
ANDI 0FH,A1
JRNZ YAG
MOVI UGH2,A0 ;SQUEAL!
MOVB @PCNT,A1
BTST 5,A1
JRZ YAG
MOVI UGH3,A0 ;OOF
YAG
CALLA ONESND
MMFM SP,A1
RETS
HULK_EXP:
;A10=PROCESS OF BULLET/BLADE THAT HIT THIS HULK
;A11=HULKS DIR
;A9=KILLERS OID
MOVI P1DATA,A2 ;PLAYER 1 SCORE SELECT
MOVB *A10(MYPLYR),A0 ;GET PLAYER #
CMPI 1,A0
JREQ CGA
MOVI P2DATA,A2
CGA
MOVI HLKPT,A1 ;AMOUNT OF SCORE
CALLA SCRADD2 ;DO IT!
MOVE *A10(BLTDIR),A10 ;=BLTDIR!!! CAREFUL!!
HULK_X2 ;TANK KILLED HULK
MOVE @HULK_CNT,A3 ;DELETE A BNCR FROM CNT
DEC A3
MOVE A3,@HULK_CNT
;JRUC BIGEXP IF A BOMB POD HAS COLLIDED WITH HULK
CMPI CLSPLYR|TYPPLBL|SUBSPEW,A9
JREQ BIGSND ;GO TO REGULAR FIRE BOMB EXPLOSION
CMPI CLSPLYR|TYPPLBL|SUBNOSTP,A9
JREQ BIGEXP ;GO TO REGULAR FIRE BOMB EXPLOSION
;8 1 2
;7 3
;6 5 4
;A10 SHOULD BE 1-8!
DEC A10
ANDI 07,A10 ;IN CASE A BLADE STRUCK HULK
SLL 5,A10
MOVI RNGXL,A0
ADD A10,A0
MOVE *A0,A0,L
MOVE A0,A6 ;XVEL
MOVI RNGYL,A0
ADD A10,A0
MOVE *A0,A0,L
MOVE A0,A7 ;YVEL
MOVE *A8(OPAL),A10
CALLA GETANIXY
MOVE A2,A1
MOVE A3,A0
CMPI CLSPLYR|TYPPRSM,A9
JREQ GR1
CMPI CLSPLYR|TYPPLBL|SUBSPRY,A9
JRNE R1
;PIECES OR BLOODY DEATH DECISION HERE!
GR1 MOVB @PCTOT,A2
CMPI 018H,A2 ;19
JRLO ADDPCS
R1: DEC A11
SLL 5,A11 ;A11=HULKS FACE DIR
ADDI LIST,A11
MOVE *A11,A9,L
MOVI 199,A3 ;259
MOVI DMAWNZ|M_NOCOLL|M_FLIPV,A4 ;NON-ZERO VALUE
MOVI VHIT1,A2
MOVE @HULKTYP,A5
JRZ ROT
MOVI VHIT1R,A2
MOVI CLSNEUT|TYPNEUT,A5
CALLA BEGINOBJ2
JRUC ROT2
ROT
MOVI CLSNEUT|TYPNEUT,A5
;SHOULD NOT DELOBJ THEN INSTANTLY BEGINOBJ!!!
CALLA BEGINOBJ2
MOVE A10,*A8(OPAL),W
ROT2 JAUC FRANIM_DIE
; MOVK 1,A1
; JSRP FRANIM
; MOVE A8,A0
; CALLA DELOBJ
; DIE
BIG3A
; MOVI ZOOM4,A9
; JRUC BIG33
BIG3: ;USED FOR ORBS
MOVI BOOM2,A9
BIG33 CLR A6
CLR A7
CALLA GETANIXY
JRUC BX2
BIG2: ;USED FOR FATMAN EXPLOSION
CLR A6
CLR A7
CALLA GETANIXY
ADDI 0050000H,A2 ;A2=Y OFFSET
MOVI BOOM2A,A9
JRUC BX2
ARMOFF2
MOVI BOOM2,A9
JRUC AT3
ARMOFF
MOVI BOOM2Z,A9
AT3 CALLA GETANIXY
ADDI 01A0000H,A2 ;A2=Y OFFSET
MOVE A2,A1
MOVE A3,A0
MOVI 230,A3 ;259
JRUC ARMNZ
BIGSND
MOVI EXP3HI,A0
CALLA ONESND
BIGEXP:
CLR A6
CLR A7
CALLA GETANIXY
ADDI 01A0000H,A2 ;A2=Y OFFSET
;BX
MOVI BOOM2,A9
BX2
MOVE A2,A1
MOVE A3,A0
MOVI 199,A3 ;259
ARMNZ
MOVI DMAWNZ|M_NOCOLL|M_FLIPV,A4 ;NON-ZERO VALUE
MOVI CLSNEUT|TYPNEUT,A5
MOVI EXPb1,A2
;PUT ON ANOTHER LIST OTHER THAN OBJLST!
;THE LIST WITH THE HIGHEST PRIORITY
CALLA BEGINOBJ2
JAUC FRANIM_DIE
; MOVK 1,A1
; JSRP FRANIM
; MOVE A8,A0
; CALLA DELOBJ
; DIE
;8 1 2
;7 3
;6 5 4
RNGXL:
.LONG 0,05C00H,05C00H,05C00H,0,-5C00H,-5C00H,-5C00H
RNGYL:
.LONG -05000H,-05000H,0,05000H,05000H,05000H,0,-05000H
LIST .LONG VDIE,HDIER,HDIER,HDIER,VDIED,HDIE,HDIE,HDIE
ARMS .LONG ARM1
.WORD 20
.LONG ARM2
.WORD 4
.LONG ARM3
.WORD 4
.LONG ARM4
.WORD 4
.LONG ARM5
.WORD 4
.LONG ARM6
.WORD 5
.LONG ARM7
.WORD 5
.LONG ARM8
.WORD 5
.LONG ARM9
.WORD 5
.LONG ARM10
.WORD 9
.LONG 0
ARMS2 .LONG ARM1
.WORD FLIPBITS|18,(M_FLIPH+M_FLIPV)
.LONG ARM2
.WORD 4
.LONG ARM3
.WORD 4
.LONG ARM4
.WORD 4
.LONG ARM5
.WORD 4
.LONG ARM6
.WORD 5
.LONG ARM7
.WORD 5
.LONG ARM8
.WORD 5
.LONG ARM9
.WORD 5
.LONG ARM10
.WORD 9
.LONG 0
LEGS2 .LONG LEG1
.WORD FLIPBITS|2,(M_FLIPH+M_FLIPV)
.LONG LEG2
.WORD 4
.LONG LEG3
.WORD 4
.LONG LEG4
.WORD 4
.LONG LEG5
.WORD 4
.LONG LEG6
.WORD 5
.LONG LEG7
.WORD 5
.LONG LEG8
.WORD 5
.LONG LEG9
.WORD 5
.LONG LEG10
.WORD 5
.LONG LEG11
.WORD 9
.LONG 0
LEGS .LONG LEG1
.WORD 28
.LONG LEG2
.WORD 4
.LONG LEG3
.WORD 4
.LONG LEG4
.WORD 4
.LONG LEG5
.WORD 5
.LONG LEG6
.WORD 5
.LONG LEG7
.WORD 5
.LONG LEG8
.WORD 5
.LONG LEG9
.WORD 5
.LONG LEG10
.WORD 5
.LONG LEG11
.WORD 9
.LONG 0
HD .LONG HD1
.WORD 15
.LONG HD2
.WORD 4
.LONG HD3
.WORD 4
.LONG HD4
.WORD 4
.LONG HD5
.WORD 5
.LONG HD6
.WORD 5
.LONG HD7
.WORD 5
.LONG HD8
.WORD 4
.LONG HD9
.WORD 9
.LONG 0
GLOB .LONG GLOB1
.WORD 2
.LONG GLOB2
.WORD 4
.LONG GLOB3
.WORD 4
.LONG GLOB4
.WORD 4
.LONG GLOB5
.WORD 5
.LONG GLOB6
.WORD 9
.LONG 0
PC .LONG PC1
.WORD 4
.LONG PC2
.WORD 4
.LONG PC3
.WORD 4
.LONG PC4
.WORD 4
.LONG PC5
.WORD 4
.LONG PC6
.WORD 4
.LONG PC7
.WORD 4
.LONG PC8
.WORD 9
.LONG 0
PCS2 .LONG PC1
.WORD FLIPBITS|20,(M_FLIPV+M_FLIPH)
.LONG PC2
.WORD 4
.LONG PC3
.WORD 4
.LONG PC4
.WORD 4
.LONG PC5
.WORD 4
.LONG PC6
.WORD 4
.LONG PC7
.WORD 4
.LONG PC8
.WORD 9
.LONG 0
ORBPC
.LONG OPC1
.WORD FLIPBITS|1,(M_FLIPV)
.LONG OPC2
.WORD 4
.LONG OPC3
.WORD 4
.LONG OPC4
.WORD 4
.LONG OPC5
.WORD 4
.LONG OPC6
.WORD 4
.LONG OPC7
.WORD 4
.LONG OPC8
.WORD 4
.LONG OPC9
.WORD 4
.LONG 0
ORBPC4
.LONG OPC1
.WORD 4
.LONG OPC2
.WORD 4
.LONG OPC3
.WORD 4
.LONG OPC4
.WORD 4
.LONG OPC5
.WORD 4
.LONG OPC6
.WORD 4
.LONG OPC7
.WORD 4
.LONG OPC8
.WORD 4
.LONG OPC9
.WORD 4
.LONG 0
ORBPC3
.LONG OPC1
.WORD FLIPBITS|59,(M_FLIPH)
.LONG OPC2
.WORD 4
.LONG OPC3
.WORD 4
.LONG OPC4
.WORD 4
.LONG OPC5
.WORD 4
.LONG OPC6
.WORD 4
.LONG OPC7
.WORD 4
.LONG OPC8
.WORD 4
.LONG OPC9
.WORD 4
.LONG 0
ORBPC2
.LONG OPC1
.WORD FLIPBITS|19,(M_FLIPH+M_FLIPV)
.LONG OPC2
.WORD 4
.LONG OPC3
.WORD 4
.LONG OPC4
.WORD 4
.LONG OPC5
.WORD 4
.LONG OPC6
.WORD 4
.LONG OPC7
.WORD 4
.LONG OPC8
.WORD 4
.LONG OPC9
.WORD 4
.LONG 0
BLDOTS .LONG BBS1
.WORD NEWPALET|20
.LONG nup1
.LONG BBS2
.WORD 5
.LONG BBS3
.WORD 5
.LONG BBS4
.WORD 5
.LONG BBS5
.WORD 5
.LONG 0
BLOOD:
;BLOODY CHUNK
.LONG rblot1
.WORD NEWPALET|20
.LONG nup1
.LONG rblot2
.WORD 5
.LONG rblot3
.WORD 5
.LONG rblot4
.WORD 5
.LONG rblot5
.WORD 5
.LONG rblot6
.WORD 5
.LONG rblot7
.WORD 5
.LONG rblot8
.WORD 4
.LONG rblot9
.WORD 4
.LONG rblot10
.WORD 5
.LONG 0
BLOOD2:
;BLOODY CHUNK
.LONG rblot1
.WORD NEWPALET|40
.LONG nup1
.LONG rblot2
.WORD 5
.LONG rblot3
.WORD 6
.LONG rblot4
.WORD 6
.LONG rblot5
.WORD 5
.LONG rblot6
.WORD 5
.LONG rblot7
.WORD 5
.LONG rblot8
.WORD 4
.LONG rblot9
.WORD 4
.LONG rblot10
.WORD 5
.LONG 0
OVALBLD:
;OVAL BLOOD EXPLOSION
.LONG bldclt1
.WORD NEWPALET|1
.LONG nup1
.LONG bldclt2
.WORD 6
.LONG bldclt3
.WORD 6
.LONG bldclt4
.WORD 6
.LONG bldclt5
.WORD 6
.LONG bldclt6
.WORD 6
.LONG bldclt7
.WORD 6
.LONG bldclt8
.WORD 7
.LONG 0
PARMS2 .LONG PARM1
.WORD FLIPBITS|18,(M_FLIPH+M_FLIPV)
.LONG PARM2
.WORD 5
.LONG PARM3
.WORD 5
.LONG PARM4
.WORD 5
.LONG PARM5
.WORD 5
.LONG PARM6
.WORD 6
.LONG PARM7
.WORD 6
.LONG PARM8
.WORD 6
.LONG PARM9
.WORD 6
.LONG PARM10
.WORD 9
.LONG 0
PLEGS2 .LONG PLEG1
.WORD FLIPBITS|2,(M_FLIPH+M_FLIPV)
.LONG PLEG2
.WORD 5
.LONG PLEG3
.WORD 5
.LONG PLEG4
.WORD 5
.LONG PLEG5
.WORD 5
.LONG PLEG6
.WORD 6
.LONG PLEG7
.WORD 6
.LONG PLEG8
.WORD 6
.LONG PLEG9
.WORD 6
.LONG PLEG10
.WORD 6
.LONG PLEG11
.WORD 9
.LONG 0
PLEGS .LONG PLEG1
.WORD 28
.LONG PLEG2
.WORD 5
.LONG PLEG3
.WORD 5
.LONG PLEG4
.WORD 5
.LONG PLEG5
.WORD 6
.LONG PLEG6
.WORD 6
.LONG PLEG7
.WORD 6
.LONG PLEG8
.WORD 6
.LONG PLEG9
.WORD 6
.LONG PLEG10
.WORD 6
.LONG PLEG11
.WORD 9
.LONG 0
PHEAD
.LONG PHEAD1
.WORD 25
.LONG PHEAD2
.WORD 9
.LONG PHEAD3
.WORD 9
.LONG PHEAD4
.WORD 9
.LONG PHEAD5
.WORD 10
.LONG PHEAD6
.WORD 11
.LONG PHEAD7
.WORD 10
.LONG PHEAD8
.WORD 9
.LONG PHEAD9
.WORD 8
.LONG PHEAD10
.WORD 8
.LONG PHEAD11
.WORD 8
.LONG 0
RLST1
.LONG YTRS1
.WORD 5
.LONG YTRS2
.WORD 5
.LONG YTRS3
.WORD 5
.LONG YTRS4
.WORD 5
.LONG YTRS5
.WORD 5
.LONG YTRS6
.WORD 5
.LONG YTRS7
.WORD 5
.LONG YTRS8
.WORD 5
.LONG YTRS9
.WORD 5
.LONG YTRS10
.WORD 5
.LONG 0
RLST2
.LONG YPC1
.WORD FLIPBITS|1,(M_FLIPV)
.LONG YPC2
.WORD 3
.LONG YPC3
.WORD 3
.LONG YPC4
.WORD 3
.LONG YPC5
.WORD 3
.LONG YPC6
.WORD 3
.LONG YPC7
.WORD 3
.LONG YPC8
.WORD 3
.LONG YPC9
.WORD 3
.LONG 0
RLST3
.LONG YPC1
.WORD FLIPBITS|21,(M_FLIPH)
.LONG YPC2
.WORD 4
.LONG YPC3
.WORD 4
.LONG YPC4
.WORD 4
.LONG YPC5
.WORD 4
.LONG YPC6
.WORD 4
.LONG YPC7
.WORD 4
.LONG YPC8
.WORD 4
.LONG YPC9
.WORD 4
.LONG 0
RLST4
.LONG YP1
.WORD FLIPBITS|18,(M_FLIPH)
.LONG YP2
.WORD 2
.LONG YP3
.WORD 2
.LONG YP4
.WORD 3
.LONG YP5
.WORD 3
.LONG YP6
.WORD 3
.LONG YP7
.WORD 3
.LONG YP8
.WORD 3
.LONG YP9
.WORD 3
.LONG YP10
.WORD 2
.LONG 0
RLST5
.LONG YP1
.WORD FLIPBITS|1,(M_FLIPV)
.LONG YP2
.WORD 3
.LONG YP3
.WORD 3
.LONG YP4
.WORD 4
.LONG YP5
.WORD 4
.LONG YP6
.WORD 4
.LONG YP7
.WORD 4
.LONG YP8
.WORD 3
.LONG YP9
.WORD 3
.LONG YP10
.WORD 3
.LONG 0
ADPCS4: ;ORB DEATH
;IN:
;A8=PNTR TO OBJECT TO BLOW UP
;A0=PROPER X,A1=Y
;PLACE INTO PCINFO TABLE FOR UPDATING BY THE PC DRIVER (PIECES) PROCESS
CALLA GETANIXY
MOVE A2,A1
MOVE A3,A0
;A0=PROPER X,A1=Y
;A6,A7=X,Y VEL FOR THIS PC
CLR A6
CLR A7
MOVI OPC1,A2
MOVI 200,A3
MOVI DMAWNZ|M_NOCOLL|M_FLIPV,A4 ;NON-ZERO VALUE
MOVI CLSNEUT|TYPNEUT,A5
CALLA BEGIN_OBJ2
MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI ORBPC,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
MOVB @PCTOT,A2
CMPI 20,A2
JRGE OTOT2A
MOVB @NXT,A3
DEC A3
MOVB A3,@NXT
ANDI 03H,A3
SLL 5,A3
ADDI OIFPCS,A3
MOVE *A3,A3,L
JUMP A3
OIFPCS .LONG OTOT7,OTOT5,OTOT3,OTOT2
OTOT5
MOVB @PCTOT,A2
ADDI 06,A2
MOVB A2,@PCTOT
JRUC OPTOT5
OTOT3
MOVB @PCTOT,A2
CMPI 10,A2
JRLT OTOT7A
ADDI 04,A2
MOVB A2,@PCTOT
JRUC OPTOT3
OTOT2
MOVB @PCTOT,A2
CMPI 10,A2
JRLT OTOT7
OTOT2A
ADDI 02,A2
MOVB A2,@PCTOT
JRUC OPTOT2
OTOT7:
MOVB @PCTOT,A2
OTOT7A:
ADDI 08,A2
MOVB A2,@PCTOT
CALLR NEWV
CALLA BOBJ2A
MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI ORBPC2,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
CALLR NEWV
CALLA BOBJ2A
MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI ORBPC3,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
OPTOT5 CALLR NEWV
CALLA BOBJ2A
; ; MOVE A10,A10
; JREQ Y1
;CHANGE TO PLAYER 2 PAL IF NEEDED!
;CHANGE TO NUP2 PAL
; MOVI nup2,A0
; CALLA GETFPAL ;GET A COLOR MAP ASSIGNMENT
; MOVE A0,*A8(OPAL),W ;STORE THE NEW PALETTE
;Y1
MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI ORBPC,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
CALLR NEWV
CALLA BOBJ2A
; MOVE A10,A10
; JREQ Y2
;CHANGE TO PLAYER 2 PAL IF NEEDED!
;CHANGE TO NUP2 PAL
; MOVI nup2,A0
; CALLA GETFPAL ;GET A COLOR MAP ASSIGNMENT
; MOVE A0,*A8(OPAL),W ;STORE THE NEW PALETTE
;Y2
MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI ORBPC3,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
OPTOT3 CALLR NEWV2
CALLA BOBJ2A
MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI ORBPC4,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
CALLR NEWV
CALLA BOBJ2A
MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI ORBPC2,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
OPTOT2 CALLR NEWV2
CALLA BOBJ2A
MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI ORBPC,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
DIE
EYEBL0
SLEEP 19
EYEBL
MOVI -08000H,B0
MOVI 08000H,B1
CALLA RANGRAND
MOVE A0,A6
MOVI -07000H,B0
MOVI 07000H,B1
CALLA RANGRAND
MOVE A0,A7
CALLA GETANIXY
MOVE A2,A1
ADDI 0200000H,A1
MOVE A3,A0
;A0=PROPER X,A1=Y
JAUC BLOE2
CHNKS2 SLEEP 1
TWOCHNKS
SLEEP 30
;USED FOR PLAYER SPIN DEATH!
;A8=PLAYER PNTR
MOVI -02000H,B0
MOVI 02000H,B1
CALLA RANGRAND
MOVE A0,A6
MOVI -02000H,B0
MOVI 02000H,B1
CALLA RANGRAND
MOVE A0,A7
CALLA GETANIXY
MOVE A2,A1
ADDI 02A0000H,A1
SUBI 040000H,A3
MOVE A3,A0
;A0=PROPER X,A1=Y
MOVI BLDOTS,A9
MOVI BBS1,A2 ;(OIMG)
MOVI 55,A3 ;(OZPOS)
MOVI DMAWNZ+M_NOCOLL,A4 ;(OFLAGS) NON-ZERO VALUE
MOVI CLSNEUT|TYPNEUT,A5 ;(OID)
CALLA BEGIN_OBJ2
JAUC FRANIM_DIE
; MOVK 1,A1
; JSRP FRANIM ;ANIMATE THE SUCKER
; MOVE A8,A0
; CALLA DELOBJ
; CALLA DELPAL
; DIE
ADPCS3: ;PLAYER DEATH
;IN:
;A8=PNTR TO OBJECT TO BLOW UP
;A0=PROPER X,A1=Y
;A6,A7=X,Y VEL FOR THIS PC
;PLACE INTO PCINFO TABLE FOR UPDATING BY THE PC DRIVER (PIECES) PROCESS
MOVI 500,A0
CALLA RANDPER
JRNC EYB
MOVE @FACEON,A0
JRNZ EYB
CREATE 0,EYEBL
MOVI 500,A0
CALLA RANDPER
JRNC AZ
CREATE 0,EYEBL0
AZ
EYB
CALLA GETANIXY
MOVE A2,A1
ADDI 0300000H,A1
MOVE A3,A0
;A0=PROPER X,A1=Y
CLR A6
CLR A7
MOVI PARM1,A2
MOVI 200,A3
MOVI DMAWNZ|M_NOCOLL|M_FLIPV,A4 ;NON-ZERO VALUE
MOVI CLSNEUT|TYPNEUT,A5
MOVE A8,A9
CALLA BEGIN_OBJ2
CLR A10
MOVE *A9(OPLINK),A0,L
MOVB *A0(PNUM),A0
CMPI 1,A0
JREQ OKP
;CHANGE TO PLAYER 2 PAL IF NEEDED!
;CHANGE TO NUP2 PAL
MOVK 1,A10
OKP
MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI BLOOD,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
MOVB @NXT,A3
DEC A3
MOVB A3,@NXT
ANDI 03H,A3
SLL 5,A3
ADDI PIFPCS,A3
MOVE *A3,A3,L
JUMP A3
;PIFPCS .LONG PTOT5,PTOT5,PTOT5,PTOT5
PIFPCS .LONG PTOT7,PTOT5,PTOT3,PTOT2
PTOT5
MOVB @PCTOT,A2
ADDI 06,A2
MOVB A2,@PCTOT
JRUC PPTOT5
PTOT3
MOVB @PCTOT,A2
CMPI 10,A2
JRLT PTOT7A
ADDI 04,A2
MOVB A2,@PCTOT
JRUC PPTOT3
PTOT2
MOVB @PCTOT,A2
CMPI 10,A2
JRLT PTOT7
ADDI 02,A2
MOVB A2,@PCTOT
JRUC PPTOT2
PTOT7:
MOVB @PCTOT,A2
PTOT7A:
ADDI 08,A2
MOVB A2,@PCTOT
CALLR NEWV
CALLA BOBJ2A
MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI BLOOD2,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
CALLR NEWV
CALLA BOBJ2A
MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI BLOOD,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
PPTOT5 CALLR NEWV
CALLA BOBJ2A
MOVE A10,A10
JREQ Y1
;CHANGE TO PLAYER 2 PAL IF NEEDED!
;CHANGE TO NUP2 PAL
MOVI nup2,A0
CALLA GETFPAL ;GET A COLOR MAP ASSIGNMENT
MOVE A0,*A8(OPAL),W ;STORE THE NEW PALETTE
Y1 MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI PLEGS2,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
CALLR NEWV
CALLA BOBJ2A
MOVE A10,A10
JREQ Y2
;CHANGE TO PLAYER 2 PAL IF NEEDED!
;CHANGE TO NUP2 PAL
MOVI nup2,A0
CALLA GETFPAL ;GET A COLOR MAP ASSIGNMENT
MOVE A0,*A8(OPAL),W ;STORE THE NEW PALETTE
Y2 MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI PHEAD,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
PPTOT3 CALLR NEWV2
CALLA BOBJ2A
MOVE A10,A10
JREQ Y3
;CHANGE TO PLAYER 2 PAL IF NEEDED!
;CHANGE TO NUP2 PAL
MOVI nup2,A0
CALLA GETFPAL ;GET A COLOR MAP ASSIGNMENT
MOVE A0,*A8(OPAL),W ;STORE THE NEW PALETTE
Y3 MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI PARMS2,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
CALLR NEWV
CALLA BOBJ2A
MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI BLOOD2,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
PPTOT2 CALLR NEWV2
CALLA BOBJ2A
MOVE A10,A10
JREQ Y4
;CHANGE TO PLAYER 2 PAL IF NEEDED!
;CHANGE TO NUP2 PAL
MOVI nup2,A0
CALLA GETFPAL ;GET A COLOR MAP ASSIGNMENT
MOVE A0,*A8(OPAL),W ;STORE THE NEW PALETTE
Y4 MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI PLEGS,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
ADDIE DIE
;
;
ADDRPCS
;FOR ROBOT EXPLOSION
;A8=PNTR TO OBJECT TO BLOW UP
MOVB @PCTOT,A2
CMPI 040H,A2
JRHI ADDIE
MOVE A9,A6
MOVE A10,A7
MOVE *A8(OPAL),A10
CALLA GETANIXY
; MOVE A8,A0
; CALLA DELOBJ
MOVE A2,A1
MOVE A3,A0
;A0=PROPER X,A1=Y
ADDI 01A0000H,A1 ;RESET HULK ANI PNTS!
MOVI YPC1,A2
MOVI 200,A3
MOVI DMAWNZ|M_NOCOLL,A4 ;NON-ZERO VALUE
MOVI CLSNEUT|TYPNEUT,A5
CALLA BEGIN_OBJ2
MOVE A10,*A8(OPAL)
MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI RLST1,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
MOVB @NXT,A3
DEC A3
MOVB A3,@NXT
ANDI 03H,A3
SLL 5,A3
ADDI RIFPCS2,A3
MOVE *A3,A3,L
JUMP A3
RIFPCS2 .LONG RTOT7,RTOT5,RTOT3,RTOT2
RTOT5
MOVB @PCTOT,A2
ADDI 06,A2
MOVB A2,@PCTOT
JRUC RGTOT5
RTOT3
MOVB @PCTOT,A2
CMPI 10,A2
JRLT RTOT7A
ADDI 04,A2
MOVB A2,@PCTOT
JRUC RGTOT3
RTOT2
MOVB @PCTOT,A2
CMPI 10,A2
JRLT RTOT7
ADDI 02,A2
MOVB A2,@PCTOT
JRUC RGTOT2
RTOT7:
MOVB @PCTOT,A2
RTOT7A:
ADDI 08,A2
MOVB A2,@PCTOT
CALLR NEWV ;GET VELS
CALLA BOBJ2A
MOVE A10,*A8(OPAL)
MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI RLST2,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
CALLR NEWV2
CALLA BOBJ2A
MOVE A10,*A8(OPAL)
MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI RLST3,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
RGTOT5 CALLR NEWV
CALLA BOBJ2A
MOVE A10,*A8(OPAL)
MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI RLST3,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
CALLR NEWV2
CALLA BOBJ2A
MOVE A10,*A8(OPAL)
MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI RLST2,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
RGTOT3 CALLR NEWV2
CALLA BOBJ2A
MOVE A10,*A8(OPAL)
MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI RLST3,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
CALLR NEWV
CALLA BOBJ2A
MOVE A10,*A8(OPAL)
MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI RLST4,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
RGTOT2 CALLR NEWV2
CALLA BOBJ2A
MOVE A10,*A8(OPAL)
MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI RLST5,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
DIE
ADDPCS2:
;FOR SNAKE EXPLOSION
;A8=PNTR TO OBJECT TO BLOW UP
CALLA GETANIXY
MOVE A2,A1
MOVE A3,A0
;A0=PROPER X,A1=Y
CLR A6
CLR A7
; MOVE A9,A6
; MOVE A10,A7
;A6,A7=X,Y VEL FOR THIS PC
;PLACE INTO PCINFO TABLE FOR UPDATING BY THE PC DRIVER (PIECES) PROCESS
; MOVE A6,@TMP1,L
; MOVE A7,@TMP2,L
; ADDI 0160000H,A1 ;RESET HULK ANI PNTS!
ADDI 01A0000H,A1 ;RESET HULK ANI PNTS!
MOVI bldclt1,A2
MOVI 200,A3
MOVI DMAWNZ|M_NOCOLL,A4 ;NON-ZERO VALUE
MOVI CLSNEUT|TYPNEUT,A5
CALLA BEGIN_OBJ2
MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI BLOOD,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
MOVB @NXT,A3
DEC A3
MOVB A3,@NXT
ANDI 03H,A3
SLL 5,A3
ADDI DIFPCS2,A3
MOVE *A3,A3,L
JUMP A3
DIFPCS2 .LONG STOT7,STOT5,STOT3,STOT2
STOT5
MOVB @PCTOT,A2
ADDI 06,A2
MOVB A2,@PCTOT
JRUC SGTOT5
STOT3
MOVB @PCTOT,A2
CMPI 10,A2
JRLT STOT7A
ADDI 04,A2
MOVB A2,@PCTOT
JRUC SGTOT3
STOT2
MOVB @PCTOT,A2
CMPI 10,A2
JRLT STOT7
ADDI 02,A2
MOVB A2,@PCTOT
JRUC SGTOT2
STOT7:
MOVB @PCTOT,A2
STOT7A:
ADDI 08,A2
MOVB A2,@PCTOT
CALLR NEWV ;GET VELS
CALLA BOBJ2A
MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI BLOOD,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
CALLR NEWV
CALLA BOBJ2A
MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI BLOOD2,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
SGTOT5 CALLR NEWV
CALLA BOBJ2A
MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI BLOOD,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
CALLR NEWV
CALLA BOBJ2A
MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI HD,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
SGTOT3 CALLR NEWV2
CALLA BOBJ2A
MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI PC,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
CALLR NEWV
CALLA BOBJ2A
MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI BLOOD,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
SGTOT2 CALLR NEWV2
CALLA BOBJ2A
MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI BLOOD2,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
DIE
ADPCS2:
;FAT GUY CALLS THIS
;A8=PNTR TO OBJECT TO BLOW UP
CALLA GETANIXY
MOVE A2,A1
SUBI 0140000H,A1
MOVE A3,A0
;A0=PROPER X,A1=Y
CLR A6
CLR A7
JRUC ADPCS1A
ADPCS1:
;A8=PNTR TO OBJECT TO BLOW UP
CALLA GETANIXY
MOVE A2,A1
ADDI 01A0000H,A1
MOVE A3,A0
;A0=PROPER X,A1=Y
CLR A6
CLR A7
JRUC ADPCS1A
ADDPCS:
;A0=PROPER X,A1=Y
;A6,A7=X,Y VEL FOR THIS PC
;PLACE INTO PCINFO TABLE FOR UPDATING BY THE PC DRIVER (PIECES) PROCESS
; MOVE A6,@TMP1,L
; MOVE A7,@TMP2,L
ADPCS1A:
MOVE *A8(OPAL),A10
MOVE @HULKTYP,A2
JRZ NOSW
PUSH A0
MOVI BLODP,A0
CALLA GETFPAL
MOVE A0,A10
PULL A0
NOSW
ADDI 01A0000H,A1 ;RESET HULK ANI PNTS!
MOVI GLOB1,A2
MOVI 200,A3
MOVI DMAWNZ|M_NOCOLL|M_FLIPV,A4 ;NON-ZERO VALUE
MOVI CLSNEUT|TYPNEUT,A5
CALLA BEGIN_OBJ2
MOVE A10,*A8(OPAL)
MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI GLOB,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
MOVB @NXT,A3
DEC A3
MOVB A3,@NXT
ANDI 03H,A3
SLL 5,A3
ADDI DIFPCS,A3
MOVE *A3,A3,L
JUMP A3
DIFPCS .LONG TOT7,TOT5,TOT5,TOT7
TOT5
MOVB @PCTOT,A2
ADDI 06,A2
MOVB A2,@PCTOT
JRUC GTOT5
TOT7:
MOVB @PCTOT,A2
ADDI 08,A2
MOVB A2,@PCTOT
CALLR NEWV
CALLA BOBJ2A
MOVE A10,*A8(OPAL)
MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI ARMS2,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
CALLR NEWV
CALLA BOBJ2A
MOVE A10,*A8(OPAL)
MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI LEGS,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
GTOT5 CALLR NEWV
CALLA BOBJ2A
MOVE A10,*A8(OPAL)
MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI LEGS2,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
CALLR NEWV
CALLA BOBJ2A
MOVE A10,*A8(OPAL)
MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI HD,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
;GTOT3
CALLR NEWV2
CALLA BOBJ2A
MOVE A10,*A8(OPAL)
MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI PC,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
CALLR NEWV
CALLA BOBJ2A
MOVE A10,*A8(OPAL)
MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI ARMS,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
;GTOT2
CALLR NEWV2
CALLA BOBJ2A
MOVE A10,*A8(OPAL)
MOVE @LASTPC,A0,L
MOVE A8,*A0+,L
MOVK 1,A1
MOVE A1,*A0+,W ;INIT TICK CNT
MOVI PCS2,A9
MOVE A9,*A0+,L
MOVE A0,@LASTPC,L
DIE
NEWV MOVI -0B000H,B0
MOVI 0B000H,B1
CALLA RANGRAND
ADD A6,A0
MOVE A0,@XVEL,L
MOVI -0A000H,B0
MOVI 0A000H,B1
CALLA RANGRAND
ADD A7,A0
MOVE A0,@YVEL,L
RETS
NEWV2 MOVI -0E000H,B0
MOVI 0E000H,B1
CALLA RANGRAND
ADD A6,A0
MOVE A0,@XVEL,L
MOVI -0C000H,B0
MOVI 0C000H,B1
CALLA RANGRAND
ADD A7,A0
MOVE A0,@YVEL,L
RETS
PIECES:
CLR A0
MOVI PCINFO,A1
MOVI PCSMAX,A2
PCL1: MOVE A0,*A1+,L
MOVE A0,*A1+,W
MOVE A0,*A1+,L
DSJS A2,PCL1
;
MOVI PCINFO,A0
MOVE A0,@LASTPC,L
PCTP: MOVI PCINFO,A3
PCTP1:
MOVE *A3+,A8,L
JREQ DN
;PC PNTR FOUND
MOVE *A3,A0,W ;GET SLP TIME
DEC A0
MOVE A0,*A3+,W
JRNE PCOUTA
;READY FOR ANIMATION ON THIS PIECE
MOVE *A3,A9,L ;GET FRANIM LIST
MOVK 4,A1
JSRP FRANIM ;PIG ON CYCLES!
JRC YDONE ;GET RID OF PIECE
MOVE A9,*A3,L
SUBI 16,A3
MOVE A0,*A3,W
PCOUT:
ADDI 48,A3
JRUC PCTP1
PCOUTA:
ADDI 32,A3
JRUC PCTP1
YDONE: SUBI 48,A3
;ONLY NECESSARY IF ONLY PIECE IN LIST?
CLR A0
MOVE A0,*A3,L
MOVE A8,A0
CALLA DELOBJ
MOVB @PCTOT,A0
DEC A0
MOVB A0,@PCTOT
JRNN YD
CLR A0
MOVB A0,@PCTOT
YD
MOVE @LASTPC,A0,L
SUBI 80,A0
MOVE A0,@LASTPC,L
MOVE *A0,A5,L
JREQ DN ;BR=ONLY 1 PC IN LIST AND IT DIED!
MOVE *A0+,A1,L
MOVE *A0+,A2,W
MOVE *A0,A5,L
CLR A4
SUBI 48,A0
MOVE A4,*A0,L ;ZERO OUT PREVIOUS LAST ENTRY
MOVE A1,*A3+,L
MOVE A2,*A3+,W
MOVE A5,*A3+,L
JRUC PCTP1
DN: SLEEP 1
JRUC PCTP
HDIE:
.LONG HIT1
.WORD FLIPBITS|5,0
.LONG HIT2
.WORD 4
.LONG HIT3
.WORD 3
.LONG HIT4
.WORD 3
.LONG HIT5
.WORD 3
.LONG SPLOTCH5
.WORD 3
.LONG SPLOTCH6
.WORD 3
.LONG SPLOTCH7
.WORD 3
.LONG SPLOTCH8
.WORD 3
.LONG 0
HDIER:
.LONG HIT1
.WORD FLIPBITS|5,(M_FLIPH)
.LONG HIT2
.WORD 4
.LONG HIT3
.WORD 3
.LONG HIT4
.WORD 3
.LONG HIT5
.WORD 3
.LONG SPLOTCH5
.WORD 3
.LONG SPLOTCH6
.WORD 3
.LONG SPLOTCH7
.WORD 3
.LONG SPLOTCH8
.WORD 3
.LONG 0
VDIE:
.LONG VHIT1
.WORD FLIPBITS|5,0
.LONG VHIT2
.WORD 4
.LONG VHIT3
.WORD 3
.LONG VHIT4
.WORD 3
.LONG VHIT5
.WORD 3
.LONG SPLOTCH5
.WORD 3
.LONG SPLOTCH6
.WORD 3
.LONG SPLOTCH7
.WORD 3
.LONG SPLOTCH8
.WORD 3
.LONG 0
VDIED:
.LONG VHIT1
.WORD FLIPBITS|5,0
.LONG VHIT2
.WORD 4
.LONG VHIT3
.WORD 3
.LONG VHIT4
.WORD 3
.LONG VHIT5
.WORD 3
.LONG SPLOTCH5
.WORD 3
.LONG SPLOTCH6
.WORD 3
.LONG SPLOTCH7
.WORD 3
.LONG SPLOTCH8
.WORD 3
.LONG 0
RED_CARPETX:
.LONG [0,0F8H],[098H,0200H],[0,0F8H],[088H,0F8H],[088H,0F8H]
RED_CARPETY:
.LONG [048H,0B8H],[048H,0B8H],[048H,0B8H],[044H,0FFH],[0,0C8H]
TABLEX:
;RIGHT FROM LEFT DOORWAY
.LONG [068H-18H,028H],[068H-18H,048H],[068H-18H,068H]
.LONG [068H-18H,088H]
.LONG [05AH-18H,0A8H],[054H-18H,0C8H]
.LONG [060H-18H,0E8H],[07AH-18H,0FCH]
.LONG [0B0H-18H,028H],[0B0H-18H,048H],[0B0H-18H,068H]
.LONG [0B0H-18H,088H]
.LONG [0BEH-18H,0A8H],[0C4H-18H,0C8H]
.LONG [0B8H-18H,0E8H],[09EH-18H,0FCH]
TABLEX1:
;DOWN FROM TOP DOORWAY
.LONG [020H-0H,0A0H+04H],[035H-0H,0A0H+04H],[04AH-0H,0A0H+04H]
.LONG [05FH-0H,098H+04H]
.LONG [078H-0H,08EH+04H],[095H-0H,08EH+04H]
.LONG [0AAH-0H,09CH+04H],[0B7H-0H,0B3H+04H]
.LONG [020H-0H,0EAH+04H],[035H-0H,0EAH+04H],[04AH-0H,0EAH+04H]
.LONG [05FH-0H,0F2H+04H]
.LONG [078H-0H,0FCH+04H],[095H-0H,0FCH+04H]
.LONG [0AAH-0H,0F4H+04H],[0B7H-0H,0DDH+04H]
TABLEX3:
;UP FROM BOTTOM
.LONG [0C0H+10H,0A0H+04H],[0ABH+10H,0A0H+04H],[096H+10H,0A0H+04H]
.LONG [081H+10H,098H+04H]
.LONG [068H+10H,08EH+04H],[04BH+10H,08EH+04H]
.LONG [036H+10H,09CH+04H],[029H+10H,0B3H+04H]
.LONG [0C0H+10H,0EAH+04H],[0ABH+10H,0EAH+04H],[096H+10H,0EAH+04H]
.LONG [081H+10H,0F2H+04H]
.LONG [068H+10H,0FCH+04H],[04BH+10H,0FCH+04H]
.LONG [036H+10H,0F4H+04H],[029H+10H,0DDH+04H]
;TABLEX2:
;LEFT FROM RIGHT DOORWAY
; .LONG [068H-18H,0158H],[068H-18H,0138H],[068H-18H,0118H]
; .LONG [068H-18H,0F8H]
; .LONG [05AH-18H,0D8H],[054H-18H,0B8H]
; .LONG [060H-18H,098H],[07AH-18H,08CH]
; .LONG [0B0H-18H,0158H],[0B0H-18H,0138H],[0B0H-18H,0118H]
; .LONG [0B0H-18H,0F8H]
; .LONG [0BEH-18H,0D8H],[0C4H-18H,0B8H]
; .LONG [0B8H-18H,098H],[09EH-18H,08CH]
;TRANSLATE:
; .WORD 3,7,5,1,4,6,2,8
;
;8 1 2
;7 3
;6 5 4
;
WALK_LIST:
.LONG T_PWK_UP,T_PWK_UPRGT,T_PWK_RGT,T_PWK_DNRGT,T_PWK_DN
.LONG T_PWK_DNLFT,T_PWK_LFT,T_PWK_UPLFT
WALK_LISTM:
.LONG TM_PWK_UP,TM_PWK_UPRGT,TM_PWK_RGT,TM_PWK_DNRGT,TM_PWK_DN
.LONG TM_PWK_DNLFT,TM_PWK_LFT,TM_PWK_UPLFT
WALK_LISTF:
.LONG TF_PWK_UP,TF_PWK_UPRGT,TF_PWK_RGT,TF_PWK_DNRGT,TF_PWK_DN
.LONG TF_PWK_DNLFT,TF_PWK_LFT,TF_PWK_UPLFT
WALK_LISTA:
.LONG T2_PWK_UP,T2_PWK_UPRGT,T2_PWK_RGT,T2_PWK_DNRGT,T2_PWK_DN
.LONG T2_PWK_DNLFT,T2_PWK_LFT,T2_PWK_UPLFT
WALK_LISTMA:
.LONG T2M_PWK_UP,T2M_PWK_UPRGT,T2M_PWK_RGT,T2M_PWK_DNRGT,T2M_PWK_DN
.LONG T2M_PWK_DNLFT,T2M_PWK_LFT,T2M_PWK_UPLFT
WALK_LISTFA:
.LONG T2F_PWK_UP,T2F_PWK_UPRGT,T2F_PWK_RGT,T2F_PWK_DNRGT,T2F_PWK_DN
.LONG T2F_PWK_DNLFT,T2F_PWK_LFT,T2F_PWK_UPLFT
;
;HULK ANIMATIONS TABLE 2
;
SPINFRMS:
.LONG gb12w2a,gb10w3a,gb9w4a,gb8w3a,gb6w5a,gb8w3a,gb9w4a,gb10w3a
SPINFRMS2:
.LONG SNG12A,SNG10A,SNG9A,SNG8A,SNG6A,SNG8A,SNG9A,SNG10A
SPINFLGS:
.WORD DMAWNZ,DMAWNZ+M_FLIPH,DMAWNZ+M_FLIPH,DMAWNZ+M_FLIPH,DMAWNZ
.WORD DMAWNZ,DMAWNZ,DMAWNZ
;
;GRUNT ANIMATION TABLES
;
T_PWK_UP:
.LONG gb12w1a
.WORD FLIPBITS|05,0
.LONG gb12w2a
.WORD 05
.LONG gb12w3a
.WORD 05
.LONG gb12w4a
.WORD 05
.LONG gb12w5a
.WORD 05
.LONG gb12w6a
.WORD 05
.LONG gb12w7a
.WORD 05
.LONG 0
T_PWK_DN:
.LONG gb6w1a
.WORD FLIPBITS|05,0
.LONG gb6w2a
.WORD 05
.LONG gb6w3a
.WORD 05
.LONG gb6w4a
.WORD 05
.LONG gb6w5a
.WORD 05
.LONG gb6w6a
.WORD 05
.LONG gb6w7a
.WORD 05
.LONG 0
T_PWK_RGT:
.LONG gb9w1a
.WORD FLIPBITS|05,(M_FLIPH)
.LONG gb9w2a
.WORD 05
.LONG gb9w3a
.WORD 05
.LONG gb9w4a
.WORD 05
.LONG gb9w5a
.WORD 05
.LONG gb9w6a
.WORD 05
.LONG gb9w7a
.WORD 05
.LONG 0
T_PWK_LFT:
.LONG gb9w1a
.WORD FLIPBITS|05,0
.LONG gb9w2a
.WORD 05
.LONG gb9w3a
.WORD 05
.LONG gb9w4a
.WORD 05
.LONG gb9w5a
.WORD 05
.LONG gb9w6a
.WORD 05
.LONG gb9w7a
.WORD 05
.LONG 0
T_PWK_UPRGT:
.LONG gb10w1a
.WORD FLIPBITS|05,(M_FLIPH)
.LONG gb10w2a
.WORD 05
.LONG gb10w3a
.WORD 05
.LONG gb10w4a
.WORD 05
.LONG gb10w5a
.WORD 05
.LONG gb10w6a
.WORD 05
.LONG gb10w7a
.WORD 05
.LONG 0
T_PWK_DNLFT:
.LONG gb8w1a
.WORD FLIPBITS|05,0
.LONG gb8w2a
.WORD 05
.LONG gb8w3a
.WORD 05
.LONG gb8w4a
.WORD 05
.LONG gb8w5a
.WORD 05
.LONG gb8w6a
.WORD 05
.LONG gb8w7a
.WORD 05
.LONG 0
T_PWK_UPLFT:
.LONG gb10w1a
.WORD FLIPBITS|05,0
.LONG gb10w2a
.WORD 05
.LONG gb10w3a
.WORD 05
.LONG gb10w4a
.WORD 05
.LONG gb10w5a
.WORD 05
.LONG gb10w6a
.WORD 05
.LONG gb10w7a
.WORD 05
.LONG 0
T_PWK_DNRGT:
.LONG gb8w1a
.WORD FLIPBITS|05,(M_FLIPH)
.LONG gb8w2a
.WORD 05
.LONG gb8w3a
.WORD 05
.LONG gb8w4a
.WORD 05
.LONG gb8w5a
.WORD 05
.LONG gb8w6a
.WORD 05
.LONG gb8w7a
.WORD 05
.LONG 0
;MEDIUM
TM_PWK_UP:
.LONG gb12w1a
.WORD FLIPBITS|04,0
.LONG gb12w2a
.WORD 04
.LONG gb12w3a
.WORD 04
.LONG gb12w4a
.WORD 04
.LONG gb12w5a
.WORD 04
.LONG gb12w6a
.WORD 04
.LONG gb12w7a
.WORD 04
.LONG 0
TM_PWK_DN:
.LONG gb6w1a
.WORD FLIPBITS|04,0
.LONG gb6w2a
.WORD 04
.LONG gb6w3a
.WORD 04
.LONG gb6w4a
.WORD 04
.LONG gb6w5a
.WORD 04
.LONG gb6w6a
.WORD 04
.LONG gb6w7a
.WORD 04
.LONG 0
TM_PWK_RGT:
.LONG gb9w1a
.WORD FLIPBITS|04,(M_FLIPH)
.LONG gb9w2a
.WORD 04
.LONG gb9w3a
.WORD 04
.LONG gb9w4a
.WORD 04
.LONG gb9w5a
.WORD 04
.LONG gb9w6a
.WORD 04
.LONG gb9w7a
.WORD 04
.LONG 0
TM_PWK_LFT:
.LONG gb9w1a
.WORD FLIPBITS|04,0
.LONG gb9w2a
.WORD 04
.LONG gb9w3a
.WORD 04
.LONG gb9w4a
.WORD 04
.LONG gb9w5a
.WORD 04
.LONG gb9w6a
.WORD 04
.LONG gb9w7a
.WORD 04
.LONG 0
TM_PWK_UPRGT:
.LONG gb10w1a
.WORD FLIPBITS|04,(M_FLIPH)
.LONG gb10w2a
.WORD 04
.LONG gb10w3a
.WORD 04
.LONG gb10w4a
.WORD 04
.LONG gb10w5a
.WORD 04
.LONG gb10w6a
.WORD 04
.LONG gb10w7a
.WORD 04
.LONG 0
TM_PWK_DNLFT:
.LONG gb8w1a
.WORD FLIPBITS|04,0
.LONG gb8w2a
.WORD 04
.LONG gb8w3a
.WORD 04
.LONG gb8w4a
.WORD 04
.LONG gb8w5a
.WORD 04
.LONG gb8w6a
.WORD 04
.LONG gb8w7a
.WORD 04
.LONG 0
TM_PWK_UPLFT:
.LONG gb10w1a
.WORD FLIPBITS|04,0
.LONG gb10w2a
.WORD 04
.LONG gb10w3a
.WORD 04
.LONG gb10w4a
.WORD 04
.LONG gb10w5a
.WORD 04
.LONG gb10w6a
.WORD 04
.LONG gb10w7a
.WORD 04
.LONG 0
TM_PWK_DNRGT:
.LONG gb8w1a
.WORD FLIPBITS|04,(M_FLIPH)
.LONG gb8w2a
.WORD 04
.LONG gb8w3a
.WORD 04
.LONG gb8w4a
.WORD 04
.LONG gb8w5a
.WORD 04
.LONG gb8w6a
.WORD 04
.LONG gb8w7a
.WORD 04
.LONG 0
; FAST
TF_PWK_UP:
.LONG gb12w1a
.WORD FLIPBITS|03,0
.LONG gb12w2a
.WORD 03
.LONG gb12w3a
.WORD 03
.LONG gb12w4a
.WORD 03
.LONG gb12w5a
.WORD 03
.LONG gb12w6a
.WORD 03
.LONG gb12w7a
.WORD 03
.LONG 0
TF_PWK_DN:
.LONG gb6w1a
.WORD FLIPBITS|03,0
.LONG gb6w2a
.WORD 03
.LONG gb6w3a
.WORD 03
.LONG gb6w4a
.WORD 03
.LONG gb6w5a
.WORD 03
.LONG gb6w6a
.WORD 03
.LONG gb6w7a
.WORD 03
.LONG 0
TF_PWK_RGT:
.LONG gb9w1a
.WORD FLIPBITS|03,(M_FLIPH)
.LONG gb9w2a
.WORD 03
.LONG gb9w3a
.WORD 03
.LONG gb9w4a
.WORD 03
.LONG gb9w5a
.WORD 03
.LONG gb9w6a
.WORD 03
.LONG gb9w7a
.WORD 03
.LONG 0
TF_PWK_LFT:
.LONG gb9w1a
.WORD FLIPBITS|03,0
.LONG gb9w2a
.WORD 03
.LONG gb9w3a
.WORD 03
.LONG gb9w4a
.WORD 03
.LONG gb9w5a
.WORD 03
.LONG gb9w6a
.WORD 03
.LONG gb9w7a
.WORD 03
.LONG 0
TF_PWK_UPRGT:
.LONG gb10w1a
.WORD FLIPBITS|03,(M_FLIPH)
.LONG gb10w2a
.WORD 03
.LONG gb10w3a
.WORD 03
.LONG gb10w4a
.WORD 03
.LONG gb10w5a
.WORD 03
.LONG gb10w6a
.WORD 03
.LONG gb10w7a
.WORD 03
.LONG 0
TF_PWK_DNLFT:
.LONG gb8w1a
.WORD FLIPBITS|03,0
.LONG gb8w2a
.WORD 03
.LONG gb8w3a
.WORD 03
.LONG gb8w4a
.WORD 03
.LONG gb8w5a
.WORD 03
.LONG gb8w6a
.WORD 03
.LONG gb8w7a
.WORD 03
.LONG 0
TF_PWK_UPLFT:
.LONG gb10w1a
.WORD FLIPBITS|03,0
.LONG gb10w2a
.WORD 03
.LONG gb10w3a
.WORD 03
.LONG gb10w4a
.WORD 03
.LONG gb10w5a
.WORD 03
.LONG gb10w6a
.WORD 03
.LONG gb10w7a
.WORD 03
.LONG 0
TF_PWK_DNRGT:
.LONG gb8w1a
.WORD FLIPBITS|03,(M_FLIPH)
.LONG gb8w2a
.WORD 03
.LONG gb8w3a
.WORD 03
.LONG gb8w4a
.WORD 03
.LONG gb8w5a
.WORD 03
.LONG gb8w6a
.WORD 03
.LONG gb8w7a
.WORD 03
.LONG 0
;SNAKE GRUNT TABLES
T2_PWK_UP:
.LONG SNG12A
.WORD FLIPBITS|06,0
.LONG SNG12B
.WORD 06
.LONG SNG12C
.WORD 06
.LONG SNG12D
.WORD 06
.LONG SNG12E
.WORD 06
.LONG SNG12F
.WORD 06
.LONG SNG12G
.WORD 06
.LONG 0
T2_PWK_DN:
.LONG SNG6A
.WORD FLIPBITS|06,0
.LONG SNG6B
.WORD 06
.LONG SNG6C
.WORD 06
.LONG SNG6D
.WORD 06
.LONG SNG6E
.WORD 06
.LONG SNG6F
.WORD 06
.LONG SNG6G
.WORD 06
.LONG 0
T2_PWK_RGT:
.LONG SNG9A
.WORD FLIPBITS|06,(M_FLIPH)
.LONG SNG9B
.WORD 06
.LONG SNG9C
.WORD 06
.LONG SNG9D
.WORD 06
.LONG SNG9E
.WORD 06
.LONG SNG9F
.WORD 06
.LONG SNG9G
.WORD 06
.LONG 0
T2_PWK_LFT:
.LONG SNG9A
.WORD FLIPBITS|06,0
.LONG SNG9B
.WORD 06
.LONG SNG9C
.WORD 06
.LONG SNG9D
.WORD 06
.LONG SNG9E
.WORD 06
.LONG SNG9F
.WORD 06
.LONG SNG9G
.WORD 06
.LONG 0
T2_PWK_UPRGT:
.LONG SNG10A
.WORD FLIPBITS|06,(M_FLIPH)
.LONG SNG10B
.WORD 06
.LONG SNG10C
.WORD 06
.LONG SNG10D
.WORD 06
.LONG SNG10E
.WORD 06
.LONG SNG10F
.WORD 06
.LONG SNG10G
.WORD 06
.LONG 0
T2_PWK_DNLFT:
.LONG SNG8A
.WORD FLIPBITS|06,0
.LONG SNG8B
.WORD 06
.LONG SNG8C
.WORD 06
.LONG SNG8D
.WORD 06
.LONG SNG8E
.WORD 06
.LONG SNG8F
.WORD 06
.LONG SNG8G
.WORD 06
.LONG 0
T2_PWK_UPLFT:
.LONG SNG10A
.WORD FLIPBITS|06,0
.LONG SNG10B
.WORD 06
.LONG SNG10C
.WORD 06
.LONG SNG10D
.WORD 06
.LONG SNG10E
.WORD 06
.LONG SNG10F
.WORD 06
.LONG SNG10G
.WORD 06
.LONG 0
T2_PWK_DNRGT:
.LONG SNG8A
.WORD FLIPBITS|06,(M_FLIPH)
.LONG SNG8B
.WORD 06
.LONG SNG8C
.WORD 06
.LONG SNG8D
.WORD 06
.LONG SNG8E
.WORD 06
.LONG SNG8F
.WORD 06
.LONG SNG8G
.WORD 06
.LONG 0
;MEDIUM
T2M_PWK_UP:
.LONG SNG12A
.WORD FLIPBITS|05,0
.LONG SNG12B
.WORD 05
.LONG SNG12C
.WORD 05
.LONG SNG12D
.WORD 05
.LONG SNG12E
.WORD 05
.LONG SNG12F
.WORD 05
.LONG SNG12G
.WORD 05
.LONG 0
T2M_PWK_DN:
.LONG SNG6A
.WORD FLIPBITS|05,0
.LONG SNG6B
.WORD 05
.LONG SNG6C
.WORD 05
.LONG SNG6D
.WORD 05
.LONG SNG6E
.WORD 05
.LONG SNG6F
.WORD 05
.LONG SNG6G
.WORD 05
.LONG 0
T2M_PWK_RGT:
.LONG SNG9A
.WORD FLIPBITS|05,(M_FLIPH)
.LONG SNG9B
.WORD 05
.LONG SNG9C
.WORD 05
.LONG SNG9D
.WORD 05
.LONG SNG9E
.WORD 05
.LONG SNG9F
.WORD 05
.LONG SNG9G
.WORD 05
.LONG 0
T2M_PWK_LFT:
.LONG SNG9A
.WORD FLIPBITS|05,0
.LONG SNG9B
.WORD 05
.LONG SNG9C
.WORD 05
.LONG SNG9D
.WORD 05
.LONG SNG9E
.WORD 05
.LONG SNG9F
.WORD 05
.LONG SNG9G
.WORD 05
.LONG 0
T2M_PWK_UPRGT:
.LONG SNG10A
.WORD FLIPBITS|05,(M_FLIPH)
.LONG SNG10B
.WORD 05
.LONG SNG10C
.WORD 05
.LONG SNG10D
.WORD 05
.LONG SNG10E
.WORD 05
.LONG SNG10F
.WORD 05
.LONG SNG10G
.WORD 05
.LONG 0
T2M_PWK_DNLFT:
.LONG SNG8A
.WORD FLIPBITS|05,0
.LONG SNG8B
.WORD 05
.LONG SNG8C
.WORD 05
.LONG SNG8D
.WORD 05
.LONG SNG8E
.WORD 05
.LONG SNG8F
.WORD 05
.LONG SNG8G
.WORD 05
.LONG 0
T2M_PWK_UPLFT:
.LONG SNG10A
.WORD FLIPBITS|05,0
.LONG SNG10B
.WORD 05
.LONG SNG10C
.WORD 05
.LONG SNG10D
.WORD 05
.LONG SNG10E
.WORD 05
.LONG SNG10F
.WORD 05
.LONG SNG10G
.WORD 05
.LONG 0
T2M_PWK_DNRGT:
.LONG SNG8A
.WORD FLIPBITS|05,(M_FLIPH)
.LONG SNG8B
.WORD 05
.LONG SNG8C
.WORD 05
.LONG SNG8D
.WORD 05
.LONG SNG8E
.WORD 05
.LONG SNG8F
.WORD 05
.LONG SNG8G
.WORD 05
.LONG 0
; FAST
T2F_PWK_UP:
.LONG SNG12A
.WORD FLIPBITS|04,0
.LONG SNG12B
.WORD 04
.LONG SNG12C
.WORD 04
.LONG SNG12D
.WORD 04
.LONG SNG12E
.WORD 04
.LONG SNG12F
.WORD 04
.LONG SNG12G
.WORD 04
.LONG 0
T2F_PWK_DN:
.LONG SNG6A
.WORD FLIPBITS|04,0
.LONG SNG6B
.WORD 04
.LONG SNG6C
.WORD 04
.LONG SNG6D
.WORD 04
.LONG SNG6E
.WORD 04
.LONG SNG6F
.WORD 04
.LONG SNG6G
.WORD 04
.LONG 0
T2F_PWK_RGT:
.LONG SNG9A
.WORD FLIPBITS|04,(M_FLIPH)
.LONG SNG9B
.WORD 04
.LONG SNG9C
.WORD 04
.LONG SNG9D
.WORD 04
.LONG SNG9E
.WORD 04
.LONG SNG9F
.WORD 04
.LONG SNG9G
.WORD 04
.LONG 0
T2F_PWK_LFT:
.LONG SNG9A
.WORD FLIPBITS|04,0
.LONG SNG9B
.WORD 04
.LONG SNG9C
.WORD 04
.LONG SNG9D
.WORD 04
.LONG SNG9E
.WORD 04
.LONG SNG9F
.WORD 04
.LONG SNG9G
.WORD 04
.LONG 0
T2F_PWK_UPRGT:
.LONG SNG10A
.WORD FLIPBITS|04,(M_FLIPH)
.LONG SNG10B
.WORD 04
.LONG SNG10C
.WORD 04
.LONG SNG10D
.WORD 04
.LONG SNG10E
.WORD 04
.LONG SNG10F
.WORD 04
.LONG SNG10G
.WORD 04
.LONG 0
T2F_PWK_DNLFT:
.LONG SNG8A
.WORD FLIPBITS|04,0
.LONG SNG8B
.WORD 04
.LONG SNG8C
.WORD 04
.LONG SNG8D
.WORD 04
.LONG SNG8E
.WORD 04
.LONG SNG8F
.WORD 04
.LONG SNG8G
.WORD 04
.LONG 0
T2F_PWK_UPLFT:
.LONG SNG10A
.WORD FLIPBITS|04,0
.LONG SNG10B
.WORD 04
.LONG SNG10C
.WORD 04
.LONG SNG10D
.WORD 04
.LONG SNG10E
.WORD 04
.LONG SNG10F
.WORD 04
.LONG SNG10G
.WORD 04
.LONG 0
T2F_PWK_DNRGT:
.LONG SNG8A
.WORD FLIPBITS|04,(M_FLIPH)
.LONG SNG8B
.WORD 04
.LONG SNG8C
.WORD 04
.LONG SNG8D
.WORD 04
.LONG SNG8E
.WORD 04
.LONG SNG8F
.WORD 04
.LONG SNG8G
.WORD 04
.LONG 0
BAT8O .LONG SWING1
.WORD FLIPBITS|4,0
.LONG SWING2
.WORD 4
.LONG SWING3
.WORD 4
.LONG SWING4
.WORD 4
.LONG SWING3
.WORD 4
.LONG SWING2
.WORD 4
.LONG SWING1
.WORD 4
.LONG SWING5
.WORD 4
.LONG SWING6
.WORD 4
.LONG SWING7
.WORD 4
.LONG SWING6
.WORD 4
.LONG SWING5
.WORD 4
.LONG 0
BAT8OS .LONG S8ATKA
.WORD FLIPBITS|4,0
.LONG S8ATKB
.WORD 4
.LONG S8ATKC
.WORD 4
.LONG S8ATKB
.WORD 4
.LONG S8ATKA
.WORD 4
.LONG S8ATKB
.WORD 4
.LONG S8ATKC
.WORD 4
.LONG S8ATKB
.WORD 4
.LONG S8ATKA
.WORD 4
.LONG S8ATKB
.WORD 4
.LONG S8ATKC
.WORD 4
.LONG S8ATKB
.WORD 4
.LONG 0
BAT4O .LONG SWING1
.WORD FLIPBITS|4,(M_FLIPH)
.LONG SWING2
.WORD 4
.LONG SWING3
.WORD 4
.LONG SWING4
.WORD 4
.LONG SWING3
.WORD 4
.LONG SWING2
.WORD 4
.LONG SWING1
.WORD 4
.LONG SWING5
.WORD 4
.LONG SWING6
.WORD 4
.LONG SWING7
.WORD 4
.LONG SWING6
.WORD 4
.LONG SWING5
.WORD 4
.LONG 0
BAT4OS .LONG S8ATKA
.WORD FLIPBITS|6,(M_FLIPH)
.LONG S8ATKB
.WORD 4
.LONG S8ATKC
.WORD 4
.LONG S8ATKB
.WORD 4
.LONG S8ATKA
.WORD 6
.LONG S8ATKB
.WORD 4
.LONG S8ATKC
.WORD 4
.LONG S8ATKB
.WORD 4
.LONG S8ATKA
.WORD 6
.LONG S8ATKB
.WORD 4
.LONG S8ATKC
.WORD 4
.LONG S8ATKB
.WORD 4
.LONG 0
BAT10O .LONG BAT2
.WORD FLIPBITS|4,0
.LONG BAT3
.WORD 4
.LONG BAT4
.WORD 4
.LONG BAT5
.WORD 4
.LONG BAT6
.WORD 4
.LONG BAT5
.WORD 4
.LONG BAT4
.WORD 4
.LONG BAT3
.WORD 4
.LONG BAT2
.WORD 4
.LONG BAT8
.WORD 4
.LONG BAT2
.WORD 4
.LONG 0
BAT10OS .LONG S10ATKA
.WORD FLIPBITS|4,0
.LONG S10ATKB
.WORD 4
.LONG S10ATKC
.WORD 4
.LONG S10ATKD
.WORD 4
.LONG S10ATKE
.WORD 6
.LONG S10ATKD
.WORD 4
.LONG S10ATKC
.WORD 4
.LONG S10ATKB
.WORD 4
.LONG S10ATKA
.WORD 4
.LONG S10ATKB
.WORD 4
.LONG S10ATKC
.WORD 4
.LONG 0
BAT2O .LONG BAT2
.WORD FLIPBITS|4,(M_FLIPH)
.LONG BAT3
.WORD 4
.LONG BAT4
.WORD 4
.LONG BAT5
.WORD 4
.LONG BAT6
.WORD 4
.LONG BAT5
.WORD 4
.LONG BAT4
.WORD 4
.LONG BAT3
.WORD 4
.LONG BAT2
.WORD 4
.LONG BAT8
.WORD 4
.LONG BAT2
.WORD 4
.LONG 0
BAT2OS .LONG S10ATKA
.WORD FLIPBITS|4,(M_FLIPH)
.LONG S10ATKB
.WORD 4
.LONG S10ATKC
.WORD 4
.LONG S10ATKD
.WORD 4
.LONG S10ATKE
.WORD 4
.LONG S10ATKD
.WORD 4
.LONG S10ATKC
.WORD 4
.LONG S10ATKB
.WORD 4
.LONG S10ATKA
.WORD 4
.LONG S10ATKB
.WORD 4
.LONG S10ATKC
.WORD 4
.LONG 0
BEGIN_OBJ:
;MAKE MORE EFFIECIENT
MOVE A0,@XVAL,L
MOVE A1,@YVAL,L
MOVE A2,@IMG,L
MOVE A3,@ZPOS
MOVE A4,@FLAGS
MOVE A5,@ID
MOVE A6,@XVEL,L
MOVE A7,@YVEL,L
MOVI GENERIC_INIT,A14 ;DEFINE OBJECT PARAMS
CALLA GPALOBJ ;ALLOCATE A COLOR PALETTE
CALLA STFOBJ ;STUFF OBJECT DATA
MOVE A13,*A0(OPLINK),L
CALLA ADJSTWTL ;PUT US IN THE WORLD
CALLA INSOBJ ;INSERT OBJECT INTO LIST
MOVE A0,A8
RETS
;
BEGIN_OBJ2:
MOVE A0,@XVAL,L
MOVE A1,@YVAL,L
MOVE A2,@IMG,L
MOVE A3,@ZPOS
MOVE A4,@FLAGS
MOVE A5,@ID
MOVE A6,@XVEL,L
MOVE A7,@YVEL,L
BOBJ2A:
MOVI GENERIC_INIT,A14 ;DEFINE OBJECT PARAMS
CALLA GPALOBJ ;ALLOCATE A COLOR PALETTE
CALLA STFOBJ ;STUFF OBJECT DATA
MOVE A13,*A0(OPLINK),L
CALLA INSOBJ ;INSERT OBJECT INTO LIST
MOVE A0,A8
RETS
BOOM2:
.LONG EXPb1
.WORD 3
.LONG EXPb2
.WORD 3
.LONG EXPb3
.WORD 4
.LONG EXPb4
.WORD 4
.LONG EXPb5
.WORD 4
.LONG EXPb6
.WORD 4
.LONG EXPb7
.WORD 5
.LONG EXPb8
.WORD 5
.LONG EXPb9
.WORD 5
.LONG 0
BOOM2Z:
.LONG EXPb1
.WORD 2
.LONG EXPb2
.WORD 2
.LONG EXPb3
.WORD 2
.LONG EXPb4
.WORD 2
.LONG EXPb5
.WORD 2
.LONG EXPb6
.WORD 2
.LONG EXPb7
.WORD 3
.LONG EXPb8
.WORD 3
.LONG EXPb9
.WORD 3
.LONG 0
BOOM2A:
.LONG EXPb1
.WORD 4
.LONG EXPb2
.WORD 3
.LONG EXPb3
.WORD NEWPALET|4
.LONG BULLET
.LONG EXPb4
.WORD 4
.LONG EXPb5
.WORD 4
.LONG EXPb6
.WORD 4
.LONG EXPb7
.WORD 5
.LONG EXPb8
.WORD 5
.LONG EXPb9
.WORD 5
.LONG 0
BOOM3:
.LONG EXPb1
.WORD NEWPALET|4
.LONG BULLET
.LONG EXPb2
.WORD 4
.LONG EXPb3
.WORD 5
.LONG EXPb4
.WORD 5
.LONG EXPb5
.WORD 5
.LONG EXPb6
.WORD 5
.LONG EXPb7
.WORD 5
.LONG EXPb8
.WORD 5
.LONG EXPb9
.WORD 5
.LONG 0
.END