the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 993 lines 33 kB view raw
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}