
#include "generic.h"
#include "lfptypes.h"
#include "define.h"
#include "ml.h"
#include "playgfx.h"

#include "audio.h"
#include "crowd.h"
#include "track.h"
#include "comment.h"

#include "ctrl.h"

#ifdef N64
 #include "tmem.h"
#endif

#include "min.h"

#include "gamefx.h"
#include "overgfx.h"

#include "res/playerid.h"

#include "min.h"

extern u8
	*GameBank;


#define MIN_T	(5*TIME_FACTOR)
#define MAX_T	(45*TIME_FACTOR)
#define MAX_T_a	(45*TIME_FACTOR*3)
#define TIME_MULT	(1.8)
#define FRAC_ADJUST	(5)
#define DIST_ADJUST	(2.2)


#define YES 1
#define NO  0
#define ACLOCKWISE 1
#define CLOCKWISE  -1

#define	DUNK_LEVEL		(plyr->plyrROM->ub___pAttrDunk)
#define	LAYUP_LEVEL		(plyr->plyrROM->ub___pDunks)
#define	INVALID_DUNK	-1

//#define	DUNK_LEVEL		3

global int dunk_flag;
global int dunk_ctr;

global bool hang_flag = FALSE;
global int  hang_time;
global int  swingHeight;

global int last_replay;

//int	SLOW_DUNKS=1;
#define	SLOW_DUNKS	cl___gPreferences.sb___Mono

#define	ALLEY_HOLD		3
#define	ALLEY_TIME_DIFF	28

#ifdef PC
extern void CameraSpecialStart(int );
#endif

static void dunk_release(playert *plyr);

void		check_dunk_foul(playert *plyr);


dunkT *current_dunk;

#define DI_FINGERROLL	5

int dunkus_interruptus_table[3]={TOP_1HCHANCE1,TOP_1HCHANCE1,TOP_2HCHANCE1};
static bool dunk_start_specific(playert *plyr,dunkT *dunk);
static int	dunkus_interruptus_type(playert *plyr);


static u8
	FaceAnims[] =
	{
		FACEANIM_GOLDFISH,
		FACEANIM_SNEER,
		FACEANIM_YELLA,
		FACEANIM_YELLB,
		FACEANIM_YELLC
	};


//************************************************************************
// Data to support selecting the dunk with the camera buttons
//************************************************************************

//========================================================================
// Globals for accessing specifically-selected dunk
//========================================================================
SB			**dunk_sels;	// Dunk selections for the buttons
dunkT		*dunk_set;		// Dunks to select from



//========================================================================
// Selection sets to be tied down to buttons
//========================================================================
//------------------------------------------------------------------------
// Selection sets for moving dunks
//------------------------------------------------------------------------
SB	SelDunk_RevLayup[]={2,3,-1};
SB	SelDunk_FingerRoll[]={4,-1};
SB	SelDunk_Layups[]={2,3,4,-1};
SB	SelDunk_Slams[]={0,1,5,-1};
SB	SelDunk_Reverse1H[]={6,7,-1};
SB	SelDunk_Reverse2H[]={8,9,10,11,12,13,-1};
SB	SelDunk_Spins[]={15,20,-1};
SB	SelDunk_Specials[]={14,16,17,18,19,-1};

SB	SD_360[]={16,-1};					// Top
SB	SD_FingerRoll[]={4,-1};				// Right
SB	SD_Monster[]={15,-1};				// Bottom
SB	SD_Reverse[]={7,8,9,10,11,12,13,14,-1};	// Left



//------------------------------------------------------------------------
// Selection sets for standing dunks
//------------------------------------------------------------------------
SB	SelSDunk_2H[]={0,-1};
SB	SelSDunk_1H[]={1,-1};
SB	SelSDunk_Reverse1H[]={3,4,5,6,7,8};
SB	SelSDunk_Reverse2H[]={9,10,11,12,13,14,-1};

SB  SD_Test1[]={0,-1};
SB	SD_Test2[]={1,-1};
SB	SD_Test3[]={2,-1};
SB	SD_Test4[]={3,-1};


//========================================================================
// Button specifications
//========================================================================
int	PosToSel[]={0,0,1,1,2};
SB	*SelDunks[3][4]=
			{
				{SD_360,SD_Monster,SD_Reverse,SD_FingerRoll},
				{SD_360,SD_Monster,SD_Reverse,SD_FingerRoll},
				{SD_360,SD_Monster,SD_Reverse,SD_FingerRoll},
/*
				{SD_Test1,SD_Test2,SD_Test3,SD_Test4},
				{SD_Test1,SD_Test2,SD_Test3,SD_Test4},
				{SD_Test1,SD_Test2,SD_Test3,SD_Test4},
*/
/*
				{SelDunk_RevLayup,SelDunk_FingerRoll,SelDunk_RevLayup,SelDunk_Layups},
				{SelDunk_Slams,SelDunk_Reverse1H,SelDunk_Spins,SelDunk_Reverse2H},
				{SelDunk_Slams,SelDunk_Reverse1H,SelDunk_Specials,SelDunk_Reverse2H}
*/
			};


SB	*SelSDunks[3][4]=
			{
				{SelSDunk_2H,SelSDunk_1H,SelSDunk_Reverse1H,SelSDunk_Reverse2H},
				{SelSDunk_2H,SelSDunk_1H,SelSDunk_Reverse1H,SelSDunk_Reverse2H},
				{SelSDunk_2H,SelSDunk_1H,SelSDunk_Reverse1H,SelSDunk_Reverse2H}
			};

/*


static dunkT dunk_list[]={
	//1 hand chance										17
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x35,			//min_dist;
	0x45,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_1HCHANCE,		//start_anim;
	(26*256)/(26+32),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	135,				//to_speed;
	27,				//ld_speed;
	16339,				//ld angle
	0x400,				//end_speed
	ONE_SEC,	//time;
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	50,			//level
	0,			//land_twist
	},

	//2 hand chance										17
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x35,			//min_dist;
	0x45,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_PIPPEN1,		//start_anim;
	(26*256)/(26+32),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	135,				//to_speed;
	27,				//ld_speed;
	16339,				//ld angle
	0x400,				//end_speed
	ONE_SEC,	//time;
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	50,			//level
	0,			//land_twist
	},

						


}

  */
dunkT dunk_list[]={


/*


//windmill dunk										18
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x38,			//min_dist;
	0x48,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_WIND1,		//start_anim;
	(36*256)/(36+30),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	118,			//to_speed;
	19,				//ld_speed;
	17607,				//ld angle
	0x900,				//end_speed
	ONE_SEC*1.18,
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,			//hang
	70,			//level
	0,
	-0x7800,		//land_twist
	},
/*
	{
	0,0,0,0,
	0,0,0,0,
	0,0,0,0,
	0,0,0,0,0,0,0,0,
	},

*/

//windmill dunk										18
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x38,			//min_dist;
	0x48,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_WIND1,		//start_anim;
	(36*256)/(36+30),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	118,			//to_speed;
	19,				//ld_speed;
	17607,				//ld angle
	0x900,				//end_speed
	ONE_SEC*1.18,
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,			//hang
	70,			//level
	0,
	-0x7800,		//land_twist
	},

//BARRY dunk										17
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x35,			//min_dist;
	0x45,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_BARRY1,		//start_anim;
	(26*256)/(26+32),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	135,				//to_speed;
	27,				//ld_speed;
	16339,				//ld angle
	0x400,				//end_speed
	ONE_SEC,	//time;
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	50,			//level
	PID_BRENT_BARRY_SEA,
	0,			//land_twist
	},


	//PIPPEN dunk										17
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x35,			//min_dist;
	0x45,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_PIPPEN1,		//start_anim;
	(26*256)/(26+32),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	135,				//to_speed;
	27,				//ld_speed;
//	16339,				//ld angle
	0,				//ld angle
	0x400,				//end_speed
	ONE_SEC,	//time;
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	50,			//level
	PID_SCOTTIE_PIPPEN_HOU,
	0,			//land_twist
	},

	//WEBBER dunk										17
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x30,			//min_dist;
	0x40,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_WEBBER1,		//start_anim;
	(32*256)/(32+34),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	120,				//to_speed;
	20,				//ld_speed;
	17672,				//ld angle
	0x400,				//end_speed
	ONE_SEC,	//time;
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	50,			//level
	PID_CHRIS_WEBBER_SAC,
	0,			//land_twist
	},

#if 1


	{
	10,			//min_time;
	40,			//max_time;
	0x28,	 		//min_dist;
	0x30,			//max_dist;
	0x3000,			//max_angle;
	0x5000,			//max_angle;
   	TOP_1H3601,	//TOP_1H3601,		//start_anim;
	(36*256)/(36+28),	//to_factor;
	0x7000,			//to_spin;
	-1,				//target angle
	130,				//to_speed;
	38,				//ld_speed;
	0,				//ld angle
	38,				//end_speed
	ONE_SEC+2,		//time
	YES,			//flippable
	ACLOCKWISE,		//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	90,			//level,
	0,			//id
	0,			//land_twist
	},

	{
	10,			//min_time;
	40,			//max_time;
	0x28,			//min_dist;
	0x34,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;

	TOP_3601,		//start_anim;
	(40*256)/(40+28),	//to_factor;
	0x7000,			//to_spin;
	-1,				//target angle
	90,				//to_speed;
	4,				//ld_speed;
	0,				//ld angle
	0,				//end_speed
	ONE_SEC,		//time
	NO,			//flippable
//	YES,			//flippable
	ACLOCKWISE,		//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	99,			//level,
	0,			//id
	0,			//land_twist
	},

/*
//KOBE dunk !!!!
	{
	MIN_T,			//0x2*TIME_FACTOR,			//min_time;
	MAX_T,			//0x1c*TIME_FACTOR,			//max_time;
	0x10,			//min_dist;
	0x5a,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_1HDUNKA1,		//start_anim;
	(28*256)/(46),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	141,			//to_speed;
	88,				//ld_speed;
	0,
	0,
	23*TIME_FACTOR,
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,		//hang
	0,			//level,
	0,			//id
	0,			//land_twist
	},
*/

/*
//2 hand dunk
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x10,			//min_dist;
	0x48,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_1HDUNKA1,		//start_anim;
	(28*256)/(62),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	132,			//to_speed;
	32,				//ld_speed;
	0,
	0,
	(ONE_SEC/2),
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	YES,		//hang
	0,			//level,
	0,			//id
	0,			//land_twist
	},
*/



//1h180
	{
	0x12*TIME_FACTOR,			//min_time;
	0x1c*TIME_FACTOR,			//max_time;
	0x30,			//min_dist;
	0x3a,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	-TOP_1H1801,		//start_anim;
	(28*256)/(46),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	146,			//to_speed;
	92,				//ld_speed;
	-443,				//ld angle
	0x900,				//end_speed
	23*TIME_FACTOR,
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,		//hang
	90,			//level,
	0,			//id
	0,			//land_twist
	},

//1hul180 from 3:00
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x30,			//min_dist;
	0x3a,			//max_dist;
	0x6b00,			//min_angle;
	0x2000,			//max_angle;
	-TOP_1HUL1801,		//start_anim;
	(28*256)/(28+30),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	100,			//to_speed;
	56,				//ld_speed;
	13456,				//ld angle
	0x900,				//end_speed
	ONE_SEC,
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,		//hang
	90,			//level,
	0,			//id
	0,			//land_twist
	},

//1hul180 from 9:00
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x30,			//min_dist;
	0x3a,			//max_dist;
	0xf400,			//min_angle;
	0x2000,			//max_angle;
	TOP_1HUL1801,		//start_anim;
	(28*256)/(28+30),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	100,			//to_speed;
	56,				//ld_speed;
	13456,				//ld angle
	0x900,				//end_speed
	ONE_SEC,
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,		//hang
	90,			//level,
	0,			//id
	0,			//land_twist
	},


//KOBE dunk !!!!									0
	{
	0x12*TIME_FACTOR,			//min_time;
	0x1c*TIME_FACTOR,			//max_time;
	0x30,			//min_dist;
	0x3a,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_CD0,		//start_anim;
	(18*256)/(18+20),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	138,			//to_speed;
	37,				//ld_speed;
	15713,				//ld angle
	0x400,				//end_speed
	23*TIME_FACTOR,
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,		//hang
	99,			//level,
	0,			//id
	0,			//land_twist
	},

//KOBE dunk !!!!									0
	{
	0x12*TIME_FACTOR,			//min_time;
	0x1c*TIME_FACTOR,			//max_time;
	0x30,			//min_dist;
	0x3a,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	-TOP_CD0,		//start_anim;
	(18*256)/(18+20),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	138,			//to_speed;
	37,				//ld_speed;
	15713,				//ld angle
	0x400,				//end_speed
	23*TIME_FACTOR,
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,		//hang
	99,			//level,
	0,			//id
	0,			//land_twist
	},
//2 hand dunk										1
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x28,			//min_dist;
	0x38,			//max_dist;
	0x2000,				//max_angle;
	0x6000,			//max_angle;
	-TOP_2HD1,		//start_anim;
	(32*256)/(32+26),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	139,			//to_speed;
	104,				//ld_speed;
	0,				//ld angle
	0x900,				//end_speed
	(ONE_SEC*.85),
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	YES,		//hang
	50,			//level,
	0,			//id
	0,			//land_twist
	},


//180 layup from 9:00						2
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x18,			//min_dist;
	0x28,			//max_dist;
//	-0x1000,			//min_angle;
	0xf400,			//min_angle;
	0x2000,			//max_angle;
	TOP_LAY1802S1,		//start_anim;
	(24*256)/(24+28),	//to_factor;
	0x1000,			//to_spin;
	0x4000,		//target_angle
	94,				//to_speed;
	65,				//ld_speed;
	14781,				//ld angle
	0x900,				//end_speed
	ONE_SEC/2,
	NO,			//flippable
	ACLOCKWISE,				//spin direction
	30,				//final dist;
	0x4000,			//final angle;
	NO,				//hang
	5,			//level,
	0,			//id
	0,			//land_twist
	},

//rev lay up 9:00									2
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x18,			//min_dist;
	0x28,			//max_dist;
//	-0x1000,			//min_angle;
	0xf400,			//min_angle;
	0x2000,			//max_angle;
	TOP_RLAY1,		//start_anim;
	(22*256)/(22+26),	//to_factor;
	0x1000,			//to_spin;
	0x4000,		//target_angle
	130,				//to_speed;
	34,				//ld_speed;
	15455,				//ld angle
	0x400,				//end_speed
	ONE_SEC/2,
	NO,			//flippable
	ACLOCKWISE,				//spin direction
	30,				//final dist;
	0x4000,			//final angle;
	NO,				//hang
	0,			//level,
	0,			//id
	0,			//land_twist
	},

//rev lay up 3:00									3
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x18,			//min_dist;
	0x28,			//max_dist;
	0x6b00,			//min_angle;
	0x2000,			//max_angle;
	-TOP_RLAY1,		//start_anim;
	(22*256)/(22+26),	//to_factor;
	0x1000,			//to_spin;
	0x4000,		//target_angle
	130,				//to_speed;
	34,				//ld_speed;
	15455,				//ld angle
	0x400,				//end_speed
	ONE_SEC/2,
	NO,			//flippable
	CLOCKWISE,				//spin direction
	30,				//final dist;
	0x4000,			//final angle;
	NO,				//hang
	0,			//level,
	0,			//id
	0,			//land_twist
	},
//180 layup from 3:00									3
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x18,			//min_dist;
	0x28,			//max_dist;
	0x6b00,			//min_angle;
	0x2000,			//max_angle;
	-TOP_LAY1802S1,		//start_anim;
	(22*256)/(22+26),	//to_factor;
	0x1000,			//to_spin;
	0x4000,		//target_angle
	94,				//to_speed;
	65,				//ld_speed;
	14781,				//ld angle
	0x900,				//end_speed
	ONE_SEC/2,
	NO,			//flippable
	CLOCKWISE,				//spin direction
	30,				//final dist;
	0x4000,			//final angle;
	NO,				//hang
	5,			//level,
	0,			//id
	0,			//land_twist
	},

/*
//finger roll										4
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x30,			//min_dist;
	0x40,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_FGR0,		//start_anim;
	(18*256)/(18+20),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	107,				//to_speed;
	81,				//ld_speed;
	0,				//ld angle
	0x400,				//end_speed
	(ONE_SEC*.75),
	YES,			//flippable
	0,				//spin direction
	48,				//final dist;
	0x0,			//final angle;
	NO,				//hang
	0,			//level,
	0,			//id
	0,			//land_twist
	},
*/

//layfroll1 layup										4
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x30,			//min_dist;
	0x40,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_LAYFROLL11,		//start_anim;
	(30*256)/(30+28),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	113,				//to_speed;
	87,				//ld_speed;
//	-13805,				//ld angle
	0,				//ld angle
	0x900,				//end_speed
	(ONE_SEC*.75),
	YES,			//flippable
	0,				//spin direction
	48,				//final dist;
	0x0,			//final angle;
	NO,				//hang
	0,			//level,
	0,			//id
	0,			//land_twist
	},

//clutch layup										4
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x30,			//min_dist;
	0x40,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_LAYCLUT1,		//start_anim;
	(34*256)/(34+48),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	130,				//to_speed;
	88,				//ld_speed;
	15436,				//ld angle
	0x900,				//end_speed
	(ONE_SEC),
	YES,			//flippable
	0,				//spin direction
	48,				//final dist;
	0x0,			//final angle;
	NO,				//hang
	5,			//level,
	0,			//id
	0,			//land_twist
	},

//laycock layup										4
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x30,			//min_dist;
	0x40,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_LAYCOCK1,		//start_anim;
	(34*256)/(34+32),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	76,				//to_speed;
	78,				//ld_speed;
	-10868,				//ld angle
	0x900,				//end_speed
	(ONE_SEC*.75),
	YES,			//flippable
	0,				//spin direction
	48,				//final dist;
	0x0,			//final angle;
	NO,				//hang
	3,			//level,
	0,			//land_twist
	},

//layswtch layup										4
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x30,			//min_dist;
	0x40,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_LAYSWTCH1,		//start_anim;
	(24*256)/(24+32),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	126,				//to_speed;
	88,				//ld_speed;
	0,				//ld angle
//	13316,				//ld angle
	0x900,				//end_speed
	(ONE_SEC*.75),
	YES,			//flippable
	0,				//spin direction
	48,				//final dist;
	0x0,			//final angle;
	NO,				//hang
	2,			//level,
	0,			//id
	0,			//land_twist
	},


//1hand reverse dunk from 9:00						6
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x20,			//min_dist;
	0x30,			//max_dist;
	0xf400,			//min_angle;
//	-0x1000, 		//min_angle;
	0x2000,			//max_angle;
	TOP_1HRD1,		//start_anim;
	(32*256)/(32+26),	//to_factor;
	-0x1000,		//to_spin;
	0x1000,			//target angle
	110,			//to_speed;
	61, 			//ld_speed;
	0,				//ld angle
	0x900,				//end_speed
	ONE_SEC,		//time
	NO,				//switchable
	ACLOCKWISE,
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	70,			//level,
	0,			//id
	0,			//land_twist
	},

//1hand reverse from 3:00							7
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x20,			//min_dist;
	0x30,			//max_dist;
	0x6b00,			//min_angle;
	0x2000,			//max_angle;
//	0x7000,			//min_angle;
	-TOP_1HRD1,		//start_anim;
	(32*256)/(32+26),	//to_factor;
	0x1000,   		//to_spin;
	0x7000,			//target angle;
	110,			//to_speed;
	61, 			//ld_speed;
//	11968,				//ld angle
	0,				//ld angle
	0x900,				//end_speed
	ONE_SEC,		//time;
	NO,				//flippable
	CLOCKWISE,		//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	70,			//level,
	0,			//id
	0,			//land_twist
	},

//2hand reverse from 9:00							8
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x2a,			//min_dist;
	0x38,			//max_dist;
//	0x1a,			//min_dist;
//	0x28,			//max_dist;
	0x0,			//min_angle;
	0x1800,			//max_angle;
	TOP_2HRD1,		//start_anim;
	(55*256)/(38+42),	//to_factor;
	-0x1000,   		//to_spin;
	0x9000,			//target angle;
	102,			//to_speed;
	16,			//ld_speed;
	15960,				//ld angle
	0x400,				//end_speed
	(ONE_SEC*1.25),	//time;
	NO,				//flippable
	CLOCKWISE,		//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	80,			//level,
	0,			//id
	0,			//land_twist
	},

//2hand reverse from 7:30							9
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x2a,			//min_dist;
	0x38,			//max_dist;
//	0x1a,			//min_dist;
//	0x28,			//max_dist;
	0x1800,			//min_angle;
	0x1800,			//max_angle;
	TOP_2HRD1,		//start_anim;
	(38*256)/(38+42),	//to_factor;
	-0x1000,   		//to_spin;
	0xb000,			//target angle;
	102,			//to_speed;
	16,			//ld_speed;
	15960,				//ld angle
	0x400,				//end_speed
	(ONE_SEC*1.25),	//time;
	NO,				//flippable
	CLOCKWISE,		//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	80,			//level,
	0,			//id
	0,			//land_twist
	},

//2hand reverse from 6:00 to 7:30					10
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x2a,			//min_dist;
	0x38,			//max_dist;
//	0x1a,			//min_dist;
//	0x28,			//max_dist;
	0x3000,			//min_angle;
	0x1000,			//max_angle;
	TOP_2HRD1,		//start_anim;
	(55*256)/(38+42),	//to_factor;
	-0x1000,   		//to_spin;
	0xc000,			//target angle;
	102,			//to_speed;
	16,			//ld_speed;
	15960,				//ld angle
	0x400,				//end_speed
	(ONE_SEC*1.25),	//time;
	NO,				//flippable
	CLOCKWISE,		//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	80,			//level,
	0,			//id
	0,			//land_twist
	},

//2hand reverse from 4:30 to 6:00					11
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x2a,			//min_dist;
	0x38,			//max_dist;
//	0x1a,			//min_dist;
//	0x28,			//max_dist;
	0x4000,			//min_angle;
	0x1000,			//max_angle;
	TOP_2HRD1,		//start_anim;
	(55*256)/(38+42),	//to_factor;
	-0x1000,   		//to_spin;
	0xc000,			//target angle;
	102,			//to_speed;
	16,			//ld_speed;
	15960,				//ld angle
	0x400,				//end_speed
	(ONE_SEC*1.25),	//time;
	NO,				//flippable
	ACLOCKWISE,		//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	80,			//level,
	0,			//id
	0,			//land_twist
	},

//2hand reverse from 4:30							12
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x2a,			//min_dist;
	0x38,			//max_dist;
//	0x1a,			//min_dist;
//	0x28,			//max_dist;
	0x5000,			//min_angle;
	0x1800,			//max_angle;
	TOP_2HRD1,		//start_anim;
	(55*256)/(38+42),	//to_factor;
	-0x1000,   		//to_spin;
	0xd000,			//target angle;
	102,			//to_speed;
	16,			//ld_speed;
	15960,				//ld angle
	0x400,				//end_speed
	(ONE_SEC*1.25),	//time;
	NO,				//flippable
	ACLOCKWISE,		//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	80,			//level,
	0,			//id
	0,			//land_twist
	},

//2hand reverse from 3:00							13
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x2a,			//min_dist;
	0x38,			//max_dist;
//	0x1a,			//min_dist;
//	0x28,			//max_dist;
	0x6800,			//min_angle;
	0x1800,			//max_angle;
	TOP_2HRD1,		//start_anim;
	(55*256)/(38+42),	//to_factor;
	0x1000,   		//to_spin;
	0xf000,			//target angle;
	102,			//to_speed;
	16,			//ld_speed;
	15960,				//ld angle
	0x400,				//end_speed
	(ONE_SEC*1.25),	//time;
	NO,				//flippable
	ACLOCKWISE,		//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	80,			//level,
	0,			//id
	0,			//land_twist
	},


//Monster dunk										14
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x30,			//min_dist;
	0x40,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_MOND1,		//start_anim;
	(36*256)/(36+34),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	141,				//to_speed;
	60,				//ld_speed;
	10753,				//ld angle
	0x900,				//end_speed
	(ONE_SEC),	//time;
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	YES,			//hang
	80,			//level,
	0,			//id
	0,			//land_twist
	},

//**SUPERSPECIALS**//
//360												15
	{
	10,			//min_time;
	40,			//max_time;
	0x28,			//min_dist;
	0x34,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;

	TOP_3601,		//start_anim;
	(40*256)/(40+28),	//to_factor;
	0x7000,			//to_spin;
	-1,				//target angle
	90,				//to_speed;
	4,				//ld_speed;
	0,				//ld angle
	0,				//end_speed
	ONE_SEC,		//time
	NO,			//flippable
//	YES,			//flippable
	ACLOCKWISE,		//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	99,			//level,
	0,			//id
	0,			//land_twist
	},

//T HAWK											16
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x34,			//min_dist;
	0x44,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_THAWK1,				//start_anim;
	(22*256)/(22+32),	//to_factor;
//	(12*256)/30,	//to_factor;
	0x0,					//to_spin;
	-1,				//target angle
	117, 					//to_speed;
	69,						//ld_speed;
	-11368,				//ld angle
	0x900,				//end_speed
	(ONE_SEC),	//time;
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	90,			//level,
	0,			//id
	0,			//land_twist
	},

//1HTOMJR											16
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x34,			//min_dist;
	0x44,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_1HTOMJR1,				//start_anim;
	(20*256)/(20+38),	//to_factor;
//	(12*256)/30,	//to_factor;
	0x0,					//to_spin;
	-1,				//target angle
	146, 					//to_speed;
	52,						//ld_speed;
	-14170,				//ld angle
	0x900,				//end_speed
	(ONE_SEC/2+6),	//time;
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	90,			//level,
	0,			//id
	0,			//land_twist
	},

//1hpretyb dunk											16
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x34,			//min_dist;
	0x44,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_1HPRETYB1,				//start_anim;
	(20*256)/(20+38),	//to_factor;
//	(12*256)/30,	//to_factor;
	0x0,					//to_spin;
	-1,				//target angle
	113, 					//to_speed;
	38,						//ld_speed;
	15580,				//ld angle
	0x900,				//end_speed
	(ONE_SEC/2+6),	//time;
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	80,			//level,
	0,			//id
	0,			//land_twist
	},

//hammond dunk										17
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x30,			//min_dist;
	0x40,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_HAMD1,		//start_anim;
	(32*256)/(32+30),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	136,				//to_speed;
	28,				//ld_speed;
	-15170,				//ld angle
	0x400,				//end_speed
	33*TIME_FACTOR,	//time;
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	50,			//level,
	0,			//id
	0,			//land_twist
	},

//1HFLYBY dunk										17
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x30,			//min_dist;
	0x40,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_1HFLYBY1,		//start_anim;
	(36*256)/(36+28),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	145,				//to_speed;
	72,				//ld_speed;
	0,				//ld angle
//	13149,				//ld angle
	0x900,				//end_speed
	33*TIME_FACTOR,	//time;
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	99,			//level,
	0,			//id
	0,			//land_twist
	},

//1HBB2S dunk										17
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x38,			//min_dist;
	0x45,			//max_dist;
	0x2000,				//max_angle;
	0x6000,			//max_angle;
	TOP_1HBB2S1,		//start_anim;
	(42*256)/(42+30),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	100,				//to_speed;
	45,				//ld_speed;
	15350,				//ld angle
	0x900,				//end_speed
	ONE_SEC,	//time;
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	90,			//level,
	0,			//id
	0,			//land_twist
	},

//2HAWORLD dunk										17
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x38,			//min_dist;
	0x45,			//max_dist;
	0x2000,				//max_angle;
	0x6000,			//max_angle;
	TOP_2HAWORLD1,		//start_anim;
	(32*256)/(32+38),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	119,				//to_speed;
	11,				//ld_speed;
	16428,				//ld angle
	0,				//end_speed
	ONE_SEC*1.18,	//time;
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	99,			//level,
	0,			//id
	0,			//land_twist
	},

//windmill dunk										18
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
//	0x28,			//min_dist;
//	0x40,			//max_dist;
	0x38,			//min_dist;
	0x48,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_WIND1,		//start_anim;
	(36*256)/(36+30),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	118,			//to_speed;
	19,				//ld_speed;
	17607,				//ld angle
	0x900,				//end_speed
	ONE_SEC*1.18,
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,			//hang
	70,			//level,
	0,			//id
	0,			//land_twist
	},

/*
//1HHAM dunk										18
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x28,			//min_dist;
	0x40,			//max_dist;
	0x2000,				//max_angle;
	0x6000,			//max_angle;
	TOP_1HHAM1,		//start_anim;
	(30*256)/(36+32),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	139,			//to_speed;
	20,				//ld_speed;
	0,				//ld angle
	0,				//end_speed
	ONE_SEC*.75,
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,			//hang
	2,			//level,
	0,			//id
	0,			//land_twist
	},
*/

//regular layup									19
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x38,			//min_dist;
	0x48,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_BBLAY1,		//start_anim;
//	(30*256)/(30+26),	//to_factor;
	(38*256)/(30+26),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	106,				//to_speed;
	92,				//ld_speed;
//	11496,				//ld angle
	0,				//ld angle
	0x900,				//end_speed
//	35*TIME_FACTOR,	//time;
	26*TIME_FACTOR,	//time;
	YES,			//flippable
	0,				//spin direction
	24,				//final dist;
	0x2000,			//final angle;
	NO,				//hang
	4,			//level,
	0,			//id
	0,			//land_twist
	},

//laychooh layup									19
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x28,			//min_dist;
	0x38,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_LAYSCOOH1,		//start_anim;
	(32*256)/(32+18),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	95,				//to_speed;
	77,				//ld_speed;+ 
	14425,				//ld angle
	0x900,				//end_speed
	23*TIME_FACTOR,	//time;
	YES,			//flippable
	0,				//spin direction
	24,				//final dist;
	0x2000,			//final angle;
	NO,				//hang
	1,			//level,
	0,			//id
	0,			//land_twist
	},

//under the leg									19
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x38,			//min_dist;
	0x48,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_LAYUPBL1,		//start_anim;
	(26*256)/(26+28),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	117,				//to_speed;
	81,				//ld_speed;
	0,				//ld angle
//	13022,				//ld angle
	0x900,				//end_speed
	25*TIME_FACTOR,	//time;
	YES,			//flippable
	0,				//spin direction
	24,				//final dist;
	0,			//final angle;
//	0x2000,			//final angle;
	NO,				//hang
	5,			//level,
	0,			//id
	0,			//land_twist
	},

//2 hand 360										20
	{
	10,			//min_time;
	40,			//max_time;
	0x28,	 		//min_dist;
	0x30,			//max_dist;
	0x3000,			//max_angle;
	0x5000,			//max_angle;
   	TOP_3601,	//TOP_2H3601,		//start_anim;
	(40*256)/(40+28),	//to_factor;
	0x7000,			//to_spin;
	-1,				//target angle
	66,				//to_speed;
	3,				//ld_speed;
	0,				//ld angle
	0,				//end_speed
	ONE_SEC+2,		//time
	NO,			//flippable
//	YES,			//flippable
//UM	ACLOCKWISE,		//spin direction
	CLOCKWISE,		//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	99,			//level,
	0,			//id
	0,			//land_twist
	},

//1 hand 360										20
	{
	10,					//min_time;
	40,					//max_time;
	0x28,	 			//min_dist;
	0x30,				//max_dist;
	0x3000,				//max_angle;
	0x5000,				//max_angle;
  	TOP_1H3601,			//start_anim;
	(36*256)/(36+28),	//to_factor;
	0x7000,			//to_spin;
	-1,				//target angle
	130,				//to_speed;
	38,				//ld_speed;
	0,				//ld angle
	38,				//end_speed
	ONE_SEC+2,		//time
	YES,			//flippable
	ACLOCKWISE,		//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	90,			//level,
	0,			//id
	0,			//land_twist
	},

//Standing 1 hand									5
	{
	10,			//min_time;
	40,			//max_time;
	0x5,			//min_dist;
	0x20,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;

	TOP_S1HD1,		//start_anim;
	(52*256)/(52+30),	//to_factor;
	0x0,			//to_spin;
	-1,				//target_angle
	27,				//to_speed;
	61,				//ld_speed;
	-8496,				//ld angle
	0x400,				//end_speed
	(ONE_SEC*1.18),	//time;
	YES,		//flippable
	0,			//direction
	0,
	0,
	0,
	70,			//level,
	0,			//id
	0,			//land_twist
	},

//Standing 2 hand		//TIE THIS DUNK TO SHAQ							5
	{
	10,			//min_time;
	40,			//max_time;
	0x5,			//min_dist;
	0x20,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;

	TOP_S2HDUNK1,		//start_anim;
	(52*256)/(52+32),	//to_factor;
	0x0,			//to_spin;
	-1,				//target_angle
	4,				//to_speed;
	8,				//ld_speed;
	19297,				// ld angle
	0x000,				//end_speed
	(ONE_SEC*.85),	//time;
	YES,		//flippable
	0,			//direction
	0,
	0,
	0,
	70,			//level
	PID_SHAQUILLE_ONEAL_LAL,
	0,			//land_twist
	},

	{
	10*TIME_FACTOR,			//min_time;
	40*TIME_FACTOR,			//max_time;
	0x5,			//min_dist;
	0x28,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_S2HD1,		//start_anim;
	(24*256)/(24+24),	//to_factor;
	0x0,			//to_spin;
	-1,				//target_angle
	104,				//to_speed;
	76,				//ld_speed;
	-9835,				//ld angle
	0x900,				//end_speed
	30*TIME_FACTOR,	//time;
	YES,		//flippable
	0,			//direction
	0,
	0,
	YES,		//hang
	50,			//level,
	0,			//id
	0,			//land_twist
	},

//Standing 1 hand									1
	{
	10*TIME_FACTOR,			//min_time;
	40*TIME_FACTOR,			//max_time;
	0x5,			//min_dist;
	0x18,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;

	TOP_S1HD1,		//start_anim;
	(52*256)/(52+30),	//to_factor;
	0x0,			//to_spin;
	-1,				//target_angle
	27,				//to_speed;
	61,				//ld_speed;
	-8496,				//ld angle
	0x400,				//end_speed
	(ONE_SEC*1.18),	//time;
	YES,		//flippable
	0,			//direction
	0,
	0,
	0,
	70,			//level,
	0,			//id
	0,			//land_twist
	},

#endif
	{
	0,0,0,0,
	0,0,0,0,
	0,0,0,0,
	0,0,0,0,0,0,0,
	0,			//land_twist
	}
};




static dunkT sdunk_list[]={

#if 1

//Standing 1 hand									5
	{
	10,			//min_time;
	40,			//max_time;
	0x5,			//min_dist;
	0x20,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;

	TOP_S1HD1,		//start_anim;
	(52*256)/(52+30),	//to_factor;
	0x0,			//to_spin;
	-1,				//target_angle
	27,				//to_speed;
	61,				//ld_speed;
	-8496,				//ld angle
	0x400,				//end_speed
	(ONE_SEC*1.18),	//time;
	YES,		//flippable
	0,			//direction
	0,
	0,
	0,
	70,			//level,
	0,			//id
	0,			//land_twist
	},




//Standing 2 hand		//TIE THIS DUNK TO SHAQ							5
	{
	10,			//min_time;
	40,			//max_time;
	0x5,			//min_dist;
	0x20,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;

	TOP_S2HDUNK1,		//start_anim;
	(52*256)/(52+32),	//to_factor;
	0x0,			//to_spin;
	-1,				//target_angle
	4,				//to_speed;
	8,				//ld_speed;
	19297,				// ld angle
	0x000,				//end_speed
	(ONE_SEC*.85),	//time;
	YES,		//flippable
	0,			//direction
	0,
	0,
	0,
	70,			//level
	PID_SHAQUILLE_ONEAL_LAL,
	0,			//land_twist
	},

	{
	10*TIME_FACTOR,			//min_time;
	40*TIME_FACTOR,			//max_time;
	0x5,			//min_dist;
	0x28,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_S2HD1,		//start_anim;
	(24*256)/(24+24),	//to_factor;
	0x0,			//to_spin;
	-1,				//target_angle
	104,				//to_speed;
	76,				//ld_speed;
	-9835,				//ld angle
	0x900,				//end_speed
	30*TIME_FACTOR,	//time;
	YES,		//flippable
	0,			//direction
	0,
	0,
	YES,		//hang
	50,			//level,
	0,			//id
	0,			//land_twist
	},

//Standing 1 hand									1
	{
	10*TIME_FACTOR,			//min_time;
	40*TIME_FACTOR,			//max_time;
	0x5,			//min_dist;
	0x18,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;

	TOP_S1HD1,		//start_anim;
	(52*256)/(52+30),	//to_factor;
	0x0,			//to_spin;
	-1,				//target_angle
	27,				//to_speed;
	61,				//ld_speed;
	-8496,				//ld angle
	0x400,				//end_speed
	(ONE_SEC*1.18),	//time;
	YES,		//flippable
	0,			//direction
	0,
	0,
	0,
	70,			//level,
	0,			//id
	0,			//land_twist
	},

//standing 1 hand reverse 3							2
	{
	10*TIME_FACTOR,			//min_time;
	40*TIME_FACTOR,			//max_time;
	0x5,			//min_dist;
	0x15,			//max_dist;
	-0x800,			//min_angle;
	0x1800,			//max_angle;
	TOP_S1HRD1,		//start_anim;
	(20*256)/(20+28),	//to_factor;
	0x0000,			//to_spin;
	0x9000,		//target_angle
	35,				//to_speed;
	46,				//ld_speed;
	11179,				//ld angle
	0x900,				//end_speed
	25*TIME_FACTOR,	//time;
	NO,		//flippable
	0,	//CLOCKWISE,			//direction
	0,
	0,
	0,
	60,			//level,
	0,			//id
	0,			//land_twist
	},

//standing 1 hand reverse 4:30						3
	{
	10*TIME_FACTOR,			//min_time;
	40*TIME_FACTOR,			//max_time;
	0x5,			//min_dist;
	0x15,			//max_dist;
	0x1800,			//min_angle;
	0x1800,			//max_angle;
	TOP_S1HRD1,		//start_anim;
	(20*256)/(20+28),	//to_factor;
	0x0000,			//to_spin;
	0xa000,		//target_angle
	35,				//to_speed;
	46,				//ld_speed;
	11179,				//ld angle
	0x900,				//end_speed
	25*TIME_FACTOR,	//time;
	NO,		//flippable
	0,				//spin direction
	0,
	0,
	0,
	60,			//level,
	0,			//id
	0,			//land_twist
	},

//standing 1 hand reverse 4:30 to 6:00				4
	{
	10*TIME_FACTOR,			//min_time;
	40*TIME_FACTOR,			//max_time;
	0x5,			//min_dist;
	0x15,			//max_dist;
	0x3000,			//min_angle;
	0x1000,			//max_angle;
	TOP_S1HRD1,		//start_anim;
	(20*256)/(20+28),	//to_factor;
	0x0000,			//to_spin;
	0xb800,			//target angle;
	35,				//to_speed;
	46,				//ld_speed;
	11179,				//ld angle
	0x900,				//end_speed
	25*TIME_FACTOR,	//time;
	NO,		//flippable
	0,				//spin direction
	0,
	0,
	0,
	60,			//level,
	0,			//id
	0,			//land_twist
	},

//standing 1 hand reverse 6:00 - 7:30				5
	{
	10*TIME_FACTOR,			//min_time;
	40*TIME_FACTOR,			//max_time;
	0x5,			//min_dist;
	0x15,			//max_dist;
	0x4000,			//min_angle;
	0x1000,			//max_angle;
	TOP_S1HRD1,		//start_anim;
	(20*256)/(20+28),	//to_factor;
	0x0000,			//to_spin;
	0xc000,			//target angle;
	35,				//to_speed;
	46,				//ld_speed;
	11179,				//ld angle
	0x900,				//end_speed
	25*TIME_FACTOR,	//time;
	NO,		//flippable
	0,				//spin direction
	0,
	0,
	0,
	60,			//level,
	0,			//id
	0,			//land_twist
	},


//standing 1 hand reverse 7:30						6
	{
	10*TIME_FACTOR,			//min_time;
	40*TIME_FACTOR,			//max_time;
	0x5,			//min_dist;
	0x15,			//max_dist;
	0x5000,			//min_angle;
	0x1800,			//max_angle;
	TOP_S1HRD1,		//start_anim;
	(20*256)/(20+28),	//to_factor;
	0x0000,			//to_spin;
	0xd000,			//target angle;
	35,				//to_speed;
	46,				//ld_speed;
	11179,				//ld angle
	0x900,				//end_speed
	25*TIME_FACTOR,	//time;
	NO,		//flippable
	0,				//spin direction
	0,
	0,
	0,
	60,			//level,
	0,			//id
	0,			//land_twist
	},

//standing 1 hand reverse 9							7
	{
	10*TIME_FACTOR,			//min_time;
	40*TIME_FACTOR,			//max_time;
	0x5,			//min_dist;
	0x15,			//max_dist;
	0x6800,			//min_angle;
	0x1800,			//max_angle;
	TOP_S1HRD1,		//start_anim;
	(20*256)/(20+28),	//to_factor;
	0x0000,			//to_spin;
	0xf000,			//target angle;
	35,				//to_speed;
	46,				//ld_speed;
	11179,				//ld angle
	0x900,				//end_speed
	25*TIME_FACTOR,	//time;
	NO,		//flippable
	0,				//spin direction
	0,
	0,
	0,
	60,			//level,
	0,			//id
	0,			//land_twist
	},

//standing 2 hand reverse 3							8
	{
	10*TIME_FACTOR,			//min_time;
	40*TIME_FACTOR,			//max_time;
	0x5,			//min_dist;
	0x15,			//max_dist;
	-0x800,			//min_angle;
	0x1800,			//max_angle;
	TOP_S2HRD1,		//start_anim;
	(28*256)/(28+34),	//to_factor;
	0x0000,			//to_spin;
	0x8000,		//target_angle
	34,					//to_speed;
	108,					//ld_speed;
	13287,				//ld angle
	0x900,				//end_speed
	25*TIME_FACTOR,	//time;
	NO,		//flippable
	0,				//spin direction
	0,
	0,
	0,
	60,			//level,
	0,			//id
	0,			//land_twist
	},

//standing 2 hand reverse 4:30						9
	{
	10*TIME_FACTOR,			//min_time;
	40*TIME_FACTOR,			//max_time;
	0x5,			//min_dist;
	0x15,			//max_dist;
	0x1800,			//min_angle;
	0x1800,			//max_angle;
	TOP_S2HRD1,		//start_anim;
	(28*256)/(28+34),	//to_factor;
	0x0000,			//to_spin;
	0xa000,		//target_angle
	34,					//to_speed;
	108,					//ld_speed;
	13287,				//ld angle
	0x900,				//end_speed
	25*TIME_FACTOR,	//time;
	NO,		//flippable
	0,				//spin direction
	0,
	0,
	0,
	60,			//level,
	0,			//id
	0,			//land_twist
	},

//standing 2 hand reverse 4:30 - 6					10
	{
	10*TIME_FACTOR,		//min_time;
	40*TIME_FACTOR,		//max_time;
	0x00,				//min_dist;
	0x10,				//max_dist;
	0x3000,				//min_angle;
	0x1000,				//max_angle;
	TOP_S2HRD1,			//start_anim;
	(28*256)/(28+34),	//to_factor;
	0x0000,				//to_spin;
	0xb800,				//target_angle
	34,					//to_speed;
	108,					//ld_speed;
	13287,				//ld angle
	0x900,				//end_speed
	25*TIME_FACTOR,		//time;
	NO,					//flippable
	0,					//spin direction
//	CLOCKWISE,			//direction
	0,
	0,
	0,
	60,			//level,
	0,			//id
	0,			//land_twist
	},

//standing 2 hand reverse 6 - 7:30					11
	{
	10*TIME_FACTOR,				//min_time;
	40*TIME_FACTOR,				//max_time;
	0x5,			//min_dist;
	0x15,			//max_dist;
	0x4000,			//min_angle;
	0x1000,			//max_angle;
	TOP_S2HRD1,		//start_anim;
	(28*256)/(28+34),	//to_factor;
	0x0000,			//to_spin;
	0xc000,			//target_angle
	34,					//to_speed;
	108,					//ld_speed;
	13287,				//ld angle
	0x900,				//end_speed
	25*TIME_FACTOR,	//time;
	NO,				//flippable
	0,				//spin direction
//	ACLOCKWISE,		//direction
	0,
	0,
	0,
	60,			//level,
	0,			//id
	0,			//land_twist
	},

//standing 2 hand reverse 7:30						12
	{
	10*TIME_FACTOR,			//min_time;
	40*TIME_FACTOR,			//max_time;
	0x5,			//min_dist;
	0x15,			//max_dist;
	0x5000,			//min_angle;
	0x1800,			//max_angle;
	TOP_S2HRD1,		//start_anim;
	(28*256)/(28+34),	//to_factor;
	0x0000,			//to_spin;
	0xd000,		//target_angle
	34,					//to_speed;
	108,					//ld_speed;
	13287,				//ld angle
	0x900,				//end_speed
	25*TIME_FACTOR,	//time;
	NO,		//flippable
	0,				//spin direction
	0,
	0,
	0,
	60,			//level,
	0,			//id
	0,			//land_twist
	},

//standing 2 hand reverse 9							13
	{
	10*TIME_FACTOR,			//min_time;
	40*TIME_FACTOR,			//max_time;
	0x5,			//min_dist;
	0x15,			//max_dist;
	0x6800,			//min_angle;
	0x1800,			//max_angle;
	TOP_S2HRD1,		//start_anim;
	(28*256)/(28+34),	//to_factor;
	0x0000,			//to_spin;
	0xf000,		//target_angle
	34,					//to_speed;
	108,					//ld_speed;
	13287,				//ld angle
	0x900,				//end_speed
	25*TIME_FACTOR,	//time;
	NO,		//flippable
	0,				//spin direction
	0,
	0,
	0,
	60,			//level,
	0,			//id
	0,			//land_twist
	},

#endif

	{
	0,0,0,0,
	0,0,0,0,
	0,0,0,0,
	0,0,0,0,0,0,0,
	0,			//land_twist
	}

};






static dunkT rim_hang={
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x20,			//min_dist;
	0x40,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_HANGUP,		//start_anim;
	(11*256)/(11+39),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	0,			//to_speed;
	0,				//ld_speed;
	0,				//ld angle
	0,				//end_speed
	(ONE_SEC/2)+5,
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
};

static dunkT alley_dunk={
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x20,			//min_dist;
	0x40,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_HANGUP,		//start_anim;
	(11*256)/(11+39),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	0,			//to_speed;
	36,				//ld_speed;
	0,				//ld angle
	0,				//end_speed
	(ONE_SEC/2)+5,
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
};

dunkT dunk_list_a[]={



	//BARRY dunk										17
	{
	MIN_T,			//min_time;
	MAX_T_a,			//MAX_T_aime;
	0x35*DIST_ADJUST,			//min_dist;
	0x45*DIST_ADJUST,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_BARRY1,		//start_anim;
	(26*256)/FRAC_ADJUST/(26+32),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	135,				//to_speed;
	27,				//ld_speed;
	16339,				//ld angle
	0x400,				//end_speed
	ONE_SEC*TIME_MULT,	//time;
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	50,			//level,
	0,			//land_twist
	},


	//PIPPEN dunk										17
	{
	MIN_T,			//min_time;
	MAX_T_a,			//MAX_T_aime;
	0x35,			//min_dist;
	0x45,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_PIPPEN1,		//start_anim;
	(26*256)/FRAC_ADJUST/(26+32),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	135,				//to_speed;
	27,				//ld_speed;
//	16339,				//ld angle
	0,				//ld angle
	0x400,				//end_speed
	ONE_SEC*TIME_MULT,	//time;
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	50,			//level,
	0,			//land_twist
	},

	//WEBBER dunk										17
	{
	MIN_T,			//min_time;
	MAX_T_a,			//MAX_T_aime;
	0x30*DIST_ADJUST,			//min_dist;
	0x40*DIST_ADJUST,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_WEBBER1,		//start_anim;
	(32*256)/FRAC_ADJUST/(32+34),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	120,				//to_speed;
	20,				//ld_speed;
	17672,				//ld angle
	0x400,				//end_speed
	ONE_SEC*TIME_MULT,	//time;
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	50,			//level,
	0,			//land_twist
	},

	{
	MIN_T,			//min_time;
	MAX_T_a,			//MAX_T_aime;
	0x28*DIST_ADJUST,	 		//min_dist;
	0x30*DIST_ADJUST,			//max_dist;
	0x3000,			//max_angle;
	0x5000,			//max_angle;
   	TOP_1H3601,	//TOP_1H3601,		//start_anim;
	(36*256)/FRAC_ADJUST/(36+28),	//to_factor;
	0x7000,			//to_spin;
	-1,				//target angle
	130,				//to_speed;
	38,				//ld_speed;
	0,				//ld angle
	38,				//end_speed
	(ONE_SEC+2)*TIME_MULT,		//time
	YES,			//flippable
	ACLOCKWISE,		//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	90,			//level,
	0,			//land_twist
	},

	{
	MIN_T,			//min_time;
	MAX_T_a,			//MAX_T_aime;
	0x28*DIST_ADJUST,			//min_dist;
	0x34*DIST_ADJUST,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;

	TOP_3601,		//start_anim;
	(40*256)/FRAC_ADJUST/(40+28),	//to_factor;
	0x7000,			//to_spin;
	-1,				//target angle
	90,				//to_speed;
	4,				//ld_speed;
	0,				//ld angle
	0,				//end_speed
	ONE_SEC*TIME_MULT,		//time
	NO,			//flippable
//	YES,			//flippable
	ACLOCKWISE,		//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	99,			//level,
	0,			//land_twist
	},


	{
	MIN_T,			//min_time;
	MAX_T_a,			//MAX_T_aime;
	0x30*DIST_ADJUST,			//min_dist;
	0x3a*DIST_ADJUST,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_CD0,		//start_anim;
	(18*256)/FRAC_ADJUST/(18+20),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	138,			//to_speed;
	37,				//ld_speed;
	15713,				//ld angle
	0x400,				//end_speed
	(23*TIME_FACTOR)*TIME_MULT,
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,		//hang
	99,			//level,
	0,			//land_twist
	},

//KOBE dunk !!!!									0
	{
	MIN_T,			//min_time;
	MAX_T_a,			//MAX_T_aime;
	0x30*DIST_ADJUST,			//min_dist;
	0x3a*DIST_ADJUST,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	-TOP_CD0,		//start_anim;
	(18*256)/FRAC_ADJUST/(18+20),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	138,			//to_speed;
	37,				//ld_speed;
	15713,				//ld angle
	0x400,				//end_speed
	(23*TIME_FACTOR)*TIME_MULT,
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,		//hang
	99,			//level,
	0,			//land_twist
	},
//2 hand dunk										1
	{
	MIN_T,			//min_time;
	MAX_T_a,			//MAX_T_aime;
	0x28*DIST_ADJUST,			//min_dist;
	0x38*DIST_ADJUST,			//max_dist;
	0x2000,				//max_angle;
	0x6000,			//max_angle;
	-TOP_2HD1,		//start_anim;
	(32*256)/FRAC_ADJUST/(32+26),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	139,			//to_speed;
	104,				//ld_speed;
	0,				//ld angle
	0x900,				//end_speed
	(ONE_SEC*.85)*TIME_MULT,
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	YES,		//hang
	50,			//level,
	0,			//land_twist
	},
//Monster dunk										14
	{
	MIN_T,			//min_time;
	MAX_T_a,			//MAX_T_aime;
	0x30*DIST_ADJUST,			//min_dist;
	0x40*DIST_ADJUST,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_MOND1,		//start_anim;
	(36*256)/FRAC_ADJUST/(36+34),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	141,				//to_speed;
	60,				//ld_speed;
	10753,				//ld angle
	0x900,				//end_speed
	(ONE_SEC)*TIME_MULT,	//time;
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	YES,			//hang
	80,			//level,
	0,			//land_twist
	},

//**SUPERSPECIALS**//
//360												15
	{
	MIN_T,			//min_time;
	MAX_T_a,			//MAX_T_aime;
	0x28*DIST_ADJUST,			//min_dist;
	0x34*DIST_ADJUST,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;

	TOP_3601,		//start_anim;
	(40*256)/FRAC_ADJUST/(40+28),	//to_factor;
	0x7000,			//to_spin;
	-1,				//target angle
	90,				//to_speed;
	4,				//ld_speed;
	0,				//ld angle
	0,				//end_speed
	ONE_SEC*TIME_MULT,		//time
	NO,			//flippable
//	YES,			//flippable
	ACLOCKWISE,		//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	99,			//level,
	0,			//land_twist
	},

//T HAWK											16
	{
	MIN_T,			//min_time;
	MAX_T_a,			//MAX_T_aime;
	0x34*DIST_ADJUST,			//min_dist;
	0x44*DIST_ADJUST,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_THAWK1,				//start_anim;
	(22*256)/FRAC_ADJUST/(22+32),	//to_factor;
//	(12*256)/30,	//to_factor;
	0x0,					//to_spin;
	-1,				//target angle
	117, 					//to_speed;
	69,						//ld_speed;
	-11368,				//ld angle
	0x900,				//end_speed
	(ONE_SEC)*TIME_MULT,	//time;
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	90,			//level,
	0,			//land_twist
	},

//1HTOMJR											16
	{
	MIN_T,			//min_time;
	MAX_T_a,			//MAX_T_aime;
	0x34*DIST_ADJUST,			//min_dist;
	0x44*DIST_ADJUST,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_1HTOMJR1,				//start_anim;
	(20*256)/FRAC_ADJUST/(20+38),	//to_factor;
//	(12*256)/30,	//to_factor;
	0x0,					//to_spin;
	-1,				//target angle
	146, 					//to_speed;
	52,						//ld_speed;
	-14170,				//ld angle
	0x900,				//end_speed
	(ONE_SEC/2+6)*TIME_MULT,	//time;
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	90,			//level,
	0,			//land_twist
	},

//1hpretyb dunk											16
	{
	MIN_T,			//min_time;
	MAX_T_a,			//MAX_T_aime;
	0x34*DIST_ADJUST,			//min_dist;
	0x44*DIST_ADJUST,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_1HPRETYB1,				//start_anim;
	(20*256)/FRAC_ADJUST/(20+38),	//to_factor;
//	(12*256)/30,	//to_factor;
	0x0,					//to_spin;
	-1,				//target angle
	113, 					//to_speed;
	38,						//ld_speed;
	15580,				//ld angle
	0x900,				//end_speed
	(ONE_SEC/2+6)*TIME_MULT,	//time;
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	80,			//level,
	0,			//land_twist
	},

//hammond dunk										17
	{
	MIN_T,			//min_time;
	MAX_T_a,			//MAX_T_aime;
	0x30*DIST_ADJUST,			//min_dist;
	0x40*DIST_ADJUST,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_HAMD1,		//start_anim;
	(32*256)/FRAC_ADJUST/(32+30),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	136,				//to_speed;
	28,				//ld_speed;
	-15170,				//ld angle
	0x400,				//end_speed
	(33*TIME_FACTOR)*TIME_MULT,	//time;
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	50,			//level,
	0,			//land_twist
	},

//1HFLYBY dunk										17
	{
	MIN_T,			//min_time;
	MAX_T_a,			//MAX_T_aime;
	0x30*DIST_ADJUST,			//min_dist;
	0x40*DIST_ADJUST,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_1HFLYBY1,		//start_anim;
	(36*256)/FRAC_ADJUST/(36+28),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	145,				//to_speed;
	72,				//ld_speed;
	0,				//ld angle
//	13149,				//ld angle
	0x900,				//end_speed
	(33*TIME_FACTOR)*TIME_MULT,	//time;
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	99,			//level,
	0,			//land_twist
	},

//1HBB2S dunk										17
	{
	MIN_T,			//min_time;
	MAX_T_a,			//MAX_T_aime;
	0x38*DIST_ADJUST,			//min_dist;
	0x45*DIST_ADJUST,			//max_dist;
	0x2000,				//max_angle;
	0x6000,			//max_angle;
	TOP_1HBB2S1,		//start_anim;
	(42*256)/FRAC_ADJUST/(42+30),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	100,				//to_speed;
	45,				//ld_speed;
	15350,				//ld angle
	0x900,				//end_speed
	ONE_SEC*TIME_MULT,	//time;
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	90,			//level,
	0,			//land_twist
	},

//2HAWORLD dunk										17
	{
	MIN_T,			//min_time;
	MAX_T_a,			//MAX_T_aime;
	0x38*DIST_ADJUST,			//min_dist;
	0x45*DIST_ADJUST,			//max_dist;
	0x2000,				//max_angle;
	0x6000,			//max_angle;
	TOP_2HAWORLD1,		//start_anim;
	(32*256)/FRAC_ADJUST/(32+38),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	119,				//to_speed;
	11,				//ld_speed;
	16428,				//ld angle
	0,				//end_speed
	(ONE_SEC*1.18)*TIME_MULT,	//time;
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	99,			//level,
	0,			//land_twist
	},

//windmill dunk										18
	{
	MIN_T,			//min_time;
	MAX_T_a,			//MAX_T_aime;
//	0x28,			//min_dist;
//	0x40,			//max_dist;
	0x38*DIST_ADJUST,			//min_dist;
	0x48*DIST_ADJUST,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_WIND1,		//start_anim;
	(36*256)/FRAC_ADJUST/(36+30),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	118,			//to_speed;
	19,				//ld_speed;
	17607,				//ld angle
	0x900,				//end_speed
	(ONE_SEC*1.18)*TIME_MULT,
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,			//hang
	70,			//level,
	0,			//land_twist
	},
//2 hand 360										20
	{
	MIN_T,			//min_time;
	MAX_T_a,			//MAX_T_aime;
	0x28*DIST_ADJUST,	 		//min_dist;
	0x30*DIST_ADJUST,			//max_dist;
	0x3000,			//max_angle;
	0x5000,			//max_angle;
   	TOP_3601,	//TOP_2H3601,		//start_anim;
	(40*256)/FRAC_ADJUST/(40+28),	//to_factor;
	0x7000,			//to_spin;
	-1,				//target angle
	66,				//to_speed;
	3,				//ld_speed;
	0,				//ld angle
	0,				//end_speed
	(ONE_SEC+2)*TIME_MULT,		//time
	NO,			//flippable
//	YES,			//flippable
//UM	ACLOCKWISE,		//spin direction
	CLOCKWISE,		//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	99,			//level,
	0,			//land_twist
	},

//1 hand 360										20
	{
	MIN_T,			//min_time;
	MAX_T_a,			//MAX_T_aime;
	0x28*DIST_ADJUST,	 		//min_dist;
	0x30*DIST_ADJUST,			//max_dist;
	0x3000,			//max_angle;
	0x5000,			//max_angle;
   	TOP_1H3601,	//TOP_1H3601,		//start_anim;
	(36*256)/FRAC_ADJUST/(36+28),	//to_factor;
	0x7000,			//to_spin;
	-1,				//target angle
	130,				//to_speed;
	38,				//ld_speed;
	0,				//ld angle
	38,				//end_speed
	(ONE_SEC+2)*TIME_MULT,		//time
	YES,			//flippable
	ACLOCKWISE,		//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	90,			//level,
	0,			//land_twist
	},

//start of regular dunks

//BARRY dunk										17
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x35,			//min_dist;
	0x45,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_BARRY1,		//start_anim;
	(26*256)/(26+32),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	135,				//to_speed;
	27,				//ld_speed;
	16339,				//ld angle
	0x400,				//end_speed
	ONE_SEC,	//time;
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	50,			//level
	PID_BRENT_BARRY_SEA,
	0,			//land_twist
	},


	//PIPPEN dunk										17
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x35,			//min_dist;
	0x45,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_PIPPEN1,		//start_anim;
	(26*256)/(26+32),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	135,				//to_speed;
	27,				//ld_speed;
//	16339,				//ld angle
	0,				//ld angle
	0x400,				//end_speed
	ONE_SEC,	//time;
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	50,			//level
	PID_SCOTTIE_PIPPEN_HOU,
	0,			//land_twist
	},

	//WEBBER dunk										17
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x30,			//min_dist;
	0x40,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_WEBBER1,		//start_anim;
	(32*256)/(32+34),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	120,				//to_speed;
	20,				//ld_speed;
	17672,				//ld angle
	0x400,				//end_speed
	ONE_SEC,	//time;
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	50,			//level
	PID_CHRIS_WEBBER_SAC,
	0,			//land_twist
	},

	{
	10,			//min_time;
	40,			//max_time;
	0x28,	 		//min_dist;
	0x30,			//max_dist;
	0x3000,			//max_angle;
	0x5000,			//max_angle;
   	TOP_1H3601,	//TOP_1H3601,		//start_anim;
	(36*256)/(36+28),	//to_factor;
	0x7000,			//to_spin;
	-1,				//target angle
	130,				//to_speed;
	38,				//ld_speed;
	0,				//ld angle
	38,				//end_speed
	ONE_SEC+2,		//time
	YES,			//flippable
	ACLOCKWISE,		//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	90,			//level,
	0,			//land_twist
	},

	{
	10,			//min_time;
	40,			//max_time;
	0x28,			//min_dist;
	0x34,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;

	TOP_3601,		//start_anim;
	(40*256)/(40+28),	//to_factor;
	0x7000,			//to_spin;
	-1,				//target angle
	90,				//to_speed;
	4,				//ld_speed;
	0,				//ld angle
	0,				//end_speed
	ONE_SEC,		//time
	NO,			//flippable
//	YES,			//flippable
	ACLOCKWISE,		//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	99,			//level,
	0,			//land_twist
	},

/*
//KOBE dunk !!!!
	{
	MIN_T,			//0x2*TIME_FACTOR,			//min_time;
	MAX_T,			//0x1c*TIME_FACTOR,			//max_time;
	0x10,			//min_dist;
	0x5a,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_1HDUNKA1,		//start_anim;
	(28*256)/(46),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	141,			//to_speed;
	88,				//ld_speed;
	0,
	0,
	23*TIME_FACTOR,
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,		//hang
	0,			//level,
	0,			//land_twist
	},
*/

/*
//2 hand dunk
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x10,			//min_dist;
	0x48,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_1HDUNKA1,		//start_anim;
	(28*256)/(62),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	132,			//to_speed;
	32,				//ld_speed;
	0,
	0,
	(ONE_SEC/2),
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	YES,		//hang
	0,			//level,
	0,			//land_twist
	},
*/



//1h180
	{
	0x12*TIME_FACTOR,			//min_time;
	0x1c*TIME_FACTOR,			//max_time;
	0x30,			//min_dist;
	0x3a,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	-TOP_1H1801,		//start_anim;
	(28*256)/(46),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	146,			//to_speed;
	92,				//ld_speed;
	-443,				//ld angle
	0x900,				//end_speed
	23*TIME_FACTOR,
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,		//hang
	90,			//level,
	0,			//id
	0,			//land_twist
	},

//1hul180 from 3:00
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x30,			//min_dist;
	0x3a,			//max_dist;
	0x6b00,			//min_angle;
	0x2000,			//max_angle;
	-TOP_1HUL1801,		//start_anim;
	(28*256)/(28+30),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	100,			//to_speed;
	56,				//ld_speed;
	13456,				//ld angle
	0x900,				//end_speed
	ONE_SEC,
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,		//hang
	90,			//level,
	0,			//land_twist
	},

//1hul180 from 9:00
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x30,			//min_dist;
	0x3a,			//max_dist;
	0xf400,			//min_angle;
	0x2000,			//max_angle;
	TOP_1HUL1801,		//start_anim;
	(28*256)/(28+30),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	100,			//to_speed;
	56,				//ld_speed;
	13456,				//ld angle
	0x900,				//end_speed
	ONE_SEC,
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,		//hang
	90,			//level,
	0,			//land_twist
	},


//KOBE dunk !!!!									0
	{
	0x12*TIME_FACTOR,			//min_time;
	0x1c*TIME_FACTOR,			//max_time;
	0x30,			//min_dist;
	0x3a,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_CD0,		//start_anim;
	(18*256)/(18+20),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	138,			//to_speed;
	37,				//ld_speed;
	15713,				//ld angle
	0x400,				//end_speed
	23*TIME_FACTOR,
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,		//hang
	99,			//level,
	0,			//land_twist
	},

//KOBE dunk !!!!									0
	{
	0x12*TIME_FACTOR,			//min_time;
	0x1c*TIME_FACTOR,			//max_time;
	0x30,			//min_dist;
	0x3a,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	-TOP_CD0,		//start_anim;
	(18*256)/(18+20),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	138,			//to_speed;
	37,				//ld_speed;
	15713,				//ld angle
	0x400,				//end_speed
	23*TIME_FACTOR,
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,		//hang
	99,			//level,
	0,			//land_twist
	},
//2 hand dunk										1
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x28,			//min_dist;
	0x38,			//max_dist;
	0x2000,				//max_angle;
	0x6000,			//max_angle;
	-TOP_2HD1,		//start_anim;
	(32*256)/(32+26),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	139,			//to_speed;
	104,				//ld_speed;
	0,				//ld angle
	0x900,				//end_speed
	(ONE_SEC*.85),
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	YES,		//hang
	50,			//level,
	0,			//land_twist
	},


//180 layup from 9:00						2
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x18,			//min_dist;
	0x28,			//max_dist;
//	-0x1000,			//min_angle;
	0xf400,			//min_angle;
	0x2000,			//max_angle;
	TOP_LAY1802S1,		//start_anim;
	(24*256)/(24+28),	//to_factor;
	0x1000,			//to_spin;
	0x4000,		//target_angle
	94,				//to_speed;
	65,				//ld_speed;
	14781,				//ld angle
	0x900,				//end_speed
	ONE_SEC*.75,
	NO,			//flippable
	ACLOCKWISE,				//spin direction
	30,				//final dist;
	0x4000,			//final angle;
	NO,				//hang
	5,			//level,
	0,			//land_twist
	},

//rev lay up 9:00									2
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x18,			//min_dist;
	0x28,			//max_dist;
//	-0x1000,			//min_angle;
	0xf400,			//min_angle;
	0x2000,			//max_angle;
	TOP_RLAY1,		//start_anim;
	(22*256)/(22+26),	//to_factor;
	0x1000,			//to_spin;
	0x4000,		//target_angle
	130,				//to_speed;
	34,				//ld_speed;
	15455,				//ld angle
	0x400,				//end_speed
	ONE_SEC/2,
	NO,			//flippable
	ACLOCKWISE,				//spin direction
	30,				//final dist;
	0x4000,			//final angle;
	NO,				//hang
	0,			//level,
	0,			//land_twist
	},

//rev lay up 3:00									3
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x18,			//min_dist;
	0x28,			//max_dist;
	0x6b00,			//min_angle;
	0x2000,			//max_angle;
	-TOP_RLAY1,		//start_anim;
	(22*256)/(22+26),	//to_factor;
	0x1000,			//to_spin;
	0x4000,		//target_angle
	130,				//to_speed;
	34,				//ld_speed;
	15455,				//ld angle
	0x400,				//end_speed
	ONE_SEC/2,
	NO,			//flippable
	CLOCKWISE,				//spin direction
	30,				//final dist;
	0x4000,			//final angle;
	NO,				//hang
	0,			//level,
	0,			//land_twist
	},
//180 layup from 3:00									3
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x18,			//min_dist;
	0x28,			//max_dist;
	0x6b00,			//min_angle;
	0x2000,			//max_angle;
	-TOP_LAY1802S1,		//start_anim;
	(22*256)/(22+26),	//to_factor;
	0x1000,			//to_spin;
	0x4000,		//target_angle
	94,				//to_speed;
	65,				//ld_speed;
	14781,				//ld angle
	0x900,				//end_speed
	ONE_SEC*.75,
	NO,			//flippable
	CLOCKWISE,				//spin direction
	30,				//final dist;
	0x4000,			//final angle;
	NO,				//hang
	5,			//level,
	0,			//land_twist
	},

/*
//finger roll										4
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x30,			//min_dist;
	0x40,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_FGR0,		//start_anim;
	(18*256)/(18+20),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	107,				//to_speed;
	81,				//ld_speed;
	0,				//ld angle
	0x400,				//end_speed
	(ONE_SEC*.75),
	YES,			//flippable
	0,				//spin direction
	48,				//final dist;
	0x0,			//final angle;
	NO,				//hang
	0,			//level,
	0,			//land_twist
	},
*/

//layfroll1 layup										4
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x30,			//min_dist;
	0x40,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_LAYFROLL11,		//start_anim;
	(30*256)/(30+28),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	113,				//to_speed;
	87,				//ld_speed;
	0,				//ld angle
	//-13805,				//ld angle
	0x900,				//end_speed
	(ONE_SEC*.75),
	YES,			//flippable
	0,				//spin direction
	48,				//final dist;
	0x0,			//final angle;
	NO,				//hang
	0,			//level,
	0,			//land_twist
	},

//clutch layup										4
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x30,			//min_dist;
	0x40,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_LAYCLUT1,		//start_anim;
	(34*256)/(34+48),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	130,				//to_speed;
	88,				//ld_speed;
	15436,				//ld angle
	0x900,				//end_speed
	(ONE_SEC),
	YES,			//flippable
	0,				//spin direction
	48,				//final dist;
	0x0,			//final angle;
	NO,				//hang
	5,			//level,
	0,			//land_twist
	},

//laycock layup										4
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x30,			//min_dist;
	0x40,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_LAYCOCK1,		//start_anim;
	(34*256)/(34+32),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	76,				//to_speed;
	78,				//ld_speed;
	-10868,				//ld angle
	0x900,				//end_speed
	(ONE_SEC*.75),
	YES,			//flippable
	0,				//spin direction
	48,				//final dist;
	0x0,			//final angle;
	NO,				//hang
	3,			//level,
	0,			//land_twist
	},

//layswtch layup										4
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x30,			//min_dist;
	0x40,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_LAYSWTCH1,		//start_anim;
	(24*256)/(24+32),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	126,				//to_speed;
	88,				//ld_speed;
	0,				//ld angle
//	13316,				//ld angle
	0x900,				//end_speed
	(ONE_SEC*.75),
	YES,			//flippable
	0,				//spin direction
	48,				//final dist;
	0x0,			//final angle;
	NO,				//hang
	2,			//level,
	0,			//land_twist
	},


//1hand reverse dunk from 9:00						6
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x20,			//min_dist;
	0x30,			//max_dist;
	0xf400,			//min_angle;
//	-0x1000, 		//min_angle;
	0x2000,			//max_angle;
	TOP_1HRD1,		//start_anim;
	(32*256)/(32+26),	//to_factor;
	-0x1000,		//to_spin;
	0x7000,			//target angle
	110,			//to_speed;
	61, 			//ld_speed;
//	11968,				//ld angle
	0,				//ld angle
	0x900,				//end_speed
	ONE_SEC,		//time
	NO,				//switchable
	CLOCKWISE,
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	70,			//level,
	0,			//land_twist
	},

//1hand reverse from 3:00							7
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x20,			//min_dist;
	0x30,			//max_dist;
	0x6b00,			//min_angle;
	0x2000,			//max_angle;
//	0x7000,			//min_angle;
	-TOP_1HRD1,		//start_anim;
	(32*256)/(32+26),	//to_factor;
	0x1000,   		//to_spin;
	0x1000,			//target angle;
	110,			//to_speed;
	61, 			//ld_speed;
//	11968,				//ld angle
	0,				//ld angle
	0x900,				//end_speed
	ONE_SEC,		//time;
	NO,				//flippable
	CLOCKWISE,		//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	70,			//level,
	0,			//land_twist
	},

//2hand reverse from 9:00							8
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x2a,			//min_dist;
	0x38,			//max_dist;
//	0x1a,			//min_dist;
//	0x28,			//max_dist;
	0x0,			//min_angle;
	0x1800,			//max_angle;
	TOP_2HRD1,		//start_anim;
	(55*256)/(38+42),	//to_factor;
	-0x1000,   		//to_spin;
	0x9000,			//target angle;
	102,			//to_speed;
	16,			//ld_speed;
	15960,				//ld angle
	0x400,				//end_speed
	(ONE_SEC*1.25),	//time;
	NO,				//flippable
	CLOCKWISE,		//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	80,			//level,
	0,			//land_twist
	},

//2hand reverse from 7:30							9
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x2a,			//min_dist;
	0x38,			//max_dist;
//	0x1a,			//min_dist;
//	0x28,			//max_dist;
	0x1800,			//min_angle;
	0x1800,			//max_angle;
	TOP_2HRD1,		//start_anim;
	(38*256)/(38+42),	//to_factor;
	-0x1000,   		//to_spin;
	0xb000,			//target angle;
	102,			//to_speed;
	16,			//ld_speed;
	15960,				//ld angle
	0x400,				//end_speed
	(ONE_SEC*1.25),	//time;
	NO,				//flippable
	CLOCKWISE,		//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	80,			//level,
	0,			//land_twist
	},

//2hand reverse from 6:00 to 7:30					10
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x2a,			//min_dist;
	0x38,			//max_dist;
//	0x1a,			//min_dist;
//	0x28,			//max_dist;
	0x3000,			//min_angle;
	0x1000,			//max_angle;
	TOP_2HRD1,		//start_anim;
	(55*256)/(38+42),	//to_factor;
	-0x1000,   		//to_spin;
	0xc000,			//target angle;
	102,			//to_speed;
	16,			//ld_speed;
	15960,				//ld angle
	0x400,				//end_speed
	(ONE_SEC*1.25),	//time;
	NO,				//flippable
	CLOCKWISE,		//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	80,			//level,
	0,			//land_twist
	},

//2hand reverse from 4:30 to 6:00					11
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x2a,			//min_dist;
	0x38,			//max_dist;
//	0x1a,			//min_dist;
//	0x28,			//max_dist;
	0x4000,			//min_angle;
	0x1000,			//max_angle;
	TOP_2HRD1,		//start_anim;
	(55*256)/(38+42),	//to_factor;
	-0x1000,   		//to_spin;
	0xc000,			//target angle;
	102,			//to_speed;
	16,			//ld_speed;
	15960,				//ld angle
	0x400,				//end_speed
	(ONE_SEC*1.25),	//time;
	NO,				//flippable
	ACLOCKWISE,		//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	80,			//level,
	0,			//land_twist
	},

//2hand reverse from 4:30							12
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x2a,			//min_dist;
	0x38,			//max_dist;
//	0x1a,			//min_dist;
//	0x28,			//max_dist;
	0x5000,			//min_angle;
	0x1800,			//max_angle;
	TOP_2HRD1,		//start_anim;
	(55*256)/(38+42),	//to_factor;
	-0x1000,   		//to_spin;
	0xd000,			//target angle;
	102,			//to_speed;
	16,			//ld_speed;
	15960,				//ld angle
	0x400,				//end_speed
	(ONE_SEC*1.25),	//time;
	NO,				//flippable
	ACLOCKWISE,		//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	80,			//level,
	0,			//land_twist
	},

//2hand reverse from 3:00							13
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x2a,			//min_dist;
	0x38,			//max_dist;
//	0x1a,			//min_dist;
//	0x28,			//max_dist;
	0x6800,			//min_angle;
	0x1800,			//max_angle;
	TOP_2HRD1,		//start_anim;
	(55*256)/(38+42),	//to_factor;
	0x1000,   		//to_spin;
	0xf000,			//target angle;
	102,			//to_speed;
	16,			//ld_speed;
	15960,				//ld angle
	0x400,				//end_speed
	(ONE_SEC*1.25),	//time;
	NO,				//flippable
	ACLOCKWISE,		//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	80,			//level,
	0,			//land_twist
	},


//Monster dunk										14
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x30,			//min_dist;
	0x40,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_MOND1,		//start_anim;
	(36*256)/(36+34),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	141,				//to_speed;
	60,				//ld_speed;
	10753,				//ld angle
	0x900,				//end_speed
	(ONE_SEC),	//time;
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	YES,			//hang
	80,			//level,
	0,			//land_twist
	},

//**SUPERSPECIALS**//
//360												15
	{
	10,			//min_time;
	40,			//max_time;
	0x28,			//min_dist;
	0x34,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;

	TOP_3601,		//start_anim;
	(40*256)/(40+28),	//to_factor;
	0x7000,			//to_spin;
	-1,				//target angle
	90,				//to_speed;
	4,				//ld_speed;
	0,				//ld angle
	0,				//end_speed
	ONE_SEC,		//time
	NO,			//flippable
//	YES,			//flippable
	ACLOCKWISE,		//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	99,			//level,
	0,			//land_twist
	},

//T HAWK											16
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x34,			//min_dist;
	0x44,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_THAWK1,				//start_anim;
	(22*256)/(22+32),	//to_factor;
//	(12*256)/30,	//to_factor;
	0x0,					//to_spin;
	-1,				//target angle
	117, 					//to_speed;
	69,						//ld_speed;
	-11368,				//ld angle
	0x900,				//end_speed
	(ONE_SEC),	//time;
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	90,			//level,
	0,			//land_twist
	},

//1HTOMJR											16
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x34,			//min_dist;
	0x44,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_1HTOMJR1,				//start_anim;
	(20*256)/(20+38),	//to_factor;
//	(12*256)/30,	//to_factor;
	0x0,					//to_spin;
	-1,				//target angle
	146, 					//to_speed;
	52,						//ld_speed;
	-14170,				//ld angle
	0x900,				//end_speed
	(ONE_SEC/2+6),	//time;
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	90,			//level,
	0,			//land_twist
	},

//1hpretyb dunk											16
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x34,			//min_dist;
	0x44,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_1HPRETYB1,				//start_anim;
	(20*256)/(20+38),	//to_factor;
//	(12*256)/30,	//to_factor;
	0x0,					//to_spin;
	-1,				//target angle
	113, 					//to_speed;
	38,						//ld_speed;
	15580,				//ld angle
	0x900,				//end_speed
	(ONE_SEC/2+6),	//time;
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	80,			//level,
	0,			//land_twist
	},

//hammond dunk										17
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x30,			//min_dist;
	0x40,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_HAMD1,		//start_anim;
	(32*256)/(32+30),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	136,				//to_speed;
	28,				//ld_speed;
	-15170,				//ld angle
	0x400,				//end_speed
	33*TIME_FACTOR,	//time;
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	50,			//level,
	0,			//land_twist
	},

//1HFLYBY dunk										17
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x30,			//min_dist;
	0x40,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_1HFLYBY1,		//start_anim;
	(36*256)/(36+28),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	145,				//to_speed;
	72,				//ld_speed;
	0,				//ld angle
//	13149,				//ld angle
	0x900,				//end_speed
	33*TIME_FACTOR,	//time;
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	99,			//level,
	0,			//land_twist
	},

//1HBB2S dunk										17
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x38,			//min_dist;
	0x45,			//max_dist;
	0x2000,				//max_angle;
	0x6000,			//max_angle;
	TOP_1HBB2S1,		//start_anim;
	(42*256)/(42+30),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	100,				//to_speed;
	45,				//ld_speed;
	15350,				//ld angle
	0x900,				//end_speed
	ONE_SEC,	//time;
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	90,			//level,
	0,			//land_twist
	},

//2HAWORLD dunk										17
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x38,			//min_dist;
	0x45,			//max_dist;
	0x2000,				//max_angle;
	0x6000,			//max_angle;
	TOP_2HAWORLD1,		//start_anim;
	(32*256)/(32+38),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	119,				//to_speed;
	11,				//ld_speed;
	16428,				//ld angle
	0,				//end_speed
	ONE_SEC*1.18,	//time;
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	99,			//level,
	0,			//land_twist
	},

//windmill dunk										18
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
//	0x28,			//min_dist;
//	0x40,			//max_dist;
	0x38,			//min_dist;
	0x48,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_WIND1,		//start_anim;
	(36*256)/(36+30),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	118,			//to_speed;
	19,				//ld_speed;
	17607,				//ld angle
	0x900,				//end_speed
	ONE_SEC*1.18,
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,			//hang
	70,			//level,
	0,			//land_twist
	},

/*
//1HHAM dunk										18
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x28,			//min_dist;
	0x40,			//max_dist;
	0x2000,				//max_angle;
	0x6000,			//max_angle;
	TOP_1HHAM1,		//start_anim;
	(30*256)/(36+32),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	139,			//to_speed;
	20,				//ld_speed;
	0,				//ld angle
	0,				//end_speed
	ONE_SEC*.75,
	YES,			//flippable
	0,				//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,			//hang
	2,			//level,
	0,			//land_twist
	},
*/

//regular layup									19
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x38,			//min_dist;
	0x48,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_BBLAY1,		//start_anim;
//	(30*256)/(30+26),	//to_factor;
	(38*256)/(30+26),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	106,				//to_speed;
	92,				//ld_speed;
//	11496,				//ld angle
	0,				//ld angle
	0x900,				//end_speed
//	35*TIME_FACTOR,	//time;
	26*TIME_FACTOR,	//time;
	YES,			//flippable
	0,				//spin direction
	24,				//final dist;
	0x2000,			//final angle;
	NO,				//hang
	4,			//level,
	0,			//land_twist
	},

//laychooh layup									19
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x28,			//min_dist;
	0x38,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_LAYSCOOH1,		//start_anim;
	(32*256)/(32+18),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	95,				//to_speed;
	77,				//ld_speed;+ 
	14425,				//ld angle
	0x900,				//end_speed
	23*TIME_FACTOR,	//time;
	YES,			//flippable
	0,				//spin direction
	24,				//final dist;
	0x2000,			//final angle;
	NO,				//hang
	1,			//level,
	0,			//land_twist
	},

//under the leg									19
	{
	MIN_T,			//min_time;
	MAX_T,			//max_time;
	0x38,			//min_dist;
	0x48,			//max_dist;
	0,				//max_angle;
	0x8000,			//max_angle;
	TOP_LAYUPBL1,		//start_anim;
	(26*256)/(26+28),	//to_factor;
	0x0000,			//to_spin;
	-1,				//target angle
	117,				//to_speed;
	81,				//ld_speed;
	0,				//ld angle
//	13022,				//ld angle
	0x900,				//end_speed
	25*TIME_FACTOR,	//time;
	YES,			//flippable
	0,				//spin direction
	24,				//final dist;
	0,			//final angle;
//	0x2000,			//final angle;
	NO,				//hang
	5,			//level,
	0,			//land_twist
	},

//2 hand 360										20
	{
	10,			//min_time;
	40,			//max_time;
	0x28,	 		//min_dist;
	0x30,			//max_dist;
	0x3000,			//min_angle;
	0x5000,			//max_angle;
   	TOP_3601,	//TOP_2H3601,		//start_anim;
	(40*256)/(40+28),	//to_factor;
	0x7000,			//to_spin;
	-1,				//target angle
	66,				//to_speed;
	3,				//ld_speed;
	0,				//ld angle
	0,				//end_speed
	ONE_SEC+2,		//time
	NO,			//flippable
//	YES,			//flippable
//UM	ACLOCKWISE,		//spin direction
	CLOCKWISE,		//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	99,			//level,
	0,			//land_twist
	},

//1 hand 360										20
	{
	10,			//min_time;
	40,			//max_time;
	0x28,	 		//min_dist;
	0x30,			//max_dist;
	0x3000,			//min angle
	0x5000,			//max_angle;
   	TOP_1H3601,	//TOP_1H3601,		//start_anim;
	(36*256)/(36+28),	//to_factor;
	0x7000,			//to_spin;
	-1,				//target angle
	130,				//to_speed;
	38,				//ld_speed;
	0,				//ld angle
	0,				//end_speed
	ONE_SEC+2,		//time
	YES,			//flippable
	ACLOCKWISE,		//spin direction
	0,				//final dist;
	0,				//final angle;
	NO,				//hang
	90,			//level,
	0,
	0,			//land_twist
	},

	// Terminal dunk
	{
	0,0,0,0,
	0,0,0,0,
	0,0,0,0,
	0,0,0,0,0,0,0,
	0,			//land_twist
	}
};


bool blocked_dunk_test(playert *plyr)
{
playert *plyr2;

	for (plyr2 = player+(plyr->base^5); plyr2<player+((plyr->base^5)+5); plyr2++)
	{
		if (MANHATTAN(plyr2->xco-plyr->xco, plyr2->yco-plyr->yco) < 0x100000)
		{
			if (covered2(plyr, plyr2))
			{
				return TRUE;
			}
		}
	}

	return FALSE;
}



/***************************************************************************
 *
 *	can_perform_dunk()
 *
 ***************************************************************************
 *
 *	Checks to see if the given dunk is valid according to current
 *	circumstances.  This routine does not check the validity of the time
 *	parameter of dunk suitability.
 *
 ***************************************************************************/
int can_perform_dunk
		(
		dunkT	*dunk,		// Dunk to check for validity
		int		level_d,	// Player's dunking ability level (0...100)
		int		level_l,	// Player's layp level (0...4)
		SW		angle,		// Angle of player to basket
		int		dist		// Distance to the hoop
		)
{
	SW		a_diff;
	int		level=dunk->level;

	// If player is not good enough to perform move, just leave
	if (!ArcadeMode)
	{
		if (dunk->final_dist)	// Check if layup
		{
			if (level_l<level)
				return INVALID_DUNK;
		}
		else					// Dunk
		{
			if (level_d<level)
				return INVALID_DUNK;
		}
	}

	// If it is a personalized dunk, just leave
	if (!ArcadeMode && dunk->id && bhp->plyrROM->uw___pIndx!=dunk->id)
		return INVALID_DUNK;

	// Don't allow layups on a breakaway
	if (fast_break_flag && dunk->final_dist)
		return INVALID_DUNK;

	// Check the angle and distance
	a_diff = angle-dunk->min_angle;
	if ((a_diff>0) && ((UW)a_diff<dunk->angle_range))
		if ((dist>=dunk->min_dist) && (dist<=dunk->max_dist))
			return level;

	return INVALID_DUNK;
}



/***************************************************************************
 *
 *	dunk_called()
 *
 ***************************************************************************
 *
 *	Checks to see if the player can perform a dunk chosen specifically off
 *	a button press on one of the four camera buttons.  If a dunk may be
 *	performed, the dunk is started.  A non-zero return indicates a start of
 *	dunk.
 *
 ***************************************************************************/
bool dunk_called
		(
		playert	*plyr,
		int		type		// 0: Up button, 1: down, 2: left, 3:right
		)
{
	int i=0;
	SB	*sel_dunks;
	int	dist;
	SW	angle;

	dist=plyr->basket_dist>>16;
	dunk_sels=SelDunks[1];
	sel_dunks=dunk_sels[type];
	dunk_set=ArcadeMode? dunk_list_a : dunk_list;
	angle=plyr->basket_angle;
	if (plyr->no > 4)
		angle = -angle;

	while(sel_dunks[i]!=-1)
	{
		if (can_perform_dunk(&dunk_set[sel_dunks[i]],DUNK_LEVEL,LAYUP_LEVEL,angle,dist)!=INVALID_DUNK)
			if (dunk_set[sel_dunks[i]].max_time!=MAX_T_a || MOM_MAX(plyr->team))
				break;

		i++;
	};

	// Valid dunk found, time to perform it
	if (sel_dunks[i]!=-1)
		dunk_start_specific(plyr,&dunk_set[sel_dunks[i]]);
#if 1
	else
		dunk_start_specific(plyr,&dunk_list[DI_FINGERROLL]);
#endif
}

#if defined(ML)
	bool DUNK_FAIL(char *txt)
	{
	#ifdef DEBUG
		PCwrite(-1,"DUNK FAIL!! ", 11);
		PCwrite(-1, txt, strlen(txt));
		
	#endif
		return FALSE;
	}
#else
	#define	DUNK_FAIL(x)	FALSE
#endif


bool sdunk_test(playert *plyr)
{
dunkT	**allowed_ptr;
playert *plyr2;
int	time;

dunkT	*dunk;
int speed;
int dist;
int	level;
int	a_diff;
SW angle;
int dunk_no;
int i;
dunkT	*mld_list[68];
int		mld_cnt=0;
int		mld_level=0;

	if (HSTEST)
		return 0;

	if (plyr->last_speed>=0x800 && !plyr->shuffle)
	{
		return DUNK_FAIL("Too fast");
	}

	if (possession_ticks==0)			
	{
		return DUNK_FAIL("only just got ball");
	}

	if (!possession_flag)				return 0;

	if (plyr->basket_dist > 0x200000)
	{
		return DUNK_FAIL("too far away");
	}

	a_diff = plyr->basket_angle - plyr->angle;
	if (abs(a_diff) > 0x3000)
	{
		return DUNK_FAIL("facing wrong way");
	}

	SetMain(sdunk_test,&ball,follow_player);

	last_shooter=plyr->no;
	SetLastHandler(sdunk_test, plyr->no);
	plyr->flags  &= ~(FALLING + HIT);
	plyr->fouler=NULL;
	last_blocker=-1;

	dist = plyr->basket_dist>>16;
    angle     = plyr->basket_angle;
	if (plyr->no > 4)	  angle = -angle;

	//generate list of allowed dunks and select one at random

	if (plyr->basket_dist>0x100000)
	{
	
		if (blocked_dunk_test(plyr))
		{
			return DUNK_FAIL("someone in the way");
		}
	}


	allowed_ptr	= allowed_dunks;
	dunk_no		= 0;
	dunk = sdunk_list;

	while (dunk->min_time)
	{
		if (dunk->max_time!=MAX_T_a || MOM_MAX(plyr->team))
			if ((level=can_perform_dunk(dunk,DUNK_LEVEL,LAYUP_LEVEL,angle,dist))!=INVALID_DUNK)
			{
				if (level==mld_level)		// keep adding top-level dunks to fast break list
					mld_list[mld_cnt++]=dunk;
				else if (level>mld_level)	// start from scratch at higher level
				{
					mld_cnt=0;
					mld_level=level;
					mld_list[mld_cnt++]=dunk;
				}

				// If this is a signature dunk, double its odds
				if (plyr->plyrROM->uw___pIndx==dunk->id)
				{
					mld_list[mld_cnt++]=dunk;
					*allowed_ptr++=dunk;
					dunk_no++;
				}

				*allowed_ptr++	= dunk;
		  		dunk_no++;
			}

		dunk++;
	};

	//no dunk allowed
	if (dunk_no	== 0)
	{
		return DUNK_FAIL("someone in the way");
	}


	SetDunkFlag(sdunk_test,4);
	scored_flag=0;
	if (fast_break_flag && mld_cnt)
		dunk=mld_list[(mld_cnt*ReadRnd250())>>8];
	else
		dunk = allowed_dunks[(dunk_no*ReadRnd250()) >> 8];
	current_dunk = dunk;

	time    = dunk->time;
	plyr->ctr2 = time;

	time = (time*dunk->to_factor) >> 8;
	if (time==0)	time=1;

	start_blend_anim2(plyr, dunk->start_anim, time);

	a_diff = (plyr->basket_angle - plyr->angle);
	plyr->angle_vel = ((a_diff*dunk->to_factor)>>8)/time;

	speed = (plyr->top_rate * dunk->to_speed * plyr->scale)>>6;
	plyr->xvel = ((LFPCos(plyr->angle)>>6) * speed)>>8;
	plyr->yvel = ((LFPSin(plyr->angle)>>6) * speed)>>8;

	BigPoints=HotSpot_Check(plyr);
	piece_of_shit_fastbreak_points_flag=fast_break_flag;
	SetMain(sdunk_test,plyr,dunk_take_off);

	plyr->top_routine  = NULL;
	plyr->leg_routine  = NULL;

	IncShotAttempts(plyr);


	// Save data for player selection of dunk
	dunk_set=sdunk_list;
	dunk_sels=SelSDunks[PosToSel[(plyr->no>=5)? plyr->no-5 : plyr->no]];

	if (CAMERAS==1)
	{
		CameraSpecialStart((bool)current_dunk->final_dist);
	}

	project_dunk_ball(plyr, plyr->ctr2, (bool)current_dunk->final_dist);

	return TRUE;
}



/***************************************************************************
 *
 *	dunk_start_specific()
 *
 ***************************************************************************
 *
 *	Begins a specific dunk once one has been determined by the calling
 *	routine.
 *
 ***************************************************************************/
bool dunk_start_specific
		(
		playert	*plyr,
		dunkT	*dunk			// Dunk previously determined to execute
		)
{
	int dunk_no;
	int level;
	int ia_diff;
	int anim;
	int	time;

int i;

#ifndef PLAY
	reset_play();
#endif

	if (!possession_flag)				return 0;

	SetMain(dunk_start_specific,&ball,follow_player);
	last_shooter=plyr->no;
	SetLastHandler(dunk_start_specific,plyr->no);
	plyr->flags  &= ~(FALLING + HIT);
	plyr->fouler=NULL;

	//add velocity since we switch off leg routine
	plyr->xco += plyr->xvel;
	plyr->yco += plyr->yvel;

	SetDunkFlag(dunk_start_specific,3);
	current_dunk =	dunk;
	scored_flag=0;

	time       = dunk->time;
	plyr->ctr2 = time;

	time = (time*dunk->to_factor) >> 8;
	if (time==0)	time=1;

	anim    = dunk->start_anim;
	ia_diff = (int)(dunk->to_spin);

	//is dunk mirrorable?
	if (dunk->switch_flag)
	{
		//see if there wouldn't be a better match with legs for mirrored dunks
		if ((plyr->leg_frame > 0xa00) && (plyr->leg_frame < 0x1e00))
		{
			anim   = -anim;
			ia_diff = -ia_diff;
		}
	}

	
	

	start_blend_anim2(plyr, anim, time);
	plyr->top_blend_ctr = 0x200;	//continue with run legs and top
	plyr->leg_blend_ctr = 0x200;	//continue with run legs and top

	ia_diff += (int)((SW)(plyr->basket_angle - plyr->angle));
	
	plyr->angle_vel = ia_diff/time;

	ia_diff = plyr->angle + ((SW)(plyr->basket_angle - plyr->angle)/2);
	start_vels2(plyr, dunk->to_speed, ia_diff);

	BigPoints=HotSpot_Check(plyr);
	piece_of_shit_fastbreak_points_flag=fast_break_flag;
	SetMain(dunk_start_specific,plyr,dunk_take_off);
	plyr->top_routine  = NULL;
	plyr->leg_routine  = NULL;

	//project forward dunk ball co-ordinates
	project_dunk_ball(plyr, plyr->ctr2, (bool)current_dunk->final_dist);

	IncShotAttempts(plyr);

	if (CAMERAS==1)		CameraSpecialStart((bool)current_dunk->final_dist);

	return TRUE;
}



int dunk_test(playert *plyr)
{
/*int	z_diff;
*/
int	time;
int	dist;
int speed;
dunkT	*dunk;
SW	angle;
SW  a_diff, ta;

	int	look=MAX_T_a;

	if (HSTEST)
		return 0;

	if (possession_ticks<2)
		return 0;
	if (plyr->basket_dist>0x1200000)
		return 0;
	if (!ArcadeMode && plyr->basket_dist>0x600000)
		return 0;

#ifndef DEBUG
	if (!(current_ctrlr->ctrlr & CTRL_TURBO))
	{
		//must be completely clear
		if (blocked_basket_test(plyr)!=0xe)
			return DUNK_FAIL("someone in the way 1");

	}
	else
	{
		//less restrictive test for when turbo is pressed
		if (blocked_dunk_test(plyr))
			if ( plyr->plyrROM->ub___pAttrDunk<90 || random(11) )
				return DUNK_FAIL("someone in the way 2");
	}
#endif

	//is difference in direction of travel and basket angle too great?
	ta = LFPAtn(plyr->xvel, plyr->yvel) - plyr->basket_angle;
	if (abs(ta)> 0x2000)	return 0;

	dist  = plyr->basket_dist;
	speed = MANHATTAN(plyr->xvel, plyr->yvel);
	if (speed == 0)			return 0;
	//get estimate of time to basket 
	time  = (dist*5)/(speed*3);	//allow for slow down

	if (time < 0)
		return DUNK_FAIL("too close");
	if (ArcadeMode)		// too far away
	{
		if (time>MAX_T_a)
			return DUNK_FAIL("too slow");
	}
	else				// too far away
	{
		if (time > MAX_T)
			return DUNK_FAIL("too slow");
	}
	if (time < MIN_T)	time = MIN_T;	// lay up

    angle     = plyr->basket_angle;
	if (plyr->no > 4)	  angle = -angle;
	dist		= plyr->basket_dist>>16;
	if (plyr->control==0)	dist+=8;	// bring CPU dunk range in

	dunk = ArcadeMode? dunk_list_a : dunk_list;

	while (dunk->min_time)
	{
		if ((time>=dunk->min_time) && (time<=dunk->max_time))
			if (dunk->max_time!=MAX_T_a || MOM_MAX(plyr->team) )
				if (can_perform_dunk(dunk,DUNK_LEVEL,LAYUP_LEVEL,angle,dist)!=INVALID_DUNK)
					return time;

		dunk++;
	};

	return DUNK_FAIL("no dunks available");

}




dunkT	*allowed_dunks[68];


bool dunk_start(playert *plyr, int time)
{
dunkT	**allowed_ptr;
dunkT	*dunk;
dunkT	*mld_list[68];
int		mld_cnt=0;
int		mld_level=0;

int	angle;
int dunk_no;
int	dist;
int level;
SW  a_diff;
int anim;

int i;

	CallChainP(dunk_start);

    angle     = plyr->basket_angle;
	if (plyr->no > 4)	  angle = -angle;

	allowed_ptr	= allowed_dunks;
	dunk_no		= 0;

	dist		= plyr->basket_dist>>16;

	if (plyr->control==0)	dist+=8;	//bring CPU dunk range in

	if (!possession_flag)				return 0;

	//generate list of allowed dunks and select one at random
	dunk = ArcadeMode? dunk_list_a : dunk_list;
	level=DUNK_LEVEL;


#if 1
	IntToHexStr(time, &statusString[0]);
	IntToHexStr(dist, &statusString[6]);
	IntToHexStr(angle & 0xffff, &statusString[12]);
	for(i=0;i<30;i++)
	{
		if(statusString[i]==0) statusString[i]=' ';
	}
#endif

	while (dunk->min_time)
	{
		if ((time>=dunk->min_time) && (time<=dunk->max_time))
			if (dunk->max_time!=MAX_T_a || MOM_MAX(plyr->team) )
				if ((level=can_perform_dunk(dunk,DUNK_LEVEL,LAYUP_LEVEL,angle,dist))!=INVALID_DUNK)
				{
					*allowed_ptr++=dunk;	// Add the dunk to the allowed list
					dunk_no++;

					if (level==mld_level)		// keep adding top-level dunks to fast break list
						mld_list[mld_cnt++]=dunk;
					else if (level>mld_level)	// start from scratch at higher level
					{
						mld_cnt=0;
						mld_level=level;
						mld_list[mld_cnt++]=dunk;
					}

					if (plyr->plyrROM->uw___pIndx==dunk->id)
					{
						mld_list[mld_cnt++]=dunk;
						*allowed_ptr++=dunk;
						dunk_no++;
					}

					if (dunk_no>67)
						BRK;
				}

		dunk++;
	};

	*allowed_ptr=NULL;

	//no dunk allowed
	if (dunk_no	== 0)	return FALSE;

	// Use the standard dunk initialization
	if (fast_break_flag && mld_cnt)
		dunk=mld_list[(mld_cnt*ReadRnd250())>>8];
	else
		dunk=allowed_dunks[(dunk_no*ReadRnd250()) >> 8];

#ifndef PLAY
	reset_play();
#endif

			//return dunk_start_specific(plyr, &dunk_list[0]);	//force 360
	if (dunk->start_anim>TOP_KSPNLGOR-3)
	{
		if (ShowDebug)
		{
			char	msg[128];

			memset(msg,0,sizeof(msg));

			IntToHexStr((int)dunk,msg);
			strcat(msg," ");
			IntToHexStr(dunk->id,msg+strlen(msg));
			strcat(msg," ");
			IntToDecStr(dunk->start_anim,msg+strlen(msg));
			strcat(msg," ");
			IntToHexStr(dunk->final_dist,msg+strlen(msg));
			strcat(msg," ");
			IntToDecStr(dunk->level,msg+strlen(msg));
			strcat(msg," ");
			IntToHexStr(dunk->time,msg+strlen(msg));

			BreakMessage(msg,__FILE__,__LINE__);
		}

		return FALSE;
	}

	return dunk_start_specific(plyr,dunk);
}




void dunk_take_off(playert *plyr)
{
int	angle;
int	x_diff;
int y_diff;
int z_diff;
int target_y, target_x;

int	angle_diff;

SW target_angle;
SW frame_no;
SW time;

	CallChainP(dunk_take_off);

	pt3_flag=FALSE;

	plyr->ctr2--;
	if (plyr->ctr2==0) plyr->ctr2 = 1;	/*stop /0 */

	//add angular velocity
	plyr->angle += plyr->angle_vel;

	//no collision!
	plyr->xco += plyr->xvel;
	plyr->yco += plyr->yvel;

	check_dunk_foul(plyr);

	// Start up dunk at the end of the launch
	if (end_animation_test(plyr))
	{
		if (!project_flag && SLOW_DUNKS && !ArcadeMode)
			time_rate=(0x100*2)/3;

		if (!project_flag && ArcadeMode)
			if (!current_dunk->final_dist && current_dunk->max_time==MAX_T_a)
				ShowTrails=TRUE;

		time = plyr->ctr2;
		start_next_anim2(plyr, time);

		frame_no = frames_to_go(plyr)-1;

		target_angle = current_dunk->target_angle;
		if (current_dunk->target_angle == -1)
		{
			//default to straight on
			target_angle = plyr->basket_angle;
		}
		else
		{
			//reflect for opposite end of court
			if (plyr->yco < 0)	target_angle = -target_angle;
		}

		//where would ball be at the end of the dunk, assuming player doesn't move.
		angle			= plyr->angle;
		plyr->angle     = target_angle;
		plyr->top_frame = frame_no << 8;
		PlayGfxEvalBall(plyr, &x_diff, &z_diff, &y_diff);
		plyr->angle     = angle;
		plyr->top_frame = 0;

		//where is basket
		target_y = current_basket_y;
		target_x = 0;

		//lay up releases away from basket adjust target
		if (current_dunk->final_dist)
		{
			angle = target_angle + ((plyr->top_anim > 0) ? current_dunk->final_angle: -current_dunk->final_angle);
			target_x -= LFPCos(angle) * current_dunk->final_dist;
			target_y -= LFPSin(angle) * current_dunk->final_dist;
		}

		//difference between where ball would be with no movement and where basket is
		//gives us how far we must move the player
		if (time==0)
			time=1;

		plyr->yvel = TEMPO((target_y - y_diff)/time);
		plyr->xvel = TEMPO((target_x - x_diff)/time);

		z_diff     = BASKET_Z - z_diff + 0x10000;
		plyr->zvel = (z_diff/time) + ((time-1)*(LITTLE_G/2));

		if (plyr->zvel<=0)
		{
			plyr->xvel=0;
			plyr->yvel=0;
			start_blend_anim(plyr, TOP_STAND_BALL);
			SetMain(dunk_take_off,plyr,stand_with_ball);
			plyr->leg_routine  = leg_deflt;
			plyr->top_routine  = NULL;
			dunk_flag=FALSE;
			return;
		}


		if (!project_flag)
			PlayGfx_SetFaceAnim( plyr->no, FaceAnims[random( 5 )], time_till_land(plyr) );

		angle_diff = (SW)(target_angle - plyr->angle);

		//force dunk to spin right way
		if (current_dunk->spin_direction)
		{
			int spin;

			spin = current_dunk->spin_direction;
			if ((current_dunk->start_anim ^ plyr->top_anim) < 0)	spin = -spin;

			if ((angle_diff ^ spin) < 0)
			{
				if (angle_diff > 0)	 angle_diff -= 0x10000;
				else				 angle_diff += 0x10000;
			}
		}

		plyr->angle_vel	   = TEMPO(angle_diff/time);
		plyr->top_rate = TEMPO(plyr->top_rate);
		SetMain(dunk_take_off,plyr,dunk_up_rou);

		if (!project_flag && current_dunk->max_time == MAX_T_a)
		{
			Audio_SfxPlay( GameBank, SFX_TAKEOFF, SfxVolume );
			Replay_SaveSfx( SFX_TAKEOFF, AUDIO_MAX_VOLUME );
		}

		//cam3_flag=1;

		if (!current_dunk->final_dist)			// If not a layup, do dunk commentary.
			Comment( COMMENT_DUNK, plyr, 0 );
	}
}





void dunk_up_rou(playert *plyr)
{
int time, dist;

	CallChainP(dunk_up_rou);

	//no collision!
	plyr->xco += plyr->xvel;
	plyr->yco += plyr->yvel;

	plyr->zco  += (TEMPO(plyr->zvel));
	plyr->zvel -= TEMPO(LITTLE_G);

	if (!plyr->fouler)
		check_dunk_foul(plyr);

	if (plyr->fouler && (plyr->top_frame>>8)>playerAnims[abs(plyr->top_anim)].a->numFrames/4)
		start_blend_anim(plyr,dunkus_interruptus_table[dunkus_interruptus_type(plyr)]*((plyr->top_frame>0)? 1:-1));

	if (plyr->zco<0)
	{
		plyr->zco  = 0;
		plyr->zvel = 0;
		plyr->last_speed = 0;

		//shouldn't get here... unless the ball has been blocked out
		if (!possession_flag || plyr->no!=bhp->no)
		{

  			blend_to_end(plyr, TOP_RDY, LEG_RDY, 2);
			SetMain(dunk_up_rou,plyr,deflt);
			plyr->leg_routine  = leg_deflt;
			plyr->top_routine  = top_deflt;
		}
		else if (plyr->fouler)	// Got fouled, hit early
		{
			int	speed;

			layup_release(plyr);
			if (plyr->top_anim>0)
				start_blend_anim(plyr,plyr->top_anim+2);
			else
				start_blend_anim(plyr,plyr->top_anim-2);
			
			SetMain(dunk_up_rou,plyr,landed);
			plyr->ctr2=6;
			speed = (plyr->top_rate * current_dunk->ld_speed * plyr->scale)>>6;

			{
				SW angle;

				angle = current_dunk->ld_angle;
				if (plyr->top_anim<0)	angle =-angle;

				plyr->xvel = ((LFPCos(plyr->angle+angle)>>6) * speed)>>8;
				plyr->yvel = ((LFPSin(plyr->angle+angle)>>6) * speed)>>8;
			}
		}
		else
		{
			//BRK;
			goto oops;
		}
	}

	plyr->angle	+= plyr->angle_vel;
	plyr->ctr2--;

	if (end_animation_test(plyr))
	{
oops:
		//reached basket
		if ((current_dunk->hang == NO) || (!(current_ctrlr->ctrlr & CTRL_SHOOT)) || (!possession_flag) || (foul_flag2))
		{
			//no rim hanging
			time = time_till_land(plyr);

			start_next_anim2(plyr, time);

			//if player is traveling on coming down far slow him down
			dist = MANHATTAN(plyr->xvel, plyr->yvel) * time;
			if (dist > 0x100000)
			{
				plyr->xvel = (plyr->xvel<<8) / (dist>>12);
				plyr->yvel = (plyr->yvel<<8) / (dist>>12);
			}

			SetMain(dunk_up_rou,plyr,dunk_down_rou);
		}
		else
		{
			//start rim hang sequence
			start_blend_anim(plyr, TOP_HANGUP);
			plyr->angle = plyr->basket_angle;
			SetMain(dunk_up_rou,plyr,rim_hang1);
			time_rate=0x100;

			hang_time = lp_ctr;
		}


		if ((BALL_HANDLER) && (!project_flag))
		{
			//if (possession_ticks > 3*ONE_SEC)	assister = -1;

			if (current_dunk->final_dist)
			{
				layup_release(plyr);
			}
			else if (plyr->fouler)
			{
				layup_release(plyr);
			}
			else
			{
#if 1		// This is for in-game replays...
				if (((current_dunk->level>1) || (fast_break_flag && (lp_ctr&1))) && (CAMERAS==1))
				{
					cam3_flag=1;
				}
#endif
				dunk_release(plyr);
			}
		}
	}
}


#define RIM_WIDTH 150

void hang_position(playert *plyr)
{
SW  swing_angle;
int dist;

int basket_y;

	if (!project_flag)
		hang_flag = TRUE;

	dist = RIM_WIDTH + ( plyr->scale * ((256*4)/1024) );

	plyr->xco = -(LFPCos(plyr->angle) * dist) >> 4;

	basket_y  = (plyr->yco > 0) ? BASKET_Y: -BASKET_Y;

	plyr->yco = basket_y
				-((LFPSin(plyr->angle) * dist) >> 4);		//9 inches from centre

	switch (abs(plyr->top_anim))
	{
	case TOP_HANGUP:
		swing_angle = (plyr->top_frame * 0x80)/30;
		break;

	case TOP_HANGLP:
		swing_angle = 0x8000 + (plyr->top_frame * 0x100)/60;
		break;

	case TOP_HANGBACK:
		swing_angle = 0x8000 + (plyr->top_frame * 0x80)/26;
		break;

	default:
		swing_angle = 0;
		break;
	}


	swingHeight = LFPSin(-swing_angle) * 8;

	plyr->zco =
		swingHeight +
		BASKET_Z - ((1075 * 8) * plyr->scale);

	swingHeight >>= 10;
}




void rim_hang1(playert *plyr)
{
	CallChainP(rim_hang1);

	hang_position(plyr);

	if (end_animation_test(plyr))
	{
		if (!(current_ctrlr->ctrlr & CTRL_SHOOT))
		{
			SetMain(rim_hang1,plyr,rim_hang3);
			start_anim(plyr, TOP_HANGBACK);
		}
		else
		{
			SetMain(rim_hang1,plyr,rim_hang2);
			start_next_anim(plyr);
		}
	}
}



void rim_hang2(playert *plyr)
{
	CallChainP(rim_hang2);

	hang_position(plyr);

	if (end_animation_test(plyr))
	{
		if (!(current_ctrlr->ctrlr & CTRL_SHOOT))
		{
			SetMain(rim_hang2,plyr,rim_hang3);
			start_anim(plyr, TOP_HANGBACK);
		}
		else
		{
			if (!project_flag)
				hang_flag=FALSE;

			if (lp_ctr-hang_time>ONE_SEC*2)
			{
				SetMain(rim_hang2,plyr,rim_hang3);
				start_anim(plyr, TOP_HANGBACK);
				FoulSet(rim_hang2,plyr, TECHNICAL);
				free_thrower = plyr->base^5;
			}

			plyr->top_frame = 0;
		}
	}
}


void rim_hang3(playert *plyr)
{
	CallChainP(rim_hang3);

	hang_position(plyr);

	if (end_animation_test(plyr))
	{
		current_dunk = &rim_hang;

		plyr->xvel =
		plyr->yvel =
		plyr->zvel = 0;
		start_next_anim2(plyr, time_till_land(plyr));
		SetMain(rim_hang3,plyr,dunk_down_rou);

		hang_flag = FALSE;
	}
}




void dunk_release(playert *plyr)
{
	int		i;
	playert *bl;

	CallChainP(dunk_release);

	pt3_flag  = FALSE;

	last_shooter=plyr->no;
	if (!project_flag)
	{
		last_dunker=plyr->no;
		ShowTrails=FALSE;
	}

	SetLastHandler(dunk_release,plyr->no);

	// Knock down opposing team when in arcade mode on way-cool dunks
	if (current_dunk->level>=80)
	{
		ShakeScreen=SHAKE_SIZE;

		if (ArcadeMode && current_dunk->max_time!=MAX_T_a)
		{
			for (i=0; i<5; i++)
				start_fall(&player[5-plyr->base+i],player[5-plyr->base+i].basket_angle);

			if (!project_flag)
			{
				Audio_SfxPlay( GameBank, SFX_SBOOM, SfxVolume );
				Replay_SaveSfx( SFX_SBOOM, AUDIO_MAX_VOLUME );
			}
		}
	}

	if (((shot_clock>0) || (SEC24_CLOCK==0)) && (time_left>=0))
	{
		//update stats
		stats_points(plyr, 2);
		if (assister >= 0)
		{
			stats_assist(player+assister);
			//if (cam3_flag==0)	assist_commentary();
		}

		if (!random(4))
			start_celebration(plyr);

		if (cam3_flag==0)
		{
			Crowd_React( plyr->no < 5 ? CROWD_HOME : CROWD_AWAY, CROWD_DUNK );
		}
	}

	SetDunkFlag(dunk_release,FALSE);

	//set ball to go thru hoop
	bl			= &player[10];
	bl->xvel	= bl->yvel = 0;
	follow_player(&ball);

	bl->xco		= 0;
	bl->yco     = current_basket_y;

	scored_flag = (ball.yco>0) ? 1:-1;
	SetMain(dunk_release,bl,made_ball_move);
	Track_Shot( plyr, TRACK_2PT, TRUE );
	Comment( COMMENT_DUNK_SCORE, plyr, 0 );
	OverGfx_ShowScore(ONE_SEC*3/2,ONE_SEC*3);
	bl->zvel	= BALL_DUNK_ZVEL;

	if (current_dunk==&alley_dunk)
		MOMUP(plyr->team,15);

	SetPossession(dunk_release,FALSE);
	in_play_flag	= FALSE;
	reset_markers();

	//rumble PAK
	if (plyr->control)	CtrlMotorOn(plyr->control-1, 10);

//old	AudioPlaySfx(SFX_ID_DUNK1, 22050, 255, 7);
	Audio_SfxPlay( GameBank, SFX_NETG, SfxVolume );
	Replay_SaveSfx( SFX_NETG, AUDIO_MAX_VOLUME );
}





void dunk_down_rou(playert *plyr)
{
short int angle;
int zvel,zco;
int speed;
int time;

	CallChainP(dunk_down_rou);

	//no collision? 
	plyr->xco += plyr->xvel;
	plyr->yco += plyr->yvel;

	zvel = plyr->zvel;
	zco	 = plyr->zco;

    zvel -=LITTLE_G;
	zco  +=zvel;

	if (zco<0)
	{
		plyr->ctr2=6;

		zco	 = 0;
		zvel = 0;

		if (plyr->top_anim >= 0)	start_anim(plyr, plyr->top_anim+1);
		else						start_anim(plyr, plyr->top_anim-1);

		if (!project_flag && scored_flag)
		{
			time = frames_to_go(plyr);
			PlayGfx_SetFaceAnim( plyr->no, FACEANIM_SMILEA + random( 2 ), time );
		}

		SetMain(dunk_down_rou,plyr,landed);

		speed = (plyr->top_rate * current_dunk->ld_speed * plyr->scale)>>6;
		angle = current_dunk->ld_angle;

		if (plyr->top_anim<0)	angle = -angle;

		plyr->xvel = ((LFPCos(plyr->angle + angle)>>6) * speed)>>8;
		plyr->yvel = ((LFPSin(plyr->angle + angle)>>6) * speed)>>8;
		plyr->xvel = (plyr->xvel*plyr->scale)>>8;
		plyr->yvel = (plyr->yvel*plyr->scale)>>8;

	}

	plyr->zvel = zvel;
	plyr->zco  = zco;

	plyr->angle	+= plyr->angle_vel/4;
}


void landed(playert *plyr)
{
	CallChainP(landed);

	if (plyr->ctr2)
		if (!--plyr->ctr2)
			time_rate=0x100;

	//no collision? why? doesn't matter now.
	plyr->xco += plyr->xvel;
	plyr->yco += plyr->yvel;

	//do I go to run or ready frame?
	plyr->last_speed = current_dunk->end_speed;

	{
		int  top_anim;
		bool flag;

		if (current_dunk->end_speed == 0)
		{
			top_anim = TOP_RDYALL;
		}
		else
		{
			if (plyr->top_anim>0)	top_anim = TOP_JOGALL;
			else					top_anim = -TOP_JOGALL;
		}

		flag = blend_to_end(plyr, top_anim, 0, 2);

		if (plyr->top_blend_ctr==0x200)
		{
			SW  a;

			a = anim_angle(plyr);
			current_dunk->land_twist = a-plyr->angle;
		}
		

		if ((top_anim==plyr->top_anim) && (!flag))
		{
			int a;

			a = (plyr->top_blend_speed*current_dunk->land_twist)>>8;

			plyr->angle += a;
		}

		if (flag)
		{
			SetMain(landed,plyr,deflt);
			if (plyr->top_anim==TOP_RDYALL)
			{
				plyr->top_anim = TOP_RDY;
				plyr->leg_anim = LEG_RDY;
				plyr->leg_routine = leg_deflt;
			}
			else
			{
				plyr->top_anim = TOP_JOG;
				plyr->leg_anim = LEG_JOG;
				plyr->leg_routine = running;
			}
			plyr->top_routine  = top_deflt;

			//last_handler = plyr->no;
			time_rate=0x100;
		}
		else
		{
			return;
		}
	}


//#if 0 
#ifndef ML
	
	//don't call up replay for hanging dunks
	if (plyr->last_top_anim != TOP_HANGLAND)
	{
		if ((scored_flag != 0))// hack! - removed just for testing -> && (lp_ctr-last_replay > (ONE_MIN/2)))
		{
				
#ifndef DEBUG					
			if (lp_ctr-last_replay > (ONE_MIN/2))
#endif
			{
				last_replay = lp_ctr;

				switch(CAMERAS)
				{
				case 0:
					CamStartActionReplay(0);
					start_replay(-1);
					break;

				case 1:
					//CameraSpecialEnd();
					break;
				}
			}
		}
	}
#endif

}



void receive_alley1(playert *plyr)
{
	CallChainP(receive_alley1);

	if ((possession_flag) || (ball.ctr2 > ALLEY_TIME_DIFF))
	{
		if (plyr->basket_dist>0x200000)
		{
			current_ctrlr->force   = 0xf0;
			current_ctrlr->d_angle = plyr->basket_angle;
		}
	}
	else
	{
		SW  a_diff;
		int anim=TOP_ALLY1;

		reset_play();

		a_diff = plyr->ball_angle - plyr->angle;
		if (a_diff<0)	anim = -anim;

		start_blend_anim2(plyr, anim, 10);
		plyr->angle = plyr->basket_angle;
		start_vels(plyr, 40, (SW)plyr->angle);
		SetMain(receive_alley1,plyr,receive_alley2);
		plyr->leg_routine  = NULL;
		plyr->top_routine  = NULL;
	}
}



void receive_alley2(playert *plyr)
{
int x_diff, y_diff, z_diff;
int time;
int end_frame;
int xv, yv;

	CallChainP(receive_alley2);

	xv = plyr->xvel;
	yv = plyr->yvel;
	run_collision(plyr, plyr->xvel, plyr->yvel);
	plyr->xvel = xv;
	plyr->yvel = yv;

	if (possession_flag)
	{
		set_default(plyr);
		return;
	}

	if (end_animation_test(plyr))
	{
		if (CAMERAS==1)	CameraSpecialStart(0);


		SetMain(receive_alley2,plyr,receive_alley3);

		time = ball.ctr2;

		if (time <= 0)
		{
			set_default(plyr);
			SetMain(receive_alley2,&ball,missed_pass_move);
			alley_flag=FALSE;
			return;
		}

		start_next_anim(plyr);
		end_frame = frames_to_go(plyr)-1;
		plyr->top_rate = ((end_frame-ALLEY_HOLD)<<8)/time;

/*
		PlayGfxEvalBall(TOP_ALLY2,
						end_frame,
						plyr->xco,
						plyr->zco,
						plyr->yco,
						plyr->angle,
						0,
						plyr->scale,
						&x_diff,
						&z_diff,
						&y_diff);
*/

		plyr->top_frame = (end_frame-ALLEY_HOLD)<<8;
		PlayGfxEvalBall(plyr, &x_diff, &z_diff, &y_diff);
		plyr->top_frame = 0;

		x_diff	   = ball.target_x - x_diff;
		plyr->xvel = x_diff / time;

		y_diff	   = ball.target_y - y_diff;
		plyr->yvel = y_diff / time;

		z_diff	   = ALLEY_Z - z_diff;
 		plyr->zvel = (z_diff/time) + ((time-1)*(LITTLE_G/2));

		if (plyr->zvel > (LITTLE_G*12))
		{
			set_default(plyr);
			SetMain(receive_alley2,&ball,missed_pass_move);
			alley_flag=FALSE;
			return;
		}

		if (MANHATTAN(plyr->xvel, plyr->yvel) > 0x100000)
		{
			set_default(plyr);
			SetMain(receive_alley2,&ball,missed_pass_move);
			alley_flag=FALSE;
			return;
		}

		plyr->zco  = 1;

	}
}


void receive_alley3(playert *plyr)
{
	CallChainP(receive_alley3);

	plyr->xco += plyr->xvel;
	plyr->yco += plyr->yvel;

	plyr->zco += plyr->zvel;
    plyr->zvel -=LITTLE_G;

	if (ball.ctr2 == 0)
	{
		alley_flag = FALSE;
		plyr->angle_vel = 0;

		// If someone else got the ball (e.g. stole it from the passer)
		if (possession_flag)
		{
			SetMain(receive_alley3,plyr,rebound_rou2);
			return;
		}

		catch_ball(plyr);
		SetDunkFlag(receive_alley3,2);
		scored_flag=0;

		SetMain(receive_alley3,plyr,dunk_up_rou);

		db_out(receive_alley3,"Increment FGA");
		plyr->plyrRAM->cl___pStatGame.uw___pFGA += 1;
		plyr->teamRAM->cl___tStatGame.uw___tFGA += 1;

		current_dunk = &alley_dunk;
	}
}


void dunk_monitor(void)
{
	if (dunk_flag)
	{
		dunk_ctr++;
		if (dunk_ctr > 3*ONE_SEC)	BRK;
	}
	else
	{
		dunk_ctr=0;
	}
}


void check_dunk_foul(playert *plyr)
{
	int		x,y;
	int		dx,dy;
	playert	*p,*e;

	if (!DEFENSIVE_FOULS)
		return;

	if (plyr->fouler)
		return;

	if (!possession_flag)
		return;

	x=plyr->xco;
	y=plyr->yco;

	p=&player[plyr->base^5];
	e=p+5;
	
	do
	{
		// If the player has already blocked the ball, he won't be committing the foul
		if (p->no==last_blocker)
			continue;

		dx=p->xco-plyr->xco;
		dy=p->yco-plyr->yco;
		if (collide_check(plyr,p,dx,dy,COL_DI)!=-1)
		{
			plyr->xco=x;
			plyr->yco=y;
			if (ReadRnd250()<3)	
			{
				plyr->fouler=p;
				FoulSet(check_dunk_foul,p,HACKING2);
				if (plyr->fouler->no==last_blocker)
				{
					player[last_blocker].plyrRAM->cl___pStatGame.uw___pBLK -= 1;
					player[last_blocker].teamRAM->cl___tStatGame.uw___tBLK -= 1;
				}
			}
			break;
		}
	} while(++p<e);
}

int dunkus_interruptus_type(playert *plyr)
{
	if (current_dunk->final_dist)
		return 0;

	switch(abs(plyr->top_anim))
	{
		// These are 2-handed dunks
		case TOP_2HD1:
		case TOP_2HD2:
		case TOP_S2HD1:
		case TOP_S2HD2:
		case TOP_S2HDUNK1:
		case TOP_S2HDUNK2:
		case TOP_3601:
		case TOP_3602:
		case TOP_MOND1:
		case TOP_MOND2:
		case TOP_2HRD1:
		case TOP_2HRD2:
		case TOP_S2HRD1:
		case TOP_S2HRD2:
		case TOP_2HAWORLD1:
		case TOP_2HAWORLD2:
			return 2;

		// If not a 2-hander, must have been a 1-hander
		default:
			return	1;
	}
}
