total-carnage/BACKUP/NEWHULK.ASM

6279 lines
110 KiB
NASM
Raw Normal View History

2021-04-06 15:15:31 -07:00
.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