// Gen V Select Texture
 private void listBox5_SelectedIndexChanged(object sender, EventArgs e)
 {
     Bitmap b_ = new Bitmap(nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].width, nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].height);
     NSMBe4.NSBMD.ImageTexeler.LockBitmap b = new NSMBe4.NSBMD.ImageTexeler.LockBitmap(b_);
     b.LockBits();
     int pixelnum = b.Height * b.Width;
     try
     {
         switch (nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].format)
         {
             case 1:
                 for (int j = 0; j < pixelnum; j++)
                 {
                     int index = nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].Image[j] & 0x1f;
                     int alpha = (nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].Image[j] >> 5);
                     alpha = ((alpha * 4) + (alpha / 2)) * 8;
                     Color c = Color.FromArgb(alpha, nsbtx.PalInfo.infoBlock.PalInfo[listBox4.SelectedIndex].pal[index]);
                     b.SetPixel(j - ((j / (nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].width)) * (nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].width)), j / (nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].width), c);
                 }
                 b.UnlockBits();
                 break;
             case 2:
                 for (int j = 0; j < pixelnum; j++)
                 {
                     uint index = nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].Image[j / 4];
                     index = (index >> ((j % 4) << 1)) & 3;
                     if (index == 0 && nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].color0 == 1)
                     {
                         b.SetPixel(j - ((j / (nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].width)) * (nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].width)), j / (nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].width), Color.Transparent);
                     }
                     else
                     {
                         b.SetPixel(j - ((j / (nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].width)) * (nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].width)), j / (nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].width), nsbtx.PalInfo.infoBlock.PalInfo[listBox4.SelectedIndex].pal[index]);
                     }
                 }
                 b.UnlockBits();
                 //if (nsbtx.TexInfo.infoBlock.TexInfo[listBox1.SelectedIndex].color0 == 1) { b_.MakeTransparent(nsbtx.PalInfo.infoBlock.PalInfo[listBox2.SelectedIndex].pal[0]); }
                 break;
             case 3:
                 //sp.PLTO[listBox1.SelectedIndex].Pal[sp.PLTO[listBox1.SelectedIndex].Unknown] = Color.Transparent; // made palette entry 0 transparent
                 for (int j = 0; j < pixelnum; j++)
                 {
                     uint index = nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].Image[j / 2];
                     index = (index >> ((j % 2) << 2)) & 0x0f;
                     if (index == 0 && nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].color0 == 1)
                     {
                         b.SetPixel(j - ((j / (nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].width)) * (nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].width)), j / (nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].width), Color.Transparent);
                     }
                     else
                     {
                         b.SetPixel(j - ((j / (nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].width)) * (nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].width)), j / (nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].width), nsbtx.PalInfo.infoBlock.PalInfo[listBox4.SelectedIndex].pal[index]);
                     }
                 }
                 b.UnlockBits();
                 //if (nsbtx.TexInfo.infoBlock.TexInfo[listBox1.SelectedIndex].color0 == 1) { b_.MakeTransparent(nsbtx.PalInfo.infoBlock.PalInfo[listBox2.SelectedIndex].pal[0]); }
                 break;
             case 4:
                 //if (mat.color0 != 0) mat.paldata[0] = RGBA.Transparent; // made palette entry 0 transparent
                 for (int j = 0; j < pixelnum; j++)
                 {
                     byte index = nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].Image[j];
                     if (index == 0 && nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].color0 == 1)
                     {
                         b.SetPixel(j - ((j / (nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].width)) * (nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].width)), j / (nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].width), Color.Transparent);
                     }
                     else
                     {
                         b.SetPixel(j - ((j / (nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].width)) * (nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].width)), j / (nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].width), nsbtx.PalInfo.infoBlock.PalInfo[listBox4.SelectedIndex].pal[index]);
                     }
                 }
                 b.UnlockBits();
                 break;
             case 5:
                 convert_4x4texel_b(nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].Image, nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].width, nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].height, nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].spData, nsbtx.PalInfo.infoBlock.PalInfo[listBox4.SelectedIndex].pal, b);
                 b.UnlockBits();
                 break;
             case 6:
                 for (int j = 0; j < pixelnum; j++)
                 {
                     int index = nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].Image[j] & 0x7;
                     int alpha = (nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].Image[j] >> 3);// & 0x1f;
                     alpha *= 8;
                     Color c = Color.FromArgb(alpha, nsbtx.PalInfo.infoBlock.PalInfo[listBox4.SelectedIndex].pal[index]);
                     b.SetPixel(j - ((j / (nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].width)) * (nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].width)), j / (nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].width), c);
                 }
                 b.UnlockBits();
                 break;
             case 7:
                 for (int j = 0; j < pixelnum; j++)
                 {
                     UInt16 p = (ushort)(nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].Image[j * 2] + (nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].Image[j * 2 + 1] << 8));
                     Color c = Color.FromArgb((((p & 0x8000) != 0) ? 0xff : 0), (((p >> 0) & 0x1f) << 3), (((p >> 5) & 0x1f) << 3), (((p >> 10) & 0x1f) << 3));
                     b.SetPixel(j - ((j / (nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].width)) * (nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].width)), j / (nsbtx.TexInfo.infoBlock.TexInfo[listBox5.SelectedIndex].width), c);
                 }
                 b.UnlockBits();
                 break;
         }
     }
     catch
     {
         b.UnlockBits();
         goto end2;
     }
     end2:
     if (listBox4.SelectedIndex != -1)
     {
         dataGridView12.Rows.Clear();
         for (int i = 0; i < 16; i++)
         {
             dataGridView12.Rows.Add();
         }
         int cells = 0;
         int rows = 0;
         for (int i = 0; i < nsbtx.PalInfo.infoBlock.PalInfo[listBox4.SelectedIndex].pal.Count(); i++)
         {
             dataGridView12.Rows[rows].Cells[cells].Style.BackColor = nsbtx.PalInfo.infoBlock.PalInfo[listBox4.SelectedIndex].pal[i];
             cells++;
             if (cells == 16)
             {
                 cells = 0;
                 rows++;
             }
         }
         dataGridView12.Rows[0].Cells[0].Selected = true;
     }
     pictureBox3.Image = b_;
 }
 // Select Texture
 private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
 {
     Bitmap b_ = new Bitmap(nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].width, nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].height);
     NSMBe4.NSBMD.ImageTexeler.LockBitmap b = new NSMBe4.NSBMD.ImageTexeler.LockBitmap(b_);
     b.LockBits();
     int pixelnum = b.Height * b.Width;
     try
     {
         switch (nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].format)
         {
             case 1:
                 for (int j = 0; j < pixelnum; j++)
                 {
                     int index = nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].Image[j] & 0x1f;
                     int alpha = (nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].Image[j] >> 5);
                     alpha = ((alpha * 4) + (alpha / 2)) * 8;
                     Color c = Color.FromArgb(alpha, nsbtx.PalInfo.infoBlock.PalInfo[listBox3.SelectedIndex].pal[index]);
                     b.SetPixel(j - ((j / (nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].width)) * (nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].width)), j / (nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].width), c);
                 }
                 b.UnlockBits();
                 break;
             case 2:
                 for (int j = 0; j < pixelnum; j++)
                 {
                     uint index = nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].Image[j / 4];
                     index = (index >> ((j % 4) << 1)) & 3;
                     if (index == 0 && nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].color0 == 1)
                     {
                         b.SetPixel(j - ((j / (nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].width)) * (nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].width)), j / (nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].width), Color.Transparent);
                     }
                     else
                     {
                         b.SetPixel(j - ((j / (nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].width)) * (nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].width)), j / (nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].width), nsbtx.PalInfo.infoBlock.PalInfo[listBox3.SelectedIndex].pal[index]);
                     }
                 }
                 b.UnlockBits();
                 //if (nsbtx.TexInfo.infoBlock.TexInfo[listBox1.SelectedIndex].color0 == 1) { b_.MakeTransparent(nsbtx.PalInfo.infoBlock.PalInfo[listBox2.SelectedIndex].pal[0]); }
                 break;
             case 3:
                 //sp.PLTO[listBox1.SelectedIndex].Pal[sp.PLTO[listBox1.SelectedIndex].Unknown] = Color.Transparent; // made palette entry 0 transparent
                 for (int j = 0; j < pixelnum; j++)
                 {
                     uint index = nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].Image[j / 2];
                     index = (index >> ((j % 2) << 2)) & 0x0f;
                     if (index == 0 && nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].color0 == 1)
                     {
                         b.SetPixel(j - ((j / (nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].width)) * (nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].width)), j / (nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].width), Color.Transparent);
                     }
                     else
                     {
                         b.SetPixel(j - ((j / (nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].width)) * (nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].width)), j / (nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].width), nsbtx.PalInfo.infoBlock.PalInfo[listBox3.SelectedIndex].pal[index]);
                     }
                 }
                 b.UnlockBits();
                 //if (nsbtx.TexInfo.infoBlock.TexInfo[listBox1.SelectedIndex].color0 == 1) { b_.MakeTransparent(nsbtx.PalInfo.infoBlock.PalInfo[listBox2.SelectedIndex].pal[0]); }
                 break;
             case 4:
                 //if (mat.color0 != 0) mat.paldata[0] = RGBA.Transparent; // made palette entry 0 transparent
                 for (int j = 0; j < pixelnum; j++)
                 {
                     byte index = nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].Image[j];
                     if (index == 0 && nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].color0 == 1)
                     {
                         b.SetPixel(j - ((j / (nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].width)) * (nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].width)), j / (nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].width), Color.Transparent);
                     }
                     else
                     {
                         b.SetPixel(j - ((j / (nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].width)) * (nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].width)), j / (nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].width), nsbtx.PalInfo.infoBlock.PalInfo[listBox3.SelectedIndex].pal[index]);
                     }
                 }
                 b.UnlockBits();
                 break;
             case 5:
                 convert_4x4texel_b(nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].Image, nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].width, nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].height, nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].spData, nsbtx.PalInfo.infoBlock.PalInfo[listBox3.SelectedIndex].pal, b);
                 b.UnlockBits();
                 break;
             case 6:
                 for (int j = 0; j < pixelnum; j++)
                 {
                     int index = nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].Image[j] & 0x7;
                     int alpha = (nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].Image[j] >> 3);// & 0x1f;
                     alpha *= 8;
                     Color c = Color.FromArgb(alpha, nsbtx.PalInfo.infoBlock.PalInfo[listBox3.SelectedIndex].pal[index]);
                     b.SetPixel(j - ((j / (nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].width)) * (nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].width)), j / (nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].width), c);
                 }
                 b.UnlockBits();
                 break;
             case 7:
                 for (int j = 0; j < pixelnum; j++)
                 {
                     UInt16 p = (ushort)(nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].Image[j * 2] + (nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].Image[j * 2 + 1] << 8));
                     Color c = Color.FromArgb((((p & 0x8000) != 0) ? 0xff : 0), (((p >> 0) & 0x1f) << 3), (((p >> 5) & 0x1f) << 3), (((p >> 10) & 0x1f) << 3));
                     b.SetPixel(j - ((j / (nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].width)) * (nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].width)), j / (nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].width), c);
                 }
                 b.UnlockBits();
                 break;
         }
     }
     catch
     {
         b.UnlockBits();
     }
     pictureBox2.Image = b_;
     textBox6.Text = nsbtx.TexInfo.names[listBox2.SelectedIndex];
     if (nsbtx.TexInfo.infoBlock.TexInfo[listBox2.SelectedIndex].color0 == 1) checkBox6.Checked = true;
     else checkBox6.Checked = false;
 }