public static void setPixelAtLocation(BitmapUW currentimg, PictureBox img, int x, int y, int newpixel, int auxpixel)
        {
            if (currentimg.artdata == null)
            {
                return;
            }
            if (img.Image == null)
            {
                return;
            }
            currentimg.artdata.ImageCache[currentimg.ImageNo].image.SetPixel(x, y, currentimg.ImagePalette.ColorAtPixel((byte)newpixel, false));

            switch (main.CurrentImage.ImageType)
            {
            case BitmapUW.ImageTypes.Texture:
            {
                TextureLoader texdata = (TextureLoader)currentimg.artdata;
                switch (main.curgame)
                {
                case main.GAME_UW1:
                {
                    if (currentimg.ImageNo < 210)
                    {
                        texdata.texturebufferW[currentimg.FileOffset + y * 64 + x] = (char)newpixel;
                    }
                    else
                    {
                        texdata.texturebufferF[currentimg.FileOffset + y * 32 + x] = (char)newpixel;
                    }
                    currentimg.artdata.Modified = true;
                    break;
                }

                case main.GAME_UW2:
                {
                    texdata.texturebufferT[currentimg.FileOffset + y * 64 + x] = (char)newpixel;
                    currentimg.artdata.Modified = true;
                    break;
                }
                }
                break;
            }

            case BitmapUW.ImageTypes.Byt:
            {
                switch (main.curgame)
                {
                case main.GAME_UW1:
                {
                    BytLoader byt = (BytLoader)currentimg.artdata;
                    byt.ImageFileData[currentimg.FileOffset + y * (currentimg.image.Width) + x] = (char)newpixel;
                    currentimg.artdata.Modified = true;
                    break;
                }
                }
                break;
            }

            case BitmapUW.ImageTypes.EightBitUncompressed:
            {
                GRLoader gr = (GRLoader)currentimg.artdata;
                gr.ImageFileData[currentimg.FileOffset + y * (currentimg.image.Width) + x] = (char)newpixel;
                currentimg.artdata.Modified = true;
                break;
            }

            case BitmapUW.ImageTypes.FourBitUncompress:
            {
                GRLoader gr            = (GRLoader)currentimg.artdata;
                int      Offset        = y * (currentimg.image.Width) + x;
                long     NibbleAddress = currentimg.FileOffset + (Offset / 2);
                int      HiOrLow       = Offset % 2;
                if (HiOrLow == 1)
                {        //low nibble
                    gr.ImageFileData[NibbleAddress] = (char)(gr.ImageFileData[NibbleAddress] & 0xF0);
                    gr.ImageFileData[NibbleAddress] = (char)(gr.ImageFileData[NibbleAddress] | ((char)auxpixel & 0xf));
                }
                else
                {
                    gr.ImageFileData[NibbleAddress] = (char)(gr.ImageFileData[NibbleAddress] & 0x0F);
                    gr.ImageFileData[NibbleAddress] = (char)(gr.ImageFileData[NibbleAddress] | ((char)(auxpixel << 4) & 0xf0));
                }

                currentimg.artdata.Modified = true;
                break;
            }

            //case BitmapUW.ImageTypes.FourBitRunLength:
            //    {
            //GRLoader gr = (GRLoader)currentimg.artdata;
            //currentimg.UncompressedData[y * (currentimg.image.Width) + x] = (char)auxpixel;
            //currentimg.artdata.Modified = true;
            //        break;
            //    }
            default:
            {
                return;
                // img.Image = main.CurrentImage.image;
                //break;
            }
            }
            currentimg.Modified = true;
            main.CurrentImage   = currentimg.artdata.ImageCache[currentimg.ImageNo];
            img.Image           = main.CurrentImage.image;
        }
Example #2
0
        /// <summary>
        /// Handles selection of an art file.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void TreeArt_AfterSelect(object sender, TreeViewEventArgs e)
        {
            TreeNode node = TreeArt.SelectedNode;

            BtnRepack4Bit.Enabled = false;
            if (node.Parent != null)
            {
                string partext = node.Parent.Text.ToUpper();
                switch (partext)
                {
                case "TEXTURES":
                case "WALL TEXTURES":
                case "FLOOR TEXTURES":
                {        //loading a texture
                    int index;
                    if (node.Tag == null)
                    {
                        return;
                    }
                    if (int.TryParse(node.Tag.ToString(), out index))
                    {
                        CurrentImage = tex.LoadImageAt(index);
                    }
                    break;
                }

                case "GRAPHIC RESOURCES":
                {
                    int index;
                    if (node.Tag == null)
                    {
                        return;
                    }
                    if (int.TryParse(node.Tag.ToString(), out index))
                    {
                        if (grfile[index] == null)
                        {        //Load the gr file and populate the tree.
                            grfile[index] = new GRLoader(main.basepath + "\\data\\" + node.Text);
                            for (int i = 0; i <= grfile[index].ImageCache.GetUpperBound(0); i++)
                            {
                                TreeNode img = node.Nodes.Add(i.ToString());
                                img.Tag = i;
                            }
                        }
                    }
                    break;
                }

                case "BITMAP RESOURCES":
                {
                    int index;
                    if (node.Tag == null)
                    {
                        return;
                    }
                    if (int.TryParse(node.Tag.ToString(), out index))
                    {
                        if (bytfile[index] == null)
                        {
                            bytfile[index] = new BytLoader();
                        }
                        CurrentImage = bytfile[index].LoadImageAt(index);
                    }
                    break;
                }

                case "BYT.ARK":
                {
                    int index;
                    if (node.Tag == null)
                    {
                        return;
                    }
                    if (int.TryParse(node.Tag.ToString(), out index))
                    {
                        if (bytfile[0] == null)
                        {
                            bytfile[0] = new BytLoader();
                        }
                        CurrentImage = bytfile[0].LoadImageAt(index);
                    }
                    break;
                }

                default:
                    if (partext.ToUpper().Contains(".GR"))
                    {
                        int parentindex;
                        if (node.Parent.Tag == null)
                        {
                            return;
                        }
                        if (int.TryParse(node.Parent.Tag.ToString(), out parentindex))
                        {
                            int index;
                            if (node.Tag == null)
                            {
                                return;
                            }
                            if (int.TryParse(node.Tag.ToString(), out index))
                            {
                                //load the gr file
                                CurrentImage = grfile[parentindex].LoadImageAt(index);
                                switch (CurrentImage.ImageType)
                                {
                                case BitmapUW.ImageTypes.FourBitRunLength:
                                case BitmapUW.ImageTypes.FourBitUncompress:
                                    BtnRepack4Bit.Enabled = true;
                                    break;
                                }
                            }
                        }
                    }
                    break;
                }
            }
            if (CurrentImage != null)
            {
                ImgOut.Image         = CurrentImage.image;
                PicPalette.Image     = ArtLoader.Palette(CurrentImage.ImagePalette, CurrentImage.PaletteRef).image;
                ImgOut.Width         = CurrentImage.image.Width * (int)NumZoom.Value;
                ImgOut.Height        = CurrentImage.image.Height * (int)NumZoom.Value;
                LblImageDetails.Text = CurrentImage.image.Height + "x" + CurrentImage.image.Width + "\n" + CurrentImage.ImageType.ToString();
            }
        }