1865 lines
35 KiB
NASM
1865 lines
35 KiB
NASM
|
.FILE 'NARCLOWN.ASM'
|
|||
|
.TITLE " <<< c l o w n - S L A S H E R >>>"
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* COPYRIGHT (C) 1988 WILLIAMS ELECTRONICS GAMES, INC. *
|
|||
|
* ALL RIGHTS RESERVED. *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
|
|||
|
.WIDTH 132
|
|||
|
.OPTION B,D,L
|
|||
|
.MNOLIST
|
|||
|
|
|||
|
* GET THE SYSTEM STUFF
|
|||
|
.INCLUDE "\video\MPROCEQU.ASM" ;MPROC equates
|
|||
|
.INCLUDE "\video\DISPEQU.ASM" ;Display processor equates
|
|||
|
.INCLUDE "\video\GSP.INC" ;GSP assembler equates
|
|||
|
.INCLUDE "\video\SYS.INC" ;Zunit system equates
|
|||
|
.INCLUDE "\video\MACROS.HDR" ;Macros, Yeah!
|
|||
|
* LOCAL STUFF
|
|||
|
.INCLUDE "IMGTBL.GLO"
|
|||
|
.INCLUDE "NARCEQU.ASM" ;NARC Equates
|
|||
|
.INCLUDE "NARCTEQU.ASM" ;TODD JIZZ
|
|||
|
.INCLUDE "NARCLOWN.TBL" ;Image Label Equates
|
|||
|
.GLOBAL PORSCHE1
|
|||
|
.GLOBAL ZCHK,XZCNTCK,CARCHK
|
|||
|
.GLOBAL CLWNDISP,CLNSNDST
|
|||
|
* .GLOBAL HKCOLL
|
|||
|
.GLOBAL CLWNCRM1,OIDATA
|
|||
|
.TEXT
|
|||
|
*
|
|||
|
*CLOWN DISPATCHER
|
|||
|
*
|
|||
|
*CLWNDISP:
|
|||
|
* CREATE 0CDH,CLWAIT
|
|||
|
* RETS
|
|||
|
*CLWAIT:
|
|||
|
* SLEEP 30
|
|||
|
* CREATE 0E1H,CLNSND
|
|||
|
*CLWNDIS1:
|
|||
|
* MOVE @KNAPCNT,A0,W ;HOW MANY CLWN BABIES?
|
|||
|
* CMPI 1,A0
|
|||
|
* JRHS CLWNDIS4 ;DON'T NEED MORE
|
|||
|
* MOVI >0E60,A14
|
|||
|
* CLR A5
|
|||
|
* CALLR CLWNCOLD
|
|||
|
*CLWNDIS4:
|
|||
|
* SLOOP 30,CLWNDIS1 ;WAIT FOR THEM TO DIE
|
|||
|
*
|
|||
|
*CLOWN ENTRY SOUND PROCESS
|
|||
|
*
|
|||
|
CLNSNDST
|
|||
|
CREATE INDPID,CLNSND
|
|||
|
RETS
|
|||
|
CLNSND:
|
|||
|
SLEEP 4 ;WAIT FOR CLOWNS TO COME OUT
|
|||
|
MOVE @KNAPCNT,A0,W
|
|||
|
JREQ CLNSND
|
|||
|
|
|||
|
MOVI CLTUNSND,A0,L ;PLAY CLOWN TUNE... THEIR COMING
|
|||
|
CALLA ONESND
|
|||
|
SLEEP 300
|
|||
|
MOVI CLAFSND,A0,L
|
|||
|
CALLA ONESND
|
|||
|
JAUC SUCIDE
|
|||
|
*
|
|||
|
*CLOWN COLD START
|
|||
|
*A5=Y:X COORDINATE
|
|||
|
*A14=SUBTYPE B0-3
|
|||
|
CLWNCOLD:
|
|||
|
MOVE A14,A10
|
|||
|
MOVE A5,A9
|
|||
|
CREATE >0E60,CLOWN
|
|||
|
MOVE A10,A1
|
|||
|
SLL 28,A1
|
|||
|
SRL 22,A1
|
|||
|
ADDI CLNPTAB,A1
|
|||
|
ADDI ETEMP4,A0 ;LOAD ETEMP4,5,6
|
|||
|
MOVE *A1+,*A0+,W
|
|||
|
MOVE *A1+,*A0+,W
|
|||
|
MOVE *A1,*A0,W
|
|||
|
RETS
|
|||
|
*
|
|||
|
*CLOWN PROCESS
|
|||
|
*A9=XY COORD
|
|||
|
*A10= OID
|
|||
|
*ETEMP4=JUMP PROB
|
|||
|
*ETEMP4+>10=GIRL PROB
|
|||
|
*ETEMP5=GIVEUP PROB
|
|||
|
*
|
|||
|
CLOWN:
|
|||
|
MOVE @KNAPCNT,A0,W ;HOW MANY CLOWNS?
|
|||
|
MOVE @CLWNMAX,A1,W
|
|||
|
CMP A0,A1
|
|||
|
JALS SUCIDE ;DON'T NEED MORE
|
|||
|
|
|||
|
MOVE A9,A9 ;PRESET COORD?
|
|||
|
JRNE CLWN2XX ;YES, USE IT
|
|||
|
|
|||
|
MOVE @WORLDTL,A1,W ;COME FROM EDGE OF SCREEN
|
|||
|
CALLA RANDOM
|
|||
|
MOVE A0,A0
|
|||
|
JRN CLWN2X
|
|||
|
ADDI 512,A1 ;START HIM AT RIGHT SCREEN EDGE
|
|||
|
CLWN2X:
|
|||
|
ZEXT A1
|
|||
|
|
|||
|
MOVE @PLYMIN,B0,W
|
|||
|
MOVE @PLYMAX,B1,W
|
|||
|
CALLA RANGRAND
|
|||
|
SUBI 74,A0
|
|||
|
SLL 16,A0
|
|||
|
ADD A0,A1
|
|||
|
MOVE A1,A9
|
|||
|
CLWN2XX:
|
|||
|
MOVE *A13(ETEMP4),A0,W ;GET JUMP PROB
|
|||
|
CALLA RANDPER
|
|||
|
JRNC CLWN1X
|
|||
|
JSRP JUMPER ;LETS DO A JUMPER
|
|||
|
CMPI P1DATA,A11
|
|||
|
JREQ GPLAYR ;WERE AFTER PLAYER
|
|||
|
CMPI P2DATA,A11
|
|||
|
JREQ GPLAYR
|
|||
|
JRUC GHOOKR ;WERE AFTER HOOKERS
|
|||
|
CLWN1X:
|
|||
|
MOVE A9,A1 ;GET Y:X COORD
|
|||
|
MOVI [1,1],A5 ;SET SPEED
|
|||
|
MOVI CLWNTAB,A6
|
|||
|
MOVI CLWNINIT,A14 ;CLOWN ENEMY INIT
|
|||
|
MMTM SP,A10
|
|||
|
CALLA ESINITUL ;CREATE CLOWN
|
|||
|
MMFM SP,A10
|
|||
|
JAEQ SUCIDE ;CREATE ERROR, EXIT
|
|||
|
CALLR CLNSETUP
|
|||
|
JRUC CLOWNST
|
|||
|
*
|
|||
|
*CLOWN PROBABILITY TABLE
|
|||
|
*
|
|||
|
JMPROB .SET >00 ;JUMP PROB
|
|||
|
GRLPROB .SET >10 ;GET GIRL PROB
|
|||
|
QTPROB .SET >20 ;QUIT PROB
|
|||
|
CLNPTAB:
|
|||
|
.WORD 500,750,750,0 ;NORMAL DUDE
|
|||
|
.WORD 500,700,000,0 ;DOESN'T GIVE UP
|
|||
|
.WORD 500,1000,750,0 ;GIRL GETTER
|
|||
|
.WORD 1000,700,750,0 ;JUMPER
|
|||
|
*
|
|||
|
*CLOWN SETUP
|
|||
|
*A8=OBJECT
|
|||
|
*A10=OID
|
|||
|
*A13=PROCESS
|
|||
|
*
|
|||
|
CLNSETUP:
|
|||
|
MMTM SP,A0,A1 ;PUSH REGGIES
|
|||
|
MOVE A10,*A8(OID),W ;SAVE OBJECT ID
|
|||
|
CLR A0
|
|||
|
MOVE A0,*A13(ETEMP2),L ;NO GIRL YET...
|
|||
|
MOVE @CLWNSHT,A0,W ;SHOTS TO TAKE
|
|||
|
MOVE A0,A1
|
|||
|
CALLA RANDU
|
|||
|
ADD A1,A0
|
|||
|
MOVE A0,*A13(ETEMP3),W ;SETUP SHOT COUNT
|
|||
|
|
|||
|
MOVE @KNAPCNT,A0,W
|
|||
|
INC A0
|
|||
|
MOVE A0,@KNAPCNT,W ;INCREMENT CLOWN COUNT
|
|||
|
MMFM SP,A0,A1
|
|||
|
RETS
|
|||
|
|
|||
|
*
|
|||
|
*ETEMP2=GOT HOOKER FLAG
|
|||
|
*ETEMP3=SHOT COUNT
|
|||
|
*ETEMP4=JUMPER PROB
|
|||
|
*ETEMP4+>10=GIRL PROB
|
|||
|
*ETEMP5=GIVEUP PROB
|
|||
|
CLOWNST:
|
|||
|
CLR A0
|
|||
|
MOVE A0,*A13(ETEMP2),L ;NO GIRL YET...
|
|||
|
MOVE *A13(ETEMP4+>10),A0,W ;GET HOOKER %
|
|||
|
CALLA RANDPER
|
|||
|
JRC GHOOKR
|
|||
|
*
|
|||
|
*GET NEAREST PLAYER AND STAB HIM
|
|||
|
*A8=CLOWN OBJECT
|
|||
|
*
|
|||
|
GPLAYR:
|
|||
|
MOVI CLWNWLK,A9
|
|||
|
CALLA RANDOM
|
|||
|
JRN GPLAYR1
|
|||
|
MOVI CLWNRUN,A9
|
|||
|
GPLAYR1:
|
|||
|
CALLA GETCHOK ;IF CLOSE HOOKER, BAG HER
|
|||
|
JRNE GHOOKR
|
|||
|
CMPI CLWNRE,A9
|
|||
|
JRHS GPLAYR ;INVALID ANIMATION, RESET...
|
|||
|
MOVK 4,A1
|
|||
|
JSRP FRANIM
|
|||
|
MOVE A0,A10 ;SAVE SLEEP TIME
|
|||
|
JRC GPLAYR
|
|||
|
GPLAYRL:
|
|||
|
CALLA GETCPLY ;GET CLOSEST PLAYER
|
|||
|
MOVE *A0(PFLAGS),A7,L
|
|||
|
MOVI 25,A5
|
|||
|
MOVI 15,A6
|
|||
|
MOVE *A0(POBJ),A0,L ;PLAYER OBJECT
|
|||
|
BTST BDEAD,A7 ;PLAYER DOWN?
|
|||
|
JREQ GPLYRL1 ;NOPE
|
|||
|
MOVI 7,A6
|
|||
|
CLR A1 ;NO X OFFSET
|
|||
|
MOVI -5,A3
|
|||
|
CALLA XZCNTCK ;CENTERED XZ CHECK
|
|||
|
JRUC GPLYRL2
|
|||
|
GPLYRL1:
|
|||
|
CALLA XZCHK ;ARE WE IN POSITION
|
|||
|
GPLYRL2:
|
|||
|
JRNC GPLAYR2 ;NO, GET DIRECTION
|
|||
|
GPLAYRL0
|
|||
|
BTST BJUMP2,A7 ;IN AIR ?
|
|||
|
JRNE GPLAYR20 ;YES, BE STUPID
|
|||
|
|
|||
|
CMPI 15,A3
|
|||
|
JRHS CLSTAB ;NOT TOO CLOSE
|
|||
|
MOVE *A8(OXVEL),A0,L ;NO X VEL ?
|
|||
|
JREQ GPLAYR2 ;GIVE HIM XVEL
|
|||
|
CLR A0
|
|||
|
MOVE A0,*A8(OZVEL),L ;COOL VELOCITY
|
|||
|
MOVE A0,*A8(OYVEL),L ;COOL VELOCITY
|
|||
|
CALLA SHVELCPY ;DO IT FOR SHADOW
|
|||
|
JRUC GPLAYR20
|
|||
|
GPLAYR2:
|
|||
|
CMPI 80,A3 ;CLOSE ENOUGH TO JUMP?
|
|||
|
JRHS GPLAYR3
|
|||
|
CMPI 80,A4
|
|||
|
JRHS GPLAYR3
|
|||
|
MOVI 10,A0
|
|||
|
CALLA RANDPER
|
|||
|
JRNC GPLAYR3
|
|||
|
JSRP JUMPLIL ;DO A LITTLE JUMP
|
|||
|
JRUC GPLAYRL
|
|||
|
GPLAYR3:
|
|||
|
CALLR CLWNDIR ;NO GET DIRECTION
|
|||
|
GPLAYR20:
|
|||
|
SLEEP 1
|
|||
|
DSJ A10,GPLAYRL
|
|||
|
JRUC GPLAYR1
|
|||
|
*
|
|||
|
*XZCNTCK
|
|||
|
*X CHECK IS ON OBJECT CENTERS NOT ANIMATION POINT
|
|||
|
*CALLING PARAMETERS:
|
|||
|
*A0=OBJECT SEEKED
|
|||
|
*A1= X OFFSET FROM SEEKED OBJECT
|
|||
|
*A3= Z OFFSET
|
|||
|
*A5=X RANGE
|
|||
|
*A6=Z RANGE
|
|||
|
*A8=OBJECT SEEKING
|
|||
|
*RETURNS:
|
|||
|
*CARRY SET IF HE IS CLOSE ENOUGH
|
|||
|
*A1=DELTA X
|
|||
|
*A2=DELTA Z
|
|||
|
*A3=ABS DELTA X
|
|||
|
*A4=ABS DELTA Z
|
|||
|
XZCNTCK:
|
|||
|
MOVE *A0(OSIZEX),A2,W
|
|||
|
SRL 1,A2
|
|||
|
ADD A1,A2
|
|||
|
MOVE *A0(OXPOS),A1,W
|
|||
|
ADD A2,A1
|
|||
|
MOVE *A0(OZPOS),A2,W
|
|||
|
ADD A3,A2
|
|||
|
MOVE *A8(OSIZEX),A4,W
|
|||
|
SRL 1,A4
|
|||
|
MOVE *A8(OXPOS),A3,W
|
|||
|
ADD A4,A3
|
|||
|
MOVE *A8(OZPOS),A4,W
|
|||
|
SUB A4,A2
|
|||
|
SUB A3,A1
|
|||
|
MOVE A1,A3
|
|||
|
MOVE A2,A4
|
|||
|
ABS A3
|
|||
|
ABS A4
|
|||
|
CMP A5,A3
|
|||
|
JRNC XZCNTX
|
|||
|
CMP A6,A4
|
|||
|
XZCNTX:
|
|||
|
RETS
|
|||
|
*
|
|||
|
*CLOWN BLOOD START
|
|||
|
*A8=CLOWN, A0=PLAYER DATA
|
|||
|
*
|
|||
|
CLBLOOD:
|
|||
|
MMTM SP,A8,A11
|
|||
|
MOVE *A8(OID),A11,W
|
|||
|
MOVE *A8(OYPOS),A9,W
|
|||
|
ADDI 25,A9 ;ADJUST FOR KNIFE POSITION
|
|||
|
MOVE *A0(PFLAGS),A8,L
|
|||
|
BTST BSWALK,A8
|
|||
|
JREQ CLBLD0
|
|||
|
ADDI 8,A9 ;LOWER BLOOD FOR SQUAT WALK
|
|||
|
CLBLD0:
|
|||
|
MOVE *A0(POBJ),A8,L
|
|||
|
CREATE 0EDH,SPLATBOX
|
|||
|
MOVI 15,A8
|
|||
|
MOVE A8,*A0(PTIME),W ;DELAY START OF BLOOD
|
|||
|
MMFM SP,A8,A11
|
|||
|
RETS
|
|||
|
*STAB THE SUCKER, GACY BABY
|
|||
|
CLSTAB:
|
|||
|
MOVE A1,A1 ;FLIP THE DUDE PROPERLY
|
|||
|
JRN CLSTAB0
|
|||
|
CALLA NOYFLP
|
|||
|
JRUC CLSTAB1
|
|||
|
CLSTAB0:
|
|||
|
CALLA YFLP
|
|||
|
CLSTAB1:
|
|||
|
CALLA PSTOP ;STOP THE DUDE
|
|||
|
CALLA GETCPLY
|
|||
|
MOVE A0,A2 ;GIVE PLAYER KNIFE HIT
|
|||
|
CALLA KNIFEHIT
|
|||
|
MOVE *A0(PFLAGS),A1,L
|
|||
|
BTST BDEAD,A1 ;PLAYER LYING DOWN?
|
|||
|
JREQ STABHI ;NO, UPRIGHT...
|
|||
|
|
|||
|
*STAB HIM LOW DOWN
|
|||
|
MOVE *A0(POBJ),A2,L ;FLIP THE DUDE OPPOSITE TO PLAYER
|
|||
|
MOVE *A2(OFLAGS),A1,L
|
|||
|
BTST B_FLIPH,A1
|
|||
|
JRZ CSTBLO1
|
|||
|
CALLA NOYFLP
|
|||
|
JRUC CSTBLO2
|
|||
|
CSTBLO1:
|
|||
|
CALLA YFLP
|
|||
|
CSTBLO2:
|
|||
|
MOVE *A8(OSIZEY),A1,W ;ALREADY LOW?
|
|||
|
CMPI 50,A1
|
|||
|
JRLS STABLO1 ;YES...
|
|||
|
MOVI CLWNKST1,A9
|
|||
|
MOVK 1,A1
|
|||
|
JSRP FRANIM
|
|||
|
STABLO1:
|
|||
|
MOVI CLWNKST2,A9
|
|||
|
MOVI CLSTBSND,A0
|
|||
|
CALLA ONESND
|
|||
|
MOVK 1,A1
|
|||
|
JSRP FRANIM ;STAB BEFORE SPURT
|
|||
|
CALLA GETCPLY
|
|||
|
MOVE *A0(PFLAGS),A1,L
|
|||
|
BTST BDEAD,A1 ;PLAYER LYING DOWN?
|
|||
|
JREQ STABLO2 ;NO, UPRIGHT NO BLOOD WE MISSED
|
|||
|
MOVI >007A000C,A9 ;Y:X OFFSET
|
|||
|
CREATE 0EDH,SPLATS
|
|||
|
STABLO2:
|
|||
|
MOVI CLWNKST3,A9
|
|||
|
JRUC CLSTAB5
|
|||
|
|
|||
|
*MAKE SOME BLOOD
|
|||
|
STABHI:
|
|||
|
CALLR CLBLOOD
|
|||
|
CMPI CLWNSTBE,A9 ;JUST FINISHED REG STAB?
|
|||
|
JRNE CLSTAB2
|
|||
|
MOVI 500,A0
|
|||
|
CALLA RANDPER ;GO FOR A REPEAT?
|
|||
|
JRNC CLSTAB2 ;NOPE
|
|||
|
MOVI STABREP,A2
|
|||
|
JRUC CLSTAB3
|
|||
|
CLSTAB2:
|
|||
|
MOVI STABTAB,A2
|
|||
|
MOVI 4,A0
|
|||
|
CALLA RANDU
|
|||
|
DEC A0
|
|||
|
SLL 6,A0
|
|||
|
ADD A0,A2
|
|||
|
CLSTAB3:
|
|||
|
MOVE *A2+,A9,L ;GET ANIMATION
|
|||
|
MOVE *A2+,A0,L ;GET SOUND
|
|||
|
CLSTAB4:
|
|||
|
CALLA ONESND
|
|||
|
CLSTAB5:
|
|||
|
MOVK 1,A1
|
|||
|
JSRP FRANIM ;STAB HIM
|
|||
|
MOVI 800,A0
|
|||
|
CALLA RANDPER
|
|||
|
MOVK 1,A10
|
|||
|
JRC GPLAYRL ;GET HIM AGAIN
|
|||
|
|
|||
|
*LAUGH IT UP
|
|||
|
LAFITUP:
|
|||
|
MOVI CLAFSND,A0 ;LAUGH IT UP
|
|||
|
CALLA ONESND
|
|||
|
MOVI CLWNLAF,A9
|
|||
|
MOVK 1,A1
|
|||
|
JSRP FRANIM
|
|||
|
MOVE *A13(ETEMP5),A0,W ;GET QUIT PROB
|
|||
|
CALLA RANDPER
|
|||
|
JRNC CLOWNST ;GET HIM AGAIN...
|
|||
|
|
|||
|
*RUN AWAY
|
|||
|
MOVE @CLWNSPD,A1,W ;GET VELOCITY
|
|||
|
SLL 9,A1 ;NORMALIZE IT
|
|||
|
MOVE @RAND,A0,W
|
|||
|
JRN RUN0
|
|||
|
NEG A1
|
|||
|
RUN0:
|
|||
|
MOVE A1,*A8(OXVEL),L
|
|||
|
CALLA SHVELCPY ;DO IT FOR SHADOW
|
|||
|
MOVE A1,A1 ;TEST X VELOCITY
|
|||
|
JRN RUN1
|
|||
|
CALLA NOYFLP
|
|||
|
JRUC RUN2
|
|||
|
RUN1:
|
|||
|
CALLA YFLP
|
|||
|
RUN2:
|
|||
|
MOVI 20,A0
|
|||
|
CALLA RANDU
|
|||
|
MOVE A0,A10
|
|||
|
RUNLP:
|
|||
|
MOVI CLWNRUN,A9
|
|||
|
MOVK 1,A1
|
|||
|
JSRP FRANIM
|
|||
|
MOVE @WORLDTL,A0,W ;CHECK FOR FAR OFF SCREEN
|
|||
|
ADDI 256,A0 ;NORMALIZE FOR SCREEN CENTER
|
|||
|
MOVE *A8(OXPOS),A1,W
|
|||
|
SUB A0,A1
|
|||
|
ABS A1
|
|||
|
CMPI 350,A1
|
|||
|
JRHS RUNLP1 ;BAG IT TOO FAR OUT
|
|||
|
DSJS A10,RUNLP
|
|||
|
JRUC CLOWNST
|
|||
|
*CALL IT QUITS- TOO FAR OFF
|
|||
|
RUNLP1:
|
|||
|
MOVE @KNAPCNT,A0,W
|
|||
|
DEC A0
|
|||
|
MOVE A0,@KNAPCNT,W ;DECREMENT CLOWN COUNT
|
|||
|
MOVE A8,A0
|
|||
|
CALLA DELENEMY ;OFF ENEMY
|
|||
|
JAUC SUCIDE ;BAG IT...
|
|||
|
*
|
|||
|
*STAB ACTION/SOUND TABLE
|
|||
|
*
|
|||
|
STABTAB:
|
|||
|
.LONG CLWNSTAB,CLSTBSND ;REGULAR STAB
|
|||
|
.LONG CLWNSTBF,CLSLHSND ;FOREHAND STAB
|
|||
|
.LONG CLWNSTBB,CLSLHSND ;BACKHAND STAB
|
|||
|
.LONG CLWNSTOH,CLSTBSND ;OVERHEAD SMASH
|
|||
|
STABREP:
|
|||
|
.LONG CLWNSTB2,CLSTBSND ;QUICKIE REGULAR STAB
|
|||
|
*
|
|||
|
*JUMP FROM THE GROUND
|
|||
|
*A8=CLOWN
|
|||
|
*A1=DX, A2=DZ
|
|||
|
JUMPLIL:
|
|||
|
CALLA SHADST
|
|||
|
SLL 10,A1 ;GET XVEL
|
|||
|
MOVE A1,*A8(OXVEL),L
|
|||
|
SLL 10,A2
|
|||
|
MOVE A2,*A8(OZVEL),L
|
|||
|
ADDI ->30000,A2
|
|||
|
MOVE A2,*A8(OYVEL),L
|
|||
|
CALLA SHVELFLP ;SHADOW VELOCITY AND FLIP
|
|||
|
JRUC JUMPRC ;DO YOUR JUMP DUDE...
|
|||
|
*
|
|||
|
*JUMPING CLOWN
|
|||
|
*
|
|||
|
JUMPER:
|
|||
|
* MOVE A9,A1 ;GOT A COORD?
|
|||
|
* JRNE JUMPER00 ;YES...
|
|||
|
*MAKE YOUR OWN COORDINATE
|
|||
|
MOVI 350,A0
|
|||
|
CALLA RANDU
|
|||
|
ADDI 75,A0
|
|||
|
MOVE @WORLDTL,A1,W
|
|||
|
ADD A0,A1 ;SET INITIAL X
|
|||
|
ZEXT A1
|
|||
|
MOVE @PLYMIN,A0 ;GET INITIAL Y
|
|||
|
SLL 16,A0
|
|||
|
ADD A0,A1
|
|||
|
JUMPER00:
|
|||
|
MOVI [1,1],A5 ;SET SPEED
|
|||
|
MOVI CLWNTAB,A6
|
|||
|
MOVI CLWNINIT,A14 ;CLOWN ENEMY INIT
|
|||
|
MMTM SP,A10,A11
|
|||
|
CALLA ENINITLL ;CREATE CLOWN
|
|||
|
MMFM SP,A10,A11
|
|||
|
JAEQ SUCIDE ;CREATE ERROR, EXIT
|
|||
|
CALLR CLNSETUP ;SETUP SOME STUFF, INC KNAPCNT ETC.
|
|||
|
|
|||
|
MOVE @PLZMIN,A1,W
|
|||
|
MOVE A1,*A8(OZPOS),W
|
|||
|
MOVE *A8(OSHAD),A0,L
|
|||
|
JREQ JUMPER0
|
|||
|
CALLA SHADCPY ;RESET SHADOW AND Z FOR PLZMIN
|
|||
|
|
|||
|
JUMPER0:
|
|||
|
MOVE *A8(OYPOS),A0,W ;SET UP Y HEIGHT
|
|||
|
SUBI 100,A0
|
|||
|
MOVE A0,*A8(OYPOS),W ;SET UP Y HEIGHT
|
|||
|
|
|||
|
MOVE *A13(ETEMP4+>10),A0,W ;GET HOOKER %
|
|||
|
CALLA RANDPER
|
|||
|
JRNC JMPLAY
|
|||
|
CALLA GETHOK ;GET CLOSEST HOOKER IN A0
|
|||
|
JREQ JMPLAY ;NO HOOKERS AROUND...GET THE PLAYER...
|
|||
|
MOVE A0,A11 ;SAVE HOOKER OBJECT
|
|||
|
JRUC JMPVEL
|
|||
|
JMPLAY:
|
|||
|
CALLA SELCTPLY
|
|||
|
MOVE A11,A0
|
|||
|
CALLA GETPLYR
|
|||
|
MOVE *A0(POBJ),A0,L ;GET TARGET
|
|||
|
|
|||
|
*COMPUTE JUMP VELOCITIES
|
|||
|
JMPVEL:
|
|||
|
MOVE *A0(OXVAL),A1,L ;COMPUTE X VELOCITY
|
|||
|
MOVE *A8(OXVAL),A2,L
|
|||
|
MOVE *A0(OXVEL),A3,L
|
|||
|
SUB A2,A1
|
|||
|
SRA 6,A1
|
|||
|
ADD A1,A3
|
|||
|
MOVI >C0000,A2 ;CHECK CLOWN VELOCITY LIMITS
|
|||
|
CMP A2,A3
|
|||
|
JRLT JMPV1
|
|||
|
MOVE A2,A3
|
|||
|
JMPV1
|
|||
|
NEG A2
|
|||
|
CMP A2,A3
|
|||
|
JRGT JMPV2
|
|||
|
MOVE A2,A3
|
|||
|
JMPV2
|
|||
|
MOVE A3,*A8(OXVEL),L
|
|||
|
CALLA FLP ;FLIP
|
|||
|
|
|||
|
MOVE *A0(OZVAL),A1,L ;COMPUTE Z VELOCITY
|
|||
|
MOVE *A8(OZVAL),A2,L
|
|||
|
MOVE *A0(OZVEL),A3,L
|
|||
|
SUB A2,A1
|
|||
|
SRA 6,A1
|
|||
|
ADD A3,A1
|
|||
|
JRNN JUMPER1
|
|||
|
CLR A1 ;NO NEGATIVE Z VELOCITY
|
|||
|
JUMPER1:
|
|||
|
MOVE A1,*A8(OZVEL),L
|
|||
|
|
|||
|
ADDI ->10000,A1 ;GET Y VELOCITY
|
|||
|
MOVE A1,*A8(OYVEL),L
|
|||
|
CALLA SHVELCPY ;COPY VELOCITY TO SHADOW
|
|||
|
JUMPRC:
|
|||
|
MOVI CLWNJMP,A9 ;JUMP ON THE DUDE
|
|||
|
JUMP0:
|
|||
|
MOVK 4,A1
|
|||
|
JSRP FRANIM
|
|||
|
JRNC JUMP1
|
|||
|
MOVI CLWNJMP0,A9 ;HOLDING FRAME
|
|||
|
JRUC JUMP0
|
|||
|
*FALLING GRAVITY PROCESS
|
|||
|
JUMP1:
|
|||
|
SLEEP 3
|
|||
|
CALLR ZCHK ;MAKE SURE Z IN BOUNDS
|
|||
|
MOVE *A8(OYVEL),A0,L ;EFFECT OF GRAVITY
|
|||
|
ADDI >5000,A0
|
|||
|
MOVE A0,*A8(OYVEL),L
|
|||
|
JRN JUMP0 ;UPWARD VEL, NO LAND
|
|||
|
CALLA DFRMGRND
|
|||
|
CMPI 0,A1
|
|||
|
JRGT JUMP0 ;IN THE AIR STILL
|
|||
|
|
|||
|
* MOVI CLWNJMP1,A9 ;LANDING FRAMES
|
|||
|
* MOVK 1,A1
|
|||
|
* JSRP FRANIM
|
|||
|
|
|||
|
CALLA PSTOP ;STOP THE SUCKER
|
|||
|
MOVE A8,A0 ;OBJECT IN A0 FOR SETZPOS
|
|||
|
CALLA SETZPOS ;ADJUST THE MUTHA
|
|||
|
CALLA DELSHAD ;RESET YOUR SHADOW
|
|||
|
* CALLA SHADST
|
|||
|
RETP
|
|||
|
*
|
|||
|
*CHECK Z FOR BOUNDS
|
|||
|
*A8=OBJECT
|
|||
|
*CLEARS ZV IF OUT OF RANGE
|
|||
|
*
|
|||
|
ZCHK:
|
|||
|
MMTM SP,A0,A1,A2,A3,A4
|
|||
|
MOVE *A8(OZPOS),A4,W ;CHECK IF Z LEGAL
|
|||
|
MOVE @PLZMIN,A2,W
|
|||
|
SUB A2,A4 ;CHECK LOWER BOUND
|
|||
|
JRGE ZOK2
|
|||
|
ZBAD:
|
|||
|
MOVE *A8(OYVEL),A1,L
|
|||
|
MOVE *A8(OZVEL),A3,L
|
|||
|
SUB A3,A1 ;REMOVE ZVEL FROM YVEL
|
|||
|
MOVE *A8(OYPOS),A3,W
|
|||
|
SUB A4,A3 ;CORRECT OYPOS ALSO
|
|||
|
CLR A0
|
|||
|
MOVE A1,*A8(OYVEL),L
|
|||
|
MOVE A0,*A8(OZVEL),L
|
|||
|
MOVE A3,*A8(OYPOS),W
|
|||
|
MOVE A2,*A8(OZPOS),W
|
|||
|
MOVE *A8(OSHAD),A0,L ;SET Z POSITION
|
|||
|
JREQ ZOK2
|
|||
|
CALLA SHADCPY ;RESET SHADOW AND Z FOR PLZMIN
|
|||
|
ZOK2:
|
|||
|
MMFM SP,A0,A1,A2,A3,A4
|
|||
|
RETS
|
|||
|
*
|
|||
|
*GO GET HOOKER
|
|||
|
*
|
|||
|
GHOOKR:
|
|||
|
GHOOKR0:
|
|||
|
MOVI CLWNWLK,A9
|
|||
|
CALLA RANDOM
|
|||
|
JRN GHOOKR1
|
|||
|
MOVI CLWNRUN,A9
|
|||
|
GHOOKR1:
|
|||
|
CMPI CLWNRE,A9
|
|||
|
JRHS GHOOKR ;INVALID ANIMATION, RESET...
|
|||
|
MOVK 4,A1
|
|||
|
JSRP FRANIM
|
|||
|
MOVE A0,A10 ;SAVE SLEEP TIME
|
|||
|
JRC GHOOKR0
|
|||
|
GHOOKRL:
|
|||
|
CALLA GETCHOK ;GET CLOSEST HOOKER IN A0
|
|||
|
JRNE GPLAYR10 ;FOUND A CLOSIE
|
|||
|
CALLA GETHOK ;GET CLOSEST HOOKER IN A0
|
|||
|
JREQ GPLAYR ;NO HOOKERS AROUND...GET THE PLAYER...
|
|||
|
GPLAYR10
|
|||
|
MOVE A0,A11 ;SAVE HOOKER OBJECT
|
|||
|
MOVI 25,A5
|
|||
|
MOVI 10,A6
|
|||
|
CALLA XZCHK ;ARE WE IN POSITION
|
|||
|
JRNC GHOOKR2 ;NO, GET DIRECTION
|
|||
|
|
|||
|
CMPI 15,A3
|
|||
|
JRHS GOTHER ;NOT TOO CLOSE
|
|||
|
|
|||
|
MOVE *A8(OXVEL),A0,L ;NO X VEL ?
|
|||
|
JREQ GHOOKR2 ;GIVE HIM XVEL
|
|||
|
CLR A0
|
|||
|
MOVE A0,*A8(OZVEL),L ;COOL VELOCITY
|
|||
|
MOVE A0,*A8(OYVEL),L ;COOL VELOCITY
|
|||
|
CALLA SHVELCPY ;DO IT FOR SHADOW
|
|||
|
JRUC GHOOKR20
|
|||
|
GHOOKR2:
|
|||
|
CMPI 80,A3 ;CLOSE ENOUGH TO JUMP?
|
|||
|
JRHS GHOOKR3
|
|||
|
CMPI 80,A4
|
|||
|
JRHS GHOOKR3
|
|||
|
MOVI 20,A0
|
|||
|
CALLA RANDPER
|
|||
|
JRNC GHOOKR3
|
|||
|
JSRP JUMPLIL ;DO A SPECIAL LITTLE JUMP
|
|||
|
JRUC GHOOKRL
|
|||
|
GHOOKR3:
|
|||
|
CALLR CLWNDIR ;NO GET DIRECTION
|
|||
|
GHOOKR20:
|
|||
|
SLEEP 1
|
|||
|
DSJ A10,GHOOKRL
|
|||
|
JRUC GHOOKR1
|
|||
|
*
|
|||
|
*STAB THE SUCKER OR DRAG HER OFF... GACY BABY
|
|||
|
*A11=HOOKER OBJECT
|
|||
|
*
|
|||
|
GOTHER:
|
|||
|
*PICK HER UP
|
|||
|
CALLA PSTOP ;STOP THE CLOWN
|
|||
|
*** MOVI 100,A0
|
|||
|
*** CALLA RANDPER
|
|||
|
*** JRNC STABHER ;STAB HER FIRST
|
|||
|
|
|||
|
MOVI 1,A1
|
|||
|
MOVE A1,*A13(ETEMP2),W ;SET FLAG WE GOT HER
|
|||
|
MMTM SP,A8
|
|||
|
MOVE A11,A8
|
|||
|
CALLA DELENEMY
|
|||
|
MMFM SP,A8
|
|||
|
MOVE *A11(OPLINK),A0,L ;KILL HER OBJECT
|
|||
|
CALLA KILL ;KILL HER PROCESS
|
|||
|
DECW @HOOKCNT
|
|||
|
MOVI CLSTBSND,A0
|
|||
|
CALLA ONESND
|
|||
|
MOVI CLNLIFT,A9 ;TAKE HER AWAY
|
|||
|
MOVK 1,A1
|
|||
|
JSRP FRANIM
|
|||
|
CLWNCARL:
|
|||
|
MOVI >0001C000,A1
|
|||
|
MOVE *A8(OFLAGS),A0,W
|
|||
|
BTST B_FLIPH,A0
|
|||
|
JREQ CLWNCAR0
|
|||
|
NEG A1 ;ADJUST VELOCITY FOR DIRECTION
|
|||
|
CLWNCAR0:
|
|||
|
MOVE A1,*A8(OXVEL),L
|
|||
|
CALLA SHVELCPY ;COPY VELOCITY TO SHADOW
|
|||
|
MOVI 250,A0
|
|||
|
CALLA RANDPER
|
|||
|
JRNC CLNCAR00
|
|||
|
MOVI HYELSND,A0 ;LAUGH IT UP DUDE !!!
|
|||
|
CALLA ONESND
|
|||
|
|
|||
|
CLNCAR00:
|
|||
|
MOVI CLNCARY,A9 ;TAKE HER AWAY
|
|||
|
MOVK 1,A1
|
|||
|
JSRP FRANIM
|
|||
|
MOVI 25,A0
|
|||
|
CALLA RANDPER
|
|||
|
JRNC CLWNCAR1
|
|||
|
MOVE *A8(OFLAGS),A1,W ;GIVE HIM A FLIP NOW AND THEN
|
|||
|
XORI M_FLIPH,A1
|
|||
|
MOVE A1,*A8(OFLAGS),W
|
|||
|
CLWNCAR1:
|
|||
|
MOVE @WORLDTL,A0,W ;CHECK FOR FAR OFF SCREEN
|
|||
|
ADDI 256,A0 ;NORMALIZE FOR SCREEN CENTER
|
|||
|
MOVE *A8(OXPOS),A1,W
|
|||
|
SUB A0,A1
|
|||
|
ABS A1
|
|||
|
CMPI 512,A1
|
|||
|
JRHS RUNLP1 ;BAG IT TOO FAR OUT
|
|||
|
JRUC CLWNCARL
|
|||
|
|
|||
|
*STAB HER TO DEATH
|
|||
|
*A11=HOOKER OBJECT
|
|||
|
*STABHER:
|
|||
|
* MOVE A1,A1 ;FLIP THE DUDE PROPERLY
|
|||
|
* JRN HKSTAB0
|
|||
|
* CALLA NOYFLP
|
|||
|
* JRUC HKSTAB1
|
|||
|
*HKSTAB0:
|
|||
|
* CALLA YFLP
|
|||
|
*HKSTAB1:
|
|||
|
* CALLA PSTOP ;STOP THE DUDE
|
|||
|
**CHANGE HER PROCESS
|
|||
|
* MOVI SPLTCOLBOX,A14
|
|||
|
* MOVE A14,*A11(OCVECT),L ;COLLISION POINTER CHANGE TO BLOOD
|
|||
|
* MOVK 1,A10 ;DEAD INDICATOR
|
|||
|
* MOVE *A11(OPLINK),A4,L
|
|||
|
* MOVE *A4(PSPTR),A1,L ;GET PROCESS STACK POINTER
|
|||
|
* ADDI 4*32,A1
|
|||
|
* MOVI HOOKFIT,A2 ;GET NEW WAKEUP ADDR (CLOWN UNFLIP)
|
|||
|
* MOVE *A8(OFLAGS),A3,W ;CHECK CLOWN FLIP
|
|||
|
* BTST B_FLIPH,A3
|
|||
|
* JREQ HKSTAB10
|
|||
|
* MOVI HOOKFIT1,A2 ;WAKEUP FOR CLOWN FLIP
|
|||
|
*HKSTAB10:
|
|||
|
* MOVI 250,A0 ;IS HOOKER DEAD?
|
|||
|
* CALLA RANDPER
|
|||
|
* JRNC HKSTAB11 ;NO
|
|||
|
* MOVI HOOKDIE,A2 ;KILL HER
|
|||
|
* MOVI SPLTCOLANI,A14
|
|||
|
* MOVE A14,*A11(OCVECT),L ;COLLISION POINTER NULL FOR NOW
|
|||
|
* CLR A10
|
|||
|
*HKSTAB11:
|
|||
|
* MOVE A2,*A1,L
|
|||
|
* MOVI 1,A2 ;DELAY FOR DEFENSE
|
|||
|
* MOVE A2,*A4(PTIME),W ;SET WAKEUP TIME
|
|||
|
**STAB HER
|
|||
|
**MAKE SOME BLOOD
|
|||
|
* MMTM SP,A8,A11
|
|||
|
* MOVE *A8(OID),A11,W
|
|||
|
* MOVE *A8(OYPOS),A9,W
|
|||
|
* ADDI 25,A9 ;ADJUST FOR KNIFE POSITION
|
|||
|
* MOVE *SP,A8,L ;PUT IN OBJECT
|
|||
|
* CREATE 0EDH,SPLATBOX
|
|||
|
* MOVI 1,A8
|
|||
|
* MOVE A8,*A4(PTIME),W ;DELAY START OF BLOOD
|
|||
|
* MMFM SP,A8,A11
|
|||
|
* CMPI CLWNSTBE,A9 ;JUST FINISHED REG STAB?
|
|||
|
* JRNE HKSTAB2
|
|||
|
* MOVI 500,A0
|
|||
|
* CALLA RANDPER ;GO FOR A REPEAT?
|
|||
|
* JRNC HKSTAB2 ;NOPE
|
|||
|
* MOVI STABREP,A2
|
|||
|
* JRUC HKSTAB3
|
|||
|
*HKSTAB2:
|
|||
|
* MOVI STABTAB,A2
|
|||
|
* MOVI 4,A0
|
|||
|
* CALLA RANDU
|
|||
|
* DEC A0
|
|||
|
* SLL 6,A0
|
|||
|
* ADD A0,A2
|
|||
|
*HKSTAB3:
|
|||
|
* MOVE *A2+,A9,L ;GET ANIMATION
|
|||
|
* MOVE *A2+,A0,L ;GET SOUND
|
|||
|
* CALLA ONESND
|
|||
|
* MOVK 1,A1
|
|||
|
* JSRP FRANIM ;STAB HER
|
|||
|
* MOVE A10,A10
|
|||
|
* JRNZ GHOOKRL ;GET HER AGAIN
|
|||
|
*
|
|||
|
**SHE IS DEAD... STAB HER LOW OR LAUGH
|
|||
|
* MOVI 500,A0
|
|||
|
* CALLA RANDPER
|
|||
|
* JRC LAFITUP
|
|||
|
* MOVI 2,A0
|
|||
|
* CALLA RANDU
|
|||
|
* ADDK 1,A0
|
|||
|
* MOVE A0,A10 ;FORM STAB COUNT
|
|||
|
*
|
|||
|
**STAB HER LOW
|
|||
|
* MOVI CLWNKST1,A9 ;GO DOWN ON HER
|
|||
|
* MOVK 1,A1
|
|||
|
* JSRP FRANIM
|
|||
|
*STABHL01:
|
|||
|
* MOVI CLWNKST2,A9
|
|||
|
* MOVI CLSTBSND,A0
|
|||
|
* CALLA ONESND
|
|||
|
* MOVK 1,A1
|
|||
|
* JSRP FRANIM ;STAB BEFORE SPURT
|
|||
|
* MOVI >007A000C,A9 ;Y:X OFFSET
|
|||
|
* CREATE 0EDH,SPLATS
|
|||
|
* MOVI CLWNKST3,A9
|
|||
|
* MOVK 1,A1
|
|||
|
* JSRP FRANIM ;STAB HER
|
|||
|
* MOVI 100,A0
|
|||
|
* CALLA RANDPER
|
|||
|
* JRC LAFITUP ;LAUGH IT UP
|
|||
|
* DEC A10
|
|||
|
* JRNE STABHL01
|
|||
|
* JRUC CLOWNST ;START ALL OVER
|
|||
|
*
|
|||
|
**
|
|||
|
**HOOKER FIGHT (BEING STABBED)
|
|||
|
**A8= OBJECT
|
|||
|
*HOOKFIT:
|
|||
|
* CALLA PSTOP ;STOP MOVING
|
|||
|
* CALLA YFLP ;ADJUST FLIP
|
|||
|
* MOVI 6,A0 ;GET RANDOM JUMP
|
|||
|
* CALLA RANDU
|
|||
|
* ADDI 4,A0
|
|||
|
* JRUC HOOKFITL
|
|||
|
*
|
|||
|
*HOOKFIT1:
|
|||
|
* CALLA PSTOP ;STOP MOVING
|
|||
|
* CALLA NOYFLP
|
|||
|
* MOVI 6,A0
|
|||
|
* CALLA RANDU
|
|||
|
* ADDI -10,A0
|
|||
|
*
|
|||
|
*HOOKFITL:
|
|||
|
* MOVE A13,A12
|
|||
|
* ADDI PRCSIZ,A12 ;RESET STACK
|
|||
|
* MOVE *A8(OXPOS),A1,W
|
|||
|
* ADD A0,A1
|
|||
|
* MOVE A1,*A8(OXPOS),W
|
|||
|
* MOVE *A8(OSHAD),A2,L
|
|||
|
* JREQ HOOKFIT2
|
|||
|
* MOVE *A2(OXPOS),A1,W ;COPY TO SHADOW
|
|||
|
* ADD A0,A1
|
|||
|
* MOVE A1,*A2(OXPOS),W
|
|||
|
*HOOKFIT2:
|
|||
|
* MOVI HKFIGHT,A9 ;DO YOUR ANIMATION
|
|||
|
*HOOKFT2L:
|
|||
|
* MOVI 0,A1
|
|||
|
* JSRP FRANIM
|
|||
|
* JRC HOOKFIT3
|
|||
|
*
|
|||
|
* MOVI 5,A0
|
|||
|
* CALLA RANDU
|
|||
|
* ADDI -3,A0
|
|||
|
*
|
|||
|
* MOVE *A8(OXPOS),A1,W ;A LITTLE RANDOM MOTION FOLKS
|
|||
|
* ADD A0,A1
|
|||
|
* MOVE A1,*A8(OXPOS),W
|
|||
|
* MOVE *A8(OSHAD),A2,L
|
|||
|
* JREQ HOOKFT2L
|
|||
|
* MOVE *A2(OXPOS),A1,W ;COPY TO SHADOW
|
|||
|
* ADD A0,A1
|
|||
|
* MOVE A1,*A2(OXPOS),W
|
|||
|
* JRUC HOOKFT2L
|
|||
|
*HOOKFIT3
|
|||
|
* MOVE *A8(OYPOS),A6,W
|
|||
|
* SLL 16,A6
|
|||
|
* MOVE *A8(OXPOS),A5,W
|
|||
|
* MOVY A6,A5
|
|||
|
* MOVE *A8(OZPOS),A6,W
|
|||
|
*
|
|||
|
* CALLA DELENEMY
|
|||
|
* DECW @HOOKCNT
|
|||
|
* MOVI HOOKEOID|>00100000,A14 ;HOOKER ID
|
|||
|
* CALLA HOOKCOLD ;START A HOOKER UP
|
|||
|
* JAUC SUCIDE ;ITS ALL OVER...WE GOT AWAY
|
|||
|
*
|
|||
|
*HOOKER DEAD
|
|||
|
*A8=OBJECT
|
|||
|
*
|
|||
|
*HOOKDIE:
|
|||
|
* CALLA PSTOP ;STOP MOVING
|
|||
|
* MOVI SPLTCOLBOX,A14 ;MAKE 'EM BLEED...
|
|||
|
* MOVE A14,*A8(OCVECT),L ;COLLISION POINTER
|
|||
|
* DECW @HOOKCNT
|
|||
|
* MOVI >00004000,A0
|
|||
|
* MOVE A0,*A8(OYVEL),L
|
|||
|
* MOVE A0,*A8(OZVEL),L
|
|||
|
* CALLA SHVELCPY ;COPY VELOCITY TO SHADOW
|
|||
|
* MOVI HKDIE,A9
|
|||
|
* MOVK 1,A1
|
|||
|
* JSRP FRANIM
|
|||
|
* MOVI DUMCOLL,A14
|
|||
|
* MOVE A14,*A8(OCVECT),L ;COLLISION POINTER NULL FOR NOW
|
|||
|
* CALLA PSTOP
|
|||
|
* SLEEP 120
|
|||
|
* MOVI [1,1],A9
|
|||
|
* CREATE 0DFh,ESINK ;CREATE THE DEADMAN SINK
|
|||
|
* JAUC SUCIDE ;DIE
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
*CLOWN SOUNDS
|
|||
|
* *
|
|||
|
* CHANNEL #0 CVSD SOUNDS *
|
|||
|
* CHANNEL #1 DAC A *
|
|||
|
* CHANNEL #2 DAC B *
|
|||
|
* CHANNEL #3 MUSIC *
|
|||
|
* *
|
|||
|
*SOUND DESCRIPTION= PRIORITY,TIME,SOUND CODE,(PRIORITY),(TIME),(SOUND CODE),0
|
|||
|
*SOUND ENDS IN 0000.
|
|||
|
*PRIORITY WORD = 1111IENNPPPPPPPP; I=1=NON-INTERRUPTABLE, E=1=NON-INT BY EQUAL
|
|||
|
*NN=CHANNEL #(0-3);
|
|||
|
*PP=PRIORITY (00-FF), FF=HIGHEST.
|
|||
|
*TIME WORD =TTTT (0000-7FFF X 16MS).
|
|||
|
*SOUND WORD =8SSS SSS=SOUND CODE(000-FFF).
|
|||
|
*SOUND WORD =4SSS SSS=SOUND CODE (ZERO TIME SOUND CODE)
|
|||
|
*CLOWN TUNE SOUND
|
|||
|
CLTUNSND .WORD >F3C0,>40,>809A,0
|
|||
|
*CLOWN STAB SOUND
|
|||
|
CLSTBSND .WORD >F01F,>08,>803A,0
|
|||
|
*CLOWN SLASH SOUND
|
|||
|
CLSLHSND .WORD >F01F,>08,>804B,0
|
|||
|
*CLOWN LAUGH SOUND
|
|||
|
CLAFSND .WORD >F020,>10,>804C,0
|
|||
|
*CLOWN HIT BY BULLET SOUND
|
|||
|
CLBULSND .WORD >F31F,>08,>8096,0
|
|||
|
*CLOWN DIE BY BULLET SOUND
|
|||
|
CLBDSND .WORD >F020,>08,>8013,0
|
|||
|
*CLOWN DIE BY ROCKET
|
|||
|
CLRDSND .WORD >F028,>10,>803D,20,>8042,0
|
|||
|
*HOOKER MUFFLED YELL
|
|||
|
HYELSND .WORD >F020,>10,>8039,0
|
|||
|
*HIT BY CAR SOUND
|
|||
|
CLCARSND .WORD >F026,>08,>8044,>20,>8042,0
|
|||
|
*
|
|||
|
*GET HOOKER
|
|||
|
*A0=HOOKER FOUND
|
|||
|
*NE=NO HOOKER FOUND, EQ=HOOKER FOUND
|
|||
|
GETHOK:
|
|||
|
MMTM SP,A1
|
|||
|
MOVE @ENEMIES,A0,L
|
|||
|
JREQ GETHKX ;NOBODY HOME
|
|||
|
GETHOKL:
|
|||
|
MOVE *A0(OID),A1,W ;GET ID
|
|||
|
SRL 4,A1 ;GET RID OF SUBTYPE
|
|||
|
SLL 4,A1
|
|||
|
CMPI HOOKEOID,A1
|
|||
|
JREQ GETHKXX
|
|||
|
GETHOKL1
|
|||
|
MOVE *A0(OSLINK),A0,L
|
|||
|
JRNE GETHOKL
|
|||
|
JRUC GETHKX
|
|||
|
GETHKXX:
|
|||
|
MOVE *A0(OCVECT),A1,L ;GET ID
|
|||
|
CMPI SPLTCOLANI,A1 ;NO DEAD BROADS PLEASE
|
|||
|
JREQ GETHOKL1
|
|||
|
MOVE A1,A1 ;RETURN NE, GOT ONE...
|
|||
|
GETHKX:
|
|||
|
MMFM SP,A1
|
|||
|
RETS
|
|||
|
*
|
|||
|
*GET CLOSE HOOKER
|
|||
|
*A8=CLOWN
|
|||
|
GETCHOK:
|
|||
|
MMTM SP,A1
|
|||
|
MOVE @ENEMIES,A0,L
|
|||
|
JREQ GETCHKX ;NOBODY HOME
|
|||
|
GETCHOKL:
|
|||
|
MOVE *A0(OID),A1,W ;GET ID
|
|||
|
SRL 4,A1 ;GET RID OF SUBTYPE
|
|||
|
SLL 4,A1
|
|||
|
CMPI HOOKEOID,A1
|
|||
|
JRNE GETCHKL
|
|||
|
MOVE *A0(OCVECT),A1,L ;GET ID
|
|||
|
CMPI SPLTCOLANI,A1 ;NO DEAD BROADS PLEASE
|
|||
|
JREQ GETCHKL
|
|||
|
MOVI 30,A5
|
|||
|
MOVI 15,A6
|
|||
|
CALLA XZCHK
|
|||
|
JRC GETCHKXX ;GOT A CLOSE ONE
|
|||
|
GETCHKL:
|
|||
|
MOVE *A0(OSLINK),A0,L
|
|||
|
JRNE GETCHOKL
|
|||
|
JRUC GETCHKX
|
|||
|
GETCHKXX:
|
|||
|
MOVE A1,A1 ;RETURN NE, GOT ONE...
|
|||
|
GETCHKX:
|
|||
|
MMFM SP,A1
|
|||
|
RETS
|
|||
|
*
|
|||
|
*GET DIRECTION FOR CLOWN
|
|||
|
*A1=DELTA X
|
|||
|
*A2=DELTA Z
|
|||
|
*A3=ABS DX
|
|||
|
*A4=ABS DZ
|
|||
|
*A8=OBJECT
|
|||
|
*
|
|||
|
CLWNDIR:
|
|||
|
MOVE A3,A14 ;SAVE ABS DX
|
|||
|
MOVE @CLWNSPD,A3,W ;X VELOCITY
|
|||
|
SLL 8,A3 ;NORMALIZE IT
|
|||
|
MOVE A3,A4
|
|||
|
SRL 1,A4 ;Z VELOCITY
|
|||
|
ABS A1 ;NEGATE FOR NEGATIVE X
|
|||
|
JRN CLNDIR1
|
|||
|
NEG A3
|
|||
|
CLNDIR1:
|
|||
|
ABS A2 ;NEGATE FOR NEGATIVE Z
|
|||
|
JRN CLNDIR2
|
|||
|
NEG A4
|
|||
|
CLNDIR2:
|
|||
|
CMPI 4,A2 ;CLEAR IF REAL CLOSE
|
|||
|
JRHI CLNDIR4
|
|||
|
CLR A4
|
|||
|
CLNDIR4:
|
|||
|
MOVE *A8(OZPOS),A2,W ;IF OFF SCREEN, COME ON BACK
|
|||
|
MOVE @PLZMIN,A1,W
|
|||
|
CMP A1,A2
|
|||
|
JRGE CLNDIR44
|
|||
|
MOVI >1000,A4
|
|||
|
CLNDIR44:
|
|||
|
MOVE A4,*A8(OYVEL),L
|
|||
|
MOVE A4,*A8(OZVEL),L
|
|||
|
CMPI 30,A14 ;DONT CHANGE XVEL IF CLOSE (ANTI STAIRSTEP)
|
|||
|
JRHS CLNDIR5
|
|||
|
MOVE *A8(OXVEL),A14,L
|
|||
|
JREQ CLNDIR5
|
|||
|
MOVE A14,A3
|
|||
|
CLNDIR5:
|
|||
|
MOVE A3,*A8(OXVEL),L ;STORE VELOCITY
|
|||
|
JAUC SHVELFLP
|
|||
|
*
|
|||
|
*CLOWN COLLSION ROUTINE
|
|||
|
*A0 = PTR TO CLOWN OBJECT
|
|||
|
*A8 = PTR TO OBJECT THAT SMASHED HIM
|
|||
|
*
|
|||
|
*HIT BY A BULLET
|
|||
|
*
|
|||
|
CLWNBUL:
|
|||
|
MOVE *A0(OPLINK),A3,L
|
|||
|
MOVE *A3(ETEMP3),A1,W ;DECREMENT HIT COUNT
|
|||
|
CMPI 3,A1
|
|||
|
JRHS CLWNB0
|
|||
|
*MAKE A BLOOD SPLAT
|
|||
|
MMTM SP,A0,A1,A3,A8
|
|||
|
MOVE *A8(OYPOS),A9,W
|
|||
|
MOVE *A0(OID),A11,W
|
|||
|
MOVE A0,A8
|
|||
|
CREATE 0EDH,SPLATBOX
|
|||
|
MMFM SP,A0,A1,A3,A8
|
|||
|
CLWNB0:
|
|||
|
DEC A1
|
|||
|
MOVE A1,*A3(ETEMP3),W
|
|||
|
JRGT CLNBUL0 ;NOT DEAD YET...
|
|||
|
*DEATH BY BULLET
|
|||
|
MOVE *A8(OXVEL),A1,L ;GIVE HIM BULLET VELOCITY
|
|||
|
SRA 2,A1
|
|||
|
MOVE A1,*A0(OXVEL),L
|
|||
|
MOVE *A0(OSHAD),A2,L
|
|||
|
JREQ CLNBL000
|
|||
|
MOVE A1,*A2(OXVEL),L
|
|||
|
CLNBL000
|
|||
|
CALLR CLNCLNUP ;HE IS DEAD
|
|||
|
MOVI CLBDSND,A0 ;MAKE BULLET DIE SOUND
|
|||
|
CALLA ONESND
|
|||
|
MOVI 0EDh,A1
|
|||
|
MOVI CLNDIE1,A7
|
|||
|
CALLA GETPRC ;CREATE A NEW ENEMY DEATH PROCESS
|
|||
|
JRUC CLNCOLX
|
|||
|
CLNBUL0:
|
|||
|
MOVK 12,A2 ;FIND BULLET DIRECTION
|
|||
|
CLNBUL00:
|
|||
|
MOVE *A8(OXVEL+>10),A1,W
|
|||
|
JRNN CLNBUL1
|
|||
|
NEG A2
|
|||
|
CLNBUL1:
|
|||
|
MOVE A0,A8
|
|||
|
MOVE *A8(OXPOS),A1,W ;KNOCK HIM A BIT
|
|||
|
ADD A2,A1
|
|||
|
MOVE A1,*A8(OXPOS),W
|
|||
|
MOVK 10,A0
|
|||
|
CALLA SRAND
|
|||
|
MOVE *A8(OZPOS),A3,W ;HIT HIM IN Z ALSO
|
|||
|
ADD A0,A3
|
|||
|
* JRN CLNBL1A
|
|||
|
MOVE A3,*A8(OZPOS),W
|
|||
|
MOVE *A8(OYPOS),A5,W
|
|||
|
ADD A0,A5
|
|||
|
MOVE A5,*A8(OYPOS),W
|
|||
|
CALLR ZCHK
|
|||
|
*CLNBL1A:
|
|||
|
MOVE *A8(OSHAD),A0,L
|
|||
|
JREQ CLNBUL2
|
|||
|
CALLA SHADCPY
|
|||
|
CLNBUL2:
|
|||
|
MOVI CLBULSND,A0 ;CLOWN BULLET HIT SOUND
|
|||
|
CALLA ONESND
|
|||
|
CLNCOLX:
|
|||
|
CLRC ;TELL COLLISION SCANNER NOT TO DELETE
|
|||
|
RETS
|
|||
|
*
|
|||
|
*CLOWN HIT BY A CAR
|
|||
|
*A0 = PTR TO CLOWN OBJECT
|
|||
|
*A8 = PTR TO OBJECT THAT SMASHED HIM
|
|||
|
*
|
|||
|
CLWNCAR:
|
|||
|
CALLR CARCHK ;CHECK IF PLAYER CAR RAN HIM OVER
|
|||
|
JRNC CLNCOLX
|
|||
|
PUSH A0
|
|||
|
MOVI CLCARSND,A0
|
|||
|
CALLA ONESND
|
|||
|
PULL A0
|
|||
|
JRUC CLWNEXP
|
|||
|
*
|
|||
|
*CHECK IF PLAYER CAR RAN HIM OVER
|
|||
|
*A0 = PTR TO CLOWN OBJECT
|
|||
|
*A8 = PTR TO OBJECT THAT SMASHED HIM
|
|||
|
*CS IF CAR KILLED HIM
|
|||
|
CARCHK
|
|||
|
MOVE *A8(OXVEL),A1,L ;GIVE HIM BULLET VELOCITY
|
|||
|
ABS A1
|
|||
|
CMPI >20000,A1
|
|||
|
JRHS CARCHKX ;CAR GOING FAST DIE
|
|||
|
MOVE *A8(OID),A1,W
|
|||
|
SRL 4,A1
|
|||
|
SLL 4,A1
|
|||
|
CMPI TRAN1OID,A1 ;PORSCHE SPIN CHECK?
|
|||
|
JRNE CARCH1 ;NO, CAN IT
|
|||
|
MOVE *A8(OIMG),A1,L
|
|||
|
CMPI PORSCHE1,A1
|
|||
|
JRNE CARCHKX
|
|||
|
CARCH1
|
|||
|
CLRC
|
|||
|
RETS
|
|||
|
CARCHKX
|
|||
|
SETC
|
|||
|
RETS
|
|||
|
*
|
|||
|
*CLOWN HIT BY ROCKET
|
|||
|
*A0 = PTR TO CLOWN OBJECT
|
|||
|
*A8 = PTR TO OBJECT THAT SMASHED HIM
|
|||
|
*
|
|||
|
CLWNROK:
|
|||
|
CLWNEXP:
|
|||
|
CALLR CLNCLNUP
|
|||
|
MOVI 0EDh,A1
|
|||
|
MOVI CLNDIE,A7
|
|||
|
CALLA GETPRC ;CREATE A NEW ENEMY DEATH PROCESS
|
|||
|
CALLR EXPVEL
|
|||
|
MOVI CLRDSND,A0 ;ROCKET DEATH SOUND
|
|||
|
CALLA ONESND
|
|||
|
JRUC CLNCOLX
|
|||
|
*
|
|||
|
*MISC. DEATH CHORES FOR CLOWN
|
|||
|
*
|
|||
|
CLNCLNUP:
|
|||
|
MOVE @KNAPCNT,A1,W ;DECREMENT CLOWN COUNT
|
|||
|
DEC A1
|
|||
|
MOVE A1,@KNAPCNT,W
|
|||
|
MOVI DUMCOLL,A14
|
|||
|
MOVE A14,*A0(OCVECT),L ;COLLISION POINTER NULL FOR NOW
|
|||
|
MOVE *A8(OID),A11,W ;GET ENEMY ID FOR POINTS
|
|||
|
MOVE A8,A6
|
|||
|
MOVE A0,A8
|
|||
|
CALLA SCRKIL ;SCORE YOUR POINTS
|
|||
|
MOVE *A8(OPLINK),A0,L
|
|||
|
MOVE *A0(ETEMP2),A0,L ;GOT A GIRL?
|
|||
|
JREQ CLNCLN1 ;NO
|
|||
|
CALLA SCRKIL ;4X SCORE FOR GIRL SAVED
|
|||
|
CALLA SCRKIL
|
|||
|
CALLA SCRKIL
|
|||
|
CALLR OIDATA ;GET PLAYER DATA FROM OID
|
|||
|
JRC CLNCLN2 ;NOT A PLAYER KILL
|
|||
|
CALLA PUT10K ;DO A FLOATER
|
|||
|
JRUC CLNCLN2
|
|||
|
CLNCLN1
|
|||
|
CALLR OIDATA ;GET PLAYER DATA FROM OID
|
|||
|
JRC CLNCLN2 ;NOT PLAYER KILL
|
|||
|
CALLA PUT2x5K ;DO A FLOATER
|
|||
|
CLNCLN2
|
|||
|
MOVE *A8(OPLINK),A0,L
|
|||
|
MOVE *A0(ETEMP2),A11,L ;GOT A GIRL?
|
|||
|
|
|||
|
JAUC KILL ;KILL YOUR OLD PROCESS
|
|||
|
*
|
|||
|
*CHANGE OID IN A11 TO PDATA IN A2
|
|||
|
*CS IF NO PLAYER
|
|||
|
OIDATA:
|
|||
|
SRL 4,A11
|
|||
|
SLL 4,A11 ;MASK OFF WEAPON
|
|||
|
ZEXT A11 ;MUST CLEAR HONORABLE HIGH WORD
|
|||
|
CMPI B1OID,A11 ;FIND CORRECT PLAYER DATA AREA
|
|||
|
JRNE OIDATA1
|
|||
|
MOVI P1DATA,A2
|
|||
|
JRUC OIDATA2
|
|||
|
OIDATA1
|
|||
|
CMPI B2OID,A11
|
|||
|
JRNE OIDATA3
|
|||
|
MOVI P2DATA,A2
|
|||
|
OIDATA2
|
|||
|
CLRC
|
|||
|
RETS
|
|||
|
OIDATA3
|
|||
|
SETC
|
|||
|
RETS
|
|||
|
*
|
|||
|
*EXPLOSION VELOCITY
|
|||
|
*A8=OBJECT, A6=SHIT THAT HIT YOU
|
|||
|
*
|
|||
|
EXPVEL:
|
|||
|
MOVE A8,A0
|
|||
|
CALLA DELSHAD
|
|||
|
CALLA SHADST ;MAKE SURE ONLY ONE SHADOW
|
|||
|
CALLA PSTOP ;BLOW DUDE INTO THE AIR
|
|||
|
MOVI >50000,A0 ;GET RANDOM Y VELOCITY
|
|||
|
CALLA RANDU
|
|||
|
ADDI >28000,A0
|
|||
|
MOVE A0,A3
|
|||
|
NEG A3
|
|||
|
MOVI >30000,A0 ;GET RANDOM X VELOCITY
|
|||
|
CALLA RANDU
|
|||
|
ADDI >C000,A0 ;ADD IN BIAS
|
|||
|
MOVE *A6(OXVEL+>10),A14 ;GET ROCKET VELOCITY
|
|||
|
JREQ CLNEX1
|
|||
|
JRNN CLNEX2
|
|||
|
NEG A0
|
|||
|
JRUC CLNEX2
|
|||
|
CLNEX1: ;ZERO VELOCITY CASE, (EXPLOSION)
|
|||
|
SUBI >18000,A0 ;REMOVE BIAS
|
|||
|
CALLA GETCPNT
|
|||
|
SWAP A6,A8
|
|||
|
MOVE A1,A2 ;A2=CLOWN CENTER
|
|||
|
CALLA GETCPNT
|
|||
|
SWAP A6,A8 ;A1=EXPLOSION CENTER
|
|||
|
SUBXY A1,A2
|
|||
|
JRXNN CLNEX2
|
|||
|
NEG A0
|
|||
|
CLNEX2:
|
|||
|
MOVE A0,*A8(OXVEL),L
|
|||
|
MOVE A3,*A8(OYVEL),L
|
|||
|
MOVE *A8(OSHAD),A4,L
|
|||
|
JREQ CLNEXP0
|
|||
|
MOVE A0,*A4(OXVEL),L
|
|||
|
CLNEXP0:
|
|||
|
RETS
|
|||
|
*
|
|||
|
*CLOWN SPIN
|
|||
|
*A9 = SPIN ANIMATION TABLE INDEX
|
|||
|
*A10 = SLEEP TIME
|
|||
|
*A11 = DIRECTION
|
|||
|
*
|
|||
|
CLNSPIN:
|
|||
|
MOVE *A8(OFLAGS),A4,W
|
|||
|
CLNSP00:
|
|||
|
ADD A11,A9
|
|||
|
MOVE *A9,A1,L ;GET NEXT ANIMATION
|
|||
|
JRN CLNSPN1 ;REGULAR FRAME
|
|||
|
CMPI >100,A1 ;A CHANGE IN FLIP?
|
|||
|
JRLO CLNSP000 ;YES
|
|||
|
SUBI >1000,A1 ;NO, THIS IS A JUMP - REMOVE BIAS
|
|||
|
ADD A1,A9
|
|||
|
JRUC CLNSP00 ;JUMP AT END
|
|||
|
CLNSP000:
|
|||
|
XOR A1,A4 ;CHANGE YOUR FLAGS FOLKS
|
|||
|
JRUC CLNSP00 ;GET NEXT FRAME BOYS
|
|||
|
CLNSPN1:
|
|||
|
MOVE *A8(OXPOS),A6,W ;SAVE OLD CENTER X,Y COORDS
|
|||
|
MOVE *A8(OSIZEX),A5,W
|
|||
|
SRL 1,A5
|
|||
|
ADD A5,A6
|
|||
|
MOVE *A8(OYPOS),A7,W
|
|||
|
MOVE *A8(OSIZEY),A5,W
|
|||
|
SRL 1,A5
|
|||
|
ADD A5,A7
|
|||
|
CALLA ANI
|
|||
|
MOVE *A8(OSIZEX),A5 ;POSITION NEW CENTER
|
|||
|
SRL 1,A5
|
|||
|
SUB A5,A6
|
|||
|
MOVE *A8(OSIZEY),A5
|
|||
|
SRL 1,A5
|
|||
|
SUB A5,A7
|
|||
|
MOVE A6,*A8(OXPOS),W ;RESTORE COORDS
|
|||
|
MOVE A7,*A8(OYPOS),W
|
|||
|
|
|||
|
MOVE *A8(OYVEL),A0,L ;EFFECT OF GRAVITY
|
|||
|
ADDI >3600,A0
|
|||
|
MOVE A0,*A8(OYVEL),L
|
|||
|
|
|||
|
JRN CLNSPNL ;NEGATIVE Y VELOCITY
|
|||
|
CALLA DFRMGRND ;HAVE WE LANDED?
|
|||
|
JRLE CLNSPNX ;YES
|
|||
|
CLNSPNL:
|
|||
|
MOVE A10,A0 ;VARIABLE SLEEP
|
|||
|
CALLA PRCSLP
|
|||
|
JRUC CLNSPIN
|
|||
|
CLNSPNX:
|
|||
|
RETP
|
|||
|
*
|
|||
|
*HOOKST
|
|||
|
*A8=DYING CLOWN
|
|||
|
*A5,A6,A14 SMASHED
|
|||
|
HOOKST
|
|||
|
MOVI HOOKEOID|15|>00100000,A14 ;HOOKER ID
|
|||
|
MOVE *A8(OYPOS),A6,W
|
|||
|
SLL 16,A6
|
|||
|
MOVE *A8(OXPOS),A5,W
|
|||
|
MOVY A6,A5
|
|||
|
MOVE *A8(OZPOS),A6,W
|
|||
|
JAUC HOOKCOLD ;START A HOOKER UP
|
|||
|
*
|
|||
|
*CLOWN DIE
|
|||
|
*A8= CLOWN
|
|||
|
*
|
|||
|
CLNDIE:
|
|||
|
MOVE A11,A11 ;CARRYING A HOOKER
|
|||
|
JREQ CLNDI0 ;NO
|
|||
|
CALLR HOOKST
|
|||
|
CLNDI0:
|
|||
|
MOVI 2,A10 ;SLEEP TIME
|
|||
|
MOVI 32,A11 ;DIRECTION
|
|||
|
MOVI CLWNBLO,A9 ;DO YOUR BLO UP ANIMATION
|
|||
|
CLNDI00:
|
|||
|
JSRP CLNSPIN ;SPIN 'EM AND CROAK 'EM
|
|||
|
MOVE *A8(OYVEL),A0,L ;CHECK LANDING VELOCITY
|
|||
|
CMPI >40000,A0
|
|||
|
JRLS CLNLND ;WE HAVE LANDED
|
|||
|
MOVI >70000000,A1
|
|||
|
MPYS A1,A0
|
|||
|
NEG A0
|
|||
|
NEG A11 ;REVERSE DIRECTION
|
|||
|
INC A10 ;INCREASE SLEEP TIME
|
|||
|
MOVE A0,*A8(OYVEL),L
|
|||
|
SRAM 1,*A8(OXVEL),L ;CUT DOWN X VEL
|
|||
|
CALLA SHVELCPY
|
|||
|
JRUC CLNDI00
|
|||
|
CLNLND:
|
|||
|
CALLA PSTOP ;STOP THE SUCKER
|
|||
|
MOVE A8,A0 ;OBJECT IN A0 FOR SETZPOS
|
|||
|
CALLA SETZPOS ;ADJUST THE MUTHA
|
|||
|
MOVE *A8(OFLAGS),A0,W ;GET YOUR FLAGS
|
|||
|
BTST B_FLIPH,A0
|
|||
|
JRNE CLNLND1
|
|||
|
BTST B_FLIPV,A0
|
|||
|
JREQ CLNLND1X
|
|||
|
*HOLD LL CONSTANT
|
|||
|
CLNLND2X:
|
|||
|
MOVI CLNDTAB,A9
|
|||
|
CALLR FNDFRM
|
|||
|
CLND2L:
|
|||
|
MOVE *A8(OFLAGS),A4,W
|
|||
|
MOVE *A9+,A1,L ;GET NEXT ANIMATION
|
|||
|
JREQ CLNLNDX ;WERE DONE BOYS
|
|||
|
MOVE *A8(OYPOS),A7,W
|
|||
|
MOVE *A8(OSIZEY),A5,W
|
|||
|
ADD A5,A7
|
|||
|
CALLA ANI
|
|||
|
MOVE *A8(OSIZEY),A5
|
|||
|
SUB A5,A7
|
|||
|
MOVE A7,*A8(OYPOS),W
|
|||
|
SLEEP 4
|
|||
|
JRUC CLND2L
|
|||
|
|
|||
|
CLNLND1:
|
|||
|
BTST B_FLIPV,A0
|
|||
|
JREQ CLNLND2X
|
|||
|
*HOLD LR CONSTANT
|
|||
|
CLNLND1X:
|
|||
|
MOVI CLNDTAB,A9
|
|||
|
CALLR FNDFRM
|
|||
|
CLND1L:
|
|||
|
MOVE *A8(OFLAGS),A4,W
|
|||
|
MOVE *A9+,A1,L ;GET NEXT ANIMATION
|
|||
|
JREQ CLNLNDX ;WERE DONE BOYS
|
|||
|
MOVE *A8(OXPOS),A6,W ;SAVE LR COORDS.
|
|||
|
MOVE *A8(OSIZEX),A5,W
|
|||
|
ADD A5,A6
|
|||
|
MOVE *A8(OYPOS),A7,W
|
|||
|
MOVE *A8(OSIZEY),A5,W
|
|||
|
ADD A5,A7
|
|||
|
CALLA ANI
|
|||
|
MOVE *A8(OSIZEX),A5 ;CALC NEW UL
|
|||
|
SUB A5,A6
|
|||
|
MOVE *A8(OSIZEY),A5
|
|||
|
SUB A5,A7
|
|||
|
MOVE A6,*A8(OXPOS),W ;RESTORE COORDS
|
|||
|
MOVE A7,*A8(OYPOS),W
|
|||
|
SLEEP 4
|
|||
|
JRUC CLND1L
|
|||
|
*
|
|||
|
*FIND YOUR FRAME
|
|||
|
*A8=OBJECT, A9=TABLE OF FRAMES
|
|||
|
*RET: A9 POINTS TO FRAME
|
|||
|
*
|
|||
|
FNDFRM:
|
|||
|
MMTM SP,A0,A1
|
|||
|
FNDFRML:
|
|||
|
MOVE *A8(OIMG),A0,L
|
|||
|
MOVE *A9,A1,L
|
|||
|
CMP A1,A0
|
|||
|
JREQ FNDFRMX
|
|||
|
ADDI 32,A9
|
|||
|
JRUC FNDFRML
|
|||
|
FNDFRMX:
|
|||
|
MMFM SP,A0,A1
|
|||
|
RETS
|
|||
|
*
|
|||
|
*DIEING AFTER SPIN TABLES
|
|||
|
*
|
|||
|
CLNDTAB:
|
|||
|
.LONG cldie1,cldie2,cldie3,cldie4,cldie5,cldie6,cldie7,0
|
|||
|
*
|
|||
|
*FALL DOWN DEAD
|
|||
|
*A8=CLOWN OBJECT
|
|||
|
*
|
|||
|
CLNDIE1:
|
|||
|
MOVI SPLTCOLBOX,A14 ;MAKE 'EM BLEED...
|
|||
|
MOVE A14,*A8(OCVECT),L ;COLLISION POINTER
|
|||
|
MOVE A11,A11 ;CARRYING A HOOKER
|
|||
|
JREQ CLNDIE2 ;NO
|
|||
|
MOVI CLNDROP,A9 ;PUT HER DOWN
|
|||
|
MOVK 1,A1
|
|||
|
JSRP FRANIM
|
|||
|
CALLR HOOKST ;START HER UP
|
|||
|
CLNDIE2
|
|||
|
MOVE A8,A0
|
|||
|
CALLA DELSHAD
|
|||
|
CALLA SHADST ;ONLY ONE SHADOW, PLEASE
|
|||
|
MOVI CLWNDIE,A9 ;DO YOUR DEATH ANIMATION
|
|||
|
MOVK 1,A1
|
|||
|
JSRP FRANIM
|
|||
|
*
|
|||
|
*SINK INTO THE GROUND
|
|||
|
*A8=CLOWN OBJECT
|
|||
|
*
|
|||
|
CLNLNDX:
|
|||
|
MOVI [1,1],A9
|
|||
|
CREATE 0DFh,ESINK ;CREATE THE DEADMAN SINK
|
|||
|
JAUC SUCIDE ;DIE
|
|||
|
*
|
|||
|
*STFOBJ INITIALIZING DATA
|
|||
|
* .LONG OXVEL,OYVEL,OXVAL,OYVAL
|
|||
|
* .WORD OZPOS,OZVEL
|
|||
|
* .LONG OIMG,OZSIZ,OCVECT
|
|||
|
* .WORD OFLAGS,OID
|
|||
|
CLWNINIT
|
|||
|
.LONG 0,0,0,0
|
|||
|
.WORD 0,0
|
|||
|
.LONG clwlk2,LOFZ,CLWNCOL
|
|||
|
.WORD DMAWNZ,CLOWNOID
|
|||
|
.LONG CLWNBLIP
|
|||
|
|
|||
|
CLWNCOL:
|
|||
|
.WORD B1OID+BULLETID
|
|||
|
.LONG CLWNBUL
|
|||
|
.WORD B2OID+BULLETID
|
|||
|
.LONG CLWNBUL
|
|||
|
.WORD B1OID+ROCKETID
|
|||
|
.LONG CLWNROK
|
|||
|
.WORD B2OID+ROCKETID
|
|||
|
.LONG CLWNROK
|
|||
|
.WORD B1OID+EXPLODID
|
|||
|
.LONG CLWNEXP
|
|||
|
.WORD B2OID+EXPLODID
|
|||
|
.LONG CLWNEXP
|
|||
|
.WORD BEOID+EXPLODID
|
|||
|
.LONG CLWNEXP
|
|||
|
.WORD TRAN1OID+CBODYID
|
|||
|
.LONG CLWNCAR
|
|||
|
* .WORD CAR1OID+CBODYID
|
|||
|
* .LONG CLWNEXP
|
|||
|
.WORD 0
|
|||
|
.LONG DUMRTSG
|
|||
|
*
|
|||
|
*ANIMATION TABLES
|
|||
|
*
|
|||
|
***********************************************
|
|||
|
*CLOWN ANIMATIONS
|
|||
|
***********************************************
|
|||
|
*
|
|||
|
*CLOWN WALK
|
|||
|
*
|
|||
|
CLWNWLK:
|
|||
|
.long clwlk2
|
|||
|
.word 5
|
|||
|
.long clwlk3
|
|||
|
.word 5
|
|||
|
.long clwlk4
|
|||
|
.word 5
|
|||
|
.long clwlk5
|
|||
|
.word 5
|
|||
|
.long clwlk6
|
|||
|
.word 5
|
|||
|
.long clwlk7
|
|||
|
.word 5
|
|||
|
CLWNTAB .LONG 0
|
|||
|
*
|
|||
|
*CLOWN RUN
|
|||
|
*
|
|||
|
CLWNRUN:
|
|||
|
.long clrun1
|
|||
|
.word 4
|
|||
|
.long clrun2
|
|||
|
.word 4
|
|||
|
.long clrun3
|
|||
|
.word 4
|
|||
|
.long clrun4
|
|||
|
.word 4
|
|||
|
.long clrun5
|
|||
|
.word 4
|
|||
|
.long clrun6
|
|||
|
.word 4
|
|||
|
.long 0
|
|||
|
CLWNRE:
|
|||
|
*
|
|||
|
*CLOWN HIT
|
|||
|
*
|
|||
|
*CLWNHIT:
|
|||
|
* .long cldie2
|
|||
|
* .word 6
|
|||
|
* .long clhit1
|
|||
|
* .word 6
|
|||
|
* .long 0
|
|||
|
*
|
|||
|
*CLOWN DUCK
|
|||
|
*
|
|||
|
CLWNDUK:
|
|||
|
.long clduk1
|
|||
|
.word 6
|
|||
|
.long clduk3
|
|||
|
.word 6
|
|||
|
.long clduk1
|
|||
|
.word 6
|
|||
|
.long 0
|
|||
|
*
|
|||
|
*CLOWN DIE
|
|||
|
*
|
|||
|
CLWNDIE:
|
|||
|
.long cldie1
|
|||
|
.word 4
|
|||
|
.long cldie2
|
|||
|
.word 4
|
|||
|
.long cldie3
|
|||
|
.word 4
|
|||
|
.long cldie4
|
|||
|
.word 4
|
|||
|
.long cldie5
|
|||
|
.word 4
|
|||
|
.long cldie6
|
|||
|
.word 4
|
|||
|
.long cldie7
|
|||
|
.word 10
|
|||
|
.long 0
|
|||
|
*
|
|||
|
*CLOWN BLOW UP
|
|||
|
*
|
|||
|
CLWNBLO:
|
|||
|
.LONG CLWNBLOE-CLWNBLO+>1000
|
|||
|
.long cldie2
|
|||
|
.long cldie3
|
|||
|
.long cldie4
|
|||
|
.long cldie5
|
|||
|
.long cldie6
|
|||
|
.long cldie7
|
|||
|
.LONG M_FLIPV
|
|||
|
.long cldie6
|
|||
|
.long cldie5
|
|||
|
.long cldie4
|
|||
|
.long cldie3
|
|||
|
.long cldie2
|
|||
|
.long cldie1
|
|||
|
.LONG M_FLIPH
|
|||
|
CLWNBLOE:
|
|||
|
.LONG CLWNBLO-CLWNBLOE+>1000
|
|||
|
*
|
|||
|
*CLOWN KNIFE THROW
|
|||
|
*
|
|||
|
CLWNTHRW:
|
|||
|
.long throw3
|
|||
|
.word 5
|
|||
|
.long throw4
|
|||
|
.word 5
|
|||
|
.long throw5
|
|||
|
.word 5
|
|||
|
.long throw6
|
|||
|
.word 5
|
|||
|
.long throw7
|
|||
|
.word 5
|
|||
|
.long 0
|
|||
|
*
|
|||
|
*CLOWN STANDING STAB
|
|||
|
*
|
|||
|
CLWNSTAB: ;start stab
|
|||
|
.long stab1
|
|||
|
.word 6
|
|||
|
.long stab5
|
|||
|
.word 6
|
|||
|
CLWNSTB2: ;ACTUAL STAB
|
|||
|
.long stab2
|
|||
|
.word 6
|
|||
|
.long stab4
|
|||
|
.word 6
|
|||
|
CLWNSTB3: ;END THE STAB
|
|||
|
.long stab5
|
|||
|
.word 6
|
|||
|
.long 0
|
|||
|
CLWNSTBE: ;REALLY THE END OF STAB
|
|||
|
*
|
|||
|
*CLOWN KNEELING STAB
|
|||
|
*
|
|||
|
CLWNKST1: ;START STAB
|
|||
|
.long stab1
|
|||
|
.word 6
|
|||
|
.long stab5
|
|||
|
.word 6
|
|||
|
.long 0
|
|||
|
CLWNKST2 ;STRIKE
|
|||
|
.long stab7
|
|||
|
.word 6
|
|||
|
.long stab8
|
|||
|
.word 6
|
|||
|
.LONG 0
|
|||
|
CLWNKST3
|
|||
|
.long stab9
|
|||
|
.word 9
|
|||
|
.long stab8
|
|||
|
.word 6
|
|||
|
.long 0
|
|||
|
CLWNKST4: ;WITHDRAW
|
|||
|
.long stab7
|
|||
|
.word 6
|
|||
|
.long stab5
|
|||
|
.word 6
|
|||
|
.long 0
|
|||
|
*
|
|||
|
*CLOWN KILL SUPER STAB ATTACK
|
|||
|
*FOREHAND-BACKHAND
|
|||
|
CLWNSTBF:
|
|||
|
.long kill1
|
|||
|
.word 6
|
|||
|
.long kill3
|
|||
|
.word 6
|
|||
|
.long kill4
|
|||
|
.word 6
|
|||
|
.long kill5
|
|||
|
.word 6
|
|||
|
.LONG 0
|
|||
|
CLWNSTBB:
|
|||
|
.long kill8
|
|||
|
.word 6
|
|||
|
.long kill9
|
|||
|
.word 6
|
|||
|
.long kill10
|
|||
|
.word 6
|
|||
|
.LONG 0
|
|||
|
*OVERHEAD SMASH
|
|||
|
CLWNSTOH:
|
|||
|
.long kill1
|
|||
|
.word 4
|
|||
|
.long kill7
|
|||
|
.word 4
|
|||
|
.long kill11
|
|||
|
.word 4
|
|||
|
.long kill12
|
|||
|
.word 4
|
|||
|
.long kill14
|
|||
|
.word 4
|
|||
|
.long kill11
|
|||
|
.word 4
|
|||
|
* .long kill1
|
|||
|
* .word 4
|
|||
|
.long 0
|
|||
|
*
|
|||
|
*CLOWN LAUGH
|
|||
|
*
|
|||
|
CLWNLAF:
|
|||
|
.long laugh1
|
|||
|
.word 6
|
|||
|
.long laugh2
|
|||
|
.word 6
|
|||
|
.long laugh3
|
|||
|
.word 6
|
|||
|
.long laugh4
|
|||
|
.word 6
|
|||
|
.long laugh5
|
|||
|
.word 6
|
|||
|
.long laugh6
|
|||
|
.word 6
|
|||
|
.long laugh7
|
|||
|
.word 6
|
|||
|
.long laugh8
|
|||
|
.word 6
|
|||
|
.long laugh3
|
|||
|
.word 6
|
|||
|
.long laugh8
|
|||
|
.word 6
|
|||
|
.long laugh7
|
|||
|
.word 6
|
|||
|
.long laugh6
|
|||
|
.word 6
|
|||
|
.long laugh5
|
|||
|
.word 6
|
|||
|
.long 0
|
|||
|
*
|
|||
|
*CLOWN JUMP
|
|||
|
*
|
|||
|
CLWNJMP:
|
|||
|
.long cljmp6
|
|||
|
.word 4
|
|||
|
.long cljmp3
|
|||
|
.word 4
|
|||
|
.long cljmp7
|
|||
|
.word 4
|
|||
|
.long cljmp8
|
|||
|
.word 4
|
|||
|
.long cljmp9
|
|||
|
.word 4
|
|||
|
CLWNJMP0:
|
|||
|
.long cljmp10
|
|||
|
.word 4
|
|||
|
.long 0
|
|||
|
*CLWNJMP1:
|
|||
|
* .long cljmp11
|
|||
|
* .word 4
|
|||
|
* .long cljmp12
|
|||
|
* .word 4
|
|||
|
* .long 0
|
|||
|
*
|
|||
|
*clown and hooker stuff
|
|||
|
*
|
|||
|
*hooker fighting
|
|||
|
*
|
|||
|
HKFIGHT:
|
|||
|
.long hkfgt8
|
|||
|
.word 4
|
|||
|
.long hkfgt7
|
|||
|
.word 4
|
|||
|
.long hkfgt8
|
|||
|
.word 4
|
|||
|
.long hkfgt7
|
|||
|
.word 4
|
|||
|
.long hkfgt5
|
|||
|
.word 4
|
|||
|
.long hkfgt6
|
|||
|
.word 4
|
|||
|
.long hkfgt4
|
|||
|
.word 4
|
|||
|
.long hkfgt6
|
|||
|
.word 4
|
|||
|
.long hkfgt5
|
|||
|
.word 4
|
|||
|
.long hkfgt6
|
|||
|
.word 4
|
|||
|
.long hkfgt4
|
|||
|
.word 4
|
|||
|
.long hkfgt6
|
|||
|
.word 4
|
|||
|
.long hkfgt5
|
|||
|
.word 4
|
|||
|
.long hkfgt7
|
|||
|
.word 4
|
|||
|
.long hkfgt8
|
|||
|
.word 4
|
|||
|
.long 0
|
|||
|
*
|
|||
|
*clown lift up hooker
|
|||
|
*
|
|||
|
CLNLIFT:
|
|||
|
.long lift1
|
|||
|
.word 6
|
|||
|
.long lift2
|
|||
|
.word 6
|
|||
|
.long lift3
|
|||
|
.word 6
|
|||
|
.long lift4
|
|||
|
.word 6
|
|||
|
.long 0
|
|||
|
*
|
|||
|
*clown carry hooker
|
|||
|
*
|
|||
|
CLNCARY:
|
|||
|
.long carry1
|
|||
|
.word 5
|
|||
|
.long carry2
|
|||
|
.word 5
|
|||
|
.long carry3
|
|||
|
.word 5
|
|||
|
.long carry4
|
|||
|
.word 5
|
|||
|
.long carry5
|
|||
|
.word 5
|
|||
|
.long carry6
|
|||
|
.word 5
|
|||
|
.long carry7
|
|||
|
.word 5
|
|||
|
.long 0
|
|||
|
*
|
|||
|
*hooker die
|
|||
|
*
|
|||
|
HKDIE:
|
|||
|
.long hkdie1
|
|||
|
.word 4
|
|||
|
.long hkdie2
|
|||
|
.word 4
|
|||
|
.long hkdie3
|
|||
|
.word 4
|
|||
|
.long hkdie4
|
|||
|
.word 4
|
|||
|
.long hkdie5
|
|||
|
.word 4
|
|||
|
.long hkdie6
|
|||
|
.word 4
|
|||
|
.long 0
|
|||
|
*
|
|||
|
CLNDROP
|
|||
|
.long lift4
|
|||
|
.word 2
|
|||
|
.long lift3
|
|||
|
.word 3
|
|||
|
.long 0
|
|||
|
|
|||
|
*
|
|||
|
*CLOWN CRIME SCENE
|
|||
|
*
|
|||
|
CLWNCRM1:
|
|||
|
move @(WORLDTLX+16),A0,W
|
|||
|
addi 150,A0
|
|||
|
move @PLYMIN,A1,W
|
|||
|
addi 5,A1
|
|||
|
sll 16,A1
|
|||
|
movx A0,A1
|
|||
|
clr A6
|
|||
|
movi CLWNINIT,A14
|
|||
|
calla ESINITLL
|
|||
|
clr A0
|
|||
|
move A0,*A8(OBLIPIMG),L
|
|||
|
|
|||
|
SOUND1 HYELSND
|
|||
|
calla PSTOP
|
|||
|
calla NOYFLP
|
|||
|
movi >1C000,A0
|
|||
|
move A0,*A8(OXVEL),L
|
|||
|
|
|||
|
movi CLNLIFT,A9
|
|||
|
movk 1,A1
|
|||
|
jsrp FRANIM
|
|||
|
SOUND1 CLAFSND
|
|||
|
movi CLNCARY,A9
|
|||
|
movk 1,A1
|
|||
|
jsrp FRANIM
|
|||
|
movi CLNCARY,A9
|
|||
|
movk 1,A1
|
|||
|
jsrp FRANIM
|
|||
|
CRM1X:
|
|||
|
MOVI ENEMIES,A1
|
|||
|
MOVE A8,A0
|
|||
|
CALLA DELSUPP
|
|||
|
move *A8(OPAL),A1,W
|
|||
|
move A1,@CRIMEPAL,W
|
|||
|
CALLA DELSOBJ
|
|||
|
retp
|
|||
|
|
|||
|
.END
|
|||
|
|