/************************************************************************
 *									*
 *	NU64 スターフォックス ENDING  処理                		*
 *									*
 ************************************************************************/
#include "fox_all.h"
#include "fox_main.h"
#include "fox_demo_poly.h"
#include "fox_ram.h"
#include "fox_gf_poly.h"
#include "fox_aw_poly.h"
#include "fox_end_poly.h"
#include "fox_eeprom.h"
#include "fox_npc_poly.h"
#include "../audio/audio_game.h"
//#undef		FOX_DEBUG
//#define		FOX_DEBUG	0
extern unsigned short END_Thankyou_txt[];
extern unsigned short END_Expart_txt[];
extern unsigned char MOJI_E_96_txt[];
extern unsigned long	end_moji_time;
extern int		total_score;
extern u16 		before_mode;
extern u8		Clear_Level;

extern 	void great_fox_display(void);
extern unsigned short END_Ground_txt[];

static int RankInCheck( void );

/*
 *	エンディング カメラ データ 構造体
 */
typedef struct {
    unsigned long	time_s;
    unsigned long	time_v;
    char		mode;
    xyz_t		a, as, ab;
    xyz_t		e, es, eb;
} ending_camera_data_t;

/*
 *	エンディング 走る データ 構造体
 */
typedef struct {
    void		*d0;
    void		*d1;
    short		mode;
    unsigned long	time_s;
    unsigned long	time_v;
    float		anime_time;
    xyz_t		t;
    xyz_t		r;
    xyz_t		s;
    xyz_t		ts;
    xyz_t		rs;
    xyz_t		yure;
    unsigned char	fr, fg, fb;
    short		fn, ff;
    unsigned char	er, eg, eb, ea;
    unsigned char	pr, pg, pb, pa;
    unsigned char	frame_default;
    unsigned char	p_mode;
} ending_run_data_t;

void ending_ground(
    unsigned long	,
    ending_run_data_t	*
);
void ending_gf(
    unsigned long	,
    ending_run_data_t	*
);
void ending_ball(
    unsigned long	,
    ending_run_data_t	*
);
void ending_ball1(
    unsigned long	,
    ending_run_data_t	*
);
void ending_run_light(
    unsigned long	,
    ending_run_data_t	*
);
void ending_rank(
    unsigned long	,
    ending_run_data_t	*
);

void A_Display(A_WING_STAT *);

A_WING_STAT	wing;

unsigned long	time_master = 0;
xyz_t		camera_e, camera_a, camera_r;

#if 4 < FOX_DEBUG
float	dx = 0.0f, dy = 0.0f, dz = 1.0f;
void	*chk_dp = NPC_CNship;
#endif

/************************************************************************
 *									*
 *	エンディング 文字						*
 *									*
 ************************************************************************/
/*======================================================================*
 *									*
 *	エンディング 文字 ＤＡＴＡ					*
 *									*
 *======================================================================*/
typedef struct {
    char		*txt;
    unsigned long	time_s;
    unsigned long	time_v;
    unsigned short	xp;
    unsigned short	yp;
    unsigned char	flg;
    unsigned char	lv;
    unsigned char	fi;
    unsigned char	fo;
} ending_moji_data_t;

ending_moji_data_t	ending_moji_data[] = {
/*  message			start	time	xp   yp	 LorS  lv  fi  fo */
    "PRODUCER",			100,	200,    0,  60,    0,	0, 25, 20,
    "SHIGERU MIYAMOTO",		100,	200,    0,  80,    1,	0, 25, 20,

    "DIRECTOR",			430,	180,    0,  60,    0,	0, 25, 20,
    "TAKAO SHIMIZU",		430,	180,    0,  80,    1,	0, 25, 20,

    "ART DIRECTOR",		630,	180,    0,  60,    0,	0, 25, 20,
    "TAKAYA IMAMURA",		630,	180,    0,  80,    1,	0, 25, 20,

    "CHIEF PROGRAMMER",		830,	180,    0,  60,    0,	0, 25, 20,
    "KAZUAKI MORITA",		830,	180,    0,  80,    1,	0, 25, 20,

    "SOUND COMPOSERS",		1030,	180,    0,  60,    0,	0, 25, 20,
    "KOJI KONDO",		1030,	180,    0,  80,    1,	0, 25, 20,
    "HAJIME WAKAI",		1030,	180,    0,  110,   1,	0, 25, 20,

    "SOUND EFFECTS PROGRAMMER",	1250,	180,    0,  60,    0,	0, 25, 20,
    "YOJI INAGAKI",		1250,	180,    0,  80,    1,	0, 25, 20,

    "GRAPHIC DESIGNERS",	1490,	180,    0,  60,    0,	0, 25, 20,
    "YOSHIKI HARUHANA",		1490,	180,    0,  80,    1,	0, 25, 20,
    "SATORU TAKIZAWA",		1490,	180,    0,  110,   1,	0, 25, 20,
    "MASANORI SATO",		1490,	180,    0,  140,   1,	0, 25, 20,

    "COURSE DESIGNERS",		2000,	180,    0,  60,    0,	0, 25, 20,
    "YASUHISA YAMAMURA",	2000,	180,    0,  80,    1,	0, 25, 20,
    "TAKUJI HOTTA",		2000,	180,    0,  110,   1,	0, 25, 20,

    "COURSE DESIGNERS",		2370,	180,    0,  60,    0,	0, 25, 20,
    "DAISUKE TSUJIMURA",	2370,	180,    0,  80,    1,	0, 25, 20,
    "YASUYUKI OYAGI",		2370,	180,    0,  110,   1,	0, 25, 20,

    "PROGRAMMERS",		2820,	180,    0,  60,    0,	0, 25, 20,
    "YUICHI YAMAMOTO",		2820,	180,    0,  80,    1,	0, 25, 20,
    "NOBUO OKAJIMA",		2820,	180,    0,  110,   1,	0, 25, 20,

    "PROGRAMMERS",		3200,	180,    0,  60,    0,	0, 25, 20,
    "SHIGEKI YOSHIDA",		3200,	180,    0,  80,    1,	0, 25, 20,
    "TAKAMITSU KUZUHARA",	3200,	180,    0,  110,   1,	0, 25, 20,

    "PROGRAMMERS",		3500,	180,    0,  60,    0,	0, 25, 20,
    "NOBUHIRO SUMIYOSHI",	3500,	180,    0,  80,    1,	0, 25, 20,
    "MAKOTO SASAKI",		3500,	180,    0,  110,   1,	0, 25, 20,
    "MASUMI TARUKADO",		3500,	180,    0,  140,   1,	0, 25, 20,

    "SCRIPT WRITER",		4100,	180,    0,  60,    0,	0, 25, 20,
    "MITSUHIRO TAKANO",		4100,	180,    0,  80,    1,	0, 25, 20,

    "CHARACTER VOICES",		4400,	180,    0,  60,    0,	0, 25, 20,
    "MIKE WEST",		4400,	180,    0,  80,    1,	0, 25, 20,
    "RICK MAY",			4400,	180,    0,  110,   1,	0, 25, 20,
    "LYSSA BROWNE",		4400,	180,    0,  140,   1,	0, 25, 20,
    "JOCK BLANEY",		4400,	180,    0,  170,   1,	0, 25, 20,

    "CHARACTER VOICES",		4700,	180,    0,  60,    0,	0, 25, 20,
    "DAVID WHITE",		4700,	180,    0,  80,    1,	0, 25, 20,
    "J. GREEN",			4700,	180,    0,  110,   1,	0, 25, 20,
    "BILL JOHNS",		4700,	180,    0,  140,   1,	0, 25, 20,

    "TECHNICAL SUPPORTERS",	5050,	120,    0,  60,    0,	0, 16, 13,
    "KENJI MATSUTANI",		5050,	120,    0,  80,    1,	0, 16, 13,
    "ATSUSHI NISHIWAKI",	5050,	120,    0,  110,   1,	0, 16, 13,
    "HIDEAKI SHIMIZU",		5050,	120,    0,  140,   1,	0, 16, 13,

    "TECHNICAL SUPPORTERS",	5280,	120,    0,  60,    0,	0, 16, 13,
    "YASUSHI IDA",		5280,	120,    0,  80,    1,	0, 16, 13,
    "HIROHITO YOSHIMOTO",	5280,	120,    0,  110,   1,	0, 16, 13,
    "YOSHINORI TANIMOTO",	5280,	120,    0,  140,   1,	0, 16, 13,

    "TECHNICAL SUPPORTERS",	5510,	120,    0,  60,    0,	0, 16, 13,
    "TAKAO SAWANO",		5510,	120,    0,  80,    1,	0, 16, 13,
    "HIRONOBU KAKUI",		5510,	120,    0,  110,   1,	0, 16, 13,
    "KENJI NISHIZAWA",		5510,	120,    0,  140,   1,	0, 16, 13,

    "TECHNICAL SUPPORTERS",	5740,	120,    0,  60,    0,	0, 16, 13,
    "TAKUYA KURIBAYASHI",	5740,	120,    0,  80,    1,	0, 16, 13,
    "TSUYOSHI TAKAHASHI",	5740,	120,    0,  110,   1,	0, 16, 13,
    "SHIN HASEGAWA",		5740,	120,    0,  140,   1,	0, 16, 13,

    "SUPERVISORS",		5970,	120,    0,  60,    0,	0, 16, 13,
    "TAKASHI TEZUKA",		5970,	120,    0,  80,    1,	0, 16, 13,
    "TOSHIHIKO NAKAGO",		5970,	120,    0,  110,   1,	0, 16, 13,

    "PROGRESS MANAGERS",	6200,	120,    0,  60,    0,	0, 16, 13,
    "KIMIYOSHI FUKUI",		6200,	120,    0,  80,    1,	0, 16, 13,
    "KEIZO KATO",		6200,	120,    0,  110,   1,	0, 16, 13,

    "SPECIAL THANKS TO",	6430,	120,    0,  60,    0,	0, 16, 13,
    "BENIMARU ITOH",		6430,	120,    0,  80,    1,	0, 16, 13,
    "SUPER MARIO CLUB",		6430,	120,    0,  110,    1,	0, 16, 13,
    "TRI-FILM",			6430,	120,    0,  140,   1,	0, 16, 13,
    "EAR FORCE",		6430,	120,    0,  170,   1,	0, 16, 13,

    "ENGLISH VERSION STAFF",	6900,	200,    0,  60,    0,	0, 25, 20,
    "JIM WORNELL",		6900,	200,    0,  80,    1,	0, 25, 20,
    "KENJI OKUBO",		6900,	200,    0,  110,   1,	0, 25, 20,
    "GREG RICHARDSON",		6900,	200,    0,  140,   1,	0, 25, 20,
    "KAYOMI MCDONALD",		6900,	200,    0,  170,   1,	0, 25, 20,

    "EXECUTIVE PRODUCER",	7400,	200,    0,  100,   0,	0, 25, 20,
    "HIROSHI YAMAUCHI",		7400,	200,    0,  120,   1,	0, 25, 20,

    "NINTENDO",			7800,	200,    0,  120,   1,	0, 25, 20,

//    "THE END",		8200,	380,    0,  110,   1,	1, 25, 20,
    MOJI_E_96_txt,		8200,	380,    0,  110,   2,	1, 25, 20,
};

/*======================================================================*
 *									*
 *	エンディング 文字						*
 *									*
 *======================================================================*/
void ending_moji(
    unsigned long	time
)
{
    unsigned char	a;
    int			i, x;

#if 4 < FOX_DEBUG
    rcpsetmode(&NOW_DISP02, RECT_RGBA_PRIM);
    COLOR8X8(200, 200, 200, 255);
    LOCATE8X8(32, 2);
    Printf("%5ld", time);
#endif

    for(i = 0; i < number(ending_moji_data); i += 1) {
	if(ending_moji_data[i].txt != NULL) {
	    if((ending_moji_data[i].time_s <= time)
	       && ((ending_moji_data[i].time_s
		    + ending_moji_data[i].time_v) > time)) {
		a = 0xff;
		if((ending_moji_data[i].time_s + ending_moji_data[i].fi)
		   > time) {
		    a = (time - ending_moji_data[i].time_s)
			* 0xff / ending_moji_data[i].fi;
		}
		if((ending_moji_data[i].time_s + ending_moji_data[i].time_v
		    - ending_moji_data[i].fo) < time) {
		    a = (ending_moji_data[i].time_s
			 + ending_moji_data[i].time_v - time)
			* 0xff / ending_moji_data[i].fo;
		}
		if(ending_moji_data[i].lv == 0 || Clear_Level == 1) {
		    if(ending_moji_data[i].flg == 1) {
#if 1
			x = (320 - mojiL_dot(ending_moji_data[i].txt)) / 2;
//			fade(&NOW_DISP,
//			     x, ending_moji_data[i].yp,
//			     x + mojiL_dot(ending_moji_data[i].txt),
//			     ending_moji_data[i].yp + 15,
//			     0, 0, 0, a / 2);
			rcpsetmode(&NOW_DISP, RECE_A_PRIM);
			gDPSetTextureFilter(NEXT_DISP, G_TF_POINT);
			gDPSetPrimColor(NEXT_DISP, 0, 0,  255, 255, 255, a);
			moji_puts(x, ending_moji_data[i].yp,
				  1.0f, 1.0f, ending_moji_data[i].txt);
#else
			x = (320 - (mojiS_dot(ending_moji_data[i].txt) * 2))
			    / 2;
			rcpsetmode(&NOW_DISP, RECE_A_PRIM);
			gDPSetTextureFilter(NEXT_DISP, G_TF_POINT);
			gDPSetPrimColor(NEXT_DISP, 0, 0,  255, 255, 255, a);
			small_moji_puts(x, ending_moji_data[i].yp,
					2.0f, 2.0f, ending_moji_data[i].txt);
#endif
		    } else if(ending_moji_data[i].flg == 2) {
			rcpsetmode(&NOW_DISP, RECE_A_PRIM);
			gDPSetTextureFilter(NEXT_DISP, G_TF_POINT);
			gDPSetPrimColor(NEXT_DISP, 0, 0,  255, 255, 255, a);
                        texture_rectangleIA8(&NOW_DISP,
                                             ending_moji_data[i].txt,
                                             192, 5,
                                             64.0f, 105.0f,
                                             1.0f, 1.0f);
                        texture_rectangleIA8(&NOW_DISP,
                                             ending_moji_data[i].txt + 960 * 1,
                                             192, 5,
                                             64.0f, 110.0f,
                                             1.0f, 1.0f);
                        texture_rectangleIA8(&NOW_DISP,
                                             ending_moji_data[i].txt + 960 * 2,
                                             192, 5,
                                             64.0f, 115.0f,
                                             1.0f, 1.0f);
                        texture_rectangleIA8(&NOW_DISP,
                                             ending_moji_data[i].txt + 960 * 3,
                                             192, 5,
                                             64.0f, 120.0f,
                                             1.0f, 1.0f);
                        texture_rectangleIA8(&NOW_DISP,
                                             ending_moji_data[i].txt + 960 * 4,
                                             192, 5,
                                             64.0f, 125.0f,
                                             1.0f, 1.0f);
                        texture_rectangleIA8(&NOW_DISP,
                                             ending_moji_data[i].txt + 960 * 5,
                                             192, 5,
                                             64.0f, 130.0f,
                                             1.0f, 1.0f);
		    } else {
#if 1
			x = (320 - mojiS_dot(ending_moji_data[i].txt)) / 2;
			rcpsetmode(&NOW_DISP, RECE_A_PRIM);
			gDPSetTextureFilter(NEXT_DISP, G_TF_POINT);
			gDPSetPrimColor(NEXT_DISP, 0, 0,  255, 155, 155, a);
			small_moji_puts(x, ending_moji_data[i].yp,
					1.0f, 1.0f, ending_moji_data[i].txt);
#else
			x = (320 - (mojiL_dot(ending_moji_data[i].txt) / 2))
			    / 2;
			rcpsetmode(&NOW_DISP, RECE_A_PRIM);
			gDPSetTextureFilter(NEXT_DISP, G_TF_POINT);
			gDPSetPrimColor(NEXT_DISP, 0, 0,  255, 255, 255, a);
			moji_puts(x, ending_moji_data[i].yp,
				  0.7f, 0.7f, ending_moji_data[i].txt);
#endif
		    }
		}
	    }
	}
    }
}

/************************************************************************
 *									*
 *	エンディング 走る						*
 *									*
 ************************************************************************/
static xyz_t    dt[300];

/*======================================================================*
 *									*
 *	エンディング ＤＭＡ						*
 *									*
 *======================================================================*/
void ending_dma(
    unsigned long	time,
    ending_run_data_t	*p
)
{
    (void)time;

    Dma_No = p->mode;
    min_retrace = p->frame_default;
    Back_star_f = p->anime_time;
}

/*======================================================================*
 *									*
 *	エンディング 星スクロール					*
 *									*
 *======================================================================*/
void ending_star(
    unsigned long	time,
    ending_run_data_t	*p
)
{
    (void)time;
    starXad += p->t.x;
    starYad += p->t.y;
}

/*======================================================================*
 *									*
 *	エンディング フェードイン ＆ アウト				*
 *									*
 *======================================================================*/
void ending_fade(
    unsigned long	time,
    ending_run_data_t	*p
)
{
    unsigned char	a = 0xff;

    if((p->time_s + p->fn) > time) {
	a = (time - p->time_s) * 0xff / p->fn;
    }
    if((p->time_s + p->time_v - p->ff) < time) {
	a = ((p->time_s + p->time_v - time) - 1) * 0xff / p->ff;
    }
    fade_R = p->pr;
    fade_G = p->pg;
    fade_B = p->pb;
    
    fade_A = fade_A_f = a;
    fade_A_ad = 0;

//    PRINTF("%d\n", a);
}

/*======================================================================*
 *									*
 *	エンディング フェードイン ＆ アウト １				*
 *									*
 *======================================================================*/
void ending_fade1(
    unsigned long	time,
    ending_run_data_t	*p
)
{
    unsigned char	a = 0xff;

    if((p->time_s + p->fn) > time) {
	a = (time - p->time_s) * 0xff / p->fn;
    }
    if((p->time_s + p->time_v - p->ff) < time) {
	a = (p->time_s + p->time_v - time) * 0xff / p->ff;
    }
    fade_R = fade_G = fade_B = fade_A = fade_A_f = fade_A_ad = 0;
    fade(&NOW_DISP, 8, 8, SCREEN_WD - 8, SCREEN_HT - 8,
         p->pr, p->pg, p->pb, a);
}

/*======================================================================*
 *									*
 *	エンディング ライト						*
 *									*
 *======================================================================*/
void ending_run_light(
    unsigned long	time,
    ending_run_data_t	*p
)
{
    xyz_t	l, lp;

    (void)time;

    rotateY_work(ANGLE(camera_r.y), SET_MTX);
    rotateX_work(ANGLE(camera_r.x), MULT_MTX);
    rotateZ_work(ANGLE(camera_r.z), MULT_MTX);
    l.x = p->t.x;
    l.y = p->t.y;
    l.z = p->t.z;
    MtxF_PositionRS_work(&l, &lp);
    light_in((int)(lp.x), (int)(lp.y), (int)(lp.z),
	     (int)(p->r.x), (int)(p->r.y), (int)(p->r.z),
	     (int)(p->s.x), (int)(p->s.y), (int)(p->s.z));
}

/*======================================================================*
 *									*
 *	エンディング ＥＸＰ						*
 *									*
 *======================================================================*/
void ending_exp(
    unsigned long	time,
    ending_run_data_t	*p
)
{
    unsigned char	a = 0;
    int			i;

    if((p->time_s + p->ff) > time) {
	a = ((p->time_s + p->ff) - time) * 0xff / p->ff;
    }
    fade_R = p->pr;
    fade_G = p->pg;
    fade_B = p->pb;
    
    fade_A = fade_A_f = a;
    fade_A_ad = 0;

    rcpsetmode(&NOW_DISP, RECE_A_PRIM);
    gDPSetPrimColor(NEXT_DISP, 0, 0, 255, 255, 255, 255);

    if(extra_mode != 0) {
	for(i = 0; i < 240; i += 4) {
	    if(Clear_Level == 0) {
		texture_rectangleRGBA16(&NOW_DISP, END_Thankyou_txt + 316 * i,
					316, 4, 0.0f, (float)i, 1.0f, 1.0f);
	    } else {
		texture_rectangleRGBA16(&NOW_DISP, END_Expart_txt + 316 * i,
					316, 4, 0.0f, (float)i, 1.0f, 1.0f);
	    }
	}
    } else {
	time_master = 7200;
    }
}

/*======================================================================*
 *									*
 *	エンディング １９９７						*
 *									*
 *======================================================================*/
void ending_1997(
    unsigned long	time,
    ending_run_data_t	*p
)
{
    unsigned char	a = 0xff;

    if((p->time_s + p->fn) > time) {
	a = (time - p->time_s) * 0xff / p->fn;
    }
    if((p->time_s + p->time_v - p->ff) < time) {
	a = (p->time_s + p->time_v - time) * 0xff / p->ff;
    }

    rcpsetmode(&NOW_DISP, p->mode);
    gDPSetPrimColor(NEXT_DISP, 0, 0, p->pr, p->pg, p->pb, a);
    texture_rectangleIA8(&NOW_DISP, MOJI_e1_txt, 16, 15,
			 p->t.x, p->t.y, 1.0f, 1.0f);
    texture_rectangleIA8(&NOW_DISP, MOJI_e9_txt, 16, 15,
			 p->t.x + 16.0f * 1, p->t.y, 1.0f, 1.0f);
    texture_rectangleIA8(&NOW_DISP, MOJI_e9_txt, 16, 15,
			 p->t.x + 16.0f * 2, p->t.y, 1.0f, 1.0f);
    texture_rectangleIA8(&NOW_DISP, MOJI_e7_txt, 16, 15,
			 p->t.x + 16.0f * 3, p->t.y, 1.0f, 1.0f);
}
/*======================================================================*
 *									*
 *	エンディング スコア ＆ ランキング				*
 *									*
 *======================================================================*/
void ending_rank(
    unsigned long	time,
    ending_run_data_t	*p
)
{
    unsigned char	a = 0xff;
    int			r;

    if((p->time_s + p->fn) > time) {
	a = (time - p->time_s) * 0xff / p->fn;
    }

    rcpsetmode(&NOW_DISP, p->mode);
    gDPSetPrimColor(NEXT_DISP, 0, 0, p->pr, p->pg, p->pb, a);

    small_moji_puts((short)(p->t.x), (short)(p->t.y),
		    p->s.x, p->s.y, "TOTAL HITS");
    large_moji_number((short)(p->t.x + 5), (short)(p->t.y + 13), total_score);

    r = RankInCheck();   
    if(r == ON && a == 0xff) {
	a = (time - (p->time_s + p->fn)) % 10;
	switch(a) {
	case 0:
	case 1:
	case 2:
	case 3:
	    a = 83 * a;
	    break;
	case 4:
	case 5:
	case 6:
	case 7:
	case 8:
	case 9:
	    a = 42 * (10 - a);
	    break;
	}
	gDPSetPrimColor(NEXT_DISP, 0, 0, p->pr, p->pg, p->pb, a);
	small_moji_puts((short)(p->t.x + 7), (short)(p->t.y + 31),
			p->s.x, p->s.y, "RANK IN!!");
    }
}

/************************************************************************/
/* ランクインしたかどうか調べる						*/
/************************************************************************/
static int RankInCheck( void )
{
    register int i,j,k,m;
    int rank;
    int nakama_total;
    int nakama_total2;
    int rank_totalhit[10];
    int rank_nakama_total[10][7];
    int zanki[10];

    nakama_total = 0;
    nakama_total2 = 0;

    for( i=0; i<StagePtr+1; i++ ) {
	nakama_total += ((NakamaDied[i]&0x00ff0000)>>16) & 0x01;
	nakama_total += ((NakamaDied[i]&0x0000ff00)>>8) & 0x01;
	nakama_total += (NakamaDied[i]&0x000000ff) & 0x01;
    }

    /** ランクインしたかどうか調べる **/
    for(i = 0; i < 10; i += 1) {
	rank_totalhit[i] = 0;
	zanki[i] = fox_save.rom[0].data.rank_zanki[i];
	for(j = 0; j < 7; j += 1) {
	    rank_totalhit[i] += fox_save.rom[0].data.rank_stage[i][j].hitcnt
		+ (fox_save.rom[0].data.rank_stage[i][j].hitcnt_h * 0x100);
	    rank_nakama_total[i][0] +=
		(fox_save.rom[0].data.rank_stage[i][j].live_peppy & 0x01);
	    rank_nakama_total[i][1] +=
		(fox_save.rom[0].data.rank_stage[i][j].live_slippy & 0x01);
	    rank_nakama_total[i][2] +=
		(fox_save.rom[0].data.rank_stage[i][j].live_falco & 0x01);
	}
    }
   
    /** ランクインしたかどうか調べる **/
    rank = -1;
    for( i=0; i<10; i++ ) {
	if( rank_totalhit[i] <= total_score ) {
	    /** 同じヒット数 **/
	    if( rank_totalhit[i] == total_score ) {
		/** じゃぁ、残機数は、 **/
		for( j=i; j<10; j++ ) {
		    if( rank_totalhit[j] != total_score ) {
			rank = j;
			break;
		    }
		    if( zanki[j] <= Player_zanki[PL_NO] ) {
			/** ヒット数,残機数同じ **/
			if( zanki[j] == Player_zanki[PL_NO] ) {
			    /** 仲間の合計 **/
			    for( k=j; k<10; k++ ) {
				if( zanki[k] != Player_zanki[PL_NO] ||
				    rank_totalhit[k] != total_score ) {
				    rank = k;
				    break;
				}
				nakama_total2 = 0;
				for( m=0; m<3; m++ ) {
				    nakama_total2 += rank_nakama_total[k][m];
				}
				if( nakama_total > nakama_total2 ) {
				    rank = k;
				    break;
				}
			    }
			} else {
			    rank = j;
			}
			break;
		    }
		}
	    } else {
		rank = i;
	    }
	    break;
	}
    }

    if( rank == -1 ) return( 0 );
    else             return( 1 );
}

/*======================================================================*
 *									*
 *	エンディング ボール						*
 *									*
 *======================================================================*/
void ending_ball(
    unsigned long	time,
    ending_run_data_t	*p
)
{
    float	f;

    if(p->t.z + (time - p->time_s) * p->ts.z < camera_e.z) {
	rcpsetmode(&NOW_DISP, TEXE_Z_A_BLEND_PRIMA);
    } else {
        rcpsetmode(&NOW_DISP, TEXE_A_BLEND_PRIMA);
    }
    gSPFogPosition(NEXT_DISP, p->fn, p->ff);
    gDPSetFogColor(NEXT_DISP, p->fr, p->fg, p->fb, 0);
    gDPSetEnvColor(NEXT_DISP, p->er, p->eg, p->eb, p->ea);
    gDPSetPrimColor(NEXT_DISP, 0, 0, p->pr, p->pg, p->pb, p->pa);
#if 4 < FOX_DEBUG
    if(p->d1 == chk_dp) {
	translate_now(p->t.x + dx + (time - p->time_s) * p->ts.x,
		      p->t.y + dy + (time - p->time_s) * p->ts.y,
		      p->t.z + dz + (time - p->time_s) * p->ts.z, MULT_MTX);
    } else {
	translate_now(p->t.x + (time - p->time_s) * p->ts.x,
		      p->t.y + (time - p->time_s) * p->ts.y,
		      p->t.z + (time - p->time_s) * p->ts.z, MULT_MTX);
    }
#else
    translate_now(p->t.x + (time - p->time_s) * p->ts.x,
		  p->t.y + (time - p->time_s) * p->ts.y,
		  p->t.z + (time - p->time_s) * p->ts.z, MULT_MTX);
#endif
    scale_now(p->s.x + (time % 3) * 0.01f,
	      p->s.y + (time % 3) * 0.01f,
	      p->s.z + (time % 3) * 0.01f, MULT_MTX);
    f = sinf(time * 0.1f + p->frame_default);
//    PRINTF("kakudo %d %f\n",  p->frame_default, f);
    switch(p->p_mode) {
    case 1:
	rotateY_now(ANGLE(-camera_r.y + p->r.y + f * p->yure.y
			  + (time - p->time_s) * p->rs.y), MULT_MTX);
	rotateX_now(ANGLE(-camera_r.x + p->r.x + f * p->yure.x
			  + (time - p->time_s) * p->rs.x), MULT_MTX);
	rotateZ_now(ANGLE(camera_r.z + p->r.z + f * p->yure.z
			  + (time - p->time_s) * p->rs.z), MULT_MTX);
	break;
    default:
	rotateY_now(
	    ANGLE(p->r.y + f * p->yure.y + (time - p->time_s) * p->rs.y),
	    MULT_MTX);
	rotateX_now(
	    ANGLE(p->r.x + f * p->yure.x + (time - p->time_s) * p->rs.x),
	    MULT_MTX);
	rotateZ_now(
	    ANGLE(p->r.z + f * p->yure.z + (time - p->time_s) * p->rs.z),
	    MULT_MTX);
	break;
    }
    set_matrix(&NOW_DISP);
    gSPDisplayList(NEXT_DISP, END_Ball);
}

void ending_ball1(
    unsigned long	time,
    ending_run_data_t	*p
)
{
    float	f;

    if(p->t.z + (time - p->time_s) * p->ts.z < camera_e.z) {
	rcpsetmode(&NOW_DISP, TEXE_Z_A_BLEND_PRIMA);
    } else {
        rcpsetmode(&NOW_DISP, TEXE_A_BLEND_PRIMA);
    }
    gSPFogPosition(NEXT_DISP, p->fn, p->ff);
    gDPSetFogColor(NEXT_DISP, p->fr, p->fg, p->fb, 0);
    gDPSetEnvColor(NEXT_DISP, p->er, p->eg, p->eb, p->ea);
    gDPSetPrimColor(NEXT_DISP, 0, 0, p->pr, p->pg, p->pb, p->pa);
#if 4 < FOX_DEBUG
    if(p->d1 == chk_dp) {
	translate_now(p->t.x + dx + (time - p->time_s) * p->ts.x,
		      p->t.y + dy + (time - p->time_s) * p->ts.y,
		      p->t.z + dz + (time - p->time_s) * p->ts.z, MULT_MTX);
    } else {
	translate_now(p->t.x + (time - p->time_s) * p->ts.x,
		      p->t.y + (time - p->time_s) * p->ts.y,
		      p->t.z + (time - p->time_s) * p->ts.z, MULT_MTX);
    }
#else
    translate_now(p->t.x + (time - p->time_s) * p->ts.x,
		  p->t.y + (time - p->time_s) * p->ts.y,
		  p->t.z + (time - p->time_s) * p->ts.z, MULT_MTX);
#endif
    f = sinf(time * 0.1f + p->frame_default);
//    PRINTF("kakudo %d %f\n",  p->frame_default, f);
    switch(p->p_mode) {
    case 1:
	rotateY_now(ANGLE(-camera_r.y + p->r.y + f * p->yure.y
			  + (time - p->time_s) * p->rs.y), MULT_MTX);
	rotateX_now(ANGLE(-camera_r.x + p->r.x + f * p->yure.x
			  + (time - p->time_s) * p->rs.x), MULT_MTX);
	rotateZ_now(ANGLE(camera_r.z + p->r.z + f * p->yure.z
			  + (time - p->time_s) * p->rs.z), MULT_MTX);
	break;
    default:
	rotateY_now(
	    ANGLE(p->r.y + f * p->yure.y + (time - p->time_s) * p->rs.y),
	    MULT_MTX);
	rotateX_now(
	    ANGLE(p->r.x + f * p->yure.x + (time - p->time_s) * p->rs.x),
	    MULT_MTX);
	rotateZ_now(
	    ANGLE(p->r.z + f * p->yure.z + (time - p->time_s) * p->rs.z),
	    MULT_MTX);
	break;
    }
    scale_now(p->s.x + (time % 3) * 0.5f,
	      p->s.y + (time % 3) * 0.5f,
	      p->s.z + (time % 3) * 0.5f, MULT_MTX);
    set_matrix(&NOW_DISP);
    gSPDisplayList(NEXT_DISP, END_Ball);
}

/*======================================================================*
 *									*
 *	エンディング 地面						*
 *									*
 *======================================================================*/
void ending_ground(
    unsigned long	time,
    ending_run_data_t	*p
)
{
    float	f;

    Back_star_f = 0;
    rcpsetmode(&NOW_DISP, p->mode);
    gSPFogPosition(NEXT_DISP, p->fn, p->ff);
    gDPSetFogColor(NEXT_DISP, p->fr, p->fg, p->fb, 0);
    gDPSetPrimColor(NEXT_DISP, 0, 0, p->pr, p->pg, p->pb, p->pa);
#if 4 < FOX_DEBUG
    if(p->d1 == chk_dp) {
	translate_now(p->t.x + dx + (time - p->time_s) * p->ts.x,
		      p->t.y + dy + (time - p->time_s) * p->ts.y,
		      p->t.z + dz + (time - p->time_s) * p->ts.z, MULT_MTX);
    } else {
	translate_now(p->t.x + (time - p->time_s) * p->ts.x,
		      p->t.y + (time - p->time_s) * p->ts.y,
		      p->t.z + (time - p->time_s) * p->ts.z, MULT_MTX);
    }
#else
    translate_now(p->t.x + (time - p->time_s) * p->ts.x,
		  p->t.y + (time - p->time_s) * p->ts.y,
		  p->t.z + (time - p->time_s) * p->ts.z, MULT_MTX);
#endif
    scale_now(p->s.x, p->s.y, p->s.z, MULT_MTX);
    f = sinf(time * 0.1f + p->frame_default);
    rotateY_now(ANGLE(p->r.y + f * p->yure.y + (time - p->time_s) * p->rs.y),
		MULT_MTX);
    rotateX_now(ANGLE(p->r.x + f * p->yure.x + (time - p->time_s) * p->rs.x),
		MULT_MTX);
    rotateZ_now(ANGLE(p->r.z + f * p->yure.z + (time - p->time_s) * p->rs.z),
		MULT_MTX);
    set_matrix(&NOW_DISP);
    gDPLoadTextureBlock(NEXT_DISP, END_Ground_txt,
			G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, 32, 0,
			G_TX_WRAP | G_TX_NOMIRROR, G_TX_WRAP | G_TX_NOMIRROR,
			5, 5, G_TX_NOLOD, G_TX_NOLOD);
    g_Nin_SetUpTileDescrip2(NEXT_DISP, G_IM_FMT_RGBA, G_IM_SIZ_16b,
			    32, 32, 0, 0, G_TX_WRAP, 5, 0, G_TX_WRAP, 5, 0,
/*			    time * (dz * 0.1f), 0); */
			    time * 14, 0);
    gSPDisplayList(NEXT_DISP, END_Ground);
}

/*======================================================================*
 *									*
 *	エンディング グレート フォックス号				*
 *									*
 *======================================================================*/
void ending_gf(
    unsigned long	time,
    ending_run_data_t	*p
)
{
    float	f;

    rcpsetmode(&NOW_DISP, p->mode);
    gSPFogPosition(NEXT_DISP, p->fn, p->ff);
    gDPSetFogColor(NEXT_DISP, p->fr, p->fg, p->fb, 0);
    gDPSetPrimColor(NEXT_DISP, 0, 0, p->pr, p->pg, p->pb, p->pa);
#if 4 < FOX_DEBUG
    if(p->d1 == chk_dp) {
	translate_now(p->t.x + dx + (time - p->time_s) * p->ts.x,
		      p->t.y + dy + (time - p->time_s) * p->ts.y,
		      p->t.z + dz + (time - p->time_s) * p->ts.z, MULT_MTX);
    } else {
	translate_now(p->t.x + (time - p->time_s) * p->ts.x,
		      p->t.y + (time - p->time_s) * p->ts.y,
		      p->t.z + (time - p->time_s) * p->ts.z, MULT_MTX);
    }
#else
    translate_now(p->t.x + (time - p->time_s) * p->ts.x,
		  p->t.y + (time - p->time_s) * p->ts.y,
		  p->t.z + (time - p->time_s) * p->ts.z, MULT_MTX);
#endif
    scale_now(p->s.x, p->s.y, p->s.z, MULT_MTX);
    f = sinf(time * 0.1f + p->frame_default);
    rotateY_now(ANGLE(p->r.y + f * p->yure.y + (time - p->time_s) * p->rs.y),
		MULT_MTX);
    rotateX_now(ANGLE(p->r.x + f * p->yure.x + (time - p->time_s) * p->rs.x),
		MULT_MTX);
    rotateZ_now(ANGLE(p->r.z + f * p->yure.z + (time - p->time_s) * p->rs.z),
		MULT_MTX);
    set_matrix(&NOW_DISP);
    mapno = -1;
    great_fox_display();
}

/*======================================================================*
 *									*
 *	エンディング キャット						*
 *									*
 *======================================================================*/
void ending_npc_cat(
    unsigned long	time,
    ending_run_data_t	*p
)
{
    float	f;

    if(StageClearSwitch[ZO] == 0) return;

    rcpsetmode(&NOW_DISP, p->mode);
    gSPFogPosition(NEXT_DISP, p->fn, p->ff);
    gDPSetFogColor(NEXT_DISP, p->fr, p->fg, p->fb, 0);
    gDPSetEnvColor(NEXT_DISP, p->er, p->eg, p->eb, p->ea);
    gDPSetPrimColor(NEXT_DISP, 0, 0, p->pr, p->pg, p->pb, p->pa);
#if 4 < FOX_DEBUG
    if(p->d0 == chk_dp) {
	translate_now(p->t.x + dx + (time - p->time_s) * p->ts.x,
		      p->t.y + dy + (time - p->time_s) * p->ts.y,
		      p->t.z + dz + (time - p->time_s) * p->ts.z, MULT_MTX);
    } else {
	translate_now(p->t.x + (time - p->time_s) * p->ts.x,
		      p->t.y + (time - p->time_s) * p->ts.y,
		      p->t.z + (time - p->time_s) * p->ts.z, MULT_MTX);
    }
#else
    translate_now(p->t.x + (time - p->time_s) * p->ts.x,
		  p->t.y + (time - p->time_s) * p->ts.y,
		  p->t.z + (time - p->time_s) * p->ts.z, MULT_MTX);
#endif
    scale_now(p->s.x, p->s.y, p->s.z, MULT_MTX);
    f = sinf(time * 0.1f + p->frame_default);
//    PRINTF("kakudo %d %f\n",  p->frame_default, f);
    switch(p->p_mode) {
    case 1:
	rotateY_now(ANGLE(-camera_r.y + p->r.y + f * p->yure.y
			  + (time - p->time_s) * p->rs.y), MULT_MTX);
	rotateX_now(ANGLE(-camera_r.x + p->r.x + f * p->yure.x
			  + (time - p->time_s) * p->rs.x), MULT_MTX);
	rotateZ_now(ANGLE(camera_r.z + p->r.z + f * p->yure.z
			  + (time - p->time_s) * p->rs.z), MULT_MTX);
	break;
    default:
	rotateY_now(
	    ANGLE(p->r.y + f * p->yure.y + (time - p->time_s) * p->rs.y),
	    MULT_MTX);
	rotateX_now(
	    ANGLE(p->r.x + f * p->yure.x + (time - p->time_s) * p->rs.x),
	    MULT_MTX);
	rotateZ_now(
	    ANGLE(p->r.z + f * p->yure.z + (time - p->time_s) * p->rs.z),
	    MULT_MTX);
	break;
    }
    set_matrix(&NOW_DISP);
    gSPDisplayList(NEXT_DISP, NPC_Catship);

    rcpsetmode(&NOW_DISP, TEXE_Z_A_BLEND_PRIMA);
    translate_now(0.0f, 0.0f, -60.0f, MULT_MTX);
    scale_now(0.8f + (time % 3) * 0.01f,
	      0.3f + (time % 3) * 0.01f,
	      0.8f + (time % 3) * 0.01f, MULT_MTX);
    set_matrix(&NOW_DISP);
    gSPDisplayList(NEXT_DISP, END_Ball);
}

/*======================================================================*
 *									*
 *	エンディング ビル						*
 *									*
 *======================================================================*/
void ending_npc_cn(
    unsigned long	time,
    ending_run_data_t	*p
)
{
    float	f;

    if(StageClearSwitch[KT] == 0) return;

    rcpsetmode(&NOW_DISP, p->mode);
    gSPFogPosition(NEXT_DISP, p->fn, p->ff);
    gDPSetFogColor(NEXT_DISP, p->fr, p->fg, p->fb, 0);
    gDPSetEnvColor(NEXT_DISP, p->er, p->eg, p->eb, p->ea);
    gDPSetPrimColor(NEXT_DISP, 0, 0, p->pr, p->pg, p->pb, p->pa);
#if 4 < FOX_DEBUG
    if(p->d0 == chk_dp) {
	translate_now(p->t.x + dx + (time - p->time_s) * p->ts.x,
		      p->t.y + dy + (time - p->time_s) * p->ts.y,
		      p->t.z + dz + (time - p->time_s) * p->ts.z, MULT_MTX);
    } else {
	translate_now(p->t.x + (time - p->time_s) * p->ts.x,
		      p->t.y + (time - p->time_s) * p->ts.y,
		      p->t.z + (time - p->time_s) * p->ts.z, MULT_MTX);
    }
#else
    translate_now(p->t.x + (time - p->time_s) * p->ts.x,
		  p->t.y + (time - p->time_s) * p->ts.y,
		  p->t.z + (time - p->time_s) * p->ts.z, MULT_MTX);
#endif
    scale_now(p->s.x, p->s.y, p->s.z, MULT_MTX);
    f = sinf(time * 0.1f + p->frame_default);
//    PRINTF("kakudo %d %f\n",  p->frame_default, f);
    switch(p->p_mode) {
    case 1:
	rotateY_now(ANGLE(-camera_r.y + p->r.y + f * p->yure.y
			  + (time - p->time_s) * p->rs.y), MULT_MTX);
	rotateX_now(ANGLE(-camera_r.x + p->r.x + f * p->yure.x
			  + (time - p->time_s) * p->rs.x), MULT_MTX);
	rotateZ_now(ANGLE(camera_r.z + p->r.z + f * p->yure.z
			  + (time - p->time_s) * p->rs.z), MULT_MTX);
	break;
    default:
	rotateY_now(
	    ANGLE(p->r.y + f * p->yure.y + (time - p->time_s) * p->rs.y),
	    MULT_MTX);
	rotateX_now(
	    ANGLE(p->r.x + f * p->yure.x + (time - p->time_s) * p->rs.x),
	    MULT_MTX);
	rotateZ_now(
	    ANGLE(p->r.z + f * p->yure.z + (time - p->time_s) * p->rs.z),
	    MULT_MTX);
	break;
    }
    set_matrix(&NOW_DISP);
    gSPDisplayList(NEXT_DISP, NPC_CNship);

    rcpsetmode(&NOW_DISP, TEXE_Z_A_BLEND_PRIMA);
    translate_now(0.0f, 0.0f, -50.0f, MULT_MTX);
    scale_now(0.5f + (time % 3) * 0.01f,
	      0.3f + (time % 3) * 0.01f,
	      0.5f + (time % 3) * 0.01f, MULT_MTX);
    set_matrix(&NOW_DISP);
    gSPDisplayList(NEXT_DISP, END_Ball);
}

/*======================================================================*
 *									*
 *	エンディング ＣＮ						*
 *									*
 *======================================================================*/
void ending_cn(
    unsigned long	time,
    ending_run_data_t	*p
)
{
    float		f;

    rcpsetmode(&NOW_DISP, p->mode);
    gSPFogPosition(NEXT_DISP, p->fn, p->ff);
    gDPSetFogColor(NEXT_DISP, p->fr, p->fg, p->fb, 0);
    gDPSetPrimColor(NEXT_DISP, 0, 0, p->pr, p->pg, p->pb, p->pa);
#if 4 < FOX_DEBUG
    if(p->d1 == chk_dp) {
	translate_now(camera_e.x + p->t.x + dx + (time - p->time_s) * p->ts.x,
		      camera_e.y + p->t.y + dy + (time - p->time_s) * p->ts.y,
		      camera_e.z + p->t.z + dz + (time - p->time_s) * p->ts.z,
		      MULT_MTX);
    } else {
	translate_now(camera_e.x + p->t.x + (time - p->time_s) * p->ts.x,
		      camera_e.y + p->t.y + (time - p->time_s) * p->ts.y,
		      camera_e.z + p->t.z + (time - p->time_s) * p->ts.z,
		      MULT_MTX);
    }
#else
    translate_now(camera_e.x + p->t.x + (time - p->time_s) * p->ts.x,
		  camera_e.y + p->t.y + (time - p->time_s) * p->ts.y,
		  camera_e.z + p->t.z + (time - p->time_s) * p->ts.z,
		  MULT_MTX);
#endif
    scale_now(p->s.x, p->s.y, p->s.z, MULT_MTX);
    f = sinf(time * 0.1f + p->frame_default);
    rotateY_now(ANGLE(p->r.y + f * p->yure.y + (time - p->time_s) * p->rs.y),
		MULT_MTX);
    rotateX_now(ANGLE(p->r.x + f * p->yure.x + (time - p->time_s) * p->rs.x),
		MULT_MTX);
    rotateZ_now(ANGLE(p->r.z + f * p->yure.z + (time - p->time_s) * p->rs.z),
		MULT_MTX);
    set_matrix(&NOW_DISP);
    gSPDisplayList(NEXT_DISP, END_Planet);
}

/*======================================================================*
 *									*
 *	エンディング ＢＭ						*
 *									*
 *======================================================================*/
void ending_bm(
    unsigned long	time,
    ending_run_data_t	*p
)
{
//    float	f = 0.0f;
    (void)time;

//    if(camera_r.y != 0.0f) {
//	f = Tanf(ANGLE(camera_r.y));
//	f = f * p->t.z;
//	PRINTF("%d %f %f\n", (int)camera_r.y, f, camera_e.x);
//    }
    rcpsetmode(&NOW_DISP01, p->mode);
    rotateY_now(ANGLE(camera_r.y), SET_MTX);
    rotateX_now(ANGLE(camera_r.x), MULT_MTX);
    rotateZ_now(ANGLE(camera_r.z), MULT_MTX);
    translate_now(p->t.x, p->t.y, p->t.z, MULT_MTX);
//    translate_now(f, p->t.y, p->t.z, MULT_MTX);
    scale_now(p->s.x, p->s.y, p->s.z, MULT_MTX);
    set_matrix(&NOW_DISP01);
    gSPDisplayList(NEXT_DISP01, END_BM);
}

/*======================================================================*
 *									*
 *	エンディング 蛙頭						*
 *									*
 *======================================================================*/
void ending_slp(
    unsigned long	time,
    ending_run_data_t	*p
)
{
    float	f;

    rcpsetmode(&NOW_DISP, p->mode);
    gSPFogPosition(NEXT_DISP, p->fn, p->ff);
    gDPSetFogColor(NEXT_DISP, p->fr, p->fg, p->fb, 0);
    gDPSetEnvColor(NEXT_DISP, p->er, p->eg, p->eb, p->ea);
    gDPSetPrimColor(NEXT_DISP, 0, 0, p->pr, p->pg, p->pb, p->pa);
#if 4 < FOX_DEBUG
    if(p->d1 == chk_dp) {
	translate_now(p->t.x + dx + (time - p->time_s) * p->ts.x,
		      p->t.y - 6.0f + dy + (time - p->time_s) * p->ts.y,
		      p->t.z + dz + (time - p->time_s) * p->ts.z, MULT_MTX);
    } else {
	translate_now(p->t.x + (time - p->time_s) * p->ts.x,
		      p->t.y - 6.0f + (time - p->time_s) * p->ts.y,
		      p->t.z + (time - p->time_s) * p->ts.z, MULT_MTX);
    }
#else
    translate_now(p->t.x + (time - p->time_s) * p->ts.x,
		  p->t.y - 6.0f + (time - p->time_s) * p->ts.y,
		  p->t.z + (time - p->time_s) * p->ts.z, MULT_MTX);
#endif
    scale_now(p->s.x, p->s.y, p->s.z, MULT_MTX);
    f = sinf(time * 0.2f + p->frame_default);
//    PRINTF("kakudo %d %f\n",  p->frame_default, f);
    switch(p->p_mode) {
    case 1:
	rotateY_now(ANGLE(-camera_r.y + p->r.y + f * p->yure.y
			  + (time - p->time_s) * p->rs.y), MULT_MTX);
	rotateX_now(ANGLE(-camera_r.x + p->r.x + f * p->yure.x
			  + (time - p->time_s) * p->rs.x), MULT_MTX);
	rotateZ_now(ANGLE(camera_r.z + p->r.z + f * p->yure.z
			  + (time - p->time_s) * p->rs.z), MULT_MTX);
	break;
    default:
	rotateY_now(
	    ANGLE(p->r.y + f * p->yure.y + (time - p->time_s) * p->rs.y),
	    MULT_MTX);
	rotateX_now(
	    ANGLE(p->r.x + f * p->yure.x + (time - p->time_s) * p->rs.x),
	    MULT_MTX);
	rotateZ_now(
	    ANGLE(p->r.z + f * p->yure.z + (time - p->time_s) * p->rs.z),
	    MULT_MTX);
	break;
    }
    translate_now(0.0f, 480.0f, 0.0f, MULT_MTX);
    set_matrix(&NOW_DISP);
    gSPDisplayList(NEXT_DISP, AW_Slippy_head);
}

/*======================================================================*
 *									*
 *	エンディング アンドルフ						*
 *									*
 *======================================================================*/
void ending_and(
    unsigned long	time,
    ending_run_data_t	*p
)
{
    unsigned char	a = 0xff;
    float		f;

    if(Clear_Level == 1) {
	return;
    }

    if(time == p->time_s) {
	Na_StartSystemSe(NA_SE_VO_ANDORF_LAUGH);
    }
    rcpsetmode(&NOW_DISP, p->mode);
    gDPSetFogColor(NEXT_DISP, p->fr, p->fg, p->fb, 0);
    gDPSetEnvColor(NEXT_DISP, p->er, p->eg, p->eb, p->ea);
    if((p->time_s + p->fn) > time) {
	a = (time - p->time_s) * 0xff / p->fn;
    }
    gDPSetPrimColor(NEXT_DISP, 0, 0, p->pr, p->pg, p->pb, a);
#if 4 < FOX_DEBUG
    if(p->d1 == chk_dp) {
	translate_now(p->t.x + dx + (time - p->time_s) * p->ts.x,
		      p->t.y + dy + (time - p->time_s) * p->ts.y,
		      p->t.z + dz + (time - p->time_s) * p->ts.z, MULT_MTX);
    } else {
	translate_now(p->t.x + (time - p->time_s) * p->ts.x,
		      p->t.y + (time - p->time_s) * p->ts.y,
		      p->t.z + (time - p->time_s) * p->ts.z, MULT_MTX);
    }
#else
    translate_now(p->t.x + (time - p->time_s) * p->ts.x,
		  p->t.y + (time - p->time_s) * p->ts.y,
		  p->t.z + (time - p->time_s) * p->ts.z, MULT_MTX);
#endif
    scale_now(p->s.x, p->s.y, p->s.z, MULT_MTX);
    f = sinf(time * 0.2f + p->frame_default);
//    PRINTF("kakudo %d %f\n",  p->frame_default, f);
    switch(p->p_mode) {
    case 1:
	rotateY_now(ANGLE(-camera_r.y + p->r.y + f * p->yure.y
			  + (time - p->time_s) * p->rs.y), MULT_MTX);
	rotateX_now(ANGLE(-camera_r.x + p->r.x + f * p->yure.x
			  + (time - p->time_s) * p->rs.x), MULT_MTX);
	rotateZ_now(ANGLE(camera_r.z + p->r.z + f * p->yure.z
			  + (time - p->time_s) * p->rs.z), MULT_MTX);
	break;
    default:
	rotateY_now(
	    ANGLE(p->r.y + f * p->yure.y + (time - p->time_s) * p->rs.y),
	    MULT_MTX);
	rotateX_now(
	    ANGLE(p->r.x + f * p->yure.x + (time - p->time_s) * p->rs.x),
	    MULT_MTX);
	rotateZ_now(
	    ANGLE(p->r.z + f * p->yure.z + (time - p->time_s) * p->rs.z),
	    MULT_MTX);
	break;
    }
    set_matrix(&NOW_DISP);
    gSPDisplayList(NEXT_DISP, END_And);
}

/*======================================================================*
 *									*
 *	エンディング ＥＮＤ						*
 *									*
 *======================================================================*/
void ending_end(
    unsigned long	time,
    ending_run_data_t	*p
)
{
    (void)time;
    (void)p;

    before_mode = ENDING;
    system_mode = OPTION;
    system_time = 2;
    option_mode = OPTION_WAIT;
    display_mode = DISPLAY_NOTH;
    BG_color = 0x00; /** 背景色 **/
    Back_star_f = OFF;

    Key_wait_time = 10;
}

/*======================================================================*
 *									*
 *	エンディング Ａ−ＷＩＮＧ (ＦＯＸ)				*
 *									*
 *======================================================================*/
void ending_awing(
    unsigned long	time,
    ending_run_data_t	*p
)
{
    float	f;

    rcpsetmode(&NOW_DISP, p->mode);
    gSPFogPosition(NEXT_DISP, p->fn, p->ff);
    gDPSetFogColor(NEXT_DISP, p->fr, p->fg, p->fb, 0);
    gDPSetEnvColor(NEXT_DISP, p->er, p->eg, p->eb, p->ea);
    gDPSetPrimColor(NEXT_DISP, 0, 0, p->pr, p->pg, p->pb, p->pa);
#if 4 < FOX_DEBUG
    if(p->d0 == chk_dp) {
	translate_now(p->t.x + dx + (time - p->time_s) * p->ts.x,
		      p->t.y + dy + (time - p->time_s) * p->ts.y,
		      p->t.z + dz + (time - p->time_s) * p->ts.z, MULT_MTX);
    } else {
	translate_now(p->t.x + (time - p->time_s) * p->ts.x,
		      p->t.y + (time - p->time_s) * p->ts.y,
		      p->t.z + (time - p->time_s) * p->ts.z, MULT_MTX);
    }
#else
    translate_now(p->t.x + (time - p->time_s) * p->ts.x,
		  p->t.y + (time - p->time_s) * p->ts.y,
		  p->t.z + (time - p->time_s) * p->ts.z, MULT_MTX);
#endif
    scale_now(p->s.x, p->s.y, p->s.z, MULT_MTX);
    f = sinf(time * 0.1f + p->frame_default);
    rotateY_now(ANGLE(p->r.y + f * p->yure.y + (time - p->time_s) * p->rs.y),
		MULT_MTX);
    rotateX_now(ANGLE(p->r.x + f * p->yure.x + (time - p->time_s) * p->rs.x),
		MULT_MTX);
    rotateZ_now(ANGLE(p->r.z + f * p->yure.z + (time - p->time_s) * p->rs.z),
		MULT_MTX);
    set_matrix(&NOW_DISP);

    wing.gun_XP = 
	wing.wing_XA = 
	wing.wing_YA = 
	wing.wing_ZA = 
	wing.flap_R1 = wing.flap_R2 = 
	wing.flap_L1 = wing.flap_L2 = 
	wing.wing_YA2 = 0.0f;
    
    wing.gun_YP = 0.0f;
    if(time > 520 && time < 720) {
	wing.kao = 1;
    } else {
	wing.kao = 0;
    }
    wing.kao_XA  = camera_r.x;
    wing.kao_YA  = -camera_r.y;
    wing.canopi_XA = 0.0f;
    
    A_Display(&wing);
}
/*======================================================================*
 *									*
 *	エンディング 走る ＤＡＴＡ					*
 *									*
 *======================================================================*/
ending_run_data_t	ending_run_data[] = {
    NULL,			ending_dma,		0,
    0,		3000,		1000.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    2,		0,
    NULL,			ending_run_light,	0,
    100,	2800,		0.0f,
    59.0f,	58.0f,		13.0f,
    100.0f,	60.0f,		50.0f,
    40.0f,	40.0f,		40.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    0,		0,
    NULL,			ending_star,		TEXT_A,
    690,	30,		1.0f,
    0.7f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    0,		0,
    NULL,			ending_star,		TEXT_A,
    800,	119,		1.0f,
    1.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    0,		0,
    NULL,			ending_star,		TEXT_A,
    920,	200,		1.0f,
    -1.2f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    0,		0,
    NULL,			ending_bm,		TEXT_A,
    100,	1710,		1.0f,
    0.0f,	0.0f,		-10000.0f,
    0.0f,	0.0f,		0.0f,
    40.0f,	40.0f,		40.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    0,		0,
    NULL,			ending_gf,		TEXT_Z_LIGHT_FOG,
    520,	800,		1.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    1.0f,	1.0f,		1.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    0,		0,
    NULL,		ending_npc_cat,		TEXT_Z_LIGHT_FOG,
    100,	820,		1.0f,
    -900.0f,	600.0f,		-1200.0f,
    0.0f,	0.0f,		0.0f,
    1.0f,	1.0f,		1.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.2f,
    0,		0,		0,		995,		1000,
    0,		0,		255,		0,
    255,	255,		255,		255,
    4,		0,
    NULL,		ending_npc_cat,		TEXT_Z_LIGHT_FOG,
    920,	960,		1.0f,
    -900.0f,	600.0f,		-1200.0f,
    0.0f,	0.0f,		0.0f,
    1.0f,	1.0f,		1.0f,
    0.0f,	0.0f,		6.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.2f,
    0,		0,		0,		995,		1000,
    0,		0,		255,		0,
    255,	255,		255,		255,
    4,		0,
    &AW_A_wing_Space_anm,	AW_A_wing_list,		TEXT_Z_LIGHT_FOG,
    100,	1780,		1.0f,
    -1000.0f,	500.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    1.0f,	1.0f,		1.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.2f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    3,		0,
    AW_Falco_head,		NULL,			TEXT_Z_LIGHT_FOG,
    920,	150,		1.0f,
    -1000.0f,	506.8f,		-16.0f,
    5.0f,	-40.0f,		0.0f,
    0.012f,	0.012f,		0.012f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.2f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    7,		0,
    AW_Falco_head,		NULL,			TEXT_Z_LIGHT_FOG,
    1070,	19,		1.0f,
    -1000.0f,	506.8f,		-16.0f,
    5.0f,	-40.0f,		0.0f,
    0.012f,	0.012f,		0.012f,
    0.0f,	0.0f,		0.0f,
    0.0f,	2.0f,		0.0f,
    0.0f,	0.0f,		0.2f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    7,		0,
    AW_Falco_head,		NULL,			TEXT_Z_LIGHT_FOG,
    1089,	1,		1.0f,
    -1000.0f,	506.8f,		-16.0f,
    5.0f,	-1.0f,		0.0f,
    0.012f,	0.012f,		0.012f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.2f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    7,		0,
    AW_Falco_head,		NULL,			TEXT_Z_LIGHT_FOG,
    1090,	30,		1.0f,
    -1000.0f,	506.8f,		-16.0f,
    5.0f,	0.0f,		0.0f,
    0.012f,	0.012f,		0.012f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.2f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    7,		0,
    AW_A_wing_Canopi,		NULL,		TEXT_Z_A_LIGHT_FOG_PRIM,
    100,	1020,		1.0f,
    -1000.0f,	516.9f,		-25.9f,
    0.0f,	0.0f,		0.0f,
    1.0f,	1.0f,		1.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.2f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    255,	255,		255,		140,
    7,		0,
    NULL,			ending_ball,		TEXE_Z_A_BLEND_PRIMA,
    100,	1780,		1.0f,
    -1000.0f,	500.0f,		-64.0f,
    0.0f,	0.0f,		0.0f,
    0.5f,	0.3f,		0.5f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    240,	176,		64,		996,		1000,
    0,		0,		255,		0,
    255,	255,		255,		255,
    0,		0,
    &AW_A_wing_Space_anm,	AW_A_wing_list,		TEXT_Z_LIGHT_FOG,
    100,	1780,		1.0f,
    -1000.0f,	-500.0f,	0.0f,
    0.0f,	0.0f,		0.0f,
    1.0f,	1.0f,		1.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.2f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    5,		0,
    NULL,			ending_slp,		TEXT_Z_LIGHT_FOG,
    1120,	200,		1.0f,
    -1000.0f,	-493.2f,	-16.0f,
    0.0f,	0.0f,		0.0f,
    0.012f,	0.012f,		0.012f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		5.0f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    7,		0,
    AW_A_wing_Canopi,		NULL,		TEXT_Z_A_LIGHT_FOG_PRIM,
    1120,	200,		1.0f,
    -1000.0f,	-483.1f,	-25.9f,
    0.0f,	0.0f,		0.0f,
    1.0f,	1.0f,		1.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.2f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    255,	255,		255,		140,
    7,		0,
    NULL,			ending_ball,		TEXE_Z_A_BLEND_PRIMA,
    100,	1780,		1.0f,
    -1000.0f,	-500.0f,	-57.0f,
    0.0f,	0.0f,		0.0f,
    0.5f,	0.3f,		0.5f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    240,	176,		64,		996,		1000,
    0,		0,		255,		0,
    255,	255,		255,		255,
    0,		0,
    NULL,			ending_npc_cn,		TEXT_Z_LIGHT_FOG,
    100,	420,		1.0f,
    1000.0f,	560.0f,		-440.0f,
    0.0f,	0.0f,		0.0f,
    1.0f,	1.0f,		1.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.2f,
    0,		0,		0,		995,		1000,
    0,		0,		255,		0,
    255,	255,		255,		255,
    4,		0,
    NULL,			ending_npc_cn,		TEXT_Z_LIGHT_FOG,
    520,	130,		1.0f,
    1000.0f,	560.0f,		-440.0f,
    0.0f,	0.0f,		0.0f,
    1.0f,	1.0f,		1.0f,
    0.0f,	0.0f,		4.0f,
    0.0f,	0.0f,		1.8f,
    0.0f,	0.0f,		0.2f,
    0,		0,		0,		995,		1000,
    0,		0,		255,		0,
    255,	255,		255,		255,
    4,		0,
    NULL,			ending_npc_cn,		TEXT_Z_LIGHT_FOG,
    650,	1230,		1.0f,
    800.0f,	-300.0f,	350.0f,
    0.0f,	0.0f,		0.0f,
    1.0f,	1.0f,		1.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.2f,
    0,		0,		0,		995,		1000,
    0,		0,		255,		0,
    255,	255,		255,		255,
    4,		0,
    NULL,			ending_awing,		TEXT_Z_LIGHT_FOG,
    100,	1780,		1.0f,
    1000.0f,	500.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    1.0f,	1.0f,		1.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.2f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    7,		0,
#if 0
    AW_Fox_head,		NULL,			TEXT_Z_LIGHT_FOG,
    100,	620,		1.0f,
    1000.0f,	506.8f,		-16.0f,
    0.0f,	0.0f,		0.0f,
    0.012f,	0.012f,		0.012f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.2f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    5,		1,
    AW_Fox_head,		NULL,			TEXT_Z_LIGHT_FOG,
    720,	1280,		1.0f,
    1000.0f,	506.8f,		-16.0f,
    0.0f,	0.0f,		0.0f,
    0.012f,	0.012f,		0.012f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.2f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    5,		0,
    AW_A_wing_Canopi,		NULL,		TEXT_Z_A_LIGHT_FOG_PRIM,
    100,	1780,		1.0f,
    1000.0f,	516.9f,		-25.9f,
    0.0f,	0.0f,		0.0f,
    1.0f,	1.0f,		1.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.2f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    255,	255,		255,		140,
    7,		0,
#endif
    NULL,			ending_ball,		TEXE_Z_A_BLEND_PRIMA,
    100,	1780,		1.0f,
    1000.0f,	500.0f,		-57.0f,
    0.0f,	0.0f,		0.0f,
    0.5f,	0.3f,		0.5f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    240,	176,		64,		996,		1000,
    0,		0,		255,		0,
    255,	255,		255,		255,
    0,		0,
    &AW_A_wing_Space_anm,	AW_A_wing_list,		TEXT_Z_LIGHT_FOG,
    100,	1780,		1.0f,
    1000.0f,	-500.0f,	0.0f,
    0.0f,	0.0f,		0.0f,
    1.0f,	1.0f,		1.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.2f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    11,		0,
    AW_Peppy_head,		NULL,			TEXT_Z_LIGHT_FOG,
    850,	20,		1.0f,
    1000.0f,	-493.2f,	-16.0f,
    5.0f,	0.0f,		0.0f,
    0.012f,	0.012f,		0.012f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.2f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    10,		0,
    AW_Peppy_head,		NULL,			TEXT_Z_LIGHT_FOG,
    870,	1,		1.0f,
    1000.0f,	-493.2f,	-16.0f,
    7.0f,	0.0f,		0.0f,
    0.012f,	0.012f,		0.012f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.2f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    10,		0,
    AW_Peppy_head,		NULL,			TEXT_Z_LIGHT_FOG,
    871,	1,		1.0f,
    1000.0f,	-493.2f,	-16.0f,
    10.0f,	0.0f,		0.0f,
    0.012f,	0.012f,		0.012f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.2f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    10,		0,
    AW_Peppy_head,		NULL,			TEXT_Z_LIGHT_FOG,
    872,	1,		1.0f,
    1000.0f,	-493.2f,	-16.0f,
    14.0f,	0.0f,		0.0f,
    0.012f,	0.012f,		0.012f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.2f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    10,		0,
    AW_Peppy_head,		NULL,			TEXT_Z_LIGHT_FOG,
    873,	1,		1.0f,
    1000.0f,	-493.2f,	-16.0f,
    16.0f,	0.0f,		0.0f,
    0.012f,	0.012f,		0.012f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.2f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    10,		0,
    AW_Peppy_head,		NULL,			TEXT_Z_LIGHT_FOG,
    874,	1,		1.0f,
    1000.0f,	-493.2f,	-16.0f,
    14.0f,	0.0f,		0.0f,
    0.012f,	0.012f,		0.012f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.2f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    10,		0,
    AW_Peppy_head,		NULL,			TEXT_Z_LIGHT_FOG,
    875,	1,		1.0f,
    1000.0f,	-493.2f,	-16.0f,
    11.0f,	0.0f,		0.0f,
    0.012f,	0.012f,		0.012f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.2f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    10,		0,
    AW_Peppy_head,		NULL,			TEXT_Z_LIGHT_FOG,
    876,	1,		1.0f,
    1000.0f,	-493.2f,	-16.0f,
    7.0f,	0.0f,		0.0f,
    0.012f,	0.012f,		0.012f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.2f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    10,		0,
    AW_Peppy_head,		NULL,			TEXT_Z_LIGHT_FOG,
    877,	1,		1.0f,
    1000.0f,	-493.2f,	-16.0f,
    7.0f,	0.0f,		0.0f,
    0.012f,	0.012f,		0.012f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.2f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    10,		0,
    AW_Peppy_head,		NULL,			TEXT_Z_LIGHT_FOG,
    878,	1,		1.0f,
    1000.0f,	-493.2f,	-16.0f,
    10.0f,	0.0f,		0.0f,
    0.012f,	0.012f,		0.012f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.2f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    10,		0,
    AW_Peppy_head,		NULL,			TEXT_Z_LIGHT_FOG,
    879,	1,		1.0f,
    1000.0f,	-493.2f,	-16.0f,
    14.0f,	0.0f,		0.0f,
    0.012f,	0.012f,		0.012f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.2f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    10,		0,
    AW_Peppy_head,		NULL,			TEXT_Z_LIGHT_FOG,
    880,	1,		1.0f,
    1000.0f,	-493.2f,	-16.0f,
    16.0f,	0.0f,		0.0f,
    0.012f,	0.012f,		0.012f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.2f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    10,		0,
    AW_Peppy_head,		NULL,			TEXT_Z_LIGHT_FOG,
    881,	1,		1.0f,
    1000.0f,	-493.2f,	-16.0f,
    14.0f,	0.0f,		0.0f,
    0.012f,	0.012f,		0.012f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.2f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    10,		0,
    AW_Peppy_head,		NULL,			TEXT_Z_LIGHT_FOG,
    882,	1,		1.0f,
    1000.0f,	-493.2f,	-16.0f,
    10.0f,	0.0f,		0.0f,
    0.012f,	0.012f,		0.012f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.2f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    10,		0,
    AW_Peppy_head,		NULL,			TEXT_Z_LIGHT_FOG,
    883,	1,		1.0f,
    1000.0f,	-493.2f,	-16.0f,
    7.0f,	0.0f,		0.0f,
    0.012f,	0.012f,		0.012f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.2f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    10,		0,
    AW_Peppy_head,		NULL,			TEXT_Z_LIGHT_FOG,
    884,	36,		1.0f,
    1000.0f,	-493.2f,	-16.0f,
    5.0f,	0.0f,		0.0f,
    0.012f,	0.012f,		0.012f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.2f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    10,		0,
    AW_A_wing_Canopi,		NULL,		TEXT_Z_A_LIGHT_FOG_PRIM,
    850,	70,		1.0f,
    999.0f,	-483.1f,	-25.9f,
    0.0f,	0.0f,		0.0f,
    1.0f,	1.0f,		1.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.2f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    255,	255,		255,		140,
    11,		0,
    NULL,			ending_ball,		TEXE_Z_A_BLEND_PRIMA,
    100,	1780,		1.0f,
    1000.0f,	-500.0f,	-34.0f,
    0.0f,	0.0f,		0.0f,
    0.5f,	0.3f,		0.5f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    240,	176,		64,		996,		1000,
    0,		0,		255,		0,
    255,	255,		255,		255,
    0,		0,
    NULL,			ending_gf,		TEXT_Z_LIGHT_FOG,
    100,	420,		1.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    1.0f,	1.0f,		1.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    0,		0,
    NULL,			ending_gf,		TEXT_Z_LIGHT_FOG,
    1320,	470,		1.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    1.0f,	1.0f,		1.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    0,		0,
    NULL,			ending_cn,		TEXT_A,
    1810,	1090,		1.0f,
    -200.0f,	0.0f,		-10000.0f,
    0.0f,	0.0f,		0.0f,
    150.0f,	150.0f,		150.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    0,		0,
    NULL,			ending_gf,		TEXT_Z_LIGHT_FOG,
    1920,	980,		1.0f,
    0.0f,	1000.0f,	-700.0f,
    0.0f,	180.0f,		0.0f,
    1.0f,	1.0f,		1.0f,
    0.0f,	0.0f,		-10.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    0,		0,
    NULL,			ending_fade,		TEXT_A,
    100,	11,		1.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		0,		10,
    0,		0,		0,		0,
    0,		0,		0,		0,
    0,		0,
    NULL,			ending_fade,		TEXT_A,
    1770,	30,		1.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		10,		10,
    0,		0,		0,		0,
    0,		0,		0,		0,
    0,		0,
    NULL,			ending_fade,		TEXT_A,
    2780,	30,		1.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		10,		10,
    0,		0,		0,		0,
    0,		0,		0,		0,
    0,		0,
    NULL,			ending_fade,		TEXT_A,
    510,	20,		1.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		10,		10,
    0,		0,		0,		0,
    0,		0,		0,		0,
    0,		0,
    NULL,			ending_fade,		TEXT_A,
    710,	20,		1.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		10,		10,
    0,		0,		0,		0,
    0,		0,		0,		0,
    0,		0,
    NULL,			ending_fade,		TEXT_A,
    910,	20,		1.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		10,		10,
    0,		0,		0,		0,
    0,		0,		0,		0,
    0,		0,
    NULL,			ending_fade,		TEXT_A,
    1110,	20,		1.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		10,		10,
    0,		0,		0,		0,
    0,		0,		0,		0,
    0,		0,
    NULL,			ending_fade,		TEXT_A,
    1310,	20,		1.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		10,		10,
    0,		0,		0,		0,
    0,		0,		0,		0,
    0,		0,

    NULL,			ending_dma,		4,
    3000,	2000,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    3,		0,
    NULL,			ending_run_light,	0,
    3100,	1800,		0.0f,
    0.0f,	13.0f,		-32.0f,
    200.0f,	70.0f,		10.0f,
    10.0f,	6.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    0,		0,
    END_BG_01,			NULL,			TEXT,
    3100,	1800,		1.0f,
    0.0f,	-2700.0f,	-6900.0f,
    0.0f,	0.0f,		0.0f,
    1.0f,	1.0f,		1.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    0,		0,
    NULL,			ending_gf,		TEXT_Z_LIGHT,
    3800,	950,		1.0f,
    8000.0f,	-5500.0f,	-10000.0f,
    -10.0f,	-90.0f,		0.0f,
    3.0f,	3.0f,		3.0f,
    -22.0f,	12.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    0,		0,
    NULL,			ending_ball1,		TEXE_Z_A_BLEND_PRIMA,
    3800,	950,		1.0f,
    12330.0f,	-6500.0f,	-9200.0f,
    0.0f,	0.0f,		-10.0f,
    35.0f,	10.0f,		20.0f,
    -22.0f,	12.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    240,	176,		64,		996,		1000,
    255,	255,		0,		0,
    255,	255,		255,		164,
    0,		0,
    NULL,			ending_ball1,		TEXE_Z_A_BLEND_PRIMA,
    3800,	950,		1.0f,
    15600.0f,	-6710.0f,	-9960.0f,
    0.0f,	0.0f,		-10.0f,
    35.0f,	10.0f,		20.0f,
    -22.0f,	12.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    240,	176,		64,		996,		1000,
    255,	255,		0,		0,
    255,	255,		255,		164,
    0,		0,
    NULL,			ending_run_light,	0,
    3100,	1800,		0.0f,
    0.0f,	32.0f,		-32.0f,
    200.0f,	70.0f,		10.0f,
    10.0f,	6.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    0,		0,
    NULL,			ending_ground,		TEXT_LIGHT_FOG,
    3100,	1800,		1.0f,
    0.0f,	-470.0f,	-3500.0f,
    0.0f,	0.0f,		0.0f,
    1.0f,	1.0f,		1.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		996,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    0,		0,
    &DEMO_Fox_run_anm,		DEMO_Fox_run_list,	POLY_A_PRIM,
    3100,	1800,		5.0f,
    -300.0f,	-300.0f,	-1300.0f,
    5.0f,	-90.0f,		-90.0f,
    0.6f,	0.1f,		6.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		200,
    10,		0,
    &DEMO_Fox_run_anm,		DEMO_Fox_run_list,	TEXT_Z_LIGHT,
    3100,	1800,		5.0f,
    -300.0f,	-300.0f,	-1300.0f,
    5.0f,	-90.0f,		0.0f,
    0.6f,	0.6f,		0.6f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    10,		0,
    &DEMO_Falco_run_anm,	DEMO_Falco_run_list,	POLY_A_PRIM,
    3100,	1800,		5.0f,
    -100.0f,	-300.0f,	-1300.0f,
    10.0f,	-90.0f,		-90.0f,
    0.6f,	0.1f,		6.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		200,
    0,		0,
    &DEMO_Falco_run_anm,	DEMO_Falco_run_list,	TEXT_Z_LIGHT,
    3100,	1800,		5.0f,
    -100.0f,	-300.0f,	-1300.0f,
    10.0f,	-90.0f,		0.0f,
    0.6f,	0.6f,		0.6f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    0,		0,
    &DEMO_Peppey_run_anm,	DEMO_Peppey_run_list,	POLY_A_PRIM,
    3100,	1800,		6.0f,
    100.0f,	-300.0f,	-1300.0f,
    -10.0f,	-90.0f,		-90.0f,
    0.6f,	0.1f,		6.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		200,
    0,		0,
    &DEMO_Peppey_run_anm,	DEMO_Peppey_run_list,	TEXT_Z_LIGHT,
    3100,	1800,		6.0f,
    100.0f,	-300.0f,	-1300.0f,
    -10.0f,	-90.0f,		0.0f,
    0.6f,	0.6f,		0.6f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    0,		0,
    &DEMO_Slippy_run_anm,	DEMO_Slippy_run_list,	POLY_A_PRIM,
    3100,	1800,		7.0f,
    300.0f,	-300.0f,	-1300.0f,
    -15.0f,	-90.0f,		-90.0f,
    0.6f,	0.1f,		6.0f,
    0.1f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.1f,	0.0f,		0.0f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		200,
    0,		0,
    &DEMO_Slippy_run_anm,	DEMO_Slippy_run_list,	TEXT_Z_LIGHT,
    3100,	1800,		7.0f,
    300.0f,	-300.0f,	-1300.0f,
    -15.0f,	-90.0f,		0.0f,
    0.6f,	0.6f,		0.6f,
    0.1f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.1f,	0.0f,		0.0f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    0,		0,

    NULL,			ending_dma,		5,
    5000,	2000,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    2,		0,
    NULL,			ending_run_light,	0,
    5100,	1800,		0.0f,
    0.0f,	32.0f,		-32.0f,
    200.0f,	70.0f,		10.0f,
    10.0f,	6.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    0,		0,
    END_BG_01,			NULL,			TEXT,
    5100,	310,		1.0f,
    0.0f,	-2800.0f,	-6900.0f,
    0.0f,	0.0f,		0.0f,
    1.0f,	1.0f,		1.0f,
    0.0f,	-4.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    0,		0,
    END_BG_01,			NULL,			TEXT,
    5410,	1490,		1.0f,
    0.0f,	-4040.0f,	-6900.0f,
    0.0f,	0.0f,		0.0f,
    1.0f,	1.0f,		1.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		995,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    0,		0,
    NULL,			ending_and,		TEXE_A_PRIM,
    6520,	380,		1.0f,
    0.0f,	0.0f,		-7000.0f,
    0.0f,	0.0f,		0.0f,
    12.0f,	12.0f,		12.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		200,		0,
    0,		0,		0,		0,
    255,	255,		255,		0,
    0,		0,
    &AW_A_wing_Ground_anm,	AW_A_wing_list,		TEXT_Z_LIGHT_FOG,
    5100,	1800,		1.0f,
    100.0f,	100.0f,		-230.0f,
    0.0f,	180.0f,		0.0f,
    0.5f,	0.5f,		0.5f,
    0.0f,	0.0f,		-7.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		3.0f,
    240,	176,		64,		996,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    3,		0,
    END_Ball,			NULL,			TEXT_A_BLEND_PRIMA,
    5100,	1800,		1.0f,
    100.0f,	95.0f,		-200.0f,
    0.0f,	0.0f,		0.0f,
    0.4f,	0.3f,		0.4f,
    0.0f,	0.0f,		-7.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		3.0f,
    240,	176,		64,		996,		1000,
    255,	0,		0,		0,
    255,	255,		255,		255,
    0,		0,
    &AW_A_wing_Ground_anm,	AW_A_wing_list,		TEXT_Z_LIGHT_FOG,
    5100,	1800,		1.0f,
    100.0f,	-100.0f,	-230.0f,
    0.0f,	180.0f,		0.0f,
    0.5f,	0.5f,		0.5f,
    0.0f,	0.0f,		-7.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		3.0f,
    240,	176,		64,		996,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    5,		0,
    END_Ball,			NULL,			TEXT_A_BLEND_PRIMA,
    5100,	1800,		1.0f,
    100.0f,	-105.0f,	-200.0f,
    0.0f,	0.0f,		0.0f,
    0.4f,	0.3f,		0.4f,
    0.0f,	0.0f,		-7.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		3.0f,
    240,	176,		64,		996,		1000,
    255,	0,		0,		0,
    255,	255,		255,		255,
    5,		0,
    &AW_A_wing_Ground_anm,	AW_A_wing_list,		TEXT_Z_LIGHT_FOG,
    5100,	1800,		1.0f,
    -100.0f,	100.0f,		-230.0f,
    0.0f,	180.0f,		0.0f,
    0.5f,	0.5f,		0.5f,
    0.0f,	0.0f,		-7.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		3.0f,
    240,	176,		64,		996,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    7,		0,
    END_Ball,			NULL,			TEXT_A_BLEND_PRIMA,
    5100,	1800,		1.0f,
    -100.0f,	95.0f,		-200.0f,
    0.0f,	0.0f,		0.0f,
    0.4f,	0.3f,		0.4f,
    0.0f,	0.0f,		-7.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		3.0f,
    240,	176,		64,		996,		1000,
    255,	0,		0,		0,
    255,	255,		255,		255,
    7,		0,
    &AW_A_wing_Ground_anm,	AW_A_wing_list,		TEXT_Z_LIGHT_FOG,
    5100,	1800,		1.0f,
    -100.0f,	-100.0f,	-230.0f,
    0.0f,	180.0f,		0.0f,
    0.5f,	0.5f,		0.5f,
    0.0f,	0.0f,		-7.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		3.0f,
    240,	176,		64,		996,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    11,		0,
    END_Ball,			NULL,			TEXT_A_BLEND_PRIMA,
    5100,	1800,		1.0f,
    -100.0f,	-105.0f,	-200.0f,
    0.0f,	0.0f,		0.0f,
    0.4f,	0.3f,		0.4f,
    0.0f,	0.0f,		-7.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		3.0f,
    240,	176,		64,		996,		1000,
    255,	0,		0,		0,
    255,	255,		255,		255,
    11,		0,
    NULL,			ending_gf,		TEXT_Z_LIGHT_FOG,
    5100,	1800,		1.0f,
    0.0f,	0.0f,		-220.0f,
    0.0f,	180.0f,		0.0f,
    0.1f,	0.1f,		0.1f,
    0.0f,	0.0f,		-7.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		1.0f,
    240,	176,		64,		996,		1000,
    0,		0,		0,		0,
    0,		0,		0,		0,
    0,		0,
    NULL,			ending_rank,		RECT_A_PRIM,
    6520,	380,		1.0f,
    224.0f,	164.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    1.0f,	1.0f,		1.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		20,		0,
    0,		0,		0,		0,
    255,	255,		255,		255,
    0,		0,
    NULL,			ending_exp,		TEXT_A,
    6900,	300,		1.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		0,		20,
    0,		0,		0,		0,
    0,		0,		0,		0,
    0,		0,
    NULL,			ending_fade1,		TEXT_A,
    3000,	370,		1.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		0,		250,
    0,		0,		0,		0,
    0,		0,		0,		0,
    0,		0,
    NULL,			ending_1997,		RECT_A_PRIM,
    6122,	200,		1.0f,
    128.0f,	100.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    1.0f,	1.0f,		1.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		20,		20,
    0,		0,		0,		0,
    255,	255,		255,		0,
    0,		0,
    NULL,			ending_fade,		TEXT_A,
    4880,	240,		1.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		10,		10,
    0,		0,		0,		0,
    0,		0,		0,		0,
    0,		0,
    NULL,			ending_fade,		TEXT_A,
    6800,	100,		1.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		100,		0,
    0,		0,		0,		0,
    0,		0,		0,		0,
    0,		0,
    NULL,			ending_fade,		TEXT_A,
    7100,	100,		1.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		100,		0,
    0,		0,		0,		0,
    0,		0,		0,		0,
    0,		0,
    NULL,			ending_end,		0,
    7200,	100,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0,		0,		0,		0,		0,
    0,		0,		0,		0,
    0,		0,		0,		0,
    0,		0,
};

/*======================================================================*
 *									*
 *	エンディング 走る						*
 *									*
 *======================================================================*/
void ending_run_prog0(
    unsigned long	time,
    ending_run_data_t	*p
)
{
    (void)time;
    (void)p;
}

void ending_run_prog1(
    unsigned long	time,
    ending_run_data_t	*p
)
{
    float	f;

    rcpsetmode(&NOW_DISP, p->mode);
    gSPFogPosition(NEXT_DISP, p->fn, p->ff);
    gDPSetFogColor(NEXT_DISP, p->fr, p->fg, p->fb, 0);
    gDPSetEnvColor(NEXT_DISP, p->er, p->eg, p->eb, p->ea);
    gDPSetPrimColor(NEXT_DISP, 0, 0, p->pr, p->pg, p->pb, p->pa);
#if 4 < FOX_DEBUG
    if(p->d0 == chk_dp) {
	translate_now(p->t.x + dx + (time - p->time_s) * p->ts.x,
		      p->t.y + dy + (time - p->time_s) * p->ts.y,
		      p->t.z + dz + (time - p->time_s) * p->ts.z, MULT_MTX);
    } else {
	translate_now(p->t.x + (time - p->time_s) * p->ts.x,
		      p->t.y + (time - p->time_s) * p->ts.y,
		      p->t.z + (time - p->time_s) * p->ts.z, MULT_MTX);
    }
#else
    translate_now(p->t.x + (time - p->time_s) * p->ts.x,
		  p->t.y + (time - p->time_s) * p->ts.y,
		  p->t.z + (time - p->time_s) * p->ts.z, MULT_MTX);
#endif
    scale_now(p->s.x, p->s.y, p->s.z, MULT_MTX);
    f = sinf(time * 0.1f + p->frame_default);
//    PRINTF("kakudo %d %f\n",  p->frame_default, f);
    switch(p->p_mode) {
    case 1:
	rotateY_now(ANGLE(-camera_r.y + p->r.y + f * p->yure.y
			  + (time - p->time_s) * p->rs.y), MULT_MTX);
	rotateX_now(ANGLE(-camera_r.x + p->r.x + f * p->yure.x
			  + (time - p->time_s) * p->rs.x), MULT_MTX);
	rotateZ_now(ANGLE(camera_r.z + p->r.z + f * p->yure.z
			  + (time - p->time_s) * p->rs.z), MULT_MTX);
	break;
    default:
	rotateY_now(
	    ANGLE(p->r.y + f * p->yure.y + (time - p->time_s) * p->rs.y),
	    MULT_MTX);
	rotateX_now(
	    ANGLE(p->r.x + f * p->yure.x + (time - p->time_s) * p->rs.x),
	    MULT_MTX);
	rotateZ_now(
	    ANGLE(p->r.z + f * p->yure.z + (time - p->time_s) * p->rs.z),
	    MULT_MTX);
	break;
    }
    set_matrix(&NOW_DISP);
    gSPDisplayList(NEXT_DISP, p->d0);
}

void ending_run_prog2(
    unsigned long	time,
    ending_run_data_t	*p
)
{
    ((void (*)(unsigned long, ending_run_data_t *))p->d1)(time, p);
}

void ending_run_prog3(
    unsigned long	time,
    ending_run_data_t	*p
)
{
    float	f;

    rcpsetmode(&NOW_DISP, p->mode);
    gSPFogPosition(NEXT_DISP, p->fn, p->ff);
    gDPSetFogColor(NEXT_DISP, p->fr, p->fg, p->fb, 0);
    gDPSetEnvColor(NEXT_DISP, p->er, p->eg, p->eb, p->ea);
    gDPSetPrimColor(NEXT_DISP, 0, 0, p->pr, p->pg, p->pb, p->pa);
#if 4 < FOX_DEBUG
    if(p->d0 == chk_dp) {
	translate_now(p->t.x + dx + (time - p->time_s) * p->ts.x,
		      p->t.y + dy + (time - p->time_s) * p->ts.y,
		      p->t.z + dz + (time - p->time_s) * p->ts.z, MULT_MTX);
    } else {
	translate_now(p->t.x + (time - p->time_s) * p->ts.x,
		      p->t.y + (time - p->time_s) * p->ts.y,
		      p->t.z + (time - p->time_s) * p->ts.z, MULT_MTX);
    }
#else
    translate_now(p->t.x + (time - p->time_s) * p->ts.x,
		  p->t.y + (time - p->time_s) * p->ts.y,
		  p->t.z + (time - p->time_s) * p->ts.z, MULT_MTX);
#endif
    scale_now(p->s.x, p->s.y, p->s.z, MULT_MTX);
    f = sinf(time * 0.1f + p->frame_default);
    rotateY_now(ANGLE(p->r.y + f * p->yure.y + (time - p->time_s) * p->rs.y),
		MULT_MTX);
    rotateX_now(ANGLE(p->r.x + f * p->yure.x + (time - p->time_s) * p->rs.x),
		MULT_MTX);
    rotateZ_now(ANGLE(p->r.z + f * p->yure.z + (time - p->time_s) * p->rs.z),
		MULT_MTX);
    set_matrix(&NOW_DISP);
    si_get(p->d0, (unsigned long)((time + p->frame_default) * p->anime_time)
	   % anime_frame(p->d0), dt);
    si_draw_T(p->d1, dt, NULL, NULL, NULL);
    
}

void ending_run(
    unsigned long	time
)
{
    int			i;

    for(i = 0; i < number(ending_run_data); i += 1) {
	if((ending_run_data[i].time_s <= time)
	   && ((ending_run_data[i].time_s
		+ ending_run_data[i].time_v) > time)) {
	    push_now();
	    if(ending_run_data[i].d0 == NULL
	       && ending_run_data[i].d1 == NULL) {
		ending_run_prog0(time, &ending_run_data[i]);
	    } else if(ending_run_data[i].d0 != NULL
		      && ending_run_data[i].d1 == NULL) {
		ending_run_prog1(time, &ending_run_data[i]);
	    } else if(ending_run_data[i].d0 == NULL
		      && ending_run_data[i].d1 != NULL) {
		ending_run_prog2(time, &ending_run_data[i]);
	    } else if(ending_run_data[i].d0 != NULL
		      && ending_run_data[i].d1 != NULL) {
		ending_run_prog3(time, &ending_run_data[i]);
	    }
	    pull_now();
	}
    }
}

/*======================================================================*
 *									*
 *	エンディング カメラ						*
 *									*
 *======================================================================*/
ending_camera_data_t	ending_camera_data[] = {
    100,	420,
    1,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		12000.0f,
    0.0f,	0.0f,		-40.0f,
    -0.2f,	0.0f,		0.0f,

    520,	200,				/* FO */
    0,
    1000.0f,	506.8f,		-16.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    1022.0f,	503.0f,		300.0f,
    0.0f,	0.0f,		-3.0f,
    0.0f,	0.0f,		-0.015f,

    720,	200,				/* PE */
    0,
    1000.0f,	-490.0f,	-10.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    1015.0f,	-497.0f,	-297.0f,
    0.0f,	0.0f,		3.0f,
    0.0f,	0.0f,		0.015f,

    920,	200,				/* FA */
    0,
    -1000.0f,	510.0f,		-10.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    -1320.0f,	503.0f,		320.0f,
    3.0f,	0.0f,		-3.0f,
    0.015f,	0.0f,		-0.015f,

    1120,	200,				/* SL */
    0,
    -1000.0f,	-481.0f,	-16.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    -1000.0f,	-497.5f,	320.0f,
    0.0f,	0.0f,		-3.0f,
    0.0f,	0.0f,		-0.015f,

    1320,	470,
    0,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	-1500.0f,	-221.0f,
    0.0f,	0.0f,		-22.0f,
    0.0f,	0.0f,		0.0f,

    1790,	20,
    0,
    0.0f,	0.0f,		-5000.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    -5050.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,

    1810,	100,
    0,
    0.0f,	0.0f,		-5000.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    -5050.0f,	0.0f,		0.0f,
    100.0f,	0.0f,		0.0f,
    1.0f,	0.0f,		0.0f,






    0,		10000,
    0,
    0.0f,	0.0f,		-12800.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
    0.0f,	0.0f,		0.0f,
};

void ending_camera_mode_0(
    unsigned long		time,
    ending_camera_data_t	*p
)
{
    int		i;

    for(i = 0; i < (time - p->time_s); i += 1) {
	camera_a.x += (p->as.x - (p->ab.x * i));
	camera_a.y += (p->as.y - (p->ab.y * i));
	camera_a.z += (p->as.z - (p->ab.z * i));
	camera_e.x += (p->es.x - (p->eb.x * i));
	camera_e.y += (p->es.y - (p->eb.y * i));
	camera_e.z += (p->es.z - (p->eb.z * i));
    }
}

void ending_camera_mode_1(
    unsigned long		time,
    ending_camera_data_t	*p
)
{
    int			i, j;

    for(i = 0; i < time - p->time_s; i += 1) {
	if(i < p->time_v * 1 / 4) {
	    j = i;
	} else 	if(i < p->time_v * 2 / 4) {
	    j = p->time_v * 2 / 4 - i;
	} else 	if(i < p->time_v * 3 / 4) {
	    j = -(i - p->time_v * 2 / 4);
	} else 	if(i < p->time_v * 4 / 4) {
	    j = -(p->time_v * 2 / 4 - (i - p->time_v * 2 / 4));
	}
	camera_a.x += (p->as.x - (p->ab.x * j));
	camera_a.y += (p->as.y - (p->ab.y * j));
	camera_a.z += (p->as.z - (p->ab.z * j));
	camera_e.x += (p->es.x - (p->eb.x * j));
	camera_e.y += (p->es.y - (p->eb.y * j));
	camera_e.z += (p->es.z - (p->eb.z * j));
    }
}

void ending_camera(
    unsigned long	time
)
{
    int				i;
    ending_camera_data_t	*p;

    p = ending_camera_data;

    for(i = 0; i < number(ending_camera_data); i += 1) {
	if((p->time_s <= time) && ((p->time_s + p->time_v) > time)) {
	    camera_a.x = camera_a.y = camera_a.z =
		camera_e.x = camera_e.y = camera_e.z = 0.0f;
	    switch(p->mode) {
	    case 1:
		ending_camera_mode_1(time, p);
		break;
	    default:
		ending_camera_mode_0(time, p);
		break;
	    }
	    camera_a.x += p->a.x;
	    camera_a.y += p->a.y;
	    camera_a.z += p->a.z;
	    camera_e.x += p->e.x;
	    camera_e.y += p->e.y;
	    camera_e.z += p->e.z;
	    set_lookat_now(camera_e.x, camera_e.y, camera_e.z,
			   camera_a.x, camera_a.y, camera_a.z,
			   0.0f, 1.0f, 0.0f, MULT_MTX);
	    back_star_pos_calc(camera_e.x, camera_e.y, camera_e.z,
			       camera_a.x, camera_a.y, camera_a.z);
	    MtxF_AngleYXZ_now(&camera_r);
//	    PRINTF("%f %f %f %f %f %f %f %f %f\n",
//		   camera_e.x, camera_e.y, camera_e.z,
//		   camera_a.x, camera_a.y, camera_a.z,
//		   camera_r.x, camera_r.y, camera_r.z);
	    break;
	}
	p += 1;
    }
}

/*======================================================================*
 *									*
 *	エンディング タイム コントロール				*
 *									*
 *======================================================================*/
extern unsigned char MOJI_kaopeke_CI4_txt[];
void ending_time_ctr(void)
{
#if 4 < FOX_DEBUG
    static int			mode = ON;
    float			sp;

#if 1
    rcpsetmode(&NOW_DISP02, RECT_RGBA_A_PRIM);
    COLOR8X8(200, 200, 200, 255);
    LOCATE8X8(3, 2);
    Printf("%5ld", time_master);
    LOCATE8X8(3, 3);
    Printf("%5.3f", dx);
    LOCATE8X8(3, 4);
    Printf("%5.3f", dy);
    LOCATE8X8(3, 5);
    Printf("%5.3f", dz);
#endif

    game_mode = PAUSE;
//    Clear_Level = 1;
//    extra_mode = 1;

    push_now();
    ending_camera(time_master);
    ending_run(time_master);
    pull_now();

    if(mode == ON && !(Key[0].button & CONT_D)) {
	time_master += 1;
	if((0 <= time_master) && (time_master < 100)) {
	    time_master = 100;
	    if(First_start == 0) {
		wing = Pl[0].wing;
	    } else {
		wing.wing_R = wing.wing_L = 2;
	    }
	    Na_StartBgm(NA_BGM_STAFF_ROLL);
	}
	if((2790 <= time_master) && (time_master < 3000)) time_master = 3099;
	if((4891 <= time_master) && (time_master < 4999)) time_master = 4999;
	if((5000 <= time_master) && (time_master < 5096)) time_master = 5096;
    }

    sp = 1.0f;
    if(Key[0].button & CONT_G) {
	sp = 100.0f;
    }
    if(Key[0].button & CONT_UP) {
	dz -= sp;
    }
    if(Key[0].button & CONT_DOWN) {
	dz += sp;
    }
    dx += (Key_T[0].stick_x * 0.1f);
    dy += (Key_T[0].stick_y * 0.1f);

    if(Key_T[0].button & CONT_C) {
	time_master -= 1;
    }
    if(Key_T[0].button & CONT_F) {
	time_master += 1;
    }
    if(Key[0].button & CONT_D) {
	time_master -= 10;
    }
    if(Key[0].button & CONT_E) {
	time_master += 10;
    }
    if(Key_T[0].button & CONT_A) {
	if(mode == ON) {
	    mode = OFF;
	} else {
	    mode = ON;
	}
    }
    if(Key_T[0].button & CONT_B) {
	time_master = 0;
	dx = dy = dz = 0;
    }
    if(time_master < 0) time_master = 0;
    if(time_master > 10000) time_master = 0;
//    end_moji_time = time_master - 100;
#else
    Key_wait_time = 10000;
    push_now();
    ending_camera(time_master);
    ending_run(time_master);
    pull_now();
    time_master += 1;
    if((0 <= time_master) && (time_master < 100)) {
	time_master = 100;
	if(First_start == 0) {
	    wing = Pl[0].wing;
	} else {
	    wing.wing_R = wing.wing_L = 2;
	}
	Na_StartBgm(NA_BGM_STAFF_ROLL);
    }
    if((2790 <= time_master) && (time_master < 3000)) time_master = 3099;
    if((4891 <= time_master) && (time_master < 4999)) time_master = 4999;
    if((5000 <= time_master) && (time_master < 5096)) time_master = 5096;
#endif
}
