Exemplo n.º 1
0
        private void ReadStrings(Stream s, Ofs3Data file)
        {
            file.StartOffset = s.Position;
            file.Padding     = 0x04;

            var stringOffset = (int)s.Position;

            var value = new TFString {
                FileId = Id, Offset = stringOffset, Visible = false
            };

            if (stringOffset != 0)
            {
                var str = s.ReadStringZ(Encoding);

                if (!string.IsNullOrEmpty(str.TrimEnd('\0')))
                {
                    str = SAOProject.ReadingReplacements(str);
                }

                value.Original    = str;
                value.Translation = str;
                value.Visible     = !string.IsNullOrWhiteSpace(str);
            }

            _strings.Add(value);
        }
        public static Project GetProject(string projectPath)
        {
            if (projectPath.EndsWith("tf_yak0"))
            {
                return(Yakuza0Project.GetProject(projectPath));
            }

            if (projectPath.EndsWith("tf_shm"))
            {
                return(ShenmueProject.GetProject(projectPath));
            }

            if (projectPath.EndsWith("tf_sao_hf"))
            {
                return(SAOProject.GetProject(projectPath));
            }

            if (projectPath.EndsWith("tf_srr"))
            {
                return(SRRProject.GetProject(projectPath));
            }

            if (projectPath.EndsWith("tf_dsg"))
            {
                return(DisgaeaProject.GetProject(projectPath));
            }

            if (projectPath.EndsWith("tf_btr"))
            {
                return(BattleRealmsProject.GetProject(projectPath));
            }

            if (projectPath.EndsWith("tf_spf2"))
            {
                return(Spellforce2Project.GetProject(projectPath));
            }

            if (projectPath.EndsWith("tf_jjm"))
            {
                return(JJMacfieldProject.GetProject(projectPath));
            }

            if (projectPath.EndsWith("tf_nightcry"))
            {
                return(NightCryProject.GetProject(projectPath));
            }

            throw new Exception();
        }
Exemplo n.º 3
0
        public override void Save(string fileName, byte[] originalContent, IList <TFString> strings,
                                  ExportOptions options)
        {
            File.WriteAllBytes(fileName, originalContent);

            var writeOffset = _firstStringOffset + _strings[0].RelativeOffset;

            using (var fs = new FileStream(fileName, FileMode.Open))
            {
                foreach (var item in _strings)
                {
                    fs.Seek(item.RelativeOffsetPosition, SeekOrigin.Begin);
                    fs.WriteValueS32(writeOffset - _firstStringOffset);

                    fs.Seek(writeOffset, SeekOrigin.Begin);
                    var str = item.Data.Translation;

                    if (item.Data.Visible && !string.IsNullOrEmpty(str))
                    {
                        if (options.CharReplacement != 0)
                        {
                            str = Utils.ReplaceChars(str, options.CharReplacementList);
                        }

                        str = SAOProject.WritingReplacements(str);

                        fs.WriteStringZ(str, options.SelectedEncoding);

                        writeOffset += str.GetLength(options.SelectedEncoding) + 1;
                    }
                    else
                    {
                        fs.WriteStringZ(item.Data.Original);
                        writeOffset = item.Data.Original.GetLength(options.SelectedEncoding) + 1;
                    }
                }

                var strSize = (uint)(fs.Position - _firstStringOffset);

                while (fs.Position % 4 != 0)
                {
                    fs.WriteValueU8(0);
                }

                fs.Seek(0x0C, SeekOrigin.Begin);
                fs.WriteValueU32(strSize, Endianness);
            }
        }
Exemplo n.º 4
0
        private TFString ReadString(Stream s)
        {
            var stringOffset = (int)s.Position;

            var value = new TFString {
                FileId = Id, Offset = stringOffset, Visible = false
            };

            var str = s.ReadStringZ(Encoding);

            if (!string.IsNullOrEmpty(str.TrimEnd('\0')))
            {
                str = SAOProject.ReadingReplacements(str);
            }

            value.Original    = str;
            value.Translation = str;
            value.Visible     = !string.IsNullOrWhiteSpace(str);

            return(value);
        }
Exemplo n.º 5
0
        private int WriteStrings(Stream s, IList <TFString> strings, ExportOptions options, Ofs3Data file)
        {
            int result   = 0;
            var tfString = strings.FirstOrDefault(x => x.Offset == file.StartOffset);

            if (tfString != null)
            {
                var str = tfString.Translation;

                if (tfString.Visible && !string.IsNullOrEmpty(str))
                {
                    if (options.CharReplacement != 0)
                    {
                        str = Utils.ReplaceChars(str, options.CharReplacementList);
                    }

                    str = SAOProject.WritingReplacements(str);

                    s.WriteStringZ(str, options.SelectedEncoding);

                    result = str.GetLength(options.SelectedEncoding) + 1;
                }
                else
                {
                    s.WriteStringZ(tfString.Original, options.SelectedEncoding);

                    result = tfString.Original.GetLength(options.SelectedEncoding) + 1;
                }

                while (s.Position % file.Padding != 0)
                {
                    s.WriteValueU8(0);

                    result++;
                }
            }

            return(result);
        }