Compare commits
4
Commits
v0.4.10.16
...
v0.4.10.19
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b66b3b01d0 | ||
|
|
3c13856667 | ||
|
|
00d25ff67b | ||
|
|
a1c18941a1 |
+131
-38
@@ -1,6 +1,5 @@
|
||||
//Original: https://github.com/blueskythlikesclouds/MikuMikuLibrary/
|
||||
|
||||
using System.IO.Compression;
|
||||
using System.Security.Cryptography;
|
||||
using KKdBaseLib;
|
||||
using KKdMainLib.IO;
|
||||
@@ -139,7 +138,17 @@ namespace KKdMainLib
|
||||
file.Size = reader.RI32E(true);
|
||||
Flags Flags = (Flags)reader.RI32E(true);
|
||||
|
||||
file.Compressed = file.Size != 0 || (FARCFlags & Flags.GZip) != 0;
|
||||
if (file.Size != 0)
|
||||
{
|
||||
file.Compressed = (FARCFlags & Flags.GZip) != 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
file.Size = file.SizeComp;
|
||||
file.SizeComp = 0;
|
||||
file.Compressed = false;
|
||||
}
|
||||
|
||||
file.Encrypted = ((FARCFlags | Flags) & Flags.AES) != 0;
|
||||
Files.Add(file);
|
||||
}
|
||||
@@ -152,8 +161,18 @@ namespace KKdMainLib
|
||||
file.SizeComp = reader.RI32E(true);
|
||||
file.Size = reader.RI32E(true);
|
||||
|
||||
file.Compressed = file.Size != 0;
|
||||
file.Encrypted = (FARCFlags & Flags.AES) != 0;
|
||||
if (file.Size != 0)
|
||||
{
|
||||
file.Compressed = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
file.Size = file.SizeComp;
|
||||
file.SizeComp = 0;
|
||||
file.Compressed = false;
|
||||
}
|
||||
|
||||
file.Encrypted = false;
|
||||
Files.Add(file);
|
||||
}
|
||||
else
|
||||
@@ -227,10 +246,18 @@ namespace KKdMainLib
|
||||
}
|
||||
else if (Signature == Farc.FArC)
|
||||
{
|
||||
file.DataComp = reader.RBy(file.SizeComp);
|
||||
file.Data = file.DataComp.InflateGZip(file.Size);
|
||||
if (file.Compressed)
|
||||
{
|
||||
file.DataComp = reader.RBy(file.SizeComp);
|
||||
file.Data = file.DataComp.InflateGZip(file.Size);
|
||||
}
|
||||
else
|
||||
{
|
||||
file.DataComp = null;
|
||||
file.Data = reader.RBy(file.Size);
|
||||
}
|
||||
}
|
||||
else if (file.Encrypted || file.Compressed)
|
||||
else if (file.Compressed || file.Encrypted)
|
||||
{
|
||||
int tempSize = file.Encrypted ? file.SizeComp.A(0x10) : file.SizeComp;
|
||||
|
||||
@@ -266,16 +293,16 @@ namespace KKdMainLib
|
||||
else
|
||||
temp = reader.RBy(tempSize);
|
||||
|
||||
if (!file.Compressed)
|
||||
{
|
||||
file.DataComp = null;
|
||||
file.Data = temp;
|
||||
}
|
||||
else
|
||||
if (file.Compressed)
|
||||
{
|
||||
file.DataComp = temp;
|
||||
file.Data = file.DataComp.InflateGZip(file.Size);
|
||||
}
|
||||
else
|
||||
{
|
||||
file.DataComp = null;
|
||||
file.Data = temp;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -294,15 +321,33 @@ namespace KKdMainLib
|
||||
return Files[i].Data;
|
||||
}
|
||||
|
||||
public void Pack(Farc signature = Farc.FArC)
|
||||
public void Pack()
|
||||
{
|
||||
NewFARC();
|
||||
string[] files = Directory.GetFiles(DirectoryPath);
|
||||
Files.Capacity = files.Length;
|
||||
|
||||
bool compressed = false;
|
||||
bool encrypted = false;
|
||||
switch (Signature)
|
||||
{
|
||||
case Farc.FARC:
|
||||
compressed = (FARCFlags & Flags.GZip) != 0;
|
||||
encrypted = (FARCFlags & Flags.AES) != 0;
|
||||
break;
|
||||
case Farc.FArC:
|
||||
FARCFlags = Flags.None;
|
||||
compressed = true;
|
||||
break;
|
||||
default:
|
||||
FARCFlags = Flags.None;
|
||||
break;
|
||||
}
|
||||
|
||||
for (int i = 0; i < files.Length; i++)
|
||||
Files.Add(new FARCFile { Name = Path.GetFileName(files[i]), Data = File.ReadAllBytes(files[i]) });
|
||||
Files.Add(new FARCFile { Name = Path.GetFileName(files[i]),
|
||||
Data = File.ReadAllBytes(files[i]), Compressed = compressed, Encrypted = encrypted });
|
||||
files = null;
|
||||
Signature = signature;
|
||||
Save();
|
||||
}
|
||||
|
||||
@@ -322,22 +367,28 @@ namespace KKdMainLib
|
||||
|
||||
using (Stream headerWriter = File.OpenWriter())
|
||||
{
|
||||
if (Signature == Farc.FArc) headerWriter.WE(0x01, true);
|
||||
else if (Signature == Farc.FArC) headerWriter.WE(0x01, true);
|
||||
else if (Signature == Farc.FARC)
|
||||
switch (Signature)
|
||||
{
|
||||
headerWriter.WE((int)FARCFlags, true);
|
||||
headerWriter.W (0x00);
|
||||
headerWriter.WE(0x40, true);
|
||||
headerWriter.W (0x00);
|
||||
headerWriter.W (0x00);
|
||||
case Farc.FArc:
|
||||
headerWriter.WE(0x01, true);
|
||||
for (int i = 0; i < Files.Count; i++)
|
||||
{ headerWriter.W(Files[i].Name + "\0"); headerWriter.W(0x00L); }
|
||||
break;
|
||||
case Farc.FArC:
|
||||
headerWriter.WE(0x01, true);
|
||||
for (int i = 0; i < Files.Count; i++)
|
||||
{ headerWriter.W(Files[i].Name + "\0"); headerWriter.W(0x00L); headerWriter.W(0x00); }
|
||||
break;
|
||||
case Farc.FARC:
|
||||
headerWriter.WE((int)FARCFlags, true);
|
||||
headerWriter.W (0x00);
|
||||
headerWriter.WE(0x40, true);
|
||||
headerWriter.W (0x00);
|
||||
headerWriter.W (0x00);
|
||||
for (int i = 0; i < Files.Count; i++)
|
||||
{ headerWriter.W(Files[i].Name + "\0"); headerWriter.W(0x00L); headerWriter.W(0x00L); }
|
||||
break;
|
||||
}
|
||||
if (Signature != Farc.FArc)
|
||||
for (int i = 0; i < Files.Count; i++)
|
||||
{ headerWriter.W(Files[i].Name + "\0"); headerWriter.W(0x00L); headerWriter.W(0x00); }
|
||||
else
|
||||
for (int i = 0; i < Files.Count; i++)
|
||||
{ headerWriter.W(Files[i].Name + "\0"); headerWriter.W(0x00L); }
|
||||
writer.WE(headerWriter.L, true);
|
||||
writer.W (headerWriter.ToArray(true));
|
||||
}
|
||||
@@ -351,13 +402,55 @@ namespace KKdMainLib
|
||||
CompressStuff(i, ref writer);
|
||||
|
||||
writer.P = Signature == Farc.FARC ? 0x1C : 0x0C;
|
||||
for (int i = 0; i < Files.Count; i++)
|
||||
switch (Signature)
|
||||
{
|
||||
FARCFile file = Files[i];
|
||||
writer.W (file.Name + "\0");
|
||||
writer.WE(file.Offset, true);
|
||||
if (Signature != Farc.FArc) writer.WE(file.SizeComp, true);
|
||||
writer.WE(file.Size, true);
|
||||
case Farc.FArc:
|
||||
for (int i = 0; i < Files.Count; i++)
|
||||
{
|
||||
FARCFile file = Files[i];
|
||||
writer.W (file.Name + "\0");
|
||||
writer.WE(file.Offset, true);
|
||||
writer.WE(file.Size , true);
|
||||
}
|
||||
break;
|
||||
case Farc.FArC:
|
||||
for (int i = 0; i < Files.Count; i++)
|
||||
{
|
||||
FARCFile file = Files[i];
|
||||
writer.W (file.Name + "\0");
|
||||
writer.WE(file.Offset , true);
|
||||
if (file.Compressed)
|
||||
{
|
||||
writer.WE(file.SizeComp, true);
|
||||
writer.WE(file.Size , true);
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.WE(file.Size , true);
|
||||
writer.WE(0x00 , true);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case Farc.FARC:
|
||||
for (int i = 0; i < Files.Count; i++)
|
||||
{
|
||||
FARCFile file = Files[i];
|
||||
writer.W (file.Name + "\0");
|
||||
writer.WE(file.Offset , true);
|
||||
if (file.Compressed)
|
||||
{
|
||||
writer.WE(file.SizeComp, true);
|
||||
writer.WE(file.Size , true);
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.WE(file.Size , true);
|
||||
writer.WE(0x00 , true);
|
||||
}
|
||||
writer.WE((uint)((file.Compressed ? Flags.GZip : 0x00)
|
||||
| (file.Encrypted ? Flags.AES : 0x00)), true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
writer.Dispose();
|
||||
}
|
||||
@@ -369,11 +462,11 @@ namespace KKdMainLib
|
||||
file.Size = file.Data.Length;
|
||||
|
||||
byte[] data = file.Data;
|
||||
if (Signature == Farc.FArC || (Signature == Farc.FARC && (FARCFlags & Flags.GZip) != 0))
|
||||
if (file.Compressed)
|
||||
data = file.Data.DeflateGZip(CompressionLevel);
|
||||
file.SizeComp = data.Length;
|
||||
|
||||
if (Signature == Farc.FARC && (FARCFlags & Flags.AES) != 0)
|
||||
if (file.Encrypted)
|
||||
{
|
||||
int alignLength = data.Length.A(0x40);
|
||||
byte[] tempData = new byte[alignLength];
|
||||
|
||||
@@ -46,9 +46,9 @@ namespace KKdMainLib.IO
|
||||
{
|
||||
buf.first = 1;
|
||||
buf.data[0] = buf.data[buf.data.Length - 1];
|
||||
byte[] temp = _IO.RBy(buf.data.Length - 1);
|
||||
buf.length = temp.Length;
|
||||
Array.Copy(temp, 0, buf.data, 1, temp.Length);
|
||||
byte[] temp = new byte[buf.data.Length];
|
||||
buf.length = _IO.RBy(buf.data.Length - 1, temp);
|
||||
Array.Copy(temp, 0, buf.data, 1, buf.length);
|
||||
}
|
||||
|
||||
if (buf.length < 1)
|
||||
@@ -173,10 +173,8 @@ namespace KKdMainLib.IO
|
||||
else
|
||||
ReadDigit(ref buf, ref c, dig_buf, ref buf_pos, buf_end);
|
||||
|
||||
bool f = false;
|
||||
if (c == '.')
|
||||
{
|
||||
f = true;
|
||||
dig_buf[buf_pos++] = (byte)c;
|
||||
if ((c = ReadChar(ref buf)) == -1)
|
||||
return null;
|
||||
@@ -194,7 +192,7 @@ namespace KKdMainLib.IO
|
||||
SeekOne(ref buf);
|
||||
return obj;
|
||||
}
|
||||
else if (c != 'e' && c != 'E' && !f)
|
||||
else if (c != 'e' && c != 'E' && !fraction)
|
||||
{
|
||||
string temp = dig_buf.ToUTF8();
|
||||
int null_term = temp.IndexOf('\0');
|
||||
@@ -206,11 +204,11 @@ namespace KKdMainLib.IO
|
||||
object obj;
|
||||
unchecked
|
||||
{
|
||||
if (val >= 0x00 && val < 0xFF)
|
||||
if (val >= 0x00 && val <= 0xFF)
|
||||
obj = (byte)val;
|
||||
else if (val >= (sbyte)0x80 && val <= (sbyte)0x7F)
|
||||
obj = (sbyte)val;
|
||||
else if (val >= 0x0000 && val < 0xFFFF)
|
||||
else if (val >= 0x0000 && val <= 0xFFFF)
|
||||
obj = (ushort)val;
|
||||
else if (val >= (short)0x8000 && val <= (short)0x7FFF)
|
||||
obj = (short)val;
|
||||
@@ -243,7 +241,7 @@ namespace KKdMainLib.IO
|
||||
int fnull_term = ftemp.IndexOf('\0');
|
||||
if (fnull_term >= 0)
|
||||
ftemp = ftemp.Substring(0, fnull_term);
|
||||
if (!double.TryParse(ftemp, out double fval))
|
||||
if (!ftemp.ToF64(out double fval))
|
||||
return null;
|
||||
|
||||
object fobj;
|
||||
|
||||
@@ -6,12 +6,12 @@
|
||||
<Configuration></Configuration>
|
||||
<Copyright>korenkonder (C) 2018-2023</Copyright>
|
||||
<Description>A simple library for working with Project Diva AC/DT/F/AFT/F2/X/XHD/FT/VRFL/M39 files</Description>
|
||||
<FileVersion>0.4.10.16</FileVersion>
|
||||
<FileVersion>0.4.10.19</FileVersion>
|
||||
<PackageId>KKdMainLib</PackageId>
|
||||
<Product>KKdMainLib</Product>
|
||||
<TargetFramework>net461</TargetFramework>
|
||||
<Title>KKdMainLib</Title>
|
||||
<Version>0.4.10.16</Version>
|
||||
<Version>0.4.10.19</Version>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
|
||||
@@ -11,5 +11,5 @@ using System.Runtime.InteropServices;
|
||||
[assembly: AssemblyCulture("")]
|
||||
[assembly: ComVisible(false)]
|
||||
[assembly: Guid("7B5D5A3A-A6F8-4813-C97D-ACFC98F7397E")]
|
||||
[assembly: AssemblyVersion("0.4.10.16")]
|
||||
[assembly: AssemblyFileVersion("0.4.10.16")]
|
||||
[assembly: AssemblyVersion("0.4.10.19")]
|
||||
[assembly: AssemblyFileVersion("0.4.10.19")]
|
||||
|
||||
@@ -68,7 +68,7 @@ namespace PD_Tool
|
||||
}
|
||||
else if (choose == "R") return;
|
||||
else farc.Signature = KKdFARC.Farc.FArC;
|
||||
farc.Pack(farc.Signature);
|
||||
farc.Pack();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user