.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