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