#include "fox_all.h"
#include "fox_main.h"
#include "fox_std_dma.h"
#include "fox_fade.h"
#include "../audio/audio_game.h"

/*----------------------------------------------------------------------*/
/*									*/
/* メッセージ								*/
/*									*/
/*----------------------------------------------------------------------*/
extern	void	nakama_shield_meter_disp( float, float, int );
extern	void	batu_disp( int );
//extern	unsigned char JT_Sm_01_CI8_txt[];
//extern	unsigned char JT_Sm_02_CI8_txt[];

/* メッセージ表示関係 */
u16 **msg_TBL_ad;
int msg_ptr;
int mojiXp,mojiYp;
float wakuXp,wakuYp,wakuXs;
float faceXp,faceYp;
/* メッセージ表示優先順位(値が大きいほど優先順位が高い) */
int msg_priority = 0;
/* 通信メッセージフラグ */
static int comm_f;
static int sp0;

/*+=====================================================================+
  |	パイロットメッセージわく表示しない			        |
  +=====================================================================+*/
static void waku_NOdisplay(void)
{
    texture_a();

    if(waku_size == 1.3f) {
	message_pt = puts_Dummy( message_ad, moji_cont1 );
    }
}

/*+=====================================================================+
  |									|
  |	メッセージ表示優先順位チェック					|
  |									|
  |	0:優先度同じ							|
  |	1:現在表示中のメッセージより優先度が低い			|
  |	2:現在表示中のメッセージより優先度が高い			|
  |									|
  +=====================================================================+*/
static int message_priority_check( u16 *ma, int prio )
{
    /** 優先度同じ **/
    if( msg_priority == prio ) {
//	PRINTF( "同じ messNo.:%d pri:%d\n",get_msg_num(ma),prio );
	return( 0 );
    }
    /** 現在表示中のメッセージより優先度が低い **/
    if( msg_priority > prio ) {
//	PRINTF( "低い messNo.:%d pri:%d\n",get_msg_num(ma),prio );
	return( 1 );
    }
    /** 現在表示中のメッセージより優先度が高い **/
    if( msg_priority < prio ) {
//	PRINTF( "高い messNo.:%d pri:%d\n",get_msg_num(ma),prio );
	msg_priority = prio;
	return( 2 );
    }
}

/*+=====================================================================+
  |	メッセージセットダイレクトアドレスセット		        |
  +=====================================================================+*/
void message_ad_set(u16 *a, int c)
{
    int p,res;
    int prio;

    switch( *a ) {
    default:
    case 0x08:
	prio = 0;
	break;
    case 0x09:
	prio = 1;
	break;
    case 0x0a:
	prio = 2;
	break;
    case 0x0b:
	prio = 3;
	break;
    }

    if( system_mode == GAME ) {
	if( c == FACE_FALCO  || c == FACE_SLIPPY || c == FACE_PEPPY)  {
	    if( c == FACE_FALCO )
		p = 1;
	    if( c == FACE_SLIPPY )
		p = 2;
	    if( c == FACE_PEPPY )
		p = 3;
	    
	    /** 戦線離脱している仲間のメッセージはとばす **/
	    if( (nakama_shield[p] <= 0) && (nakama_shield[p] != -2) ) {
		return;
	    }
	}
    }

    if( face_stat != 0 ) {
	/** メッセージ表示優先順位 **/
	res = message_priority_check( a,prio );
	/** 現在表示中のメッセージより優先が低い場合は飛ばす！！ **/
	if( res == 1 ) {
	    return;
	}
    }

    msg_priority = prio;
    face_NO = (float)c;

    /** エクストラゲームのときはフォックス顔変える **/
    if( extra_mode && (c == FACE_FOX || c == FACE_FOX_R) ) {
	face_NO = FACE_FOX_EXP;
    }

    /** ベノムＬＶ３のとき                            **/
    /** 通常のウルフチームの顔No.をＬＶ３用の顔に変換 **/
    if( mapno == BM03 ) {
	switch( c ) {
	case FACE_WOLF:
	    face_NO = FACE_WOLF3;
	    break;
	case FACE_PIGMA:
	    face_NO = FACE_PIGMA3;
	    break;
	case FACE_REON:
	    face_NO = FACE_REON3;
	    break;
	case FACE_ANDRU:
	    face_NO = FACE_ANDRU3;
	    break;
	}
    }

    message_ad = a;
    face_stat = 100;

//    PRINTF( "現在 messNo.:%d prio:%d\n",get_msg_num(a),msg_priority );

    switch( system_mode ) {
    case TITLE:
    case ENDING:
	mojiYp = 180;
	mojiXp = 82;
	wakuXp = 80.0f;
	wakuYp = 174.0f;
	wakuXs = 6.63f;
	faceXp = 32.0f;
	faceYp = 174.0f;
	break;
    case GAME:
	mojiYp = 184;
	mojiXp = 76;	/* 昔は、109	*/
	wakuXp = 74.0f;	/* 昔は、107.0f	*/
	wakuYp = 178.0f;
	wakuXs = 4.53f;
//	faceXp = 61.0f;
	faceXp = 26.0f;	/* 昔は、59.0f	*/
	faceYp = 178.0f;
	break;
    }

    /** Voice SET **/
    message_no = get_msg_num(a);
    Na_StartMesVoice( message_no );
}

/*+=====================================================================+
  |	パイロット顔だけ表示サブ				        |
  +=====================================================================+*/
void face_display_sub(void)
{
    unsigned short *txt;
    register int i;
    int x_flip;
    float yy;
    static float pp=-1.0f;

    x_flip = 0;
    comm_f = OFF;
    
    switch(face_chpt)  {
    case FACE_FOX_R:
	comm_f = ON;
    case FACE_FOX:
	txt = JT_Fox_cokpit_1_txt;
	break;
    case FACE_FOX_R+1:
	comm_f = ON;
    case FACE_FOX+1:
	txt = JT_Fox_cokpit_2_txt;
	break;
	
    case FACE_FOX_EXP:
	txt = JT_Fox_expart_1_txt;
	break;
    case FACE_FOX_EXP+1:
	txt = JT_Fox_expart_2_txt;
	break;

    case FACE_FALCO_R:
	comm_f = ON;
    case FACE_FALCO:
	txt = JT_Falco_cokpit_1_txt;
	break;
    case FACE_FALCO_R+1:
	comm_f = ON;
    case FACE_FALCO+1:
	txt = JT_Falco_cokpit_2_txt;
	break;
	
    case FACE_SLIPPY_R:
	comm_f = ON;
    case FACE_SLIPPY:
	txt = JT_Slippy_cokpit_1_txt;
	break;
    case FACE_SLIPPY_R+1:
	comm_f = ON;
    case FACE_SLIPPY+1:
	txt = JT_Slippy_cokpit_2_txt;
	break;
	
    case FACE_PEPPY_R:
	comm_f = ON;
    case FACE_PEPPY:
	txt = JT_Peppy_cokpit_1_txt;
	break;
    case FACE_PEPPY_R+1:
	comm_f = ON;
    case FACE_PEPPY+1:
	txt = JT_Peppy_cokpit_2_txt;
	break;

    case FACE_WOLF:
	txt = WT_Wolf01_txt;
	break;
    case FACE_WOLF+1:
	txt = WT_Wolf02_txt;
	break;

    case FACE_PIGMA:
	txt = WT_Pigma01_txt;
	break;
    case FACE_PIGMA+1:
	txt = WT_Pigma02_txt;
	break;

    case FACE_REON:
	txt = WT_Reon01_txt;
	break;
    case FACE_REON+1:
	txt = WT_Reon02_txt;
	break;

    case FACE_ANDRU:
	txt = WT_Andru01_txt;
	break;
    case FACE_ANDRU+1:
	txt = WT_Andru02_txt;
	break;

    case FACE_WOLF3:
	txt = WT_Wolf_lv03_1_txt;
	break;
    case FACE_WOLF3+1:
	txt = WT_Wolf_lv03_2_txt;
	break;

    case FACE_PIGMA3:
	txt = WT_Pigma_lv03_1_txt;
	break;
    case FACE_PIGMA3+1:
	txt = WT_Pigma_lv03_2_txt;
	break;

    case FACE_REON3:
	txt = WT_Reon_lv03_1_txt;
	break;
    case FACE_REON3+1:
	txt = WT_Reon_lv03_2_txt;
	break;

    case FACE_ANDRU3:
	txt = WT_Andru_lv03_1_txt;
	break;
    case FACE_ANDRU3+1:
	txt = WT_Andru_lv03_2_txt;
	break;

    case FACE_ENEMY01:
	txt = CN_Enemyface_01_txt;
	break;
    case FACE_ENEMY01+1:
	txt = CN_Enemyface_02_txt;
	break;
	    
    case FACE_CN_BOSS:
	txt = CN_ATCpilot01_txt;
	break;
    case FACE_CN_BOSS+1:
	txt = CN_ATCpilot02_txt;
	break;
	
    case FACE_AS_BOSS:
	txt = AS_bosspilot_01_txt;
	break;
    case FACE_AS_BOSS+1:
	txt = AS_bosspilot_02_txt;
	break;
	
    case FACE_SB_BOSS:
	txt = SB_kao1_1_txt;
	break;
    case FACE_SB_BOSS+1:
	txt = SB_kao2_2_txt;
	break;

    case FACE_SB_ZAKO:
	txt = SB_Zakoface_1_txt;
	break;
    case FACE_SB_ZAKO+1:
	txt = SB_Zakoface_2_txt;
	break;

    case FACE_ZO_BOSS:
	txt = ZO_Boss_Face01_txt;
	break;
    case FACE_ZO_BOSS+1:
	txt = ZO_Boss_Face02_txt;
	break;

    case FACE_SX_BOSS:
	txt = SX_Bossface01_txt;
	break;
    case FACE_SX_BOSS+1:
	txt = SX_Bossface02_txt;
	break;

    case FACE_SW_BOSS:
	txt = SW_face01_txt;
	break;
    case FACE_SW_BOSS+1:
	txt = SW_face02_txt;
	break;

    case FACE_MC_BOSS:
	txt = MC_Boss_Face01_txt;
	break;
    case FACE_MC_BOSS+1:
	txt = MC_Boss_Face02_txt;
	break;

    case FACE_NUS_R:
	comm_f = ON;
    case FACE_NUS:
    case FACE_FO_NUS:
	txt = JT_Nus01_txt;
	break;
    case FACE_NUS_R+1:
	comm_f = ON;
    case FACE_NUS+1:
    case FACE_FO_NUS+1:
	txt = JT_Nus02_txt;
	break;

    case FACE_CAT:
	txt = NPC_Cat01_txt;
	break;
    case FACE_CAT+1:
	txt = NPC_Cat02_txt;
	break;

    case FACE_AND_R:
    case FACE_AND:
	txt = NPC_And01_txt;
	if( system_mode == GAME && mapno == CL ) txt = SB_And01_txt;
	comm_f = ON;
	break;
    case FACE_AND_R+1:
    case FACE_AND+1:
	txt = NPC_And02_txt;
	if( system_mode == GAME && mapno == CL ) txt = SB_And02_txt;
	comm_f = ON;
	break;
	
    case FACE_FOXFA:
	txt = NPC_Father01_txt;
	break;
    case FACE_FOXFA+1:
	txt = NPC_Father02_txt;
	break;

    case FACE_KT_CNPILOT:
	txt = NPC_CNpilot01_txt;
	break;
    case FACE_KT_CNPILOT+1:
	txt = NPC_CNpilot02_txt;
	break;

    case FACE_PEPPER:
	txt = NPC_Pepper01_txt;
	break;
    case FACE_PEPPER+1:
	txt = NPC_Pepper02_txt;
	break;

    case FACE_Nus:
	txt = GF_Nus01_txt;
	break;
    case FACE_Nus+1:
	txt = GF_Nus02_txt;
	break;
	
    case FACE_Pepper:
	txt = GF_Pepper01_txt;
	break;
    case FACE_Pepper+1:
	txt = GF_Pepper02_txt;
	break;

    case FACE_TR:
	txt = TR_Face_1_txt;
	break;
    case FACE_TR+1:
	txt = TR_Face_2_txt;
	break;

    case 3:
	x_flip = 1;
    case 2:
	switch( system_mode ) {
	case GAME:
	    txt = JT_Noiz_txt;
	    break;
	case ENDING:
	case TITLE:
	    txt = DEMO_Noiz_txt;
	    break;
	default:
	    txt = NULL;
	    break;
	}
	if( (int)face_NO == FACE_AND || (int)face_NO == FACE_AND_R ) {
	    comm_f = ON;
	}

    }

    if( txt != NULL && face_size != 0.0f ) {
	if( faceYp + face_size*2.0f >= faceYp+20.0f ) pp = 1.0f;
	if( faceYp + face_size*2.0f <= faceYp ) pp = -1.0f;
	yy = (face_size*20.0f)*pp;

	rectangle_a_prim();
	gDPSetPrimColor( NEXT_DISP, 0, 0, 0xff, 0xff, 0xff, 0xff );

	if( x_flip ) {
	    for( i=0; i<2; i++ ) {
		texture_rectangleRGBA16X( &NOW_DISP, txt+(44*i*20),
					 44, 20,
					 faceXp,
					 faceYp+20.0f+yy+
					  ((float)i*20.0f*face_size),
					 1.0f, face_size );
	    }
	    texture_rectangleRGBA16X( &NOW_DISP, txt+(44*40),
				     44, 4,
				     faceXp,
				     faceYp+20.0f+yy+
				      (40.0f*face_size),
				     1.0f, face_size );
	} else {
	    for( i=0; i<2; i++ ) {
		texture_rectangleRGBA16( &NOW_DISP, txt+(44*i*20),
					 44, 20,
					 faceXp,
					 faceYp+20.0f+yy+
					 ((float)i*20.0f*face_size),
					 1.0f, face_size );
	    }
	    texture_rectangleRGBA16( &NOW_DISP, txt+(44*40),
				     44, 4,
				     faceXp,
				     faceYp+20.0f+yy+
				     (40.0f*face_size),
				     1.0f, face_size );
	}
    }



#if 0
    if(Key_T[1].button & CONT_UP) {
	faceYp += 1.0f;
    }
    if(Key_T[1].button & CONT_DOWN) {
	faceYp -= 1.0f;
    }
    if(Key_T[1].button & CONT_RIGHT) {
	faceXp += 1.0f;
    }
    if(Key_T[1].button & CONT_LEFT) {
	faceXp -= 1.0f;
    }
#endif    

//    PRINTF( "x=%f y=%f\n",faceXp,faceYp );
//    PRINTF( "FX=%f\n",faceXp );

}

/*+=====================================================================+
  |	パイロットメッセージわく表示				        |
  +=====================================================================+*/
void waku_display(void)
{
//    static int rr=255,gg=255,bb=255,aa=0x90;
//    static int rr=60,gg=60,bb=255,aa=170;
//    static float WakuXp=20.0f,WakuYp=182.0f;
    int i;
    unsigned char *txt;
    unsigned short *txttlut;
    float yy;
    static float pp2=-1.0f;
    
    if( system_mode != MAP && waku_size != 0.0f ) {
	if( wakuYp + (waku_size/0.26f)*3.0f >= wakuYp+16.0f ) pp2 = 1.0f;
	if( wakuYp + (waku_size/0.26f)*3.0f <= wakuYp ) pp2 = -1.0f;
	yy = ((waku_size/0.26f)*3.0f)*pp2;

	rcpsetmode( &NOW_DISP, RECE_RGBA_A_PRIM );

	switch( system_mode ) {
	case ENDING:
	case TITLE:
	    txt = DEMO_mess_txt;
	    txttlut = DEMO_mess_txttlut;
	    break;
	case GAME:
	    txt = JT_mess_txt;
	    txttlut = JT_mess_txttlut;
	    break;
	}
	
	if( comm_f == ON ) {
	    /** 赤 **/
	    gDPSetPrimColor( NEXT_DISP, 0, 0, 255, 25, 25, 170 );
	} else {
	    /** 青 **/
	    gDPSetPrimColor( NEXT_DISP, 0, 0, 60, 60, 255, 170 );
//	    gDPSetPrimColor( NEXT_DISP, 0, 0, rr, gg, bb, aa );
	}

	texture_rectangleCI8( &NOW_DISP, txt,txttlut,
				 32, 32,
				 wakuXp,
			         wakuYp+16.0f+yy,
				 wakuXs, waku_size );
    }

    if(waku_size == 1.3f) {
#if 0
	gDPPipeSync(NEXT_DISP);
	gDPSetCycleType(NEXT_DISP, G_CYC_1CYCLE);
	gDPSetTexturePersp(NEXT_DISP, G_TP_NONE);
	gDPSetCombineMode(NEXT_DISP,
                      G_CC_MODULATEIDECALA_PRIM, G_CC_MODULATEIDECALA_PRIM);
	gDPSetRenderMode(NEXT_DISP, G_RM_TEX_EDGE, G_RM_TEX_EDGE2);
//	gDPSetPrimColor(NEXT_DISP, 0, 0, 0xff, 0xff, 0xff, 0xff);
#endif
	rcpsetmode( &NOW_DISP, RECE_RGBA_A_PRIM );

	message_pt = puts( &NOW_DISP,
			   message_ad,
			   mojiXp, mojiYp, moji_cont1 );


#if 0
	gDPSetTexturePersp( NEXT_DISP, G_TP_PERSP );
#endif
    }
    
#if 0
    if(Key[1].button & CONT_RIGHT) {
	rr += 1;
	rr &= 0xff;
    }
    if(Key[1].button & CONT_LEFT) {
	rr -= 1;
	rr &= 0xff;
    }
    if(Key[1].button & CONT_UP) {
	gg += 1;
	gg &= 0xff;
    }
    if(Key[1].button & CONT_DOWN) {
	gg -= 1;
	gg &= 0xff;
    }
    if(Key[1].button & CONT_F) {
	bb += 1;
	bb &= 0xff;
    }
    if(Key[1].button & CONT_C) {
	bb -= 1;
	bb &= 0xff;
    }

    if(Key[1].button & CONT_E) {
	aa += 1;
	aa &= 0xff;
    }
    if(Key[1].button & CONT_D) {
	aa -= 1;
	aa &= 0xff;
    }
    PRINTF( "R:%d G:%d B:%d A:%d\n",rr,gg,bb,aa );
#endif
#if 0
//    static float WakuXp=148.0f,WakuYp=174.0f,WakuXs=4.53f,WakuYs=1.3f;
    if(Key_T[1].button & CONT_RIGHT) {
	mojiXp += 1;
    }
    if(Key_T[1].button & CONT_LEFT) {
	mojiXp -= 1;
    }
    if(Key_T[1].button & CONT_UP) {
	mojiYp += 1;
    }
    if(Key_T[0].button & CONT_DOWN) {
	mojiYp -= 1;
    }
    if(Key_T[0].button & CONT_RIGHT) {
	wakuXp += 1.0f;
	mojiXp += 1;
    }
    if(Key_T[0].button & CONT_LEFT) {
	wakuXp -= 1.0f;
	mojiXp -= 1;
    }
    if(Key_T[0].button & CONT_UP) {
	WakuYp += 1.0f;
	mojiYp += 1;
    }
    if(Key_T[0].button & CONT_DOWN) {
	WakuYp -= 1.0f;
	mojiYp -= 1;
    }
    if(Key[1].button & CONT_C) {
	WakuXs += 0.01f;
    }
    if(Key[1].button & CONT_F) {
	WakuXs -= 0.01f;
    }
    if(Key[1].button & CONT_E) {
	WakuYs += 0.01f;
    }
    if(Key[1].button & CONT_D) {
	WakuYs -= 0.01f;
    }
#endif

//    PRINTF("X=%f Y=%f Xs=%f Ys=%f\n",WakuXp,WakuYp,WakuXs,WakuYs);
//    PRINTF("WkX=%f WkY=%f\n",wakuXp,wakuYp );
//    PRINTF("MoX=%d MoY=%d\n",mojiXp,mojiYp );
}
	
/*+=====================================================================+
  |	パイロットメッセージ表示				        |
  +=====================================================================+*/
void face_display(void)
{
    register int i;
    int mlen;
    int sp;
    
    if( (game_mode == PAUSE)&&( system_mode!=ENDING ) ) {
	return;
    }
    
    if(face_time0 > 0) face_time0 -- ;
    if(face_time1 > 0) face_time1 -- ;

    switch(face_stat) {
    case 0:
	break;
    case 100:
	sp0 = 1;
	face_chpt = 1000;
	face_stat = 1;
	face_size = 0.0f;
	waku_size = 0.0f;
	moji_cont1 = 0;
	if(play_mode != P_SINGLE)
	    face_stat = 0;
	break;

    case 1:
	face_size += 0.25f;
	if(face_size == 1.0f) {
	    face_stat += 1; 
	    face_time0 = 10;
	}
	face_chpt = 2;
	if(frcnt & 0x01)
	    face_chpt = 3;
	break;
    case 2:
	if(face_time0 == 0) {
	    face_stat += 1;
	    face_time0 = 10; 
	}
	face_chpt = 2;
	if(frcnt & 0x01)
	    face_chpt = 3;
	break;
	
    case 3:
	if(face_time0 == 0) {
	    face_stat += 1;
	    mlen = msglen( message_ad );
	    /** １文字あたり 5 GameFrame **/
	    if( min_retrace == 3 ) {
		face_time0 = mlen * 3;
	    } else {
		face_time0 = mlen * 5;
	    }

//	    PRINTF( "msg:%d mtime:%d\n",get_msg_num(message_ad),face_time0 );
	    
//	    face_time0 = 50;
	    if( system_mode == TITLE || system_mode == ENDING ) {
//		face_time0 = 85;
		face_time0 = 100;
	    }
	}
	face_chpt = 0 + (int)face_NO;

	waku_size += 0.26f;
	if(waku_size > 1.3f)
	    waku_size = 1.3f;
	break;
	
	/* 話のつづき */
    case 31: /* メッセージボードクリア */
	face_stat += 1;
	face_time0 = 85 - face_time0;
	break;
    case 32:
	if( face_time0 == 0 ) {
	    msg_ptr++;
	    message_ad = msg_TBL_ad[msg_ptr];

//	    mlen = msglen( message_ad );
//	    /** １文字あたり 6 GameFrame **/
//	    face_time0 = mlen * 6;
//	    /** Voice SET **/
	    Na_StartMesVoice( get_msg_num(message_ad) );
	    moji_cont1 = 0;
	    face_time0 = 85;
	    face_stat = 4;
	}
	break;

    case 4: /* 話をしてる途中 */
	if( !Na_GetNowMesVoice() && !face_time0 ) {
//	    face_stat += 1;
	    face_stat = 6;
//	    face_time0 = 20;
	    face_time0 = 10;
	    face_chpt = 0 + (int)face_NO;
	}
//	PRINTF( "voice:%d time:%d\n",Na_GetNowMesVoice(),face_time0 );

	face_chpt = 0 + (int)face_NO;
	if( face_time1 > 0 )
	    face_chpt = 1 + (int)face_NO;
	
	if( min_retrace == 3 ) {
	    sp = 0;
	} else {
	    sp = 1;
	}

	if((frcnt & sp) == 0) {
	    if(moji_cont1 < 37) {
		if( message_ad[moji_cont1+1] == 0x0f ) {
		    face_stat = 31;
		} else {
		    moji_cont1 += 1;
		}
	    }
	    if((moji_cont1 & 0x01) == 1) {
		if(message_pt) {
		    face_time1 = 2;
		    if( message_no >= 23000 && message_no <= 23032 )
			Na_StartSystemSe( NA_SE_MESSAGE_MOVE );
		}
	    }
	}
	break;
	
    case 5:
	if(face_time0 == 0) {
	    face_stat += 1;
	    face_time0 = 10;
	}
	face_chpt = 0 + (int)face_NO;
	break;
    case 6:
	if(face_time0 == 0) {
	    if( system_mode == ENDING ) Na_ClearMesVoice();
	    else                        Na_StopMesVoice();
	    face_stat += 1;
	}

	face_chpt = 2;
	if(frcnt & 0x01)
	    face_chpt = 3;
	
	waku_size -= 0.26f;
	if(waku_size < 0.0f)
	    waku_size = 0.0f;
	break;
    case 7:
	face_size -= 0.25f;
	if(face_size == 0.00f) {
	    message_disp = 0;
	    msg_priority = 0;
	    face_stat = 0; 
//	    face_stat = 8; 
	}
	face_chpt = 2;
	if(frcnt & 0x01)
	    face_chpt = 3;
	break;

    case 8:
	face_chpt = 0 + (int)face_NO;
	waku_size = 1.3f;
	face_size = 1.0f;
	break;
    }

    if( (face_stat > 0 && face_stat != 100) && message_disp == 0 ) {
	face_display_sub();
	waku_display();
	
	if((int)face_NO == FACE_FALCO  ||
	   (int)face_NO == FACE_SLIPPY ||
	   (int)face_NO == FACE_PEPPY)  {
	    
	    if((int)face_NO == FACE_FALCO)
		i = 1;
	    if((int)face_NO == FACE_SLIPPY)
		i = 2;
	    if((int)face_NO == FACE_PEPPY)
		i = 3;

	    /*＊＊	仲間のシールドゲージ	＊＊＊＊*/
	    if( ( nakama_shield[ i]<=0 )&&( frcnt&0x04 )&&( nakama_shield[ i]!= -2 )&&
		( ( face_chpt!=2 )&&( face_chpt!=3 )&&( face_chpt!=1000 ) ) ) {
		rcpsetmode( &NOW_DISP, RECTANGLE_A_PRIM );
		gDPSetPrimColor( NEXT_DISP, 0, 0,  255,  255,  0, 255 );
		small_moji_puts( 31.0f, 167.0f, 1.0f, 1.0f, "DOWN" );
		batu_disp( 1 );
	    }
	    if( ( face_chpt!=2 )&&( face_chpt!=3 )&&( face_chpt!=1000 ) )
		nakama_shield_meter_disp( 22.0f, 165.0f, nakama_shield[ i] );
	}
	
	if( ( (int)face_NO == FACE_WOLF )||	/* ウルフチームの体力表示	*/
	    ( (int)face_NO == FACE_PIGMA )||
	    ( (int)face_NO == FACE_REON )||
	    ( (int)face_NO == FACE_ANDRU )||
	    
	    ( (int)face_NO == FACE_WOLF3 )||
	    ( (int)face_NO == FACE_PIGMA3 )||
	    ( (int)face_NO == FACE_REON3 )||
	    ( (int)face_NO == FACE_ANDRU3 ) ) {
	    switch( (int)face_NO ) {
	    case	FACE_WOLF3:
	    case	FACE_WOLF:	i = 4;	break;
	    case	FACE_REON3:
	    case	FACE_REON:	i = 5;	break;
	    case	FACE_PIGMA3:
	    case	FACE_PIGMA:	i = 6;	break;
	    case	FACE_ANDRU3:
	    case	FACE_ANDRU:	i = 7;	break;
	    default:			i = 0;	break;
	    }
	    if( ( Enms[ i].obj.mode!=EMOVE )&&( frcnt&4 )&&( Pl[ 0].mode==PMOVE )&&
		( face_chpt!=2 )&&( face_chpt!=3 )&&( face_chpt!=1000 ) ) {
		rcpsetmode( &NOW_DISP, RECTANGLE_A_PRIM );
		gDPSetPrimColor( NEXT_DISP, 0, 0,  255,  255,  0, 255 );
		small_moji_puts( 31.0f, 167.0f, 1.0f, 1.0f, "DOWN" );
	    }
	    if( ( face_chpt!=2 )&&( face_chpt!=3 )&&( face_chpt!=1000 ) ) {
		nakama_shield_meter_disp( 22.0f, 165.0f,
					  (int)((float)Enms[ i].life*2.55f) );
	    }
	}
	if( ( face_chpt!=2 )&&( face_chpt!=3 )&&( face_chpt!=1000 ) )
	    pilot_name();
    }
    if( message_disp == 1 ) {
	waku_NOdisplay();
    }
}

#if 0
/*+=====================================================================+
  |	パイロットメッセージ表示				        |
  +=====================================================================+*/
void face_display(void)
{
    register int i;

    if(game_mode == PAUSE) return;
    
    if(face_time0 > 0) face_time0 -- ;
    if(face_time1 > 0) face_time1 -- ;

    switch(face_stat) {
    case 0:
	break;
    case 100:
	face_chpt = 1000;
	face_stat = 1;
	face_size = 0.0f;
	waku_size = 0.0f;
	moji_cont1 = 0;
	if(play_mode != P_SINGLE)
	    face_stat = 0;
	break;

    case 1:
	face_size += 0.25f;
	if(face_size == 1.0f) {
	    face_stat += 1; 
	    face_time0 = 10;
	}
	face_chpt = 2;
	if(frcnt & 0x01)
	    face_chpt = 3;
	break;
    case 2:
	if(face_time0 == 0) {
	    face_stat += 1;
	    face_time0 = 10; 
	}
	face_chpt = 2;
	if(frcnt & 0x01)
	    face_chpt = 3;
	break;
	
    case 3:
	if(face_time0 == 0) {
	    face_stat += 1;
	    face_time0 = 50;
	    if( system_mode == TITLE || system_mode == ENDING ) {
//		face_time0 = 85;
		face_time0 = 100;
	    }
	}
	face_chpt = 0 + (int)face_NO;

	waku_size += 0.26f;
	if(waku_size > 1.3f)
	    waku_size = 1.3f;
	break;
	
	/* 話のつづき */
    case 31: /* メッセージボードクリア */
	face_stat += 1;
	face_time0 = 85 - face_time0;
	break;
    case 32:
	if( face_time0 == 0 ) {
	    msg_ptr++;
	    message_ad = msg_TBL_ad[msg_ptr];
	    /** Voice SET **/
	    Na_StartMesVoice( get_msg_num(message_ad) );
	    moji_cont1 = 0;
	    face_time0 = 85;
	    face_stat = 4;
	}
	break;


    case 4: /* 話をしてる途中 */
	/* FO ウルフチーム参戦時のピグマのメッセージのタイミング補正 */
	if( message_no == 50 ||
	    message_no == 9270 ||
	    message_no == 9510 ||
	    message_no == 9520 ||
	    message_no == 9530 ||
	    message_no == 9540 ||
	    message_no == 9545 ||
	    message_no == 9550	) {
	    if( Na_GetNowMesVoice() == 0 ) {
		face_stat = 6;
		face_time0 = 10;
		face_chpt = 0 + (int)face_NO;
		break;
	    }
	} else {
	    if( !Na_GetNowMesVoice() && !face_time0 ) {
		face_stat += 1;
		face_time0 = 20;
	    }
	}

	face_chpt = 0 + (int)face_NO;
	if( face_time1 > 0 )
	    face_chpt = 1 + (int)face_NO;
	

	if((frcnt & 0x01) == 0) {
	    if(moji_cont1 < 37) {
		if( message_ad[moji_cont1+1] == 0x0f ) {
		    face_stat = 31;
		} else {
		    moji_cont1 += 1;
		}
	    }
	    if((moji_cont1 & 0x01) == 1) {
		if(message_pt) {
		    face_time1 = 2;
		}
	    }
	}
	break;
	
    case 5:
	if(face_time0 == 0) {
	    face_stat += 1;
	    face_time0 = 10;
	}
	face_chpt = 0 + (int)face_NO;
	break;
    case 6:
	if(face_time0 == 0) {
	    Na_StopMesVoice();
	    face_stat += 1;
	}

	face_chpt = 2;
	if(frcnt & 0x01)
	    face_chpt = 3;
	
	waku_size -= 0.26f;
	if(waku_size < 0.0f)
	    waku_size = 0.0f;
	break;
    case 7:
	face_size -= 0.25f;
	if(face_size == 0.00f) {
	    message_disp = 0;
	    msg_priority = 0;
	    face_stat = 0; 
//	    face_stat = 8; 
	}
	face_chpt = 2;
	if(frcnt & 0x01)
	    face_chpt = 3;
	break;

    case 8:
	face_chpt = 0 + (int)face_NO;
	waku_size = 1.3f;
	face_size = 1.0f;
	break;
    }

    if( (face_stat > 0 && face_stat != 100) && message_disp == 0 ) {
	face_display_sub();
	waku_display();
	
	if((int)face_NO == FACE_FALCO  ||
	   (int)face_NO == FACE_SLIPPY ||
	   (int)face_NO == FACE_PEPPY)  {
	    
	    if((int)face_NO == FACE_FALCO)
		i = 1;
	    if((int)face_NO == FACE_SLIPPY)
		i = 2;
	    if((int)face_NO == FACE_PEPPY)
		i = 3;

	    /*＊＊	仲間のシールドゲージ	＊＊＊＊*/
	    if( ( nakama_shield[ i]<=0 )&&( frcnt&0x03 ) ) {
		rcpsetmode( &NOW_DISP, RECTANGLE_A_PRIM );
		gDPSetPrimColor( NEXT_DISP, 0, 0,  255,  255,  0, 255 );
		small_moji_puts( 31.0f, 167.0f, 1.0f, 1.0f, "DOWN" );
	    }
	    nakama_shield_meter_disp( 22.0f, 165.0f, nakama_shield[ i] );
	}
	
	if( ( (int)face_NO == FACE_WOLF )||	/* ウルフチームの体力表示	*/
	    ( (int)face_NO == FACE_PIGMA )||
	    ( (int)face_NO == FACE_REON )||
	    ( (int)face_NO == FACE_ANDRU )||
	    
	    ( (int)face_NO == FACE_WOLF3 )||
	    ( (int)face_NO == FACE_PIGMA3 )||
	    ( (int)face_NO == FACE_REON3 )||
	    ( (int)face_NO == FACE_ANDRU3 ) ) {
	    switch( (int)face_NO ) {
	    case	FACE_WOLF3:
	    case	FACE_WOLF:	i = 4;	break;
	    case	FACE_REON3:
	    case	FACE_REON:	i = 5;	break;
	    case	FACE_PIGMA3:
	    case	FACE_PIGMA:	i = 6;	break;
	    case	FACE_ANDRU3:
	    case	FACE_ANDRU:	i = 7;	break;
	    default:			i = 0;	break;
	    }
	    nakama_shield_meter_disp( 22.0f, 165.0f, (int)((float)Enms[ i].life*2.55f) );
	}
#if 0
	    texture_a();
	    push_now();
	    translate_now( -185.0f, -123.0f, -443.0f, MULT_MTX );
	    scale_now( 0.05f, 0.05f, 1.0f, MULT_MTX );
	    set_matrix( &NOW_DISP );
	    PL_NO = 1;
	    parts_meter( NOW_DISP, (unsigned int)JT_Sm_01_CI8_txt,
			 (unsigned int)JT_Sm_02_CI8_txt,
			 (255 - nakama_shield[ i]) / 255.0f * 360.0f,
			 0.0f, 0.8f, 0 );
	    PL_NO = 0;
	    pull_now();

	    /*＊＊	仲間のゲージ枠	＊＊＊＊*/
	    rectangle_a_prim();
	    gDPSetPrimColor( NEXT_DISP, 0, 0, 0xff, 0xff, 0xff, 0xff );
	    texture_rectangleIA8( &NOW_DISP, JT_shield01_txt,
				  40, 37,
				  21.0f, 182.0f,
				  1.0f, 1.0f );
#endif	    
	pilot_name();
    }
    if( message_disp == 1 ) {
	waku_NOdisplay();
    }
}
#endif

/*+=====================================================================+
  |	パイロットメッセージ表示 (ハイスピード版)		        |
  +=====================================================================+*/
void face_turbo_display(void)
{
    int i;

    if(game_mode == PAUSE) return;

    if(face_time0 > 0) face_time0 -- ;
    if(face_time1 > 0) face_time1 -- ;

    switch(face_stat) {
    case 0:
	break;

    case 100:
	face_chpt = 1000;
	face_stat = 1;
	face_size = 0.0f;
	waku_size = 0.0f;
	moji_cont1 = msglen( message_ad );
	if(play_mode != P_SINGLE)
	    face_stat = 0;
	break;

    case 1:
	face_size += 0.02f;
	if(face_size == 0.04f) {
	    face_stat += 1;
	    face_time0 = 5;
	}
#if 0
	face_chpt = 2;
	if(frcnt & 0x01)
	    face_chpt = 3;
#endif
	break;
    case 2:
	if(face_time0 == 0) {
	    face_stat += 1;
	    face_time0 = 5;
	}
	face_chpt = 2;
	if(frcnt & 0x01)
	    face_chpt = 3;
	break;

    case 3:
	if(face_time0 == 0) {
	    face_stat += 1;
	    face_time0 = 5;
	    if( system_mode == TITLE ) {
		face_time0 = 30;
	    }
	}
	face_chpt = 0 + (int)face_NO;

	waku_size += 0.015f;
	if(waku_size > 0.07f)
	    waku_size = 0.07f;
	break;

#if 0
	/* 話のつづき */
    case 31: /* メッセージボードクリア */
	face_stat += 1;
	face_time0 = 70 - face_time0;
	break;
    case 32:
	if( face_time0 == 0 ) {
	    msg_ad_offset += moji_cont1 + 3;
	    moji_cont1 = 0;
	    face_time0 = 70;
	    face_stat = 4;
	}
	break;
#endif
	
    case 4: /* 話をしてる途中 */
	if( face_time0 == 0 ) {
	    face_stat += 1;
	    face_time0 = 10; 
	}


#if 0
	face_chpt = 0 + (int)face_NO;
	if( face_time1 > 0 )
	    face_chpt = 1 + (int)face_NO;

	if((frcnt & 0x03) == 0) {
	    face_time1 = 2;
	}

	if((frcnt & 0x01) == 0) {
	    if(moji_cont1 < 37) {
		if( message_ad[msg_ad_offset+moji_cont1+1] == 0x0f ) {
		    face_stat = 31;
		} else {
		    moji_cont1 += 1;
		}
	    }
	    if((moji_cont1 & 0x01) == 1) {
		if(message_pt)
		    face_time1 = 2;
	    }
	}
#endif
	break;

    case 5:
	if(face_time0 == 0) {
	    face_stat += 1;
	    face_time0 = 5;
	}
	face_chpt = 0 + (int)face_NO;
	break;
    case 6:
	if(face_time0 == 0) {
	    Na_StopMesVoice();
	    face_stat += 1;
	}

	face_chpt = 2;
	if(frcnt & 0x01)
	    face_chpt = 3;

	waku_size -= 0.015f;
	if(waku_size < 0.0f)
	    waku_size = 0.0f;
	break;
    case 7:
	face_size -= 0.02f;
	if(face_size == 0.00f) {
	    face_stat = 0;
	    face_time0 = 5;
	}
	face_chpt = 2;
	if(frcnt & 0x01)
	    face_chpt = 3;
	break;
    }
    
    if(face_stat > 0 && face_stat != 100) {

	face_display_sub();
	waku_display();
	
	if((int)face_NO == FACE_FALCO  ||
	   (int)face_NO == FACE_SLIPPY ||
	   (int)face_NO == FACE_PEPPY)  {
	    
	    if((int)face_NO == FACE_FALCO)
		i = 1;
	    if((int)face_NO == FACE_SLIPPY)
		i = 2;
	    if((int)face_NO == FACE_PEPPY)
		i = 3;
	    
	    push_now();
	    
	    texture_a();
	    
	    translate_now( -150.0f,  -115.0f,  -443.0f, MULT_MTX);
	    scale_now(0.068f, 0.068f, 1.0f, MULT_MTX);
	    set_matrix(&NOW_DISP);

	    PL_NO = 1;
//	    parts_meter(NOW_DISP, (unsigned int)JT_Sm_01_CI8_txt,
//			(unsigned int)JT_Sm_02_CI8_txt,
//			(float)(255 - nakama_shield[i]) / 255.0f * 360.0f,
//			0.0f, 0.8f, 0 );
	    PL_NO = 0;
	    pull_now();
	}
    }
}


