total-carnage/BACKUP/NEWHULK.ASM

6279 lines
110 KiB
NASM
Raw 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 'NEWHULK.ASM'
.TITLE 'TOTAL CARNAGE GAME PROGRAM'
.WIDTH 132
.OPTION B,D,L,T
.MNOLIST
;
; INITIATED: NOV 6,1990
; 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\gsp.inc"
.INCLUDE "\VIDEO\SYS\MACROS.HDR" ;MACROS DEFINITIONS
.INCLUDE "IMGTBL.GLO"
.INCLUDE "GAME.EQU"
.INCLUDE "FINGRNT.TBL"
;
;SOUNDS EXTERNAL
;
.REF EXP2,GRNTSHT,EXP4,ALTEXP1,EXP1L,TORCH,GUYDI,HELP
;
;SYMBOLS EXTERNALLY DEFINED
;
.REF INST_WARP
.REF HSTGS_LOST,JEPCYC,AOF,RNDRNG0
.REF SETC2,STRT_G,STRT_D,CRSRAM,ICONS_DN,HZSPD
.REF TARGET
.REF START_SKIP,SEND_ICON
.REF WAVE_RAM,EHALT,GETANIX,GETFPAL,PLYROBJS,PLYRPRCS,OUT_FLG
.REF P1DATA,P2DATA,RANDPER,FRANIM,RANGRAND,HALT,SCRADD2,PCTOT
.REF ENEMY_RECT,RANDOM,TAKEEL,SCRTST,XBOOM2,WAVE,DOLORD,ENDWV
.REF CHUNK_OBJ,PCNT,START_PJ2,FLASHME,ONARRW
.REF PUSHME,DO_PUNISH,HSTGSET,OBJON,OBJOFF,FAKET,EXPCNT,BTR60A
.REF ONE_FND,FND_CNT,MAXFND,WAITTNT,GOBACK,CLNPAL
;
;SYMBOLS DEFINED IN THIS FILE
;
.DEF ENRECT13,ENRECT14,SPAWN_RUNNR,ERECT13,LHLPS
.DEF ERECT11,ENRECT11,CRT_AHMD,SPAWN_FND,SPAWN_SKIPR,ENRECT12
.DEF SEND_GROUP,SPAWN_HULKS,BAT_PLYR,KILL_HULK,KILL_H1,FRANIM_DIE
.DEF ERECT1,MAXHULK,HULK_CNT,ENRECT1,EN_CURRENT,ERECT2,HULK_DN
.DEF ERECT3,ENRECT3,ENRECT4,ERECT4,SENDH_TOP,SENDH_GROUP,INTO
.DEF DO_DIFF2,SPINFLGS,BOOM3,KILL_HULKZ,ERECT5,ENRECT5,JUMPER
.DEF ERECT7,ERECT8,BLSTS,ERECT10,ENRECT10,SPAWN_AHMD,ERECT12,SHULK
.DEF SOLDR,SOLDRD,SOLDRDL,INTO12,MAXAHMD,AHMD_CNT,SITLST,ANI_STEEL
.DEF JUMPXY,JUMPXY2,GET_WVADDR,BOOM2,PBLSTS
.DEF KILL_AHMDZ,KILL_AHMD,I_FLM,HTYPE
.DEF SKIPR_DN,SKIPR_CNT,MAXSKPR,SHSTG
******************JARV PATCH
.DEF DOIT
*******************************************
;
;UNINITIALIZED RAM DEFINITIONS
;
.BSS HULK_DN,16
.BSS AHMD_CNT,16 ;TOTAL AHMEDS ON SCREEN
.BSS MAXHULK,16
.BSS MAXAHMD,16
.BSS JUMPER,16
.BSS JUMPXY,16
.BSS JUMPXY2,16
.BSS EN_CURRENT,32 ;COLLISION RECTANGLES
.BSS SITLST,32 ;FOR AHMED SITTING SPOTS
.BSS HTYPE,16
; .BSS KILLER,32
.BSS MAXSKPR,16
.BSS SKIPR_CNT,16
.BSS SKIPR_DN,16
.BSS SNDCNT,16
.BSS HULK_CNT,16 ;TOTAL HULKS ON SCREEN
;
;EQUATES FOR THIS FILE
;
XX .EQU 241
YY .EQU 202
MAXLEVEL .EQU 10
HSPEED .EQU 08000H
HITAHMD .EQU 25*30 ;BTR60 TURRET
;
;STRUCTURES
;
;
;HSTG DATA STRUCTURE
;
;CYCLES .EQU PDATA ;ANIMATION CYCLES BEFORE TURN
;OLDDIR .EQU PDATA+16 ;OLD DIR BEFORE TURN
;
;HULK DATA STRUCTURE
;
HAGE .EQU PDATA ;OBJECT AGE
DIR .EQU PDATA+16 ;OBJECT DIRECTION
DIS .EQU PDATA+32 ;OBJECT DISTANCE COUNT
;MYPLYR .EQU PDATA+48 ;UHW PLAYER 1 OR 2 FIRED ME=1 OR 2
KPAGE .EQU PDATA+48 ;UHW
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 ;UHL
SKPLYR .EQU PDATA+224 ;UHW PLAYER # TO PURSUE 0 OR 1
OSCILLATE .EQU PDATA+240 ;UHW
ABSRB .EQU PDATA+256 ;UHW
;ABSRB IS DEFINED IN FIEND.ASM AND IT MUST STAY HERE
BOXCK .EQU PDATA+272 ;UHW CNTR FOR TIMING BOX CHECKS
BNCING .EQU PDATA+288 ;UHW FLAG 0=NO,1=YES BNCING OFF
JUMPF .EQU PDATA+304 ;UHW FLAG 1=DWN,2=LFT,3=RGT
HULKTYP .EQU PDATA+320 ;UHW 0=NORM W/GUN,1=DEMON W/AXE
STCNT .EQU PDATA+336 ;UHW SHOOT AT PLAYER CNTR
BULPRC .EQU PDATA+352 ;UHL BULLET PROCESS FIRING BULLS!
GOCRNR .EQU PDATA+384 ;UHL [Y,X] OF CORNER FOR AHMD
CFLAGS .EQU PDATA+416 ;UHW CONTROL FLAGS FOR OBJECT
NOFLMS .EQU PDATA+432 ;UHW
BNCCNT .EQU PDATA+448 ;UHW BOUNCE OFF RECT CNT
IBAT .EQU PDATA+464 ;UHW BAT FLAG 0=OFF, 1=ON
;
.TEXT
ANI_STEEL
;A8=STEEL DOOR IMAGE FROM BACKGROUND UPDATER
;ANIMATE, THEN KILL OFF ONCE IT IS OFF SCREEN
CLR A0
MOVE A0,*A13(PDATA) ;GRUNTS SPAWNED FROM THIS TRAP DOOR
SLEEP 4*60
ANIST
MOVI 20,B0
MOVI 2*60,B1
CALLA RANGRAND
CALLA PRCSLP
MOVE @WORLDTLY,A0,L
ADDI [250,0],A0
MOVE *A8(OYVAL),A1,L
CMP A0,A1
JRC ANI_S2
;FALLS IN HERE IF PIT IS DOWN BELOW SCREEN
MOVE A8,A0
CALLA DELOBJ
DIE
ANI_S2
;CHECK TO SEE IF I CAN GENERATE A GRUNT
;IF SO, OPEN DOOR AND SEND X # OF GRUNTS OUT
;SEND GRUNT AT PROPER DIRECTION
MOVE @HULK_CNT,A2 ;MOVE BYTE (# HULKS ON SCRN) TO A2
MOVE @MAXHULK,A3
SUBK 7,A3
CMP A3,A2 ;HULKS MAXED OUT?
JRGT ANIST
MOVE *A13(PDATA),A0
CMPI 75,A0
JRGT ANIST
MOVI PITDR2,A1 ;HALFWAY
MOVE *A8(OFLAGS),A4
CALLA ANI
SLEEPK 2
MOVE A8,A0
CALLA OBJOFF ;OPEN ALL THE WAY
MOVE @PCNT,A9
ANDI 07H,A9
INC A9
ANS3 SLEEPK 1
MOVE @HALT,A0
JRNZ ANS3
;TURN ON GRUNT AND SEND HIM OUT!
MJP CREATE HULKPID,JUMPOUT
MOVE @HTYPE,A1
MOVE A1,*A0(HULKTYP)
MOVE *A13(PDATA),A0
INC A0
MOVE A0,*A13(PDATA) ;HULKS RELEASED FROM THIS PIT!
MOVK 1,B0
MOVK 23,B1
CALLA RANGRAND
CALLA PRCSLP
DSJS A9,MJP
SLEEPK 15
MOVE A8,A0
CALLA OBJON ;HALFWAY
SLEEPK 2
MOVI PITDR1,A1
MOVE *A8(OFLAGS),A4
CALLA ANI ;CLOSED
JRUC ANIST
SOLDRD:
;A8=SOLDIER FROM BACKGROUND TABLE
;A HULK CREATED FROM BACKGROUND MODULE
;PAUSE, COME ALIVE AND JUMP STRAIGHT DOWN TOWARD PLAYER
CALLR GETPSK
CLR A0
MOVE A0,*A13(HULKTYP) ;REGULAR SOLDIER FROM BGND
MOVE A0,*A13(BULPRC),L
MOVI ZEROS,A9
MOVI DGSTND1,A1
CALLR SOLD
JRZ NOSP0
;ODD Y LINE, PAUSE A MOMENT
MOVI 0FFH,A0
MOVE A0,*A13(IBAT)
MOVI 200,B0
MOVI 450,B1
CALLA RANGRAND
CALLA PRCSLP
NOSP0
CLR A0
MOVE A0,*A13(IBAT)
MOVK 5,A0
MOVK 1,A11
NOSP00 MOVE A0,*A13(DIR)
MOVE A0,*A13(BOXCK)
MOVK 3,A1
MOVE A1,*A13(LEVEL),W
CALLR DO_DIFF
MOVE *A13(DIR),A0
CALLR INTO
CALLR GET_RUN ;GET FIRST FRANIM PNTR FOR
MOVE A11,*A13(JUMPF) ;STRAIGHT DOWN FLAG
JRUC BIN
SOLDRDL:
;A8=SOLDIER FROM BACKGROUND TABLE
;A HULK CREATED FROM BACKGROUND MODULE
;PAUSE, COME ALIVE AND JUMPD DOWN TO LEFT AND RUN TOWARD PLAYER
CALLR GETPSK
CLR A0
MOVE A0,*A13(HULKTYP) ;REGULAR SOLDIER FROM BGND
MOVE A0,*A13(BULPRC),L
MOVI ZEROS,A9
MOVI DSWINGa,A1
CALLR SOLD
JRZ NOSP1
;ODD Y LINE, PAUSE A MOMENT
MOVI 0FFH,A0
MOVE A0,*A13(IBAT)
MOVI 250,B0
MOVI 400,B1
CALLA RANGRAND
CALLA PRCSLP
NOSP1 CLR A0
MOVE A0,*A13(IBAT)
MOVK 7,A0
MOVK 3,A11
JRUC NOSP00
SHULK
;A9=[Y,X] SPOT TO SPAWN FROM
;A10=DIRECTION OF GROW FROM SLIME
;A10=0=UPLFT
;A10=1=UPRGT
;A10=2=BTMLFT
;A10=3=BTMRGT
CALLR GETPSK
CLR A0
MOVE A0,*A13(BULPRC),L
MOVK 1,A0 ;DEMON
MOVE A0,*A13(HULKTYP) ;REGULAR SOLDIER FROM BGND
MOVE A0,*A13(BOXCK)
MOVK 3,A1
MOVE A1,*A13(LEVEL),W
MOVK 1,A0
MOVE A0,*A13(DIS) ;TIME BEFORE WE GET NEW VELOCITIES
MOVE A9,A1
MOVX A9,A0
SLL 16,A0
SLL 6,A10
ADDI GRWINFO,A10
MOVE *A10+,A9,L
MOVE *A10,A10
MOVE A10,*A13(DIR)
;A0,A1 ARE SET UP
;A9=FRANIM GROW FROM SLIME
MOVI gb6w5a,A2 ;DEMON START
MOVI 159,A3
MOVI DMAWNZ,A4 ;NON-ZERO VALUE
MOVI CLSENMY|TYPGRW,A5
CLR A6
CLR A7
CALLA BEGINOBJ2
MOVI GRNTB,A0
CALLA GETFPAL ;GET A COLOR MAP ASSIGNMENT
MOVE A0,*A8(OPAL),W ;STORE THE NEW PALETTE
;GROW UP FROM SLIME
MOVK 1,A1
JSRP FRANIM
MOVI CLSENMY|TYPHULK,A5
MOVE A5,*A8(OID)
;THEN START WITH A VELOCITY!
CALLR OKVA
MOVK 6,A3
MOVE A3,*A13(DIS)
JRUC LUP_ST
GRWINFO .LONG GR10,8,GR2,2,GR8,6,GR5,4
SOLDR:
;A8=SOLDIER FROM BACKGROUND TABLE
;A HULK CREATED FROM BACKGROUND MODULE
;PAUSE, COME ALIVE AND RUN TOWARD PLAYER
;NOW POINT THIS HULK AT CURRENT POSITION OF PLAYER
CALLR GETPSK
CLR A0
MOVE A0,*A13(BULPRC),L
MOVE A0,*A13(HULKTYP) ;REGULAR SOLDIER FROM BGND
MOVI ZEROS,A9
MOVI DGSTND1,A1
CALLR SOLD
JRZ NOSP
;ODD Y LINE, PAUSE A MOMENT
MOVI 0FFH,A0
MOVE A0,*A13(IBAT)
MOVI 200,B0
MOVI 900,B1
CALLA RANGRAND
CALLA PRCSLP
CLR A0
MOVE A0,*A13(IBAT)
NOSP
MOVK 5,A0
MOVE A0,*A13(DIR)
MOVE A0,*A13(BOXCK)
MOVK 2,A1
MOVE A1,*A13(LEVEL),W
MOVK 1,A0
MOVE A0,*A13(DIS) ;TIME BEFORE WE GET NEW VELOCITIES
CALLR DO_DIFF
JRUC LUP_ST
LHLPS
MOVI HELP,A0
CALLA ONESND
SLEEP 40
MOVI HELP,A0
CALLA ONESND
SLEEP 40
MOVI HELP,A0
CALLA ONESND
SLEEP 40
MOVI HELP,A0
CALLA ONESND
DIE
SPAWN_RUNNR
;SEND HOSTAGES DOWN SCREEN
MOVE @HALT,A0
JRNZ SPRET
MOVI 150,A0
CALLA RANDPER
JRNC SPRET
MOVI JEEPID,A0
CLR A1
NOT A1
CALLA EXISTP
JRNZ SPRET ;BR=JEEP OUT!
CREATE 0,LHLPS
MOVI RUNNRS,A2
CALLR GET_WVADDR
MOVE *A0(16),A1,W ;DEC WAVE RAM CNT FOR THIS HSTG GROUP
DEC A1
MOVE A1,*A0(16),W
; MOVE *A0(32),A0 ;GET HSTG RANGE PNTR
; SLL 5,A0
MOVE @ENEMY_RECT,A0,L
SPR MOVE *A0(16),A1
CMPI 5,A1
JRZ GOTSPT
ADDI 6*16,A0
JRUC SPR
GOTSPT
;A9=[Y,X] OF SPOT TO START FROM
MOVE *A0(64),A1
MOVE *A0(32),A9
SUB A9,A1
SRL 1,A1
ADD A1,A9 ;X IS SET UP
MOVE *A0(80),A1
MOVE *A0(48),A2
SUB A2,A1
SRL 1,A1
ADD A1,A2 ;Y IS SET UP
SLL 16,A2
SUBI [20,0],A2
MOVY A2,A9
CREATE FUTUREPID,SENDRUN
SPRET RETS
SENDRUN
MOVK 3,A8
RUN1 SLEEPK 30
CALLR SENDH_GROUP
DSJ A8,RUN1
DIE
; .WORD 0,5,595-XX2+25,4356-YY2-36,605-XX2+25,4351-YY2-20
;SEND HOSTAGES DOWN SCREEN
SENDH_TOP:
;SEND FIRST GROUP OF HOSTAGES DOWN AT PLAYER
; MOVK 2,A8
SEND1
SLEEP >35
MOVE @WORLDTLY,A0,L
SUBI [50,0],A0
MOVE @WORLDTLX,A9,L
SRL 16,A9
ADDI 160,A9
MOVY A0,A9
CALLR SENDH_GROUP
; DSJ A8,SEND1
DIE
SENDH_GROUP:
;SEND GROUP OF HULKS FROM SPECIFIC SPOT
;A9=[Y,X] OF SPOT TO START FROM
;8 1 2
;7 3
;6 5 4
CALLA RANDOM
ANDI 07H,A0
ADDK 2,A0 ;1
MOVE A0,A5
;A11=0 TO SPREAD THEM OUT A BIT
SG1H
CREATE FUTUREPID,AHSTG ;START ONE HSTG
DSJS A5,SG1H
RETS
HSLST .LONG HSTGDWN,HSTGDWNA,HSTGDWNA2,HSTGDWN2
AHSTG:
;A9=[Y,X] SPOT TO SPAWN FROM
;A11=1 IF FIXED AREA FOR RELEASE
;8 1 2
;7 3
;6 5 4
;THIS HSTG WAS SPAWNED FROM SEND_GROUP
CLR B0
MOVK 19,B1
CALLA RANGRAND
SLL 16,A0
ADD A9,A0
MOVE A0,A1
CLR B0
MOVI 60,B1
CALLA RANGRAND
MOVX A9,A2
ADD A0,A2
SLL 16,A2
MOVE A2,A0
;A0,A1 ARE SET UP
MOVI GRL1,A2 ;DOES NOT MATTER
MOVI 159,A3
MOVI DMAWNZ,A4 ;NON-ZERO VALUE
MOVI CLSNEUT|TYPHSTG|SUBRUN,A5
CLR A6
CLR A7
CALLA BEGINOBJ2
CALLA RANDOM
ANDI 03H,A0
SLL 5,A0
ADDI HSLST,A0
MOVE *A0,A9,L
MOVI 0B000H,B0
MOVI 14000H,B1
CALLA RANGRAND
MOVE A0,*A8(OYVEL),L
MOVE A9,A10
MOVK 1,A1
JSRP FRANIM
MOVE A10,A9
;GET ME ON SCRN
HTOP
;GO THROUGH ANIMATION LIST
MOVK 1,A1
JSRP FRANIM
CALLA SCRTST
JRNZ KILOFF
MOVE A10,A9
JRUC HTOP
KILOFF MOVE A8,A0
CALLA DELOBJ
;TOTAL MISSED HOSTAGES HERE FOR RACKUP
MOVE @HSTGS_LOST,A0
INC A0
MOVE A0,@HSTGS_LOST
DIE
CRT_AHMD:
;AHMED FLAME THROWER DUDE SPAWNED FROM A CRATE
;AAHMED:
;A9=[Y,X] SPOT TO SPAWN FROM
;A10=DIRECTION
;8 1 2
;7 3
;6 5 4
MOVK 3,A10
MOVE *A8(OFLAGS),A0 ;A8=CRATE
BTST B_FLIPH,A0
JRZ FND1
MOVK 7,A10 ;A10=DIR
FND1 MOVE *A8(OXPOS),A0,L
; ADDK 15,A0
MOVE *A8(OYVAL),A9,L
SUBI [20,0],A9
MOVX A0,A9
MOVK 4,A1 ;LEVEL FOR CRATE AHMEDS
CALLR START_AHMD
MOVK 25,A3 ;20
MOVE A3,*A13(DIS) ;CHANGE BASED ON HULKS SPEED?
CLR A0
MOVE A0,*A13(CFLAGS)
MOVE A0,*A13(GOCRNR),L
JRUC CRATE_IN
SPAWN_FND:
;SPAWN FIEND
MOVE @FND_CNT,A2 ;MOVE BYTE (# FNDS ON SCRN) TO A2
MOVE @MAXFND,A3
CMP A3,A2 ;FNDS MAXED OUT?
JRGT HULK_OUT
CALLR FIXEDA
CMPI 5,A10
JRNZ SPF
ADDI [-25,42],A9
;A8=CHOSEN RECTANGLE INFO
;A9=[Y,X] OF SPOT TO START FROM
;A10=DIRECTION
SPF CREATE FNDPID,ONE_FND ;START ONE FND
RETS
SPAWN_AHMD:
;SPAWN AHMED IS CALLED FROM 'WAVE OVERLORD' CODE WHICH DISPERSES
;BAD GUYS THROUGHOUT A WAVE
MOVE @AHMD_CNT,A2 ;MOVE BYTE (# HULKS ON SCRN) TO A2
MOVE @MAXAHMD,A3
CMP A3,A2 ;HULKS MAXED OUT?
JRGT HULK_OUT
;SELECT RECTANGLE FROM CURRENT LIST
;GET RANDOM [Y,X] WITHIN CHOSEN RECTANGLE INTO A9
;GET DIRECTION FOR THAT RECTANGLE INTO A10
;JUMP INTO SEND_GROUP CODE
CALLR FIXEDA
;A8=CHOSEN RECTANGLE INFO
;A9=[Y,X] OF SPOT TO START FROM
;A10=DIRECTION
CREATE AHMDPID,AAHMED ;START ONE AHMED
RETS
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
MOVE @MAXHULK,A3
CMP A3,A2 ;HULKS MAXED OUT?
JRGT HULK_OUT
;SELECT RECTANGLE FROM CURRENT LIST
;GET RANDOM [Y,X] WITHIN CHOSEN RECTANGLE INTO A9
;GET DIRECTION FOR THAT RECTANGLE INTO A10
;JUMP INTO SEND_GROUP CODE
CALLA RANDOM
ANDI 07H,A0
; MOVI 0,A0
SLL 5,A0
ADDI INTOL,A0
MOVE *A0,A0,L
MOVE @ENEMY_RECT,A8,L
ADD A0,A8
MOVE *A8+,A0,W
SLL 5,A0
ADDI JLST,A0
MOVE *A0,A0,L
JUMP A0
SPAWN_SKIPR:
MOVE @SKIPR_DN,A0
JRNZ HULK_OUT
MOVE @SKIPR_CNT,A2 ;MOVE BYTE (# HULKS ON SCRN) TO A2
MOVE @MAXSKPR,A3
CMP A3,A2 ;HULKS MAXED OUT?
JRGT HULK_OUT
;SELECT RECTANGLE FROM CURRENT LIST
;GET RANDOM [Y,X] WITHIN CHOSEN RECTANGLE INTO A9
;GET DIRECTION FOR THAT RECTANGLE INTO A10
;JUMP INTO SEND_GROUP CODE
CALLA RANDOM
ANDI 03H,A0
SLL 5,A0
ADDI INTOL,A0
MOVE *A0,A0,L
MOVE @ENEMY_RECT,A8,L
ADD A0,A8
MOVE *A8+,A0,W
SLL 5,A0
ADDI JLST2,A0
MOVE *A0,A0,L
JUMP A0
INTOL .LONG 0,60H,0C0H,120H,180H,1E0H,240H,2A0H
HULK_OUT:
RETS
JLST .LONG FIXED,FLTL,FLTR,FLTT,FLTB,FIXED2,JUMPD,JUMPR
JLST2 .LONG SFIXED,FLTL,FLTR,SFLTT,FLTB,FIXED2,JUMPD,JUMPR
;8 1 2
;7 3
;6 5 4
;RECTANGLE TYPE,DIRECTION ENEMY WILL MOVE,RECT [X,Y],[X,Y]
;TYPE=0 FOR FIXED RECTANGLE,1=FLOATING LFT RECT,2=FLOATING RGT,3=FLOATING TOP
;4=FLOATING BOTM,5=FIXED WITHOUT LOTS OF RANGE,6=FROM TOP ROOF,7=FROM RIGHT
;ROOF
ERECT1
.WORD 0,7,645-XX,1225-YY,650-XX,1268-YY ;FOR SPAWNING
.WORD 0,7,645-XX,1225-YY,650-XX,1268-YY
.WORD 0,7,645-XX,1225-YY,650-XX,1268-YY
.WORD 0,7,645-XX,1000-YY,650-XX,1110-YY
.WORD 0,7,645-XX,1000-YY,650-XX,1110-YY
.WORD 0,3,200-XX,1000-YY,205-XX,1025-YY
.WORD 0,3,200-XX,1000-YY,205-XX,1025-YY
.WORD 0,3,200-XX,1000-YY,205-XX,1025-YY
ERECT2 .WORD 0,3,200-XX,779-YY,205-XX,789-YY ;FOR SPAWNING
.WORD 0,7,645-XX,779-YY,663-XX,780-YY
.WORD 5,7,600-XX,535-YY,640-XX,555-YY ;HUT
.WORD 5,7,600-XX,535-YY,640-XX,555-YY
.WORD 5,7,600-XX,665-YY,640-XX,670-YY ;HUT SPAWN
.WORD 3,5,150,-60,210,-45 ;FLOATING IN FROM TOP
.WORD 3,5,150,-60,210,-45 ;FLOATING IN FROM TOP
.WORD 3,5,150,-60,210,-45 ;FLOATING IN FROM TOP
ERECT3 .WORD 0,3,368-XX,327-YY,383-XX,342-YY ;FOR REACTOR AREA
.WORD 0,3,368-XX,327-YY,383-XX,342-YY ;FOR REACTOR AREA
.WORD 0,1,463-XX,443-YY,483-XX,453-YY
.WORD 0,1,463-XX,443-YY,483-XX,453-YY
.WORD 0,7,611-XX,318-YY,631-XX,336-YY
.WORD 0,7,611-XX,318-YY,631-XX,336-YY
.WORD 0,4,277-XX,395-YY,299-XX,405-YY ;BOTM OF REACTOR
.WORD 6,5,415-XX,145-YY,425-XX,155-YY ;FROM ROOF
ERECT4
.WORD 7,7,0380H,325-YY,0390H,340-YY ;FROM ROOF
.WORD 7,7,0380H,325-YY,0390H,340-YY ;FROM ROOF
.WORD 0,1,895-XX,463-YY,910-XX,469-YY
.WORD 0,1,895-XX,463-YY,910-XX,469-YY
.WORD 0,3,690-XX,335-YY,705-XX,350-YY
.WORD 0,3,690-XX,335-YY,705-XX,350-YY
.WORD 6,5,880-XX,145-YY,970-XX,165-YY ;ROOF
.WORD 6,5,880-XX,145-YY,970-XX,165-YY
ERECT5 .WORD 0,3,369-XX,2564-YY,384-XX,2579-YY ;SECRET PATH #1 LOWER
.WORD 0,3,369-XX,2564-YY,384-XX,2579-YY ;SECRET PATH #1 LOWER
.WORD 0,7,457-XX,2335-YY,466-XX,2410-YY
.WORD 0,7,457-XX,2335-YY,466-XX,2410-YY
.WORD 0,7,457-XX,2335-YY,466-XX,2410-YY
.WORD 3,5,110,-60,170,-45 ;FLOATING IN FROM TOP
.WORD 3,5,110,-60,170,-45 ;FLOATING IN FROM TOP
.WORD 3,5,110,-60,170,-45 ;FLOATING IN FROM TOP
ERECT6 .WORD 7,7,640-XX,1824-YY,665-XX,1850-YY ;SECRET PATH #1 MIDDLE
.WORD 7,7,640-XX,1824-YY,665-XX,1850-YY
.WORD 7,7,640-XX,1824-YY,665-XX,1850-YY
.WORD 7,7,640-XX,1824-YY,665-XX,1850-YY
.WORD 3,5,110,-60,170,-45
.WORD 3,5,110,-60,170,-45
.WORD 3,5,110,-60,170,-45
.WORD 3,5,110,-60,170,-45
ERECT7 ;ROADWAY AREA
.WORD 1,3,-50,70,-35,110
.WORD 1,3,-50,70,-35,110
.WORD 2,7,410,70,430,110
.WORD 2,7,410,70,430,110
.WORD 2,7,410,70,430,110
.WORD 3,5,80,-60,270,-45
.WORD 3,5,80,-60,270,-45
.WORD 3,5,80,-60,270,-45
ERECT8 ;TOP OF SECRET AREA #1
.WORD 0,1,463-XX,443-YY,483-XX,453-YY
.WORD 0,7,605-XX,358-YY,620-XX,372-YY
.WORD 0,7,605-XX,358-YY,620-XX,372-YY
.WORD 0,3,220-XX,358-YY,232-XX,372-YY
.WORD 0,3,220-XX,358-YY,232-XX,372-YY
.WORD 6,5,291-XX,145-YY,326-XX,165-YY ;ROOF
.WORD 6,5,491-XX,145-YY,530-XX,165-YY
.WORD 6,5,491-XX,145-YY,530-XX,165-YY
XX2 .EQU 241-13 ;FOR LOWER DESERT MODULE
YY2 .EQU 202+48H
ERECT10 ;1ST LOCKDOWN IN DESERT
.WORD 0,1,621-XX2+22,4610-YY2+52,631-XX2+22,4625-YY2+52
.WORD 0,3,447-XX2-50,4438-YY2+43,457-XX2-50,4455-YY2+43
.WORD 0,7,839-XX2+25,4438-YY2+43,849-XX2+25,4453-YY2+43
.WORD 0,5,595-XX2+25,4356-YY2-36,605-XX2+25,4351-YY2-20
.WORD 0,1,621-XX2+22,4610-YY2+52,631-XX2+22,4625-YY2+52
.WORD 0,3,447-XX2-50,4438-YY2+43,457-XX2-50,4455-YY2+43
.WORD 0,7,839-XX2+25,4438-YY2+43,849-XX2+25,4453-YY2+43
.WORD 0,5,595-XX2+25,4356-YY2-36,605-XX2+25,4351-YY2-20
ERECT11 ;PATH A AND B AFTER FIRST LOCKDOWN
;ALSO USED FOR WAVE 13 FAST GUYS COMING DOWN AND WAVE 16
.WORD 3,5,190,-60,250,-45 ;110! 250 ;FLOATING IN FROM TOP
.WORD 3,5,190,-60,250,-45 ;FLOATING IN FROM TOP
.WORD 3,5,190,-60,250,-45 ;FLOATING IN FROM TOP
.WORD 3,5,190,-60,250,-45 ;FLOATING IN FROM TOP
.WORD 3,5,190,-60,250,-45 ;FLOATING IN FROM TOP
.WORD 3,5,190,-60,250,-45 ;FLOATING IN FROM TOP
.WORD 3,5,190,-60,250,-45 ;FLOATING IN FROM TOP
.WORD 3,5,190,-60,250,-45 ;FLOATING IN FROM TOP
ERECT12 ;2ND DESERT LOCKDOWN WITH HUT ON LEFT
.WORD 0,1,403-XX2+22,3185-YY2+52,413-XX2+22,3200-YY2+52
.WORD 0,1,403-XX2+22,3185-YY2+52,413-XX2+22,3200-YY2+52
.WORD 0,7,642-XX2+25,3019-YY2+43,648-XX2+25,3035-YY2+43
.WORD 0,5,417-XX2+25,2935-YY2-36,427-XX2+25,2930-YY2-20
.WORD 0,3,325-XX2-50,2985-YY2+43,335-XX2-50,2997-YY2+43
.WORD 0,3,325-XX2-50,2985-YY2+43,335-XX2-50,2997-YY2+43
.WORD 0,7,642-XX2+25,3019-YY2+43,648-XX2+25,3035-YY2+43
.WORD 0,5,417-XX2+25,2935-YY2-36,427-XX2+25,2930-YY2-20
ERECT13 ;1ST AIRPORT LOCKDOWN
.WORD 0,1,0D32H,1118H,0D4CH,1120H
.WORD 0,3,0C61H,1070H,0C6BH,10A0H
.WORD 0,5,0D3FH,0FECH,0D42H,0FF6H
.WORD 0,7,0E10H,1088H,0E20H,108CH
.WORD 0,1,0D32H,1118H,0D4CH,1120H
.WORD 0,3,0C61H,1070H,0C6BH,10A0H
.WORD 0,5,0D3FH,0FECH,0D42H,0FF6H
.WORD 0,7,0E10H,1088H,0E20H,108CH
ENRECT1 .WORD 240-XX,948-YY,378-XX,983-YY+10,4 ;DIR TO TURN TOWARD
;FOR HULK COLLISIONS WITH BOX
.WORD 501-XX-20,948-YY,620-XX,983-YY+10,6
.WORD 0
ENRECT3 .WORD 280-XX,304-YY,367-XX,381-YY,3 ;REACTOR AREA
.WORD 0
ENRECT4 .WORD 836-XX,210-YY,1064-XX,300-YY,6 ;ELEVATOR DOWN AREA
.WORD 0
ENRECT5 .WORD 268-XX,2525-YY,365-XX,2617-YY,3 ;SECRET PATH LOWER AREA
.WORD 518-XX,2324-YY,609-XX,2471-YY,7 ;
.WORD 541-XX,2152-YY,640-XX,2223-YY,7 ;NEAR BOXES
ENRECT6 .WORD 546-XX,1792-YY,656-XX,1999-YY,7 ;SECRET PATH UPPER AREA
.WORD 251-XX,1611-YY,352-XX,1703-YY,4
.WORD 518-XX,1635-YY,627-XX,1701-YY,6
.WORD 0
ENRECT10 ;START OF DESERT
;PIT ON LEFT AT START OF DESERT
.WORD 09EH,126DH-3AH-20,122H,131CH-3AH,3 ;9E=CE
.WORD 122H,127FH-3AH-20,145H,1314H-3AH,3
.WORD 146H,128DH-3AH-20,155H,1310H-3AH,3
.WORD 155H,12A6H-3AH-20,168H,1308H-3AH,3
.WORD 168H,12C8H-3AH-20,17CH,12F0H-3AH,3
;MOUND ON RIGHT
.WORD 675-XX2-20,4849+11-YY2-20,870-XX2,4917+32-YY2-16,7
;FIRST BARBED WIRE LINE
.WORD 226+6-XX2-20,4600+17-YY2-20,603+25-XX2,4635+27-YY2,1
.WORD 733+6-XX2-20,4600+17-YY2-20,1028+25-XX2,4635+27-YY2,1
.WORD 0
ENRECT11 ;START OF SCROLL PATHB AND PATHA!
.WORD 758+6-XX2-30,4370+20-YY2-35,864+25-45-XX2+15,4407+25-YY2+10,7 ;WALL TOPRGT
.WORD 590+3-XX2-30,3891+20-YY2-35,776+20-XX2+15,3869+61+25-YY2+10,2 ;MID SCRN WAL
.WORD 586+3-XX2-30,3669+20-YY2-35,682+20-XX2+15,3647+61+25-YY2+10,7 ;MID TURT WAL
.WORD 372+3-XX2-30,3255+20-YY2-35,1044+25-XX2+15,3263+61+25-YY2+10,6 ;LONG WALL
.WORD 490+3-XX2-30,3891+20-YY2-35,656+20-XX2+15,3869+61+25-YY2+10,6 ;MID SCRN WAL LFT SIDE
.WORD 0
ENRECT12 ;2ND DESERT LOCKDOWN AT HUT
.WORD 248-XX2,2964-YY2,338+28-XX2,3099+32-YY2,4 ;HUT AT LK DWN
.WORD 0
ENRECT13 ;NEAR HUT 2 DISHES
;SCROLLING UP INTO NEW DESERT AREA FOR HULKS NEAR BIG HUTS
.WORD 139H,5ECH-16,205H,692H+20,3 ;SQR HUT
.WORD 0
ENRECT14 ;FROM TRIPLE GUNNERS UP
;SCROLLING UP INTO NEW DESERT AREA FOR PLAYERS NEAR BIG HUTS
.WORD 97H,368H,35FH,395H,5 ;TRIPLE WALL
.WORD 9H,227H+30,18CH,268H,3 ;LOWER CLIFF
.WORD 100H,198H,2C5H,1E4H,6 ;UPPER CLIFF
.WORD 0
FLTL
FLTR
FLTB
; RETS
SFLTT
CALLR POSITN
JRUC SPAWN_GROUPS
FLTT
;.WORD 3,5,150,-10,250,0 ;FLOATING IN FROM TOP
;FLOATING RECT AT TOP
CLR A11
MOVE A11,@JUMPER
CALLR POSITN
JRUC SPAWN_GROUP
POSITN
MOVE *A8+,A10,W ;DIRECTION
MOVE @WORLDTLX+16,A3
MOVE *A8+,A0,W
ADD A3,A0
MOVE A0,B0
MOVE *A8+,A2
MOVE *A8+,A0
ADD A3,A0
MOVE A0,B1
CALLA RANGRAND
MOVE A0,A9
MOVE A2,B0
MOVE *A8,A0
MOVE A0,B1
CALLA RANGRAND
MOVE @WORLDTLY+16,A3
ADD A3,A0
SLL 16,A0
MOVY A0,A9
;A8=CHOSEN RECTANGLE INFO
;A9=[Y,X] OF SPOT TO START FROM
;A10=DIRECTION
RETS
FIXED2
MOVK 1,A11 ;NOT LOTS OF RANGE
JRUC FIXA
JUMPR
;JUMP DOWN FROM RIGHT WALL
MOVK 3,A0 ;A0=3=JUMP DOWN FROM RGT WALL
JRUC FIXAB
JUMPD MOVK 1,A0 ;A0=1=JUMP DOWN FROM ROOF
JRUC FIXAB
FIXEDA
MOVE @HCOUNT,A0
ANDI 03H,A0
SLL 5,A0
ADDI INTOL,A0
MOVE *A0,A0,L
MOVE @ENEMY_RECT,A8,L
ADD A0,A8
MOVE *A8+,A0,W
;FIXED RECTANGLE FOR ALL AHMEDS/FNDS
CLR A11
MOVE *A8+,A10,W ;DIRECTION
MOVE *A8+,A0,W
MOVE A0,B0
MOVE *A8+,A2
MOVE *A8+,A0
MOVE A0,B1
CALLA RANGRAND
MOVE A0,A9
MOVE A2,B0
MOVE *A8,A0
MOVE A0,B1
CALLA RANGRAND
SLL 16,A0
MOVY A0,A9
;A8=CHOSEN RECTANGLE INFO
;A9=[Y,X] OF SPOT TO START FROM
;A10=DIRECTION
RETS
SFIXED
CALLR POSITN2
JRUC SPAWN_GROUPS ;SKIPPER
FIXED
;FIXED RECTANGLE
CLR A11
FIXA CLR A0
FIXAB MOVE A0,@JUMPER
CALLR POSITN2
JRUC SPAWN_GROUP
POSITN2 MOVE *A8+,A10,W ;DIRECTION
MOVE *A8+,A0,W
MOVE A0,B0
MOVE *A8+,A2
MOVE *A8+,A0
MOVE A0,B1
CALLA RANGRAND
MOVE A0,A9
MOVE A2,B0
MOVE *A8,A0
MOVE A0,B1
CALLA RANGRAND
SLL 16,A0
MOVY A0,A9
;A8=CHOSEN RECTANGLE INFO
;A9=[Y,X] OF SPOT TO START FROM
;A10=DIRECTION
RETS
SEND_GROUP:
;SEND GROUP OF HULKS FROM SPECIFIC SPOT
;A9=[Y,X] OF SPOT TO START FROM
;A10=DIRECTION
;8 1 2
;7 3
;6 5 4
MOVE @HULK_DN,A0
JRNZ ROUT
CLR A11
SPAWN_GROUP:
;@JUMPER=0 FOR NORM, 1=FROM ROOFTOP
MOVI 100,A0 ;140
CALLA RANDPER
JRC GANG
REGG ANDI 03H,A0
ADDK 1,A0
MOVE A0,A8
SG1
CREATE HULKPID,AHULK ;START ONE HULK
MOVE @HTYPE,A1
MOVE A1,*A0(HULKTYP)
DSJS A8,SG1
ROUT
RETS
SPAWN_GROUPS:
;FOR SKIPPERS
MOVI 260,A0 ;140
CALLA RANDPER
JRC SKGANG
MOVE @RAND,A0
ANDI 03H,A0
ADDK 1,A0
MOVE A0,A8
G2 CREATE HULKPID,ASKIPR
DSJS A8,G2
RETS
SKGANG:
MOVI SKIPR,A2
CALLR GET_WVADDR
MOVE *A0(16),A0 ;GET HULKS LEFT TO RELEASE THIS WAVE!
CMPI 16,A0 ;MIN HULKS BEFORE GANG
JRLT SNH1 ;RELEASE ALL OF THEM!
MOVK 7,B0 ;5 ;# OF HULKS IN A GANG
MOVK 14,B1 ;13
CALLA RANGRAND
SNH1: PUSH A0
CREATE HULKPID,GSKIPR
PULL A0
DSJ A0,SNH1
RETS
GANG:
;@JUMPER=0 FOR NORM, 1=FROM ROOFTOP
MOVE A11,A11
JRNZ REGG
;BTST FOR SEVERAL WAVES HERE!
; MOVE @WAVE,A2
; CMPI 1,A2
; JRZ REGG
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 GNH1 ;RELEASE ALL OF THEM!
MOVK 7,B0 ;5 ;# OF HULKS IN A GANG
MOVK 15,B1 ;13
CALLA RANGRAND
GNH1: PUSH A0
CREATE HULKPID,GHULK
MOVE @HTYPE,A1
MOVE A1,*A0(HULKTYP)
PULL A0
DSJ A0,GNH1
RETS
GHULK:
;GHULK PUTS X # OF HULKS BEHIND SPOT IN GANG FORMATION!
;A9=[Y,X] SPOT TO SPAWN FROM
;A10=DIRECTION
CALLR SETUP_HULK
MOVE A10,*A13(DIR)
MOVK 30,A1
MOVE A1,*A13(DIS)
MOVE A10,A0
SLL 5,A0
ADDI GHXT,A0
MOVE *A0,A4,L
MOVE *A4+,A2,W
MOVE A2,B0
MOVE *A4+,A2,W
MOVE A2,B1
CALLA RANGRAND
SLL 16,A0
ADD A9,A0
MOVE A0,A1
MOVE *A4+,A2,W
MOVE A2,B0
MOVE *A4+,A2,W
MOVE A2,B1
CALLA RANGRAND
MOVX A9,A2
ADD A0,A2
SLL 16,A2
MOVE A2,A0
SLL 5,A10
ADDI GHXTF,A10
MOVE *A10,A9,L
;A0,A1 ARE SET UP
MOVE *A13(HULKTYP),A3
SLL 5,A3
ADDI HULTP,A3
MOVE *A3,A2,L
MOVI 159,A3
MOVI DMAWNZ,A4 ;NON-ZERO VALUE
MOVI CLSENMY|TYPGRW,A5
CLR A6
CLR A7
CALLA BEGINOBJ2
MOVK 1,B0 ;CLR B0
MOVK 6,B1 ;5
CALLA RANGRAND
DEC A0
MOVE A0,*A13(LEVEL)
MOVE *A13(CFLAGS),A0 ;INDICATE GANG MEMBER FOR RUN IN
ORI 012H,A0 ;10
MOVE A0,*A13(CFLAGS)
JRUC OKZ0
HULTP .LONG DUM2,BOY1,AHMED10
GHXT .LONG 0,GBTML,GBTML,GLFTL,GTOPL,GTOPL,GTOPL,GRGTL,GRGTL
GHXTF .LONG 0,GR10,GR2,GR5,GR5,GR8,GR8,GR8,GR10
DGHXTF .LONG 0,DGR10,DGR2,DGR5,DGR5,DGR8,DGR8,DGR8,DGR10
GTOPL .WORD -30,-15,-10,65 ;Y,Y,X,X
GBTML .WORD -5,50,-15,55
GLFTL .WORD -30,11,0,25
GRGTL .WORD -30,11,5,30
SKGLFTL .WORD -45,-5,0,25
SKGRGTL .WORD -45,-5,5,30
FLD1 .LONG DBAT1,gb6w5a,AHMED10 ;ADETH81B
FLD2 .LONG DHXTF,HXTF,DHXTFA
HXT .LONG 0,BTML,BTML,LFTL,TOPL,TOPL,TOPL,RGTL,RGTL
SHXT .LONG 0,BTML,BTML,SLFTL,TOPL,TOPL,TOPL,SRGTL,SRGTL
;DEMON GRUNT
HXTF .LONG 0,BTMLF,BTMLF,LFTLF,TOPLF,TOPLF,TOPLF,RGTLF,RGTLF ;AXE
;SOLDIER
DHXTF .LONG 0,DBTMLF,DBTMLF,DLFTLF,DTOPLF,DTOPLF,DTOPLF,DRGTLF,DRGTLF
;AHMED GRUNT
DHXTFA .LONG 0,DBTMLFA,DBTMLFA,DLFTLFA,DTOPLFA,DTOPLFA,DTOPLFA,DRGTLFA,DRGTLFA
;[Y],[X] OF PLACEMENT
BTML .LONG 0,0,[-15,0],[24,0],[-15,0],[48,0],[-5,0],[00,0],[-5,0],[72,0]
LFTL .LONG 0,0,[-10,0],[25,0],[14,0],[5,0],[-34,0],[5,0],[-10,0],[-5,0]
TOPL .LONG 0,0,[-20,0],[22,0],[-20,0],[44,0],[-30,0],[0,0],[-30,0],[66,0]
RGTL .LONG 0,0,[-19,0],[20,0],[-2,0],[20,0],[-36,0],[32,0],[15,0],[32,0]
;SKIPPERS
SLFTL .LONG 0,0,[-10,0],[25,0],[0,0],[5,0],[-30,0],[5,0],[-10,0],[-5,0]
SRGTL .LONG 0,0,[-19,0],[20,0],[-2,0],[20,0],[-30,0],[32,0],[0,0],[32,0]
FRMHUT .LONG 0,0,[0,0],[10,0],[0,0],[30,0],[0,0],[50,0],[0,0],[70,0]
BTMLF .LONG 0,GR10,GR10,GR2,GR2
LFTLF .LONG 0,GR2,GR5,GR2,GR5
TOPLF .LONG 0,GR5,GR5,GR5,GR5
RGTLF .LONG 0,GR10,GR8,GR10,GR8
;REGULAR GRUNT
DBTMLF .LONG 0,DGR10,DGR10,DGR2,DGR2
DLFTLF .LONG 0,DGR2,DGR5,DGR2,DGR5
DTOPLF .LONG 0,DGR5,DGR5,DGR5,DGR5
DRGTLF .LONG 0,DGR10,DGR8,DGR10,DGR8
;AHMED GRUNT
DBTMLFA .LONG 0,DGR10A,DGR10A,DGR2A,DGR2A
DLFTLFA .LONG 0,DGR2A,DGR5A,DGR2A,DGR5A
DTOPLFA .LONG 0,DGR5A,DGR5A,DGR5A,DGR5A
DRGTLFA .LONG 0,DGR10A,DGR8A,DGR10A,DGR8A
JUMPOUT
;A8=STEEL DOOR IMG
MOVE @PCNT,A1
ANDI 03H,A1
ADDK 2,A1
MOVE A1,*A13(LEVEL),W
CALLR DO_DIFF
CLR A0
MOVE A0,*A13(BULPRC),L ;BULLET FIRING PROCESS
CALLR GETPSK
MOVE *A8(OFLAGS),A0
BTST B_FLIPH,A0
JRNZ FLFT
;FROM RIGHT TO LEFT JUMPER OUT OF PIT
MOVE *A8(OXVAL),A0,L ;POSITION GRUNT UNDER PIT
ADDI [22,0],A0
MOVE @PCNT,A1
ANDI 07H,A1
SLL 16,A1
ADD A1,A0
MOVK 7,A4
MOVI -0B800H,A11 ;12
MOVI DMAWNZ,A5 ;NON-ZERO VALUE
JRUC JALL
FLFT
;JUMP UP AND OUT FROM LEFT TO RIGHT
MOVE *A8(OXVAL),A0,L ;POSITION GRUNT UNDER PIT
ADDI [5,0],A0
MOVE @PCNT,A1
ANDI 07H,A1
SLL 16,A1
ADD A1,A0
MOVK 3,A4
MOVI 0B800H,A11 ;12
MOVI DMAWNZ|M_FLIPH,A5 ;NON-ZERO VALUE
JALL
MOVE *A8(OYVAL),A1,L
MOVE @HULK_CNT,A2
ANDI 07H,A2
SLL 16,A2
ADD A2,A1
ADDI [3,0],A1 ;6
MOVE A4,*A13(SK_DIR)
MOVE A4,*A13(DIR)
MOVE *A13(HULKTYP),A3
SLL 5,A3
ADDI FLD1,A3
MOVE *A3,A2,L ;GET IMG TO TURN ON
MOVI 30,A3 ;UNDER PIT WALLS
MOVE A5,A4
MOVI CLSENMY|TYPGRW,A5
CLR A6
CLR A7
CALLA BEGINOBJ2
;OBJECT ON, NOW JUMP HIM OUT
;READY FOR JUMP FROM RIGHT
;CHANGE VELOCITY HERE
CREATE 0,DOYVP ;FOR PIT JUMPERS
MOVI JRDWNP,A9 ;DEMON
MOVI JRDWN2,A10 ;NEXT PHASE
MOVE *A13(HULKTYP),A1
JRNZ RTAG4X
MOVI DJRDWNP,A9 ;REGULAR SOLDIER
MOVI DJRDWN2,A10 ;NEXT PHASE
RTAG4X
MOVE A11,*A8(OXVEL),L
MOVK 1,A1
JSRP FRANIM
MOVE A10,A9
;JUMP/LAND
;TURN ON COLLISIONS
MOVI CLSENMY|TYPHULK,A5 ;OR MAYBE IN JUMPING DOWN LOOP!
MOVE A5,*A8(OID)
CLR A0
MOVE A0,*A8(OYVEL),L
MOVE A0,*A8(OXVEL),L
MOVK 1,A1
JSRP FRANIM
MOVE *A13(DIR),A0
CALLR INTO
CALLR GET_RUN ;GET FIRST FRANIM PNTR FOR
MOVK 2,A3 ;5
MOVE A3,*A13(DIS) ;CHANGE BASED ON HULKS SPEED?
MOVE A3,*A13(BOXCK)
MOVE *A13(CFLAGS),A0 ;RUNNING OUT/ ANGLE OFF AFTER DIS=0
ORI 2,A0
MOVE A0,*A13(CFLAGS)
JRUC LUP_ST
;
AHULK:
;A8=1-4 FOR GRUNT # FOR THIS RELEASE
;A9=[Y,X] SPOT TO SPAWN FROM
;A10=DIRECTION
;A11=1 IF FIXED AREA FOR RELEASE
;@JUMPER=0 FOR NORM, 1=FROM ROOFTOP
;8 1 2
;7 3
;6 5 4
CALLR SETUP_HULK ;INC CNT, SET DIR, SET DEATH FLAG
MOVE A10,*A13(DIR)
;A8=1-4
;A11=0 THEN SPREAD OUT
MOVE A11,A11
JRZ DOXY
;FOR STACKING UP IN HUT
MOVE A10,A0
SLL 5,A0
MOVI FRMHUT,A4 ;ADDI HXT2,A0
JRUC DOX
DOXY MOVE A10,A0
SLL 5,A0
ADDI HXT,A0
MOVE *A0,A4,L
;BTML .LONG 0,0,[08,0],[10,0],[08,0],[30,0],[08,0],[50,0],[17,0],[20,0]
;[Y,X] OF PLACEMENT
;A4=THIS
;A8=1-4
DOX SLL 6,A8
ADD A8,A4
MOVE *A4+,A1,L ;GET Y FIRST
ADD A9,A1
SLL 16,A9
MOVE *A4,A0,L
ADD A9,A0
SLL 5,A10
;BTMLF .LONG 0,GR10,GR10,GR2,GR2
MOVE *A13(HULKTYP),A3
SLL 5,A3
MOVI FLD1,A2
ADD A3,A2
MOVE *A2,A2,L
ADDI FLD2,A3
MOVE *A3,A3,L
ADD A3,A10
RTAG3 MOVE *A10,A10,L
SRL 1,A8
ADD A8,A10
MOVE *A10,A9,L
;NEED A0=[X,0000],A1=[Y,0000]
;A0,A1 ARE SET UP
;A9=FRANIM GROW FROM SLIME
MOVI 159,A3
MOVI DMAWNZ,A4 ;NON-ZERO VALUE
MOVI CLSENMY|TYPGRW,A5
CLR A6
CLR A7
CALLA BEGINOBJ2
MOVE *A13(CFLAGS),A0 ;RUNNING OUT
ORI 2,A0
MOVE A0,*A13(CFLAGS)
OKZ0
MOVE @JUMPER,A11
JRZ NOJMP
MOVI 300,A0
MOVE A0,*A8(OZPOS)
MOVK 5,A0
MOVE A0,*A13(LEVEL)
MOVE A11,*A13(JUMPF)
CALLR SV ;STRTME
BIN
;IN HERE FOR BACKGROUND JUMPER
;IF THIS IS A JUMPER DUDE, THEN
;TURN OFF COLLISIONS
MOVE *A8(OFLAGS),A0
ORI M_NOCOLL,A0
MOVE A0,*A8(OFLAGS)
STPWLK SLEEPK 1
;RUN UNTIL TIME TO JUMP
CKXYTOP MOVE @HALT,A0
JRNZ STPWLK
CLR A1
JSRP FRANIM
JRNC CKY ;BR=NOT AT END OF SCRIPT YET
CALLR GET_RUN
CKY CMPI 1,A11
JRNZ CKXL
MOVE *A8(OYPOS),A0
MOVE @JUMPXY,A1
CMP A0,A1
JRGT CKXYTOP
;READY FOR JUMP DOWN
;CHANGE VELOCITY HERE
CREATE 0,DOYV1
MOVI JDWN,A9 ;AXE GRUNT
MOVI JDWN2,A10 ;NEXT PHASE
MOVE *A13(HULKTYP),A1
JRNZ RTAG6
MOVI DJDWN,A9 ;SOLDIER GRUNT
MOVI DJDWN2,A10 ;NEXT PHASE
RTAG6 MOVK 1,A1
JSRP FRANIM
MOVE A10,A9
; MOVI JDWN2,A9
JINOUT
;JUMP/LAND
;TURN ON COLLISIONS
MOVE *A8(OFLAGS),A0
ANDI 0F7FFH,A0
MOVE A0,*A8(OFLAGS)
MOVI CLSENMY|TYPHULK,A5
MOVE A5,*A8(OID)
MOVI 159,A0
MOVE A0,*A8(OZPOS)
CLR A0
MOVE A0,*A8(OYVEL),L
MOVE A0,*A8(OXVEL),L
MOVK 1,A1
JSRP FRANIM
SLEEPK 10
MOVE *A13(DIR),A0
CALLR INTO
CALLR GET_RUN ;GET FIRST FRANIM PNTR FOR
MOVK 20,A3
MOVE A3,*A13(DIS) ;CHANGE BASED ON HULKS SPEED?
JRUC LUP_ST
CKXL CMPI 3,A11
JRNZ CKXR
MOVE *A8(OXPOS),A0
MOVE @JUMPXY2,A1
CMP A0,A1
JRLT CKXYTOP
;READY FOR JUMP FROM RIGHT
;CHANGE VELOCITY HERE
CREATE 0,DOYV
MOVI JRDWN,A9 ;DEMON
MOVI JRDWN2,A10 ;NEXT PHASE
MOVE *A13(HULKTYP),A1
JRNZ RTAG4
; CREATE 0,MYSHAD
MOVI DJRDWN,A9 ;REGULAR SOLDIER
MOVI DJRDWN2,A10 ;NEXT PHASE
RTAG4
MOVI -8800H,A0 ;12
MOVE A0,*A8(OXVEL),L
MOVK 1,A1
JSRP FRANIM
MOVE A10,A9
JRUC JINOUT
DOYV1 ;FROM TOP OF SCRN DOWN
MOVI -3000H,A0 ;12
MOVE A0,*A8(OYVEL),L
SLEEPK 10
MOVI -1000H,A0 ;12
MOVE A0,*A8(OYVEL),L
SLEEPK 3
MOVI 5000H,A0 ;12
MOVE A0,*A8(OYVEL),L
SLEEPK 15
MOVI 0F000H,A0 ;12
MOVE A0,*A8(OYVEL),L
SLEEPK 015H
MOVI 016000H,A0 ;12
MOVE A0,*A8(OYVEL),L
SLEEPK 0CH
MOVI 01C000H,A0 ;12
MOVE A0,*A8(OYVEL),L
DIE
DOYV MOVI -8000H,A0 ;FROM RIGHT OF SCRN DOWN
MOVE A0,*A8(OYVEL),L
SLEEPK 15
MOVI -4000H,A0
MOVE A0,*A8(OYVEL),L
SLEEPK 15
MOVI 3000H,A0
MOVE A0,*A8(OYVEL),L
SLEEPK 15
MOVI 0C000H,A0
MOVE A0,*A8(OYVEL),L
SLEEPK 15
MOVI 15000H,A0
MOVE A0,*A8(OYVEL),L
DIE
DOYVP MOVI 0FFFE7000H,A0 ;FOR HULK JUMPING UP AND OUT OF PIT
MOVE A0,*A8(OYVEL),L
SLEEPK 18
MOVI 159,A0
MOVE A0,*A8(OZPOS)
SLEEPK 7
MOVI 0FFFF6000H,A0
MOVE A0,*A8(OYVEL),L
SLEEPK 15
MOVI 08000H,A0
MOVE A0,*A8(OYVEL),L
SLEEPK 7
MOVI 0F000H,A0
MOVE A0,*A8(OYVEL),L
SLEEPK 7
MOVI 15000H,A0
MOVE A0,*A8(OYVEL),L
DIE
CKXR LOCKUP
SV
MOVE *A13(HULKTYP),A1
SLL 5,A1
ADDI HPAL,A1
MOVE *A1,A0,L
CALLA GETFPAL ;GET A COLOR MAP ASSIGNMENT
MOVE A0,*A8(OPAL),W ;STORE THE NEW PALETTE
OKVA
CALLR DO_DIFF
MOVE *A13(DIR),A0
MOVE A0,*A13(BOXCK)
CALLR INTO
JRUC GET_RUN ;CALLR GET_RUN ;GET FIRST FRANIM PNTR FOR
HPAL .LONG DGP2,GRNTB,AHMEDP
NOJMP
;CHANGE PAL IF NEEDED
MOVE *A13(LEVEL),A0
CMPI 4,A0 ;4
JRLT OKVX
MOVE *A13(HULKTYP),A1
SLL 5,A1
ADDI HPAL,A1
MOVE *A1,A0,L
CALLA GETFPAL ;GET A COLOR MAP ASSIGNMENT
MOVE A0,*A8(OPAL),W ;STORE THE NEW PALETTE
OKVX
;GROW UP OUT OF SLIME
; MOVK 1,A0
MOVK 1,A1
JSRP FRANIM
MOVI CLSENMY|TYPHULK,A5
MOVE A5,*A8(OID)
;THEN START WITH A VELOCITY!
CALLR OKVA
MOVI 38,A3 ;38
MOVE A3,*A13(DIS) ;CHANGE BASED ON HULKS SPEED?
MOVE *A8(OYPOS),A0
MOVE @WORLDTLY,A1,L
SRL 16,A1
ADDI 285,A1 ;275
CMP A0,A1
JRGT LUP_ST
;THIS HULK STARTING LOWER THAN BOTTOM OF SCRN!
;RESET ITS Y LINE
MOVE A1,*A8(OYPOS)
LUP_ST: MOVK 2,B0
MOVI 12,B1
CALLA RANGRAND
MOVE A0,*A13(STCNT)
;
; LOOP TOP FOR HULKS
;
LUP_TOP:
;TOP OF HULK LOGIC
MOVE @HALT,A0
JRZ CONT0 ;IF HALT ON, LOOP BACK TO TOP
SLEEPK 3
JRUC LUP_TOP
CONT0
;
; DO HULK MOVEMENT LOGIC A8=CURRENT OBJECT POINTER (HULK IMAGE)
;
;FIRST, DO AGE/LEVEL UPDATE
MOVE *A13(HAGE),A0
ANDI 03FFH,A0
DEC A0
MOVE A0,*A13(HAGE)
JRNZ NONEW
MOVE *A13(LEVEL),A0
CMPI MAXLEVEL,A0
JREQ NONEW
INC A0
MOVE A0,*A13(LEVEL)
CALLR DO_DIFF
MOVE *A13(KPAGE),A0
MOVE A0,*A13(HAGE)
NONEW
MOVE *A13(CFLAGS),A0
BTST 1,A0
JRNZ NOPROB ;IF JUST RUNNING IN, DON'T CHECK WALLS
MOVE @EN_CURRENT,A0,L ;CURRENT RECT LIST
JRZ NOPROB
CALLR CK_RECT
JRNC NOPROB
;THIS GRUNT IS STUCK BNCING BETWEEN WALLS!
;KILL ME!
MOVK 1,A11
JRUC BMPDI
NOPROB MOVI SETUP_DIR,A10 ;ROUTINE TO CALL
CALLR CK_SPIN
MOVE A0,A0
JRZ NOTSPIN
CALLA PRCSLP
JRUC LUP_TOP
NOTSPIN
MOVE *A13(DIS),A0 ;UPDATE DISTANCE COUNT
DEC A0
MOVE A0,*A13(DIS) ;STUFF NEW COUNT
JRNZ DOHULK ;BR=CONTINUE CURRENT DIRECTION
MOVE A0,*A13(BNCING)
MOVE *A13(CFLAGS),A0
BTST 4,A0
JRZ NGNG ;BR=NOT A GANG MEMBER
MOVE *A13(CFLAGS),A0
ANDI 0FFEDH,A0 ;I AM A GANG MEMBER ;FFEF
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
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
;8 1 2
;7 3
;6 5 4
NEWANGA:
.LONG 0,ANG1A,ANG1A,ANG3A,ANG5A,ANG5A,ANG7A,ANG7A,ANG1A
NEWANG: .LONG 0,ANG1,ANG1,ANG3,ANG5,ANG5,ANG7,ANG7,ANG1
ANG5: .WORD 7,6,4,3
ANG1: .WORD 7,3,8,2
ANG3: .WORD 1,5,2,4
ANG7: .WORD 8,6,1,5
;
ANG5A: .WORD 7,3,5,3
ANG1A: .WORD 7,3,1,7
ANG3A: .WORD 1,5,5,3
ANG7A: .WORD 1,5,1,7
;
;NOW POINT THIS HULK AT CURRENT POSITION OF PLAYER
T3: MOVE *A13(BNCING),A0
JRNZ DOHULK
MOVE *A13(SK_DIR),A7,W
;IF NEW SEEK IS <> OLD SEEK, THEN SET STAND FLAG
CALLR GET_DIS
CALLR SETUP_DIR
MOVE *A13(SK_DIR),A0
CMP A0,A7 ;NEW CMP OLD SEEK
JREQ DOHULK
MOVE *A13(HULKTYP),A0
JRNZ T4
;MAYBE SHOOT AT PLAYER!
MOVE *A13(STCNT),A0
JRZ T4
DEC A0
MOVE A0,*A13(STCNT)
JRNZ T4
;SHOOT AT PLAYER
MOVK 2,B0
MOVI 12,B1
CALLA RANGRAND
MOVE A0,*A13(STCNT)
;DOSHOOT
;A9=PLAYER 1 OR 2
;THIS HULK IS ABOUT TO SHOOT
;START HULK SHOTS
* ISOBJ - IS AN OBJECT ON THE OBJECT LIST? *
* A0 = PTR TO OBJECT *
* RETURNS: *
* Z BIT SET = NO OBJECT, A0 = 0 *
* Z BIT CLR = NO OBJECT, A0 = PTR TO OBJECT *
MOVE A8,A0
CALLA ISOBJ ;FIX BUG!
JRZ HDI
CLR A1
MOVE A1,*A8(OXVEL),L
MOVE A1,*A8(OYVEL),L
MOVE @HULK_CNT,A9
MOVE @PCNT,A11
ANDI 03H,A11
INC A11 ;A11=FRANIM LIST CNT
MOVE A11,*A13(IBAT)
ANDI 01H,A9
SLL 5,A9
MOVI PLYROBJS,A2
ADD A9,A2
MOVE *A2,A0,L
JRNZ DOS1
XORI 32,A9
MOVI PLYROBJS,A2
ADD A9,A2
MOVE *A2,A0,L
DOS1 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 XSUP ;BR=BAT UPWARD
CMP A4,A1
JRC XB8O ;BR=8 O'CLOCK SWING NEEDED
;4 O'CLOCK
MOVI SHOOT4O,A9 ;SOLDIER
CLR A10
JRUC GUNFIRE
XB8O
;8
MOVI SHOOT8O,A9
MOVK 1,A10
JRUC GUNFIRE
XSUP CMP A4,A1
JRC XB10O
;2 O'CLOCK
MOVI SHOOT2O,A9
MOVK 2,A10
JRUC GUNFIRE
XB10O
MOVI SHOOT10O,A9
MOVK 3,A10
GUNFIRE
CREATE FLMPID,ABULLET ;HULKPID
MOVE A0,*A13(BULPRC),L ;KEEP BULLET FIRING PROCESS
SLL 5,A10 ;DISPLAY INITIAL SHOOTING FRAME
MOVI GFA,A0
ADD A10,A0
MOVE *A0,A1,L
ADDI GFF,A10
MOVE *A10,A4,L
CALLA ANI
SLEEPK 30
MOVE A9,A10
GF MOVK 1,A1
JSRP FRANIM
MOVE A10,A9
DSJS A11,GF
SLEEPK 30
JRUC BATDN
ABULLET
;A11=# OF BULLETS TO SHOOT/2
;A10=0=4,1=8,2=2,3=10 = DIRECTIONS
SLEEPK 30
SLL 1,A11
ABU CREATE FLMPID,BULL2 ;HULKPID
SLEEPK 8
DSJS A11,ABU
MOVE *A8(OPLINK),A0,L
MOVE A11,*A0(BULPRC),L
HDI DIE
GFA .LONG DSWINGa,DSWINGa,DBATa,DBATa
GFF .LONG DMAWNZ|M_FLIPH,DMAWNZ,DMAWNZ|M_FLIPH,DMAWNZ
;A10=0=4,1=8,2=2,3=10 = DIRECTIONS
;BLIMG .LONG GNTBUL8,GNTBUL8,GNTBUL10,GNTBUL10
;BLIMG .LONG GNTBUL8,GNTBUL8,GNTBUL10,GNTBUL10
;BLFLP .LONG DMAWNZ|M_FLIPH,DMAWNZ,DMAWNZ|M_FLIPH,DMAWNZ
XVL .LONG 018000H,-18000H,018000H,-18000H
YVL .LONG 0C000H,0C000H,-18000H,-18000H
XOFSET .LONG [18H,0],[-4,0],[1BH,0],[-2,0]
YOFSET .LONG [16H,0],[16H,0],[-2,0],[-2,0]
BULL2
SLL 5,A10
MOVI GFF,A3
ADD A10,A3
MOVE *A3,A4,W ;MAYBE LONG
MOVI XVL,A3
ADD A10,A3
MOVE *A3,A6,L
MOVI YVL,A3
ADD A10,A3
MOVE *A3,A7,L
MOVE *A8(OXVAL),A0,L
MOVE *A8(OYVAL),A1,L
MOVI XOFSET,A3
MOVI YOFSET,A5
ADD A10,A3
MOVE *A3,A3,L
ADD A3,A0
ADD A10,A5
MOVE *A5,A3,L
ADD A3,A1
MOVI CNNBLL2,A2
MOVI CLSENMY|TYPGOO,A5 ;ENMY|TYPSHOT,A5
MOVI 160,A3 ;133
CALLA BEGINOBJ2
MOVI GRNTSHT,A0
CALLA ONESND
JAUC START_PJ2
T4: MOVE *A13(CFLAGS),A0 ;SAYS I AM SPINNING
ORI 01H,A0
MOVE A0,*A13(CFLAGS),W
MOVK 2,A0
MOVE A0,*A13(OSCILLATE)
SLEEPK 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
DOBAT:
;A9=PLAYER 1 OR 2
;THIS HULK IS BATTING
;START BAT SWING
MOVE *A13(DIR),A0
CMPI 1,A0
JRNZ DBC
;HULK WAS GOING UP, CHEAT HIM UP A LITTLE CLOSER TO PLAYER
MOVE *A8(OYPOS),A0
SUBK 5,A0
MOVE A0,*A8(OYPOS)
DBC CALLR PHASE1
JRC SUP ;BR=BAT UPWARD
CMP A4,A1
JRC B8O ;BR=8 O'CLOCK SWING NEEDED
;4 O'CLOCK
MOVE *A13(HULKTYP),A0
SLL 5,A0
ADDI ABAT,A0
MOVE *A0,A9,L
JRUC DOBT
ABAT .LONG BAT4OS,BAT4O,BAT4OA
BBAT .LONG BAT8OS,BAT8O,BAT8OA
CBAT .LONG BAT2OS,BAT2O,BAT2OA
DBAT .LONG BAT10OS,BAT10O,BAT10OA
B8O
;8
MOVE *A13(HULKTYP),A0
SLL 5,A0
ADDI BBAT,A0
MOVE *A0,A9,L
JRUC DOBT
SUP CMP A4,A1
JRC B10O
;2 O'CLOCK
MOVE *A13(HULKTYP),A0
SLL 5,A0
ADDI CBAT,A0
MOVE *A0,A9,L
JRUC DOBT
B10O
MOVE *A13(HULKTYP),A0
SLL 5,A0
ADDI DBAT,A0
MOVE *A0,A9,L
DOBT MOVE A9,A10
MOVK 1,A1
JSRP FRANIM
MOVE A10,A9
MOVK 1,A1
JSRP FRANIM
BATDN CLR A0
MOVE A0,*A13(IBAT)
MOVK 1,A0
MOVE A0,*A13(DIS)
MOVE A0,*A13(CFLAGS)
MOVI ZEROS,A9
JRUC LUP_TOP
;
ZEROS .LONG 0,0
GET_WVADDR:
;A2=ENEMY TYPE LOOKING FOR
;IE.HULK,TANK
;PROBLEM WITH DUPLICATES!
MOVI WAVE_RAM,A0
HU1: MOVE *A0,A1,W ;TYPE
CMP A2,A1
JREQ YSID
ADDI 6*16,A0
JRUC HU1
YSID: 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 11,10,9,8,7,7,6,6,5,5,4,4,3,3,3,3
AGTBL: .WORD 160,300,180,220,280,420,500,100,140,250,90,160
;
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
;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 *A13(HULKTYP),A4
SLL 5,A4
ADDI HSTND,A4
MOVE *A4,A4,L
ADD A4,A0
MOVE *A0,A1,L ;NEW OIMG
SLL 4,A2
ADDI SPINFLGS,A2
MOVE *A2,A4,W ;NEW OFLAGS
JAUC ANI ;CALLA ANI
; 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
; MOVE *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
;
; MOVE *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!
; MOVE A2,*A13(SKPLYR)
;ZCT
; SLEEPK 1
; JAUC LUP_TOP
SETUP_DIRA:
MOVE *A13(GOCRNR),A0,L ;[Y,X]
JRZ SETUP_DIR
;THIS AHMED WILL SEEK TO A CORNER BEFORE SEEKING PLAYER
;NEED 32 BIT Y/X [Y,X] IN A0
JRUC DOGET
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
MOVE *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
MOVE 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
DOGET CALLA GETXY ;A8 TO SEEK A0
INC A0
MOVE A0,*A13(SK_DIR) ;DIR WE WANT TO BE FACING!
;
;NEEDED FOR WHEN BOTH PLAYERS ARE DEAD
;
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
;
INTO12:
;A0=DIR FROM 1-12
SLL 5,A0
ADDI JTBL12,A0
MOVE *A0,A0,L
JUMP A0
JTBL12 .LONG LK,IN1,LK,LK,IN3,LK,LK,IN5,LK,LK,IN7,LK,LK
; 1
; 12 2
; 11 3
; 10 4
; 9 5
; 8 6
; 7
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
SETUP_HULK:
;A10=DIRECTION
;8 1 2
;7 3
;6 5 4
MOVE A10,*A13(SK_DIR)
CLR A0
MOVE A0,*A13(BULPRC),L ;BULLET FIRING PROCESS
CALLR GETPSK
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
MOVE @WAVE,A0
CMPI 29,A0
JRZ GOAGN
CMPI 22,A0
JRZ GB
CMPI 21,A0
JRZ GB
CMPI 26,A0
JRZ GB2
CMPI 19,A0
JRZ AWARP
CMPI 16,A0
JRZ TRY_RCK
CMPI 13,A0
JRZ TAUNT
CMPI 14,A0
JRZ SCRLAGN
CMPI 20,A0
JRZ BRING60
CMPI 3,A0
JRNZ NXC
CREATE FUTUREPID,ENDWV
RETS
AWARP
;CREATE A INSTANT WARP DISC
;START SCROLL INTO AIRPORT
MMTM SP,A8,A9,A10
CREATE WARPPID,INST_WARP
MOVI 08000H,A0
MOVE A0,@HZSPD,L
CLR A0
MOVE A0,@CRSRAM,L
MOVI PATHAIR,A10 ;INDICATES NEW SCROLL WITH SCRL TABLE
MOVE @WORLDTLX,A8,L
SRL 16,A8
ADDI 250,A8 ;A8=0 MEANS NOT CHECKING FOR X TARGET
CLR A9
CREATE TARGPID,TARGET ;A9=Y TARGET LINE TO TRIGGER SCROLL
MOVK 1,A9 ;A9=0 FOR UP, 1 FOR RGT
CREATE ARWPID,ONARRW ;TURN ON UP ARROW
CREATE FUTUREPID,AOF ;ARROW OFF AFTER A TIME
CALLA CLNPAL
MMFM SP,A8,A9,A10
RETS
PATHAIR
.WORD 3,3D0H,15,1,2,700H,16,1,1,0F8H,3,320H
.WORD 17,1,1,504H,19,1,0
GOAGN
;START SCROLL INTO END OF AIRPORT
MMTM SP,A8,A9,A10
CLR A0
MOVE A0,@CRSRAM,L
MOVI PATHEND,A10 ;INDICATES NEW SCROLL WITH SCRL TABLE
MOVE @WORLDTLX,A8,L
SRL 16,A8
ADDI 250,A8 ;A8=0 MEANS NOT CHECKING FOR X TARGET
CLR A9
CREATE TARGPID,TARGET ;A9=Y TARGET LINE TO TRIGGER SCROLL
MOVK 1,A9 ;A9=0 FOR UP, 1 FOR RGT
CREATE ARWPID,ONARRW ;TURN ON UP ARROW
CREATE FUTUREPID,AOF ;ARROW OFF AFTER A TIME
CALLA CLNPAL
MMFM SP,A8,A9,A10
RETS
PATHEND .WORD 3,362H,1,290,0
SHSTG
;SEND GROUP OF HOSTAGES DOWN AT PLAYER FROM ELEVATOR IN LOCKDOWN
MOVK 5,A8
CREATE 0,LHLPS
XSEND1
SLEEPK >1f
MOVE @WORLDTLY,A0,L
SUBI [34H,0],A0
MOVE @WORLDTLX,A9,L
SRL 16,A9
ADDI 162,A9
MOVY A0,A9
CALLR SENDH_GROUP
DSJ A8,XSEND1
DIE
GB2
CREATE0 SLOWBK
RETS
SLOWBK SLEEP 18*60
;GO BACK FROM WARP LOCKDOWN #2
CREATE WARPPID,GOBACK
;SEND OUT CHASER!
MOVK 1,A0
MOVE A0,@ICONS_DN
DIE
GB
;GO BACK FROM WARP LOCKDOWN #2
CREATE WARPPID,GOBACK
;SEND OUT CHASER!
MOVK 1,A0
MOVE A0,@ICONS_DN
RETS
TRY_RCK
; RETS
PUSH A10
MOVK 1,A10 ;FIRST RACKUP
CREATE 0,WAITTNT
PULL A10
RETS
TAUNT
PUSH A10
CLR A10 ;0=FIRST TAUNT
CREATE 0,WAITTNT
PULL A10
RETS
SCRLAGN
;START SCROLLING UP INTO DESERT AGAIN
MMTM SP,A8,A9,A10
CLR A0
MOVE A0,@CRSRAM,L
MOVI PATHC,A10 ;INDICATES NEW SCROLL WITH SCRL TABLE
MOVE @WORLDTLY,A9,L
SRL 16,A9
ADDI 220,A9 ;A9=Y TARGET LINE TO TRIGGER SCROLL
CLR A8 ;A8=0 MEANS NOT CHECKING FOR X TARGET
CREATE TARGPID,TARGET
;TURN ON COLOR CYCLES FOR THIS TOP PART OF DESERT
CALLA CLNPAL
CALLA SETC2 ;START LAND MINE COLOR CYCLE
CALLA STRT_G ;CYCLE GOOB POOL
CALLA STRT_D ;CYCLE SAT DISH
CREATE 0,ICON_STOP
MOVI 012BH,A0
MOVE A0,@JUMPXY2 ;X JUMP COOR FOR TOP OF DESERT HILLS
MOVI 021AH,A0 ;Y JUMP FOR TOP OF DESERT
MOVE A0,@JUMPXY
MMFM SP,A8,A9,A10
MOVK 15,A0
CALLA DOLORD
CREATE 0,JEPCYC
; .REF BEACONS
; CREATE 0,BEACONS ;SHOW AREA AROUND DISHES ETC.
MOVI TUNE5,A0
CALLA ONESND
RETS
TUNE5 .WORD >F3F0,2,>8008,0 ;AIRPORT TUNE
ICON_STOP
MOVK 1,A0
MOVE A0,@ICONS_DN
SLEEP 15*60
CREATE ICONPID,SEND_ICON
DIE
PATHC ;DIR,CNT
.WORD 1,190H,2,320H,10,1,1,1D8H,7,31FH,9,0B8H,1,10H,11,1,2,2E0H,1,1C0H
.WORD 12,1,7,2D8H,1,1D0H,2,150H,3,1A0H,9,0C8H,7,188H,13,1,1,348H,8,16BH
.WORD 1,1FAH,0
BRING60
;WARP LOCKDOWN 1
;BRING OUT A BTR60
CREATE FUTUREPID,BTR60A
RETS
NXC CMPI 4,A0
JRNZ NXW
;WHEN WAVE IS FINISHED, CREATE A PROC TO BLINK ELEVATOR MESSAGE!
CREATE DROPPID,TAKEEL
RETS
NXW CMPI 5,A0
JRNZ BZ
CREATE FUTUREPID,CKFORY
BZ RETS
CKFORY SLEEP 60
MOVE @WORLDTLY,A0,L
CMPI [679H,0],A0
JRGT CKFORY
;MIDDLE OF SECRET PATH! START NEW WAVE
MOVI 0140H,A0 ;FOR JUMPING DOWN HORIZONTALLY
MOVE A0,@JUMPXY2
MOVK 6,A0
CALLA DOLORD
MOVI ERECT6,A0
MOVE A0,@ENEMY_RECT,L ;FOR SPAWNING
DIE
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 *A13(HULKTYP),A0
SLL 5,A0
ADDI HLISTS,A0
MOVE *A0,A0,L
JUMP A0
HLISTS .LONG NORM,NORM1,NORM2
;FLAME THROWER CARRYING AHMED GRUNT
NORM2
MOVE *A13(LEVEL),A0
CMPI 2,A0 ;3
JRLT SLOB
CMPI 5,A0 ;6
JRLT MEDB
ADDI WALK_LISTFB,A4
JRUC SPO
MEDB ADDI WALK_LISTMB,A4
JRUC SPO
SLOB ADDI WALK_LISTB,A4 ;CALCULATE OFFSET IN TABLE
JRUC SPO
;AXE CARRYING DEMON GRUNT
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
;REGULAR SOLDIER GRUNT
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
HSTND .LONG SPINFRMS2,SPINFRMS,SPINFRMSA
**************************************************************************
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
KILL_H1
;A8=HULK IMAGE TO SMART BOMB ALSO KILL AHMED
;A9=P1DATA OR P2DATA FOR SCORE UPDATE
;SMART BOMB ENTRY
;ENTER HERE WITH SMART BOMB
MOVE *A8(OID),A0,W
ZEXT A0
CMPI CLSENMY|TYPAHMD,A0
JRNZ AHLK
MOVE @AHMD_CNT,A0
DEC A0
MOVE A0,@AHMD_CNT
JRUC ALO
AHLK
MOVE *A8(OPLINK),A0,L
CLR A1
MOVE A1,*A0(PROCID) ;SEPT 20
MOVE @HULK_CNT,A0
DEC A0
MOVE A0,@HULK_CNT
JRNN ALO
; LOCKUP
; EINT
CLR A0
MOVE A0,@HULK_CNT
ALO CREATE 0,HSMRT ;BULLETS DIR WILL BE IN A10
;HULK_EXP WHEN IT WAKES UP
MOVI CLSDEAD,A0
MOVE A0,*A8(OID)
MOVE *A8(OPLINK),A0,L
MOVE *A0(BULPRC),A0,L
JRZ KJ1
CALLA PEXIST
JRZ KJ1
CALLA KILL ;KILLS BULLET PROCESS
KJ1 MOVE *A8(OPLINK),A0,L
CALLA KILL ;KILL GRUNT PROC
CLR A0
MOVE A0,*A8(OXVEL),L
MOVE A0,*A8(OYVEL),L
RETS
HSMRT
MOVE A9,A2
;A2=P1DATA OR P2DATA
MOVI HLKPT,A1 ;AMOUNT OF SCORE
CALLA SCRADD2 ;DO IT!
MOVE *A8(OYPOS),A2
ADDI 35,A2 ;A2=Y OFFSET ;30
MOVE A2,*A8(OYPOS)
MOVI 300,A0 ;200
MOVE A0,*A8(OZPOS)
MOVE @EXPCNT,A0 ;EXPS CAUSED BY SMART BOMB
CMPI 25,A0
JRNC HSO
INC A0
MOVE A0,@EXPCNT
MOVI XBOOM2,A9 ;BOOM3 CHANGES PALETTE TO EXPLOSION!
JAUC FRANIM_DIE
HSO MOVE A8,A0 ;TO MANY EXPS CAUSE SCRN GLITCH
CALLA DELOBJ
DIE
BAT_PLYR:
;STOP HULK FROM MOVING
;DECIDE WHICH OF FOUR SWING ANGLES TO USE
;TELL MAIN LOGIC THIS HULK IS SWINGING
MMTM SP,A1,A7
MOVE *A0(OPLINK),A0,L
MOVE *A0(PNUM),A9
MOVE *A8(OPLINK),A0,L
MOVE *A0(IBAT),A7
JRNZ FROMST
MOVI DOBAT,A7
MOVI HULKPID,A1
MOVE A1,*A0(IBAT)
CALLA XFERPROC
BPO MMFM SP,A1,A7
RETS
FROMST
;THIS GRUNT JUST STANDING AROUND!
MOVK 1,A1
MOVE A1,*A0(PTIME)
JRUC BPO
KILL_HULKZ:
;A8=HULK IMG PNTR, A0=KILLER IMG PNTR
MMTM SP,A1,A2
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
MOVI HULK_EXPZ,A7
JRUC ABC
KILL_HULK:
;A8=HULK IMG PNTR, A0=KILLER IMG PNTR
MMTM SP,A1,A2
; MOVE A0,@KILLER,L
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
MOVI HULK_EXP,A7
ABC
MOVI HULKPID,A1
CALLA XFERPROC
MOVE *A0(BULPRC),A0,L
JRZ KJ2
MOVE *A0(PROCID),A1
.IF DEBUG
CMPI FLMPID,A1
JRZ PAS
LOCKUP
EINT
PAS
.ENDIF
CALLA KILL ;KILLS BULLET PROCESS
KJ2
MOVI P1DATA,A2 ;PLAYER 1 SCORE SELECT
MOVE *A10(MYPLYR),A0 ;GET PLAYER #
CMPI 1,A0
JREQ CGA
CMPI 2,A0
JRNZ BMPDI0
MOVI P2DATA,A2
CGA
MOVI HLKPT,A1 ;AMOUNT OF SCORE
CALLA SCRADD2 ;DO IT!
BMPDI0
MOVK 1,A0
MOVE A0,@OUT_FLG
MOVI 199,A0 ;259
MOVE A0,*A8(OZPOS)
MOVE *A8(OFLAGS),A1
ORI M_NOCOLL,A1
MOVE A1,*A8(OFLAGS)
MOVI CLSDEAD,A0
MOVE A0,*A8(OID)
MOVI ALTEXP1,A0
MOVE @PCNT,A1
BTST 0,A1
JRZ DSA
MOVI EXP1L,A0
DSA CALLA ONESND
MMFM SP,A1,A2
RETS
HULK_EXPZ:
;A10=PROCESS OF BULLET/BLADE THAT HIT THIS HULK
;A11=HULKS DIR
;A9=KILLERS OID
MOVI P1DATA,A2 ;PLAYER 1 SCORE SELECT
MOVE *A10(PNUM),A0 ;GET PLAYER #
MOVI CLSPLYR|TYPPLBL|SUBNOSTP,A9
HULK_EXP:
;A10=PROCESS OF BULLET/BLADE THAT HIT THIS HULK
;A11=HULKS DIR
;A9=KILLERS OID
BMPDI
MOVE *A10(BLTDIR),A10 ;=BLTDIR!!! CAREFUL!!
CLR A0
MOVE A0,*A13(PROCID) ;SEPT 20
MOVE @HULK_CNT,A3
DEC A3
MOVE A3,@HULK_CNT
JRNN NOBUG
; LOCKUP
; EINT
CLR A0
MOVE A0,@HULK_CNT
NOBUG MOVE *A8(OPLINK),A0,L
MOVE *A0(HULKTYP),A0
CMPI 2,A0
JRZ AHMDDIE
;NOT AN AHMED GRUNT
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,A1
ADD A10,A1
MOVE *A1,A6,L
MOVE A6,*A8(OXVEL),L
MOVI RNGYL,A1
ADD A10,A1
MOVE *A1,A10,L
MOVE A10,*A8(OYVEL),L
CMPI CLSPLYR|TYPPLBL|SUBSPRY,A9
JRNE R1
;PIECES OR BLOODY DEATH DECISION HERE!
GR1 MOVE @PCTOT,A2
CMPI 010H,A2 ;19
JRLO ADDPCS
R1: DEC A11
ANDI 07H,A11
SLL 5,A11 ;A11=HULKS FACE DIR
SLL 5,A0 ;A0=HULKTYP
ADDI DLTS,A0
MOVE *A0,A0,L
ADD A0,A11
MOVE *A11,A9,L
JAUC FRANIM_DIE
DLTS .LONG DDLIST,DLIST,DLISTA
DCLTS .LONG DBLSTS,BLSTS,ALSTS
ADDPCS
MOVE *A13(HULKTYP),A1
SLL 5,A1
ADDI DCLTS,A1
MOVE *A1,A11,L
MOVE A6,A9
;A10=Y VEL
SLL 2,A9
SLL 2,A10
CREATE FUTUREPID,CHUNK_OBJ
MOVE *A8(OPAL),A1,W
MOVE A1,*A0(PDATA),W ;TELLS CHUNKS TO USE THIS PAL
SLEEPK 1
MOVE A8,A0
CALLA DELOBJ
DIE
BIGEXP:
CLR A0
MOVE A0,*A8(OXVEL),L
MOVE A0,*A8(OYVEL),L
CALLA GETANIXY
ADDI 01F0000H,A2 ;A2=Y OFFSET
SUBI 0C0000H,A3 ;A2=Y OFFSET
MOVI BOOM2,A9
MOVE A2,*A8(OYVAL),L
MOVE A3,*A8(OXVAL),L
FRANIM_DIE
MOVK 1,A1
JSRP FRANIM
MOVE A8,A0
CALLA DELOBJ
DIE
KILL_AHMDZ:
;A8=AHMD IMG PNTR, A0=KILLER IMG PNTR
MMTM SP,A1,A2,A3,A4,A7,A9,A10
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
JRUC AABC
KILL_AHMD:
;A8=HULK IMG PNTR, A0=KILLER IMG PNTR
MMTM SP,A1,A2,A3,A4,A7,A9,A10
MOVI 03F3FH,A9 ;COLOR TO FLASH
MOVI HITAHMD,A3
CALLA DO_PUNISH
JALT PUSHME ;PUSHME IN FIEND.ASM
MOVE *A0(OPLINK),A10,L
;WILL BE BOGUS IF SOMETHING OTHER THAN A BULLET STRUCK HULK!
MOVE *A8(OPLINK),A0,L
;CHECK FOR TOTAL HITS HERE
MOVE *A0(DIR),A11 ;HULKS DIR
;KILL AHMED
;YEAH, KILL AHMD
;YES I WILL DIE
AABC MOVI AHMD_EXP,A7
MOVI AHMDPID,A1
CALLA XFERPROC
CALLR KIL_FLM
MOVK 1,A0
MOVE A0,@OUT_FLG
MOVI 199,A0 ;259
MOVE A0,*A8(OZPOS)
MOVE *A8(OFLAGS),A1
ORI M_NOCOLL,A1
MOVE A1,*A8(OFLAGS)
MOVI CLSDEAD,A0
MOVE A0,*A8(OID)
MOVI GUYDI,A0
CALLA ONESND
MMFM SP,A1,A2,A3,A4,A7,A9,A10
RETS
AHMD_EXP:
;A10=PROCESS OF BULLET/BLADE THAT HIT THIS AHMD
;A11=AHMD DIR
;USED TO BE A9=KILLERS OID
MOVI P1DATA,A2 ;PLAYER 1 SCORE SELECT
MOVE *A10(MYPLYR),A0 ;GET PLAYER #
DEC A0
JREQ ACGA
CMPI 1,A0
JRNZ BMPDA
MOVI P2DATA,A2
ACGA
MOVI AHMDPT,A1 ;AMOUNT OF SCORE
CALLA SCRADD2 ;DO IT!
BMPDA
MOVE *A10(BLTDIR),A10 ;=BLTDIR!!! CAREFUL!!
MOVE @AHMD_CNT,A3 ;DELETE A BNCR FROM CNT
DEC A3
MOVE A3,@AHMD_CNT
;8 1 2
;7 3
;6 5 4
;A10 SHOULD BE 1-8!
AHMDDIE ;GRUNT AHMED COMES IN HERE
DEC A10
ANDI 07,A10 ;IN CASE A BLADE STRUCK HULK
SLL 5,A10
MOVI RNGXL,A0
ADD A10,A0
MOVE *A0,A6,L
MOVE A6,*A8(OXVEL),L
MOVI RNGYL,A0
ADD A10,A0
MOVE *A0,A10,L
MOVE A10,*A8(OYVEL),L
DEC A11
ANDI 07H,A11
SLL 5,A11 ;A11=HULKS FACE DIR
; MOVE *A8(OPLINK),A0,L
ADDI DLISTA,A11
MOVE *A11,A9,L
JAUC FRANIM_DIE
;8 1 2
;7 3
;6 5 4
RNGXL:
.LONG 0,05C00H*1,05C00H*1,05C00H*1,0,-5C00H*1,-5C00H*1,-5C00H*1
RNGYL:
.LONG -05000H*1,-05000H*1,0,05000H*1,05000H*1,05000H*1,0,-05000H*1
;RNGXLA:
; .LONG 0,05C00H*3,05C00H*3,05C00H*3,0,-5C00H*3,-5C00H*3,-5C00H*3
;RNGYLA:
; .LONG -05000H*3,-05000H*3,0,05000H*3,05000H*3,05000H*3,0,-05000H*3
DLIST .LONG VDIE,HDIER,HDIER,HDIER,VDIE,HDIE,HDIE,HDIE
DDLIST .LONG DVDIE,DHDIER,DHDIER,DHDIER,DVDIE,DHDIE,DHDIE,DHDIE
;AHMED DIE LIST
DLISTA .LONG AHDIE,AHDIER,AVDIE2,AVDIE2,AVDIE,AVDIE,AVDIE,AHDIE
;FOR AHMED GRUNT
AHDIE:
.LONG ADETH101
.WORD FLIPBITS|5,0
.LONG ADETH102
.WORD 5
.LONG ADETH103
.WORD 5
.LONG ADETH104
.WORD 5
.LONG ADETH84
.WORD 3
.LONG ADETH85
.WORD 3
.LONG ADETH86
.WORD 3
.LONG ADETH86
.WORD 3
.LONG 0
AHDIER:
.LONG ADETH101
.WORD FLIPBITS|5,(M_FLIPH)
.LONG ADETH102
.WORD 5
.LONG ADETH103
.WORD 5
.LONG ADETH104
.WORD 5
.LONG ADETH84
.WORD 3
.LONG ADETH85
.WORD 3
.LONG ADETH86
.WORD 3
.LONG ADETH86
.WORD 3
.LONG 0
AVDIE:
.LONG ADETH81
.WORD FLIPBITS|5,0
.LONG AHDETH82
.WORD 5
.LONG ADETH82
.WORD 5
.LONG ADETH83
.WORD 5
.LONG ADETH84
.WORD 3
.LONG ADETH85
.WORD 3
.LONG ADETH86
.WORD 3
.LONG ADETH87
.WORD 3
.LONG 0
AVDIE2:
.LONG ADETH81
.WORD FLIPBITS|5,(M_FLIPH)
.LONG AHDETH82
.WORD 5
.LONG ADETH82
.WORD 5
.LONG ADETH83
.WORD 5
.LONG ADETH84
.WORD 3
.LONG ADETH85
.WORD 3
.LONG ADETH86
.WORD 3
.LONG ADETH87
.WORD 3
.LONG 0
;FOR DEMON GRUNT
HDIE:
.LONG HIT1
.WORD FLIPBITS|4,0
.LONG HIT2
.WORD 4
.LONG HIT3
.WORD 3
.LONG HIT4
.WORD 3
.LONG HIT5
.WORD 3
.LONG HIT6
.WORD 3
.LONG HIT7
.WORD 3
.LONG HIT8
.WORD 3
.LONG 0
HDIER:
.LONG HIT1
.WORD FLIPBITS|4,(M_FLIPH)
.LONG HIT2
.WORD 4
.LONG HIT3
.WORD 3
.LONG HIT4
.WORD 3
.LONG HIT5
.WORD 3
.LONG HIT6
.WORD 3
.LONG HIT7
.WORD 3
.LONG HIT8
.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 HIT6
.WORD 3
.LONG HIT7
.WORD 3
.LONG HIT8
.WORD 3
.LONG 0
;FOR SOLDIER GRUNT
DHDIE:
.LONG DHIT1
.WORD FLIPBITS|4,0
.LONG DHIT2
.WORD 4
.LONG DHIT3
.WORD 3
.LONG DHIT4
.WORD 3
.LONG DHIT5
.WORD 3
.LONG DHIT6
.WORD 3
.LONG DHIT7
.WORD 3
.LONG DHIT8
.WORD 3
.LONG 0
DHDIER:
.LONG DHIT1
.WORD FLIPBITS|4,(M_FLIPH)
.LONG DHIT2
.WORD 4
.LONG DHIT3
.WORD 3
.LONG DHIT4
.WORD 3
.LONG DHIT5
.WORD 3
.LONG DHIT6
.WORD 3
.LONG DHIT7
.WORD 3
.LONG DHIT8
.WORD 3
.LONG 0
DVDIE:
.LONG DVHIT1
.WORD FLIPBITS|5,0
.LONG DVHIT2
.WORD 4
.LONG DVHIT3
.WORD 3
.LONG DVHIT4
.WORD 3
.LONG DVHIT5
.WORD 3
.LONG DHIT6
.WORD 3
.LONG DHIT7
.WORD 3
.LONG DHIT8
.WORD 3
.LONG 0
;
;8 1 2
;7 3
;6 5 4
;
;FOR FLAME THROWER CARRYING AHMED GRUNT
WALK_LISTB:
.LONG T3_PWK_UP,T3_PWK_UPRGT,T3_PWK_RGT,T3_PWK_DNRGT,T3_PWK_DN
.LONG T3_PWK_DNLFT,T3_PWK_LFT,T3_PWK_UPLFT
WALK_LISTMB:
.LONG T3M_PWK_UP,T3M_PWK_UPRGT,T3M_PWK_RGT,T3M_PWK_DNRGT,T3M_PWK_DN
.LONG T3M_PWK_DNLFT,T3M_PWK_LFT,T3M_PWK_UPLFT
WALK_LISTFB:
.LONG T3F_PWK_UP,T3F_PWK_UPRGT,T3F_PWK_RGT,T3F_PWK_DNRGT,T3F_PWK_DN
.LONG T3F_PWK_DNLFT,T3F_PWK_LFT,T3F_PWK_UPLFT
;FOR AXE CARRYING DEMON GRUNT
WALK_LISTA:
.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_LISTMA:
.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_LISTFA:
.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
;FOR DESERT SOLDIER
WALK_LIST:
.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_LISTM:
.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_LISTF:
.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: ;AXE DEMON GRUNT
.LONG gb12w2a,gb10w3a,gb9w4a,gb8w3a,gb6w5a,gb8w3a,gb9w4a,gb10w3a
SPINFRMS2: ;REGULAR SOLDIER GRUNT
.LONG Dgb12w2a,Dgb10w3a,Dgb9w4a,Dgb8w3a,Dgb6w5a,Dgb8w3a,Dgb9w4a,Dgb10w3a
SPINFRMSA: ;FLAME THROWING AHMED GRUNT
.LONG AHMED12b,AHMED10e,AHMED9a,AHMED8f,AHMED6a,AHMED8f,AHMED9a,AHMED10e
SPINFLGS:
.WORD DMAWNZ,DMAWNZ+M_FLIPH,DMAWNZ+M_FLIPH,DMAWNZ+M_FLIPH,DMAWNZ
.WORD DMAWNZ,DMAWNZ,DMAWNZ
;
;GRUNT ANIMATION TABLES
;
;FLAME THROWER CARRYING AHMED GRUNT
T3_PWK_UP:
.LONG AHMED12a
.WORD FLIPBITS|07,0
.LONG AHMED12b
.WORD 07
.LONG AHMED12c
.WORD 07
.LONG AHMED12d
.WORD 07
.LONG AHMED12e
.WORD 07
.LONG AHMED12f
.WORD 07
.LONG 0
T3_PWK_DN:
.LONG AHMED6a
.WORD FLIPBITS|06,0
.LONG AHMED6b
.WORD 06
.LONG AHMED6c
.WORD 06
.LONG AHMED6d
.WORD 06
.LONG AHMED6e
.WORD 06
.LONG AHMED6f
.WORD 06
.LONG 0
T3_PWK_RGT:
.LONG AHMED9a
.WORD FLIPBITS|07,(M_FLIPH)
.LONG AHMED9b
.WORD 07
.LONG AHMED9c
.WORD 07
.LONG AHMED9d
.WORD 07
.LONG AHMED9e
.WORD 07
.LONG AHMED9f
.WORD 07
.LONG 0
T3_PWK_LFT:
.LONG AHMED9a
.WORD FLIPBITS|07,0
.LONG AHMED9b
.WORD 07
.LONG AHMED9c
.WORD 07
.LONG AHMED9d
.WORD 07
.LONG AHMED9e
.WORD 07
.LONG AHMED9f
.WORD 07
.LONG 0
T3_PWK_UPRGT:
.LONG AHMED10a
.WORD FLIPBITS|07,(M_FLIPH)
.LONG AHMED10b
.WORD 07
.LONG AHMED10c
.WORD 07
.LONG AHMED10d
.WORD 07
.LONG AHMED10e
.WORD 07
.LONG AHMED10f
.WORD 07
.LONG 0
T3_PWK_DNLFT:
.LONG AHMED8a
.WORD FLIPBITS|07,0
.LONG AHMED8b
.WORD 07
.LONG AHMED8c
.WORD 07
.LONG AHMED8d
.WORD 07
.LONG AHMED8e
.WORD 07
.LONG AHMED8f
.WORD 07
.LONG 0
T3_PWK_UPLFT:
.LONG AHMED10a
.WORD FLIPBITS|07,0
.LONG AHMED10b
.WORD 07
.LONG AHMED10c
.WORD 07
.LONG AHMED10d
.WORD 07
.LONG AHMED10e
.WORD 07
.LONG AHMED10f
.WORD 07
.LONG 0
T3_PWK_DNRGT:
.LONG AHMED8a
.WORD FLIPBITS|07,(M_FLIPH)
.LONG AHMED8b
.WORD 07
.LONG AHMED8c
.WORD 07
.LONG AHMED8d
.WORD 07
.LONG AHMED8e
.WORD 07
.LONG AHMED8f
.WORD 07
.LONG 0
;MEDIUM (4)
T3M_PWK_UP:
.LONG AHMED12a
.WORD FLIPBITS|04,0
.LONG AHMED12b
.WORD 04
.LONG AHMED12c
.WORD 04
.LONG AHMED12d
.WORD 04
.LONG AHMED12e
.WORD 04
.LONG AHMED12f
.WORD 04
.LONG 0
T3M_PWK_DN:
.LONG AHMED6a
.WORD FLIPBITS|06,0
.LONG AHMED6b
.WORD 06
.LONG AHMED6c
.WORD 06
.LONG AHMED6d
.WORD 06
.LONG AHMED6e
.WORD 06
.LONG AHMED6f
.WORD 06
.LONG 0
T3M_PWK_RGT:
.LONG AHMED9a
.WORD FLIPBITS|04,(M_FLIPH)
.LONG AHMED9b
.WORD 04
.LONG AHMED9c
.WORD 04
.LONG AHMED9d
.WORD 04
.LONG AHMED9e
.WORD 04
.LONG AHMED9f
.WORD 04
.LONG 0
T3M_PWK_LFT:
.LONG AHMED9a
.WORD FLIPBITS|04,0
.LONG AHMED9b
.WORD 04
.LONG AHMED9c
.WORD 04
.LONG AHMED9d
.WORD 04
.LONG AHMED9e
.WORD 04
.LONG AHMED9f
.WORD 04
.LONG 0
T3M_PWK_UPRGT:
.LONG AHMED10a
.WORD FLIPBITS|04,(M_FLIPH)
.LONG AHMED10b
.WORD 04
.LONG AHMED10c
.WORD 04
.LONG AHMED10d
.WORD 04
.LONG AHMED10e
.WORD 04
.LONG AHMED10f
.WORD 04
.LONG 0
T3M_PWK_DNLFT:
.LONG AHMED8a
.WORD FLIPBITS|04,0
.LONG AHMED8b
.WORD 04
.LONG AHMED8c
.WORD 04
.LONG AHMED8d
.WORD 04
.LONG AHMED8e
.WORD 04
.LONG AHMED8f
.WORD 04
.LONG 0
T3M_PWK_UPLFT:
.LONG AHMED10a
.WORD FLIPBITS|04,0
.LONG AHMED10b
.WORD 04
.LONG AHMED10c
.WORD 04
.LONG AHMED10d
.WORD 04
.LONG AHMED10e
.WORD 04
.LONG AHMED10f
.WORD 04
.LONG 0
T3M_PWK_DNRGT:
.LONG AHMED8a
.WORD FLIPBITS|04,(M_FLIPH)
.LONG AHMED8b
.WORD 04
.LONG AHMED8c
.WORD 04
.LONG AHMED8d
.WORD 04
.LONG AHMED8e
.WORD 04
.LONG AHMED8f
.WORD 04
.LONG 0
; FAST (3)
T3F_PWK_UP:
.LONG AHMED12a
.WORD FLIPBITS|03,0
.LONG AHMED12b
.WORD 03
.LONG AHMED12c
.WORD 03
.LONG AHMED12d
.WORD 03
.LONG AHMED12e
.WORD 03
.LONG AHMED12f
.WORD 03
.LONG 0
T3F_PWK_DN:
.LONG AHMED6a
.WORD FLIPBITS|06,0
.LONG AHMED6b
.WORD 06
.LONG AHMED6c
.WORD 06
.LONG AHMED6d
.WORD 06
.LONG AHMED6e
.WORD 06
.LONG AHMED6f
.WORD 06
.LONG 0
T3F_PWK_RGT:
.LONG AHMED9a
.WORD FLIPBITS|03,(M_FLIPH)
.LONG AHMED9b
.WORD 03
.LONG AHMED9c
.WORD 03
.LONG AHMED9d
.WORD 03
.LONG AHMED9e
.WORD 03
.LONG AHMED9f
.WORD 03
.LONG 0
T3F_PWK_LFT:
.LONG AHMED9a
.WORD FLIPBITS|03,0
.LONG AHMED9b
.WORD 03
.LONG AHMED9c
.WORD 03
.LONG AHMED9d
.WORD 03
.LONG AHMED9e
.WORD 03
.LONG AHMED9f
.WORD 03
.LONG 0
T3F_PWK_UPRGT:
.LONG AHMED10a
.WORD FLIPBITS|03,(M_FLIPH)
.LONG AHMED10b
.WORD 03
.LONG AHMED10c
.WORD 03
.LONG AHMED10d
.WORD 03
.LONG AHMED10e
.WORD 03
.LONG AHMED10f
.WORD 03
.LONG 0
T3F_PWK_DNLFT:
.LONG AHMED8a
.WORD FLIPBITS|03,0
.LONG AHMED8b
.WORD 03
.LONG AHMED8c
.WORD 03
.LONG AHMED8d
.WORD 03
.LONG AHMED8e
.WORD 03
.LONG AHMED8f
.WORD 03
.LONG 0
T3F_PWK_UPLFT:
.LONG AHMED10a
.WORD FLIPBITS|03,0
.LONG AHMED10b
.WORD 03
.LONG AHMED10c
.WORD 03
.LONG AHMED10d
.WORD 03
.LONG AHMED10e
.WORD 03
.LONG AHMED10f
.WORD 03
.LONG 0
T3F_PWK_DNRGT:
.LONG AHMED8a
.WORD FLIPBITS|03,(M_FLIPH)
.LONG AHMED8b
.WORD 03
.LONG AHMED8c
.WORD 03
.LONG AHMED8d
.WORD 03
.LONG AHMED8e
.WORD 03
.LONG AHMED8f
.WORD 03
.LONG 0
;AXE CARRYING DEMON GRUNT
T_PWK_UP:
.LONG gb12w1a
.WORD FLIPBITS|07,0
.LONG gb12w2a
.WORD 07
.LONG gb12w3a
.WORD 07
.LONG gb12w4a
.WORD 07
.LONG gb12w5a
.WORD 07
.LONG gb12w6a
.WORD 07
.LONG 0
T_PWK_DN:
.LONG gb6w1a
.WORD FLIPBITS|06,0
.LONG gb6w2a
.WORD 06
.LONG gb6w3a
.WORD 06
.LONG gb6w4a
.WORD 06
.LONG gb6w5a
.WORD 06
.LONG gb6w6a
.WORD 06
.LONG 0
T_PWK_RGT:
.LONG gb9w1a
.WORD FLIPBITS|07,(M_FLIPH)
.LONG gb9w2a
.WORD 07
.LONG gb9w3a
.WORD 07
.LONG gb9w4a
.WORD 07
.LONG gb9w5a
.WORD 07
.LONG gb9w6a
.WORD 07
.LONG 0
T_PWK_LFT:
.LONG gb9w1a
.WORD FLIPBITS|07,0
.LONG gb9w2a
.WORD 07
.LONG gb9w3a
.WORD 07
.LONG gb9w4a
.WORD 07
.LONG gb9w5a
.WORD 07
.LONG gb9w6a
.WORD 07
.LONG 0
T_PWK_UPRGT:
.LONG gb10w1a
.WORD FLIPBITS|07,(M_FLIPH)
.LONG gb10w2a
.WORD 07
.LONG gb10w3a
.WORD 07
.LONG gb10w4a
.WORD 07
.LONG gb10w5a
.WORD 07
.LONG gb10w6a
.WORD 07
.LONG 0
T_PWK_DNLFT:
.LONG gb8w1a
.WORD FLIPBITS|07,0
.LONG gb8w2a
.WORD 07
.LONG gb8w3a
.WORD 07
.LONG gb8w4a
.WORD 07
.LONG gb8w5a
.WORD 07
.LONG gb8w6a
.WORD 07
.LONG 0
T_PWK_UPLFT:
.LONG gb10w1a
.WORD FLIPBITS|07,0
.LONG gb10w2a
.WORD 07
.LONG gb10w3a
.WORD 07
.LONG gb10w4a
.WORD 07
.LONG gb10w5a
.WORD 07
.LONG gb10w6a
.WORD 07
.LONG 0
T_PWK_DNRGT:
.LONG gb8w1a
.WORD FLIPBITS|07,(M_FLIPH)
.LONG gb8w2a
.WORD 07
.LONG gb8w3a
.WORD 07
.LONG gb8w4a
.WORD 07
.LONG gb8w5a
.WORD 07
.LONG gb8w6a
.WORD 07
.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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 0
;REGULAR SOLDIER GRUNT
T2_PWK_UP:
.LONG Dgb12w1a
.WORD FLIPBITS|07,0
.LONG Dgb12w2a
.WORD 07
.LONG Dgb12w3a
.WORD 07
.LONG Dgb12w4a
.WORD 07
.LONG Dgb12w5a
.WORD 07
.LONG Dgb12w6a
.WORD 07
.LONG 0
T2_PWK_DN:
.LONG Dgb6w1a
.WORD FLIPBITS|06,0
.LONG Dgb6w2a
.WORD 06
.LONG Dgb6w3a
.WORD 06
.LONG Dgb6w4a
.WORD 06
.LONG Dgb6w5a
.WORD 06
.LONG Dgb6w6a
.WORD 06
.LONG 0
T2_PWK_RGT:
.LONG Dgb9w1a
.WORD FLIPBITS|07,(M_FLIPH)
.LONG Dgb9w2a
.WORD 07
.LONG Dgb9w3a
.WORD 07
.LONG Dgb9w4a
.WORD 07
.LONG Dgb9w5a
.WORD 07
.LONG Dgb9w6a
.WORD 07
.LONG 0
T2_PWK_LFT:
.LONG Dgb9w1a
.WORD FLIPBITS|07,0
.LONG Dgb9w2a
.WORD 07
.LONG Dgb9w3a
.WORD 07
.LONG Dgb9w4a
.WORD 07
.LONG Dgb9w5a
.WORD 07
.LONG Dgb9w6a
.WORD 07
.LONG 0
T2_PWK_UPRGT:
.LONG Dgb10w1a
.WORD FLIPBITS|07,(M_FLIPH)
.LONG Dgb10w2a
.WORD 07
.LONG Dgb10w3a
.WORD 07
.LONG Dgb10w4a
.WORD 07
.LONG Dgb10w5a
.WORD 07
.LONG Dgb10w6a
.WORD 07
.LONG 0
T2_PWK_DNLFT:
.LONG Dgb8w1a
.WORD FLIPBITS|07,0
.LONG Dgb8w2a
.WORD 07
.LONG Dgb8w3a
.WORD 07
.LONG Dgb8w4a
.WORD 07
.LONG Dgb8w5a
.WORD 07
.LONG Dgb8w6a
.WORD 07
.LONG 0
T2_PWK_UPLFT:
.LONG Dgb10w1a
.WORD FLIPBITS|07,0
.LONG Dgb10w2a
.WORD 07
.LONG Dgb10w3a
.WORD 07
.LONG Dgb10w4a
.WORD 07
.LONG Dgb10w5a
.WORD 07
.LONG Dgb10w6a
.WORD 07
.LONG 0
T2_PWK_DNRGT:
.LONG Dgb8w1a
.WORD FLIPBITS|07,(M_FLIPH)
.LONG Dgb8w2a
.WORD 07
.LONG Dgb8w3a
.WORD 07
.LONG Dgb8w4a
.WORD 07
.LONG Dgb8w5a
.WORD 07
.LONG Dgb8w6a
.WORD 07
.LONG 0
;MEDIUM
T2M_PWK_UP:
.LONG Dgb12w1a
.WORD FLIPBITS|04,0
.LONG Dgb12w2a
.WORD 04
.LONG Dgb12w3a
.WORD 04
.LONG Dgb12w4a
.WORD 04
.LONG Dgb12w5a
.WORD 04
.LONG Dgb12w6a
.WORD 04
.LONG 0
T2M_PWK_DN:
.LONG Dgb6w1a
.WORD FLIPBITS|04,0
.LONG Dgb6w2a
.WORD 04
.LONG Dgb6w3a
.WORD 04
.LONG Dgb6w4a
.WORD 04
.LONG Dgb6w5a
.WORD 04
.LONG Dgb6w6a
.WORD 04
.LONG 0
T2M_PWK_RGT:
.LONG Dgb9w1a
.WORD FLIPBITS|04,(M_FLIPH)
.LONG Dgb9w2a
.WORD 04
.LONG Dgb9w3a
.WORD 04
.LONG Dgb9w4a
.WORD 04
.LONG Dgb9w5a
.WORD 04
.LONG Dgb9w6a
.WORD 04
.LONG 0
T2M_PWK_LFT:
.LONG Dgb9w1a
.WORD FLIPBITS|04,0
.LONG Dgb9w2a
.WORD 04
.LONG Dgb9w3a
.WORD 04
.LONG Dgb9w4a
.WORD 04
.LONG Dgb9w5a
.WORD 04
.LONG Dgb9w6a
.WORD 04
.LONG 0
T2M_PWK_UPRGT:
.LONG Dgb10w1a
.WORD FLIPBITS|04,(M_FLIPH)
.LONG Dgb10w2a
.WORD 04
.LONG Dgb10w3a
.WORD 04
.LONG Dgb10w4a
.WORD 04
.LONG Dgb10w5a
.WORD 04
.LONG Dgb10w6a
.WORD 04
.LONG 0
T2M_PWK_DNLFT:
.LONG Dgb8w1a
.WORD FLIPBITS|04,0
.LONG Dgb8w2a
.WORD 04
.LONG Dgb8w3a
.WORD 04
.LONG Dgb8w4a
.WORD 04
.LONG Dgb8w5a
.WORD 04
.LONG Dgb8w6a
.WORD 04
.LONG 0
T2M_PWK_UPLFT:
.LONG Dgb10w1a
.WORD FLIPBITS|04,0
.LONG Dgb10w2a
.WORD 04
.LONG Dgb10w3a
.WORD 04
.LONG Dgb10w4a
.WORD 04
.LONG Dgb10w5a
.WORD 04
.LONG Dgb10w6a
.WORD 04
.LONG 0
T2M_PWK_DNRGT:
.LONG Dgb8w1a
.WORD FLIPBITS|04,(M_FLIPH)
.LONG Dgb8w2a
.WORD 04
.LONG Dgb8w3a
.WORD 04
.LONG Dgb8w4a
.WORD 04
.LONG Dgb8w5a
.WORD 04
.LONG Dgb8w6a
.WORD 04
.LONG 0
; FAST
T2F_PWK_UP:
.LONG Dgb12w1a
.WORD FLIPBITS|03,0
.LONG Dgb12w2a
.WORD 03
.LONG Dgb12w3a
.WORD 03
.LONG Dgb12w4a
.WORD 03
.LONG Dgb12w5a
.WORD 03
.LONG Dgb12w6a
.WORD 03
.LONG 0
T2F_PWK_DN:
.LONG Dgb6w1a
.WORD FLIPBITS|03,0
.LONG Dgb6w2a
.WORD 03
.LONG Dgb6w3a
.WORD 03
.LONG Dgb6w4a
.WORD 03
.LONG Dgb6w5a
.WORD 03
.LONG Dgb6w6a
.WORD 03
.LONG 0
T2F_PWK_RGT:
.LONG Dgb9w1a
.WORD FLIPBITS|03,(M_FLIPH)
.LONG Dgb9w2a
.WORD 03
.LONG Dgb9w3a
.WORD 03
.LONG Dgb9w4a
.WORD 03
.LONG Dgb9w5a
.WORD 03
.LONG Dgb9w6a
.WORD 03
.LONG 0
T2F_PWK_LFT:
.LONG Dgb9w1a
.WORD FLIPBITS|03,0
.LONG Dgb9w2a
.WORD 03
.LONG Dgb9w3a
.WORD 03
.LONG Dgb9w4a
.WORD 03
.LONG Dgb9w5a
.WORD 03
.LONG Dgb9w6a
.WORD 03
.LONG 0
T2F_PWK_UPRGT:
.LONG Dgb10w1a
.WORD FLIPBITS|03,(M_FLIPH)
.LONG Dgb10w2a
.WORD 03
.LONG Dgb10w3a
.WORD 03
.LONG Dgb10w4a
.WORD 03
.LONG Dgb10w5a
.WORD 03
.LONG Dgb10w6a
.WORD 03
.LONG 0
T2F_PWK_DNLFT:
.LONG Dgb8w1a
.WORD FLIPBITS|03,0
.LONG Dgb8w2a
.WORD 03
.LONG Dgb8w3a
.WORD 03
.LONG Dgb8w4a
.WORD 03
.LONG Dgb8w5a
.WORD 03
.LONG Dgb8w6a
.WORD 03
.LONG 0
T2F_PWK_UPLFT:
.LONG Dgb10w1a
.WORD FLIPBITS|03,0
.LONG Dgb10w2a
.WORD 03
.LONG Dgb10w3a
.WORD 03
.LONG Dgb10w4a
.WORD 03
.LONG Dgb10w5a
.WORD 03
.LONG Dgb10w6a
.WORD 03
.LONG 0
T2F_PWK_DNRGT:
.LONG Dgb8w1a
.WORD FLIPBITS|03,(M_FLIPH)
.LONG Dgb8w2a
.WORD 03
.LONG Dgb8w3a
.WORD 03
.LONG Dgb8w4a
.WORD 03
.LONG Dgb8w5a
.WORD 03
.LONG Dgb8w6a
.WORD 03
.LONG 0
;FLAME THROWER CARRYING AHMED GRUNT WHEN HE PUNCHES
BAT8OA
.LONG AHMED8HIT1
.WORD FLIPBITS|4,0
.LONG AHMED8HIT2
.WORD 4
.LONG AHMED8HIT3
.WORD 4
.LONG AHMED8HIT2
.WORD 4
.LONG 0
BAT4OA
.LONG AHMED8HIT1
.WORD FLIPBITS|4,(M_FLIPH)
.LONG AHMED8HIT2
.WORD 4
.LONG AHMED8HIT3
.WORD 4
.LONG AHMED8HIT2
.WORD 4
.LONG 0
BAT10OA
.LONG AHMED10HIT1
.WORD FLIPBITS|4,0
.LONG AHMED10HIT2
.WORD 4
.LONG AHMED10HIT3
.WORD 4
.LONG AHMED10HIT2
.WORD 4
.LONG 0
BAT2OA
.LONG AHMED10HIT1
.WORD FLIPBITS|4,(M_FLIPH)
.LONG AHMED10HIT2
.WORD 4
.LONG AHMED10HIT3
.WORD 4
.LONG AHMED10HIT2
.WORD 4
.LONG 0
;AXE SWINGING GRUNT
BAT8O ;.LONG GSTND2
; .WORD FLIPBITS|4,0
.LONG SWING1
.WORD FLIPBITS|4,0
.LONG SWING2
.WORD 4
.LONG SWING3
.WORD 4
.LONG SWING4
.WORD 4
.LONG SWING5
.WORD 4
.LONG SWING6
.WORD 4
.LONG SWING5
.WORD 4
.LONG SWING4
.WORD 4
.LONG SWING3
.WORD 4
.LONG SWING2
.WORD 4
.LONG SWING1
.WORD 4
.LONG 0
BAT4O ; .LONG GSTND2
; .WORD FLIPBITS|4,(M_FLIPH)
.LONG SWING1
.WORD FLIPBITS|4,(M_FLIPH)
.LONG SWING2
.WORD 4
.LONG SWING3
.WORD 4
.LONG SWING4
.WORD 4
.LONG SWING5
.WORD 4
.LONG SWING6
.WORD 4
.LONG SWING5
.WORD 4
.LONG SWING4
.WORD 4
.LONG SWING3
.WORD 4
.LONG SWING2
.WORD 4
.LONG SWING1
.WORD 4
.LONG 0
BAT10O
; .LONG GSTND4
; .WORD FLIPBITS|4,0
.LONG BAT1
.WORD FLIPBITS|4,0
.LONG BAT2
.WORD 4
.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 BAT1
.WORD 4
.LONG 0
BAT2O ; .LONG GSTND4
.LONG BAT1
.WORD FLIPBITS|4,(M_FLIPH)
.LONG BAT2
.WORD 4
.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 BAT1
.WORD 4
.LONG 0
;REGULAR SOLDIER SWING
BAT8OS ;.LONG GSTND2
; .WORD FLIPBITS|4,0
.LONG DSWING1
.WORD FLIPBITS|4,0
.LONG DSWING2
.WORD 4
.LONG DSWING3
.WORD 4
.LONG DSWING4
.WORD 4
.LONG DSWING5
.WORD 4
.LONG DSWING6
.WORD 4
.LONG DSWING5
.WORD 4
.LONG DSWING4
.WORD 4
.LONG DSWING3
.WORD 4
.LONG DSWING2
.WORD 4
.LONG DSWING1
.WORD 4
.LONG 0
BAT4OS ; .LONG GSTND2
; .WORD FLIPBITS|4,(M_FLIPH)
.LONG DSWING1
.WORD FLIPBITS|4,(M_FLIPH)
.LONG DSWING2
.WORD 4
.LONG DSWING3
.WORD 4
.LONG DSWING4
.WORD 4
.LONG DSWING5
.WORD 4
.LONG DSWING6
.WORD 4
.LONG DSWING5
.WORD 4
.LONG DSWING4
.WORD 4
.LONG DSWING3
.WORD 4
.LONG DSWING2
.WORD 4
.LONG DSWING1
.WORD 4
.LONG 0
BAT10OS
; .LONG GSTND4
; .WORD FLIPBITS|4,0
.LONG DBAT1
.WORD FLIPBITS|5,0
.LONG DBAT2
.WORD 5
.LONG DBAT3
.WORD 5
.LONG DBAT4
.WORD 5
.LONG DBAT5
.WORD 5
; .LONG BAT6
; .WORD 4
; .LONG BAT5
; .WORD 4
.LONG DBAT4
.WORD 5
.LONG DBAT3
.WORD 5
.LONG DBAT2
.WORD 5
.LONG DBAT1
.WORD 5
.LONG 0
BAT2OS ; .LONG GSTND4
.LONG DBAT1
.WORD FLIPBITS|5,(M_FLIPH)
.LONG DBAT2
.WORD 5
.LONG DBAT3
.WORD 5
.LONG DBAT4
.WORD 5
.LONG DBAT5
.WORD 5
; .LONG BAT6
; .WORD 4
; .LONG BAT5
; .WORD 4
.LONG DBAT4
.WORD 5
.LONG DBAT3
.WORD 5
.LONG DBAT2
.WORD 5
.LONG DBAT1
.WORD 5
.LONG 0
BOOM2:
.LONG EXPL1
.WORD NEWPALET|3
.LONG EORNGPAL ;EXPP
.LONG EXPL2
.WORD 3
.LONG EXPL3
.WORD 3
.LONG EXPL4
.WORD 3
.LONG EXPL5
.WORD 3
.LONG EXPL6
.WORD 3
.LONG EXPL7
.WORD 3
.LONG EXPL8
.WORD 3
.LONG EXPL9
.WORD 3
.LONG EXPL10
.WORD 3
.LONG EXPL11
.WORD 3
.LONG EXPL12
.WORD 3
.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
;SOLDIER GRUNT SHOOTING
SHOOT8O
.LONG DSWINGa
.WORD FLIPBITS|3,0
.LONG DSWINGb
.WORD 4
.LONG DSWINGa
.WORD 4
.LONG DSWINGb
.WORD 4
.LONG DSWINGa
.WORD 1
.LONG 0
SHOOT4O
.LONG DSWINGa
.WORD FLIPBITS|3,(M_FLIPH)
.LONG DSWINGb
.WORD 4
.LONG DSWINGa
.WORD 4
.LONG DSWINGb
.WORD 4
.LONG DSWINGa
.WORD 1
.LONG 0
SHOOT10O
.LONG DBATa
.WORD FLIPBITS|3,0
.LONG DBATb
.WORD 4
.LONG DBATa
.WORD 4
.LONG DBATb
.WORD 4
.LONG DBATa
.WORD 1
.LONG 0
SHOOT2O
.LONG DBATa
.WORD FLIPBITS|3,(M_FLIPH)
.LONG DBATb
.WORD 4
.LONG DBATa
.WORD 4
.LONG DBATb
.WORD 4
.LONG DBATa
.WORD 1
.LONG 0
HSTGDWN:
.LONG GRL1
.WORD FLIPBITS|05,0
.LONG GRL2
.WORD 05
.LONG GRL3
.WORD 05
.LONG GRL4
.WORD 05
.LONG GRL3
.WORD 05
.LONG GRL2
.WORD 05
.LONG 0
HSTGDWN2:
.LONG NSDRRUN1
.WORD FLIPBITS|05,0
.LONG NSDRRUN2
.WORD 05
.LONG NSDRRUN3
.WORD 05
.LONG NSDRRUN4
.WORD 05
.LONG NSDRRUN3
.WORD 05
.LONG NSDRRUN2
.WORD 05
.LONG 0
HSTGDWNA:
.LONG BABE1
.WORD FLIPBITS|05,0
.LONG BABE2
.WORD 05
.LONG BABE3
.WORD 05
.LONG BABE4
.WORD 05
.LONG 0
HSTGDWNA2:
.LONG PILOT1
.WORD FLIPBITS|05,0
.LONG PILOT2
.WORD 05
.LONG PILOT3
.WORD 05
.LONG PILOT4
.WORD 05
.LONG PILOT3
.WORD 05
.LONG PILOT2
.WORD 05
.LONG 0
;AXE CARRYING GRUNT
JDWN:
.LONG JUMP2
.WORD 0AH
.LONG JUMP3
.WORD 022H
.LONG JUMP2
.WORD 0EH
.LONG JUMP
.WORD 016H
.LONG 0
JDWN2:
.LONG JUMP1A
.WORD 05
.LONG JUMP1B
.WORD 05
.LONG GSTND1
.WORD 05
.LONG 0
JRDWN:
.LONG HJUMP2
.WORD 10
.LONG HJUMP3
.WORD 01FH
.LONG HJUMP2
.WORD 011H
.LONG HJUMP1
.WORD 02AH ;1BH
.LONG 0
JRDWN2:
.LONG HJUMP1A
.WORD 05
.LONG GSTND3
.WORD 05
.LONG 0
JRDWNP:
;FOR PIT JUMPERS
.LONG HJUMP2
.WORD 12H
.LONG HJUMP3
.WORD 0FH
.LONG HJUMP2
.WORD 0FH
.LONG HJUMP1
.WORD 0FH
.LONG 0
DJRDWNP:
;FOR PIT JUMPERS
.LONG DHJUMP2
.WORD 12H
.LONG DHJUMP3
.WORD 0FH
.LONG DHJUMP2
.WORD 0FH
.LONG DHJUMP1
.WORD 0FH
.LONG 0
;REGULAR SOLDIER GRUNT
DJDWN:
.LONG DJUMP2
.WORD 0AH
.LONG DJUMP3
.WORD 022H
.LONG DJUMP2
.WORD 0EH
.LONG DJUMP1
.WORD 016H
.LONG 0
DJDWN2:
.LONG DJUMP1A
.WORD 05
.LONG DJUMP1B
.WORD 05
.LONG DGSTND1
.WORD 05
.LONG 0
DJRDWN:
.LONG DHJUMP2
.WORD 10
.LONG DHJUMP3
.WORD 01FH
.LONG DHJUMP2
.WORD 011H
.LONG DHJUMP1
.WORD 02AH ;1BH
.LONG 0
DJRDWN2:
.LONG DHJUMP1A
.WORD 05
.LONG DGSTND3
.WORD 05
.LONG 0
;AXE CARRYING GRUNT
GR10
.LONG G10GRW1
.WORD FLIPBITS|3,0
.LONG G10GRW2
.WORD 3
.LONG G10GRW3
.WORD 3
.LONG G10GRW4
.WORD 3
.LONG G10GRW5
.WORD 3
.LONG G10GRW6
.WORD 3
.LONG G10GRW7
.WORD 3
.LONG G10GRW8
.WORD 3
.LONG G10GRW9
.WORD 3
.LONG G10GRW10
.WORD 3
.LONG G10GRW11
.WORD 3
.LONG GSTND4
.WORD 12
.LONG 0
GR8
.LONG G8GRW1
.WORD FLIPBITS|3,0
.LONG G8GRW2
.WORD 3
.LONG G8GRW3
.WORD 3
.LONG G8GRW4
.WORD 3
.LONG G8GRW5
.WORD 3
.LONG G8GRW6
.WORD 3
.LONG G8GRW7
.WORD 3
.LONG G8GRW8
.WORD 3
.LONG G8GRW9
.WORD 3
.LONG G8GRW10
.WORD 3
.LONG G8GRW11
.WORD 3
.LONG GSTND2
.WORD 12
.LONG 0
GR5
.LONG G8GRW1
.WORD FLIPBITS|3,M_FLIPH
.LONG G8GRW2
.WORD 3
.LONG G8GRW3
.WORD 3
.LONG G8GRW4
.WORD 3
.LONG G8GRW5
.WORD 3
.LONG G8GRW6
.WORD 3
.LONG G8GRW7
.WORD 3
.LONG G8GRW8
.WORD 3
.LONG G8GRW9
.WORD 3
.LONG G8GRW10
.WORD 3
.LONG G8GRW11
.WORD 3
.LONG GSTND2
.WORD 12
.LONG 0
GR2
.LONG G10GRW1
.WORD FLIPBITS|3,M_FLIPH
.LONG G10GRW2
.WORD 3
.LONG G10GRW3
.WORD 3
.LONG G10GRW4
.WORD 3
.LONG G10GRW5
.WORD 3
.LONG G10GRW6
.WORD 3
.LONG G10GRW7
.WORD 3
.LONG G10GRW8
.WORD 3
.LONG G10GRW9
.WORD 3
.LONG G10GRW10
.WORD 3
.LONG G10GRW11
.WORD 3
.LONG GSTND4
.WORD 12
.LONG 0
;REGULAR SOLDIER GRUNT GROW
DGR10
.LONG Dgb10w3a ;G10GRW1
.WORD FLIPBITS|3,0
.LONG 0
DGR8
.LONG Dgb8w3a ;G8GRW1
.WORD FLIPBITS|3,0
.LONG 0
DGR5
.LONG Dgb8w3a ;G8GRW1
.WORD FLIPBITS|3,M_FLIPH
.LONG 0
DGR2
.LONG Dgb10w3a ;G10GRW1
.WORD FLIPBITS|3,M_FLIPH
.LONG 0
;AHMED GRUNT GROW
DGR10A
.LONG AHMED10a ;G10GRW1
.WORD FLIPBITS|3,0
.LONG 0
DGR8A
.LONG AHMED8a ;G8GRW1
.WORD FLIPBITS|3,0
.LONG 0
DGR5A
.LONG AHMED8a ;G8GRW1
.WORD FLIPBITS|3,M_FLIPH
.LONG 0
DGR2A
.LONG AHMED10a ;G10GRW1
.WORD FLIPBITS|3,M_FLIPH
.LONG 0
;AXE CARRYING GRUNT
ARMUP .LONG GNTARM7
.WORD FLIPBITS|3,0
.LONG GNTARM6
.WORD 4
.LONG GNTARM5
.WORD 4
.LONG GNTARM4
.WORD 4
.LONG GNTARM3
.WORD 4
.LONG GNTARM2
.WORD 4
.LONG GNTARM1
.WORD 4
.LONG GNTARM1
.WORD FLIPBITS|3,(M_FLIPH)
.LONG GNTARM2
.WORD 4
.LONG GNTARM3
.WORD 4
.LONG GNTARM4
.WORD 4
.LONG GNTARM5
.WORD 4
.LONG GNTARM6
.WORD 4
.LONG GNTARM7
.WORD 4
.LONG 0
LEGUP .LONG GRNTLG7
.WORD FLIPBITS|3,0
.LONG GRNTLG6
.WORD 5
.LONG GRNTLG5
.WORD 5
.LONG GRNTLG4
.WORD 5
.LONG GRNTLG3
.WORD 5
.LONG GRNTLG2
.WORD 5
.LONG GRNTLG1
.WORD 5
.LONG GRNTLG1
.WORD FLIPBITS|5,(M_FLIPH)
.LONG GRNTLG2
.WORD 5
.LONG GRNTLG3
.WORD 5
.LONG GRNTLG4
.WORD 4
.LONG GRNTLG5
.WORD 4
.LONG GRNTLG6
.WORD 4
.LONG GRNTLG7
.WORD 4
.LONG 0
FLSHA .LONG FLSHA6
.WORD FLIPBITS|3,0
.LONG FLSHA5
.WORD 4
.LONG FLSHA4
.WORD 4
.LONG FLSHA3
.WORD 4
.LONG FLSHA2
.WORD 4
.LONG FLSHA1
.WORD 4
.LONG FLSHA1
.WORD FLIPBITS|3,(M_FLIPH)
.LONG FLSHA2
.WORD 4
.LONG FLSHA3
.WORD 4
.LONG FLSHA4
.WORD 4
.LONG FLSHA5
.WORD 4
.LONG FLSHA6
.WORD 4
.LONG 0
FLSHB .LONG FLSHB6
.WORD 4
.LONG FLSHB5
.WORD 4
.LONG FLSHB4
.WORD 4
.LONG FLSHB3
.WORD 5
.LONG FLSHB2
.WORD 5
.LONG FLSHB1
.WORD 5
.LONG FLSHB2
.WORD 5
.LONG FLSHB3
.WORD 4
.LONG FLSHB4
.WORD 4
.LONG FLSHB5
.WORD 4
.LONG FLSHB6
.WORD 4
.LONG 0
ARMUPZ .LONG GNTARM7
.WORD FLIPBITS|18,0
.LONG GNTARM6
.WORD 4
.LONG GNTARM5
.WORD 4
.LONG GNTARM4
.WORD 4
.LONG GNTARM3
.WORD 4
.LONG GNTARM2
.WORD 4
.LONG GNTARM1
.WORD 4
.LONG GNTARM1
.WORD FLIPBITS|3,(M_FLIPH)
.LONG GNTARM2
.WORD 4
.LONG GNTARM3
.WORD 4
.LONG GNTARM4
.WORD 4
.LONG GNTARM5
.WORD 4
.LONG GNTARM6
.WORD 4
.LONG GNTARM7
.WORD 4
.LONG 0
LEGUPZ .LONG GRNTLG7
.WORD FLIPBITS|23,0
.LONG GRNTLG6
.WORD 4
.LONG GRNTLG5
.WORD 4
.LONG GRNTLG4
.WORD 4
.LONG GRNTLG3
.WORD 4
.LONG GRNTLG2
.WORD 4
.LONG GRNTLG1
.WORD 4
.LONG GRNTLG1
.WORD FLIPBITS|3,(M_FLIPH)
.LONG GRNTLG2
.WORD 4
.LONG GRNTLG3
.WORD 4
.LONG GRNTLG4
.WORD 4
.LONG GRNTLG5
.WORD 4
.LONG GRNTLG6
.WORD 4
.LONG GRNTLG7
.WORD 4
.LONG 0
FLSHAZ .LONG FLSHA6
.WORD FLIPBITS|10,0
.LONG FLSHA5
.WORD 4
.LONG FLSHA4
.WORD 4
.LONG FLSHA3
.WORD 4
.LONG FLSHA2
.WORD 4
.LONG FLSHA1
.WORD 4
.LONG FLSHA1
.WORD FLIPBITS|3,(M_FLIPH)
.LONG FLSHA2
.WORD 4
.LONG FLSHA3
.WORD 4
.LONG FLSHA4
.WORD 4
.LONG FLSHA5
.WORD 4
.LONG FLSHA6
.WORD 4
.LONG 0
FLSHBZ .LONG FLSHB6
.WORD 16
.LONG FLSHB5
.WORD 4
.LONG FLSHB4
.WORD 4
.LONG FLSHB3
.WORD 4
.LONG FLSHB2
.WORD 4
.LONG FLSHB1
.WORD 5
.LONG FLSHB2
.WORD 4
.LONG FLSHB3
.WORD 4
.LONG FLSHB4
.WORD 4
.LONG FLSHB5
.WORD 4
.LONG FLSHB6
.WORD 4
.LONG 0
BLSTS .LONG FLSHA1,ARMUP,LEGUP,FLSHA,FLSHB,ARMUPZ,LEGUPZ,FLSHAZ,FLSHBZ,0
;AHMED LIST
ALSTS .LONG FLSHA1,ARMUP,LEGUP,FLSHA,FLSHB,ARMUPZ,LEGUPZ,FLSHAZ,FLSHBZ,0
PBLSTS .LONG BOY3,ARMUP,LEGUP,FLSHA,FLSHB,ARMUPZ,LEGUPZ,FLSHAZ,FLSHBZ,0
;SOLDIER GRUNT
DARMUP .LONG DGNTARM7
.WORD FLIPBITS|3,0
.LONG DGNTARM6
.WORD 4
.LONG DGNTARM5
.WORD 4
.LONG DGNTARM4
.WORD 4
.LONG DGNTARM3
.WORD 4
.LONG DGNTARM2
.WORD 4
.LONG DGNTARM1
.WORD 4
.LONG DGNTARM1
.WORD FLIPBITS|3,(M_FLIPH)
.LONG DGNTARM2
.WORD 4
.LONG DGNTARM3
.WORD 4
.LONG DGNTARM4
.WORD 4
.LONG DGNTARM5
.WORD 4
.LONG DGNTARM6
.WORD 4
.LONG DGNTARM7
.WORD 4
.LONG 0
DLEGUP .LONG DGRNTLG7
.WORD FLIPBITS|3,0
.LONG DGRNTLG6
.WORD 5
.LONG DGRNTLG5
.WORD 5
.LONG DGRNTLG4
.WORD 5
.LONG DGRNTLG3
.WORD 5
.LONG DGRNTLG2
.WORD 5
.LONG DGRNTLG1
.WORD 5
.LONG DGRNTLG1
.WORD FLIPBITS|5,(M_FLIPH)
.LONG DGRNTLG2
.WORD 5
.LONG DGRNTLG3
.WORD 5
.LONG DGRNTLG4
.WORD 4
.LONG DGRNTLG5
.WORD 4
.LONG DGRNTLG6
.WORD 4
.LONG DGRNTLG7
.WORD 4
.LONG 0
DFLSHA .LONG DFLSHA6
.WORD FLIPBITS|3,0
.LONG DFLSHA5
.WORD 4
.LONG DFLSHA4
.WORD 4
.LONG DFLSHA3
.WORD 4
.LONG DFLSHA2
.WORD 4
.LONG DFLSHA1
.WORD 4
.LONG DFLSHA1
.WORD FLIPBITS|3,(M_FLIPH)
.LONG DFLSHA2
.WORD 4
.LONG DFLSHA3
.WORD 4
.LONG DFLSHA4
.WORD 4
.LONG DFLSHA5
.WORD 4
.LONG DFLSHA6
.WORD 4
.LONG 0
DFLSHB .LONG DFLSHB6
.WORD 4
.LONG DFLSHB5
.WORD 4
.LONG DFLSHB4
.WORD 4
.LONG DFLSHB3
.WORD 5
.LONG DFLSHB2
.WORD 5
.LONG DFLSHB1
.WORD 5
.LONG DFLSHB2
.WORD 5
.LONG DFLSHB3
.WORD 4
.LONG DFLSHB4
.WORD 4
.LONG DFLSHB5
.WORD 4
.LONG DFLSHB6
.WORD 4
.LONG 0
DARMUPZ .LONG DGNTARM7
.WORD FLIPBITS|18,0
.LONG DGNTARM6
.WORD 4
.LONG DGNTARM5
.WORD 4
.LONG DGNTARM4
.WORD 4
.LONG DGNTARM3
.WORD 4
.LONG DGNTARM2
.WORD 4
.LONG DGNTARM1
.WORD 4
.LONG DGNTARM1
.WORD FLIPBITS|3,(M_FLIPH)
.LONG DGNTARM2
.WORD 4
.LONG DGNTARM3
.WORD 4
.LONG DGNTARM4
.WORD 4
.LONG DGNTARM5
.WORD 4
.LONG DGNTARM6
.WORD 4
.LONG DGNTARM7
.WORD 4
.LONG 0
DLEGUPZ .LONG DGRNTLG7
.WORD FLIPBITS|23,0
.LONG DGRNTLG6
.WORD 4
.LONG DGRNTLG5
.WORD 4
.LONG DGRNTLG4
.WORD 4
.LONG DGRNTLG3
.WORD 4
.LONG DGRNTLG2
.WORD 4
.LONG DGRNTLG1
.WORD 4
.LONG DGRNTLG1
.WORD FLIPBITS|3,(M_FLIPH)
.LONG DGRNTLG2
.WORD 4
.LONG DGRNTLG3
.WORD 4
.LONG DGRNTLG4
.WORD 4
.LONG DGRNTLG5
.WORD 4
.LONG DGRNTLG6
.WORD 4
.LONG DGRNTLG7
.WORD 4
.LONG 0
DFLSHAZ .LONG DFLSHA6
.WORD FLIPBITS|10,0
.LONG DFLSHA5
.WORD 4
.LONG DFLSHA4
.WORD 4
.LONG DFLSHA3
.WORD 4
.LONG DFLSHA2
.WORD 4
.LONG DFLSHA1
.WORD 4
.LONG DFLSHA1
.WORD FLIPBITS|3,(M_FLIPH)
.LONG DFLSHA2
.WORD 4
.LONG DFLSHA3
.WORD 4
.LONG DFLSHA4
.WORD 4
.LONG DFLSHA5
.WORD 4
.LONG DFLSHA6
.WORD 4
.LONG 0
DFLSHBZ .LONG DFLSHB6
.WORD 16
.LONG DFLSHB5
.WORD 4
.LONG DFLSHB4
.WORD 4
.LONG DFLSHB3
.WORD 4
.LONG DFLSHB2
.WORD 4
.LONG DFLSHB1
.WORD 5
.LONG DFLSHB2
.WORD 4
.LONG DFLSHB3
.WORD 4
.LONG DFLSHB4
.WORD 4
.LONG DFLSHB5
.WORD 4
.LONG DFLSHB6
.WORD 4
.LONG 0
DBLSTS .LONG DFLSHA1,DARMUP,DLEGUP,DFLSHA,DFLSHB,DARMUPZ,DLEGUPZ
.LONG DFLSHAZ,DFLSHBZ,0
GETPSK
;UPDATE HULK COUNT
MOVE @HULK_CNT,A0
INC A0
MOVE A0,@HULK_CNT
;CHOOSE PLAYER TO SEEK
ANDI 01,A0
MOVE A0,*A13(SKPLYR)
MOVE A0,A1
SLL 5,A1
ADDI PLYROBJS,A1
MOVE *A1,A1,L
MOVE *A1(OXPOS),A1
JRNZ RZY ;BR=OKAY TO SEEK THIS PLAYER
;PLAYER I AM SEEKING IS IN DIE MODE
XORI 1,A0
MOVE A0,*A13(SKPLYR)
RZY
CLR A0
MOVE A0,*A13(CFLAGS),W
MOVE A0,*A13(IBAT) ;NO BATTING AT START!
MOVE A0,*A13(BNCCNT) ;NOBNCCNT AT START
MOVE A0,*A13(BNCING)
CLR B0
MOVK 10,B1
CALLA RANGRAND ;TIE THIS IN WITH DIFFICULTY!
SLL 4,A0
ADDI AGTBL,A0
MOVE *A0,A0
MOVE A0,*A13(HAGE)
MOVE A0,*A13(KPAGE)
RETS
SOLD
MOVE A13,*A8(OPLINK),L
MOVE *A8(OFLAGS),A4
MOVE *A8(OXPOS),A0
ADDK 16,A0
MOVE A0,*A8(OXPOS)
MOVE *A8(OYPOS),A10
SUBK 9,A10
MOVE A10,*A8(OYPOS)
CALLA ANI
BTST 0,A10
RETS
*****************************************************************************
I_FLM
;FROM COLLISION ROUTINE, TELL THIS AHMED TO FLAME - I AM TOUCHING A PLAYER
;A8=AHMD IMG PNTR, A0=KILLER IMG PNTR
;A9=0 OR 1
MMTM SP,A1,A7
MOVE *A0(OPLINK),A0,L
MOVE *A0(PNUM),A9
MOVE *A8(OPLINK),A0,L
MOVE *A0(IBAT),A7
;2=FLAMING,1=PUNCHING
JRZ WLK0
;THIS AHMED IS CURRENTLY FLAMING!
;KILL OFF FLAME PROC
;DELOBJ FLAME IMG
MMTM SP,A0,A8
CALLR KIL_FLM
MMFM SP,A0,A8
WLK0
CLR A1
MOVE A1,*A0(GOCRNR),L
MOVE A1,*A0(CFLAGS)
MOVK 1,A1
MOVE A1,*A0(IBAT)
MOVI DOPNCH,A7
MOVI AHMDPID,A1
CALLA XFERPROC
MMFM SP,A1,A7
RETS
KIL_FLM
;CLEAN UP FLAME FROM AHMED DUDE
MOVE *A0(BULPRC),A0,L
JRZ WLK ;BR=HE WAS LINING UP TO FLAME ME!
CLR A1
MOVE A1,*A0(BULPRC),L
MOVE *A0(PDATA+64),A1,L
MOVE *A0(PDATA+128),A2,L
MOVE *A0(PDATA+192),A3,L
CALLA PEXIST
JRZ WLK
MOVE *A0(PROCID),A4
CMPI FLMPID,A4
JRNZ WLK
CALLA KILL ;KILLS BULLET PROCESS
MOVE A1,A0 ;KILL FLAME
CALLA DELOBJ
MOVE A2,A0 ;KILL FLAME
CALLA DELOBJ
MOVE A3,A0 ;KILL FLAME
CALLA DELOBJ
WLK RETS
DOPNCH:
;A9=PLAYER 1 OR 2
;THIS AHMED IS PUNCHING
;START PUNCH
CALLR PHASE1
JRC PSUP ;BR=BAT UPWARD
CMP A4,A1
JRC PB8O ;BR=8 O'CLOCK SWING NEEDED
;4 O'CLOCK
MOVI BAT4OA,A9
JRUC DOPN
PB8O
;8
MOVI BAT8OA,A9 ;AHMED PUNCH
JRUC DOPN
PSUP CMP A4,A1
JRC PB10O
;2 O'CLOCK
MOVI BAT2OA,A9
JRUC DOPN
PB10O
MOVI BAT10OA,A9
DOPN
MOVE A9,A10
MOVK 1,A1
JSRP FRANIM
MOVE A10,A9
MOVK 1,A1
JSRP FRANIM
PNCHDN
CLR A0
MOVE A0,*A13(IBAT)
MOVK 1,A0
MOVE A0,*A13(DIS)
MOVE A0,*A13(CFLAGS)
MOVI ZEROS,A9
JRUC ALUP_TOP
AAHMED:
;A9=[Y,X] SPOT TO SPAWN FROM
;A10=DIRECTION
;8 1 2
;7 3
;6 5 4
MOVI AHMD,A2
CALLR GET_WVADDR
MOVE *A0(16),A1,W ;DEC WAVE RAM CNT FOR THIS HULK
DEC A1
MOVE A1,*A0(16),W
MOVE *A0(32),A1,W ;GET DIFFICULTY LEVEL
CALLR START_AHMD
MOVE *A13(CFLAGS),A0 ;RUNNING OUT
ORI 2,A0
MOVE A0,*A13(CFLAGS)
MOVK 4,A3 ;20
MOVE A3,*A13(DIS) ;CHANGE BASED ON HULKS SPEED?
CRATE_IN
;ENTRY POINT FOR CRATE AHMED DUDE
;NOW START WITH A VELOCITY!
CALLR OKVA
MOVE *A8(OYPOS),A0
MOVE @WORLDTLY,A1,L
SRL 16,A1
ADDI 255,A1 ;275
CMP A0,A1
JRGT ALUP_TOP
;THIS HULK STARTING LOWER THAN BOTTOM OF SCRN!
;RESET ITS Y LINE
MOVE A1,*A8(OYPOS)
;
; LOOP TOP FOR AHMED FLAME THROWER GRUNT
;
ALUP_TOP:
;TOP OF HULK LOGIC
MOVE @HALT,A0
JRZ ACONT1 ;IF HALT ON, LOOP BACK TO TOP
SLEEPK 3
JRUC ALUP_TOP
ACONT1
MOVE *A13(CFLAGS),A0
BTST 2,A0
JRZ AC2
;SEEKING SIT SPOT, AM I THERE?
MOVE *A13(GOCRNR),A0,L
MOVE *A8(OYVAL),A1,L
SUB A0,A1
ABS A1
CMPI [10,0],A1
JRNC AC2
ANDI 0FFFFH,A0
MOVE *A8(OXPOS),A1
SUB A0,A1
ABS A1
CMPI 15H,A1
JRNC AC2
;YES A HIT!
;PAUSE HERE FOR X TIME
;ALWAYS POINT TOWARD PLAYER I WILL SEEK!
CALLR SETUP_DIR
CLR A0
MOVE A0,*A8(OXVEL),L
MOVE A0,*A8(OYVEL),L
MOVE A0,*A13(GOCRNR),L
MOVE A0,*A13(CFLAGS)
GTO
MOVE *A13(DIR),A0
MOVE *A13(SK_DIR),A1
CMP A0,A1
JRZ GTOO
CALLR WAY
SLEEPK 5
JRUC GTO
GTOO
MOVK 1,B0 ;AHMED STAYS IN CORNER
MOVI 60*6,B1
CALLA RANGRAND
CALLA PRCSLP
MOVI ZEROS,A9
AC2 MOVE *A13(NOFLMS),A0
JRZ AC3
DEC A0
MOVE A0,*A13(NOFLMS)
JRNZ NOFL
AC3
MOVE *A13(SKPLYR),A1
SLL 5,A1
ADDI PLYROBJS,A1
MOVE *A1,A1,L
MOVE *A1(OXPOS),A2
MOVE *A8(OXPOS),A3
SUB A2,A3
ABS A3
CMPI 80,A3
JRNC NOFL
MOVE *A1(OYPOS),A2
MOVE *A8(OYPOS),A3
SUB A2,A3
ABS A3
CMPI 04CH,A3
JRNC NOFL
MOVE *A13(SKPLYR),A9
;A9=PLAYER 0 OR 1
;THIS AHMED IS FLAMING AT
INC A9
MOVK 2,A0 ;2=FLAMING,1=PUNCHING
MOVE A0,*A13(IBAT)
CALLR PHASE1
JRC FSUP ;BR=BAT UPWARD
CMP A4,A1
JRC FB8O ;BR=8 O'CLOCK SWING NEEDED
;4 O'CLOCK
MOVI AHMED8,A1
MOVE *A8(OFLAGS),A4
ORI M_FLIPH,A4
CALLA ANI
SLEEPK 10
MOVI DMAWNZ|M_PIXSCAN|M_FLIPH,A4
MOVE *A8(OXVAL),A0,L
ADDI [13H,0],A0
MOVE *A8(OYVAL),A1,L
SUBI [12H,0],A1
MOVK 2,A9
JRUC FBATDN
FB8O
MOVI AHMED8,A1
MOVE *A8(OFLAGS),A4
ANDI 0FFEFH,A4
CALLA ANI
SLEEPK 10
MOVI DMAWNZ|M_PIXSCAN,A4
MOVE *A8(OXVAL),A0,L
ADDI [10H,0],A0
MOVE *A8(OYVAL),A1,L
SUBI [12H,0],A1
MOVK 3,A9
JRUC FBATDN
FSUP CMP A4,A1
JRC FB10O
;2 O'CLOCK
MOVI AHMED10,A1
MOVE *A8(OFLAGS),A4
ANDI 0FFEFH,A4 ;NO HZ FLIP BIT SET
ORI M_FLIPH,A4
CALLA ANI
SLEEPK 10
MOVI DMAWNZ|M_PIXSCAN|M_FLIPH|M_FLIPV,A4
MOVE *A8(OXVAL),A0,L
ADDI [019H,0],A0
MOVE *A8(OYVAL),A1,L
ADDI [03CH,0],A1
MOVK 1,A9
JRUC FBATDN
FB10O
MOVI AHMED10,A1
MOVE *A8(OFLAGS),A4
ANDI 0FFEFH,A4 ;NO HZ FLIP BIT SET
CALLA ANI
SLEEPK 10
MOVI DMAWNZ|M_PIXSCAN|M_FLIPV,A4
MOVE *A8(OXVAL),A0,L
ADDI [0EH,0],A0
MOVE *A8(OYVAL),A1,L
ADDI [03CH,0],A1
CLR A9
FBATDN
;A0,A1 ARE SET UP
MOVI 160,A3
MOVI AHMEDBLST1,A2
MOVI CLSENMY|TYPLAYR|SUBFLM,A5
CLR A6
CLR A7
MOVE A8,A10
CALLA BEGINOBJ2
CREATE FLMPID,FLAMING
MOVE A0,*A13(BULPRC),L
MOVE A10,A8
SLEEP 10FH-120
CLR A0
MOVE A0,*A13(IBAT)
MOVE A0,*A13(GOCRNR),L
MOVK 1,A0
MOVE A0,*A13(DIS)
MOVE A0,*A13(CFLAGS)
MOVI ZEROS,A9
MOVK 1,B0
MOVI 60,B1 ;120
CALLA RANGRAND
; MOVI 1,A0 ;80,A0
MOVE A0,*A13(NOFLMS)
JRUC ALUP_TOP
NOFL
;CHECK FOR COLLISIONS WITH RECTANGLES ON THIS SCREEN
MOVE @EN_CURRENT,A0,L ;CURRENT RECT LIST
JRZ NOBOXS
CALLR CK_RECT
NOBOXS MOVI SETUP_DIRA,A10 ;ROUTINE TO CALL
CALLR CK_SPIN
MOVE A0,A0
JRZ NOTSPINA
CALLA PRCSLP
JRUC ALUP_TOP
FLAMING
;MAYBE ALIGN WITH THIS (A10) AHMED GUY AS I FLAME
;A10 IS FLAME THROWER AHMED PNTR
MOVI TORCH,A0
CALLA ONESND
MOVE A9,*A13(PDATA)
MOVK 2,A0
MOVE A0,*A13(PDATA+32)
MOVE A8,*A13(PDATA+64),L ;STUB PC BASE
MOVI BLASTA,A0
MOVE A0,*A13(PDATA+96),L
MOVE *A8(OXVAL),A0,L
MOVE *A8(OYVAL),A1,L
MOVE *A8(OFLAGS),A4
MOVI AHMEDBLST1,A2
MOVI 160,A3
MOVI CLSENMY|TYPLAYR|SUBFLM,A5
CLR A6
CLR A7
CALLA BEGINOBJ2
MOVE A8,*A13(PDATA+128),L
MOVI BLASTA2,A0
MOVE A0,*A13(PDATA+160),L
MOVE *A8(OXVAL),A0,L
MOVE *A8(OYVAL),A1,L
MOVE *A8(OFLAGS),A4
MOVI AHMEDBLST1,A2
MOVI 160,A3
MOVI CLSENMY|TYPLAYR|SUBFLM,A5
CLR A6
CLR A7
CALLA BEGINOBJ2
MOVE A8,*A13(PDATA+192),L
MOVI BLASTA3,A0
MOVE A0,*A13(PDATA+224),L
DSF0
MOVE *A13(PDATA+64),A8,L
MOVE *A13(PDATA+96),A9,L
MOVK 4,A1
JSRP FRANIM
MOVE A9,*A13(PDATA+96),L
MOVE *A13(PDATA+128),A8,L
MOVE *A13(PDATA+160),A9,L
MOVK 4,A1
JSRP FRANIM
MOVE A9,*A13(PDATA+160),L
MOVE *A13(PDATA+192),A8,L
MOVE *A13(PDATA+224),A9,L
MOVK 4,A1
JSRP FRANIM
MOVE A9,*A13(PDATA+224),L
JRC NXTF
;A0=SLP TIME
MOVE A0,A11
DSF CALLR ALIGNF
SLEEPK 1
DSJS A11,DSF
JRUC DSF0
NXTF
MOVI BLASTB,A9
MOVE A9,*A13(PDATA+96),L
MOVI BLASTB2,A9
MOVE A9,*A13(PDATA+160),L
MOVI BLASTB3,A9
MOVE A9,*A13(PDATA+224),L
NXTFA
MOVE *A13(PDATA+64),A8,L
MOVE *A13(PDATA+96),A9,L
MOVK 4,A1
JSRP FRANIM
MOVE A9,*A13(PDATA+96),L
MOVE *A13(PDATA+128),A8,L
MOVE *A13(PDATA+160),A9,L
MOVK 4,A1
JSRP FRANIM
MOVE A9,*A13(PDATA+160),L
MOVE *A13(PDATA+192),A8,L
MOVE *A13(PDATA+224),A9,L
MOVK 4,A1
JSRP FRANIM
MOVE A9,*A13(PDATA+224),L
JRC NXTF1
MOVE A0,A11
DSF2 CALLR ALIGNF
SLEEPK 1
DSJS A11,DSF2
JRUC NXTFA
NXTF1 MOVE *A13(PDATA+32),A0
DEC A0
MOVE A0,*A13(PDATA+32)
JRNZ NXTF
MOVI BLASTC,A9
MOVE A9,*A13(PDATA+96),L
MOVI BLASTC2,A9
MOVE A9,*A13(PDATA+160),L
MOVI BLASTC3,A9
MOVE A9,*A13(PDATA+224),L
DSF4
; MOVK 4,A1
; JSRP FRANIM
MOVE *A13(PDATA+64),A8,L
MOVE *A13(PDATA+96),A9,L
MOVK 4,A1
JSRP FRANIM
MOVE A9,*A13(PDATA+96),L
MOVE *A13(PDATA+128),A8,L
MOVE *A13(PDATA+160),A9,L
MOVK 4,A1
JSRP FRANIM
MOVE A9,*A13(PDATA+160),L
MOVE *A13(PDATA+192),A8,L
MOVE *A13(PDATA+224),A9,L
MOVK 4,A1
JSRP FRANIM
MOVE A9,*A13(PDATA+224),L
JRC NXTF2
MOVE A0,A11
DSF3 CALLR ALIGNF
SLEEPK 1
DSJS A11,DSF3
JRUC DSF4
NXTF2
MOVE *A13(PDATA+64),A0,L
CALLA DELOBJ
MOVE *A13(PDATA+128),A0,L
CALLA DELOBJ
MOVE *A13(PDATA+192),A0,L
CALLA DELOBJ
****************JARV PATCH
MOVE @WAVE,A0
CMPI 16,A0 ;ORCUS WAVE USES FLAMES
JAEQ SUCIDE
******************************
MOVE *A10(OPLINK),A10,L
CLR A0
MOVE A0,*A10(BULPRC),L
DIE
**********************JARV PATCH
DOIT
MOVI 160,A3
MOVI AHMEDBLST1,A2
MOVI CLSENMY|TYPLAYR|SUBFLM,A5
CLR A6
CLR A7
MOVE A8,A10
CALLA BEGINOBJ2
CREATE HULKPID,FLAMING
******************WAITING FOR FLMPID ID***********
; CREATE FLMPID,FLAMING
DIE
*************************************
ALIGNF
; MOVE A8,A0
MOVE *A13(PDATA+64),A0,L
MOVE A10,A8
CALLA GETANIXY
MOVE *A13(PDATA),A6
SLL 5,A6
ADDI FIREYX,A6
MOVE *A6,A6,L
ADD A6,A2
SLL 16,A6
ADD A6,A3
;A2=Y,A3=X
MOVE *A0(OFLAGS),A4,W
CALLA GANISAG ;ADJUSTS TORSO
; MOVE A0,A8
MOVE *A13(PDATA+128),A0,L
MOVE A10,A8
CALLA GETANIXY
MOVE *A13(PDATA),A6
SLL 5,A6
ADDI FIREYX,A6
MOVE *A6,A6,L
ADD A6,A2
SLL 16,A6
ADD A6,A3
;A2=Y,A3=X
MOVE *A0(OFLAGS),A4,W
CALLA GANISAG ;ADJUSTS TORSO
; MOVE A0,A8
MOVE *A13(PDATA+192),A0,L
MOVE A10,A8
CALLA GETANIXY
MOVE *A13(PDATA),A6
SLL 5,A6
ADDI FIREYX,A6
MOVE *A6,A6,L
ADD A6,A2
SLL 16,A6
ADD A6,A3
;A2=Y,A3=X
MOVE *A0(OFLAGS),A4,W
CALLA GANISAG ;ADJUSTS TORSO
; MOVE A0,A8
RETS
;2=4 OCLOCK
;3=8 OCLOCK
************************JARV PATCH
FIREYX .LONG [52H,0FFF8H],[053H,7],[1,1],[1,-1],[29H,-8],[29H,8]
;FIREYX .LONG [52H,0FFF8H],[053H,7],[29H,-8],[29H,8]
***************************************
NOTSPINA:
MOVE *A13(DIS),A0 ;UPDATE DISTANCE COUNT
DEC A0
MOVE A0,*A13(DIS) ;STUFF NEW COUNT
JRNZ DOAHMD ;BR=CONTINUE CURRENT DIRECTION
MOVE A0,*A13(BNCING)
MOVE *A13(CFLAGS),A0
BTST 1,A0
JRZ T3A
;THIS AHMD JUST RUNNING IN! GIVE THIS ONE A BOGUS SEEK DIR
;IF WITHIN WALLS THEN CONT, OTHERWISE RESET DIS CNTR
MOVE @WORLDTLX,A0,L
MOVE @SITLST,A2,L
MOVE @WORLDTLY,A1,L
MOVE *A13(DIR),A3
DEC A3
SLL 6,A3
ADD A3,A2
MOVE @HCOUNT,A4 ;HULK_CNT,A4
ANDI 01,A4
SLL 5,A4
ADD A4,A2
MOVE *A2,A2,L
ADD A2,A1
SRL 16,A0
ADD A2,A0
MOVX A0,A1
MOVE A1,*A13(GOCRNR),L
MOVE *A13(CFLAGS),A0
ORI 04,A0 ;INDICATE SEEKING SIT SPOT
MOVE A0,*A13(CFLAGS)
; MOVE *A13(DIR),A3
; SLL 5,A3
; ADDI NEWANGA,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 T4A
;
;NOW POINT THIS AHMD AT CURRENT POSITION OF PLAYER
T3A: MOVE *A13(BNCING),A0
JRNZ DOAHMD
MOVE *A13(SK_DIR),A7,W
;IF NEW SEEK IS <> OLD SEEK, THEN SET STAND FLAG
CALLR GET_DIS
CALLR SETUP_DIRA
MOVE *A13(SK_DIR),A0
CMP A0,A7 ;NEW CMP OLD SEEK
JREQ DOAHMD
T4A: MOVE *A13(CFLAGS),A0 ;SAYS I AM SPINNING
ORI 01H,A0
MOVE A0,*A13(CFLAGS),W
MOVK 2,A0
MOVE A0,*A13(OSCILLATE)
SLEEPK 3
JRUC ALUP_TOP
DOAHMD:
CLR A1
JSRP FRANIM
JRNC CHA ;BR=NOT AT END OF SCRIPT YET
CALLR GET_RUN
CHA
JRUC ALUP_TOP
START_AHMD
MOVE A1,*A13(LEVEL),W
MOVK 2,A0 ;INDICATES AHMED GRUNT
MOVE A0,*A13(HULKTYP)
CLR A0
MOVE A0,*A13(BULPRC),L
MOVE A0,*A13(NOFLMS),L
MOVE A0,*A13(ABSRB)
;A10=DIRECTION
;8 1 2
;7 3
;6 5 4
MOVE A10,*A13(SK_DIR)
;UPDATE AHMD COUNT
MOVE @AHMD_CNT,A0
INC A0
MOVE A0,@AHMD_CNT
;CHOOSE PLAYER TO SEEK
ANDI 01,A0
MOVE A0,*A13(SKPLYR)
MOVE A0,A1
SLL 5,A1
ADDI PLYROBJS,A1
MOVE *A1,A1,L
MOVE *A1(OXPOS),A1
JRNZ PZY ;BR=OKAY TO SEEK THIS PLAYER
;PLAYER I AM SEEKING IS IN DIE MODE
XORI 1,A0
MOVE A0,*A13(SKPLYR)
PZY
CLR A0
MOVE A0,*A13(CFLAGS),W
MOVE A0,*A13(IBAT) ;NO BATTING AT START!
MOVE A10,*A13(DIR)
MOVE A10,A0
SLL 5,A0
ADDI HXT,A0
MOVE *A0,A4,L
;BTML .LONG 0,0,[08,0],[10,0],[08,0],[30,0],[08,0],[50,0],[17,0],[20,0]
;[Y,X] OF PLACEMENT
;A4=THIS
;A8=1-4
MOVK 1,A8
SLL 6,A8
ADD A8,A4
MOVE *A4+,A1,L ;GET Y FIRST
ADD A9,A1
SLL 16,A9
MOVE *A4,A0,L
ADD A9,A0
MOVI AHMED10,A2
;NEED A0=[X,0000],A1=[Y,0000]
;A0,A1 ARE SET UP
MOVI 100,A3 ;TAKE OUT
MOVE A3,*A13(NOFLMS)
MOVI 159,A3
MOVI DMAWNZ,A4 ;NON-ZERO VALUE
MOVI CLSENMY|TYPAHMD,A5
CLR A6
CLR A7
CALLA BEGINOBJ2
RETS
CK_RECT
;NOW CHECK RECTANGLES FOR COLLISIONS
MOVE *A13(BOXCK),A1
DEC A1
JRNZ NOREC
;TIME TO CHECK HULK AGAINST RECTANGLES!
;BOG CITY
MOVK 8,A1
MOVE A1,*A13(BOXCK)
;MAYBE JUST KILL THIS GUY OFF IF HE HAS COLLIDED WITH RECTANGLES TOO MUCH!
;FIRST CHECK TO SEE IF THIS WILL PUSH PLAYER INTO BAD RECTANGLE AREA
;CHECK FOR RECTANGLE COLLISIONS!
MOVE *A8(OXVAL),A4,L
MOVE *A8(OYVAL),A6,L
SRL 16,A4 ;X
SRL 16,A6 ;Y
NEXT0 MOVE *A0+,A1,W
JRZ NOBOX
CMP A1,A4
JRLT NEXT ;IF BRNCH RECT LFT EDGE > PLYR X
MOVE *A0+,A1,W
CMP A1,A6 ;
JRLT NEXTA ;IF BRNCH RECT TOP EDGE > PLYR Y
MOVE *A0+,A1,W
CMP A1,A4
JRGT NEXTB ;IF BRNCH RECT RGT EDGE < PLYR X
MOVE *A0+,A1,W
CMP A1,A6
JRLT YESA ;IF BRNCH RECT BOT EDGE < PLYR Y
ADDK 16,A0
JRUC NEXT0
YESA
;HIT A RECTANGLE
;WHAT DO I DO?
MOVE *A0,A0
MOVE A0,*A13(SK_DIR)
CLR A0
MOVE A0,*A8(OXVEL),L
MOVE A0,*A8(OYVEL),L
MOVE *A13(CFLAGS),A0
ORI 1,A0
MOVE A0,*A13(CFLAGS)
MOVK 32,A1 ;DON'T CHECK FOR AWHILE ;40
MOVE A1,*A13(BNCING) ;DIS HULK WILL TRAVEL AFTER BNC!
MOVE A1,*A13(BOXCK) ;TIME BEFORE WE CHECK AGAIN
MOVE *A13(BNCCNT),A0
INC A0
MOVE A0,*A13(BNCCNT)
CMPI 3,A0
JRNZ NOBOX
;GRUNT IS STUCK BNCING OFF RECTANGLES! KILL HIM!
SETC
RETS
NEXT ADDI 48+16,A0
JRUC NEXT0
NEXTA ADDI 32+16,A0
JRUC NEXT0
NEXTB ADDK 16+16,A0
JRUC NEXT0
NOREC MOVE A1,*A13(BOXCK)
NOBOX CLRC
RETS
CK_SPIN
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 18,A0 ;15
MOVE A0,*A13(DIS)
MOVE *A13(CFLAGS),A0
ANDI 0FFFDH,A0
MOVE A0,*A13(CFLAGS)
JRUC GOODNEWS
R0
MOVE *A13(BNCING),A0
JRNZ GNW2
PUSH A1
CALLR GET_DIS
CALL A10 ;SETUP_DIR
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
MOVK 1,A0
RETS
GNW2
;A0=DIR TO BNC
MOVE *A13(DIR),A0
CALLR INTO
MOVI 30,A0
JRUC GNW1
GNW MOVK 5,A0 ;6
GNW1 MOVE A0,*A13(DIS)
GOODNEWS:
CLR A0
MOVE A0,*A13(OSCILLATE)
CALLR GET_RUN ;ZEROS STAND FLAG ALSO
MOVK 1,A0
RETS
CONT:
CALLR WAY ;WHICH WAY TO SPIN/THEN ANI STAND VW
CONT1: MOVK 3,A0
RETS
NOSPN: CLR A0
RETS
BLASTA .LONG AHMEDBLST1
.WORD 2
.LONG AHMEDBLST2
.WORD 2
.LONG BLST3C
.WORD 2
.LONG 0
BLASTB
.LONG BLST4C
.WORD 4
.LONG BLST5C
.WORD 4
.LONG BLST6C
.WORD 4
.LONG BLST4C
.WORD 4
.LONG BLST5C
.WORD 4
.LONG BLST6C
.WORD 4
.LONG BLST4C
.WORD 4
.LONG BLST5C
.WORD 4
.LONG BLST6C
.WORD 4
.LONG BLST4C
.WORD 4
.LONG BLST5C
.WORD 4
.LONG BLST6C
.WORD 4
.LONG BLST4C
.WORD 4
.LONG BLST5C
.WORD 4
.LONG BLST6C
.WORD 4
.LONG 0
BLASTC3
BLASTC .LONG BLST3C
.WORD 2
.LONG AHMEDBLST2
.WORD 2
.LONG AHMEDBLST1
.WORD 2
.LONG 0
BLASTA2 .LONG AHMEDBLST1 ;INVISIBLE
.WORD 2
.LONG AHMEDBLST2 ;''
.WORD 2
.LONG BLST3B
.WORD 2
.LONG 0
BLASTB2
.LONG BLST4B
.WORD 4
.LONG BLST5B
.WORD 4
.LONG BLST6B
.WORD 4
.LONG BLST4B
.WORD 4
.LONG BLST5B
.WORD 4
.LONG BLST6B
.WORD 4
.LONG BLST4B
.WORD 4
.LONG BLST5B
.WORD 4
.LONG BLST6B
.WORD 4
.LONG BLST4B
.WORD 4
.LONG BLST5B
.WORD 4
.LONG BLST6B
.WORD 4
.LONG BLST4B
.WORD 4
.LONG BLST5B
.WORD 4
.LONG BLST6B
.WORD 4
.LONG 0
BLASTC2 .LONG BLST3B
.WORD 2
.LONG AHMEDBLST2
.WORD 2
.LONG AHMEDBLST1
.WORD 2
.LONG 0
BLASTA3 .LONG AHMEDBLST1 ;INVISIBLE
.WORD 2
.LONG AHMEDBLST2
.WORD 2
.LONG BLST3C ;STILL INV
.WORD 2
.LONG 0
BLASTB3
.LONG BLST4A
.WORD 4
.LONG BLST5A
.WORD 4
.LONG BLST6A
.WORD 4
.LONG BLST4A
.WORD 4
.LONG BLST5A
.WORD 4
.LONG BLST6A
.WORD 4
.LONG BLST4A
.WORD 4
.LONG BLST5A
.WORD 4
.LONG BLST6A
.WORD 4
.LONG BLST4A
.WORD 4
.LONG BLST5A
.WORD 4
.LONG BLST6A
.WORD 4
.LONG BLST4A
.WORD 4
.LONG BLST5A
.WORD 4
.LONG BLST6A
.WORD 4
.LONG 0
;BLASTC3
; .LONG BLST3C
; .WORD 2
; .LONG AHMEDBLST2
; .WORD 2
; .LONG AHMEDBLST1
; .WORD 2
; .LONG 0
PHASE1
CLR A1
MOVE A1,*A8(OXVEL),L
MOVE A1,*A8(OYVEL),L
DEC A9
SLL 5,A9
ADDI PLYROBJS,A9
MOVE *A9,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
RETS
GSKIPR:
;A9=[Y,X] SPOT TO SPAWN FROM
;A10=DIRECTION
;8 1 2
;7 3
;6 5 4
MOVK 20,A0
CALLA RNDRNG0
CALLA PRCSLP
MOVE A10,A0
SLL 5,A0
ADDI SKGHXT,A0
MOVE *A0,A4,L
MOVE *A4+,A2,W
MOVE A2,B0
MOVE *A4+,A2,W
MOVE A2,B1
CALLA RANGRAND
SLL 16,A0
ADD A9,A0
MOVE A0,A1
MOVE *A4+,A2,W
MOVE A2,B0
MOVE *A4+,A2,W
MOVE A2,B1
CALLA RANGRAND
MOVX A9,A2
ADD A0,A2
SLL 16,A2
MOVE A2,A0
;NEED A0=[X,0000],A1=[Y,0000]
;A0,A1 ARE SET UP
JAUC START_SKIP
SKGHXT .LONG 0,GBTML,GBTML,SKGLFTL,GTOPL,GTOPL,GTOPL,SKGRGTL,SKGRGTL
ASKIPR:
;A8=1-4 FOR GRUNT # FOR THIS RELEASE
;A9=[Y,X] SPOT TO SPAWN FROM
;A10=DIRECTION
;8 1 2
;7 3
;6 5 4
;A8=1-4
MOVK 20,A0
CALLA RNDRNG0
CALLA PRCSLP
MOVE A10,A0
SLL 5,A0
ADDI SHXT,A0
MOVE *A0,A4,L
SLL 6,A8
ADD A8,A4
MOVE *A4+,A1,L ;GET Y FIRST
ADD A9,A1
SLL 16,A9
MOVE *A4,A0,L
ADD A9,A0
;NEED A0=[X,0000],A1=[Y,0000]
;A0,A1 ARE SET UP
JAUC START_SKIP
.END