From 8b2333eecf4d4fad0fd8df9f2c1c2ed873214414 Mon Sep 17 00:00:00 2001 From: Skyth <19259897+blueskythlikesclouds@users.noreply.github.com> Date: Mon, 30 Jan 2017 13:47:50 +0300 Subject: [PATCH] Add UTF-8 support for UTF tables --- Release/AcbEditor.exe | Bin 13312 -> 13312 bytes Release/CsbBuilder.exe | Bin 153088 -> 153088 bytes Release/CsbEditor.exe | Bin 13312 -> 13312 bytes Release/SonicAudioLib.dll | Bin 60416 -> 60928 bytes Source/CsbEditor/Program.cs | 21 ++++---- Source/SonicAudioLib/Archive/CriCpkArchive.cs | 15 +++++- .../SonicAudioLib/CriMw/CriTable.Internal.cs | 11 ++-- Source/SonicAudioLib/CriMw/CriTableReader.cs | 51 +++++++++++++----- Source/SonicAudioLib/CriMw/CriTableWriter.cs | 24 ++++++--- Source/SonicAudioLib/IO/EndianStream.cs | 10 ++++ 10 files changed, 99 insertions(+), 33 deletions(-) diff --git a/Release/AcbEditor.exe b/Release/AcbEditor.exe index 8fb9001f6fabe4f4ec3222896e50b0fae5be403a..781643ac9e5ade0ba24b81da6a7874e5f3af617e 100644 GIT binary patch delta 178 zcmZq3Xvmn*!TeUDe`9x`AWOVNU&7=Ef=XbgWaVAw35xp|G61Pgax wLc9bsP&JU=d|u0)k=K$zkHLt+gu$G_kilZJvd&~Qp~;7JtwRSf0A@xqk^lez delta 178 zcmZq3Xvmn*!7Ll!y|Ft`kR?XqS?%Npf=XbWKCEkvrifebD=Pr!V>Au` diff --git a/Release/CsbBuilder.exe b/Release/CsbBuilder.exe index 9f6d1892f0f0de881bd424650f7f8be09fec5030..22cca5d5e89f5fd0f9a5aa29b67a247956182836 100644 GIT binary patch delta 172 zcmZoz!`ZNgb3zC6JBj|r?ycR7@(C>Q68#C&*CjBv0a<+s+bt3qeI^M!aBo-?y`S54 z!ER2uBNsL%ZlCg*@kkg*+w^EJCP{&JhTr!vM8vz#W&SUitudu`dy5y70~2?DLc9bc x0|Nt)-hSSP$(xbal0lEbh{1%xoWYR6a=W@8(|k0s>6iVPtkIN72QWQl1ppg2HD~|; delta 172 zcmZoz!`ZNgb3zBRTzq$9_ttJk`2?02iRZP`*CjBv0a?##w_7AK`b-jVT;Xwr??Zv} z4ChUzZizl&+oybHJQ4=dHa*&lNm78lYPG<#;AWRK>UU=}p5?#4y~T^kfrmo~9@5L+8cL1HVdUnHPt4bl`v4}zqj zD5b^3?GzOBRw=C~b-8AYG=mOykxohHp^P!TBhvb9_ z6OI&PuvDcx#sy8I3;#>AHF{K?;|{NuW-4sf=q*kY6>C(&8$|DGw4%;~23u7!jkI=) zX>}De_$`jR&ndQ~kx%ibdP{X6O1jUzYy9%!&GPluLB8H7q9ftT^XA9)2))}0`MLDF z;HR6}pjW#=@94znz^K3AHNL$XJDR&Pyz=Y&?XTip(1E)hwKptxwa9U^8Sr9*z_5zk z-S)zjPbCd`9Hl6>4dKohbU-)sLLYQNRJ2C8Me*0|{gy?pjDSP(>|;M=%@*;$yk?>B$m?9Nx7E>ABl zYSGDxQHgTGcrwoGiaDk~I8GE%r{YOcFBr)DQjFa7Q!>cF{cIxu=!-HYcp};(IBAKUhO$)=(>_b3?fc->2KIq{sDHzhX4Qo diff --git a/Release/SonicAudioLib.dll b/Release/SonicAudioLib.dll index d9985a06a7b84575bff1d54fd26c5e26deac9f54..5b9d9f78f4298b4e37aa30d967a1cf14b285491a 100644 GIT binary patch literal 60928 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 diff --git a/Source/CsbEditor/Program.cs b/Source/CsbEditor/Program.cs index 677d6df..8fa4157 100644 --- a/Source/CsbEditor/Program.cs +++ b/Source/CsbEditor/Program.cs @@ -75,18 +75,21 @@ namespace CsbEditor { CriCpkEntry cpkEntry = cpkArchive.GetByPath(sdlName); - using (Stream cpkSource = File.OpenRead(cpkPath)) - using (Stream aaxSource = cpkEntry.Open(cpkSource)) + if (cpkEntry != null) { - aaxArchive.Read(aaxSource); - - foreach (CriAaxEntry entry in aaxArchive) + using (Stream cpkSource = File.OpenRead(cpkPath)) + using (Stream aaxSource = cpkEntry.Open(cpkSource)) { - using (Stream destination = File.Create(Path.Combine(destinationPath.FullName, - entry.Flag == CriAaxEntryFlag.Intro ? "Intro.adx" : "Loop.adx"))) - using (Stream entrySource = entry.Open(aaxSource)) + aaxArchive.Read(aaxSource); + + foreach (CriAaxEntry entry in aaxArchive) { - entrySource.CopyTo(destination); + using (Stream destination = File.Create(Path.Combine(destinationPath.FullName, + entry.Flag == CriAaxEntryFlag.Intro ? "Intro.adx" : "Loop.adx"))) + using (Stream entrySource = entry.Open(aaxSource)) + { + entrySource.CopyTo(destination); + } } } } diff --git a/Source/SonicAudioLib/Archive/CriCpkArchive.cs b/Source/SonicAudioLib/Archive/CriCpkArchive.cs index b4298a4..6d5616d 100644 --- a/Source/SonicAudioLib/Archive/CriCpkArchive.cs +++ b/Source/SonicAudioLib/Archive/CriCpkArchive.cs @@ -564,7 +564,20 @@ namespace SonicAudioLib.Archive public CriCpkEntry GetByPath(string path) { - return entries.FirstOrDefault(entry => ((entry.DirectoryName + "/" + entry.Name) == path)); + string correctedPath = path.Replace('\\', '/'); + + return entries.FirstOrDefault(entry => + { + string search = string.Empty; + if (!string.IsNullOrEmpty(entry.DirectoryName)) + { + search += $"{entry.DirectoryName.Replace('\\', '/')}/"; + } + + search += entry.Name; + + return search == correctedPath; + }); } private DateTime DateTimeFromCpkDateTime(ulong dateTime) diff --git a/Source/SonicAudioLib/CriMw/CriTable.Internal.cs b/Source/SonicAudioLib/CriMw/CriTable.Internal.cs index 3121250..1239976 100644 --- a/Source/SonicAudioLib/CriMw/CriTable.Internal.cs +++ b/Source/SonicAudioLib/CriMw/CriTable.Internal.cs @@ -4,10 +4,13 @@ namespace SonicAudioLib.CriMw { struct CriTableHeader { - public static readonly string Signature = "@UTF"; + public const string Signature = "@UTF"; + public const byte EncodingTypeShiftJis = 0; + public const byte EncodingTypeUtf8 = 1; + public uint Length { get; set; } - public bool FirstBoolean { get; set; } - public bool SecondBoolean { get; set; } + public byte UnknownByte { get; set; } + public byte EncodingType { get; set; } public ushort RowsPosition { get; set; } public uint StringPoolPosition { get; set; } public uint DataPoolPosition { get; set; } @@ -18,7 +21,7 @@ namespace SonicAudioLib.CriMw } [Flags] - enum CriFieldFlag + enum CriFieldFlag : byte { Name = 16, DefaultValue = 32, diff --git a/Source/SonicAudioLib/CriMw/CriTableReader.cs b/Source/SonicAudioLib/CriMw/CriTableReader.cs index 40e5e5c..b95e7f5 100644 --- a/Source/SonicAudioLib/CriMw/CriTableReader.cs +++ b/Source/SonicAudioLib/CriMw/CriTableReader.cs @@ -12,7 +12,8 @@ namespace SonicAudioLib.CriMw private List fields; private Stream source; private CriTableHeader header; - private int rowIndex = -1; + private Encoding encoding; + private long rowIndex = -1; private uint headerPosition; private bool leaveOpen; @@ -56,7 +57,7 @@ namespace SonicAudioLib.CriMw } } - public int CurrentRow + public long CurrentRow { get { @@ -72,6 +73,14 @@ namespace SonicAudioLib.CriMw } } + public Encoding EncodingType + { + get + { + return encoding; + } + } + private void ReadTable() { headerPosition = (uint)source.Position; @@ -102,8 +111,29 @@ namespace SonicAudioLib.CriMw } header.Length = ReadUInt32() + 0x8; - header.FirstBoolean = ReadBoolean(); - header.SecondBoolean = ReadBoolean(); + header.UnknownByte = ReadByte(); + header.EncodingType = ReadByte(); + + if (header.UnknownByte != 0) + { + throw new Exception($"Invalid byte ({header.UnknownByte}. Please report the error with the file."); + } + + // This actually might be a boolean telling the reader that it's using UTF-8 encoding, but idk + switch (header.EncodingType) + { + case CriTableHeader.EncodingTypeShiftJis: + encoding = Encoding.GetEncoding("shift-jis"); + break; + + case CriTableHeader.EncodingTypeUtf8: + encoding = Encoding.UTF8; + break; + + default: + throw new Exception($"Unknown encoding type ({header.EncodingType}). Please report the error with the file."); + } + header.RowsPosition = (ushort)(ReadUInt16() + 0x8); header.StringPoolPosition = ReadUInt32() + 0x8; header.DataPoolPosition = ReadUInt32() + 0x8; @@ -112,11 +142,6 @@ namespace SonicAudioLib.CriMw header.RowLength = ReadUInt16(); header.NumberOfRows = ReadUInt32(); - if (header.FirstBoolean) - { - throw new Exception($"Invalid boolean ({header.FirstBoolean}. Please report the error with the file."); - } - for (ushort i = 0; i < header.NumberOfFields; i++) { CriTableField field = new CriTableField(); @@ -271,7 +296,7 @@ namespace SonicAudioLib.CriMw return true; } - public bool MoveToRow(int rowIndex) + public bool MoveToRow(long rowIndex) { if (rowIndex >= header.NumberOfRows) { @@ -617,7 +642,7 @@ namespace SonicAudioLib.CriMw long previousPosition = source.Position; source.Position = headerPosition + header.StringPoolPosition + stringPosition; - string strResult = EndianStream.ReadCString(source, Encoding.GetEncoding("shift-jis")); + string strResult = EndianStream.ReadCString(source, encoding); source.Position = previousPosition; if (strResult == "" || @@ -675,12 +700,12 @@ namespace SonicAudioLib.CriMw ReadData(out vldPosition, out vldLength); - // SecondBoolean being true, check if utf table + // Some ACB files have the length info set to zero for UTF table fields, so find the correct length if (vldPosition > 0 && vldLength == 0) { source.Position = headerPosition + header.DataPoolPosition + vldPosition; - if (Encoding.ASCII.GetString(ReadBytes(4)) == "@UTF") + if (EndianStream.ReadCString(source, 4) == "@UTF") { vldLength = ReadUInt32() + 8; } diff --git a/Source/SonicAudioLib/CriMw/CriTableWriter.cs b/Source/SonicAudioLib/CriMw/CriTableWriter.cs index 94c0755..5d76c09 100644 --- a/Source/SonicAudioLib/CriMw/CriTableWriter.cs +++ b/Source/SonicAudioLib/CriMw/CriTableWriter.cs @@ -71,8 +71,8 @@ namespace SonicAudioLib.CriMw EndianStream.WriteCString(destination, CriTableHeader.Signature, 4); WriteUInt32(uint.MinValue); - WriteBoolean(false); - WriteBoolean(false); + WriteByte(byte.MinValue); + WriteByte(byte.MinValue); WriteUInt16(ushort.MinValue); WriteUInt32(uint.MinValue); WriteUInt32(uint.MinValue); @@ -112,13 +112,20 @@ namespace SonicAudioLib.CriMw header.Length = (uint)destination.Position - headerPosition; - header.FirstBoolean = false; - header.SecondBoolean = false; + if (settings.EncodingType == Encoding.GetEncoding("shift-jis")) + { + header.EncodingType = CriTableHeader.EncodingTypeShiftJis; + } + + else if (settings.EncodingType == Encoding.UTF8) + { + header.EncodingType = CriTableHeader.EncodingTypeUtf8; + } destination.Position = headerPosition + 4; WriteUInt32(header.Length - 8); - WriteBoolean(header.FirstBoolean); - WriteBoolean(header.SecondBoolean); + WriteByte(header.UnknownByte); + WriteByte(header.EncodingType); WriteUInt16((ushort)(header.RowsPosition - 8)); WriteUInt32(header.StringPoolPosition - 8); WriteUInt32(header.DataPoolPosition - 8); @@ -670,6 +677,11 @@ namespace SonicAudioLib.CriMw set { + if (value != Encoding.UTF8 || value != Encoding.GetEncoding("shift-jis")) + { + return; + } + encodingType = value; } } diff --git a/Source/SonicAudioLib/IO/EndianStream.cs b/Source/SonicAudioLib/IO/EndianStream.cs index c2ecc48..39a4981 100644 --- a/Source/SonicAudioLib/IO/EndianStream.cs +++ b/Source/SonicAudioLib/IO/EndianStream.cs @@ -43,6 +43,16 @@ namespace SonicAudioLib.IO return buffer; } + public static byte[] ReadBytesAt(Stream source, int length, long position) + { + long oldPosition = source.Position; + source.Position = position; + FillBuffer(source, length); + source.Position = oldPosition; + + return buffer; + } + public static void WriteBytes(Stream destination, byte[] value) { destination.Write(value, 0, value.Length);