Exemple #1
0
        public static GameFont HiResFromGameData()
        {
            using (DisposableStack disposables = new DisposableStack(2))
            {
                GameImage firstImage, secondImage;

                ArchiveDirectoryEntry mainDirectory  = Archives.GetEntry <ArchiveDirectoryEntry>(MainPath);
                ArchiveDirectoryEntry menuDirectory  = Archives.GetEntry <ArchiveDirectoryEntry>(MenuPath);
                ArchiveDirectoryEntry hiresDirectory = menuDirectory.GetChildEntry <ArchiveDirectoryEntry>(HiResDirectoryName);
                ArchiveFileEntry      tdwEntry       = mainDirectory.GetChildEntry <ArchiveFileEntry>(HiResCharactersWidthsFileName);
                ArchiveFileEntry      image01        = hiresDirectory.GetChildEntry <ArchiveFileEntry>(HiResFontImage1FileName);
                ArchiveFileEntry      image02        = hiresDirectory.GetChildEntry <ArchiveFileEntry>(HiResFontImage2FileName);

                byte[] widths;
                using (TdwFileReader tdwReader = new TdwFileReader(tdwEntry.OpenReadableContentStream()))
                    widths = tdwReader.Table;

                using (TexFileReader texReader = new TexFileReader(image01.OpenReadableContentStream()))
                {
                    firstImage = GameImageReader.FromTex(texReader);
                    disposables.Add(firstImage.Layer);
                }

                using (TexFileReader texReader = new TexFileReader(image02.OpenReadableContentStream()))
                    secondImage = disposables.Add(GameImageReader.FromTex(texReader));

                int       x        = firstImage.X;
                int       y        = firstImage.Y;
                GLTexture palettes = firstImage.Palettes;
                GLTexture layer    = GLTextureFactory.HorizontalJoin(firstImage.Layer, secondImage.Layer);
                GameImage image    = new GameImage(x, y, layer, palettes);

                return(new GameFont(image, widths));
            }
        }
Exemple #2
0
        //private sealed class MyStream2 : NetworkStream
        //{
        //    private static readonly FileStream _output = new FileStream("tempFile.bin", FileMode.Create, FileAccess.Write, FileShare.ReadWrite);

        //    public MyStream2([NotNull] Socket socket) : base(socket)
        //    {
        //    }

        //    public MyStream2([NotNull] Socket socket, Boolean ownsSocket) : base(socket, ownsSocket)
        //    {
        //    }

        //    public MyStream2([NotNull] Socket socket, FileAccess access) : base(socket, access)
        //    {
        //    }

        //    public MyStream2([NotNull] Socket socket, FileAccess access, Boolean ownsSocket) : base(socket, access, ownsSocket)
        //    {
        //    }

        //    public override Int32 Read(Byte[] buffer, Int32 offset, Int32 size)
        //    {
        //        var readed = base.Read(buffer, offset, size);
        //        _output.Write(buffer, offset, readed);
        //        _output.Flush();
        //        return readed;
        //    }

        //    public override Int32 ReadByte()
        //    {
        //        var b = base.ReadByte();
        //        if (b != -1)
        //        {
        //            _output.WriteByte(checked((Byte)b));
        //            _output.Flush();
        //        }
        //        return b;
        //    }
        //}

        private static void Connect()
        {
            lock (Disposables)
            {
                Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                Disposables.Add(socket);

                IPEndPoint ip = new IPEndPoint(IPAddress.Loopback, 49021);
                socket.Connect(ip);

                //NetworkStream stream = new MyStream2(socket, FileAccess.Read, false);
                NetworkStream stream = new NetworkStream(socket, FileAccess.ReadWrite, false);
                Disposables.Add(stream);

                BinaryReader br = new BinaryReader(stream, Encoding.UTF8, true);
                //BinaryReader br = new CrossPlatformBinaryReader(stream, Encoding.UTF8);
                Disposables.Add(br);

                BinaryWriter bw = new BinaryWriter(stream, Encoding.UTF8, true);
                Disposables.Add(bw);

                Thread readingThread = new Thread(() =>
                {
                    try
                    {
                        ProcessInput(br);
                    }
                    catch (Exception ex)
                    {
                        Disconnect(ex.ToString());
                    }
                })
                {
                    IsBackground = true, Name = "NetworkReadingThread"
                };
                readingThread.Start();

                Thread writingThread = new Thread(() =>
                {
                    try
                    {
                        ProcessOutput(bw);
                    }
                    catch (Exception ex)
                    {
                        Disconnect(ex.ToString());
                    }
                })
                {
                    IsBackground = true, Name = "NetworkWritingThread"
                };
                writingThread.Start();

                InteractionService.RemoteGameObjects.Provide();
                Connected?.Invoke();
            }
        }
Exemple #3
0
        public static GameImage FromTex(TexFileReader reader)
        {
            const short x = 0;
            const short y = 0;

            using (DisposableStack insurance = new DisposableStack(2))
            {
                GLTexture layer    = insurance.Add(reader.ReadImage());
                GLTexture palettes = insurance.Add(GLTextureFactory.FromBitmapPalettes(reader.Palettes));
                GameImage result   = new GameImage(x, y, layer, palettes);
                insurance.Clear();
                return(result);
            }
        }
Exemple #4
0
        public IsoFileCommander(IsoInfo isoInfo)
        {
            _isoInfo = Exceptions.CheckArgumentNull(isoInfo, "isoInfo");

            try
            {
                _stream = _disposables.Add(new FileStream(isoInfo.FilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite));
                _memory = _disposables.Add(MemoryMappedFile.CreateFromFile(_stream, null, 0, MemoryMappedFileAccess.Read, null, HandleInheritability.Inheritable, false));
            }
            catch
            {
                Dispose();
                throw;
            }
        }
Exemple #5
0
        public static GameImage FromTim(TimFileReader reader)
        {
            using (DisposableStack insurance = new DisposableStack(3))
            {
                TimImage timImage = insurance.Add(reader.ReadImage());
                short    x        = timImage.ImageHeader.X;
                short    y        = timImage.ImageHeader.Y;

                GLTexture layer    = timImage.Layer;
                GLTexture palettes = insurance.Add(GLTextureFactory.FromBitmapPalettes(reader.Palettes == null ? null : reader.Palettes.Palettes));

                GameImage result = new GameImage(x, y, layer, palettes);
                insurance.Clear();
                return(result);
            }
        }
Exemple #6
0
 public BackgroundMusicPlayer()
 {
     try
     {
         _stream          = _disposables.Add(Assembly.GetExecutingAssembly().GetManifestResourceStream(FileName));
         _audioFileReader = _disposables.Add(new Mp3FileReader(_stream, CreateMp3Decompressor));
         _waveOutDevice   = _disposables.Add(new WaveOut());
         _waveOutDevice.Init(_audioFileReader);
         _waveOutDevice.PlaybackStopped += OnPlaybackStopped;
     }
     catch
     {
         _disposables.Dispose();
         throw;
     }
 }
Exemple #7
0
        public static void CreatePipe(long capacity, out Stream input, out Stream output)
        {
            using (DisposableStack insurance = new DisposableStack(3))
            {
                Flute flute = insurance.Add(new Flute(capacity));
                Stream writer = insurance.Add(flute.AcquireWriter(0, capacity));
                Stream reader = insurance.Add(flute.AcquireReader(0, capacity));

                DisposableStream disposableOutput = new DisposableStream(reader);
                disposableOutput.AfterDispose.Add(flute);
                disposableOutput.AfterDispose.Add(writer);

                input = writer;
                output = disposableOutput;

                insurance.Clear();
            }
        }
Exemple #8
0
        public static void HiResToGameData(GameFont gameFont)
        {
            using (DisposableStack disposables = new DisposableStack(2))
            {
                GLTexture leftTexture;
                GLTexture rightTexture;
                GLTextureFactory.HorizontalSplit(gameFont.CharactersImage.Layer, out leftTexture, out rightTexture);
                disposables.Add(leftTexture);
                disposables.Add(rightTexture);

                ArchiveDirectoryEntry mainDirectory  = Archives.GetEntry <ArchiveDirectoryEntry>(GameFontReader.MainPath);
                ArchiveDirectoryEntry menuDirectory  = Archives.GetEntry <ArchiveDirectoryEntry>(GameFontReader.MenuPath);
                ArchiveDirectoryEntry hiresDirectory = menuDirectory.GetChildEntry <ArchiveDirectoryEntry>(GameFontReader.HiResDirectoryName);
                ArchiveFileEntry      tdwEntry       = mainDirectory.GetChildEntry <ArchiveFileEntry>(GameFontReader.HiResCharactersWidthsFileName);
                ArchiveFileEntry      image01        = hiresDirectory.GetChildEntry <ArchiveFileEntry>(GameFontReader.HiResFontImage1FileName);
                ArchiveFileEntry      image02        = hiresDirectory.GetChildEntry <ArchiveFileEntry>(GameFontReader.HiResFontImage2FileName);

                using (Stream output = tdwEntry.OpenWritableCapacityStream())
                    using (TdwFileWriter tdwWriter = new TdwFileWriter(output))
                    {
                        tdwWriter.WriteFontCharactersWidths(gameFont.CharactersWidths);
                        tdwEntry.UpdateMetrics((int)output.Position, tdwEntry.ContentOffset, Compression.None);
                    }

                using (Stream output = image01.OpenWritableCapacityStream())
                    using (TexFileWriter texWriter = new TexFileWriter(output))
                    {
                        texWriter.WriteImage(leftTexture, gameFont.CharactersImage.Palettes);
                        image01.UpdateMetrics((int)output.Position, image01.ContentOffset, Compression.None);
                    }

                using (Stream output = image02.OpenWritableCapacityStream())
                    using (TexFileWriter texWriter = new TexFileWriter(output))
                    {
                        texWriter.WriteImage(rightTexture, gameFont.CharactersImage.Palettes);
                        image02.UpdateMetrics((int)output.Position, image02.ContentOffset, Compression.None);
                    }

                Archives.GetInfo(ArchiveName.Main).Update();
                Archives.GetInfo(ArchiveName.Menu).Update();
            }
        }
Exemple #9
0
        public override void Open()
        {
            Close();

            using (Stream palettesStream = IOStream.GetStreamSegment(4096, MimPalettes.Size))
                Palettes = MimPalettes.Read(palettesStream);

            Stream textureStream = _disposables.Add(IOStream.GetStreamSegment(12288));

            Textures = new MimTextures(textureStream);
        }
        private void ReadTextureFromTexFiles(string[] files)
        {
            GLTexture[] textures = new GLTexture[2];
            using (DisposableStack disposables = new DisposableStack(2))
            {
                for (int i = 0; i < 2; i++)
                {
                    using (FileStream input = File.OpenRead(files[i]))
                        using (TexFileReader texReader = new TexFileReader(input))
                            textures[i] = disposables.Add(texReader.ReadImage());
                }

                _texture    = GLTextureFactory.HorizontalJoin(textures[0], textures[1]);
                _ownTexture = true;
            }
        }
        private static DxTexture[] ReadTextures(ImgbArchiveAccessor accessor, TextureSection[] gtexDatas)
        {
            DxTexture[] textures = new DxTexture[gtexDatas.Length];

            using (Stream imgbStream = accessor.ExtractContent())
                using (DisposableStack insurance = new DisposableStack())
                {
                    for (int i = 0; i < gtexDatas.Length; i++)
                    {
                        GtexData data = gtexDatas[i].Gtex;
                        textures[i] = insurance.Add(ReadTexture(imgbStream, data));
                    }
                    insurance.Clear();
                }

            return(textures);
        }
Exemple #12
0
        public MainWindow()
        {
            InitializeComponent();
            Unloaded  += OnUnloaded;
            MouseDown += OnMouseDown;

            _player = _disposables.Add(BackgroundMusicPlayer.TryCreateAndPlay());
            PlayButton.GameSettings = GameSettings;
            PlayButton.MusicPlayer  = _player;

            LocalizatorEnvironmentInfo info = InteractionService.LocalizatorEnvironment.Provide();

            if (!info.PlayMusic)
            {
                OnMusicButtonClick(MusicButton, new RoutedEventArgs());
            }
            if (!info.ExitAfterRunGame)
            {
                OnSwitchButtonClick(SwitchButton, new RoutedEventArgs());
            }
        }
Exemple #13
0
        private void Patch(BinaryReader br, GameLocationInfo gameLocation)
        {
            if (CancelEvent.IsSet())
                return;

            FFXIIITextEncoding encoding = ReadEncoding(br);
            TextEncodingInfo encodingInfo = new TextEncodingInfo(encoding);
            InteractionService.TextEncoding.SetValue(encodingInfo);
            if (CancelEvent.IsSet())
                return;

            Dictionary<string, string> dic = ReadStrings(br);
            dic["$title_newgame"] = _userName;
            if (CancelEvent.IsSet())
                return;

            using (DisposableStack disposables = new DisposableStack())
            {
                MemoryInjectionSource source = disposables.Add(new MemoryInjectionSource());
                source.RegisterStrings(dic);
                if (CancelEvent.IsSet())
                    return;

                int count = br.ReadInt32();
                OnProgress(4);

                for (int i = 0; i < count; i++)
                {
                    long position = br.BaseStream.Position;
                    ImgbPatchData imgb = disposables.Add(ImgbPatchData.ReadFrom(br));
                    foreach (KeyValuePair<string, SafeUnmanagedArray> data in imgb)
                        source.RegisterStream(Path.Combine(imgb.XgrArchiveUnpackName, data.Key), data.Value.OpenStream(FileAccess.Read));
                    OnProgress(br.BaseStream.Position - position);
                    if (CancelEvent.IsSet())
                        return;
                }

                UiArchiveTreeBuilder builder = new UiArchiveTreeBuilder(gameLocation);
                UiArchives archives = builder.Build();
                Position = 0;
                Maximum = archives.Count;
                foreach (UiContainerNode archive in archives)
                {
                    Check(archive);
                    OnProgress(1);
                }

                if (CancelEvent.IsSet())
                    return;

                IUiLeafsAccessor[] accessors = archives.AccessToCheckedLeafs(new Wildcard("*"), null, false).ToArray();
                Position = 0;
                Maximum = accessors.Length;

                UiInjectionManager manager = new UiInjectionManager();
                foreach (IUiLeafsAccessor accessor in accessors)
                {
                    accessor.Inject(source, manager);
                    OnProgress(1);
                }
                manager.WriteListings();
            }
        }