total-carnage/FIEND.ASM

2552 lines
50 KiB
NASM
Raw Permalink Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

**************************************************************
*
* Software: Mark Turmell
* Initiated: 12/3/89
*
* Modified: !
*
* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC.
*
*.Last mod - 1/7/92 13:23
**************************************************************
.FILE 'FIEND.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 "IMGTBL.GLO"
.INCLUDE "GAME.EQU"
.INCLUDE "FINGRNT.TBL"
.include "\video\sys\gsp.inc"
.include "shawn.hdr"
;SOUNDS EXTERNAL
.REF EXP2HIB,ALTEXP5,EXP5,SALTXP4
.REF FNDSND,UGH2,UGH3,EXP3,EXP2HI,TOTCARN,CHUCK,SQUISH
.REF ALTEXP1,AGLSEXP,FIREDI
.REF UGH1,UGH4
;SYMBOLS EXTERNALLY DEFINED
.REF bomb_neutron,SHK_ON,RNDRNG0
.REF DO_DIFF2,INTO,SPINFLGS,P1DATA,P2DATA,HALT,PLYROBJS
.ref FRANIM,FRANIMQ
.REF PCNT,FLASHME,SCRADD2,RNDRNG,RANDOM,WAVE,PBLSTS
.REF RANDPER,PCTOT,CHUNK_OBJ,GETFPAL,XBOOM2,BOOM2
.REF BLSTS,GPALOBJ,TBLST,SHAKEME,BLSTS2,BOOMS
; .REF GOBACK
.ref sine_get,PLYRPRCS,GET_WVADDR,DO_GOOJ,OBJOFF
.ref SLM,OUT_FLG
.REF SHORT_PLYR
.ref bossmeterv
;SYMBOLS DEFINED IN THIS FILE
.DEF HIT_TURET,MORE2,MORE3,FLAMES,SCORE_IT,FAME4,FAME2,FAME3
.DEF YKIL_FT,KILL_F2,PUSH_FT,YKIL_FT2,XYSKOBJ,FND_NOWLK
.DEF KILL_CBALL,GETUGH,KBM,PUSHME,JFLAMES
.DEF MAXFND,FND_CNT
;UNINITIALIZED RAM DEFINITIONS
.BSS MAXFND,16 ;MAXIMUM ALLOWED ON SCRN THE WAVE
.BSS FND_CNT,16 ;CURRENT TOTAL FIENDS ON SCRN
.BSS FND_NOWLK,16 ;1=DO NOT WALK, 0=WALK IF YOU LIKE
.bss fndnumfire,16 ;# of firing fiends
;EQUATES FOR THIS FILE
HITFND .EQU 4*30
HITTRT .EQU 20*30 ;30*30 ;ABOVE T72 TANK
;HITTRT2 .EQU 15*30 ;BTR60 TURRET ;19*30
HITTRT2 .EQU 5*30 ;NORMAL BTR60 TURRET
HITTRT2A .EQU 9*30 ;BTR60 TURRET FOR ROADWAY
HITTRT3 .EQU 25*30 ;SAND BAG GUNNER
HITTRT4 .EQU 400*30 ;BOOB SHIP TURRET
;KPTSOBJ .EQU PDATA ;UHL
;KPTSOBJ IS DEFINED IN T72.ASM
;Fiend process offsets
WORDPD DIS,2 ;Object distance count
WORDPD SK_DIR,4 ;Seek dir 1-8
WORDPD LEVEL,5 ;Difficulty level
APTRPD KPTANKO,6
;KPTANKO IS DEFINED IN ARAB.ASM
;HSPD .EQU PDATA+128
;H2SPD .EQU PDATA+160
;VSPD .EQU PDATA+192
;V2SPD .EQU PDATA+224
WORDPD ABSRB,16 ;ABSRB IS REFERENCED IN ARAB.ASM
WORDPD SQ_NUM,17 ;Squat #
WORDPD JFLG,18 ;!0=Jumping
WORDPD INDEX,19 ;0-4
WORDPD DIR,20 ;Current direction 1-8
APTRPD fndsp_p,21 ;*Spit process or 0
APTRPD KPTSO,22 ;
;THIS IS SAME AS IN T72.ASM
;TANK/SHRAPNEL BULLET DATA STRUCTURE
BNCS .EQU PDATA ;UHW
LAST .EQU PDATA+16 ;UHW
FDLY .EQU PDATA+32 ;UHW ;FRANIM DELAY
.TEXT
********************************
;ON TOP OF GUNPIT GUNNER
;MORE EXPLOSIONS FROM PIT
MOREP MOVE A8,A9 ;A9=TANK BASE IMG PNTR
MOVK 10,A10 ;SEND MORE EXPLOSIONS OUT OF OLD TURRET AREA
ZMP SLEEPK 1
CREATE FUTUREPID,SMLEP
MOVI ALTEXP5,A0
CALLA ONESND
MOVI EXP5,A0
CALLA ONESND
DSJ A10,ZMP
DIE
********************************
MOREG
;ON TANK BASE DEATH - GREY CLOUDS
;MORE EXPLOSIONS FROM TANK
MOVE A8,A9 ;A9=TANK BASE IMG PNTR
MOVI 80,A10 ;SEND MORE EXPLOSIONS OUT OF OLD TURRET AREA
GZM1 SLEEPK 3
CREATE FUTUREPID,SMLE1G
DSJ A10,GZM1
DIE
MORE2
CREATE0 MOREG
; CREATE0 MORESND
; MOVE A0,*A13(PDATA),L
;ON TANK BASE DEATH
;MORE EXPLOSIONS FROM TANK
MOVE A8,A9 ;A9=TANK BASE IMG PNTR
MOVI 190,A10 ;SEND MORE EXPLOSIONS OUT OF OLD TURRET AREA
CREATE0 DBMS
ZM1
SLEEPK 1
CREATE FUTUREPID,SMLE1
DSJ A10,ZM1
; MOVE *A13(PDATA),A0,L
; CALLA KILL
DIE
DBMS
JSRP BOOMS
SLEEP 60
DIE
********************************
MOREZ
MOVK 30,A10 ;35 ;FOR ON ROAD TURRET BLOW
JRUC MRZ
MORE
MOVI 70,A10
MRZ MOVE *A8(OPLINK),A0,L
;MORE EXPLOSIONS FROM TANK
MOVE *A0(KPTANKO),A9,L
MOVI ALTEXP5,A0
CALLA ONESND
SLEEPK 10
;SEND MORE EXPLOSIONS OUT OF OLD TURRET AREA
CREATE0 DBMS
SM1 SLEEPK 1
CREATE FUTUREPID,SMLE
MOVI EXP2HIB,A0
CALLA ONESND
DSJ A10,SM1
DIE
********************************
MYTYP .EQU PDATA+448 ;UHW 0-3
MORE3 MOVE A8,A9
;EXPLOSIONS FROM MID LINE OF BTR60 VEHICLE
;A8=VEHICLE PNTR
MOVI 044H,A10
MOVE A8,A11
MOVE *A8(OPLINK),A0,L
MOVE *A0(MYTYP),A0
CMPI 5,A0
JRC XM1
MOVK 10,A10 ;10
XM1 SLEEPK 1
CREATE FUTUREPID,SMLE2A
CREATE FUTUREPID,SMLE2A
DSJ A10,XM1
DIE
********************************
SMLE2A MOVI KBMJ,A14
CALLR ALGN
MOVE *A11(OFLAGS),A2 ;STRETCH EXPLOSIONS OUT OVER LENGTH OF BTR60
MOVI -6AH,A0
MOVI 2EH,A1
BTST B_FLIPH,A2
JRNZ WB1
MOVI -2EH,A0
MOVI 6AH,A1
WB1 CALLA RNDRNG
MOVE *A8(OXPOS),A1
ADD A0,A1
MOVE A1,*A8(OXPOS)
MOVE *A8(OYPOS),A1
ADDK 8,A1
MOVE A1,*A8(OYPOS)
MOVI TBLST,A11 ;COLORFUL BURSTS
MOVI -010000H,A0
MOVI 010000H,A1
CALLA RNDRNG
MOVE A0,*A8(OXVEL),L
MOVI -050000H,A0
MOVI 030000H,A1
JRUC SMLE2
SMLEP ;FOR SAND PIT GUNNER
MOVI BOOMN,A11
MOVI KBMX,A14
CALLR ALGN
MOVE *A8(OYPOS),A0
SUBK 16,A0
MOVE A0,*A8(OYPOS)
MOVI -020000H,a0
MOVI 020000H,a1
CALLA RNDRNG
MOVE A0,*A8(OXVEL),L
MOVI -020000H,a0
MOVI 020000H,a1
JRUC SMLE2
SMLE1
MOVI BOOMN,A11
MOVI KBMX,A14
CALLR ALGN
SMO MOVI -060000H,a0
MOVI 060000H,a1
CALLA RNDRNG
MOVE A0,*A8(OXVEL),L
MOVI -060000H,a0
MOVI 060000H,a1
JRUC SMLE2
SMLE1G ;GREY CLOUDS
MOVI BOOMNG,A11
MOVI KBMXG,A14
CALLR ALGN
MOVI -018000H,a0
MOVI 018000H,a1
CALLA RNDRNG
MOVE A0,*A8(OXVEL),L
MOVI -018000H,a0
MOVI 018000H,a1
JRUC SMLE2
SMLE
MOVI KBM,A14 ;BLOOD
CALLR ALGN
;FROM MINE LAYER DEATH
MOVI TBLST,A11 ;BOOMN,A9
MOVI -050000H,a0
MOVI 050000H,a1
CALLA RNDRNG
MOVE A0,*A8(OXVEL),L
MOVI -050000H,a0
MOVI 050000H,a1
SMLE2
CALLA RNDRNG
MOVE A0,*A8(OYVEL),L
MOVI FUTUREPID,A0
MOVE A0,*A13(PROCID)
MOVE A11,A9
jauc FRQDELDIE
********************************
;START X NUMBER OF FLAME PACKETS ON JETS
;DIFFERENT RATES
;ANGLED CORRECTLY
JFLAMES ;A8=JET IMG PNTR
MOVI FIREDI,A0
CALLA ONESND
MOVE A8,A11
MOVK 7,A10
JFLMS PUSH A10
MOVE A11,A9
MOVI KBMZ,A14
CALLR ALGN
PULL A10
MOVE A10,A0
SLL 4,A0
MOVE *A11(OFLAGS),A4
BTST B_FLIPH,A4
JRNZ JOFLM1
MOVI JFXOF2,A1 ;BTR60 TRAVELLING TO RIGHT
ADD A0,A1
MOVE *A1,A1
MOVE *A8(OXPOS),A2
ADD A1,A2
MOVE A2,*A8(OXPOS)
MOVI JFYOF2,A1
ADD A0,A1
MOVE *A1,A1
MOVE *A8(OYPOS),A2
ADD A1,A2
MOVE A2,*A8(OYPOS)
SLL 1,A0
MOVI JFLOF2,A1
JRUC JOFLM2
JOFLM1 MOVI JFXOF,A1 ;BTR60 TRAVELLING TO LEFT
ADD A0,A1
MOVE *A1,A1,W
MOVE *A8(OXPOS),A2
ADD A1,A2
MOVE A2,*A8(OXPOS)
MOVI JFYOF,A1
ADD A0,A1
MOVE *A1,A1,W
MOVE *A8(OYPOS),A2
ADD A1,A2
MOVE A2,*A8(OYPOS)
SLL 1,A0
MOVI JFLOF,A1
JOFLM2 ADD A0,A1
MOVE *A1,A9,L ;FLAME LIST
CREATE FUTUREPID,JDOFLM
SLEEPK 1
DSJ A10,JFLMS
SLEEP 100
MOVI FIREDI,A0
CALLA ONESND
SLEEP 100
MOVI FIREDI,A0
CALLA ONESND
DIE
JDOFLM MOVE A9,A10
MOVI 18*2,A11 ;22 SEC ROUGHLY
JRUC DOF1
;JET FACING LEFT
JFXOF .WORD 0,058H,062H,0-50,12H-50,20H-50
.WORD 32H-50,3CH-50
JFYOF .WORD 0,0FFC4H,0FFCCH,0FFACH,0FFBCH,0FFBBH
.WORD 0FFAFH,0FFA6H
JFLOF .LONG 0,FAME3,FAME2,FAME6,FAME1,FAME2
.LONG FAME4,FAME5
;JET FACING RIGHT
JFXOF2 .WORD 0,0FFA4H,0FFB6H,0,18H,24H ;SMALLS
.WORD 32H,3CH
JFYOF2 .WORD 0,0FFC4H,0FFCCH,0FFACH,0FFBCH,0FFBBH
.WORD 0FFAFH,0FFA6H
JFLOF2 .LONG 0,BFAME3,BFAME2,BFAME6,BFAME1,BFAME2
.LONG BFAME4,BFAME5
;START X NUMBER OF FLAME PACKETS ON BTR60
;DIFFERENT RATES
;ANGLED CORRECTLY
FLAMES ;A8=BTR60 IMG PNTR
SLEEPK 20
MOVE A8,A11
MOVK 10,A10
FLMS PUSH A10
MOVE A11,A9
MOVI KBMZ,A14
CALLR ALGN
PULL A10
MOVE *A11(OXVEL),A0,L
MOVE A0,*A8(OXVEL),L
MOVE A10,A0
SLL 4,A0
MOVE *A11(OFLAGS),A4
BTST B_FLIPH,A4
JRZ OFLM1
MOVI FXOF2,A1 ;BTR60 TRAVELLING TO RIGHT
ADD A0,A1
MOVE *A1,A1
MOVE *A8(OXPOS),A2
ADD A1,A2
MOVE A2,*A8(OXPOS)
MOVI FYOF2,A1
ADD A0,A1
MOVE *A1,A1
MOVE *A8(OYPOS),A2
ADD A1,A2
MOVE A2,*A8(OYPOS)
SLL 1,A0
MOVI FLOF2,A1
JRUC OFLM2
OFLM1 MOVI FXOF,A1 ;BTR60 TRAVELLING TO LEFT
ADD A0,A1
MOVE *A1,A1,W
MOVE *A8(OXPOS),A2
ADD A1,A2
MOVE A2,*A8(OXPOS)
MOVI FYOF,A1
ADD A0,A1
MOVE *A1,A1,W
MOVE *A8(OYPOS),A2
ADD A1,A2
MOVE A2,*A8(OYPOS)
SLL 1,A0
MOVI FLOF,A1
OFLM2 ADD A0,A1
MOVE *A1,A9,L ;FLAME LIST
CREATE FUTUREPID,DOFLM
SLEEPK 1
DSJ A10,FLMS
DIE
DOFLM MOVE A9,A10
MOVI 22*2,A11 ;22 SEC ROUGHLY
DOF1 JSRP FRANIMQ
DEC A11
JRZ DOFO
MOVE A10,A9
CALLA SCRTST
JRZ DOF1
DOFO jauc DELOBJDIE
;BTR60 FACING LEFT
FXOF .WORD 0,5CH,6CH-34,6CH-97,6CH-84,6CH-58 ;SMALLS
.WORD 6CH-51,6CH-98,6CH-29,6CH-70,6CH-99
FYOF .WORD 0,-28,-28-18,-28+12,-28+4,-28-8
.WORD -28-7,-28-25,-28-14,-28-10,-28-4
FLOF .LONG 0,FAME3,FAME2,FAME1,FAME1,FAME2
.LONG FAME4,FAME5,FAME6,FAME5,FAME4
;BTR60 FACING RIGHT
FXOF2 .WORD 0,-5CH,-6CH+34,-6CH+97,-6CH+84,-6CH+58 ;SMALLS
.WORD -6CH+51,-6CH+98,-6CH+29,-6CH+70,-6CH+99
FYOF2 .WORD 0,-28,-28-18,-28+12,-28+4,-28-8
.WORD -28-7,-28-25,-28-14,-28-10,-28-4
FLOF2 .LONG 0,BFAME3,BFAME2,BFAME1,BFAME1,BFAME2
.LONG BFAME4,BFAME5,BFAME6,BFAME5,BFAME4
FAME1 .LONG LFLM1 ;FLAMES ANGLE TO RIGHT
.WORD FLIPBITS|3,0
.LONG LFLM2
.WORD 3
.LONG LFLM3
.WORD 3
.LONG LFLM4
.WORD 3
.LONG LFLM5
.WORD 3
.LONG LFLM6
.WORD 3
.LONG 0
FAME2 .LONG LFLM1 ;FLAMES ANGLE TO RIGHT
.WORD FLIPBITS|2,0
.LONG LFLM2
.WORD 2
.LONG LFLM3
.WORD 2
.LONG LFLM4
.WORD 2
.LONG LFLM5
.WORD 2
.LONG LFLM6
.WORD 2
.LONG 0
FAME3 .LONG LFLM1 ;FLAMES ANGLE TO RIGHT
.WORD FLIPBITS|5,0
.LONG LFLM2
.WORD 5
.LONG LFLM3
.WORD 5
.LONG LFLM4
.WORD 5
.LONG LFLM5
.WORD 5
.LONG LFLM6
.WORD 5
.LONG 0
FAME4 .LONG FLM1 ;FLAMES ANGLE TO RIGHT
.WORD FLIPBITS|3,0
.LONG FLM2
.WORD 3
.LONG FLM3
.WORD 3
.LONG FLM4
.WORD 3
.LONG FLM5
.WORD 3
.LONG FLM6
.WORD 3
.LONG 0
FAME5 .LONG FLM1 ;FLAMES ANGLE TO RIGHT
.WORD FLIPBITS|2,0
.LONG FLM2
.WORD 2
.LONG FLM3
.WORD 2
.LONG FLM4
.WORD 2
.LONG FLM5
.WORD 2
.LONG FLM6
.WORD 2
.LONG 0
FAME6 .LONG FLM1 ;FLAMES ANGLE TO RIGHT
.WORD FLIPBITS|4,0
.LONG FLM2
.WORD 4
.LONG FLM3
.WORD 4
.LONG FLM4
.WORD 4
.LONG FLM5
.WORD 4
.LONG FLM6
.WORD 4
.LONG 0
;FLAMES FACING OTHER WAY
BFAME1 .LONG LFLM1 ;FLAMES ANGLE TO RIGHT
.WORD FLIPBITS|3,(M_FLIPH)
.LONG LFLM2
.WORD 3
.LONG LFLM3
.WORD 3
.LONG LFLM4
.WORD 3
.LONG LFLM5
.WORD 3
.LONG LFLM6
.WORD 3
.LONG 0
BFAME2 .LONG LFLM1 ;FLAMES ANGLE TO RIGHT
.WORD FLIPBITS|4,(M_FLIPH)
.LONG LFLM2
.WORD 4
.LONG LFLM3
.WORD 4
.LONG LFLM4
.WORD 4
.LONG LFLM5
.WORD 4
.LONG LFLM6
.WORD 4
.LONG 0
BFAME3 .LONG LFLM1 ;FLAMES ANGLE TO RIGHT
.WORD FLIPBITS|5,(M_FLIPH)
.LONG LFLM2
.WORD 5
.LONG LFLM3
.WORD 5
.LONG LFLM4
.WORD 5
.LONG LFLM5
.WORD 5
.LONG LFLM6
.WORD 5
.LONG 0
BFAME4 .LONG FLM1 ;FLAMES ANGLE TO RIGHT
.WORD FLIPBITS|3,(M_FLIPH)
.LONG FLM2
.WORD 3
.LONG FLM3
.WORD 3
.LONG FLM4
.WORD 3
.LONG FLM5
.WORD 3
.LONG FLM6
.WORD 3
.LONG 0
BFAME5 .LONG FLM1 ;FLAMES ANGLE TO RIGHT
.WORD FLIPBITS|2,(M_FLIPH)
.LONG FLM2
.WORD 2
.LONG FLM3
.WORD 2
.LONG FLM4
.WORD 2
.LONG FLM5
.WORD 2
.LONG FLM6
.WORD 2
.LONG 0
BFAME6 .LONG FLM1 ;FLAMES ANGLE TO RIGHT
.WORD FLIPBITS|5,(M_FLIPH)
.LONG FLM2
.WORD 5
.LONG FLM3
.WORD 5
.LONG FLM4
.WORD 5
.LONG FLM5
.WORD 5
.LONG FLM6
.WORD 5
.LONG 0
ALGN CALLA GPALOBJ ;ALLOCATE A COLOR PALETTE
CALLA STFOBJ ;STUFF OBJECT DATA
CALLA INSOBJ ;INSERT OBJECT INTO LIST
MOVE A0,A10 ;A8
clr a0
move a0,*a10(OPAL+16)
MOVE A9,A8
CALLA GETANIXY
MOVE A10,A0
MOVE *A0(OFLAGS),A4 ;SAME FLAGS AS BEFORE
ADDI 0230000H,A2 ;1C
CALLA GANISAG
MOVE A10,A8
RETS
KBM
.LONG 0,0,T72BLAST1
.WORD 282,DMAWNZ+M_FLIPH+M_NOCOLL,CLSDEAD
.LONG 0H,0H
KBMJ
.LONG 0,0,T72BLAST1
.WORD 282,DMAWNZ+M_FLIPH+M_NOCOLL,CLSNEUT
.LONG 0H,0H
KBMZ ;ARM RGT
.LONG 0,0,FLM1
.WORD 282,DMAWNZ+M_FLIPH+M_NOCOLL,CLSDEAD
.LONG 0H,0H
KBMX
.LONG 0,0,FIRE1
.WORD 282,DMAWNZ+M_FLIPH+M_NOCOLL,CLSDEAD
.LONG 0H,0H
KBMXG
.LONG 0,0,CLD1A
.WORD 282,DMAWNZ+M_FLIPH+M_NOCOLL,CLSDEAD
.LONG 0H,0H
BOOMN .LONG KBM1
.WORD 4
.LONG KBM2
.WORD 4
.LONG KBM3
.WORD 4
.LONG KBM4
.WORD 4
.LONG KBM5
.WORD 4
.LONG KBM6
.WORD 4
.LONG KBM7
.WORD 4
.LONG 0
BOOMNG .LONG OKBM1
.WORD 4
.LONG OKBM2
.WORD 4
.LONG OKBM3
.WORD 4
.LONG OKBM4
.WORD 4
.LONG OKBM5
.WORD 4
.LONG OKBM6
.WORD 4
.LONG OKBM7
.WORD 4
.LONG 0
KILL_CBALL
PUSH A1
MOVE *A8(OPLINK),A0,L
JREQ RET
CLR A1
MOVE A1,*A8(OPLINK),L
CALLA KILL
CALLA DELOBJA8
RET MMFM SP,A1
RETS
********************************
* Fiend code
* Fiend from rectangle
SUBR ONE_FND ;A9=YX, A10=Dir (1/3/5/7)
movi FND,a2
calla GET_WVADDR
move *a0(32),a1 ;Get difficulty level
move a1,*a13(LEVEL)
move *a0(16),a1 ;Wave ram cnt -1
dec a1
move a1,*a0(16)
clr a1
movy a9,a1 ;A1=Y
move a9,a0
sll 16,a0 ;A0=X
movk 1,a11 ;Sleep
jruc fiend2
********************************
* Fiend from backgnd
SUBR STRT_FND ;A8=*Fiend obj
; movi FNDPID,a0
; move a0,*a13(PROCID)
movi CLSENMY|TYPFND,a0
move a0,*a8(OID)
move a13,*a8(OPLINK),L
movk 2,a0
move a0,*a13(LEVEL)
MOVI 159,A0
MOVE A0,*A8(OZPOS)
movk 1,a10 ;DIR
movk 2,a11 ;Sleep
jruc fiend3
********************************
* From a crate
SUBR FIEND ;A8=*Src obj
movk 2,a0
move a0,*a13(LEVEL)
movk 3,a10
move *a8(OFLAGS),a0
btst B_FLIPH,a0
jrz fnd1
movk 7,a10
fnd1 move *a8(OXPOS),a0
addk 15,a0
sll 16,a0
move *a8(OYPOS),a1
subk 20,a1
sll 16,a1
movk 1,a11 ;Sleep
fiend2 movi FIEND1,a2
movi JZ,a3 ;Z
movi DMAWNZ,a4
movi CLSENMY|TYPFND,a5
clr a6
clr a7
calla BEGINOBJ2
fiend3
; movi FNDP4,a0 ;Set new pallette
; calla GETFPAL
; move a0,*a8(OPAL),L
;GET A RANDOM COLOR FOR THIS FIEND
move @vcount,A0
ANDI 01FH,A0
SLL 5,A0
MOVE A0,*A13(FND_COLOR),W
ADDI FCOLORS,A0
MOVE *A0,A0,L
CALLA GETFPAL
MOVE A0,*A8(OPAL),L
clr a0
move a0,*a8(OPAL+16)
move a10,*a13(DIR)
move a10,*a13(SK_DIR)
movi -1,a0
move a0,*a13(DIS)
move @FND_CNT,a0
inc a0
move a0,@FND_CNT
clr a0
move a0,*a13(fndsp_p),L
move a0,*a13(fjsobj_p),L
move a0,*a13(ABSRB)
move a0,*a13(SQ_NUM)
move a0,*a13(JFLG)
movi >14000,a1 ;Speed
calla DO_DIFF2
callr fiend_getfran ;Get 1st *franim for dir
move a11,a0
calla PRCSLP ;Sleep some
subk 1,a10
jrz jmponp ;Dir 1?
subk 4,a10
jrz jmponp ;Dir 5?
fndlp move @HALT,a0 ;Fiend loop
jrnz gotop
move *a13(SK_DIR),a1 ;>Do turn
move *a13(DIR),a0
cmp a0,a1
jreq noturn
callr fiend_seekdir
gotop SLEEPK 5
jruc fndlp
FCOLORS .LONG FNDP,FNDP,FNDP,FNDP,FNDP,FNDP,FNDP,FNDP,FNDP,FNDP,FNDP,FNDP
.LONG FNDP,FNDP,FNDP,FNDP,FNDP,FNDP,FNDP,FNDP,FNDP,FNDP,FNDP,FNDP
.LONG FNDP,FNDP,FNDPGRN,FNDPRED,FNDPRED,FNDPGRN,FNDPBLU,FNDPPUR
;FCOLORS2
; .LONG GRNTPNK,GRNTPNK,GRNTPNK,GRNTPNK,GRNTPNK,GRNTPNK,GRNTPNK
; .LONG GRNTPNK,GRNTPNK,GRNTPNK,GRNTPNK,GRNTPNK
; .LONG GRNTPNK,GRNTPNK,GRNTPNK,GRNTPNK,GRNTPNK,GRNTPNK,GRNTPNK
; .LONG GRNTPNK,GRNTPNK,GRNTPNK,GRNTPNK,GRNTPNK
; .LONG GRNTPNK,GRNTPNK,GRNTGRN,GRNTRED,GRNTRED,GRNTGRN,GRNTBLU
; .LONG GRNTPUR
noturn move *a13(DIS),a0 ;>Facing proper direction
jrz fndcj
jrp fndwlk
callr fiend_getfran ;Start walking
move *a13(DIR),a0
calla INTO ;Get velocity for this dir
movk 6,a0
movk 30,a1
calla RNDRNG
fndwlk dec a0
move a0,*a13(DIS)
jrz fndstmv
move *a8(OXPOS),a1
move @WORLDTLX+16,a0
sub a0,a1
move *a13(DIR),a2
subk 3,a2
jrnz fndlf
cmpi 336,a1 ;Max rgt
jrlt wlkani
movk 7,a0 ;Hit edge!
fnd180 movi -1,a1
move a1,*a13(DIS)
jruc setturn
fndlf movk 3,a0
subi 100,a1 ;SUBK 32
jrlt fnd180 ;Hit left edge?
wlkani clr a1 ;Walk FRANIM
JSRP FRANIM
jrnc fndlp ;Not at end of script?
callr fiend_getfran
jruc fndlp
fndcj move *a13(JFLG),a0
jrz noj ;Jump?
SLEEPK 20
JSRP fiend_jump
clr a0
move a0,*a13(JFLG)
SLEEPK 10
jruc fndnewmd
noj calla SCRTST ;Chk if on screen
jrnz jmponp ;Jump on player?
move @fndnumfire,a0 ;Max of 2 can fire
subk 2,a0
jrge fndnewmd
move *a13(DIR),a9
sll 5,a9
move a13,a10
move *a13(SQ_NUM),a0
jrz reg
CREATE SHOTPID,SPITIT2 ;>Squat fire
addi SQLST2,a9
jruc reg2
reg CREATE SHOTPID,SPITIT ;>Shoot
addi SQLST,a9
reg2 move a0,*a13(fndsp_p),L ;Save *process
move *a9,a9,L
JSRP FRANIMQ
move *a13(SQ_NUM),a0
jrz fndnewmd
dec a0 ;>Do squat turn
move a0,*a13(SQ_NUM)
move *a13(SK_DIR),a0 ;Seek +1
movk 7,a1
and a1,a0
inc a0
move a0,*a13(SK_DIR)
jruc gotop
fndnewmd
SLEEPK 4
clr a0 ;Jump to a random mode
movk 15,a1
calla RNDRNG
sll 5,a0
addi jmp_t,a0
move *a0,a0,L
jump a0
jmp_t .long wlk,wlk,wlk,wlkrnd,wlkrnd,spinr
.long jmponp,jmponp,jmponp,jmponp,jmponp
.long squats,squats,spinrp,spinrp,spinrp
;1=Decide to walk left or right based on what half of the screen he is on
; then spin to 3 or 7 and reset (dis), then walk.
;2=Spin to a random angle and spit
;3=Spin to a random player and spit
;4=If toward bottom of screen, check wave # and maybe
; jump up higher up on scrn.
;5=Squat mode, go to each angle and squat, sometimes shooting, but not 100%
wlk MOVE @FND_NOWLK,A0
JRNZ fndnewmd
callr getcloseplyr ;>Walk toward closer player
jrz fndnewmd
move *a0(OXPOS),a1
move *a8(OXPOS),a3
movk 3,a2 ;Left
cmp a1,a3
jrlo wlk1
movk 7,a2 ;Rgt
wlk1 move a2,*a13(SK_DIR)
movi -1,a0
move a0,*a13(DIS)
jruc gotop
wlkrnd MOVE @FND_NOWLK,A0
JRNZ fndnewmd
movi -1,a0 ;>Walk random
move a0,*a13(DIS)
movk 3,a2
calla RANDOM
jrn wlkr1
movk 7,a2
wlkr1 move a2,*a13(SK_DIR)
jruc gotop
squats movk 1,a0 ;>Squating turn
movk 3,a1
calla RNDRNG
move a0,*a13(SQ_NUM)
spinr movk 1,a0 ;>Rnd spin
movk 8,a1
calla RNDRNG
move a0,*a13(SK_DIR)
jruc gotop
spinrp callr getcloseplyr ;>Face player
jrz fndnewmd
callr XYSKOBJ
move a5,a1
move a6,a2
callr GETADIR2
setturn move a0,*a13(SK_DIR)
fndstmv clr a0
move a0,*a8(OXVEL),L ;Kill vel
move a0,*a8(OYVEL),L
jruc gotop
jmponp callr getcloseplyr ;>Jump on closer player
jrz fndnewmd
move *a0(OYPOS),a1
move *a8(OYPOS),a3
movk 1,a4 ;Jump north
sub a1,a3
jrgt fndj5
movk 5,a4 ;Jump south
abs a3
fndj5 sll 1,a3 ;A3=Y dist*2
move *a0(OXPOS),a1
move *a8(OXPOS),a2
sub a1,a2
abs a2 ;A2=X dist
cmp a2,a3
jrlo wlk
move a4,*a13(JFLG) ;Y>X so jump
move a4,*a13(SK_DIR)
clr a0
move a0,*a13(DIS)
jruc gotop
********************************
* Get franim list based on fiends direction
SUBRP fiend_getfran
move *a13(DIR),a0
sll 5,a0 ;*32
addi walk_t-32,a0 ;calculate offset in table
move *a0,a9,L ;move table value into a9
rets
walk_t .long fr,fr,fr,fr,fr,fr,fl,fr
fr .long FIEND1
.word FLIPBITS+3,(M_FLIPH)
.long FIEND2
.word 3
.long FIEND3
.word 3
.long FIEND4
.word 3
.long FIEND5
.word 3
.long FIEND6
.word 3
.long FIEND7
.word 3
.long 0
fl .long FIEND1
.word FLIPBITS+3,0
.long FIEND2
.word 3
.long FIEND3
.word 3
.long FIEND4
.word 3
.long FIEND5
.word 3
.long FIEND6
.word 3
.long FIEND7
.word 3
.long 0
********************************
* Rotates fiend toward new direction
SUBRP fiend_seekdir ;A0=Current dir (1-8), A1=Seek dir (1-8)
sub a0,a1 ;A1=Difference
subk 1,a0 ;Make 0-7
move a1,a2
abs a1
subk 5,a1
jrlt way1
neg a2
way1 move a2,a2
jrnn way4
subk 2,a0 ;-1
way4 addk 1,a0 ;+1
movk 7,a1
and a1,a0
addk 1,a0 ;make 1-8
move a0,*a13(DIR)
dec a0
move a0,a2
sll 5,a0
addi SPINFRMS,a0
move *a0,a1,L ;New OIMG
sll 4,a2
addi SPINFLGS,a2
move *a2,a4 ;New OFLAGS
jauc ANI
SPINFRMS
.long FNSTND12,FNSTND10,FNSTND9,FNSTND7,FNSTND6,FNSTND7,FNSTND9
.long FNSTND10
********************************
* Get * to closest player legs obj
SUBR getcloseplyr ;A8=*Src obj
move @PLYRPRCS,a1,L
jrz gcp400
move @PLYRPRCS+32,a2,L
jrz gcp450
move *a1(LEG_PTR),a0,L
move *a2(LEG_PTR),a1,L
move *a8(OXPOS),a2 ;Get src XY
move *a8(OYPOS),a3
move *a0(OXPOS),a4
sub a2,a4
move *a0(OYPOS),a5
sub a3,a5
abs a4
abs a5
cmp a5,a4
jrhs gcp50
move a5,a4 ;A4=P1 distance
gcp50 move *a1(OXPOS),a5
sub a2,a5
move *a1(OYPOS),a6
sub a3,a6
abs a5
abs a6
cmp a6,a5
jrhs gcp70
move a6,a5 ;A5=P2 distance
gcp70 cmp a5,a4
jrls gcp80
move a1,a0
gcp80 move a0,a0
rets
gcp400 move @PLYRPRCS+32,a1,L ;P1 bad
jrz gcp800
gcp450 move *a1(LEG_PTR),a0,L ;P2 bad
rets
gcp800 clr a0 ;P1&P2 bad
;>A0=*Plyr legs obj
rets ;Pass Z
********************************
* Fiend jump
APTRPD fjsobj_p ,23 ;*Jumper shadow object
WORDPD fjpos ,25 ;Jumper pos in arc
WORDPD fjsinea ,26 ;Sine add per tick
WORDPD FND_COLOR,27 ;COLOR PAL INDEX (0-7)*32 FOR THIS FIEND
JZ .set 159 ;281
JMPSND .WORD >F48E,>18,>813D,0 ;FIEND JUMP SND
JMPSND2 .WORD >F58E,>18,>813E,0 ;FIEND JUMP SND
SUBRP fiend_jump
movi jmpu_l,a10
move *a13(JFLG),a0
subk 1,a0
jreq fj20
movi jmpd_l,a10
fj20
movk 1,a0
move a0,*a13(fjsinea)
callr getcloseplyr
move *a0(OXPOS),a6
cmpi >1a00,a6 ;Off screen?
jrz fj900
addk 10,a6
move *a0(OYPOS),a7
subk 30,a7
PUSH a6,a7
move *a8(OIMG),a1,L
move *a8(OSIZE),a2,L
move *a8(OFLAGS),a4
calla GANIOF
move *a8(OXPOS),a0 ;Get XY
move *a8(OYPOS),a1
sll 16,a0
sll 16,a1
add a6,a0 ;Add ani offset
add a7,a1
PULL a6,a7
sll 16,a6
sll 16,a7
sub a0,a6 ;DestX-SrcX
sub a1,a7 ;DestY-SrcY
move a6,a11
abs a11 ;A11=Distance
move a7,a2
abs a2
cmp a2,a11 ;Use max
jrhs j120
move a2,a11
j120
srl 6,a11 ;/64
move a11,a2
srl 2,a2
sub a2,a11 ;Sub .25 = /96
cmpi 18000,a11
jrhs j140
movi 18000,a11 ;Minimum
j140 sra 1,a6 ;>Scale down to A11
sra 1,a7
move a6,a2
abs a2
cmp a11,a2 ;A6&A7 < A11
jrgt j140
move a7,a2
abs a2
cmp a11,a2
jrgt j140
move a6,a4 ;>Fine scale up to A11
move a7,a5
sra 4,a4 ;/16
sra 4,a5
jrnz j150
move a4,a4
jrz j200 ;Both 0 then skip
j150 add a4,a6
add a5,a7
move a6,a2
abs a2
cmp a11,a2
jrgt j200
move a7,a2
abs a2
cmp a11,a2
jrle j150
j200
move *a10+,a9,L ;Get *FRANIM list
jrz j210
mmtm a12,a0,a1,a6,a7 ;Save XY&Vel
JSRP FRANIMQ ;Jump sequence
mmfm a12,a0,a1,a6,a7
j210 movi 100,a3 ;Z
movi DMAWNZ+M_NOCOLL,a4 ;No collisions
movi CLSDEAD,a5
movi SHAD1,a2
move a8,a9
calla BEGINOBJ2 ;Get shadow obj
move a8,*a13(fjsobj_p),L
move a9,a8
move a10,a9
MOVI JMPSND,A0
CALLA ONESND
MOVI JMPSND2,A0
CALLA ONESND
clr a0
move a0,*a13(fjpos)
jruc j400
j300 movi DMAWNZ+M_NOCOLL,a4 ;No collisions
calla ANI ;New frame
move *a9+,a10 ;Get #ticks for frame
j350 move *a13(fjsobj_p),a5,L
move *a5(OIMG),a1,L
move *a5(OSIZE),a2,L
move *a5(OFLAGS),a4
calla GANIOF
move *a13(fjpos),a0 ;New height
move *a13(fjsinea),a1
add a1,a0
cmpi 82,a0 ;Max table range
jrlo j370
clr a0
j370 move a0,*a13(fjpos)
callA sine_get
srl 6,a0 ;/64
move *a5(OYPOS),a2
sub a0,a2
addi JZ+130,a0
move a0,*a8(OZPOS)
move a8,a0
move *a5(OXPOS),a3
sll 16,a2
sll 16,a3
add a6,a3 ;Add Anim pt
add a7,a2
move *a8(OFLAGS),a4
calla GANISAG
SLEEPK 1
dsj a10,j350
j400 move *a9+,a1,L ;Get *Img
jrnz j300
movi JZ,a0
move a0,*a8(OZPOS)
move *a13(fjsobj_p),a0,L ;Kill shadow
calla DELOBJ
clr a0
move a0,*a13(fjsobj_p),L ;Clr *
movi DMAWNZ,a0
move a0,*a8(OFLAGS) ;Collisions ON
move *a9+,a9,L ;Get *FRANIM list
jrz fj900
JSRP FRANIMQ ;Land
fj900 RETP
jmpd_l .long jmpstrtd_l ;*FRANIM
LW FJUMP6C,14
LW FNDJUMP6C1,15
LW FNDJUMP6C2,24
LW FNDJUMP6C1,15
LW FJUMP6C,14
.long 0
.long jmplandd_l ;*FRANIM
jmpstrtd_l
LW FJUMP6A,10
LW FJUMP6B,10
.long 0
jmplandd_l
LW FJUMP6B,10
LW FJUMP6A,10
.long 0
jmpu_l .long jmpstrtu_l ;*FRANIM
LW FJUMP12C,14
LW FNDJUMP12C1,15
LW FNDJUMP12C2,24
LW FNDJUMP12C1,15
LW FJUMP12C,14
.long 0
.long jmplandu_l ;*FRANIM
jmpstrtu_l
LW FJUMP12A,10
LW FJUMP12B,10
.long 0
jmplandu_l
LW FJUMP12B,10
LW FJUMP12A,10
.long 0
********************************
* Fiend spitter (Process)
SUBRP SPITIT ;A10=*Fiend process
movi 100,a0
calla RANDPER
jrc spitx
movk 6,a0
movk 15,a1
calla RNDRNG
move a0,a9
jruc spit5
SUBRP SPITIT2 ;A10=*Fiend process
movk 5,a9
spit5 move @fndnumfire,a0 ;Cnt +1
addk 1,a0
move a0,@fndnumfire
MOVI CHUCK,A0
CALLA ONESND
SLEEPK 5
spit10 CREATE SHOTPID,SPITS
SLEEPK 2
dsj a9,spit10
move @fndnumfire,a0 ;Cnt -1
subk 1,a0
move a0,@fndnumfire
spitx clr a0
move a0,*a10(fndsp_p),L ;Clr *process
DIE
********************************
* Fiend spit ball (Process)
SUBRP SPITS ;A10=*Fiend process
movk 5,a0
movk 12,a1
calla RNDRNG
move a0,*a13(AGE)
move *a10(DIR),a2
subk 1,a2
move a2,a4
sll 5,a2 ;*32
addi bxylh_t,a2 ;Bubble x low vel
move *a2,a0,L
move *a2(8*32),a1,L
calla RNDRNG
move a0,a6 ;XV
move *a2(16*32),a0,L
move *a2(24*32),a1,L
calla RNDRNG
move a0,a7 ;YV
move *a8(OXPOS),a0 ;A8=*Torso of fiend that fired me
move *a8(OYPOS),a1
movi 160,a3 ;Z, 159 for fiend
move a4,a2 ;Set Z based on dir
jrnz spits3
movi 158,a3 ;Z
spits3 sll 4,a2 ;*16
addi xy3_t,a2
move *a2,a5
add a5,a0
move *a2(>80),a5
add a5,a1
sll 16,a0 ;X
sll 16,a1 ;Y
movi PODA,a2 ;*IMG
movi DMAWNZ,a4
movi CLSENMY|TYPSHOT+1,a5 ;OID
calla BEGINOBJ2
spits5 SLEEPK 3
move *a13(AGE),a0
subk 1,a0
move a0,*a13(AGE)
jrnz spits5
MOVE A0,*A8(OXVEL),L ;AGE TIMED OUT
MOVE A0,*A8(OYVEL),L
MOVI SMLEXP,A9
jauc FRQDELDIE
SMLEXP .LONG EXPb1
.WORD NEWPALET|3
.LONG BULLET ;NEW PAL NAME
.LONG EXPb2
.WORD 3
.LONG EXPb1
.WORD 3
.LONG 0
bxylh_t .LONG -010000H,008000H,0018000H,08000H,-010000H,-28000H,-30000H,-28000H
.LONG 0010000H,028000H,030000H,28000H,010000H,-08000H,-018000H,-08000H
.LONG -028000H,-28000H,-010000H,08000H,018000H,008000H,-010000H,-28000H
.LONG -018000H,-08000H,0010000H,28000H,28000H,028000H,0010000H,-08000H
xy3_t .word 11,17,14,17,16,9,2,4 ;X
.word 4,4,11,11,11,11,10,3 ;Y
********************************
* Calc direction based on velocities
; SUBRP GETADIR ;A8=*Object
; move *a8(OXVEL),a1,L
; move *a8(OYVEL),a2,L
SUBR GETADIR2 ;A1=XVel, A2=YVel
move a1,a3
move a2,a4
abs a3 ;X
abs a4 ;Y
move a4,a0
add a4,a0
add a4,a0 ;A0=YVel*3
cmp a0,a3
jrhs gadx ;XV > 3*YV
move a3,a0
add a3,a0
add a3,a0 ;A0=XVel*3
cmp a0,a4
jrhs gady
move a1,a1 ;Diagonal
jrn gad10
movk 2,a0 ;X pos
move a2,a2
jrn gadex
movk 4,a0
rets
gad10 movk 8,a0 ;X neg
move a2,a2
jrn gadex
movk 6,a0
rets
gadx movk 3,a0 ;x velocity case
move a1,a1
jrnn gadex ;xv + case
movk 7,a0
rets
gady movk 5,a0 ;y velocity case
move a2,a2
jrnn gadex
movk 1,a0
gadex rets ;>A0=Dir of travel (1-8)
;812
;7 3
;654
********************************
;NABBED FROM EUGENE JARVIS FOOTBALL CODE
;
;SEEK XY OF ACTIVE OBJECT
;A8=OBJECT SEEKING
;A0=OBJECT SEEKED
;
;RETURNS
;A5=X VEL
;A6=Y VEL
XYSKOBJ
MOVE *A0(OXPOS),A5
MOVE *A0(OYPOS),A6
;
;SEEK X-Y COORDINATE
;A8=OBJECT SEEKING
;A5=X COORD TO SEEK
;A6=Y COORD TO SEEK
;RETURNS
;A5=X VEL
;A6=Y VEL
;
;NABBED FROM EUGENE JARVIS FOOTBALL CODE
;
SUBRP XYSEEK
MMTM SP,A0,A1,A2,A3,A4,A7
MOVE *A8(OXPOS),A3
MOVE *A8(OYPOS),A4
SUB A3,A5 ;FIND DIFFERENCE
SUB A4,A6
MOVE A6,A3 ;
MOVE A5,A1
ABS A5
ABS A6
ADD A5,A6 ;CALC SUM ABS(DX+DY)
SLL 16,A1 ;SHIFT TO ACCOMODATE FRACTIONAL VELOCITY
SLL 16,A3
DIVS A6,A1 ;GENERATE SPEED RATIOS
DIVS A6,A3
MOVE A1,A2
ABS A2
SLL 16,A2
SRL 28,A2 ;CORRECT FOR SQUARE ROOT
SLL 4,A2
ADDI XYSQTAB,A2
MOVE *A2,A2
; MOVK 7,A2
MOVK 1,A5 ;MULTIPLY BY VELOCITY FACTOR
MPYU A2,A5
MPYS A5,A3
MPYS A1,A5 ;FINAL X VEL
SRA 4,A3
SRA 4,A5
MOVE A3,A6 ;FINAL Y VEL
MMFM SP,A0,A1,A2,A3,A4,A7
RETS
;CORRECT FOR ANGULAR VELOCITIES
XYSQTAB .WORD >20-28,>21-28,>22-28,>23-28,>24-28,>25-28,>26-28,>27-28
.WORD >27-28,>26-28,>25-28,>24-28,>23-28,>22-28,>21-28,>20-28
********************************
SQLST .LONG 0,SQ1,SQ2,SQ3,SQ4,SQ5,SQ6,SQ7,SQ8
SQLST2 .LONG 0,ASQ1,ASQ2,ASQ3,ASQ4,ASQ5,ASQ6,ASQ7,ASQ8
SQ1 .LONG FSQUAT12A
.WORD 4
.LONG FSQUAT12A
.WORD 60
.LONG FSQUAT12A
.WORD 4
.LONG FNSTND12
.WORD 4
.LONG 0
SQ2 .LONG FSQUAT10
.WORD FLIPBITS|4,(M_FLIPH)
.LONG FSQUAT10A
.WORD 60
.LONG FSQUAT10
.WORD 4
.LONG FNSTND10
.WORD 4
.LONG 0
SQ3 .LONG FSQUAT9
.WORD FLIPBITS|4,(M_FLIPH)
.LONG FSQUAT9A
.WORD 60
.LONG FSQUAT9
.WORD 4
.LONG FNSTND9
.WORD 4
.LONG 0
SQ4 .LONG FSQUAT7
.WORD FLIPBITS|4,(M_FLIPH)
.LONG FSQUAT7A
.WORD 60
.LONG FSQUAT7
.WORD 4
.LONG FNSTND7
.WORD 4
.LONG 0
SQ5 .LONG FSQUAT6
.WORD 4
.LONG FSQUAT6A
.WORD 60
.LONG FSQUAT6
.WORD 4
.LONG FNSTND6
.WORD 4
.LONG 0
SQ6 .LONG FSQUAT7
.WORD 4
.LONG FSQUAT7A
.WORD 60
.LONG FSQUAT7
.WORD 4
.LONG FNSTND7
.WORD 4
.LONG 0
SQ7 .LONG FSQUAT9
.WORD 4
.LONG FSQUAT9A
.WORD 60
.LONG FSQUAT9
.WORD 4
.LONG FNSTND9
.WORD 4
.LONG 0
SQ8 .LONG FSQUAT10
.WORD 4
.LONG FSQUAT10A
.WORD 60
.LONG FSQUAT10
.WORD 4
.LONG FNSTND10
.WORD 4
.LONG 0
ASQ1 .LONG FSQUAT12A
.WORD 4
.LONG FSQUAT12A
.WORD 20
.LONG FSQUAT12A
.WORD 4
.LONG FNSTND12
.WORD 4
.LONG 0
ASQ2 .LONG FSQUAT10
.WORD FLIPBITS|4,(M_FLIPH)
.LONG FSQUAT10A
.WORD 20
.LONG FSQUAT10
.WORD 4
.LONG FNSTND10
.WORD 4
.LONG 0
ASQ3 .LONG FSQUAT9
.WORD FLIPBITS|4,(M_FLIPH)
.LONG FSQUAT9A
.WORD 20
.LONG FSQUAT9
.WORD 4
.LONG FNSTND9
.WORD 4
.LONG 0
ASQ4 .LONG FSQUAT7
.WORD FLIPBITS|4,(M_FLIPH)
.LONG FSQUAT7A
.WORD 20
.LONG FSQUAT7
.WORD 4
.LONG FNSTND7
.WORD 4
.LONG 0
ASQ5 .LONG FSQUAT6
.WORD 4
.LONG FSQUAT6A
.WORD 20
.LONG FSQUAT6
.WORD 4
.LONG FNSTND6
.WORD 4
.LONG 0
ASQ6 .LONG FSQUAT7
.WORD 4
.LONG FSQUAT7A
.WORD 20
.LONG FSQUAT7
.WORD 4
.LONG FNSTND7
.WORD 4
.LONG 0
ASQ7 .LONG FSQUAT9
.WORD 4
.LONG FSQUAT9A
.WORD 20
.LONG FSQUAT9
.WORD 4
.LONG FNSTND9
.WORD 4
.LONG 0
ASQ8 .LONG FSQUAT10
.WORD 4
.LONG FSQUAT10A
.WORD 20
.LONG FSQUAT10
.WORD 4
.LONG FNSTND10
.WORD 4
.LONG 0
FND_EXP2
MOVI RDBOOM,A0 ;PAL TO STUFF!
MOVE A0,*A13(PDATA),L
CALLA GETANIXY
FC MOVE A2,A11
MOVE A3,A10
CALLA DELOBJA8
CALLR CLEAN_UP_FND
MOVI XBOOM2,A9
ADDI [1AH,0],A11 ;ALIGN SMART BOMB EXP ON TOP OF FND
JRUC NOT_FND
FND_EXP ;XFER HERE FOR EXPLOSION
MOVE A10,A7 ;BULLET WHO KILLED FIEND
MOVI BULLET,A0
MOVE A0,*A13(PDATA),L
CALLA GETANIXY
ADDI [30H,0],A2
MOVE A2,A11
MOVE A3,A10
CALLA DELOBJA8
MOVE A9,A9
JRNZ NOT_FND
CALLR CLEAN_UP_FND
;IF SHOT BY A NON STOPPING BULLET OR FLAME THROWER, FLAME FIEND
CMPI CLSPLYR|TYPPLBL|SUBNOSTP,A7
JREQ BIGEXP ;GO TO REGULAR FIRE BOMB EXPLOSION
CMPI CLSPLYR|TYPPLYR|SUBRNG1,A7
JREQ BIGEXP ;GO TO REGULAR FIRE BOMB EXPLOSION
MOVE @PCTOT,A0
SUBK 25,A0 ;GIVE FIEND AT LEAST THIS KIND OF EXP
JALE SUCIDE
BIGEXP MOVI BOOM2,A9
SUBI [20,0],A11
NOT_FND MOVE A10,A0
MOVE A11,A1
MOVI FRBAL1,A2
MOVI 158,A3 ;163
MOVI DMAWNZ|M_NOCOLL,A4
MOVI CLSDEAD,A5 ;OID
CLR A6
CLR A7
CALLA BEGINOBJ2 ;NO WORLD ADDED IN
move *a13(PDATA),a0,L ;Set new pallette
CALLA GETFPAL
MOVE A0,*A8(OPAL)
SLEEPK 3 ;Wait on FLASHME!
jauc FRQDELDIE
CLEAN_UP_FND
move *a13(fjsobj_p),a0,L
jrz fnde2
calla DELOBJ ;Kill shadow
fnde2 move *a13(fndsp_p),a0,L
jrz fnde5
calla KILL ;Kill spitter
move @fndnumfire,a0
subk 1,a0
move a0,@fndnumfire
fnde5
move @FND_CNT,a0
dec a0
move a0,@FND_CNT
RETS
BOOM3 .LONG EXPb1
.WORD 4
.LONG EXPb2
.WORD 4
.LONG EXPb3
.WORD 5
.LONG EXPb4
.WORD 5
.LONG EXPb5
.WORD 5
.LONG EXPb6
.WORD 5
.LONG EXPb7
.WORD 5
.LONG EXPb8
.WORD 5
.LONG EXPb9
.WORD 5
.LONG 0
YKIL_FT2
;RINGS AROUND PLAYER KILLED FIEND
PUSH A1,A2,A3,A4,A7,A9,A10
JRUC YIN
YKIL_FT MMTM SP,A1,A2,A3,A4,A7,A9,A10
MOVI >2F2F,A9 ;1313,A9 ;COLOR TO FLASH
MOVI HITFND,A3
CALLR DO_PUNISH
JRLT PUSHME
YIN MOVE *A0(OID),A2
CMPI CLSPLYR|TYPPLBL|SUBNOSTP,A2
JRZ FE0
CMPI CLSPLYR|TYPPLYR|SUBRNG1,A2 ;PLAYER WITH RINGS ON
JRZ FE0
MOVE @PCTOT,A2 ;Kill fiend with non stopping bullets
SUBK 25,A2
JRGE FE0 ;HAVE ROOM FOR PIECES?
CLR A9 ;XV
CLR A10 ;YV
MOVI BLSTS,A11 ;CLSTS2
PUSH A0
CREATE0 CHUNK_OBJ
MOVE A0,A9
MOVE *A8(OPLINK),A0,L
MOVE *A0(FND_COLOR),A0,W
ADDI FCOLORS,A0
MOVE *A0,A0,L
; MOVI GRNTPNK,A0 ;Change to speedy grunt PAL
CALLA GETFPAL ;GET A COLOR MAP ASSIGNMENT
MOVE A0,*A9(PDATA) ;TELLS CHUNKS TO USE THIS PAL
PULL A0
FE0 MMFM SP,A1,A2,A3,A4,A7,A9,A10
JRUC KILL_F1
********************************
;TYPE PLAY BULLET SUB TYPES
;
;SUBLZR .EQU 0001H ;REGULAR LAZER SHOTS
;SUBSPRY .EQU 0002H ;SPRAY SUB TYPE
;SUBFIRE1 .EQU 0003H ;FIRE BALL WPN
;SUBGRND .EQU 0004H ;GRENADE
;SUBNOSTP .EQU 0005H ;NON STOPPING BULLET
;SUBSPDG1 .EQU 0006H ;MACHINE GUN TYP WPN
SUBR DO_PUNISH ;A0=*Killer obj, A3=ABSRB Max, A8=*Punished obj
;Preserves A0,A8,A9
movb *a0(OID),a4 ;Killers OID. Bad if not bullet
SLL 3,A4
ADDI PUNISH,A4
MOVB *A4,A4
MOVE *A8(OPLINK),A1,L
MOVE *A1(ABSRB),A2
ADD A4,A2
MOVE A2,*A1(ABSRB)
MOVE *A0(OPLINK),A10,L ;>A10=*Killers process
CMP A3,A2
RETS ;Pass CC
PUNISH .BYTE 4*30,2*30,2*30,10,0,4*30,1*30 ;4*30 WAS 1
.EVEN
********************************
;KIL_TURET
; MOVI CLSNEUT|TYPTORSO|SUBPIT,A5
;SUBPIT .EQU 04H ;GUNNER FROM SAND PITS
HIT_TURET
;BULLET HITS TURRET
;A8=TURRET,A0=KILL IMG PNTR
MMTM SP,A1,A2,A3,A4,A7,A9,A10
MOVE *A8(OID),A3
ANDI F_SUBT,A3
JRZ TYP1 ;T72 TURRET HAS NO SUB ID
BTST 3,A3
JRZ NOTBOOB
;8=BOOB TURRET
movb *a0(OID),a4 ;Killers OID
jrnz ht50 ;!Bomb?
move a0,a2
movk 19,a0 ;5%
calla RNDRNG0
move a0,a0
jrnz FLTB ;Skip?
move a2,a0
ht50 move @bossmeterv,a1
subk 3,a1
move a1,@bossmeterv
MOVI HITTRT4,A3
MOVI BLSTS2,A11 ;BODY CHUNKS
CALLR DO_PUNISH
JRLT FLTB ;Boob turret OK?
move @bossmeterv,a0
subi 35*16,a0
move a0,@bossmeterv
MOVI AGLSEXP,A0
CALLA ONESND
CREATE FUTUREPID,MOREP
JRUC TYPOO
FLTB MOVI 030300000H,A9
CREATE0 FLASHME
MMFM SP,A1,A2,A3,A4,A7,A9,A10
RETS
NOTBOOB
SUBK 2,A3
JRZ NOGUNR
;4=SAND PIT GUNNER
MOVI HITTRT3,A3
MOVI BLSTS,A11 ;BODY CHUNKS
CALLR DO_PUNISH
JRLT FLT
;ABSORBED ENOUGH HITS TO GUNNER
MOVI AGLSEXP,A0
CALLA ONESND
CREATE FUTUREPID,MOREP
JRUC TYPOO
.REF BLSTS2A
NOGUNR
;2=GUN ON BTR60
MOVI BLSTS2,A11
MOVI HITTRT2,A3
MOVE @WAVE,A1
CMPI 18,A1
JRZ NORD00
CMPI 17,A1
JRNZ NORD
NORD00 MOVI HITTRT2A,A3
MOVI BLSTS2A,A11
; CLR A11
NORD
; MOVI BLSTS2,A11
CALLR DO_PUNISH
JRLT FLT
;ABSORBED ENOUGH HITS TO DESTROY TURRET ABOVE BTR60
PUSH A10
MOVE A8,A0
CALLA OBJOFF
MOVE *A8(OPLINK),A10,L
MOVE *A10(KPTANKO),A10,L
MOVE *A10(OPLINK),A10,L
MOVI AGLSEXP,A0
CALLA ONESND
CLR A0
MOVE A0,*A10(KPTSO),L
; MOVE *A10(MYTYP),A1
; CMPI 4,A1 ;IF IN LOCK DOWN, STOP DEAD BTR60
; JRNZ NNOZ
; CREATE WARPPID,GOBACK
;NNOZ
PULL A10
MOVE @WAVE,A0
CMPI 18,A0
JRZ TYPOG
CMPI 17,A0
JRNZ TYPO
TYPOG CREATE FUTUREPID,MOREZ ;ON ROAD
JRUC TYPOO
TYP1 MOVI HITTRT,A3
MOVI PBLSTS,A11 ;PINK CHUNK LIST
PUSH A0
CALLR GETUGH
PULL A0
CALLR DO_PUNISH
JRLT FLT
;ABSORBED ENOUGH HITS TO DESTROY TURRET ABOVE T72
MOVK 24,A9 ;14
PUSH A10
MOVE *A8(OPLINK),A10,L
MOVE *A10(KPTANKO),A10,L
MOVE *A10(OPLINK),A10,L
CLR A0
MOVE A0,*A10(KPTSO),L
CREATE0 SHAKEME
MOVE @WAVE,A0
CMPI 10,A0
JRNZ RR4
CREATE0 SENDB
RR4
PULL A10
TYPO
CREATE FUTUREPID,MORE
TYPOO
MOVE A10,A0
MOVI TURTPT,A1 ;AMOUNT OF SCORE
CALLR SCORE_IT
MOVE @PCTOT,A2
SUBK 015H,A2
JRGE TURT_FE
; MOVE A11,A11
; JRZ TURT_FE
CALLR ROOM
CREATE0 CHUNK_OBJ
CLR A1 ;TURRET DUDE BLOWING UP
MOVE A1,*A0(PDATA) ;TELLS CHUNKS TO USE THIS PAL
JRUC TURT_FE
FLT MOVI 03F3F0000H,A9
CREATE0 FLASHME
MMFM SP,A1,A2,A3,A4,A7,A9,A10
RETS
SENDB SLEEPK 1
MOVE @SHK_ON,A0
JRNZ SENDB
MOVE @WORLDTLX,A9,L
MOVE @WORLDTLY,A10,L
SLEEP 40*60
MOVE @WORLDTLX,A0,L
CMP A0,A9
JRNZ SBD
MOVE @WORLDTLY,A0,L
CMP A0,A10
JRNZ SBD
MOVK 1,A8
CREATE FUTUREPID,bomb_neutron
SLEEP 10*60
JRUC SENDB
SBD DIE
********************************
* Fiend collided with player
SUBR FND_PROXCHK ;A0=*Player legs obj, A8=*Fiend obj
PUSH a1,a2,a3,a4,a5,a6,a7,a9,a10,a11
move *a0(OYPOS),a1
subk 30,a1 ;Offset
move *a8(OYPOS),a2
sub a2,a1
jrgt fpcx ;Player higher than fiend?
addk 31,a1 ;Hgt
jrlt fpcx ;Player lower than fiend?
move *a0(OPLINK),a2,L
move *a2(DEAD),a1
jrnz fpcx ;Player dead?
move *a2(DELYDET),a1
jrnz fpcx ;Player invincible?
movk 1,a1
move a1,@OUT_FLG ;Stop scan
move a0,a9 ;*PLeg
movi SLM,a10
CREATE0 player_goojnoo
MOVI SQUISH,A0
CALLA ONESND
fpcx PULL a1,a2,a3,a4,a5,a6,a7,a9,a10,a11
rets
********************************
* Gooj the player (Process)
APTRPD MYLIST ,4 ;*FRANIM for player death
APTRPD MYSND ,6 ;*Sound for ^
SUBRP player_goojnoo ;A9=*Player legs obj, A10=*Fran_l
move *a9(OXPOS),a0
move *a9(OYPOS),a1
sll 16,a0
sll 16,a1
movi SLUD1,a2
movi 159,a3 ;Z
movi DMAWNZ+M_NOCOLL,a4
movi CLSDEAD,a5
clr a6
clr a7
calla BEGINOBJ2 ;Make 1st slime
SUBRP player_gooj ;A8=*Src obj, A9=*Player legs obj, A10=*Fran_l
move a10,*a13(MYLIST),L
movi EXP3,a1
move a1,*a13(MYSND),L
move a9,a0
calla DO_GOOJ
SLEEPK 15
jauc DELOBJDIE ;Kill 1st slime
********************************
* Fiend spit hit player
SUBR plyr_spiton ;A0=*Player legs obj, A8=*Spit obj
PUSH a1,a2,a3,a4,a5,a6,a7,a9,a10,a11
move *a0(OPLINK),a2,L
move *a2(DEAD),a1
jrnz psox ;Player dead?
move *a2(DELYDET),a1
jrnz psox ;Player safe?
;A0=Object that hit player
;A8=Player legs image ptr
SWAP A0,A8
CALLA SHORT_PLYR
JRNC psox
SWAP A0,A8
move a0,a9
movi gooj_l,a10
movi DMAWNZ+M_NOCOLL,a0
move a0,*a8(OFLAGS)
move a0,@OUT_FLG ;Stop scan
move *a8(OPLINK),a0,L
clr a1
movi player_gooj,a7
calla XFERPROC
psox PULL a1,a2,a3,a4,a5,a6,a7,a9,a10,a11
rets
gooj_l
LW GSLMD1,NEWPALET+5
.long GOOBP
LW GSLMD2,5
LW GSLMD3,5
LW GSLMD4,15
LW GSLMD3,4
LW GSLMD2,4
LW GSLMD1,4
.long 0
********************************
PUSH_FT ;A8=FIEND IMG PNTR, A0=KILLER IMG PNTR
MMTM SP,A1,A2,A3,A4,A7,A9,A10
MOVI HITFND,A3
MOVI >2F2F,A9 ;1313,A9 ;COLOR TO FLASH
CALLR DO_PUNISH
JRLT PUSHME
MOVE A10,A0 ;ABSORBED ENOUGH HITS TO DESTROY IT
MOVI FNDPT,A1 ;AMOUNT OF SCORE
CALLR SCORE_IT
MOVE @PCTOT,A2
SUBK 015H,A2
JRGE FE
CALLR ROOM
MOVI BLSTS,A11
CREATE0 CHUNK_OBJ
MOVE A0,A9
MOVE *A8(OPLINK),A0,L
MOVE *A0(FND_COLOR),A0,W
ADDI FCOLORS,A0
MOVE *A0,A0,L
; MOVI GRNTPNK,A0 ;Change to speedy grunt PAL
CALLA GETFPAL ;GET A COLOR MAP ASSIGNMENT
MOVE A0,*A9(PDATA) ;TELLS CHUNKS TO USE THIS PAL
; MOVI GRNTPNK,A0 ;Change to speedy grunt PAL
; CALLA GETFPAL ;GET A COLOR MAP ASSIGNMENT
; MOVE A0,*A9(PDATA) ;TELLS CHUNKS TO USE THIS PAL
FE MMFM SP,A1,A2,A3,A4,A7,A9,A10
MMTM SP,A1,A2,A7
CLR A9 ;FIENDS HAVE NO FIRE CLOUD
JRUC CONT
TURT_FE MMFM SP,A1,A2,A3,A4,A7,A9,A10
MMTM SP,A1,A2,A7
MOVI BOOM3,A9 ;FRANIM LIST FOR THIS TURRET EXP
JRUC CONT2
ROOM ;HAVE ROOM FOR PIECES
MOVE *A10(BLTDIR),A10 ;A10 SHOULD BE 1-8!
DEC A10
MOVK 7,A0
AND A0,A10 ;IN CASE A BLADE STRUCK HULK
SLL 5,A10
MOVI RNGXL,A0
ADD A10,A0
MOVE *A0,A0,L
MOVE A0,A9 ;XVEL
MOVI RNGYL,A0
ADD A10,A0
MOVE *A0,A0,L
MOVE A0,A10 ;YVEL
RETS
KILL_F2 ;FROM SMART BOMB - FIEND KILL
MMTM SP,A1,A2,A7,A9
MOVE A9,A2
MOVI FNDPT,A1
CALLA J5
CLR A0
MOVE A0,*A8(OID)
MOVI 300,A0 ;200
MOVE A0,*A8(OZPOS)
MOVE *A8(OPLINK),A0,L
MOVI FND_EXP2,A7
CLR A1
CALLA XFERPROC
MMFM SP,A1,A2,A7,A9
RETS
;KILL FIEND BECAUSE OF COLLISION WITH BULLETS
;A8=FIEND IMG PNTR
;A0=BULLET
KILL_F1
MMTM SP,A1,A2,A7
MOVE *A0(OID),A10 ;KEEP BULLET OID
MOVE *A0(OPLINK),A0,L
MOVI FNDPT,A1 ;AMOUNT OF SCORE
CALLR SCORE_IT
CLR A9
CONT
MOVI FNDSND,A0
MOVE @PCNT,A1
BTST 0,A1
JRZ CN2
MOVI ALTEXP1,A0
CN2 CALLA ONESND
CONT2
CLR A0
MOVE A0,*A8(OID)
MOVE *A8(OFLAGS),A0
ORI M_NOCOLL,A0
MOVE A0,*A8(OFLAGS)
MOVE *A8(OPLINK),A0,L
MOVI FND_EXP,A7 ;TURRET DEATHS
CLR A1
CALLA XFERPROC
MOVE A8,A0
CALLA OBJOFF
MMFM SP,A1,A2,A7
ret RETS
********************************
SCORE_IT ;A0=*Killer with myplyr stored inside, A1=*Score
MOVE *A0(MYPLYR),A0
MOVI P1DATA,A2
SUBK 1,A0 ;P1
JREQ J5
SUBK 1,A0 ;P2
JRNZ ret
MOVI P2DATA,A2 ;A2=P1DATA OR P2DATA
J5
jauc SCRADD2
RNGXL .LONG 0,0EC00H,0EC00H,0EC00H,0,-0EC00H,-0EC00H,-0EC00H
RNGYL .LONG -0C000H,-0C000H,0,0C000H,0C000H,0C000H,0,-0C000H
********************************
GETUGH MOVE @PCNT,A1
ANDI 03H,A1
SLL 5,A1
ADDI UGHS,A1
MOVE *A1,A0,L
jauc ONESND
UGHS .LONG UGH1,UGH2,UGH3,UGH4
********************************
PUSHME ;A9=Flash color
CALLR GETUGH
sll 16,a9
CREATE0 FLASHME ;FLASH THIS GUY
MOVE *A10(BLTDIR),A2 ;Bad if non-bullet hit
SLL 3,A2
MOVI YAD-8,A0
ADD A2,A0
MOVB *A0,A10 ;A10=AMOUT TO ADD TO Y OF FATMAN
MOVE *A8(OYPOS),A0
MOVE *A8(OXPOS),A1
SLL 16,A0
MOVX A1,A0 ;GET TOP LEFT OF OBJECT
MOVE @WORLDTL,A1,L
SUBXY A1,A0 ;SUBTRACT OUT WORLD BASE
MOVX A0,A1
SLL 16,A1 ;A1=X,A0=Y
ADD A10,A0
CMPI >380000,A0
JRLT SKP
CMPI >E10000,A0
JRGE SKP
MOVE *A8(OYPOS),A0 ;OKAY
ADD A10,A0
MOVE A0,*A8(OYPOS)
SKP ADDI XAD-8,A2
MOVB *A2,A2 ;A1=AMOUNT TO ADD TO X OF FAT
ADD A2,A1
CMPI >200000,A1
JRLT SKP2
CMPI >1380000,A1
JRGE SKP2
MOVE *A8(OXPOS),A0
ADD A0,A2
MOVE A2,*A8(OXPOS)
SKP2 MMFM SP,A1,A2,A3,A4,A7,A9,A10
RETS
YAD .BYTE -6,-6,0,6,6,6,0,-6
XAD .BYTE 0,6,6,6,0,-6,-6,-6
.EVEN
.DEF ENRECT1,ERECT1,ERECT11,ENRECT11,ENRECT13,ERECT13,ENRECT14
.DEF ERECT5,ENRECT5,ERECT3,ENRECT3,ENRECT4,ERECT4,ERECT2
.DEF ERECT12,ERECT7,ERECT8,ERECT10,ENRECT10,ENRECT12,ERECT6
;8 1 2
;7 3
;6 5 4
;RECTANGLE TYPE,DIRECTION ENEMY WILL MOVE,RECT [X,Y],[X,Y]
;TYPE=0 FOR FIXED RECTANGLE,1=FLOATING LFT RECT,2=FLOATING RGT,3=FLOATING TOP
;4=FLOATING BOTM,5=FIXED WITHOUT LOTS OF RANGE,6=FROM TOP ROOF,7=FROM RIGHT
;ROOF
ERECT1
.WORD 0,7,645-XX,1225-YY,650-XX,1268-YY ;FOR SPAWNING
.WORD 0,7,645-XX,1225-YY,650-XX,1268-YY
.WORD 0,7,645-XX,1225-YY,650-XX,1268-YY
.WORD 0,7,645-XX,1000-YY,650-XX,1110-YY
.WORD 0,7,645-XX,1000-YY,650-XX,1110-YY
.WORD 0,3,200-XX,1000-YY,205-XX,1025-YY
.WORD 0,3,200-XX,1000-YY,205-XX,1025-YY
.WORD 0,3,200-XX,1000-YY,205-XX,1025-YY
ERECT2 .WORD 0,3,200-XX,779-YY,205-XX,789-YY ;FOR SPAWNING
.WORD 0,7,645-XX,779-YY,663-XX,780-YY
.WORD 5,7,600-XX,535-YY,640-XX,555-YY ;HUT
.WORD 5,7,600-XX,535-YY,640-XX,555-YY
.WORD 5,7,600-XX,665-YY,640-XX,670-YY ;HUT SPAWN
.WORD 3,5,150,-60,210,-45 ;FLOATING IN FROM TOP
.WORD 3,5,150,-60,210,-45 ;FLOATING IN FROM TOP
.WORD 3,5,150,-60,210,-45 ;FLOATING IN FROM TOP
ERECT3
.WORD 0,1,463-XX,443-YY,483-XX,453-YY
.WORD 0,1,463-XX,443-YY,483-XX,453-YY
.WORD 0,7,611-XX,318-YY,631-XX,336-YY
.WORD 0,3,368-XX,327-YY,383-XX,342-YY ;FOR REACTOR AREA
.WORD 0,3,368-XX,327-YY,383-XX,342-YY ;FOR REACTOR AREA
.WORD 0,7,611-XX,318-YY,631-XX,336-YY
.WORD 0,4,277-XX,395-YY,299-XX,405-YY ;BOTM OF REACTOR
.WORD 6,5,415-XX,145-YY,425-XX,155-YY ;FROM ROOF
ERECT4
.WORD 0,1,895-XX,463-YY,910-XX,469-YY
.WORD 0,1,895-XX,463-YY,910-XX,469-YY
.WORD 0,3,690-XX,335-YY,705-XX,350-YY
.WORD 0,3,690-XX,335-YY,705-XX,350-YY
.WORD 6,5,880-XX,145-YY,970-XX,165-YY ;ROOF
.WORD 6,5,880-XX,145-YY,970-XX,165-YY
.WORD 7,7,0380H,325-YY,0390H,340-YY ;FROM ROOF
.WORD 7,7,0380H,325-YY,0390H,340-YY ;FROM ROOF
ERECT5 .WORD 0,3,369-XX,2564-YY,384-XX,2579-YY ;SECRET PATH #1 LOWER
.WORD 0,3,369-XX,2564-YY,384-XX,2579-YY ;SECRET PATH #1 LOWER
.WORD 0,7,457-XX,2335-YY,466-XX,2410-YY
.WORD 0,7,457-XX,2335-YY,466-XX,2410-YY
.WORD 0,7,457-XX,2335-YY,466-XX,2410-YY
.WORD 3,5,110,-60,170,-45 ;FLOATING IN FROM TOP
.WORD 3,5,110,-60,170,-45 ;FLOATING IN FROM TOP
.WORD 3,5,110,-60,170,-45 ;FLOATING IN FROM TOP
ERECT6 .WORD 7,7,640-XX,1824-YY,665-XX,1850-YY ;SECRET PATH #1 MIDDLE
.WORD 7,7,640-XX,1824-YY,665-XX,1850-YY
.WORD 7,7,640-XX,1824-YY,665-XX,1850-YY
.WORD 7,7,640-XX,1824-YY,665-XX,1850-YY
.WORD 3,5,110,-60,170,-45
.WORD 3,5,110,-60,170,-45
.WORD 3,5,110,-60,170,-45
.WORD 3,5,110,-60,170,-45
ERECT7 ;ROADWAY AREA
.WORD 1,3,-50,70,-35,110
.WORD 1,3,-50,70,-35,110
.WORD 2,7,410,70,430,110
.WORD 2,7,410,70,430,110
.WORD 2,7,410,70,430,110
.WORD 3,5,80,-60,270,-45
.WORD 3,5,80,-60,270,-45
.WORD 3,5,80,-60,270,-45
ERECT8 ;TOP OF SECRET AREA #1
.WORD 0,1,463-XX,443-YY,483-XX,453-YY
.WORD 0,7,605-XX,358-YY,620-XX,372-YY
.WORD 0,3,220-XX,358-YY,232-XX,372-YY
.WORD 0,7,605-XX,358-YY,620-XX,372-YY
.WORD 0,3,220-XX,358-YY,232-XX,372-YY
.WORD 6,5,291-XX,145-YY,326-XX,165-YY ;ROOF
.WORD 6,5,491-XX,145-YY,530-XX,165-YY
.WORD 6,5,491-XX,145-YY,530-XX,165-YY
XX .EQU 241
YY .EQU 202
XX2 .EQU 241-13 ;FOR LOWER DESERT MODULE
YY2 .EQU 202+48H
ERECT10 ;1ST LOCKDOWN IN DESERT
.WORD 0,1,621-XX2+22,4610-YY2+52,631-XX2+22,4625-YY2+52
.WORD 0,3,447-XX2-50,4438-YY2+43,457-XX2-50,4455-YY2+43
.WORD 0,7,839-XX2+25,4438-YY2+43,849-XX2+25,4453-YY2+43
.WORD 0,5,595-XX2+25,4356-YY2-36,605-XX2+25,4351-YY2-20
.WORD 0,1,621-XX2+22,4610-YY2+52,631-XX2+22,4625-YY2+52
.WORD 0,3,447-XX2-50,4438-YY2+43,457-XX2-50,4455-YY2+43
.WORD 0,7,839-XX2+25,4438-YY2+43,849-XX2+25,4453-YY2+43
.WORD 0,5,595-XX2+25,4356-YY2-36,605-XX2+25,4351-YY2-20
ERECT11 ;PATH A AND B AFTER FIRST LOCKDOWN
;ALSO USED FOR WAVE 13 FAST GUYS COMING DOWN AND WAVE 16
.WORD 3,5,190,-60,250,-45 ;110! 250 ;FLOATING IN FROM TOP
.WORD 3,5,190,-60,250,-45 ;FLOATING IN FROM TOP
.WORD 3,5,190,-60,250,-45 ;FLOATING IN FROM TOP
.WORD 3,5,190,-60,250,-45 ;FLOATING IN FROM TOP
.WORD 3,5,190,-60,250,-45 ;FLOATING IN FROM TOP
.WORD 3,5,190,-60,250,-45 ;FLOATING IN FROM TOP
.WORD 3,5,190,-60,250,-45 ;FLOATING IN FROM TOP
.WORD 3,5,190,-60,250,-45 ;FLOATING IN FROM TOP
ERECT12 ;2ND DESERT LOCKDOWN WITH HUT ON LEFT
.WORD 0,1,403-XX2+22,3185-YY2+52,413-XX2+22,3200-YY2+52
.WORD 0,1,403-XX2+22,3185-YY2+52,413-XX2+22,3200-YY2+52
.WORD 0,7,642-XX2+25,3019-YY2+43,648-XX2+25,3035-YY2+43
.WORD 0,5,417-XX2+25,2935-YY2-36,427-XX2+25,2930-YY2-20
.WORD 0,3,325-XX2-50,2985-YY2+43,335-XX2-50,2997-YY2+43
.WORD 0,3,325-XX2-50,2985-YY2+43,335-XX2-50,2997-YY2+43
.WORD 0,7,642-XX2+25,3019-YY2+43,648-XX2+25,3035-YY2+43
.WORD 0,5,417-XX2+25,2935-YY2-36,427-XX2+25,2930-YY2-20
ERECT13 ;1ST AIRPORT LOCKDOWN
.WORD 0,1,0D32H,1118H,0D4CH,1120H
.WORD 0,3,0C61H,1070H,0C6BH,10A0H
.WORD 0,5,0D3FH,0FECH,0D42H,0FF6H
.WORD 0,7,0E10H,1088H,0E20H,108CH
.WORD 0,1,0D32H,1118H,0D4CH,1120H
.WORD 0,3,0C61H,1070H,0C6BH,10A0H
.WORD 0,5,0D3FH,0FECH,0D42H,0FF6H
.WORD 0,7,0E10H,1088H,0E20H,108CH
ENRECT1 .WORD 240-XX,948-YY,378-XX,983-YY+10,4 ;DIR TO TURN TOWARD
;FOR HULK COLLISIONS WITH BOX
.WORD 501-XX-20,948-YY,620-XX,983-YY+10,6
.WORD 0
ENRECT3 .WORD 280-XX,304-YY,367-XX,381-YY,3 ;REACTOR AREA
.WORD 0
ENRECT4 .WORD 836-XX,210-YY,1064-XX,300-YY,6 ;ELEVATOR DOWN AREA
.WORD 0
ENRECT5 .WORD 268-XX,2525-YY,365-XX,2617-YY,3 ;SECRET PATH LOWER AREA
.WORD 518-XX,2324-YY,609-XX,2471-YY,7 ;
.WORD 541-XX,2152-YY,640-XX,2223-YY,7 ;NEAR BOXES
ENRECT6 .WORD 546-XX,1792-YY,656-XX,1999-YY,7 ;SECRET PATH UPPER AREA
.WORD 251-XX,1611-YY,352-XX,1703-YY,4
.WORD 518-XX,1635-YY,627-XX,1701-YY,6
.WORD 0
ENRECT10 ;START OF DESERT
;PIT ON LEFT AT START OF DESERT
.WORD 09EH,126DH-3AH-20,122H,131CH-3AH,3 ;9E=CE
.WORD 122H,127FH-3AH-20,145H,1314H-3AH,3
.WORD 146H,128DH-3AH-20,155H,1310H-3AH,3
.WORD 155H,12A6H-3AH-20,168H,1308H-3AH,3
.WORD 168H,12C8H-3AH-20,17CH,12F0H-3AH,3
;MOUND ON RIGHT
.WORD 675-XX2-20,4849+11-YY2-20,870-XX2,4917+32-YY2-16,7
;FIRST BARBED WIRE LINE
.WORD 226+6-XX2-20,4600+17-YY2-20,603+25-XX2,4635+27-YY2,1
.WORD 733+6-XX2-20,4600+17-YY2-20,1028+25-XX2,4635+27-YY2,1
;FOR GOING DOWN WHEN BUMPING INTO BARBED WIRE FENCE
.WORD 226+6-XX2-20,4635+28-YY2,613+25-XX2,4635+28-YY2+30,3
.WORD 723+6-XX2-20,4635+28-YY2,1028+25-XX2,4635+28-YY2+30,7
;GO DOWN FROM LINE
; .WORD 226+6-XX2-20,4600+37-YY2-20,603+25-XX2,4635+37-YY2,5
; .WORD 733+6-XX2-20,4600+37-YY2-20,1028+25-XX2,4635+37-YY2,5
.WORD 0
ENRECT11 ;START OF SCROLL PATHB AND PATHA!
.WORD 758+6-XX2-30,4370+20-YY2-35,864+25-45-XX2+15,4407+25-YY2+10,7 ;WALL TOPRGT
.WORD 590+3-XX2-30,3891+20-YY2-35,776+20-XX2+15,3869+61+25-YY2+10,2 ;MID SCRN WAL
.WORD 586+3-XX2-30,3669+20-YY2-35,682+20-XX2+15,3647+61+25-YY2+10,7 ;MID TURT WAL
.WORD 372+3-XX2-30,3255+20-YY2-35,1044+25-XX2+15,3263+61+25-YY2+10,6 ;LONG WALL
.WORD 490+3-XX2-30,3891+20-YY2-35,656+20-XX2+15,3869+61+25-YY2+10,6 ;MID SCRN WAL LFT SIDE
.WORD 0
ENRECT12 ;2ND DESERT LOCKDOWN AT HUT
.WORD 248-XX2,2964-YY2,338+28-XX2,3099+32-YY2,4 ;HUT AT LK DWN
.WORD 0
ENRECT13 ;NEAR HUT 2 DISHES
;SCROLLING UP INTO NEW DESERT AREA FOR HULKS NEAR BIG HUTS
.WORD 139H,5ECH-16,205H,692H+20,3 ;SQR HUT
.WORD 0
ENRECT14 ;FROM TRIPLE GUNNERS UP
;SCROLLING UP INTO NEW DESERT AREA FOR PLAYERS NEAR BIG HUTS
.WORD 97H,368H,35FH,395H,5 ;TRIPLE WALL
; .WORD 9H,227H+30,18CH,268H,3 ;LOWER CLIFF
; .WORD 100H,198H,2C5H,1E4H,6 ;UPPER CLIFF
.WORD 9H,227H+20,190H,26CH,3 ;LOWER CLIFF
.WORD 100H,198H,2C5H,1E2H,6 ;UPPER CLIFF
.WORD 0
.END