#include<ultra64.h>

extern Vtx d_body_v[];
extern Vtx d_body_vmcur[];
extern Tri d_body_tri[];
extern Lights1 d_body_material[];
extern Mtx d_body_matrix[];

extern unsigned short d_body1_txt[];
extern unsigned short d_body2_txt[];
extern unsigned short d_body3_txt[];
extern unsigned short d_body4_txt[];
extern unsigned short d_eye_txt[];
extern unsigned short d_hand_txt[];
extern unsigned short d_tail_txt[];



#define gs_Nin_LoadTextureImage(timg,fmt,siz,width,height,tmem,tt)	\
	gsDPSetTextureImage(fmt,siz,1,timg),	\
	gsDPTileSync(),	\
	gsDPSetTile(fmt,siz,0,tmem,tt,0,0,0,0,0,0,0),	\
	gsDPLoadSync(),	\
	gsDPLoadBlock(tt,0,0,width*height-1,CALC_DXT(width,siz##_BYTES))

#define gs_Nin_SetUpTileDescrip(fmt,siz,width,height,tmem,tt,cs,ms,ss,ct,mt,st)	\
	gsDPTileSync(),	\
	gsDPSetTile(fmt,siz,((((width)*siz##_LINE_BYTES)+7)>>3),tmem,tt,0,ct,mt,st,cs,ms,ss),	\
	gsDPSetTileSize(tt,0,0,(width-1)<<G_TEXTURE_IMAGE_FRAC,(height-1)<<G_TEXTURE_IMAGE_FRAC)

#define G_CC_PRIMSHADE PRIMITIVE,0,SHADE,0,0,0,0,SHADE

/* main display list */


/* ======== d_body ======== */


/* ======== db ======== */

Gfx d_body_model[]={

	gsSPTexture(65535, 65535,0, 0, 1),
	gsDPPipeSync(),
	gsDPSetCombineMode(G_CC_MODULATERGBDECALA,G_CC_PASS2),

	gs_Nin_SetUpTileDescrip(G_IM_FMT_RGBA,G_IM_SIZ_16b,8,8,0,0,G_TX_CLAMP,3,0,G_TX_CLAMP,3,0),
	gs_Nin_LoadTextureImage(d_eye_txt,G_IM_FMT_RGBA,G_IM_SIZ_16b,8,8,0,7),

	gsSPVertex(&d_body_v[0], 7, 0),
	gsSP1Triangle(0, 1, 2, 0),
	gsSP1Triangle(1, 0, 3, 0),
	gsSP1Triangle(4, 5, 2, 0),
	gsSP1Triangle(6, 5, 4, 0),

	gs_Nin_SetUpTileDescrip(G_IM_FMT_RGBA,G_IM_SIZ_16b,64,8,0,0,G_TX_WRAP,6,0,G_TX_CLAMP,3,0),
	gs_Nin_LoadTextureImage(d_body1_txt,G_IM_FMT_RGBA,G_IM_SIZ_16b,64,8,0,7),

	gsSPVertex(&d_body_v[7], 14, 0),
	gsSP1Triangle(0, 1, 2, 0),
	gsSP1Triangle(3, 2, 1, 0),
	gsSP1Triangle(1, 0, 4, 0),
	gsSP1Triangle(4, 5, 1, 0),
	gsSP1Triangle(1, 5, 3, 0),
	gsSP1Triangle(0, 6, 4, 0),
	gsSP1Triangle(6, 0, 7, 0),
	gsSP1Triangle(4, 8, 9, 0),
	gsSP1Triangle(9, 5, 4, 0),
	gsSP1Triangle(4, 6, 8, 0),
	gsSP1Triangle(7, 10, 6, 0),
	gsSP1Triangle(10, 11, 6, 0),
	gsSP1Triangle(6, 11, 12, 0),
	gsSP1Triangle(12, 8, 6, 0),
	gsSP1Triangle(13, 9, 8, 0),
	gsSP1Triangle(3, 5, 9, 0),
	gsSP1Triangle(3, 9, 13, 0),

	gs_Nin_SetUpTileDescrip(G_IM_FMT_RGBA,G_IM_SIZ_16b,8,8,0,0,G_TX_WRAP,3,0,G_TX_WRAP,3,0),
	gs_Nin_LoadTextureImage(d_body2_txt,G_IM_FMT_RGBA,G_IM_SIZ_16b,8,8,0,7),

	gsSPVertex(&d_body_v[21], 7, 0),
	gsSP1Triangle(0, 1, 2, 0),
	gsSP1Triangle(3, 4, 0, 0),
	gsSP1Triangle(0, 2, 5, 0),
	gsSP1Triangle(5, 6, 0, 0),
	gsSP1Triangle(0, 6, 3, 0),

	gs_Nin_SetUpTileDescrip(G_IM_FMT_RGBA,G_IM_SIZ_16b,8,8,0,0,G_TX_CLAMP,3,0,G_TX_CLAMP,3,0),
	gs_Nin_LoadTextureImage(d_body4_txt,G_IM_FMT_RGBA,G_IM_SIZ_16b,8,8,0,7),

	gsSPVertex(&d_body_v[28], 16, 0),
	gsSP1Triangle(0, 1, 2, 0),
	gsSP1Triangle(3, 0, 2, 0),
	gsSP1Triangle(4, 5, 6, 0),
	gsSP1Triangle(7, 8, 6, 0),
	gsSP1Triangle(6, 9, 7, 0),
	gsSP1Triangle(5, 10, 6, 0),
	gsSP1Triangle(6, 10, 9, 0),
	gsSP1Triangle(6, 8, 4, 0),
	gsSP1Triangle(4, 8, 11, 0),
	gsSP1Triangle(11, 8, 7, 0),
	gsSP1Triangle(12, 13, 14, 0),
	gsSP1Triangle(14, 15, 12, 0),
	gsSPVertex(&d_body_v[41], 9, 0),
	gsSP1Triangle(1, 0, 3, 0),
	gsSP1Triangle(3, 2, 1, 0),
	gsSP1Triangle(4, 7, 6, 0),
	gsSP1Triangle(5, 8, 6, 0),
	gsSP1Triangle(6, 7, 5, 0),
	gsSP1Triangle(6, 8, 4, 0),
	gsSPEndDisplayList(),
}; /* db */ 

Gfx d_body_modelT[] = {
	gsSPEndDisplayList()
};

#undef G_CC_PRIMSHADE

#undef gs_Nin_LoadTextureImage

#undef gs_Nin_SetUpTileDescrip

/* 50 vertices */
Vtx d_body_v[]={
	{ 499,-36,-62,0, -88, 420, 43,-57,-95,255 },   /* v0 used p216/V1 2 times */
	{ 485,30,-75,0, 0, 0, 35,34,-109,255 },   /* v1 used p216/V2 2 times */
	{ 570,-15,0,0, -543, 284, 85,-84,0,255 },   /* v2 used p216/V3 2 times */
	{ -4,-72,-102,0, 3131, 652, -2,-61,-102,255 },   /* v3 used p183/V3 1 times */
	{ 485,30,75,0, 0, 0, 35,34,110,255 },   /* v4 used p209/V3 2 times */
	{ 499,-36,62,0, -88, 420, 43,-56,96,255 },   /* v5 used p209/V2 2 times */
	{ -4,-72,102,0, 3131, 652, -2,-61,103,255 },   /* v6 used p209/V1 1 times */
	{ 485,30,75,0, 299, 125, 35,34,110,255 },   /* v7 used p215/V2 4 times */
	{ 0,40,116,0, 1064, 113, -4,51,109,255 },   /* v8 used p215/V1 5 times */
	{ -4,-72,102,0, 1070, 238, -2,-61,103,255 },   /* v9 used p180/V2 2 times */
	{ -123,-2,0,0, 1415, 160, -118,-11,0,255 },   /* v10 used p178/V3 4 times */
	{ 334,120,0,0, 538, 25, 18,119,0,255 },   /* v11 used p215/V3 6 times */
	{ 0,134,0,0, 1064, 8, -8,120,0,255 },   /* v12 used p211/V2 4 times */
	{ 514,66,0,0, 255, 84, 24,118,0,255 },   /* v13 used p213/V3 7 times */
	{ 578,41,35,0, 153, 112, 38,34,109,255 },   /* v14 used p197/V1 2 times */
	{ 485,30,-75,0, 299, 125, 35,34,-109,255 },   /* v15 used p212/V2 4 times */
	{ 0,40,-116,0, 1064, 113, -4,51,-108,255 },   /* v16 used p212/V3 5 times */
	{ 666,33,12,0, 15, 121, 74,35,88,255 },   /* v17 used p213/V1 2 times */
	{ 666,33,-12,0, 15, 121, 74,35,-87,255 },   /* v18 used p213/V2 2 times */
	{ 578,41,-35,0, 153, 112, 38,34,-108,255 },   /* v19 used p196/V3 2 times */
	{ -4,-72,-102,0, 1070, 238, -2,-61,-102,255 },   /* v20 used p182/V3 2 times */
	{ 570,-15,0,0, 110, 46, 85,-84,0,255 },   /* v21 used p203/V1 5 times */
	{ 485,30,-75,0, 183, 8, 35,34,-109,255 },   /* v22 used p203/V2 1 times */
	{ 578,41,-35,0, 103, 0, 38,34,-108,255 },   /* v23 used p203/V3 2 times */
	{ 578,41,35,0, 103, 0, 38,34,109,255 },   /* v24 used p198/V1 2 times */
	{ 485,30,75,0, 183, 8, 35,34,110,255 },   /* v25 used p198/V2 1 times */
	{ 666,33,-12,0, 28, 6, 74,35,-87,255 },   /* v26 used p202/V1 2 times */
	{ 666,33,12,0, 28, 6, 74,35,88,255 },   /* v27 used p202/V2 2 times */
	{ 507,-89,1,0, 2, 122, 62,-102,1,255 },   /* v28 used p219/V1 2 times */
	{ 499,-36,-62,0, 4, 526, 43,-57,-95,255 },   /* v29 used p219/V2 1 times */
	{ 570,-15,0,0, -14, 127, 85,-84,0,255 },   /* v30 used p219/V3 2 times */
	{ 499,-36,62,0, 4, -270, 43,-56,96,255 },   /* v31 used p205/V1 1 times */
	{ -4,-72,-102,0, -193, -526, -2,-61,-102,255 },   /* v32 used p220/V3 3 times */
	{ 499,-36,-62,0, 283, -270, 43,-57,-95,255 },   /* v33 used p199/V1 2 times */
	{ 311,-126,1,0, 104, 133, 14,-118,1,255 },   /* v34 used p220/V1 6 times */
	{ -4,-72,102,0, -193, 782, -2,-61,103,255 },   /* v35 used p179/V3 3 times */
	{ -4,-138,1,0, -193, 133, -8,-119,0,255 },   /* v36 used p220/V2 4 times */
	{ 499,-36,62,0, 283, 526, 43,-56,96,255 },   /* v37 used p206/V3 2 times */
	{ 507,-89,1,0, 291, 133, 62,-102,1,255 },   /* v38 used p206/V2 2 times */
	{ -123,-2,0,0, -305, 130, -118,-11,0,255 },   /* v39 used p179/V1 2 times */
	{ 85,-104,-32,0, 115, 541, -15,-12,-117,255 },   /* v40 used p189/V1 2 times */
	{ -13,-250,0,0, 241, 127, -118,-12,0,255 },   /* v41 used p189/V2 2 times */
	{ 8,-193,0,0, 214, 127, -118,19,0,255 },   /* v42 used p189/V3 4 times */
	{ -8,-129,0,0, 234, 127, -115,-28,0,255 },   /* v43 used p184/V2 2 times */
	{ 85,-104,32,0, 115, -285, -15,-12,118,255 },   /* v44 used p185/V3 2 times */
	{ 85,-104,-32,0, 78, 541, -15,-12,-117,255 },   /* v45 used p186/V3 2 times */
	{ 85,-104,32,0, 78, -285, -15,-12,118,255 },   /* v46 used p187/V3 2 times */
	{ 85,-218,0,0, 149, 127, 75,-93,0,255 },   /* v47 used p187/V1 4 times */
	{ 165,-115,0,0, 20, 127, 95,-73,0,255 },   /* v48 used p187/V2 2 times */
	{ -13,-250,0,0, 248, 127, -118,-12,0,255 },   /* v49 used p186/V2 2 times */
};


/*   0 vertices */
/* 64 x 8  G_IM_SIZ_16b G_IM_FMT_RGBA  */
unsigned short d_body1_txt[] = {
	0xcfbf, 0xdfff, 0xcf7d, 0xd7ff, 0xcffd, 0xdfff, 0xd77f, 0xcfff, 0xe7ff, 0xe7ff, 0xd77f, 0xdf7f, 0xdfff, 0xdfbf, 0xe7ff, 0xcfbf, 0xcfff, 0xdfff, 0xc7ff, 0xe7bf, 0xcfff, 0xdfff, 0xc7bf, 0xd7bf, 0xc77f, 0xdfff, 0xcfff, 0xd7ff, 0xdfff, 0xdffd, 0xcfbd, 0xcffd, 0xe7bf, 0xd7bf, 0xd7bd, 0xdffd, 0xe77f, 0xcfff, 0xd7ff, 0xdf7f, 0xdfbf, 0xcf7d, 0xbeb7, 0xa5f3, 0x6cab, 0x535f, 0x3a59, 0x29d7, 0x21d3, 0x2193, 0x2195, 0x2995, 0x29d5, 0x2993, 0x2993, 0x2193, 0x2151, 0x2151, 0x2153, 0x2191, 0x2193, 0x2193, 0x2153, 0x2991, 
	0xdfff, 0xd7bf, 0xcfbf, 0xc7bd, 0xc7fd, 0xd7bd, 0xd7ff, 0xdffd, 0xcfff, 0xcfbf, 0xdfff, 0xdffd, 0xd7ff, 0xc7bd, 0xd7ff, 0xdfff, 0xdfbd, 0xd7ff, 0xd7bd, 0xdffd, 0xcf7f, 0xdfff, 0xd7bd, 0xe7bf, 0xc7bf, 0xcfff, 0xdfff, 0xd7fd, 0xd7ff, 0xdfff, 0xd7ff, 0xdfbf, 0xe7bf, 0xd7ff, 0xdfff, 0xdfff, 0xdf7f, 0xcfbb, 0xc77d, 0xc73b, 0xa635, 0x8d6f, 0x74a9, 0x5363, 0x3219, 0x31d5, 0x2993, 0x2191, 0x2191, 0x2193, 0x2193, 0x2191, 0x2193, 0x2193, 0x2193, 0x2193, 0x2191, 0x2151, 0x2953, 0x2153, 0x2193, 0x2153, 0x2193, 0x2193, 
	0xbf7d, 0xc73b, 0xb6fb, 0xbef9, 0xbef9, 0xc739, 0xaefb, 0xc6fb, 0xbf3b, 0xbf7b, 0xcf7b, 0xc77d, 0xdf7b, 0xc7bf, 0xdfff, 0xdfbf, 0xc7bd, 0xd7ff, 0xd7ff, 0xdfbf, 0xe7fd, 0xcfbd, 0xc7bf, 0xdfbf, 0xdf7f, 0xdffd, 0xdfbf, 0xdf7d, 0xc7ff, 0xdfff, 0xcfff, 0xdf7d, 0xcffd, 0xdfff, 0xd7fd, 0xc7bd, 0xb77b, 0xa677, 0x85b1, 0x7469, 0x5361, 0x3a9d, 0x3259, 0x29d5, 0x2195, 0x2193, 0x2193, 0x2193, 0x2993, 0x2993, 0x2153, 0x2193, 0x2193, 0x2193, 0x2151, 0x2153, 0x2193, 0x2193, 0x2193, 0x2193, 0x2193, 0x2153, 0x2191, 0x2193, 
	0x7cab, 0x5ba5, 0x5361, 0x53a3, 0x5be3, 0x5be5, 0x63e5, 0x5c25, 0x6be7, 0x6c29, 0x6c69, 0x74eb, 0x852f, 0x9571, 0x95f3, 0xa5f5, 0xae75, 0xa677, 0xc6fb, 0xbf3b, 0xbef9, 0xbf3b, 0xd77b, 0xc77f, 0xdfbd, 0xcfff, 0xdfff, 0xd7ff, 0xcfbf, 0xbfbd, 0xc77f, 0xd77d, 0xcf7b, 0xbf3b, 0xb6b7, 0x9df3, 0x7ceb, 0x5363, 0x3a9d, 0x2a17, 0x21d5, 0x2993, 0x2993, 0x2193, 0x2953, 0x2993, 0x2993, 0x2153, 0x2193, 0x2191, 0x2153, 0x2193, 0x2153, 0x2193, 0x2193, 0x2193, 0x2153, 0x2193, 0x2193, 0x2153, 0x2151, 0x2191, 0x2151, 0x2153, 
	0x2a15, 0x2993, 0x2153, 0x2993, 0x2193, 0x2993, 0x2193, 0x2993, 0x2195, 0x29d5, 0x2995, 0x29d5, 0x31d7, 0x3a57, 0x3219, 0x3a59, 0x3a9d, 0x42dd, 0x5321, 0x5361, 0x53a3, 0x5be5, 0x7469, 0x7ced, 0x9d6f, 0x95f3, 0x9df5, 0x9df1, 0x9df3, 0xa5f3, 0x8db1, 0x956f, 0x852d, 0x63e7, 0x5ba3, 0x42df, 0x3259, 0x21d5, 0x2995, 0x2193, 0x2193, 0x2193, 0x2151, 0x2993, 0x2193, 0x2193, 0x2193, 0x2193, 0x2993, 0x2193, 0x2193, 0x2191, 0x2151, 0x2153, 0x2193, 0x2191, 0x2193, 0x2153, 0x2193, 0x2153, 0x2193, 0x2193, 0x2191, 0x2193, 
	0x2193, 0x2153, 0x2153, 0x2193, 0x2153, 0x2193, 0x2193, 0x2993, 0x2153, 0x2193, 0x2193, 0x2151, 0x2193, 0x2153, 0x2193, 0x2193, 0x2193, 0x2153, 0x2193, 0x2153, 0x2193, 0x2993, 0x2995, 0x31d5, 0x3219, 0x3a59, 0x3a59, 0x3259, 0x325b, 0x3a5b, 0x3a59, 0x3a59, 0x3217, 0x31d5, 0x2995, 0x2193, 0x2153, 0x2193, 0x2193, 0x2193, 0x2193, 0x2993, 0x2193, 0x2993, 0x2153, 0x2153, 0x2153, 0x2193, 0x2153, 0x2151, 0x2193, 0x2193, 0x2153, 0x2953, 0x2151, 0x2193, 0x2151, 0x2153, 0x2153, 0x2151, 0x2153, 0x2193, 0x2193, 0x2153, 
	0x2193, 0x2193, 0x2151, 0x2193, 0x2153, 0x2193, 0x2193, 0x2191, 0x2153, 0x2153, 0x2193, 0x2193, 0x2153, 0x2193, 0x2193, 0x2193, 0x2193, 0x2193, 0x2193, 0x2193, 0x2191, 0x2153, 0x2191, 0x2193, 0x2153, 0x2191, 0x2193, 0x2153, 0x2993, 0x2191, 0x2993, 0x2153, 0x2153, 0x2153, 0x2953, 0x2153, 0x2153, 0x2191, 0x2153, 0x2153, 0x2193, 0x2153, 0x2153, 0x2193, 0x2193, 0x2193, 0x2193, 0x2193, 0x2193, 0x2151, 0x2153, 0x2153, 0x2193, 0x2153, 0x2153, 0x2193, 0x2191, 0x2953, 0x2193, 0x2193, 0x2151, 0x2193, 0x2153, 0x2193, 
	0x2153, 0x2193, 0x2193, 0x2153, 0x2193, 0x2193, 0x2153, 0x2993, 0x2193, 0x2193, 0x2193, 0x2193, 0x2993, 0x2193, 0x2153, 0x2153, 0x2193, 0x2191, 0x2193, 0x2193, 0x2153, 0x2153, 0x2951, 0x2953, 0x2151, 0x2153, 0x2153, 0x2151, 0x2193, 0x2151, 0x2953, 0x2193, 0x2193, 0x2151, 0x2153, 0x2993, 0x2191, 0x2193, 0x2193, 0x2153, 0x2153, 0x2991, 0x2993, 0x2153, 0x2193, 0x2193, 0x2153, 0x2993, 0x2153, 0x2153, 0x2193, 0x2953, 0x2193, 0x2153, 0x2153, 0x2193, 0x2193, 0x2191, 0x2951, 0x2153, 0x2151, 0x2953, 0x2153, 0x2153, 
};

/* 8 x 8  G_IM_SIZ_16b G_IM_FMT_RGBA  */
unsigned short d_body2_txt[] = {
	0x2151, 0x2151, 0x2153, 0x2191, 0x2193, 0x2193, 0x2153, 0x2991, 
	0x2191, 0x2151, 0x2953, 0x2153, 0x2193, 0x2153, 0x2193, 0x2193, 
	0x2193, 0x2193, 0x2193, 0x2193, 0x2193, 0x2153, 0x2191, 0x2193, 
	0x2153, 0x2193, 0x2193, 0x2153, 0x2151, 0x2191, 0x2151, 0x2153, 
	0x2193, 0x2153, 0x2193, 0x2153, 0x2193, 0x2193, 0x2191, 0x2193, 
	0x2151, 0x2153, 0x2153, 0x2151, 0x2153, 0x2193, 0x2193, 0x2153, 
	0x2191, 0x2953, 0x2193, 0x2193, 0x2151, 0x2193, 0x2153, 0x2193, 
	0x2193, 0x2191, 0x2951, 0x2153, 0x2151, 0x2953, 0x2153, 0x2153, 
};

/* 8 x 8  G_IM_SIZ_16b G_IM_FMT_RGBA  */
unsigned short d_body4_txt[] = {
	0x2151, 0x2151, 0x2153, 0x2191, 0x2193, 0x2193, 0x2153, 0x2991, 
	0x2191, 0x2151, 0x2953, 0x2993, 0x2993, 0x2953, 0x2193, 0x2193, 
	0x2193, 0x2195, 0x3217, 0x429b, 0x4add, 0x31d7, 0x2993, 0x2193, 
	0x2195, 0x3217, 0x5b61, 0x952d, 0xb5f3, 0x63a1, 0x29d5, 0x2153, 
	0x2193, 0x3217, 0x5b61, 0x9d2f, 0xc677, 0x7425, 0x3a17, 0x2195, 
	0x2151, 0x2195, 0x31d7, 0x425b, 0x5b1f, 0x3259, 0x2195, 0x2153, 
	0x2191, 0x2953, 0x2193, 0x2193, 0x2193, 0x2193, 0x2153, 0x2193, 
	0x2193, 0x2191, 0x2951, 0x2153, 0x2151, 0x2953, 0x2153, 0x2153, 
};

/* 8 x 8  G_IM_SIZ_16b G_IM_FMT_RGBA  */
unsigned short d_eye_txt[] = {
	0x2151, 0x2151, 0x2153, 0x2191, 0x2191, 0x2193, 0x2153, 0x2993, 
	0x2191, 0x2153, 0x2153, 0x190f, 0x10cb, 0x10cd, 0x1951, 0x2193, 
	0x2193, 0x2193, 0x2193, 0x10cb, 0x889, 0x887, 0x10cb, 0x2153, 
	0x2153, 0x5, 0x1, 0x1, 0x1, 0x3, 0x847, 0x2153, 
	0x2193, 0x18cd, 0x1, 0x63a1, 0x5, 0x1, 0x3, 0x2153, 
	0x2151, 0x3a17, 0x52db, 0x190f, 0x889, 0x889, 0x2193, 0x2153, 
	0x2191, 0x2153, 0x4257, 0x5b1d, 0x5adb, 0x3a57, 0x2193, 0x2193, 
	0x2193, 0x2191, 0x2153, 0x2153, 0x2993, 0x2953, 0x2153, 0x2153, 
};

