3720 lines
70 KiB
NASM
3720 lines
70 KiB
NASM
**************************************************************
|
||
*
|
||
* Software: Mark Turmell
|
||
* Initiated: 11/6/90
|
||
*
|
||
* Modified: Shawn Liptak, 10/27/91 -Orcus mods
|
||
*
|
||
* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC.
|
||
*
|
||
*.Last mod - 1/7/92 13:24
|
||
**************************************************************
|
||
.FILE 'NEWHULK.ASM'
|
||
.TITLE 'TOTAL CARNAGE GAME PROGRAM'
|
||
.WIDTH 132
|
||
.OPTION B,D,L,T
|
||
.MNOLIST
|
||
|
||
|
||
.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"
|
||
.INCLUDE "HULK.HDR"
|
||
|
||
;
|
||
;SOUNDS EXTERNAL
|
||
;
|
||
.REF EXP2,GRNTSHT,ALTEXP1,EXP1L,GUYDI
|
||
;
|
||
;SYMBOLS EXTERNALLY DEFINED
|
||
;
|
||
.REF ATME,DOAGN
|
||
.REF aboss,T72PNTR,CTOTAL
|
||
.REF ERECT6,BURST,DO_WINNER,STATUS,PHASE1,BOLTS
|
||
.REF INST_WARP
|
||
.REF HSTGS_LOST,AOF,RNDRNG0,FLAMING
|
||
.REF SETC2,STRT_G,CRSRAM,ICONS_DN,HZSPD
|
||
.REF TARGET,LHLPS
|
||
.REF SEND_ICON
|
||
.REF WAVE_RAM,EHALT,GETANIX,GETFPAL,PLYROBJS,PLYRPRCS,OUT_FLG
|
||
.REF P1DATA,P2DATA,RANDPER,FRANIM,FRANIMQ
|
||
.REF 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
|
||
.REF GSKIPR,ASKIPR
|
||
.REF DOYV1,DOYV,DOYVP
|
||
.ref RUNIN
|
||
;
|
||
;SYMBOLS DEFINED IN THIS FILE
|
||
;
|
||
|
||
.DEF SKGHXT,SHXT,ABOOBJUMP
|
||
.DEF FLMUP1,FLMUP2,FLMUP3,FLMUP4,FLMUP5,FLMUP6,RUN_AWAY,FIXEDA
|
||
.DEF SPAWN_RUNNR
|
||
.DEF CRT_AHMD,SPAWN_FND,SPAWN_SKIPR
|
||
.DEF SEND_GROUP,SPAWN_HULKS,BAT_PLYR,KILL_HULK,KILL_H1
|
||
.DEF MAXHULK,HULK_CNT,EN_CURRENT,HULK_DN
|
||
.DEF SENDH_TOP,SENDH_GROUP,INTO
|
||
.DEF DO_DIFF2,SPINFLGS,BOOM3,KILL_HULKZ,JUMPER
|
||
.DEF BLSTS,SPAWN_AHMD,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
|
||
.def TRY_RCK
|
||
.DEF ESCAPED
|
||
;
|
||
;UNINITIALIZED RAM DEFINITIONS
|
||
;
|
||
.BSS ESCAPED,16
|
||
.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 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
|
||
;
|
||
|
||
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_S9
|
||
;FALLS IN HERE IF PIT IS DOWN BELOW SCREEN
|
||
jauc DELOBJDIE
|
||
ANI_S9
|
||
;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 9,A3
|
||
CMP A3,A2 ;HULKS MAXED OUT?
|
||
JRGT ANIST
|
||
MOVE *A13(PDATA),A0
|
||
CMPI 50,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
|
||
MOVK 6,A0
|
||
CALLA RNDRNG0
|
||
INC A0
|
||
MOVE A0,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 170,B0 ;200
|
||
MOVI 430,B1 ;450
|
||
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
|
||
JSRP FRANIMQ
|
||
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
|
||
RUN_AWAY
|
||
MOVE @WAVE,A0
|
||
SUBI 36,A0
|
||
JRNZ RUN2
|
||
;AKHBOOB JUMPING OUT OF MOUTH
|
||
MOVE A13,A9
|
||
CREATE HULKPID,CKESCAPE
|
||
clr a0
|
||
move a0,*a8(OPLINK),L
|
||
MOVI BOOB_DN,A9
|
||
MOVI 1532,A0
|
||
MOVE A0,*A13(DIS) ;TIME BEFORE WE GET NEW VELOCITIES
|
||
MOVE A0,*A13(KPAGE)
|
||
MOVK 6,A1
|
||
MOVE A1,*A13(LEVEL),W
|
||
MOVI 0f000H,B0
|
||
MOVI 01f000H,B1
|
||
CALLA RANGRAND
|
||
MOVE A0,A4
|
||
MOVK 4,A0 ;INDICATES AKHBOOB GRUNT
|
||
MOVI ABOOB61,A1
|
||
JRUC RUN3
|
||
|
||
CKESCAPE
|
||
SLEEPK 1
|
||
MOVE *A8(OID),A0
|
||
CMPI CLSDEAD,A0
|
||
JAZ SUCIDE
|
||
;AKHBOOB AT BOTM OF SCRN
|
||
MOVE *A8(OYPOS),A0
|
||
MOVE @WORLDTLY+16,A1
|
||
ADDI 270,A1
|
||
CMP A0,A1
|
||
JRGT CKESCAPE
|
||
|
||
; CALLA SCRTST ;RETURNS Z IF ON SCREEN
|
||
; JRZ CKESCAPE
|
||
movk 1,a0
|
||
move a0,@ESCAPED ;Tell ABOSS that akhboob escaped
|
||
DIE
|
||
|
||
|
||
;ABOOB61,ABOOB62,ABOOB63,ABOOB64,ABOOB65,ABOOB66,ABOOB67,ABOOB68
|
||
RUN2
|
||
;A8=FLAMING GRUNT FROM BTR60
|
||
MOVI FTF_PWK_DN,A9
|
||
MOVK 32,A0
|
||
MOVE A0,*A13(DIS) ;TIME BEFORE WE GET NEW VELOCITIES
|
||
MOVK 2,A1
|
||
MOVE A1,*A13(LEVEL),W
|
||
MOVK 3,A0
|
||
MOVI FLM6R1,A1
|
||
MOVI 08000H,A4
|
||
RUN3 MOVE A0,*A13(HULKTYP) ;FLAMING GRUNT
|
||
MOVE A4,*A8(OYVEL),L
|
||
MOVE *A8(OFLAGS),A4
|
||
CALLA ANI
|
||
CALLR GETPSK
|
||
CLR A0
|
||
MOVE A0,*A13(BULPRC),L
|
||
MOVE A13,*A8(OPLINK),L
|
||
MOVE *A8(OYPOS),A10
|
||
SUBK 20H,A10
|
||
MOVE A10,*A8(OYPOS)
|
||
; CALLA ANI
|
||
MOVI CLSENMY|TYPHULK,A4
|
||
MOVE A4,*A8(OID),W
|
||
CLR A4
|
||
MOVE A4,*A8(OXVEL),L
|
||
MOVI 159,A4
|
||
MOVE A4,*A8(OZPOS),W
|
||
|
||
MOVK 5,A0
|
||
MOVE A0,*A13(DIR)
|
||
MOVE A0,*A13(SK_DIR)
|
||
MOVE A0,*A13(BOXCK)
|
||
CALLR DO_DIFF
|
||
JRUC LUP_ST
|
||
|
||
|
||
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!
|
||
|
||
CREATE0 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
|
||
JSRP FRANIMQ
|
||
MOVE A10,A9
|
||
;GET ME ON SCRN
|
||
HTOP
|
||
;GO THROUGH ANIMATION LIST
|
||
JSRP FRANIMQ
|
||
CALLA SCRTST
|
||
JRNZ KILOFF
|
||
MOVE A10,A9
|
||
JRUC HTOP
|
||
|
||
KILOFF
|
||
MOVE @HSTGS_LOST,A0 ;TOTAL MISSED HOSTAGES HERE FOR RACKUP
|
||
INC A0
|
||
MOVE A0,@HSTGS_LOST
|
||
jauc DELOBJDIE
|
||
|
||
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
|
||
MOVK 7,A8
|
||
AND A8,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
|
||
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,A1,L
|
||
JUMP A1
|
||
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
|
||
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
|
||
.BSS BUGFIX,16
|
||
.BSS BUGFIX2,32
|
||
POSITN
|
||
MOVE *A8+,A10,W ;DIRECTION
|
||
CMPI 9,A10
|
||
JRC POT1
|
||
LOCKUP
|
||
EINT
|
||
POT1 MOVE A10,@BUGFIX,W
|
||
MOVE A8,@BUGFIX2,L
|
||
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 230,A0 ;260
|
||
CALLA RANDPER
|
||
JRC SKGANG
|
||
GS1 MOVE @RAND,A0
|
||
ANDI 03H,A0
|
||
ADDK 1,A0
|
||
MOVE A0,A8
|
||
G2 CREATE HULKPID,ASKIPR
|
||
DSJS A8,G2
|
||
RETS
|
||
SKGANG:
|
||
MOVE @SKIPR_CNT,A2 ;MOVE BYTE (# HULKS ON SCRN) TO A2
|
||
CMPI 15,A2 ;18
|
||
JRNC GS1
|
||
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 5,B0 ;5 ;# OF HULKS IN A GANG
|
||
MOVK 13,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,AHDETH82B,FLM6R1,ABOOB61
|
||
|
||
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,AHDETH82B,FLM6R1,ABOOB61 ;ADETH81B
|
||
FLD2 .LONG DHXTF,HXTF,DHXTFA,DHXTF,DHXTF
|
||
|
||
HXT .LONG 0,BTML,BTML,LFTL,TOPL,TOPL,TOPL,RGTL,RGTL
|
||
;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 ;2
|
||
MOVE @HCOUNT,A0
|
||
MOVK 7,A2
|
||
AND A2,A0
|
||
JRNZ JP2
|
||
ADDK 1,A1 ;MAKE A LITTLE BIT HARDER!
|
||
JP2
|
||
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
|
||
CREATE0 DOYVP ;FOR PIT JUMPERS
|
||
MOVI JRDWNP,A9 ;DEMON
|
||
MOVI JRDWN2,A10 ;NEXT PHASE
|
||
MOVE *A13(HULKTYP),A1
|
||
SUBK 1,A1
|
||
JRZ RTAG4X
|
||
MOVI DJRDWNP,A9 ;REGULAR SOLDIER
|
||
MOVI DJRDWN2,A10 ;NEXT PHASE
|
||
RTAG4X
|
||
MOVE A11,*A8(OXVEL),L
|
||
JSRP FRANIMQ
|
||
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
|
||
JSRP FRANIMQ
|
||
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 4,A0 ;5
|
||
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(OYVEL),A0,L
|
||
JRNZ CKY2
|
||
MOVI 05000H,A0
|
||
MOVE A0,*A8(OYVEL),L
|
||
CKY2 MOVE *A8(OYPOS),A0
|
||
MOVE @JUMPXY,A1
|
||
CMP A0,A1
|
||
JRGT CKXYTOP
|
||
|
||
MOVK 1,A0
|
||
MOVE A0,*A13(HAGE)
|
||
|
||
;READY FOR JUMP DOWN
|
||
;CHANGE VELOCITY HERE
|
||
CREATE0 DOYV1
|
||
MOVI JDWN,A9 ;AXE GRUNT
|
||
MOVI JDWN2,A10 ;NEXT PHASE
|
||
MOVE *A13(HULKTYP),A1
|
||
SUBK 1,A1
|
||
JRZ RTAG6
|
||
MOVI DJDWN,A9 ;SOLDIER GRUNT
|
||
MOVI DJDWN2,A10 ;NEXT PHASE
|
||
RTAG6
|
||
JSRP FRANIMQ
|
||
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
|
||
JSRP FRANIMQ
|
||
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
|
||
CREATE0 DOYV
|
||
MOVI JRDWN,A9 ;DEMON
|
||
MOVI JRDWN2,A10 ;NEXT PHASE
|
||
MOVE *A13(HULKTYP),A1
|
||
SUBK 1,A1
|
||
JRZ RTAG4
|
||
; CREATE0 MYSHAD
|
||
MOVI DJRDWN,A9 ;REGULAR SOLDIER
|
||
MOVI DJRDWN2,A10 ;NEXT PHASE
|
||
RTAG4
|
||
MOVI -8800H,A0 ;12
|
||
MOVE A0,*A8(OXVEL),L
|
||
JSRP FRANIMQ
|
||
MOVE A10,A9
|
||
JRUC JINOUT
|
||
|
||
|
||
|
||
;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,DGP2,BOOBP
|
||
|
||
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
|
||
JSRP FRANIMQ
|
||
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)
|
||
MOVE *A8(OPLINK),A0,L
|
||
CMP A0,A13
|
||
JRZ NONEW
|
||
|
||
;GRUNT WITHOUT AN OBJECT?
|
||
.IF DEBUG
|
||
LOCKUP
|
||
EINT
|
||
.ENDIF
|
||
|
||
DIE
|
||
; MOVI CLSENMY|TYPHULK,A5 ;1/7/92
|
||
; MOVE A5,*A8(OID)
|
||
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 HULK_EXP ;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
|
||
sll 32-2,a11
|
||
srl 32-2,a11
|
||
INC A11 ;A11=FRANIM LIST CNT
|
||
MOVE A11,*A13(IBAT)
|
||
sll 32-1,a9
|
||
srl 32-1-5,a9 ;*32
|
||
; 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 JSRP FRANIMQ
|
||
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 [16H,0],[0,0],[1BH,0],[-2,0]
|
||
YOFSET .LONG [15H,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
|
||
MOVI BURST,A10
|
||
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 CALLA 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,BAT4OF,BBHIT
|
||
BBAT .LONG BAT8OS,BAT8O,BAT8OA,BAT8OF,BBHIT
|
||
CBAT .LONG BAT2OS,BAT2O,BAT2OA,BAT2OF,BBHIT
|
||
DBAT .LONG BAT10OS,BAT10O,BAT10OA,BAT10OF,BBHIT
|
||
|
||
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
|
||
JSRP FRANIMQ
|
||
MOVE A10,A9
|
||
JSRP FRANIMQ
|
||
|
||
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
|
||
CMPI WAVE_RAM+6*16*9,A0
|
||
JRLE HU1
|
||
MOVI WAVE_RAM+6*16*9,A0
|
||
YSID: RETS
|
||
|
||
DO_DIFF:
|
||
MOVI HSPEED,A1
|
||
DO_DIFF2:
|
||
MOVE *A13(LEVEL),A0
|
||
JRNN Z0
|
||
MOVK 4,A0
|
||
MOVE A0,*A13(LEVEL)
|
||
|
||
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
|
||
MOVK 0FH,A2
|
||
AND A2,A0
|
||
SLL 5,A0
|
||
ADDI JTBL,A0
|
||
MOVE *A0,A2,L
|
||
JUMP A2
|
||
|
||
JTBL .LONG IN1,IN1,IN2,IN3,IN4,IN5,IN6,IN7,IN8
|
||
.LONG IN1,IN2,IN3,IN4,IN5,IN6,IN7,IN8
|
||
.LONG 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,A3,L
|
||
JUMP A3
|
||
|
||
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 39,A0
|
||
JRZ PART2
|
||
CMPI 41,A0
|
||
JRZ ABOS
|
||
CMPI 38,A0
|
||
JRZ GOUNDR
|
||
CMPI 29,A0
|
||
JRZ GOAGN
|
||
CMPI 22,A0
|
||
JRZ GB
|
||
CMPI 21,A0
|
||
JRZ GB
|
||
CMPI 9,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
|
||
|
||
GOUNDR
|
||
CREATE0 DOGUN
|
||
RETS
|
||
PART2
|
||
CREATE0 PART2A
|
||
RETS
|
||
PART2A
|
||
;PART 2 OF LAST LOCKDOWN WAVE
|
||
;AHMEDS STILL ALIVE?
|
||
SLEEPK 30
|
||
MOVI AHMDPID,A0
|
||
CLR A1
|
||
NOT A1
|
||
CALLA EXISTP
|
||
JRNZ PART2A
|
||
MOVI 41,A0
|
||
CALLA DOLORD
|
||
movi youwillsnd,a0
|
||
calla ONESND
|
||
DIE
|
||
youwillsnd .word >f9f7,32,>8153,0 ;YOU WILL FRY
|
||
|
||
ABOS CREATE0 DO_WINNER
|
||
MOVI LORDPID,A0
|
||
CALLA KIL1C
|
||
move a8,a2
|
||
clr a8
|
||
CREATE BOSSPID,aboss
|
||
move a2,a8
|
||
RETS
|
||
DOGUN
|
||
;TURN ON ELECTRIC BOLTS
|
||
CREATE0 DO_WINNER
|
||
SLEEP 200
|
||
CREATE FUTUREPID,BOLTS
|
||
|
||
MOVI LORDPID,A0
|
||
CALLA KIL1C
|
||
|
||
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
|
||
CREATE0 ATME
|
||
MOVE @WORLDTLX+16,A8
|
||
ADDK 5,A8 ;A8=X TARGET LINE TO TRIGGER SCROLL
|
||
CLR A9 ;A9=0 MEANS NOT CHECKING FOR Y TARGET
|
||
MOVI PATHUND,A10 ;INDICATES NEW SCROLL WITH SCRL TABLE
|
||
MOVI 08000H,A0
|
||
MOVE A0,@HZSPD,L
|
||
CREATE TARGPID,TARGET
|
||
|
||
MOVE @WORLDTLX+16,A9
|
||
ADDI 60,A9
|
||
FIXR1 SLEEPK 10
|
||
MOVE @WORLDTLX+16,A0
|
||
CMP A0,A9
|
||
jrnc FIXR1
|
||
MOVK 1,A0 ;FROM LEFT OF SCRN
|
||
MOVE A0,@RUNIN
|
||
DIE
|
||
|
||
|
||
PATHUND ;DIR,CNT
|
||
.WORD 9,2*60,3,0550H*2,0
|
||
|
||
AWARP
|
||
;CREATE A INSTANT WARP DISC
|
||
;START SCROLL INTO AIRPORT
|
||
CREATE0 DLYWRP
|
||
RETS
|
||
|
||
DLYWRP SLEEP 120
|
||
CREATE0 DO_WINNER
|
||
SLEEP 90
|
||
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
|
||
DIE
|
||
PATHAIR
|
||
.WORD 3,3D0H,15,1,2,700H,16,1,1,0F8H/2,3,320H/2
|
||
.WORD 17,1,1,504H/2,19,1,0
|
||
GOAGN
|
||
;START SCROLL INTO END OF AIRPORT
|
||
CREATE0 DLYGO
|
||
RETS
|
||
|
||
DLYGO SLEEP 120
|
||
CREATE0 DO_WINNER
|
||
SLEEP 90
|
||
MOVK 13,A0 ;10
|
||
MOVE A0,@CTOTAL
|
||
MOVK 30,A0
|
||
MOVE A0,@WAVE
|
||
MOVI LORDPID,A0
|
||
CALLA KIL1C
|
||
;NEW RECTANGLES HERE?
|
||
CLR A0
|
||
MOVE A0,@CRSRAM,L
|
||
MOVI PATHEND,A10 ;INDICATES NEW SCROLL WITH SCRL TABLE
|
||
MOVE @WORLDTLX,A8,L
|
||
SRL 16,A8
|
||
ADDI 200,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
|
||
DIE
|
||
PATHEND .WORD 3,362H/2,1,290/2,0
|
||
|
||
SHSTG
|
||
;SEND GROUP OF HOSTAGES DOWN AT PLAYER FROM ELEVATOR IN LOCKDOWN
|
||
MOVK 5,A8
|
||
CREATE0 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
|
||
SLW1 SLEEP 120
|
||
movi CLSNEUT+TYPICON+SUBBOMBSN,a0
|
||
CLR A1
|
||
NOT A1
|
||
CALLA EXISTOBJ
|
||
*Z BIT SET = NO OBJECT, A0 = 0*
|
||
JRNZ SLW1
|
||
MOVK 10,A0
|
||
CALLR CHKFREE
|
||
JRNE SLW1
|
||
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
|
||
CREATE0 DOWIN
|
||
RETS
|
||
DOWIN
|
||
MOVE @STATUS,A0
|
||
CMPI 3,A0
|
||
JRNZ DW1
|
||
CREATE0 DO_WINNER
|
||
SLEEP 80
|
||
DW1 SLEEPK 10
|
||
MOVK 1,A10 ;FIRST RACKUP
|
||
CREATE0 WAITTNT
|
||
DIE
|
||
TAUNT
|
||
PUSH A10
|
||
CLR A10 ;0=FIRST TAUNT
|
||
CREATE0 WAITTNT
|
||
PULL A10
|
||
RETS
|
||
SCRLAGN
|
||
;START SCROLLING UP INTO DESERT AGAIN
|
||
CREATE0 DOAGN
|
||
RETS
|
||
BRING60
|
||
;WARP LOCKDOWN 1
|
||
;BRING OUT A BTR60
|
||
CREATE FUTUREPID,BTR60A
|
||
CREATE FUTUREPID,GBK
|
||
RETS
|
||
GBK SLEEP 6*60
|
||
GBK2 SLEEP 60
|
||
MOVK 10,A0
|
||
CALLR CHKFREE
|
||
JRNE GBK2
|
||
CREATE WARPPID,GOBACK
|
||
DIE
|
||
NXC CMPI 4,A0
|
||
JRNZ NXW
|
||
CREATE0 DOWINX
|
||
RETS
|
||
*
|
||
*CHECK FOR A0 FREE PROCESSES
|
||
*RET EQ IF THEY ARE FREE, NE IF FAIL
|
||
CHKFREE
|
||
MMTM SP,A0
|
||
MOVI OFREE,A1,L
|
||
CHKFREL
|
||
MOVE *A1,A1,L
|
||
JREQ CHKFREX
|
||
DSJS A0,CHKFREL
|
||
CHKFREX
|
||
MOVE A0,A0
|
||
MMFM SP,A0
|
||
RETS
|
||
|
||
DOWINX
|
||
;WHEN WAVE IS FINISHED, CREATE A PROC TO BLINK ELEVATOR MESSAGE!
|
||
CREATE0 DO_WINNER
|
||
SLEEP 60
|
||
CREATE DROPPID,TAKEEL
|
||
DIE
|
||
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
|
||
MOVK 7,A0
|
||
AND A0,A4
|
||
SLL 5,A4 ;*32 FOR LONG WORD LOOKUP TABLE
|
||
|
||
MOVE *A13(HULKTYP),A0
|
||
MOVK 7,A1
|
||
AND A1,A0
|
||
SLL 5,A0
|
||
ADDI HLISTS,A0
|
||
MOVE *A0,A5,L
|
||
JUMP A5
|
||
|
||
HLISTS .LONG NORM,NORM1,NORM2,NORM3,NORM4
|
||
.LONG NORM,NORM1,NORM2,NORM3,NORM4
|
||
|
||
;AKHBOOB GRUNT
|
||
NORM4 MOVI BOOB_DN,A9
|
||
RETS
|
||
|
||
;FLAMING GRUNT
|
||
NORM3
|
||
MOVE *A13(LEVEL),A0
|
||
CMPI 2,A0 ;3
|
||
JRLT SLOBF
|
||
CMPI 5,A0 ;6
|
||
JRLT MEDBF
|
||
ADDI WALK_LISTFBF,A4
|
||
JRUC SPO
|
||
MEDBF ADDI WALK_LISTMBF,A4
|
||
JRUC SPO
|
||
SLOBF ADDI WALK_LISTBF,A4 ;CALCULATE OFFSET IN TABLE
|
||
JRUC SPO
|
||
|
||
|
||
;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,SPINF,SPINF
|
||
|
||
|
||
|
||
**************************************************************************
|
||
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
|
||
JRZ NOTGD
|
||
CLR A1
|
||
MOVE A1,*A0(PROCID) ;SEPT 20
|
||
NOTGD MOVE @HULK_CNT,A0
|
||
DEC A0
|
||
MOVE A0,@HULK_CNT
|
||
JRNN ALO
|
||
CLR A0
|
||
MOVE A0,@HULK_CNT
|
||
ALO CREATE0 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
|
||
jrz kj5
|
||
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
|
||
kj5 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 FRQDELDIE
|
||
|
||
HSO jauc DELOBJDIE ;TO MANY EXPS CAUSE SCRN GLITCH
|
||
|
||
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(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 158,A0 ;199
|
||
MOVI 199,A0 ;199
|
||
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!!
|
||
MOVI 160,A0 ;158
|
||
MOVE A0,*A8(OZPOS)
|
||
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 3,A0
|
||
; JRZ FLMDIE
|
||
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 FRQDELDIE
|
||
|
||
DLTS .LONG DDLIST,DLIST,DLISTA,DDLISTF,DDLIST
|
||
DCLTS .LONG DBLSTS,BLSTS,ALSTS,DBLSTS,DBLSTS
|
||
|
||
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
|
||
jauc DELOBJDIE
|
||
|
||
BIGEXP
|
||
MOVI 158,A0 ;199
|
||
MOVE A0,*A8(OZPOS)
|
||
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
|
||
jauc FRQDELDIE
|
||
|
||
|
||
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 @WAVE,A3
|
||
SUBK 32,A3
|
||
JAZ PUSHME
|
||
|
||
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 ;199 ;158
|
||
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
|
||
MOVI ALTEXP1,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 FRQDELDIE
|
||
|
||
;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
|
||
;FLAMING GRUNT
|
||
DDLISTF .LONG DVDIEF,DHDIERF,DHDIERF,DHDIERF,DVDIEF,DHDIEF,DHDIEF,DHDIEF
|
||
;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
|
||
|
||
;FLAMING GRUNT
|
||
DHDIEF:
|
||
.LONG GRNTFLM1
|
||
.WORD NEWPALET|3
|
||
.long RDBOOM
|
||
.LONG GRNTFLM2
|
||
.WORD 3
|
||
.LONG GRNTFLM3
|
||
.WORD 3
|
||
.LONG GRNTFLM4
|
||
.WORD 3
|
||
.LONG GRNTFLM5
|
||
.WORD 3
|
||
.LONG GRNTFLM6
|
||
.WORD 3
|
||
.LONG 0
|
||
DHDIERF:
|
||
DVDIEF:
|
||
.LONG GRNTFLM1
|
||
.WORD NEWPALET|3
|
||
.long RDBOOM
|
||
.LONG GRNTFLM2
|
||
.WORD 3
|
||
.LONG GRNTFLM3
|
||
.WORD 3
|
||
.LONG GRNTFLM4
|
||
.WORD 3
|
||
.LONG GRNTFLM5
|
||
.WORD 3
|
||
.LONG GRNTFLM6
|
||
.WORD 3
|
||
.LONG 0
|
||
|
||
|
||
;
|
||
;8 1 2
|
||
;7 3
|
||
;6 5 4
|
||
;
|
||
;FOR FLAMING GRUNT
|
||
WALK_LISTBF:
|
||
.LONG FTF_PWK_UP,FTF_PWK_UPRGT,FTF_PWK_RGT,FTF_PWK_DNRGT,FTF_PWK_DN
|
||
.LONG FTF_PWK_DNLFT,FTF_PWK_LFT,FTF_PWK_UPLFT
|
||
WALK_LISTMBF:
|
||
.LONG TFM_PWK_UP,TFM_PWK_UPRGT,TFM_PWK_RGT,TFM_PWK_DNRGT,TFM_PWK_DN
|
||
.LONG TFM_PWK_DNLFT,TFM_PWK_LFT,TFM_PWK_UPLFT
|
||
WALK_LISTFBF:
|
||
.LONG TFF_PWK_UP,TFF_PWK_UPRGT,TFF_PWK_RGT,TFF_PWK_DNRGT,TFF_PWK_DN
|
||
.LONG TFF_PWK_DNLFT,TFF_PWK_LFT,TFF_PWK_UPLFT
|
||
|
||
;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
|
||
;
|
||
SPINF: ;FLAMING GRUNT
|
||
.LONG FLM12R2,FLM11R3,FLM9R4,FLM8R3,FLM6R5,FLM8R3,FLM9R4,FLM11R3
|
||
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
|
||
|
||
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
|
||
|
||
|
||
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
|
||
|
||
PUNCHSND .WORD >F5E5,20,>812B,0
|
||
|
||
DOPNCH:
|
||
;A9=PLAYER 1 OR 2
|
||
;THIS AHMED IS PUNCHING
|
||
;START PUNCH
|
||
MOVI PUNCHSND,A0
|
||
CALLA ONESND
|
||
|
||
CALLA 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
|
||
JSRP FRANIMQ
|
||
MOVI PUNCHSND,A0
|
||
CALLA ONESND
|
||
MOVE A10,A9
|
||
JSRP FRANIMQ
|
||
MOVI PUNCHSND,A0
|
||
CALLA ONESND
|
||
;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
|
||
|
||
MOVK 4,A3 ;20
|
||
MOVE A3,*A13(DIS) ;CHANGE BASED ON HULKS SPEED?
|
||
|
||
MOVE @WAVE,A0
|
||
SUBK 32,A0
|
||
JRNZ RATS
|
||
|
||
MOVI 07FFFH,A3 ;TAKE OUT
|
||
MOVE A3,*A13(NOFLMS)
|
||
CLR A0
|
||
MOVE A0,*A13(CFLAGS)
|
||
MOVE A0,*A13(GOCRNR),L
|
||
JRUC CRATE_IN
|
||
|
||
RATS MOVE *A13(CFLAGS),A0 ;RUNNING OUT
|
||
ORI 2,A0
|
||
MOVE A0,*A13(CFLAGS)
|
||
|
||
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)
|
||
CALLA 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
|
||
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
|
||
|
||
|
||
|
||
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)
|
||
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(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 A0,*A13(BNCING)
|
||
|
||
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
|
||
|
||
SKGHXT .LONG 0,GBTML,GBTML,SKGLFTL,GTOPL,GTOPL,GTOPL,SKGRGTL,SKGRGTL
|
||
SHXT .LONG 0,BTML,BTML,SLFTL,TOPL,TOPL,TOPL,SRGTL,SRGTL
|
||
|
||
|
||
.END
|
||
|