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