narc/NARC/NARCLOWN.ASM

1865 lines
35 KiB
NASM
Raw Normal View History

2021-04-06 14:36:38 -07:00
.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