/*
//
//	us_kwgfx.c
//
*/

#include "headers.h"
#include "include/kawano2.h"
#include "RESULT/result.h"
//
// ¥Ç¥Ð¥Ã¥°´ØÏ¢¤Î #define
//

//#define ROM 0
#define DP_TEST_FLAG 0		/*¥É¥é¥¤¥Ð¡¼¥º¥Ý¥¤¥ó¥È¤Î¥Æ¥¹¥ÈÍÑ¥Õ¥é¥°*/
#define DISP_TEX_BUFF_NUM_SWITCH 0 /* tex_buff»ÈÍÑ¾õ¶· */
#define DISP_FREE_MEMORY_SWITCH 0 /* »Ä¤êfree¥á¥â¥êÉ½¼¨ */
#define DISP_GLIST_SIZE_SWITCH 0 /* »Ä¤êglist¥á¥â¥êÉ½¼¨ */
#define DISP_DMA_MELT_TIME_SWITCH 0 /* DMA & ²òÅà»þ´ÖÉ½¼¨ */
#define VS_LOSE_ALL_SWITCH 0 /* vs¥ê¥¶¥ë¥È¤ÇÁ´°÷Éé¤±¥Ý¡¼¥º */
#define TITLE_UNLIMITED_SWITCH 0 /* ¥¿¥¤¥È¥ë²èÌÌ¤¬¥Ü¥¿¥ó¤ò²¡¤µ¤Ê¤¤¸Â¤êÂ³¤¯ */
#define DISP_MATRIX_COUNT_SWITCH 0 /* matrix_count»ÈÍÑ¾õ¶· */
#define ENDING_DEBUG_SWITCH 0 /* endingÍÑ¥Ç¥Ð¥°¥¹¥¤¥Ã¥Á */
#define CANNOT_GHOST_SAVE_SWITCH 0/* ¥´¡¼¥¹¥È¤Î¥»¡¼¥Ö¤Ë¥«¡¼¥½¥ë¤¬¹Ô¤«¤Ê¤¤ */
//
// ¥·¥¹¥Æ¥à´ØÏ¢¤Î #define
//

//#define MAX_TEX_BUFF_NUM 580000 //640*480 = 307200
//#define MAX_TEX_BUFF_NUM 227800 //640*480 = 307200
//#define MAX_TEX_BUFF_NUM 286800 //640*480 = 307200
#define MAX_TEX_BUFF_NUM 295000 //640*480 = 307200

//#define MAX_TEX_BUFF_NUM2 12000 //640*480 = 307200
#define MAX_TEX_BUFF_NUM2 37500 //640*480 = 307200
#define SEQ_DATA_MAX 16
#define SEQ_CHANGE_VS_MAX 4
#define OBJ_BLOCK_MAX 32
//#define TEX_BLOCK_PTR_MAX 64
#define TEX_BLOCK_PTR_MAX 200

#define MELT_BUFF_SIZE 0xce00
//#define MELT_BUFF_SIZE 0x9c00
#define MELT_BUFF_SIZE2 0x2800
//#define MELT_BUFF_SIZE2 0x3000

#define KDL_BUFF_SIZE 0x1000
#define KDL_DATA_MAX 8

#define ALL_PALETTE_NUMBER 6	/*Ê¸»úÉ½¼¨¤Ë»È¤¤¤¿¤¤¥Ñ¥ì¥Ã¥È¤ÎÁí¿ô*/

//
// É½¼¨°ÌÃÖ,¥¿¥¤¥ß¥ó¥°¤Ë´Ø¤¹¤ë #define
//

#define TITLE_TIME 300
//#define TITLE_TIME 60
#define DEMO_NUMBER_MAX 6

#define CP_GNOTE_Y 105

#define GSEL_PBOX_X 63
#define GSEL_PBOX_Y 53
#define GSEL_RBOX_X GSEL_PBOX_X
#define GSEL_RBOX_Y 17
#define GSEL_POPBOX_Y 18
#define GSEL_MODE_OFFSET_Y 65
#define MSEL_CUPBOX_X 64
#define MSEL_CUPBOX_Y 39
#define MSEL_BESTBOX_X 100
#define MSEL_BESTBOX_Y 39

#define SEL_OKBOX_X 31
#define SEL_OKBOX_Y 19

/* ¥Õ¥©¥ó¥È´ØÏ¢ */
#ifdef CHINA
#define FONT_WIDTH_CHINESE 26
#endif
#define FONT_WIDTH_SPACE 7
#define F_SIZE0 15	//É¸½àÅª¤Ê²¾Ì¾¤Î¥Õ¥©¥ó¥ÈÉý
#define F_SIZE1 14	//É¸½àÅª¤Ê¤Á¤Ã¤µ¤¤²¾Ì¾¤Î¥Õ¥©¥ó¥ÈÉý
#define F_SIZE2 29	//Á´³Ñ¿ô»ú¤Î¥Õ¥©¥ó¥ÈÉý
#define F_SIZE3 23	//st,rdÅù¤Î£²¤Ä¤Ç£±¤ÄÊ¸»ú¤Î¥Õ¥©¥ó¥ÈÉý

/*¥É¥é¥¤¥Ð¡¼¥º¥Ý¥¤¥ó¥È*/
#define RT_WAIT_TIME1 90
#define DP_WAIT_TIME1 60
#define DP_WAIT_TIME2 0
#define DP_WAIT_TIME3 30
#define DP_SORT_TIME 5
#define DP_SCROLL_SPEED_NORMAL	16
#define DP_SCROLL_SPEED_SKIP	32
//#define DP_SCROLL_SPEED_NORMAL	8
//#define DP_SCROLL_SPEED_SKIP	16

#define VS_RESULT_WAIT_TIME1 30

#define TA_RESULT_WAIT_TIME1 20

#define GP_ENDING_WAIT_TIME1 30


// external
extern Dynamic *dynamicp;


// for allocatememory
unsigned short *tex_buff;
unsigned int *melt_buff;
unsigned char *k_work;
unsigned char *additional_point;/*¥ê¥¶¥ë¥È¤Î²Ã»»ÅÀ¿ô¥Ð¥Ã¥Õ¥¡*/
Gfx *kdl_buff;/*¥²¡¼¥àÃæ¤Ë¤Ä¤¯¤ë¥Ç¥£¥¹¥×¥ì¥¤¥ê¥¹¥ÈÍÑ¤Î¥Ð¥Ã¥Õ¥¡*/

char d_points[8];
char d_points_rank[8];
char k_skip_flg;/*¥¹¥­¥Ã¥×¥â¡¼¥É¤Î on/off*/
char k_skip_status;/*¥¹¥­¥Ã¥×¤¹¤ë¤È¤­¤Î¥­¡¼¤Î¾õÂÖµ­²±¥Õ¥é¥°*/

OBJBlock obj_block[OBJ_BLOCK_MAX];
SeqData seq_data_block[SEQ_DATA_MAX];
ChangeTexBuff change_tex_buff_block[SEQ_DATA_MAX+1];
ChangeTexBuff_vs change_tex_buff_block_vs[SEQ_CHANGE_VS_MAX+1];

int tex_buff_num;
TexMap tex_block_ptr[TEX_BLOCK_PTR_MAX];
int	all_tex_block_num;

Gfx *kdl_buff_ptr;
int all_kdl_block_num;
KDLBlockBuff kdl_buff_block[KDL_DATA_MAX];

int k_flash_counter;
char fade_flg[5];
unsigned fade_counter[5],fade_counter2[5];
POS_XY old_screen_position[5];
POS_XY old_screen_size[5];
char thunder_flg[4];
unsigned thunder_counter[4];

int vc_color_num[2];
int vc_color_step[2];

char afont_color;
char afont_continuous_flag;

OSPfs pfs_k;
OSPfs pfs_k2;
OSPfsState pfsState[16];
s32 pfsStateRet[16];
s32 pfsFileNumMax,pfsFileNum,pfsFreeBlocks,file_no_kart,file_no_kart2;

EEPROM_DATA_KART eeprom_save_data;

unsigned char rankin_fanfare;
unsigned char ending_message_flg;



POS_XY lgsel_default_positions[] = {
	{ 61, 17},//LOGO
	{ 21, 62},//1P
	{ 92, 62},//2P
	{163, 62},//3P
	{234, 62},//4P
	{266,200},//ok
	{ 21,200},//option
	{ 85,200},//records
	{  0,  0} //dummy
};

POS_XY gsel_popup_positions[] = {
	{GSEL_RBOX_X+1,GSEL_MODE_OFFSET_Y},
	{GSEL_RBOX_X+1,GSEL_MODE_OFFSET_Y+GSEL_POPBOX_Y},
	{GSEL_RBOX_X+1,GSEL_MODE_OFFSET_Y+GSEL_POPBOX_Y*2},
	{GSEL_RBOX_X+1,GSEL_MODE_OFFSET_Y+GSEL_POPBOX_Y*3}
};



POS_XY lpsel_cursor_position[] = {
	{ 24, 63},
	{ 93, 63},
	{162, 63},
	{231, 63},
	{ 24,145},
	{ 93,145},
	{162,145},
	{231,145}
};

POS_XY msel_cupbox_position[] = {
	{ 23, 59},
	{ 93, 59},
	{162, 59},
	{232, 59}
};

POS_XY msel_map4box_position[] = {
	{ 23, 112},
	{ 87, 112},
	{ 23, 151},
	{ 87, 151}
};

POS_XY lpsel_character_ok_position[] = {
	{128, 88},{  0,  0},{  0,  0},{  0,  0},
	{128, 63},{128,145},{  0,  0},{  0,  0},
	{ 90, 88},{166, 88},{  0,  0},{  0,  0},
	{ 90, 63},{166, 63},{ 90,145},{166,145}
};


POS_XY lmsel_circuit_position[] = {
	{157,112},{296,129},
	{157,136},{296,153},
	{157,160},{296,177},
	{157,184},{296,201}
};

POS_XY msel_bestbox_default_position[] = {
	{ -150, 59},
	{ 370, 59}
};

POS_XY msel_bestbox_target_position[] = {
	{ 23, 59},
	{ 297-MSEL_BESTBOX_X, 59},
};

POS_XY msel_cup_positions[] = {
	{  40, 115},
	{  40, 60}
};

POS_XY cp_cursor_position[] = {
	{62,67},{161,67},
	{62,197},{161,197}
};

POS_XY vs_face_start_position[] = {
	{-64,240},{320,240},{-64,-64},{-64,-64},
	{-64,-64},{320,-64},{-64,240},{-64,-64},
	{-64,-64},{320,-64},{-64,240},{320,240}
};

POS_XY vs_face_start_position2 = {320,35};

POS_XY vs_face_target_position[] = {
	{ 80, 35},{176, 35},{0,0},{0,0},
	{ 50, 35},{128, 35},{206, 35},{0,0},
	{ 24, 35},{ 93, 35},{162, 35},{231, 35}
};

POS_XY vs_result_cursor_position[] = {
	{ 97,167},{ 97,182},{ 97,197},{ 97,212}
};

POS_XY vs_result_winlose_position[] = {
//	{25,75},{240,75}
	{48,75},{265,75}
};

POS_XY ta_result_cursor_position[] = {
	{173,141},{173,154},{173,167},{173,180},{173,193},{173,206}
};


POS_XY ta_ghostb_cursor_position[] = {
	{172,165},{172,195}
};

POS_XY ta_ghostc_cursor_position[] = {
	{192,179},{192,194}
};


POS_XY tar_select_cursor_position[] = {
	{ 97,148},{ 97,161},{ 97,174},{ 97,187},{ 97,200},{ 97,213}
};


POS_XY tar_ghostb_cursor_position[] = {
	{82,144},{82,164}
};

POS_XY tar_ghostc_cursor_position[] = {
	{118,149},{118,164}
};


POS_XY tsel_cup_positions[] = {
	{ 23, 10},	{ 93, 10},
	{162, 10},	{232, 10},
	{ 23, 10}
};

POS_XY ending1_messages_start_position[] = {
	{ 330, 50},
	{-160,212},
	{160,270},
	{-160,190},
	{323, 90}
};

POS_XY ending1_messages_target_position[] = {
	{160, 50},
	{155,212},
	{160, 80},
	{155,190},
	{128, 90}
};



P_COLOR psel_cursor_color[] = {
	{0,243,243,255},
	{255,168,195,255},
	{255,254,122,255},
	{123,252,123,255},
	{255,255,0,255}//for tsel_cursor
};

P_COLOR tsel_cursor_color[] = {
	{0,243,243,255},
	{255,168,195,255},
	{255,255,0,255}//for tsel_cursor
};

P_COLOR titleback_color[] = {
	{255,175,175,255},
	{175,255,175,255},
	{175,175,255,255}
};

const short font_width[] = {
	12/*a*/,13/*b*/,11/*c*/,11/*d*/,10/*e*/,
	11/*f*/,11/*g*/,13/*h*/, 7/*i*/,10/*j*/,
	12/*k*/,10/*l*/,18/*m*/,13/*n*/,12/*o*/,
	12/*p*/,12/*q*/,12/*r*/,11/*s*/,13/*t*/,
	12/*u*/,12/*v*/,18/*w*/,13/*x*/,12/*y*/,
	12/*z*/,10/*!*/,10/*-*/,10/*?*/, 6/*'*/,
	30/*pts*/,6/*.*/,
	10/*0*/, 8/*1*/,11/*2*/,12/*3*/,12/*4*/,
	13/*5*/,10/*6*/,11/*7*/,10/*8*/,10/*9*/,
	8/*"*/,28/*..*/,10/*+*/,16/*cc*/,
	F_SIZE0/*¡¤*/,16/*dummy*/,
	F_SIZE0/*¤¢*/,F_SIZE0/*¤¤*/,F_SIZE0/*¤¦*/,F_SIZE0/*¤¨*/,F_SIZE0/*¤ª*/,
	F_SIZE0/*¤«*/,F_SIZE0/*¤¬*/,F_SIZE0/*¤­*/,F_SIZE0/*¤®*/,F_SIZE0/*¤¯*/,
	F_SIZE0/*¤°*/,F_SIZE0/*¤±*/,F_SIZE0/*¤²*/,F_SIZE0/*¤³*/,F_SIZE0/*¤´*/,
	F_SIZE0/*¤µ*/,F_SIZE0/*¤¶*/,F_SIZE0/*¤·*/,F_SIZE0/*¤¸*/,F_SIZE0/*¤¹*/,
	F_SIZE0/*¤º*/,F_SIZE0/*¤»*/,F_SIZE0/*¤¼*/,F_SIZE0/*¤½*/,F_SIZE0/*¤¾*/,
	F_SIZE0/*¤¿*/,F_SIZE0/*¤À*/,F_SIZE0/*¤Á*/,F_SIZE0/*¤Â*/,
	F_SIZE1/*¤Ã*/,F_SIZE0/*¤Ä*/,F_SIZE0/*¤Å*/,
	F_SIZE0/*¤Æ*/,F_SIZE0/*¤Ç*/,F_SIZE0/*¤È*/,F_SIZE0/*¤É*/,
	F_SIZE0/*¤Ê*/,F_SIZE0/*¤Ë*/,F_SIZE0/*¤Ì*/,F_SIZE0/*¤Í*/,F_SIZE0/*¤Î*/,
	F_SIZE0/*¤Ï*/,F_SIZE0/*¤Ð*/,F_SIZE0/*¤Ñ*/,F_SIZE0/*¤Ò*/,F_SIZE0/*¤Ó*/,
	F_SIZE0/*¤Ô*/,F_SIZE0/*¤Õ*/,F_SIZE0/*¤Ö*/,F_SIZE0/*¤×*/,F_SIZE0/*¤Ø*/,
	F_SIZE0/*¤Ù*/,F_SIZE0/*¤Ú*/,F_SIZE0/*¤Û*/,F_SIZE0/*¤Ü*/,F_SIZE0/*¤Ý*/,
	F_SIZE0/*¤Þ*/,F_SIZE0/*¤ß*/,F_SIZE0/*¤à*/,F_SIZE0/*¤á*/,F_SIZE0/*¤â*/,
	F_SIZE1/*¤ã*/,F_SIZE0/*¤ä*/,F_SIZE1/*¤å*/,F_SIZE0/*¤æ*/,
	F_SIZE1/*¤ç*/,F_SIZE0/*¤è*/,
	F_SIZE0/*¤é*/,F_SIZE0/*¤ê*/,F_SIZE0/*¤ë*/,F_SIZE0/*¤ì*/,F_SIZE0/*¤í*/,
	F_SIZE0/*¤ï*/,F_SIZE0/*¤ò*/,F_SIZE0/*¤ó*/,
	F_SIZE1/*¤¡*/,F_SIZE1/*¤£*/,F_SIZE1/*¤¥*/,
	F_SIZE1/*¤§*/,F_SIZE1/*¤©*/,
	F_SIZE0/*¥¢*/,F_SIZE0/*¥¤*/,F_SIZE0/*¥¦*/,F_SIZE0/*¥¨*/,F_SIZE0/*¥ª*/,
	F_SIZE0/*¥«*/,F_SIZE0/*¥¬*/,F_SIZE0/*¥­*/,F_SIZE0/*¥®*/,F_SIZE0/*¥¯*/,
	F_SIZE0/*¥°*/,F_SIZE0/*¥±*/,F_SIZE0/*¥²*/,F_SIZE0/*¥³*/,F_SIZE0/*¥´*/,
	F_SIZE0/*¥µ*/,F_SIZE0/*¥¶*/,F_SIZE0/*¥·*/,F_SIZE0/*¥¸*/,F_SIZE0/*¥¹*/,
	F_SIZE0/*¥º*/,F_SIZE0/*¥»*/,F_SIZE0/*¥¼*/,F_SIZE0/*¥½*/,F_SIZE0/*¥¾*/,
	F_SIZE0/*¥¿*/,F_SIZE0/*¥À*/,F_SIZE0/*¥Á*/,F_SIZE0/*¥Â*/,
	F_SIZE1/*¥Ã*/,F_SIZE0/*¥Ä*/,F_SIZE0/*¥Å*/,
	F_SIZE0/*¥Æ*/,F_SIZE0/*¥Ç*/,F_SIZE0/*¥È*/,F_SIZE0/*¥É*/,
	F_SIZE0/*¥Ê*/,F_SIZE0/*¥Ë*/,F_SIZE0/*¥Ì*/,F_SIZE0/*¥Í*/,F_SIZE0/*¥Î*/,
	F_SIZE0/*¥Ï*/,F_SIZE0/*¥Ð*/,F_SIZE0/*¥Ñ*/,F_SIZE0/*¥Ò*/,F_SIZE0/*¥Ó*/,
	F_SIZE0/*¥Ô*/,F_SIZE0/*¥Õ*/,F_SIZE0/*¥Ö*/,F_SIZE0/*¥×*/,F_SIZE0/*¥Ø*/,
	F_SIZE0/*¥Ù*/,F_SIZE0/*¥Ú*/,F_SIZE0/*¥Û*/,F_SIZE0/*¥Ü*/,F_SIZE0/*¥Ý*/,
	F_SIZE0/*¥Þ*/,F_SIZE0/*¥ß*/,F_SIZE0/*¥à*/,F_SIZE0/*¥á*/,F_SIZE0/*¥â*/,
	F_SIZE1/*¥ã*/,F_SIZE0/*¥ä*/,F_SIZE1/*¥å*/,
	F_SIZE0/*¥æ*/,F_SIZE1/*¥ç*/,F_SIZE0/*¥è*/,
	F_SIZE0/*¥é*/,F_SIZE0/*¥ê*/,F_SIZE0/*¥ë*/,F_SIZE0/*¥ì*/,F_SIZE0/*¥í*/,
	F_SIZE0/*¥ï*/,F_SIZE0/*¥ò*/,F_SIZE0/*¥ó*/,
	F_SIZE1/*¥¡*/,F_SIZE1/*¥£*/,F_SIZE1/*¥¥*/,
	F_SIZE1/*¥§*/,F_SIZE1/*¥©*/,
	11/*¡¥*/,F_SIZE0/*¡Ç*/,F_SIZE0/*¡É*/,F_SIZE0/*¡Ü*/,F_SIZE0/*¡¼*/,
	F_SIZE2/*£°*/,F_SIZE2/*£±*/,F_SIZE2/*£²*/,F_SIZE2/*£³*/,F_SIZE2/*£´*/,
	F_SIZE2/*£µ*/,F_SIZE2/*£¶*/,F_SIZE2/*£·*/,F_SIZE2/*£¸*/,F_SIZE2/*£¹*/,
	F_SIZE0/*£Ä*/,F_SIZE0/*cc*/,F_SIZE3/*nd*/,F_SIZE0/*pts*/,
	F_SIZE3/*rd*/,F_SIZE3/*st*/,F_SIZE3/*th*/,
	F_SIZE0/*£Ó*/,F_SIZE0/*£Ö*/,
	F_SIZE0/*¡ª*/,F_SIZE0/*¡£*/,F_SIZE0/*¡¤*/,F_SIZE0/*¡°*/
};

char *cup_name[] = {
	"mushroom cup",
	"flower cup",
	"star cup",
	"special cup",
	"battle"
};

char *cup_name_j[] = {
	"mushroom cup",
	"flower cup",
	"star cup",
	"special cup"
//	"¥­¥Î¥³ ¥«¥Ã¥×",
//	"¥Õ¥é¥ï¡¼ ¥«¥Ã¥×",
//	"¥¹¥¿¡¼ ¥«¥Ã¥×",
//	"¥¹¥Ú¥·¥ã¥ë ¥«¥Ã¥×"
};

#ifdef CHINA
char *circuit_name[] = {
	"°°°	°
°","choco mountain","bowser's castle","banshee boardwalk",
	"yoshi valley","frappe snowland","koopa troopa beach","royal raceway",
	"luigi raceway","moo moo farm","toad's turnpike","kalimari desert",
	"sherbet land","rainbow road","wario stadium","block fort",
	"skyscraper","double deck","d.k.'s jungle parkway","big donut"

};

char *circuit_name_j[] = {
	"°°°	°
°","choco mountain","bowser's castle","banshee boardwalk",
	"yoshi valley","frappe snowland","koopa troopa beach","royal raceway",
	"luigi raceway","moo moo farm","toad's turnpike","kalimari desert",
	"sherbet land","rainbow road","wario stadium","block fort",
	"skyscraper","double deck","d.k.'s jungle parkway","big donut"
};

char *circuit_name_semilong_j[] = {
	"°°°	°
°","choco mountain","bowser's castle","banshee boardwalk",
	"yoshi valley","frappe snowland","koopa troopa beach","royal raceway",
	"luigi raceway","moo moo farm","toad's turnpike","kalimari desert",
	"sherbet land","rainbow road","wario stadium","block fort",
	"skyscraper","double deck","d.k.'s jungle parkway","big donut"
};

char *circuit_name_short[] = {
	"°°°
°","mountain","castle","ghost",
	"maze","snow","beach","p circuit",
	"l circuit","farm","highway","desert",
	"sherbet","rainbow","stadium","block",
	"skyscraper","deck","jungle","doughnut"

};
#else
char *circuit_name[] = {
	"mario raceway","choco mountain","bowser's castle","banshee boardwalk",
	"yoshi valley","frappe snowland","koopa troopa beach","royal raceway",
	"luigi raceway","moo moo farm","toad's turnpike","kalimari desert",
	"sherbet land","rainbow road","wario stadium","block fort",
	"skyscraper","double deck","d.k.'s jungle parkway","big donut"

};

char *circuit_name_j[] = {
	"mario raceway","choco mountain","bowser's castle","banshee boardwalk",
	"yoshi valley","frappe snowland","koopa troopa beach","royal raceway",
	"luigi raceway","moo moo farm","toad's turnpike","kalimari desert",
	"sherbet land","rainbow road","wario stadium","block fort",
	"skyscraper","double deck","d.k.'s jungle parkway","big donut"
#if 0
	"¥Þ¥ê¥ª¥µ¡¼¥­¥Ã¥È","¥Á¥ç¥³¥Þ¥¦¥ó¥Æ¥ó",
	"¥¯¥Ã¥Ñ¥­¥ã¥Ã¥¹¥ë","¥Ò¥å¡°¥É¥í¤¤¤±",
	"¥è¥Ã¥·¡¼¥Ð¥ì¡¼","¥Õ¥é¥Ã¥Ú¥¹¥Î¡¼¥é¥ó¥É",
	"¥Î¥³¥Î¥³¥Ó¡¼¥Á","¥Ô¡¼¥Á¥µ¡¼¥­¥Ã¥È",
	"¥ë¥¤¡¼¥¸¥µ¡¼¥­¥Ã¥È","¥â¡°¥â¡°¥Õ¥¡¡¼¥à",
	"¥­¥Î¥Ô¥ª¥Ï¥¤¥¦¥§¥¤","¥«¥é¥«¥é¤µ¤Ð¤¯",
	"¥·¥ã¡¼¥Ù¥Ã¥È¥é¥ó¥É","¥ì¥¤¥ó¥Ü¡¼¥í¡¼¥É",
	"¥ï¥ê¥ª¥¹¥¿¥¸¥¢¥à","¥Ö¥í¥Ã¥¯¤È¤ê¤Ç",
	"¤Þ¤Æ¤ó¤í¤¦","¥À¥Ö¥ë¥Ç¥Ã¥­",
	"¥É¥ó¥­¡¼¥¸¥ã¥ó¥°¥ë¥Ñ¡¼¥¯","¥Ó¥Ã¥°¥É¡¼¥Ê¥Ã¥Ä"
#endif
};

char *circuit_name_semilong_j[] = {
	"mario raceway","choco mountain","bowser's castle","banshee boardwalk",
	"yoshi valley","frappe snowland","koopa troopa beach","royal raceway",
	"luigi raceway","moo moo farm","toad's turnpike","kalimari desert",
	"sherbet land","rainbow road","wario stadium","block fort",
	"skyscraper","double deck","d.k.'s jungle parkway","big donut"
#if 0
	"¥Þ¥ê¥ª¥µ¡¼¥­¥Ã¥È","¥Á¥ç¥³¥Þ¥¦¥ó¥Æ¥ó",
	"¥¯¥Ã¥Ñ¥­¥ã¥Ã¥¹¥ë","¥Ò¥å¡°¥É¥í¤¤¤±",
	"¥è¥Ã¥·¡¼¥Ð¥ì¡¼","¥Õ¥é¥Ã¥Ú¥¹¥Î¡¼¥é¥ó¥É",
	"¥Î¥³¥Î¥³¥Ó¡¼¥Á","¥Ô¡¼¥Á¥µ¡¼¥­¥Ã¥È",
	"¥ë¥¤¡¼¥¸¥µ¡¼¥­¥Ã¥È","¥â¡°¥â¡°¥Õ¥¡¡¼¥à",
	"¥­¥Î¥Ô¥ª¥Ï¥¤¥¦¥§¥¤","¥«¥é¥«¥é¤µ¤Ð¤¯",
	"¥·¥ã¡¼¥Ù¥Ã¥È¥é¥ó¥É","¥ì¥¤¥ó¥Ü¡¼¥í¡¼¥É",
	"¥ï¥ê¥ª¥¹¥¿¥¸¥¢¥à","¥Ö¥í¥Ã¥¯¤È¤ê¤Ç",
	"¤Þ¤Æ¤ó¤í¤¦","¥À¥Ö¥ë¥Ç¥Ã¥­",
	"¥É¥ó¥­¡¼¥¸¥ã¥ó¥°¥ë","¥Ó¥Ã¥°¥É¡¼¥Ê¥Ã¥Ä"
#endif
};

char *circuit_name_short[] = {
	"m circuit","mountain","castle","ghost",
	"maze","snow","beach","p circuit",
	"l circuit","farm","highway","desert",
	"sherbet","rainbow","stadium","block",
	"skyscraper","deck","jungle","doughnut"

};
#endif

char map2cup_chart[] = {
	FLOWERCUP,FLOWERCUP,STARCUP,SPECIALCUP,
	SPECIALCUP,FLOWERCUP,KINOKOCUP,STARCUP,
	KINOKOCUP,KINOKOCUP,FLOWERCUP,KINOKOCUP,
	STARCUP,SPECIALCUP,STARCUP,4,
	4,4,SPECIALCUP,4
};

const char map2circuit_chart[] = {
	3,2,3,2,
	1,1,2,2,
	0,1,0,3,
	1,3,0,1,
	3,2,0,0
};

const char driver2pselset[8] = {
    0, 1, 4, 3,
    5, 6, 2, 7
};

char *cup_type_names[] = {
	"none","bronze",
	"silver","gold"
};

char *drivers_name[] = {
	"MARIO","LUIGI",
	"YOSHI","KINOPIO",
	"D.KONG","WARIO",
	"PEACH","KOOPA"
};

char *drivers_name_j[] = {
	"MARIO","LUIGI",
	"YOSHI","TOAD",
	"D.K.","WARIO",
	"PEACH","BOWSER","¡¼¡¼¡¼¡¼"
#if 0
	"¥Þ¥ê¥ª","¥ë¥¤¡¼¥¸",
	"¥è¥Ã¥·¡¼","¥­¥Î¥Ô¥ª",
	"£Ä¡¥¥³¥ó¥°","¥ï¥ê¥ª",
	"¥Ô¡¼¥Á","¥¯¥Ã¥Ñ","¡¼¡¼¡¼¡¼"
#endif
};

char *class_name[] = {
	"50(","100(",
	"150(",
	"extra"
	//" ¤ª¤Þ¤±"
};

char *class_name_j[] = {
	"50(","100(",
	"150(",
	"extra"
	//" ¤ª¤Þ¤±"
};

char *screen_mode_names[] = {
	"1p","2players UD","2players LR",
	"3players","4players"
};

char *sound_mode_name[] = {
	"stereo","head phone",
	"xxx","monaural"
};

char *sound_mode_name_j[] = {
	"STEREO","HEADPHONE",
	"","MONO"
};

char *win_lose_j[] = {
	"WINNER!","LOSER!"
};

char *bestrec_j[] = {
	"BEST RECORDS","BEST LAP","LAP TIME"
};

char *laptime_j[] = {
	"LAP 1","LAP 2","LAP 3","TOTAL"
};

char *recordtime_j[] = {
	"1 £ó","2 £î","3 £ò","4 £ô","5 £ô"," "
};

char *ta_result_select_j[] = {
	"CONTINUE GAME","RETRY","COURSE CHANGE","DRIVER CHANGE",
	"QUIT","REPLAY","SAVE GHOST"
};

char *vs_result_title_j[] = {
	"VS MATCH RANKING",
	"BATTLE RANKING"
};

char ta_romghost_message_j[] = "NOW-MEET THE COURSE GHOST!!!";

//char no_controller_message[] = "NO CONTOROLLER";
//char no_controller_message[] = "1P ¤Î¥³¥ó¥È¥í¡¼¥é¤ò¤»¤Ä¤¾¤¯¤·¤Æ¤¯¤À¤µ¤¤";
char *no_controller_message[] = {
	"CONNECT A CONTROLLER TO SOCKET 1,",
	"THEN POWER ON AGAIN"
};

char *msel_battle_messages_j[] = {
	"BATTLE GAME",
	"POP OPPOSING PLAYER'S BALLOONS",
	"WHEN ALL 3 ARE GONE,THEY ARE OUT!"
};

char tsel_title_j[] = {
	"a BUTTON*SEE DATA  B BUTTON*EXIT"
};

char dsel_length_j[] = {
	"distance"
};

char *dsel_lengthdata_j[] = {
	"567m","687m","777m","747m",
	"772m","734m","691m","1025m",
	"717m","527m","1036m","753m",
	"756m","2000m","1591m","","","","893m",""
};

char *dsel_select1_j[] = {
	"return to menu","erase records for this course",
	"erase ghost from this course"
};

char *dsel_select2_j[] = {
	"quit","erase"
};

char *dsel_select2_messages_j[] = {
	"THE BEST RECORDS AND BEST",
	"LAP FOR THIS COURSE WILL BE",
	"ERASED.  IS THIS OK?",
	"GHOST DATA FOR THIS",
	"COURSE WILL BE ERASED.",
	"IS THIS OK?"
};

char *dsel_select3_messages_j[] = {
	"UNABLE TO ERASE ",
	"GHOST DATA"
};

#ifdef CHINA
/*
char *option_select1_messages_j[] = {
	"°°°°°°",
	"SOUND MODE",
	"COPY N64 CONTROLLER PAK",
	"ERASE ALL DATA",
};
*/
char option_select1_messages_j_1[] = {0xb0, 0x01, 0xb0, 0x02, 0xb0, 0x03, 0xb0, 0x04, 0xb0, 0x05, 0xb0, 0x06, 0x00};
char *option_select1_messages_j[] = {
        option_select1_messages_j_1,
        "SOUND MODE", 
        "COPY N64 CONTROLLER PAK", 
        "ERASE ALL DATA",
};
#else
char *option_select1_messages_j[] = {
	"RETURN TO GAME SELECT",
	"SOUND MODE",
	"COPY N64 CONTROLLER PAK",
	"ERASE ALL DATA",
};
#endif

char *option_select3_messages_j[] = {
	"ALL SAVED DATA WILL BE",
	"PERMANENTLY ERASED.",
	"ARE YOU REALLY SURE?"
};

char *option_select3e_messages_j[] = {
	"",
	"ALL SAVED DATA",
	"HAS BEEN NOW ERASED."
};

char *option_copy_pak1err_messages_j[] = {
	"CONTROLLER 1 DOES NOT HAVE ",
	"N64 CONTROLLER PAK",
	"",
	"",
	"UNABLE TO READ ",
	"N64 CONTROLLER PAK DATA ",
	"FROM CONTROLLER 1",
	"",
	"UNABLE TO CREATE GAME DATA ",
	"FROM CONTROLLER 1 ",
	"N64 CONTROLLER PAK",
	"",
	"UNABLE TO COPY GHOST ",
	"-- INSUFFICIENT FREE PAGES ",
	"IN CONTROLLER 1 ",
	"N64 CONTROLLER PAK"
	
};

char *option_copy_pak2err_messages_j[] = {
	"NO GHOST DATA ",
	"IN CONTROLLER 2 ",
	"N64 CONTROLLER PAK",

	"NO MARIO KART 64 DATA ",
	"PRESENT IN CONTROLLER 2 ",
	"N64 CONTROLLER PAK",

	"CONTROLLER 2 ",
	"DOES NOT HAVE ",
	"N64 CONTROLLER PAK SET",

	"UNABLE TO READ DATA ",
	"FROM CONTROLLER 2 ",
	"N64 CONTROLLER PAK"
	
};

char *option_copy_copyerr_messages_j[] = {
	"UNABLE TO COPY DATA ",
	"FROM CONTROLLER 1 ",
	"N64 CONTROLLER PAK",
	"UNABLE TO READ DATA ",
	"FROM CONTROLLER 2 ",
	"N64 CONTROLLER PAK"
	
};

char *option_copy_pak_j[] = {
	"CONTROLLER 1",
	"CONTROLLER 2"
	
};

char *option_copy_pak2sel_message_j[] = {
	"WHICH FILE DO YOU WANT TO MAKE A COPY OF?",
	"TO WHICH FILE DO YOU WANT TO COPY?"
};

char *option_copy_sure_messages_j[] = {
	"CURRENT DATA WILL BE ERASED,",
	"IS THIS OK?"
};

char *option_copy_sure2_messages_j[] = {
	"QUIT",
	"COPY"
};

char *option_copy_copy_messages_j[] = {
	"COPYING",
	"DATA COPY COMPLETED"
};

char *gsel_caution_messages_j[] = {
	"NO N64 CONTROLLER PAK DETECTED",
	"TO SAVE GHOST DATA, ",
	"INSERT N64 CONTROLLER PAK ",
	"INTO CONTROLLER 1",

	"UNABLE TO READ ",
	"N64 CONTROLLER PAK DATA",
	"",
	"",

	"",
	"",
	"",
	"",

	"INSUFFICIENT FREE PAGES AVAILABLE ",
	"IN N64 CONTROLLER PAK TO CREATE ",
	"GAME DATA, PLEASE FREE 121 PAGES.",
	"SEE INSTRUCTION BOOKLET FOR DETAILS.",

	"TO SAVE GHOST DATA, ",
	"INSERT N64 CONTROLLER PAK ",
	"INTO CONTROLLER 1"
};


char *ta_ghosta_messages_j[] = {
	"N64 CONTROLLER PAK ",
	"NOT DETECTED. ",
	"IF YOU WANT TO SAVE ",
	"THE GHOST DATA, ",
	"PLEASE INSERT ",
	"N64 CONTROLLER PAK ",
	"INTO CONTROLLER 1",

	"",
	"UNABLE TO SAVE ",/* ¥Ñ¥Ã¥¯¤Î¥Ï¡¼¥É°Û¾ï¡© */
	"     THE GHOST",
	"",
	"",
	"",
	"",

	"",
	"UNABLE TO SAVE ",
	"     THE GHOST",
	"",
	"",
	"",
	"",

	"INSUFFICIENT ",
	"FREE PAGES AVAILABLE ",
	"",
	"-- GHOST DATA ",
	"COULD NOT BE SAVED",
	"",
	"",

	"",
	"CANNOT CREATE ",
	"     GAME DATA",
	"",
	"",
	"",
	"",

	"",
	"THIS GHOST IS ",
	"     ALREADY SAVED",
	"",
	"",
	"",
	""
};

char *ta_lost_ghost_message_j[] = {
	"RACE DATA CANNOT ",
	"BE SAVED FOR GHOST"
};

char *ta_ghostb_messages_j[] = {
	"SELECT THE FILE ",
	"YOU WANT TO SAVE",
	"NO DATA"
};

char *ta_ghostb3_messages_j[] = {
	"CREATING ",
	"MARIO KART 64 ",
	"GAME DATA",
	"CANNOT CREATE GAME DATA",
	"",
	""
};

char *ta_ghostc_messages_j[] = {
	"THE PREVIOUS DATA ",
	"WILL BE ERASED, ",
	"IS THIS OK?"
};

char *ta_ghostc_select_messages_j[] = {
	"QUIT",
	"SAVE"
};

char *ta_ghostd_messages_j[] = {
	"SAVING GHOST DATA",
	"",
	"PLEASE WAIT"
};

char *ta_ghostd2_messages_j[] = {
	"UNABLE TO SAVE ",
	"THE GHOST"
};



char *ending_message2[] = {
	"YOU ARE AWARDED THE",
	"GOLD CUP",
	"SILVER CUP",
	"BRONZE CUP",
	"MAYBE NEXT TIME!"
};


char *ending_message3[] = {
	"CONGRATULATIONS!",
	"WHAT A PITY!"
};

char *ending_message4[] = {
	"YOU PLACED",
	"    st",
	"    nd",
	"    rd",
	"    th",
	"    th",
	"    th",
	"    th",
	"    th"
};


const char additional_point_defaults[4] = {
	9,6,3,1
};

const char screen_mode2num[12] = {
	0,
	0,1,
	0,1,
	0,1,2,
	0,1,2,3
};

const char thunder_onoff[] = {
	0,1,2,1,2,
	1,2,1,2,0,
	0,1,2,2,1,
	2,2,1,2,2,
	1,2,2,1,2,
	2,1,3,3,3,
	3,3,3,3,3,
	3,3,3,3,3
};
	
P_COLOR k_thunder_color[] = {
	{0,0,0,0},
	{255,255,255,255},
	{0,0,80,255},
	{255,255,255,255}
};

P_COLOR fade_color_bw[] = {
	{0,0,0,255},
	{255,255,255,255}
};

const char start_pause_seq[] = {
	KSEQ_PS_GP1,
	KSEQ_PS_TA1,
	KSEQ_PS_VS1,
	KSEQ_PS_BT1
};

const char bottom_pause_seq[] = {
	KSEQ_PS_GP2,
	KSEQ_PS_TA5,
	KSEQ_PS_VS4,
	KSEQ_PS_BT4
};


#include "tex_list.c"
#include "mathkawano.c"

int ps4expand(unsigned *abuf,unsigned char *ch,unsigned short *bz);

int CheckContPackMenu(void);
void SkipManager(void);
void InitVC_kawano(void);
int GetFontNumber_h(char *moji);
int GetFontNumber_k(char *moji);
int GetFontNumber_j(char *moji);
void SetPalette(int palette_number);
void SetWord2_a(int x,int y,char *moji,int interval,
				 float mulx,float muly);
void kawanoOnlyFade(int num);
void kawanoDraw(int num);
void doNintenLogo(Dynamic *dynamicp,int work);
void doGameSelect(Dynamic *dynamicp);
void doGameSelect10(void);
void TexDataChange(void);
Gfx *FlashRectangle2(Gfx *gdl,unsigned int ulx,unsigned int uly,
					 unsigned int drx,unsigned int dry);
Gfx *FlashRectangle2f(Gfx *gdl,unsigned int ulx,unsigned int uly,
					unsigned int drx,unsigned int dry);
Gfx *FillRect1Color_f(Gfx *gdl,
					  //unsigned int ulx,unsigned int uly,
					  //unsigned int drx,unsigned int dry,
					  int ulx,int uly,
					  int drx,int dry,
					  unsigned int red,unsigned int green,
					  unsigned int blue,unsigned int alpha);
Gfx *AutoTextureRect(Gfx *gdl,char flg_ia,
					 int dsdx,int dtdy,
					 int t_ulx,int t_uly,
					 int t_drx,int t_dry,
					 int disp_x,int disp_y,
					 unsigned short *texp,
					 unsigned int tex_size_x,unsigned int tex_size_y);
Gfx *AutoTextureRect_zoom(Gfx *gdl,char flg_ia,
						  int dsdx,int dtdy,float zoom_x,float zoom_y,
						  int t_ulx,int t_uly,
						  int t_drx,int t_dry,
						  int disp_x,int disp_y,
						  unsigned short *texp,
						  unsigned int tex_size_x,unsigned int tex_size_y);
Gfx *AutoTextureRect_noise(Gfx *gdl,
						   int disp_x,int disp_y,
						   unsigned int size_x,unsigned int size_y);
Gfx *AutoTextureRect_c(Gfx *gdl,char flg_ia,
					   unsigned int t_ulx,unsigned int t_uly,
					   unsigned int t_drx,unsigned int t_dry,
					   int disp_x,int disp_y,
					   unsigned short *texp,
					   unsigned int tex_size_x,unsigned int tex_size_y);
Gfx *AutoTextureRect64(Gfx *gdl,char flg_ia,
					   int disp_x,int disp_y,
					   unsigned short *texp,int width);
Gfx *AutoTextureRect_w(Gfx *gdl,char flg_ia,
					   unsigned int t_ulx,unsigned int t_uly,
					   unsigned int t_drx,unsigned int t_dry,
					   int disp_x,int disp_y,
					   unsigned short *texp,
					   unsigned int tex_size_x,unsigned int tex_size_y,
					   int width);
Gfx *AutoTextureRectSimple(Gfx *gdl,
		     unsigned int t_ulx,unsigned int t_uly,
		     unsigned int t_drx,unsigned int t_dry,
		     unsigned int disp_x,int disp_y,
		     unsigned short *texp,
		     unsigned int tex_size_x,unsigned int tex_size_y);
Gfx *AutoTextureRectR(Gfx *gdl,
		     unsigned int t_ulx,unsigned int t_uly,
		     unsigned int t_drx,unsigned int t_dry,
		     int disp_x,int disp_y,
		     unsigned short *texp,
		     unsigned int tex_size_x,unsigned int tex_size_y);
Gfx *FillRect1Color(Gfx *gdl,
					//unsigned int ulx,unsigned int uly,
					//unsigned int drx,unsigned int dry,
					int ulx,int uly,int drx,int dry,
					unsigned int red,unsigned int green,
					unsigned int blue,unsigned int alpha);
Gfx *FillRectBlack(Gfx *gdl,
				   unsigned int ulx,unsigned int uly,
				   unsigned int drx,unsigned int dry);
void tex_data_Dma(unsigned short *tex_ptr,unsigned int number,
				  unsigned short *tex_buff_ptr);
void tex_data_Dma_s(unsigned short *tex_ptr,unsigned int number,
				  unsigned short *tex_buff_ptr);
void InitTexBuff(void);
TexBlock *GetTBPointer(TexBlock *texlist_ptr);
void TexBuffLoad(TexBlock *texlist_ptr);
void TexBuffLoad_font(TexBlock *texlist_ptr);
void TexBuffLoad_c(TexBlock *texlist_ptr);
void TexBuffLoad_p(TexBlock *texlist_ptr,int nocheck_flg);
void TexBuffLoad_seq(TexBlockSeq *seq_ptr);
void InitChangeTexData(void);
void InitChangeTexData_vs(void);
void SetChangeTexData(TexBlock *tb_ptr,int new_block_num);
void SetChangeTexData_vs(TexBlock *tb_ptr,int num,int buffer_num);
void doChangeTexData(void);
void doChangeTexData_vs(void);
void ChangeTexData(TexBlock *tb_ptr,int new_block_num);
void InitSeqData(void);
int SetSeqData(TexBlockSeq *tbs_ptr);
void ChangeSeqData(int i,int pat,TexBlockSeq *tbs_ptr);
void doSeqData(void);
void doSeqData2(int i,int x,int y,int param);
void doSeqData2_vs(int i,int x,int y,int num,int param);
TexBlock *SelectTex(SeqData *sd_ptr);
TexBlock *SelectTex_vs(SeqData *sd_ptr,int num);
void GrayScale_tex_buff256(unsigned source_num,unsigned dist_num,
						   unsigned pixel,int step);
void GrayScale_tex_buff(unsigned num);
void GrayScale_tex_buff2(unsigned num,unsigned int step);
void GrayScale_tex_buff3(unsigned num,unsigned int step);
void GrayScale_tex_buff_RGB(unsigned num,int size,int red,int green,int blue);
unsigned short *GetTexBuffPointer(unsigned short *tex_ptr);
void InitKDL(void);
Gfx *doTexList(Gfx *gdl,TexBlock *tp,int x,int y);
Gfx *doTexList2(Gfx *gdl,TexBlock *tp,int x,int y,int sp,int param);
Gfx *doTexList3(Gfx *gdl,TexBlock *tp,int x,int y,
				int sp,float param1,float param2);
Gfx *doTexList4(Gfx *gdl,TexBlock *tp,float x,float y,
				int sp,float param1,float param2);
Gfx *doTexList5(Gfx *gdl,TexBlock *tp,int x,int y,int param);
Gfx *doTexList_w(Gfx *gdl,SeqData *sd_ptr,int x,int y,int param);
Gfx *doTexList_vs(Gfx *gdl,SeqData *sd_ptr,int x,int y,int num,int param);
void BeforeFadeMain(void);
void FadeMain(void);
void FadeMain2(int i);
void FadeIn(int num,int cs_flg);
void FadeInWhite(int num,int cs_flg);
void FadeOut_(int num,int cs_flg,int type);
void FadeOut(int num,int cs_flg);
void FadeOutWhite(int num,int cs_flg);
void FadeBlack(int num);
void FadeOut_m(void);
void FadeOut_r(void);
void SetFadeOut_(unsigned count,int type);
void SetFadeOut(unsigned count);
void SetFadeOutWhite(unsigned count);
void SetFadeOut_m(unsigned count);
void SetFadeOut_r(unsigned count);
void SetFadeOut_f(void);
void SetFadeOut_fw(void);
void SetFadeOut_b(void);
void SetFadeOut_d(void);
void ThunderMain(int i);
void k_thunder(int num);
void SetThunder(void);
void SetThunder_(int num);
void InitOBJBlock(void);
void SetOBJBlock(int kind,int x,int y,char pri);
void DispOBJBlock(OBJBlock *ptr);
void DispOB_cp_free(void);
void DispOB_cp_gnote(OBJBlock *ptr);
void DispOB_cp_notecursor(OBJBlock *ptr);
void DispOB_cp_gnote_name(OBJBlock *ptr);
void DispOB_cp_cursor(OBJBlock *ptr,int num);
void DispOB_Sub_gsel1(OBJBlock *ptr,int num);
void DispOB_Sub_gsel_caution(OBJBlock *ptr);
void DispOB_Sub_psel_cursor(OBJBlock *ptr,int num,int alpha);
void DispOB_Sub_psel1(OBJBlock *ptr,TexBlock *tp);
void DispOB_Sub_psel2(OBJBlock *ptr);
void DispOB_Sub_msel1(OBJBlock *ptr,int num);
void DispOB_Sub_msel_map(OBJBlock *ptr);
void DispOB_Sub_tsel1(OBJBlock *ptr);
void DispOB_Sub_tsel_cursor(OBJBlock *ptr);
void DispOB_Sub_dsel_snap(OBJBlock *ptr);
void DispOB_Sub_dsel_mes1(OBJBlock *ptr);
void DispOB_Sub_dsel_sel1(OBJBlock *ptr);
void DispOB_Sub_dsel_sel2(OBJBlock *ptr);
void DispOB_Sub_dsel_sel3(OBJBlock *ptr);
void DispOB_Sub_option_messages(OBJBlock *ptr);
void Cut_ud_sub(OBJBlock *ptr);
void DispOB_result_time(OBJBlock *ptr);
void DispOB_result_point(OBJBlock *ptr);
void DispOB_gp_lose(OBJBlock *ptr);
void DispOB_info_3p(OBJBlock *ptr);
void DispOB_vs_result(OBJBlock *ptr);
void DispOB_vs_ibox_cursor(OBJBlock *ptr,POS_XY *pos_ptr);
void DispOB_vs_point2P(OBJBlock *ptr);
void DispOB_vs_point3P(OBJBlock *ptr);
void DispOB_vs_point4P(OBJBlock *ptr);
void DispOB_bt_point(int num1,int num2,uchar *wc_ptr);
void DispOB_vs_point123(int num1,int num2,uchar *wc_ptr);
void DispOB_ta_lostghost(OBJBlock *ptr);
void DispOB_ending1_halffade(OBJBlock *ptr);
void DispOB_ending1_message1(OBJBlock *ptr);
void DispOB_ending1_message2(OBJBlock *ptr);
void DispOB_ending1_message3(OBJBlock *ptr);
void DispOB_ending1_message4(OBJBlock *ptr);
void DispOB_staffroll_messages(OBJBlock *ptr);
void SortDPRanking(char *b_ptr);
void ResultSub_time(int x,int y,int num,int num2);
void ResultSub_point(OBJBlock *ptr,int x,int y,int num,int num2,char *pts_buf);
void DispOB_timeattack1(OBJBlock *ptr);
void DispOB_timeattack2(OBJBlock *ptr);
void TimeAttack1Sub(int num,int x,int y);
void TimeAttack1Sub2(int num,int x,int y);
void DispOB_timeattack_message1(OBJBlock *ptr);
void DispOB_pause(OBJBlock *ptr);
void DispOB_pause_ta(OBJBlock *ptr);
void DispOB_pause_vs(OBJBlock *ptr);
void DispOB_pause_gp(OBJBlock *ptr);
void DispOB_pause_bt(OBJBlock *ptr);
void DispOB_pause_cursor(void);
void DispOB_ta_replay(OBJBlock *ptr);
void kawano_itoa(int num,char *ptr);
void kawano_itoa_m(int num,char *ptr);
void kawano_itoa_s(int num,char *ptr);
void kawano_itoa_c(int num,char *ptr);
void kawano_itoa2(int num,char *ptr);
void doOBJBlock(int pri_flg);
void doOBJBlock1(void);
void doOBJBlock2(void);
void gsel_sub1(int i,OBJBlock *ptr);
void sel_ok_sub(OBJBlock *ptr);
void msel_bbox_sub(OBJBlock *ptr);
void msel_bbox_sub2(OBJBlock *ptr);
void msel_sub1(int i,OBJBlock *ptr);
void msel_sub2(OBJBlock *ptr);
void msel_sub4(OBJBlock *ptr);
void msel_battle_sub(OBJBlock *ptr);
void DispOB_Sub_msel_cup(OBJBlock *ptr);
void DispOB_Sub_msel_ghost(OBJBlock *ptr);
void tsel_sub1(int i,OBJBlock *ptr);
void DOB_moving1(OBJBlock *ptr,int x,int y);
void DOB_moving1_x(OBJBlock *ptr,int x);
void DOB_moving1_y(OBJBlock *ptr,int y);
void DOB_moving2_x(OBJBlock *ptr,int x);
void DOB_moving2_y(OBJBlock *ptr,int y);
void DOB_moving3_x(OBJBlock *ptr,int x);
void DOB_moving4_x(OBJBlock *ptr,int x,int plusminus);
void DOB_cp_cscolor(OBJBlock *ptr);
void DOB_cp_mes2(OBJBlock *ptr);
void DOB_cp_gnote(OBJBlock *ptr);
//void DOB_gsel_ok(OBJBlock *ptr);
void DOB_sel_ok(OBJBlock *ptr);
void DOB_gsel_number(OBJBlock *ptr);
void DOB_gsel_mode(OBJBlock *ptr);
void DOB_gsel_move(OBJBlock *ptr);
void DOB_gsel_gp(OBJBlock *ptr);
void DOB_gsel_start(OBJBlock *ptr);
void DOB_gsel_caution(OBJBlock *ptr);
void DOB_psel_anime_mario(OBJBlock *ptr,char position);
void DOB_psel_anime_kuppa(OBJBlock *ptr);
void DOB_psel_turn_out(OBJBlock *ptr);
void DOB_psel_turn_in(OBJBlock *ptr);
void DOB_psel_character1(OBJBlock *ptr);
void DOB_psel_cursor1(OBJBlock *ptr);
void DOB_psel_anime_priority(OBJBlock *ptr);
OBJBlock *Get_gsel_cursor_ptr(void);
OBJBlock *Get_psel_character_ptr(int num);
int Get_psel_character_pattern(int num);
void Get_psel_cursor_position(OBJBlock *ptr,int num);
int Get_psel_cursor_number(int num);
void DOB_msel_cup(OBJBlock *ptr);
void DOB_msel_map(OBJBlock *ptr);
void DOB_msel_move(OBJBlock *ptr);
void DOB_msel_name(OBJBlock *ptr);
void DOB_msel_anime_map2(OBJBlock *ptr);
void DOB_msel_anime_mapman(OBJBlock *ptr);
void DOB_msel_bbox(OBJBlock *ptr);
void DOB_msel_cup_gsc(OBJBlock *ptr);
void DOB_tsel_cup(OBJBlock *ptr);
void DOB_tsel_cursor(OBJBlock *ptr);
void DOB_tsel_map(OBJBlock *ptr);
void DOB_game_cup(OBJBlock *ptr);
void DOB_game_cup_mode1(OBJBlock *ptr);
void DOB_game_circuit(OBJBlock *ptr);
void DOB_game_circuit_mode1(OBJBlock *ptr);
void DOB_game_circuit_mode2(OBJBlock *ptr);
void DOB_msel_noise(OBJBlock *ptr);
void DOB_game_time(OBJBlock *ptr);
void DOB_game_point(OBJBlock *ptr);
void DOB_gp_lose(OBJBlock *ptr);
void DOB_info_3p(OBJBlock *ptr);
void DOB_vs_result(OBJBlock *ptr);
void DOB_vs_face(OBJBlock *ptr);
void DOB_game_ta1(OBJBlock *ptr);
void DOB_game_ta2(OBJBlock *ptr);
void DOB_game_pause(OBJBlock *ptr);
void DOB_game_ta_replay(OBJBlock *ptr);
void DOB_game_ta_mes1(OBJBlock *ptr);
void DOB_dsel_snap(OBJBlock *ptr);
void DOB_dsel_sel1(OBJBlock *ptr);
void DOB_dsel_sel2(OBJBlock *ptr);
void DOB_dsel_sel3(OBJBlock *ptr);
void DOB_ta_fanfare(OBJBlock *ptr);
void DOB_ta_lostghost(OBJBlock *ptr);
void DOB_ending1_halffade(OBJBlock *ptr);
void DOB_ending1_message(OBJBlock *ptr);
void DOB_ending1_face(OBJBlock *ptr);
void DOB_staffroll_messages(OBJBlock *ptr);
void DOB_staffroll_type0(OBJBlock *ptr);
void DOB_staffroll_type1(OBJBlock *ptr);

extern MemPtr allocatememory(uint size);


void init_kawano_select(void) 
{
	int i;
	static char first_time_only_flg = 1;
	MemPtr addr;
extern char _LOGOSegmentRomStart[],_LOGOSegmentRomEnd[];

	if (first_time_only_flg){
		first_time_only_flg = 0;
		vs_result_cursor = KSEQ_VS_SELECT0;
		ta_result_cursor = KSEQ_TA_SELECT1;
		bt_result_cursor = KSEQ_VS_SELECT0;
#if 0
		{
			uchar j_words[] = "¡°01NKTJ¤¢¤¤¤¦¤¨¤ª¥¢¥¤¥¦¥¨¥ª";

			i = 0;
			while(j_words[i] != NULL){
				//PRINTF("%d,",j_words[i]);
				PRINTF("%x,",j_words[i]);
				i++;
			}
			PRINTF("\n");
		}
#endif

		if (osEepromProbe(&intMesgQueue)){
#if 0
			int i;
			uchar *es_ptr;

			es_ptr = (uchar *)&eeprom_save_data;
			for(i = 0;i < 512;i++){
				*es_ptr++ = i % 0x100;
			}
			osEepromLongWrite(&intMesgQueue,0,(u8 *)&eeprom_save_data,512);
#endif
			CheckEEPRom();
		}
#if ROM==0
		else
			PRINTF("no EEPROM....(kawano)\n");
#endif

#if 0
		for (i = 0;i < 4;i++){
			cup_select = i;
			race_level = 0;
			SaveCupStatus(i);
			race_level = 2;
			SaveCupStatus(i);
		}
#endif

		i = CheckContPackMenu();
		if (i){
			k_bg_number = 9;
		}
#if 0
		PRINTF("OBJBlock:%d\n",sizeof(OBJBlock));
		PRINTF("TexBlock:%d\n",sizeof(TexBlock));
		PRINTF("TexBlockSeq:%d\n",sizeof(TexBlockSeq));
		PRINTF("SeqData:%d\n",sizeof(SeqData));
		PRINTF("ChangeTexBuff:%d\n",sizeof(ChangeTexBuff));
		PRINTF("ChangeTexBuff_vs:%d\n",sizeof(ChangeTexBuff_vs));
		PRINTF("KDLBlockBuff:%d\n",sizeof(KDLBlockBuff));
		PRINTF("TexMap:%d\n",sizeof(TexMap));
		PRINTF("POS_XY:%d\n",sizeof(POS_XY));
		PRINTF("P_COLOR:%d\n",sizeof(P_COLOR));
		PRINTF("EEPROM_DATA_TIME:%d\n",sizeof(EEPROM_DATA_TIME));
		PRINTF("EEPROM_DATA_COURSE:%d\n",sizeof(EEPROM_DATA_COURSE));
		PRINTF("EEPROM_DATA_FLAGS1:%d\n",sizeof(EEPROM_DATA_FLAGS1));
		PRINTF("EEPROM_DATA_COURSE_BAK:%d\n",sizeof(EEPROM_DATA_COURSE_BAK));
		PRINTF("EEPROM_DATA_KART_t:%d\n",sizeof(EEPROM_DATA_KART_t));
		PRINTF("EEPROM_DATA_KART:%d\n",sizeof(EEPROM_DATA_KART));
#endif
	}

#if 0
	for (i = 0;i < 4;i++){
		PRINTF("type=%d,status=%d\n",sdata[i].type,sdata[i].status);
	}
#endif

	if (k_bg_number == 8){
		free_memory_pointer=static_memory_pointer;
		addr=load_press_data(_LOGOSegmentRomStart,_LOGOSegmentRomEnd);
		SetSegment(SEG_COURSE_DATA, addr);
	}
	free_memory_pointer=static_memory_pointer;
	tex_buff=(unsigned short *)allocatememory(MAX_TEX_BUFF_NUM*sizeof(short));
	melt_buff=(unsigned int *)allocatememory(MELT_BUFF_SIZE/**sizeof(int)*/);
	k_work=(unsigned char *)allocatememory(320*240);
	kdl_buff=(Gfx *)allocatememory(KDL_BUFF_SIZE);
	alloc_flagobj();

	fb_clear_flg = 0;
	for(i = 0;i < 5;i++)
		fade_flg[i] = 0;
	for(i = 0;i < 4;i++)
		thunder_flg[i] = 0;
	screen1->posx = 160;
	screen1->posy = 120;
	screen1->widthx = 320;
	screen1->widthy = 240;
	k_bg_change = 1;
	TexDataChange();
	for (i = 0;i < 4;i++){
		Na_PlyEng_Stop(i);//¥¨¥ó¥¸¥ó²»¥¹¥È¥Ã¥×
		//kart_data[i].tire_RL.status = 0;
		//kart_data[i].tire_RR.status = 0;
	}

	for (i = 1;i <= 7;i++)/* 1-7 */
		Na_EnmLevel_Stop(i);

	Setting_SoundOutMode();
	//Na_SoundOutModeSet(sound_output);

    /* The Vi manager was started by scheduler by this point in time */
    osViSetSpecialFeatures(OS_VI_DITHER_FILTER_ON);

	//report = FRAMEBUFFERADDRESS/*last_memory_pointer*/ - free_memory_pointer;
	//PRINTF("free=%d\n",report);

}

int CheckContPackMenu(void)
{
	extern u8 pattern;
	u8 pak_pattern;
	int i;
	u8 pak_name[32];
	int name_length;

	if (!pattern)/*¥³¥ó¥È¥í¡¼¥é¡¼¤¬¤µ¤µ¤Ã¤Æ¤¤¤ë¤«*/
		return(0);
	if (!sdata[0].status & CONT_CARD_ON)/*¤Ê¤ó¤«¤¬¤Ä¤Ê¤¬¤Ã¤Æ¤ë¤«*/
		return(0);
	if (!(cont1P->status & START_BUTTON))/*¥¹¥¿¡¼¥È¥Ü¥¿¥ó¤¬²¡¤µ¤ì¤Æ¤¤¤ë¤«*/
		return(0);

	/* ¥³¥ó¥È¥í¡¼¥é¡¼¥Ñ¥Ã¥¯¤¬¤Ä¤Ê¤¬¤Ã¤Æ¤¤¤ë¤« */
	osPfsIsPlug(&intMesgQueue,&pak_pattern);
	if (pak_pattern & 1){
		if( osPfsInit(&intMesgQueue, &pfs_k, 0 ) )
			return( 0 );
	}
	else
		return(0);

#if 0
	if (!osPfsGetLabel(&pfs_k,pak_name,&name_length))
		PRINTF("%s \n",pak_name);
#endif

	/* ¥Õ¥¡¥¤¥ë¿ô¼èÆÀ */
	if( osPfsNumFiles( &pfs_k, &pfsFileNumMax, &pfsFileNum ) )
		return( 0 );
	
	/* ¥Õ¥¡¥¤¥ë¥¹¥Æ¡¼¥¿¥¹ ¼èÆÀ */
	for( i = 0 ; i < 16 ; i ++ ) {
		pfsStateRet[i] = osPfsFileState( &pfs_k, i, pfsState+i );
	}

	/* ¶õ¤­¥á¥â¥ê¡¼¼èÆÀ */
	if( osPfsFreeBlocks( &pfs_k, &pfsFreeBlocks ) )
		return( 0 );
	pfsFreeBlocks >>= 8;

#if 0
	PRINTF( "pfsFileNumMax = %d\n", pfsFileNumMax );
	PRINTF( "pfsFileNum = %d\n", pfsFileNum );
	PRINTF( "pfsFreeBlock = %d\n", pfsFreeBlocks );
	for( i = 0 ; i < 16 ; i ++ ) {
		PRINTF( "pfsStateRet[%d] = %d\n", i, pfsStateRet[i] );
	}
#endif

	return(1);
}

//
// ¥´¡¼¥¹¥È¤Î¥í¡¼¥É(»³ËÜ¤µ¤ó¤Ë¥³¡¼¥ë¤·¤Æ¤â¤é¤¦)
//
void InitGhostData(void)
{
	int i;

	init_pak_flg = 0;
	i = initPak();
	if (loading_ghost_flg && !i){
		int map_num;

		map_num = cup_select*4 + circuit_select;
		LoadGameNoteKart_data();
		for(i = 0;i < 2;i++){
			if (pak_ghost[i].e.ghost_flg){
				if (pak_ghost[i].e.ghost_map == map_num){
					LoadGameNoteKart_ghost(i);
					i = 2;
					loading_ghost_flg = 0;
				}
			}
		}
	}
}

void init_kawano_game(void)
{
	int i;
	extern u8 pattern;

#if 0
	wincount4p[0][0] = 94;
	wincount4p[0][1] = 56;
	wincount4p[0][2] = 78;
	battlewincount4p[0] = 93;
	battlewincount4p[1] = 56;
	battlewincount4p[2] = 78;
	battlewincount4p[3] = 12;
#endif
	melt_buff=(unsigned int *)allocatememory(MELT_BUFF_SIZE2);
	tex_buff=(unsigned short *)allocatememory(MAX_TEX_BUFF_NUM2*sizeof(short));
	k_work=(unsigned char *)allocatememory(64*64);
	additional_point=(unsigned char *)allocatememory(4);

	for (i = 0;i < 5;i++)
		fade_flg[i] = 0;
	for (i = 0;i < 4;i++)
		thunder_flg[i] = 0;

	InitTexBuff();
	InitSeqData();
	InitOBJBlock();
	InitVC_kawano();
	//SetOBJBlock(KO_GAME_CUP,100,31,1);
	//SetOBJBlock(KO_GAME_CIRCUIT,100,231,1);
	SetOBJBlock(KO_GAME_CUP,100,36,1);
	SetOBJBlock(KO_GAME_CIRCUIT,100,221,1);
	SetOBJBlock(KO_GAME_CUT_UD,0,0,0);
	SetOBJBlock(KO_GAME_PAUSE,0,0,0);
	if (game_mode == TIMEATTACK){
		SetOBJBlock(KO_GAME_TA_RANK,0,0,0);
		SetOBJBlock(KO_TA_LOSTGHOST,0,0,0);
	}
	if (replay_flag && (game_mode == TIMEATTACK))
		SetOBJBlock(KO_GAME_TA_REP,0,0,0);
	if (!(pattern&0x1) && demo_play_flag)
		SetOBJBlock(KO_NOCONTROLLER,0,0,2);

	initPak();

	//DispResultTime();
	//SetOBJBlock(KO_GAME_TIME,0,0,0);
	//DispMessageRomGhost();
	//DispGPLose();

	//¥²¡¼¥àÃæ¤Ë¥¢¥Ë¥á¤ò½Ð¤¹¼Â¸³
	//SetOBJBlock(KO_GAME_MA,60,50,8);
	//SetOBJBlock(KO_GAME_LU1,200,50,8);
	//SetOBJBlock(KO_GAME_MA1,60,150,8);
	//SetOBJBlock(KO_GAME_MA1,200,150,8);

}

void SkipManager(void)
{
	int moving_switch;

#if DP_TEST_FLAG
	/*¥Ç¥Ð¥Ã¥°ÍÑ¥·¡¼¥±¥ó¥¹¿Ê¹Ô¥Ü¥¿¥ó*/
	if (cont2P->ontrigger & CONT_L)
		moving_switch = 1;
	else
		moving_switch = 0;
#else
	if (contOR->status)
		moving_switch = 1;
	else
		moving_switch = 0;
#endif
	if (contOR->ontrigger){
		//if (!k_skip_status)
			k_skip_status = 1;
	}
	
	if (moving_switch && k_skip_status)
		k_skip_flg = 1;
	else
		k_skip_flg = 0;
}

void SkipReset(void)
{
	k_skip_status = 0;
}

//
// ¥¢¥¤¥Æ¥à¥Ü¥Ã¥¯¥¹¥«¡¼¥½¥ë¤Î²£¤Î»ú¤Î¿§¤Î·èÄê
//
void SetCursorMessageColor(int now_position,int num,int default_color)
{
	if (now_position == num){
		if (FadeChecker())
			SetPalette(frame_counter%3);
		else
			SetPalette(5);
	}
	else{
		SetPalette(default_color);
	}
}

//
// ¥¢¥¤¥Æ¥à¥Ü¥Ã¥¯¥¹¥«¡¼¥½¥ë¤Î²£¤Î»ú¤Î¿§¤Î·èÄê
//
void SetCursorMessageColor4option(int now_position,int num,int default_color)
{
	if (now_position == num)
		SetPalette(5);
	else
		SetPalette(default_color);
}

//
// ¥ô¥¡¡¼¥Æ¥Ã¥¯¥¹¥«¥é¡¼¥Á¥§¥ó¥¸¤Î½é´ü²½
//
void InitVC_kawano(void)
{
	int i;

	for (i = 0;i < 2;i++){
		vc_color_num[i] = i;
		vc_color_step[i] = 0;
	}

}

void VCAutoChanger(int num,int *num_ptr,int *step_ptr)
{
	int i,vtx_num,a;
	int r1,r2,g1,g2,b1,b2,a1,a2;
	Vtx *vtx_ptr;

	if ((num < 4)||(num >= ALL_PALETTE_NUMBER))
		return;

	vtx_num = 10+(num-4)*4+(frame_counter%2)*2;

	(*step_ptr) += 16;
	if (*step_ptr >= 256){
		*step_ptr = 0;
		*num_ptr = (*num_ptr+1)%3;
	}

	for (i = 0;i < 3;i++){
		vtx_ptr = GetVAddress(vtx_fonts[i]);

		a = *num_ptr*2+2;
		r1 = (vtx_ptr+a)->v.cn[0]*(256-(*step_ptr));
		g1 = (vtx_ptr+a)->v.cn[1]*(256-(*step_ptr));
		b1 = (vtx_ptr+a)->v.cn[2]*(256-(*step_ptr));
		a1 = (vtx_ptr+a)->v.cn[3]*(256-(*step_ptr));
		a = ((*num_ptr*2+2)%6)+2;
		r2 = (vtx_ptr+a)->v.cn[0]*(*step_ptr);
		g2 = (vtx_ptr+a)->v.cn[1]*(*step_ptr);
		b2 = (vtx_ptr+a)->v.cn[2]*(*step_ptr);
		a2 = (vtx_ptr+a)->v.cn[3]*(*step_ptr);
		(vtx_ptr+vtx_num)->v.cn[0] = (r1+r2)/256;
		(vtx_ptr+vtx_num)->v.cn[1] = (g1+g2)/256;
		(vtx_ptr+vtx_num)->v.cn[2] = (b1+b2)/256;
		(vtx_ptr+vtx_num)->v.cn[3] = (a1+a2)/256;
		(vtx_ptr+vtx_num+1)->v.cn[0] = (r1+r2)/256;
		(vtx_ptr+vtx_num+1)->v.cn[1] = (g1+g2)/256;
		(vtx_ptr+vtx_num+1)->v.cn[2] = (b1+b2)/256;
		(vtx_ptr+vtx_num+1)->v.cn[3] = (a1+a2)/256;
	}

}

void DispResultTime(void)
{
	switch(game_mode){
	case MARIOGP:
		SetOBJBlock(KO_GAME_TIME,0,0,0);
		break;
	case TIMEATTACK:
		SetOBJBlock(KO_GAME_TA1,0,0,0);
	default:
		break;
	}
}	

void DispGPLose(void)
{
	SetOBJBlock(KO_GAME_GPLOSE,0,0,0);
	kwgoal_rank_scroll();
	oga_gp_rose_ErhnamDjinn();
}	

void DispInfo_3P(void)
{
	SetOBJBlock(KO_GAME_INFO3P,0,0,0);
}	

void EraseInfo_3P(void)
{
	OBJBlock *ob_ptr;

	ob_ptr = Get_OBJBlock_ptr(KO_GAME_INFO3P);
	if (ob_ptr->pattern == 2)
		ob_ptr->pattern = 3;
}	

//
// VS,BATTLE ·óÍÑ
//
void DispVSResult(void)
{
	SetOBJBlock(KO_GAME_VS_RES,0,0,0);
}	

void DispMessageRomGhost(void)
{
	SetOBJBlock(KO_GAME_TA_MES1,0,0,0);
}	

//
// GP ENDING »þ¤ËÌðÅè¤µ¤ó¤Ë¥³¡¼¥ë¤·¤Æ¤â¤é¤¦
//
void StartKawanoResult(void)
{
	SetOBJBlock(KO_END1_FADE,0,0,2);
}

void StartKawanoEnding(void)
{
	switch(ending_counter){
	case 0:
		SetOBJBlock(KO_SR_Q1,0,0,2);
		break;
	case 1:
	default:
		SetOBJBlock(KO_SR_A1,0,0,2);
		SetOBJBlock(KO_SR_A2,0,0,2);
		break;
	case 2:
		SetOBJBlock(KO_SR_B1,0,0,2);
		SetOBJBlock(KO_SR_B2,0,0,2);
		break;
	case 3:
		SetOBJBlock(KO_SR_C1,0,0,2);
		SetOBJBlock(KO_SR_C2,0,0,2);
		break;
	case 4:
		SetOBJBlock(KO_SR_D1,0,0,2);
		SetOBJBlock(KO_SR_D2,0,0,2);
		break;
	case 5:
		SetOBJBlock(KO_SR_E1,0,0,2);
		SetOBJBlock(KO_SR_E2,0,0,2);
		SetOBJBlock(KO_SR_E3,0,0,2);
		SetOBJBlock(KO_SR_E4,0,0,2);
		break;
	case 6:
		SetOBJBlock(KO_SR_E1,0,0,2);
		SetOBJBlock(KO_SR_E5,0,0,2);
		SetOBJBlock(KO_SR_E6,0,0,2);
		SetOBJBlock(KO_SR_E7,0,0,2);
		break;
	case 7:
		SetOBJBlock(KO_SR_F1,0,0,2);
		SetOBJBlock(KO_SR_F2,0,0,2);
		SetOBJBlock(KO_SR_F3,0,0,2);
		SetOBJBlock(KO_SR_F4,0,0,2);
		break;
	case 8:
		SetOBJBlock(KO_SR_G1,0,0,2);
		SetOBJBlock(KO_SR_G2,0,0,2);
		break;
	case 9:
		SetOBJBlock(KO_SR_H1,0,0,2);
		SetOBJBlock(KO_SR_H2,0,0,2);
		SetOBJBlock(KO_SR_H3,0,0,2);
		SetOBJBlock(KO_SR_H4,0,0,2);
		SetOBJBlock(KO_SR_H5,0,0,2);
		break;
	case 10:
		SetOBJBlock(KO_SR_H1,0,0,2);
		SetOBJBlock(KO_SR_H2,0,0,2);
		SetOBJBlock(KO_SR_H6,0,0,2);
		SetOBJBlock(KO_SR_H7,0,0,2);
		SetOBJBlock(KO_SR_H8,0,0,2);
		break;
	case 11:
		SetOBJBlock(KO_SR_I1,0,0,2);
		SetOBJBlock(KO_SR_I2,0,0,2);
		SetOBJBlock(KO_SR_I3,0,0,2);
		SetOBJBlock(KO_SR_I4,0,0,2);
		break;
	case 12:
		SetOBJBlock(KO_SR_J1,0,0,2);
		SetOBJBlock(KO_SR_J2,0,0,2);
		break;
	case 13:
		SetOBJBlock(KO_SR_K1,0,0,2);
		SetOBJBlock(KO_SR_K2,0,0,2);
		SetOBJBlock(KO_SR_K3,0,0,2);
		break;
	case 14:
		SetOBJBlock(KO_SR_L1,0,0,2);
		SetOBJBlock(KO_SR_L2,0,0,2);
		SetOBJBlock(KO_SR_L3,0,0,2);
		SetOBJBlock(KO_SR_L4,0,0,2);
		SetOBJBlock(KO_SR_L5,0,0,2);
		SetOBJBlock(KO_SR_L6,0,0,2);
		SetOBJBlock(KO_SR_L7,0,0,2);
		break;
	case 15:
		SetOBJBlock(KO_SR_M1,0,0,2);
		SetOBJBlock(KO_SR_M2,0,0,2);
		SetOBJBlock(KO_SR_M3,0,0,2);
		SetOBJBlock(KO_SR_M4,0,0,2);
		break;
	case 16:
		SetOBJBlock(KO_SR_N1,0,0,2);
		SetOBJBlock(KO_SR_N2,0,0,2);
		SetOBJBlock(KO_SR_N3,0,0,2);
		break;
	case 17:
		SetOBJBlock(KO_SR_O1,0,0,2);
		SetOBJBlock(KO_SR_O2,0,0,2);
		SetOBJBlock(KO_SR_O3,0,0,2);
		SetOBJBlock(KO_SR_O4,0,0,2);
		SetOBJBlock(KO_SR_O5,0,0,2);
		SetOBJBlock(KO_SR_O6,0,0,2);
		SetOBJBlock(KO_SR_O7,0,0,2);
		SetOBJBlock(KO_SR_O8,0,0,2);
		SetOBJBlock(KO_SR_O9,0,0,2);
		break;
	case 18:
		SetOBJBlock(KO_SR_P1,0,0,2);
		break;
	}
}

//
// ¤³¤Î´Ø¿ô¤¬¸Æ¤Ð¤ì¤¿¤émessage¤¬Æ°¤­½Ð¤¹
//
void StaffRoll_kawano1(void)
{
	ending_message_flg = 1;
}


//
// ASCII¥³¡¼¥É¤«¤é¥Õ¥©¥ó¥ÈÈÖ¹æ(²ÏÌî¸Ä¿ÍÍÑ)¤ËÊÑ´¹¤¹¤ë
//
int GetFontNumber(char *moji)
{
	int font_number;

	while(1){
		font_number = 1;
		if ((*moji >= 97)&&(*moji <= 122)){
			font_number = *moji - 97;
			break;
		}
		if ((*moji >= 65)&&(*moji <= 90)){
			font_number = *moji - 65;
			break;
		}
		/*¿ô»ú*/
		if ((*moji >= 48)&&(*moji <= 57)){
			font_number = *moji - 16;
			break;
		}
		//¥¹¥Ú¡¼¥¹
		if (*moji == 32){
			font_number = -1;
			break;
		}
#ifdef CHINA
                if ((unsigned char)(*moji) >= 0xB0) {
                        font_number = 47 + (int)(*(moji+1));
                        break;
                }
#else
		if (*moji < 0){
			switch(*moji){
			case -92:
				font_number = GetFontNumber_h(moji+1);
				break;
			case -91:
				font_number = GetFontNumber_k(moji+1);
				break;
			case -95:
			case -93:
			case -85:
				font_number = GetFontNumber_j(moji);
				break;				
			default:
				break;
			}
			break;
		}
#endif
		switch(*moji){
		case 33:/*!*/
			font_number = 26;
			break;
		case 45:/*-*/
			font_number = 27;
			break;
		case 63:/*?*/
			font_number = 28;
			break;
		case 39:/*'*/
			font_number = 29;
			break;
		case 36:/*pts.*/
			font_number = 30;
			break;
		case 46:/*.*/
			font_number = 31;
			break;
		case 34:/*"*/
			font_number = 42;
			break;
		case 42:/*tenten(*)*/
			font_number = 43;
			break;
		case 43:/*+*/
			font_number = 44;
			break;
		case 40:/*cc*/
			font_number = 45;
			break;
		case 44:/*,*/
			font_number = 0x2e;
			break;
		default:
#if ROM==0
			if (*moji >= 0)
				PRINTF("%x,",*moji);
			else
				PRINTF("%x,%x,",*moji,*(moji+1));
#endif
#if ROM==0
			//PRINTF("I don't know this letter'%c'=%d.\n",*moji,*moji);
#endif
			font_number = -2;
			break;
		}
		break;
	}
	return(font_number);
}

//
// Á´³Ñ¥«¥¿¥«¥ÊÍÑ GetFontNumber
//
int GetFontNumber_k(char *moji)
{
	return(GetFontNumber_h(moji) + 0x50);
}

//
// Á´³Ñ¤Ò¤é¤¬¤ÊÍÑ GetFontNumber
//
int GetFontNumber_h(char *moji)
{
	int font_number;
	uchar p_moji;

	p_moji = *moji + 128;

	while(1){
		font_number = 0;
		/* ¤¢¡¼¤ª */
		if ((p_moji >= 0x21)&&(p_moji <= 0x2a)){
			if (p_moji%2){/*¤¡¤£¤¥¤§¤©*/
				font_number = (p_moji - 0x21)/2 + 0x7b;
				break;
			}
			else{/*¤¢¤¤¤¦¤¨¤ª*/
				font_number = (p_moji - 0x21)/2 + 0x30;
				break;
			}
		}
		/* ¤«¡¼¤í */
		if ((p_moji >= 0x2b)&&(p_moji <= 0x6d)){
			font_number = p_moji + 10;
			break;
		}
		switch(p_moji){
		case 0x6f:/*¤ï*/
			font_number = 0x78;
			break;
		case 0x72:/*¤ò*/
		case 0x73:/*¤ó*/
			font_number = p_moji + 7;
			break;
		default:
#if ROM==0
			PRINTF("I don't know this letter\n");
#endif
			font_number = -2;
			break;
		}
		break;
	}
	return(font_number);
}

//
// Á´³Ñ¿ô»ú¤½¤ÎÂ¾ÍÑ GetFontNumber
//
int GetFontNumber_j(char *moji)
{
	int font_number;
	uchar p_moji;

	p_moji = *(moji+1) + 128;

	font_number = 2;
	switch(*moji){
	case -95:
		switch(p_moji){
		case 0x22:/*¡¤*/
		case 0x24:
			font_number = 0xea;
			break;
		case 0x23:/*¡£*/
			font_number = 0xe9;
			break;
		case 0x25:/*.*/
			font_number = 0xd0;
			break;
		case 0x2a:/*!*/
			font_number = 0xe8;
			break;
		case 0x30:/*¡°(¤«¤é)*/
			font_number = 0xeb;
			break;
		case 0x47:/*'*/
			font_number = 0xd1;
			break;
		case 0x49:/*"*/
			font_number = 0xd2;
			break;
		case 0x5c:/*+*/
			font_number = 0xd3;
			break;
		case 0x3c:/*-*/
		case 0x3d:
		case 0x5d:
			font_number = 0xd4;
			break;
		}
		break;
	case -93:
		if ((p_moji>= 0x30) && (p_moji <= 0x39)){/*0-9*/
			font_number = p_moji + 0xa5;
			break;
		}
		switch(p_moji){
		case 0x44:/*D*/
			font_number = 0xdf;/*D*/
			break;
		case 0x43:
		case 0x63:/*C,c*/
			font_number = 0xe0;/*cc*/
			break;
		case 0x4e:
		case 0x6e:/*N,n*/
			font_number = 0xe1;/*nd*/
			break;
		case 0x50:
		case 0x70:/*P,p*/
			font_number = 0xe2;/*pts*/
			break;
		case 0x52:
		case 0x72:/*R,r*/
			font_number = 0xe3;/*rd*/
			break;
		case 0x73:/*s*/
			font_number = 0xe4;/*st*/
			break;
		case 0x54:
		case 0x74:/*T,t*/
			font_number = 0xe5;/*th*/
			break;
		case 0x53:/*S*/
			font_number = 0xe6;/*S*/
			break;
		case 0x56:
		case 0x76:/*V,v*/
			font_number = 0xe7;/*V*/
			break;
		}
		break;
	case -85:
		if (p_moji == 0x2e)
			font_number = 0xe0;
		break;
	}
	return(font_number);
}

int GetWordLength(char *moji)
{
	int l,font_number;

	l = 0;
	while(*moji != NULL){
		font_number = GetFontNumber(moji);
		if (font_number >= 0)
#ifdef CHINA
                    if (font_number >= 48)
			l += FONT_WIDTH_CHINESE; 
                    else
			l += font_width[font_number];
#else
			l += font_width[font_number];
#endif
		else{
			if (font_number == -1)
				l += FONT_WIDTH_SPACE;
		}
		if (font_number >= 0x30)
			moji += 2;
		else
			moji++;
	}
	return(l);
}

void SetPalette(int palette_number)
{
	afont_color = palette_number;
}

void SetWord(int x,int y,char *moji)
{
	SetPalette(0);
	SetWord2_a(x,y,moji,0,1.0,1.0);
}


//
// º¸²¼¤ò´ð½à¤ËÊ¸»ú¤ò½ñ¤¤¤Æ¤¤¤¯(4bit¥¢¥ë¥Õ¥¡)
//
void SetWord2(int x,int y,char *moji,int interval,
				float mulx,float muly,int type)
{
	int font_number;
	int width_buff;

	width_buff = 0;
	gSPDisplayList(graphPtr++, &kawano_dtl_k_afont_start);
	while(*moji != NULL){
		font_number = GetFontNumber(moji);
		if (font_number >= 0){
			TexBuffLoad(GetTBPointer(TexList_letters_[font_number]));
			graphPtr = doTexList4(graphPtr,
								  GetTBPointer(TexList_letters_[font_number]),
								  x+width_buff*mulx,y,type,mulx,muly);
#ifdef CHINA
                    if (font_number >= 48)
			width_buff += FONT_WIDTH_CHINESE + interval;
                    else
			width_buff += font_width[font_number] + interval;
#else
			width_buff += font_width[font_number] + interval;
#endif
			//x = x + (int)((font_width[font_number] + interval)*mulx);
		}
		else{
			switch(font_number){
			case -1:/* ¥¹¥Ú¡¼¥¹*/
				width_buff += FONT_WIDTH_SPACE + interval;
				//x = x + (int)((FONT_WIDTH_SPACE + interval)*mulx);
				break;
			case -2:/*ÃÎ¤é¤Ê¤¤Ê¸»ú*/
			default:
				gSPDisplayList(graphPtr++, &kawano_dtl_k_afont_end);
				return;
			}
		}
		if (font_number >= 0x30)
			moji += 2;
		else
			moji++;
	}
	gSPDisplayList(graphPtr++, &kawano_dtl_k_afont_end);
}

//
// º¸²¼¤ò´ð½à¤ËÊ¸»ú¤ò½ñ¤¤¤Æ¤¤¤¯(4bit¥¢¥ë¥Õ¥¡)
//
void SetWord2_a(int x,int y,char *moji,int interval,
				float mulx,float muly)
{
	SetWord2(x,y,moji,interval,mulx,muly,1);
}

//
// º¸²¼¤ò´ð½à¤ËÊ¸»ú¤ò½ñ¤¤¤Æ¤¤¤¯(4bit¥¢¥ë¥Õ¥¡,primitivealpha)
//
void SetWord2_ap(int x,int y,char *moji,int interval,
				float mulx,float muly)
{
	SetWord2(x,y,moji,interval,mulx,muly,2);
}

//
// Ê¸»úÎó¤ò¤Ò¤È¤«¤¿¤Þ¤ê¤È¤·¤Æ¤¢¤ëÃÏÅÀ¤ò´ð½à¤ËÊ¸»ú¤ò½ñ¤¤¤Æ¤¤¤¯(4bit¥¢¥ë¥Õ¥¡)
//
void SetWord3(int x,int y,char *moji,int interval,
			  float mulx,float muly,int type)
{
	int font_number,l;
	char *moji2;
	int dtl_mode;

	moji2 = moji;
	l = 0;
	while(*moji2 != NULL){
		font_number = GetFontNumber(moji2);
		if (font_number >= 0){
#ifdef CHINA
                    if (font_number >= 48)
			l += (FONT_WIDTH_CHINESE + interval)*mulx;
                    else
			l += (font_width[font_number] + interval)*mulx;
#else
			l += (font_width[font_number] + interval)*mulx;
#endif
		}
		else{
			switch(font_number){
			case -1:/* ¥¹¥Ú¡¼¥¹*/
				l += (FONT_WIDTH_SPACE + interval)*mulx;
				break;
			case -2:/*ÃÎ¤é¤Ê¤¤Ê¸»ú*/
			default:
				return;
			}
		}
		if (font_number >= 0x30)
			moji2 += 2;
		else
			moji2++;
	}
	switch(type){
	case 1:/* ±¦²¼¹ç¤ï¤» */
	case 3:
		x -= l;
		break;
	case 2:/* ¥»¥ó¥¿¥ê¥ó¥° */
	case 4:
		x -= l/2;
	}
	if (type <= 2)
		dtl_mode = 1;
	else
		dtl_mode = 2;
	//gDPSetTextureLUT(graphPtr++,G_TT_RGBA16);
	gSPDisplayList(graphPtr++, &kawano_dtl_k_afont_start);
	while(*moji != NULL){
		font_number = GetFontNumber(moji);
		if (font_number >= 0){
			TexBuffLoad(GetTBPointer(TexList_letters_[font_number]));
			graphPtr = doTexList4(graphPtr,
								  GetTBPointer(TexList_letters_[font_number]),
								  x,y,dtl_mode,mulx,muly);
#ifdef CHINA
                    if (font_number >= 48)
			x  = x + (int)((FONT_WIDTH_CHINESE + interval)*mulx);
                    else
			x  = x + (int)((font_width[font_number] + interval)*mulx);
#else
			x  = x + (int)((font_width[font_number] + interval)*mulx);
#endif
		}
		else{
			switch(font_number){
			case -1:/* ¥¹¥Ú¡¼¥¹*/
				x = x + (int)((FONT_WIDTH_SPACE + interval)*mulx);
				break;
			case -2:/*ÃÎ¤é¤Ê¤¤Ê¸»ú*/
			default:
				gSPDisplayList(graphPtr++, &kawano_dtl_k_afont_end);
				//gDPSetTextureLUT(graphPtr++,G_TT_NONE);
				return;
			}
		}
		if (font_number >= 0x30)
			moji += 2;
		else
			moji++;
	}
	gSPDisplayList(graphPtr++, &kawano_dtl_k_afont_end);
	//gDPSetTextureLUT(graphPtr++,G_TT_NONE);
}

//
// ±¦²¼¤ò´ð½à¤ËÊ¸»ú¤ò½ñ¤¤¤Æ¤¤¤¯(4bit¥¢¥ë¥Õ¥¡)
//
void SetWord3_a(int x,int y,char *moji,int interval,float mulx,float muly)
{
	SetWord3(x,y,moji,interval,mulx,muly,1);
}

//
// ¿¿¤óÃæ²¼¤ò´ð½à¤ËÊ¸»ú¤ò½ñ¤¤¤Æ¤¤¤¯(4bit¥¢¥ë¥Õ¥¡)
//
void SetWord3_ac(int x,int y,char *moji,int interval,float mulx,float muly)
{
	SetWord3(x,y,moji,interval,mulx,muly,2);
}

//
// ±¦²¼¤ò´ð½à¤ËÊ¸»ú¤ò½ñ¤¤¤Æ¤¤¤¯(4bit¥¢¥ë¥Õ¥¡,primitivealpha)
//
void SetWord3_ap(int x,int y,char *moji,int interval,float mulx,float muly)
{
	SetWord3(x,y,moji,interval,mulx,muly,3);
}

//
// ¿¿¤óÃæ²¼¤ò´ð½à¤ËÊ¸»ú¤ò½ñ¤¤¤Æ¤¤¤¯(4bit¥¢¥ë¥Õ¥¡,primitivealpha)
//
void SetWord3_acp(int x,int y,char *moji,int interval,float mulx,float muly)
{
	SetWord3(x,y,moji,interval,mulx,muly,4);
}

//
// Ãæ±û²¼¤ò´ð½à¤ËÊ¸»ú¤ò½ñ¤¤¤Æ¤¤¤¯(4bit¥¢¥ë¥Õ¥¡)
//
void SetWord4(int x,int y,char *moji,int interval,
			  float mulx,float muly,int type)
{
	int font_number;
	TexBlock *tp;
	int width;

	gSPDisplayList(graphPtr++, &kawano_dtl_k_afont_start);
	while(*moji != NULL){
		font_number = GetFontNumber(moji);
		if (font_number >= 0){
			tp = GetTBPointer(TexList_letters_[font_number]);
			TexBuffLoad(tp);
#ifdef CHINA
                    if (font_number >= 48)
			graphPtr = doTexList4(graphPtr,tp,
								  x-FONT_WIDTH_CHINESE/2,
								  y,type,mulx,muly);
                    else
			graphPtr = doTexList4(graphPtr,tp,
								  x-font_width[font_number]/2,
								  y,type,mulx,muly);
#else
			graphPtr = doTexList4(graphPtr,tp,
								  x-font_width[font_number]/2,
								  y,type,mulx,muly);
#endif
			if ((font_number >= 0xd5)&&(font_number <= 0xdf))
				width = 32;
			else
				width = 12;
			x = x + (int)((width + interval)*mulx);
		}
		else{
			switch(font_number){
			case -1:/* ¥¹¥Ú¡¼¥¹*/
				x = x + (int)((FONT_WIDTH_SPACE + interval)*mulx);
				break;
			case -2:/*ÃÎ¤é¤Ê¤¤Ê¸»ú*/
			default:
				gSPDisplayList(graphPtr++, &kawano_dtl_k_afont_end);
				return;
			}
		}
		if (font_number >= 0x30)
			moji += 2;
		else
			moji++;
	}
	gSPDisplayList(graphPtr++, &kawano_dtl_k_afont_end);
}

//
// Ãæ±û²¼¤ò´ð½à¤ËÊ¸»ú¤ò½ñ¤¤¤Æ¤¤¤¯(4bit¥¢¥ë¥Õ¥¡)
//
void SetWord4_a(int x,int y,char *moji,int interval,float mulx,float muly)
{
	SetWord4(x,y,moji,interval,mulx,muly,1);
}

//
// Ãæ±û²¼¤ò´ð½à¤ËÊ¸»ú¤ò½ñ¤¤¤Æ¤¤¤¯(4bit¥¢¥ë¥Õ¥¡,primitivealpha)
//
void SetWord4_ap(int x,int y,char *moji,int interval,float mulx,float muly)
{
	SetWord4(x,y,moji,interval,mulx,muly,2);
}

void kawanoDrawAfterSky(int mode)
{
	ThunderMain(screen_mode2num[mode]);
}

void kawanoDraw2(int mode)/* mode:kvars.h/l.246»²¾È */
{
	int i,sc_number;

	if (screen_counter == 0){
		BeforeFadeMain();
	}

	//kawanoDrawAfterSky(mode);
	switch(mode){
	case kw1p:
		kawanoDraw(screen_mode2num[mode]);
		break;
	case kw2p_r:
	case kw2p_u:
	case kw2p_l:
	case kw2p_d:
		if (screen_counter == 0)
			kawanoOnlyFade(screen_mode2num[mode]);
		else
			kawanoDraw(screen_mode2num[mode]);
		break;
	case kw4p_ul:
	case kw4p_ur:
	case kw4p_dl:
	case kw4p_dr:
		if (screen_counter == 3)
			kawanoDraw(screen_mode2num[mode]);
		else
			kawanoOnlyFade(screen_mode2num[mode]);			
		break;
	}
	gDPSetRenderMode(graphPtr++,G_RM_OPA_SURF, G_RM_OPA_SURF2);
}

void kawanoDraw2_backup(int mode)/* É½¼¨´Ø·¸¤ÎÌäÂê¤¬²ò·è¤·¤¿¤éºï½ü¤¹¤ë */
{
	int i;

	switch(mode){
	case kw1p:
	case kw2p_r:
	case kw2p_u:
	case kw4p_ul:
		BeforeFadeMain();
		break;
	}
	switch(mode){
	case kw1p:
		kawanoDraw(0);
		break;
	case kw2p_r:
	case kw2p_u:
	case kw4p_ul:
		kawanoOnlyFade(0);
		break;
	case kw2p_l:
	case kw2p_d:
	case kw4p_ur:
		kawanoDraw(1);
		break;
	case kw4p_dl:
		kawanoOnlyFade(2);
		break;
	case kw4p_dr:
		kawanoDraw(3);
		break;
	}
}

void kawanoOnlyFade(int num)
{
	gSPDisplayList(graphPtr++, &kawano_onlyfade_start);

	FadeMain2(num);

	gSPDisplayList(graphPtr++, &kawano_onlyfade_end);
}
 
static float Randomf(void)
{

	float rand = (unsigned short)make_random();
	return(rand/65536.0f);

}


	extern void draw_flag(void);

static void testprog(void)
{

    extern Vtx N_logof_v[];

    uint number= SEGMENT_NUMBER(N_logof_v);
    uint offset= SEGMENT_OFFSET(N_logof_v);
    int i;
 
    Vtx  *vtx=(Vtx *)OS_PHYSICAL_TO_K0(segmentTable[number]+offset);

    for(i=0;i<1092;i++){
	if ( (vtx+i)->n.n[2] < 0 ){
	    //(vtx+i)->n.n[2] = -(80+Randomf()*40);
	    (vtx+i)->n.n[2] = -(80+Randomf()*10);
	    (vtx+i)->n.n[1] = -(120+((vtx+i)->n.n[2]) );
	} else {
	    //(vtx+i)->n.n[2] =  (80+Randomf()*40);	
	    (vtx+i)->n.n[2] =  (80+Randomf()*10);	
	    (vtx+i)->n.n[1] =  (120-((vtx+i)->n.n[2]) );
	}
    }	

}

void kawanoDrawFinal_(int mode)
{
	gSPViewport(graphPtr++, K0_TO_PHYS((u32) &vp));
	guOrtho(&dynamicp->effectmodeling[effectcount],
		0.0F, (float)SCREEN_WD-1,
		(float)SCREEN_HT-1,0.0F, 
		-100.0F, 100.0F, 1.0F);
    gSPMatrix(graphPtr++, /*&dynamicp->effectmodeling[effectcount++],*/ 
			  K0_TO_PHYS((u32) &(dynamicp->effectmodeling[effectcount++])),
			  G_MTX_PROJECTION | G_MTX_LOAD | G_MTX_NOPUSH);

	gSPDisplayList(graphPtr++, &kawano_onlyfade_start);

	gDPSetScissor(graphPtr++, G_SC_NON_INTERLACE, 0, 0, 320, 240);
	doOBJBlock2();

	if (mode)
		return;
	DispOB_pause_cursor();/* ¥«¡¼¥½¥ë¤ò°ìÈÖ¼êÁ°¤Ë»ý¤Ã¤Æ¤­¤¿¤«¤Ã¤¿¤Î¤Ç¤³¤³ */
	FadeMain2(4);
	kwdb_effectcount = effectcount;/* for kawaguti */
	effectcount = 0;/* ¥Þ¥È¥ê¥Ã¥¯¥¹¤Î¥«¥¦¥ó¥¿¤Î½é´ü²½ */
}

void kawanoDrawFinal(void)
{
	kawanoDrawFinal_(0);
}

void kawanoDrawFinal4select(void)
{
	kawanoDrawFinal_(1);
}

void init_kawanoResult(void)
{
	int i;
	
	melt_buff=(unsigned int *)allocatememory(MELT_BUFF_SIZE2);
	tex_buff=(unsigned short *)allocatememory(MAX_TEX_BUFF_NUM2*sizeof(short));
	k_work=(unsigned char *)allocatememory(64*64);
	additional_point=(unsigned char *)allocatememory(4);

	for(i = 0;i < 5;i++)
		fade_flg[i] = 0;
	for (i = 0;i < 4;i++)
		thunder_flg[i] = 0;

	InitTexBuff();
	InitSeqData();
	InitOBJBlock();
	InitVC_kawano();
	ending_message_flg = 0;

#if ENDING_DEBUG_SWITCH
	StartKawanoResult();
#endif
	
}

void kawanoDrawResult(void)
{
	gSPViewport(graphPtr++, K0_TO_PHYS((u32) &vp));
	guOrtho(&dynamicp->effectmodeling[effectcount],
		0.0F, (float)SCREEN_WD-1,
		(float)SCREEN_HT-1,0.0F, 
		-100.0F, 100.0F, 1.0F);
    gSPMatrix(graphPtr++, /*&dynamicp->effectmodeling[effectcount++],*/ 
			  K0_TO_PHYS((u32) &(dynamicp->effectmodeling[effectcount++])),
			  G_MTX_PROJECTION | G_MTX_LOAD | G_MTX_NOPUSH);

	gSPDisplayList(graphPtr++, &kawano_onlyfade_start);

	gDPSetScissor(graphPtr++, G_SC_NON_INTERLACE, 0, 0, 320, 240);
	VCAutoChanger(4,&vc_color_num[0],&vc_color_step[0]);
	VCAutoChanger(5,&vc_color_num[1],&vc_color_step[1]);

	BeforeFadeMain();
	InitChangeTexData();
	InitChangeTexData_vs();//vs¥ê¥¶¥ë¥ÈÉ½¼¨ÍÑ

	doOBJBlock1();
	doChangeTexData();
	doChangeTexData_vs();//vs¥ê¥¶¥ë¥ÈÉ½¼¨ÍÑ

	FadeMain();
	//FadeMain2(4);
	
	gSPDisplayList(graphPtr++, &kawano_onlyfade_end);
	//if (sequence_mode == ENDINGSEQUENCE)
		effectcount = 0;/* ¥Þ¥È¥ê¥Ã¥¯¥¹¤Î¥«¥¦¥ó¥¿¤Î½é´ü²½ */
	//if (cont1P->ontrigger & CONT_R)
	//	StaffRoll_kawano1();
}



void kawanoDraw(int num)
{
	float vf1,vf2;
	//extern Dynamic *dynamicp;

	gSPViewport(graphPtr++, K0_TO_PHYS((u32) &vp));
	gDPSetScissor(graphPtr++, G_SC_NON_INTERLACE, 0, 0, 320, 240);
	guOrtho(&dynamicp->effectmodeling[effectcount],
		0.0F, (float)SCREEN_WD-1,
		(float)SCREEN_HT-1,0.0F, 
		-100.0F, 100.0F, 1.0F);
    gSPMatrix(graphPtr++, /*&dynamicp->effectmodeling[effectcount++],*/ 
			  K0_TO_PHYS((u32) &(dynamicp->effectmodeling[effectcount++])),
			  G_MTX_PROJECTION | G_MTX_LOAD | G_MTX_NOPUSH);

	gSPDisplayList(graphPtr++, &kawano_onlyfade_start);

	VCAutoChanger(4,&vc_color_num[0],&vc_color_step[0]);
	VCAutoChanger(5,&vc_color_num[1],&vc_color_step[1]);
	SkipManager();
	//BeforeFadeMain();
	InitChangeTexData();
	InitChangeTexData_vs();//vs¥ê¥¶¥ë¥ÈÉ½¼¨ÍÑ

	doOBJBlock1();
	doChangeTexData();
	doChangeTexData_vs();//vs¥ê¥¶¥ë¥ÈÉ½¼¨ÍÑ


#if 0
	//¥²¡¼¥à²èÌÌ¤Ë¥Î¥¤¥º
	graphPtr = AutoTextureRect_noise(graphPtr,0,0,320,240);
#endif
#if 0
	SetPalette(0);
	SetWord2_a(50,140,"oaofoiogowo!o-",0,1.0,1.0);
	SetPalette(1);
	SetWord2_a(100,160,"¤Æ¤¹¤È¤¢¤¡¤¤¤£¤¦¤¥¤¨¤§¤ª¤©",0,1.0,1.0);
	SetPalette(2);
	SetWord2_a(100,120,"¥Æ¥¹¥È¥¢¥¡¥¤¥£¥¦¥¥¥¨¥§¥ª¥©",0,1.0,1.0);
	SetPalette(3);
	SetWord2_a(100,100,"£´£³£²£±£°",0,1.0,1.0);
	SetPalette(4);
	SetWord2_a(100,60,"¡Ü¡¼¡É£ã£î£ð£ò£ó£ô¡¥¡Ç",0,1.0,1.0);
	SetPalette(5);
	SetWord2_a(100,40,"43210",0,1.0,1.0);
#endif

#if 0
	//Ê¸»úÉ½¼¨¡Ê¥¹¥Æ¥£¥Ã¥¯¤Ç³ÈÂç½Ì¾®¡Ë
	vf1 = cont1P->stickx/100.0 + 1.0;
	if (cont1P->status & CONT_R)
		vf2 = cont1P->sticky/100.0 + 1.0;
	else
		vf2 = cont1P->stickx/100.0 + 1.0;
	PRINTF("x:%2f,y:%2f\n",vf1,vf2);
	SetPalette(0);
	SetWord2_a(20,50,"+a+f+i+g+w+-+!a'b'c'\".$43210",0,vf1,vf2);
	//SetPalette(1);
	//SetWord2_a(20,75,"rarfrirgrwr-r!98765+(",0,vf1,vf2);
	//SetPalette(2);
	//SetWord2_a(20,100,"abcdefghijklmnmlkjihgfedcba*",0,vf1,vf2);
	//SetPalette(3);
	//SetWord2_a(20,125,"circuit vcscwcvisici titctf",0,vf1,vf2);
	//SetWord2_a(20,150,"opqrstuvwxyz-?!",0,vf1,vf2);
#endif
	
#if 0
	if (cont1P->ontrigger & CONT_L)
		SetFadeOutScreen(0,30);
	if (cont1P->ontrigger & CONT_R)
		SetFadeInScreen(0,30);
	if (cont2P->ontrigger & CONT_L)
		SetFadeOutScreen(1,30);
	if (cont2P->ontrigger & CONT_R)
		SetFadeInScreen(1,30);
#endif
#if 0
	if (cont1P->ontrigger & CONT_L)
		SetThunder_(0);
	if (cont2P->ontrigger & CONT_L)
		SetThunder_(1);
	if (cont3P->ontrigger & CONT_L)
		SetThunder_(2);
	if (cont4P->ontrigger & CONT_L)
		SetThunder_(3);
#endif
#if 0
	if (cont1P->ontrigger & CONT_L){
		enemy_item_number_set(&enemy_item[1],ib_thunder);
	}
#endif

	FadeMain2(num);
	//FadeMain2(4);

	gSPDisplayList(graphPtr++, &kawano_onlyfade_end);
//	effectcount = 0;/* ¥Þ¥È¥ê¥Ã¥¯¥¹¤Î¥«¥¦¥ó¥¿¤Î½é´ü²½ */
	kwreturn_viewport();
#if DISP_FREE_MEMORY_SWITCH
	PRINTF("free=%d\n",report);
#endif
#if DISP_GLIST_SIZE_SWITCH
	{
		extern Dynamic	*dynamicp;
		PRINTF("graphPtr=%x\n",(uint)graphPtr-(uint)&(dynamicp->glist));
	}
#endif
#if DISP_MATRIX_COUNT_SWITCH
	{
		PRINTF("effectcount=%4d ",effectcount);
		//PRINTF("modelingnum=%d\n",modelingnum);
	}
#endif
}

#define	gxDPSetFillColor(gp,r,g,b)	gDPSetFillColor((gp),GPACK_RGBA5551(r,g,b,1) << 16 | GPACK_RGBA5551(r,g,b,1))

/*----------------------------- Delay Logo Program ---------------------------------------*/

#define	DL_KARTLOGO		1
#if 	DL_KARTLOGO

#define	 KARTLOGO_TIME1 	(2+30)
#define	 KARTLOGO_TIME2 	(70+30)
#define	 KARTLOGO_TIME3 	(120+30)

extern Gfx 		gfx_nintendo_waku[];
static float	logo_delay_size = 0.0f;
static float	logo_yang_speed = 3.0f;
static int		logo_timer;
static void 	logo_proc(void)
{

	int		i;
	float	speed;
	Mtx	*matrixp = &dynamicp->objectmodeling[0];

    gSPMatrix(graphPtr++,  &(dynamicp->projection), 
	       G_MTX_PROJECTION | G_MTX_LOAD | G_MTX_NOPUSH);
    gSPMatrix(graphPtr++, &(dynamicp->viewing), 
	       G_MTX_MODELVIEW | G_MTX_LOAD | G_MTX_NOPUSH);

	/*---- draw logo  ----*/
	guRotate		( matrixp+0,logo_rot_x, 1.0F, 0.0F, 0.0F );			/* Set Angle X */
	guRotate		( matrixp+1,logo_rot_y, 0.0F, 1.0F, 0.0F );			/* Set Angle Y */
	guScale 		( matrixp+2,            1.0F, 1.0F, logo_scale_z);	/* Set Scale X */
    gSPMatrix		( graphPtr++, matrixp++, G_MTX_MODELVIEW | G_MTX_MUL | G_MTX_NOPUSH	);
    gSPMatrix		( graphPtr++, matrixp++, G_MTX_MODELVIEW | G_MTX_MUL | G_MTX_NOPUSH	);
    gSPMatrix		( graphPtr++, matrixp++, G_MTX_MODELVIEW | G_MTX_MUL | G_MTX_PUSH  	);
	gDPSetRenderMode( graphPtr++, G_RM_AA_ZB_OPA_SURF,G_RM_AA_ZB_OPA_SURF2				);
	gDPSetEnvColor	( graphPtr++, 0,0,0,0 );
	gSPDisplayList  ( graphPtr++,kawano_nintenlogo_all);
	gSPPopMatrix	( graphPtr++, G_MTX_MODELVIEW 	);

	/*---- draw delay ----*/
	if ( logo_delay_size > 0 ){
		if ( ( speed = logo_yang_speed ) > 10 ) speed = 10;
		for(i=0;i<12;i++){
			guRotate		( matrixp+0,0.0F 				   				 , 1.0F, 0.0F, 0.0F);
			guRotate		( matrixp+1,logo_delay_size*(i+1)*speed			 , 0.0F, 1.0F, 0.0F);
			guScale 		( matrixp+2,   1.0F,1.0F,2.0F);
		    gSPMatrix		( graphPtr++,  matrixp++, G_MTX_MODELVIEW | G_MTX_MUL | G_MTX_PUSH);
		    gSPMatrix		( graphPtr++,  matrixp++, G_MTX_MODELVIEW | G_MTX_MUL | G_MTX_NOPUSH);
		    gSPMatrix		( graphPtr++,  matrixp++, G_MTX_MODELVIEW | G_MTX_MUL | G_MTX_NOPUSH);
			gDPSetRenderMode( graphPtr++, G_RM_AA_ZB_XLU_SURF,G_RM_AA_ZB_XLU_SURF2);
			gDPSetEnvColor	( graphPtr++, 0,0,0,	0x10+0x10*(11-i)	);
			gSPDisplayList  ( graphPtr++, gfx_nintendo_waku);
		    gSPPopMatrix	( graphPtr++, G_MTX_MODELVIEW 				);
		}
	}

}
#endif

void doNintenLogo(Dynamic *dynamicp,int work)
{
    u16		   perspNorm;


	StoreSegments();

    gDPSetTexturePersp(graphPtr++,G_TP_PERSP);

	guPerspective(&dynamicp->projection,&perspNorm,
				  45.0,320.0/240.0,100,12800,1.0);
	gSPPerspNormalize(graphPtr++, perspNorm);
	guLookAt(&dynamicp->viewing,
			 0,0,logo_cam_z,   
			 0,0,0,					     						      
			 0,1,0);					     						      

#if DL_KARTLOGO
	logo_proc();
#else
	guRotate(&dynamicp->objectmodeling[0],
			 logo_rot_x, 1.0F, 0.0F, 0.0F);
	guRotate(&dynamicp->objectmodeling[1],
			 logo_rot_y, 0.0F, 1.0F, 0.0F);
	guScale(&dynamicp->objectmodeling[2],
			 1.0F, 1.0F, logo_scale_z);
    gSPMatrix(graphPtr++,  &(dynamicp->projection), 
	       G_MTX_PROJECTION | G_MTX_LOAD | G_MTX_NOPUSH);
    gSPMatrix(graphPtr++, &(dynamicp->viewing), 
	       G_MTX_MODELVIEW | G_MTX_LOAD | G_MTX_NOPUSH);
    gSPMatrix(graphPtr++,  &(dynamicp->objectmodeling[0]), 
	      G_MTX_MODELVIEW | G_MTX_MUL | G_MTX_NOPUSH);
    gSPMatrix(graphPtr++,  &(dynamicp->objectmodeling[1]), 
	      G_MTX_MODELVIEW | G_MTX_MUL | G_MTX_NOPUSH);
    gSPMatrix(graphPtr++,  &(dynamicp->objectmodeling[2]), 
	      G_MTX_MODELVIEW | G_MTX_MUL | G_MTX_NOPUSH);
	gDPPipeSync(graphPtr++);
	if (!work)
	    testprog();
	gSPDisplayList(graphPtr++,kawano_nintenlogo_all);
#endif

	
#if 0
	kwprintmode_init();
	kwprintd(170,160,"scale_z",logo_scale_z);
	kwprintd(170,170,"camera_z",logo_cam_z);
	kwprintd(170,180,"rot_x",logo_rot_x);
	kwprintd(170,190,"rot_y",logo_rot_y);
	kwprintd(170,200,"rot_z",logo_rot_z);
	kwprintmode_finish();
#endif
    gDPPipeSync(graphPtr++);
	
    gDPSetTexturePersp(graphPtr++,G_TP_NONE);
    gDPSetTextureFilter(graphPtr++,G_TF_BILERP);
	return;
}

void doCheckerFlag(Dynamic *dynamicp,int work)
{
    u16		   perspNorm;


	StoreSegments();


	guPerspective(&dynamicp->projection1,&perspNorm,
				  45.0,320.0/240.0,100,12800,1.0);
	gSPPerspNormalize(graphPtr++, perspNorm);
	guLookAt(&dynamicp->viewing1,
			 0,0,logo_cam_z,   
			 0,0,0,					     						      
			 0,1,0);					     						      

	guRotate(&dynamicp->objectmodeling[0],
			 logo_rot_x, 1.0F, 0.0F, 0.0F);
	guRotate(&dynamicp->objectmodeling[1],
			 logo_rot_y, 0.0F, 1.0F, 0.0F);
	guRotate(&dynamicp->objectmodeling[2],
			 logo_rot_z, 0.0F, 0.0F, 1.0F);
	guScale(&dynamicp->objectmodeling[3],
			logo_scale_z, logo_scale_z, logo_scale_z);
	guTranslate(&dynamicp->objectmodeling[4],
				logo_pos_x,logo_pos_y,logo_pos_z);

    gSPMatrix(graphPtr++,  &(dynamicp->projection1), 
	       G_MTX_PROJECTION | G_MTX_LOAD | G_MTX_NOPUSH);
    gSPMatrix(graphPtr++, &(dynamicp->viewing1), 
	       G_MTX_MODELVIEW | G_MTX_LOAD | G_MTX_NOPUSH);
    gSPMatrix(graphPtr++,  &(dynamicp->objectmodeling[0]), 
	      G_MTX_MODELVIEW | G_MTX_MUL | G_MTX_NOPUSH);
    gSPMatrix(graphPtr++,  &(dynamicp->objectmodeling[1]), 
	      G_MTX_MODELVIEW | G_MTX_MUL | G_MTX_NOPUSH);
    gSPMatrix(graphPtr++,  &(dynamicp->objectmodeling[2]), 
	      G_MTX_MODELVIEW | G_MTX_MUL | G_MTX_NOPUSH);
    gSPMatrix(graphPtr++,  &(dynamicp->objectmodeling[3]), 
	      G_MTX_MODELVIEW | G_MTX_MUL | G_MTX_NOPUSH);
    gSPMatrix(graphPtr++,  &(dynamicp->objectmodeling[4]), 
	      G_MTX_MODELVIEW | G_MTX_MUL | G_MTX_NOPUSH);

	gSPDisplayList(graphPtr++,kawano_checkerflag_start);

	draw_flag();
    //gDPSetTextureFilter(graphPtr++,G_TF_POINT);

#if CHECKER_FLAG_TEST
	kwprintmode_init();
	kwprintd(170,140,"scale_z",logo_scale_z);
	kwprintd(170,150,"camera_z",logo_cam_z);
	kwprintd(170,160,"pos_x",logo_pos_x);
	kwprintd(170,170,"pos_y",logo_pos_y);
	kwprintd(170,180,"rot_x",logo_rot_x);
	kwprintd(170,190,"rot_y",logo_rot_y);
	kwprintd(170,200,"rot_z",logo_rot_z);
	kwprintmode_finish();
#endif

	gSPDisplayList(graphPtr++,kawano_init_pattern1);
  
	return;
}


void doGameSelect(Dynamic *dynamicp)
{
    u16		   perspNorm;
    unsigned short *tex_ptr;

	modelingnum = 0;
	effectcount = 0;

	gSPViewport(graphPtr++, K0_TO_PHYS((u32) &vp));
	gDPSetScissor(graphPtr++, G_SC_NON_INTERLACE, 0, 0, 320, 240);
	guOrtho(&dynamicp->projection,
		0.0F, (float)SCREEN_WD-1,
		(float)SCREEN_HT-1,0.0F, 
		-100.0F, 100.0F, 1.0F);
    gSPMatrix(graphPtr++, &dynamicp->projection, 
	       G_MTX_PROJECTION | G_MTX_LOAD | G_MTX_NOPUSH);

#if 0
	guOrtho(&dynamicp->projection,
		0.0F, (float)SCREEN_WD-1,
		(float)SCREEN_HT-1,0.0F, 
		-100.0F, 100.0F, 1.0F);
	guRotate(&dynamicp->viewing, 0.0F, 0.0F, 0.0F, 1.0F);

    /* Setup model matrix */
    gSPMatrix(graphPtr++, &dynamicp->projection, 
	       G_MTX_PROJECTION | G_MTX_LOAD | G_MTX_NOPUSH);
    gSPMatrix(graphPtr++, &dynamicp->viewing, 
	       G_MTX_MODELVIEW | G_MTX_LOAD | G_MTX_NOPUSH);
#endif

	gSPDisplayList(graphPtr++,kawano_init_pattern1);

	TexDataChange();
	VCAutoChanger(4,&vc_color_num[0],&vc_color_step[0]);
	VCAutoChanger(5,&vc_color_num[1],&vc_color_step[1]);
	InitChangeTexData();
	BeforeFadeMain();

	switch(k_bg_number){
	case 10:
		doGameSelect10();
		kawanoDrawFinal4select();
		break;
	case 5:
	case 6:
	case 7:
	case 8:
	case 9:
	case 11:
	case 12:
	case 13:
		doOBJBlock1();
		doChangeTexData();
		break;
	default:
		break;
	}

	FadeMain();
	k_flash_counter++;

#if 0
	if (fb_clear_flg < 3)
		fb_clear_flg++;
#endif

    gDPPipeSync(graphPtr++);

#if 0
    gDPPipeSync(graphPtr++);
    gDPSetRenderMode(graphPtr++,G_RM_XLU_SURF, G_RM_XLU_SURF2);
    gDPSetCombineMode(graphPtr++,G_CC_MODULATERGB_PRIM, G_CC_MODULATERGB_PRIM);
	gDPSetPrimColor(graphPtr++,0,0,64,64,64,200);
#endif

	gSPDisplayList(graphPtr++,kawano_finish_pattern1);

#if DISP_FREE_MEMORY_SWITCH
	report = MKCODE_START/*last_memory_pointer*/ - free_memory_pointer;
	PRINTF("free=%d\n",report);
#endif
}

void TexDataChange(void)
{
	extern u8 pattern;

    if (k_bg_change){
		InitTexBuff();
		InitSeqData();
		InitOBJBlock();
		InitKDL();
		InitVC_kawano();
		initPak();
		initPak2();
		k_var_init(k_bg_number);
		switch(k_bg_number){
		case 0:
			//TexBuffLoad(TexList_titleback);
			//TexBuffLoad(TexList_titlelogo);
			break;
		case 5:
			SetOBJBlock(KO_GSEL_BACK,0,0,2);
			SetOBJBlock(KO_OPT_LOGO,0,0,4);
			SetOBJBlock(KO_OPT_MES,0,0,2);
			break;
		case 6:
			SetOBJBlock(KO_GSEL_BACK,0,0,2);
			//SetOBJBlock(KO_TSEL_KCUP,0,0,8);
			//SetOBJBlock(KO_TSEL_FCUP,0,0,8);
			//SetOBJBlock(KO_TSEL_SCUP,0,0,8);
			//SetOBJBlock(KO_TSEL_SPCUP,0,0,8);
			SetOBJBlock(KO_TSEL_TITLE,0,0,6);
			SetOBJBlock(KO_TSEL_KCUP1,0,0,6);
			SetOBJBlock(KO_TSEL_KCUP2,0,0,6);
			SetOBJBlock(KO_TSEL_KCUP3,0,0,6);
			SetOBJBlock(KO_TSEL_KCUP4,0,0,6);
			SetOBJBlock(KO_TSEL_FCUP1,0,0,6);
			SetOBJBlock(KO_TSEL_FCUP2,0,0,6);
			SetOBJBlock(KO_TSEL_FCUP3,0,0,6);
			SetOBJBlock(KO_TSEL_FCUP4,0,0,6);
			SetOBJBlock(KO_TSEL_SCUP1,0,0,6);
			SetOBJBlock(KO_TSEL_SCUP2,0,0,6);
			SetOBJBlock(KO_TSEL_SCUP3,0,0,6);
			SetOBJBlock(KO_TSEL_SCUP4,0,0,6);
			SetOBJBlock(KO_TSEL_SPCUP1,0,0,6);
			SetOBJBlock(KO_TSEL_SPCUP2,0,0,6);
			SetOBJBlock(KO_TSEL_SPCUP3,0,0,6);
			SetOBJBlock(KO_TSEL_SPCUP4,0,0,6);
			SetOBJBlock(KO_TSEL_CURSOR,0,0,8);
			break;
		case 7:
			SetOBJBlock(KO_DSEL_SNAP,0,0,8);
			SetOBJBlock(KO_DSEL_MES1,0,0,8);
			SetOBJBlock(KO_DSEL_SEL1,0,0,8);
			SetOBJBlock(KO_DSEL_SEL2,0,0,8);
			SetOBJBlock(KO_DSEL_SEL3,0,0,8);
			break;
		case 8:
			SetOBJBlock(KO_NINTEN_LOGO,0,0,0);
			//SetOBJBlock(KO_CHECKER_FLAG,0,0,0);
			break;
		case 9:
			SetOBJBlock(KO_CP_CSCOLOR,0,0,0);
			SetOBJBlock(KO_CP_BG1,0,0,4);
			SetOBJBlock(KO_CP_GNOTE,0,0,6);
			SetOBJBlock(KO_CP_BG2,0,0,8);
			SetOBJBlock(KO_CP_MES1,0,0,10);
			SetOBJBlock(KO_CP_MES2,0,0,10);
			SetOBJBlock(KO_CP_FREE,0,0,10);
			SetOBJBlock(KO_CP_CURSOR1,0,0,10);
			SetOBJBlock(KO_CP_CURSOR2,0,0,10);
			break;
		case 10:
			SetOBJBlock(KO_TITLE2,0,0,4);
			SetOBJBlock(KO_TITLE,0,0,0);
			SetOBJBlock(KO_CHECKER_FLAG,0,0,0);
			//SetOBJBlock(KO_TITLE2,0,0,2);
			if (pattern & 0x1)
				SetOBJBlock(KO_TITLE3,0,0,2);
			else
				SetOBJBlock(KO_NOCONTROLLER,0,0,2);
#if FONT_TEST_ON_TITLE
			SetOBJBlock(KO_TEST_CPFONT,35,50,0);
#endif
#if FINALCHECK==1
			SetOBJBlock(KO_TITLE_TIME,0,0,6);
#endif	
			demo_flag = 0;
			demo_play_flag = 0;
//			GrayScale_tex_buff2(1,100);
//			GrayScale_tex_buff_RGB(0,307200,255,255,51);
			break;
		case 11:
			SetOBJBlock(KO_GSEL_BACK,0,0,2);
			SetOBJBlock(KO_GSEL_LOGO,350,17,6);
			SetOBJBlock(KO_GSEL_4P,350,62,6);
			SetOBJBlock(KO_GSEL_3P,350,62,6);
			SetOBJBlock(KO_GSEL_2P,350,62,6);
			SetOBJBlock(KO_GSEL_1P,350,62,6);
			SetOBJBlock(KO_GSEL_OK,350,200,6);
			SetOBJBlock(KO_GSEL_RECORD,350,200,6);
			SetOBJBlock(KO_GSEL_OPTION,350,200,6);
			if (Check4GoldCup_150cc())
				SetOBJBlock(KO_GSEL_PRO,0,0,6);
			SetOBJBlock(KO_GSEL_150CC,0,0,6);
			SetOBJBlock(KO_GSEL_100CC,0,0,6);
			SetOBJBlock(KO_GSEL_50CC,0,0,6);
			//SetOBJBlock(KO_GSEL_ITEMOFF,0,0,6);
			//SetOBJBlock(KO_GSEL_ITEMON,0,0,6);
			SetOBJBlock(KO_GSEL_DATA,0,0,6);
			//SetOBJBlock(KO_GSEL_GHOST,0,0,6);
			SetOBJBlock(KO_GSEL_TRY,0,0,6);
			//GrayScale_tex_buff2(1,100);
			SetOBJBlock(KO_GSEL_CAUTION,0,0,12);
			
			break;
		case 12:
			SetOBJBlock(KO_PSEL_BACK,0,0,2);
			SetOBJBlock(KO_PSEL_LOGO,0,0,6);
			SetOBJBlock(KO_PSEL_OK,0,0,6);
			SetOBJBlock(KO_PSEL_MA,0,0,8);
			SetOBJBlock(KO_PSEL_LU,0,0,8);
			SetOBJBlock(KO_PSEL_PE,0,0,6);
			SetOBJBlock(KO_PSEL_KI,0,0,6);
			SetOBJBlock(KO_PSEL_YO,0,0,6);
			SetOBJBlock(KO_PSEL_KA,0,0,6);
			SetOBJBlock(KO_PSEL_WA,0,0,6);
			SetOBJBlock(KO_PSEL_KU,0,0,8);
			SetOBJBlock(KO_PSEL_1P,0,0,12);
			SetOBJBlock(KO_PSEL_2P,0,0,12);
			SetOBJBlock(KO_PSEL_3P,0,0,12);
			SetOBJBlock(KO_PSEL_4P,0,0,12);

			break;
		case 13:
			SetOBJBlock(KO_MSEL_BACK,0,0,2);
			SetOBJBlock(KO_MSEL_LOGO,0,0,6);
			if (game_mode != BATTLE){
				SetOBJBlock(KO_MSEL_KCUP,0,0,4);
				SetOBJBlock(KO_MSEL_FCUP,0,0,4);
				SetOBJBlock(KO_MSEL_SCUP,0,0,4);
				SetOBJBlock(KO_MSEL_SPCUP,0,0,4);
				
				SetOBJBlock(KO_MSEL_KNAME,0,0,6);
				SetOBJBlock(KO_MSEL_FNAME,0,0,6);
				SetOBJBlock(KO_MSEL_SNAME,0,0,6);
				SetOBJBlock(KO_MSEL_SPNAME,0,0,6);
			}
			else{
				SetOBJBlock(KO_MSEL_BATTLE,0,0,6);
				SetOBJBlock(KO_MSEL_BTMES,0,0,6);
			}
				
#if 0
			//SetOBJBlock(KO_MSEL_MAP,0,0,6);//¸½ºßÉÔÍ×
#endif
			SetOBJBlock(KO_MSEL_MAPMAN,0,0,6);
			SetOBJBlock(KO_MSEL_MAP1,0,0,6);
			SetOBJBlock(KO_MSEL_MAP2,0,0,6);
			SetOBJBlock(KO_MSEL_MAP3,0,0,6);
			SetOBJBlock(KO_MSEL_MAP4,0,0,6);
			SetOBJBlock(KO_MSEL_OK,0,0,6);
			SetOBJBlock(KO_MSEL_NOISE,0,0,8);
			if (game_mode == TIMEATTACK){
				SetOBJBlock(KO_MSEL_BRECORD,0,0,8);
				SetOBJBlock(KO_MSEL_BLAP,0,0,8);
				SetOBJBlock(KO_MSEL_GHOST,0,0,8);
			}
			if (game_mode == MARIOGP){
				SetOBJBlock(KO_MSEL_LEVEL,0,0,8);
				SetOBJBlock(KO_MSEL_CUP,0,0,5);
			}
			break;
		default:
			break;
		}
		//k_var_init(k_bg_number);
		if (k_bg_change != 2)
			SetFadeIn(20);
		else
			SetFadeInWhite(20);
		k_bg_change = 0;
	}

}	

void doGameSelect10(void)
{
	int i;

	if ((fb_clear_flg < 3) ||(fade_flg[4])){
		doOBJBlock1();
	}

	if (title_mode > 1){
		kwprintmode_init();
		kwprint(80,100,"debug_mode");
		switch (title_mode){
		case 2:
			kwprint(70,100,"*");
			break;
		case 3:
			kwprint(70,110,"*");
			break;
		case 4:
			kwprint(70,120,"*");
			break;
		case 5:
			kwprint(70,130,"*");
			break;
		case 6:
			kwprint(70,140,"*");
			break;
		case 7:
			kwprint(70,150,"*");
			break;
		default:
			break;
		}
		if (debug_flag)
		    kwprint(170,100,"on");
		else
		    kwprint(170,100,"off");
		if ((map_number > 19)||(map_number < 0))
			map_number = 0;
		kwprintd(80,110,"map_number",map_number);
		if (map_number < 10)
			i = 0;
		else
			i = 8;
		kwprint(185+i,110,circuit_name_short[map_number]);
		kwprint(80,120,"screen_mode");
		kwprint(170,120,screen_mode_names[screen_mode_status]);
		kwprint(80,130,"player");
		kwprint(170,130,drivers_name[player_driver[0]]);
		kwprint(80,140,"sound mode");
		kwprint(170,140,sound_mode_name[sound_output]);
		if (title_mode == 7)
			kwprint(80,150,"push b to get all goldcup");
		kwprintmode_finish();
	}

	if (title_mode == 1)
	    title_counter++;
	else
	    title_counter = 3;

	if (title_counter == 2)
	    Na_System_Start(SE_ThisIsMarioKart);

#if TITLE_UNLIMITED_SWITCH
	if (title_counter > 5)
		title_counter = 5;
#endif

	if (title_counter > TITLE_TIME){
		SetFadeOut_d();
		Na_SeMute_Title();
	    //Na_Seq_Fadeout(255);
	}

	//GrayScale_tex_buff256(1,0,76800,(frame_counter%64)*4);
	gSPDisplayList(graphPtr++,kawano_finish_pattern2);
}

//-------------------------------------------------
//
// ¹õÇò¤ÎÅÀÌÇ¤¹¤ë»Í³Ñ(speed²ÄÊÑ)
//
//-------------------------------------------------
Gfx *FlashRectangle2_(Gfx *gdl,unsigned int ulx,unsigned int uly,
					  unsigned int drx,unsigned int dry,int speed)
{
	int color;

	color = (k_flash_counter % speed)*512/speed;
	if (color > 256)
		color = 512-color;
	if (color > 255)
		color = 255;

	graphPtr = FillRect1Color(graphPtr,ulx,uly,drx,dry,
							color,color,color,255);
}

//-------------------------------------------------
//
// ¹õÇò¤Î¤æ¤Ã¤¯¤êÅÀÌÇ¤¹¤ë»Í³Ñ
//
//-------------------------------------------------
Gfx *FlashRectangle2(Gfx *gdl,unsigned int ulx,unsigned int uly,
					unsigned int drx,unsigned int dry)
{
	FlashRectangle2_(gdl,ulx,uly,drx,dry,64);
}

//-------------------------------------------------
//
// ¹õÇò¤Î¤Á¤ç¤Ã¤È¤Ï¤ä¤¯ÅÀÌÇ¤¹¤ë»Í³Ñ
//
//-------------------------------------------------
Gfx *FlashRectangle2f(Gfx *gdl,unsigned int ulx,unsigned int uly,
					  unsigned int drx,unsigned int dry)
{
	FlashRectangle2_(gdl,ulx,uly,drx,dry,4);
}

//
//
//
Gfx *SetAfontVertex(Gfx *gdl,Vtx *vtx_ptr)
{
	int num;

	if (afont_color < 4)
		num = afont_color;
	else
		num = 4 + (afont_color-4)*2 + (frame_counter%2);

	if (vtx_ptr == vtx_font26x16){
		gSPDisplayList(gdl++,kawano_dtl_k_afont_v26[num]);
	}
#if 0
	else if (vtx_ptr == vtx_font26x24){
		gSPDisplayList(gdl++,kawano_dtl_k_afont_v26_24[num]);
	}

#endif
	else{
		if (vtx_ptr == vtx_font16x16){
			gSPDisplayList(gdl++,kawano_dtl_k_afont_v16[num]);
		}
		else{
			if (vtx_ptr == vtx_font30x32)
				gSPDisplayList(gdl++,kawano_dtl_k_afont_v30[num]);
		}
	}

#if 0
    gSPVertex(gdl++,vtx_ptr, 2, 0);
	if (afont_color < 4){
		gSPVertex(gdl++,vtx_ptr+2*(afont_color+1), 2, 2);
	}
	else{
		gSPVertex(gdl++,
				  vtx_ptr+(10+(afont_color-4)*4+(frame_counter%2)*2), 2, 2);
	}
    gSPDisplayList(gdl++,kwsetTile);
	//gSP1Triangle(gdl++,0, 2, 1, 0);
    //gSP1Triangle(gdl++,0, 3, 2, 0);
#endif
	return(gdl);
}



/*----------------------------------------------------------*/
/*		scale trans Program 								*/
/*----------------------------------------------------------*/

typedef struct {
	short integer[4][4];
	short small[4][4];
} SPKpack;
typedef union {
	SPKpack pack;
	long 	all[16];
} SPK;
typedef union {
	long	word;
	short	half[2];
	char	byte[4];	
} SPackData;

static void setmtx_scaletrans(SPK *spk,float x,float y, float zoomx,float zoomy )
{
	SPackData zx,zy;	/* Zoom 	*/
	SPackData px,py;	/* Position */
	int	i;

	for(i=0;i<16;i++) spk->all[i] = 0;

	zx.word	= (long)(zoomx * 65536.0f);
	zy.word	= (long)(zoomy * 65536.0f);
	px.word = (long)(x     * 65536.0f);
	py.word = (long)(y     * 65536.0f);


	spk->pack.integer[0][0] = zx.half[0];
	spk->pack.integer[1][1] = zy.half[0];
	spk->pack.integer[2][2] = 1;
	spk->pack.integer[3][0] = px.half[0];
	spk->pack.integer[3][1] = py.half[0];
	spk->pack.integer[3][3] = 1;

	spk->pack.small[0][0] = zx.half[1]; 
	spk->pack.small[1][1] = zy.half[1];
	spk->pack.small[3][0] = px.half[1];
	spk->pack.small[3][1] = py.half[1];

}


//---------------------------------------------
//
// £±¿§(rgba)¤Î¿§¤Ç»Í³Ñ¤òÉÁ¤¯(¥Ý¥ê¥´¥ó)
//
//---------------------------------------------

Gfx *Set_IAFont(Gfx *gdl,unsigned short *texp,
				float x,float y,
				unsigned int w,unsigned int h,
				float zoom_x,float zoom_y)
{
	Vtx *vtx_ptr;
	Mtx *m_ptr;

	if (effectcount < 760-1){
		m_ptr = &dynamicp->effectmodeling[effectcount];
		if (effectcount < 0)
			PRINTF("effectcount < 0 !!!!!!(kawano)\n");
	}
	else{
		PRINTF("MAX effectcount(760) over!!!!(kawano)\n");
		return(gdl);
	}


	//	guScale(m_ptr,
	//			zoom_x, zoom_y, 1.0);
	//	guTranslate(m_ptr+1,x,y,0);
	//	guMtxCatL(m_ptr,m_ptr+1,m_ptr);
	
	setmtx_scaletrans((SPK *)m_ptr,x,y,zoom_x,zoom_y);

	gSPMatrix (gdl++,
			   K0_TO_PHYS((u32) &(dynamicp->effectmodeling[effectcount++])),
			   G_MTX_MODELVIEW|G_MTX_LOAD|G_MTX_NOPUSH);
    gDPLoadTextureTile_4b(gdl++,texp,
					   G_IM_FMT_I,
					   w, h,
					   0, 0, w, h,
					   0,G_TX_WRAP,G_TX_WRAP,
					   0, 0, G_TX_NOLOD, G_TX_NOLOD);
	switch(w){
	case 16:
		vtx_ptr = vtx_font16x16;
		break;
#if 0
	case 26:
                if (h==16) 
		    vtx_ptr = vtx_font26x16;
                else if (h==24)
		    vtx_ptr = vtx_font26x24;
		break;

#else
	case 26:
		vtx_ptr = vtx_font26x16;
		break;
#endif
	case 30:
		vtx_ptr = vtx_font30x32;
		break;
	default:
#if ROM==0
		PRINTF("font_size error???????(kawano)\n");
#endif
		vtx_ptr = vtx_font16x16;
		break;
	}

	gdl = SetAfontVertex(gdl++,vtx_ptr);

	return(gdl);
}




//------------------------------------------------------
//
// ¥Æ¥¯¥¹¥Á¥ã¥Ç¡¼¥¿¤òÅ¬Åö¤ÊÂç¤­¤µ¤ËÀÚ¤Ã¤ÆÅ½¤êÉÕ¤±¤ë
//	²èÌÌ³°¤ËÉÁ¤³¤¦¤È¤·¤¿»þ¤Ë¼«Æ°Åª¤Ë¥¯¥ê¥Ã¥Ô¥ó¥°
//
//-------------------------------------------------------
Gfx *AutoTextureRect(Gfx *gdl,char flg_ia,
					 int dsdx,int dtdy,
					 int t_ulx,int t_uly,
					 int t_drx,int t_dry,
					 int disp_x,int disp_y,
					 unsigned short *texp,
					 unsigned int tex_size_x,unsigned int tex_size_y)
{
    unsigned int x=t_ulx,y=t_uly;
	int disp_x_init;
	unsigned int rect_w,rect_h;
	int tile_w = 1,tile_h;
	int mask_s=0,mask_t=0;
	int a;

	/*ºÇÅ¬¤È»×¤ï¤ì¤ë¥¿¥¤¥ë¤Î¥µ¥¤¥º¤òÁªÂò*/
	while(tile_w < tex_size_x)
		tile_w *= 2;
	tile_h = 1024/tile_w;
	while(tile_h/2 > tex_size_y)
		tile_h /= 2;

	/* tile_h,tile_w ¤Ë¤¢¤ï¤»¤Æ,mask_s,mask_t¤òÀßÄê*/
	a = tile_w;//¥ï¡¼¥¯¤È¤·¤Æ a ¤ò»ÈÍÑ
	while(a > 1){
		a /= 2;
		mask_s++;
	}
	a = tile_h;
	while(a > 1){
		a /= 2;
		mask_t++;
	}

	/*²èÌÌ³°¤ÏºÇ½é¤«¤éÉÁ¤«¤Ê¤¤*/
	if (disp_x<0){
		t_ulx -= disp_x;
		disp_x = 0;
	}
	else
		if (disp_x+(t_drx-t_ulx) > SCREEN_WD)
			t_drx = SCREEN_WD + t_ulx - disp_x;
	if (disp_y<0){
		t_uly -= disp_y;
		disp_y = 0;
	}
	else
		if (disp_y+(t_dry-t_uly) > SCREEN_HT)
			t_dry = SCREEN_HT + t_uly - disp_y;
	if (t_ulx > t_drx)
		return(gdl);
	if (t_uly > t_dry)
		return(gdl);
	   
	disp_x_init = disp_x;
    for (y = t_uly;y < t_dry;y += tile_h){
		if (y+tile_h > t_dry){
			rect_h = t_dry - y;
			if (!rect_h)
				break;
		}
		else{
			rect_h = tile_h;
		}
		for (x = t_ulx;x < t_drx;x += tile_w){
			if (x+tile_w > t_drx){
				rect_w = t_drx - x;
				if (!rect_w)
					break;
			}
			else
				rect_w = tile_w;
			
			gDPLoadTextureTile(gdl++,texp,
							   flg_ia, G_IM_SIZ_16b,
							   tex_size_x, tex_size_y,
							   x, y, x+rect_w, y+rect_h,
							   0,G_TX_WRAP,G_TX_WRAP,
							   mask_s, mask_t, G_TX_NOLOD, G_TX_NOLOD);
			gSPTextureRectangle(gdl++,disp_x<<2, disp_y<<2,
								(disp_x+rect_w)<<2,
								(disp_y+rect_h)<<2,
								G_TX_RENDERTILE,
								(int)(x*32) & 0xffff,
								(int)(y*32) & 0xffff,
								dsdx, dtdy);
			disp_x += tile_w;
		}
		disp_x = disp_x_init;
		disp_y += tile_h;
	}

    return(gdl);
}

//------------------------------------------------------
//
// ¥Æ¥¯¥¹¥Á¥ã¥Ç¡¼¥¿¤òÅ¬Åö¤ÊÂç¤­¤µ¤ËÀÚ¤Ã¤ÆÅ½¤êÉÕ¤±¤ë
//	²èÌÌ³°¤ËÉÁ¤³¤¦¤È¤·¤¿»þ¤Ë¼«Æ°Åª¤Ë¥¯¥ê¥Ã¥Ô¥ó¥°
//
//-------------------------------------------------------
Gfx *AutoTextureRect_zoom(Gfx *gdl,char flg_ia,
						  int dsdx,int dtdy,float zoom_x,float zoom_y,
						  int t_ulx,int t_uly,
						  int t_drx,int t_dry,
						  int disp_x,int disp_y,
						  unsigned short *texp,
						  unsigned int tex_size_x,unsigned int tex_size_y)
{
    unsigned int x=t_ulx,y=t_uly;
	int disp_x_init;
	unsigned int rect_w,rect_h;
	unsigned int disp_size_x,disp_size_y;
	int tile_w = 1,tile_h;
	int mask_s=0,mask_t=0;
	int a;

	/*ºÇÅ¬¤È»×¤ï¤ì¤ë¥¿¥¤¥ë¤Î¥µ¥¤¥º¤òÁªÂò*/
	while(tile_w < tex_size_x)
		tile_w *= 2;
	tile_h = 1024/tile_w;
	while(tile_h/2 > tex_size_y)
		tile_h /= 2;

	/* tile_h,tile_w ¤Ë¤¢¤ï¤»¤Æ,mask_s,mask_t¤òÀßÄê*/
	a = tile_w;//¥ï¡¼¥¯¤È¤·¤Æ a ¤ò»ÈÍÑ
	while(a > 1){
		a /= 2;
		mask_s++;
	}
	a = tile_h;
	while(a > 1){
		a /= 2;
		mask_t++;
	}

	/*²èÌÌ³°¤ÏºÇ½é¤«¤éÉÁ¤«¤Ê¤¤*/
	if (disp_x<0){
		t_ulx -= disp_x;
		disp_x = 0;
	}
	else{
		if (disp_x+(t_drx-t_ulx)*zoom_x > SCREEN_WD){
			//t_drx = SCREEN_WD + t_ulx - disp_x;
			t_drx = t_drx - (disp_x + (t_drx - t_ulx)*zoom_x - SCREEN_WD);
		}
	}
	if (disp_y<0){
		t_uly -= disp_y;
		disp_y = 0;
	}
	else{
		if (disp_y+(t_dry-t_uly)*zoom_y > SCREEN_HT){
			///t_dry = SCREEN_HT + t_uly - disp_y;
			t_dry = t_dry - (disp_y + (t_dry - t_uly)*zoom_y - SCREEN_HT);
		}
	}
	if (t_ulx > t_drx)
		return(gdl);
	if (t_uly > t_dry)
		return(gdl);

	dsdx = (int)(dsdx/zoom_x);
	dtdy = (int)(dtdy/zoom_y);

	disp_x_init = disp_x;
    for (y = t_uly;y < t_dry;y += tile_h){
		if (y+tile_h > t_dry){
			rect_h = t_dry - y;
			if (!rect_h)
				break;
		}
		else{
			rect_h = tile_h;
		}
		disp_size_y = (unsigned int)(rect_h*zoom_y);
		for (x = t_ulx;x < t_drx;x += tile_w){
			if (x+tile_w > t_drx){
				rect_w = t_drx - x;
				if (!rect_w)
					break;
			}
			else
				rect_w = tile_w;
			disp_size_x = (unsigned int)(rect_w*zoom_x);
			
			gDPLoadTextureTile(gdl++,texp,
							   flg_ia, G_IM_SIZ_16b,
							   tex_size_x, tex_size_y,
							   x, y, x+rect_w, y+rect_h,
							   0,G_TX_WRAP,G_TX_WRAP,
							   mask_s, mask_t, G_TX_NOLOD, G_TX_NOLOD);
			gSPTextureRectangle(gdl++,disp_x<<2, disp_y<<2,
								(disp_x+disp_size_x)<<2,
								(disp_y+disp_size_y)<<2,
								G_TX_RENDERTILE,
								(int)(x*32) & 0xffff,
								(int)(y*32) & 0xffff,
								dsdx, dtdy);
			disp_x += tile_w*zoom_x;
		}
		disp_x = disp_x_init;
		disp_y += tile_h*zoom_y;
	}

    return(gdl);
}

//------------------------------------------------------
//
// ¥Æ¥¯¥¹¥Á¥ã¥Ç¡¼¥¿¤òÅ¬Åö¤ÊÂç¤­¤µ¤ËÀÚ¤Ã¤ÆÅ½¤êÉÕ¤±¤ë
//	²èÌÌ³°¤ËÉÁ¤³¤¦¤È¤·¤¿»þ¤Ë¼«Æ°Åª¤Ë¥¯¥ê¥Ã¥Ô¥ó¥°
//
//-------------------------------------------------------
#define MY_MORPH2 TEXEL0,0,PRIMITIVE_ALPHA,0,TEXEL0,0,PRIMITIVE,0
Gfx *AutoTextureRect_noise(Gfx *gdl,
						   int disp_x,int disp_y,
						   unsigned int size_x,unsigned int size_y)
{
    unsigned int x,y;
	int disp_x_init;
	unsigned int rect_w,rect_h;
	int tile_w = 1,tile_h;
	int mask_s=0,mask_t=0;
	int a;

	/*ºÇÅ¬¤È»×¤ï¤ì¤ë¥¿¥¤¥ë¤Î¥µ¥¤¥º¤òÁªÂò*/
	while(tile_w < size_x)
		tile_w *= 2;
	tile_h = 1024/tile_w;
	while(tile_h/2 > size_y)
		tile_h /= 2;

	/* tile_h,tile_w ¤Ë¤¢¤ï¤»¤Æ,mask_s,mask_t¤òÀßÄê*/
	a = tile_w;//¥ï¡¼¥¯¤È¤·¤Æ a ¤ò»ÈÍÑ
	while(a > 1){
		a /= 2;
		mask_s++;
	}
	a = tile_h;
	while(a > 1){
		a /= 2;
		mask_t++;
	}

	/*²èÌÌ³°¤ÏºÇ½é¤«¤éÉÁ¤«¤Ê¤¤*/
	if (disp_x<0){
		size_x -= disp_x;
		disp_x = 0;
	}
	else
		if (disp_x+size_x > SCREEN_WD)
			size_x = SCREEN_WD - disp_x;
	if (disp_y<0){
		size_y -= disp_y;
		disp_y = 0;
	}
	else
		if (disp_y+size_y > SCREEN_HT)
			size_y = SCREEN_HT - disp_y;
	if (size_x <= 0)
		return(gdl);
	if (size_y <= 0)
		return(gdl);
	   
	a = make_random_limmit(100);
	//a = frame_counter%150;
	gdl = FillRect1Color_f(gdl,disp_x,disp_y,
							  disp_x + size_x,disp_y + size_y,
							0,0,0,a);
	gDPPipeSync(gdl++);
	a += 150;
	gDPSetRenderMode(gdl++,G_RM_XLU_SURF, G_RM_XLU_SURF2);
	gDPSetPrimColor(gdl++,0,0,a,a,a,a);
	//gDPSetCombineMode(gdl++,G_CC_MODULATERGBA_PRIM, G_CC_MODULATERGBA_PRIM);
	//gDPSetCombineMode(gdl++,G_CC_MODULATERGB_PRIM, G_CC_MODULATERGB_PRIM);
	gDPSetCombineMode(gdl++,G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
    for (y = disp_y;y < disp_y + size_y;y += tile_h){
		if (y+tile_h > disp_y + size_y){
			rect_h = disp_y + size_y - y;
			if (!rect_h)
				break;
		}
		else{
			rect_h = tile_h;
		}
		for (x = disp_x;x < disp_x + size_x;x += tile_w){
			if (x+tile_w > disp_x + size_x){
				rect_w = disp_x + size_x - x;
				if (!rect_w)
					break;
			}
			else
				rect_w = tile_w;
			
			gDPLoadTextureTile(gdl++,(unsigned short *)(msel_KT2_S
								+make_random_limmit(128)*2),
							   G_IM_FMT_IA, G_IM_SIZ_16b,
							   size_x, size_y,
							   x, y, x + rect_w, y + rect_h,
							   0,G_TX_WRAP,G_TX_WRAP,
							   mask_s, mask_t, G_TX_NOLOD, G_TX_NOLOD);
			gSPTextureRectangle(gdl++,x<<2, y<<2,
								(x+rect_w)<<2,(y+rect_h)<<2,
								G_TX_RENDERTILE,
								(int)(x*32) & 0xffff,
								(int)(y*32) & 0xffff,
								1<<10, 1<<10);
		}
	}

    return(gdl);
}

//------------------------------------------------------
//
// ¥Æ¥¯¥¹¥Á¥ã¥Ç¡¼¥¿¤òÅ¬Åö¤ÊÂç¤­¤µ¤ËÀÚ¤Ã¤ÆÅ½¤êÉÕ¤±¤ë
//	²èÌÌ³°¤ËÉÁ¤³¤¦¤È¤·¤¿»þ¤Ë¼«Æ°Åª¤Ë¥¯¥ê¥Ã¥Ô¥ó¥°(2cycle¤Ç¼Â¸³)
//
//-------------------------------------------------------
#define MY_MORPH TEXEL1,TEXEL0,PRIMITIVE_ALPHA,TEXEL0,TEXEL1,TEXEL0,PRIMITIVE,TEXEL0
Gfx *AutoTextureRect_2cyc(Gfx *gdl,char flg_ia,
						  int dsdx,int dtdy,
						  int t_ulx,int t_uly,
						  int t_drx,int t_dry,
						  int disp_x,int disp_y,
						  unsigned short *texp,
						  unsigned int tex_size_x,unsigned int tex_size_y,
						  int param)
{
    unsigned int x=t_ulx,y=t_uly;
	int disp_x_init;
	unsigned int rect_w,rect_h;
	int tile_w = 1,tile_h;
	int mask_s=0,mask_t=0;
	int a;

	gDPPipeSync(gdl++);
	gDPSetCycleType(gdl++,G_CYC_2CYCLE);
	gDPSetTextureLOD(gdl++,G_TL_TILE);
	//gDPSetPrimColor(gdl++,0,0,0,0,0,make_random_limmit(100));
	gDPSetPrimColor(gdl++,0,0,0,0,0,frame_counter%256);
	gDPSetCombineMode(gdl++,MY_MORPH,G_CC_PASS2);
	
	/*ºÇÅ¬¤È»×¤ï¤ì¤ë¥¿¥¤¥ë¤Î¥µ¥¤¥º¤òÁªÂò*/
	while(tile_w < tex_size_x)
		tile_w *= 2;
	tile_h = 1024/tile_w;
	while(tile_h/2 > tex_size_y)
		tile_h /= 2;

	/* tile_h,tile_w ¤Ë¤¢¤ï¤»¤Æ,mask_s,mask_t¤òÀßÄê*/
	a = tile_w;//¥ï¡¼¥¯¤È¤·¤Æ a ¤ò»ÈÍÑ
	while(a > 1){
		a /= 2;
		mask_s++;
	}
	a = tile_h;
	while(a > 1){
		a /= 2;
		mask_t++;
	}

	/*²èÌÌ³°¤ÏºÇ½é¤«¤éÉÁ¤«¤Ê¤¤*/
	if (disp_x<0){
		t_ulx -= disp_x;
		disp_x = 0;
	}
	else
		if (disp_x+(t_drx-t_ulx) > SCREEN_WD)
			t_drx = SCREEN_WD + t_ulx - disp_x;
	if (disp_y<0){
		t_uly -= disp_y;
		disp_y = 0;
	}
	else
		if (disp_y+(t_dry-t_uly) > SCREEN_HT)
			t_dry = SCREEN_HT + t_uly - disp_y;
	if (t_ulx > t_drx)
		return(gdl);
	if (t_uly > t_dry)
		return(gdl);
	   
	disp_x_init = disp_x;
    for (y = t_uly;y < t_dry;y += tile_h){
		if (y+tile_h > t_dry){
			rect_h = t_dry - y;
			if (!rect_h)
				break;
		}
		else{
			rect_h = tile_h;
		}
		for (x = t_ulx;x < t_drx;x += tile_w){
			if (x+tile_w > t_drx){
				rect_w = t_drx - x;
				if (!rect_w)
					break;
			}
			else
				rect_w = tile_w;
			
			gDPLoadMultiTile(gdl++,texp,0,G_TX_RENDERTILE,
							 flg_ia, G_IM_SIZ_16b,
							 tex_size_x, tex_size_y,
							 x, y, x+rect_w, y+rect_h,
							 0,G_TX_WRAP,G_TX_WRAP,
							 mask_s, mask_t, G_TX_NOLOD, G_TX_NOLOD);
			gDPLoadMultiTile(gdl++,(unsigned short *)(msel_KT2_S
							+make_random_limmit(128)*2),
							 256,G_TX_RENDERTILE+1,
							 flg_ia, G_IM_SIZ_16b,
							 tex_size_x, tex_size_y,
							 x, y, x+rect_w, y+rect_h,
							 0,G_TX_WRAP,G_TX_WRAP,
							 mask_s, mask_t, G_TX_NOLOD, G_TX_NOLOD);
			gSPTextureRectangle(gdl++,disp_x<<2, disp_y<<2,
								(disp_x+rect_w)<<2,
								(disp_y+rect_h)<<2,
								G_TX_RENDERTILE,
								(int)(x*32) & 0xffff,
								(int)(y*32) & 0xffff,
								dsdx, dtdy);
			disp_x += tile_w;
		}
		disp_x = disp_x_init;
		disp_y += tile_h;
	}

	gDPPipeSync(gdl++);
	gDPSetCycleType(gdl++,G_CYC_1CYCLE);
    return(gdl);
}

//------------------------------------------------------
//
// ¥Æ¥¯¥¹¥Á¥ã¥Ç¡¼¥¿¤òÅ¬Åö¤ÊÂç¤­¤µ¤ËÀÚ¤Ã¤ÆÅ½¤êÉÕ¤±¤ë
//	²èÌÌ³°¤ËÉÁ¤³¤¦¤È¤·¤¿»þ¤Ë¼«Æ°Åª¤Ë¥¯¥ê¥Ã¥Ô¥ó¥°
//   (copy mode ¤ò»ÈÍÑ¤·¤Æ¤¤¤ë¤Î¤ÇBG¤°¤é¤¤¤Ë¤·¤«»È¤¨¤Ê¤¤¡©)
//
//-------------------------------------------------------
Gfx *AutoTextureRect_c(Gfx *gdl,char flg_ia,
		     unsigned int t_ulx,unsigned int t_uly,
		     unsigned int t_drx,unsigned int t_dry,
		     int disp_x,int disp_y,
		     unsigned short *texp,
		     unsigned int tex_size_x,unsigned int tex_size_y)
{
    unsigned int x=t_ulx,y=t_uly;
	int disp_x_init;
	unsigned int rect_w,rect_h;
	int tile_w = 1,tile_h;
	int mask_s=0,mask_t=0;
	int a;

	/*cycle type ¤ÎÊÑ¹¹*/
	gDPPipeSync(gdl++);
	gDPSetCycleType(gdl++,G_CYC_COPY);

	gdl = AutoTextureRect(gdl,flg_ia,4<<10,1<<10,
						  t_ulx,t_uly,t_drx,t_dry,
						  disp_x,disp_y,texp,
						  tex_size_x,tex_size_y);	

	/*cycle type ¤ÎÊÑ¹¹*/
	gDPPipeSync(gdl++);
	gDPSetCycleType(gdl++,G_CYC_1CYCLE);
    return(gdl);
}

//------------------------------------------------------
//
// ¥Æ¥¯¥¹¥Á¥ã¥Ç¡¼¥¿¤ò°ìµ¤¤Ë¥í¡¼¥É¤·¤Æ32x32¤Î»Í³Ñ¤òÅ½¤ë
//    64x64ÀìÍÑ ²£¿­½Ì²ÄÇ½
//
//-------------------------------------------------------
Gfx *AutoTextureRect64(Gfx *gdl,char flg_ia,
		     int disp_x,int disp_y,
		     unsigned short *texp,int width)
{
    unsigned int x,y;
	int disp_x_init,mul;

	/* 32°Ê¾å¤Î»þ¤Ï²èÌÌÉ½¼¨¤·¤Ê¤¤*/
	if (width >= 32)
		return(gdl);
	disp_x_init = disp_x;
    for (y = 0;y < 64;y += 32){
		x = 0;
		mul = (32<<10)/(32-width);
		gDPLoadTextureTile(gdl++,texp,
						   flg_ia, G_IM_SIZ_16b,
						   64, 64,x, y, x+32, y+32,
						   0,G_TX_WRAP,G_TX_WRAP,
						   5, 5, G_TX_NOLOD, G_TX_NOLOD);
		gSPTextureRectangle(gdl++,disp_x+width<<2, disp_y<<2,
							(disp_x+32)<<2,(disp_y+32)<<2,
							G_TX_RENDERTILE,
							(int)(0<<5) & 0xffff,
							(int)(0<<5) & 0xffff,
							mul, 1 << 10);
		disp_x += 32;
		gDPLoadTextureTile(gdl++,texp,
						   flg_ia, G_IM_SIZ_16b,
						   64, 64,x+32, y, x+64, y+32,
						   0,G_TX_WRAP,G_TX_WRAP,
						   5, 5, G_TX_NOLOD, G_TX_NOLOD);
		gSPTextureRectangle(gdl++,disp_x<<2, disp_y<<2,
							(disp_x+32-width)<<2,(disp_y+32)<<2,
							G_TX_RENDERTILE,
							(int)(0<<5) & 0xffff,
							(int)(0<<5) & 0xffff,
							mul, 1 << 10);
		disp_x = disp_x_init;
		disp_y += 32;
	}

    return(gdl);
}

//------------------------------------------------------
//
// ¥Æ¥¯¥¹¥Á¥ã¥Ç¡¼¥¿¤ò¥í¡¼¥É¤·¤Æ32x32¤Î»Í³Ñ¤òÅ½¤ë
//    64xNÀìÍÑ ²£¿­½Ì²ÄÇ½
//
//-------------------------------------------------------
Gfx *AutoTextureRect_w(Gfx *gdl,char flg_ia,
						unsigned int t_ulx,unsigned int t_uly,
						unsigned int t_drx,unsigned int t_dry,
						int disp_x,int disp_y,
						unsigned short *texp,
						unsigned int tex_size_x,unsigned int tex_size_y,
						int width)
{
    unsigned int x,y;
	int disp_x_init,mul;
	int rect_h;
	int w_left,w_right;//"w_left = w_right" or "w_left+1 = w_right"
	int tile_h = 32;

	if (width >= 32)
		return(gdl);
	disp_x_init = disp_x;
	w_left = tex_size_x/2;
	w_right = tex_size_x - w_left;
    for (y = t_uly;y < t_dry;y += 32){
		x = 0;
		if (y+tile_h > t_dry){
			rect_h = t_dry - y;
			if (!rect_h)
				break;
		}
		else{
			rect_h = tile_h;
		}

		//mul = (w_left<<10)/(w_left*(32-width)/32);
		mul = ((w_left*32)<<10)/(w_left*(32-width));
		gDPLoadTextureTile(gdl++,texp,
						   flg_ia, G_IM_SIZ_16b,
						   tex_size_x, tex_size_y,
						   x, y, x+w_left, y+rect_h,
						   0,G_TX_WRAP,G_TX_WRAP,
						   5, 5, G_TX_NOLOD, G_TX_NOLOD);
		gSPTextureRectangle(gdl++,(disp_x+w_left*width/32)<<2, disp_y<<2,
							(disp_x+w_left)<<2,(disp_y+rect_h)<<2,
							G_TX_RENDERTILE,
							(int)(0<<5) & 0xffff,
							(int)(y<<5) & 0xffff,
							mul, 1 << 10);
		disp_x += w_left;
		//mul = (w_right<<10)/(w_right*(32-width)/32);
		mul = ((w_right*32)<<10)/(w_right*(32-width));
		gDPLoadTextureTile(gdl++,texp,
						   flg_ia, G_IM_SIZ_16b,
						   tex_size_x,tex_size_y,
						   x+w_left, y, x+tex_size_x, y+rect_h,
						   0,G_TX_WRAP,G_TX_WRAP,
						   5, 5, G_TX_NOLOD, G_TX_NOLOD);
		gSPTextureRectangle(gdl++,disp_x<<2, disp_y<<2,
							(disp_x+w_right*(32-width)/32)<<2,
							(disp_y+rect_h)<<2,
							G_TX_RENDERTILE,
							(int)(w_left<<5) & 0xffff,
							(int)(y<<5) & 0xffff,
							mul, 1 << 10);
		disp_x = disp_x_init;
		disp_y += tile_h;
	}

    return(gdl);
}

//---------------------------------------------------
//
// ¥Æ¥¯¥¹¥Á¥ã¥Ç¡¼¥¿¤ò°ìµ¤¤Ë¥í¡¼¥É¤·¤Æ32x32¤Î»Í³Ñ¤òÅ½¤ë
//                                (Simple Version.)
//
//---------------------------------------------------
Gfx *AutoTextureRectSimple(Gfx *gdl,
		     unsigned int t_ulx,unsigned int t_uly,
		     unsigned int t_drx,unsigned int t_dry,
		     unsigned int disp_x,int disp_y,
		     unsigned short *texp,
		     unsigned int tex_size_x,unsigned int tex_size_y)
{
    unsigned int x=0,y=0;
	int d_x_init;

	d_x_init = disp_x;
    for (y = t_uly;y < t_dry;y += 32){
		for (x = t_ulx;x < t_drx;x += 32){
			gDPLoadTextureTile(gdl++,tex_buff, G_IM_FMT_RGBA, G_IM_SIZ_16b,
							   tex_size_x, tex_size_y, x, y, x+32, y+32, 0,
							   G_TX_WRAP , G_TX_WRAP ,
							   5, 5, G_TX_NOLOD, G_TX_NOLOD);
			gSPTextureRectangle(gdl++,disp_x<<2, disp_y<<2,
								(disp_x+32)<<2,(disp_y+32)<<2,
								G_TX_RENDERTILE,
								(int)(0*32) & 0xffff, (int)(0*32) & 0xffff,
								1 << 10, 1 << 10);
			disp_x += 32;
		}
		disp_x = d_x_init;
	    disp_y += 32;
	}

    return(gdl);
}

//---------------------------------------------------
//
// ¥Æ¥¯¥¹¥Á¥ã¥Ç¡¼¥¿¤ò°ìµ¤¤Ë¥í¡¼¥É¤·¤Æ8x8¤Î»Í³Ñ¤òxxxÅ½¤ë
//                                (Simple Version.)
//
//---------------------------------------------------

#define ATRR_SIZE 32
#define K_RAD 20000
Gfx *AutoTextureRectR(Gfx *gdl,
		     unsigned int t_ulx,unsigned int t_uly,
		     unsigned int t_drx,unsigned int t_dry,
		     int disp_x,int disp_y,
		     unsigned short *texp,
		     unsigned int tex_size_x,unsigned int tex_size_y)
{
    int x,y;
	int d_x_init;
	int disp_x2,disp_y2;
	float sin,cos,k;

	if (!fade_counter[0])
		fade_counter[0] = 1;
	sin = sint((K_RAD*fade_counter2[0]/fade_counter[0])%K_RAD);
	cos = cost((K_RAD*fade_counter2[0]/fade_counter[0])%K_RAD);
	k = 1.0+(float)fade_counter2[0]*.5/fade_counter[0];
	//PRINTF("sin=%f %u/4096\n"
	//		 ,sin,(4096*fade_counter2[0]/fade_counter[0])%4096);
	d_x_init = disp_x;
    for (y = t_uly;y < t_dry;y += ATRR_SIZE){
		for (x = t_ulx;x < t_drx;x += ATRR_SIZE){
			gDPLoadTextureTile(gdl++,tex_buff, G_IM_FMT_RGBA, G_IM_SIZ_16b,
							   tex_size_x, tex_size_y, x, y,
							   x+ATRR_SIZE, y+ATRR_SIZE, 0,
							   G_TX_WRAP , G_TX_WRAP ,
							   5, 5, G_TX_NOLOD, G_TX_NOLOD);
			disp_x2 = (cos*(disp_x-160) + sin*(disp_y-120))*k + 160;
			disp_y2 = (-sin*(disp_x-160) + cos*(disp_y-120))*k + 120;
			gSPTextureRectangle(gdl++,disp_x2<<2, disp_y2<<2,
								(disp_x2+ATRR_SIZE)<<2,(disp_y2+ATRR_SIZE)<<2,
								G_TX_RENDERTILE,
								(int)(0*32) & 0xffff, (int)(0*32) & 0xffff,
								1 << 10, 1 << 10);
			disp_x += ATRR_SIZE;
		}
		disp_x = d_x_init;
	    disp_y += ATRR_SIZE;
	}

    return(gdl);
}

//---------------------------------------------------
//
// ¥Õ¥ì¡¼¥à¥Ð¥Ã¥Õ¥¡¤ËÄ¾ÀÜ »ØÄê¿§¤ò½ñ¤­¹þ¤à
//
//---------------------------------------------------
Gfx *FillRect1Color(Gfx *gdl,
					//unsigned int ulx,unsigned int uly,
					//unsigned int drx,unsigned int dry,
					int ulx,int uly,int drx,int dry,
					unsigned int red,unsigned int green,
					unsigned int blue,unsigned int alpha)
{
	unsigned int swap_buf;

	red = (red & 0x00ff);
	green = (green & 0x00ff);
	blue = (blue & 0x00ff);
	alpha = (alpha & 0x00ff);
	if (ulx > drx)
		swapping_uint((uint *)&ulx,(uint *)&drx);
	if (uly > dry)
		swapping_uint((uint *)&uly,(uint *)&dry);
	if ((ulx > SCREEN_WD-1)||(uly > SCREEN_HT-1))
		return(gdl);
	if (ulx < 0)
		ulx = 0;
	if (uly < 0)
		uly = 0;
	if ((drx < 0)||(dry < 0))
		return(gdl);
	if (drx > SCREEN_WD-1)
		drx = SCREEN_WD-1;
	if (dry > SCREEN_HT-1)
		dry = SCREEN_HT-1;
    gSPDisplayList(gdl++,kawano_fillrect1c_start);

	gDPSetFillColor(gdl++, (GPACK_RGBA5551(red, green, blue, alpha) << 16 | 
							   GPACK_RGBA5551(red, green, blue, alpha)));
	gDPFillRectangle(gdl++, ulx, uly, drx, dry);

    gSPDisplayList(gdl++,kawano_fillrect1c_end);

    return(gdl);
}

//---------------------------------------------------
//
// ¥Õ¥ì¡¼¥à¥Ð¥Ã¥Õ¥¡¤ËÄ¾ÀÜ »ØÄê¿§¤ò½ñ¤­¹þ¤à(for Fade)
//
//---------------------------------------------------
Gfx *FillRect1Color_f(Gfx *gdl,
					//unsigned int ulx,unsigned int uly,
					//unsigned int drx,unsigned int dry,
					int ulx,int uly,
					int drx,int dry,
					unsigned int red,unsigned int green,
					unsigned int blue,unsigned int alpha)
{
	red = (red & 0x00ff);
	green = (green & 0x00ff);
	blue = (blue & 0x00ff);
	alpha = (alpha & 0x00ff);
	if (ulx > drx)
		swapping_uint((uint *)&ulx,(uint *)&drx);
	if (uly > dry)
		swapping_uint((uint *)&uly,(uint *)&dry);
	if ((ulx > SCREEN_WD-1)||(uly > SCREEN_HT-1))
		return(gdl);
	if (ulx < 0)
		ulx = 0;
	if (uly < 0)
		uly = 0;
	if ((drx < 0)||(dry < 0))
		return(gdl);
	//if (drx > SCREEN_WD-1)
	//	drx = SCREEN_WD-1;
	//if (dry > SCREEN_HT-1)
	//	dry = SCREEN_HT-1;
	if (drx > SCREEN_WD)
		drx = SCREEN_WD;
	if (dry > SCREEN_HT)
		dry = SCREEN_HT;

	gSPDisplayList(gdl++,kawano_fillrect1cf);
	gDPSetPrimColor(gdl++,0,0,red,green,blue,alpha);
	gDPFillRectangle(gdl++, ulx, uly, drx, dry);
    
    gDPPipeSync(gdl++);
    return(gdl);
}

//---------------------------------------------------
//
// ¥Õ¥ì¡¼¥à¥Ð¥Ã¥Õ¥¡¤ËÄ¾ÀÜ ¹õ(0,0,0,255)¤ò½ñ¤­¹þ¤à
//
//---------------------------------------------------
Gfx *FillRectBlack(Gfx *gdl,
				   unsigned int ulx,unsigned int uly,
				   unsigned int drx,unsigned int dry)
{
	gdl = FillRect1Color(gdl,ulx,uly,drx,dry,0,0,0,255);
    return(gdl);
}

//-----------------------------------------
//
// C¥½¡¼¥¹¤Î¥Ç¡¼¥¿¤ÎDMAÅ¾Á÷
//                (tex_dataSegment)
//-----------------------------------------
void tex_data_Dma(unsigned short *tex_ptr,unsigned int number,
				  unsigned short *tex_buff_ptr)
{
    OSIoMesg dmaIoMesgBuf;
    OSMesg dummyMesg;
	
extern OSMesgQueue      dmaMessageQ;
	
	osInvalDCache(tex_buff_ptr,number);
	osPiStartDma(&dmaIoMesgBuf, OS_MESG_PRI_NORMAL, OS_READ,
		     (u32)_tex_dataSegmentRomStart+SEGMENT_OFFSET(tex_ptr),
		     tex_buff_ptr,	number, &dmaMessageQ);
 	(void)osRecvMesg(&dmaMessageQ, &dummyMesg, OS_MESG_BLOCK);

}

//-----------------------------------------
//
// ¥¢¥»¥ó¥Ö¥é¥½¡¼¥¹¤Î¥Ç¡¼¥¿¤ÎDMAÅ¾Á÷
//               (stex_dataSegment)
//-----------------------------------------
void tex_data_Dma_s(unsigned short *tex_ptr,unsigned int number,
				  unsigned short *tex_buff_ptr)
{
    OSIoMesg dmaIoMesgBuf;
    OSMesg dummyMesg;
	
extern OSMesgQueue      dmaMessageQ;
	
	osInvalDCache(tex_buff_ptr,number);
	osPiStartDma(&dmaIoMesgBuf, OS_MESG_PRI_NORMAL, OS_READ,
		     (u32)_stex_dataSegmentRomStart+SEGMENT_OFFSET(tex_ptr),
		     tex_buff_ptr,	number, &dmaMessageQ);
 	(void)osRecvMesg(&dmaMessageQ, &dummyMesg, OS_MESG_BLOCK);
}

//----------------------------------------------
//
// ¥Æ¥¯¥¹¥Á¥ã¥Ç¡¼¥¿´ÉÍý¥ë¡¼¥Á¥ó¤Î½é´ü²½
//
//----------------------------------------------
void InitTexBuff(void)
{
	tex_buff_num = 0;
	all_tex_block_num = 0;
}

//
//
// 
//
//
TexBlock *GetTBPointer(TexBlock *texlist_ptr)
{
    uint number= SEGMENT_NUMBER(texlist_ptr);
    uint offset= SEGMENT_OFFSET(texlist_ptr);

	//PRINTF("number=%d,offset=%x",number,offset);
	//PRINTF("a=%x,b=%x\n",texlist_ptr,(TexBlock *)OS_PHYSICAL_TO_K0(segmentTable[number]+offset));

    return((TexBlock *)OS_PHYSICAL_TO_K0(segmentTable[number]+offset));
	
}

void *GetVAddress(void *p_ptr)
{
    uint number= SEGMENT_NUMBER(p_ptr);
    uint offset= SEGMENT_OFFSET(p_ptr);

	//PRINTF("number=%d,offset=%x",number,offset);
	//PRINTF("a=%x,b=%x\n",p_ptr,(TexBlock *)OS_PHYSICAL_TO_K0(segmentTable[number]+offset));

    return(OS_PHYSICAL_TO_K0(segmentTable[number]+offset));
	
}

//----------------------------------------
//
// ¥Æ¥¯¥¹¥Á¥ã¥Ç¡¼¥¿¤Î¥í¡¼¥É
//
//----------------------------------------
void TexBuffLoad(TexBlock *texlist_ptr)
{
	int i,check;
	unsigned short size;
	TexBlock *tp;
	TexMap *tmp;

	tp = GetTBPointer(texlist_ptr);
	//tp = texlist_ptr;
	tmp = &tex_block_ptr[0];

	while(tp->tex_data_ptr){
		check = 0;
		for (i = 0;i < all_tex_block_num;i++){
			if (tp->tex_data_ptr == (tmp+i)->tex_data_ptr){
				check++;
				break;
			}
		}
		if (!check){
			switch(tp->mode){
			case K_INTA:
				if (tp->dma_size){
					size = tp->dma_size;
				}
				else{
					size = 0x1000;
				}
				if (size%8)
					size = (size/8 + 1)*8;
#if 0
				PRINTF("dma_size=0x%x \n",size);
#endif
				tex_data_Dma(tp->tex_data_ptr,
							   size,(unsigned short *)melt_buff);
#if 0
				PRINTF("%x %x %x %x \n",melt_buff[0],melt_buff[1],melt_buff[2],melt_buff[3]);
				PRINTF("%x %x\n",&melt_buff,&(tp->tex_data_ptr));
#endif
				slidec1((unsigned char *)melt_buff,
						(unsigned char *)&tex_buff[tex_buff_num]);
				break;
			default:
				tex_data_Dma(tp->tex_data_ptr,
							 tp->h*tp->w*2,&tex_buff[tex_buff_num]);
				break;
			}
			(tmp+all_tex_block_num)->tex_data_ptr = tp->tex_data_ptr;
			(tmp+all_tex_block_num)->number = tex_buff_num;
			tex_buff_num += (tp->h*tp->w);
			tex_buff_num = (tex_buff_num/8+1)*8;
			all_tex_block_num++;
#if ROM==0
			if (all_tex_block_num >= TEX_BLOCK_PTR_MAX){
				PRINTF("tex_block_ptr max is over!!!\n");
				while(1);
			}
#endif
		}
#if DISP_TEX_BUFF_NUM_SWITCH
		PRINTF("ptr = %u\n",tex_buff_num);
#endif
#if ROM==0
		{
			int max_size;

			if (sequence_mode == RACESEQUENCE)
				max_size = MAX_TEX_BUFF_NUM2;
			else
				max_size = MAX_TEX_BUFF_NUM;
			if (tex_buff_num > max_size)
				PRINTF("tex_buff size over!!!(kawano)\n");
		}
#endif
		tp++;
	}
}

//----------------------------------------
//
// ¥Æ¥¯¥¹¥Á¥ã¥Ç¡¼¥¿(alpha4_font)¤Î¥í¡¼¥É
//
//----------------------------------------
void TexBuffLoad_font(TexBlock *texlist_ptr)
{
	int i,check;
	TexBlock *tp;
	TexMap *tmp;

	tp = GetTBPointer(texlist_ptr);
	tmp = &tex_block_ptr[0];

	while(tp->tex_data_ptr){
		check = 0;
		for (i = 0;i < all_tex_block_num;i++){
			if (tp->tex_data_ptr == (tmp+i)->tex_data_ptr){
				check++;
				break;
			}
		}
		if (!check){
			switch(tp->mode){
			case K_AFONT:
				tex_data_Dma(tp->tex_data_ptr,tp->h*tp->w/2,
							 (unsigned short *)&tex_buff[tex_buff_num]);
				break;
			default:
#if ROM==0
				PRINTF("font_data load_error!!!(kawano)\n");
#endif
				break;
			}
			(tmp+all_tex_block_num)->tex_data_ptr = tp->tex_data_ptr;
			(tmp+all_tex_block_num)->number = tex_buff_num;
			tex_buff_num += (tp->h*tp->w);
			tex_buff_num = (tex_buff_num/8+1)*8;
			all_tex_block_num++;
#if ROM==0
			if (all_tex_block_num >= TEX_BLOCK_PTR_MAX){
				PRINTF("tex_block_ptr max is over!!!\n");
				while(1);
			}
#endif
		}
#if DISP_TEX_BUFF_NUM_SWITCH
		PRINTF("ptr = %u\n",tex_buff_num);
#endif
#if ROM==0
		{
			int max_size;

			if (sequence_mode == RACESEQUENCE)
				max_size = MAX_TEX_BUFF_NUM2;
			else
				max_size = MAX_TEX_BUFF_NUM;
			if (tex_buff_num > max_size)
				PRINTF("tex_buff size over!!!(kawano)\n");
		}
#endif
		tp++;
	}
}

//------------------------------------------
//
// (slidec¤Ë¤Æ²òÅà¤¹¤ë)¥Æ¥¯¥¹¥Á¥ã¥Ç¡¼¥¿¤Î¥í¡¼¥É
//
//------------------------------------------
void TexBuffLoad_c(TexBlock *texlist_ptr)
{
	int i,check;
	TexBlock *tp;
	TexMap *tmp;

	tp = GetTBPointer(texlist_ptr);
	//tp = texlist_ptr;
	tmp = &tex_block_ptr[0];

	while(tp->tex_data_ptr){
		check = 0;
		for (i = 0;i < all_tex_block_num;i++){
			if (tp->tex_data_ptr == (tmp+i)->tex_data_ptr){
				check++;
				break;
			}
		}
		if (!check){
			tex_data_Dma(tp->tex_data_ptr,
						 0x8000,(unsigned short *)melt_buff);
#if 0
		//PRINTF("%x %x %x %x \n",melt_buff[4],melt_buff[5],melt_buff[6],melt_buff[7]);
		PRINTF("%x %x\n",&melt_buff,&(tp->tex_data_ptr));
#endif
			slidec1((unsigned char *)melt_buff,
				   (unsigned char *)&tex_buff[tex_buff_num]);
			(tmp+all_tex_block_num)->tex_data_ptr = tp->tex_data_ptr;
			(tmp+all_tex_block_num)->number = tex_buff_num;
			tex_buff_num += (tp->h*tp->w);
			tex_buff_num = (tex_buff_num/8+1)*8;
			all_tex_block_num++;
		}
#if DISP_TEX_BUFF_NUM_SWITCH
		PRINTF("ptr = %u\n",tex_buff_num);
#endif
#if ROM==0
		{
			int max_size;

			if (sequence_mode == RACESEQUENCE)
				max_size = MAX_TEX_BUFF_NUM2;
			else
				max_size = MAX_TEX_BUFF_NUM;
			if (tex_buff_num > max_size)
				PRINTF("tex_buff size over!!!(kawano)\n");
		}
#endif
		tp++;
	}
}

//-------------------------------------------------
//
// (ps4expand¤Ë¤Æ²òÅà¤¹¤ë)¥Æ¥¯¥¹¥Á¥ã¥Ç¡¼¥¿¤Î¥í¡¼¥É
//   (¤¿¤À¤·¡¢¥À¥Ö¥ë¥Ð¥Ã¥Õ¥¡¤ò»ÈÍÑ¤¹¤ë¤¿¤á¡¢
//    ´û¥í¡¼¥É¥Á¥§¥Ã¥¯¤ò¾Ê¤¯)
//
//-------------------------------------------------
void TexBuffLoad_pw(TexBlock *texlist_ptr)
{
	TexBuffLoad_p(texlist_ptr,1);
}

//-------------------------------------------------
//
// (ps4expand¤Ë¤Æ²òÅà¤¹¤ë)¥Æ¥¯¥¹¥Á¥ã¥Ç¡¼¥¿¤Î¥í¡¼¥É
//   nocheck_flg 0:´û¥í¡¼¥É¥Á¥§¥Ã¥¯¤¢¤ê(asm source)
//               1:¥Á¥§¥Ã¥¯¤Ê¤·(c source)
//               2:¥Á¥§¥Ã¥¯¤Ê¤·(asm source)
//              -1:´û¥í¡¼¥É¥Á¥§¥Ã¥¯¤¢¤ê(c source)
//-------------------------------------------------
void TexBuffLoad_p(TexBlock *texlist_ptr,int nocheck_flg)
{
	int i,check;
	TexBlock *tp;
	TexMap *tmp;
	unsigned short *ttr;
	unsigned short size;
	unsigned short clear_color;

	tp = GetTBPointer(texlist_ptr);
	//tp = texlist_ptr;
	tmp = &tex_block_ptr[0];

	while(tp->tex_data_ptr){
		check = 0;
		for (i = 0;i < all_tex_block_num;i++){
			if (tp->tex_data_ptr == (tmp+i)->tex_data_ptr){
				check++;
				break;
			}
		}
		if (!check || (nocheck_flg > 0)){
			if (tp->dma_size){
				size = tp->dma_size;
			}
			else{
				size = 0x1000;
			}
			if (size%8)
				size = (size/8 + 1)*8;
#if 0
			PRINTF("dma_size=0x%x \n",size);
#endif
			switch(nocheck_flg){
			case -1:
			case 1:
				tex_data_Dma(tp->tex_data_ptr,
							   size,(unsigned short *)melt_buff);
				break;
			case 0:
			case 2:
				tex_data_Dma_s(tp->tex_data_ptr,
							   size,(unsigned short *)melt_buff);
				break;
			default:
				break;
			}
#if 0
			PRINTF("%x %x %x %x \n",melt_buff[0],melt_buff[1],melt_buff[2],melt_buff[3]);
			PRINTF("%x %x\n",&melt_buff,&(tp->tex_data_ptr));
#endif
			switch(nocheck_flg){
			case -1:
			case 1:
				slidec1((unsigned char *)melt_buff,
						(unsigned char *)&tex_buff[tex_buff_num]);
				break;
			case 0:
			case 2:
				//ps4expand(melt_buff,k_work,&tex_buff[tex_buff_num]);
				if (tp->mode == K_CLEAR){
					clear_color = 0x00be;
				}
				else{
					clear_color = 1;
				}
				ps4decode(melt_buff,k_work,
						  &tex_buff[tex_buff_num],clear_color);
				break;
			default:
				break;
			}

			(tmp+all_tex_block_num)->tex_data_ptr = tp->tex_data_ptr;
			(tmp+all_tex_block_num)->number = tex_buff_num;
			tex_buff_num += (tp->h*tp->w);
			tex_buff_num = (tex_buff_num/8+1)*8;
			all_tex_block_num++;
		}
#if DISP_TEX_BUFF_NUM_SWITCH
		PRINTF("ptr = %u\n",tex_buff_num);
#endif
#if ROM==0
		{
			int max_size;

			if (sequence_mode == RACESEQUENCE)
				max_size = MAX_TEX_BUFF_NUM2;
			else
				max_size = MAX_TEX_BUFF_NUM;
			if (tex_buff_num > max_size)
				PRINTF("tex_buff size over!!!(kawano)\n");
		}
		//if (tex_buff_num > MAX_TEX_BUFF_NUM)
		//	PRINTF("tex_buff size over!!!(kawano)\n");
#endif
		tp++;
	}
}

//-------------------------------------------------
//
// (vs¥ê¥¶¥ë¥È²èÌÌ,GP ENDING¤Ë½Ð¤Æ¤¯¤ë¥¢¥Ë¥áÀìÍÑ¤Î)¥Æ¥¯¥¹¥Á¥ã¥Ç¡¼¥¿¤Î¥í¡¼¥É
//
//   num   : ¥»¥ì¥¯¥È²èÌÌ¤Ç¤Î½çÈÖ
//   wb_num: ¥À¥Ö¥ë¥Ð¥Ã¥Õ¥¡¤ÎÉ½(0)Î¢(1)
//
//-------------------------------------------------
void TexBuffLoad_vs(TexBlock *texlist_ptr,int num,int wb_num)
{
	TexBlock *tp;
	TexMap *tmp;
	unsigned short size;

	tp = GetTBPointer(texlist_ptr);
	//tp = texlist_ptr;
	tmp = &tex_block_ptr[0];

	while(tp->tex_data_ptr){
		if (tp->dma_size){
			size = tp->dma_size;
		}
		else{/* 0x1400 ¤¢¤ì¤Ð¤É¤Î´é¤Ç¤âÂ­¤ê¤ë */
			size = 0x1400;
		}
		if (size%8)
			size = (size/8 + 1)*8;
		tex_data_Dma(tp->tex_data_ptr,
					 size,(unsigned short *)melt_buff);
#if 0
		PRINTF("%x %x %x %x \n",melt_buff[0],melt_buff[1],melt_buff[2],melt_buff[3]);
		PRINTF("%x %x\n",&melt_buff,&(tp->tex_data_ptr));
#endif
		slidec1((unsigned char *)melt_buff,
				(unsigned char *)&ken_data[wb_num][num/2][0x4000+0x2000*(num%2)]);

		tp++;
	}
}

//------------------------------------------------
//
// ¥Æ¥¯¥¹¥Á¥ã¥Ç¡¼¥¿¥í¡¼¥ÉÍÑ¥Ð¥Ã¥Õ¥¡¤Î¥¯¥ê¥¢
//
//------------------------------------------------
void InitChangeTexData(void)
{
	int i;
	ChangeTexBuff *ctb_ptr;

	ctb_ptr = &change_tex_buff_block[0];
	for (i = 0;i < SEQ_DATA_MAX;i++)
		ctb_ptr->tex_block_ptr = (TexBlock *)0;
}

//-----------------------------------------------------
//
// ¥Æ¥¯¥¹¥Á¥ã¥Ç¡¼¥¿¥í¡¼¥ÉÍÑ¥Ð¥Ã¥Õ¥¡¤Ë¥Ç¡¼¥¿¥»¥Ã¥È
//
//-----------------------------------------------------
void SetChangeTexData(TexBlock *tb_ptr,int new_block_num)
{
	ChangeTexBuff *ctb_ptr;

	ctb_ptr = &change_tex_buff_block[0];
	while((unsigned int)ctb_ptr->tex_block_ptr){
		ctb_ptr++;
	}
	ctb_ptr->tex_block_ptr = GetTBPointer(tb_ptr);
	//ctb_ptr->tex_block_ptr = tb_ptr;
	ctb_ptr->block_num = new_block_num;
	
}

//-----------------------------------------------------
//
// ¥Æ¥¯¥¹¥Á¥ã¥Ç¡¼¥¿¥í¡¼¥ÉÍÑ¥Ð¥Ã¥Õ¥¡¤ò»²¾È¤·¤Æ¡¢
//    ¥Æ¥¯¥¹¥Á¥ã¥Ç¡¼¥¿¤Î¥Á¥§¥ó¥¸
//
//-----------------------------------------------------
void doChangeTexData(void)
{
	char end_check;
	int new_num;
	ChangeTexBuff *ctb_ptr;
	TexBlock *tb_ptr;
	TexMap *tmp;
    OSIoMesg dmaIoMesgBuf;
    OSMesg dummyMesg;
	int size;
	int w_buff_size;
#if DISP_DMA_MELT_TIME_SWITCH
	int time;
#endif
	
extern OSMesgQueue      dmaMessageQ;

	if (sequence_mode == RACESEQUENCE){
		w_buff_size = 0x1400/4;//¥­¥ã¥é¥¢¥Ë¥áºÇÂçÍÆÎÌ¤ò»²¹Í¤Ë·èÄê
	}
	else{
		w_buff_size = 0x4000/4;//¥Þ¥Ã¥×¥Ç¡¼¥¿ºÇÂçÍÆÎÌ¤ò»²¹Í¤Ë·èÄê
	}
	end_check = 0;
	tmp = &tex_block_ptr[0];
	ctb_ptr = &change_tex_buff_block[0];
	tb_ptr = ctb_ptr->tex_block_ptr;
	if (!tb_ptr)
		return;
#if DISP_DMA_MELT_TIME_SWITCH
	time=osGetTime();
#endif
	if (tb_ptr->dma_size){
		size = tb_ptr->dma_size;
	}
	else{
		size = 0x1400;
	}
	if (size%8)
		size = (size/8 + 1)*8;
	osInvalDCache(melt_buff,size);
	osPiStartDma(&dmaIoMesgBuf, OS_MESG_PRI_NORMAL, OS_READ,
				 (u32)_tex_dataSegmentRomStart+
				 SEGMENT_OFFSET(tb_ptr->tex_data_ptr),
				 (unsigned short *)melt_buff,size,&dmaMessageQ);
 	(void)osRecvMesg(&dmaMessageQ, &dummyMesg, OS_MESG_BLOCK);
#if DISP_DMA_MELT_TIME_SWITCH
	time=osGetTime()-time;
	PRINTF("DMA time=%u ",time);
#endif
	while(1){
		if (!(ctb_ptr+1)->tex_block_ptr){
			end_check++;
		}
		else{
			tb_ptr = (ctb_ptr+1)->tex_block_ptr;
			if (tb_ptr->dma_size){
				size = tb_ptr->dma_size;
			}
			else{
				size = 0x1400;
			}
			if (size%8)
				size = (size/8 + 1)*8;
			osInvalDCache(&melt_buff[w_buff_size],size);
			osPiStartDma(&dmaIoMesgBuf, OS_MESG_PRI_NORMAL, OS_READ,
						 (u32)_tex_dataSegmentRomStart+
						 SEGMENT_OFFSET(tb_ptr->tex_data_ptr),
						 (unsigned short *)(&melt_buff[w_buff_size]),
						 size,&dmaMessageQ);
		}
		new_num = (tmp+ctb_ptr->block_num)->number;
#if DISP_DMA_MELT_TIME_SWITCH
		time=osGetTime();
#endif
		//PRINTF("%x,%x\n",melt_buff,&tex_buff[new_num]);
		slidec1((unsigned char *)melt_buff,
				(unsigned char *)&tex_buff[new_num]);
		//ps4decode(melt_buff,k_work,&tex_buff[new_num],1);
#if DISP_DMA_MELT_TIME_SWITCH
		time=osGetTime()-time;
		PRINTF("melt time=%u \n",time);
#endif
		ctb_ptr->tex_block_ptr = (TexBlock *)0;
		ctb_ptr++;
		if (end_check)
			return;
		(void)osRecvMesg(&dmaMessageQ, &dummyMesg, OS_MESG_BLOCK);

		if (!(ctb_ptr+1)->tex_block_ptr){
			end_check++;
		}
		else{
			tb_ptr = (ctb_ptr+1)->tex_block_ptr;
			if (tb_ptr->dma_size){
				size = tb_ptr->dma_size;
			}
			else{
				size = 0x1400;
			}
			if (size%8)
				size = (size/8 + 1)*8;
			osInvalDCache(melt_buff,size);
			osPiStartDma(&dmaIoMesgBuf, OS_MESG_PRI_NORMAL, OS_READ,
						 (u32)_tex_dataSegmentRomStart+
						 SEGMENT_OFFSET(tb_ptr->tex_data_ptr),
						 (unsigned short *)melt_buff,
						 size,&dmaMessageQ);
		}
		new_num = (tmp+ctb_ptr->block_num)->number;
		slidec1((unsigned char *)&melt_buff[w_buff_size],
				(unsigned char *)&tex_buff[new_num]);
		//ps4decode(&melt_buff[2000],k_work,&tex_buff[new_num],1);
		ctb_ptr->tex_block_ptr = (TexBlock *)0;
		ctb_ptr++;
		if (end_check)
			return;
		(void)osRecvMesg(&dmaMessageQ, &dummyMesg, OS_MESG_BLOCK);
	}
		

#if 0
	// £Ä£Í£Á¤È²òÅà¤òÆ±»þ¤Ë¤·¤Ê¤¤¥ô¥¡¡¼¥¸¥ç¥ó
	ctb_ptr = &change_tex_buff_block[0];
	while(ctb_ptr->tex_block_ptr){
		ChangeTexData(ctb_ptr->tex_block_ptr,ctb_ptr->block_num);
		ctb_ptr->tex_block_ptr = (TexBlock *)0;
		ctb_ptr++;
	}
#endif
}

//------------------------------------------------
//
// ¥Æ¥¯¥¹¥Á¥ã¥Ç¡¼¥¿¥í¡¼¥ÉÍÑ¥Ð¥Ã¥Õ¥¡¤Î¥¯¥ê¥¢
// (vs¥ê¥¶¥ë¥ÈÉ½¼¨ÍÑ)
//------------------------------------------------
void InitChangeTexData_vs(void)
{
	int i;
	ChangeTexBuff_vs *ctb_ptr;

	ctb_ptr = &change_tex_buff_block_vs[0];
	for (i = 0;i < SEQ_CHANGE_VS_MAX;i++)
		ctb_ptr->tex_block_ptr = (TexBlock *)0;
}

//-----------------------------------------------------
//
// ¥Æ¥¯¥¹¥Á¥ã¥Ç¡¼¥¿¥í¡¼¥ÉÍÑ¥Ð¥Ã¥Õ¥¡¤Ë¥Ç¡¼¥¿¥»¥Ã¥È
// (vs¥ê¥¶¥ë¥ÈÉ½¼¨ÍÑ)
//-----------------------------------------------------
void SetChangeTexData_vs(TexBlock *tb_ptr,int num,int buffer_num)
{
	ChangeTexBuff_vs *ctb_ptr;

	ctb_ptr = &change_tex_buff_block_vs[0];
	while((unsigned int)ctb_ptr->tex_block_ptr){
		ctb_ptr++;
	}
	ctb_ptr->tex_block_ptr = GetTBPointer(tb_ptr);
	//ctb_ptr->tex_block_ptr = tb_ptr;
	ctb_ptr->num = num;
	ctb_ptr->wb_num = buffer_num;
	
}

//-----------------------------------------------------
//
// ¥Æ¥¯¥¹¥Á¥ã¥Ç¡¼¥¿¥í¡¼¥ÉÍÑ¥Ð¥Ã¥Õ¥¡¤ò»²¾È¤·¤Æ¡¢
//    ¥Æ¥¯¥¹¥Á¥ã¥Ç¡¼¥¿¤Î¥Á¥§¥ó¥¸
// (vs¥ê¥¶¥ë¥ÈÉ½¼¨ÍÑ)
//-----------------------------------------------------
void doChangeTexData_vs(void)
{
	char end_check;
	int new_num;
	ChangeTexBuff_vs *ctb_ptr;
	TexBlock *tb_ptr;
	//TexMap *tmp;
    OSIoMesg dmaIoMesgBuf;
    OSMesg dummyMesg;
	int size;
	int w_buff_size;
#if DISP_DMA_MELT_TIME_SWITCH
	int time;
#endif
	
extern OSMesgQueue      dmaMessageQ;

	//if (sequence_mode == RACESEQUENCE){
		w_buff_size = 0x1400/4;//¥­¥ã¥é¥¢¥Ë¥áºÇÂçÍÆÎÌ¤ò»²¹Í¤Ë·èÄê
	//}
	//else{
	//	w_buff_size = 0x4000/4;//¥Þ¥Ã¥×¥Ç¡¼¥¿ºÇÂçÍÆÎÌ¤ò»²¹Í¤Ë·èÄê
	//}
	end_check = 0;
	//tmp = &tex_block_ptr[0];
	ctb_ptr = &change_tex_buff_block_vs[0];
	tb_ptr = ctb_ptr->tex_block_ptr;
	if (!tb_ptr)
		return;
#if DISP_DMA_MELT_TIME_SWITCH
	time=osGetTime();
#endif
	if (tb_ptr->dma_size){
		size = tb_ptr->dma_size;
	}
	else{
		size = 0x1400;
	}
	if (size%8)
		size = (size/8 + 1)*8;
	osInvalDCache(melt_buff,size);
	osPiStartDma(&dmaIoMesgBuf, OS_MESG_PRI_NORMAL, OS_READ,
				 (u32)_tex_dataSegmentRomStart+
				 SEGMENT_OFFSET(tb_ptr->tex_data_ptr),
				 (unsigned short *)melt_buff,size,&dmaMessageQ);
 	(void)osRecvMesg(&dmaMessageQ, &dummyMesg, OS_MESG_BLOCK);
#if DISP_DMA_MELT_TIME_SWITCH
	time=osGetTime()-time;
	PRINTF("DMA time=%u ",time);
#endif
	while(1){
		if (!(ctb_ptr+1)->tex_block_ptr){
			end_check++;
		}
		else{
			tb_ptr = (ctb_ptr+1)->tex_block_ptr;
			if (tb_ptr->dma_size){
				size = tb_ptr->dma_size;
			}
			else{
				size = 0x1400;
			}
			if (size%8)
				size = (size/8 + 1)*8;
			osInvalDCache(&melt_buff[w_buff_size],size);
			osPiStartDma(&dmaIoMesgBuf, OS_MESG_PRI_NORMAL, OS_READ,
						 (u32)_tex_dataSegmentRomStart+
						 SEGMENT_OFFSET(tb_ptr->tex_data_ptr),
						 (unsigned short *)(&melt_buff[w_buff_size]),
						 size,&dmaMessageQ);
		}
		//new_num = (tmp+ctb_ptr->block_num)->number;
#if DISP_DMA_MELT_TIME_SWITCH
		time=osGetTime();
#endif
		//PRINTF("%x,%x\n",melt_buff,&tex_buff[new_num]);
		slidec1((unsigned char *)melt_buff,
				(unsigned char *)&ken_data[ctb_ptr->wb_num][ctb_ptr->num/2]
				[0x4000 + 0x2000*(ctb_ptr->num%2)]);
		//ps4decode(melt_buff,k_work,&tex_buff[new_num],1);
#if DISP_DMA_MELT_TIME_SWITCH
		time=osGetTime()-time;
		PRINTF("melt time=%u \n",time);
#endif
		ctb_ptr->tex_block_ptr = (TexBlock *)0;
		ctb_ptr++;
		if (end_check)
			return;
		(void)osRecvMesg(&dmaMessageQ, &dummyMesg, OS_MESG_BLOCK);

		if (!(ctb_ptr+1)->tex_block_ptr){
			end_check++;
		}
		else{
			tb_ptr = (ctb_ptr+1)->tex_block_ptr;
			if (tb_ptr->dma_size){
				size = tb_ptr->dma_size;
			}
			else{
				size = 0x1400;
			}
			if (size%8)
				size = (size/8 + 1)*8;
			osInvalDCache(melt_buff,size);
			osPiStartDma(&dmaIoMesgBuf, OS_MESG_PRI_NORMAL, OS_READ,
						 (u32)_tex_dataSegmentRomStart+
						 SEGMENT_OFFSET(tb_ptr->tex_data_ptr),
						 (unsigned short *)melt_buff,
						 size,&dmaMessageQ);
		}
		//new_num = (tmp+ctb_ptr->block_num)->number;
		slidec1((unsigned char *)&melt_buff[w_buff_size],
				//(unsigned char *)&tex_buff[new_num]);
				(unsigned char *)&ken_data[ctb_ptr->wb_num][ctb_ptr->num/2]
				[0x4000 + 0x2000*(ctb_ptr->num%2)]);
		//ps4decode(&melt_buff[2000],k_work,&tex_buff[new_num],1);
		ctb_ptr->tex_block_ptr = (TexBlock *)0;
		ctb_ptr++;
		if (end_check)
			return;
		(void)osRecvMesg(&dmaMessageQ, &dummyMesg, OS_MESG_BLOCK);
	}
		

#if 0
	// £Ä£Í£Á¤È²òÅà¤òÆ±»þ¤Ë¤·¤Ê¤¤¥ô¥¡¡¼¥¸¥ç¥ó
	ctb_ptr = &change_tex_buff_block[0];
	while(ctb_ptr->tex_block_ptr){
		ChangeTexData(ctb_ptr->tex_block_ptr,ctb_ptr->block_num);
		ctb_ptr->tex_block_ptr = (TexBlock *)0;
		ctb_ptr++;
	}
#endif
}

//------------------------------------------
//
// ¥À¥Ö¥ë¥Ð¥Ã¥Õ¥¡¤ÎÎ¢¥Ð¥Ã¥Õ¥¡¤Ë
// ¥Æ¥¯¥¹¥Á¥ã¥Ç¡¼¥¿(ps4expand°µ½Ì)¤ò¥í¡¼¥É
//
//------------------------------------------
void ChangeTexData(TexBlock *tb_ptr,int new_block_num)
{
	TexMap *tmp;
	int new_num;
	unsigned short *tex_ptr;
	int size;

	tmp = &tex_block_ptr[0];
	new_num = (tmp+new_block_num)->number;
	tex_ptr = tb_ptr->tex_data_ptr;

	size = tb_ptr->dma_size;
	if (size%8)
		size = (size/8 + 1)*8;
	tex_data_Dma_s(tex_ptr,size,(unsigned short *)melt_buff);
	//ps4expand(melt_buff,k_work,&tex_buff[new_num]);
	ps4decode(melt_buff,k_work,&tex_buff[new_num],1);
	(tmp+new_block_num)->tex_data_ptr = tex_ptr;
	return;
}

//---------------------------------------------------------------
//
// ¥·¡¼¥±¥ó¥¹¥Ç¡¼¥¿¤«¤éÁ´¥Æ¥¯¥¹¥Á¥ã¥Ç¡¼¥¿(ps4expand°µ½Ì)¤òÅ¸³«
// (¤â¤Ã¤¿¤¤¤Ê¤¤¤Î¤Çº£¤Ï»È¤Ã¤Æ¤Ê¤¤¤ß¤¿¤¤)
//---------------------------------------------------------------
void TexBuffLoad_seq(TexBlockSeq *seq_ptr)
{
	TexBlock *tbp;

	seq_ptr = (TexBlockSeq *)GetVAddress(seq_ptr);
	while(tbp = seq_ptr->tex_block_ptr){
		if (tbp){
			TexBuffLoad_p(tbp,0);
		}
		else{
			return;
		}
		seq_ptr++;
	}
}

//----------------------------------------
//
// ¥·¡¼¥±¥ó¥¹¥Ç¡¼¥¿´ÉÍý¥ë¡¼¥Á¥ó¤Î½é´ü²½
//
//----------------------------------------
void InitSeqData(void)
{
	int i;

	for (i = 0;i < SEQ_DATA_MAX;i++)
		seq_data_block[i].pri = 0;
}

//----------------------------------------------
//
// ¥·¡¼¥±¥ó¥¹¥Ç¡¼¥¿¤Î¥»¥Ã¥È(¥À¥Ö¥ë¥Ð¥Ã¥Õ¥¡»ÈÍÑ)
//
//----------------------------------------------
int SetSeqData(TexBlockSeq *tbs_ptr)
{
	int i;
	SeqData *sd_ptr;

	tbs_ptr = (TexBlockSeq *)GetVAddress(tbs_ptr);
	i = 0;
	while(seq_data_block[i].pri){
		i++;
		if (i >= SEQ_DATA_MAX){
#if ROM==0
			PRINTF("seq_data_buff over_flow!!(kawano)\n");
#endif
			while(1);
			return(-1);
		}
	}
	sd_ptr = &seq_data_block[i];
	sd_ptr->seq_ptr = tbs_ptr;
	sd_ptr->pattern = -1;
	sd_ptr->count = 0;
	sd_ptr->pri = 0x80000000;
	sd_ptr->block_num = all_tex_block_num;
	if (tbs_ptr->tex_block_ptr)
		TexBuffLoad_pw(tbs_ptr->tex_block_ptr);//
	if ((tbs_ptr+1)->tex_block_ptr){
		TexBuffLoad_pw((tbs_ptr+1)->tex_block_ptr);
	}
	else{
		TexBuffLoad_pw(tbs_ptr->tex_block_ptr);
	}
	sd_ptr->buffer = 0;
	return(i);
}

//----------------------------------------------
//
// ¥·¡¼¥±¥ó¥¹¥Ç¡¼¥¿¤Î¥»¥Ã¥È(¥À¥Ö¥ë¥Ð¥Ã¥Õ¥¡»ÈÍÑ,vs¥ê¥¶¥ë¥È²èÌÌ,GP ENDINGÀìÍÑ)
//
//----------------------------------------------
int SetSeqData2(TexBlockSeq *tbs_ptr,int num)
{
	int i;
	SeqData *sd_ptr;

	tbs_ptr = (TexBlockSeq *)GetVAddress(tbs_ptr);
	i = 0;
	while(seq_data_block[i].pri){
		i++;
		if (i >= SEQ_DATA_MAX){
#if ROM==0
			PRINTF("seq_data_buff over_flow!!(kawano)\n");
#endif
			while(1);
			return(-1);
		}
	}
	sd_ptr = &seq_data_block[i];
	sd_ptr->seq_ptr = tbs_ptr;
	sd_ptr->pattern = -1;
	sd_ptr->count = 0;
	sd_ptr->pri = 0x80000000;
	sd_ptr->block_num = all_tex_block_num;
	if (tbs_ptr->tex_block_ptr)
		TexBuffLoad_vs(tbs_ptr->tex_block_ptr,num,0);
		//TexBuffLoad_pw(tbs_ptr->tex_block_ptr);//
	if ((tbs_ptr+1)->tex_block_ptr){
		TexBuffLoad_vs((tbs_ptr+1)->tex_block_ptr,num,1);
		//TexBuffLoad_pw((tbs_ptr+1)->tex_block_ptr);
	}
	else{
		TexBuffLoad_vs(tbs_ptr->tex_block_ptr,num,1);
		//TexBuffLoad_pw(tbs_ptr->tex_block_ptr);
	}
	sd_ptr->buffer = 0;
	return(i);
}

//----------------------------------------------
//
// ¥·¡¼¥±¥ó¥¹¥Ç¡¼¥¿¤ÎÊÑ¹¹(¥À¥Ö¥ë¥Ð¥Ã¥Õ¥¡»ÈÍÑ)
//
//----------------------------------------------
void ChangeSeqData(int i,int pat,TexBlockSeq *tbs_ptr)
{
	SeqData *sd_ptr;
	TexBlock *tb_ptr;

#if ROM==0
		if (i >= SEQ_DATA_MAX){
			PRINTF("seq_data_buff number error!!(kawano)\n");
			while(1);
		}
#endif
	tbs_ptr = (TexBlockSeq *)GetVAddress(tbs_ptr);
	sd_ptr = &seq_data_block[i];
	sd_ptr->seq_ptr = tbs_ptr;
	sd_ptr->pattern = pat;
	sd_ptr->count = (tbs_ptr+pat)->count;
	tb_ptr = GetTBPointer(tbs_ptr[sd_ptr->pattern].tex_block_ptr);
	//sd_ptr->block_num = all_tex_block_num;
	if (sd_ptr->buffer){
		SetChangeTexData(tb_ptr,sd_ptr->block_num);
		sd_ptr->buffer = 0;
	}
	else{
		SetChangeTexData(tb_ptr,sd_ptr->block_num+1);
		sd_ptr->buffer = 1;
	}
	return;
}

//----------------------------------------------
//
// ¥·¡¼¥±¥ó¥¹¥Ç¡¼¥¿¤ÎÊÑ¹¹(¥À¥Ö¥ë¥Ð¥Ã¥Õ¥¡»ÈÍÑ)
//
//----------------------------------------------
void ChangeSeqData_vs(int i,int pat,int num,TexBlockSeq *tbs_ptr)
{
	SeqData *sd_ptr;
	TexBlock *tb_ptr;

#if ROM==0
		if (i >= SEQ_DATA_MAX){
			PRINTF("seq_data_buff number error!!(kawano)\n");
			while(1);
		}
#endif
	tbs_ptr = (TexBlockSeq *)GetVAddress(tbs_ptr);
	sd_ptr = &seq_data_block[i];
	sd_ptr->seq_ptr = tbs_ptr;
	sd_ptr->pattern = pat;
	sd_ptr->count = (tbs_ptr+pat)->count;
	tb_ptr = GetTBPointer(tbs_ptr[sd_ptr->pattern].tex_block_ptr);
	//sd_ptr->block_num = all_tex_block_num;
	sd_ptr->buffer ^= 1;
	SetChangeTexData_vs(tb_ptr,num,sd_ptr->buffer);
	return;
}

//-------------------------------------------------
//
// ¥·¡¼¥±¥ó¥¹¥Ç¡¼¥¿¤Î½èÍý(¥À¥Ö¥ë¥Ð¥Ã¥Õ¥¡¤Î¤ßÂÐ±þ)
//
//-------------------------------------------------
void doSeqData(void)
{
	int i,j,z;
	SeqData *sd_ptr;

	//for (j = 0;j < 16;j++){
		for (i = 0;i < SEQ_DATA_MAX;i++){
			sd_ptr = &seq_data_block[i];
			if (!(sd_ptr->pri & 0x80000000))
				continue;
			//if ((sd_ptr->pri & 0x0000000f) == j){
				SelectTex(sd_ptr);
				graphPtr = doTexList_w(graphPtr,sd_ptr,0,0,0);
			//}
		}
	//}
	doChangeTexData();
}

//-------------------------------------------------
//
// »ØÄê¥·¡¼¥±¥ó¥¹¥Ç¡¼¥¿¤Î½èÍý(¥À¥Ö¥ë¥Ð¥Ã¥Õ¥¡¤Î¤ßÂÐ±þ)
//
//-------------------------------------------------
void doSeqData2(int i,int x,int y,int param)
{
	SeqData *sd_ptr;

	sd_ptr = &seq_data_block[i];
	if (!(sd_ptr->pri & 0x80000000))
		return;
	SelectTex(sd_ptr);
	graphPtr = doTexList_w(graphPtr,sd_ptr,x,y,param);
}

//-------------------------------------------------
//
// »ØÄê¥·¡¼¥±¥ó¥¹¥Ç¡¼¥¿¤Î½èÍý(¥À¥Ö¥ë¥Ð¥Ã¥Õ¥¡¤Î¤ßÂÐ±þ)
//     (for:vs result,gp ending)
//-------------------------------------------------
void doSeqData2_vs(int i,int x,int y,int num,int param)
{
	SeqData *sd_ptr;

	sd_ptr = &seq_data_block[i];
	if (!(sd_ptr->pri & 0x80000000))
		return;
	SelectTex_vs(sd_ptr,num);
	graphPtr = doTexList_vs(graphPtr,sd_ptr,x,y,num,param);
}

#if 0
//-------------------------------------------------
//
// »ØÄê¥·¡¼¥±¥ó¥¹¥Ç¡¼¥¿¤Î½èÍý(¥À¥Ö¥ë¥Ð¥Ã¥Õ¥¡¤Î¤ßÂÐ±þ)
//		¡¼¥Ð¥Ã¥Õ¥¡¤Î¥¹¥ï¥Ã¥Ô¥ó¥°¤Î¤ß¡¼
// (º£¤Ï¤â¤¦»È¤Ã¤Æ¤¤¤Þ¤»¤ó)
//-------------------------------------------------
void doSeqData2a(int i,int x,int y,int param)
{
	SeqData *sd_ptr;

	sd_ptr = &seq_data_block[i];
	if (!(sd_ptr->pri & 0x80000000))
		return;
	if (sd_ptr->buffer)
		sd_ptr->buffer = 0;
	else
		sd_ptr->buffer = 1;
	sd_ptr->pattern = 0;
	graphPtr = doTexList_w(graphPtr,sd_ptr,x,y,param);
}
#endif

//-----------------------------------------------
//
// ¥·¡¼¥±¥ó¥¹¥Ç¡¼¥¿¤Î½èÍý(¼ç¤Ë¥À¥Ö¥ë¥Ð¥Ã¥Õ¥¡´ÉÍýÉôÊ¬)
//
//-----------------------------------------------
TexBlock *SelectTex(SeqData *sd_ptr)
{
	TexBlockSeq *tbs_ptr;
	TexBlock *tb_ptr;
	unsigned short *t_ptr;

	tbs_ptr = sd_ptr->seq_ptr;

	if (sd_ptr->pattern < 0){
		sd_ptr->pattern = 0;
		sd_ptr->count = 0;// ¸·Ì©¤Ë¤Ï¤ª¤«¤·¤¤¡ª¡ª
	}

	sd_ptr->count--;
	if (sd_ptr->count<=0){
		sd_ptr->pattern++;
		if (!tbs_ptr[sd_ptr->pattern].tex_block_ptr)
			sd_ptr->pattern = 0;
		sd_ptr->count = tbs_ptr[sd_ptr->pattern].count;
		tb_ptr = GetTBPointer(tbs_ptr[sd_ptr->pattern].tex_block_ptr);
		//t_ptr =tb_ptr->tex_data_ptr; 
		if (sd_ptr->buffer){
			SetChangeTexData(tb_ptr,sd_ptr->block_num);
			sd_ptr->buffer = 0;
		}
		else{
			SetChangeTexData(tb_ptr,sd_ptr->block_num+1);
			sd_ptr->buffer = 1;
		}
			
	}
	return(sd_ptr->seq_ptr[sd_ptr->pattern].tex_block_ptr);
}	

//-----------------------------------------------
//
// ¥·¡¼¥±¥ó¥¹¥Ç¡¼¥¿¤Î½èÍý(¼ç¤Ë¥À¥Ö¥ë¥Ð¥Ã¥Õ¥¡´ÉÍýÉôÊ¬)
// (vs¥ê¥¶¥ë¥ÈÉ½¼¨ÍÑ)
//-----------------------------------------------
TexBlock *SelectTex_vs(SeqData *sd_ptr,int num)
{
	TexBlockSeq *tbs_ptr;
	TexBlock *tb_ptr;
	unsigned short *t_ptr;

	tbs_ptr = sd_ptr->seq_ptr;

	if (sd_ptr->pattern < 0){
		sd_ptr->pattern = 0;
		sd_ptr->count = 0;// ¸·Ì©¤Ë¤Ï¤ª¤«¤·¤¤¡ª¡ª
	}

	sd_ptr->count--;
	if (sd_ptr->count<=0){
		sd_ptr->pattern++;
		if (!tbs_ptr[sd_ptr->pattern].tex_block_ptr)
			sd_ptr->pattern = 0;
		sd_ptr->count = tbs_ptr[sd_ptr->pattern].count;
		tb_ptr = GetTBPointer(tbs_ptr[sd_ptr->pattern].tex_block_ptr);
		//t_ptr =tb_ptr->tex_data_ptr; 
		sd_ptr->buffer ^= 1;
			SetChangeTexData_vs(tb_ptr,num,sd_ptr->buffer);
			
	}
	return(sd_ptr->seq_ptr[sd_ptr->pattern].tex_block_ptr);
}	


//--------------------------------------------------
//
// ¸µ¥Æ¥¯¥¹¥Á¥ã¥Ç¡¼¥¿¤ò½ù¡¹¤Ë¥°¥ì¥¤¥¹¥±¡¼¥ë¤ËÊÑ´¹¤·¤ÆÊÌ¤Î¤È¤³¤í¤ËÅ¾Á÷¤¹¤ë
//
//--------------------------------------------------
void GrayScale_tex_buff256(unsigned source_num,unsigned dist_num,
						   unsigned pixel,int step)
{
	unsigned short *buf1_ptr,*buf2_ptr;
	int i,r,g,b,a,gray;
	int r2,g2,b2;

	buf1_ptr = &tex_buff[tex_block_ptr[source_num].number];
	buf2_ptr = &tex_buff[tex_block_ptr[dist_num].number];
	for (i = 0;i < pixel;i++){
		r = ((*buf1_ptr & 0xf800)>>11);
		g = ((*buf1_ptr & 0x07c0)>>6);
		b = ((*buf1_ptr & 0x003e)>>1);
		a = *buf1_ptr & 0x0001;
		gray = (r*77+g*150+b*29)>>8;
		r2 = (((gray - r)*step)>>8)+r;
		g2 = (((gray*7/8 - g)*step)>>8)+g;
		b2 = (((gray*6/8 - b)*step)>>8)+b;
		*buf2_ptr = (b2<<1)+(g2<<6)+(r2<<11)+a;
		*buf1_ptr++;
		*buf2_ptr++;
	}

}

void GrayScale_tex_buff(unsigned num)
{
	unsigned short *buf_ptr;
	unsigned i,r,g,b,a,gray;

	buf_ptr = &tex_buff[tex_block_ptr[num].number];
	for (i = 0;i < 307200;i++){
		r = ((*buf_ptr & 0xf800)>>11)*77;
		g = ((*buf_ptr & 0x07c0)>>6)*150;
		b = ((*buf_ptr & 0x003e)>>1)*29;
		a = *buf_ptr & 0x0001;
		gray = (r+g+b)>>8;
		*buf_ptr++ = (gray<<1)+(gray<<6)+(gray<<11)+a;
	}

}

void GrayScale_tex_buff2(unsigned num,unsigned int step)
{
	unsigned short *buf_ptr;
	unsigned i,r,g,b,a,gray,rest,pixel;

	buf_ptr = &tex_buff[tex_block_ptr[num].number];
	pixel = tex_block_ptr[num+1].number-tex_block_ptr[num].number;
	for (i = 0;i < pixel;i++){
		r = ((*buf_ptr & 0xf800)>>11)*77;
		g = ((*buf_ptr & 0x07c0)>>6)*150;
		b = ((*buf_ptr & 0x003e)>>1)*29;
		a = *buf_ptr & 0x0001;
		gray = (r+g+b)>>8;
		rest = 32 - gray;
		rest = rest*step/256;
		gray += rest;
		*buf_ptr++ = (gray<<1)+(gray<<6)+(gray<<11)+a;
	}

}

void GrayScale_tex_buff3(unsigned num,unsigned int step)
{
	unsigned short *buf_ptr;
	unsigned i,r,g,b,a,gray,pixel;
	float power_chart[32];

	for (i = 0;i < 32;i++)
		power_chart[i] = power(i/32.0,0.25+step*1.5/256.0);

	buf_ptr = &tex_buff[tex_block_ptr[num].number];
	pixel = tex_block_ptr[num+1].number-tex_block_ptr[num].number;
	for (i = 0;i < pixel;i++){
		r = ((*buf_ptr & 0xf800)>>11)*85;
		g = ((*buf_ptr & 0x07c0)>>6)*75;
		b = ((*buf_ptr & 0x003e)>>1)*95;
		a = *buf_ptr & 0x0001;
		gray = (r+g+b)>>8;
		gray = power_chart[gray]*32;
		if (gray > 31){
			gray = 31;
#if ROM == 0
			PRINTF("GrayScale_tex_buff3 calc error???\n");
#endif
		}
		*buf_ptr++ = (gray<<1)+(gray<<6)+(gray<<11)+a;
	}

}

//---------------------------------------------------
//
// ¥Æ¥¯¥¹¥Á¥ã¥Ç¡¼¥¿¤ò¥°¥ì¥¤¥¹¥±¡¼¥ë¤Ë¤·¤Æ ¿§¤â¤Ä¤±¤ë
//   (red,green,blue:0-255)
//
//---------------------------------------------------
void GrayScale_tex_buff_RGB(unsigned num,int size,int red,int green,int blue)
{
	unsigned short *buf_ptr;
	unsigned i,r,g,b,a,gray;
	

	buf_ptr = &tex_buff[tex_block_ptr[num].number];
	for (i = 0;i < size;i++){
		r = ((*buf_ptr & 0xf800)>>11)*77;
		g = ((*buf_ptr & 0x07c0)>>6)*150;
		b = ((*buf_ptr & 0x003e)>>1)*29;
		a = *buf_ptr & 0x0001;
		gray = (r+g+b)>>8;
		*buf_ptr++ = ((red*gray/256)<<11)+((green*gray/256)<<6)
			 +((blue*gray/256)<<1)+a;
	}

}
//-------------------------------------------------
//
// Ç¤°Õ¤Î¥Æ¥¯¥¹¥Á¥ã¤¬¤É¤³¤ËÅ¸³«¤·¤Æ¤¢¤ë¤«¤òÊÖ¤¹´Ø¿ô
//
//-------------------------------------------------
unsigned short *GetTexBuffPointer(unsigned short *tex_ptr)
{
	int check,j,num;

	check = 0;
	for(j = 0;j < all_tex_block_num;j++){
		if (tex_block_ptr[j].tex_data_ptr == tex_ptr){
			num = tex_block_ptr[j].number;
			check++;
			break;
		}
	}
	if (check)
		return(&tex_buff[num]);
	else
		return((unsigned short *)0);
}

#if 0
//----------------------------------------------------------------------
//
// ¥Þ¥Ã¥×¥»¥ì¥¯¥È²èÌÌ¤Î¥³¡¼¥¹¥Þ¥Ã¥×¤Î¥Æ¥¯¥¹¥Á¥ã¤¬¤¢¤ë¥Ý¥¤¥ó¥¿¤òÊÖ¤¹´Ø¿ô
// (¸½ºßÉÔ»ÈÍÑ)
//----------------------------------------------------------------------
unsigned short *GetMapViewPointer(void)
{
	unsigned short *ptr;
	OBJBlock *ob_ptr;
	SeqData *sd_ptr;
	int num;
	TexMap *tmp;

	tmp = &tex_block_ptr[0];
	ob_ptr = Get_OBJBlock_ptr(KO_MSEL_MAP);
	sd_ptr = &seq_data_block[ob_ptr->sd_number];
	if (sd_ptr->buffer){
		num = (tmp+sd_ptr->block_num+1)->number;
	}
	else{
		num = (tmp+sd_ptr->block_num)->number;
	}
	ptr = &tex_buff[num];
	PRINTF("tex_buff's ptr = 0x%x\n",tex_buff);
	PRINTF("map's ptr = 0x%x\n",ptr);
	return(ptr);
}
#endif

void InitKDL(void)
{
	kdl_buff_ptr = kdl_buff;
	all_kdl_block_num = 0;
}

void KDL_maker1(TexBlock *tp)
{
	kdl_buff_block[all_kdl_block_num].tex_block_ptr = GetTBPointer(tp);
	kdl_buff_block[all_kdl_block_num].gdl_ptr = kdl_buff_ptr;
}

void KDL_maker2(void)
{
	gSPEndDisplayList(kdl_buff_ptr++);
	all_kdl_block_num++;
	//PRINTF("kdl_buff_end=0x%x,kdl_buff_ptr=0x%x\n",
	//	   kdl_buff + KDL_BUFF_SIZE/sizeof(Gfx),kdl_buff_ptr);
#if ROM == 0
	if (kdl_buff_ptr > kdl_buff + KDL_BUFF_SIZE/sizeof(Gfx)){
		PRINTF("KDL_maker2 error1 kdl_buff_ptr=%x,kdl_buff_end=%x(kawano)\n"
			   ,kdl_buff_ptr,kdl_buff + KDL_BUFF_SIZE/sizeof(Gfx));
		while(1);
	}
	if (all_kdl_block_num >= KDL_DATA_MAX){
		PRINTF("KDL_maker2 error2 (kawano)\n");
		while(1);
	}
#endif
}

Gfx *KDL_call(Gfx *gdl,TexBlock *tp)
{
	Gfx *dl_ptr;
	int i,check;

	check = 0;
	for (i = 0;i < KDL_DATA_MAX;i++){
		if (GetTBPointer(tp) == kdl_buff_block[i].tex_block_ptr){
			dl_ptr = kdl_buff_block[i].gdl_ptr;
			check++;
			break;
		}
	}
	if (check){
		gSPDisplayList(gdl++,dl_ptr);
		return(gdl);
	}
#if ROM == 0
	else{
		PRINTF("KDL_call error (kawano)\n");
	}
#endif
}
#define	G_CC_MODULATEIDECALA_ENV	TEXEL0, 0, ENVIRONMENT, 0, 0, 0, 0, TEXEL0

Gfx *doTexList(Gfx *gdl,TexBlock *tp,int x,int y)
{
	int flg_ia;
	unsigned short *ptr;

	tp = GetTBPointer(tp);
	while(tp->tex_data_ptr){
		flg_ia = G_IM_FMT_RGBA;
//		gSPClearGeometryMode(gdl++,G_SHADE | G_SHADING_SMOOTH);
		switch(tp->mode){
		case K_NORMAL:
			gSPDisplayList(gdl++,kawano_dtl_k_normal);
			break;
		case K_CLEAR:
			gSPDisplayList(gdl++,kawano_dtl_k_clear);
			break;
		case K_GRAYPR:
			gSPDisplayList(gdl++,kawano_dtl_k_graypr);
			break;
		case K_INTA:
			gSPDisplayList(gdl++,kawano_dtl_k_inta);
			flg_ia = G_IM_FMT_IA;
			break;
		case K_MODECAENV:
			gSPDisplayList(gdl++,kawano_dtl_k_modecaenv);
			break;
		default:
			gSPDisplayList(gdl++,kawano_dtl_k_clear);
			break;
		}
		ptr = GetTexBuffPointer((unsigned short *)tp->tex_data_ptr);
		if (ptr){
			if (fade_flg[4] != 4){
				gdl = AutoTextureRect(gdl,flg_ia,1<<10,1<<10,
									  0,0,tp->w,tp->h,
									  x + tp->pos_x,y + tp->pos_y,
									  ptr,tp->w,tp->h);
			}
			else{
				gdl = AutoTextureRectR(gdl,0,0,tp->w,tp->h,
									  x + tp->pos_x,y + tp->pos_y,
									  ptr,tp->w,tp->h);
			}
		}
#if ROM==0
		else{
			PRINTF("LoadError? (kawano)\n");
			return(gdl);
		}
#endif
		tp++;
		}

	return(gdl);
}

//-------------------------------------------------------
//
// ÆÃ¼ì¸ú²ÌÍÑ doTexList
//
//-------------------------------------------------------
Gfx *doTexList2(Gfx *gdl,TexBlock *tp,int x,int y,int sp,int param)
{
	int flg_ia;
	unsigned short *ptr;

	tp = GetTBPointer(tp);
	while(tp->tex_data_ptr){
		flg_ia = G_IM_FMT_RGBA;
		switch(tp->mode){
		case K_NORMAL:
			gSPDisplayList(gdl++,kawano_dtl_k_normal);
			break;
		case K_CLEAR:
			gSPDisplayList(gdl++,kawano_dtl_k_clear);
			break;
		//case K_GRAYPR:
		//	gSPDisplayList(gdl++,kawano_dtl_k_graypr);
		//	break;
		//case K_INTA:
		//	gSPDisplayList(gdl++,kawano_dtl_k_inta);
		//	flg_ia = G_IM_FMT_IA;
		//	break;
		default:
#if ROM == 0
			PRINTF("Unknown doTexList2_type!!!(kawano)\n");
			while(1);
#endif
			break;
		}
		ptr = GetTexBuffPointer((unsigned short *)tp->tex_data_ptr);
		if (ptr){
			switch(sp){
			case 1:
				gdl = AutoTextureRect64(gdl,flg_ia,
										x + tp->pos_x,y + tp->pos_y,
										ptr,param);
				break;
			case 2:
				gdl = AutoTextureRect_w(gdl,flg_ia,
										 0,0,tp->w,tp->h,
										 x + tp->pos_x,y + tp->pos_y,
										 ptr,tp->w,tp->h,param);
				break;
			case 3:
				gdl = AutoTextureRect_c(gdl,flg_ia,
										0,0,tp->w,tp->h,
										x + tp->pos_x,y + tp->pos_y,
										ptr,tp->w,tp->h);
				break;
			case 4:
				gdl = AutoTextureRect_2cyc(gdl,flg_ia,1<<10,1<<10,
										   0,0,tp->w,tp->h,
										   x + tp->pos_x,y + tp->pos_y,
										   ptr,tp->w,tp->h,param);
				break;
			default:
#if ROM == 0
				PRINTF("Unknown doTexList2_type!!!(kawano)\n");
				while(1);
#endif
				break;
			}
		}
#if ROM==0
		else{
			PRINTF("LoadError? (kawano)\n");
			return(gdl);
		}
#endif
		tp++;
		}

	return(gdl);
}


//-------------------------------------------------------
//
// Ê¸»úÉ½¼¨(4bit¥¢¥ë¥Õ¥¡)ÍÑ doTexList(°ú¿ô¤¬ÉâÆ°¾®¿ôÅÀ¥ô¥¡¡¼¥¸¥ç¥ó)
//
//-------------------------------------------------------
//Gfx *doTexList4(Gfx *gdl,TexBlock *tp,int x,int y,
Gfx *doTexList4(Gfx *gdl,TexBlock *tp,float x,float y,
				int sp,float param1,float param2)
{
	unsigned short *ptr;
	float check_x,check_y;
	int check;

	tp = GetTBPointer(tp);
	while(tp->tex_data_ptr){

		check = 0;
		check_x = x + tp->pos_x;
		if (check_x > SCREEN_WD)
			check++;
		check_x += tp->w*param1;
		if (check_x < 0)
			check++;
		check_y = y + tp->pos_y;
		if (check_y < 0)
			check++;
		check_y -= tp->h*param2;/* Ê¸»ú¤Î¤Ø¤½¤Ïº¸²¼¤Ë¤¢¤ë¤«¤é */
		if (check_y > SCREEN_HT)
			check++;
		if (check){
			tp++;
			continue;
		}

		ptr = GetTexBuffPointer((unsigned short *)tp->tex_data_ptr);
		if (ptr){
			switch(sp){
			case 1:
				gSPDisplayList(gdl++,kawano_dtl_k_afont_type1);
				gdl = Set_IAFont(gdl,ptr,x + tp->pos_x,y + tp->pos_y,
								 tp->w,tp->h,param1,param2);
				break;
			case 2:
				gSPDisplayList(gdl++,kawano_dtl_k_afont_type2);
				gdl = Set_IAFont(gdl,ptr,x + tp->pos_x,y + tp->pos_y,
								 tp->w,tp->h,param1,param2);
				break;
			default:
#if ROM == 0
				PRINTF("Unknown doTexList4_type!!!(kawano)\n");
				while(1);
#endif
				break;
			}
		}
#if ROM==0
		else{
			PRINTF("LoadError? (kawano)\n");
			return(gdl);
		}
#endif
		tp++;
	}

	return(gdl);
}


//--------------------------------------------------
//
// ¥Þ¥Ã¥×£±/£²¥µ¥¤¥ºÉ½¼¨ÍÑ doTexList
//
//--------------------------------------------------
Gfx *doTexList5(Gfx *gdl,TexBlock *tp,int x,int y,int param)
{
	int j,flg_ia;
	unsigned short *ptr;

	tp = GetTBPointer(tp);
	//tmp = &tex_block_ptr[0];
	//tp = GetTBPointer(sd_ptr->seq_ptr[sd_ptr->pattern].tex_block_ptr);
	while(tp->tex_data_ptr){
		flg_ia = G_IM_FMT_RGBA;
//		gSPClearGeometryMode(gdl++,G_SHADE | G_SHADING_SMOOTH);
		switch(tp->mode){
		case K_NORMAL:
			gSPDisplayList(gdl++,kawano_dtl_k_normal);
			break;
		case K_CLEAR:
			gSPDisplayList(gdl++,kawano_dtl_k_clear);
			break;
		//case K_GRAYPR:
		//	gSPDisplayList(gdl++,kawano_dtl_k_graypr);
		//	break;
		case K_INTA:
			gSPDisplayList(gdl++,kawano_dtl_k_inta);
			flg_ia = G_IM_FMT_IA;
			break;
		default:
			gSPDisplayList(gdl++,kawano_dtl_k_clear);
			break;
		}
		ptr = GetTexBuffPointer((unsigned short *)tp->tex_data_ptr);
		//if (sd_ptr->buffer){
		//	num = (tmp+sd_ptr->block_num+1)->number;
		//}
		//else{
		//	num = (tmp+sd_ptr->block_num)->number;
		//}
		//if (param >= 0){
		//	gdl = AutoTextureRect_w(gdl,flg_ia,
		//							0,0,tp->w,tp->h,
		//							x + tp->pos_x,y + tp->pos_y,
		//							&tex_buff[num],tp->w,tp->h,param);
		//}
		//else{
			switch(param){
			case 2:// ¥Þ¥Ã¥×½Ì¾®É½¼¨
				gdl = AutoTextureRect_zoom(gdl,flg_ia,1<<10,1<<10,
										   .5,.5,
										   0,0,tp->w,tp->h,
										   x + tp->pos_x,y + tp->pos_y,
										   ptr,tp->w,tp->h);
				break;
			case 3:// ¥Þ¥Ã¥×Ì¾½Ì¾®É½¼¨
				gdl = AutoTextureRect_zoom(gdl,flg_ia,1<<10,1<<10,
										   .457,.5,
										   //.5,.5,
										   0,0,tp->w,tp->h,
										   x + tp->pos_x,y + tp->pos_y,
										   ptr,tp->w,tp->h);
				break;
			default:
				break;
			}
		//}
		tp++;
	}

	return(gdl);
}



//--------------------------------------------------
//
// ¥À¥Ö¥ë¥Ð¥Ã¥Õ¥¡ÍÑ doTexList
//
//--------------------------------------------------
Gfx *doTexList_w(Gfx *gdl,SeqData *sd_ptr,int x,int y,int param)
{
	int j,num,flg_ia;
	TexBlock *tp;
	TexMap *tmp;

	tmp = &tex_block_ptr[0];
	tp = GetTBPointer(sd_ptr->seq_ptr[sd_ptr->pattern].tex_block_ptr);
	while(tp->tex_data_ptr){
		flg_ia = G_IM_FMT_RGBA;
//		gSPClearGeometryMode(gdl++,G_SHADE | G_SHADING_SMOOTH);
		switch(tp->mode){
		case K_NORMAL:
			gSPDisplayList(gdl++,kawano_dtl_k_normal);
			break;
		case K_CLEAR:
			gSPDisplayList(gdl++,kawano_dtl_k_clear);
			break;
		//case K_GRAYPR:
		//	gSPDisplayList(gdl++,kawano_dtl_k_graypr);
		//	break;
		case K_INTA:
			gSPDisplayList(gdl++,kawano_dtl_k_inta);
			flg_ia = G_IM_FMT_IA;
			break;
		default:
			gSPDisplayList(gdl++,kawano_dtl_k_clear);
			break;
		}
		if (sd_ptr->buffer){
			num = (tmp+sd_ptr->block_num+1)->number;
		}
		else{
			num = (tmp+sd_ptr->block_num)->number;
		}
		if (param >= 0){
			gdl = AutoTextureRect_w(gdl,flg_ia,
									0,0,tp->w,tp->h,
									x + tp->pos_x,y + tp->pos_y,
									&tex_buff[num],tp->w,tp->h,param);
		}
		else{
			switch(param){
			case -1:
				gdl = AutoTextureRect(gdl,flg_ia,1<<10,1<<10,0,0,tp->w,tp->h,
									  x + tp->pos_x,y + tp->pos_y,
									  &tex_buff[num],tp->w,tp->h);
				break;
			case -2:// ¥Þ¥Ã¥×½Ì¾®É½¼¨
				gdl = AutoTextureRect_zoom(gdl,flg_ia,1<<10,1<<10,
										   .5,.5,
										   0,0,tp->w,tp->h,
										   x + tp->pos_x,y + tp->pos_y,
										   &tex_buff[num],tp->w,tp->h);
				break;
			default:
				break;
			}
		}
		tp++;
	}

	return(gdl);
}

//--------------------------------------------------
//
// ¥À¥Ö¥ë¥Ð¥Ã¥Õ¥¡ÍÑ doTexList
// (vs¥ê¥¶¥ë¥ÈÉ½¼¨ÀìÍÑ)
//--------------------------------------------------
Gfx *doTexList_vs(Gfx *gdl,SeqData *sd_ptr,int x,int y,int num,int param)
{
	int j,flg_ia;
	TexBlock *tp;
	TexMap *tmp;

	tmp = &tex_block_ptr[0];
	tp = GetTBPointer(sd_ptr->seq_ptr[sd_ptr->pattern].tex_block_ptr);
	while(tp->tex_data_ptr){
		flg_ia = G_IM_FMT_RGBA;
//		gSPClearGeometryMode(gdl++,G_SHADE | G_SHADING_SMOOTH);
		switch(tp->mode){
		case K_NORMAL:
			gSPDisplayList(gdl++,kawano_dtl_k_normal);
			break;
		case K_CLEAR:
			gSPDisplayList(gdl++,kawano_dtl_k_clear);
			break;
		case K_GRAYPR:
			gSPDisplayList(gdl++,kawano_dtl_k_graypr);
			break;
		case K_INTA:
			gSPDisplayList(gdl++,kawano_dtl_k_inta);
			flg_ia = G_IM_FMT_IA;
			break;
		default:
			gSPDisplayList(gdl++,kawano_dtl_k_clear);
			break;
		}
		if (param >= 0){
			gdl = AutoTextureRect_w(gdl,flg_ia,
									0,0,tp->w,tp->h,
									x + tp->pos_x,y + tp->pos_y,
									(unsigned short *)&ken_data
									[sd_ptr->buffer][num/2][0x4000 + 0x2000*(num%2)],tp->w,tp->h,param);
		}
		tp++;
	}

	return(gdl);
}

void BeforeFadeMain(void)
{
	int i;
	POS_XY *pos_ptr,*size_ptr;
	SCREEN *scr_ptr;

	for(i = 0;i < 4;i++){
		pos_ptr = &old_screen_position[i];
		size_ptr = &old_screen_size[i];
		scr_ptr = &screen_data[i];

		pos_ptr->x = scr_ptr->posx;
		pos_ptr->y = scr_ptr->posy;
		size_ptr->x = scr_ptr->widthx;
		size_ptr->y = scr_ptr->widthy;
	}

	/* £µÈÖÌÜ¤ÏÁ´²èÌÌ¾ÃµîÍÑ */
	pos_ptr = &old_screen_position[4];
	size_ptr = &old_screen_size[4];

	pos_ptr->x = SCREEN_WD/2;
	pos_ptr->y = SCREEN_HT/2;
	size_ptr->x = SCREEN_WD;
	size_ptr->y = SCREEN_HT;
	
}

void FadeMain(void)
{
	int i;

	for(i = 0;i < 5;i++){
		FadeMain2(i);
#if 0
		PRINTF("%d,%d  %d,%d\n",
			   screen_data[i].widthx,screen_data[i].widthy,
			   screen_data[i].posx,screen_data[i].posy);
#endif
	}
}

//
// »ØÄê¥¹¥¯¥ê¡¼¥ó¤Î¤ß¤Î¥Õ¥§¡¼¥É½èÍý
//
void FadeMain2(int i)
{
	int counter_stop_flag;

	/* ³Æ¥ê¥¶¥ë¥È½èÍý¤ËÆþ¤Ã¤Æ¤¤¤¿¤é¥Õ¥§¡¼¥É½èÍý¤Ï¤Ê¤· */
	if (i != 4){
		//if (race_control_mode == FINISHRACE)
		//	return;
		if (Get_OBJBlock_ptr2(KO_GAME_TIME))
			return;
		if (Get_OBJBlock_ptr2(KO_GAME_POINT))
			return;
		if (Get_OBJBlock_ptr2(KO_GAME_TA1))
			return;
		if (Get_OBJBlock_ptr2(KO_GAME_TA2))
			return;
		if (Get_OBJBlock_ptr2(KO_GAME_GPLOSE))
			return;
		if (Get_OBJBlock_ptr2(KO_GAME_VS_RES))
			return;
	}
	counter_stop_flag = 0;
	gSPDisplayList(graphPtr++, kwdraw_init);
	//gDPSetRenderMode(graphPtr++,G_RM_OPA_SURF, G_RM_OPA_SURF2);
	if ((i != 4) && (pause_flag))
		counter_stop_flag = 1;
	switch(fade_flg[i]){
	case 0:
		break;
	case 1:
		FadeIn(i,counter_stop_flag);
		break;
	case 2:
		FadeOut(i,counter_stop_flag);
		break;
	case 3:
		FadeOut_m();
		break;
	case 4:
		FadeOut_r();
		break;
	case 5:/*¿¿¤Ã¹õ¾õÂÖ*/
		FadeBlack(i);
		break;
	case 6:/*¥¯¥ê¥¢¤Ê¾õÂÖ*/
		break;
	case 7:
		FadeOutWhite(i,counter_stop_flag);
		break;
	case 8:
		FadeInWhite(i,counter_stop_flag);
		break;
	}

}

void FadeIn_(int num,int cs_flg,int type)
{
	POS_XY *pos_ptr,*size_ptr;
	P_COLOR *col_ptr;
	SCREEN *scr_ptr;
	int x,y,w,h;

	switch(game_mode){
	case MARIOGP:
	case TIMEATTACK:
		pos_ptr = &old_screen_position[num];
		size_ptr = &old_screen_size[num];
		x = pos_ptr->x;
		y = pos_ptr->y;
		w = size_ptr->x;
		h = size_ptr->y;
		break;
	default:
		if (num >= 4){
			pos_ptr = &old_screen_position[num];
			size_ptr = &old_screen_size[num];
			x = pos_ptr->x;
			y = pos_ptr->y;
			w = size_ptr->x;
			h = size_ptr->y;
			break;
		}
		scr_ptr = &screen_data[num];
		x = scr_ptr->posx;
		y = scr_ptr->posy;
		w = scr_ptr->widthx;
		h = scr_ptr->widthy;
		break;
	}

	//gDPPipeSync(graphPtr++);
	col_ptr = &fade_color_bw[type];
	graphPtr = FillRect1Color_f(graphPtr,
								x - w/2,y - h/2,
								x + w/2,y + h/2,
								col_ptr->r,col_ptr->g,col_ptr->b,
								255-fade_counter2[num]*255/fade_counter[num]);
#if 0
	PRINTF("alpha=%u,counter=%u\n",
		   255-fade_counter2[num]*255/fade_counter[num],fade_counter2[num]);
#endif

	if (cs_flg)
		return;

	fade_counter2[num]++;
	if (fade_counter2[num] >= fade_counter[num]){
		if (sequence_mode == RACESEQUENCE){
			fade_flg[num] = 6;
		}
		else{
			fade_flg[num] = 0;
			fb_clear_flg = 0;
		}
	}
}

void FadeIn(int num,int cs_flg)
{
	FadeIn_(num,cs_flg,0);
}

void FadeInWhite(int num,int cs_flg)
{
	FadeIn_(num,cs_flg,1);
}

void Setting_SoundOutMode4multiplayer(void)
{
	if ((sound_output != MONO_MODE) && (player_number > 1))
		Na_SoundOutModeSet(STEREO_MODE);
}

void EndFadeOut(int num)
{
	OBJBlock *ob_ptr;
	int check;
	unsigned char cup_check[3];

	check = 0;
	if (sequence_mode == RESULTSEQUENCE){
		int i;

		switch(race_level){
		case 2:
		case 3:
			if ((resultstat.rank < 3) && (cup_select == 3))
				check = 1;
			break;
		default:
			check = 0;
			break;
		}
		/*150cc,¤ª¤Þ¤± ¥¹¥Ú¥·¥ã¥ë¥«¥Ã¥×¤Ç£³°Ì°ÊÆâ¤Î¤È¤­*/
		if (check){
		//if (1){
			//new_sequence_mode = ENDINGSEQUENCE;
			result_changeseq = ENDINGSEQUENCE;
			ending_map_number = KT9;
		}
		else{
			//new_sequence_mode = GAMESELECTSEQUENCE;
			result_changeseq = GAMESELECTSEQUENCE;
			k_bg_number = 11;
			//goto_gameselect();
		}
		return;
	}
	if (sequence_mode == RACESEQUENCE){
		switch(fade_flg[num]){
#if 0
		case 1:/*FadeIn*/
			fade_flg[num] = 6;
			break;
#endif
		case 2:/*FadeOut*/
			if (num != 4){/* ¥¸¥å¥²¥à¤Î¥Õ¥§¡¼¥É¥¢¥¦¥È¤Ç¤ÏÈ¿±þ¤·¤Ê¤¤ */
				fade_flg[num] = 5;
				break;
			}
				
			ob_ptr = Get_OBJBlock_ptr2(KO_GAME_VS_RES);
			if (ob_ptr){
				switch(ob_ptr->pattern){
				case KSEQ_VS_SELECT0:
					goto_racing();
					break;
				case KSEQ_VS_SELECT1:
					goto_mapselect();
					//k_bg_number = 13;
					//init_kawano_select();
					break;
				case KSEQ_VS_SELECT2:
					goto_kartselect();
					//k_bg_number = 12;
					//init_kawano_select();
					break;
				case KSEQ_VS_SELECT3:
				default:
					goto_gameselect();
					//goto_title();
					//k_bg_number = 10;
					//init_kawano_select();
					break;
				}
				break;
			}
			ob_ptr = Get_OBJBlock_ptr2(KO_GAME_GPLOSE);
			if (ob_ptr){
				switch(ob_ptr->pattern){
				case KSEQ_GPL_SELECT1:
					//retry_flag = 1;
					goto_racing();
					retry_count = 1;
					break;
				case KSEQ_GPL_SELECT2:
				default:
					goto_gameselect();
					//goto_title();
					break;
				}
				break;
			}
			ob_ptr = Get_OBJBlock_ptr2(KO_GAME_PAUSE);
			if (ob_ptr){
				switch(ob_ptr->pattern){
				case KSEQ_PS_TA2:
					goto_racing();
					check++;
					break;
				case KSEQ_PS_TA3:
				case KSEQ_PS_VS2:
				case KSEQ_PS_BT2:
					goto_mapselect();
					//k_bg_number = 13;
					//init_kawano_select();
					check++;
					break;
				case KSEQ_PS_TA4:
				case KSEQ_PS_VS3:
				case KSEQ_PS_BT3:
					goto_kartselect();
					//k_bg_number = 12;
					//init_kawano_select();
					check++;
					break;
				case KSEQ_PS_TA5:
				case KSEQ_PS_VS4:
				case KSEQ_PS_GP2:
				case KSEQ_PS_BT4:
					goto_gameselect();
					//goto_title();
					//k_bg_number = 10;
					//init_kawano_select();
					check++;
					break;
				default:
					fade_flg[num] = 5;
					break;
				}
				if (check)
					pause_flag = 0;
			}
			ob_ptr = Get_OBJBlock_ptr2(KO_GAME_TA_REP);
			if (ob_ptr){
				//if (num != 4){
				//	fade_flg[num] = 5;
				//}
				//else{
					switch(ob_ptr->pattern){
					case KSEQ_TAR_SEL1:
						retry_flag = 1;
						replay_flag = 0;
						goto_racing();
						break;
					case KSEQ_TAR_SEL2:
						retry_flag = 0;
						replay_flag = 0;
						goto_mapselect();
						//k_bg_number = 13;
						//init_kawano_select();
						break;
					case KSEQ_TAR_SEL3:
						retry_flag = 0;
						replay_flag = 0;
						goto_kartselect();
						//k_bg_number = 12;
						//init_kawano_select();
						break;
					case KSEQ_TAR_SEL4:
						retry_flag = 0;
						replay_flag = 0;
						goto_gameselect();
						//goto_title();
						//k_bg_number = 10;
						//init_kawano_select();
						break;
					case KSEQ_TAR_SEL5:
						retry_flag = 0;
						replay_flag = 1;
						goto_racing();
						break;
					}
					break;
				//}
			}
			else
				fade_flg[num] = 5;
			break;
			
		}
		return;
	}
	fade_flg[num] = 0;
	if (title_mode != 0x40){
		switch(k_bg_number_next){
		case 0:
			if (k_bg_number == 8){
				k_bg_number = 10;
				k_bg_change = 2;/* Çò¤«¤é¥Õ¥§¡¼¥É¥¤¥ó */
			}
			else{
				k_bg_number++;
			}
			break;
		case 1:
			k_bg_number--;
			break;
		case 2://¥Ç¥âÆÍÆþ
			demo_flag = 1;
			demo_play_flag = 1;
			new_sequence_mode=RACESEQUENCE;
			//Na_Seq_Stop();
			race_level = 1;
			switch(demo_number){
			case 0:
				map_number = 0;
				race_screen_mode = FULL_SCREEN;
				player_number = 1;
				players = 1;
				player_driver[0] = MARIO;
				//cup_level = KINOKOCUP;
				game_mode = MARIOGP;
				break;
			case 1:
				map_number = 1;
				race_screen_mode = UP_DOWN_SCREEN;
				player_number = 2;
				players = 2;
				player_driver[0] = YOSSY;
				player_driver[1] = DONKY;
				//cup_level = STARCUP;
				game_mode = VSBATTLE;
				break;
			case 2:
				map_number = 11;
				race_screen_mode = FULL_SCREEN;
				player_number = 1;
				players = 1;
				player_driver[0] = LUIZI;
				//cup_level = KINOKOCUP;
				game_mode = MARIOGP;
				break;
			case 3:
				map_number = 14;
				race_screen_mode = FOUR_PARTS_SCREEN;
				player_number = 3;
				players = 3;
				player_driver[0] = WARIO;
				player_driver[1] = YOSSY;
				player_driver[2] = KUPPA;
				//cup_level = KINOKOCUP;
				game_mode = VSBATTLE;
				break;
			case 4:
				map_number = 2;
				race_screen_mode = FULL_SCREEN;
				player_number = 1;
				players = 1;
				player_driver[0] = KUPPA;
				//cup_level = KINOKOCUP;
				game_mode = MARIOGP;
				break;
			case 5:
				map_number = 12;
				race_screen_mode = FOUR_PARTS_SCREEN;
				player_number = 4;
				players = 4;
				player_driver[0] = MARIO;
				player_driver[1] = LUIZI;
				player_driver[2] = PEACH;
				player_driver[3] = KINOP;
				//cup_level = STARCUP;
				game_mode = VSBATTLE;
				break;
			default:
				break;
			}
			demo_number++;
			if (demo_number >= DEMO_NUMBER_MAX)
				demo_number = 0;
			cup_level = cup_select = map2cup_chart[map_number];
			circuit_select = map2circuit_chart[map_number];
			//Setting_SoundOutMode4multiplayer();
			break;
		case 3:/* ¥Ç¡¼¥¿²èÌÌ¤Ø¤¤¤¯¤È¤­ */
			switch(k_bg_number){
			case 11:
				k_bg_number = 6;
				break;
			case 6:
				k_bg_number = 11;
				break;
			}
			break;
		case 4:/* ¥ª¥×¥·¥ç¥ó²èÌÌ¤Ø¹Ô¤¯¤È¤­ */
			switch(k_bg_number){
			case 11:
				k_bg_number = 5;
				break;
			case 5:
				k_bg_number = 11;
				break;
			}
			break;
		}
		if (!k_bg_change)
			k_bg_change = 1;
		if (k_bg_number > 13){
			new_sequence_mode=RACESEQUENCE;
			if (game_mode == TIMEATTACK)
				loading_ghost_flg = 1;
			//Na_Seq_Stop();
			//    k_bg_number = 10;
			Setting_SoundOutMode4multiplayer();
		}
		fb_clear_flg = 0;
	}
	// ¥Ç¥Ð¥Ã¥°¥â¡¼¥É¤«¤é¥²¡¼¥à¤Ë°Ü¤ë¤È¤­¤Î½èÍý
	else{
		switch(res_seq_flg){
		case 1:
			new_sequence_mode=RESULTSEQUENCE;
			break;
		case 2:
		case 3:
			new_sequence_mode=ENDINGSEQUENCE;
			ending_map_number = KT9;
			break;
		default:
			new_sequence_mode=RACESEQUENCE;
			if (game_mode == TIMEATTACK)
				loading_ghost_flg = 1;
			break;
		}
	    set_rival_car_name();//¾®Àî¤µ¤ó¤Î¤ó
		//Na_Seq_Stop();
		if (race_screen_mode == FOUR_PARTS_SCREEN){
			switch(game_mode){
			case GRANDPRIX:
			case TIMEATTACK:
				game_mode = VSBATTLE;
				break;
			}
		}
		switch(map_number){
		case KT16:
		case KT17:
		case KT20:
		case KT18:
			game_mode = BATTLE;
			if (player_number == 1){
				player_number = players = 2;
				race_screen_mode = UP_DOWN_SCREEN;
			}
			break;
		//case KT18:
		//	game_mode = 4;
		//	race_screen_mode = FULL_SCREEN;
		//	break;
		default:
			if (game_mode == BATTLE)
				game_mode = MARIOGP;
			if ((game_mode == VSBATTLE) && (player_number == 1))
				game_mode = MARIOGP;
			break;
		}
		//if (game_mode != BATTLE){
			cup_level = cup_select = map2cup_chart[map_number];
			circuit_select = map2circuit_chart[map_number];
		//}
		//Setting_SoundOutMode4multiplayer();
		switch(res_seq_flg){
		case 1:
			break;
		case 2:
			race_level = 0;
			break;
		case 3:
			race_level = 3;
			break;
		default:
			if (race_level == 3)
				screen_flip = 1;
			else
				screen_flip = 0;
		}
	}
}

void FadeOut_(int num,int cs_flg,int type)
{
	POS_XY *pos_ptr,*size_ptr;
	P_COLOR *col_ptr;
	SCREEN *scr_ptr;
	int brightness;
	int x,y,w,h;

	switch(game_mode){
	case MARIOGP:
	case TIMEATTACK:
		pos_ptr = &old_screen_position[num];
		size_ptr = &old_screen_size[num];
		x = pos_ptr->x;
		y = pos_ptr->y;
		w = size_ptr->x;
		h = size_ptr->y;
		break;
	default:
		if (num >= 4){
			pos_ptr = &old_screen_position[num];
			size_ptr = &old_screen_size[num];
			x = pos_ptr->x;
			y = pos_ptr->y;
			w = size_ptr->x;
			h = size_ptr->y;
			break;
		}
		scr_ptr = &screen_data[num];
		x = scr_ptr->posx;
		y = scr_ptr->posy;
		w = scr_ptr->widthx;
		h = scr_ptr->widthy;
		break;
	}
	brightness = fade_counter2[num]*255/fade_counter[num];
	if (brightness > 255)
		brightness = 255;

	col_ptr = &fade_color_bw[type];
	//gDPPipeSync(graphPtr++);
	graphPtr = FillRect1Color_f(graphPtr,
								x - w/2,y - h/2,
								x + w/2,y + h/2,
								col_ptr->r,col_ptr->g,col_ptr->b,brightness);

	if (cs_flg)
		return;

	fade_counter2[num]++;
	if (fade_counter2[num] > fade_counter[num]+1)
		EndFadeOut(num);
}

void FadeOut(int num,int cs_flg)
{
	FadeOut_(num,cs_flg,0);
}

void FadeOutWhite(int num,int cs_flg)
{
	FadeOut_(num,cs_flg,1);
}

void FadeBlack(int num)
{
	POS_XY *pos_ptr,*size_ptr;
	SCREEN *scr_ptr;
	int x,y,w,h;

	switch(game_mode){
	case MARIOGP:
	case TIMEATTACK:
		pos_ptr = &old_screen_position[num];
		size_ptr = &old_screen_size[num];
		x = pos_ptr->x;
		y = pos_ptr->y;
		w = size_ptr->x;
		h = size_ptr->y;
		break;
	default:
		if (num >= 4){
			pos_ptr = &old_screen_position[num];
			size_ptr = &old_screen_size[num];
			x = pos_ptr->x;
			y = pos_ptr->y;
			w = size_ptr->x;
			h = size_ptr->y;
			break;
		}
		scr_ptr = &screen_data[num];
		x = scr_ptr->posx;
		y = scr_ptr->posy;
		w = scr_ptr->widthx;
		h = scr_ptr->widthy;
		break;
	}
	//gDPPipeSync(graphPtr++);
	graphPtr = FillRect1Color_f(graphPtr,
								x - w/2,y - h/2,
								x + w/2,y + h/2,
								0,0,0,255);
}

void FadeOut_r(void)
{
	int i,counter;
	int x,y;
	int brightness;

	fade_counter2[4]++;
	if (fade_counter2[4] >= fade_counter[4]+1){
			EndFadeOut(4);
	}

    gDPPipeSync(graphPtr++);
	brightness = fade_counter2[4]*255/fade_counter[4];
	if (brightness > 255)
		brightness = 255;
	
	//gDPPipeSync(graphPtr++);
	graphPtr = FillRect1Color_f(graphPtr,0,0,SCREEN_WD,SCREEN_HT,
								0,0,0,brightness);
}

void FadeOut_m(void)
{
	int i,counter;
	int x,y;
	int brightness;

	fade_counter2[4]++;
	if (fade_counter2[4] >= fade_counter[4]){
		if (fade_counter2[4] == fade_counter[4]){
			for (i = 0;i < 1200;i++)
				k_work[i] = 1;
		}
		else{
			EndFadeOut(4);
		}
	}
	else{
		i = 0;
		counter = 0;
		while(counter < 1200/fade_counter[4]){
			if ((!k_work[i])&&(!(make_random_limmit((1200-fade_counter2[4])
													/fade_counter[4])))){
				k_work[i] = 1;
				counter++;
			}
			i++;
			if (i >= 1200)
				i = 0;
		}
	}

	gDPPipeSync(graphPtr++);
	gDPSetRenderMode(graphPtr++,G_RM_XLU_SURF, G_RM_XLU_SURF2);
	gDPSetPrimColor(graphPtr++,0,0,0,0,0,255);
	gDPSetCombineMode(graphPtr++,G_CC_PRIMITIVE, G_CC_PRIMITIVE);
	for (i = 0;i < 1200;i++){
		if (k_work[i]){
			x = (i % 40)*8;
			y = (i / 40)*8;
			gDPFillRectangle(graphPtr++,x,y,x+8,y+8);
		}
	}
    gDPPipeSync(graphPtr++);
	brightness = fade_counter2[4]*255/fade_counter[4];
	if (brightness > 255)
		brightness = 255;
	
	//gDPPipeSync(graphPtr++);
	graphPtr = FillRect1Color_f(graphPtr,0,0,SCREEN_WD,SCREEN_HT,
								0,0,0,brightness);
}

void SetFadeIn_(unsigned count,int type)
{
	if (count <= 0)/*zero divide ÂÐºö*/
		count = 1;

	switch(fade_flg[4]){
	case 1:
	case 6:
		break;
	default:
		fade_flg[4] = type;
		fade_counter[4] = count;
		if (fade_counter[4] >255)
			fade_counter[4] = 255;
		fade_counter2[4] = 0;
		break;
	}
}

void SetFadeIn(unsigned count)
{
	SetFadeIn_(count,1);
}

void SetFadeInWhite(unsigned count)
{
	SetFadeIn_(count,8);
}

void SetFadeOut_(unsigned count,int type)
{
	if (count <= 0)/*zero divide ÂÐºö*/
		count = 1;

	switch(fade_flg[4]){
	case 2:
	case 5:
		break;
	default:
		fade_flg[4] = type;
		fade_counter[4] = count;
		if (fade_counter[4] >255)
			fade_counter[4] = 255;
		fade_counter2[4] = 0;
		break;
	}
}

void SetFadeOut(unsigned count)
{
	SetFadeOut_(count,2);
}

void SetFadeOutWhite(unsigned count)
{
	SetFadeOut_(count,7);
}

void SetFadeInScreen(unsigned num,unsigned count)
{
	if (count <= 0)/*zero divide ÂÐºö*/
		count = 1;

	switch(fade_flg[num]){
	case 1:
	case 6:
		break;
	default:
		fade_flg[num] = 1;
		fade_counter[num] = count;
		if (fade_counter[num] >255)
			fade_counter[num] = 255;
		fade_counter2[num] = 0;
		break;
	}
}

void SetFadeOutScreen(unsigned num,unsigned count)
{
	if (count <= 0)/*zero divide ÂÐºö*/
		count = 1;

	switch(fade_flg[num]){
	case 2:
	case 5:
		break;
	default:
		fade_flg[num] = 2;
		fade_counter[num] = count;
		if (fade_counter[num] >255)
			fade_counter[num] = 255;
		fade_counter2[num] = 0;
		break;
	}
}

void SetFadeOut_m(unsigned count)
{
	int i;

	if (fade_flg[4] != 3){
		fade_flg[4] = 3;
		fade_counter[4] = count;
		if (fade_counter[4] >255)
			fade_counter[4] = 255;
		fade_counter2[4] = 0;
		for(i = 0;i < 1200;i++)
			k_work[i] = 0;
	}
}

void SetFadeOut_r(unsigned count)
{
	if (fade_flg[4] != 4){
		fade_flg[4] = 4;
		fade_counter[4] = count;
		if (fade_counter[4] >255)
			fade_counter[4] = 255;
		fade_counter2[4] = 0;
	}
}

void SetFadeOut_f()
{
    SetFadeOut(10);
	k_bg_number_next = 0;
}

void SetFadeOut_fw()
{
    SetFadeOutWhite(10);
	k_bg_number_next = 0;
}

void SetFadeOut_b()
{
    SetFadeOut(10);
	k_bg_number_next = 1;
}

void SetFadeOut_d()
{
    SetFadeOut(10);
	k_bg_number_next = 2;
}

void SetFadeOut_ta_data()
{
    SetFadeOut(10);
	k_bg_number_next = 3;
}

void SetFadeOut_option()
{
    SetFadeOut(10);
	k_bg_number_next = 4;
}

//
// »ØÄê¥¹¥¯¥ê¡¼¥ó¤Î¤ß¤Î¥«¥ß¥Ê¥ê½èÍý
//
void ThunderMain(int i)
{
	switch(thunder_flg[i]){
	case 0:
		break;
	case 1:
		k_thunder(i);
		break;
	default:
		thunder_flg[i] = 0;
		break;
	}

}

void k_thunder(int num)
{
	POS_XY *pos_ptr,*size_ptr;
	P_COLOR *col_ptr;
	int pattern;
	float wf1;
	int i;

	pos_ptr = &old_screen_position[num];
	size_ptr = &old_screen_size[num];
	pattern = thunder_onoff[thunder_counter[num]];
	if (pattern){
		col_ptr = &k_thunder_color[pattern];
		if (thunder_counter[num]  < 27){
			graphPtr = FillRect1Color_f(graphPtr,
										pos_ptr->x - size_ptr->x/2,
										pos_ptr->y - size_ptr->y/2,
										pos_ptr->x + size_ptr->x/2,
										pos_ptr->y + size_ptr->y/2,
										col_ptr->r,col_ptr->g,
										col_ptr->b,col_ptr->a);
		}
		else{
			wf1 = (38 - thunder_counter[num])/11.0;
			graphPtr = FillRect1Color_f(graphPtr,
										pos_ptr->x - size_ptr->x/2,
										pos_ptr->y - size_ptr->y/2,
										pos_ptr->x + size_ptr->x/2,
										pos_ptr->y + size_ptr->y/2,
										col_ptr->r,col_ptr->g,col_ptr->b,
										(uint)(col_ptr->a*wf1));
		}
		
	}
	thunder_counter[num]++;
	if (thunder_counter[num] >= 38){
		for (i = 0;i < 4;i++)
			thunder_flg[i] = 0;
	}
}
void SetThunder(void)
{
	int i;

	for (i = 0;i < 4;i++)
		SetThunder_(i);
}
void SetThunder_(int num)
{
	thunder_flg[num] = 1;
	thunder_counter[num] = 0;
}

void InitOBJBlock(void)
{
	int i;

	for (i = 0;i < OBJ_BLOCK_MAX;i++){
		obj_block[i].kind = 0;
	}
}

void SetOBJBlock(int kind,int x,int y,char pri)
{
	OBJBlock *ptr;
	P_COLOR *col_ptr;
	int count,a;

	count = 0;
	ptr = obj_block;
	while(1){
		if (!ptr->kind)
			break;
		count++;
		if (count > OBJ_BLOCK_MAX){
#if ROM==0
			PRINTF("OBJ_BLOCK OVER FLOW!!(kawano)\n");
#endif
			while(1);
		}
		ptr++;
	}
	ptr->kind = kind;
	ptr->pattern = 0;
	ptr->pattern2 = 0;
	ptr->disp_x = x;
	ptr->disp_y = y;
	ptr->pri = pri;
	ptr->disp_on = 1;
	ptr->work1 = 0;
	ptr->work2 = 0;

	switch(kind){
	case KO_NINTEN_LOGO:

#if DL_KARTLOGO
		logo_timer = 0;
		logo_delay_size = 0.0f;
		logo_yang_speed = 3.0f;
#endif
		logo_cam_z = 2500;
		logo_rot_x = 0;
		logo_rot_y = -270;
		logo_rot_z = 0;
		logo_pos_x = 0;
		logo_pos_y = 0;
		logo_pos_z = 0;
		logo_scale_z = 3.0;
		ptr->work1 = -1;
		ptr->work2 = 1;
		break;
	case KO_CHECKER_FLAG:
		logo_cam_z = 1800;
		logo_rot_x = -51;
		logo_rot_y = -12;
		logo_rot_z = -18;
		logo_pos_x = -270;
		logo_pos_y = 750;
		logo_pos_z = 0;
		logo_scale_z = 1.0;
		ptr->work1 = -1;
		ptr->work2 = 1;
		break;
#if FONT_TEST_ON_TITLE
	case KO_TEST_CPFONT:
		TexBuffLoad(TexList_cp_font_all);
		break;
#endif
	//case KO_CP_CSCOLOR:
	//	break;
	case KO_CP_BG1:
		TexBuffLoad_p(TexList_cp_bg1,0);
		KDL_maker1(TexList_cp_bg1);
		kdl_buff_ptr = doTexList(kdl_buff_ptr,TexList_cp_bg1,
								 ptr->disp_x,ptr->disp_y);
		KDL_maker2();
		break;
	case KO_CP_BG2:
		TexBuffLoad_p(TexList_cp_bg2,0);
		KDL_maker1(TexList_cp_bg2);
		kdl_buff_ptr = doTexList(kdl_buff_ptr,TexList_cp_bg2,
								 ptr->disp_x,ptr->disp_y);
		KDL_maker2();
		break;
	case KO_CP_GNOTE:
		TexBuffLoad_p(TexList_cp_gnote,0);
		TexBuffLoad(TexList_cp_notecursor);
		ptr->disp_y = CP_GNOTE_Y;
		for (count = 0;count < 133;count++)
			TexBuffLoad(GetTBPointer(TexList_cp_fonts[count]));			
		break;
	case KO_CP_MES1:
		TexBuffLoad(TexList_cp_mes1_shadow);
		KDL_maker1(TexList_cp_mes1_shadow);
		kdl_buff_ptr = doTexList(kdl_buff_ptr,TexList_cp_mes1_shadow,
								 ptr->disp_x,ptr->disp_y);
		gDPLoadTextureBlock(kdl_buff_ptr++,
							GetTexBuffPointer((unsigned short *)jf_waku_3),
							G_IM_FMT_IA,G_IM_SIZ_16b,
							256,5,0,
							G_TX_CLAMP,G_TX_CLAMP,
							G_TX_NOMASK,G_TX_NOMASK,
							G_TX_NOLOD,G_TX_NOLOD);
		gSPTextureRectangle(kdl_buff_ptr++,
							32<<2,176<<2,
							(32+256)<<2,(176+5)<<2,
							G_TX_RENDERTILE,
							0<<5,(5-1)<<5,1<<10,-1<<10);
		KDL_maker2();
		TexBuffLoad(TexList_cp_mes1_red);
		KDL_maker1(TexList_cp_mes1_red);
		kdl_buff_ptr = doTexList(kdl_buff_ptr,TexList_cp_mes1_red,
								 ptr->disp_x,ptr->disp_y);
		KDL_maker2();
		TexBuffLoad(TexList_cp_mes1_green);
		KDL_maker1(TexList_cp_mes1_green);
		kdl_buff_ptr = doTexList(kdl_buff_ptr,TexList_cp_mes1_green,
								 ptr->disp_x,ptr->disp_y);
		KDL_maker2();
		TexBuffLoad(TexList_cp_mes1_yellow);
		KDL_maker1(TexList_cp_mes1_yellow);
		kdl_buff_ptr = doTexList(kdl_buff_ptr,TexList_cp_mes1_yellow,
								 ptr->disp_x,ptr->disp_y);
		KDL_maker2();
		break;
	case KO_CP_MES2:
		ptr->sd_number = SetSeqData((TexBlockSeq *)
									GetVAddress(TBSeq_cp_messages[0]));
		break;
	case KO_CP_FREE:
		for (count = 0;count < 10;count++)
			TexBuffLoad(GetTBPointer(TexList_cp_numbers[count]));
		break;
	case KO_CP_CURSOR1:
	case KO_CP_CURSOR2:
		TexBuffLoad(TexList_cp_cursor);
		break;
	case KO_TITLE:
		//TexBuffLoad_p(TexList_titleback,0);
		TexBuffLoad_p(TexList_titlebacks[Check4GoldCup_150cc()],0);
		break;
	case KO_TITLE2:
		kwmelt_titlelogo();
		tex_buff_num += 131072/2;
		TexBuffLoad(TexList_titlelogo);
		break;
	case KO_TITLE3:
		TexBuffLoad(TexList_titlelogo2);
		break;
	case KO_GSEL_BACK:
	case KO_PSEL_BACK:
	case KO_MSEL_BACK:
		//TexBuffLoad_p(TexList_titleback,0);
		TexBuffLoad_p(TexList_titlebacks[Check4GoldCup_150cc()],0);
		TexBuffLoad_p(TexList_lpsel_ok,0);//dummy for next line
		GrayScale_tex_buff3(0,25);
		col_ptr = &titleback_color[kind - KO_GSEL_BACK];
		GrayScale_tex_buff_RGB(0,76800,col_ptr->r,col_ptr->g,col_ptr->b);
		break;
	case KO_GSEL_OK:
		ptr->work1 = 32;
	case KO_GSEL_LOGO:
	case KO_GSEL_OPTION:
	case KO_GSEL_RECORD:
	case KO_GSEL_50CC:
	case KO_GSEL_100CC:
	case KO_GSEL_150CC:
	case KO_GSEL_PRO:
	case KO_GSEL_ITEMOFF:
	case KO_GSEL_ITEMON:
	case KO_GSEL_TRY:
	//case KO_GSEL_GHOST:
	case KO_GSEL_DATA:
		TexBuffLoad_p(GetTBPointer(TexLists_gsel[kind - KO_GSEL_LOGO]),0);
		break;
	case KO_GSEL_1P:
	case KO_GSEL_2P:
	case KO_GSEL_3P:
	case KO_GSEL_4P:
		TexBuffLoad_p(GetTBPointer(
			TexList_gsel_boxes[(kind - KO_GSEL_1P)*2]),0);
		TexBuffLoad(GetTBPointer(TexList_gsel_boxes[(kind - KO_GSEL_1P)*2+1]));
		break;
	case KO_PSEL_LOGO:
		TexBuffLoad_p(TexList_lpsel_logo,0);
		break;
	case KO_PSEL_OK:
		TexBuffLoad_p(TexList_lpsel_ok,0);
		ptr->work1 = 32;
		break;
	case KO_PSEL_1P:
	case KO_PSEL_2P:
	case KO_PSEL_3P:
	case KO_PSEL_4P:
		TexBuffLoad(GetTBPointer(TexList_psel_cursors[kind - KO_PSEL_1P]));
		break;
	case KO_PSEL_MA:
	case KO_PSEL_LU:
	case KO_PSEL_PE:
	case KO_PSEL_KI:
	case KO_PSEL_YO:
	case KO_PSEL_KA:
	case KO_PSEL_WA:
	case KO_PSEL_KU:
		ptr->sd_number = SetSeqData((TexBlockSeq *)GetVAddress
									(TBSeq_psel[kind - KO_PSEL_MA]));
		TexBuffLoad_p(GetTBPointer(TexList_name_plates[kind - KO_PSEL_MA]),0);
		break;
	case KO_GAME_MA:
	case KO_GAME_LU:
		ptr->sd_number = SetSeqData((TexBlockSeq *)GetVAddress
									(TBSeq_psel[kind - KO_GAME_MA]));
		break;
	case KO_MSEL_OK:
		ptr->work1 = 32;
	case KO_MSEL_LOGO:
	case KO_MSEL_KCUP:
	case KO_MSEL_FCUP:
	case KO_MSEL_SCUP:
	case KO_MSEL_SPCUP:
	case KO_MSEL_KNAME:
	case KO_MSEL_FNAME:
	case KO_MSEL_SNAME:
	case KO_MSEL_SPNAME:
	case KO_MSEL_BATTLE:
		TexBuffLoad_p(GetTBPointer(TexLists_msel[kind - KO_MSEL_LOGO]),0);
		break;
#if 0
	case KO_MSEL_MAP:/* ¸½ºß»ÈÍÑ¤µ¤ì¤Æ¤ª¤ê¤Þ¤»¤ó */
		/*¤È¤ê¤¢¤¨¤ºÅ¾Á÷ÍÑ¤Ë£²ËçÊ¬¤Î¥Ð¥Ã¥Õ¥¡¤ò³ÎÊÝ*/
		ptr->sd_number = SetSeqData(TBSeq_msel_map_dummy);
		break;
#endif
	//case KO_MSEL_MAPMAN:
	//	break;
	case KO_MSEL_MAP1:
	case KO_MSEL_MAP2:
	case KO_MSEL_MAP3:
	case KO_MSEL_MAP4:
		ptr->sd_number = SetSeqData((TexBlockSeq *)GetVAddress(
			TBSeq_msel_map[map_number_chart
			[KINOKOCUP][ptr->kind-KO_MSEL_MAP1]]));
		break;
	case KO_MSEL_NOISE:
		ptr->work2 = make_random_limmit(4) + 2;
		break;
	case KO_MSEL_BRECORD:
	case KO_MSEL_BLAP:
		ptr->disp_x = msel_bestbox_default_position[kind - KO_MSEL_BRECORD].x;
		ptr->disp_y = msel_bestbox_default_position[kind - KO_MSEL_BRECORD].y;
		break;
	case KO_MSEL_CUP:
		ptr->work1 = cup_select;
		ptr->work2 = GetCupStatus(cup_select,race_level);
		ptr->sd_number = SetSeqData((TexBlockSeq *)GetVAddress(
			TBSeq_msel_cups[4*(race_level/2)+(3-ptr->work2)]));
		{
			POS_XY *pos_ptr;

			pos_ptr = &msel_cup_positions[0];
			ptr->disp_x = pos_ptr->x;
			ptr->disp_y = pos_ptr->y;
		}
		break;
	case KO_MSEL_LEVEL:
		TexBuffLoad_p(GetTBPointer(TexList_gsel_pop_gp[race_level]),0);
		ptr->disp_x = 55;
		ptr->disp_y = 195;
		break;
	case KO_MSEL_GHOST:
		TexBuffLoad_p(GetTBPointer(TexList_lgsel_ghost),0);
		if (!CheckPakStatus()){
			LoadGameNoteKart_data();
		}
		else{/* ¥Ñ¥Ã¥¯¥Ç¡¼¥¿¤¬¤¦¤Þ¤¯¥í¡¼¥É¤Ç¤­¤Ê¤«¤Ã¤¿¤È¤­... */
			pak_ghost[0].e.ghost_flg = 0;
			pak_ghost[1].e.ghost_flg = 0;
		}
		break;
	case KO_TSEL_KCUP:
	case KO_TSEL_FCUP:
	case KO_TSEL_SCUP:
	case KO_TSEL_SPCUP:
		TexBuffLoad_p(GetTBPointer(TexLists_tsels[kind - KO_TSEL_KCUP]),0);
		break;
	case KO_TSEL_TITLE:/* ¤³¤³¤Ç¥Ñ¥Ã¥¯¥Ç¡¼¥¿¤òÆÉ¤Þ¤·¤Æ¤â¤é¤¦ */
		TexBuffLoad_p(GetTBPointer(TexList_lgsel_data),0);
		if (!CheckPakStatus()){
			LoadGameNoteKart_data();
		}
		else{/* ¥Ñ¥Ã¥¯¥Ç¡¼¥¿¤¬¤¦¤Þ¤¯¥í¡¼¥É¤Ç¤­¤Ê¤«¤Ã¤¿¤È¤­... */
			pak_ghost[0].e.ghost_flg = 0;
			pak_ghost[1].e.ghost_flg = 0;
		}
			
		break;
	case KO_TSEL_CURSOR:
		TexBuffLoad(GetTBPointer(TexList_tsel_cursor));
		break;
	case KO_TSEL_KCUP1:
	case KO_TSEL_KCUP2:
	case KO_TSEL_KCUP3:
	case KO_TSEL_KCUP4:
	case KO_TSEL_FCUP1:
	case KO_TSEL_FCUP2:
	case KO_TSEL_FCUP3:
	case KO_TSEL_FCUP4:
	case KO_TSEL_SCUP1:
	case KO_TSEL_SCUP2:
	case KO_TSEL_SCUP3:
	case KO_TSEL_SCUP4:
	case KO_TSEL_SPCUP1:
	case KO_TSEL_SPCUP2:
	case KO_TSEL_SPCUP3:
	case KO_TSEL_SPCUP4:
		TexBuffLoad_p(GetTBPointer(TexList_msel_maps[map_number_chart
			[(ptr->kind-KO_TSEL_KCUP1)/4][(ptr->kind-KO_TSEL_KCUP1)%4]]),-1);
		TexBuffLoad_p(GetTBPointer(TexList_msel_mapnames[map_number_chart
			[(ptr->kind-KO_TSEL_KCUP1)/4][(ptr->kind-KO_TSEL_KCUP1)%4]]),0);
		TexBuffLoad_p(GetTBPointer(TexList_lgsel_ghost),0);
		break;
	case KO_GAME_VS_1P:
	case KO_GAME_VS_2P:
	case KO_GAME_VS_3P:
	case KO_GAME_VS_4P:
		{
			int loser_flg,b;
			TexBlockSeq *ts_ptr;

			b = kind - KO_GAME_VS_1P;
			a = driver2pselset[player_driver[b]];
			
			loser_flg = 0;
			switch(game_mode){
			case VSBATTLE:
				if (ogawa_rank[kind - KO_GAME_VS_1P])
					loser_flg = 1;
				break;
			case BATTLE:
				if (win_kart != kind - KO_GAME_VS_1P)
					loser_flg = 1;
				break;
			}
#if VS_LOSE_ALL_SWITCH
			loser_flg = 1;
#endif
			if (loser_flg)
				ts_ptr = TBSeq_psel_p6[a];
			else
				ts_ptr = TBSeq_psel[a];
			
			ptr->sd_number = SetSeqData2((TexBlockSeq *)GetVAddress(ts_ptr),b);
		}
		TexBuffLoad_p(GetTBPointer(TexList_name_plates[a]),0);
		TexBuffLoad(GetTBPointer(TexList_psel_cursors[kind - KO_GAME_VS_1P]));
		break;
	case KO_GAME_TA_SORT:/* ¥³¡¼¥¹¥Ç¡¼¥¿¤Î¥Ð¥Ã¥¯¥¢¥Ã¥×¤Ë´Ø¤¹¤ë½èÍý */
		//kwlap[0].laptimebuf[0] = 1230;
		//kwlap[0].laptimebuf[1] = 1230;
		ptr->work1 = SaveCourseRecord(kwlap[0].totaltime,player_driver[0]);
		ptr->work2 = SaveCourseLapRecord();
		if (ghost_status != GHOST_STOP)
		{
			extern int make_press_ghost(void);
			if (make_press_ghost() > 15360)
				ghost_status = GHOST_STOP;
		}


		/* °ì°Ì¤ò½Ð¤·¤¿¤È¤­¤Ï¥Ð¥Ã¥¯¥¢¥Ã¥×¥Ç¡¼¥¿¤â¹¹¿· */
		if ((!ptr->work1)||(ptr->work2))
			SetEEPRomCourseData_bak(cup_select*4 + circuit_select);
		break;
	case KO_DSEL_SNAP:
		ptr->sd_number = SetSeqData((TexBlockSeq *)GetVAddress(
			TBSeq_msel_map[map_number_chart[tsel_cursor/4][tsel_cursor%4]]));
		ptr->work1 = tsel_cursor;
		TexBuffLoad_p(GetTBPointer(TexList_lgsel_ghost),0);
		kwmelt_kawanoroadmap();
		if (!CheckPakStatus()){
			LoadGameNoteKart_data();
		}
		else{/* ¥Ñ¥Ã¥¯¥Ç¡¼¥¿¤¬¤¦¤Þ¤¯¥í¡¼¥É¤Ç¤­¤Ê¤«¤Ã¤¿¤È¤­... */
			pak_ghost[0].e.ghost_flg = 0;
			pak_ghost[1].e.ghost_flg = 0;
		}
		break;
	case KO_OPT_MES:
		ptr->pattern = sound_output;
		break;
	case KO_OPT_LOGO:
		TexBuffLoad_p(GetTBPointer(TexList_option_logo),0);
		break;
	case KO_GAME_TA_RANK:/* ¥¿¥¤¥à¥¢¥¿¥Ã¥¯£µ°Ì°ÊÆâ¤ËÆþ¤Ã¤¿¤È¤­¥Õ¥¡¥ó¥Õ¥¡¡¼¥ì */
		rankin_fanfare = 0;
		break;
	case KO_END1_FACE:
		{
			int loser_flg,b;
			TexBlockSeq *ts_ptr;

			//b = 0;/* ¤È¤ê¤¢¤¨¤º£±P¤È¤¤¤¦¤³¤È¤Ç */
			a = driver2pselset[resultstat.driver];

			if (resultstat.rank >= 3)
				loser_flg = 1;
			else
				loser_flg = 0;

			if (loser_flg)
				ts_ptr = TBSeq_psel_p6[a];
			else
				ts_ptr = TBSeq_psel[a];
			
			ptr->sd_number = SetSeqData2((TexBlockSeq *)GetVAddress(ts_ptr),0);
		}
		TexBuffLoad_p(GetTBPointer(TexList_name_plates[a]),0);
		//TexBuffLoad(GetTBPointer(TexList_psel_cursors[kind-KO_GAME_VS_1P]));
		break;
	case KO_SR_A1:
	case KO_SR_A2:
	case KO_SR_B1:
	case KO_SR_B2:
	case KO_SR_C1:
	case KO_SR_C2:
	case KO_SR_D1:
	case KO_SR_D2:
	case KO_SR_E1:
	case KO_SR_E2:
	case KO_SR_E3:
	case KO_SR_E4:
	case KO_SR_E5:
	case KO_SR_E6:
	case KO_SR_E7:
	case KO_SR_F1:
	case KO_SR_F2:
	case KO_SR_F3:
	case KO_SR_F4:
	case KO_SR_G1:
	case KO_SR_G2:
	case KO_SR_H1:
	case KO_SR_H2:
	case KO_SR_H3:
	case KO_SR_H4:
	case KO_SR_H5:
	case KO_SR_H6:
	case KO_SR_H7:
	case KO_SR_H8:
	case KO_SR_I1:
	case KO_SR_I2:
	case KO_SR_I3:
	case KO_SR_I4:
	case KO_SR_J1:
	case KO_SR_J2:
	case KO_SR_K1:
	case KO_SR_K2:
	case KO_SR_K3:
	case KO_SR_L1:
	case KO_SR_L2:
	case KO_SR_L3:
	case KO_SR_L4:
	case KO_SR_L5:
	case KO_SR_L6:
	case KO_SR_L7:
	case KO_SR_M1:
	case KO_SR_M2:
	case KO_SR_M3:
	case KO_SR_M4:
	case KO_SR_N1:
	case KO_SR_N2:
	case KO_SR_N3:
	case KO_SR_O1:
	case KO_SR_O2:
	case KO_SR_O3:
	case KO_SR_O4:
	case KO_SR_O5:
	case KO_SR_O6:
	case KO_SR_O7:
	case KO_SR_O8:
	case KO_SR_O9:
	case KO_SR_P1:
	case KO_SR_Q1:
		break;
		/*°Ê²¼¡¢ÆÃ¤Ë²¿¤òÀßÄê¤¹¤ë¤È¤¤¤¦»ö¤Ï¤Ê¤·*/
	//case KO_GAME_CUP:
	//case KO_NOCONTROLLER:
	//case KO_GAME_CIRCUIT:
	//case KO_GAME_CUT_UD:
	//case KO_GAME_TIME:
	//case KO_GAME_POINT:
	//case KO_GAME_GPLOSE:
	//case KO_GAME_INFO3P:
	//case KO_GAME_VS_RES:
	//case KO_GAME_TA1:
	//case KO_GAME_TA2:
	//case KO_GAME_TA_MES1:
	//case KO_GAME_PAUSE:
	//case KO_GAME_TA_REP:
	//case KO_MSEL_BTMES:
	//case KO_DSEL_SEL1:
	//case KO_DSEL_SEL2:
	//case KO_DSEL_SEL3:
	//case KO_GSEL_CAUTION:
	//case KO_TA_LOSTGHOST:
	//case KO_END1_FADE:
	//case KO_END1_MES1:
	//case KO_END1_MES2:
	//case KO_END1_MES3:
	//case KO_END1_MES4:
	//case KO_TITLE_TIME:
	default:
		break;
	}
		
}

void DispOBJBlock(OBJBlock *ptr)
{
	int a,b;
	P_COLOR *col_ptr;
	POS_XY *pos_ptr;
	TexBlock *tb_ptr;

	if (!ptr->disp_on)
		return;
	gDPPipeSync(graphPtr++);
	switch(ptr->kind){
	case KO_NINTEN_LOGO:
		doNintenLogo(dynamicp,ptr->work1);
		break;
	case KO_CHECKER_FLAG:
		doCheckerFlag(dynamicp,ptr->work1);
		break;
#if FONT_TEST_ON_TITLE
	case KO_TEST_CPFONT:
		graphPtr = FillRect1Color(graphPtr,
								  ptr->disp_x,ptr->disp_y,
								  56+ptr->disp_x,152+ptr->disp_y,
								  1,1,1,255);
		graphPtr = doTexList(graphPtr,TexList_cp_font_all,
							 ptr->disp_x,ptr->disp_y);
		break;
#endif
	//case KO_CP_CSCOLOR:
	//	break;
	case KO_CP_BG1:
		graphPtr = KDL_call(graphPtr,TexList_cp_bg1);
		break;
	case KO_CP_BG2:
		graphPtr = KDL_call(graphPtr,TexList_cp_bg2);
		break;
	case KO_CP_GNOTE:
		DispOB_cp_gnote(ptr);
		DispOB_cp_notecursor(ptr);
		DispOB_cp_gnote_name(ptr);
		break;
	case KO_CP_MES1:
		gDPSetPrimColor(graphPtr++,0,0, 0,0,0,255);
		graphPtr = KDL_call(graphPtr,TexList_cp_mes1_shadow);
		gDPSetPrimColor(graphPtr++,0,0, 50,0,0,255);
		graphPtr = KDL_call(graphPtr,TexList_cp_mes1_red);
		gDPSetPrimColor(graphPtr++,0,0, 0,50,0,255);
		graphPtr = KDL_call(graphPtr,TexList_cp_mes1_green);
		gDPSetPrimColor(graphPtr++,0,0, 50,50,0,255);
		graphPtr = KDL_call(graphPtr,TexList_cp_mes1_yellow);
		break;
	case KO_CP_MES2:
		doSeqData2(ptr->sd_number,ptr->disp_x,ptr->disp_y,-1);
		break;
	case KO_CP_FREE:
		DispOB_cp_free();
		break;
	case KO_CP_CURSOR1:
	case KO_CP_CURSOR2:
		DispOB_cp_cursor(ptr,ptr->kind - KO_CP_CURSOR1);
		break;
	case KO_TITLE:
		/*graphPtr = doTexList(graphPtr,TexList_titleback,*/
		graphPtr = doTexList(graphPtr,
							 TexList_titlebacks[Check4GoldCup_150cc()],
							 ptr->disp_x,ptr->disp_y);
		break;
	case KO_TITLE2:
		kwdisplay_titlelogo(ptr->disp_x+160,ptr->disp_y+71);
		graphPtr = doTexList(graphPtr,TexList_titlelogo,
							 ptr->disp_x,ptr->disp_y);
		break;
	case KO_TITLE3:
		if ((frame_counter/8)%3){
			graphPtr = doTexList(graphPtr,TexList_titlelogo2,
								 ptr->disp_x,ptr->disp_y);
		}
		//PRINTF("x:%d,y:%d\n",ptr->disp_x,ptr->disp_y);
		break;
	case KO_TITLE_TIME:
		{
			char let[5];
			int time,x,y;
			int w;
			float mul1;

			mul1 = 0.9;
			w = (GetWordLength(circuit_name_j[0])+5)*mul1;
			x = 160;
			y = 140;
			graphPtr = FillRect1Color_f(graphPtr,
										x-w/2,y-17,
										x+w/2,y+24,
										0,0,0,150);
			SetPalette(1);
			SetWord3_ac(160-5,140,circuit_name_j[0],0,mul1,mul1);

			mul1 = 1.0;
			x = 80;
			y = 160;
			time = GetRecordTime3(0,7) & 0x000fffff;
			if (time < 7850)
				SetPalette((frame_counter % 2));
			else{
				if (time <= 9000)
					SetPalette(frame_counter % 3);
				else
					SetPalette(3);
			}					
			kawano_itoa_m(time,let);
			SetWord4_a(x+39,y,let,0,mul1,mul1);
			SetWord2_a(x+59,y,"'",0,mul1,mul1);
			kawano_itoa_s(time,let);
			SetWord4_a(x+68,y,let,0,mul1,mul1);
			SetWord2_a(x+87,y,"\"",0,mul1,mul1);
			kawano_itoa_c(time,let);
			SetWord4_a(x+100,y,let,0,mul1,mul1);
		}
			
		break;
	case KO_NOCONTROLLER:
		{
			int box_x,box_y,box_w,box_h;
			int l_1,l_2;
			float mul1;

			mul1 = 0.75;
			l_1 = GetWordLength(no_controller_message[0]);
			l_2 = GetWordLength(no_controller_message[1]);
			if (l_1 < l_2)
				l_1 = l_2;
			box_x = 160;
			box_y = 180;
			box_w = l_1*mul1;
			box_h = 16*(mul1*2+0.5);
			graphPtr = FillRect1Color_f(graphPtr,
										box_x-box_w/2,box_y-box_h/2+2,
										box_x+box_w/2,box_y+box_h/2+2,
										0,0,0,150);
			SetPalette(4);
			for (l_1 = 0;l_1 < 2;l_1++)
				SetWord3_ac(box_x-1*mul1,box_y+18*l_1*mul1,
							no_controller_message[l_1],0,mul1,mul1);
		}
		break;
	case KO_GSEL_BACK:
	case KO_PSEL_BACK:
	case KO_MSEL_BACK:
		graphPtr = doTexList2(graphPtr,
							  TexList_titlebacks[Check4GoldCup_150cc()],
							  ptr->disp_x,ptr->disp_y,3,0);
		break;
	case KO_GSEL_LOGO:
		graphPtr = doTexList(graphPtr,TexList_lgsel_logo,
							 ptr->disp_x,ptr->disp_y);
		break;
	case KO_GSEL_1P:
	case KO_GSEL_2P:
	case KO_GSEL_3P:
	case KO_GSEL_4P:
		a = ptr->kind - KO_GSEL_1P;
		gsel_sub1(a,ptr);
		DispOB_Sub_gsel1(ptr,a);
		break;
	case KO_GSEL_OK:
		sel_ok_sub(ptr);
		graphPtr = doTexList2(graphPtr,TexList_lgsel_ok,
							 ptr->disp_x,ptr->disp_y,2,ptr->work1);
		break;
	case KO_GSEL_OPTION:
	case KO_GSEL_RECORD:
		a = ptr->kind - KO_GSEL_OPTION + 1;
		if (ptr->work1 < 32){
			b = (57+1)*ptr->work1/64;
			if (gsel_mode == a){
				graphPtr = FlashRectangle2f(graphPtr,
										   ptr->disp_x+b,ptr->disp_y,
										   57+ptr->disp_x-b,18+ptr->disp_y);
			}
			else{
				graphPtr = FillRect1Color(graphPtr,
										  ptr->disp_x+b,ptr->disp_y,
										  57+ptr->disp_x-b,18+ptr->disp_y,
										  1,1,1,255);
			}
		}
		b = ptr->kind - KO_GSEL_LOGO;
		graphPtr = doTexList2(graphPtr,TexLists_gsel[b],
							  ptr->disp_x,ptr->disp_y,2,ptr->work1);
		break;
	case KO_GSEL_50CC:
	case KO_GSEL_100CC:
	case KO_GSEL_150CC:
	case KO_GSEL_PRO:
	case KO_GSEL_ITEMOFF:
	case KO_GSEL_ITEMON:
	case KO_GSEL_TRY:
	//case KO_GSEL_GHOST:
	case KO_GSEL_DATA:
		a = popup_status[players-1][play_mode[players-1]];
		b = game_mode_chart[players-1][play_mode[players-1]];
		switch(ptr->kind){
		case KO_GSEL_50CC:
		case KO_GSEL_100CC:
		case KO_GSEL_150CC:
		case KO_GSEL_PRO:
			switch(b){
			case GRANDPRIX:
			case VSBATTLE:
				break;
			default:
				a = -1;
				break;
			}
			b = KO_GSEL_50CC;
			tb_ptr = GetTBPointer(TexList_gsel_pop_gp
								  [ptr->kind - KO_GSEL_50CC]);
			break;
		case KO_GSEL_ITEMOFF:
		case KO_GSEL_ITEMON:
			if (b != VSBATTLE){
				a = -1;
				break;
			}
			b = KO_GSEL_ITEMON;
			tb_ptr = GetTBPointer(TexList_gsel_pop_vs
								  [ptr->kind - KO_GSEL_ITEMON]);
			break;
		case KO_GSEL_TRY:
		//case KO_GSEL_GHOST:
		case KO_GSEL_DATA:
			if (b != TIMEATTACK){
				a = -1;
				break;
			}
			b = KO_GSEL_TRY;
			tb_ptr = GetTBPointer(TexList_gsel_pop_time_attack
								  [ptr->kind - KO_GSEL_TRY]);
			break;
		default:
			break;
		}
		if (a == -1)
			break;
		if ((gsel_mode >= GSEL_POPUP)&&(a == ptr->kind - b)){
			if (gsel_mode > GSEL_POPUP)
				graphPtr = FillRect1Color(graphPtr,
										  ptr->disp_x,ptr->disp_y,
										  63+ptr->disp_x,17+ptr->disp_y,
										  255,249,220,255);
			else
				graphPtr = FlashRectangle2(graphPtr,
										   ptr->disp_x,ptr->disp_y,
										   63+ptr->disp_x,17+ptr->disp_y);
		}
		else{
			graphPtr = FillRect1Color(graphPtr,
									  ptr->disp_x,ptr->disp_y,
									  63+ptr->disp_x,17+ptr->disp_y,
									  1,1,1,255);
		}
		graphPtr = doTexList(graphPtr,tb_ptr,
							 ptr->disp_x,ptr->disp_y);
		break;
	case KO_GSEL_CAUTION:
		DispOB_Sub_gsel_caution(ptr);
		break;
	case KO_PSEL_LOGO:
		graphPtr = doTexList(graphPtr,TexList_lpsel_logo,
							 ptr->disp_x,ptr->disp_y);
		break;
	case KO_PSEL_1P:
	case KO_PSEL_2P:
	case KO_PSEL_3P:
	case KO_PSEL_4P:
		b = ptr->kind - KO_PSEL_1P;
		if (player_cursor[b]){
			if (!player_cursor_set_flg[b])
				a = 255;
			else{
				a = frame_counter%16;
				if (a > 7)
					a = (16-a) * 8;
				else
					a = a * 8;
				a += 191;
			}
			DispOB_Sub_psel_cursor(ptr,b,a);
		}
		break;
	case KO_PSEL_OK:
		sel_ok_sub(ptr);
		graphPtr = doTexList2(graphPtr,TexList_lpsel_ok,
							  ptr->disp_x,ptr->disp_y,2,ptr->work1);
		break;
	case KO_PSEL_MA:
	case KO_PSEL_LU:
	case KO_PSEL_PE:
	case KO_PSEL_KI:
	case KO_PSEL_YO:
	case KO_PSEL_KA:
	case KO_PSEL_WA:
	case KO_PSEL_KU:
		DispOB_Sub_psel1(ptr,
						 GetTBPointer(TexList_name_plates
									  [ptr->kind - KO_PSEL_MA]));
	case KO_GAME_MA:
	case KO_GAME_LU:
		doSeqData2(ptr->sd_number,ptr->disp_x,ptr->disp_y,ptr->work1);
		//DispOB_Sub_psel2(ptr);/* Áª¤ó¤Ç¤Ê¤¤¤È¤³¤í¤ò°Å¤¯¤¹¤ë */
		break;
#if 0
	case KO_MSEL_KNAME:
		msel_sub2(ptr);
		graphPtr = doTexList2(graphPtr,
							  GetTBPointer(TexLists_msel
										   [ptr->kind - KO_MSEL_LOGO]),
							  ptr->disp_x,ptr->disp_y,4,frame_counter%32);
		break;
#else
		case KO_MSEL_KNAME:
#endif
	case KO_MSEL_FNAME:
	case KO_MSEL_SNAME:
	case KO_MSEL_SPNAME:
	case KO_MSEL_BATTLE:
		msel_sub2(ptr);
		graphPtr = doTexList(graphPtr,
							 GetTBPointer(TexLists_msel
										  [ptr->kind - KO_MSEL_LOGO]),
							 ptr->disp_x,ptr->disp_y);
		//msel_sub3(ptr);
		msel_sub4(ptr);
		break;
	case KO_MSEL_LOGO:
		graphPtr = doTexList(graphPtr,
							 GetTBPointer(TexLists_msel
										  [ptr->kind - KO_MSEL_LOGO]),
							 ptr->disp_x,ptr->disp_y);
		break;
#if 0
	case KO_MSEL_MAP:/* ¸½ºßÉÔ»ÈÍÑ */
		doSeqData2a(ptr->sd_number,23,112,-1);
		break;
#endif
	//case KO_MSEL_MAPMAN:
	//	break;
	case KO_MSEL_MAP1:
	case KO_MSEL_MAP2:
	case KO_MSEL_MAP3:
	case KO_MSEL_MAP4:
		//if ((msel_mode == MSEL_OK) && (game_mode == MARIOGP)){
		//	pos_ptr = &msel_map4box_position[ptr->kind - KO_MSEL_MAP1];
		//	doSeqData2(ptr->sd_number,pos_ptr->x,pos_ptr->y,-2);
		//}
		//else
		//	doSeqData2(ptr->sd_number,23,112,-1);
		DispOB_Sub_msel_map(ptr);
		break;
	case KO_MSEL_KCUP:
	case KO_MSEL_FCUP:
	case KO_MSEL_SCUP:
	case KO_MSEL_SPCUP:
		a = ptr->kind - KO_MSEL_KCUP;
		msel_sub1(a,ptr);
		DispOB_Sub_msel1(ptr,a);
		break;
	case KO_MSEL_OK:
		sel_ok_sub(ptr);
		graphPtr = doTexList2(graphPtr,TexList_lmsel_ok,
							  ptr->disp_x,ptr->disp_y,2,ptr->work1);
		break;
	case KO_MSEL_BRECORD:
	case KO_MSEL_BLAP:
		{
			float mul1;

			if (ptr->kind == KO_MSEL_BRECORD)
				mul1 = 0.6;
			else
				mul1 = 0.8;
			
			msel_bbox_sub(ptr);
			SetPalette(3);
			SetWord2_a(ptr->disp_x+8,ptr->disp_y+16,
					   bestrec_j[ptr->kind - KO_MSEL_BRECORD],0,mul1,0.8);
			msel_bbox_sub2(ptr);
		}
		break;
	case KO_MSEL_BTMES:
		msel_battle_sub(ptr);
		break;
	case KO_MSEL_CUP:
		DispOB_Sub_msel_cup(ptr);
		break;
	case KO_MSEL_LEVEL:
		graphPtr = FillRect1Color(graphPtr,
								  ptr->disp_x,ptr->disp_y,
								  63+ptr->disp_x,17+ptr->disp_y,
								  1,1,1,255);
		graphPtr = doTexList(graphPtr,
							 GetTBPointer(TexList_gsel_pop_gp[race_level]),
							 ptr->disp_x,ptr->disp_y);
		break;
	case KO_MSEL_GHOST:
		DispOB_Sub_msel_ghost(ptr);
		break;
	case KO_TSEL_KCUP:
	case KO_TSEL_FCUP:
	case KO_TSEL_SCUP:
	case KO_TSEL_SPCUP:
		a = ptr->kind - KO_TSEL_KCUP;
		tsel_sub1(a,ptr);
		DispOB_Sub_msel1(ptr,a);
		break;
	case KO_TSEL_TITLE:
		if ((gsel_mode >= GSEL_POPUP)&&(a == ptr->kind - b)){
			if (gsel_mode > GSEL_POPUP)
				graphPtr = FillRect1Color(graphPtr,
										  ptr->disp_x,ptr->disp_y,
										  63+ptr->disp_x,17+ptr->disp_y,
										  255,249,220,255);
			else
				graphPtr = FlashRectangle2(graphPtr,
										   ptr->disp_x,ptr->disp_y,
										   63+ptr->disp_x,17+ptr->disp_y);
		}
		else{
			graphPtr = FillRect1Color(graphPtr,
									  ptr->disp_x,ptr->disp_y,
									  63+ptr->disp_x,17+ptr->disp_y,
									  1,1,1,255);
		}
		graphPtr = doTexList(graphPtr,TexList_lgsel_data,
							 ptr->disp_x,ptr->disp_y);
		SetPalette(3);
		SetWord3_a(293,28,tsel_title_j,0,.55,.55);
		break;
	case KO_TSEL_CURSOR:
		DispOB_Sub_tsel_cursor(ptr);
		break;	
	case KO_TSEL_KCUP1:
	case KO_TSEL_KCUP2:
	case KO_TSEL_KCUP3:
	case KO_TSEL_KCUP4:
	case KO_TSEL_FCUP1:
	case KO_TSEL_FCUP2:
	case KO_TSEL_FCUP3:
	case KO_TSEL_FCUP4:
	case KO_TSEL_SCUP1:
	case KO_TSEL_SCUP2:
	case KO_TSEL_SCUP3:
	case KO_TSEL_SCUP4:
	case KO_TSEL_SPCUP1:
	case KO_TSEL_SPCUP2:
	case KO_TSEL_SPCUP3:
	case KO_TSEL_SPCUP4:
		DispOB_Sub_tsel1(ptr);
		break;
	case KO_GAME_CUP:
		SetPalette(4);
		SetWord3_a(ptr->disp_x,ptr->disp_y,cup_name[cup_level],ptr->work1,
				   ptr->workf1,1.0);
		break;
	case KO_GAME_CIRCUIT:
		SetPalette(5);
		SetWord2_a(ptr->disp_x,ptr->disp_y,
					circuit_name[map_number],ptr->work1,
					ptr->workf1,1.0);
		break;
	case KO_GAME_CUT_UD:
		Cut_ud_sub(ptr);
		break;
	case KO_MSEL_NOISE:
		graphPtr = AutoTextureRect_noise(graphPtr,25,114,124,74);
		break;
	case KO_GAME_TIME:
		DispOB_result_time(ptr);
		break;
	case KO_GAME_POINT:
	    //if (contOR->status & CONT_L)
			DispOB_result_point(ptr);
		break;
	case KO_GAME_GPLOSE:
		DispOB_gp_lose(ptr);
		break;
	case KO_GAME_INFO3P:
		DispOB_info_3p(ptr);
		break;
	case KO_GAME_VS_RES:
		DispOB_vs_result(ptr);
		break;
	case KO_GAME_VS_1P:
	case KO_GAME_VS_2P:
	case KO_GAME_VS_3P:
	case KO_GAME_VS_4P:
		if (!ptr->pattern)/* 1¥Õ¥ì¡¼¥àÌÜ¤ÏÉ½¼¨¤·¤Ê¤¤ */
			break;
		b = ptr->kind - KO_GAME_VS_1P;
		a = driver2pselset[player_driver[b]];
		graphPtr = doTexList(graphPtr,GetTBPointer(TexList_name_plates[a]),
							 ptr->disp_x,ptr->disp_y);
		doSeqData2_vs(ptr->sd_number,ptr->disp_x,ptr->disp_y,b,ptr->work1);
		DispOB_Sub_psel_cursor(ptr,b,255);
		break;
	case KO_GAME_TA1:
		DispOB_timeattack1(ptr);
		break;
	case KO_GAME_TA2:
		DispOB_timeattack2(ptr);
		break;
	case KO_GAME_TA_MES1:
		DispOB_timeattack_message1(ptr);
		break;
	case KO_GAME_PAUSE:
		DispOB_pause(ptr);
		break;
	case KO_GAME_TA_REP:
		DispOB_ta_replay(ptr);
		break;
	case KO_DSEL_SNAP:
		DispOB_Sub_dsel_snap(ptr);
		break;
	case KO_DSEL_MES1:
		DispOB_Sub_dsel_mes1(ptr);
		break;
	case KO_DSEL_SEL1:
		DispOB_Sub_dsel_sel1(ptr);
		break;
	case KO_DSEL_SEL2:
		DispOB_Sub_dsel_sel2(ptr);
		break;
	case KO_DSEL_SEL3:
		DispOB_Sub_dsel_sel3(ptr);
		break;
	case KO_OPT_MES:
		DispOB_Sub_option_messages(ptr);
		break;
	case KO_OPT_LOGO:
		graphPtr = doTexList(graphPtr,TexList_option_logo,
							 ptr->disp_x,ptr->disp_y);
		break;
	case KO_TA_LOSTGHOST:
		DispOB_ta_lostghost(ptr);
		break;
	case KO_END1_FADE:
		DispOB_ending1_halffade(ptr);
		break;
	case KO_END1_MES1:
		DispOB_ending1_message1(ptr);
		break;
	case KO_END1_MES2:
		DispOB_ending1_message2(ptr);
		break;
	case KO_END1_MES3:
		DispOB_ending1_message3(ptr);
		break;
	case KO_END1_MES4:
		DispOB_ending1_message4(ptr);
		break;
	case KO_END1_FACE:
		if (!ptr->pattern)/* 1¥Õ¥ì¡¼¥àÌÜ¤ÏÉ½¼¨¤·¤Ê¤¤ */
			break;
		b = 0;
		a = driver2pselset[resultstat.driver];
		graphPtr = doTexList(graphPtr,GetTBPointer(TexList_name_plates[a]),
							 ptr->disp_x,ptr->disp_y);
		doSeqData2_vs(ptr->sd_number,ptr->disp_x,ptr->disp_y,b,ptr->work1);
		//DispOB_Sub_psel_cursor(ptr,b,255);
		break;
	case KO_SR_A1:
	case KO_SR_A2:
	case KO_SR_B1:
	case KO_SR_B2:
	case KO_SR_C1:
	case KO_SR_C2:
	case KO_SR_D1:
	case KO_SR_D2:
	case KO_SR_E1:
	case KO_SR_E2:
	case KO_SR_E3:
	case KO_SR_E4:
	case KO_SR_E5:
	case KO_SR_E6:
	case KO_SR_E7:
	case KO_SR_F1:
	case KO_SR_F2:
	case KO_SR_F3:
	case KO_SR_F4:
	case KO_SR_G1:
	case KO_SR_G2:
	case KO_SR_H1:
	case KO_SR_H2:
	case KO_SR_H3:
	case KO_SR_H4:
	case KO_SR_H5:
	case KO_SR_H6:
	case KO_SR_H7:
	case KO_SR_H8:
	case KO_SR_I1:
	case KO_SR_I2:
	case KO_SR_I3:
	case KO_SR_I4:
	case KO_SR_J1:
	case KO_SR_J2:
	case KO_SR_K1:
	case KO_SR_K2:
	case KO_SR_K3:
	case KO_SR_L1:
	case KO_SR_L2:
	case KO_SR_L3:
	case KO_SR_L4:
	case KO_SR_L5:
	case KO_SR_L6:
	case KO_SR_L7:
	case KO_SR_M1:
	case KO_SR_M2:
	case KO_SR_M3:
	case KO_SR_M4:
	case KO_SR_N1:
	case KO_SR_N2:
	case KO_SR_N3:
	case KO_SR_O1:
	case KO_SR_O2:
	case KO_SR_O3:
	case KO_SR_O4:
	case KO_SR_O5:
	case KO_SR_O6:
	case KO_SR_O7:
	case KO_SR_O8:
	case KO_SR_O9:
	case KO_SR_P1:
	case KO_SR_Q1:
		DispOB_staffroll_messages(ptr);
		break;
	//case KO_GAME_TA_SORT:
	//case KO_GAME_TA_RANK:
	default:
		break;
	}
}

void Set_cp_font(uchar code,int x,int y)
{
	if (code < 0x10)
		return;

	code -= 0x10;
	if (code > 132)
		return;
#if 1
	if (code > 49)/* ±Ñ¸ìÈÇ¤Ï¥«¥Ê¤òÉ½¼¨¤·¤¿¤é¥À¥á */
		code = 43;
#endif
	graphPtr = doTexList(graphPtr,GetTBPointer(TexList_cp_fonts[code]),x,y);
	
}

int Set_cp_gnote_name(char *str,int str_length,int x,int y)
{
	int name_length,disp_x;

	name_length = 0;
	disp_x = x;

	while(str_length){
		if (*str)
			name_length++;
		Set_cp_font((uchar)*str++,disp_x,y);
		disp_x += 8;
		str_length--;
	}
	
	return(name_length);
}

void DispOB_cp_gnote(OBJBlock *ptr)
{
	int i;

	gDPSetScissor(graphPtr++,G_SC_NON_INTERLACE,0,0,319,CP_GNOTE_Y+10*9-1);
	for (i = 0;i < 9;i ++){
		if (!cp_gnote_scroll_req && (i == 0||i == 8))
			continue;
		graphPtr = doTexList(graphPtr,TexList_cp_gnote,
							 32,i*10 + ptr->disp_y);
	}
		
}

void DispOB_cp_notecursor(OBJBlock *ptr)
{
	OBJBlock *ptr2;

	ptr2 = Get_OBJBlock_ptr(KO_CP_CSCOLOR);

	switch(cp_mode){
	case CP_MENU_SELECT:
	case CP_MENU_END:
		break;
	default:
		gDPSetPrimColor(graphPtr++,0,0, 255,ptr2->work2,0,255);
		graphPtr = doTexList(graphPtr,TexList_cp_notecursor,
							 36,cp_gnote_cursor*10 + 124);
		break;
	}
	
}

void DispOB_cp_gnote_name(OBJBlock *ptr)
{
	int i,num,wx,wy;
	char *gnote_num_ptr;
	char test_buff[16];
	OSPfsState *pfs_state_ptr;

	gDPSetPrimColor(graphPtr++,0,0, 0,0,50,255);

	for (i = 0,gnote_num_ptr = cp_gnote_number;i < 9;i++,gnote_num_ptr++){
		if (!(*gnote_num_ptr))
			continue;

		num = *gnote_num_ptr;
		if (num < 10)
			Set_cp_font(num + 0x10,32+18,ptr->disp_y + 10*i + 1);
		else{
			num %= 10;
			Set_cp_font(num + 0x10,32+18+3,ptr->disp_y + 10*i + 1);
			Set_cp_font(0x11      ,32+18-3,ptr->disp_y + 10*i + 1);
		}

		wy = ptr->disp_y + 10*i + 1;
#if FONT_TEST_ON_CPACK
		if (cont1P->status & CONT_R){
			for(num = 0;num < 16;num++)
				test_buff[num] = 0x10 + num + ((*gnote_num_ptr)-1)*0x10;
			Set_cp_gnote_name(test_buff,16,32+47,wy);
		}
		else
#endif
		{
			if (!pfsStateRet[(*gnote_num_ptr)-1]){
				pfs_state_ptr = &pfsState[(*gnote_num_ptr)-1];
				num = Set_cp_gnote_name(pfs_state_ptr->game_name,16,32+47,wy);
				if (pfs_state_ptr->ext_name[0]){
					Set_cp_font(0x3c,32+47+8*num,wy);
					Set_cp_font(pfs_state_ptr->ext_name[0],32+47+8*(num+1),wy);
				}
				num = (int)((pfs_state_ptr->file_size + 255)>>8);
				wx = 16;
				do{
					Set_cp_font((num%10)+0x10,32+221+wx,wy);
					num /= 10;
					wx -= 8;
				}while(num);
			}
		}
	}

	gDPSetScissor(graphPtr++,G_SC_NON_INTERLACE,0,0,319,239);
}

void DispOB_cp_free(void)
{
	int number,disp_number,x,y;

	number = pfsFreeBlocks;
	x = 272;
	y = 184;

	do{
		disp_number = number % 10;
		number /= 10;
		graphPtr = doTexList(graphPtr,
							 GetTBPointer(TexList_cp_numbers[disp_number]),
							 x,y);
		x -= 9;		
	}while(number);
}

void DispOB_cp_cursor(OBJBlock *ptr,int num)
{
	int i;
	POS_XY *pos_ptr;
	OBJBlock *ptr2;

	ptr2 = Get_OBJBlock_ptr(KO_CP_CSCOLOR);

	if (num == 0){
		if (cp_mode == CP_MENU_END)
			i = 1;
		else
			i = 0;
	}
	else{
		switch(cp_mode){
		case CP_MENU_OK:
		case CP_MENU_CANCEL:
			i = num*2 + cp_mode - CP_MENU_OK;
			break;
		default:
			return;
		}
	}
	pos_ptr = &cp_cursor_position[i];

	//PRINTF("work=%d\n",ptr2->work2);
	gDPSetPrimColor(graphPtr++,0,0, 255,ptr2->work2,0,255);
	graphPtr = doTexList(graphPtr,TexList_cp_cursor,pos_ptr->x,pos_ptr->y);
	
}

void DispOB_Sub_gsel1(OBJBlock *ptr,int num)
{
	switch(ptr->pattern){
	case 0:
	case 2:
	case 3:
		graphPtr = doTexList(graphPtr,
							 GetTBPointer(TexList_gsel_boxes[num*2]),
							 ptr->disp_x,ptr->disp_y);
		graphPtr = doTexList(graphPtr,
							 GetTBPointer(TexList_gsel_boxes[num*2+1]),
							 ptr->disp_x,ptr->disp_y);
		break;
	case 1:
	case 4:
		graphPtr = doTexList2(graphPtr,
							  GetTBPointer(TexList_gsel_boxes[num*2]),
							  ptr->disp_x,ptr->disp_y,2,ptr->work1);
		graphPtr = doTexList2(graphPtr,
							  GetTBPointer(TexList_gsel_boxes[num*2+1]),
							  ptr->disp_x,ptr->disp_y,2,ptr->work1);
		break;
	}
}

void DispOB_Sub_gsel_caution(OBJBlock *ptr)
{
	int a,i;
	float mul1;
#if CANNOT_GHOST_SAVE_SWITCH
	/* ¥´¡¼¥¹¥È¤¬¥»¡¼¥Ö¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ë¤Þ¤Ç¤Ï¥á¥Ã¥»¡¼¥¸¤ÏÉ½¼¨¤·¤Ê¤¤ */
	return;
#endif
	switch(ptr->pattern){
	case KSEQ_GCAU_MES1:
	case KSEQ_GCAU_MES2:
	case KSEQ_GCAU_MES3:
	case KSEQ_GCAU_MES4:
		graphPtr = FillRect1Color(graphPtr,
								  160-130,50,160+130,110,
								  0,0,0,255);

		mul1 = 0.65;
		a = ptr->pattern - KSEQ_GCAU_MES1;
		SetPalette(3);
		for (i = 0;i < 4;i++){
			SetWord2_a(35,65+i*13,
					   gsel_caution_messages_j[a*4 + i],0,
					   mul1,mul1);
		}
		break;
	}
}

void DispOB_Sub_psel_cursor(OBJBlock *ptr,int num,int alpha)
{
	P_COLOR *col_ptr;

	col_ptr = &psel_cursor_color[num];
	gDPSetPrimColor(graphPtr++,0,0,
					col_ptr->r,col_ptr->g,
					col_ptr->b,col_ptr->a);
	gDPSetEnvColor(graphPtr++,alpha,alpha,alpha,0);
	graphPtr = doTexList(graphPtr,
						 GetTBPointer(TexList_psel_cursors[num]),
						 ptr->disp_x,ptr->disp_y);
}



void DispOB_Sub_psel1(OBJBlock *ptr,TexBlock *tp)
{
	switch(ptr->pattern){
	case 0:
	case 2:
	case 4:
		graphPtr = doTexList(graphPtr,tp,ptr->disp_x,ptr->disp_y);
		break;
	case 1:
	case 3:
		//graphPtr = doTexList2(graphPtr,tp,
		//					  ptr->disp_x,ptr->disp_y,1,ptr->work1);
		graphPtr = doTexList2(graphPtr,tp,
							  ptr->disp_x,ptr->disp_y,2,ptr->work1);
		break;
	}
}

void DispOB_Sub_psel2(OBJBlock *ptr)
{
	int i;

	if (Get_psel_cursor_number(ptr->kind - KO_PSEL_MA) >= 0)
		return;
	switch(ptr->pattern){
	case 0:
	case 2:
	case 4:
		graphPtr = FillRect1Color_f(graphPtr,
									ptr->disp_x,ptr->disp_y,
									ptr->disp_x+64,ptr->disp_y+76/*64*/,
									0,0,0,100);
		break;
	case 1:
	case 3:
		i = ptr->work1;
		graphPtr = FillRect1Color_f(graphPtr,
									ptr->disp_x+i,ptr->disp_y,
									ptr->disp_x+64-i,ptr->disp_y+76/*64*/,
									0,0,0,100);
		break;
	}
}

void DispOB_Sub_msel1(OBJBlock *ptr,int num)
{
	switch(ptr->pattern){
	case 0:
	case 2:
	case 3:
		graphPtr = doTexList(graphPtr,
							 GetTBPointer(TexLists_msel[num+1]),
							 ptr->disp_x,ptr->disp_y);
		break;
	case 1:
	case 4:
		graphPtr = doTexList2(graphPtr,
							  GetTBPointer(TexLists_msel[num+1]),
							  ptr->disp_x,ptr->disp_y,2,ptr->work1);
		break;
	}
}

void DispOB_Sub_msel_map(OBJBlock *ptr)
{
	OBJBlock *ptr2;
	POS_XY *pos_ptr;
	int stat;

	stat = 0;
	ptr2 = Get_OBJBlock_ptr(KO_MSEL_MAPMAN);
	switch(ptr2->pattern){
	case 0:
	case 1:
		stat = 0;
		break;
	case 2:
		if (ptr2->work1%4 == ptr->kind - KO_MSEL_MAP1)
			stat = 0;
		else
			stat = 1;
		break;
	case 3:
		stat = 1;
		break;
	default:
		break;
	}
	switch(stat){
	case 0:
		doSeqData2(ptr->sd_number,23,112,-1);
		break;
	case 1:
		pos_ptr = &msel_map4box_position[ptr->kind - KO_MSEL_MAP1];
		doSeqData2(ptr->sd_number,pos_ptr->x,pos_ptr->y,-2);
		break;
	}
}

void DispOB_Sub_tsel1(OBJBlock *ptr)
{
	int num;

	num = map_number_chart
		[(ptr->kind-KO_TSEL_KCUP1)/4][(ptr->kind-KO_TSEL_KCUP1)%4];
	graphPtr = doTexList5(graphPtr,
						  GetTBPointer(TexList_msel_maps[num]),
						  ptr->disp_x,ptr->disp_y,2);
	graphPtr = FillRect1Color_f(graphPtr,
								ptr->disp_x,ptr->disp_y+39,
								ptr->disp_x+64,ptr->disp_y+39+9,
								0,0,0,255);
	graphPtr = doTexList5(graphPtr,
						  GetTBPointer(TexList_msel_mapnames[num]),
						  ptr->disp_x,ptr->disp_y+39,3);
	if (CheckSameMap2(ptr->kind - KO_TSEL_KCUP1) >= 0){
		graphPtr = FlashRectangle2(graphPtr,
								   ptr->disp_x+32,ptr->disp_y,
								   ptr->disp_x+63,9+ptr->disp_y);
		graphPtr = doTexList5(graphPtr,
							 GetTBPointer(TexList_lgsel_ghost),
							 ptr->disp_x+32,ptr->disp_y,2);
	}
}

//
// tselÍÑ¥«¡¼¥½¥ë
//
void DispOB_Sub_tsel_cursor(OBJBlock *ptr)
{
	P_COLOR *col_ptr1,*col_ptr2;
	int r,g,b,a;
	int w;

	col_ptr1 = &tsel_cursor_color[ptr->work2];
	col_ptr2 = &tsel_cursor_color[(ptr->work2+1)%3];
	w = 256-ptr->work1;
	r = (col_ptr1->r*w + col_ptr2->r*ptr->work1)/256;
	g = (col_ptr1->g*w + col_ptr2->g*ptr->work1)/256;
	b = (col_ptr1->b*w + col_ptr2->b*ptr->work1)/256;
	a = (col_ptr1->a*w + col_ptr2->a*ptr->work1)/256;
	gDPSetPrimColor(graphPtr++,0,0,r,g,b,a);
	graphPtr = doTexList(graphPtr,
						 GetTBPointer(TexList_tsel_cursor),
						 ptr->disp_x,ptr->disp_y);
}



void DispOB_Sub_dsel_snap(OBJBlock *ptr)
{
	int x,y;

	x = 23;
	y = 132;
	doSeqData2(ptr->sd_number,x,y,-1);
	if (CheckSameMap2(tsel_cursor) >= 0){
		graphPtr = FlashRectangle2(graphPtr,
								   x+64,y,x+127,17+y);
		graphPtr = doTexList(graphPtr,TexList_lgsel_ghost,
							 x+64,y);
	}
	kwdisplay_kawanoradarmap(map_number_chart[tsel_cursor/4][tsel_cursor%4]);
    gDPSetTextureFilter(graphPtr++,G_TF_BILERP);	
}

void DispOB_Sub_dsel_mes1(OBJBlock *ptr)
{
	float mul1;
	extern short rank_to_num[];
	char let[5];
	int i,c;
	int map_num;

	map_num = map_number_chart[tsel_cursor/4][tsel_cursor%4];
	ptr->disp_x = 20;

	mul1 = 0.75;
	SetPalette(4);
	SetWord3_ac(105,ptr->disp_y+25,
				circuit_name_j[map_num],0,mul1,mul1);

	SetPalette(2);
	SetWord2_a(45,ptr->disp_y+40,dsel_length_j,0,mul1,mul1);
	SetWord3_a(165,ptr->disp_y+40,dsel_lengthdata_j[map_num],
		   1,mul1,mul1);

	SetPalette(3);
	SetWord2_a(160,ptr->disp_y+134,bestrec_j[0],0,mul1,mul1);
	for (i = 0;i < 5;i++){
		SetPalette(2);
		TimeAttack1Sub2(i,150,ptr->disp_y+i*13+146);
	}
	SetPalette(3);
	SetWord2_a(160,ptr->disp_y+213,bestrec_j[1],0,mul1,mul1);
	TimeAttack1Sub2(5,150,ptr->disp_y+225);
}



void DispOB_Sub_dsel_sel1(OBJBlock *ptr)
{
	int i,c;
	float mul1;
	POS_XY *pos_ptr;
	POS_XY pos_buf;
	int x,y;
	int check;
    EEPROM_DATA_COURSE *eep_ptr;

	x = 37;
	y = 63;
	mul1 = 0.6;
	eep_ptr = &eeprom_save_data.e.course[tsel_cursor/4][tsel_cursor%4];
	for (i = 0;i < 3;i++){
		check = 0;
		if (i == dsel_cursor1)
			c = 5;
		else{
			c = 1;
			switch(i){
			case 1:
				if (eep_ptr->init_flg == 0)
					check++;
				break;
			case 2:
				if (CheckSameMap2(tsel_cursor) < 0)
					check++;
				break;
			default:
				break;
			}
		}
		if (check){
			SetPalette(0);
			gDPSetPrimColor(graphPtr++,0,0, 0,0,0,150);
			SetWord2_ap(x,y+i*13,dsel_select1_j[i],0,mul1,mul1);
		}
		else{
			SetPalette(c);
			SetWord2_a(x,y+i*13,dsel_select1_j[i],0,mul1,mul1);
		}
	}

	pos_buf.x = x - 6;
	pos_buf.y = y - 5 + dsel_cursor1*13;
	DispOB_vs_ibox_cursor(ptr,&pos_buf);
}



void DispOB_Sub_dsel_sel2(OBJBlock *ptr)
{
	int i,c;
	float mul1;
	POS_XY *pos_ptr;
	POS_XY pos_buf;
	int x,y;
	char *words;

	x = 67;
	y = 110;
	mul1 = 0.65;

	SetPalette(1);
	for (i = 0;i < 3;i++)
		SetWord2_a(x-40,y-50+i*13,
				   dsel_select2_messages_j[(dsel_cursor1-1)*3+i],
				   0,mul1,mul1);

	//mul1 = 0.75;
	for (i = 0;i < 2;i++){
		if (i == dsel_cursor2)
			c = 5;
		else
			c = 1;		
		SetPalette(c);
		SetWord2_a(x,y+i*13,dsel_select2_j[i],0,mul1,mul1);
	}

	pos_buf.x = x - 8;
	pos_buf.y = y - 8 + dsel_cursor2*13;
	DispOB_vs_ibox_cursor(ptr,&pos_buf);
}

void DispOB_Sub_dsel_sel3(OBJBlock *ptr)
{
	int i,c;
	float mul1;
	POS_XY *pos_ptr;
	POS_XY pos_buf;
	int x,y;
	char *words;

	x = 82;
	y = 123;
	mul1 = 0.75;

	SetPalette(2);
	for (i = 0;i < 2;i++)
		SetWord2_a(x-40,y-50+i*16,
				   dsel_select3_messages_j[i],
				   0,mul1,mul1);

}

void DispOB_Sub_option_messages(OBJBlock *ptr)
{
	POS_XY pos_buf;
	POS_XY *pos_ptr;
	float mul1;
	int i,j,x,y,a,b;

	graphPtr = FillRect1Color_f(graphPtr,0,0,320,240,
								0,0,0,100);

	switch(msel_mode){
    case OPT_SELECT1:
    case OPT_SELECT2:
    case OPT_SELECT3:
    case OPT_SELECT4:
		mul1 = 1.0;
		for (i = 0;i < 4;i++){
			SetCursorMessageColor4option(msel_mode - OPT_SELECT1,i,3);
			x = 50;
			y = 85+i*35;
			SetWord2_a(x,y,option_select1_messages_j[i],0,0.9,mul1);
			if (i == msel_mode - OPT_SELECT1){
				pos_buf.x = x;
				pos_buf.y = y;
			}
		}
		SetPalette(1);
		SetWord3_ac(230,120,sound_mode_name_j[sound_output],0,mul1,mul1);
		break;
	case OPT_ERASE1:
	case OPT_ERASE2:
		mul1 = 1.0;
		SetPalette(3);
		for (i = 0;i < 3;i++)
			SetWord2_a(40,85+i*20,option_select3_messages_j[i],0,mul1,mul1);
		for (i = 0;i < 2;i++){
			SetCursorMessageColor4option(msel_mode - OPT_ERASE1,i,1);
			x = 132;
			y = 150+i*25;
			SetWord2_a(x,y,dsel_select2_j[i],0,mul1,mul1);
			if (i == msel_mode - OPT_ERASE1){
				pos_buf.x = x;
				pos_buf.y = y;
			}
		}
		break;
	case OPT_ERASE3:
		mul1 = 1.0;
		SetPalette(3);
		for (i = 0;i < 3;i++)
			SetWord2_a(50,85+i*20,option_select3e_messages_j[i],0,mul1,mul1);
		break;
	case OPT_PAK2_ERR1:
	case OPT_PAK2_ERR2:
	case OPT_PAK2_ERR3:
	case OPT_PAK2_ERR4:
		mul1 = 0.9;
		SetPalette(2);
		x = msel_mode-OPT_PAK2_ERR1;
		for (i = 0;i < 3;i++)
			SetWord2_a(50,85+i*20,
					   option_copy_pak2err_messages_j[x*3 + i],0,mul1,mul1);
		break;
	case OPT_PAK1_ERR1:
	case OPT_PAK1_ERR2:
	case OPT_PAK1_ERR3:
	case OPT_PAK1_ERR4:
		mul1 = 0.8;
		SetPalette(2);
		x = msel_mode-OPT_PAK1_ERR1;
		for (i = 0;i < 4;i++)
			SetWord2_a(35,85+i*20,
					   option_copy_pak1err_messages_j[x*4 + i],0,mul1,mul1);
		break;
	case OPT_COPY_ERR1:
	case OPT_COPY_ERR2:
		mul1 = 0.9;
		SetPalette(2);
		x = msel_mode-OPT_COPY_ERR1;
		for (i = 0;i < 3;i++)
			SetWord2_a(65,85+i*20,
					   option_copy_copyerr_messages_j[x*3 + i],0,mul1,mul1);
		break;
	case OPT_PAK1_NOGN1:
	case OPT_PAK1_NOGN2:
		mul1 = 1.0;
		SetPalette(3);
		for (i = 0;i < 3;i++)
			SetWord2_a(80,85+i*20,
					   ta_ghostb3_messages_j[i],0,mul1,mul1);
		break;
	case OPT_PAK2_SEL1:
	case OPT_PAK2_SEL2:
	case OPT_PAK1_SEL1:
	case OPT_PAK1_SEL2:
		switch(msel_mode){
		case OPT_PAK2_SEL1:
		case OPT_PAK2_SEL2:
			a = OPT_PAK2_SEL1;
			b = 0;
			break;
		case OPT_PAK1_SEL1:
		case OPT_PAK1_SEL2:
			a = OPT_PAK1_SEL1;
			b = 1;
			break;
		}
		mul1 = 0.6;
		SetPalette(1+b);
		SetWord3_ac(160,85,option_copy_pak2sel_message_j[b],0,mul1,mul1);
		for (i = 0;i < 2;i++){
			mul1 = 0.75;
			SetPalette(3);
			SetWord3_ac(92 + i*130,125,option_copy_pak_j[i],0,mul1,mul1);
			for (j = 0;j < 2;j++){
				char let[5];
				PAK_GHOST *pak_ptr;

				mul1 = 0.6;
				x = 32+i*137;
				y = 150+j*30;
				if (i != b){
					SetCursorMessageColor(msel_mode - a,j,1);
					if (msel_mode - a == j){
						pos_buf.x = x;
						pos_buf.y = y;
					}
				}
				else{
					if (b && (ptr->work2 == j))
						SetPalette(frame_counter%3);
					else
						SetPalette(1);
				}
				kawano_itoa(j+1,let);
				SetWord2_a(x,y,let+1,0,mul1,mul1);
				if (!i)
					pak_ptr = &pak_ghost[j];
				else
					pak_ptr = ((PAK_GHOST *)kdl_buff) + j;
				mul1 = 0.5;
				if (!pak_ptr->e.ghost_flg){
					SetWord2_a(x+10,y,
							   ta_ghostb_messages_j[2],0,mul1,mul1);
				}
				else{
					int a;

					a = pak_ptr->e.ghost_map;
					SetWord2_a(x+10,y,
							   circuit_name_semilong_j
							   [map_number_chart[a/4][a%4]],
							   0,mul1,mul1);
				}
			}
		}
		break;
	case OPT_SURE1:
	case OPT_SURE2:
		mul1 = 0.8;
		a = OPT_SURE1;
		//b = 0;
		SetPalette(2);
		for (i = 0;i < 2;i++)
			SetWord3_ac(160,77+i*20,option_copy_sure_messages_j[i],
						0,mul1,mul1);
		for (i = 0;i < 2;i++){
			mul1 = 0.75;
			SetPalette(3);
			SetWord3_ac(92 + i*130,125,option_copy_pak_j[i],0,mul1,mul1);
			for (j = 0;j < 2;j++){
				char let[5];
				PAK_GHOST *pak_ptr;

				mul1 = 0.6;
				x = 32+i*137;
				y = 150+j*30;
				if (!i){/* ¥Ñ¥Ã¥¯£± */
					if (ptr->work1 == j)
						SetPalette(frame_counter%3);/* ÁªÂòÂ¦ */
					else
						SetPalette(1);/* ÈóÁªÂòÂ¦ */
				}
				else{
					if (ptr->work2 == j)
						SetPalette(frame_counter%3);/* ÁªÂòÂ¦ */
					else
						SetPalette(1);/* ÈóÁªÂòÂ¦ */
				}
						
				kawano_itoa(j+1,let);
				SetWord2_a(x,y,let+1,0,mul1,mul1);
				mul1 = 0.5;
				if (!i)
					pak_ptr = &pak_ghost[j];
				else
					pak_ptr = ((PAK_GHOST *)kdl_buff) + j;
				if (!pak_ptr->e.ghost_flg){
					SetWord2_a(x+10,y,
							   ta_ghostb_messages_j[2],0,mul1,mul1);
				}
				else{
					int a;

					a = pak_ptr->e.ghost_map;
					SetWord2_a(x+10,y,
							   circuit_name_semilong_j
							   [map_number_chart[a/4][a%4]],
							   0,mul1,mul1);
				}
			}
		}

		for (i = 0;i < 2;i++){
			mul1 = 0.75;
			x = 110 + i*50;
			y = 210;
			if (i == msel_mode - a){
				pos_buf.x = x;
				pos_buf.y = y;
			}
			SetCursorMessageColor(msel_mode - a,j,3);
			SetWord2_a(x,y,option_copy_sure2_messages_j[i],0,mul1,mul1);
		}
		break;
	case OPT_COPY1:
	case OPT_COPY2:
	case OPT_COPY3:
		mul1 = 1.0;
		a = (msel_mode - OPT_COPY1)/2;
		SetPalette(2);
		SetWord3_ac(160,85,option_copy_copy_messages_j[a],
					0,mul1,mul1);
		for (i = 0;i < 2;i++){
			mul1 = 0.75;
			SetPalette(3);
			SetWord3_ac(92 + i*130,125,option_copy_pak_j[i],0,mul1,mul1);
			for (j = 0;j < 2;j++){
				char let[5];
				PAK_GHOST *pak_ptr;

				mul1 = 0.6;
				x = 32+i*137;
				y = 150+j*30;
				if (!i){/* ¥Ñ¥Ã¥¯£± */
					if (ptr->work1 == j){/* ÁªÂòÂ¦ */
						if (!a)
							SetPalette(2);
						else
							SetPalette(frame_counter%3);
					}
					else
						SetPalette(1);/* ÈóÁªÂòÂ¦ */
				}
				else{/* ¥Ñ¥Ã¥¯2 */
					if (ptr->work2 == j)
						SetPalette(2);/* ÁªÂòÂ¦ */
					else
						SetPalette(1);/* ÈóÁªÂòÂ¦ */
				}
						
				kawano_itoa(j+1,let);
				SetWord2_a(x,y,let+1,0,mul1,mul1);
				mul1 = 0.5;
				if (!i)
					pak_ptr = &pak_ghost[j];
				else
					pak_ptr = ((PAK_GHOST *)kdl_buff) + j;
				if (!pak_ptr->e.ghost_flg){
					SetWord2_a(x+10,y,
							   ta_ghostb_messages_j[2],0,mul1,mul1);
				}
				else{
					int a;

					a = pak_ptr->e.ghost_map;
					SetWord2_a(x+10,y,
							   circuit_name_semilong_j
							   [map_number_chart[a/4][a%4]],
							   0,mul1,mul1);
				}
			}
		}
		break;
	default:
		break;
	}

	/* ¥¢¥¤¥Æ¥à¥Ü¥Ã¥¯¥¹¥«¡¼¥½¥ë¤ÎÉ½¼¨ */
	switch(msel_mode){
	case OPT_PAK2_SEL1:
	case OPT_PAK2_SEL2:
	case OPT_PAK1_SEL1:
	case OPT_PAK1_SEL2:
	case OPT_SURE1:
	case OPT_SURE2:
		pos_buf.x -= 5;
		pos_buf.y -= 6;
		break;
	default:
		pos_buf.x -= 10;
		pos_buf.y -= 8;
		break;
	}
	DispOB_vs_ibox_cursor(ptr,&pos_buf);
}



void Cut_ud_sub(OBJBlock *ptr)
{
	switch(opening_flag){
	case OPENING_ROLLING_SET:
		graphPtr = FillRectBlack(graphPtr,0,0,319,40);
		graphPtr = FillRectBlack(graphPtr,0,199,319,239);
		ptr->work1 = 40;
		break;
	case OPENING_STOP_SET:
		ptr->work1-=2;
		if (ptr->work1 > 0){
			graphPtr = FillRectBlack(graphPtr,0,0,
									 319,ptr->work1);
			graphPtr = FillRectBlack(graphPtr,0,239-ptr->work1,
									 319,239);
		}
		else
			ptr->kind = 0;
		break;
	default:
		if ((game_mode != MARIOGP)||(player_number != 1)||(demo_play_flag))
			ptr->kind = 0;
		else{
			ptr->work1-=2;
			if (ptr->work1 > 0){
				graphPtr = FillRectBlack(graphPtr,0,0,
										 319,ptr->work1);
				graphPtr = FillRectBlack(graphPtr,0,239-ptr->work1,
										 319,239);
			}
			else
				ptr->kind = 0;
		}
		break;
	}
}

void DispOB_result_time(OBJBlock *ptr)
{
	extern short rank_to_num[];
	char ranking_name[8];
	char let[5];
	int i,c;
	int l_1,l_2;
	float mul1;

	for (i = 0;i < 8;i++){
		ranking_name[i] = kart_data[rank_to_num[i]].kart;
#if 0
		c = i;
		while(c > 0){/*Æ±¤¸¥­¥ã¥é¤¬Æó¿Í¤¤¤¿¤ê¤¹¤ë¤Î¤Ï¡©*/
			if (ranking_name[i] == ranking_name[c-1])
				PRINTF("Ã¯¤Î»Å¶È¡©\n");
			if (rank_to_num[i] == rank_to_num[c-1])
				PRINTF("¾®Àî¤µ¤ó¤Î»Å¶È¡©\n");
			c--;
		}
#endif
	}

	SetPalette(4);
	SetWord2_a(ptr->disp_x+30,ptr->disp_y+25,"results",0,1.0,1.0);
	SetPalette(5);
	SetWord2_a(ptr->disp_x+44,ptr->disp_y+40,"round",0,0.7,0.7);
	kawano_itoa(circuit_select+1,let);
	SetWord2_a(ptr->disp_x+87,ptr->disp_y+40,let+1,0,0.7,0.7);

	for (i = 0;i < 4;i++){
		if (rank_to_num[i] < players/*player_number*/)
			c = frame_counter % 3;
		else
			c = 3;
		SetPalette(c);
		ResultSub_time(ptr->disp_x+7,ptr->disp_y+56+i*16,
					   ranking_name[i],i);
	}
	for (i = 4;i < 8;i++){
		if (rank_to_num[i] < players/*player_number*/)
			c = frame_counter % 3;
		else
			c = 3;
		SetPalette(c);
		ResultSub_time(190-ptr->disp_x,ptr->disp_y+90+i*16,
					   ranking_name[i],i);
	}

	//mul1 = 0.7;
	mul1 = 0.6;
	SetPalette(5);
#if 1
	l_1 = (GetWordLength(cup_name[cup_select])+8)*mul1/2;
	l_2 = (GetWordLength(class_name[race_level])+8)*mul1/2;
	SetWord3_ac(245-l_2-ptr->disp_x,ptr->disp_y+225,
				cup_name[cup_level],0,mul1,mul1);
	SetWord3_ac(245+l_1-ptr->disp_x,ptr->disp_y+225,
				class_name[popup_status[players-1][play_mode[players-1]]],
				0,mul1,mul1);
#else
	SetWord2_a(195-ptr->disp_x,ptr->disp_y+225,
				cup_name[cup_level],0,mul1,mul1);
	SetWord2_a(275-ptr->disp_x,ptr->disp_y+225,
				class_name[popup_status[players-1][play_mode[players-1]]],
				0,mul1,mul1);
#endif
}

void ResultSub_time(int x,int y,int num,int num2)
{
	float mul1,ftime;
	int time1,time2,time3;
	char let[5];

	mul1 = 0.7;
	ftime = goalintime[rank_to_num[num2]];
	time1 = ftime/60;
	time2 = ((int)ftime)%60;
	time3 = (int)(ftime*100.0)%100;
	kawano_itoa(num2+1,let);
	let[2] = '.';
	let[3] = '\0';
	SetWord4_a(x-1,y,let+1,-4,mul1,mul1);
	SetWord2_a(x+10,y,drivers_name_j[num],0,0.65,mul1);
	kawano_itoa(time1,let);
	SetWord4_a(x+66,y,let,0,mul1,mul1);
	kawano_itoa(time2,let);
	SetWord2_a(x+78,y,"'",0,mul1,mul1);
	SetWord4_a(x+86,y,let,0,mul1,mul1);
	kawano_itoa(time3,let);
	SetWord2_a(x+98,y,"\"",0,mul1,mul1);
	SetWord4_a(x+106,y,let,0,mul1,mul1);
}

void DispOB_result_point(OBJBlock *ptr)
{
	extern short rank_to_num[];
	extern short name_to_num[];
	char ranking_name[8];
	char let[5];
	int i,c,check,dx;
	int l_1,l_2;
	float mul1;

	if (ptr->pattern == KSEQ_GPP_INIT)/*¤Þ¤À½é´ü²½¤ÎÃÊ³¬¤À¤«¤é¡©*/
		return;
	if (ptr->pattern <= KSEQ_GPP_NAMEOFF){
		for (i = 0;i < 8;i++)
			ranking_name[i] = kart_data[rank_to_num[i]].kart;
	}
	else{
		SortDPRanking(ranking_name);//¤½¤Î¤¦¤Á¤³¤Î¤Ø¤ó¤òÄ¾¤·¤Þ¤·¤ç¤¦
		SortDPRanking(d_points_rank);
	}

	SetPalette(4);
	SetWord2_a(ptr->disp_x+25,-ptr->disp_y+25,"driver's points",0,0.8,0.8);
	SetPalette(5);
	SetWord2_a(ptr->disp_x+54,-ptr->disp_y+40,"round",0,0.7,0.7);
	kawano_itoa(circuit_select+1,let);
	SetWord2_a(ptr->disp_x+97,-ptr->disp_y+40,let+1,0,0.7,0.7);
	
	for (i = 0;i < 4;i++){
		switch(ptr->pattern){
		case KSEQ_GPP_NAMEOFF:
		case KSEQ_GPP_NAMEON:
			if (i*DP_SORT_TIME < ptr->work1)
				check = 1;
			else
				check = 0;
			break;
		default:
			check = 0;
			break;
		}
		if (check)
			continue;

		if (ptr->pattern <= KSEQ_GPP_NAMEOFF){
			check = rank_to_num[i];
			dx = 0;
		}
		else{
			check = name_to_num[ranking_name[i]];
			dx = 13;
		}
		if (check < players/*player_number*/)
			c = frame_counter % 3;
		else
			c = 3;
		SetPalette(c);
		ResultSub_point(ptr,ptr->disp_x+dx+28,-ptr->disp_y+56+i*16,
						ranking_name[i],i,ranking_name);
	}
	for (i = 4;i < 8;i++){
		switch(ptr->pattern){
		case KSEQ_GPP_NAMEOFF:
		case KSEQ_GPP_NAMEON:
			if (i*DP_SORT_TIME < ptr->work1)
				check = 1;
			else
				check = 0;
			break;
		default:
			check = 0;
			break;
		}
		if (check)
			continue;

		if (ptr->pattern <= KSEQ_GPP_NAMEOFF)
			check = rank_to_num[i];
		else
			check = name_to_num[ranking_name[i]];
		if (check < players/*player_number*/)
			c = frame_counter % 3;
		else
			c = 3;
		SetPalette(c);
		ResultSub_point(ptr,190-ptr->disp_x,ptr->disp_y+90+i*16,
					   ranking_name[i],i,ranking_name);
	}

	//mul1 = 0.7;
	mul1 = 0.6;
	SetPalette(5);
#if 1
	l_1 = (GetWordLength(cup_name[cup_select])+8)*mul1/2;
	l_2 = (GetWordLength(class_name[race_level])+8)*mul1/2;
	SetWord3_ac(230-l_2-ptr->disp_x,ptr->disp_y+225,
				cup_name[cup_level],0,mul1,mul1);
	SetWord3_ac(230+l_1-ptr->disp_x,ptr->disp_y+225,
				class_name[popup_status[players-1][play_mode[players-1]]],
				0,mul1,mul1);
#else
	SetWord2_a(150+25-ptr->disp_x,ptr->disp_y+225,
				cup_name[cup_level],0,mul1,mul1);
	SetWord2_a(150+110-ptr->disp_x,ptr->disp_y+225,
				class_name[popup_status[players-1][play_mode[players-1]]],
				0,mul1,mul1);
#endif
}

void SortDPRanking(char *b_ptr)
{
	extern short name_to_num[];
	int i,j,k,swap_buf;

	for (i = 0;i < 8;i++){
		*(b_ptr+i) = i;
		j = i;
		while(j > 0){
			if (d_points[*(b_ptr+j)]>d_points[*(b_ptr+j-1)]){
				swap_buf = *(b_ptr+j);
				*(b_ptr+j) = *(b_ptr+j-1);
				*(b_ptr+j-1) = swap_buf;
			}
			else{/*¥×¥ì¡¼¥ä¡¼¥­¥ã¥é¤ò¾å¤Ë»ý¤Ã¤Æ¤¤¤¯*/
				if ((d_points[*(b_ptr+j)] == d_points[*(b_ptr+j-1)])
					&& (name_to_num[*(b_ptr+j)] < players/*player_number*/)
					&& (name_to_num[*(b_ptr+j)] < name_to_num[*(b_ptr+j-1)])){
					swap_buf = *(b_ptr+j);
					*(b_ptr+j) = *(b_ptr+j-1);
					*(b_ptr+j-1) = swap_buf;
				}
				else					
					break;
			}
			j--;
		}
	}
}

void ResultSub_point(OBJBlock *ptr,int x,int y,int num,int num2,char *pts_buf)
{
	float mul1;
	char let[5];
	int i;

	mul1 = 0.7;
	if (ptr->pattern <= KSEQ_GPP_NAMEOFF)
		kawano_itoa(num2+1,let);
	else{
		i = num2;
		while(i > 0){
			if (d_points[*(pts_buf+i)] == d_points[*(pts_buf+i-1)])
				i--;
			else
				break;
		}
		kawano_itoa(i+1,let);
	}
	let[2] = '.';
	let[3] = '\0';
	SetWord4_a(x,y,let+1,-4,mul1,mul1);
	SetWord2_a(x+10,y,drivers_name_j[num],0,mul1,mul1);
	kawano_itoa(d_points[num],let);
	SetWord4_a(x+71,y,let,0,mul1,mul1);
	if ((num2 < 4)&&(ptr->pattern <= KSEQ_GPP_NAMEOFF)){
		kawano_itoa(*(additional_point+num2),let);
		let[0] = '+';
		SetWord2_a(x+90,y,let,0,mul1,mul1);
	}
}

void DispOB_timeattack1(OBJBlock *ptr)
{
	float mul1;
	extern short rank_to_num[];
	char let[5];
	int i,c;

	mul1 = 0.6;
	SetPalette(4);
	SetWord3_ac(ptr->disp_x+67,ptr->disp_y+25,
				circuit_name_j[map_number_chart[cup_select][circuit_select]],
				0,mul1,mul1);
	mul1 = 0.75;
	SetPalette(3);
	SetWord3_ac(ptr->disp_x+70,ptr->disp_y+40,
				bestrec_j[2],0,mul1,mul1);
	for (i = 0;i < 4;i++)
		TimeAttack1Sub(i,ptr->disp_x+23,ptr->disp_y+i*15+55);

	SetPalette(3);
	SetWord2_a(180-ptr->disp_x,ptr->disp_y+134,bestrec_j[0],0,mul1,mul1);
	for (i = 0;i < 5;i++){
		SetPalette(2);
		TimeAttack1Sub2(i,170-ptr->disp_x,ptr->disp_y+i*13+146);
	}
	SetPalette(3);
	SetWord2_a(180-ptr->disp_x,ptr->disp_y+213,bestrec_j[1],0,mul1,mul1);
	TimeAttack1Sub2(5,170-ptr->disp_x,ptr->disp_y+225);
}

void DispOB_timeattack2(OBJBlock *ptr)
{
	POS_XY *pos_ptr;
	POS_XY pos_buf;
	PAK_GHOST *pak_ptr;
	float mul1;
	extern short rank_to_num[];
	char let[5];
	int i,j;

	switch(ptr->pattern){
	case KSEQ_TA_INIT:
	case KSEQ_TA_END2:
		return;
	}
	mul1 = 0.6;
	SetPalette(4);
	SetWord3_ac(ptr->disp_x+85,-ptr->disp_y+25,
				circuit_name_j[map_number_chart[cup_select][circuit_select]],
				0,mul1,mul1);
	mul1 = 0.75;
	SetPalette(3);
	SetWord3_ac(ptr->disp_x+85,-ptr->disp_y+40,
				bestrec_j[2],0,mul1,mul1);
	for (i = 0;i < 4;i++)
		TimeAttack1Sub(i,ptr->disp_x+38,-ptr->disp_y+i*15+55);

	switch(ptr->pattern){
	case KSEQ_TA_MOVING:
	case KSEQ_TA_SELECT1:
	case KSEQ_TA_SELECT2:
	case KSEQ_TA_SELECT3:
	case KSEQ_TA_SELECT4:
	case KSEQ_TA_SELECT5:
	case KSEQ_TA_SELECT6:
	case KSEQ_TA_END:
		for (i = 0;i < 6;i++){
			j = 0;
			SetCursorMessageColor(ptr->pattern - KSEQ_TA_SELECT1,i,1);
			switch(i){
			case 4:
				if (lost_ghost == LOST_GHOST)/* ¥ê¥×¥ì¥¤ÁªÂòÉÔ²Ä */
					j = 1;
				break;
			case 5:
				if (ghost_status != GHOST_DRIVE)
					j = 2;
				break;
			//default:
			//	break;
			}

			if (j){
					SetPalette(0);
					gDPSetPrimColor(graphPtr++,0,0, 0,0,0,150);
					SetWord2_ap(178-ptr->disp_x,ptr->disp_y+147+i*13,
								ta_result_select_j[i+1],0,mul1,mul1);
			}
			else{
				SetWord2_a(178-ptr->disp_x,ptr->disp_y+147+i*13,
						   ta_result_select_j[i+1],0,mul1,mul1);
			}
		}
		break;
	case KSEQ_TA_GHOSTA1:
	case KSEQ_TA_GHOSTA2:
	case KSEQ_TA_GHOSTA3:
	case KSEQ_TA_GHOSTA4:
	case KSEQ_TA_GHOSTA5:
	case KSEQ_TA_GHOSTA6:
		SetPalette(3);
		j = ptr->pattern-KSEQ_TA_GHOSTA1;
		mul1 = 0.6;
		for(i = 0;i < 7;i++)
			SetWord2_a(162,140+i*13,ta_ghosta_messages_j[j*7 + i],
					   0,mul1,mul1);		
		break;
	case KSEQ_TA_GHOSTB1:
	case KSEQ_TA_GHOSTB2:
		SetPalette(1);
		mul1 = 0.7;
		for (i = 0;i < 2;i++)
			SetWord2_a(165,ptr->disp_y+140+i*13,
					   ta_ghostb_messages_j[i],0,mul1,mul1);
		for (i = 0;i < 2;i++){
			char let[5];
			mul1 = 0.6;
			SetCursorMessageColor(ptr->pattern - KSEQ_TA_GHOSTB1,i,1);
			kawano_itoa(i+1,let);
			SetWord2_a(177-ptr->disp_x,170+i*30,let+1,0,mul1,mul1);
			pak_ptr = &pak_ghost[i];
			if (!pak_ptr->e.ghost_flg){
				mul1 = 0.45;
				SetWord2_a(187-ptr->disp_x,170+i*30,ta_ghostb_messages_j[2],
						   0,mul1,mul1);
			}
			else{
				int a;

				mul1 = 0.45;
				a = pak_ptr->e.ghost_map;
				SetWord2_a(187-ptr->disp_x,170+i*30,
						   circuit_name_semilong_j[map_number_chart[a/4][a%4]],
						   0,mul1,mul1);
			}
		}
		break;
	case KSEQ_TA_GHOSTB3:
		SetPalette(3);
		mul1 = 0.8;
		for (i = 0;i < 3;i++)
			SetWord2_a(170,147+i*13,ta_ghostb3_messages_j[i],
					   0,mul1,mul1);		
		break;
	case KSEQ_TA_GHOSTC1:
	case KSEQ_TA_GHOSTC2:
		SetPalette(3);
		mul1 = 0.67;
		for (i = 0;i < 3;i++)
			SetWord2_a(163,ptr->disp_y+140+i*13,
					   ta_ghostc_messages_j[i],0,mul1,mul1);
		mul1 = 0.75;
		for (i = 0;i < 2;i++){
			SetCursorMessageColor(ptr->pattern - KSEQ_TA_GHOSTC1,i,1);
			SetWord2_a(200-ptr->disp_x,185+i*15,ta_ghostc_select_messages_j[i],
					   0,mul1,mul1);
		}
		break;
	case KSEQ_TA_GHOSTD:
		SetPalette(3);
		mul1 = 0.67;
		for (i = 0;i < 3;i++)
			SetWord2_a(163,147+i*13,ta_ghostd_messages_j[i],
					   0,mul1,mul1);		
		break;
	case KSEQ_TA_GHOSTD2:
		SetPalette(3);
		for (i = 0;i < 2;i++)
			SetWord2_a(170,147+i*13,ta_ghostd2_messages_j[i],
					   0,mul1,mul1);		
		break;
	default:
		break;
	}

	switch(ptr->pattern){
	case KSEQ_TA_SELECT1:
	case KSEQ_TA_SELECT2:
	case KSEQ_TA_SELECT3:
	case KSEQ_TA_SELECT4:
	case KSEQ_TA_SELECT5:
	case KSEQ_TA_SELECT6:
		pos_ptr = &ta_result_cursor_position[ptr->pattern - KSEQ_TA_SELECT1];
		break;
	case KSEQ_TA_GHOSTB1:
	case KSEQ_TA_GHOSTB2:
		pos_ptr = &ta_ghostb_cursor_position[ptr->pattern - KSEQ_TA_GHOSTB1];
		break;
	case KSEQ_TA_GHOSTC1:
	case KSEQ_TA_GHOSTC2:
		pos_ptr = &ta_ghostc_cursor_position[ptr->pattern - KSEQ_TA_GHOSTC1];
		break;
	case KSEQ_TA_END:
		pos_ptr = &ta_result_cursor_position[ptr->work1 - KSEQ_TA_SELECT1];
		break;
	default:
		return;
	}
	pos_buf.x = pos_ptr->x - ptr->disp_x;
	pos_buf.y = pos_ptr->y + ptr->disp_y;
	DispOB_vs_ibox_cursor(ptr,&pos_buf);

}

void TimeAttack1Sub(int num,int x,int y)
{
	float mul1;
	uint time;
	int c;
	char let[5];
	OBJBlock *ptr;

	if (num < 3){
		time = kwlap[0].laptimebuf[num];
		SetPalette(2);
	}
	else{
		time = kwlap[0].totaltime;
		SetPalette(1);
	}
	mul1 = 0.7;
	SetWord3_a(x+33,y,laptime_j[num],0,mul1,mul1);

	ptr = Get_OBJBlock_ptr(KO_GAME_TA_SORT);
	if (num < 3){
		if (ptr->work2 & (1<<num))
			c = frame_counter % 3;
		else
			c = 3;
	}
	else{
		if (ptr->work1 >= 0)
			c = frame_counter % 3;
		else
			c = 3;
	}
	SetPalette(c);

	kawano_itoa_m(time,let);
	SetWord4_a(x+44,y,let,0,mul1,mul1);
	SetWord2_a(x+55,y,"'",0,mul1,mul1);
	kawano_itoa_s(time,let);
	SetWord4_a(x+64,y,let,0,mul1,mul1);
	SetWord2_a(x+75,y,"\"",0,mul1,mul1);
	kawano_itoa_c(time,let);
	SetWord4_a(x+85,y,let,0,mul1,mul1);
}

//
// ¥¿¥¤¥à¥¢¥¿¥Ã¥¯¤Î¥ê¥¶¥ë¥È,¥Ç¡¼¥¿²èÌÌ·óÍÑ
//
void TimeAttack1Sub2(int num,int x,int y)
{
    //EEPROM_DATA_COURSE *eep_ptr;
	float mul1;
	uint time,time_only;
	int c;
	char let[5];
	OBJBlock *ptr;
	int mode;

	if (sequence_mode == RACESEQUENCE)
		mode = 0;
	else
		mode = 1;

    //eep_ptr = &eeprom_save_data.e.course[cup_select][circuit_select];
	if (num < 5){
		if (!mode)
			time = GetRecordTime2(num);
		else
			time = GetRecordTime3(num,tsel_cursor);
		SetPalette(1);
	}
	else{
		if (!mode)
			time = GetRecordLapTime();
		else
			time = GetRecordLapTime3(tsel_cursor);
		//SetPalette(1);
	}
	time_only = time & 0x000fffff;
	mul1 = 0.65;
	SetWord4_a(x+20,y,recordtime_j[num],2,mul1,mul1);

	if (!mode){
		ptr = Get_OBJBlock_ptr(KO_GAME_TA_SORT);
		if (num < 5){
			if (ptr->work1 == num)
				c = frame_counter % 3;
			else
				c = 3;
		}
		else{
			if (ptr->work2)
				c = frame_counter % 3;
			else
				c = 3;
		}
	}
	else
		c = 3;
	SetPalette(c);

	kawano_itoa_m(time_only,let);
	SetWord4_a(x+39,y,let,0,mul1,mul1);
	SetWord2_a(x+50,y,"'",0,mul1,mul1);
	kawano_itoa_s(time_only,let);
	SetWord4_a(x+59,y,let,0,mul1,mul1);
	SetWord2_a(x+70,y,"\"",0,mul1,mul1);
	kawano_itoa_c(time_only,let);
	SetWord4_a(x+80,y,let,0,mul1,mul1);
	if (time_only < 600000)
		c = time>>20;
	else
		c = 8;
	SetWord3_ac(x+120,y,drivers_name_j[c],0,mul1,mul1);
}

void DispOB_timeattack_message1(OBJBlock *ptr)
{
	float mul1;
	int box_x,box_y,box_w,box_h;

	mul1 = 0.85;

	box_x = SCREEN_WD - ptr->disp_x;
	//box_y = SCREEN_HT - ptr->disp_y;
	box_y = ptr->disp_y;
	box_w = (GetWordLength(ta_romghost_message_j)+8)*mul1;
	box_h = 24*mul1;
	graphPtr = FillRect1Color_f(graphPtr,
								box_x-box_w/2,box_y-box_h+4,
								box_x+box_w/2,box_y+4,
								0,0,0,100);

	SetPalette(4);
	SetWord3_ac(ptr->disp_x-3,ptr->disp_y,ta_romghost_message_j,0,mul1,mul1);

	
}

void DispOB_pause(OBJBlock *ptr)
{
	if (pause_flag){
		switch(game_mode){
		case TIMEATTACK:
			DispOB_pause_ta(ptr);
			break;
		case VSBATTLE:
			DispOB_pause_vs(ptr);
			break;
		case MARIOGP:
			DispOB_pause_gp(ptr);
			break;
		case BATTLE:
			DispOB_pause_bt(ptr);
			break;
		}
	}
}

POS_XY ta_pause_message_positions[] = {
	{105,155}
};

void DispOB_pause_ta(OBJBlock *ptr)
{
	POS_XY *pos_ptr;
	float mul1;
	char let[5];
	uint time,time_only;
	int i;

	graphPtr = FillRect1Color_f(graphPtr,
								0,0,SCREEN_WD-1,SCREEN_HT-1,
								0,0,0,140);
	mul1 = 1.0;
	SetPalette(3);
	SetWord3_ac(160,80,
				circuit_name_j[map_number_chart[cup_select][circuit_select]],
				0,mul1,mul1);
	
	mul1 = 0.8;
	SetPalette(2);
	SetWord3_ac(157,96,bestrec_j[0],0,mul1,mul1);
	time = GetRecordTime2(0);
	time_only = time & 0x000fffff;
	kawano_itoa_m(time_only,let);
	SetWord4_a(127,109,let,0,mul1,mul1);
	SetWord2_a(142,109,"'",0,mul1,mul1);
	kawano_itoa_s(time_only,let);
	SetWord4_a(152,109,let,0,mul1,mul1);
	SetWord2_a(167,109,"\"",0,mul1,mul1);
	kawano_itoa_c(time_only,let);
	SetWord4_a(179,109,let,0,mul1,mul1);

	SetWord3_ac(157,124,bestrec_j[1],0,mul1,mul1);
	time = GetRecordLapTime();
	time_only = time & 0x000fffff;
	kawano_itoa_m(time_only,let);
	SetWord4_a(127,137,let,0,mul1,mul1);
	SetWord2_a(142,137,"'",0,mul1,mul1);
	kawano_itoa_s(time_only,let);
	SetWord4_a(152,137,let,0,mul1,mul1);
	SetWord2_a(167,137,"\"",0,mul1,mul1);
	kawano_itoa_c(time_only,let);
	SetWord4_a(179,137,let,0,mul1,mul1);

	pos_ptr = &ta_pause_message_positions[0];

	mul1 = 0.75;
	for (i = 0;i < 5;i++){
		SetCursorMessageColor(ptr->pattern - KSEQ_PS_TA1,i,1);
		SetWord2_a(pos_ptr->x,pos_ptr->y+i*13,
				   ta_result_select_j[i],0,mul1,mul1);
	}

}

POS_XY vs_pause_message_positions[] = {
	{130,100},{130,100},{130,100},{130,100},
	{110, 40},{110,160},{110, 40},{110,160},
	{ 40,100},{178,100},{ 40,100},{178,100},
	{ 40, 40},{178, 40},{ 40,160},{178,160}
};

void DispOB_pause_vs(OBJBlock *ptr)
{
	POS_XY *pos_ptr;
	float mul1;
	char let[5];
	uint time,time_only;
	int i,i2;
	SCREEN *scr_ptr;
	int x,y,w,h;
	
	scr_ptr = &screen_data[pause_flag-1];

	x = scr_ptr->posx;
	y = scr_ptr->posy;
	w = scr_ptr->widthx/2;
	h = scr_ptr->widthy/2;
	graphPtr = FillRect1Color_f(graphPtr,
								x - w,y - h,x + w,y + h,
								0,0,0,140);
	pos_ptr = &vs_pause_message_positions[race_screen_mode*4 + pause_flag-1];

	mul1 = 0.75;
	for (i = 0;i < 4;i++){
		if (i > 0)
			i2 = i + 1;
		else
			i2 = i;
		SetCursorMessageColor(ptr->pattern - KSEQ_PS_VS1,i,3);
		SetWord2_a(pos_ptr->x-2,pos_ptr->y+i*13,
				   ta_result_select_j[i2],0,mul1,mul1);
	}
}

POS_XY gp_pause_message_positions[] = {
	{105,140},{120,100},{120,100},{120,100},
	{105, 85},{105,205},{120, 40},{120,160}
//	{ 50,100},{195,100},{ 50,100},{195,100},
//	{ 50, 40},{195, 40},{ 50,160},{195,160}
};


void DispOB_pause_gp(OBJBlock *ptr)
{
	POS_XY *pos_ptr;
	float mul1;
	int l_1,l_2;
	int i;
	SCREEN *scr_ptr;
	int x,y,w,h;
	
	scr_ptr = &screen_data[pause_flag-1];

	x = scr_ptr->posx;
	y = scr_ptr->posy;
	w = scr_ptr->widthx/2;
	h = scr_ptr->widthy/2;
	graphPtr = FillRect1Color_f(graphPtr,
								x - w,y - h,x + w,y + h,
								0,0,0,140);

	pos_ptr = &gp_pause_message_positions[race_screen_mode*4 + pause_flag-1];

	mul1 = 1.0;
	l_1 = (GetWordLength(cup_name[cup_select])*mul1+10)/2;
	l_2 = (GetWordLength(class_name[race_level])*mul1+10)/2;
	SetPalette(3);
	SetWord3_ac(160-l_2,pos_ptr->y-50,cup_name[cup_select],
				0,mul1,mul1);
	SetPalette(3);
	SetWord3_ac(160+l_1,pos_ptr->y-50,class_name[race_level],
				0,mul1,mul1);
	SetPalette(3);
	SetWord3_ac(160,pos_ptr->y-30,
				circuit_name_j[map_number_chart[cup_select][circuit_select]],
				0,mul1,mul1);
	

	mul1 = 0.75;
	for (i = 0;i < 2;i++){
		SetCursorMessageColor(ptr->pattern - KSEQ_PS_GP1,i,3);
		SetWord2_a(pos_ptr->x,pos_ptr->y+i*13,
				   ta_result_select_j[i*4],0,mul1,mul1);
	}
	

}


POS_XY bt_pause_message_positions[] = {
	{120,100},{120,100},{120,100},{120,100},
	{110, 40},{110,160},{110, 40},{110,160},
	{ 40,100},{178,100},{ 40,100},{178,100},
	{ 40, 40},{178, 40},{ 40,160},{178,160}
};


void DispOB_pause_bt(OBJBlock *ptr)
{
	POS_XY *pos_ptr;
	float mul1;
	char let[5];
	uint time,time_only;
	int i,i2;
	SCREEN *scr_ptr;
	int x,y,w,h;
	
	scr_ptr = &screen_data[pause_flag-1];

	x = scr_ptr->posx;
	y = scr_ptr->posy;
	w = scr_ptr->widthx/2;
	h = scr_ptr->widthy/2;
	graphPtr = FillRect1Color_f(graphPtr,
								x - w,y - h,x + w,y + h,
								0,0,0,140);

	pos_ptr = &bt_pause_message_positions[race_screen_mode*4 + pause_flag-1];

	mul1 = 0.75;
	for (i = 0;i < 4;i++){
		if (i > 0)
			i2 = i + 1;
		else
			i2 = i;
		SetCursorMessageColor(ptr->pattern - KSEQ_PS_BT1,i,3);
		SetWord2_a(pos_ptr->x-2,pos_ptr->y+i*13,
				   ta_result_select_j[i2],0,mul1,mul1);
	}
	
}

void DispOB_pause_cursor(void)
{
	POS_XY pos_buf;
	POS_XY *pos_ptr;
	OBJBlock *ptr;
	int defaults_position;
	int dummy_game_mode;
	int check;

	check = 0;
	//switch(game_mode){
	//case TIMEATTACK:
	//	ptr = Get_OBJBlock_ptr2(KO_GAME_TA_REP);
	//	if (ptr){/* ¥¿¥¤¥à¥¢¥¿¥Ã¥¯¤Î¥ê¥×¥ì¥¤»þ¤Ë...... */
	//		if (ptr->pattern >= KSEQ_TAR_SEL1){
	//			dummy_game_mode = game_mode;
	//			check++;
	//		}
	//	}
	//	break;
	//}
	if (!check){
		if (!pause_flag){
			return;
		}
		dummy_game_mode = game_mode;
		ptr = Get_OBJBlock_ptr2(KO_GAME_PAUSE);
	}
	gSPViewport(graphPtr++, K0_TO_PHYS((u32) &vp));
	//gDPSetScissor(graphPtr++, G_SC_NON_INTERLACE, 0, 0, 320, 240);
	guOrtho(&dynamicp->effectmodeling[effectcount],
		0.0F, (float)SCREEN_WD-1,
		(float)SCREEN_HT-1,0.0F, 
		-100.0F, 100.0F, 1.0F);
    gSPMatrix(graphPtr++, /*&dynamicp->effectmodeling[effectcount++],*/ 
			  K0_TO_PHYS((u32) &(dynamicp->effectmodeling[effectcount++])),
			  G_MTX_PROJECTION | G_MTX_LOAD | G_MTX_NOPUSH);

	//gSPDisplayList(graphPtr++, &kawano_onlyfade_start);

	switch(dummy_game_mode){
	case TIMEATTACK:
		pos_ptr = &ta_pause_message_positions[0];
		break;
	case VSBATTLE:
		pos_ptr = &vs_pause_message_positions[race_screen_mode*4+pause_flag-1];
		break;
	case MARIOGP:
		pos_ptr = &gp_pause_message_positions[race_screen_mode*4+pause_flag-1];
		break;
	case BATTLE:
		pos_ptr = &bt_pause_message_positions[race_screen_mode*4+pause_flag-1];
		break;
	}
	if (!check)
		defaults_position = start_pause_seq[dummy_game_mode];
	else
		defaults_position = KSEQ_TAR_SEL1;

	pos_buf.x = pos_ptr->x-8;
	pos_buf.y = pos_ptr->y-8 + 13*(ptr->pattern - defaults_position);
	DispOB_vs_ibox_cursor(ptr,&pos_buf);
}


void DispOB_ta_replay(OBJBlock *ptr)
{
	POS_XY pos_buf;
	POS_XY *pos_ptr;
	PAK_GHOST *pak_ptr;
	float mul1;
	char let[5];
	uint time,time_only;
	int i,j,a;

	if (ptr->pattern == KSEQ_TAR_OFF){
		if (ptr->work1 < 30)
			return;
		if ((frame_counter/16)%2){
			int x,y;

			x = 195;
			y = 48;
			mul1 = 0.8;
			j = GetWordLength(ta_result_select_j[5])*mul1;
			graphPtr = FillRect1Color_f(graphPtr,
										x-3,y-15,x+j+3,y+2,
										0,0,0,150);
			SetPalette(1);
			SetWord2_a(x-4,y,ta_result_select_j[5],0,mul1,mul1);
		}
		return;
	}

	if (ptr->pattern == KSEQ_TAR_FADEHF){
		i = ptr->work1;
		a = i*255/140;
	}
	else{
		i = 140;
		a = 255;
	}
	graphPtr = FillRect1Color_f(graphPtr,
								0,0,SCREEN_WD-1,SCREEN_HT-1,
								0,0,0,i);

	mul1 = 1.0;
	gDPSetPrimColor(graphPtr++,0,0, 0,0,0,a);

	SetPalette(3);
	SetWord3_acp(160,80,
				circuit_name_j[map_number_chart[cup_select][circuit_select]],
				0,mul1,mul1);

	mul1 = 0.8;
	switch(ptr->pattern){
	case KSEQ_TAR_FADEHF:
	case KSEQ_TAR_SEL1:
	case KSEQ_TAR_SEL2:
	case KSEQ_TAR_SEL3:
	case KSEQ_TAR_SEL4:
	case KSEQ_TAR_SEL5:
	case KSEQ_TAR_SEL6:
		mul1 = 0.8;
		SetPalette(2);
		SetWord3_acp(157,96,bestrec_j[0],0,mul1,mul1);
		time = GetRecordTime2(0);
		time_only = time & 0x000fffff;
		kawano_itoa_m(time_only,let);
		SetWord4_ap(127,109,let,0,mul1,mul1);
		SetWord2_ap(142,109,"'",0,mul1,mul1);
		kawano_itoa_s(time_only,let);
		SetWord4_ap(152,109,let,0,mul1,mul1);
		SetWord2_ap(167,109,"\"",0,mul1,mul1);
		kawano_itoa_c(time_only,let);
		SetWord4_ap(179,109,let,0,mul1,mul1);

		SetWord3_acp(157,124,bestrec_j[1],0,mul1,mul1);
		time = GetRecordLapTime();
		time_only = time & 0x000fffff;
		kawano_itoa_m(time_only,let);
		SetWord4_ap(127,137,let,0,mul1,mul1);
		SetWord2_ap(142,137,"'",0,mul1,mul1);
		kawano_itoa_s(time_only,let);
		SetWord4_ap(152,137,let,0,mul1,mul1);
		SetWord2_ap(167,137,"\"",0,mul1,mul1);
		kawano_itoa_c(time_only,let);
		SetWord4_ap(179,137,let,0,mul1,mul1);

		pos_ptr = &ta_pause_message_positions[0];

		mul1 = 0.75;
		for (i = 0;i < 6;i++){
			SetCursorMessageColor(ptr->pattern - KSEQ_PS_TA1,i,1);
			SetWord2_ap(pos_ptr->x,pos_ptr->y+i*13,
						ta_result_select_j[i+1],0,mul1,mul1);
		}
		break;
	case KSEQ_TAR_G_A1:
	case KSEQ_TAR_G_A2:
	case KSEQ_TAR_G_A3:
	case KSEQ_TAR_G_A4:
	case KSEQ_TAR_G_A5:
	case KSEQ_TAR_G_A6:
		SetPalette(3);
		j = ptr->pattern-KSEQ_TAR_G_A1;
		mul1 = 0.8;
		for(i = 0;i < 7;i++)
			SetWord2_a(77,110+i*13,ta_ghosta_messages_j[j*7 + i],
					   0,mul1,mul1);		
		break;
	case KSEQ_TAR_G_B1:
	case KSEQ_TAR_G_B2:
		SetPalette(1);
		for (i = 0;i < 2;i++)
			SetWord2_a(90,ptr->disp_y+110+i*13,
					   ta_ghostb_messages_j[i],0,mul1,mul1);
		mul1 = 0.75;
		for (i = 0;i < 2;i++){
			char let[5];
			SetCursorMessageColor(ptr->pattern - KSEQ_TAR_G_B1,i,1);
			kawano_itoa(i+1,let);
			SetWord2_a(90-ptr->disp_x,150+i*20,let+1,0,mul1,mul1);
			pak_ptr = &pak_ghost[i];
			if (!pak_ptr->e.ghost_flg){
				SetWord2_a(105-ptr->disp_x,150+i*20,ta_ghostb_messages_j[2],
						   0,mul1,mul1);
			}
			else{
				int a;

				a = pak_ptr->e.ghost_map;
				SetWord2_a(105-ptr->disp_x,150+i*20,
						   circuit_name_semilong_j[map_number_chart[a/4][a%4]],
						   0,mul1,mul1);
			}
		}
		break;
	case KSEQ_TAR_G_B3:
		SetPalette(3);
		for (i = 0;i < 3;i++)
			SetWord2_a(100,110+i*13,ta_ghostb3_messages_j[i],
					   0,mul1,mul1);		
		break;
	case KSEQ_TAR_G_C1:
	case KSEQ_TAR_G_C2:
		SetPalette(3);
		for (i = 0;i < 3;i++)
			SetWord2_a(85,ptr->disp_y+110+i*13,
					   ta_ghostc_messages_j[i],0,mul1,mul1);
		for (i = 0;i < 2;i++){
			SetCursorMessageColor(ptr->pattern - KSEQ_TAR_G_C1,i,1);
			SetWord2_a(125-ptr->disp_x,155+i*15,ta_ghostc_select_messages_j[i],
					   0,mul1,mul1);
		}
		break;
	case KSEQ_TAR_G_D:
		SetPalette(3);
		for (i = 0;i < 3;i++)
			SetWord2_a(85,110+i*13,ta_ghostd_messages_j[i],
					   0,mul1,mul1);		
		break;
	case KSEQ_TAR_G_D2:
		SetPalette(3);
		for (i = 0;i < 2;i++)
			SetWord2_a(93,110+i*13,ta_ghostd2_messages_j[i],
					   0,mul1,mul1);		
		break;
	default:
		break;
	}

	/* ¥¢¥¤¥Æ¥à¥Ü¥Ã¥¯¥¹¥«¡¼¥½¥ë¤ÎÉ½¼¨ */
	switch(ptr->pattern){
	case KSEQ_TAR_SEL1:
	case KSEQ_TAR_SEL2:
	case KSEQ_TAR_SEL3:
	case KSEQ_TAR_SEL4:
	case KSEQ_TAR_SEL5:
	case KSEQ_TAR_SEL6:
		pos_ptr = &tar_select_cursor_position[ptr->pattern - KSEQ_TAR_SEL1];
		break;
	case KSEQ_TAR_G_B1:
	case KSEQ_TAR_G_B2:
		pos_ptr = &tar_ghostb_cursor_position[ptr->pattern - KSEQ_TAR_G_B1];
		break;
	case KSEQ_TAR_G_C1:
	case KSEQ_TAR_G_C2:
		pos_ptr = &tar_ghostc_cursor_position[ptr->pattern - KSEQ_TAR_G_C1];
		break;
	default:
		return;
	}
	pos_buf.x = pos_ptr->x;
	pos_buf.y = pos_ptr->y;
	DispOB_vs_ibox_cursor(ptr,&pos_buf);

}


void DispOB_info_3p(OBJBlock *ptr)
{
	char *moji;
	float mul1;

#if 1
	if (kwradarsw == 1)
		return;
#endif
	gDPSetPrimColor(graphPtr++,0,0,	0,0,0,ptr->work1);
	moji = cup_name[cup_level];
	SetPalette(5);
	mul1 = 0.85;
	SetWord3_acp(ptr->disp_x+65,ptr->disp_y+160,moji,0,mul1,1.0);

	moji = circuit_name[map_number];
	SetPalette(map_number%4);
	SetWord3_acp(ptr->disp_x+65,ptr->disp_y+195,moji,0,0.65,0.85);

	//SetPalette(race_level%4);
	//SetWord2_a(ptr->disp_x+50,ptr->disp_y+215,
	//			class_name[popup_status[players-1][play_mode[players-1]]],
	//			0,0.8,0.8);
}

void DispOB_gp_lose(OBJBlock *ptr)
{
	float mul1;
	int i;
	POS_XY *pos_ptr;
	POS_XY pos_buf;
	int x,y;

	x = 140;
	y = 150;
	mul1 = 1.0;
	if (!ptr->pattern){
		graphPtr = FillRect1Color_f(graphPtr,
									0,0,SCREEN_WD-1,SCREEN_HT-1,
									0,0,0,ptr->work1);
		SetPalette(3);
		gDPSetPrimColor(graphPtr++,0,0, 0,0,0,ptr->work1*255/100);
		for (i = 0;i < 2;i++)
			SetWord2_ap(x,y+i*20,ta_result_select_j[i*3+1],0,mul1,mul1);
	}
	else{
		graphPtr = FillRect1Color_f(graphPtr,
									0,0,SCREEN_WD-1,SCREEN_HT-1,
									0,0,0,100);
		for (i = 0;i < 2;i++){
			SetCursorMessageColor(ptr->pattern - KSEQ_GPL_SELECT1,i,3);
			SetWord2_a(x,y+i*20,ta_result_select_j[i*3+1],0,mul1,mul1);
		}
	}

	if (ptr->pattern >= KSEQ_GPL_SELECT1){
		//pos_ptr = &vs_result_cursor_position[ptr->pattern - KSEQ_GPL_SELECT1];
		pos_buf.x = x - 8;
		pos_buf.y = y - 8 + (ptr->pattern - KSEQ_GPL_SELECT1)*20;
		DispOB_vs_ibox_cursor(ptr,&pos_buf);
	}
	if (ptr->work2 > 0){
		graphPtr = FillRectBlack(graphPtr,0,0,319,ptr->work2);
		graphPtr = FillRectBlack(graphPtr,0,239-ptr->work2,319,239);
	}
}

void DispOB_vs_result(OBJBlock *ptr)
{
	char *moji;
	float mul1;
	int a,i;
	POS_XY *pos_ptr;

	if (!ptr->pattern){
		graphPtr = FillRect1Color_f(graphPtr,
									0,0,SCREEN_WD-1,SCREEN_HT-1,
									0,0,0,ptr->work1);
		SetPalette(5);
		gDPSetPrimColor(graphPtr++,0,0, 0,0,0,ptr->work1*255/100);
		SetWord3_acp(160/*ptr->disp_x+80*/,ptr->disp_y+30,
					vs_result_title_j[game_mode/3],0,1.0,1.0);
	}
	else{
		graphPtr = FillRect1Color_f(graphPtr,
									0,0,SCREEN_WD-1,SCREEN_HT-1,
									0,0,0,100);
		SetPalette(5);
		SetWord3_ac(160/*ptr->disp_x+80*/,ptr->disp_y+30,
					vs_result_title_j[game_mode/3],0,1.0,1.0);
	}

	switch(ptr->pattern){
	case KSEQ_VS_FADEIN:
	case KSEQ_VS_FACEIN:
		a = 0;
		break;
	case KSEQ_VS_POINTIN:
		a = ptr->work1;
		break;
	default:
		a = 255;
		break;
	}
	gDPSetPrimColor(graphPtr++,0,0, 0,0,0,a);
		
	switch(players){
	case 2:
		DispOB_vs_point2P(ptr);
		break;
	case 3:
		DispOB_vs_point3P(ptr);
		break;
	case 4:
		DispOB_vs_point4P(ptr);
		break;
	default:
		break;
	}

	if (ptr->pattern >= KSEQ_VS_SELECT0){
		mul1 = 0.8;
		for (i = 0;i < 4;i++){
			SetCursorMessageColor(ptr->pattern - KSEQ_VS_SELECT0,i,1);
			SetWord2_a(105,174 + i*15,ta_result_select_j[i+1],0,mul1,mul1);
		}
		pos_ptr = &vs_result_cursor_position[ptr->pattern - KSEQ_VS_SELECT0];
		//SetWord2_a(pos_ptr->x,pos_ptr->y,"+",0,mul1,mul1);		
		DispOB_vs_ibox_cursor(ptr,pos_ptr);
	}
}

void DispOB_vs_ibox_cursor(OBJBlock *ptr,POS_XY *pos_ptr)
{
	Mtx *m_ptr;
	float fbuf;
	static float ib_rot_x,ib_rot_y,ib_rot_z;
	static float ib_rot_dx,ib_rot_dy,ib_rot_dz;

	m_ptr = &dynamicp->effectmodeling[effectcount];
	if (ptr->workf1 > 1.5)
		ptr->workf1 *= 0.95;
	else
		ptr->workf1 = 1.5;
	fbuf = ptr->workf1;
	ib_rot_dx = fbuf*3*ptr->pattern2;
	ib_rot_dy = fbuf*4;
	ib_rot_dz = fbuf*2;

	ib_rot_x += ib_rot_dx;
	ib_rot_y += ib_rot_dy;
	ib_rot_z += ib_rot_dz;
	if (ib_rot_x > 360)
		ib_rot_x - 360;
	if (ib_rot_y > 360)
		ib_rot_y - 360;
	if (ib_rot_z > 360)
		ib_rot_z - 360;
	fbuf = 1.2;
	guScale(m_ptr,
			fbuf, fbuf, fbuf);
	guRotate(m_ptr+1,ib_rot_y,0,1,0);
	guMtxCatL(m_ptr,m_ptr+1,m_ptr);
	guRotate(m_ptr+1,ib_rot_z,0,0,1);
	guMtxCatL(m_ptr,m_ptr+1,m_ptr);
	guRotate(m_ptr+1,ib_rot_x,1,0,0);
	guMtxCatL(m_ptr,m_ptr+1,m_ptr);

	guTranslate(m_ptr+1,pos_ptr->x,pos_ptr->y,0);
	guMtxCatL(m_ptr,m_ptr+1,m_ptr);

	gSPMatrix (graphPtr++,
			   K0_TO_PHYS((u32) &(dynamicp->effectmodeling[effectcount++])),
			   G_MTX_MODELVIEW|G_MTX_LOAD|G_MTX_NOPUSH);
	gSPClearGeometryMode(graphPtr++,G_LIGHTING/*|G_ZBUFFER*/);
	gDPSetCombineMode(graphPtr++,G_CC_MODULATERGBA, G_CC_MODULATERGBA);
	gDPSetBlendMask(graphPtr++,0xff);
 	//gDPSetRenderMode(graphPtr++,G_RM_ZB_CLD_SURF,G_RM_ZB_CLD_SURF2);
 	gDPSetRenderMode(graphPtr++,G_RM_CLD_SURF,G_RM_CLD_SURF2);
	gSPDisplayList(graphPtr++,itembox_grp_box);
}

void DispOB_vs_point2P(OBJBlock *ptr)
{
	POS_XY *pos_ptr;
	int i;
	float mul1;
	char let[5];
	char *wl_ptr;
	int loser_flg;
	unsigned char *wc;

	mul1 = 1.0;
	for (i = 0;i < players;i++){
		pos_ptr = &vs_face_target_position[/*(players-2)*4 +*/ i];
		loser_flg = 0;
		switch(game_mode){
		case VSBATTLE:
			if (ogawa_rank[i])
				loser_flg = 1;
			wc = &wincount2p[i];
			break;
		case BATTLE:
			if (win_kart != i)
				loser_flg = 1;
			wc = &battlewincount2p[i];
			break;
		}
		wl_ptr = win_lose_j[loser_flg];
		if (loser_flg)
			SetPalette(0);
		else
			SetPalette(frame_counter%3);
			
		kawano_itoa2(*wc,let);
		SetWord4_ap(pos_ptr->x+16,pos_ptr->y + 117,let,0,mul1,mul1);

		pos_ptr = &vs_result_winlose_position[i];
		//SetPalette(2);
		//SetWord2_ap(pos_ptr->x,pos_ptr->y,wl_ptr,0,0.65,mul1);	
		SetWord3_acp(pos_ptr->x,pos_ptr->y,wl_ptr,0,0.65,mul1);	
	}
	mul1 = 1.0;
	pos_ptr = &vs_face_target_position[0];
	SetPalette(0);
	SetWord4_ap(158,pos_ptr->y + 109,"¡¼",0,mul1,mul1);
		
}

void DispOB_vs_point3P(OBJBlock *ptr)
{
	int i;

	for (i = 0;i < players;i++){
		switch(game_mode){
		case VSBATTLE:
			DispOB_vs_point123(3,i,wincount3p);
			break;
		case BATTLE:
			DispOB_bt_point(3,i,battlewincount3p);
			break;
		}
	}
}

void DispOB_vs_point4P(OBJBlock *ptr)
{
	int i;

	for (i = 0;i < players;i++){
		switch(game_mode){
		case VSBATTLE:
			DispOB_vs_point123(4,i,wincount4p);
			break;
		case BATTLE:
			DispOB_bt_point(4,i,battlewincount4p);
			break;
		}
	}
}

void DispOB_bt_point(int num1,int num2,uchar *wc_ptr)
{
	POS_XY *pos_ptr;
	float mul1;
	char let[5];
	int i;
	int loser_flg;
	int wc;

	pos_ptr = &vs_face_target_position[(num1-2)*4 + num2];
	loser_flg = 0;
	if (win_kart != num2)
		loser_flg = 1;
	wc = *(wc_ptr+num2);

	if (loser_flg)
		SetPalette(0);
	else
		SetPalette(frame_counter%3);

	//mul1 = 1.0;
	mul1 = 0.75;
	kawano_itoa2(wc,let);
	SetWord4_ap(pos_ptr->x+32-32*mul1/2,pos_ptr->y + 117,let,0,mul1,mul1);

}

void DispOB_vs_point123(int num1,int num2,uchar *wc_ptr)
{
	POS_XY *pos_ptr;
	float mul1;
	char let[5];
	int my_ranking,i;

	mul1 = 0.8;
	pos_ptr = &vs_face_target_position[(num1-2)*4 + num2];
	my_ranking = ogawa_rank[num2];
	i = 0;

	if (i == my_ranking)
		SetPalette(frame_counter%3);
	else
		SetPalette(3);
	SetWord4_ap(pos_ptr->x + 4,pos_ptr->y + 90,"1 £ó ¡¼",0,mul1,mul1);
	kawano_itoa(*(wc_ptr+3*num2),let);
	SetWord4_ap(pos_ptr->x+45,pos_ptr->y + 90,let,0,mul1,mul1);

	i++;
	if (i == my_ranking)
		SetPalette(frame_counter%3);
	else
		SetPalette(0);
	SetWord4_ap(pos_ptr->x + 4,pos_ptr->y + 105,"2 £î ¡¼",0,mul1,mul1);
	kawano_itoa(*(wc_ptr+3*num2+1),let);
	SetWord4_ap(pos_ptr->x+45,pos_ptr->y + 105,let,0,mul1,mul1);

	i++;
	if (i == my_ranking)
		SetPalette(frame_counter%3);
	else
		SetPalette(2);
	SetWord4_ap(pos_ptr->x + 4,pos_ptr->y + 120,"3 £ò ¡¼",0,mul1,mul1);
	kawano_itoa(*(wc_ptr+3*num2+2),let);
	SetWord4_ap(pos_ptr->x+45,pos_ptr->y + 120,let,0,mul1,mul1);

}

void DispOB_ta_lostghost(OBJBlock *ptr)
{
	int i,step;
	float mul1;
	int l_1,l_2;
	int x,y;

	mul1 = 0.45;
	x = 195;
	y = 44;

	switch(ptr->pattern){
	case 1:
		l_1 = GetWordLength(ta_lost_ghost_message_j[0])*mul1;
		l_2 = GetWordLength(ta_lost_ghost_message_j[1])*mul1;
		if (l_1 < l_2)
			l_1 = l_2;
		graphPtr = FillRect1Color_f(graphPtr,
									x-3,y-10,x+l_1+3,y+13,
									0,0,0,150);
		//if ((ptr->work1/16)%4){
			step = 384 - (ptr->work1%32)*8;
			if (step > 255)
				step = 255;
			gDPSetPrimColor(graphPtr++,0,0, 0,0,0,step);
			SetPalette(2);
			for (i = 0;i < 2;i++)
				SetWord2_ap(x-3,y+i*10,ta_lost_ghost_message_j[i],0,mul1,mul1);
		//}
		break;
	default:
		break;
	}
}

void DispOB_ending1_halffade(OBJBlock *ptr)
{
	if (!ptr->pattern)
		graphPtr = FillRect1Color_f(graphPtr,
									0,0,SCREEN_WD-1,SCREEN_HT-1,
									0,0,0,ptr->work1);
	else
		graphPtr = FillRect1Color_f(graphPtr,
									0,0,SCREEN_WD-1,SCREEN_HT-1,
									0,0,0,100);
}

void DispOB_ending1_message1(OBJBlock *ptr)
{
	float mul1;
	int l_1,l_2;

	mul1 = 1.0;
	l_1 = (GetWordLength(cup_name[cup_select])*mul1+10)/2;
	l_2 = (GetWordLength(class_name[race_level])*mul1+10)/2;
	SetPalette(3);
	SetWord3_ac(ptr->disp_x-l_2,ptr->disp_y,cup_name[cup_select],
				0,mul1,mul1);
	SetPalette(3);
	SetWord3_ac(ptr->disp_x+l_1,ptr->disp_y,class_name_j[race_level],
				0,mul1,mul1);

	
}

void DispOB_ending1_message2(OBJBlock *ptr)
{
	float mul1;
	int l_1,l_2;
	int num;

	num = resultstat.rank;
	mul1 = 0.75;
	if (num > 2){
		SetPalette(3);
		SetWord3_ac(ptr->disp_x,ptr->disp_y,ending_message2[4],
					0,mul1,mul1);
	}
	else{
		l_1 = ((GetWordLength(ending_message2[0])+5)*mul1)/2;
		l_2 = ((GetWordLength(ending_message2[num+1])+5)*mul1)/2;
		SetPalette(3);
		SetWord3_ac(ptr->disp_x-l_2,ptr->disp_y,ending_message2[0],
					0,mul1,mul1);
		SetPalette(3);
		SetWord3_ac(ptr->disp_x+l_1,ptr->disp_y,ending_message2[num+1],
					0,mul1,mul1);
	}


	
}

void DispOB_ending1_message3(OBJBlock *ptr)
{
	float mul1;
	int i;

	mul1 = 1.3;
	if (resultstat.rank < 3)
		i = 0;
	else
		i = 1;

	SetPalette(4);
	SetWord3_ac(ptr->disp_x,ptr->disp_y,ending_message3[i],0,mul1,mul1);

	
}

void DispOB_ending1_message4(OBJBlock *ptr)
{
	float mul1;
	int l_1,l_2;
	char let[5];
	int num;

	num = resultstat.rank+1;
	mul1 = 1.2;
	kawano_itoa2(resultstat.rank+1,let);
	l_1 = ((GetWordLength(ending_message4[0])+5)*mul1)/2;
	l_2 = ((GetWordLength(ending_message4[num])+5)*mul1)/2;
	SetPalette(5);
	SetWord3_ac(ptr->disp_x-l_2,ptr->disp_y,ending_message4[0],0,mul1,mul1);
	
	SetPalette(frame_counter % 3);
	SetWord3_ac(ptr->disp_x+l_1,ptr->disp_y,ending_message4[num],0,mul1,mul1);
	kawano_itoa(num,let);
	mul1 = 2.0;
	SetWord4_a(ptr->disp_x+l_1-24,ptr->disp_y,let+1,0,mul1,mul1);

	
}

void DispOB_staffroll_messages(OBJBlock *ptr)
{
	ENDING_DATA *e_ptr;
	int num;
	char **c_ptr;

	num = ptr->kind - KO_SR_A1;
	e_ptr = &ending_data[num];
#if 0
	if (race_level == 3)
		c_ptr = &ending_names_kana[num];
	else
#endif
		c_ptr = &ending_names[num];

	SetPalette(e_ptr->color);
	switch(e_ptr->type){
	case 0:
	default:
		SetWord3_a(ptr->disp_x,ptr->disp_y,*c_ptr,
				   ptr->work1*e_ptr->mul,ptr->workf1*e_ptr->mul,e_ptr->mul);
		break;
	case 1:
		SetWord2_a(ptr->disp_x,ptr->disp_y,*c_ptr,
				   ptr->work1*e_ptr->mul,ptr->workf1*e_ptr->mul,e_ptr->mul);
		break;
	}
}










//
//¾®¤µ¤¤Ê¸»úÍÑitoa
//
void kawano_itoa(int num,char *ptr)
{
	int a;
	a = num/10;
	*ptr = 48 + a;
	a = num%10;
	*(ptr+1) = 48 + a;
	*(ptr+2) = '\0';
}

void kawano_itoa_nodata(char *ptr)
{
	*ptr = '-';
	*(ptr+1) = '-';
	*(ptr+2) = '\0';
}

//
//¥¿¥¤¥àÊÑ´¹ÍÑitoa(Ê¬)
//
void kawano_itoa_m(int num,char *ptr)
{
	if (num >= 600000)
		kawano_itoa_nodata(ptr);
	else
		kawano_itoa(num/6000,ptr);
}

//
//¥¿¥¤¥àÊÑ´¹ÍÑitoa(ÉÃ)
//
void kawano_itoa_s(int num,char *ptr)
{
	if (num >= 600000)
		kawano_itoa_nodata(ptr);
	else
		kawano_itoa((num/100)%60,ptr);
}

//
//¥¿¥¤¥àÊÑ´¹ÍÑitoa(1/100ÉÃ)
//
void kawano_itoa_c(int num,char *ptr)
{
	if (num >= 600000)
		kawano_itoa_nodata(ptr);
	else
		kawano_itoa(num%100,ptr);
}

//
//Âç¤­¤¤Ê¸»úÍÑitoa
//
void kawano_itoa2(int num,char *ptr)
{
	int a;
	a = num/10;
	*ptr = -93;
	*(ptr+1) = 0x30 + a - 128;
	a = num%10;
	*(ptr+2) = -93;
	*(ptr+3) = 0x30 + a - 128;
	*(ptr+4) = '\0';
}

void doOBJBlock(int pri_flg)
{
	OBJBlock *ptr;
	int i,j;
	int operate_flg;

	for (i = 0;i < OBJ_BLOCK_MAX;i++){
		ptr = &obj_block[i];
		operate_flg = 0;
		switch(ptr->kind){/* ºÇÁ°ÌÌ¤È¤½¤ì°Ê³°¤Î½èÍý¤ËÊ¬¤±¤ë */
		case KO_GAME_PAUSE:
		case KO_NOCONTROLLER:
		case KO_TITLE_TIME:
			if (pri_flg)
				operate_flg = 1;
			break;
		default:
			if (!pri_flg)
				operate_flg = 1;
			break;
		}
		if (!operate_flg)
			continue;
		switch(ptr->kind){
		case 0:
			break;
		case KO_NINTEN_LOGO:
#if DL_KARTLOGO
			if      ( logo_timer < 80 )  logo_yang_speed = 3; 
			else if ( logo_timer < 90 ){ if ( logo_delay_size < 1.0 ) logo_delay_size += 0.1; logo_yang_speed += 0.1; }
			else if ( logo_timer < 160 )  logo_yang_speed += 0.1;
			else if ( logo_timer < 400 )  logo_yang_speed += 0.3;
			logo_rot_y -= logo_yang_speed;
			logo_timer++;
#else
			logo_rot_y -= 3;
#endif
			if (logo_rot_y < -360)
				logo_rot_y += 360;
			ptr->work1++;
			if (ptr->work1 == 180/*40*/){
			    SetFadeOutWhite(40/*20*/);
				Na_SE_Fadeout(100);
			    k_bg_number_next = 0;
			}
			if (ptr->work2 && (ptr->work1 > 2)){
				ptr->work2 = 0;
				Na_System_Start(SE_LOGO);
			}
			break;
		case KO_CHECKER_FLAG:
			break;
		case KO_CP_CSCOLOR:
			DOB_cp_cscolor(ptr);
			break;
		case KO_CP_MES2:
			DOB_cp_mes2(ptr);
			break;
		case KO_CP_GNOTE:
			DOB_cp_gnote(ptr);
			break;
		case KO_TITLE:
			//DOB_Title();
			break;
		case KO_TITLE2:
		case KO_TITLE3:
			break;
		case KO_TITLE_TIME:
			switch(ptr->pattern){
			case 0:
				if (contOR->status & CONT_R){
					ptr->pattern = 1;
					Na_System_Start(SE_MAP_CHANGE);
				}
				else
					ptr->disp_on = 0;
				break;
			case 1:
			default:
				ptr->disp_on = 1;
				break;
			}
			break;
		case KO_NOCONTROLLER:
			break;
		case KO_GSEL_BACK:
			break;
		case KO_GSEL_LOGO:
			DOB_gsel_start(ptr);
			break;
		case KO_GSEL_OPTION:
		case KO_GSEL_RECORD:
			switch(gsel_mode){
			case GSEL_NUMBER:
			case GSEL_OPTION:
			case GSEL_RECORD:
				DOB_gsel_number(ptr);
				break;
			case GSEL_MODE_SELECT:
			case GSEL_POPUP:
			case GSEL_POPUP2:
			case GSEL_OK:
			case GSEL_OK2:
				DOB_gsel_mode(ptr);
				break;
			default:
				break;
			}
			break;
		case KO_GSEL_OK:
			DOB_gsel_start(ptr);
			DOB_sel_ok(ptr);
			break;
		case KO_GSEL_1P:
		case KO_GSEL_2P:
		case KO_GSEL_3P:
		case KO_GSEL_4P:
			switch(gsel_mode){
			case GSEL_NUMBER:
			case GSEL_OPTION:
			case GSEL_RECORD:
				DOB_gsel_number(ptr);
				break;
			case GSEL_MODE_SELECT:
			case GSEL_POPUP:
			case GSEL_POPUP2:
			case GSEL_OK:
			case GSEL_OK2:
			//case GSEL_OPTION:
			//case GSEL_RECORD:
				DOB_gsel_mode(ptr);
				break;
			default:
				break;
			}
			DOB_gsel_move(ptr);
			break;
		case KO_GSEL_50CC:
		case KO_GSEL_100CC:
		case KO_GSEL_150CC:
		case KO_GSEL_PRO:
		case KO_GSEL_ITEMOFF:
		case KO_GSEL_ITEMON:
		case KO_GSEL_TRY:
		//case KO_GSEL_GHOST:
		case KO_GSEL_DATA:
			DOB_gsel_gp(ptr);
			break;
		case KO_GSEL_CAUTION:
			DOB_gsel_caution(ptr);
			break;
		case KO_PSEL_1P:
		case KO_PSEL_2P:
		case KO_PSEL_3P:
		case KO_PSEL_4P:
			DOB_psel_cursor1(ptr);
			break;
		case KO_PSEL_MA:
		case KO_PSEL_LU:
		case KO_PSEL_PE:
		case KO_PSEL_KI:
		case KO_PSEL_YO:
		case KO_PSEL_KA:
		case KO_PSEL_WA:
		case KO_PSEL_KU:
			DOB_psel_character1(ptr);
			switch(ptr->kind){
			//case KO_PSEL_MA:
			//case KO_PSEL_LU:
			//case KO_PSEL_KI:
			//	DOB_psel_anime_mario(ptr,ptr->kind - KO_PSEL_MA);
			//	break;
			case KO_PSEL_MA:
			case KO_PSEL_LU:
			case KO_PSEL_PE:
			case KO_PSEL_KI:
			case KO_PSEL_YO:
			case KO_PSEL_KA:
			case KO_PSEL_WA:
			case KO_PSEL_KU:
				DOB_psel_anime_kuppa(ptr);
				break;
			}
			switch(psel_mode){
			case PSEL_SELECT:
				DOB_psel_turn_in(ptr);
				break;
			case PSEL_OK:
			case PSEL_OK2:
				DOB_psel_turn_out(ptr);
				break;
			}
			DOB_psel_anime_priority(ptr);
			break;
		case KO_MSEL_OK:
		case KO_PSEL_OK:
			DOB_sel_ok(ptr);
			break;
		case KO_MSEL_KCUP:
		case KO_MSEL_FCUP:
		case KO_MSEL_SCUP:
		case KO_MSEL_SPCUP:
			DOB_msel_move(ptr);
			switch(msel_mode){
			case MSEL_CUP:
				DOB_msel_cup(ptr);
				break;
			case MSEL_MAP:
			case MSEL_OK:
				DOB_msel_map(ptr);
				break;
			default:
				break;
			}
			//DOB_msel_move(ptr);
			break;
		case KO_MSEL_KNAME:
		case KO_MSEL_FNAME:
		case KO_MSEL_SNAME:
		case KO_MSEL_SPNAME:
		//case KO_MSEL_BATTLE:
			DOB_msel_name(ptr);
			break;
#if 0
		case KO_MSEL_MAP:/* ¸½ºßÉÔ»ÈÍÑ */
			//DOB_msel_anime_map(ptr);
			break;
#endif
		case KO_MSEL_MAPMAN:
			DOB_msel_anime_mapman(ptr);
			break;
		case KO_MSEL_MAP1:
		case KO_MSEL_MAP2:
		case KO_MSEL_MAP3:
		case KO_MSEL_MAP4:
			DOB_msel_anime_map2(ptr);
			break;
		case KO_MSEL_BRECORD:
		case KO_MSEL_BLAP:
			DOB_msel_bbox(ptr);
			break;
		case KO_MSEL_CUP:
			DOB_msel_cup_gsc(ptr);
			break;
		case KO_TSEL_KCUP:
		case KO_TSEL_FCUP:
		case KO_TSEL_SCUP:
		case KO_TSEL_SPCUP:
		case KO_TSEL_TITLE:
			DOB_tsel_cup(ptr);
			break;
		case KO_TSEL_CURSOR:
			DOB_tsel_cursor(ptr);
			break;
		case KO_TSEL_KCUP1:
		case KO_TSEL_KCUP2:
		case KO_TSEL_KCUP3:
		case KO_TSEL_KCUP4:
		case KO_TSEL_FCUP1:
		case KO_TSEL_FCUP2:
		case KO_TSEL_FCUP3:
		case KO_TSEL_FCUP4:
		case KO_TSEL_SCUP1:
		case KO_TSEL_SCUP2:
		case KO_TSEL_SCUP3:
		case KO_TSEL_SCUP4:
		case KO_TSEL_SPCUP1:
		case KO_TSEL_SPCUP2:
		case KO_TSEL_SPCUP3:
		case KO_TSEL_SPCUP4:
			DOB_tsel_map(ptr);
			break;
		case KO_GAME_CUP:
			DOB_game_cup(ptr);
			break;
		case KO_GAME_CIRCUIT:
			DOB_game_circuit(ptr);
			break;
		case KO_MSEL_NOISE:
			DOB_msel_noise(ptr);
			break;
		case KO_GAME_TIME:
			DOB_game_time(ptr);
			break;
		case KO_GAME_POINT:
			DOB_game_point(ptr);
			break;
		case KO_GAME_GPLOSE:
			DOB_gp_lose(ptr);
			break;
		case KO_GAME_INFO3P:
			DOB_info_3p(ptr);
			break;
		case KO_GAME_VS_RES:
			DOB_vs_result(ptr);
			break;
		case KO_GAME_VS_1P:
		case KO_GAME_VS_2P:
		case KO_GAME_VS_3P:
		case KO_GAME_VS_4P:
			DOB_vs_face(ptr);
			break;
		case KO_GAME_TA1:
			DOB_game_ta1(ptr);
			break;
		case KO_GAME_TA2:
			DOB_game_ta2(ptr);
			break;
		case KO_GAME_TA_MES1:
			DOB_game_ta_mes1(ptr);
			break;
		case KO_GAME_PAUSE:
			DOB_game_pause(ptr);
			break;
		case KO_GAME_TA_REP:
			DOB_game_ta_replay(ptr);
			break;
		case KO_DSEL_SNAP:
			DOB_dsel_snap(ptr);
			break;
		case KO_DSEL_SEL1:
			DOB_dsel_sel1(ptr);
			break;
		case KO_DSEL_SEL2:
			DOB_dsel_sel2(ptr);
			break;
		case KO_DSEL_SEL3:
			DOB_dsel_sel3(ptr);
			break;
		case KO_GAME_TA_RANK:/* £Ô£Á£µ°Ì°ÊÆâ¤ËÆþ¤Ã¤¿¤È¤­¥Õ¥¡¥ó¥Õ¥¡¡¼¥ì */
			DOB_ta_fanfare(ptr);
			break;
		case KO_TA_LOSTGHOST:
			DOB_ta_lostghost(ptr);
			break;
		case KO_END1_FADE:
			DOB_ending1_halffade(ptr);
			break;
		case KO_END1_MES1:
		case KO_END1_MES2:
		case KO_END1_MES3:
		case KO_END1_MES4:
			DOB_ending1_message(ptr);
			break;
		case KO_END1_FACE:
			DOB_ending1_face(ptr);
			break;
		case KO_SR_A1:
		case KO_SR_A2:
		case KO_SR_B1:
		case KO_SR_B2:
		case KO_SR_C1:
		case KO_SR_C2:
		case KO_SR_D1:
		case KO_SR_D2:
		case KO_SR_E1:
		case KO_SR_E2:
		case KO_SR_E3:
		case KO_SR_E4:
		case KO_SR_E5:
		case KO_SR_E6:
		case KO_SR_E7:
		case KO_SR_F1:
		case KO_SR_F2:
		case KO_SR_F3:
		case KO_SR_F4:
		case KO_SR_G1:
		case KO_SR_G2:
		case KO_SR_H1:
		case KO_SR_H2:
		case KO_SR_H3:
		case KO_SR_H4:
		case KO_SR_H5:
		case KO_SR_H6:
		case KO_SR_H7:
		case KO_SR_H8:
		case KO_SR_I1:
		case KO_SR_I2:
		case KO_SR_I3:
		case KO_SR_I4:
		case KO_SR_J1:
		case KO_SR_J2:
		case KO_SR_K1:
		case KO_SR_K2:
		case KO_SR_K3:
		case KO_SR_L1:
		case KO_SR_L2:
		case KO_SR_L3:
		case KO_SR_L4:
		case KO_SR_L5:
		case KO_SR_L6:
		case KO_SR_L7:
		case KO_SR_M1:
		case KO_SR_M2:
		case KO_SR_M3:
		case KO_SR_M4:
		case KO_SR_N1:
		case KO_SR_N2:
		case KO_SR_N3:
		case KO_SR_O1:
		case KO_SR_O2:
		case KO_SR_O3:
		case KO_SR_O4:
		case KO_SR_O5:
		case KO_SR_O6:
		case KO_SR_O7:
		case KO_SR_O8:
		case KO_SR_O9:
		case KO_SR_P1:
		case KO_SR_Q1:
		    DOB_staffroll_messages(ptr);
			break;
		//case KO_GAME_TA_SORT:
		//case KO_MSEL_GHOST:
		//case KO_MSEL_BTMES:
		//case KO_OPT_MES:
		default:
			break;
		}
	}

	for (j = 0;j < 16;j++){
		for (i = 0;i < OBJ_BLOCK_MAX;i++){
			ptr = &obj_block[i];
			operate_flg = 0;
			switch(ptr->kind){
			case KO_GAME_PAUSE:
			case KO_NOCONTROLLER:
			case KO_TITLE_TIME:
				if (pri_flg)
					operate_flg = 1;
				break;
			default:
				if (!pri_flg)
					operate_flg = 1;
				break;
			}
			if (!operate_flg)
				continue;
			if (j == ptr->pri)
				DispOBJBlock(ptr);
		}
	}
}

void doOBJBlock1(void)/* ÄÌ¾ï¤Î doOBJBlock ¤Î½èÍý */
{
	doOBJBlock(0);
}

void doOBJBlock2(void)/* °ìÈÖ¼êÁ°¤ËÉ½¼¨¤¹¤ë¤¿¤á¤ÎdoOBJBlock */
{
	doOBJBlock(1);
}


void gsel_sub1(int i,OBJBlock *ptr)
{
	int j,dx,dy;
	int x1;

	if (ptr->work1 >= 32)
		return;
	x1 = (GSEL_PBOX_X+1)*ptr->work1/64;
	dx = ptr->disp_x;
	dy = ptr->disp_y;
	gDPPipeSync(graphPtr++);
	gDPSetRenderMode(graphPtr++,G_RM_OPA_SURF, G_RM_OPA_SURF2);
	gDPSetCombineMode(graphPtr++,G_CC_DECALRGBA, G_CC_DECALRGBA);

	if (i == players-1){
		switch(gsel_mode){
		case GSEL_NUMBER:
		case GSEL_OPTION:
		case GSEL_RECORD:
			graphPtr = FlashRectangle2(graphPtr,dx+x1,dy,
									   GSEL_PBOX_X+dx-x1,GSEL_PBOX_Y+dy);
			break;
		default:
			graphPtr = FillRect1Color(graphPtr,dx+x1,dy,
									  GSEL_PBOX_X+dx-x1,GSEL_PBOX_Y+dy,
									  255,249,220,255);
			break;
		}
	}
	else{
		graphPtr = FillRectBlack(graphPtr,dx+x1,dy,
								 GSEL_PBOX_X+dx-x1,GSEL_PBOX_Y+dy);
	}

	dy += GSEL_MODE_OFFSET_Y;
	for (j = 0;j <= play_mode_max[i];j++){
		if ((play_mode[i] == j)&&(i+1 == players)&&(gsel_mode > GSEL_NUMBER)){
			if (gsel_mode == GSEL_MODE_SELECT){
				graphPtr = FlashRectangle2(graphPtr,dx+x1,dy,
										   GSEL_RBOX_X+dx-x1,GSEL_RBOX_Y+dy);
			}
			else{
				graphPtr = FillRect1Color(graphPtr,dx+x1,dy,
										  GSEL_RBOX_X+dx-x1,GSEL_RBOX_Y+dy,
										  255,249,220,255);
			}
		}
		else{
			graphPtr = FillRect1Color(graphPtr,dx+x1,dy,
									  GSEL_RBOX_X+dx-x1,GSEL_RBOX_Y+dy,
									  1,1,1,255);
		}
		dy += GSEL_RBOX_Y+1;
	}

}
void sel_ok_sub(OBJBlock *ptr)
{
	int i,check;
	int x1,y1;
	TexBlock *tb_ptr;

	check = 0;
	switch(ptr->kind){
	case KO_GSEL_OK:
		tb_ptr = TexList_lgsel_ok;
		switch(gsel_mode){
		case GSEL_OK:
		case GSEL_OK2:
			check = 1;
			break;
		}
		break;
	case KO_PSEL_OK:
		tb_ptr = TexList_lpsel_ok;
		switch(psel_mode){
		case PSEL_OK:
		case PSEL_OK2:
			check = 1;
			break;
		}
		break;
	case KO_MSEL_OK:
		tb_ptr = TexList_lmsel_ok;
		if (msel_mode == MSEL_OK)
			check = 1;
		break;
	default:
		return;
	}
	if (ptr->work1 >= 32)
		return;
	i = (SEL_OKBOX_X+1)*ptr->work1/64;
	tb_ptr = GetTBPointer(tb_ptr);
	x1 = ptr->disp_x + tb_ptr->pos_x;
	y1 = ptr->disp_y + tb_ptr->pos_y;
	if (check){
		graphPtr = FlashRectangle2(graphPtr,x1+i,y1,
								   x1+(SEL_OKBOX_X-1)-i,
								   y1+(SEL_OKBOX_Y-1));
	}
	else{
		graphPtr = FillRect1Color(graphPtr,x1+i,y1,
								  x1+(SEL_OKBOX_X-1)-i,
								  y1+(SEL_OKBOX_Y-1),
								  1,1,1,255);
	}
}

void msel_bbox_sub(OBJBlock *ptr)
{
	graphPtr = FillRect1Color(graphPtr,ptr->disp_x,ptr->disp_y,
							  ptr->disp_x+MSEL_BESTBOX_X,
							  ptr->disp_y+MSEL_BESTBOX_Y,
							  1,1,1,255);
}

void msel_bbox_sub2(OBJBlock *ptr)
{
	char let[5];
	uint a,time_only;
	float mul1,mul2;

	mul1 = 0.6;
	mul2 = 0.65;
	SetPalette(1);
	if (ptr->kind == KO_MSEL_BRECORD)
		a = GetRecordTime2(0);
	else
		a = GetRecordLapTime();
	time_only = a  & 0x000fffff;
	kawano_itoa_m(time_only,let);
	SetWord4_ap(ptr->disp_x+5,ptr->disp_y + 33,let,0,mul1,mul2);
	SetWord2_a(ptr->disp_x+14,ptr->disp_y+33,"'",0,mul1,mul2);
	kawano_itoa_s(time_only,let);
	SetWord4_ap(ptr->disp_x+22,ptr->disp_y + 33,let,0,mul1,mul2);
	SetWord2_a(ptr->disp_x+32,ptr->disp_y+33,"\"",0,mul1,mul2);
	kawano_itoa_c(time_only,let);
	SetWord4_ap(ptr->disp_x+41,ptr->disp_y + 33,let,0,mul1,mul2);
	if (time_only < 600000)
		a >>= 20;
	else
		a = 8;
	SetWord3_a(ptr->disp_x+MSEL_BESTBOX_X-4,ptr->disp_y+33,
			   drivers_name_j[a],0,mul1,mul2);
}

void msel_sub1(int i,OBJBlock *ptr)
{
	int dx,dy;
	int x1;

	if (ptr->work1 >= 32)
		return;
	x1 = (MSEL_CUPBOX_X+1)*ptr->work1/64;
	dx = ptr->disp_x;
	dy = ptr->disp_y;
	gDPPipeSync(graphPtr++);
	gDPSetRenderMode(graphPtr++,G_RM_OPA_SURF, G_RM_OPA_SURF2);
	gDPSetCombineMode(graphPtr++,G_CC_DECALRGBA, G_CC_DECALRGBA);

	if (i == cup_select){
		if (msel_mode == MSEL_CUP){
			graphPtr = FlashRectangle2(graphPtr,dx+x1,dy,
									   dx+MSEL_CUPBOX_X-x1,dy+MSEL_CUPBOX_Y);
		}
		else{
			graphPtr = FillRect1Color(graphPtr,dx+x1,dy,
									  dx+MSEL_CUPBOX_X-x1,dy+MSEL_CUPBOX_Y,
									  255,249,220,255);
		}
	}
	else{
		graphPtr = FillRect1Color(graphPtr,dx+x1,dy,
								  dx+MSEL_CUPBOX_X-x1,dy+MSEL_CUPBOX_Y,
								  1,1,1,255);
	}
}

void msel_sub2(OBJBlock *ptr)
{
	int i,dx,dy;

	dx = ptr->disp_x;
	dy = ptr->disp_y;
	gDPPipeSync(graphPtr++);
	gDPSetRenderMode(graphPtr++,G_RM_OPA_SURF, G_RM_OPA_SURF2);
	gDPSetCombineMode(graphPtr++,G_CC_DECALRGBA, G_CC_DECALRGBA);

	for (i = 0;i < 4;i++){
		if ((i == circuit_select) && (msel_mode > MSEL_CUP)
			&&(game_mode != MARIOGP)){
			if ((msel_mode == MSEL_MAP)||(msel_mode == MSEL_BATTLEMAP)){
				graphPtr = FlashRectangle2(graphPtr,
										   lmsel_circuit_position[i*2].x+dx,
										   lmsel_circuit_position[i*2].y+dy,
										   lmsel_circuit_position[i*2+1].x+dx,
										   lmsel_circuit_position[i*2+1].y+dy);
			}
			else{
				graphPtr = FillRect1Color(graphPtr,
										  lmsel_circuit_position[i*2].x+dx,
										  lmsel_circuit_position[i*2].y+dy,
										  lmsel_circuit_position[i*2+1].x+dx,
										  lmsel_circuit_position[i*2+1].y+dy,
										  255,249,220,255);
			}
		}
		else{
			graphPtr = FillRect1Color(graphPtr,
									  lmsel_circuit_position[i*2].x+dx,
									  lmsel_circuit_position[i*2].y+dy,
									  lmsel_circuit_position[i*2+1].x+dx,
									  lmsel_circuit_position[i*2+1].y+dy,
									  1,1,1,255);
		}	
	}
}

#if 0
//
//¥Þ¥Ã¥×¥»¥ì¥¯¥ÈÌÌ¤Ç¤Î¥Þ¥Ã¥×Ì¾°Å¤¯¤¹¤ë¥ë¡¼¥Á¥ó
// (¸½ºßÉÔ»ÈÍÑ)
void msel_sub3(OBJBlock *ptr)
{
	int i,dx,dy;
	OBJBlock *ptr2;

	ptr2 = Get_OBJBlock_ptr(KO_MSEL_MAP);
	dx = ptr->disp_x;
	dy = ptr->disp_y;
	gDPPipeSync(graphPtr++);
	gDPSetRenderMode(graphPtr++,G_RM_OPA_SURF, G_RM_OPA_SURF2);
	gDPSetCombineMode(graphPtr++,G_CC_DECALRGBA, G_CC_DECALRGBA);

	if (game_mode == MARIOGP){
		for (i = 0;i < 4;i++){
			if (map2circuit_chart[ptr2->work1] != i)
				graphPtr = FillRect1Color_f(graphPtr,
										  lmsel_circuit_position[i*2].x+dx,
										  lmsel_circuit_position[i*2].y+dy,
										  lmsel_circuit_position[i*2+1].x+dx,
										  lmsel_circuit_position[i*2+1].y+dy,
										  0,0,0,100);
		}
	}
}
#endif

//
//¥Þ¥Ã¥×¥»¥ì¥¯¥ÈÌÌ¤Ç¤Î¥Þ¥Ã¥×Ì¾°Å¤¯¤¹¤ë¥ë¡¼¥Á¥ó
//
void msel_sub4(OBJBlock *ptr)
{
	int i,dx,dy;
	OBJBlock *ptr2;

	ptr2 = Get_OBJBlock_ptr(KO_MSEL_MAPMAN);
	dx = ptr->disp_x;
	dy = ptr->disp_y;
	gDPPipeSync(graphPtr++);
	gDPSetRenderMode(graphPtr++,G_RM_OPA_SURF, G_RM_OPA_SURF2);
	gDPSetCombineMode(graphPtr++,G_CC_DECALRGBA, G_CC_DECALRGBA);

	if ((game_mode == MARIOGP)&&(msel_mode != MSEL_OK)){
		for (i = 0;i < 4;i++){
			if ((ptr2->work1%4) != i)
				graphPtr = FillRect1Color_f(graphPtr,
										  lmsel_circuit_position[i*2].x+dx,
										  lmsel_circuit_position[i*2].y+dy,
										  lmsel_circuit_position[i*2+1].x+dx,
										  lmsel_circuit_position[i*2+1].y+dy,
										  0,0,0,100);
		}
	}
}

void msel_battle_sub(OBJBlock *ptr)
{
	float mul1,mul2;

	mul1 = 1.0;
	SetPalette(3);
	SetWord3_ac(152,68,msel_battle_messages_j[0],0,mul1,mul1);
	mul1 = 0.7;
	mul2 = 0.8;
	SetWord2_a(23,88,msel_battle_messages_j[1],0,mul1,mul2);
	SetWord2_a(23,106,msel_battle_messages_j[2],0,mul1,mul2);
	//SetWord4_a(30,106,msel_battle_messages_j[2],4,mul1,mul2);
}

void DispOB_Sub_msel_cup(OBJBlock *ptr)
{
	float mul1;

	mul1 = 0.7;
	if (!ptr->work2)
		return;
	doSeqData2(ptr->sd_number,ptr->disp_x,ptr->disp_y,-1);
	SetPalette(3);
	SetWord2_a(ptr->disp_x + 32,ptr->disp_y + 40,
			   cup_type_names[ptr->work2],0,mul1,mul1);
}

void DispOB_Sub_msel_ghost(OBJBlock *ptr)
{
	float mul1;
	int x,y,i;
	POS_XY *pos_ptr;


	switch(msel_mode){
	case MSEL_CUP:
		for (i = 0;i < 4;i++){
			if (CheckSameMap2(cup_select*4 + i) >= 0){
				pos_ptr = &msel_map4box_position[i];
				x = pos_ptr->x;
				y = pos_ptr->y;
				graphPtr = FillRectBlack(graphPtr,
										 x+32,y,x+63,9+y);
				graphPtr = doTexList5(graphPtr,
									  GetTBPointer(TexList_lgsel_ghost),
									  x+32,y,2);
			}
		}
		break;
	case MSEL_MAP:
	default:
		x = 23;
		y = 112;
		if (CheckSameMap2(cup_select*4 + circuit_select) >= 0){
			graphPtr = FillRectBlack(graphPtr,
									 x+64,y,x+127,17+y);
			graphPtr = doTexList(graphPtr,TexList_lgsel_ghost,
								 x+64,y);
		}
		break;
	}
}

void tsel_sub1(int i,OBJBlock *ptr)
{
	int dx,dy;
	int x1;

	if (ptr->work1 >= 32)
		return;
	x1 = (MSEL_CUPBOX_X+1)*ptr->work1/64;
	dx = ptr->disp_x;
	dy = ptr->disp_y;
	gDPPipeSync(graphPtr++);
	gDPSetRenderMode(graphPtr++,G_RM_OPA_SURF, G_RM_OPA_SURF2);
	gDPSetCombineMode(graphPtr++,G_CC_DECALRGBA, G_CC_DECALRGBA);

#if 0
	if (i == cup_select){
		if (msel_mode == MSEL_CUP){
			graphPtr = FlashRectangle2(graphPtr,dx+x1,dy,
									   dx+MSEL_CUPBOX_X-x1,dy+MSEL_CUPBOX_Y);
		}
		else{
			graphPtr = FillRect1Color(graphPtr,dx+x1,dy,
									  dx+MSEL_CUPBOX_X-x1,dy+MSEL_CUPBOX_Y,
									  255,249,220,255);
		}
	}
#endif
//	else{
		graphPtr = FillRect1Color(graphPtr,dx+x1,dy,
								  dx+MSEL_CUPBOX_X-x1,dy+MSEL_CUPBOX_Y,
								  1,1,1,255);
//	}
}

//------------------------------------
//
// ptr¤ÎOBJ¤ò(x,y)¤Ë¤æ¤Ã¤¯¤ê¶á¤Å¤±¤ë
//
//------------------------------------
void DOB_moving1(OBJBlock *ptr,int x,int y)
{
	DOB_moving1_x(ptr,x);
	DOB_moving1_y(ptr,y);

}

void DOB_moving1_x(OBJBlock *ptr,int x)
{
	int dx;

	dx = x-ptr->disp_x;
	if (dx){
		if (dx > 0){
			dx = dx/4+1;
			if (dx>16)
				dx = 16;
		}
		else{
			dx = dx/4-1;
			if (dx<-16)
				dx = -16;
		}
	}
	ptr->disp_x += dx;
}

void DOB_moving1_y(OBJBlock *ptr,int y)
{
	int dy;

	dy = y-ptr->disp_y;
	if (dy){
		if (dy > 0){
			dy = dy/4+1;
			if (dy>16)
				dy = 16;
		}
		else{
			dy = dy/4-1;
			if (dy<-16)
				dy = -16;
		}
	}
	ptr->disp_y += dy;
}

void DOB_moving2_x(OBJBlock *ptr,int x)
{
	int dx;

	dx = x-ptr->disp_x;
	if (dx){
		if (dx > 0){
			dx = dx/4+1;
			if (dx>16)
				dx = 16;
			if (dx<8)
				dx = 8;
			ptr->disp_x += dx;
			if (ptr->disp_x > x)
				ptr->disp_x = x;
		}
		else{
			dx = dx/4-1;
			if (dx<-16)
				dx = -16;
			if (dx<-8)
				dx = -8;
			ptr->disp_x += dx;
			if (ptr->disp_x < x)
				ptr->disp_x = x;
		}
	}
}

void DOB_moving2_y(OBJBlock *ptr,int y)
{
	int dy;

	dy = y-ptr->disp_y;
	if (dy){
		if (dy > 0){
			dy = dy/4+1;
			if (dy>16)
				dy = 16;
		}
		else{
			dy = dy/4-1;
			if (dy<-16)
				dy = -16;
		}
	}
	ptr->disp_y += dy;
}

void DOB_moving3_x(OBJBlock *ptr,int x)
{
	int dx;

	dx = x-ptr->disp_x;
	if (dx){
		dx = 200/dx;
		if (dx > 0){
			if (dx > 24)
				dx = 24;
			if (dx < 16)
				dx = 16;
			ptr->disp_x += dx;
			if (ptr->disp_x > x)
				ptr->disp_x = x;
		}
		else{
			if (dx < -24)
				dx = -24;
			if (dx > -16)
				dx = -16;
			ptr->disp_x += dx;
			if (ptr->disp_x < x)
				ptr->disp_x = x;
		}
	}
}

//
// »ØÄê¤Îx¤«¤é½ù¡¹¤Ë¤Ï¤Ê¤·¤Æ¤¤¤¯
//
void DOB_moving4_x(OBJBlock *ptr,int x,int plusminus)
{
	int dx;

	if (ptr->disp_x == x){
		ptr->disp_x += plusminus;
		return;
	}

	dx = x-ptr->disp_x;
	if (dx){
		if (dx > 0){
			dx = dx/4+1;
			if (dx>16)
				dx = 16;
		}
		else{
			dx = dx/4-1;
			if (dx<-16)
				dx = -16;
		}
	}
	ptr->disp_x -= dx;
}

//
// CP²èÌÌ¤Î¥«¡¼¥½¥ë¥«¥é¡¼¤Î·èÄê
//
void DOB_cp_cscolor(OBJBlock *ptr)
{
	if (!ptr->pattern)
		ptr->work2 = (uint)(128.0f + 127.0f * (float)(12 - ptr->work1)/12);
	else
		ptr->work2 = (uint)(128.0f + 127.0 * (float)ptr->work1 / (float)12);

	ptr->work1++;
	if (ptr->work1 >= 12){
		ptr->work1 = 0;
		ptr->pattern ^= 1;
	}
}

//
// CP²èÌÌ¤Î¥á¥Ã¥»¡¼¥¸½èÍý
//
void DOB_cp_mes2(OBJBlock *ptr)
{
	int number;

	switch(cp_mode){
	case CP_MENU_OK:
	case CP_MENU_CANCEL:
		number = 1;
		break;
	case CP_MENU_DELETE:
	case CP_MENU_DELETE2:
		number = 5;
		break;
	case CP_MENU_ERROR1:
		number = 2;
		break;
	case CP_MENU_ERROR2:
		number = 3;
		break;
	case CP_MENU_ERROR3:
		number = 4;
		break;
	default:
		number = 0;
		break;
	}
#if 1
	if (number != ptr->pattern){
		ptr->pattern = number;
		ChangeSeqData(ptr->sd_number,0,
					  (TexBlockSeq *)GetVAddress(TBSeq_cp_messages[number]));
	}
#else
	if ((frame_counter%20) == 0){
		ptr->pattern = (frame_counter/20)%6;
		number = ptr->pattern;
		ChangeSeqData(ptr->sd_number,0,
					  (TexBlockSeq *)GetVAddress(TBSeq_cp_messages[number]));
	}
#endif
}

//
// CP²èÌÌ¤Î¥²¡¼¥à¥Î¡¼¥È¤Ë´Ø¤¹¤ë½èÍý
//
void DOB_cp_gnote(OBJBlock *ptr)
{
	int i;

	switch(cp_gnote_scroll_req){
	case 1:
		ptr->disp_y -= 2;
		if (ptr->disp_y <= CP_GNOTE_Y - 10){
			ptr->disp_y = CP_GNOTE_Y;
			cp_gnote_scroll_req = 0;
			for (i = 0;i < 8;i++){
				if (i < 7)
					cp_gnote_number[i] = cp_gnote_number[i+1];
				else{
					if (cp_gnote_number[i-1] == 16 || (!cp_gnote_number[i-1]))
						cp_gnote_number[i] = 0;
					else
						cp_gnote_number[i] = cp_gnote_number[i-1]+1;
				}
			}
			cp_gnote_number[0] = cp_gnote_number[8] = 0;
		}
		break;
	case 2:
		ptr->disp_y += 2;
		if (ptr->disp_y >= CP_GNOTE_Y + 10){
			ptr->disp_y = CP_GNOTE_Y;
			cp_gnote_scroll_req = 0;
			for (i = 8;i > 0;i--){
				if (i > 1)
					cp_gnote_number[i] = cp_gnote_number[i-1];
				else{
					if (cp_gnote_number[i+1] == 1 || (!cp_gnote_number[i+1]))
						cp_gnote_number[i] = 0;
					else
						cp_gnote_number[i] = cp_gnote_number[i+1] - 1;
				}
			}
			cp_gnote_number[0] = cp_gnote_number[8] = 0;
		}
		break;
	default:
		cp_gnote_scroll_req = 0;
		break;
	}
}

//
// »È¤Ã¤Æ¤Ê¤¤¤ß¤¿¤¤
//
#if 0
void DOB_gsel_ok(OBJBlock *ptr)
{
	switch(gsel_mode){
	case GSEL_OK2:
		ptr->work1 = 0;
		break;
	case GSEL_NUMBER:
	case GSEL_POPUP2:
		ptr->work1 = 32;
		break;
	case GSEL_OK:
		if (ptr->work1>0){
			ptr->work1-=ptr->work1/12+2;
			if (ptr->work1 < 0)
				ptr->work1 = 0;
		}
		break;
	default:
		if (ptr->work1<32){
			//ptr->work1+=ptr->work1/12+2;
			ptr->work1+=2;
			if (ptr->work1 >= 32)
				ptr->work1 = 32;
		}
		break;
	}
}
#endif


const char gsel_mode_to_ok_mode[8] = {
	3,3,3,2,0,2,2,1
};
const char psel_mode_to_ok_mode[3] = {
	3,2,0
};
const char msel_mode_to_ok_mode[3] = {
	3,3,2
};
void DOB_sel_ok(OBJBlock *ptr)
{
	int mode;

	switch(ptr->kind){
	case KO_GSEL_OK:
		mode = gsel_mode_to_ok_mode[gsel_mode-1];
		break;
	case KO_MSEL_OK:
		mode = msel_mode_to_ok_mode[msel_mode-1];
		break;
	case KO_PSEL_OK:
		mode = psel_mode_to_ok_mode[psel_mode-1];
		break;
	}
				
	switch(mode){
	case 0:/*Ìá¤Ã¤Æ¤­¤¿¤È¤­ Á´É½¼¨*/
		ptr->work1 = 0;
		break;
	case 1:/*½çÊý¸þ¤Ë¿Ê¤à¤È¤­ Á´¾Ãµî¡ÊGSEL_POPUP2¤Ç»ÈÍÑ¡Ë*/
		ptr->work1 = 32;
		break;
	case 2:/*½ù¡¹¤ËÉ½¼¨*/
		if (ptr->work1>0){
			ptr->work1-=ptr->work1/12+2;
			if (ptr->work1 < 0)
				ptr->work1 = 0;
		}
		break;
	case 3:/*½ù¡¹¤Ë¾Ãµî*/
		if (ptr->work1<32){
			//ptr->work1+=ptr->work1/12+2;
			ptr->work1+=2;
			if (ptr->work1 >= 32)
				ptr->work1 = 32;
		}
		break;
	}
}


void DOB_gsel_number(OBJBlock *ptr)
{
	switch(ptr->pattern){
	case 0:/* default°ÌÃÖ¤Ø */
		DOB_gsel_start(ptr);
		break;
	case 1:/* ²ó¤Ã¤Æ¾Ã¤¨¤Æ¤¤¤¿ÅÓÃæ¤Ç¥­¥ã¥ó¥»¥ë¤µ¤ì,,, */
		DOB_gsel_start(ptr);
		ptr->pattern = 4;
	case 4:/* ,,,¤Þ¤¿²ó¤Ã¤Æ¸½¤ì¤ë */
		if (ptr->work1>0){
			ptr->work1-=ptr->work1/12+2;
			if (ptr->work1 < 0)
				ptr->work1 = 0;
		}
		else{
			ptr->work1 = 0;
			ptr->pattern = 0;
		}
		break;
	case 2:/* ¿¿¤óÃæ¤Ë¤¤¤¿¤±¤Édefault°ÌÃÖ¤ËÌá¤ë */
		ptr->pattern = 3;
		break;
	case 3:/* default°ÌÃÖ¤ËÌá¤Ã¤Æ¤­¤Æ¤ë */
		break;
	default:
		break;
	}
}

void DOB_gsel_mode(OBJBlock *ptr)
{
	int target_x,target_y;

	switch(ptr->pattern){
	case 0:/* default°ÌÃÖ¤Ë¤¤¤ë¤È¤­¤Ë(¹Ô¤¯Á°¤Ë)ÁªÂò¤µ¤ì¤¿¤È¤­ */
		DOB_gsel_start(ptr);
		if (players-1 == ptr->kind - KO_GSEL_1P){
			ptr->pattern = 2;
		}
		else
			ptr->pattern = 1;
		break;
	case 4:/* ²ó¤Ã¤Æ¸½¤ì¤ëÅÓÃæ¤ËÁªÂò¤µ¤ì¤¿¤Î¤Ç¡¢¡¢¡¢¡¢ */
		if (players-1 == ptr->kind - KO_GSEL_1P){
			ptr->pattern = 2;
			ptr->work1 = 0;
			break;
		}
		else
			ptr->pattern = 1;
	case 1:/* ÁªÂò¤µ¤ì¤Ê¤«¤Ã¤¿¤Î¤Ç²ó¤Ã¤Æ¾Ã¤¨¤ë */
		DOB_gsel_start(ptr);
		switch(gsel_mode){
		case GSEL_POPUP2:
		case GSEL_OK2:
			ptr->work1 = 32;
			break;
		default:
			if (ptr->work1<32){
				//ptr->work1+=ptr->work1/12+2;
				ptr->work1+=2;
				if (ptr->work1 >= 32)
					ptr->work1 = 32;
			}
			break;
		}
		break;
	case 2:/* ÁªÂò¤µ¤ì¤Æ¤¤¤ë¤Î¤Ç¿¿¤óÃæ¤Ø°ÜÆ° */
		break;
	case 3:/* default°ÌÃÖ¤ËÌá¤ëÅÓÃæ¤ËÁªÂò¤µ¤ì¤¿¤È¤­¡¢¡¢¡¢ */
		if (players-1 == ptr->kind - KO_GSEL_1P)
			ptr->pattern = 2;
		break;
	default:
		break;
	}
}

void DOB_gsel_move(OBJBlock *ptr)
{
	POS_XY *pos_ptr;

	if (players-1 == ptr->kind - KO_GSEL_1P)
		ptr->pri = 10;
	else
		ptr->pri = 6;

	switch(ptr->pattern){
	case 0:
		break;
	case 1:
	case 4:
		break;
	case 2:/* ÁªÂò¤µ¤ì¤¿¤Î¤Ç¿¿¤óÃæ¤Ë¸þ¤«¤Ã¤Æ°ÜÆ° */
		switch(gsel_mode){
		case GSEL_POPUP2:
		case GSEL_OK2:
			ptr->disp_x = 128;
			ptr->disp_y = 62;
			break;
		default:
			DOB_moving1(ptr,128,62);
			break;
		}
		break;
	case 3:/* ¥­¥ã¥ó¥»¥ë¤µ¤ì¤¿¤Î¤Çdefault°ÌÃÖ¤ËÌá¤ë */
		pos_ptr = &lgsel_default_positions[ptr->kind - KO_GSEL_LOGO];
		DOB_moving1(ptr,pos_ptr->x,pos_ptr->y);
		if ((ptr->disp_x ==pos_ptr->x)&&(ptr->disp_y ==pos_ptr->y)){
			ptr->pattern = 0;
		}
		break;
	default:
		break;
	}
}

void DOB_gsel_gp(OBJBlock *ptr)
{
	OBJBlock *target_ptr;
	POS_XY *pos_ptr;
	int a,b,c,mode;

	switch(ptr->kind){
	case KO_GSEL_50CC:
	case KO_GSEL_100CC:
	case KO_GSEL_150CC:
	case KO_GSEL_PRO:
		a = KO_GSEL_50CC;
		b = GRANDPRIX;
		c = VSBATTLE;
		break;
	case KO_GSEL_ITEMOFF:
	case KO_GSEL_ITEMON:
		a = KO_GSEL_ITEMON;
		b = VSBATTLE;
		c = VSBATTLE;
		break;
	case KO_GSEL_TRY:
	//case KO_GSEL_GHOST:
	case KO_GSEL_DATA:
		a = KO_GSEL_TRY;
		b = TIMEATTACK;
		c = TIMEATTACK;
		break;
	}

	mode = game_mode_chart[players-1][play_mode[players-1]];
	switch(ptr->pattern){
	case 0:
		if ((mode != b) && (mode != c)){
			ptr->disp_on = 0;
			break;
		}
		else{
			ptr->work2 = play_mode[players-1];
			switch(gsel_mode){
			case GSEL_MODE_SELECT:
			case GSEL_POPUP:
			case GSEL_OK:
				ptr->disp_on = 1;
				target_ptr = Get_gsel_cursor_ptr();
				ptr->disp_x = target_ptr->disp_x;
				ptr->disp_y = target_ptr->disp_y + GSEL_MODE_OFFSET_Y
					+ GSEL_POPBOX_Y * play_mode[players-1];
				ptr->work1 = 0;
				ptr->pattern = 1;
				break;
			case GSEL_POPUP2:
			case GSEL_OK2:
				target_ptr = Get_gsel_cursor_ptr();
				pos_ptr = &gsel_popup_positions[ptr->kind - a];
				ptr->disp_x = target_ptr->disp_x + pos_ptr->x;
				ptr->disp_y = target_ptr->disp_y + pos_ptr->y
					+ GSEL_POPBOX_Y * play_mode[players-1];					
				ptr->work1 = ptr->disp_y - target_ptr->disp_y;
				ptr->disp_on = 1;
				ptr->pattern = 2;
				break;
			default:
				ptr->disp_on = 0;
				break;
			}
		}
		break;
	case 1:
		switch(gsel_mode){
		case GSEL_MODE_SELECT:
		case GSEL_POPUP:
		case GSEL_POPUP2:
		case GSEL_OK:
		case GSEL_OK2:
			if ((mode != b) && (mode != c)){
				ptr->disp_on = 0;
				ptr->pattern = 0;
				break;
			}
			if (play_mode[players-1] != ptr->work2)
				ptr->pattern = 0;
			target_ptr = Get_gsel_cursor_ptr();
			ptr->disp_x = target_ptr->disp_x + ptr->work1;
			pos_ptr = &gsel_popup_positions[ptr->kind - a];
			//DOB_moving1(ptr,target_ptr->disp_x+pos_ptr->x,ptr->disp_y);
			DOB_moving2_x(ptr,target_ptr->disp_x+pos_ptr->x);
			ptr->work1 = ptr->disp_x - target_ptr->disp_x;
			if (ptr->work1 == pos_ptr->x){
				ptr->pattern = 2;
				ptr->work1 = ptr->disp_y - target_ptr->disp_y;
			}
			break;
		//case GSEL_NUMBER:
		//case GSEL_OPTION:
		//case GSEL_RECORD:
		default:
			ptr->disp_on = 0;
			ptr->pattern = 0;
			break;
		}
		break;
	case 2:
		switch(gsel_mode){
		case GSEL_MODE_SELECT:
		case GSEL_POPUP:
		case GSEL_POPUP2:
		case GSEL_OK:
		case GSEL_OK2:
			if ((mode != b) && (mode != c)){
				ptr->disp_on = 0;
				ptr->pattern = 0;
				break;
			}
			if (play_mode[players-1] != ptr->work2)
				ptr->pattern = 0;
			target_ptr = Get_gsel_cursor_ptr();
			pos_ptr = &gsel_popup_positions[ptr->kind - a];
			ptr->disp_x = target_ptr->disp_x + pos_ptr->x;
			ptr->disp_y = target_ptr->disp_y + ptr->work1;
			DOB_moving1(ptr,ptr->disp_x,target_ptr->disp_y+pos_ptr->y
						+ GSEL_POPBOX_Y * play_mode[players-1]);
			ptr->work1 = ptr->disp_y - target_ptr->disp_y;
			//if (ptr->work1 == target_x)
			//	ptr->pattern = 2;
			break;
		//case GSEL_NUMBER:
		//case GSEL_OPTION:
		//case GSEL_RECORD:
		default:
			ptr->disp_on = 0;
			ptr->pattern = 0;
			break;
		}
		break;
	default:
		break;
	}
}

void DOB_gsel_start(OBJBlock *ptr)
{
	POS_XY *pos_ptr;

	pos_ptr = &lgsel_default_positions[ptr->kind - KO_GSEL_LOGO];
	switch(gsel_mode){
	case GSEL_POPUP2:
	case GSEL_OK2:
		ptr->disp_x = pos_ptr->x;
		ptr->disp_y = pos_ptr->y;
		break;
	default:
		DOB_moving1(ptr,pos_ptr->x,pos_ptr->y);
		break;
	}
}

void DOB_gsel_caution(OBJBlock *ptr)
{
	int a;
	int check;

	check = 0;

	switch(gsel_mode){
	case GSEL_OPTION:
	case GSEL_RECORD:
	case GSEL_NUMBER:
	case GSEL_MODE_SELECT:
		ptr->pattern = KSEQ_GCAU_OFF;
		break;
	case GSEL_POPUP:
	case GSEL_OK:
	case GSEL_OK2:
	case GSEL_POPUP2:
		if (ptr->pattern == KSEQ_GCAU_OFF){
			if ((players != 1)||(play_mode[players-1] != TIMEATTACK))
				break;

			/* ¥Ñ¥Ã¥¯¤Î¾õÂÖ¤Î¥Á¥§¥Ã¥¯ */
			//PRINTF("a ");

			if (init_pak_flg){
				a = osPfsFindFile(&pfs_k,company_code_kart,game_code_kart,
								   (u8 *)game_name_kart,(u8 *)ext_name_kart,
								   &file_no_kart);
				switch(a){
				case 0:/* ÌäÂê¤Ê¤· */
					ptr->pattern = KSEQ_GCAU_NOMES;
					check = 1;
				case PFS_ERR_INVALID:/* ¥«¡¼¥È¤Î¥²¡¼¥à¥Î¡¼¥È¤Ï¤Ê¤«¤Ã¤¿ */
					break;
				case PFS_ERR_NEW_PACK:
					init_pak_flg = 0;
					break;
				default:
					init_pak_flg = 0;/* ¤È¤ê¤¢¤¨¤º½é´ü²½¤Î¤ä¤êÄ¾¤· */
					break;
				}
			}
			if (check)
				break;
			if (!init_pak_flg){
				if (!getExistPak(0)){/* ¥³¥ó¥È¥í¡¼¥é¥Ñ¥Ã¥¯¤¬¤µ¤µ¤Ã¤Æ¤¤¤Ê¤¤ */
					ptr->pattern = KSEQ_GCAU_MES1;
					break;
				}
				//PRINTF("c ");
				a = osPfsInit(&intMesgQueue, &pfs_k, 0 );
				//PRINTF("d ");
				if (a){
					switch(a){
					case PFS_ERR_NOPACK:/*¥³¥ó¥È¥í¡¼¥é¥Ñ¥Ã¥¯¤¬¤µ¤µ¤Ã¤Æ¤¤¤Ê¤¤ */
					case PFS_ERR_DEVICE:/* ¥³¥ó¥È¥í¡¼¥é¥Ñ¥Ã¥¯¤Ç¤Ï¤Ê¤¤ */
						ptr->pattern = KSEQ_GCAU_MES1;
						break;
					case PFS_ERR_ID_FATAL:/* ¥³¥ó¥È¥í¡¼¥é¥Ñ¥Ã¥¯¤¬²õ¤ì¤Æ¤¤¤ë */
						ptr->pattern = KSEQ_GCAU_MES2;
						break;
					case PFS_ERR_CONTRFAIL:/* ¥¨¥é¡¼ */
					default:
						ptr->pattern = KSEQ_GCAU_MES2;
						break;
					}
					break;
				}
				else
					init_pak_flg = 1;

				/* ¤¹¤Ç¤Ë¥²¡¼¥à¥Î¡¼¥È¤òºî¤Ã¤Æ¤¤¤Ê¤¤¤« */
				//PRINTF("e ");
				if (!osPfsFindFile(&pfs_k,company_code_kart,game_code_kart,
								   (u8 *)game_name_kart,(u8 *)ext_name_kart,
								   &file_no_kart)){
					ptr->pattern = KSEQ_GCAU_NOMES;
					break;/* ¥²¡¼¥à¥Î¡¼¥È¤¬¤¢¤ë¤Î¤ÇÉ½¼¨¤Ê¤· */
				}
			
				/* ¥Õ¥¡¥¤¥ë¿ô¼èÆÀ */
				//PRINTF("f ");
				if (osPfsNumFiles( &pfs_k, &pfsFileNumMax, &pfsFileNum )){
					ptr->pattern = KSEQ_GCAU_MES2;/* ¥¨¥é¡¼ */
					break;
				}
				/* ¶õ¤­¥á¥â¥ê¡¼¼èÆÀ */
				if (osPfsFreeBlocks( &pfs_k, &pfsFreeBlocks )){
					ptr->pattern = KSEQ_GCAU_MES2;/* ¥¨¥é¡¼ */
					break;
				}
				pfsFreeBlocks >>= 8;
			}
			
			//PRINTF("b2 ");
			if (pfsFileNum >= pfsFileNumMax){
				ptr->pattern = KSEQ_GCAU_MES4;/* ¥Õ¥¡¥¤¥ë¤¬¤¤¤Ã¤Ñ¤¤ */
				break;
			}

			//PRINTF("c2 ");
			if (pfsFreeBlocks >= 121){
				//PRINTF("d2 ");
				ptr->pattern = KSEQ_GCAU_NOMES;
				break;/* ¥²¡¼¥à¥Î¡¼¥È¤Ï¤Ê¤¤¤±¤É¥¹¥Ú¡¼¥¹¤Ï¤¢¤ë */
			}
			else{
				//PRINTF("e2 ");
				ptr->pattern = KSEQ_GCAU_MES4;
				break;/* ¥²¡¼¥à¥Î¡¼¥È¤ò¤Ä¤¯¤ë¥¹¥Ú¡¼¥¹¤¬¤Ê¤¤ */
			}
		}
		break;
	default:
		break;
	}
}
		
//
// ¥Þ¥ê¥ª,¥ë¥¤¡¼¥¸¤Î¥¢¥Ë¥á½èÍý
//
void DOB_psel_anime_mario(OBJBlock *ptr,char position)
{
	int number;

	number = ptr->kind - KO_PSEL_MA;
	switch(ptr->pattern2){
	case 0:
		if (Get_psel_cursor_number(position) >= 0){
			ptr->pattern2 = 2;
			ChangeSeqData(ptr->sd_number,0,(TexBlockSeq *)GetVAddress
						  (TBSeq_psel_return[number]));
		}
		break;
	case 2:
		if (Get_psel_cursor_number(position) < 0){
			ptr->pattern2 = 0;
			ChangeSeqData(ptr->sd_number,0,
						  (TexBlockSeq *)GetVAddress(TBSeq_psel[number]));
		}
		break;
	}
}

//
// ¥¯¥Ã¥Ñ¥¢¥Ë¥áÍÑ½èÍý
//
void DOB_psel_anime_kuppa(OBJBlock *ptr)
{
	int pat_change_flg,cursor_number,cursor_flg;
	int number,a;

	number = ptr->kind - KO_PSEL_MA;
	pat_change_flg = 0;
	cursor_number = Get_psel_cursor_number(ptr->kind - KO_PSEL_MA);
	if (cursor_number >= 0)
		cursor_flg = 1;
	else
		cursor_flg = 0;
	switch(ptr->pattern2){
	case 0:
		if (player_cursor_set_flg[cursor_number] && cursor_flg){
			ptr->pattern2 = 1;
			ChangeSeqData(ptr->sd_number,0,
						  (TexBlockSeq *)GetVAddress(TBSeq_psel_p1[number]));
			break;
		}
		a = make_random_limmit(200);
		if (a > 197){
			ptr->pattern2 = 4;
			ChangeSeqData(ptr->sd_number,0,
						  (TexBlockSeq *)GetVAddress(TBSeq_psel_p4[number]));
			break;
		}
		if (a > 196){
			ptr->pattern2 = 5;
			ChangeSeqData(ptr->sd_number,0,
						  (TexBlockSeq *)GetVAddress(TBSeq_psel_p5[number]));
			break;
		}
		break;
	case 1:
		if ((seq_data_block+ptr->sd_number)->pattern >= p1_pat_num[number]){
			ptr->pattern2 = 2;
			ChangeSeqData(ptr->sd_number,0,
						  (TexBlockSeq *)GetVAddress(TBSeq_psel_p2[number]));
			break;
		}
		if (!player_cursor_set_flg[cursor_number] && cursor_flg){
			ptr->pattern2 = 3;
			ChangeSeqData(ptr->sd_number,
						  p3_pat_num[number]
						  -(seq_data_block+ptr->sd_number)->pattern,
						  (TexBlockSeq *)GetVAddress(TBSeq_psel_p3[number]));
		}
		break;
	case 2:
		if (!player_cursor_set_flg[cursor_number] && cursor_flg){
			ptr->pattern2 = 3;
			ChangeSeqData(ptr->sd_number,0,
						  (TexBlockSeq *)GetVAddress(TBSeq_psel_p3[number]));
		}
		break;
	case 3:
		if ((seq_data_block+ptr->sd_number)->pattern >= p3_pat_num[number]){
			ptr->pattern2 = 0;
			ChangeSeqData(ptr->sd_number,0,
						  (TexBlockSeq *)GetVAddress(TBSeq_psel_p0[number]));
			break;
		}
		if (player_cursor_set_flg[cursor_number] && cursor_flg){
			ptr->pattern2 = 1;
			ChangeSeqData(ptr->sd_number,
						  p3_pat_num[number]
						  -(seq_data_block+ptr->sd_number)->pattern,
						  (TexBlockSeq *)GetVAddress(TBSeq_psel_p1[number]));
		}
		break;
	case 4:
	case 5:
		if (player_cursor_set_flg[cursor_number] && cursor_flg){
			ptr->pattern2 = 1;
			ChangeSeqData(ptr->sd_number,0,
						  (TexBlockSeq *)GetVAddress(TBSeq_psel_p1[number]));
			break;
		}
		if (ptr->pattern2 == 4)
			a = p4_pat_num[number];
		else
			a = p5_pat_num[number];
		if ((seq_data_block+ptr->sd_number)->pattern >= a){
			ptr->pattern2 = 0;
			ChangeSeqData(ptr->sd_number,0,
						  (TexBlockSeq *)GetVAddress(TBSeq_psel_p0[number]));
			break;
		}
		break;
	default:
		break;
	}
}

//
// ¥×¥ì¡¼¥ä¡¼¥»¥ì¥¯¥È²èÌÌ¤Ç¤Î,"ok?"»þ¤Î¤½¤ì¤¾¤ì¤ÎÆ°¤­
//
void DOB_psel_turn_out(OBJBlock *ptr)
{
	switch(ptr->pattern){
	case 3:
		ptr->pattern = 1;
	case 1://²ó¤Ã¤Æ¾Ã¤¨¤ë
		switch(psel_mode){
		case PSEL_OK2:
			ptr->work1 = 32;
			break;
		default:
			if (ptr->work1<32){
				ptr->work1+=ptr->work1/12+2;
				if (ptr->work1 >= 32)
					ptr->work1 = 32;
			}
			break;
		}
	case 0:
		if (Get_psel_cursor_number(ptr->kind - KO_PSEL_MA) >= 0){
			ptr->pattern = 2;
			ptr->work1 = 0;
		}
		else
			ptr->pattern = 1;
		break;
	case 2://²èÌÌÃæ±û¤Ø¹Ô¤¯
		//if (ptr->work1>0){
		//	ptr->work1-=ptr->work1/12+2;
		//	if (ptr->work1 < 0)
		//		ptr->work1 = 0;
		//}
		//ptr->work1 = 0;
		break;
	case 4:
		if (Get_psel_cursor_number(ptr->kind - KO_PSEL_MA) >= 0){
			ptr->pattern = 2;
			ptr->work1 = 0;
		}
		break;
	}
}

//
// ¥×¥ì¡¼¥ä¡¼¥»¥ì¥¯¥È²èÌÌ¤Ç¤Î,¥­¥ã¥éÁªÂò»þ¤Î¤½¤ì¤¾¤ì¤ÎÆ°¤­
//
void DOB_psel_turn_in(OBJBlock *ptr)
{
	int i;

	switch(ptr->pattern){
	case 0:
		break;
	case 1://²ó¤Ã¤Æ¾Ã¤¨¤ë
		if (ptr->work1>0){
			ptr->pattern = 3;
		}
		break;
	case 2://Ãæ¿´¤Ø°ÜÆ°
		//ptr->pattern = 0;
		ptr->pattern = 4;
		break;
	case 3://²ó¤Ã¤Æ¸½¤ì¤ë
		if (ptr->work1>0){
			ptr->work1-=ptr->work1/12+2;
			if (ptr->work1 < 0)
				ptr->work1 = 0;
		}
		else{
			ptr->work1 = 0;
			ptr->pattern = 0;
		}
				break;
	case 4://Ãæ¿´¤«¤é°ÜÆ°
		break;
	}
}

//
// ¥×¥ì¡¼¥ä¡¼¥»¥ì¥¯¥È²èÌÌ¤Ç¤Î¤½¤ì¤¾¤ì¤ÎºÂÉ¸Åù¤Î½èÍý
//
void DOB_psel_character1(OBJBlock *ptr)
{
	int dx,dy;
	int position,i,check;
	POS_XY *pos_ptr;

	position = ptr->kind - KO_PSEL_MA;

	switch(ptr->pattern){
	case 0:
		if (psel_mode == PSEL_OK2){
			i = Get_psel_cursor_number(position);
			if (i >= 0){
				pos_ptr = &lpsel_character_ok_position[race_screen_mode*4+i];
				ptr->disp_x = pos_ptr->x;
				ptr->disp_y = pos_ptr->y;
				ptr->pattern = 2;
				ptr->pattern2 = 2;
				ChangeSeqData(ptr->sd_number,0,(TexBlockSeq *)GetVAddress
							  (TBSeq_psel_return[position]));
			}
			break;
		}
	case 1:
	case 3:
		ptr->disp_x = lpsel_cursor_position[position].x;
		ptr->disp_y = lpsel_cursor_position[position].y;
		break;
	case 2:
	case 4:
		if (ptr->pattern == 2){
			i = Get_psel_cursor_number(position);
			if (i >= 0){
				pos_ptr = &lpsel_character_ok_position[race_screen_mode*4+i];
			}
#if ROM==0
			else{
				PRINTF("Cannot get cursor position!!!(kawano)\n");
				while(1);
			}
#endif
		}
		else{
			pos_ptr = &lpsel_cursor_position[position];
			if ((pos_ptr->x == ptr->disp_x)&&(pos_ptr->y == ptr->disp_y)){
				ptr->pattern = 0;
				break;
			}
		}

		if ((ptr->pattern == 2) && (ptr->pattern2 == 1))
			break;
		DOB_moving1(ptr,pos_ptr->x,pos_ptr->y);
		break;
	}
}

//
// ¥«¡¼¥½¥ë¤ÎºÂÉ¸·èÄê(PSEL)
//
void DOB_psel_cursor1(OBJBlock *ptr)
{
	int a,c_num;

	c_num = ptr->kind - KO_PSEL_1P;
	a = player_cursor[c_num];
	ptr->pri = 14 - c_num*2;
	Get_psel_cursor_position(ptr,a-1);
}

//
// ¥×¥ì¡¼¥ä¡¼¥»¥ì¥¯¥È»þ¤Î¥¢¥Ë¥á¤ÎÍ¥Àè½ç°Ì
//
void DOB_psel_anime_priority(OBJBlock *ptr)
{
	int i;
	
	i = Get_psel_cursor_number(ptr->kind - KO_PSEL_MA);
	if (i >= 0)
		ptr->pri = 14 - i*2;
	else
		ptr->pri = 6;
}

//----------------------------------------------------------------
//
// ¥²¡¼¥à¥»¥ì¥¯¥È²èÌÌ¤Ë¤ª¤¤¤Æ,¥«¡¼¥½¥ë¤Î¤¢¤ëOBJ¤Îptr¤òÊÖ¤¹
//
//----------------------------------------------------------------
OBJBlock *Get_gsel_cursor_ptr(void)
{
	OBJBlock *target_ptr;

	target_ptr = obj_block;
	while(1){
		if (target_ptr->kind - KO_GSEL_1P == players-1)
			break;
		target_ptr++;
		if (target_ptr > &obj_block[OBJ_BLOCK_MAX]){
#if ROM==0
			PRINTF("Cannot Get Character Pointer!!(kawano)\n");
#endif
			while(1);
		}
	}
	return(target_ptr);
}

//----------------------------------------------------------------
//
// ¥×¥ì¡¼¥ä¡¼¥»¥ì¥¯¥È²èÌÌ¤Ë¤ª¤¤¤Æ,Ç¤°Õ¤Î¥¢¥Ë¥á¥­¥ã¥é(0-7)¤Îptr¤òÊÖ¤¹
//
//----------------------------------------------------------------
OBJBlock *Get_psel_character_ptr(int num)
{
	OBJBlock *target_ptr;

	target_ptr = obj_block;
	while(1){
		if (target_ptr->kind - KO_PSEL_MA == num)
			break;
		target_ptr++;
		if (target_ptr > &obj_block[OBJ_BLOCK_MAX]){
#if ROM==0
			PRINTF("Cannot Get Character Pointer!!(kawano)\n");
#endif
			while(1);
		}
	}
	return(target_ptr);
}

//----------------------------------------------------------------
//
// Ç¤°Õ¤ÎOBJBlock¤Î¥Ý¥¤¥ó¥¿¤ò¸«¤Ä¤±¤ë
//
//----------------------------------------------------------------
OBJBlock *Get_OBJBlock_ptr(int kind)
{
	OBJBlock *target_ptr;

	target_ptr = obj_block;
	while(1){
		if (target_ptr->kind == kind)
			break;
		target_ptr++;
		if (target_ptr > &obj_block[OBJ_BLOCK_MAX]){
#if ROM==0
			PRINTF("Cannot Get Character Pointer!!(kawano)\n");
#endif
			while(1);
		}
	}
	return(target_ptr);
}

//----------------------------------------------------------------
//
// Ç¤°Õ¤ÎOBJBlock¤Î¥Ý¥¤¥ó¥¿¤ò¸«¤Ä¤±¤ë(¸«¤Ä¤±¤é¤ì¤Ê¤«¤Ã¤¿¤é£°¤òÊÖ¤¹)
//
//----------------------------------------------------------------
OBJBlock *Get_OBJBlock_ptr2(int kind)
{
	OBJBlock *target_ptr;

	target_ptr = obj_block;
	while(1){
		if (target_ptr->kind == kind)
			break;
		target_ptr++;
		if (target_ptr > &obj_block[OBJ_BLOCK_MAX])
			return((OBJBlock *)0);
	}
	return(target_ptr);
}

//----------------------------------------------------------------
//
// ¥×¥ì¡¼¥ä¡¼¥»¥ì¥¯¥È²èÌÌ¤Ë¤ª¤¤¤Æ,Ç¤°Õ¤Î¥­¥ã¥é(0-7)¤Îpattern¤òÊÖ¤¹
//
//----------------------------------------------------------------
int Get_psel_character_pattern(int num)
{
	OBJBlock *target_ptr;

	target_ptr = Get_psel_character_ptr(num);
	return(target_ptr->pattern);
}
//------------------------------------------------------------------------
//
// ¥×¥ì¡¼¥ä¡¼¥»¥ì¥¯¥È²èÌÌ¤Ë¤ª¤¤¤Æ,Ç¤°Õ¤Î¥­¥ã¥é¤ÎxyºÂÉ¸¤ò¸½ºß¤Î¥Ý¥¤¥ó¥¿¤ËÊÖ¤¹
//
//------------------------------------------------------------------------
void Get_psel_cursor_position(OBJBlock *ptr,int num)
{
	OBJBlock *target_ptr;

	target_ptr = Get_psel_character_ptr(num);
	ptr->disp_x = target_ptr->disp_x;
	ptr->disp_y = target_ptr->disp_y;
}

//------------------------------------------------------------
//
// ¤½¤Î¾ì½ê(0-7)¤Ë¥«¡¼¥½¥ë¤¬¤¢¤ë¤«¡¢¤Þ¤¿¤½¤Î¥«¡¼¥½¥ë¤ÎÈÖ¹æ(0-3)¤òÊÖ¤¹
//
//------------------------------------------------------------
int Get_psel_cursor_number(int num)
{
	int i,check;

	i = 0;
	check = 0;
	while(1){
		if (player_cursor[i] == num + 1){
			check++;
			break;
		}
		i++;
		if (i > 3)
			break;
	}
	if (check)
		return(i);
	else
		return(-1);
}

void DOB_msel_cup(OBJBlock *ptr)
{
	POS_XY *pos_ptr;

	switch(ptr->pattern){
	case 1:
		ptr->pattern = 4;
	case 4:
		if (ptr->work1>0){
			ptr->work1-=ptr->work1/12+2;
			if (ptr->work1 < 0)
				ptr->work1 = 0;
		}
		else{
			ptr->work1 = 0;
			ptr->pattern = 0;
		}
		break;
	case 2:
		ptr->pattern = 3;
		break;
	case 3:
	case 0:
	default:
		break;
	}
}

void DOB_msel_map(OBJBlock *ptr)
{
	POS_XY *pos_ptr;

	switch(ptr->pattern){
	case 0:
		if (cup_select == ptr->kind - KO_MSEL_KCUP)
			ptr->pattern = 2;
		else
			ptr->pattern = 1;
		break;
	case 4:
		if (cup_select == ptr->kind - KO_MSEL_KCUP){
			ptr->pattern = 2;
			ptr->work1 = 0;
			break;
		}
		else
			ptr->pattern = 1;
	case 1:
		if (ptr->work1<32){
			//ptr->work1+=ptr->work1/12+2;
			ptr->work1+=2;
			if (ptr->work1 >= 32)
				ptr->work1 = 32;
		}
		break;
	case 2:
		break;
	case 3:
		if (cup_select == ptr->kind - KO_MSEL_KCUP)
			ptr->pattern = 2;
	default:
		break;
	}
}

void DOB_msel_move(OBJBlock *ptr)
{
	POS_XY *pos_ptr;

	if (cup_select == ptr->kind - KO_MSEL_KCUP)
		ptr->pri = 10;
	else
		ptr->pri = 4;

	switch(ptr->pattern){
	case 0:
		pos_ptr = &msel_cupbox_position[ptr->kind - KO_MSEL_KCUP];
		ptr->disp_x = pos_ptr->x;
		ptr->disp_y = pos_ptr->y;
		break;
	case 1:
	case 4:
		break;
	case 2:
		DOB_moving1(ptr,128,59);
		break;
	case 3:
		pos_ptr = &msel_cupbox_position[ptr->kind - KO_MSEL_KCUP];
		DOB_moving1(ptr,pos_ptr->x,pos_ptr->y);
		if ((ptr->disp_x ==pos_ptr->x)&&(ptr->disp_y ==pos_ptr->y)){
			ptr->pattern = 0;
		}
		break;
	default:
		break;
	}
}

void DOB_msel_name(OBJBlock *ptr)
{
	int i;

	i = ptr->kind - KO_MSEL_KNAME;
	if (cup_select == i)
		ptr->disp_on = 1;
	else
		ptr->disp_on = 0;

}

#if 0
//
// ¸½ºßÉÔ»ÈÍÑ¤Î¥Þ¥Ã¥×É½¼¨´ØÏ¢¤Î´Ø¿ô
//
void DOB_msel_anime_map(OBJBlock *ptr)
{
	int change_switch,change_map_number;

	change_switch = 0;
	switch(ptr->pattern){
	case 0://ÄÌ¾ïÉ½¼¨¥â¡¼¥É
		if (map_number != ptr->work1){
			change_switch = 1;
			change_map_number = map_number;
			break;
		}
		if (game_mode == MARIOGP)
			ptr->work2++;
		if (ptr->work2 > 50){
			ptr->pattern = 1;
			ptr->work2 = 0;
			change_switch = 1;
			change_map_number = map_number_chart[cup_select][1];
			break;
		}
		break;
	case 1://GP£´¥³¡¼¥¹¾Ò²ð¥â¡¼¥É
		if (cup_select != map2cup_chart[ptr->work1]){
			change_switch = 1;
			change_map_number = map_number_chart[cup_select][0];
			ptr->pattern = 0;
			ptr->work2 = 0;
			break;
		}
		ptr->work2++;
		if (ptr->work2 > 30){
			ptr->work2 = 0;
			change_switch = 1;
			change_map_number = map_number_chart[cup_select]
				[(map2circuit_chart[ptr->work1]+1)%4];
			break;
		}
		
		break;
	default:
		break;
	}
	if (change_switch){
		ptr->work1 = change_map_number;
		ChangeSeqData(ptr->sd_number,0,
					  (TexBlockSeq *)GetVAddress(
						  TBSeq_msel_map[change_map_number]));
		//SetOBJBlock(KO_MSEL_NOISE,0,0,8);
	}
		
}
#endif

void DOB_msel_anime_map2(OBJBlock *ptr)
{
	if (ptr->work1 != cup_select){
		ptr->work1 = cup_select;
		ChangeSeqData(ptr->sd_number,0,
					  (TexBlockSeq *)GetVAddress(
						  TBSeq_msel_map[map_number_chart
					  [cup_select][ptr->kind - KO_MSEL_MAP1]]));
	}
}

void DOB_msel_anime_mapman(OBJBlock *ptr)
{
	int i,change_switch,change_map_number;
	OBJBlock *mapptr[4];

	change_switch = 0;
	for(i = 0;i < 4;i++)
		mapptr[i] = Get_OBJBlock_ptr(KO_MSEL_MAP1 + i);

	if (game_mode != MARIOGP){
		if (msel_mode != MSEL_CUP){
			ptr->pattern = 0;
			ptr->work2 = 0;
			for(i = 0;i < 4;i++){
				if (i == circuit_select){
					mapptr[i]->disp_on = 1;
					if (ptr->work1 != i){
						ptr->work1 = i;
						change_switch = 1;
					}
				}
				else
					mapptr[i]->disp_on = 0;
			}
		}
		else{/* ¥«¥Ã¥×ÁªÂò»þ¤Ï */
			ptr->pattern = 3;/*£´Ê¬³äÉ½¼¨¥â¡¼¥É*/
			for(i = 0;i < 4;i++){
				mapptr[i]->disp_on = 1;
				mapptr[i]->pri = 6;
			}
		}
	}
	else{
		switch(ptr->pattern){
		case 0:/*ÄÌ¾ïÉ½¼¨¥â¡¼¥É*/
			if (cup_select == ptr->work1/4){
				ptr->work2++;
				if (ptr->work2 > 50){
					ptr->pattern = 1;
					ptr->work2 = 0;
					ptr->work1 = cup_select*4 + 1;
					change_switch = 1;
				}
			}
			else{
				ptr->work2 = 0;
				ptr->work1 = cup_select*4;
				change_switch = 1;
			}
			if (msel_mode == MSEL_OK){
				ptr->pattern = 2;
				ptr->work2 = 0;
				//ptr->work1 = cup_select*4;
			}
			break;
		case 1://GP£´¥³¡¼¥¹¾Ò²ð¥â¡¼¥É
			if (cup_select != ptr->work1/4){
				ptr->pattern = 0;
				ptr->work2 = 0;
				ptr->work1 = 0;
				change_switch = 1;
				break;
			}
			ptr->work2++;
			if (ptr->work2 > 30){
				ptr->work2 = 0;
				ptr->work1 = cup_select*4 + (((ptr->work1%4)+1)%4);
				change_switch = 1;
				break;
			}
			if (msel_mode == MSEL_OK){
				ptr->pattern = 2;
				ptr->work2 = 0;
				//ptr->work1 = cup_select*4 + (((ptr->work1%4)+1)%4);
			}
			break;
		case 2:/*£´Ê¬³äÉ½¼¨°Ü¹Ô¥â¡¼¥É*/
			ptr->work2++;
			if (ptr->work2 > 25){
				ptr->pattern = 3;
				ptr->work2 = 0;
			}
			if (msel_mode != MSEL_OK){
				ptr->pattern = 0;
				ptr->work2 = 0;
				ptr->work1 = 0;
				change_switch = 1;
			}
			break;
		case 3:/*£´Ê¬³äÉ½¼¨¥â¡¼¥É*/
			if (msel_mode != MSEL_OK){
				ptr->pattern = 0;
				ptr->work2 = 0;
				ptr->work1 = 0;
				change_switch = 1;
			}
			break;
		default:
			break;
		}
		switch(ptr->pattern){
		case 0:
		case 1:
			//if (msel_mode != MSEL_OK){
				for(i = 0;i < 4;i++){
					if (i == ptr->work1%4)
						mapptr[i]->disp_on = 1;
					else
						mapptr[i]->disp_on = 0;
					mapptr[i]->pri = 6;
				}
			//}
			break;
		case 2:
			for(i = 0;i < 4;i++){
				if (i == ptr->work1%4)
					mapptr[i]->pri = 6;
				else{
					if (i*5 > ptr->work2)
						mapptr[i]->pri = 4;
					else
						mapptr[i]->pri = 8;
				}
				mapptr[i]->disp_on = 1;
			}
			break;
		case 3:
			for(i = 0;i < 4;i++){
				mapptr[i]->disp_on = 1;
				mapptr[i]->pri = 6;
			}
			break;
		default:
			//for(i = 0;i < 4;i++){
			//	mapptr[i]->disp_on = 1;
			//	mapptr[i]->pri = 6;
			//}
			break;
		}
		//if (change_switch)
		//	SetOBJBlock(KO_MSEL_NOISE,0,0,8);
	}
}

void DOB_msel_bbox(OBJBlock *ptr)
{
	POS_XY *pos_ptr;

	switch(msel_mode){
	case MSEL_CUP:
		pos_ptr = &msel_bestbox_default_position[ptr->kind - KO_MSEL_BRECORD];
		if (ptr->disp_x != pos_ptr->x)
			DOB_moving1_x(ptr,pos_ptr->x);
		break;
	case MSEL_MAP:
	case MSEL_OK:
		pos_ptr = &msel_bestbox_target_position[ptr->kind - KO_MSEL_BRECORD];
		if (ptr->disp_x != pos_ptr->x)
			DOB_moving1_x(ptr,pos_ptr->x);
		break;
	}
}

void DOB_msel_cup_gsc(OBJBlock *ptr)
{
	POS_XY *pos_ptr;

	if (ptr->work1 != cup_select){/* ¥«¡¼¥½¥ë¤òº¸±¦¤ËÆ°¤«¤¹¤´¤È¤Ë... */
		ptr->work1 = cup_select;
		ptr->work2 = GetCupStatus(cup_select,race_level);
		ChangeSeqData(ptr->sd_number,0,(TexBlockSeq *)GetVAddress(
			TBSeq_msel_cups[4*(race_level/2)+(3-ptr->work2)]));
		pos_ptr = &msel_cup_positions[0];
		ptr->disp_x = pos_ptr->x;
		ptr->disp_y = pos_ptr->y;
		//ptr->pattern = 0;
	}
	pos_ptr = &msel_cup_positions[ptr->pattern];
	switch(ptr->pattern){
	case 0:/* default°ÌÃÖ¤Ø */
		DOB_moving1(ptr,pos_ptr->x,pos_ptr->y);
		if (msel_mode == MSEL_OK)
			ptr->pattern = 1;
		break;
	case 1:
		DOB_moving1(ptr,pos_ptr->x,pos_ptr->y);
		if (msel_mode == MSEL_CUP)
			ptr->pattern = 0;
		break;
	default:
		break;
	}
}

void DOB_tsel_cup(OBJBlock *ptr)
{
	POS_XY *pos_ptr;
	int num;

	if (ptr->kind == KO_TSEL_TITLE)
		num = 4;
	else
		num = ptr->kind - KO_TSEL_KCUP;

	pos_ptr = &tsel_cup_positions[num];
	ptr->disp_x = pos_ptr->x;
	ptr->disp_y = pos_ptr->y;
}

void DOB_tsel_cursor(OBJBlock *ptr)
{
	POS_XY *pos_ptr;
	int num;
	
	num = tsel_cursor;

	pos_ptr = &tsel_cup_positions[num/4];
	ptr->disp_x = pos_ptr->x - 2;
	ptr->disp_y = pos_ptr->y + (num%4)*50 +19;

	ptr->work1 += 16;
	if (ptr->work1 >= 256){
		ptr->work1 -= 256;
		ptr->work2 = (ptr->work2+1)%3;
	}
}

void DOB_tsel_map(OBJBlock *ptr)
{
	POS_XY *pos_ptr;
	int num;

	num = ptr->kind - KO_TSEL_KCUP1;

	pos_ptr = &tsel_cup_positions[num/4];
	ptr->disp_x = pos_ptr->x;
	ptr->disp_y = pos_ptr->y+20 + (num%4)*50;
}

void DOB_game_cup(OBJBlock *ptr)
{
	DOB_game_cup_mode1(ptr);

	switch(opening_flag){
	case OPENING_ROLLING_SET:
		ptr->disp_on = 1;
		break;
	case OPENING_STOP_SET:
		if (ptr->disp_y > -20)
			ptr->disp_y -= 2;
		else
			ptr->kind = 0;
		break;
	default:
		if ((game_mode != MARIOGP)||(player_number != 1)||(demo_play_flag))
			ptr->kind = 0;
		else{
			if (ptr->disp_y > -20){
				ptr->disp_y -= 2;
			}
			else{
				ptr->kind = 0;
			}
		}
		break;
	}
		
}

void DOB_game_cup_mode1(OBJBlock *ptr)
{
	switch(ptr->pattern){
	case 0:
		ptr->disp_x = 0;
		ptr->pattern = 1;
		ptr->work2 = 160+GetWordLength(cup_name[cup_level])/2;/*ÌÜÉ¸¤ÎÀßÄê*/
		//break;
	case 1:
		DOB_moving1_x(ptr,ptr->work2);
		ptr->work1 = (ptr->work2 - ptr->disp_x)/4;/*»ú´Ö¤ÎÀßÄê*/
		if (ptr->work1 > 8)
			ptr->work1 = 8;
		ptr->workf1 = 1.0 + 0.05*ptr->work1;/*²£ÇÜÎ¨¤ÎÀßÄê*/
		if (ptr->disp_x >= ptr->work2 - 20){
			ptr->pattern = 2;
			ptr->sd_number = 0;/*ÈÆÍÑ¥«¥¦¥ó¥¿¤È¤·¤Æ»ÈÍÑ*/
		}
		break;
	case 2:
		DOB_moving1_x(ptr,ptr->work2);
		ptr->work1 = (ptr->work2 - ptr->disp_x)/4;
		ptr->sd_number++;
		//ptr->workf1 = 0.8 + 0.007*(ptr->sd_number - 8)*(ptr->sd_number - 8);
		ptr->workf1 = 0.4 + 0.0085*(ptr->sd_number - 10)*(ptr->sd_number - 10);
		if ((ptr->sd_number > 8)&&(ptr->workf1 > 1.0))
			ptr->workf1 = 1.0;
		break;
	default:
		break;
	}
}

void DOB_game_circuit(OBJBlock *ptr)
{
	DOB_game_circuit_mode1(ptr);
	//DOB_game_circuit_mode2(ptr);

	switch(opening_flag){
	case OPENING_ROLLING_SET:
		ptr->disp_on = 1;
		break;
	case OPENING_STOP_SET:
		if (ptr->disp_y < 260)
			ptr->disp_y += 2;
		else
			ptr->kind = 0;
		break;
	default:
		if ((game_mode != MARIOGP)||(player_number != 1)||(demo_play_flag))
			ptr->kind = 0;
		else{
			if (ptr->disp_y < 260){
				ptr->disp_y += 2;
			}
			else{
				ptr->kind = 0;
			}
		}
		break;
	}
}

//
// ¥µ¡¼¥­¥Ã¥ÈÌ¾¿­¤Ó½Ì¤ß¤½¤Î£±
//
void DOB_game_circuit_mode1(OBJBlock *ptr)
{
	switch(ptr->pattern){
	case 0:
		ptr->disp_x = 320;
		ptr->pattern = 1;
		//ptr->work2 = 100;
		ptr->work2 = 160-GetWordLength(circuit_name[map_number])/2;
		//break;
	case 1:
		DOB_moving1_x(ptr,ptr->work2);
		ptr->work1 = (ptr->disp_x - ptr->work2)/4;
		if (ptr->work1 > 8)
			ptr->work1 = 8;
		ptr->workf1 = 1.0 + 0.05*ptr->work1;
		if (ptr->disp_x <= ptr->work2 + 20){
			ptr->pattern = 2;
			ptr->sd_number = 0;
		}
		break;
	case 2:
		DOB_moving1_x(ptr,ptr->work2);
		ptr->work1 = (ptr->disp_x - ptr->work2)/4;
		ptr->sd_number++;
		//ptr->workf1 = 0.8 + 0.007*(ptr->sd_number - 8)*(ptr->sd_number - 8);
		ptr->workf1 = 0.4 + 0.0085*(ptr->sd_number - 10)*(ptr->sd_number - 10);
		if ((ptr->sd_number > 8)&&(ptr->workf1 > 1.0))
			ptr->workf1 = 1.0;
		break;
	default:
		break;
	}
}

//
// ¥µ¡¼¥­¥Ã¥ÈÌ¾¿­¤Ó½Ì¤ß¤½¤Î£²
//
void DOB_game_circuit_mode2(OBJBlock *ptr)
{
	switch(ptr->pattern){
	case 0:
		ptr->disp_x = 320;
		ptr->pattern = 1;
		//break;
	case 1:
		DOB_moving3_x(ptr,100);
		ptr->work1 = (ptr->disp_x-100)/6;
		if (ptr->work1 > 8)
			ptr->work1 = 8;
		ptr->workf1 = 0.6 + 0.07*ptr->work1;
		if (ptr->disp_x == 100){
			ptr->pattern = 2;
			ptr->sd_number = 0;
		}
		break;
	case 2:
		ptr->sd_number++;
		ptr->work1 = 0;
		ptr->workf1 = 1.5 - 0.004*(ptr->sd_number - 15)*(ptr->sd_number - 15);
		if ((ptr->sd_number > 15)&&(ptr->workf1 < 0.8)){
			ptr->pattern = 3;
			ptr->sd_number = 0;
		}
		break;
	case 3:
		ptr->sd_number++;
		ptr->work1 = 0;
		ptr->workf1 = 1.25- 0.002*(ptr->sd_number - 15)*(ptr->sd_number - 15);
		if ((ptr->sd_number > 12)&&(ptr->workf1 < 1.0))
			ptr->workf1 = 1.0;
		break;
	default:
		break;
	}
}

void DOB_msel_noise(OBJBlock *ptr)
{
	ptr->work1++;
	if (ptr->work1 > ptr->work2)
		ptr->kind = 0;
}

void DOB_game_time(OBJBlock *ptr)
{
	int dx;

	switch(ptr->pattern){
	case 0:
		ptr->disp_x = 330;
		ptr->pattern = 1;
		SkipReset();
		break;
	case 1:
		DOB_moving1_x(ptr,160);
		if (ptr->disp_x == 160){
			ptr->pattern = 2;
			ptr->work2 = 0;
		}
		break;
	case 2:
		ptr->work2++;
		if ((k_skip_flg || (ptr->work2 > RT_WAIT_TIME1))
			&& oga_demo_skip_ok_flag){
			ptr->pattern = 3;
			ptr->work1 = ptr->disp_x;/*1¥Õ¥ì¡¼¥à¸å¤ÎºÂÉ¸¤ò³Ð¤¨¤Æ¤ª¤¯*/
			SetOBJBlock(KO_GAME_POINT,0,0,0);
		}
		break;
	case 3:
		ptr->disp_x = ptr->work1;/*1¥Õ¥ì¡¼¥àÁ°¤Ë¤Ä¤¯¤Ã¤¿ºÂÉ¸ÃÍ*/
		if (ptr->work1 < 330){
			if (k_skip_flg)
				ptr->work1 += DP_SCROLL_SPEED_SKIP;
			else
				ptr->work1 += DP_SCROLL_SPEED_NORMAL;
		}
		else
			ptr->kind = 0;
		break;
	default:
		break;
	}
}

void DOB_game_point(OBJBlock *ptr)
{
	extern short rank_to_num[];
	int i,check,dx;

	switch(ptr->pattern){
	case KSEQ_GPP_INIT:/*½é´ü²½*/
		ptr->disp_x = -160;
		ptr->pattern = KSEQ_GPP_MOVE1;
		for(i = 0;i < 4;i++)
			*(additional_point+i) = additional_point_defaults[i];
		ptr->work2 = ptr->disp_x;/*1¥Õ¥ì¡¼¥à¸å¤ÎºÂÉ¸¤ò³Ð¤¨¤Æ¤ª¤¯*/
		break;
	case KSEQ_GPP_MOVE1:/*Äê°ÌÃÖ¤Ç»ß¤á¤ë*/
		ptr->disp_x = ptr->work2;/*1¥Õ¥ì¡¼¥àÁ°¤Ë¤Ä¤¯¤Ã¤¿ºÂÉ¸ÃÍ*/
		if (k_skip_flg)
			dx = DP_SCROLL_SPEED_SKIP;
		else
			dx = DP_SCROLL_SPEED_NORMAL;
		if (ptr->work2 + dx < 0){
			ptr->work2 += dx;
			screen1->posx += dx;
			screen2->posx -= dx;
		}
		else{
			ptr->work2 = 0;
			ptr->disp_x = 0;
			ptr->pattern = KSEQ_GPP_WAIT1;
			ptr->work1 = 0;
			screen1->posx = 240;
			screen2->posx = 80;
		}
		break;
	case KSEQ_GPP_WAIT1:/*¥­¡¼¤ò²¡¤·¤¿¤ê°ìÄê»þ´ÖÎ©¤Ã¤¿¤È¤­*/
		ptr->disp_x = 0;
		ptr->work1++;
		if ((k_skip_flg || (ptr->work1 > DP_WAIT_TIME3))
			&& oga_demo_skip_ok_flag){
			ptr->pattern = KSEQ_GPP_ADD1;
			ptr->work1 = 0;
			ptr->work2 = 0;
		}
		break;
	case KSEQ_GPP_ADD1:/*²Ã»»Ãæ*/
	case KSEQ_GPP_ADD2:
	case KSEQ_GPP_ADD3:
	case KSEQ_GPP_ADD4:
		check = 0;
		i = ptr->pattern - KSEQ_GPP_ADD1;
		ptr->work1++;
		if((!(ptr->work1%3)) || k_skip_flg){
			if (*(additional_point+i)>0){
				*(additional_point+i) = *(additional_point+i) - 1;
				d_points[kart_data[rank_to_num[i]].kart]++;
				Na_System_Start(SE_COIN);
				if (*(additional_point+i) == 0){
					if (!ptr->work2){
						ptr->work2 = 1;
						ptr->work1 = 0;
					}
				}
			}
		}
		if (ptr->work2 && ((ptr->work1 > 10)||(k_skip_flg && (ptr->work1>3))))
			check++;
		if (check){
			ptr->work2 = 0;
			ptr->work1 = 0;
			if (ptr->pattern < KSEQ_GPP_ADD4){
				ptr->pattern++;
			}
			else{
				ptr->pattern = KSEQ_GPP_ADDEND;
			}
		}
		break;
	case KSEQ_GPP_ADDEND:/*²Ã»»½ªÎ»¸å¥­¡¼ÆþÎÏ¤â¤·¤¯¤Ï°ìÄê»þ´Ö·Ð²á¸å*/
		ptr->work1++;
		if (((k_skip_flg&&(ptr->work1 > 10))||(ptr->work1 > DP_WAIT_TIME1))
			&& oga_demo_skip_ok_flag){
			ptr->pattern = KSEQ_GPP_NAMEOFF;
			ptr->work1 = 0;
		}
		break;
	case KSEQ_GPP_NAMEOFF:/*£±°Ì¤«¤é½ç¤Ë¾Ã¤·¤Æ¤¤¤¯*/
		ptr->work1++;
		if (k_skip_flg)
			ptr->work1 += DP_SORT_TIME;
		if (ptr->work1 > DP_SORT_TIME*8){
			ptr->pattern = KSEQ_GPP_NAMEON;
		}
		break;
	case KSEQ_GPP_NAMEON:/*£¸°Ì¤«¤é½ç¤ËÉ½¼¨¤·¤Æ¤¤¤¯*/
		ptr->work1--;
		if (k_skip_flg)
			ptr->work1 -= DP_SORT_TIME;
		if (ptr->work1 <= 0){
			ptr->pattern = KSEQ_GPP_WAIT2;
			ptr->work1 = 0;
			if (circuit_select == 3){
				i = 0;
				while(i < 8){
					if (name_to_num[d_points_rank[i]] < players){
						SaveCupStatus(i);
						break;
					}
					i++;
				}
			}
		}
		break;
	case KSEQ_GPP_WAIT2:/* °ìÄê»þ´ÖÉ½¼¨ */
		ptr->work1++;
		if (ptr->work1 > DP_WAIT_TIME2){
			ptr->pattern = KSEQ_GPP_WAIT3;
			ptr->work1 = 0;
			SkipReset();
		}
		break;
	case KSEQ_GPP_WAIT3:
		if (k_skip_flg && oga_demo_skip_ok_flag){
			ptr->pattern = KSEQ_GPP_MOVE2;
			ptr->work2 = ptr->disp_y;/*1¥Õ¥ì¡¼¥à¸å¤ÎºÂÉ¸¤ò³Ð¤¨¤Æ¤ª¤¯*/
			Na_System_Start(SE_WIPE_RESULT);
		}
		break;
	case KSEQ_GPP_MOVE2:
		ptr->disp_y = ptr->work2;/*1¥Õ¥ì¡¼¥àÁ°¤Ë¤Ä¤¯¤Ã¤¿ºÂÉ¸ÃÍ*/
		if (ptr->work2 < 240/*300*/){
			//if (k_skip_flg)
			//	dx = DP_SCROLL_SPEED_SKIP;
			//else
				dx = DP_SCROLL_SPEED_NORMAL;
			ptr->work2 += dx;
			screen1->posy += dx;
			screen2->posy -= dx;
		}
		else{
			extern ushort finish_zoom_flag;

			ptr->work2 = 0;
			ptr->pattern = KSEQ_GPP_END;
			ptr->work1 = 0;
			screen1->posy = 300;
			screen2->posy = -60;
			finish_zoom_flag = 4;
			Na_Seq_Fadeout(25);
		}
		break;
	case KSEQ_GPP_END:
		break;
	default:
		break;
	}
}

void DOB_info_3p(OBJBlock *ptr)
{
	int dx;

	switch(ptr->pattern){
	case 0:
		ptr->disp_x = 330;
		ptr->pattern = 1;
		ptr->work1 = 255;
		break;
	case 1:
		DOB_moving1_x(ptr,160);
		if (ptr->disp_x == 160){
			ptr->pattern = 2;
		}
		break;
	case 2:
		break;
	case 3:
		if (ptr->work1)
			ptr->work1 -= 51;
		break;
	default:
		break;
	}
}

void DOB_gp_lose(OBJBlock *ptr)
{
	int dx,i;
	OBJBlock *ptr2;

	switch(ptr->pattern){
	case KSEQ_GPL_FADEIN:
		//if (!ptr->work1)
		//	ptr->work2 = 0;
		if (ptr->work2 > 10)
			ptr->work1 += 3;
		if (ptr->work1 >100){
			ptr->pattern = KSEQ_GPL_SELECT1 ;
			ptr->work1 = 0;
		}
		break;
	case KSEQ_GPL_SELECT1:
	case KSEQ_GPL_SELECT2:
		if (FadeChecker())
			break;
		if ((contOR->ontrigger|contOR->stick_ontrigger) & CONT_UP){
			if (ptr->pattern > KSEQ_GPL_SELECT1){
				ptr->pattern--;
				Na_System_Start(SE_CURSOL);
				if (ptr->workf1 < 4.2)
					ptr->workf1 += 4.0;
				ptr->pattern2 = -1;
			}
		}
		if ((contOR->ontrigger|contOR->stick_ontrigger) & CONT_DOWN){
			if (ptr->pattern < KSEQ_GPL_SELECT2){
				ptr->pattern++;
				Na_System_Start(SE_CURSOL);
				if (ptr->workf1 < 4.2)
					ptr->workf1 += 4.0;
				ptr->pattern2 = 1;
			}
		}
		if (contOR->ontrigger & (CONT_A|CONT_START)){
			SetFadeOut(30);
			Na_Seq_Fadeout(25);
			Na_System_Start(SE_MENU_OK_QUIT);
				if (ptr->workf1 < 4.2)
					ptr->workf1 += 4.0;
		}
		break;
	default:
		break;
	}
	if (ptr->work2 < 40)
		ptr->work2++;
}

void DOB_vs_result(OBJBlock *ptr)
{
	int dx,i;
	OBJBlock *ptr2;

	switch(ptr->pattern){
	case KSEQ_VS_FADEIN:
		ptr->work1 += 3;
		if (ptr->work1 >100){
			ptr->pattern = KSEQ_VS_FACEIN;
			ptr->work1 = 0;
			for (i = 0;i < players;i++)
				SetOBJBlock(KO_GAME_VS_1P+i,0,0,5-i);
			//SetOBJBlock(KO_GAME_VS_4P,0,0,5);
			//SetOBJBlock(KO_GAME_MA,60,50,8);
			//SetOBJBlock(KO_GAME_MA,160,50,8);
		}
		break;
	case KSEQ_VS_FACEIN:
		ptr2 = Get_OBJBlock_ptr(KO_GAME_VS_1P);
		if (ptr2->pattern >= 2)
			ptr->pattern = KSEQ_VS_POINTIN;
		break;
	case KSEQ_VS_POINTIN:
		ptr->work1+=32;
		if (ptr->work1 > 255){
			//ptr->pattern = KSEQ_VS_SELECT0;
			if (game_mode == VSBATTLE)/* ¥«¡¼¥½¥ë°ÌÃÖ¤Ï³Ð¤¨¤Æ¤¤¤Þ¤¹ */
				ptr->pattern = vs_result_cursor;
			else
				ptr->pattern = bt_result_cursor;
			ptr->work1 = 0;
		}
		break;
	case KSEQ_VS_SELECT0:
	case KSEQ_VS_SELECT1:
	case KSEQ_VS_SELECT2:
	case KSEQ_VS_SELECT3:
		if (FadeChecker())
			break;
		if ((contOR->ontrigger|contOR->stick_ontrigger) & CONT_UP){
			if (ptr->pattern > KSEQ_VS_SELECT0){
				ptr->pattern--;
				Na_System_Start(SE_CURSOL);
				if (ptr->workf1 < 4.2)
					ptr->workf1 += 4.0;
				ptr->pattern2 = -1;
			}
		}
		if ((contOR->ontrigger|contOR->stick_ontrigger) & CONT_DOWN){
			if (ptr->pattern < KSEQ_VS_SELECT3){
				ptr->pattern++;
				Na_System_Start(SE_CURSOL);
				if (ptr->workf1 < 4.2)
					ptr->workf1 += 4.0;
				ptr->pattern2 = 1;
			}
		}
		if (contOR->ontrigger & (CONT_A|CONT_START)){
			SetFadeOut(30);
			Na_System_Start(SE_MENU_OK);
			if (game_mode == VSBATTLE)/* ¥«¡¼¥½¥ë°ÌÃÖ¤òµ­²±¤·¤Þ¤¹ */
				vs_result_cursor = ptr->pattern;
			else
				bt_result_cursor = ptr->pattern;
			if (ptr->workf1 < 4.2)
				ptr->workf1 += 4.0;
		}
		break;
	default:
		break;
	}
}

void DOB_vs_face(OBJBlock *ptr)
{
	POS_XY *pos_ptr;
	int num,a;
	OBJBlock *ptr2;
	int loser_flg;

	a = driver2pselset[player_driver[ptr->kind - KO_GAME_VS_1P]];
	num = ptr->kind - KO_GAME_VS_1P;
	switch(ptr->pattern){
	case 0:
		//pos_ptr = &vs_face_start_position[(players-2)*4 + num];
		pos_ptr = &vs_face_start_position2;
		ptr->disp_x = pos_ptr->x;
		ptr->disp_y = pos_ptr->y;
		ptr->pattern = 1;
		break;
	case 1:
		//pos_ptr = &vs_face_target_position[(players-2)*4 + ogawa_rank[num]];
		pos_ptr = &vs_face_target_position[(players-2)*4 + num];
		DOB_moving1_x(ptr,pos_ptr->x);
		DOB_moving1_y(ptr,pos_ptr->y);
		if (ptr->disp_x == pos_ptr->x){
			ptr->pattern = 2;
			ptr->work2 = 0;
		}
		break;
	case 2:
		loser_flg = 0;
		switch(game_mode){
		case VSBATTLE:
			if (ogawa_rank[num])
				loser_flg = 1;
			break;
		case BATTLE:
			if (win_kart != num)
				loser_flg = 1;
			break;
		}
		if (loser_flg)
			break;
		ptr->work2++;
		if (ptr->work2 > VS_RESULT_WAIT_TIME1){
			ptr2 = Get_OBJBlock_ptr(KO_GAME_VS_RES);
			if (ptr2->pattern >= KSEQ_VS_POINTIN){
				ChangeSeqData_vs(ptr->sd_number,0,num,
								 (TexBlockSeq *)GetVAddress(TBSeq_psel_p1[a]));
				ptr->pattern = 3;
				Na_SeMute_Off(num);
				Na_PlyVoice_Start(num,player_driver[num]*0x10
								  +SE_VOICE_GOALIN);
			}
		}
		break;
	case 3:
		if ((seq_data_block+ptr->sd_number)->pattern >= p1_pat_num[a]){
			ChangeSeqData_vs(ptr->sd_number,0,num,
						  (TexBlockSeq *)GetVAddress(TBSeq_psel_p2[a]));
			ptr->pattern = 4;
		}
		break;
	case 4:
	default:
		break;
	}
}

void DOB_game_ta1(OBJBlock *ptr)
{
	int dx;

	switch(ptr->pattern){
	case 0:
		ptr->disp_x = 330;
		ptr->pattern = 1;
		SkipReset();
		SetOBJBlock(KO_GAME_TA_SORT,0,0,0);/*¥Ù¥¹¥È¥ì¥³¡¼¥É¤ò¥½¡¼¥È¤¹¤ë*/
		break;
	case 1:
		DOB_moving1_x(ptr,160);
		if (ptr->disp_x == 160){
			ptr->pattern = 2;
			ptr->work2 = 0;
		}
		break;
	case 2:
		ptr->work2++;
		if (ptr->work2 > TA_RESULT_WAIT_TIME1){
			ptr->pattern = 3;
		}
		break;
	case 3:
		if (k_skip_flg){
			SkipReset();
			ptr->pattern = 4;
			ptr->work1 = ptr->disp_x;/*1¥Õ¥ì¡¼¥à¸å¤ÎºÂÉ¸¤ò³Ð¤¨¤Æ¤ª¤¯*/
			SetOBJBlock(KO_GAME_TA2,0,0,0);
		}
		break;
	case 4:
		ptr->disp_x = ptr->work1;/*1¥Õ¥ì¡¼¥àÁ°¤Ë¤Ä¤¯¤Ã¤¿ºÂÉ¸ÃÍ*/
		if (ptr->work1 < 330){
			if (k_skip_flg)
				ptr->work1 += DP_SCROLL_SPEED_SKIP;
			else
				ptr->work1 += DP_SCROLL_SPEED_NORMAL;
		}
		else
			ptr->kind = 0;
		break;
	default:
		break;
	}
}

void DOB_game_ta2(OBJBlock *ptr)
{
	extern short rank_to_num[];
	int i,check,dx,a;

	switch(ptr->pattern){
	case KSEQ_TA_INIT:/*½é´ü²½*/
		ptr->disp_x = -160;
		ptr->pattern = KSEQ_TA_MOVING;
		for(i = 0;i < 4;i++)
			*(additional_point+i) = additional_point_defaults[i];
		ptr->work2 = ptr->disp_x;/*1¥Õ¥ì¡¼¥à¸å¤ÎºÂÉ¸¤ò³Ð¤¨¤Æ¤ª¤¯*/
		break;
	case KSEQ_TA_MOVING:
		ptr->disp_x = ptr->work2;/*1¥Õ¥ì¡¼¥àÁ°¤Ë¤Ä¤¯¤Ã¤¿ºÂÉ¸ÃÍ*/
		if (k_skip_flg)
			dx = DP_SCROLL_SPEED_SKIP;
		else
			dx = DP_SCROLL_SPEED_NORMAL;
		if (ptr->work2 + dx< 0){
			ptr->work2 += dx;
			screen1->posx += dx;
			screen2->posx -= dx;
		}
		else{
			ptr->work2 = 0;
			ptr->disp_x = 0;
			ptr->pattern = ta_result_cursor;/* ¥«¡¼¥½¥ë°ÌÃÖ¤Ï³Ð¤¨¤Æ¤¤¤Þ¤¹ */
			if ((ptr->pattern == KSEQ_TA_SELECT5)&&(lost_ghost == LOST_GHOST))
				ptr->pattern--;
			//ptr->work1 = 0;
			screen1->posx = 240;
			screen2->posx = 80;
		}
		break;
	case KSEQ_TA_SELECT1:
	case KSEQ_TA_SELECT2:
	case KSEQ_TA_SELECT3:
	case KSEQ_TA_SELECT4:
	case KSEQ_TA_SELECT5:
	case KSEQ_TA_SELECT6:
		if (FadeChecker())
			break;
		if ((cont1P->ontrigger|cont1P->stick_ontrigger) & CONT_UP){
			if (ptr->pattern > KSEQ_TA_SELECT1){
				ptr->pattern--;
				if (lost_ghost == LOST_GHOST){/* ¥ê¥×¥ì¥¤ÉÔ²Ä */
					if (ptr->pattern == KSEQ_TA_SELECT5)
						ptr->pattern--;
				}
				Na_System_Start(SE_CURSOL);
				if (ptr->workf1 < 4.2)
					ptr->workf1 += 4.0;
				ptr->pattern2 = -1;
			}
		}
		if ((cont1P->ontrigger|cont1P->stick_ontrigger) & CONT_DOWN){
			if (ptr->pattern < KSEQ_TA_SELECT6){
				ptr->pattern++;
				if (lost_ghost == LOST_GHOST){/* ¥ê¥×¥ì¥¤ÉÔ²Ä */
					if (ptr->pattern == KSEQ_TA_SELECT5)
						ptr->pattern++;
				}
				if ((ptr->pattern == KSEQ_TA_SELECT6)
					&& (ghost_status != GHOST_DRIVE)){/* ¥´¡¼¥¹¥ÈÉÔºß */
						ptr->pattern -= 2;
				}
				else{
					Na_System_Start(SE_CURSOL);
					if (ptr->workf1 < 4.2)
						ptr->workf1 += 4.0;
					ptr->pattern2 = 1;
				}
			}
		}
		if (cont1P->ontrigger & (CONT_A|CONT_START)){
			if (ptr->pattern == KSEQ_TA_SELECT6){
				check = 0;
				//Na_System_Start(SE_DECIDE);
				if (ptr->workf1 < 4.2)
					ptr->workf1 += 4.0;
				if (init_pak_flg){
					a = osPfsFindFile(&pfs_k,company_code_kart,game_code_kart,
									  (u8 *)game_name_kart,(u8 *)ext_name_kart,
									  &file_no_kart);
					switch(a){
					case 0:/* ÌäÂê¤Ê¤· */
						LoadGameNoteKart_data();
						ptr->pattern = KSEQ_TA_GHOSTB1
							+ CheckSameMap(cup_select*4 + circuit_select);
						check = 1;
						Na_System_Start(SE_DECIDE);
						break;
					case PFS_ERR_INVALID:/* ¥«¡¼¥È¤Î¥²¡¼¥à¥Î¡¼¥È¤Ï¤Ê¤«¤Ã¤¿ */
						break;
					case PFS_ERR_NEW_PACK:
						init_pak_flg = 0;
						break;
					default:
						init_pak_flg = 0;/* ¤È¤ê¤¢¤¨¤º½é´ü²½¤Î¤ä¤êÄ¾¤· */
						break;
					}
				}
				if (check)
					break;
				if (!init_pak_flg){
					a = initPak();
					switch(a){
					case -1:/* ¥³¥ó¥È¥í¡¼¥é¥Ñ¥Ã¥¯¤¬¤µ¤µ¤Ã¤Æ¤¤¤Ê¤¤ */
						ptr->pattern = KSEQ_TA_GHOSTA1;
						check = 1;
						break;
					case -2:/* ¥¨¥é¡¼ */
					case -3:
						ptr->pattern = KSEQ_TA_GHOSTA2;
						check = 1;
						break;
					case 0:/* À®¸ù */
						break;
					case PFS_ERR_NOPACK:/*¥³¥ó¥È¥í¡¼¥é¥Ñ¥Ã¥¯¤¬¤µ¤µ¤Ã¤Æ¤¤¤Ê¤¤ */
					case PFS_ERR_DEVICE:/* ¥³¥ó¥È¥í¡¼¥é¥Ñ¥Ã¥¯¤Ç¤Ï¤Ê¤¤ */
						ptr->pattern = KSEQ_TA_GHOSTA1;
						check = 1;
						break;
					case PFS_ERR_ID_FATAL:/* ¥³¥ó¥È¥í¡¼¥é¥Ñ¥Ã¥¯¤¬²õ¤ì¤Æ¤¤¤ë */
						ptr->pattern = KSEQ_TA_GHOSTA2;
						check = 1;
						break;
					case PFS_ERR_CONTRFAIL:/* ¥¨¥é¡¼ */
					default:
						check = 1;
						ptr->pattern = KSEQ_TA_GHOSTA2;
						break;
					}
					if (check){
						Na_System_Start(SE_BUBU);
						break;
					}

					/* ¤¹¤Ç¤Ë¥²¡¼¥à¥Î¡¼¥È¤òºî¤Ã¤Æ¤¤¤Ê¤¤¤« */
					if (!osPfsFindFile(&pfs_k,company_code_kart,game_code_kart,
									   (u8 *)game_name_kart,
									   (u8 *)ext_name_kart,
									   &file_no_kart)){
						LoadGameNoteKart_data();
						ptr->pattern = KSEQ_TA_GHOSTB1
							+ CheckSameMap(cup_select*4 + circuit_select);
						Na_System_Start(SE_DECIDE);
						break;/* ¥²¡¼¥à¥Î¡¼¥È¤¬¤¢¤ë¤Î¤ÇÉ½¼¨¤Ê¤· */
					}			
				}
			
				if (pfsFileNum >= pfsFileNumMax){
					ptr->pattern = KSEQ_TA_GHOSTA4;/* ¥Õ¥¡¥¤¥ë¤¬¤¤¤Ã¤Ñ¤¤ */
					Na_System_Start(SE_BUBU);
					break;
				}

				if (pfsFreeBlocks >= 121){
					ptr->pattern = KSEQ_TA_GHOSTB3;
					ptr->work1 = 0;
					Na_System_Start(SE_DECIDE);
					break;/* ¥²¡¼¥à¥Î¡¼¥È¤Ï¤Ê¤¤¤±¤É¥¹¥Ú¡¼¥¹¤Ï¤¢¤ë */
				}
				else{
					ptr->pattern = KSEQ_TA_GHOSTA4;
					Na_System_Start(SE_BUBU);
					break;/* ¥²¡¼¥à¥Î¡¼¥È¤ò¤Ä¤¯¤ë¥¹¥Ú¡¼¥¹¤¬¤Ê¤¤ */
				}


				break;
			}
			/* ¾å£µ¤Ä¤òÁª¤ó¤À¤È¤­ */
			//SetFadeOut(30);
			ptr->work1 = ptr->pattern;
			ta_result_cursor = ptr->pattern;/* ¥«¡¼¥½¥ë°ÌÃÖ¤òµ­²±¤·¤Þ¤¹ */
			ptr->pattern = KSEQ_TA_END;
			ptr->work2 = ptr->disp_y;/*1¥Õ¥ì¡¼¥à¸å¤ÎºÂÉ¸¤ò³Ð¤¨¤Æ¤ª¤¯*/
			//Na_System_Start(SE_MENU_OK_QUIT);
			Na_System_Start(SE_WIPE_RESULT);
			if (ptr->workf1 < 4.2)
				ptr->workf1 += 4.0;
		}
		break;
	case KSEQ_TA_GHOSTA1:
	case KSEQ_TA_GHOSTA2:
	case KSEQ_TA_GHOSTA3:
	case KSEQ_TA_GHOSTA4:
	case KSEQ_TA_GHOSTA5:/* ¥²¡¼¥à¥Î¡¼¥Èºî¤ê¼ºÇÔ */
	case KSEQ_TA_GHOSTA6:/* Æ±¤¸¥´¡¼¥¹¥È¤ò½ñ¤³¤¦¤È¤·¤¿ */
	case KSEQ_TA_GHOSTD2:/* ¥»¡¼¥Ö¼ºÇÔ */
		if (cont1P->ontrigger & (CONT_A|CONT_B|CONT_START)){
			ptr->pattern = KSEQ_TA_SELECT6;
			Na_System_Start(SE_CANCEL);
			if (ptr->workf1 < 4.2)
				ptr->workf1 += 4.0;
		}
		break;
	case KSEQ_TA_GHOSTB1:
	case KSEQ_TA_GHOSTB2:
		ptr->work2 = ptr->pattern - KSEQ_TA_GHOSTB1;
		if (ptr->work2 != CheckSameMap2(cup_select*4 + circuit_select)){
			if ((cont1P->ontrigger|cont1P->stick_ontrigger) & CONT_UP){
				if (ptr->pattern > KSEQ_TA_GHOSTB1){
					ptr->pattern--;
					Na_System_Start(SE_CURSOL);
					if (ptr->workf1 < 4.2)
						ptr->workf1 += 4.0;
					ptr->pattern2 = -1;
				}
			}
			if ((cont1P->ontrigger|cont1P->stick_ontrigger) & CONT_DOWN){
				if (ptr->pattern < KSEQ_TA_GHOSTB2){
					ptr->pattern++;
					Na_System_Start(SE_CURSOL);
					if (ptr->workf1 < 4.2)
						ptr->workf1 += 4.0;
					ptr->pattern2 = 1;
				}
			}
		}

		if (cont1P->ontrigger & CONT_B){
			ptr->pattern = KSEQ_TA_SELECT6;
			Na_System_Start(SE_CANCEL);
			break;
		}
		if (cont1P->ontrigger & (CONT_A|CONT_START)){
			PAK_GHOST *pak_ptr;

			//ptr->work2 = ptr->pattern - KSEQ_TA_GHOSTB1;
			pak_ptr = &pak_ghost[ptr->work2];
			if (!pak_ptr->e.ghost_flg){/* ¿·µ¬¤Ë¥Ç¡¼¥¿¤ò½ñ¤¯¤È¤­ */
				ptr->pattern = KSEQ_TA_GHOSTD;
				ptr->work1 = 0;
			}
			else{/* °ÊÁ°¤Î¥Ç¡¼¥¿¤¬¤¢¤ë¤È¤­ */
				int value;

				value = CheckSameGhost(ptr->work2);
				if (!value)/* ¥Ñ¥Ã¥¯¤ÎÃæ¿È¤ÈÆ±°ì */
					ptr->pattern = KSEQ_TA_GHOSTA6;
				else
					ptr->pattern = KSEQ_TA_GHOSTC1;
			}
			Na_System_Start(SE_DECIDE);
			if (ptr->workf1 < 4.2)
				ptr->workf1 += 4.0;
		}
		break;
	case KSEQ_TA_GHOSTB3:
		if (ptr->work1 == 1){
			if (makeGameNoteKartOnly()){
				ptr->pattern = KSEQ_TA_GHOSTA5;
				break;
			}
		}
		ptr->work1++;
		if (ptr->work1 >= 2){
			ptr->pattern = KSEQ_TA_GHOSTB1;
			//ptr->work1 = 0;
		}
		break;
	case KSEQ_TA_GHOSTC1:
	case KSEQ_TA_GHOSTC2:
		if ((cont1P->ontrigger|cont1P->stick_ontrigger) & CONT_UP){
			if (ptr->pattern > KSEQ_TA_GHOSTC1){
				ptr->pattern--;
				Na_System_Start(SE_CURSOL);
				if (ptr->workf1 < 4.2)
					ptr->workf1 += 4.0;
				ptr->pattern2 = -1;
			}
		}
		if ((cont1P->ontrigger|cont1P->stick_ontrigger) & CONT_DOWN){
			if (ptr->pattern < KSEQ_TA_GHOSTC2){
				ptr->pattern++;
				Na_System_Start(SE_CURSOL);
				if (ptr->workf1 < 4.2)
					ptr->workf1 += 4.0;
				ptr->pattern2 = 1;
			}
		}
		if (cont1P->ontrigger & CONT_B){
			ptr->pattern = KSEQ_TA_GHOSTB1 + ptr->work2;
			Na_System_Start(SE_CANCEL);
			break;
		}
		if (cont1P->ontrigger & (CONT_A|CONT_START)){
			if (ptr->pattern == KSEQ_TA_GHOSTC2){
				ptr->pattern = KSEQ_TA_GHOSTD;
				ptr->work1 = 0;
				Na_System_Start(SE_DECIDE);
				if (ptr->workf1 < 4.2)
					ptr->workf1 += 4.0;
			}
			else{
				ptr->pattern = KSEQ_TA_GHOSTB1 + ptr->work2;
				Na_System_Start(SE_CANCEL);
			}
		}
		break;
	case KSEQ_TA_GHOSTD:/* ¥»¡¼¥ÖÃæ */
		if (ptr->work1 == 1){
			a = osPfsFindFile(&pfs_k,company_code_kart,game_code_kart,
							  (u8 *)game_name_kart,(u8 *)ext_name_kart,
							  &file_no_kart);
			if (a){
				ptr->pattern = KSEQ_TA_GHOSTD2;
				//ptr->work1 = 0;
				Na_System_Start(SE_BUBU);
				break;
			}
			a = SaveGameNoteKart_ghost(ptr->work2);
			if (a){
				ptr->pattern = KSEQ_TA_GHOSTD2;
				Na_System_Start(SE_BUBU);
				//ptr->work1 = 0;
				break;
			}
		}
		ptr->work1++;
		if (ptr->work1 >= 2){
			ptr->pattern = KSEQ_TA_SELECT6;
			//ptr->work1 = 0;
		}
		break;
	case KSEQ_TA_END:
		ptr->disp_y = ptr->work2;/*1¥Õ¥ì¡¼¥àÁ°¤Ë¤Ä¤¯¤Ã¤¿ºÂÉ¸ÃÍ*/
		if (ptr->work2 < 240/*300*/){
			//if (k_skip_flg)
			//	dx = DP_SCROLL_SPEED_SKIP;
			//else
				dx = DP_SCROLL_SPEED_NORMAL;
			ptr->work2 += dx;
			screen1->posy += dx;
			screen2->posy -= dx;
		}
		else{
			extern ushort finish_zoom_flag;

			switch(ptr->work1){
			case KSEQ_TA_SELECT1:/* ¥ê¥È¥é¥¤ */
				replay_flag = 0;
				retry_flag = 1;
				goto_racing();
				break;
			case KSEQ_TA_SELECT2:/* ¥³¡¼¥¹¥Á¥§¥ó¥¸ */
				goto_mapselect();
				break;
			case KSEQ_TA_SELECT3:/* ¥×¥ì¡¼¥ä¡¼¥Á¥§¥ó¥¸ */
				goto_kartselect();
				break;
			case KSEQ_TA_SELECT4:/* ¤ª¤ï¤ë */
				goto_gameselect();
				//goto_title();
				break;
			case KSEQ_TA_SELECT5:/* ¥ê¥×¥ì¥¤ */
				replay_flag = 1;
				retry_flag = 0;
				goto_racing();
				break;
			}
			ptr->work2 = 0;
			ptr->pattern = KSEQ_TA_END2;/* ¤¢¤È°ì²ó¤À¤±É½¼¨¥ë¡¼¥Á¥ó¤Ø */
			//ptr->work1 = 0;
			screen1->posy = 300;
			screen2->posy = -60;
			finish_zoom_flag = 4;
			Na_Seq_Fadeout(25);
		}
		break;
	case KSEQ_TA_END2:
		ptr->kind = 0;
		break;
	default:
		//PRINTF("pattern:%d ",ptr->pattern);
		break;
	}
}

void DOB_game_pause(OBJBlock *ptr)
{
	int type;
	Controller 	*cont;

	if (pause_flag){
		switch(ptr->pattern){
		case KSEQ_PS_OFF:
			ptr->pattern = start_pause_seq[game_mode];
			break;
		case KSEQ_PS_TA1:
		case KSEQ_PS_TA2:
		case KSEQ_PS_TA3:
		case KSEQ_PS_TA4:
		case KSEQ_PS_TA5:
		case KSEQ_PS_GP1:
		case KSEQ_PS_GP2:
		case KSEQ_PS_VS1:
		case KSEQ_PS_VS2:
		case KSEQ_PS_VS3:
		case KSEQ_PS_VS4:
		case KSEQ_PS_BT1:
		case KSEQ_PS_BT2:
		case KSEQ_PS_BT3:
		case KSEQ_PS_BT4:
			if (FadeChecker())
				break;
			cont = &controller[pause_flag -1];
			if ((cont->ontrigger|cont->stick_ontrigger) & CONT_UP){
				if (ptr->pattern > start_pause_seq[game_mode]){
					ptr->pattern--;
					Na_System_Start(SE_CURSOL);
					if (ptr->workf1 < 4.2)
						ptr->workf1 += 4.0;
					ptr->pattern2 = -1;
				}
			}
			if ((cont->ontrigger|cont->stick_ontrigger) & CONT_DOWN){
				if (ptr->pattern < bottom_pause_seq[game_mode]){
					ptr->pattern++;
					Na_System_Start(SE_CURSOL);
					if (ptr->workf1 < 4.2)
						ptr->workf1 += 4.0;
					ptr->pattern2 = 1;
				}
			}
			if (cont->ontrigger & CONT_B){
				//if (ptr->pattern == KSEQ_PS_TA1){
				//	ptr->pattern = KSEQ_PS_OFF;
				//	pause_flag = 0;
				//	Na_PauseSet(0);
				//}
				//else{
				if (ptr->pattern != start_pause_seq[game_mode]){
					ptr->pattern = start_pause_seq[game_mode];
					Na_System_Start(SE_CANCEL);
					break;
				}
				//}
			}
			if (cont->ontrigger & (CONT_A|CONT_START)){
				if (ptr->pattern == start_pause_seq[game_mode]){
					ptr->pattern = KSEQ_PS_OFF;
					pause_flag = 0;
					load_key_status();/* kimura */
					Na_PauseSet(0);
				}
				else{
					SetFadeOut(30);
					Na_System_Start(SE_MENU_OK_QUIT);
					Na_Seq_Fadeout(60);/* 12/19 for Bando */
					if (ptr->workf1 < 4.2)
						ptr->workf1 += 4.0;
				}
			}
			break;
		}
	}
	else
		ptr->pattern = KSEQ_PS_OFF;
}

void DOB_game_ta_replay(OBJBlock *ptr)
{
	int type;
	int check,a;

	if (ptr->pattern != KSEQ_TAR_OFF)
		two_d_flag = 0;
	switch(ptr->pattern){
	case KSEQ_TAR_OFF:
		if (ptr->work1 < 30)
			ptr->work1++;
		if (cont1P->ontrigger & (CONT_START)){
			ptr->pattern = KSEQ_TAR_SEL5;
			Na_System_Start(SE_PAUSE_ON);
			break;
		}
		if (kwlap[0].goalsw){
			ptr->pattern = KSEQ_TAR_FADEHF;
			ptr->work1 = 0;
		}
		break;
	case KSEQ_TAR_FADEHF:
		ptr->work1 += 3;
		if (ptr->work1 >140)
			ptr->pattern = KSEQ_TAR_SEL5;
		break;
	case KSEQ_TAR_SEL1:
	case KSEQ_TAR_SEL2:
	case KSEQ_TAR_SEL3:
	case KSEQ_TAR_SEL4:
	case KSEQ_TAR_SEL5:
	case KSEQ_TAR_SEL6:
		if (FadeChecker())
			break;
		if ((cont1P->ontrigger|cont1P->stick_ontrigger) & CONT_UP){
			if (ptr->pattern > KSEQ_TAR_SEL1){
				ptr->pattern--;
				Na_System_Start(SE_CURSOL);
				if (ptr->workf1 < 4.2)
					ptr->workf1 += 4.0;
				ptr->pattern2 = -1;
			}
		}
		if ((cont1P->ontrigger|cont1P->stick_ontrigger) & CONT_DOWN){
			if (ptr->pattern < KSEQ_TAR_SEL6){
				ptr->pattern++;
				Na_System_Start(SE_CURSOL);
				if (ptr->workf1 < 4.2)
					ptr->workf1 += 4.0;
				ptr->pattern2 = 1;
			}
		}
		if (cont1P->ontrigger & (CONT_A|CONT_START)){
			if (ptr->pattern == KSEQ_TAR_SEL6){
				check = 0;
				if (ptr->workf1 < 4.2)
					ptr->workf1 += 4.0;
				if (init_pak_flg){
					a = osPfsFindFile(&pfs_k,company_code_kart,game_code_kart,
									  (u8 *)game_name_kart,(u8 *)ext_name_kart,
									  &file_no_kart);
					switch(a){
					case 0:/* ÌäÂê¤Ê¤· */
						LoadGameNoteKart_data();
						ptr->pattern = KSEQ_TAR_G_B1
							+ CheckSameMap(cup_select*4 + circuit_select);
						check = 1;
						break;
					case PFS_ERR_INVALID:/* ¥«¡¼¥È¤Î¥²¡¼¥à¥Î¡¼¥È¤Ï¤Ê¤«¤Ã¤¿ */
						break;
					case PFS_ERR_NEW_PACK:
						init_pak_flg = 0;
						break;
					default:
						init_pak_flg = 0;/* ¤È¤ê¤¢¤¨¤º½é´ü²½¤Î¤ä¤êÄ¾¤· */
						break;
					}
				}
				if (check){
					Na_System_Start(SE_DECIDE);
					break;
				}
				if (!init_pak_flg){
					a = initPak();
					switch(a){
					case -1:/* ¥³¥ó¥È¥í¡¼¥é¥Ñ¥Ã¥¯¤¬¤µ¤µ¤Ã¤Æ¤¤¤Ê¤¤ */
						ptr->pattern = KSEQ_TAR_G_A1;
						check = 1;
						break;
					case -2:/* ¥¨¥é¡¼ */
					case -3:
						ptr->pattern = KSEQ_TAR_G_A2;
						check = 1;
						break;
					case 0:/* À®¸ù */
						break;
					case PFS_ERR_NOPACK:/*¥³¥ó¥È¥í¡¼¥é¥Ñ¥Ã¥¯¤¬¤µ¤µ¤Ã¤Æ¤¤¤Ê¤¤ */
					case PFS_ERR_DEVICE:/* ¥³¥ó¥È¥í¡¼¥é¥Ñ¥Ã¥¯¤Ç¤Ï¤Ê¤¤ */
						ptr->pattern = KSEQ_TAR_G_A1;
						check = 1;
						break;
					case PFS_ERR_ID_FATAL:/* ¥³¥ó¥È¥í¡¼¥é¥Ñ¥Ã¥¯¤¬²õ¤ì¤Æ¤¤¤ë */
						ptr->pattern = KSEQ_TAR_G_A2;
						check = 1;
						break;
					case PFS_ERR_CONTRFAIL:/* ¥¨¥é¡¼ */
					default:
						check = 1;
						ptr->pattern = KSEQ_TAR_G_A2;
						break;
					}
					if (check){
						Na_System_Start(SE_BUBU);
						break;
					}

					/* ¤¹¤Ç¤Ë¥²¡¼¥à¥Î¡¼¥È¤òºî¤Ã¤Æ¤¤¤Ê¤¤¤« */
					if (!osPfsFindFile(&pfs_k,company_code_kart,game_code_kart,
									   (u8 *)game_name_kart,
									   (u8 *)ext_name_kart,
									   &file_no_kart)){
						LoadGameNoteKart_data();
						ptr->pattern = KSEQ_TAR_G_B1
							+ CheckSameMap(cup_select*4 + circuit_select);
						Na_System_Start(SE_DECIDE);
						break;/* ¥²¡¼¥à¥Î¡¼¥È¤¬¤¢¤ë¤Î¤ÇÉ½¼¨¤Ê¤· */
					}			
				}
			
				if (pfsFileNum >= pfsFileNumMax){
					ptr->pattern = KSEQ_TAR_G_A4;/* ¥Õ¥¡¥¤¥ë¤¬¤¤¤Ã¤Ñ¤¤ */
					Na_System_Start(SE_BUBU);
					break;
				}

				if (pfsFreeBlocks >= 121){
					ptr->pattern = KSEQ_TAR_G_B3;
					ptr->work1 = 0;
					Na_System_Start(SE_DECIDE);
					break;/* ¥²¡¼¥à¥Î¡¼¥È¤Ï¤Ê¤¤¤±¤É¥¹¥Ú¡¼¥¹¤Ï¤¢¤ë */
				}
				else{
					ptr->pattern = KSEQ_TAR_G_A4;
					Na_System_Start(SE_BUBU);
					break;/* ¥²¡¼¥à¥Î¡¼¥È¤ò¤Ä¤¯¤ë¥¹¥Ú¡¼¥¹¤¬¤Ê¤¤ */
				}


				break;
			}
			/* ¾å£µ¤Ä¤òÁª¤ó¤À¤È¤­ */
				SetFadeOut(30);
				Na_System_Start(SE_MENU_OK);
				Na_Seq_Fadeout(25);
				Na_SE_Fadeout(25);
				if (ptr->workf1 < 4.2)
					ptr->workf1 += 4.0;
		}
		break;
	case KSEQ_TAR_G_A1:
	case KSEQ_TAR_G_A2:
	case KSEQ_TAR_G_A3:
	case KSEQ_TAR_G_A4:
	case KSEQ_TAR_G_A5:/* ¥²¡¼¥à¥Î¡¼¥Èºî¤ê¼ºÇÔ */
	case KSEQ_TAR_G_A6:/* Æ±¤¸¥´¡¼¥¹¥È¤ò½ñ¤³¤¦¤È¤·¤¿ */
	case KSEQ_TAR_G_D2:/* ¥»¡¼¥Ö¼ºÇÔ */
		if (cont1P->ontrigger & (CONT_A|CONT_B|CONT_START)){
			ptr->pattern = KSEQ_TAR_SEL6;
			Na_System_Start(SE_CANCEL);
			if (ptr->workf1 < 4.2)
				ptr->workf1 += 4.0;
		}
		break;
	case KSEQ_TAR_G_B1:
	case KSEQ_TAR_G_B2:
		ptr->work2 = ptr->pattern - KSEQ_TAR_G_B1;
		if (ptr->work2 != CheckSameMap2(cup_select*4 + circuit_select)){
			if ((cont1P->ontrigger|cont1P->stick_ontrigger) & CONT_UP){
				if (ptr->pattern > KSEQ_TAR_G_B1){
					ptr->pattern--;
					Na_System_Start(SE_CURSOL);
					if (ptr->workf1 < 4.2)
						ptr->workf1 += 4.0;
					ptr->pattern2 = -1;
				}
			}
			if ((cont1P->ontrigger|cont1P->stick_ontrigger) & CONT_DOWN){
				if (ptr->pattern < KSEQ_TAR_G_B2){
					ptr->pattern++;
					Na_System_Start(SE_CURSOL);
					if (ptr->workf1 < 4.2)
						ptr->workf1 += 4.0;
					ptr->pattern2 = 1;
				}
			}
		}

		if (cont1P->ontrigger & CONT_B){
			ptr->pattern = KSEQ_TAR_SEL6;
			Na_System_Start(SE_CANCEL);
			break;
		}
		if (cont1P->ontrigger & (CONT_A|CONT_START)){
			PAK_GHOST *pak_ptr;

			pak_ptr = &pak_ghost[ptr->work2];
			if (!pak_ptr->e.ghost_flg){/* ¿·µ¬¤Ë¥Ç¡¼¥¿¤ò½ñ¤¯¤È¤­ */
				ptr->pattern = KSEQ_TAR_G_D;
				ptr->work1 = 0;
			}
			else{/* °ÊÁ°¤Î¥Ç¡¼¥¿¤¬¤¢¤ë¤È¤­ */
				int value;

				value = CheckSameGhost(ptr->work2);
				if (!value)/* ¥Ñ¥Ã¥¯¤ÎÃæ¿È¤ÈÆ±°ì */
					ptr->pattern = KSEQ_TAR_G_A6;
				else
					ptr->pattern = KSEQ_TAR_G_C1;
			}
			Na_System_Start(SE_DECIDE);
			if (ptr->workf1 < 4.2)
				ptr->workf1 += 4.0;
		}
		break;
	case KSEQ_TAR_G_B3:
		if (ptr->work1 == 1){
			if (makeGameNoteKartOnly()){
				ptr->pattern = KSEQ_TAR_G_A5;
				break;
			}
		}
		ptr->work1++;
		if (ptr->work1 >= 2){
			ptr->pattern = KSEQ_TAR_G_B1;
			//ptr->work1 = 0;
		}
		break;
	case KSEQ_TAR_G_C1:
	case KSEQ_TAR_G_C2:
		if ((cont1P->ontrigger|cont1P->stick_ontrigger) & CONT_UP){
			if (ptr->pattern > KSEQ_TAR_G_C1){
				ptr->pattern--;
				Na_System_Start(SE_CURSOL);
				if (ptr->workf1 < 4.2)
					ptr->workf1 += 4.0;
				ptr->pattern2 = -1;
			}
		}
		if ((cont1P->ontrigger|cont1P->stick_ontrigger) & CONT_DOWN){
			if (ptr->pattern < KSEQ_TAR_G_C2){
				ptr->pattern++;
				Na_System_Start(SE_CURSOL);
				if (ptr->workf1 < 4.2)
					ptr->workf1 += 4.0;
				ptr->pattern2 = 1;
			}
		}
		if (cont1P->ontrigger & CONT_B){
			ptr->pattern = KSEQ_TAR_G_B1 + ptr->work2;
			Na_System_Start(SE_CANCEL);
			break;
		}
		if (cont1P->ontrigger & (CONT_A|CONT_START)){
			if (ptr->pattern == KSEQ_TAR_G_C2){
				ptr->pattern = KSEQ_TAR_G_D;
				ptr->work1 = 0;
				Na_System_Start(SE_DECIDE);
				if (ptr->workf1 < 4.2)
					ptr->workf1 += 4.0;
			}
			else{
				ptr->pattern = KSEQ_TAR_G_B1 + ptr->work2;
				Na_System_Start(SE_CANCEL);
			}
		}
		break;
	case KSEQ_TAR_G_D:/* ¥»¡¼¥ÖÃæ */
		if (ptr->work1 == 1){
			a = osPfsFindFile(&pfs_k,company_code_kart,game_code_kart,
							  (u8 *)game_name_kart,(u8 *)ext_name_kart,
							  &file_no_kart);
			if (a){
				ptr->pattern = KSEQ_TAR_G_D2;
				//ptr->work1 = 0;
				Na_System_Start(SE_BUBU);
				break;
			}
			a = SaveGameNoteKart_ghost(ptr->work2);
			if (a){
				ptr->pattern = KSEQ_TAR_G_D2;
				//ptr->work1 = 0;
				Na_System_Start(SE_BUBU);
				break;
			}
		}
		ptr->work1++;
		if (ptr->work1 >= 2){
			ptr->pattern = KSEQ_TAR_SEL6;
			//ptr->work1 = 0;
		}
		break;
	}
}

void DOB_game_ta_mes1(OBJBlock *ptr)
{
	switch(ptr->pattern){
	case 0:
		ptr->disp_x = 320 + GetWordLength(ta_romghost_message_j)/2;
		ptr->disp_y = 218/*120*/;
		ptr->pattern = 1;
		Na_PlyVoice_Start(0,SE_VOICE_GOGO + 0x10*romghost_kart);
		break;
	case 1:
		DOB_moving1_x(ptr,160);
		if (ptr->disp_x == 160){
			ptr->pattern = 2;
			ptr->work1 = 0;
		}
		break;
	case 2:
		ptr->work1++;
		if (ptr->work1 > 60){
			ptr->pattern = 3;
			ptr->work1 = 0;
		}
		break;
	case 4:
		ptr->work1++;
		if (ptr->work1 > 5){/* 5¥Õ¥ì¡¼¥à¤ÎÍ¾Íµ¤ò¸«¤Æ¤«¤éºï½ü */
			ptr->kind = 0;
			break;
		}		
	case 3:
		DOB_moving4_x(ptr,160,-1);
		if (ptr->disp_x == -20-GetWordLength(ta_romghost_message_j)/2){
			if (ptr->pattern == 3)
				ptr->pattern = 4;
		}
		break;
	default:
		break;
	}
}

void DOB_dsel_snap(OBJBlock *ptr)
{
	if (ptr->work1 != tsel_cursor){/* ¥«¡¼¥½¥ë¤òº¸±¦¤ËÆ°¤«¤¹¤´¤È¤Ë... */
		ptr->work1 = tsel_cursor;
		ChangeSeqData(ptr->sd_number,0,(TexBlockSeq *)GetVAddress(
			TBSeq_msel_map[map_number_chart[tsel_cursor/4][tsel_cursor%4]]));
		if (!CheckPakStatus()){
			LoadGameNoteKart_data();
		}
		else{/* ¥Ñ¥Ã¥¯¥Ç¡¼¥¿¤¬¤¦¤Þ¤¯¥í¡¼¥É¤Ç¤­¤Ê¤«¤Ã¤¿¤È¤­... */
			pak_ghost[0].e.ghost_flg = 0;
			pak_ghost[1].e.ghost_flg = 0;
		}
	}
}

void DOB_dsel_sel1(OBJBlock *ptr)
{
	if (msel_mode != DSEL_SELECT1)
		ptr->disp_on = 0;
	else
		ptr->disp_on = 1;		
}

void DOB_dsel_sel2(OBJBlock *ptr)
{
	if (msel_mode != DSEL_SELECT2)
		ptr->disp_on = 0;
	else
		ptr->disp_on = 1;		
}

void DOB_dsel_sel3(OBJBlock *ptr)
{
	if (msel_mode != DSEL_ERROR)
		ptr->disp_on = 0;
	else
		ptr->disp_on = 1;		
}

//
// £Ô£Á£µ°Ì°ÊÆâ¤ËÆþ¤Ã¤¿¤È¤­¥Õ¥¡¥ó¥Õ¥¡¡¼¥ì
//
void DOB_ta_fanfare(OBJBlock *ptr)
{
	if (kwlap[0].goalsw){
		if (kwlap[0].totaltime < (GetRecordTime2(4)& 0x000fffff))
			rankin_fanfare = 1;
		ptr->kind = 0;
	}
}

void DOB_ta_lostghost(OBJBlock *ptr)
{
	switch(ptr->pattern){
	case 0:
		if (lost_ghost == LOST_GHOST){
			ptr->pattern = 1;
			ptr->work1 = 0;
			break;
		}
		if (kwlap[0].goalsw == 1)
			ptr->pattern = 2;
		break;
	case 1:
		ptr->work1++;
		if (kwlap[0].goalsw == 1)
			ptr->pattern = 2;
		break;
	case 2:
		break;
	default:
		break;
	}
}

void DOB_ending1_halffade(OBJBlock *ptr)
{
	switch(ptr->pattern){
	case 0:
		ptr->work1 += 3;
		if (ptr->work1 >100){
			ptr->work1 = 0;
			ptr->pattern = 1;
			cup_select = cup_select % 4;/* Ç°¤Î¤¿¤á */
			race_level = race_level % 4;
			SetOBJBlock(KO_END1_MES1,0,0,4);
		}
		break;
	case 1:
	case 2:
	case 3:
	case 4: /* ³Æ¥á¥Ã¥»¡¼¥¸¤ò½ç¤Ë½Ð¤¹ */
		ptr->work1++;
		if (ptr->work1 > 8){
			ptr->pattern++;
			ptr->work1 = 0;
			SetOBJBlock(KO_END1_MES1+ptr->pattern -1,0,0,4);
		}
		break;
	case 5: /* °ìÄê»þ´Ö¤Î¥¦¥§¥¤¥È */
		ptr->work1++;
		if (ptr->work1 > 100){
			if ((contOR->ontrigger) || (contOR->stick_ontrigger)){
				ptr->pattern = 6;
				ptr->work1 = 0;
				if (resultstat.rank < 3)
					Na_System_Start(SE_MENU_OK);
				else
					Na_System_Start(SE_MENU_OK_QUIT);
			}
		}
		break;
	case 6: /* ²¿¤«¥­¡¼¤¬²¡¤µ¤ì¤¿¤é¥Õ¥§¡¼¥É¥¢¥¦¥È */
		SetFadeOut(30);
		Na_Seq_Fadeout(25);
		Na_SE_Fadeout(25);
		ptr->pattern = 7;
		break;
	case 7:
		break;
	default:
		break;
	}
}


void DOB_ending1_message(OBJBlock *ptr)
{
	POS_XY *pos_ptr;
	int num;

	num = ptr->kind - KO_END1_MES1;
	switch(ptr->pattern){
	case 0:
		pos_ptr = &ending1_messages_start_position[num];
		ptr->disp_x = pos_ptr->x;
		ptr->disp_y = pos_ptr->y;
		ptr->pattern = 1;
		break;
	case 1:
		pos_ptr = &ending1_messages_target_position[num];
		DOB_moving1(ptr,pos_ptr->x,pos_ptr->y);
		if ((ptr->disp_x == pos_ptr->x)&&(ptr->disp_y == pos_ptr->y))
			ptr->pattern = 2;
		break;
	case 2:
		break;
	default:
		break;
	}
}

void DOB_ending1_face(OBJBlock *ptr)
{
	POS_XY *pos_ptr;
	int num,num2,a;

	num2 = ptr->kind - KO_END1_MES1;
	num = resultstat.driver;
	a = driver2pselset[num];
	switch(ptr->pattern){
	case 0:
		pos_ptr = &ending1_messages_start_position[num2];
		ptr->disp_x = pos_ptr->x;
		ptr->disp_y = pos_ptr->y;
		ptr->pattern = 1;
		break;
	case 1:
		pos_ptr = &ending1_messages_target_position[num2];
		DOB_moving1(ptr,pos_ptr->x,pos_ptr->y);
		if ((ptr->disp_x == pos_ptr->x)&&(ptr->disp_y == pos_ptr->y)){
			ptr->pattern = 2;
			ptr->work2 = 0;
		}
		break;
	case 2:
		ptr->work2++;
		if (ptr->work2 > GP_ENDING_WAIT_TIME1){
			if (resultstat.rank >= 3){
				ptr->pattern = 4;
				Na_SeMute_Title_Off();
				Na_PlyVoice_Start(0,num*0x10+SE_VOICE_SPIN);
				Na_SeMute_Title();
			}
			else{
				ptr->pattern = 3;
				ChangeSeqData_vs(ptr->sd_number,0,num,
								 (TexBlockSeq *)GetVAddress(TBSeq_psel_p1[a]));
				//Na_SeMute_Off(0);
				Na_SeMute_Title_Off();
				Na_PlyVoice_Start(0,num*0x10+SE_VOICE_GOALIN);
				Na_SeMute_Title();
			}
		}
		break;
	case 3:
		if ((seq_data_block+ptr->sd_number)->pattern >= p1_pat_num[a]){
			ChangeSeqData_vs(ptr->sd_number,0,num,
						  (TexBlockSeq *)GetVAddress(TBSeq_psel_p2[a]));
			ptr->pattern = 4;
		}
		break;
	case 4:
	default:
		break;
	}
}

void DOB_staffroll_messages(OBJBlock *ptr)
{
	ENDING_DATA *e_ptr;
	int num;

	num = ptr->kind - KO_SR_A1;
	e_ptr = &ending_data[num];

	switch(e_ptr->type){
	case 0:
	default:
		DOB_staffroll_type0(ptr);
		break;
	case 1:
		DOB_staffroll_type1(ptr);
		break;
	}
}

void DOB_staffroll_type0(OBJBlock *ptr)
{
	ENDING_DATA *e_ptr;
	int num;
	char **c_ptr;

	num = ptr->kind - KO_SR_A1;
	e_ptr = &ending_data[num];
#if 0
	if (race_level == 3)
		c_ptr = &ending_names_kana[num];
	else
#endif
		c_ptr = &ending_names[num];

	ptr->disp_y = e_ptr->start_y;
	switch(ptr->pattern){
	case 0:
		ptr->disp_x = e_ptr->start_x;
		ptr->pattern = 1;
		/*ÌÜÉ¸¤ÎÀßÄê*/
		ptr->work2 = e_ptr->target_x
			+GetWordLength(*c_ptr)*e_ptr->mul/2;
		//break;
	case 1:
		DOB_moving1_x(ptr,ptr->work2);
		ptr->work1 = (ptr->work2 - ptr->disp_x)/4;/*»ú´Ö¤ÎÀßÄê*/
		if (ptr->work1 > 8)
			ptr->work1 = 8;
		ptr->workf1 = 1.0 + 0.05*ptr->work1;/*²£ÇÜÎ¨¤ÎÀßÄê*/
		if (ptr->disp_x >= ptr->work2 - 20){
			ptr->pattern = 2;
			ptr->sd_number = 0;/*ÈÆÍÑ¥«¥¦¥ó¥¿¤È¤·¤Æ»ÈÍÑ*/
		}
		break;
	case 2:
		DOB_moving1_x(ptr,ptr->work2);
		ptr->work1 = (ptr->work2 - ptr->disp_x)/4;
		ptr->sd_number++;
		//ptr->workf1 = 0.8 + 0.007*(ptr->sd_number - 8)*(ptr->sd_number - 8);
		ptr->workf1 = 0.4 + 0.0085*(ptr->sd_number - 10)*(ptr->sd_number - 10);
		if ((ptr->sd_number > 8)&&(ptr->workf1 > 1.0)){
			ptr->workf1 = 1.0;
			ptr->pattern = 3;
		}
		break;
	case 3:
		if (ending_message_flg)
			ptr->pattern = 4;
		break;
	case 4:
		DOB_moving4_x(ptr,ptr->work2,1);
		if (ptr->disp_y > SCREEN_WD*1.5)
			ptr->kind = 0;
		break;
	default:
		break;
	}
}

void DOB_staffroll_type1(OBJBlock *ptr)
{
	ENDING_DATA *e_ptr;
	int num;
	char **c_ptr;

	num = ptr->kind - KO_SR_A1;
	e_ptr = &ending_data[num];
#if 0
	if (race_level == 3)
		c_ptr = &ending_names_kana[num];
	else
#endif
		c_ptr = &ending_names[num];

	ptr->disp_y = e_ptr->start_y;
	switch(ptr->pattern){
	case 0:
		ptr->disp_x = e_ptr->start_x;
		ptr->pattern = 1;
		/*ÌÜÉ¸¤ÎÀßÄê*/
		ptr->work2 = e_ptr->target_x
			-GetWordLength(*c_ptr)*e_ptr->mul/2;
		//break;
	case 1:
		DOB_moving1_x(ptr,ptr->work2);
		ptr->work1 = (ptr->disp_x - ptr->work2)/4;/*»ú´Ö¤ÎÀßÄê*/
		if (ptr->work1 > 8)
			ptr->work1 = 8;
		ptr->workf1 = 1.0 + 0.05*ptr->work1;/*²£ÇÜÎ¨¤ÎÀßÄê*/
		if (ptr->disp_x <= ptr->work2 + 20){
			ptr->pattern = 2;
			ptr->sd_number = 0;/*ÈÆÍÑ¥«¥¦¥ó¥¿¤È¤·¤Æ»ÈÍÑ*/
		}
		break;
	case 2:
		DOB_moving1_x(ptr,ptr->work2);
		ptr->work1 = (ptr->disp_x - ptr->work2)/4;
		ptr->sd_number++;
		//ptr->workf1 = 0.8 + 0.007*(ptr->sd_number - 8)*(ptr->sd_number - 8);
		ptr->workf1 = 0.4 + 0.0085*(ptr->sd_number - 10)*(ptr->sd_number - 10);
		if ((ptr->sd_number > 8)&&(ptr->workf1 > 1.0)){
			ptr->workf1 = 1.0;
			ptr->pattern = 3;
		}
		break;
	case 3:
		if (ending_message_flg)
			ptr->pattern = 4;
		break;
	case 4:
		DOB_moving4_x(ptr,ptr->work2,-1);
		if (ptr->disp_y > SCREEN_WD*1.5)
			ptr->kind = 0;
		break;
	default:
		break;
	}
}

