00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "KeosMDLQ1Loader.h"
00022 #include "KeosRenderSystem.h"
00023 #include "KeosLogger.h"
00024 #include "KeosImage.h"
00025 #include "KeosMediaManager.h"
00026 #include "KeosString.h"
00027 #include "KeosMaterial.h"
00028 #include <fstream>
00029
00030 namespace Keos
00031 {
00032
00033
00034
00035
00036
00037 CMesh* CMDLQ1Loader::LoadFromFile(const String& strFilename)
00038 {
00039 int i;
00040
00041
00042 std::ifstream File(strFilename.c_str(), std::ios_base::binary);
00043
00044 ILogger::Log("Load of the mesh : %s", strFilename.c_str());
00045
00046
00047 THeader Header;
00048 File.read(reinterpret_cast<char*>(&Header), sizeof(Header));
00049
00050
00051 if (Header.Ident != ms_nMagicId)
00052 LOADINGFAILED_EXCEPT(strFilename, "The file is not a valid model MDL (Quake1) !", "CMDLQ1Loader::LoadFromFile");
00053
00054
00055 if (Header.Version != ms_nMDLQ1Version)
00056 LOADINGFAILED_EXCEPT(strFilename, "The file is not a valid model MDL (Quake1) !", "CMDLQ1Loader::LoadFromFile");
00057
00058
00059 std::vector<TTexture> Textures(Header.NbTextures);
00060 std::vector<TTexCoord> TexCoords(Header.NbVertices);
00061 std::vector<TTriangle> Triangles(Header.NbTriangles);
00062 std::vector<TFrame> Frames(Header.NbFrames);
00063
00064
00065 CImage TextureImg;
00066 for ( i = 0; i < Header.NbTextures; i++ )
00067 {
00068 Textures[i].Data.resize(Header.TexHeight * Header.TexWidth);
00069
00070 File.read( reinterpret_cast<char*>(&Textures[i].Group), sizeof( int ) );
00071 File.read( reinterpret_cast<char*>(&(Textures[i].Data[0])), Header.TexHeight * Header.TexWidth );
00072
00073
00074 if (i == 0)
00075 {
00076 std::vector<uchar> Texels(Header.TexHeight * Header.TexWidth * 4);
00077
00078
00080 for ( int j = 0; j < Header.TexHeight * Header.TexWidth; j++ )
00081 {
00082 Texels[ (j * 4) + 0 ] = ms_DefaultColorMap[ (Textures[i].Data[j] * 3) + 2 ];
00083 Texels[ (j * 4) + 1 ] = ms_DefaultColorMap[ (Textures[i].Data[j] * 3) + 1 ];
00084 Texels[ (j * 4) + 2 ] = ms_DefaultColorMap[ (Textures[i].Data[j] * 3) + 0 ];
00085 Texels[ (j * 4) + 3 ] = 0;
00086 }
00087
00088 TextureImg = CImage(TVector2I(Header.TexWidth, Header.TexHeight), PXF_A8R8G8B8 , &Texels[0]);
00089 }
00090 }
00091
00092
00093 File.read( reinterpret_cast<char*>(&TexCoords[0]), sizeof(TTexCoord) * Header.NbVertices );
00094
00095
00096 File.read( reinterpret_cast<char*>(&Triangles[0]), sizeof(TTriangle) * Header.NbTriangles );
00097
00098
00099 for ( i = 0; i < Header.NbFrames; i++ )
00100 {
00101 Frames[i].Vertices.resize(Header.NbVertices);
00102
00103 File.read( reinterpret_cast<char*>(&Frames[i].Type), sizeof(long) );
00104 File.read( reinterpret_cast<char*>(&Frames[i].BBoxMin), sizeof(TPoint) );
00105 File.read( reinterpret_cast<char*>(&Frames[i].BBoxMax), sizeof(TPoint) );
00106 File.read( reinterpret_cast<char*>(&Frames[i].Name), sizeof(char) * 16 );
00107 File.read( reinterpret_cast<char*>(&(Frames[i].Vertices[0])), sizeof(TPoint) * Header.NbVertices );
00108 }
00109
00110
00111 std::vector<CMeshGeom::TVertex> Vertices;
00112 std::vector<CMeshGeom::TIndex> Indices;
00113 for (int i = 0; i < Header.NbTriangles; ++i)
00114 {
00115 for (int j = 0; j < 3; ++j)
00116 {
00117
00118 CMeshGeom::TVertex v;
00119 const TPoint& Vert = Frames[0].Vertices[Triangles[i].Vertices[j]];
00120 const TTexCoord& TexC = TexCoords[Triangles[i].Vertices[j]];
00121
00122
00123 v.Position.x = Vert.x * Header.Scale.x + Header.Translate.x;
00124 v.Position.y = Vert.y * Header.Scale.y + Header.Translate.y;
00125 v.Position.z = Vert.z * Header.Scale.z + Header.Translate.z;
00126 v.Normal = ms_NormalTable[Vert.n];
00127 v.Color = Renderer->ConvertColor(CColor::White);
00128 int u = 0;
00129 if ( !Triangles[i].FacesFront && TexCoords[ Triangles[i].Vertices[j]].Onseam )
00130 u += Header.TexWidth / 2;
00131 v.TexCoords.x = (TexC.u + u + 0.5) / static_cast<float>(Header.TexWidth);
00132 v.TexCoords.y = (TexC.v + 0.5) / static_cast<float>(Header.TexHeight);
00133
00134
00135 Vertices.push_back(v);
00136 Indices.push_back(i * 3 + 2 - j);
00137 }
00138 }
00139
00140
00141 CMesh *pMesh = new CMesh();
00142 CMeshGeom* pMeshGeom = new CMeshGeom(&Vertices[0], (int)Vertices.size(), &Indices[0], (int)Indices.size());
00143 pMesh->AddMeshGeom(pMeshGeom);
00144 CMaterial *pMaterial = new CMaterial();
00145 pMaterial->CreateTexture(TextureImg);
00146 pMesh->AddMaterial(pMaterial, 0);
00147
00148 return pMesh;
00149 }
00150
00151
00152 void CMDLQ1Loader::LoadColorMap( const String& strFilename, uchar* ColorMap )
00153 {
00154 std::fstream File;
00155
00156 File.open( strFilename.c_str(), std::ios::in | std::ios::binary );
00157
00158 if ( File.fail() )
00159 LOADINGFAILED_EXCEPT(strFilename, "", "CMDLQ1Loader::LoadColorMap");
00160
00161 memset( ColorMap, 0, 768 );
00162 File.read( (char *)ColorMap, 768 );
00163
00164
00165
00166
00167
00168 File.close();
00169 }
00170
00171
00172
00173 const TVector3F CMDLQ1Loader::ms_NormalTable[] =
00174 {
00175 TVector3F(-0.525731f, 0.000000f, 0.850651f),
00176 TVector3F(-0.442863f, 0.238856f, 0.864188f),
00177 TVector3F(-0.295242f, 0.000000f, 0.955423f),
00178 TVector3F(-0.309017f, 0.500000f, 0.809017f),
00179 TVector3F(-0.162460f, 0.262866f, 0.951056f),
00180 TVector3F( 0.000000f, 0.000000f, 1.000000f),
00181 TVector3F( 0.000000f, 0.850651f, 0.525731f),
00182 TVector3F(-0.147621f, 0.716567f, 0.681718f),
00183 TVector3F( 0.147621f, 0.716567f, 0.681718f),
00184 TVector3F( 0.000000f, 0.525731f, 0.850651f),
00185 TVector3F( 0.309017f, 0.500000f, 0.809017f),
00186 TVector3F( 0.525731f, 0.000000f, 0.850651f),
00187 TVector3F( 0.295242f, 0.000000f, 0.955423f),
00188 TVector3F( 0.442863f, 0.238856f, 0.864188f),
00189 TVector3F( 0.162460f, 0.262866f, 0.951056f),
00190 TVector3F(-0.681718f, 0.147621f, 0.716567f),
00191 TVector3F(-0.809017f, 0.309017f, 0.500000f),
00192 TVector3F(-0.587785f, 0.425325f, 0.688191f),
00193 TVector3F(-0.850651f, 0.525731f, 0.000000f),
00194 TVector3F(-0.864188f, 0.442863f, 0.238856f),
00195 TVector3F(-0.716567f, 0.681718f, 0.147621f),
00196 TVector3F(-0.688191f, 0.587785f, 0.425325f),
00197 TVector3F(-0.500000f, 0.809017f, 0.309017f),
00198 TVector3F(-0.238856f, 0.864188f, 0.442863f),
00199 TVector3F(-0.425325f, 0.688191f, 0.587785f),
00200 TVector3F(-0.716567f, 0.681718f, -0.147621f),
00201 TVector3F(-0.500000f, 0.809017f, -0.309017f),
00202 TVector3F(-0.525731f, 0.850651f, 0.000000f),
00203 TVector3F( 0.000000f, 0.850651f, -0.525731f),
00204 TVector3F(-0.238856f, 0.864188f, -0.442863f),
00205 TVector3F( 0.000000f, 0.955423f, -0.295242f),
00206 TVector3F(-0.262866f, 0.951056f, -0.162460f),
00207 TVector3F( 0.000000f, 1.000000f, 0.000000f),
00208 TVector3F( 0.000000f, 0.955423f, 0.295242f),
00209 TVector3F(-0.262866f, 0.951056f, 0.162460f),
00210 TVector3F( 0.238856f, 0.864188f, 0.442863f),
00211 TVector3F( 0.262866f, 0.951056f, 0.162460f),
00212 TVector3F( 0.500000f, 0.809017f, 0.309017f),
00213 TVector3F( 0.238856f, 0.864188f, -0.442863f),
00214 TVector3F( 0.262866f, 0.951056f, -0.162460f),
00215 TVector3F( 0.500000f, 0.809017f, -0.309017f),
00216 TVector3F( 0.850651f, 0.525731f, 0.000000f),
00217 TVector3F( 0.716567f, 0.681718f, 0.147621f),
00218 TVector3F( 0.716567f, 0.681718f, -0.147621f),
00219 TVector3F( 0.525731f, 0.850651f, 0.000000f),
00220 TVector3F( 0.425325f, 0.688191f, 0.587785f),
00221 TVector3F( 0.864188f, 0.442863f, 0.238856f),
00222 TVector3F( 0.688191f, 0.587785f, 0.425325f),
00223 TVector3F( 0.809017f, 0.309017f, 0.500000f),
00224 TVector3F( 0.681718f, 0.147621f, 0.716567f),
00225 TVector3F( 0.587785f, 0.425325f, 0.688191f),
00226 TVector3F( 0.955423f, 0.295242f, 0.000000f),
00227 TVector3F( 1.000000f, 0.000000f, 0.000000f),
00228 TVector3F( 0.951056f, 0.162460f, 0.262866f),
00229 TVector3F( 0.850651f, -0.525731f, 0.000000f),
00230 TVector3F( 0.955423f, -0.295242f, 0.000000f),
00231 TVector3F( 0.864188f, -0.442863f, 0.238856f),
00232 TVector3F( 0.951056f, -0.162460f, 0.262866f),
00233 TVector3F( 0.809017f, -0.309017f, 0.500000f),
00234 TVector3F( 0.681718f, -0.147621f, 0.716567f),
00235 TVector3F( 0.850651f, 0.000000f, 0.525731f),
00236 TVector3F( 0.864188f, 0.442863f, -0.238856f),
00237 TVector3F( 0.809017f, 0.309017f, -0.500000f),
00238 TVector3F( 0.951056f, 0.162460f, -0.262866f),
00239 TVector3F( 0.525731f, 0.000000f, -0.850651f),
00240 TVector3F( 0.681718f, 0.147621f, -0.716567f),
00241 TVector3F( 0.681718f, -0.147621f, -0.716567f),
00242 TVector3F( 0.850651f, 0.000000f, -0.525731f),
00243 TVector3F( 0.809017f, -0.309017f, -0.500000f),
00244 TVector3F( 0.864188f, -0.442863f, -0.238856f),
00245 TVector3F( 0.951056f, -0.162460f, -0.262866f),
00246 TVector3F( 0.147621f, 0.716567f, -0.681718f),
00247 TVector3F( 0.309017f, 0.500000f, -0.809017f),
00248 TVector3F( 0.425325f, 0.688191f, -0.587785f),
00249 TVector3F( 0.442863f, 0.238856f, -0.864188f),
00250 TVector3F( 0.587785f, 0.425325f, -0.688191f),
00251 TVector3F( 0.688191f, 0.587785f, -0.425325f),
00252 TVector3F(-0.147621f, 0.716567f, -0.681718f),
00253 TVector3F(-0.309017f, 0.500000f, -0.809017f),
00254 TVector3F( 0.000000f, 0.525731f, -0.850651f),
00255 TVector3F(-0.525731f, 0.000000f, -0.850651f),
00256 TVector3F(-0.442863f, 0.238856f, -0.864188f),
00257 TVector3F(-0.295242f, 0.000000f, -0.955423f),
00258 TVector3F(-0.162460f, 0.262866f, -0.951056f),
00259 TVector3F( 0.000000f, 0.000000f, -1.000000f),
00260 TVector3F( 0.295242f, 0.000000f, -0.955423f),
00261 TVector3F( 0.162460f, 0.262866f, -0.951056f),
00262 TVector3F(-0.442863f, -0.238856f, -0.864188f),
00263 TVector3F(-0.309017f, -0.500000f, -0.809017f),
00264 TVector3F(-0.162460f, -0.262866f, -0.951056f),
00265 TVector3F( 0.000000f, -0.850651f, -0.525731f),
00266 TVector3F(-0.147621f, -0.716567f, -0.681718f),
00267 TVector3F( 0.147621f, -0.716567f, -0.681718f),
00268 TVector3F( 0.000000f, -0.525731f, -0.850651f),
00269 TVector3F( 0.309017f, -0.500000f, -0.809017f),
00270 TVector3F( 0.442863f, -0.238856f, -0.864188f),
00271 TVector3F( 0.162460f, -0.262866f, -0.951056f),
00272 TVector3F( 0.238856f, -0.864188f, -0.442863f),
00273 TVector3F( 0.500000f, -0.809017f, -0.309017f),
00274 TVector3F( 0.425325f, -0.688191f, -0.587785f),
00275 TVector3F( 0.716567f, -0.681718f, -0.147621f),
00276 TVector3F( 0.688191f, -0.587785f, -0.425325f),
00277 TVector3F( 0.587785f, -0.425325f, -0.688191f),
00278 TVector3F( 0.000000f, -0.955423f, -0.295242f),
00279 TVector3F( 0.000000f, -1.000000f, 0.000000f),
00280 TVector3F( 0.262866f, -0.951056f, -0.162460f),
00281 TVector3F( 0.000000f, -0.850651f, 0.525731f),
00282 TVector3F( 0.000000f, -0.955423f, 0.295242f),
00283 TVector3F( 0.238856f, -0.864188f, 0.442863f),
00284 TVector3F( 0.262866f, -0.951056f, 0.162460f),
00285 TVector3F( 0.500000f, -0.809017f, 0.309017f),
00286 TVector3F( 0.716567f, -0.681718f, 0.147621f),
00287 TVector3F( 0.525731f, -0.850651f, 0.000000f),
00288 TVector3F(-0.238856f, -0.864188f, -0.442863f),
00289 TVector3F(-0.500000f, -0.809017f, -0.309017f),
00290 TVector3F(-0.262866f, -0.951056f, -0.162460f),
00291 TVector3F(-0.850651f, -0.525731f, 0.000000f),
00292 TVector3F(-0.716567f, -0.681718f, -0.147621f),
00293 TVector3F(-0.716567f, -0.681718f, 0.147621f),
00294 TVector3F(-0.525731f, -0.850651f, 0.000000f),
00295 TVector3F(-0.500000f, -0.809017f, 0.309017f),
00296 TVector3F(-0.238856f, -0.864188f, 0.442863f),
00297 TVector3F(-0.262866f, -0.951056f, 0.162460f),
00298 TVector3F(-0.864188f, -0.442863f, 0.238856f),
00299 TVector3F(-0.809017f, -0.309017f, 0.500000f),
00300 TVector3F(-0.688191f, -0.587785f, 0.425325f),
00301 TVector3F(-0.681718f, -0.147621f, 0.716567f),
00302 TVector3F(-0.442863f, -0.238856f, 0.864188f),
00303 TVector3F(-0.587785f, -0.425325f, 0.688191f),
00304 TVector3F(-0.309017f, -0.500000f, 0.809017f),
00305 TVector3F(-0.147621f, -0.716567f, 0.681718f),
00306 TVector3F(-0.425325f, -0.688191f, 0.587785f),
00307 TVector3F(-0.162460f, -0.262866f, 0.951056f),
00308 TVector3F( 0.442863f, -0.238856f, 0.864188f),
00309 TVector3F( 0.162460f, -0.262866f, 0.951056f),
00310 TVector3F( 0.309017f, -0.500000f, 0.809017f),
00311 TVector3F( 0.147621f, -0.716567f, 0.681718f),
00312 TVector3F( 0.000000f, -0.525731f, 0.850651f),
00313 TVector3F( 0.425325f, -0.688191f, 0.587785f),
00314 TVector3F( 0.587785f, -0.425325f, 0.688191f),
00315 TVector3F( 0.688191f, -0.587785f, 0.425325f),
00316 TVector3F(-0.955423f, 0.295242f, 0.000000f),
00317 TVector3F(-0.951056f, 0.162460f, 0.262866f),
00318 TVector3F(-1.000000f, 0.000000f, 0.000000f),
00319 TVector3F(-0.850651f, 0.000000f, 0.525731f),
00320 TVector3F(-0.955423f, -0.295242f, 0.000000f),
00321 TVector3F(-0.951056f, -0.162460f, 0.262866f),
00322 TVector3F(-0.864188f, 0.442863f, -0.238856f),
00323 TVector3F(-0.951056f, 0.162460f, -0.262866f),
00324 TVector3F(-0.809017f, 0.309017f, -0.500000f),
00325 TVector3F(-0.864188f, -0.442863f, -0.238856f),
00326 TVector3F(-0.951056f, -0.162460f, -0.262866f),
00327 TVector3F(-0.809017f, -0.309017f, -0.500000f),
00328 TVector3F(-0.681718f, 0.147621f, -0.716567f),
00329 TVector3F(-0.681718f, -0.147621f, -0.716567f),
00330 TVector3F(-0.850651f, 0.000000f, -0.525731f),
00331 TVector3F(-0.688191f, 0.587785f, -0.425325f),
00332 TVector3F(-0.587785f, 0.425325f, -0.688191f),
00333 TVector3F(-0.425325f, 0.688191f, -0.587785f),
00334 TVector3F(-0.425325f, -0.688191f, -0.587785f),
00335 TVector3F(-0.587785f, -0.425325f, -0.688191f),
00336 TVector3F(-0.688191f, -0.587785f, -0.425325f)
00337 };
00338
00339
00340
00341 const uchar CMDLQ1Loader::ms_DefaultColorMap[] =
00342 {
00343 0, 0, 0, 1, 1, 15, 31, 31, 31, 47, 47, 47, 63, 63, 63,
00344 75, 75, 75, 91, 91, 91, 107, 107, 107, 123, 123, 123, 139, 139, 139,
00345 155, 155, 155, 171, 171, 171, 187, 187, 187, 203, 203, 203, 219, 219, 219,
00346 235, 235, 235, 15, 11, 7, 23, 15, 11, 31, 23, 11, 39, 27, 15,
00347 47, 35, 19, 55, 43, 23, 63, 47, 23, 75, 55, 27, 83, 59, 27,
00348 91, 67, 31, 99, 75, 31, 107, 83, 31, 115, 87, 31, 123, 95, 35,
00349 131, 103, 35, 143, 111, 35, 11, 11, 15, 19, 19, 27, 27, 27, 39,
00350 39, 39, 51, 47, 47, 63, 55, 55, 75, 63, 63, 87, 71, 71, 103,
00351 79, 79, 115, 91, 91, 127, 99, 99, 139, 107, 107, 151, 115, 115, 163,
00352 123, 123, 175, 131, 131, 187, 139, 139, 203, 0, 0, 0, 7, 7, 0,
00353 11, 11, 0, 19, 19, 0, 27, 27, 0, 35, 35, 0, 43, 43, 7,
00354 47, 47, 7, 55, 55, 7, 63, 63, 7, 71, 71, 7, 75, 75, 11,
00355 83, 83, 11, 91, 91, 11, 99, 99, 11, 107, 107, 15, 7, 0, 0,
00356 15, 0, 0, 23, 0, 0, 31, 0, 0, 39, 0, 0, 47, 0, 0,
00357 55, 0, 0, 63, 0, 0, 71, 0, 0, 79, 0, 0, 87, 0, 0,
00358 95, 0, 0, 103, 0, 0, 111, 0, 0, 119, 0, 0, 127, 0, 0,
00359 19, 19, 0, 27, 27, 0, 35, 35, 0, 47, 43, 0, 55, 47, 0,
00360 67, 55, 0, 75, 59, 7, 87, 67, 7, 95, 71, 7, 107, 75, 11,
00361 119, 83, 15, 131, 87, 19, 139, 91, 19, 151, 95, 27, 163, 99, 31,
00362 175, 103, 35, 35, 19, 7, 47, 23, 11, 59, 31, 15, 75, 35, 19,
00363 87, 43, 23, 99, 47, 31, 115, 55, 35, 127, 59, 43, 143, 67, 51,
00364 159, 79, 51, 175, 99, 47, 191, 119, 47, 207, 143, 43, 223, 171, 39,
00365 239, 203, 31, 255, 243, 27, 11, 7, 0, 27, 19, 0, 43, 35, 15,
00366 55, 43, 19, 71, 51, 27, 83, 55, 35, 99, 63, 43, 111, 71, 51,
00367 127, 83, 63, 139, 95, 71, 155, 107, 83, 167, 123, 95, 183, 135, 107,
00368 195, 147, 123, 211, 163, 139, 227, 179, 151, 171, 139, 163, 159, 127, 151,
00369 147, 115, 135, 139, 103, 123, 127, 91, 111, 119, 83, 99, 107, 75, 87,
00370 95, 63, 75, 87, 55, 67, 75, 47, 55, 67, 39, 47, 55, 31, 35,
00371 43, 23, 27, 35, 19, 19, 23, 11, 11, 15, 7, 7, 187, 115, 159,
00372 175, 107, 143, 163, 95, 131, 151, 87, 119, 139, 79, 107, 127, 75, 95,
00373 115, 67, 83, 107, 59, 75, 95, 51, 63, 83, 43, 55, 71, 35, 43,
00374 59, 31, 35, 47, 23, 27, 35, 19, 19, 23, 11, 11, 15, 7, 7,
00375 219, 195, 187, 203, 179, 167, 191, 163, 155, 175, 151, 139, 163, 135, 123,
00376 151, 123, 111, 135, 111, 95, 123, 99, 83, 107, 87, 71, 95, 75, 59,
00377 83, 63, 51, 67, 51, 39, 55, 43, 31, 39, 31, 23, 27, 19, 15,
00378 15, 11 , 7, 111, 131, 123, 103, 123, 111, 95, 115, 103, 87, 107, 95,
00379 79, 99, 87, 71, 91, 79, 63, 83, 71, 55, 75, 63, 47, 67, 55,
00380 43, 59, 47, 35, 51, 39, 31, 43, 31, 23, 35, 23, 15, 27, 19,
00381 11, 19, 11, 7, 11, 7, 255, 243, 27, 239, 223, 23, 219, 203, 19,
00382 203, 183, 15, 187, 167, 15, 171, 151, 11, 155, 131, 7, 139, 115, 7,
00383 123, 99, 7, 107, 83, 0, 91, 71, 0, 75, 55, 0, 59, 43, 0,
00384 43, 31, 0, 27, 15, 0, 11, 7, 0, 0, 0, 255, 11, 11, 239,
00385 19, 19, 223, 27, 27, 207, 35, 35, 191, 43, 43, 175, 47, 47, 159,
00386 47, 47, 143, 47, 47, 127, 47, 47, 111, 47, 47, 95, 43, 43, 79,
00387 35, 35, 63, 27, 27, 47, 19, 19, 31, 11, 11, 15, 43, 0, 0,
00388 59, 0, 0, 75, 7, 0, 95, 7, 0, 111, 15, 0, 127, 23, 7,
00389 147, 31, 7, 163, 39, 11, 183, 51, 15, 195, 75, 27, 207, 99, 43,
00390 219, 127, 59, 227, 151, 79, 231, 171, 95, 239, 191, 119, 247, 211, 139,
00391 167, 123, 59, 183, 155, 55, 199, 195, 55, 231, 227, 87, 127, 191, 255,
00392 171, 231, 255, 215, 255, 255, 103, 0, 0, 139, 0, 0, 179, 0, 0,
00393 215, 0, 0, 255, 0, 0, 255, 243, 147, 255, 247, 199, 255, 255, 255,
00394 159, 91, 83
00395 };
00396 }