the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
1#include "stdafx.h"
2#include "..\Minecraft.World\net.minecraft.world.h"
3#include "..\Minecraft.World\net.minecraft.world.level.tile.h"
4#include "..\Minecraft.World\net.minecraft.world.item.h"
5#include "..\Minecraft.World\ByteBuffer.h"
6#include "Minecraft.h"
7#include "LevelRenderer.h"
8#include "EntityRenderDispatcher.h"
9#include "Stitcher.h"
10#include "StitchSlot.h"
11#include "StitchedTexture.h"
12#include "Texture.h"
13#include "TextureHolder.h"
14#include "TextureManager.h"
15#include "TexturePack.h"
16#include "TexturePackRepository.h"
17#include "PreStitchedTextureMap.h"
18#include "SimpleIcon.h"
19#include "CompassTexture.h"
20#include "ClockTexture.h"
21
22const wstring PreStitchedTextureMap::NAME_MISSING_TEXTURE = L"missingno";
23
24PreStitchedTextureMap::PreStitchedTextureMap(int type, const wstring &name, const wstring &path, BufferedImage *missingTexture, bool mipmap) : iconType(type), name(name), path(path), extension(L".png")
25{
26 this->missingTexture = missingTexture;
27
28 // 4J Initialisers
29 missingPosition = NULL;
30 stitchResult = NULL;
31
32 m_mipMap = mipmap;
33 missingPosition = (StitchedTexture *)(new SimpleIcon(NAME_MISSING_TEXTURE,NAME_MISSING_TEXTURE,0,0,1,1));
34}
35
36void PreStitchedTextureMap::stitch()
37{
38 // Animated StitchedTextures store a vector of textures for each frame of the animation. Free any pre-existing ones here.
39 for(AUTO_VAR(it, animatedTextures.begin()); it != animatedTextures.end(); ++it)
40 {
41 StitchedTexture *animatedStitchedTexture = *it;
42 animatedStitchedTexture->freeFrameTextures();
43 }
44
45 loadUVs();
46
47 if (iconType == Icon::TYPE_TERRAIN)
48 {
49 //for (Tile tile : Tile.tiles)
50 for(unsigned int i = 0; i < Tile::TILE_NUM_COUNT; ++i)
51 {
52 if (Tile::tiles[i] != NULL)
53 {
54 Tile::tiles[i]->registerIcons(this);
55 }
56 }
57
58 Minecraft::GetInstance()->levelRenderer->registerTextures(this);
59 EntityRenderDispatcher::instance->registerTerrainTextures(this);
60 }
61
62 //for (Item item : Item.items)
63 for(unsigned int i = 0; i < Item::ITEM_NUM_COUNT; ++i)
64 {
65 Item *item = Item::items[i];
66 if (item != NULL && item->getIconType() == iconType)
67 {
68 item->registerIcons(this);
69 }
70 }
71
72 // Collection bucket for multiple frames per texture
73 unordered_map<TextureHolder *, vector<Texture *> * > textures; // = new HashMap<TextureHolder, List<Texture>>();
74
75 Stitcher *stitcher = TextureManager::getInstance()->createStitcher(name);
76
77 animatedTextures.clear();
78
79 // Create the final image
80 wstring filename = name + extension;
81
82 TexturePack *texturePack = Minecraft::GetInstance()->skins->getSelected();
83 //try {
84 int mode = Texture::TM_DYNAMIC;
85 int clamp = Texture::WM_WRAP; // 4J Stu - Don't clamp as it causes issues with how we signal non-mipmmapped textures to the pixel shader //Texture::WM_CLAMP;
86 int minFilter = Texture::TFLT_NEAREST;
87 int magFilter = Texture::TFLT_NEAREST;
88
89 MemSect(32);
90 wstring drive = L"";
91
92 // 4J-PB - need to check for BD patched files
93#ifdef __PS3__
94 const char *pchName=wstringtofilename(filename);
95 if(app.GetBootedFromDiscPatch() && app.IsFileInPatchList(pchName))
96 {
97 if(texturePack->hasFile(L"res/" + filename,false))
98 {
99 drive = texturePack->getPath(true,pchName);
100 }
101 else
102 {
103 drive = Minecraft::GetInstance()->skins->getDefault()->getPath(true,pchName);
104 texturePack = Minecraft::GetInstance()->skins->getDefault();
105 }
106 }
107 else
108#endif
109 if(texturePack->hasFile(L"res/" + filename,false))
110 {
111 drive = texturePack->getPath(true);
112 }
113 else
114 {
115 drive = Minecraft::GetInstance()->skins->getDefault()->getPath(true);
116 texturePack = Minecraft::GetInstance()->skins->getDefault();
117 }
118
119 //BufferedImage *image = new BufferedImage(texturePack->getResource(L"/" + filename),false,true,drive); //ImageIO::read(texturePack->getResource(L"/" + filename));
120 BufferedImage *image = texturePack->getImageResource(filename, false, true, drive);
121 MemSect(0);
122 int height = image->getHeight();
123 int width = image->getWidth();
124
125 if(stitchResult != NULL)
126 {
127 TextureManager::getInstance()->unregisterTexture(name, stitchResult);
128 delete stitchResult;
129 }
130 stitchResult = TextureManager::getInstance()->createTexture(name, Texture::TM_DYNAMIC, width, height, Texture::TFMT_RGBA, m_mipMap);
131 stitchResult->transferFromImage(image);
132 delete image;
133 TextureManager::getInstance()->registerName(name, stitchResult);
134 //stitchResult = stitcher->constructTexture(m_mipMap);
135
136 for(AUTO_VAR(it, texturesByName.begin()); it != texturesByName.end(); ++it)
137 {
138 StitchedTexture *preStitched = (StitchedTexture *)it->second;
139
140 int x = preStitched->getU0() * stitchResult->getWidth();
141 int y = preStitched->getV0() * stitchResult->getHeight();
142 int width = (preStitched->getU1() * stitchResult->getWidth()) - x;
143 int height = (preStitched->getV1() * stitchResult->getHeight()) - y;
144
145 preStitched->init(stitchResult, NULL, x, y, width, height, false);
146 }
147
148 MemSect(52);
149 for(AUTO_VAR(it, texturesByName.begin()); it != texturesByName.end(); ++it)
150 {
151 StitchedTexture *preStitched = (StitchedTexture *)(it->second);
152
153 makeTextureAnimated(texturePack, preStitched);
154 }
155 MemSect(0);
156 //missingPosition = (StitchedTexture *)texturesByName.find(NAME_MISSING_TEXTURE)->second;
157
158 stitchResult->writeAsPNG(L"debug.stitched_" + name + L".png");
159 stitchResult->updateOnGPU();
160
161
162#ifdef __PSVITA__
163 // AP - alpha cut out is expensive on vita so we mark which icons actually require it
164 DWORD *data = (DWORD*) this->getStitchedTexture()->getData()->getBuffer();
165 int Width = this->getStitchedTexture()->getWidth();
166 int Height = this->getStitchedTexture()->getHeight();
167 for(AUTO_VAR(it, texturesByName.begin()); it != texturesByName.end(); ++it)
168 {
169 StitchedTexture *preStitched = (StitchedTexture *)it->second;
170
171 bool Found = false;
172 int u0 = preStitched->getU0() * Width;
173 int u1 = preStitched->getU1() * Width;
174 int v0 = preStitched->getV0() * Height;
175 int v1 = preStitched->getV1() * Height;
176
177 // check all the texels for this icon. If ANY are transparent we mark it as 'cut out'
178 for( int v = v0;v < v1; v+= 1 )
179 {
180 for( int u = u0;u < u1; u+= 1 )
181 {
182 // is this texel alpha value < 0.1
183 if( (data[v * Width + u] & 0xff000000) < 0x20000000 )
184 {
185 // this texel is transparent. Mark the icon as such and bail
186 preStitched->setFlags(Icon::IS_ALPHA_CUT_OUT);
187 Found = true;
188 break;
189 }
190 }
191
192 if( Found )
193 {
194 // move onto the next icon
195 break;
196 }
197 }
198 }
199#endif
200}
201
202void PreStitchedTextureMap::makeTextureAnimated(TexturePack *texturePack, StitchedTexture *tex)
203{
204 if(!tex->hasOwnData())
205 {
206 animatedTextures.push_back(tex);
207 return;
208 }
209
210 wstring textureFileName = tex->m_fileName;
211
212 wstring animString = texturePack->getAnimationString(textureFileName, path, true);
213
214 if(!animString.empty())
215 {
216 wstring filename = path + textureFileName + extension;
217
218 // TODO: [EB] Put the frames into a proper object, not this inside out hack
219 vector<Texture *> *frames = TextureManager::getInstance()->createTextures(filename, m_mipMap);
220 if (frames == NULL || frames->empty())
221 {
222 return; // Couldn't load a texture, skip it
223 }
224
225 Texture *first = frames->at(0);
226
227#ifndef _CONTENT_PACKAGE
228 if(first->getWidth() != tex->getWidth() || first->getHeight() != tex->getHeight())
229 {
230 app.DebugPrintf("%ls - first w - %d, h - %d, tex w - %d, h - %d\n",textureFileName.c_str(),first->getWidth(),tex->getWidth(),first->getHeight(),tex->getHeight());
231 //__debugbreak();
232 }
233#endif
234
235 tex->init(stitchResult, frames, tex->getX(), tex->getY(), first->getWidth(), first->getHeight(), false);
236
237 if (frames->size() > 1)
238 {
239 animatedTextures.push_back(tex);
240
241 tex->loadAnimationFrames(animString);
242 }
243 }
244}
245
246StitchedTexture *PreStitchedTextureMap::getTexture(const wstring &name)
247{
248#ifndef _CONTENT_PACKAGE
249 app.DebugPrintf("Not implemented!\n");
250 __debugbreak();
251#endif
252 return NULL;
253#if 0
254 StitchedTexture *result = texturesByName.find(name)->second;
255 if (result == NULL) result = missingPosition;
256 return result;
257#endif
258}
259
260void PreStitchedTextureMap::cycleAnimationFrames()
261{
262 //for (StitchedTexture texture : animatedTextures)
263 for(AUTO_VAR(it, animatedTextures.begin() ); it != animatedTextures.end(); ++it)
264 {
265 StitchedTexture *texture = *it;
266 texture->cycleFrames();
267 }
268}
269
270Texture *PreStitchedTextureMap::getStitchedTexture()
271{
272 return stitchResult;
273}
274
275// 4J Stu - register is a reserved keyword in C++
276Icon *PreStitchedTextureMap::registerIcon(const wstring &name)
277{
278 Icon *result = NULL;
279 if (name.empty())
280 {
281 app.DebugPrintf("Don't register NULL\n");
282#ifndef _CONTENT_PACKAGE
283 __debugbreak();
284#endif
285 result = missingPosition;
286 //new RuntimeException("Don't register null!").printStackTrace();
287 }
288
289 AUTO_VAR(it, texturesByName.find(name));
290 if(it != texturesByName.end()) result = it->second;
291
292 if (result == NULL)
293 {
294#ifndef _CONTENT_PACKAGE
295 app.DebugPrintf("Could not find uv data for icon %ls\n", name.c_str() );
296 __debugbreak();
297#endif
298 result = missingPosition;
299 }
300
301 return result;
302}
303
304int PreStitchedTextureMap::getIconType()
305{
306 return iconType;
307}
308
309Icon *PreStitchedTextureMap::getMissingIcon()
310{
311 return missingPosition;
312}
313
314#define ADD_ICON(row, column, name) (texturesByName[name] = new SimpleIcon(name,name,horizRatio*column,vertRatio*row,horizRatio*(column+1),vertRatio*(row+1)));
315#define ADD_ICON_WITH_NAME(row, column, name, filename) (texturesByName[name] = new SimpleIcon(name,filename,horizRatio*column,vertRatio*row,horizRatio*(column+1),vertRatio*(row+1)));
316#define ADD_ICON_SIZE(row, column, name, height, width) (texturesByName[name] = new SimpleIcon(name,name,horizRatio*column,vertRatio*row,horizRatio*(column+width),vertRatio*(row+height)));
317
318void PreStitchedTextureMap::loadUVs()
319{
320 if(!texturesByName.empty())
321 {
322 // 4J Stu - We only need to populate this once at the moment as we have hardcoded positions for each texture
323 // If we ever load that dynamically, be aware that the Icon objects could currently be being used by the
324 // GameRenderer::runUpdate thread
325 return;
326 }
327
328 for(AUTO_VAR(it, texturesByName.begin()); it != texturesByName.end(); ++it)
329 {
330 delete it->second;
331 }
332 texturesByName.clear();
333
334 if(iconType != Icon::TYPE_TERRAIN)
335 {
336 float horizRatio = 1.0f/16.0f;
337 float vertRatio = 1.0f/16.0f;
338
339 ADD_ICON(0, 0, L"helmetCloth")
340 ADD_ICON(0, 1, L"helmetChain")
341 ADD_ICON(0, 2, L"helmetIron")
342 ADD_ICON(0, 3, L"helmetDiamond")
343 ADD_ICON(0, 4, L"helmetGold")
344 ADD_ICON(0, 5, L"flintAndSteel")
345 ADD_ICON(0, 6, L"flint")
346 ADD_ICON(0, 7, L"coal")
347 ADD_ICON(0, 8, L"string")
348 ADD_ICON(0, 9, L"seeds")
349 ADD_ICON(0, 10, L"apple")
350 ADD_ICON(0, 11, L"appleGold")
351 ADD_ICON(0, 12, L"egg")
352 ADD_ICON(0, 13, L"sugar")
353 ADD_ICON(0, 14, L"snowball")
354 ADD_ICON(0, 15, L"slot_empty_helmet")
355
356 ADD_ICON(1, 0, L"chestplateCloth")
357 ADD_ICON(1, 1, L"chestplateChain")
358 ADD_ICON(1, 2, L"chestplateIron")
359 ADD_ICON(1, 3, L"chestplateDiamond")
360 ADD_ICON(1, 4, L"chestplateGold")
361 ADD_ICON(1, 5, L"bow")
362 ADD_ICON(1, 6, L"brick")
363 ADD_ICON(1, 7, L"ingotIron")
364 ADD_ICON(1, 8, L"feather")
365 ADD_ICON(1, 9, L"wheat")
366 ADD_ICON(1, 10, L"painting")
367 ADD_ICON(1, 11, L"reeds")
368 ADD_ICON(1, 12, L"bone")
369 ADD_ICON(1, 13, L"cake")
370 ADD_ICON(1, 14, L"slimeball")
371 ADD_ICON(1, 15, L"slot_empty_chestplate")
372
373 ADD_ICON(2, 0, L"leggingsCloth")
374 ADD_ICON(2, 1, L"leggingsChain")
375 ADD_ICON(2, 2, L"leggingsIron")
376 ADD_ICON(2, 3, L"leggingsDiamond")
377 ADD_ICON(2, 4, L"leggingsGold")
378 ADD_ICON(2, 5, L"arrow")
379 ADD_ICON(2, 6, L"quiver")
380 ADD_ICON(2, 7, L"ingotGold")
381 ADD_ICON(2, 8, L"sulphur")
382 ADD_ICON(2, 9, L"bread")
383 ADD_ICON(2, 10, L"sign")
384 ADD_ICON(2, 11, L"doorWood")
385 ADD_ICON(2, 12, L"doorIron")
386 ADD_ICON(2, 13, L"bed")
387 ADD_ICON(2, 14, L"fireball")
388 ADD_ICON(2, 15, L"slot_empty_leggings")
389
390 ADD_ICON(3, 0, L"bootsCloth")
391 ADD_ICON(3, 1, L"bootsChain")
392 ADD_ICON(3, 2, L"bootsIron")
393 ADD_ICON(3, 3, L"bootsDiamond")
394 ADD_ICON(3, 4, L"bootsGold")
395 ADD_ICON(3, 5, L"stick")
396 ADD_ICON(3, 6, L"compass")
397 ADD_ICON(3, 7, L"diamond")
398 ADD_ICON(3, 8, L"redstone")
399 ADD_ICON(3, 9, L"clay")
400 ADD_ICON(3, 10, L"paper")
401 ADD_ICON(3, 11, L"book")
402 ADD_ICON(3, 12, L"map")
403 ADD_ICON(3, 13, L"seeds_pumpkin")
404 ADD_ICON(3, 14, L"seeds_melon")
405 ADD_ICON(3, 15, L"slot_empty_boots")
406
407 ADD_ICON(4, 0, L"swordWood")
408 ADD_ICON(4, 1, L"swordStone")
409 ADD_ICON(4, 2, L"swordIron")
410 ADD_ICON(4, 3, L"swordDiamond")
411 ADD_ICON(4, 4, L"swordGold")
412 ADD_ICON(4, 5, L"fishingRod_uncast")
413 ADD_ICON(4, 6, L"clock")
414 ADD_ICON(4, 7, L"bowl")
415 ADD_ICON(4, 8, L"mushroomStew")
416 ADD_ICON(4, 9, L"yellowDust")
417 ADD_ICON(4, 10, L"bucket")
418 ADD_ICON(4, 11, L"bucketWater")
419 ADD_ICON(4, 12, L"bucketLava")
420 ADD_ICON(4, 13, L"milk")
421 ADD_ICON(4, 14, L"dyePowder_black")
422 ADD_ICON(4, 15, L"dyePowder_gray")
423
424 ADD_ICON(5, 0, L"shovelWood")
425 ADD_ICON(5, 1, L"shovelStone")
426 ADD_ICON(5, 2, L"shovelIron")
427 ADD_ICON(5, 3, L"shovelDiamond")
428 ADD_ICON(5, 4, L"shovelGold")
429 ADD_ICON(5, 5, L"fishingRod_cast")
430 ADD_ICON(5, 6, L"diode")
431 ADD_ICON(5, 7, L"porkchopRaw")
432 ADD_ICON(5, 8, L"porkchopCooked")
433 ADD_ICON(5, 9, L"fishRaw")
434 ADD_ICON(5, 10, L"fishCooked")
435 ADD_ICON(5, 11, L"rottenFlesh")
436 ADD_ICON(5, 12, L"cookie")
437 ADD_ICON(5, 13, L"shears")
438 ADD_ICON(5, 14, L"dyePowder_red")
439 ADD_ICON(5, 15, L"dyePowder_pink")
440
441 ADD_ICON(6, 0, L"pickaxeWood")
442 ADD_ICON(6, 1, L"pickaxeStone")
443 ADD_ICON(6, 2, L"pickaxeIron")
444 ADD_ICON(6, 3, L"pickaxeDiamond")
445 ADD_ICON(6, 4, L"pickaxeGold")
446 ADD_ICON(6, 5, L"bow_pull_0")
447 ADD_ICON(6, 6, L"carrotOnAStick")
448 ADD_ICON(6, 7, L"leather")
449 ADD_ICON(6, 8, L"saddle")
450 ADD_ICON(6, 9, L"beefRaw")
451 ADD_ICON(6, 10, L"beefCooked")
452 ADD_ICON(6, 11, L"enderPearl")
453 ADD_ICON(6, 12, L"blazeRod")
454 ADD_ICON(6, 13, L"melon")
455 ADD_ICON(6, 14, L"dyePowder_green")
456 ADD_ICON(6, 15, L"dyePowder_lime")
457
458 ADD_ICON(7, 0, L"hatchetWood")
459 ADD_ICON(7, 1, L"hatchetStone")
460 ADD_ICON(7, 2, L"hatchetIron")
461 ADD_ICON(7, 3, L"hatchetDiamond")
462 ADD_ICON(7, 4, L"hatchetGold")
463 ADD_ICON(7, 5, L"bow_pull_1")
464 ADD_ICON(7, 6, L"potatoBaked")
465 ADD_ICON(7, 7, L"potato")
466 ADD_ICON(7, 8, L"carrots")
467 ADD_ICON(7, 9, L"chickenRaw")
468 ADD_ICON(7, 10, L"chickenCooked")
469 ADD_ICON(7, 11, L"ghastTear")
470 ADD_ICON(7, 12, L"goldNugget")
471 ADD_ICON(7, 13, L"netherStalkSeeds")
472 ADD_ICON(7, 14, L"dyePowder_brown")
473 ADD_ICON(7, 15, L"dyePowder_yellow")
474
475 ADD_ICON(8, 0, L"hoeWood")
476 ADD_ICON(8, 1, L"hoeStone")
477 ADD_ICON(8, 2, L"hoeIron")
478 ADD_ICON(8, 3, L"hoeDiamond")
479 ADD_ICON(8, 4, L"hoeGold")
480 ADD_ICON(8, 5, L"bow_pull_2")
481 ADD_ICON(8, 6, L"potatoPoisonous")
482 ADD_ICON(8, 7, L"minecart")
483 ADD_ICON(8, 8, L"boat")
484 ADD_ICON(8, 9, L"speckledMelon")
485 ADD_ICON(8, 10, L"fermentedSpiderEye")
486 ADD_ICON(8, 11, L"spiderEye")
487 ADD_ICON(8, 12, L"potion")
488 ADD_ICON(8, 12, L"glassBottle") // Same as potion
489 ADD_ICON(8, 13, L"potion_contents")
490 ADD_ICON(8, 14, L"dyePowder_blue")
491 ADD_ICON(8, 15, L"dyePowder_light_blue")
492
493 ADD_ICON(9, 0, L"helmetCloth_overlay")
494 //ADD_ICON(9, 1, L"unused")
495 ADD_ICON(9, 2, L"iron_horse_armor")
496 ADD_ICON(9, 3, L"diamond_horse_armor")
497 ADD_ICON(9, 4, L"gold_horse_armor")
498 ADD_ICON(9, 5, L"comparator")
499 ADD_ICON(9, 6, L"carrotGolden")
500 ADD_ICON(9, 7, L"minecart_chest")
501 ADD_ICON(9, 8, L"pumpkinPie")
502 ADD_ICON(9, 9, L"monsterPlacer")
503 ADD_ICON(9, 10, L"potion_splash")
504 ADD_ICON(9, 11, L"eyeOfEnder")
505 ADD_ICON(9, 12, L"cauldron")
506 ADD_ICON(9, 13, L"blazePowder")
507 ADD_ICON(9, 14, L"dyePowder_purple")
508 ADD_ICON(9, 15, L"dyePowder_magenta")
509
510 ADD_ICON(10, 0, L"chestplateCloth_overlay")
511 //ADD_ICON(10, 1, L"unused")
512 //ADD_ICON(10, 2, L"unused")
513 ADD_ICON(10, 3, L"name_tag")
514 ADD_ICON(10, 4, L"lead")
515 ADD_ICON(10, 5, L"netherbrick")
516 //ADD_ICON(10, 6, L"unused")
517 ADD_ICON(10, 7, L"minecart_furnace")
518 ADD_ICON(10, 8, L"charcoal")
519 ADD_ICON(10, 9, L"monsterPlacer_overlay")
520 ADD_ICON(10, 10, L"ruby")
521 ADD_ICON(10, 11, L"expBottle")
522 ADD_ICON(10, 12, L"brewingStand")
523 ADD_ICON(10, 13, L"magmaCream")
524 ADD_ICON(10, 14, L"dyePowder_cyan")
525 ADD_ICON(10, 15, L"dyePowder_orange")
526
527 ADD_ICON(11, 0, L"leggingsCloth_overlay")
528 //ADD_ICON(11, 1, L"unused")
529 //ADD_ICON(11, 2, L"unused")
530 //ADD_ICON(11, 3, L"unused")
531 //ADD_ICON(11, 4, L"unused")
532 //ADD_ICON(11, 5, L"unused")
533 //ADD_ICON(11, 6, L"unused")
534 ADD_ICON(11, 7, L"minecart_hopper")
535 ADD_ICON(11, 8, L"hopper")
536 ADD_ICON(11, 9, L"nether_star")
537 ADD_ICON(11, 10, L"emerald")
538 ADD_ICON(11, 11, L"writingBook")
539 ADD_ICON(11, 12, L"writtenBook")
540 ADD_ICON(11, 13, L"flowerPot")
541 ADD_ICON(11, 14, L"dyePowder_silver")
542 ADD_ICON(11, 15, L"dyePowder_white")
543
544 ADD_ICON(12, 0, L"bootsCloth_overlay")
545 //ADD_ICON(12, 1, L"unused")
546 //ADD_ICON(12, 2, L"unused")
547 //ADD_ICON(12, 3, L"unused")
548 //ADD_ICON(12, 4, L"unused")
549 //ADD_ICON(12, 5, L"unused")
550 //ADD_ICON(12, 6, L"unused")
551 ADD_ICON(12, 7, L"minecart_tnt")
552 //ADD_ICON(12, 8, L"unused")
553 ADD_ICON(12, 9, L"fireworks")
554 ADD_ICON(12, 10, L"fireworks_charge")
555 ADD_ICON(12, 11, L"fireworks_charge_overlay")
556 ADD_ICON(12, 12, L"netherquartz")
557 ADD_ICON(12, 13, L"map_empty")
558 ADD_ICON(12, 14, L"frame")
559 ADD_ICON(12, 15, L"enchantedBook")
560
561 ADD_ICON(14, 0, L"skull_skeleton")
562 ADD_ICON(14, 1, L"skull_wither")
563 ADD_ICON(14, 2, L"skull_zombie")
564 ADD_ICON(14, 3, L"skull_char")
565 ADD_ICON(14, 4, L"skull_creeper")
566 //ADD_ICON(14, 5, L"unused")
567 //ADD_ICON(14, 6, L"unused")
568 ADD_ICON_WITH_NAME(14, 7, L"compassP0", L"compass") // 4J Added
569 ADD_ICON_WITH_NAME(14, 8, L"compassP1", L"compass") // 4J Added
570 ADD_ICON_WITH_NAME(14, 9, L"compassP2", L"compass") // 4J Added
571 ADD_ICON_WITH_NAME(14, 10, L"compassP3", L"compass") // 4J Added
572 ADD_ICON_WITH_NAME(14, 11, L"clockP0", L"clock") // 4J Added
573 ADD_ICON_WITH_NAME(14, 12, L"clockP1", L"clock") // 4J Added
574 ADD_ICON_WITH_NAME(14, 13, L"clockP2", L"clock") // 4J Added
575 ADD_ICON_WITH_NAME(14, 14, L"clockP3", L"clock") // 4J Added
576 ADD_ICON(14, 15, L"dragonFireball")
577
578 ADD_ICON(15, 0, L"record_13")
579 ADD_ICON(15, 1, L"record_cat")
580 ADD_ICON(15, 2, L"record_blocks")
581 ADD_ICON(15, 3, L"record_chirp")
582 ADD_ICON(15, 4, L"record_far")
583 ADD_ICON(15, 5, L"record_mall")
584 ADD_ICON(15, 6, L"record_mellohi")
585 ADD_ICON(15, 7, L"record_stal")
586 ADD_ICON(15, 8, L"record_strad")
587 ADD_ICON(15, 9, L"record_ward")
588 ADD_ICON(15, 10, L"record_11")
589 ADD_ICON(15, 11, L"record_where are we now")
590
591 // Special cases
592 ClockTexture *dataClock = new ClockTexture();
593 Icon *oldClock = texturesByName[L"clock"];
594 dataClock->initUVs(oldClock->getU0(), oldClock->getV0(), oldClock->getU1(), oldClock->getV1() );
595 delete oldClock;
596 texturesByName[L"clock"] = dataClock;
597
598 ClockTexture *clock = new ClockTexture(0, dataClock);
599 oldClock = texturesByName[L"clockP0"];
600 clock->initUVs(oldClock->getU0(), oldClock->getV0(), oldClock->getU1(), oldClock->getV1() );
601 delete oldClock;
602 texturesByName[L"clockP0"] = clock;
603
604 clock = new ClockTexture(1, dataClock);
605 oldClock = texturesByName[L"clockP1"];
606 clock->initUVs(oldClock->getU0(), oldClock->getV0(), oldClock->getU1(), oldClock->getV1() );
607 delete oldClock;
608 texturesByName[L"clockP1"] = clock;
609
610 clock = new ClockTexture(2, dataClock);
611 oldClock = texturesByName[L"clockP2"];
612 clock->initUVs(oldClock->getU0(), oldClock->getV0(), oldClock->getU1(), oldClock->getV1() );
613 delete oldClock;
614 texturesByName[L"clockP2"] = clock;
615
616 clock = new ClockTexture(3, dataClock);
617 oldClock = texturesByName[L"clockP3"];
618 clock->initUVs(oldClock->getU0(), oldClock->getV0(), oldClock->getU1(), oldClock->getV1() );
619 delete oldClock;
620 texturesByName[L"clockP3"] = clock;
621
622 CompassTexture *dataCompass = new CompassTexture();
623 Icon *oldCompass = texturesByName[L"compass"];
624 dataCompass->initUVs(oldCompass->getU0(), oldCompass->getV0(), oldCompass->getU1(), oldCompass->getV1() );
625 delete oldCompass;
626 texturesByName[L"compass"] = dataCompass;
627
628 CompassTexture *compass = new CompassTexture(0, dataCompass);
629 oldCompass = texturesByName[L"compassP0"];
630 compass->initUVs(oldCompass->getU0(), oldCompass->getV0(), oldCompass->getU1(), oldCompass->getV1() );
631 delete oldCompass;
632 texturesByName[L"compassP0"] = compass;
633
634 compass = new CompassTexture(1, dataCompass);
635 oldCompass = texturesByName[L"compassP1"];
636 compass->initUVs(oldCompass->getU0(), oldCompass->getV0(), oldCompass->getU1(), oldCompass->getV1() );
637 delete oldCompass;
638 texturesByName[L"compassP1"] = compass;
639
640 compass = new CompassTexture(2, dataCompass);
641 oldCompass = texturesByName[L"compassP2"];
642 compass->initUVs(oldCompass->getU0(), oldCompass->getV0(), oldCompass->getU1(), oldCompass->getV1() );
643 delete oldCompass;
644 texturesByName[L"compassP2"] = compass;
645
646 compass = new CompassTexture(3, dataCompass);
647 oldCompass = texturesByName[L"compassP3"];
648 compass->initUVs(oldCompass->getU0(), oldCompass->getV0(), oldCompass->getU1(), oldCompass->getV1() );
649 delete oldCompass;
650 texturesByName[L"compassP3"] = compass;
651 }
652 else
653 {
654 float horizRatio = 1.0f/16.0f;
655 float vertRatio = 1.0f/32.0f;
656
657 ADD_ICON(0, 0, L"grass_top")
658 texturesByName[L"grass_top"]->setFlags(Icon::IS_GRASS_TOP); // 4J added for faster determination of texture type in tesselation
659 ADD_ICON(0, 1, L"stone")
660 ADD_ICON(0, 2, L"dirt")
661 ADD_ICON(0, 3, L"grass_side")
662 texturesByName[L"grass_side"]->setFlags(Icon::IS_GRASS_SIDE); // 4J added for faster determination of texture type in tesselation
663 ADD_ICON(0, 4, L"planks_oak")
664 ADD_ICON(0, 5, L"stoneslab_side")
665 ADD_ICON(0, 6, L"stoneslab_top")
666 ADD_ICON(0, 7, L"brick")
667 ADD_ICON(0, 8, L"tnt_side")
668 ADD_ICON(0, 9, L"tnt_top")
669 ADD_ICON(0, 10, L"tnt_bottom")
670 ADD_ICON(0, 11, L"web")
671 ADD_ICON(0, 12, L"flower_rose")
672 ADD_ICON(0, 13, L"flower_dandelion")
673 ADD_ICON(0, 14, L"portal")
674 ADD_ICON(0, 15, L"sapling")
675
676 ADD_ICON(1, 0, L"cobblestone");
677 ADD_ICON(1, 1, L"bedrock");
678 ADD_ICON(1, 2, L"sand");
679 ADD_ICON(1, 3, L"gravel");
680 ADD_ICON(1, 4, L"log_oak");
681 ADD_ICON(1, 5, L"log_oak_top");
682 ADD_ICON(1, 6, L"iron_block");
683 ADD_ICON(1, 7, L"gold_block");
684 ADD_ICON(1, 8, L"diamond_block");
685 ADD_ICON(1, 9, L"emerald_block");
686 ADD_ICON(1, 10, L"redstone_block");
687 ADD_ICON(1, 11, L"dropper_front_horizontal");
688 ADD_ICON(1, 12, L"mushroom_red");
689 ADD_ICON(1, 13, L"mushroom_brown");
690 ADD_ICON(1, 14, L"sapling_jungle");
691 ADD_ICON(1, 15, L"fire_0");
692
693 ADD_ICON(2, 0, L"gold_ore");
694 ADD_ICON(2, 1, L"iron_ore");
695 ADD_ICON(2, 2, L"coal_ore");
696 ADD_ICON(2, 3, L"bookshelf");
697 ADD_ICON(2, 4, L"cobblestone_mossy");
698 ADD_ICON(2, 5, L"obsidian");
699 ADD_ICON(2, 6, L"grass_side_overlay");
700 ADD_ICON(2, 7, L"tallgrass");
701 ADD_ICON(2, 8, L"dispenser_front_vertical");
702 ADD_ICON(2, 9, L"beacon");
703 ADD_ICON(2, 10, L"dropper_front_vertical");
704 ADD_ICON(2, 11, L"workbench_top");
705 ADD_ICON(2, 12, L"furnace_front");
706 ADD_ICON(2, 13, L"furnace_side");
707 ADD_ICON(2, 14, L"dispenser_front");
708 ADD_ICON(2, 15, L"fire_1");
709
710 ADD_ICON(3, 0, L"sponge");
711 ADD_ICON(3, 1, L"glass");
712 ADD_ICON(3, 2, L"diamond_ore");
713 ADD_ICON(3, 3, L"redstone_ore");
714 ADD_ICON(3, 4, L"leaves");
715 ADD_ICON(3, 5, L"leaves_opaque");
716 ADD_ICON(3, 6, L"stonebrick");
717 ADD_ICON(3, 7, L"deadbush");
718 ADD_ICON(3, 8, L"fern");
719 ADD_ICON(3, 9, L"daylight_detector_top");
720 ADD_ICON(3, 10, L"daylight_detector_side");
721 ADD_ICON(3, 11, L"workbench_side");
722 ADD_ICON(3, 12, L"workbench_front");
723 ADD_ICON(3, 13, L"furnace_front_lit");
724 ADD_ICON(3, 14, L"furnace_top");
725 ADD_ICON(3, 15, L"sapling_spruce");
726
727 ADD_ICON(4, 0, L"wool_colored_white");
728 ADD_ICON(4, 1, L"mob_spawner");
729 ADD_ICON(4, 2, L"snow");
730 ADD_ICON(4, 3, L"ice");
731 ADD_ICON(4, 4, L"snow_side");
732 ADD_ICON(4, 5, L"cactus_top");
733 ADD_ICON(4, 6, L"cactus_side");
734 ADD_ICON(4, 7, L"cactus_bottom");
735 ADD_ICON(4, 8, L"clay");
736 ADD_ICON(4, 9, L"reeds");
737 ADD_ICON(4, 10, L"jukebox_side");
738 ADD_ICON(4, 11, L"jukebox_top");
739 ADD_ICON(4, 12, L"waterlily");
740 ADD_ICON(4, 13, L"mycel_side");
741 ADD_ICON(4, 14, L"mycel_top");
742 ADD_ICON(4, 15, L"sapling_birch");
743
744 ADD_ICON(5, 0, L"torch_on");
745 ADD_ICON(5, 1, L"door_wood_upper");
746 ADD_ICON(5, 2, L"door_iron_upper");
747 ADD_ICON(5, 3, L"ladder");
748 ADD_ICON(5, 4, L"trapdoor");
749 ADD_ICON(5, 5, L"iron_bars");
750 ADD_ICON(5, 6, L"farmland_wet");
751 ADD_ICON(5, 7, L"farmland_dry");
752 ADD_ICON(5, 8, L"crops_0");
753 ADD_ICON(5, 9, L"crops_1");
754 ADD_ICON(5, 10, L"crops_2");
755 ADD_ICON(5, 11, L"crops_3");
756 ADD_ICON(5, 12, L"crops_4");
757 ADD_ICON(5, 13, L"crops_5");
758 ADD_ICON(5, 14, L"crops_6");
759 ADD_ICON(5, 15, L"crops_7");
760
761 ADD_ICON(6, 0, L"lever");
762 ADD_ICON(6, 1, L"door_wood_lower");
763 ADD_ICON(6, 2, L"door_iron_lower");
764 ADD_ICON(6, 3, L"redstone_torch_on");
765 ADD_ICON(6, 4, L"stonebrick_mossy");
766 ADD_ICON(6, 5, L"stonebrick_cracked");
767 ADD_ICON(6, 6, L"pumpkin_top");
768 ADD_ICON(6, 7, L"netherrack");
769 ADD_ICON(6, 8, L"soul_sand");
770 ADD_ICON(6, 9, L"glowstone");
771 ADD_ICON(6, 10, L"piston_top_sticky");
772 ADD_ICON(6, 11, L"piston_top");
773 ADD_ICON(6, 12, L"piston_side");
774 ADD_ICON(6, 13, L"piston_bottom");
775 ADD_ICON(6, 14, L"piston_inner_top");
776 ADD_ICON(6, 15, L"stem_straight");
777
778 ADD_ICON(7, 0, L"rail_normal_turned");
779 ADD_ICON(7, 1, L"wool_colored_black");
780 ADD_ICON(7, 2, L"wool_colored_gray");
781 ADD_ICON(7, 3, L"redstone_torch_off");
782 ADD_ICON(7, 4, L"log_spruce");
783 ADD_ICON(7, 5, L"log_birch");
784 ADD_ICON(7, 6, L"pumpkin_side");
785 ADD_ICON(7, 7, L"pumpkin_face_off");
786 ADD_ICON(7, 8, L"pumpkin_face_on");
787 ADD_ICON(7, 9, L"cake_top");
788 ADD_ICON(7, 10, L"cake_side");
789 ADD_ICON(7, 11, L"cake_inner");
790 ADD_ICON(7, 12, L"cake_bottom");
791 ADD_ICON(7, 13, L"mushroom_block_skin_red");
792 ADD_ICON(7, 14, L"mushroom_block_skin_brown");
793 ADD_ICON(7, 15, L"stem_bent");
794
795 ADD_ICON(8, 0, L"rail_normal");
796 ADD_ICON(8, 1, L"wool_colored_red");
797 ADD_ICON(8, 2, L"wool_colored_pink");
798 ADD_ICON(8, 3, L"repeater_off");
799 ADD_ICON(8, 4, L"leaves_spruce");
800 ADD_ICON(8, 5, L"leaves_spruce_opaque");
801 ADD_ICON(8, 6, L"bed_feet_top");
802 ADD_ICON(8, 7, L"bed_head_top");
803 ADD_ICON(8, 8, L"melon_side");
804 ADD_ICON(8, 9, L"melon_top");
805 ADD_ICON(8, 10, L"cauldron_top");
806 ADD_ICON(8, 11, L"cauldron_inner");
807 //ADD_ICON(8, 12, L"unused");
808 ADD_ICON(8, 13, L"mushroom_block_skin_stem");
809 ADD_ICON(8, 14, L"mushroom_block_inside");
810 ADD_ICON(8, 15, L"vine");
811
812 ADD_ICON(9, 0, L"lapis_block");
813 ADD_ICON(9, 1, L"wool_colored_green");
814 ADD_ICON(9, 2, L"wool_colored_lime");
815 ADD_ICON(9, 3, L"repeater_on");
816 ADD_ICON(9, 4, L"glass_pane_top");
817 ADD_ICON(9, 5, L"bed_feet_end");
818 ADD_ICON(9, 6, L"bed_feet_side");
819 ADD_ICON(9, 7, L"bed_head_side");
820 ADD_ICON(9, 8, L"bed_head_end");
821 ADD_ICON(9, 9, L"log_jungle");
822 ADD_ICON(9, 10, L"cauldron_side");
823 ADD_ICON(9, 11, L"cauldron_bottom");
824 ADD_ICON(9, 12, L"brewing_stand_base");
825 ADD_ICON(9, 13, L"brewing_stand");
826 ADD_ICON(9, 14, L"endframe_top");
827 ADD_ICON(9, 15, L"endframe_side");
828
829 ADD_ICON(10, 0, L"lapis_ore");
830 ADD_ICON(10, 1, L"wool_colored_brown");
831 ADD_ICON(10, 2, L"wool_colored_yellow");
832 ADD_ICON(10, 3, L"rail_golden");
833 ADD_ICON(10, 4, L"redstone_dust_cross");
834 ADD_ICON(10, 5, L"redstone_dust_line");
835 ADD_ICON(10, 6, L"enchantment_top");
836 ADD_ICON(10, 7, L"dragon_egg");
837 ADD_ICON(10, 8, L"cocoa_2");
838 ADD_ICON(10, 9, L"cocoa_1");
839 ADD_ICON(10, 10, L"cocoa_0");
840 ADD_ICON(10, 11, L"emerald_ore");
841 ADD_ICON(10, 12, L"trip_wire_source");
842 ADD_ICON(10, 13, L"trip_wire");
843 ADD_ICON(10, 14, L"endframe_eye");
844 ADD_ICON(10, 15, L"end_stone");
845
846 ADD_ICON(11, 0, L"sandstone_top");
847 ADD_ICON(11, 1, L"wool_colored_blue");
848 ADD_ICON(11, 2, L"wool_colored_light_blue");
849 ADD_ICON(11, 3, L"rail_golden_powered");
850 ADD_ICON(11, 4, L"redstone_dust_cross_overlay");
851 ADD_ICON(11, 5, L"redstone_dust_line_overlay");
852 ADD_ICON(11, 6, L"enchantment_side");
853 ADD_ICON(11, 7, L"enchantment_bottom");
854 ADD_ICON(11, 8, L"command_block");
855 ADD_ICON(11, 9, L"itemframe_back");
856 ADD_ICON(11, 10, L"flower_pot");
857 ADD_ICON(11, 11, L"comparator_off");
858 ADD_ICON(11, 12, L"comparator_on");
859 ADD_ICON(11, 13, L"rail_activator");
860 ADD_ICON(11, 14, L"rail_activator_powered");
861 ADD_ICON(11, 15, L"quartz_ore");
862
863 ADD_ICON(12, 0, L"sandstone_side");
864 ADD_ICON(12, 1, L"wool_colored_purple");
865 ADD_ICON(12, 2, L"wool_colored_magenta");
866 ADD_ICON(12, 3, L"detectorRail");
867 ADD_ICON(12, 4, L"leaves_jungle");
868 ADD_ICON(12, 5, L"leaves_jungle_opaque");
869 ADD_ICON(12, 6, L"planks_spruce");
870 ADD_ICON(12, 7, L"planks_jungle");
871 ADD_ICON(12, 8, L"carrots_stage_0");
872 ADD_ICON(12, 9, L"carrots_stage_1");
873 ADD_ICON(12, 10, L"carrots_stage_2");
874 ADD_ICON(12, 11, L"carrots_stage_3");
875 //ADD_ICON(12, 12, L"unused");
876 ADD_ICON(12, 13, L"water");
877 ADD_ICON_SIZE(12,14,L"water_flow",2,2);
878
879 ADD_ICON(13, 0, L"sandstone_bottom");
880 ADD_ICON(13, 1, L"wool_colored_cyan");
881 ADD_ICON(13, 2, L"wool_colored_orange");
882 ADD_ICON(13, 3, L"redstoneLight");
883 ADD_ICON(13, 4, L"redstoneLight_lit");
884 ADD_ICON(13, 5, L"stonebrick_carved");
885 ADD_ICON(13, 6, L"planks_birch");
886 ADD_ICON(13, 7, L"anvil_base");
887 ADD_ICON(13, 8, L"anvil_top_damaged_1");
888 ADD_ICON(13, 9, L"quartz_block_chiseled_top");
889 ADD_ICON(13, 10, L"quartz_block_lines_top");
890 ADD_ICON(13, 11, L"quartz_block_top");
891 ADD_ICON(13, 12, L"hopper_outside");
892 ADD_ICON(13, 13, L"detectorRail_on");
893
894 ADD_ICON(14, 0, L"nether_brick");
895 ADD_ICON(14, 1, L"wool_colored_silver");
896 ADD_ICON(14, 2, L"nether_wart_stage_0");
897 ADD_ICON(14, 3, L"nether_wart_stage_1");
898 ADD_ICON(14, 4, L"nether_wart_stage_2");
899 ADD_ICON(14, 5, L"sandstone_carved");
900 ADD_ICON(14, 6, L"sandstone_smooth");
901 ADD_ICON(14, 7, L"anvil_top");
902 ADD_ICON(14, 8, L"anvil_top_damaged_2");
903 ADD_ICON(14, 9, L"quartz_block_chiseled");
904 ADD_ICON(14, 10, L"quartz_block_lines");
905 ADD_ICON(14, 11, L"quartz_block_side");
906 ADD_ICON(14, 12, L"hopper_inside");
907 ADD_ICON(14, 13, L"lava");
908 ADD_ICON_SIZE(14,14,L"lava_flow",2,2);
909
910 ADD_ICON(15, 0, L"destroy_0");
911 ADD_ICON(15, 1, L"destroy_1");
912 ADD_ICON(15, 2, L"destroy_2");
913 ADD_ICON(15, 3, L"destroy_3");
914 ADD_ICON(15, 4, L"destroy_4");
915 ADD_ICON(15, 5, L"destroy_5");
916 ADD_ICON(15, 6, L"destroy_6");
917 ADD_ICON(15, 7, L"destroy_7");
918 ADD_ICON(15, 8, L"destroy_8");
919 ADD_ICON(15, 9, L"destroy_9");
920 ADD_ICON(15, 10, L"hay_block_side");
921 ADD_ICON(15, 11, L"quartz_block_bottom");
922 ADD_ICON(15, 12, L"hopper_top");
923 ADD_ICON(15, 13, L"hay_block_top");
924
925 ADD_ICON(16, 0, L"coal_block");
926 ADD_ICON(16, 1, L"hardened_clay");
927 ADD_ICON(16, 2, L"noteblock");
928 //ADD_ICON(16, 3, L"unused");
929 //ADD_ICON(16, 4, L"unused");
930 //ADD_ICON(16, 5, L"unused");
931 //ADD_ICON(16, 6, L"unused");
932 //ADD_ICON(16, 7, L"unused");
933 //ADD_ICON(16, 8, L"unused");
934 ADD_ICON(16, 9, L"potatoes_stage_0");
935 ADD_ICON(16, 10, L"potatoes_stage_1");
936 ADD_ICON(16, 11, L"potatoes_stage_2");
937 ADD_ICON(16, 12, L"potatoes_stage_3");
938 ADD_ICON(16, 13, L"log_spruce_top");
939 ADD_ICON(16, 14, L"log_jungle_top");
940 ADD_ICON(16, 15, L"log_birch_top");
941
942 ADD_ICON(17, 0, L"hardened_clay_stained_black");
943 ADD_ICON(17, 1, L"hardened_clay_stained_blue");
944 ADD_ICON(17, 2, L"hardened_clay_stained_brown");
945 ADD_ICON(17, 3, L"hardened_clay_stained_cyan");
946 ADD_ICON(17, 4, L"hardened_clay_stained_gray");
947 ADD_ICON(17, 5, L"hardened_clay_stained_green");
948 ADD_ICON(17, 6, L"hardened_clay_stained_light_blue");
949 ADD_ICON(17, 7, L"hardened_clay_stained_lime");
950 ADD_ICON(17, 8, L"hardened_clay_stained_magenta");
951 ADD_ICON(17, 9, L"hardened_clay_stained_orange");
952 ADD_ICON(17, 10, L"hardened_clay_stained_pink");
953 ADD_ICON(17, 11, L"hardened_clay_stained_purple");
954 ADD_ICON(17, 12, L"hardened_clay_stained_red");
955 ADD_ICON(17, 13, L"hardened_clay_stained_silver");
956 ADD_ICON(17, 14, L"hardened_clay_stained_white");
957 ADD_ICON(17, 15, L"hardened_clay_stained_yellow");
958
959 ADD_ICON(18, 0, L"glass_black");
960 ADD_ICON(18, 1, L"glass_blue");
961 ADD_ICON(18, 2, L"glass_brown");
962 ADD_ICON(18, 3, L"glass_cyan");
963 ADD_ICON(18, 4, L"glass_gray");
964 ADD_ICON(18, 5, L"glass_green");
965 ADD_ICON(18, 6, L"glass_light_blue");
966 ADD_ICON(18, 7, L"glass_lime");
967 ADD_ICON(18, 8, L"glass_magenta");
968 ADD_ICON(18, 9, L"glass_orange");
969 ADD_ICON(18, 10, L"glass_pink");
970 ADD_ICON(18, 11, L"glass_purple");
971 ADD_ICON(18, 12, L"glass_red");
972 ADD_ICON(18, 13, L"glass_silver");
973 ADD_ICON(18, 14, L"glass_white");
974 ADD_ICON(18, 15, L"glass_yellow");
975
976 ADD_ICON(19, 0, L"glass_pane_top_black");
977 ADD_ICON(19, 1, L"glass_pane_top_blue");
978 ADD_ICON(19, 2, L"glass_pane_top_brown");
979 ADD_ICON(19, 3, L"glass_pane_top_cyan");
980 ADD_ICON(19, 4, L"glass_pane_top_gray");
981 ADD_ICON(19, 5, L"glass_pane_top_green");
982 ADD_ICON(19, 6, L"glass_pane_top_light_blue");
983 ADD_ICON(19, 7, L"glass_pane_top_lime");
984 ADD_ICON(19, 8, L"glass_pane_top_magenta");
985 ADD_ICON(19, 9, L"glass_pane_top_orange");
986 ADD_ICON(19, 10, L"glass_pane_top_pink");
987 ADD_ICON(19, 11, L"glass_pane_top_purple");
988 ADD_ICON(19, 12, L"glass_pane_top_red");
989 ADD_ICON(19, 13, L"glass_pane_top_silver");
990 ADD_ICON(19, 14, L"glass_pane_top_white");
991 ADD_ICON(19, 15, L"glass_pane_top_yellow");
992 }
993}