smashtv/MUTOID.ASM

4524 lines
75 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.

.FILE 'MUTOID.ASM'
.TITLE 'ROBO-RAMA GAME PROGRAM'
.WIDTH 132
.OPTION B,D,L,T
.MNOLIST
;CHANGE TO RED PAL WHEN DAMAGED
;
; INITIATED: APRIL 26,1989
; MODIFIED: !
; SOFTWARE: MARK TURMELL
;
; COPYRIGHT (C) 1989 WILLIAMS ELECTRONICS GAMES, INC.
;
;
; GET THE SYSTEM STUFF
.INCLUDE "MPROC.EQU" ;MPROC EQUATES
.INCLUDE "DISP.EQU" ;DISPLAY PROC. EQUATES
.INCLUDE "\VIDEO\SYS\SYS.INC" ;Z UNIT SYSTEM EQUATES
.INCLUDE "\VIDEO\SYS\MACROS.HDR" ;MACROS DEFINITIONS
.INCLUDE "IMGTBL.GLO"
.INCLUDE "ROBO.EQU"
.INCLUDE "MUTEXP.TBL"
.INCLUDE "MAC2.ASM" ;MACRO 2 DEFINITIONS
.INCLUDE "AUDIT.EQU"
;
;SOUND HEADERS USED HERE
;
.REF MBANG,BUBL,EXP3,YAMOFF,EXP3HI,LAZSND,VICMSC,EXP3HIA
.REF AWWSND,EESND,ONOSND,WPWPSND,WPSSND,NOWAY,OUCH,CROWD1
.REF MCSPK7
.REF AWWSND2,SOUNDSUP,GOGO,BINGO,MCSPK4,MCSPK8,CIRCUIT
;
;SYMBOLS EXTERNALLY DEFINED
;
.REF CLNPAL,WAVEYX,CHKFREE,O_ITEMS2,BAD0,GET_ADJ
.REF EXPTLXY,EXPLRXY,DEXIT,BOSSON,GAMSTATE,ENDON,BOOM3
.REF GPALOBJ,TTORSO,FRANIM,RANGRAND,SHAKER,XYSKOBJ,CVRT
.REF GETHDR,RANDPER,PLYROBJS,STATUS,SHK_ON,NEWV
.REF KP_TS,HALT,PCNT,FLASHME,OBJOFF,OBJON,ARMOFF
.REF SCRTSTG,BOOM2,XVEL,YVEL,P1DATA,P2DATA,SCRADD2
.REF ARMOFF2,ADDPCS2,OVALBLD,CLUSTER,KILL_F2_NO,SCRTST
;
;SYMBOLS DEFINED IN THIS FILE
;
.DEF O_MUT,TOID_ON,KIL_SNK,BOOMN,MARM6A,DOSHK0,MUTPTR
.DEF MUT_HIT,EXP_BULL,EXP_BULL2,GETSPK,MCON
;
;UNINITIALIZED RAM DEFINITIONS
;
.BSS MCON,16
.BSS KPPLYR,32
.BSS SNDCNT,16
.BSS POPFLG,8
.BSS POP,8
.BSS DMGSK,16
.BSS DMGPNT,8
.BSS DMG,16
.BSS KPA10,8
.BSS PLYRAD,8
.BSS INAIR,8
.BSS FISTDN,8
.BSS MEMAD,16
.BSS MEROAR,16
.BSS TOTLZRS,8
.BSS HEADV,8
.BSS SKVW,8
.BSS SCNTR,8
.BSS UPDT,16
.BSS MDIR,8
.BSS TIMES,8
.BSS PLS,8 ;SLEEP CNTR USED FOR BOTH FAST AND SLOW POUND
.BSS PRS,8
.BSS FISTLP,32
.BSS FISTRP,32
.BSS PNDRP,32
.BSS PNDLP,32
.BSS POSEL,32
.BSS POSER,32
.BSS FPNDRP,32
.BSS FPNDLP,32
.BSS TOID_ON,8
.BSS TRDSLP,8
.BSS TRDFTRP,32
.BSS TRDFTLP,32
.BSS TRDSDLP,32
.BSS TRDSDRP,32
.BSS MACTION,8
.BSS MTIME,16
.BSS KP_BELL,32
.BSS SNKOUT,8
.BSS MUTPTR,32
;
;EQUATES FOR THIS FILE
;
DNYVEL .EQU 0E000H
DNYVEL2 .EQU 01A000H ;01C000H
UPYVEL .EQU -09000H
UPYVEL2 .EQU -01A000H ;-01C000H
;
;BEAM DATA STRUCTURE
;
PCS .EQU PDATA ;UHB TIMES TO LAY THIS BEAM DOWN
SLP .EQU PDATA+8
;
;MUTOID DATA STRUCTURE
;
TNKL .EQU PDATA ;UHL TANK LEFT PTR
TNKR .EQU PDATA+32 ;UHL TANK RGT PTR
TRSL .EQU PDATA+64 ;UHL TORSO LEFT PTR
TRSR .EQU PDATA+96 ;UHL TORSO RGT PTR
ARML .EQU PDATA+128 ;UHL ARM LEFT PTR
ARMR .EQU PDATA+160 ;UHL ARM RGT PTR
TRDLF .EQU PDATA+192 ;UHL TANK LEFT/FRONT TREAD
TRDRF .EQU PDATA+224 ;UHL TANK RGT/FRONT TREAD
TRDLS .EQU PDATA+256 ;UHL TANK LEFT/SIDE TREAD
TRDRS .EQU PDATA+288 ;UHL TANK RGT/SIDE TREAD
SHADR .EQU PDATA+320 ;UHL SHADOW ON RIGHT SIDE OF TANK
SHADF .EQU PDATA+352 ;UHL SHADOW IN FRONT OF TANK
MHEAD .EQU PDATA+384 ;UHL HEAD PTR
;
MAXPCS .EQU 10
LSTPC .EQU MAXPCS-1
;
;DATA STRUCTURE OF MASTER PIECE POINTER
;
BLDVW .EQU PDATA ;UHB BLADE VIEW 0-3
CDELAY .EQU PDATA+8 ;UHB DELAY BEFORE UPDATING
DLY .EQU PDATA+16 ;UHL DLY VEL UPDATE FOR THIS CNT
GDIE .EQU PDATA+48 ;UHB GONNA DIE FLAG
SKTM .EQU PDATA+56 ;UHW
SKHITS .EQU PDATA+72 ;UHB
;
;UNINITIALIZED RAM DEFINITIONS
;
.BSS OOF,16
.BSS CHEEK,16
.BSS TRAM1,32*MAXPCS+32
.BSS SCRL,8
.BSS TRAM2,32*MAXPCS
.TEXT
;
O_MUT
CREATE DUM_ID,MUTOID
RETS
OCH SLEEP 23
MOVI OUCH,A0
MOVE @MCON,A1
JRZ OCH1
MOVI MCSPK7,A0
OCH1
CALLA ONESND
DIE
MUTOID:
;SHAKE SCREEN
CLR A1
MOVE @CIRCUIT,A0
CMPI 2,A0
JRNZ JJ1
MOVK 1,A1
JJ1 MOVE A1,@MCON
MOVI EXP3HI,A0
CALLA ONESND
CALLR DOSHK0
SLEEP 5
CALLR DOSHK0
SLEEP 5
MOVI EXP3HI,A0
CALLA ONESND
CALLR DOSHK0
SLEEP 5
CALLR DOSHK0
MOVI EXP3HI,A0
CALLA ONESND
SLEEP 5
CALLR DOSHK0
CREATE 0,OCH
MOVE @GAMSTATE,A0,W
MOVI 300+400-90+180,A9
CMPI INAMODE,A0
JRNZ MD1
;NO WAY SOUND CALL
CLR A0
MOVE A0,@SOUNDSUP
;SOUNDS OFF IN DEMO
ADJUST ADJMUSIC ;GET MUSIC ON OFF FOR DEMO
MOVE A0,A0
JRNZ NONO
MOVI NOWAY,A0
CALLA ONESND
NONO MOVI 0FDH,A9
MOVK 1,A0
MOVE A0,@SOUNDSUP
MD1
MOVI 0FFH,A0
MOVB A0,@KP_TS
SLEEP 1
DSJS A9,MD1
; MOVI DLSTZ,A1
; CALLA UNGET
CALLA CLNPAL
SLEEP 1
;TURN ON ALL PIECES
MOVK 13,A9
TP MOVE A9,A0
SLL 5,A0
MOVE @MCON,A1
JRZ NOMC
ADDI MCLIST,A0
JRUC MC
NOMC ADDI ONLIST,A0
MC MOVE *A0,A14,L
CALLA GPALOBJ ;ALLOCATE A COLOR PALETTE
CALLA STFOBJ ;STUFF OBJECT DATA
MOVE A13,*A0(OPLINK),L
CALLA INSOBJ ;INSERT OBJECT INTO LIST
MOVE A0,A8
MOVI 173,A11 ;X
MOVI -70,A10 ;Y
MOVE A10,*A8(OYPOS),W
MOVE A11,*A8(OXPOS),W
CALLA ADJSTWTL
MOVE *A8(OPAL),A0,L
ANDI 0FFFFH,A0
MOVE A0,*A8(OPAL),L
MOVE A9,A0
DEC A0
SLL 5,A0
ADD A13,A0
ADDI TNKL,A0
MOVE A8,*A0,L
DEC A9
JRNZ TP
;OBJECTS ALL ON
MOVB A9,@TOTLZRS
MOVE A9,@DMGPNT
MOVE A9,@DMG
MOVI 150,A9 ;200 ;FIRST LEVEL OF DAMAGE TO GET TO.
MOVE A9,@DMGSK
MOVK 1,A0
MOVB A0,@TOID_ON
MOVB A0,@BOSSON
MOVE A13,@MUTPTR,L
MOVE *A13(TNKL),A8,L
MOVE A13,A10
CLR A9 ;TORSO ON LEFT OF TANK
CREATE TNKPID,TTORSO
MOVE A13,A10
MOVK 1,A9
CREATE TNKPID,TTORSO
CREATE BONPID,BELLY
MOVE *A13(MHEAD),A9,L
CREATE BONPID,DO_HEAD
CREATE BONPID,SKPLYR
CREATE BONPID,GETDOWN
CLR A0 ;ROLL IN FROM DOOR
CALLA GET_ST ;SET INITIAL ACTION
SLEEP 3
TOID_TOP
MOVE @HALT,A0
JRZ TT2
; CLR A0
; MOVE A0,*A8(OXVEL),L
; MOVE A0,*A8(OYVEL),L
; CALLR MOD_VELS
CALLR LINE_UP ;ADJUST ALL PARTS TO MATCH TANK LEFT
SLEEP 1
JRUC TOID_TOP
TT2
CALLR LINE_UP ;ADJUST ALL PARTS TO MATCH TANK LEFT
CALLR MV_TNK
MOVE A8,*A13(TNKL),L
SLEEP 1
JRUC TOID_TOP
GETDOWN
MOVI 180,A9
GETD SLEEP 1
MOVE @HALT,A0
JRNZ GETD
MOVE @MUTPTR,A1,L
MOVE *A1(TNKL),A8,L
MOVI DNYVEL,A0
MOVE A0,*A8(OYVEL),L
DSJ A9,GETD
DIE
SKPLYR
SLEEP 24*60
MOVE @HALT,A0
JRNZ SKPLYR
SKTP
;MAYBE JERK TOWARD PLAYER
MOVE @PLYROBJS,A0,L
MOVB @PCNT,A1
ANDI 1,A1
JREQ COP1
MOVE @PLYROBJS+32,A0,L
COP1 MOVE @MUTPTR,A1,L
MOVE *A1(TNKL),A8,L
CALLA PLTLINE
MOVE A5,A9 ;X
MOVE A6,A10 ;Y
;SHAKE MUTOID MAN
CREATE BONPID,XYADJ
MOVI 30,A11
COP2
MOVE A9,*A8(OXVEL),L
MOVE A10,*A8(OYVEL),L
MOVE *A8(OXVAL),A1,L
MOVE @WORLDTLX,A2,L
SUB A2,A1
CMPI [90,0],A1
;HAS IS HIT LEFT, STOP IT FROM MOVING MORE TO LEFT
JRNC RTGOR
MOVI 020000H,A9
MOVK 1,A11
RTGOR
CMPI [245,0],A1
JRC RTOK
MOVI -020000H,A9
MOVK 1,A11
RTOK
MOVE *A8(OYVAL),A1,L
MOVE @WORLDTLY,A2,L
SUB A2,A1
CMPI [40,0],A1
;HAS IS HIT LEFT, STOP IT FROM MOVING MORE TO LEFT
JRNC RTYGO
MOVI 18000H,A10
; MOVK 1,A11
RTYGO
CMPI [170,0],A1
JRC CONT
MOVI -18000H,A10
MOVK 1,A11
CONT
SLEEP 2
DEC A11
JRNZ COP2
MOVE A11,*A8(OXVEL),L
MOVE A11,*A8(OYVEL),L
SLEEP 5*60
JRUC SKTP
;
MUT_HIT
;A8=PIECE HIT
;A0=BULLET PNTR
;
;IF GRENADE, DO DAMAGE
;IF SPEW, DO DAMAGE
;IF LAZER WEAPON, DO NOTHING
;IF NOT JUST FLASH IMAGE
MMTM SP,A1,A2,A7,A9,A10
MOVE *A8(OID),A1
ANDI 0FFFFH,A1
CMPI CLSENMY|TYPMUT|SUBSNK,A1
JREQ SNKHIT
MOVE *A0(OID),A1
CMPI CLSPLYR|TYPPLBL|SUBLZR,A1
JREQ NADA2
CMPI CLSPLYR|TYPPLBL|SUBGRND,A1
JREQ NF2
CMPI CLSPLYR|TYPPLBL|SUBSPEW,A1
JREQ NADA
;MORE DAMAGE IF SPEW2!
MOVE *A8(OID),A1
ANDI 0FFFFH,A1
CMPI CLSENMY|TYPMUT|SUBHD,A1
JREQ NADA
;A2=P1DATA OR P2DATA
MOVE *A0(OPLINK),A0,L
MOVB *A0(MYPLYR),A0
MOVI P1DATA,A2
CMPI 1,A0
JREQ YU7
CMPI 2,A0
JRNZ YU7A
MOVI P2DATA,A2
YU7
MOVI MUTPT,A1 ;AMOUNT OF SCORE
MOVE A2,@KPPLYR,L
CALLA SCRADD2 ;DO IT!
;
YU7A MOVI 2,A0
CALLR DAMAGE
NF
MOVI 03F3F0000H,A9
CREATE 0,FLASHME
;
NADA MMFM SP,A1,A2,A7,A9,A10
RETS
NADA2
MOVK 15,A0 ;50 ;90 ;60
CALLA RANDPER
JRNC NADA
MOVE @DMG,A2
MOVE @DMGSK,A1
CMP A1,A2
JRNC AHITU
ADDK 1,A2
MOVE A2,@DMG
CMPI 3,A0
JRNC NADA
AHITU
MOVI 5,A0
MOVE A0,@MEMAD
MOVI 15,A0
MOVE A0,@OOF
MOVI EESND,A0
CALLA ONESND
JRUC NADA
NF2
;A2=P1DATA OR P2DATA
MOVE *A0(OPLINK),A0,L
MOVB *A0(MYPLYR),A0
MOVI P1DATA,A2
CMPI 1,A0
JREQ YU8
CMPI 2,A0
JRNZ YU8A
MOVI P2DATA,A2
YU8
;A2=P1DATA OR P2DATA
MOVE A2,@KPPLYR,L
MOVI MUTPT,A1 ;AMOUNT OF SCORE
CALLA SCRADD2 ;DO IT!
;TELL HEAD TO OOF!
YU8A MOVI 15,A0
MOVE A0,@OOF
MOVI 15,A0
CALLR DAMAGE
CALLR GETSPK
JRUC NF
GETSPK
MOVE @SNDCNT,A0
INC A0
MOVE A0,@SNDCNT
ANDI 03H,A0
JRZ S2
SLL 5,A0
MOVE @MCON,A1
JRZ KOP
ADDI SNDLSTZ,A0
JRUC KOP2
KOP ADDI SNDLST,A0
KOP2 MOVE *A0,A0,L
CALLA ONESND
RETS
S2 MOVI 250,A0
CALLA RANDPER
JRC S3
MOVI AWWSND2,A0
CALLA ONESND
RETS
S3 MOVI AWWSND,A0
CALLA ONESND
RETS
SNDLST .LONG AWWSND,OUCH,EXP3HIA,ONOSND
SNDLSTZ .LONG MCSPK7,GOGO,MCSPK4,MCSPK8
DAMAGE
MOVE A0,A2
MOVE @DMG,A1
ADD A0,A1
MOVE A1,@DMG
MOVE @DMGSK,A0
CMP A0,A1
JRNC AHIT
CMPI 15,A2
JRZ DF4
MOVI 500,A0
CALLA RANDPER
JRNC DF5
DF4
PUSH A0
CREATE BONPID,XYADJ
PULL A0
CMPI 200,A0
JRNC DF5
ANDI 03,A0
SLL 5,A0
MOVE @MCON,A1
JRZ NN1
ADDI SNDLSTZ,A0
JRUC NN2
NN1
ADDI OTBL,A0
NN2 MOVE *A0,A0,L
CALLA ONESND
MOVI 20,A0
MOVE A0,@MEMAD
DF5
RETS
OTBL .LONG OUCH,AWWSND,EESND,ONOSND
XYADJ
;ADJUST MUTOID X/Y
MOVK 10,A9 ;14
MOVE @MCON,A0
JRZ I80
MOVK 20,A9 ;14
I80
MOVE @MUTPTR,A0,L
MOVE *A0(TNKL),A8,L
; MOVE *A0(TNKR),A10,L
XY2
MOVE @DMGSK,A0
ANDI 0FFFFH,A0
CMPI 0FFFFH,A0
JREQ DI
MOVE @MCON,A0
JRZ I801
MOVI -5,B0 ;-4
MOVI 5,B1 ;4
JRUC FOUT
I801
MOVI -3,B0 ;-4
MOVI 3,B1 ;4
FOUT CALLA RANGRAND
MOVE *A8(OXPOS),A1
ADD A0,A1
CALLA CKBNDX
JRC HITX
MOVE A1,*A8(OXPOS)
HITX
MOVE @MCON,A0
JRZ I802
MOVI -5,B0 ;-4
MOVI 5,B1 ;4
JRUC FOUT1
I802
MOVI -3,B0 ;-4
MOVI 3,B1 ;4
FOUT1 CALLA RANGRAND
MOVE *A8(OYPOS),A1
ADD A0,A1
CALLA CKBNDY
JRC HITY
MOVE A1,*A8(OYPOS)
HITY
; MOVE *A8(OYPOS),A0
; MOVE A0,*A10(OYPOS)
SLEEP 3
DEC A9
JRNZ XY2
DI DIE
XYADJ2
;ADJUST MUTOID X/Y
MOVK 10,A9 ;14
MOVE @MCON,A0
JRZ I90
MOVK 20,A9 ;14
I90
MOVE @MUTPTR,A0,L
MOVE *A0(TNKL),A8,L
; MOVE *A0(TNKR),A10,L
XY22
MOVI -8,B0 ;-4
MOVI 8,B1 ;4
CALLA RANGRAND
MOVE *A8(OXPOS),A1
ADD A0,A1
CALLA CKBNDX
JRC HITX2
MOVE A1,*A8(OXPOS)
HITX2 MOVI -8,B0 ;-4
MOVI 8,B1 ;4
CALLA RANGRAND
MOVE *A8(OYPOS),A1
ADD A0,A1
CALLA CKBNDY
JRC HITY2
MOVE A1,*A8(OYPOS)
HITY2
; MOVE *A8(OYPOS),A0
; MOVE A0,*A10(OYPOS)
SLEEP 3
DEC A9
JRNZ XY22
DIE
CKBNDX
PUSH A1
MOVE @WORLDTLX,A2,L
SLL 16,A1
SUB A2,A1
CMPI [100,0],A1
;HAS IS HIT LEFT, STOP IT FROM MOVING MORE TO LEFT
JRC RTBAD
CMPI [235,0],A1
JRNC RTBAD
PULL A1
CLRC
RETS
RTBAD PULL A1
SETC
RETS
CKBNDY
PUSH A1
MOVE @WORLDTLY,A2,L
SLL 16,A1
SUB A2,A1
CMPI [40,0],A1
;HAS IS HIT LEFT, STOP IT FROM MOVING MORE TO LEFT
JRC RTBAD
CMPI [160,0],A1
JRNC RTBAD
PULL A1
CLRC
RETS
AHIT
ADDI 40,A0 ;55
MOVE @MCON,A1
JRZ AHIY
ADDI 35,A0 ;25
AHIY
MOVE A0,@DMGSK
CREATE 0,AHITPRC
RETS
AHITPRC
CALLR HITRC2
DIE
HITRC2
MOVB @DMGPNT,A0
INC A0
MOVB A0,@DMGPNT
SLL 5,A0
ADDI JPTBLH,A0
MOVE *A0,A0,L
JUMP A0
JPTBLH .LONG 0,LFARM,RGTARM,BLOCHST,BLOHD,BLOCHST2,KILLMUT,TAG,TAG
TAG RETS
GETDMGSK
MOVI 0250,A1 ;300
MOVE @STATUS,A0
CMPI 3,A0
JRNZ ONEP
MOVI 300,A1 ;400
ONEP
MOVE @DMGSK,A0
ADD A1,A0
MOVE A0,@DMGSK
RETS
LFARM
CREATE 0,TAG1
CALLR GETDMGSK
MOVI MUTPT3,A1 ;AMOUNT OF SCORE FOR ARMS ETC
MOVE @KPPLYR,A2,L
CALLA SCRADD2 ;DO IT!
RETS
TAG1
MOVI OUCH,A0
CALLA ONESND
;COVER ARM WITH SMALL EXP
MOVI 105,A10
TL0 CREATE 0,COVER
SLEEP 3
DSJS A10,TL0
MOVI ONOSND,A0
CALLA ONESND
SLEEP 25
;BLOW OFF LEFT ARM
MOVE @MUTPTR,A0,L
MOVE *A0(ARML),A10,L ;ARML
CREATE 0,TURN1
CREATE 0,THROWL
SLEEP 40
MOVI EESND,A0
CALLA ONESND
DIE
TAG2
MOVI ONOSND,A0
CALLA ONESND
;COVER ARM WITH SMALL EXP
MOVI 105,A10
TL01 CREATE 0,COVER2 ;COVER2
SLEEP 3
DSJS A10,TL01
SLEEP 25
MOVI AWWSND,A0
CALLA ONESND
;BLOW OFF RGT ARM
MOVE @MUTPTR,A0,L
MOVE *A0(ARMR),A10,L ;ARMR
CREATE 0,TURN1
CREATE 0,THROWR
SLEEP 60
MOVI AWWSND,A0
CALLA ONESND
DIE
RGTARM
CREATE 0,TAG2
CALLR GETDMGSK
MOVI MUTPT3,A1 ;AMOUNT OF SCORE FOR ARMS ETC
MOVE @KPPLYR,A2,L
CALLA SCRADD2 ;DO IT!
RETS
BLOCHST
CREATE 0,THROWC
CALLR GETDMGSK
MOVI ONOSND,A0
CALLA ONESND
MOVI MUTPT3,A1 ;AMOUNT OF SCORE FOR ARMS ETC
MOVE @KPPLYR,A2,L
CALLA SCRADD2 ;DO IT!
RETS
BLOHD
MOVI OUCH,A0
CALLA ONESND
MOVE @MUTPTR,A0,L
MOVE *A0(MHEAD),A10,L ;MHEAD
CREATE 0,TURN1
CREATE 0,THROWH
CALLR GETDMGSK
MOVI MUTPT3,A1 ;AMOUNT OF SCORE FOR ARMS ETC
MOVE @KPPLYR,A2,L
CALLA SCRADD2 ;DO IT!
RETS
BLOCHST2
MOVI NOWAY,A0
CALLA ONESND
MOVE @MUTPTR,A0,L
MOVE *A0(TRSL),A10,L ;TRSL
CREATE 0,TURN1
MOVE @MUTPTR,A0,L
MOVE *A0(TRSR),A10,L ;TRSR
CREATE 0,TURN1
CREATE 0,THROWC2
MOVE @MUTPTR,A0,L
MOVE *A0(MHEAD),A0,L ;MHEAD
MOVE *A0(OFLAGS),A1
ORI M_NOCOLL,A1
MOVE A1,*A0(OFLAGS)
CALLA OBJON
MOVI 131,A1
MOVE A1,*A0(OZPOS)
CALLR GETDMGSK
MOVI MUTPT3,A1 ;AMOUNT OF SCORE FOR ARMS ETC
MOVE @KPPLYR,A2,L
CALLA SCRADD2 ;DO IT!
CLR A0
MOVB A0,@TOTLZRS ;TOTAL LAZER SHOTS HE WILL SHOOT
RETS
KILLMUT
;KILL MUTOID PROCESS
;BLOW UP FATMEN REMAINING!
;KILL SNAKE, LAZERS
MOVI MUTPT2,A1 ;AMOUNT OF SCORE AT END
MOVE @KPPLYR,A2,L
CALLA SCRADD2 ;DO IT!
MOVI OUCH,A0
CALLA ONESND
MOVK 1,A0
MOVB A0,@ENDON
MOVI CLSENMY|TYPORBL,A0
MOVI 0FFFFH,A1
CALLA KILOBJ
MOVI CLSENMY|TYPMUT|SUBSNK,A0
CALLA KILOBJ
BAD1
MOVI CLSENMY|TYPFAT,A0
MOVI 0FFFFH,A1
CALLA EXISTOBJ
JRZ BAD2
;FOUND A FAT
MOVE A0,A8
;NO SCORE FOR THESE FAT GUYS
CALLA KILL_F2_NO ;KILL_FAT
JRUC BAD1
BAD2
MOVI BONPID,A0
CLR A1
NOT A1
CALLA KILALL
MOVI LORDPID,A0
CALLA KILALL
MOVI CLSNEUT|TYPNEUT|SUBCHNK2,A0
CLR A1
NOT A1
CALLA KILOBJ
CREATE 0,SPW2
MOVI 0FFFFH,A0
MOVE A0,@DMGSK
CREATE 0,VIC
RETS
VIC SLEEP 30
;TURN ON VICTORY MUSIC!
MOVI VICMSC,A0
CALLA ONESND
DIE
SPW2
;SPEW BIG
CALLA DOSHK0
CLR A0
MOVE @MUTPTR,A9,L
MOVE *A9(TNKL),A8,L
MOVE A0,*A8(OXVEL),L
MOVE A0,*A8(OYVEL),L
PUSH A13
MOVE A9,A13
CALLR MOD_VELS
PULL A13
MOVI DUM_ID,A0
CLR A1
NOT A1
CALLA KILALL
PUSH A8
MOVE *A9(MHEAD),A8,L
MOVI -01B000H,B0
MOVI 01B000H,B1
CALLA RANGRAND
MOVE A0,*A8(OXVEL),L
MOVI -012000H,B0
MOVI 012000H,B1
CALLA RANGRAND
MOVE A0,*A8(OYVEL),L
MOVI MUG1B,A1
MOVE @MCON,A4
JRZ NOBB
MOVI MUG1BZ,A1
NOBB
MOVE *A8(OFLAGS),A4,W ;NEW OFLAGS
CALLA ANI
MOVI 400,A0
MOVE A0,*A8(OZPOS)
PULL A8
MOVI 180,A9
KM1
MOVK 20,A0
CALLA CHKFREE
JRNE SPEWL0
CREATE 0,SPEW
CREATE 0,SPEW
CREATE 0,SPEW
CREATE 0,SPEW
CREATE 0,SPEW
MOVI BUBL,A0
CALLA ONESND
SPEWL0
SLEEP 1
DEC A9
JRNZ KM1
SLEEP 15H ;55
MOVI YAMOFF,A0
CALLA ONESND
;
;BLOW TANK PIECES OUT TO EDGES!
;
; MOVI CROWD1,A0
; CALLA ONESND
CALLA DOSHK0
SLEEP 10
CREATE 0,SHAKEME
CREATE 0,SMLEXP
SLEEP 3*60
CALLA DOSHK0
CREATE 0,BLOW1
CREATE 0,BLOW2
CREATE 0,BLOW3
CREATE 0,BLOW4
CREATE 0,BLOW5
SLEEP 60*1
CALLA DOSHK0
;WHEN DONE, WE WILL COVER OLD TANK AREA!
MOVE *A8(OYVAL),A0,L
MOVE @WORLDTLY,A4,L
SUB A4,A0
MOVE *A8(OXVAL),A1,L
MOVE @WORLDTLX,A4,L
SUB A4,A1
SRL 16,A1
MOVX A1,A0
MOVI [10H,10H],A1
SUBXY A1,A0
MOVE A0,@EXPTLXY,L
MOVI [060H,050H],A1
ADDXY A1,A0
MOVE A0,@EXPLRXY,L
MOVI 120H,A10
CALLA CLUSTER
SLEEP 60
CREATE 0,BAD0 ;SMART BOMB AND GET RID OF EVERYONE!
;KILL OFF ALL MUTOID OBJECTS
MOVI CLSNEUT|TYPNEUT|SUBCHNK,A0
CLR A1
NOT A1
CALLA KILOBJ
MOVI CLSENMY|TYPMUT,A0
MOVI F_TYPE,A1
CALLA KILOBJ
SLEEP 3*60
CLR A0
MOVB A0,@ENDON
MOVE @MCON,A0
JRZ PIPPEN
CALLA O_ITEMS2
SLEEP 5*60-30
CALLA O_ITEMS2
SLEEP 5*60-30
CALLA O_ITEMS2
SLEEP 5*60-30
CALLA O_ITEMS2
SLEEP 5*60-30
CALLA O_ITEMS2
SLEEP 5*60-30
CALLA O_ITEMS2
SLEEP 5*60-30
PIPPEN CREATE 0,DEXIT
SLEEP 360*60
DIE
SMLEXP MOVI 186H,A9
SM1 SLEEP 1
MOVK 20,A0
CALLA CHKFREE
JRNE DONOT
CREATE 0,SMLE
MOVI EXP3HI,A0
CALLA ONESND
DONOT
DSJ A9,SM1
DIE
SMLE
CALLR SETKBM
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
ADDI 0020000H,A3
ADDI 03A0000H,A2
CALLA GANISAG
MOVE A9,A8
MOVI -060000H,B0
MOVI 060000H,B1
CALLA RANGRAND
MOVE A0,*A8(OXVEL),L
MOVI -060000H,B0
MOVI 060000H,B1
CALLA RANGRAND
MOVE A0,*A8(OYVEL),L
MOVI BOOMN,A9
MOVK 1,A1
JSRP FRANIM
MOVE A8,A0
CALLA DELOBJ
DIE
SETKBM
MOVI KBM,A14 ;BLOOD
CALLA GPALOBJ ;ALLOCATE A COLOR PALETTE
CALLA STFOBJ ;STUFF OBJECT DATA
MOVE A13,*A0(OPLINK),L
CALLA INSOBJ ;INSERT OBJECT INTO LIST
MOVE A0,A8
MOVE *A8(OPAL),A0,L
ANDI 0FFFFH,A0
MOVE A0,*A8(OPAL),L
MOVE A8,A9
MOVE @MUTPTR,A8,L
MOVE *A8(TNKL),A8,L
CALLA GETANIXY
MOVE A9,A0
RETS
SHAKEME MOVI 25,A9 ;25
SH1 CREATE 0,XYADJ2
MOVK 10,A10
SH2
PUSH A13
MOVE @MUTPTR,A13,L
MOVE *A13(TNKL),A8,L
CALLR LINEBLY
CALLA L2UP
PULL A13
SLEEP 1
DSJ A10,SH2
DSJ A9,SH1
DIE
BLOW1
SLEEP 60
MOVK 5,A9
MB1 CREATE 0,BLW1
SLEEP 2
DSJS A9,MB1
DIE
BLOW2
MOVK 9,A9
MB2 CREATE 0,BLW2
SLEEP 10
DSJS A9,MB2
DIE
BLOW3
MOVK 9,A9
MB3 CREATE 0,BLW3
SLEEP 10
DSJS A9,MB3
DIE
BLOW4
MOVK 9,A9
MB4 CREATE 0,BLW4
SLEEP 10
DSJS A9,MB4
DIE
BLOW5
SLEEP 60
MOVK 5,A9
MB5 CREATE 0,BLW5
SLEEP 2
DSJS A9,MB5
DIE
BLW1
;TURN ON OBJECT
;GIVE VELOCITY OUT AWAY FROM TANK
;STOP IT
;BLOW IT UP
;DIE
MOVI TKPC1,A14 ;BLOOD
CALLA BLWON
MOVI -80000H,B0
MOVI 80000H,B1
CALLA RANGRAND
MOVE A0,*A8(OYVEL),L
SLEEP 25
JRUC BLWOFF
BLW2
MOVI TKPC2,A14 ;BLOOD
CALLA BLWON
SLEEP 15
JRUC BLWOFF
BLW5
MOVI TKPC5,A14 ;BLOOD
CALLA BLWON
MOVI -80000H,B0
MOVI 80000H,B1
CALLA RANGRAND
MOVE A0,*A8(OYVEL),L
SLEEP 25
JRUC BLWOFF
BLW4
MOVI TKPC4,A14 ;BLOOD
CALLA BLWON
SLEEP 15
JRUC BLWOFF
BLW3
MOVI TKPC3,A14 ;BLOOD
CALLA BLWON
SLEEP 15
JRUC BLWOFF
BLWOFF
; CLR A0
; MOVE A0,*A8(OXVEL),L
; MOVE A0,*A8(OYVEL),L
;FRANIM LIST OF EXPLOSION
MOVE *A8(OYPOS),A0
ADDI 3AH,A0
MOVE A0,*A8(OYPOS)
MOVI BOOM3,A9
MOVK 1,A1
JSRP FRANIM
MOVE A8,A0
CALLA DELOBJ
DIE
BLWON
CALLA GPALOBJ ;ALLOCATE A COLOR PALETTE
CALLA STFOBJ ;STUFF OBJECT DATA
MOVE A13,*A0(OPLINK),L
CALLA INSOBJ ;INSERT OBJECT INTO LIST
MOVE A0,A8
;ALIGN WITH TANK
MOVE A8,A9
MOVE @MUTPTR,A8,L
MOVE *A8(TNKL),A8,L
CALLA GETANIXY
MOVE A9,A0
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
ADDI 010000H,A3
ADDI 010000H,A2
CALLA GANISAG
MOVE A9,A8
RETS
;SPWAGN SLEEP 5
SPEW
MOVI BLD,A14 ;BLOOD
MOVE @MCON,A0
JRZ SPEWA
MOVI PRZBLD,A14
SPEWA
CALLA GPALOBJ ;ALLOCATE A COLOR PALETTE
; JRZ SPWAGN
CALLA STFOBJ ;STUFF OBJECT DATA
MOVE A13,*A0(OPLINK),L
CALLA INSOBJ ;INSERT OBJECT INTO LIST
MOVE A0,A8
MOVE *A8(OPAL),A0,L
ANDI 0FFFFH,A0
MOVE A0,*A8(OPAL),L
MOVE A8,A9
MOVE @MUTPTR,A8,L
MOVE *A8(TNKL),A8,L
CALLA GETANIXY
MOVE A9,A0
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
ADDI 0020000H,A3
ADDI 0260000H,A2
CALLA GANISAG
MOVE A9,A8
MOVI -010000H,B0
MOVI 010000H,B1
CALLA RANGRAND
MOVE A0,*A8(OXVEL),L
MOVI -010000H,B0
MOVI 010000H,B1
CALLA RANGRAND
MOVE A0,*A8(OYVEL),L
MOVI OVALBLD2,A9
; MOVE @MCON,A0
; JRZ SPEWB
; MOVI OVALPRZ,A9
;SPEWB
MOVK 1,A1
JSRP FRANIM
MOVE A8,A0
CALLA DELOBJ
DIE
OVALBLD2:
;OVAL BLOOD EXPLOSION
.LONG bldclt1
.WORD NEWPALET|1
.LONG nup1
.LONG bldclt2
.WORD 3
.LONG bldclt3
.WORD 3
.LONG bldclt4
.WORD 3
.LONG bldclt5
.WORD 3
.LONG bldclt6
.WORD 3
.LONG bldclt7
.WORD 3
.LONG bldclt8
.WORD 3
.LONG 0
;OVALPRZ:
;PRIZE
; .LONG PRZ1
; .WORD 1
; .LONG PRZ2
; .WORD 3
; .LONG CNS
; .WORD 3
; .LONG GLD
; .WORD 3
; .LONG PRZ3
; .WORD 3
; .LONG CASH
; .WORD 3
; .LONG GLD
; .WORD 3
; .LONG PRZ1
; .WORD 3
; .LONG 0
BLOSND
SLEEP 60
MOVI WPSSND,A0
CALLA ONESND
SLEEP 60
MOVI WPSSND,A0
CALLA ONESND
SLEEP 60
MOVI WPSSND,A0
CALLA ONESND
DIE
OHSND
MOVI OUCH,A0
CALLA ONESND
SLEEP 30 ;60
MOVI AWWSND,A0
CALLA ONESND
SLEEP 20 ;80
MOVI OUCH,A0
CALLA ONESND
DIE
THROWL
CREATE 0,OHSND
;CREATE SEVERAL ARMS BLOWING OFF BODY TO LEFT
MOVK 9,A10
TL1
CREATE 0,SENDL
SLEEP 10
PUSH A10
CALLA DOSHK0
PULL A10
DSJS A10,TL1
CREATE 0,ADDPCS2
CREATE 0,ADDPCS2
CREATE 0,ADDPCS2
CREATE 0,ADDPCS2
CREATE 0,ADDPCS2
DIE
COVER2
MOVI KBM,A14
CALLA GPALOBJ ;ALLOCATE A COLOR PALETTE
CALLA STFOBJ ;STUFF OBJECT DATA
MOVE A13,*A0(OPLINK),L
CALLA INSOBJ ;INSERT OBJECT INTO LIST
MOVE A0,A8
MOVE *A8(OPAL),A0,L
ANDI 0FFFFH,A0
MOVE A0,*A8(OPAL),L
MOVE A8,A9
MOVE @MUTPTR,A8,L
MOVE *A8(TNKL),A8,L ;ARML
CALLA GETANIXY
MOVE A9,A0
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
ADDI 0240000H,A2
ADDI 01F0000H,A3 ;X
JRUC FRT
COVER
MOVI KBM,A14
CALLA GPALOBJ ;ALLOCATE A COLOR PALETTE
CALLA STFOBJ ;STUFF OBJECT DATA
MOVE A13,*A0(OPLINK),L
CALLA INSOBJ ;INSERT OBJECT INTO LIST
MOVE A0,A8
MOVE *A8(OPAL),A0,L
ANDI 0FFFFH,A0
MOVE A0,*A8(OPAL),L
MOVE A8,A9
MOVE @MUTPTR,A8,L
MOVE *A8(TNKL),A8,L ;ARML
CALLA GETANIXY
MOVE A9,A0
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
ADDI 0240000H,A2
SUBI 01F0000H,A3
FRT
CALLA GANISAG
MOVE *A8(OXVEL),A0,L
MOVE *A8(OYVEL),A1,L
MOVE A1,*A9(OYVEL),L
MOVE A0,*A9(OXVEL),L
MOVE A9,A8
MOVI -0F0000H,B0
MOVI 0F0000H,B1
CALLA RANGRAND
MOVE *A8(OXVAL),A1,L
ADD A0,A1
MOVE A1,*A8(OXVAL),L
MOVI -0F0000H,B0
MOVI 0F0000H,B1
CALLA RANGRAND
MOVE *A8(OYVAL),A1,L
ADD A0,A1
MOVE A1,*A8(OYVAL),L
MOVI BOOMN,A9
MOVK 1,A1
JSRP FRANIM
MOVE A8,A0
CALLA DELOBJ
DIE
SENDL
;BEGIN OBJ
;ALIGN WITH OLD LEFT ARM
;GIVE VELOCITIES
;FRANIM
;DELOBJ
MOVI ST5,A14
MOVE @MCON,A1
JRZ NOMCA
MOVI ST5Z,A14
NOMCA CALLA GPALOBJ ;ALLOCATE A COLOR PALETTE
CALLA STFOBJ ;STUFF OBJECT DATA
MOVE A13,*A0(OPLINK),L
CALLA INSOBJ ;INSERT OBJECT INTO LIST
MOVE A0,A8
MOVE *A8(OPAL),A0,L
ANDI 0FFFFH,A0
MOVE A0,*A8(OPAL),L
MOVE A8,A9
MOVE @MUTPTR,A8,L
MOVE *A8(TNKL),A8,L
AGA
CALLA GETANIXY
MOVE A9,A0
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
CALLA GANISAG
MOVE A9,A8
CREATE 0,FRBALLL
CREATE 0,FRBALL2L
CREATE 0,FRBALL2L
CREATE 0,FRBALL2L
MOVI -020000H,B0
MOVI 020000H,B1
CALLA RANGRAND
MOVE A0,*A8(OYVEL),L
MOVI FLIPL,A9
MOVE @MCON,A1
JRZ NOMCA1
MOVI FLIPLZ,A9
NOMCA1 MOVK 1,A1
JSRP FRANIM
STILL SLEEP 40
CALLA SCRTST
JRZ STILL
MOVE A8,A0
CALLA DELOBJ
DIE
FRBALL
MOVE *A8(OXVEL),A6,L
MOVE *A8(OYVEL),A7,L
JAUC ARMOFF
FRBALL2
MOVE *A8(OXVEL),A6,L
MOVI -020000H,B0
MOVI 020000H,B1
CALLA RANGRAND
ADD A0,A6
MOVI -020000H,B0
MOVI 020000H,B1
CALLA RANGRAND
MOVE A0,A7
JAUC ARMOFF
FRBALLR
; MOVE *A8(OXPOS),A0
; ADDI 15,A0
; MOVE A0,*A8(OXPOS)
; JRUC X1
FRBALLL
; MOVE *A8(OXPOS),A0
; SUBI 15,A0
; MOVE A0,*A8(OXPOS)
;X1
MOVE *A8(OXVEL),A6,L
MOVE *A8(OYVEL),A7,L
JAUC ARMOFF
FRBALL2R
; MOVE *A8(OXPOS),A0
; SUBI 15,A0
; MOVE A0,*A8(OXPOS)
; JRUC X2
FRBALL2L
; MOVE *A8(OXPOS),A0
; SUBI 15,A0
; MOVE A0,*A8(OXPOS)
;X2
MOVE *A8(OXVEL),A6,L
MOVI -020000H,B0
MOVI 020000H,B1
CALLA RANGRAND
ADD A0,A6
MOVI -020000H,B0
MOVI 020000H,B1
CALLA RANGRAND
MOVE A0,A7
JAUC ARMOFF
FRBALL1
MOVE *A8(OXVEL),A6,L
MOVE *A8(OYVEL),A7,L
JAUC ARMOFF2
FRBALL3
MOVE *A8(OXVEL),A6,L
MOVI -020000H,B0
MOVI 020000H,B1
CALLA RANGRAND
ADD A0,A6
MOVI -020000H,B0
MOVI 020000H,B1
CALLA RANGRAND
MOVE A0,A7
JAUC ARMOFF2
THROWR
CREATE 0,OHSND
;CREATE SEVERAL ARMS BLOWING OFF BODY TO LEFT
MOVK 9,A10
TL2
CREATE 0,SENDR
SLEEP 10
PUSH A10
CALLA DOSHK0
PULL A10
DSJS A10,TL2
CREATE 0,ADDPCS2
CREATE 0,ADDPCS2
CREATE 0,ADDPCS2
CREATE 0,ADDPCS2
CREATE 0,ADDPCS2
CREATE 0,ADDPCS2
DIE
SENDR
;BEGIN OBJ
;ALIGN WITH OLD LEFT ARM
;GIVE VELOCITIES
;FRANIM
;DELOBJ
MOVI ST6,A14
MOVE @MCON,A1
JRZ NOMCB
MOVI ST6Z,A14
NOMCB CALLA GPALOBJ ;ALLOCATE A COLOR PALETTE
CALLA STFOBJ ;STUFF OBJECT DATA
MOVE A13,*A0(OPLINK),L
CALLA INSOBJ ;INSERT OBJECT INTO LIST
MOVE A0,A8
MOVE *A8(OPAL),A0,L
ANDI 0FFFFH,A0
MOVE A0,*A8(OPAL),L
MOVE A8,A9
MOVE @MUTPTR,A8,L
MOVE *A8(TNKL),A8,L ;ARMR
CALLA GETANIXY
MOVE A9,A0
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
CALLA GANISAG
MOVE A9,A8
CREATE 0,FRBALLR
CREATE 0,FRBALL2R
CREATE 0,FRBALL3
CREATE 0,FRBALL2R
MOVI -020000H,B0
MOVI 020000H,B1
CALLA RANGRAND
MOVE A0,*A8(OYVEL),L
MOVI FLIPR,A9
MOVE @MCON,A1
JRZ NOMCA3
MOVI FLIPRZ,A9
NOMCA3 MOVK 1,A1
JSRP FRANIM
STL1 SLEEP 40
CALLA SCRTST
JRZ STL1
MOVE A8,A0
CALLA DELOBJ
DIE
ST5 ;ARM LEFT
.LONG 0,0,MARM1
.WORD 228,DMAWNZ+M_NOCOLL,CLSNEUT|TYPNEUT
.LONG -40000H,-10000H
ST5Z ;ARM LEFT
.LONG 0,0,MARM1Z
.WORD 228,DMAWNZ+M_NOCOLL,CLSNEUT|TYPNEUT
.LONG -40000H,-10000H
ST6 ;ARM RGT
.LONG 0,0,MARM1
.WORD 228,DMAWNZ+M_FLIPH+M_NOCOLL,CLSNEUT|TYPNEUT
.LONG 040000H,-10000H
ST6Z ;ARM RGT
.LONG 0,0,MARM1Z
.WORD 228,DMAWNZ+M_FLIPH+M_NOCOLL,CLSNEUT|TYPNEUT
.LONG 040000H,-10000H
STCR ;ARM RGT
.LONG 0,0,TRS1
.WORD 228,DMAWNZ+M_FLIPH+M_NOCOLL,CLSNEUT|TYPNEUT
.LONG 050000H,0H
STCRZ ;ARM RGT
.LONG 0,0,TRS1Z
.WORD 228,DMAWNZ+M_FLIPH+M_NOCOLL,CLSNEUT|TYPNEUT
.LONG 050000H,0H
TKPC1 ;
.LONG 0,0,MTNK1A
.WORD 328,DMAWNZ+M_NOCOLL,CLSNEUT|TYPNEUT
.LONG -50000H,0H
TKPC2
.LONG 0,0,TRD2
.WORD 328,DMAWNZ+M_NOCOLL,CLSNEUT|TYPNEUT
.LONG -40000H,30000H
TKPC3
.LONG 0,0,BELLY2
.WORD 328,DMAWNZ+M_NOCOLL,CLSNEUT|TYPNEUT
.LONG 0H,38000H
TKPC4
.LONG 0,0,TRD2
.WORD 328,DMAWNZ+M_FLIPH+M_NOCOLL,CLSNEUT|TYPNEUT
.LONG 40000H,30000H
TKPC5
.LONG 0,0,MTNK1A
.WORD 328,DMAWNZ+M_FLIPH+M_NOCOLL,CLSNEUT|TYPNEUT
.LONG 50000H,0H
BLD ;ARM RGT
.LONG 0,0,bldclt1
.WORD 228,DMAWNZ+M_NOCOLL,CLSNEUT|TYPNEUT
.LONG 0H,0H
PRZBLD ;ARM RGT
.LONG 0,0,CASH
.WORD 228,DMAWNZ+M_NOCOLL,CLSNEUT|TYPNEUT
.LONG 0H,0H
KBM ;ARM RGT
.LONG 0,0,KBM1
.WORD 228,DMAWNZ+M_FLIPH+M_NOCOLL,CLSNEUT|TYPNEUT
.LONG 0H,0H
STCL ;ARM RGT
.LONG 0,0,TRS1
.WORD 228,DMAWNZ+M_NOCOLL,CLSNEUT|TYPNEUT
.LONG -050000H,0H
STCLZ ;ARM RGT
.LONG 0,0,TRS1Z
.WORD 228,DMAWNZ+M_NOCOLL,CLSNEUT|TYPNEUT
.LONG -050000H,0H
STCR2 ;ARM RGT
.LONG 0,0,TRS1
.WORD 228,DMAWNZ+M_FLIPH+M_NOCOLL,CLSNEUT|TYPNEUT
.LONG 050000H,0H
STCR2Z ;ARM RGT
.LONG 0,0,TRS1Z
.WORD 228,DMAWNZ+M_FLIPH+M_NOCOLL,CLSNEUT|TYPNEUT
.LONG 050000H,0H
STCL2 ;ARM RGT
.LONG 0,0,TRS1
.WORD 228,DMAWNZ+M_NOCOLL,CLSNEUT|TYPNEUT
.LONG -050000H,0H
STCL2Z ;ARM RGT
.LONG 0,0,TRS1Z
.WORD 228,DMAWNZ+M_NOCOLL,CLSNEUT|TYPNEUT
.LONG -050000H,0H
STCH
.LONG 0,0,MUG1
.WORD 231,DMAWNZ+M_NOCOLL,CLSNEUT|TYPNEUT
.LONG 0H,-20000H
STCHZ
.LONG 0,0,MUG1Z
.WORD 231,DMAWNZ+M_NOCOLL,CLSNEUT|TYPNEUT
.LONG 0H,-20000H
THROWC
CREATE 0,BLOSND
;CREATE SEVERAL CHESTS BLOWING OFF BODY TO LEFT AND RIGHT
MOVK 15,A10
TL22
CREATE 0,SENDCL
CREATE 0,SENDCR
SLEEP 10
MOVI EXP3HIA,A0
CALLA ONESND
PUSH A10
CALLA DOSHK0
PULL A10
DSJ A10,TL22
MOVI WPSSND,A0
CALLA ONESND
CREATE 0,ADDPCS2
CREATE 0,ADDPCS2
CREATE 0,ADDPCS2
CREATE 0,ADDPCS2
CREATE 0,ADDPCS2
MOVE @MUTPTR,A0,L
MOVE *A0(TRSL),A8,L
MOVI TRS1A,A1
MOVE @MCON,A4
JRZ NOVV
MOVI TRS1AZ,A1
NOVV
MOVE *A8(OFLAGS),A4,W ;NEW OFLAGS
CALLA ANI
MOVE @MUTPTR,A0,L
MOVE *A0(TRSR),A8,L
MOVI TRS1A,A1
MOVE @MCON,A4
JRZ NOBBA
MOVI TRS1AZ,A1
NOBBA
MOVE *A8(OFLAGS),A4,W ;NEW OFLAGS
CALLA ANI
DIE
SENDCR
MOVI STCR,A14
MOVE @MCON,A1
JRZ NOMCC
MOVI STCRZ,A14
NOMCC CALLA GPALOBJ ;ALLOCATE A COLOR PALETTE
CALLA STFOBJ ;STUFF OBJECT DATA
MOVE A13,*A0(OPLINK),L
CALLA INSOBJ ;INSERT OBJECT INTO LIST
MOVE A0,A8
MOVE *A8(OPAL),A0,L
ANDI 0FFFFH,A0
MOVE A0,*A8(OPAL),L
MOVE A8,A9
MOVE @MUTPTR,A8,L
MOVE *A8(TNKL),A8,L ;TRSR
CALLA GETANIXY
MOVE A9,A0
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
CALLA GANISAG
MOVE A9,A8
CREATE 0,FRBALL
CREATE 0,FRBALL2
CREATE 0,FRBALL3
CREATE 0,FRBALL2
MOVI FLIPCR,A9
MOVE @MCON,A1
JRZ NOMCA4
MOVI FLIPCRZ,A9
NOMCA4 MOVK 1,A1
JSRP FRANIM
STL2 SLEEP 40
CALLA SCRTST
JRZ STL2
MOVE A8,A0
CALLA DELOBJ
DIE
SENDCL
MOVI STCL,A14
MOVE @MCON,A1
JRZ NOMCD
MOVI STCLZ,A14
NOMCD CALLA GPALOBJ ;ALLOCATE A COLOR PALETTE
CALLA STFOBJ ;STUFF OBJECT DATA
MOVE A13,*A0(OPLINK),L
CALLA INSOBJ ;INSERT OBJECT INTO LIST
MOVE A0,A8
MOVE *A8(OPAL),A0,L
ANDI 0FFFFH,A0
MOVE A0,*A8(OPAL),L
MOVE A8,A9
MOVE @MUTPTR,A8,L
MOVE *A8(TNKL),A8,L ;TRSL
CALLA GETANIXY
MOVE A9,A0
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
CALLA GANISAG
MOVE A9,A8
CREATE 0,FRBALL
CREATE 0,FRBALL2
CREATE 0,FRBALL3
CREATE 0,FRBALL2
MOVI FLIPCL,A9
MOVE @MCON,A1
JRZ NOMCA5
MOVI FLIPCLZ,A9
NOMCA5 MOVK 1,A1
JSRP FRANIM
STL3 SLEEP 40
CALLA SCRTST
JRZ STL3
MOVE A8,A0
CALLA DELOBJ
DIE
THROWH
CREATE 0,ADDPCS2
CREATE 0,ADDPCS2
CREATE 0,ADDPCS2
CREATE 0,ADDPCS2
CREATE 0,ADDPCS2
MOVK 20,A10
TL23
CREATE 0,SENDH
CREATE 0,SENDH
CREATE 0,SENDH
SLEEP 10
PUSH A10
CALLA DOSHK0
PULL A10
DSJ A10,TL23
CREATE 0,ADDPCS2
CREATE 0,ADDPCS2
CREATE 0,ADDPCS2
CREATE 0,ADDPCS2
CREATE 0,ADDPCS2
CREATE 0,ADDPCS2
DIE
SENDH
MOVI STCH,A14
MOVE @MCON,A1
JRZ NOMCE
MOVI STCHZ,A14
NOMCE CALLA GPALOBJ ;ALLOCATE A COLOR PALETTE
CALLA STFOBJ ;STUFF OBJECT DATA
MOVE A13,*A0(OPLINK),L
CALLA INSOBJ ;INSERT OBJECT INTO LIST
MOVE A0,A8
MOVE *A8(OPAL),A0,L
ANDI 0FFFFH,A0
MOVE A0,*A8(OPAL),L
MOVE A8,A9
MOVE @MUTPTR,A8,L
MOVE *A8(TNKL),A8,L ;MHEAD
CALLA GETANIXY
MOVE A9,A0
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
CALLA GANISAG
MOVE A9,A8
CREATE 0,FRBALL1
CREATE 0,FRBALL3
MOVI -040000H,B0
MOVI 040000H,B1
CALLA RANGRAND
MOVE A0,*A8(OXVEL),L
MOVI FLIPH,A9
MOVE @MCON,A1
JRZ NOMCA6
MOVI FLIPHZ,A9
NOMCA6 MOVK 1,A1
MOVE A9,A10
JSRP FRANIM
MOVE A10,A9
MOVK 1,A1
JSRP FRANIM
MOVE A10,A9
MOVK 1,A1
JSRP FRANIM
STL4 SLEEP 40
CALLA SCRTST
JRZ STL4
MOVE A8,A0
CALLA DELOBJ
DIE
THROWC2
;COVER TANK WITH EXPLOSIONS, THEN BLOW OFF
CREATE 0,ADDPCS2
CREATE 0,ADDPCS2
CREATE 0,ADDPCS2
CREATE 0,ADDPCS2
;CREATE SEVERAL CHESTS BLOWING OFF BODY TO LEFT AND RIGHT
CREATE 0,SENDCL2
CREATE 0,SENDCR2
CALLA DOSHK0
CREATE 0,ADDPCS2
CREATE 0,ADDPCS2
CREATE 0,ADDPCS2
CREATE 0,ADDPCS2
SLEEP 60
MOVI NOWAY,A0
CALLA ONESND
DIE
SENDCR2
MOVI STCR2,A14
MOVE @MCON,A1
JRZ NOMCF
MOVI STCR2Z,A14
NOMCF CALLA GPALOBJ ;ALLOCATE A COLOR PALETTE
CALLA STFOBJ ;STUFF OBJECT DATA
MOVE A13,*A0(OPLINK),L
CALLA INSOBJ ;INSERT OBJECT INTO LIST
MOVE A0,A8
MOVE *A8(OPAL),A0,L
ANDI 0FFFFH,A0
MOVE A0,*A8(OPAL),L
MOVE A8,A9
MOVE @MUTPTR,A8,L
MOVE *A8(TNKL),A8,L ;TRSR
CALLA GETANIXY
MOVE A9,A0
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
CALLA GANISAG
MOVE A9,A8
CREATE 0,FRBALL
CREATE 0,FRBALL2
CREATE 0,FRBALL2
CREATE 0,FRBALL2
MOVI FLIPCR2,A9
MOVE @MCON,A1
JRZ NOMCA7
MOVI FLIPCR2Z,A9
NOMCA7
MOVK 1,A1
JSRP FRANIM
STL5 SLEEP 40
CALLA SCRTST
JRZ STL5
MOVE A8,A0
CALLA DELOBJ
DIE
SENDCL2
MOVI STCL2,A14
MOVE @MCON,A1
JRZ NOMCG
MOVI STCL2Z,A14
NOMCG CALLA GPALOBJ ;ALLOCATE A COLOR PALETTE
CALLA STFOBJ ;STUFF OBJECT DATA
MOVE A13,*A0(OPLINK),L
CALLA INSOBJ ;INSERT OBJECT INTO LIST
MOVE A0,A8
MOVE *A8(OPAL),A0,L
ANDI 0FFFFH,A0
MOVE A0,*A8(OPAL),L
MOVE A8,A9
MOVE @MUTPTR,A8,L
MOVE *A8(TNKL),A8,L ;TRSL
CALLA GETANIXY
MOVE A9,A0
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
CALLA GANISAG
MOVE A9,A8
CREATE 0,FRBALL
CREATE 0,FRBALL2
CREATE 0,FRBALL2
CREATE 0,FRBALL2
MOVI FLIPCL2,A9
MOVE @MCON,A1
JRZ NOMCA8
MOVI FLIPCL2Z,A9
NOMCA8
MOVK 1,A1
JSRP FRANIM
STL6 SLEEP 40
CALLA SCRTST
JRZ STL6
MOVE A8,A0
CALLA DELOBJ
DIE
TURN1 MOVI 30,A9
TX1
MOVE *A10(OFLAGS),A1
ORI M_NOCOLL,A1
MOVE A1,*A10(OFLAGS)
MOVE A10,A0
CALLA OBJOFF
SLEEP 1
DSJS A9,TX1
DIE
SNKHIT
MOVE *A0(OXVEL),A9,L
MOVE *A0(OYVEL),A10,L
CREATE 0,SHIFTIT
JRUC NADA
SHIFTIT MOVK 4,A11
SRA 2,A9
SRA 2,A10
SHF
MOVE A9,*A8(OXVEL),L
MOVE A10,*A8(OYVEL),L
SLEEP 1
DSJS A11,SHF
MOVE *A8(OPLINK),A0,L
MOVB *A0(SKHITS),A1
INC A1
MOVB A1,*A0(SKHITS)
D DIE
;
EXP_BULL2
CLR A0
MOVE A0,*A8(OXVEL),L
MOVE A0,*A8(OYVEL),L
EXP_BULL
MMTM SP,A1,A7
;A8=BULLET TO BLOW UP
CLR A1
MOVE *A8(OID),A0
CMPI CLSPLYR|TYPPLBL|SUBGRND,A0
JRNE EXB
;GRENADE TO EXPLODE
MOVE A1,*A8(OID),W
MOVE *A8(OPLINK),A0,L
CALLA GETA9
CALLA KILL ;KILLS PROCESS IN A0
MOVE A9,A0
CALLA DELOBJ
CREATE 0,GRNDEXP
MMFM SP,A1,A7
RETS
;
EXB
CMPI CLSPLYR|TYPPLBL|SUBNOSTP,A0
JRNE EXA
MOVE A1,*A8(OXVEL),L
MOVE A1,*A8(OYVEL),L
EXA MOVE A1,*A8(OID)
MOVE *A8(OPLINK),A0,L
CALLA KILL ;KILLS PROCESS IN A0
CREATE 0,BULEXP
MMFM SP,A1,A7
RETS
;
GRNDEXP
;GRENADE EXPLOSION!
MOVI BOOM2,A9
CLR A6
CLR A7
CALLA NEWV
MOVE @YVEL,A0,L
MOVE A0,*A8(OYVEL),L
MOVE @XVEL,A0,L
MOVE A0,*A8(OXVEL),L
JRUC BTR
BULEXP
MOVI BOOMN,A9 ;BOOM3 CHANGES PALETTE TO EXPLOSION!
MOVI 160,A0
MOVE A0,*A8(OZPOS)
BTR
MOVE *A8(OXPOS),A0
SUBI 4,A0
MOVE A0,*A8(OXPOS)
MOVE *A8(OYPOS),A0
SUBI 1,A0
MOVE A0,*A8(OYPOS)
MOVK 1,A1
JSRP FRANIM
MOVE A8,A0
CALLA DELOBJ
DIE
;
BOOMN2:
.LONG KBM1
.WORD 4
.LONG KBM2
.WORD 4
.LONG 0
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
;
MV_TNK
;MOVE LOGIC
;HANDLE MOVE DIR, SPEED, LENGTH OF MOVE
;WHEN MOVE IS DONE, TANK STOPS FOR A SHORT TIME
;THEN GET NEW ACTION FROM THE FOLLOWING:
;ACTION
; 0=ROLLIN FROM TOP OF SCREEN
; 1=MOVE DOWN SCREEN FOR X TIME
; 2=MOVE UP SCREEN FOR X TIME
; 3=POUND RIGHT/LFT ARM FAST AND SKIP TANK TO LEFT
; 4=POUND RIGHT/LFT ARM FAST AND SKIP TANK TO RIGHT
; 5=MOVE HEAD AROUND AND TRY TO LASER AT PLAYERS
; 6=POUND LEFT ARM SLOW/SHAKE SCREEN ON IMPACT/SMILE FACE
; 7=POUND RIGHT ARM SLOW/SHAKE SCREEN ON IMPACT/SMILE FACE
; 8=DO MUSCLE POSE FOR A MOMENT THEN RELAX ARMS/SMILE FACE
; 9=BOTH ARMS FLAILING WITH POUNDS INTO GROUND NO X MOVE
; 10=STOP
; 11=BRING RANDOM ARM UP TO MARM3 POSITION
; 12=LUNGE BACKWARD INTO PLAYER
; 13=LUNGE FORWARD INTO PLAYER
MOVB @MACTION,A0
SLL 5,A0
ADDI JPTBL,A0
MOVE *A0,A0,L
JUMP A0
;JPTBLF .LONG ROLLINF,MDNF,MUPF,FPNDRGTF,FPNDLFTF,MVHDF,PNDLFTF,PNDRGTF,POSEF
; .LONG FLAILF,STOPF,FISTF,LUNGEF,LUNGEDF
ACTIONS
.BYTE 1,1,1,1,1,1
.BYTE 2,2,2,2,2,2
.BYTE 3,3,3,3,3,3,3
.BYTE 4,4,4,4,4,4,4
.BYTE 5,5,5,5,5,5,5,5
.BYTE 6,6
.BYTE 7,7
.BYTE 8,8,8
.BYTE 11,11,11,11 ;JUST IN CASE
.EVEN
GET_ACT
MOVI 800,A0
CALLA RANDPER
JRNC NO1
;MAYBE DO A LUNGE
CALLA RANDPL
MOVB @PLYRAD,A0
ADDI PLYROBJS,A0
MOVE *A0,A0,L
MOVE *A0(OYPOS),A2
MOVE *A0(OXPOS),A1
;IF PLAYER IS DIRECTLY ABOVE MUTOID MAN, LUNGE BACKWARD!
;IF PLAYER IS DIRECTLY BELOW MUTOID MAN, LUNGE BACKWARD!
MOVE *A8(OXPOS),A3
SUB A1,A3
ABS A3
CMPI 40,A3
JRNC NO1
;YES PLYR IS IN X RANGE
MOVE *A8(OYPOS),A3
ADDI 110,A3
SUB A2,A3
ABS A3
CMPI 20,A3 ;10
JRC HT2 ;BR=LUNGE DOWN SCREEN
MOVE *A8(OYPOS),A3
CMP A2,A3
JRNC HT
SUB A2,A3
ABS A3
CMPI 60,A3 ;50
JRNC NO1
;YES A HIT!
HT MOVK 12,A0
JRUC GET_ST
HT2 MOVK 13,A0
JRUC GET_ST
NO1
MOVI 1,B0
MOVI 43,B1
MOVE @DMGPNT,A0
CMPI 4,A0
JRNE NO1A
MOVI 28,B1
NO1A CALLA RANGRAND
DEC A0
SLL 3,A0
ADDI ACTIONS,A0
MOVB *A0,A0
GET_ST
MOVB @DMGPNT,A1
CMPI 5,A1
JRNZ HJ
MOVB @TOTLZRS,A1
JRNZ HJ
;START LAZER RIGHT AWAY!
MOVK 5,A0 ;STOP
JRUC GETY
HJ MOVB @SNKOUT,A1
JRZ GETY
CLR A0
MOVE A0,*A8(OXVEL),L
MOVE A0,*A8(OYVEL),L
MOVK 10,A0 ;STOP
;
GETY MOVB A0,@MACTION
SLL 5,A0
ADDI JPTBLF,A0 ;WHAT TO DO FIRST
MOVE *A0,A0,L
JUMP A0
LUNGEF
MOVI UPYVEL2,A0
JRUC MUPF2
LUNGEDF
MOVI DNYVEL2,A0
JRUC MDNF2
STOPF
;DO NOTHING!
CLR A0
CALLA MOD_VELS
MOVI 8,A0 ;10
MOVE A0,@MTIME
RETS
RORSND
SLEEP 60
MOVI AWWSND2,A0
CALLA ONESND
SLEEP 100
MOVI AWWSND2,A0
CALLA ONESND
SLEEP 100
MOVI EESND,A0
CALLA ONESND
DIE
ROLLINF
MOVK 1,A0 ;TELL TANK TO ROLL DOWN SCRN
MOVB A0,@TRDSLP
MOVB A0,@MACTION
MOVI 0100,A0
MOVE A0,@MEROAR ;TELL FACE TO ROAR
;@MEROAR
MOVI AWWSND2,A0
CALLA ONESND
MOVI DNYVEL,A0
CALLA MOD_VELS
CREATE 0,RORSND
MOVI 800,A0
JRUC INH
FPNDLFTF ;FAST PND LEFT FIRST
;SETUP FRANIM PNTR
;THIS ARM WILL POUND X TIMES AS WILL THE RIGHT ARM.
;SKIP TANK TO LEFT EACH TIME X PIXELS
CLR A0 ;LEFT
MOVB A0,@MDIR ;MUTOID DIR
ALL
MOVI 10,B0
MOVI 40,B1
CALLA RANGRAND
MOVE A0,@UPDT
MOVK 1,A0
MOVB A0,@TIMES ;POUND TIMES
MOVI FPNDRARM,A0
MOVE @MCON,A1
JRZ NOMCB1
MOVI FPNDRARMZ,A0
NOMCB1 MOVE A0,@FPNDRP,L
MOVK 1,A0
MOVB A0,@PLS ;THIS WILL HANDLE BOTH ARMS
MOVI FPNDLARM,A0
MOVE @MCON,A1
JRZ NOMCB1A
MOVI FPNDLARMZ,A0
NOMCB1A
MOVE A0,@FPNDLP,L
CREATE 0,SHKIT
RETS
FPNDRGTF
;THIS ARM WILL POUND X TIMES AS WILL THE RIGHT ARM.
;SKIP TANK TO RIGHT EACH TIME X PIXELS
MOVK 4,A0
MOVB A0,@MACTION ;POUND LEFT
MOVK 1,A0 ;RIGHT
MOVB A0,@MDIR ;MUTOID DIR
JRUC ALL
MVHDF
;STOP TANK
;TELL HEAD PROC TO AIM AND FIRE
; MOVB @PCNT,A0
; ANDI 07H,A0
; JRZ MO0
; MOVI CLSENMY|TYPTORSO,A0
; MOVI 0FFFFH,A1
; CALLA EXISTOBJ
; JRNZ LOP
;MO0
MOVB @TOTLZRS,A0
JRZ OKC
JRNZ LOP2
;ALREADY IN LAZER MODE
;LOP
MOVB @PCNT,A0
LOP2 ANDI 1,A0
INC A0
MOVB A0,@MACTION
CMPI 1,A0
JREQ MDNF
JRUC MUPF
OKC CLR A0
MOVB A0,@INAIR
MOVI 500,A0
MOVB @DMGPNT,A1
CMPI 5,A1
JRZ DA1
MOVI 5,B0
MOVI 25,B1 ;20
CALLA RANGRAND
DA1 MOVB A0,@TOTLZRS ;TOTAL LAZER SHOTS HE WILL SHOOT
RANDPL
BTST 0,A0
JRZ PLY1
;WILL TRY TO LAZER PLAYER 2
MOVE @PLYROBJS+32,A1,L
JRZ PLY3
PLY2 MOVK 32,A0
MOVB A0,@PLYRAD
RETS
PLY1 MOVE @PLYROBJS,A1,L
JRZ PLY2
PLY3 CLR A0
MOVB A0,@PLYRAD
RETS
PNDLFTF
;SETUP FRANIM PNTR
MOVI 1,B0
MOVI 3,B1
CALLA RANGRAND
MOVB A0,@TIMES
SETL
MOVI PNDLARM,A0
MOVE @MCON,A1
JRZ NOMCB2
MOVI PNDLARMZ,A0
NOMCB2
MOVE A0,@PNDLP,L
MOVK 1,A0
MOVB A0,@PLS
CREATE 0,SHKIT
RETS
FISTF
;BRING RANDOM ARM UP TO MARM3 POSITION
;SETUP FRANIM PNTR
CLR A0
MOVE A0,@FISTRP,L
MOVE A0,@FISTLP,L
MOVB A0,@FISTDN
MOVI 60,B0
MOVI 300,B1
CALLA RANGRAND
MOVE A0,@UPDT ;TIME ARM HELD IN AIR
BTST 0,A0
JRZ W1
MOVI FISTR,A0
MOVE @MCON,A1
JRZ NOMCC2
MOVI FISTRZ,A0
NOMCC2
MOVE A0,@FISTRP,L
MOVK 1,A0
MOVB A0,@PRS
RETS
W1
MOVI FISTL,A0
MOVE @MCON,A1
JRZ NOMCC3
MOVI FISTLZ,A0
NOMCC3
MOVE A0,@FISTLP,L
MOVK 1,A0
MOVB A0,@PLS
RETS
PNDRGTF
MOVI 1,B0
MOVI 3,B1
CALLA RANGRAND
MOVB A0,@TIMES
SETR
MOVI PNDRARM,A0
MOVE @MCON,A1
JRZ NOMCC4
MOVI PNDRARMZ,A0
NOMCC4
MOVE A0,@PNDRP,L
MOVK 1,A0
MOVB A0,@PRS
CREATE 0,SHKIT
RETS
POSEF
MOVI 2,B0
MOVI 4,B1
CALLA RANGRAND
MOVB A0,@TIMES
MOVB @TOTLZRS,A0
JRNZ PSET ;BR=LAZERS ARE ON
MOVI 800,A0
CALLA RANDPER
JRNC PSET
MOVI 30,B0
MOVI 140,B1
CALLA RANGRAND
MOVE A0,@MEROAR ;TIME TO ROAR
CREATE 0,RORS
PSET
MOVE @MCON,A1
JRZ NOMCC1
MOVI POSEMELZ,A0
MOVE A0,@POSEL,L
MOVI POSEMERZ,A0
JRUC CONTA
NOMCC1 MOVI POSEMEL,A0
MOVE A0,@POSEL,L
MOVI POSEMER,A0
CONTA MOVE A0,@POSER,L
MOVK 1,A0
MOVB A0,@PLS
RETS
FLAILF
RETS
RORS SLEEP 40
MOVI AWWSND,A0
CALLA ONESND
SLEEP 60
MOVI AWWSND,A0
CALLA ONESND
SLEEP 80
MOVI OUCH,A0
CALLA ONESND
DIE
MUPF
MOVE @HALT,A0
JRNZ FLAILF
;MAKE SURE ARMS ARE NOT ON GROUND
MOVI UPYVEL,A0
MUPF2 ;FAST UP SCREEN
CALLA MOD_VELS
CALLR CK_KNUCK
CALLR GET_TIME
MOVE A0,@MTIME
;TELL LEGS TO ANIMATE BACKWARD
MOVI BTRDSDLL,A0 ;TREAD SIDE LFT ANI LIST
MOVE A0,@TRDSDLP,L ;PNTR FOR TREAD SIDE LEFT LIST
MOVI BTRDSDRL,A0 ;TREAD SIDE RGT ANI LIST
MOVE A0,@TRDSDRP,L ;PNTR FOR TREAD SIDE RGT LIST
MOVI BTRDFTLL,A0 ;TREAD FRONT ANI LIST LEFT
MOVE A0,@TRDFTLP,L ;PNTR FOR TREAD FRONT LEFT LIST
MOVI BTRDFTRL,A0 ;TREAD FRONT ANI LIST RIGHT
MOVE A0,@TRDFTRP,L ;PNTR FOR TREAD FRONT RGT LIST
;FRANIM LISTS ARE SET FOR TREADS
RYT RETS
MDNF
;CHECK TO SEE IF DOWN IS OKAY!
;MAKE SURE ARMS ARE NOT ON GROUND
MOVE @HALT,A0
JRNZ RYT
MOVI DNYVEL,A0
MDNF2
CALLA MOD_VELS
CALLR CK_KNUCK
CALLR GET_TIME
INH MOVE A0,@MTIME
;TELL LEGS TO ANIMATE FORWARD
MOVI TRDSDLL,A0 ;TREAD SIDE LFT ANI LIST
MOVE A0,@TRDSDLP,L ;PNTR FOR TREAD SIDE LEFT LIST
MOVI TRDSDRL,A0 ;TREAD SIDE RGT ANI LIST
MOVE A0,@TRDSDRP,L ;PNTR FOR TREAD SIDE RGT LIST
MOVI TRDFTLL,A0 ;TREAD FRONT ANI LIST LEFT
MOVE A0,@TRDFTLP,L ;PNTR FOR TREAD FRONT LEFT LIST
MOVI TRDFTRL,A0 ;TREAD FRONT ANI LIST RIGHT
MOVE A0,@TRDFTRP,L ;PNTR FOR TREAD FRONT RGT LIST
;FRANIM LISTS ARE SET FOR TREADS
RETS
CK_KNUCK
MOVB @DMGPNT,A0
JRZ CK1
CMPI 1,A0
JRZ MD2
JRUC MD3
CK1 MOVE *A13(ARML),A0,L
MOVE *A0(OIMG),A0,L
CMPI MARM6AZ,A0
JRZ CONTZ
CMPI MARM6A,A0
JRNE MD2
CONTZ
;ARM IS ON GROUND-ANI IN REGULAR ARM
PUSH A8
MOVE *A13(ARML),A8,L
; MOVI CLSENMY|TYPMUT|SUBARML,A3
; MOVE A3,*A8(OID)
MOVI MARM1,A1
MOVE @MCON,A4
JRZ NODD
MOVI MARM1Z,A1
NODD
MOVI DMAWNZ+M_PIXSCAN,A4,W ;NEW OFLAGS
CALLA ANI
PULL A8
MD2
MOVE *A13(ARMR),A0,L
MOVE *A0(OIMG),A0,L
CMPI MARM6AZ,A0
JRZ CONTZ1
CMPI MARM6A,A0
JRNE MD3
CONTZ1
;ARM IS ON GROUND-ANI IN REGULAR ARM
PUSH A8
MOVE *A13(ARMR),A8,L
; MOVI CLSENMY|TYPMUT|SUBARMR,A3
; MOVE A3,*A8(OID)
MOVI MARM1,A1
MOVE @MCON,A4
JRZ NOMCD1
MOVI MARM1Z,A1
NOMCD1
MOVI DMAWNZ+M_FLIPH+M_PIXSCAN,A4,W ;NEW OFLAGS
CALLA ANI
PULL A8
MD3 RETS
GET_TIME
;GET TIME TO TRAVEL IN DOWN DIRECTION
MOVI 50,B0
MOVI 100,B1
CALLA RANGRAND
RETS
DO_TIME
MOVE @MTIME,A0
; ANDI 03FFH,A0
DEC A0
MOVE A0,@MTIME
JRN DT3
RETS
DT3 MOVK 1,A0
MOVE A0,@MTIME
RETS
LUNGE
JRUC MUP
LUNGED
JRUC MDN
STOP
;TANK STOPPED
CALLR DO_TIME
JRNZ SKIPS
;STOP TANK FOR A MOMENT
CALLR GET_ACT
RETS
SKIPS
RETS
FPNDLFT ;FAST PND LEFT $ RIGHT
MOVB @TIMES,A0
JRNZ STIL ;BR=STILL MOVING ARMS
;POUND DONE, WE ARE UPDATING X
MOVE *A8(OXVAL),A1,L
MOVE @WORLDTLX,A4,L
SUB A4,A1
MOVB @MDIR,A0
JRNZ CKR
;CK LEFT
CMPI [115,0],A1 ;100,135
;HAS IS HIT LEFT, STOP IT FROM MOVING MORE TO LEFT
JRNC MOK
JRUC RTS
CKR CMPI [215,0],A1
JRNC RTS
;OKAY TO UPDATE X POS
; MOVB @MDIR,A0
MOK SLL 5,A0
MOVE @MCON,A1
JRZ NOMCD2
ADDI ADSUZ,A0
JRUC NOMCD3
NOMCD2
ADDI ADSU,A0
NOMCD3 MOVE *A0,A0,L
MOVE *A8(OXVAL),A1,L
ADD A0,A1
MOVE A1,*A8(OXVAL),L
RTS
MOVE @UPDT,A0
DEC A0
MOVE A0,@UPDT
JRNZ RT
MOVK 10,A0 ;STOP MUTOID MAN
CALLR GET_ST
RT
MOVE @UPDT,A0
ANDI 07H,A0
SLL 4,A0
ADDI YADJ,A0
MOVE *A0,A0,W
SLL 16,A0
MOVE *A8(OYVAL),A1,L
ADD A0,A1
MOVE A1,*A8(OYVAL),L
RETS
YADJ .WORD 3,-2,-4,4,-5,3,4,-3
STIL MOVB @PLS,A0 ;POUND LEFT SLEEP
DEC A0
MOVB A0,@PLS
JRNZ PEX
PUSH A8
;DO RIGHT ARM
MOVE @FPNDRP,A9,L
MOVE *A13(ARMR),A8,L
MOVK 4,A1
JSRP FRANIM
MOVE A9,@FPNDRP,L
;DO LEFT
MOVE @FPNDLP,A9,L
MOVE *A13(ARML),A8,L
MOVK 4,A1
JSRP FRANIM
MOVB A0,@PLS
MOVE A9,@FPNDLP,L
JRNC PL8X ;BR=DO RIGHT ARM
;
;POUND BY BOTH ARMS IS DONE
PULL A8
MOVB @TIMES,A0
DEC A0
MOVB A0,@TIMES
DOSHK0
;START SHAKE
MOVI MBANG,A0 ;MBANG
CALLA ONESND
MOVB @SHK_ON,A0
JRNZ PEX
MOVI 15,A10
CALLA SHAKER
RETS
PL8X PULL A8
PEX
RETS
;
ADSU: .LONG -020000H,020000H ;3,3
ADSUZ: .LONG -048000H,048000H ;3,3
MVHD
;LAZER MODE IS ON FOR HEAD. HEAD IS TRYING TO LASER PLAYERS TO DEATH
;DELAY FOR AWHILE, THEN GET A NEW ACTION
JRUC DN1
MOVB @TOTLZRS,A0
JRZ DN1 ;NEW MODE
RETS
PNDLFT ;POUND LEFT
MOVB @PLS,A0 ;POUND LEFT SLEEP
DEC A0
MOVB A0,@PLS
JRNZ PEXA
PUSH A8
;DO LEFT
MOVE @PNDLP,A9,L
MOVE *A13(ARML),A8,L
MOVK 4,A1
JSRP FRANIM
MOVB A0,@PLS
MOVE A9,@PNDLP,L
JRNC PL8XA
;POUND BY LEFT ARM IS DONE
PULL A8
MOVB @TIMES,A0
DEC A0
MOVB A0,@TIMES
JRZ DN1
CALLA SETL
RETS
DN1 MOVK 10,A0 ;STOP MUTOID MAN
CALLR GET_ST
RETS
PL8XA PULL A8
PEXA
RETS
PNDRGT
MOVB @PRS,A0 ;POUND LEFT SLEEP
DEC A0
MOVB A0,@PRS
JRNZ PEXB
PUSH A8
;DO RGT
MOVE @PNDRP,A9,L
MOVE *A13(ARMR),A8,L
MOVK 4,A1
JSRP FRANIM
MOVB A0,@PRS
MOVE A9,@PNDRP,L
JRNC PL8XB
;POUND BY RGT ARM IS DONE
PULL A8
MOVB @TIMES,A0
DEC A0
MOVB A0,@TIMES
JRZ DN1B
CALLA SETR
RETS
DN1B MOVK 10,A0 ;STOP MUTOID MAN
CALLR GET_ST
RETS
PL8XB PULL A8
PEXB
RETS
SHKIT
;SPAWNED FROM FRANIM
;START SHAKE
;TURN ON ID THAT SAYS ARM CAN KILL PLAYERS!
SLEEP 35
MOVI MBANG,A0
CALLA ONESND
MOVB @SHK_ON,A0
JRNZ PXD
MOVI 10,A10
CALLA SHAKER
PXD DIE
FIST
MOVE @FISTLP,A0,L
JRNZ DLFT ;BR=LEFT FIST INTO AIR
;RIGHT FIST INTO AIR
MOVB @FISTDN,A0
JRZ GUP
;FIST IN AIR
MOVE @UPDT,A0
JREQ GUP
DEC A0
MOVE A0,@UPDT
JRNZ NY
;BRING IT DOWN
MOVI FISTR2,A0 ;COME DOWN LIST
MOVE @MCON,A1
JRZ NOMCE1
MOVI FISTR2Z,A0 ;COME DOWN LIST
NOMCE1
MOVE A0,@FISTRP,L
MOVK 1,A0
MOVB A0,@PRS
GUP MOVB @PRS,A0 ;POUND LEFT SLEEP
DEC A0
MOVB A0,@PRS
JRNZ NY
PUSH A8
MOVE @FISTRP,A9,L
MOVE *A13(ARMR),A8,L
MOVK 4,A1
JSRP FRANIM
MOVB A0,@PRS
MOVE A9,@FISTRP,L
JRNC NY0
;FIST UP INTO AIR
MOVB @FISTDN,A0
JRNZ ITDWN
MOVK 1,A0
MOVB A0,@FISTDN ;SET FLAG IT IS UP
NY0 PULL A8
NY RETS
ITDWN
;FIST HAS COME BACK DOWN
PULL A8
JRUC DN1C
DLFT
;LEFT FIST INTO AIR
MOVB @FISTDN,A0
JRZ GUPB
;FIST IN AIR
MOVE @UPDT,A0
JREQ GUPB
DEC A0
MOVE A0,@UPDT
JRNZ NYB
;BRING IT DOWN
MOVI FISTL2,A0 ;COME DOWN LIST
MOVE @MCON,A1
JRZ NOMCB3
MOVI FISTL2Z,A0 ;COME DOWN LIST
NOMCB3
MOVE A0,@FISTLP,L
MOVK 1,A0
MOVB A0,@PLS
GUPB MOVB @PLS,A0 ;POUND LEFT SLEEP
DEC A0
MOVB A0,@PLS
JRNZ NYB
PUSH A8
MOVE @FISTLP,A9,L
MOVE *A13(ARML),A8,L
MOVK 4,A1
JSRP FRANIM
MOVB A0,@PLS
MOVE A9,@FISTLP,L
JRNC NY0B
;FIST UP INTO AIR
MOVB @FISTDN,A0
JRNZ ITDWN
MOVK 1,A0
MOVB A0,@FISTDN ;SET FLAG IT IS UP
NY0B PULL A8
NYB RETS
POSE
MOVB @PLS,A0 ;POUND LEFT SLEEP
DEC A0
MOVB A0,@PLS
JRNZ TY1
PUSH A8
;DO RGT ARM FIRST
MOVE @POSER,A9,L
MOVE *A13(ARMR),A8,L
MOVK 4,A1
JSRP FRANIM
MOVE A9,@POSER,L
;DO LFT
MOVE @POSEL,A9,L
MOVE *A13(ARML),A8,L
MOVK 4,A1
JSRP FRANIM
MOVB A0,@PLS
MOVE A9,@POSEL,L
JRNC TY2
;POSE ARMS DONE
PULL A8
MOVB @TIMES,A0
DEC A0
MOVB A0,@TIMES
JRZ DN1C
CALLA PSET
RETS
TY2 PULL A8
TY1
RETS
DN1C MOVK 10,A0 ;STOP MUTOID MAN
CALLR GET_ST
RETS
FLAIL
RETS
MUP
MOVE @HALT,A0
JRNZ FLAIL
;TANK MOVING UP FOR X TIME
CALLR DO_TIME
JRNZ SKIPU
;TIME TO STOP AND GET NEW ACTION
;STOP TANK FOR A MOMENT
MOVK 10,A0
CALLR GET_ST
RETS
SKIPU
;FLOATING UP
;CHECK FOR TOP BOUNDARY
;FRANIM 4 TREADS
MOVE *A8(OYVAL),A2,L
MOVE @WORLDTLY,A4,L
SUB A4,A2
CMPI [40,0],A2
JRNC OKU
;HAS HIT TOP, STOP IT
;MAKE ALL TREADS STOP ON 1 CORRECT VIEW!
MOVK 1,A0
JRUC GET_ST
OKU MOVB @TRDSLP,A0
DEC A0
MOVB A0,@TRDSLP
JRNZ SKP1U
;TIME TO UPDATE ALL TREADS!
PUSH A8
MOVE @TRDSDLP,A9,L ;PNTR FOR TREAD SIDE LEFT LIST
MOVE *A13(TRDLS),A8,L
MOVK 4,A1
JSRP FRANIM
MOVE A9,@TRDSDLP,L ;PNTR FOR TREAD SIDE LEFT LIST
MOVB A0,@TRDSLP ;USE SLEEP FROM FIRST TREAD FOR ALL
JRNC NX1U
MOVK 1,A0
MOVB A0,@TRDSLP
MOVI BTRDSDLL,A0 ;TREAD SIDE LFT ANI LIST
MOVE A0,@TRDSDLP,L ;PNTR FOR TREAD SIDE LEFT LIST
NX1U MOVE @TRDSDRP,A9,L ;PNTR FOR TREAD SIDE RGT LIST
MOVE *A13(TRDRS),A8,L
MOVK 4,A1
JSRP FRANIM
MOVE A9,@TRDSDRP,L ;PNTR FOR TREAD SIDE RGT LIST
JRNC NX2U
MOVI BTRDSDRL,A0 ;TREAD SIDE RGT ANI LIST
MOVE A0,@TRDSDRP,L ;PNTR FOR TREAD SIDE RGT LIST
NX2U MOVE @TRDFTLP,A9,L ;PNTR FOR TREAD SIDE LEFT LIST
MOVE *A13(TRDLF),A8,L
MOVK 4,A1
JSRP FRANIM
MOVE A9,@TRDFTLP,L ;PNTR FOR TREAD SIDE LEFT LIST
JRNC NX3U
MOVI BTRDFTLL,A0 ;TREAD FRONT ANI LIST LEFT
MOVE A0,@TRDFTLP,L ;PNTR FOR TREAD FRONT LEFT LIST
NX3U MOVE @TRDFTRP,A9,L ;PNTR FOR TREAD SIDE RGT LIST
MOVE *A13(TRDRF),A8,L
MOVK 4,A1
JSRP FRANIM
MOVE A9,@TRDFTRP,L ;PNTR FOR TREAD SIDE RGT LIST
JRNC NX4U
MOVI BTRDFTRL,A0 ;TREAD FRONT ANI LIST RIGHT
MOVE A0,@TRDFTRP,L ;PNTR FOR TREAD FRONT RGT LIST
NX4U PULL A8
SKP1U
RETS
MDN
MOVE @HALT,A0
JRNZ SKP1U
;TANK MOVING DOWN FOR X TIME
CALLR DO_TIME
JRNZ SKIP
;TIME TO STOP AND GET NEW ACTION
;STOP TANK FOR A MOMENT
MOVK 10,A0
CALLR GET_ST
RETS
SKIP
;FLOATING DOWN
;CHECK FOR BOTTOM BOUNDARY
;FRANIM 4 TREADS
CMPI 650,A0 ;IF A0>700 THEN TANK MUST BE ROLLING IN
JRNC OK
MOVE *A8(OYVAL),A2,L
MOVE @WORLDTLY,A4,L
SUB A4,A2
CMPI [170,0],A2 ;140,160
JRC OK
;HAS HIT BOTTOM, STOP IT
;MAKE ALL TREADS STOP ON 1 CORRECT VIEW!
MOVK 2,A0
JRUC GET_ST
OK MOVB @TRDSLP,A0
DEC A0
MOVB A0,@TRDSLP
JRNZ SKP1
;TIME TO UPDATE ALL TREADS!
PUSH A8
MOVE @TRDSDLP,A9,L ;PNTR FOR TREAD SIDE LEFT LIST
MOVE *A13(TRDLS),A8,L
MOVK 4,A1
JSRP FRANIM
MOVE A9,@TRDSDLP,L ;PNTR FOR TREAD SIDE LEFT LIST
MOVB A0,@TRDSLP ;USE SLEEP FROM FIRST TREAD FOR ALL
JRNC NX1
MOVK 1,A0
MOVB A0,@TRDSLP
MOVI TRDSDLL,A0 ;TREAD SIDE LFT ANI LIST
MOVE A0,@TRDSDLP,L ;PNTR FOR TREAD SIDE LEFT LIST
NX1 MOVE @TRDSDRP,A9,L ;PNTR FOR TREAD SIDE RGT LIST
MOVE *A13(TRDRS),A8,L
MOVK 4,A1
JSRP FRANIM
MOVE A9,@TRDSDRP,L ;PNTR FOR TREAD SIDE RGT LIST
JRNC NX2
MOVI TRDSDRL,A0 ;TREAD SIDE RGT ANI LIST
MOVE A0,@TRDSDRP,L ;PNTR FOR TREAD SIDE RGT LIST
NX2 MOVE @TRDFTLP,A9,L ;PNTR FOR TREAD SIDE LEFT LIST
MOVE *A13(TRDLF),A8,L
MOVK 4,A1
JSRP FRANIM
MOVE A9,@TRDFTLP,L ;PNTR FOR TREAD SIDE LEFT LIST
JRNC NX3
MOVI TRDFTLL,A0 ;TREAD FRONT ANI LIST LEFT
MOVE A0,@TRDFTLP,L ;PNTR FOR TREAD FRONT LEFT LIST
NX3 MOVE @TRDFTRP,A9,L ;PNTR FOR TREAD SIDE RGT LIST
MOVE *A13(TRDRF),A8,L
MOVK 4,A1
JSRP FRANIM
MOVE A9,@TRDFTRP,L ;PNTR FOR TREAD SIDE RGT LIST
JRNC NX4
MOVI TRDFTRL,A0 ;TREAD FRONT ANI LIST RIGHT
MOVE A0,@TRDFTRP,L ;PNTR FOR TREAD FRONT RGT LIST
NX4 PULL A8
SKP1
RETS
EYES
;A11=HEAD POINTER
;A9=HEADV
;THIS WILL CREATE X NEW PROCESSES OF PROPER IMAGE STARTING AT EYES
;AND ANGLING DOWN TOWARD THE GROUND. EACH IMAGE WILL ACT IDENTICALLY
; MOVK 2,A8
; MOVB @PCNT,A0
; BTST 0,A0
; JRZ ET1
; MOVK 4,A8
;ET1
MOVI LAZSND,A0
CALLA ONESND
MOVK 9,A10
ELP
CREATE BONPID,BOLT
SLEEP 2
DSJS A10,ELP
MOVB @TOTLZRS,A0
ANDI 07FH,A0
DEC A0
MOVB A0,@TOTLZRS
DIE
BMLIST .LONG BM6,BM7,BM8,BM9,BM10,BM11,BM12
BMLISTZ .LONG BM6Z,BM7Z,BM8Z,BM9Z,BM10Z,BM11Z,BM12Z
YOFS: .WORD 0CH,0BH,0FH,0FH,0FH,0BH,0CH
YOFSZ: .WORD 0CH+6,0BH+6,0FH+6,0FH+6,0FH+6,0BH+6,0CH+6
XOFS: .WORD 011H,011H,09H,06H,-3,-9,-8
BLTX: .WORD 12,11,4,0,-4,-11,-12
BLTY: .WORD 6,11,15,15,15,11,6
BOLT:
;TURN ON NEW IMAGE
;A9= 6-12
; MOVB A8,*A13(SLP)
SUBI 6,A9
MOVE A9,A0
SLL 5,A0
MOVE @MCON,A1
JRZ MCON2
ADDI BMLISTZ,A0
JRUC MCON3
MCON2 ADDI BMLIST,A0
MCON3 MOVE *A0,A14,L
CALLA GPALOBJ ;ALLOCATE A COLOR PALETTE
CALLA STFOBJ ;STUFF OBJECT DATA
MOVE A13,*A0(OPLINK),L
CALLA INSOBJ ;INSERT OBJECT INTO LIST
MOVE A0,A8
MOVE *A11(OYPOS),A0
MOVE *A11(OXPOS),A1
SLL 4,A9
MOVI XOFS,A2
ADD A9,A2
MOVE *A2,A2,W
ADD A2,A1
MOVE A1,*A8(OXPOS)
MOVI YOFS,A2
MOVE @MCON,A3
JRZ NOMCF1
MOVI YOFSZ,A2
NOMCF1
ADD A9,A2
MOVE *A2,A2,W
ADD A2,A0
MOVE A0,*A8(OYPOS)
MOVK 9,A0
MOVB A0,*A13(PCS)
BOLTT
; MOVB *A13(SLP),A0
MOVK 2,A0
; MOVE @MCON,A1
; JRZ MCON4
; MOVK 1,A0
;MCON4
CALLA PRCSLP
; SLEEP 4
MOVI BLTX,A0
ADD A9,A0
MOVE *A0,A0,W
MOVE *A8(OXPOS),A1
ADD A0,A1
MOVE A1,*A8(OXPOS)
MOVI BLTY,A0
ADD A9,A0
MOVE *A0,A0,W
MOVE *A8(OYPOS),A1
ADD A0,A1
MOVE A1,*A8(OYPOS)
MOVB *A13(PCS),A0
DEC A0
MOVB A0,*A13(PCS)
JRZ ENDIT ;BOLTT
CMPI 1,A0
JRNE BOLTT
;SET Z LOW
MOVI 100,A0
MOVE A0,*A8(OZPOS)
JRNE BOLTT
ENDIT
CMPI 3,A10
JRLO OP
MOVB @PCNT,A0
ANDI 03H,A0
JRZ OP
MOVI CLSENMY|TYPORBL,A0
MOVE A0,*A8(OID)
OP
MOVI 1,B0
MOVI 8,B1
CALLA RANGRAND
SUBI 4,A0
MOVE *A8(OYPOS),A1
SUB A0,A1
MOVE A1,*A8(OYPOS)
MOVI 1,B0
MOVI 8,B1
CALLA RANGRAND
SUBI 4,A0
MOVE *A8(OXPOS),A1
SUB A0,A1
MOVE A1,*A8(OXPOS)
;HAVE MOVED BOLT ENOUGH TIMES
MOVI LZDIE,A9
MOVE @MCON,A0
JRZ NOMC1
MOVI LZDIEZ,A9
NOMC1
MOVK 1,A1
JSRP FRANIM
MOVE A8,A0
CALLA DELOBJ
CMPI 1,A10
JRNE L1
;THIS IS LAST BEAM OF LAZER
CLR A0
MOVB A0,@INAIR
;LAZER FIZZLED OUT
L1 DIE
LZDIE
.LONG BEAMH1
.WORD 04
.LONG BEAMH2
.WORD 04
.LONG 0
LZDIEZ
.LONG BEAMH1Z
.WORD 04
.LONG BEAMH2Z
.WORD 04
.LONG BEAMH3Z
.WORD 04
.LONG 0
DO_HEAD
MOVE A9,A8
;SPIN HEAD AROUND
MOVK 9,A0
MOVB A0,@HEADV
CALLA ANIHEAD
;
HEADT
MOVE @OOF,A0
JRZ NOL2
;HEAD IS OOF VIEW!
SLEEP 1
MOVB @HEADV,A0
CMPI 16,A0
JRZ PRR2O
; CMPI 9,A0
; JREQ PRRO ;PASTE ROAR
; MOVK 9,A0
; MOVB A0,@SKVW
; JRUC NOR2
;PRRO
MOVI 16,A0
MOVB A0,@HEADV
CALLA ANIHEAD
PRR2O MOVE @OOF,A0
DEC A0
MOVE A0,@OOF
JRNZ KP_GO
MOVB A0,@SKVW
MOVK 9,A0
MOVB A0,@HEADV
CALLA ANIHEAD
CREATE 0,DOCHK
JRUC KP_GO
DOCHK
SLEEP 30
MOVI 20,A0
MOVE A0,@CHEEK
MOVI WPSSND,A0
CALLA ONESND
MOVI 650,A0
CALLA RANDPER
JRC ADAD
MOVI 1,A0
MOVB A0,@POPFLG
ADAD
DIE
CHKVW: .BYTE 11,9,7,9
POPTBL .BYTE 0,2,4,6,8,10,12,14,16
.BYTE 0,0,0,0,0,0,0,0,0,0
.BYTE 0,0,0,0,0,16,14,12,10,8
.BYTE 6,4,2,0,0FFH
.EVEN
NOL2
MOVB @POPFLG,A0
JRZ NOL2B
CMPI 33,A0
JRNC CLRIT
INC A0
MOVB A0,@POPFLG
SLL 3,A0
ADDI POPTBL,A0
MOVB *A0,A0
JRNN NT6
CLRIT
CLR A0
MOVB A0,@POPFLG
NT6 MOVB A0,@POP
SLEEP 3
NOL2B
MOVE @CHEEK,A0
JRZ NOL2A
;HEAD IS CHEEKS VIEW!
ANDI 03,A0
SLL 3,A0
ADDI CHKVW,A0
MOVB *A0,A0
MOVB A0,@HEADV
CALLA ANIHEAD
PRR2C MOVE @CHEEK,A0
DEC A0
MOVE A0,@CHEEK
JRNZ KP_GO
;
MOVB A0,@SKVW
MOVK 9,A0
MOVB A0,@HEADV
CALLA ANIHEAD
MOVI 20,A0
MOVE A0,@MEMAD
MOVI AWWSND,A0
CALLA ONESND
JRUC KP_GO
NOL2A
;IS HEAD IN LAZER MODE?
MOVB @TOTLZRS,A0
JRZ NOL
;YES IN LAZER MODE
;AIM AT PLAYER
;SHOOT/DEC TOTLZR
MOVB @INAIR,A0
JRNZ KP_GO
;NO LASER IN AIR
CALLR INSK
;A MATCH AFTER SEEK?
;YES, THEN FIRE
MOVB @SKVW,A0
;THIS HEAD HAS A PLAN
;WHICH DIR
JREQ SHOOT
MOVB @HEADV,A1 ;CURRENT VIEW
CMP A0,A1
JREQ SHOOT
JRC INCB ;INC TO GET THERE
;DEC HEADV TO GET TO SKVW!
DEC A1
JRUC GOALB
INCB INC A1
GOALB MOVB A1,@HEADV
CALLA ANIHEAD
MOVB @HEADV,A1
MOVB @SKVW,A0
CMP A0,A1
JRNE KP_GO
;I HAVE REACHED MY GOAL
SHOOT
CLR A0
MOVB A0,@SKVW ;STOP HEAD FROM MOVING
;PAUSE FOR AWHILE
;IF YES, STOP AND SHOOT?
;IF NO, LOOP BACK AROUND
MOVB @HEADV,A9
MOVB A9,@INAIR
MOVE A8,A11 ;PASS ALONG MY HEAD PTR
MOVB @DMGPNT,A0
CMPI 4,A0
JRZ KP_GO
CREATE BONPID,EYES
JRUC KP_GO
;
NOL
;IS HEAD ROARING
MOVE @MEMAD,A0
JRZ NOR22
;YES A MAD
SLEEP 1
MOVB @HEADV,A0
CMPI 15,A0
JRZ PRR2X
CMPI 9,A0
JREQ PRRX ;PASTE ROAR
MOVK 9,A0
MOVB A0,@SKVW
JRUC NOR2
PRRX
MOVK 15,A0
MOVB A0,@HEADV
CALLA ANIHEAD
PRR2X MOVE @MEMAD,A0
DEC A0
MOVE A0,@MEMAD
JRNZ KP_GO
;
MOVB A0,@SKVW
MOVK 9,A0
MOVB A0,@HEADV
CALLA ANIHEAD
JRUC KP_GO
NOR22
;IS HEAD ROARING
MOVE @MEROAR,A0
JRZ NOR
;YES A ROAR
SLEEP 1
MOVB @HEADV,A0
JRZ PRR2
CMPI 9,A0
JREQ PRR ;PASTE ROAR
MOVK 9,A0
MOVB A0,@SKVW
JRUC NOR2
PRR
CLR A0
MOVB A0,@HEADV
CALLA ANIHEAD
PRR2 MOVE @MEROAR,A0
DEC A0
MOVE A0,@MEROAR
JRNZ KP_GO
;
MOVB A0,@SKVW
MOVK 9,A0
MOVB A0,@HEADV
CALLA ANIHEAD
JRUC KP_GO
NOR
;IS HEAD SEEKING?
MOVB @SKVW,A0 ;0 IF NO SEEK, OTHERWISE THE SEEKED VIEW!
JRNZ NOR2
CALLA SEEK
JRUC KP_GO
; JRZ SEEK ;GO SEE IF I SHOULD SEEK
;THIS HEAD HAS A PLAN
;WHICH DIR
NOR2 MOVB @HEADV,A1 ;CURRENT VIEW
CMP A0,A1
JRC INCI ;INC TO GET THERE
;DEC HEADV TO GET TO SKVW!
DEC A1
JRUC GOAL
INCI INC A1
GOAL MOVB A1,@HEADV
CALLA ANIHEAD
MOVB @HEADV,A1
MOVB @SKVW,A0
CMP A0,A1
JRNE KP_GO
;I HAVE REACHED MY GOAL
CLR A0
MOVB A0,@SKVW ;STOP HEAD FROM MOVING
;PAUSE FOR AWHILE
;IF YES, STOP AND SHOOT?
;IF NO, LOOP BACK AROUND
SLEEP 30 ;60
KP_GO
SLEEP 1 ;1
JRUC HEADT
SEEK
MOVE @STATUS,A4
CMPI 3,A4
JREQ SK2
MOVI 20,A0 ;100
CALLA RANDPER
JRC INSK
RETS
INSK
MOVB @SCNTR,A3
INC A3
MOVB A3,@SCNTR
ANDI 01,A3
SLL 5,A3
MOVB @TOTLZRS,A0
JRZ IN1
;LAZERS ON, DO NOT CHANGE WHO I AM LOOKING AT
MOVI PLYROBJS,A2
MOVB @PLYRAD,A3 ;0 OR 32 - EYES DECIDED WHOM TO LAZER
ADD A3,A2
MOVE *A2,A0,L
;IF THIS PLAYER HAS JUST DIED, LAZERS WILL STILL BE AIMED AT HIM!
JRUC PX
IN1 XORI 32,A3
ADDI PLYROBJS,A3
MOVE *A3,A0,L
JRZ QZP
JRUC PX
SK2 MOVI 40,A0
CALLA RANDPER
JRC J8
RETS
J8
;SEEK PLAYER
MOVB @SCNTR,A3
INC A3
MOVB A3,@SCNTR
ANDI 01,A3
SLL 5,A3
MOVE A3,A2
ADDI PLYROBJS,A2
MOVE *A2,A0,L ;GET FIRST ENTRY
JRNZ PX
XORI 32,A3
ADDI PLYROBJS,A3
MOVE *A3,A0,L
JRNE PX
QZP MOVI 600,A0 ;800
CALLA RANDPER
JRC AG1
MOVI 0,B0
MOVI 0FFFFFFFFH,B1
CALLA RANGRAND
MOVE A0,A1
MOVI 0,B0
MOVI 0FFFFFFFFH,B1
CALLA RANGRAND
MOVE A0,A2
JRUC PXC
AG1 MOVK 6,A1
MOVI 500,A0
CALLA RANDPER
JRC AG
MOVK 12,A1
AG
MOVE A1,A0
JRUC OKJ
PX CALLA XYSKOBJ
MOVE A5,A1
MOVE A6,A2
PXC CALLA GETHDR
SLL 3,A0
ADDI CVRT,A0
MOVB *A0,A0
;DIR TO FACE IN A0
CMPI 6,A0
JRNC OKJ1
MOVK 6,A0
JRUC OKJ2
OKJ1 CMPI 13,A0
JRC OKJ
MOVK 12,A0
OKJ
OKJ2 MOVB A0,@SKVW
MOVB @HEADV,A1
CMP A1,A0
JREQ OKJ8
RETS
; JRNE KP_GO
OKJ8 CLR A0
MOVB A0,@SKVW
RETS
; JRUC KP_GO
; 01
; 16 02
; 15 03
; 14 04
; 13 05
; 12 06
; 11 07
; 10 08
; 09
; 04
; 12 11
; 08 07
; 16 15
; 02 01
; 10 09
; 06 05
; 14 13
; 03
ANIHEAD
;ANI ONTO SCREEN THIS HEAD
MOVB @DMGPNT,A0
CMPI 4,A0
JRZ REY
MOVB @HEADV,A0
MOVE A0,A2
SLL 5,A0
MOVE @MCON,A1
JRZ NOMC5
ADDI HEADVWZ,A0
JRUC NOMC6
NOMC5 ADDI HEADVW,A0
NOMC6 MOVE *A0,A1,L ;NEW OIMG
SLL 4,A2
ADDI HFLAG,A2
MOVE *A2,A4,W ;NEW OFLAGS
CALLA ANI
REY RETS
; 01
; 16 02
; 15 03
; 14 04
; 13 05
; 12 06
; 11 07
; 10 08
; 09
HEADVW .LONG MUG1A,MUG4,MUG4,MUG4,MUG4,MUG4,MUG4,MUG3
.LONG MUG2,MUG1,MUG2,MUG3,MUG4,MUG4,MUG4,MUG1C,MUG1B
HEADVWZ .LONG MUG1AZ,MUG4Z,MUG4Z,MUG4Z,MUG4Z,MUG4Z,MUG4Z,MUG3Z
.LONG MUG2Z,MUG1Z,MUG2Z,MUG3Z,MUG4Z,MUG4Z,MUG4Z,MUG1CZ,MUG1BZ
HFLAG .WORD DMAWNZ,DMAWNZ,DMAWNZ,DMAWNZ,DMAWNZ,DMAWNZ
.WORD DMAWNZ+M_FLIPH,DMAWNZ+M_FLIPH,DMAWNZ+M_FLIPH
.WORD DMAWNZ,DMAWNZ,DMAWNZ,DMAWNZ,DMAWNZ,DMAWNZ
.WORD DMAWNZ,DMAWNZ,DMAWNZ
BELLY
;BELLY DOOR OPENS AND CLOSES
;BEGIN NEW OBJECT
MOVE A8,A10
MOVI BLYIMG,A14
CALLA GPALOBJ ;ALLOCATE A COLOR PALETTE
CALLA STFOBJ ;STUFF OBJECT DATA
MOVE A13,*A0(OPLINK),L
CALLA INSOBJ ;INSERT OBJECT INTO LIST
MOVE A0,A8
MOVE A8,@KP_BELL,L
;
CALLA OBJOFF
;WHEN CLOSED, OBJOFF
;WHEN ON, OBJON AND FRANIM LIST
;RELEASE SNAKE
;FRANIM CLOSED (CONT 1ST SCRIPT)
;OBJOFF
MOVE A10,A11
B_TOP
SLEEP 30
MOVB @DMGPNT,A0
CMPI 4,A0
JRNC BBT
MOVE *A11(OXVEL),A0,L
MOVE *A11(OYVEL),A1,L
OR A0,A1
JRNZ B_TOP
MOVI CLSENMY|TYPTORSO,A0
MOVI 0FFFFH,A1
CALLA EXISTOBJ
JRNZ B_TOP
MOVB @MACTION,A0
CMPI 6,A0
JRLO B_TOP
CMPI 11,A0
JRHI B_TOP
BBT MOVI 400,A0
CALLA RANDPER
JRNC B_TOP
;CHECK TO SEE IF ANYONE IS BELOW ME
ANDI 01,A0
JRZ P1SK
;TRY TO SEEK PLYR 2 FIRST!
CLR A1
MOVI 32,A10
MOVE @PLYROBJS+32,A0,L
JRNZ CK
MOVI 32,A1
CLR A10
MOVE @PLYROBJS,A0,L
JRZ B_TOP
JRUC CK
P1SK
;TRY P1 FIRST!
MOVI 32,A1
CLR A10
MOVE @PLYROBJS,A0,L
JRNZ CK
CLR A1
MOVE @PLYROBJS+32,A0,L
JRZ B_TOP
MOVI 32,A10
CK
MOVE *A0(OYPOS),A2
MOVE *A8(OYPOS),A3
ADDI 30,A3
CMP A2,A3
JRLT AHIT0
MOVI PLYROBJS,A0
ADD A1,A0
MOVE *A0,A0,L
JRZ B_TOP ;AHIT0 ;B_TOP
XORI 32,A10
MOVE *A0(OYPOS),A2
CMP A2,A3
JRLT AHIT0
;NOPE, BOTH PLAYERS ARE ABOVE ME
JRUC B_TOP
AHIT0
MOVI CLSENMY|TYPMUT|SUBSNK,A0
MOVI 0FFFFH,A1
CALLA EXISTOBJ
JRNZ B_TOP
MOVK 1,A0
MOVB A0,@SNKOUT
MOVE A8,A0
CALLA OBJON
MOVB A10,@KPA10
;START FRANIM LIST
CREATE 0,SNAKE
MOVI OPNCLS,A9 ;OPEN AND CLOSE BELLY
MOVK 1,A1
JSRP FRANIM
MOVE A8,A0
CALLA OBJOFF
SLEEP 1*60
JRUC B_TOP
;
OPNCLS .LONG BELLY1
.WORD 6
.LONG BELLY2
; .WORD SPAWNP|1*60+30
; .WORD 0,0,0
; .LONG SNAKE
.WORD 90
.LONG BELLY1
.WORD 6
.LONG 0
;
SNAKE
SLEEP 6
MOVI BONPID,A0
MOVE A0,*A13(PROCID)
MOVB @KPA10,A10
;0 FOR PLAYER 1 SEEK SNAKE
MOVI TRAM1,A11
CMPI 32,A10
JRNE TRW
MOVI TRAM2,A11
TRW MOVI PLYROBJS,A0
ADD A10,A0
MOVE *A0,A0,L
MOVE A0,*A11,L ;MOVE OBJECT BLOCK PTR INTO TOP OF RAM STACK
MOVI MAXPCS,A9 ;CHASER LENGTH
MOVK 1,A10
LPA:
CREATE BONPID,CHASER
SLEEP 2
INC A10
CMP A9,A10
JRLE LPA
SLEEP 1*60
CLR A0
MOVB A0,@SNKOUT
DIE
CHASER:
MOVE @KP_BELL,A8,L
MOVE *A8(OXVAL),A0,L
ADDI 0F0000H,A0
MOVE *A8(OYVAL),A1,L
ADDI 0F0000H,A1
MOVI HLPR1,A2
MOVI 159,A3
MOVI DMAWNZ,A4 ;NON-ZERO VALUE
MOVI CLSENMY|TYPMUT|SUBSNK,A5
MOVE *A8(OXVEL),A6,L
MOVE *A8(OYVEL),A7,L
MOVE A7,*A13(DLY),L
CALLA BEGINOBJ2
MOVE A10,A0
SLL 5,A0
;A11=TRAM PTR
ADD A11,A0
MOVE A8,*A0,L
MOVK 1,A0
MOVB A0,*A13(CDELAY)
MOVB A0,*A13(BLDVW)
CLR A0
MOVE A0,*A13(SKTM)
MOVB A7,*A13(GDIE)
MOVB A0,*A13(SKHITS)
; SLEEP 2
LPTP:
MOVB *A13(SKHITS),A0
CMPI 3,A0
JRC LO0
;KILL PC
MOVE A8,A0
CALLA DELOBJ
MOVE A10,A0
SLL 5,A0
ADD A11,A0
CLR A1
MOVE A1,*A0,L
DIE
LO0
MOVB *A13(CDELAY),A1
ANDI 07H,A1
DEC A1
MOVB A1,*A13(CDELAY)
JRNE NO_SK
MOVI 1,A1
CMPI 1,A10
JRNE U2
MOVE *A13(SKTM),A0
INC A0
MOVE A0,*A13(SKTM)
CMPI 028H,A0
JRHI OUT1
MOVI 5,A1
U2
MOVB A1,*A13(CDELAY)
MOVE A10,A1
LPTP2 DEC A1
MOVE A1,A0
SLL 5,A0
ADD A11,A0
MOVE *A0,A0,L ;OBJ TO SK
JRZ OUT1
JRZ LPTP2
CALLR PLTLINE
MOVE A5,*A8(OXVEL),L
MOVE A6,*A8(OYVEL),L
NO_SK
;UPDATE VIEW OF BLADE
MOVB *A13(BLDVW),A0
ANDI 07H,A0
INC A0
MOVB A0,*A13(BLDVW)
CMPI 6,A0
JRNE KPG
CLR A0
MOVB A0,*A13(BLDVW)
KPG
MOVI CHSRIMG,A1
SLL 5,A0
ADD A0,A1
MOVE *A1,A1,L ;GET NEW OIMG FOR THIS CHASER PIECE
MOVE *A8(OFLAGS),A4
CALLA ANI
OUT SLEEP 2
JRUC LPTP
OUT1
MOVE A10,A0
SLL 5,A0
ADD A11,A0
CLR A1
MOVE A1,*A0,L
CLR A0
MOVE A0,*A8(OID)
; MOVE A8,A0
; CALLA DELOBJ
; DIE
MOVE *A8(OXPOS),A0
SUBI 1,A0
MOVE A0,*A8(OXPOS)
MOVE *A8(OYPOS),A0
SUBI 1,A0
MOVE A0,*A8(OYPOS)
MOVI BOOMN2,A9 ;BOOM3 CHANGES PALETTE TO EXPLOSION!
MOVK 1,A1
JSRP FRANIM
MOVE A8,A0
CALLA DELOBJ
DIE
KIL_SNK
;A8=PC PNTR
MMTM SP,A1,A9,A10,A11
MOVE *A8(OPLINK),A0,L
CALLA GETA10
CALLA GETA11
MOVE A10,A0
SLL 5,A0
ADD A11,A0
CLR A1
MOVE A1,*A0,L
MOVE *A8(OPLINK),A0,L
CALLA KILL
MOVE A8,A0
CALLA DELOBJ
MMFM SP,A1,A9,A10,A11
RETS
CHSRIMG:
.LONG HLPR1,HLPR2,HLPR3,HLPR4,HLPR5,HLPR6
;
JPTBL .LONG 0,MDN,MUP,0,FPNDLFT,MVHD,PNDLFT,PNDRGT,POSE
.LONG FLAIL,STOP,FIST,LUNGE,LUNGED
JPTBLF .LONG ROLLINF,MDNF,MUPF,FPNDRGTF,FPNDLFTF,MVHDF,PNDLFTF,PNDRGTF,POSEF
.LONG FLAILF,STOPF,FISTF,LUNGEF,LUNGEDF
;
MOD_VELS
MOVE A0,*A8(OYVEL),L
MOVE *A13(TNKR),A1,L
MOVE A0,*A1(OYVEL),L
MOVE *A13(TRSL),A1,L
MOVE A0,*A1(OYVEL),L
MOVE *A13(TRSR),A1,L
MOVE A0,*A1(OYVEL),L
MOVE *A13(TNKR),A1,L
MOVE A0,*A1(OYVEL),L
MOVE *A13(ARML),A1,L
MOVE A0,*A1(OYVEL),L
MOVE *A13(ARMR),A1,L
MOVE A0,*A1(OYVEL),L
MOVE *A13(TRDLF),A1,L
MOVE A0,*A1(OYVEL),L
MOVE *A13(TRDRF),A1,L
MOVE A0,*A1(OYVEL),L
MOVE *A13(TRDRS),A1,L
MOVE A0,*A1(OYVEL),L
MOVE *A13(TRDLS),A1,L
MOVE A0,*A1(OYVEL),L
MOVE *A13(SHADR),A1,L
MOVE A0,*A1(OYVEL),L
MOVE *A13(SHADF),A1,L
MOVE A0,*A1(OYVEL),L
MOVE *A13(MHEAD),A1,L
MOVE A0,*A1(OYVEL),L
RETS
LINEBLY
;LINE UP BELLY
CALLA GETANIXY
MOVE @KP_BELL,A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
SUBI 020000H,A3 ;SUB 1 FROM X
SUBI 010000H,A2 ;ADD 1 TO Y
CALLA GANISAG
RETS
LINE_UP
CALLR LINEBLY
;DO HEAD
CALLA GETANIXY
MOVE *A13(MHEAD),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
ADDI 020000H,A2 ;Y
MOVB @DMGPNT,A5
CMPI 5,A5
JRLO AU
;HEAD ON TANK
ADDI 0210000H,A2
JRUC P0
AU MOVB @POP,A5
JRZ P0
SLL 16,A5
SUB A5,A2
P0
CALLA GANISAG
L2UP
;RIGHT SIDE OF TANK
CALLA GETANIXY
MOVE *A13(TNKR),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
CALLA GANISAG
;ADJUST LEFT SIDE TORSO
CALLA GETANIXY
MOVE *A13(TRSL),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
CALLA GANISAG
;ADJUST RGT TORSO
CALLA GETANIXY
MOVE *A13(TRSR),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
SUBI 010000H,A3 ;SUB 1 FROM X
CALLA GANISAG
;ADJUST LEFT SIDE ARM
; MOVB @DMGPNT,A0
; JRNZ SKPIT
CALLA GETANIXY
MOVE *A13(ARML),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
CALLA GANISAG
;ADJUST RIGHT SIDE ARM
;SKPIT
; MOVB @DMGPNT,A0
; CMPI 2,A0
; JRGE SKPIT2
CALLA GETANIXY
MOVE *A13(ARMR),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
SUBI 010000H,A3 ;SUB 1 FROM X
CALLA GANISAG
;ADJUST LEFT SIDE TREAD
;SKPIT2
CALLA GETANIXY
MOVE *A13(TRDLS),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
CALLA GANISAG
;ADJUST RIGHT SIDE TREAD
CALLA GETANIXY
MOVE *A13(TRDRS),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
CALLA GANISAG
;ADJUST LEFT FRONT TREAD
CALLA GETANIXY
MOVE *A13(TRDLF),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
SUBI 010000H,A2 ;SUB 1 FROM Y
CALLA GANISAG
;ADJUST RIGHT FRONT TREAD
CALLA GETANIXY
MOVE *A13(TRDRF),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
SUBI 010000H,A2 ;SUB 1 FROM Y
CALLA GANISAG
;DO RIGHT SIDE SHADOW
CALLA GETANIXY
MOVE *A13(SHADR),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
CALLA GANISAG
;DO FRONT SHADOW
CALLA GETANIXY
MOVE *A13(SHADF),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
SUBI 010000H,A3 ;SUB 1 FROM X
SUBI 010000H,A2 ;SUB 1 FROM Y
CALLA GANISAG
RETS
; PLTLINE - MAKE AN OBJECT TRAVEL FROM PNT. A TO PNT. B
;
; A8 = OBJECT SEEKING
; A0 = OBJECT SEEKED
; RETURNS:
; A5 = X VEL UHL
; A6 = Y VEL UHL
PLTLINE:
MOVE *A0(OXPOS),A5,W
MOVE *A0(OYPOS),A6,W
CMPI 1,A10
JRNE GRGR
ADDI 10,A6
GRGR MOVE *A8(OXPOS),A3,W
MOVE *A8(OYPOS),A4,W
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
MOVI 18H,A5
MPYS A5,A3
MPYS A1,A5 ;FINAL X VEL
SRA 4,A3
SRA 4,A5
MOVE A3,A6 ;FINAL Y VEL
RETS
;
ONLIST .LONG 0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13
MCLIST .LONG 0,T1,T2,T3Z,T4Z,T5Z,T6Z,T7,T8,T9,T10,T11,T12,T13Z
T1 ;TANK LEFT
.LONG 0,0,MTNK1A
.WORD 130,DMAWNZ,CLSENMY|TYPMUT|SUBTKL
.LONG 0,0
T2 ;TANK RGT
.LONG 0,0,MTNK1A
.WORD 130,DMAWNZ+M_FLIPH,CLSENMY|TYPMUT|SUBTKR
.LONG 0,0
T3 ;TORSO LEFT
.LONG 0,0,TRS1
.WORD 201,DMAWNZ+M_PIXSCAN,CLSENMY|TYPMUT|SUBTSL
.LONG 0,0
T4 ;TORSO RGT
.LONG 0,0,TRS1
.WORD 201,DMAWNZ+M_FLIPH+M_PIXSCAN,CLSENMY|TYPMUT|SUBTSR
.LONG 0,0
T5 ;ARM LEFT
.LONG 0,0,MARM1
.WORD 202,DMAWNZ+M_PIXSCAN,CLSENMY|TYPMUT|SUBARML
.LONG 0,0
T6 ;ARM RGT
.LONG 0,0,MARM1
.WORD 202,DMAWNZ+M_FLIPH+M_PIXSCAN,CLSENMY|TYPMUT|SUBARMR
.LONG 0,0
T3Z ;TORSO LEFT
.LONG 0,0,TRS1Z
.WORD 201,DMAWNZ+M_PIXSCAN,CLSENMY|TYPMUT|SUBTSL
.LONG 0,0
T4Z ;TORSO RGT
.LONG 0,0,TRS1Z
.WORD 201,DMAWNZ+M_FLIPH+M_PIXSCAN,CLSENMY|TYPMUT|SUBTSR
.LONG 0,0
T5Z ;ARM LEFT
.LONG 0,0,MARM1Z
.WORD 202,DMAWNZ+M_PIXSCAN,CLSENMY|TYPMUT|SUBARML
.LONG 0,0
T6Z ;ARM RGT
.LONG 0,0,MARM1Z
.WORD 202,DMAWNZ+M_FLIPH+M_PIXSCAN,CLSENMY|TYPMUT|SUBARMR
.LONG 0,0
T7 ;TREAD LFT FRONT
.LONG 0,0,TRD1
.WORD 130,DMAWNZ+M_NOCOLL,CLSNEUT|TYPNEUT|SUBCHNK
.LONG 0,0
T8 ;TREAD RGT FRONT
.LONG 0,0,TRD1
.WORD 130,DMAWNZ+M_FLIPH+M_NOCOLL,CLSNEUT|TYPNEUT|SUBCHNK
.LONG 0,0
T9 ;TREAD LEFT SIDE
.LONG 0,0,TRD1A
.WORD 130,DMAWNZ+M_NOCOLL,CLSNEUT|TYPNEUT|SUBCHNK
.LONG 0,0
T10 ;TREAD RGT SIDE
.LONG 0,0,TRD1A
.WORD 130,DMAWNZ+M_FLIPH+M_NOCOLL,CLSNEUT|TYPNEUT|SUBCHNK
.LONG 0,0
T11 ;SHAD RGT
.LONG 0,0,SHAD
.WORD 129,DMAWNZ+M_NOCOLL,CLSNEUT|TYPNEUT|SUBCHNK
.LONG 0,0
T12 ;SHAD FRONT
.LONG 0,0,SHAD2
.WORD 129,DMAWNZ+M_NOCOLL,CLSNEUT|TYPNEUT|SUBCHNK
.LONG 0,0
T13 ;HEAD
.LONG 0,0,MUG1
.WORD 203,DMAWNZ,CLSENMY|TYPMUT|SUBHD
.LONG 0,0
T13Z ;HEAD
.LONG 0,0,MUG1Z
.WORD 203,DMAWNZ,CLSENMY|TYPMUT|SUBHD
.LONG 0,0
BM6 ;BEAM 6
.LONG 0,0,BEAM4
.WORD 213,DMAWNZ+M_FLIPH,CLSNEUT|TYPNEUT|SUBCHNK2
.LONG 0,0
BM7 ;BEAM 7
.LONG 0,0,BEAM3
.WORD 213,DMAWNZ+M_FLIPH,CLSNEUT|TYPNEUT|SUBCHNK2
.LONG 0,0
BM8 ;BEAM 8
.LONG 0,0,BEAM2
.WORD 213,DMAWNZ+M_FLIPH,CLSNEUT|TYPNEUT|SUBCHNK2
.LONG 0,0
BM9 ;BEAM 9
.LONG 0,0,BEAM1
.WORD 213,DMAWNZ,CLSNEUT|TYPNEUT|SUBCHNK2
.LONG 0,0
BM10 ;BEAM 10
.LONG 0,0,BEAM2
.WORD 213,DMAWNZ,CLSNEUT|TYPNEUT|SUBCHNK2
.LONG 0,0
BM11 ;BEAM 11
.LONG 0,0,BEAM3
.WORD 213,DMAWNZ,CLSNEUT|TYPNEUT|SUBCHNK2
.LONG 0,0
BM12 ;BEAM 12
.LONG 0,0,BEAM4
.WORD 213,DMAWNZ,CLSNEUT|TYPNEUT|SUBCHNK2
.LONG 0,0
BM6Z ;BEAM 6
.LONG 0,0,BEAM4Z
.WORD 213,DMAWNZ+M_FLIPH,CLSNEUT|TYPNEUT|SUBCHNK2
.LONG 0,0
BM7Z ;BEAM 7
.LONG 0,0,BEAM3Z
.WORD 213,DMAWNZ+M_FLIPH,CLSNEUT|TYPNEUT|SUBCHNK2
.LONG 0,0
BM8Z ;BEAM 8
.LONG 0,0,BEAM2Z
.WORD 213,DMAWNZ+M_FLIPH,CLSNEUT|TYPNEUT|SUBCHNK2
.LONG 0,0
BM9Z ;BEAM 9
.LONG 0,0,BEAM1Z
.WORD 213,DMAWNZ,CLSNEUT|TYPNEUT|SUBCHNK2
.LONG 0,0
BM10Z ;BEAM 10
.LONG 0,0,BEAM2Z
.WORD 213,DMAWNZ,CLSNEUT|TYPNEUT|SUBCHNK2
.LONG 0,0
BM11Z ;BEAM 11
.LONG 0,0,BEAM3Z
.WORD 213,DMAWNZ,CLSNEUT|TYPNEUT|SUBCHNK2
.LONG 0,0
BM12Z ;BEAM 12
.LONG 0,0,BEAM4Z
.WORD 213,DMAWNZ,CLSNEUT|TYPNEUT|SUBCHNK2
.LONG 0,0
BLYIMG ;BEAM 12
.LONG 0,0,BELLY1
.WORD 131,DMAWNZ,CLSNEUT|TYPNEUT|SUBCHNK
.LONG 0,0
;
;TREAD ANIMATION TABLES
;
TRDSDLL
.LONG TRD2A
.WORD FLIPBITS|02,0
.LONG TRD3A
.WORD 02
.LONG TRD1A
.WORD 02
.LONG 0
TRDSDRL
.LONG TRD2A
.WORD FLIPBITS|02,(M_FLIPH)
.LONG TRD3A
.WORD 02
.LONG TRD1A
.WORD 02
.LONG 0
TRDFTLL
.LONG TRD2
.WORD FLIPBITS|02,0
.LONG TRD3
.WORD 02
.LONG TRD1
.WORD 02
.LONG 0
TRDFTRL
.LONG TRD2
.WORD FLIPBITS|02,(M_FLIPH)
.LONG TRD3
.WORD 02
.LONG TRD1
.WORD 02
.LONG 0
;UP SCREEN
BTRDSDLL
.LONG TRD3A
.WORD FLIPBITS|03,0
.LONG TRD2A
.WORD 03
.LONG TRD1A
.WORD 03
.LONG 0
BTRDSDRL
.LONG TRD3A
.WORD FLIPBITS|03,(M_FLIPH)
.LONG TRD2A
.WORD 03
.LONG TRD1A
.WORD 03
.LONG 0
BTRDFTLL
.LONG TRD3
.WORD FLIPBITS|03,0
.LONG TRD2
.WORD 03
.LONG TRD1
.WORD 03
.LONG 0
BTRDFTRL
.LONG TRD3
.WORD FLIPBITS|03,(M_FLIPH)
.LONG TRD2
.WORD 03
.LONG TRD1
.WORD 03
.LONG 0
PNDLARM
.LONG MARM1
.WORD FLIPBITS|05,0
.LONG MARM2
.WORD 05
.LONG MARM3
.WORD 05
.LONG MARM4
.WORD 05
.LONG MARM3
.WORD 05
.LONG MARM2
.WORD 05
.LONG MARM1
.WORD 05
.LONG MARM6A
; .WORD SPAWNP|50
; .WORD 0,0,0
; .LONG SHKIT
.WORD 50
.LONG 0
PNDRARM
.LONG MARM1
.WORD FLIPBITS|05,(M_FLIPH)
.LONG MARM2
.WORD 05
.LONG MARM3
.WORD 05
.LONG MARM4
.WORD 05
.LONG MARM3
.WORD 05
.LONG MARM2
.WORD 05
.LONG MARM1
.WORD 05
.LONG MARM6A
; .WORD SPAWNP|50
; .WORD 0,0,0
; .LONG SHKIT
.WORD 50
.LONG 0
FISTL
.LONG MARM1
.WORD FLIPBITS|05,0
.LONG MARM2
.WORD FLIPBITS|05,0
.LONG MARM3
.WORD FLIPBITS|01,0
.LONG 0
FISTL2 ;COMING BACK DOWN
.LONG MARM2
.WORD FLIPBITS|05,0
.LONG MARM1
.WORD FLIPBITS|01,0
.LONG 0
FISTR
.LONG MARM1
.WORD FLIPBITS|05,(M_FLIPH)
.LONG MARM2
.WORD 05
.LONG MARM3
.WORD 01
.LONG 0
FISTR2 ;COMING BACK DOWN
.LONG MARM2
.WORD FLIPBITS|05,(M_FLIPH)
.LONG MARM1
.WORD 05
.LONG 0
PNDLARMZ
.LONG MARM1Z
.WORD FLIPBITS|05,0
.LONG MARM2Z
.WORD 05
.LONG MARM3Z
.WORD 05
.LONG MARM4Z
.WORD 05
.LONG MARM3Z
.WORD 05
.LONG MARM2Z
.WORD 05
.LONG MARM1Z
.WORD 05
.LONG MARM6AZ
; .WORD SPAWNP|50
; .WORD 0,0,0
; .LONG SHKIT
.WORD 50
.LONG 0
PNDRARMZ
.LONG MARM1Z
.WORD FLIPBITS|05,(M_FLIPH)
.LONG MARM2Z
.WORD 05
.LONG MARM3Z
.WORD 05
.LONG MARM4Z
.WORD 05
.LONG MARM3Z
.WORD 05
.LONG MARM2Z
.WORD 05
.LONG MARM1Z
.WORD 05
.LONG MARM6AZ
; .WORD SPAWNP|50
; .WORD 0,0,0
; .LONG SHKIT
.WORD 50
.LONG 0
FISTLZ
.LONG MARM1Z
.WORD FLIPBITS|05,0
.LONG MARM2Z
.WORD FLIPBITS|05,0
.LONG MARM3Z
.WORD FLIPBITS|01,0
.LONG 0
FISTL2Z ;COMING BACK DOWN
.LONG MARM2Z
.WORD FLIPBITS|05,0
.LONG MARM1Z
.WORD FLIPBITS|01,0
.LONG 0
FISTRZ
.LONG MARM1Z
.WORD FLIPBITS|05,(M_FLIPH)
.LONG MARM2Z
.WORD 05
.LONG MARM3Z
.WORD 01
.LONG 0
FISTR2Z ;COMING BACK DOWN
.LONG MARM2Z
.WORD FLIPBITS|05,(M_FLIPH)
.LONG MARM1Z
.WORD 05
.LONG 0
POSEMEL
.LONG MARM1
.WORD FLIPBITS|05,0
.LONG MARM2
.WORD 05
.LONG MARM3
.WORD 05
.LONG MARM4
.WORD 90
.LONG MARM3
.WORD 05
.LONG MARM2
.WORD 05
.LONG MARM1
.WORD 05
.LONG 0
POSEMER
.LONG MARM1
.WORD FLIPBITS|05,(M_FLIPH)
.LONG MARM2
.WORD 05
.LONG MARM3
.WORD 05
.LONG MARM4
.WORD 90
.LONG MARM3
.WORD 05
.LONG MARM2
.WORD 05
.LONG MARM1
.WORD 05
.LONG 0
POSEMELZ
.LONG MARM1Z
.WORD FLIPBITS|05,0
.LONG MARM2Z
.WORD 05
.LONG MARM3Z
.WORD 05
.LONG MARM4Z
.WORD 90
.LONG MARM3Z
.WORD 05
.LONG MARM2Z
.WORD 05
.LONG MARM1Z
.WORD 05
.LONG 0
POSEMERZ
.LONG MARM1Z
.WORD FLIPBITS|05,(M_FLIPH)
.LONG MARM2Z
.WORD 05
.LONG MARM3Z
.WORD 05
.LONG MARM4Z
.WORD 90
.LONG MARM3Z
.WORD 05
.LONG MARM2Z
.WORD 05
.LONG MARM1Z
.WORD 05
.LONG 0
FPNDLARM:
.LONG MARM1
.WORD FLIPBITS|03,0
.LONG MARM2
.WORD 03
.LONG MARM3
.WORD 03
.LONG MARM4
.WORD 03
.LONG MARM3
.WORD 03
.LONG MARM2
.WORD 03
.LONG MARM1
.WORD 03
.LONG MARM6A
.WORD 01
.LONG 0
FPNDLARMZ
.LONG MARM1Z
.WORD FLIPBITS|03,0
.LONG MARM2Z
.WORD 03
.LONG MARM3Z
.WORD 03
.LONG MARM4Z
.WORD 03
.LONG MARM3Z
.WORD 03
.LONG MARM2Z
.WORD 03
.LONG MARM1Z
.WORD 03
.LONG MARM6AZ
.WORD 01
.LONG 0
FLIPL
.LONG MARM3
.WORD FLIPBITS|02,0
.LONG 0
FLIPLZ
.LONG MARM3Z
.WORD FLIPBITS|02,0
.LONG 0
FLIPH
.LONG MUG1
.WORD FLIPBITS|03,0
.LONG MUG2
.WORD 3
.LONG MUG3
.WORD 3
.LONG MUG4
.WORD 3
.LONG MUG1C
.WORD 3
.LONG MUG4
.WORD FLIPBITS|3,(M_FLIPH)
.LONG MUG3
.WORD 3
.LONG MUG2
.WORD 3
.LONG MUG1
.WORD 3
.LONG 0
FLIPHZ
.LONG MUG1Z
.WORD FLIPBITS|03,0
.LONG MUG2Z
.WORD 3
.LONG MUG3Z
.WORD 3
.LONG MUG4Z
.WORD 3
.LONG MUG1CZ
.WORD 3
.LONG MUG4Z
.WORD FLIPBITS|3,(M_FLIPH)
.LONG MUG3Z
.WORD 3
.LONG MUG2Z
.WORD 3
.LONG MUG1Z
.WORD 3
.LONG 0
FLIPCR
.LONG TRS1
.WORD FLIPBITS|02,(M_FLIPH)
.LONG 0
FLIPCL
.LONG TRS1
.WORD FLIPBITS|02,0
.LONG 0
FLIPCR2
.LONG TRS1A
.WORD FLIPBITS|02,(M_FLIPH)
.LONG 0
FLIPCL2
.LONG TRS1A
.WORD FLIPBITS|02,0
.LONG 0
FLIPR
.LONG MARM3
.WORD FLIPBITS|02,(M_FLIPH)
.LONG 0
FLIPCRZ
.LONG TRS1Z
.WORD FLIPBITS|02,(M_FLIPH)
.LONG 0
FLIPCLZ
.LONG TRS1Z
.WORD FLIPBITS|02,0
.LONG 0
FLIPCR2Z
.LONG TRS1AZ
.WORD FLIPBITS|02,(M_FLIPH)
.LONG 0
FLIPCL2Z
.LONG TRS1AZ
.WORD FLIPBITS|02,0
.LONG 0
FLIPRZ
.LONG MARM3Z
.WORD FLIPBITS|02,(M_FLIPH)
.LONG 0
FPNDRARM:
.LONG MARM1
.WORD FLIPBITS|03,(M_FLIPH)
.LONG MARM2
.WORD 03
.LONG MARM3
.WORD 03
.LONG MARM4
.WORD 03
.LONG MARM3
.WORD 03
.LONG MARM2
.WORD 03
.LONG MARM1
.WORD 03
.LONG MARM6A
.WORD 01
.LONG 0
FPNDRARMZ:
.LONG MARM1Z
.WORD FLIPBITS|03,(M_FLIPH)
.LONG MARM2Z
.WORD 03
.LONG MARM3Z
.WORD 03
.LONG MARM4Z
.WORD 03
.LONG MARM3Z
.WORD 03
.LONG MARM2Z
.WORD 03
.LONG MARM1Z
.WORD 03
.LONG MARM6AZ
.WORD 01
.LONG 0
.END