//	    
//	headers.h
//

#ifndef	MAP_H		  
#define	MAP_H
#define MAX_MAP_NUMBER   19


#define   SECONDLAP     1
#define   FINALLAP      2
#define   FINISHLAP     3
#define   CHECK_RADIUS      12.0

#define   WALLFLAG        0x8000
#define   TWOFACEFLAG     0x4000
#define   FLATFLAG        0x2000

#define   XAXIS_FACE      0x8000
#define   YAXIS_FACE      0x4000
#define   ZAXIS_FACE      0x2000
#define   SHADOW_FACE	  0x1000
#define   OUTSIDE_FACE	   0x800
#define   SLOPE_FACE	   0x400
#define   TWO_FACE	   0x200

#define   XAXIS_FACEt      0x80
#define   YAXIS_FACEt      0x40
#define   ZAXIS_FACEt      0x20

#define   ALLAXIS    XAXIS_FACE+YAXIS_FACE+ZAXIS_FACE

#define  KT1	  0
#define  KT2	  1
#define  KT3	  2
#define  KT4	  3
#define  KT5	  4
#define  KT6	  5
#define  KT7	  6
#define  KT8	  7
#define  KT9	  8
#define  KT10	  9
#define  KT11	  10
#define  KT12	  11
#define  KT13	  12
#define  KT14	  13
#define  KT15	  14
#define  KT16	  15
#define  KT17	  16
#define  KT18	  17
#define  KT19	  18
#define  KT20	  19



///////////////////////TIRE CHECK DATA///////////////////////////////
typedef struct {
	FVector position; 
	unsigned char status;			 //true =hit!!! false=not hit!!!
	unsigned char last_axis;
	ushort last_pointer;
	float hight;
}    TIRE, *TIREPTR;

typedef struct {
		ushort flag;
		short fogstart;
		short fogend;
		short pointer;
}    SCREENCONTROL_t;

typedef union {
		SCREENCONTROL_t s;
	long long int force_structure_alignment;
}    SCREENCONTROL;
///////////////////////FACE CHECK DATA///////////////////////////////
typedef struct {
		unsigned short flag; 
					//1st. bit   =shadow bit (1=shadow)
					//higher 3BIT = face up vector
		unsigned short status; 
		short minx;
		short miny;
		short minz;
		short maxx;
		short maxy;
		short maxz;
		Vtx *p1;
		Vtx *p2;
		Vtx *p3;
		float sola;
		float solb;
		float solc;
		float sold;
	   //	float dummy;
}   FACE, *FACEPTR;

typedef struct{
	       unsigned short pointer;
	       unsigned short number;
}   COLLI, *COLLIPTR;

typedef  struct{
		short pointx;
		short pointy;
		short pointz;
		unsigned short speed; 
}   POINT_t;


typedef union {
	POINT_t       p;
	long long int force_structure_alignment;
}POINT;

///////////////////map.c/////////////////////////////////////////////

extern void initial_bump(BUMP *bump);
extern uint	 facenumber ;
extern int       wall_flag;
extern int       flat_flag;
extern int       twoface_flag;
extern float calc_hight(float , float ,float ,ushort);
extern void  make_collision_table(void);
extern void  search_list(uint);	 //display list's pointer
extern void  search_list2(uint,char);	 //display list's pointer
extern void  search_list3(uint,char,ushort);	 //display list's pointer

extern void make_wave_vertex(uint address,short px,short pz,float phase,float amplitude);
extern void make_water_vertex(uint,char,unsigned char,unsigned char,unsigned char);
extern void make_water_vertex2(uint);
extern void scroll_map_image(uint address,int uls,int ult);
	
	
extern float get_hight(BUMP *bump,FVector position);
						      
extern void initial_map(void);
extern float check_hight(float , float ,float);
extern ushort  check_bump(BUMP *bump,float,float,float,float);
extern void   bump_object(OBJECT *obj);
extern void  bump_velocity(FVector bump,float,FVector velo,float);
extern short map_number;
extern short last_map_number;
extern uint   point_address[3];
extern float  map_light[3];

extern char  check_status(ushort pointer);
extern short check_shadow(ushort pointer);
extern short check_slope(ushort pointer);
extern short check_outside(ushort pointer);
extern short check_area(ushort pointer);
extern uchar check_shadow_color(CAR *kart);


extern char	_COURSE1SegmentRomStart[], _COURSE1SegmentRomEnd[];
extern char	_COURSE2SegmentRomStart[], _COURSE2SegmentRomEnd[];
extern char	_COURSE3SegmentRomStart[], _COURSE3SegmentRomEnd[];
extern char	_COURSE4SegmentRomStart[], _COURSE4SegmentRomEnd[];
extern char	_COURSE5SegmentRomStart[], _COURSE5SegmentRomEnd[];
extern char	_COURSE6SegmentRomStart[], _COURSE6SegmentRomEnd[];
extern char	_COURSE7SegmentRomStart[], _COURSE7SegmentRomEnd[];
extern char	_COURSE8SegmentRomStart[], _COURSE8SegmentRomEnd[];
extern char	_COURSE9SegmentRomStart[], _COURSE9SegmentRomEnd[];
extern char	_COURSE10SegmentRomStart[], _COURSE10SegmentRomEnd[];
extern char	_COURSE11SegmentRomStart[], _COURSE11SegmentRomEnd[];
extern char	_COURSE12SegmentRomStart[], _COURSE12SegmentRomEnd[];
extern char	_COURSE13SegmentRomStart[], _COURSE13SegmentRomEnd[];
extern char	_COURSE14SegmentRomStart[], _COURSE14SegmentRomEnd[];
extern char	_COURSE15SegmentRomStart[], _COURSE15SegmentRomEnd[];
extern char	_COURSE16SegmentRomStart[], _COURSE16SegmentRomEnd[];
extern char	_COURSE17SegmentRomStart[], _COURSE17SegmentRomEnd[];
extern char	_COURSE18SegmentRomStart[], _COURSE18SegmentRomEnd[];
extern char	_COURSE19SegmentRomStart[], _COURSE19SegmentRomEnd[];
extern char	_COURSE20SegmentRomStart[], _COURSE20SegmentRomEnd[];

extern char	_KT1PKSegmentRomStart[],  _KT1PKSegmentRomEnd[];
extern char	_KT2PKSegmentRomStart[],  _KT2PKSegmentRomEnd[];
extern char	_KT3PKSegmentRomStart[],  _KT3PKSegmentRomEnd[];
extern char	_KT4PKSegmentRomStart[],  _KT4PKSegmentRomEnd[];
extern char	_KT5PKSegmentRomStart[],  _KT5PKSegmentRomEnd[];
extern char	_KT6PKSegmentRomStart[],  _KT6PKSegmentRomEnd[];
extern char	_KT7PKSegmentRomStart[],  _KT7PKSegmentRomEnd[];
extern char	_KT8PKSegmentRomStart[],  _KT8PKSegmentRomEnd[];
extern char	_KT9PKSegmentRomStart[],  _KT9PKSegmentRomEnd[];
extern char	_KT10PKSegmentRomStart[], _KT10PKSegmentRomEnd[];
extern char	_KT11PKSegmentRomStart[], _KT11PKSegmentRomEnd[];
extern char	_KT12PKSegmentRomStart[], _KT12PKSegmentRomEnd[];
extern char	_KT13PKSegmentRomStart[], _KT13PKSegmentRomEnd[];
extern char	_KT14PKSegmentRomStart[], _KT14PKSegmentRomEnd[];
extern char	_KT15PKSegmentRomStart[], _KT15PKSegmentRomEnd[];
extern char	_KT16PKSegmentRomStart[], _KT16PKSegmentRomEnd[];
extern char	_KT17PKSegmentRomStart[], _KT17PKSegmentRomEnd[];
extern char	_KT18PKSegmentRomStart[], _KT18PKSegmentRomEnd[];
extern char	_KT19PKSegmentRomStart[], _KT19PKSegmentRomEnd[];
extern char	_KT20PKSegmentRomStart[], _KT20PKSegmentRomEnd[];


extern char	_KT1EXTSegmentRomStart[],  _KT1EXTSegmentRomEnd[];
extern char	_KT2EXTSegmentRomStart[],  _KT2EXTSegmentRomEnd[];
extern char	_KT3EXTSegmentRomStart[],  _KT3EXTSegmentRomEnd[];
extern char	_KT4EXTSegmentRomStart[],  _KT4EXTSegmentRomEnd[];
extern char	_KT5EXTSegmentRomStart[],  _KT5EXTSegmentRomEnd[];
extern char	_KT6EXTSegmentRomStart[],  _KT6EXTSegmentRomEnd[];
extern char	_KT7EXTSegmentRomStart[],  _KT7EXTSegmentRomEnd[];
extern char	_KT8EXTSegmentRomStart[],  _KT8EXTSegmentRomEnd[];
extern char	_KT9EXTSegmentRomStart[],  _KT9EXTSegmentRomEnd[];
extern char	_KT10EXTSegmentRomStart[], _KT10EXTSegmentRomEnd[];
extern char	_KT11EXTSegmentRomStart[], _KT11EXTSegmentRomEnd[];
extern char	_KT12EXTSegmentRomStart[], _KT12EXTSegmentRomEnd[];
extern char	_KT13EXTSegmentRomStart[], _KT13EXTSegmentRomEnd[];
extern char	_KT14EXTSegmentRomStart[], _KT14EXTSegmentRomEnd[];
extern char	_KT15EXTSegmentRomStart[], _KT15EXTSegmentRomEnd[];
extern char	_KT16EXTSegmentRomStart[], _KT16EXTSegmentRomEnd[];
extern char	_KT17EXTSegmentRomStart[], _KT17EXTSegmentRomEnd[];
extern char	_KT18EXTSegmentRomStart[], _KT18EXTSegmentRomEnd[];
extern char	_KT19EXTSegmentRomStart[], _KT19EXTSegmentRomEnd[];
extern char	_KT20EXTSegmentRomStart[], _KT20EXTSegmentRomEnd[];




#define KT1size  _KT1PKSegmentRomEnd-_KT1PKSegmentRomStart
#define KT2size  _KT2PKSegmentRomEnd-_KT2PKSegmentRomStart
#define KT3size  _KT3PKSegmentRomEnd-_KT3PKSegmentRomStart
#define KT4size  _KT4PKSegmentRomEnd-_KT4PKSegmentRomStart
#define KT5size  _KT5PKSegmentRomEnd-_KT5PKSegmentRomStart
#define KT6size  _KT6PKSegmentRomEnd-_KT6PKSegmentRomStart
#define KT7size  _KT7PKSegmentRomEnd-_KT7PKSegmentRomStart
#define KT8size  _KT8PKSegmentRomEnd-_KT8PKSegmentRomStart
#define KT9size  _KT9PKSegmentRomEnd-_KT9PKSegmentRomStart
#define KT10size  _KT10PKSegmentRomEnd-_KT10PKSegmentRomStart
#define KT11size  _KT11PKSegmentRomEnd-_KT11PKSegmentRomStart
#define KT12size  _KT12PKSegmentRomEnd-_KT12PKSegmentRomStart
#define KT13size  _KT13PKSegmentRomEnd-_KT13PKSegmentRomStart
#define KT14size  _KT14PKSegmentRomEnd-_KT14PKSegmentRomStart
#define KT15size  _KT15PKSegmentRomEnd-_KT15PKSegmentRomStart
#define KT16size  _KT16PKSegmentRomEnd-_KT16PKSegmentRomStart
#define KT17size  _KT17PKSegmentRomEnd-_KT17PKSegmentRomStart
#define KT18size  _KT18PKSegmentRomEnd-_KT18PKSegmentRomStart
#define KT19size  _KT19PKSegmentRomEnd-_KT19PKSegmentRomStart
#define KT20size  _KT20PKSegmentRomEnd-_KT20PKSegmentRomStart

#define course1_volume   _COURSE1SegmentRomEnd-_COURSE1SegmentRomStart
#define course2_volume   _COURSE2SegmentRomEnd-_COURSE2SegmentRomStart
#define course3_volume   _COURSE3SegmentRomEnd-_COURSE3SegmentRomStart
#define course4_volume   _COURSE4SegmentRomEnd-_COURSE4SegmentRomStart
#define course5_volume   _COURSE5SegmentRomEnd-_COURSE5SegmentRomStart

extern short   maximum_x,minimum_x;
extern short   maximum_y,minimum_y;
extern short   maximum_z,minimum_z;
extern short   maxlimmity,minlimmity;
extern ushort   point_number;

//////////////////////////BG CHECK STATUS///////////////////////////////////

#define NOTHING 		0
#define ASPHALT 		1
#define DIRT			2
#define SAND			3
#define STONE			4
#define SNOW                    5
#define WOOD			6
#define SAND_TRAP		7
#define GRASS			8
#define ICE  			9
#define WET_SAND		10
#define WET_SNOW                11
#define ROCK                    12
#define DIRT_TRAP               13
#define RAILWAY                 14
#define CAVE                    15
#define BRIDGE                  16
#define KIBASHI                 17


#define DASHMARK2		252	    //for JUNGLE
#define JUMPMARK		253	    //for JUNGLE
#define DASHMARK		254	    //for PEACH CIRCUIT
#define OTHER 			255



#endif

