smashtv/HULKS.ASM

4373 lines
70 KiB
NASM
Raw Permalink Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

.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