.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