Beispiel #1
0
        private void CG_ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            var list = sender as ListView;

            if (list.SelectedIndex == -1)
            {
                return; // Return if no item is selected
            }
            // Check if files should not be loaded
            if (!_game.EnableResourceLoading)
            {
                return;
            }

            int    id       = (list.SelectedItem as STSCFileDatabase.CGEntry).CGID;
            var    game     = (list.SelectedItem as STSCFileDatabase.CGEntry).GameID;
            string filepath = Path.Combine(_game.GamePath, $"Data\\Data\\Ma\\{Consts.GAMEDIRNAME[(int)game]}\\MA{id:D6}.pck");

            if (_CGThumbnailTextureArchive.GetFileData($"{Consts.GAMEDIRNAME[(int)game]}/MA{id:D6}.tex") is byte[] data)
            {
                // Change Character Image
                var tex = new TEXFile();
                using (var stream = new MemoryStream(data))
                    tex.Load(stream);

                CG_IM = ImageTools.ConvertToSource(tex.CreateBitmap());
            }
        }
Beispiel #2
0
        private void AB_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            var list = sender as ListView;

            if (list.SelectedIndex == -1)
            {
                return; // Return if no item is selected
            }
            // Check if files should not be loaded
            if (!_game.EnableResourceLoading)
            {
                return;
            }

            string path = (list.SelectedItem as STSCFileDatabase.ArtBookPageEntry).PagePathData;

            if (_novelTextureArchive.GetFileData($"{path}.tex") is byte[] data)
            {
                var tex = new TEXFile();
                using (var stream = new MemoryStream(data))
                    tex.Load(stream);

                AB_PG = ImageTools.ConvertToSource(tex.CreateBitmap());
                tex.Dispose();
            }
        }
 // TODO: Update Image when ID changes
 public void UpdateImage()
 {
     if (_archive != null)
     {
         var file = _archive.GetFileData($"chrName{Character.ID:D3}.tex");
         if (file == null)
         {
             return;
         }
         using (var stream = new MemoryStream(file))
             (_texture = new TEXFile()).Load(stream);
         EventNameImage.Source = ImageTools.ConvertToSource(_texture.CreateBitmap());
     }
 }
 // TODO: Update image when path changes
 public void UpdateImage()
 {
     if (_archive != null)
     {
         var file = _archive.GetFileData($"{Movie.FilePath}.tex");
         if (file == null)
         {
             return;
         }
         using (var stream = new MemoryStream(file))
             (_texture = new TEXFile()).Load(stream);
         ThumbnailImage.Source = ImageTools.ConvertToSource(_texture.CreateBitmap());
     }
 }
Beispiel #5
0
        // TODO: Needs Rewriting
        private void CG_ExportImage_Click(object sender, RoutedEventArgs e)
        {
            // Show error if DAL: RR is not installed as its needed to export
            if (!_game.EnableResourceLoading)
            {
                MessageBox.Show("Resource loading is currently disabled. Make sure DAL: RR is installed correctly", "Resource Loading Error!", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }

            if (CG_ListView.SelectedIndex == -1)
            {
                return; // Return if no item is selected
            }
            int id   = (CG_ListView.SelectedItem as STSCFileDatabase.CGEntry).CGID;
            var game = (CG_ListView.SelectedItem as STSCFileDatabase.CGEntry).GameID;

            var sfd = new SaveFileDialog();

            sfd.FileName = $"{id}.png";
            sfd.Filter   = "Portable Network Graphics (*.png)|*.png";
            if (sfd.ShowDialog(this) == true)
            {
                try
                {
                    string filepath = Path.Combine(_game.GamePath, $"Data\\Data\\Ma\\{Consts.GAMEDIRNAME[(int)game]}\\MA{id:D6}.pck");

                    var pck = new PCKFile();
                    var ma  = new MAFile();
                    pck.Load(filepath, true);
                    using (var stream = new MemoryStream(pck.GetFileData(0)))
                        ma.Load(stream);

                    int width  = (int)(ma.Layers[0].Verts[3].DestinX * ma.Layers[0].LayerWidth);
                    int height = (int)(ma.Layers[0].Verts[3].DestinY * ma.Layers[0].LayerHeight);

                    if (ma.Layers[0].Verts[3].DestinX == ma.Layers[0].LayerWidth)
                    {
                        width  = (int)ma.Layers[0].LayerWidth;
                        height = (int)ma.Layers[0].LayerHeight;
                    }

                    var bytes = new byte[width * height * 4];
                    for (int i = 0; i < ma.Layers.Count; ++i)
                    {
                        var layer = ma.Layers[i];
                        var tex   = new TEXFile();
                        using (var stream = new MemoryStream(pck.GetFileData(layer.TextureID + 1)))
                            tex.Load(stream);
                        int sx = (int)(layer.Verts[0].SourceX * ma.Layers[i].LayerWidth);
                        int dx = (int)(layer.Verts[0].DestinX * ma.Layers[i].LayerWidth + layer.LayerOffX);
                        int sy = (int)(layer.Verts[0].SourceY * ma.Layers[i].LayerHeight);
                        int dy = (int)(layer.Verts[0].DestinY * ma.Layers[i].LayerHeight + layer.LayerOffY);
                        int sw = (int)(layer.Verts[3].SourceX * ma.Layers[i].LayerWidth);
                        int sh = (int)(layer.Verts[3].SourceY * ma.Layers[i].LayerHeight);

                        for (int y = 0; y < (sh - sy); ++y)
                        {
                            for (int x = 0; x < (sw - sx); ++x)
                            {
                                if ((y + sy) >= tex.SheetHeight || (x + sx) >= tex.SheetWidth)
                                {
                                    break;
                                }
                                int index = ((y + sy) * tex.SheetWidth + (x + sx)) * 4;
                                if (tex.SheetData[index + 3] != 255)
                                {
                                    continue;
                                }
                                bytes[((y + dy) * width + x + dx) * 4 + 3] = tex.SheetData[index + 3];
                                bytes[((y + dy) * width + x + dx) * 4 + 0] = tex.SheetData[index + 0];
                                bytes[((y + dy) * width + x + dx) * 4 + 1] = tex.SheetData[index + 1];
                                bytes[((y + dy) * width + x + dx) * 4 + 2] = tex.SheetData[index + 2];
                            }
                        }
                        DALLib.Imaging.ImageTools.SaveImage(Path.Combine(Path.GetDirectoryName(sfd.FileName), Path.GetFileNameWithoutExtension(sfd.FileName) + $"_{i}.png"), width, height, bytes);
                    }
                    pck.Dispose();
                }
                catch (Exception ex)
                {
                    new ExceptionWindow(ex, "Failed to export CG frames").ShowDialog();
                }
            }
        }