Release v0.4.10.3
A3DA
This commit is contained in:
@@ -6,12 +6,12 @@
|
||||
<Configuration></Configuration>
|
||||
<Copyright>korenkonder (C) 2019-2021</Copyright>
|
||||
<Description>A base library</Description>
|
||||
<FileVersion>0.4.10.2</FileVersion>
|
||||
<FileVersion>0.4.10.3</FileVersion>
|
||||
<PackageId>KKdBaseLib</PackageId>
|
||||
<Product>KKdBaseLib</Product>
|
||||
<TargetFramework>net461</TargetFramework>
|
||||
<Title>KKdBaseLib</Title>
|
||||
<Version>0.4.10.2</Version>
|
||||
<Version>0.4.10.3</Version>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
|
||||
+35
-11
@@ -16,6 +16,7 @@ namespace KKdMainLib
|
||||
|
||||
private Stream s;
|
||||
private bool a3dc;
|
||||
private bool a3dcOpt;
|
||||
private int i, i0, i1;
|
||||
private int soi;
|
||||
private int soi0;
|
||||
@@ -28,10 +29,17 @@ namespace KKdMainLib
|
||||
private string value;
|
||||
private string[] dataArray;
|
||||
private A3DADict dict;
|
||||
private UsedDict usedValues;
|
||||
|
||||
private const string BO = ".bin_offset";
|
||||
private const string MTBO = ".model_transform" + BO;
|
||||
|
||||
public A3DA(bool a3dcOpt = true)
|
||||
{ a3dc = false; i = i0 = i1 = soi = soi0 = soi1 = 0; value = null;
|
||||
name = null; nameView = null; so = null; so0 = null; so1 = null;
|
||||
dataArray = null; s = null; Head = default; Data = default;
|
||||
dict = null; usedValues = null; this.a3dcOpt = a3dcOpt; }
|
||||
|
||||
public int A3DAReader(string file)
|
||||
{ using (s = File.OpenReader(file + ".a3da"))
|
||||
return A3DAReader(ref s); }
|
||||
@@ -1326,6 +1334,7 @@ namespace KKdMainLib
|
||||
|
||||
public byte[] A3DCWriter()
|
||||
{
|
||||
usedValues = new UsedDict();
|
||||
Data._.CompressF16 = Head.Format > Format.AFT && Head.Format < Format.FT ?
|
||||
(Head.Format == Format.MGF ? CompressF16.Type2 : CompressF16.Type1) : 0;
|
||||
|
||||
@@ -1360,15 +1369,15 @@ namespace KKdMainLib
|
||||
if (Data.MObjectHRC != null)
|
||||
for (i0 = 0; i0 < Data.MObjectHRC.Length; i0++)
|
||||
{
|
||||
if (Data.MObjectHRC[i0].Instances != null)
|
||||
for (i1 = 0; i1 < Data.MObjectHRC[i0].Instances.Length; i1++)
|
||||
WO(ref Data.MObjectHRC[i0].Instances[i1].MT, ReturnToOffset);
|
||||
|
||||
WO(ref Data.MObjectHRC[i0].MT, ReturnToOffset);
|
||||
|
||||
if (Data.MObjectHRC[i0].Node != null)
|
||||
for (i1 = 0; i1 < Data.MObjectHRC[i0].Node.Length; i1++)
|
||||
WO(ref Data.MObjectHRC[i0].Node[i1].MT, ReturnToOffset);
|
||||
|
||||
if (Data.MObjectHRC[i0].Instances != null)
|
||||
for (i1 = 0; i1 < Data.MObjectHRC[i0].Instances.Length; i1++)
|
||||
WO(ref Data.MObjectHRC[i0].Instances[i1].MT, ReturnToOffset);
|
||||
}
|
||||
|
||||
if (Data.Object != null)
|
||||
@@ -1465,15 +1474,15 @@ namespace KKdMainLib
|
||||
if (Data.MObjectHRC != null)
|
||||
for (i0 = 0; i0 < Data.MObjectHRC.Length; i0++)
|
||||
{
|
||||
if (Data.MObjectHRC[i0].Instances != null)
|
||||
for (i1 = 0; i1 < Data.MObjectHRC[i0].Instances.Length; i1++)
|
||||
W(ref Data.MObjectHRC[i0].Instances[i1].MT);
|
||||
|
||||
W(ref Data.MObjectHRC[i0].MT);
|
||||
|
||||
if (Data.MObjectHRC[i0].Node != null)
|
||||
for (i1 = 0; i1 < Data.MObjectHRC[i0].Node.Length; i1++)
|
||||
W(ref Data.MObjectHRC[i0].Node[i1].MT);
|
||||
|
||||
if (Data.MObjectHRC[i0].Instances != null)
|
||||
for (i1 = 0; i1 < Data.MObjectHRC[i0].Instances.Length; i1++)
|
||||
W(ref Data.MObjectHRC[i0].Instances[i1].MT);
|
||||
}
|
||||
|
||||
if (Data.MaterialList != null && (Head.Format == Format.X || Head.Format == Format.XHD))
|
||||
@@ -1709,9 +1718,24 @@ namespace KKdMainLib
|
||||
}
|
||||
else
|
||||
{
|
||||
key.BinOffset = s.P;
|
||||
if (key.Type == 0) s.W(0x00L);
|
||||
else { s.W((int)key.Type); s.W((float)key.Value); }
|
||||
if (a3dcOpt)
|
||||
{
|
||||
key.BinOffset = s.P;
|
||||
if (key.Type == 0) s.W(0x00L);
|
||||
else { s.W((int)key.Type); s.W((float)key.Value); }
|
||||
}
|
||||
else
|
||||
{
|
||||
KeyValuePair<int, float> kvp = new KeyValuePair<int, float>((int)key.Type, key.Value);
|
||||
if (!usedValues.ContainsValue(kvp))
|
||||
{
|
||||
key.BinOffset = s.P;
|
||||
if (key.Type == 0) s.W(0x00L);
|
||||
else { s.W((int)key.Type); s.W((float)key.Value); }
|
||||
usedValues.Add(key.BinOffset.Value, kvp);
|
||||
}
|
||||
else key.BinOffset = usedValues.GK(kvp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -6,12 +6,12 @@
|
||||
<Configuration></Configuration>
|
||||
<Copyright>korenkonder (C) 2018-2021</Copyright>
|
||||
<Description>A simple library for working with Project Diva AC/DT/F/AFT/F2/X/FT/M39 files</Description>
|
||||
<FileVersion>0.4.10.2</FileVersion>
|
||||
<FileVersion>0.4.10.3</FileVersion>
|
||||
<PackageId>KKdMainLib</PackageId>
|
||||
<Product>KKdMainLib</Product>
|
||||
<TargetFramework>net461</TargetFramework>
|
||||
<Title>KKdMainLib</Title>
|
||||
<Version>0.4.10.2</Version>
|
||||
<Version>0.4.10.3</Version>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
|
||||
+4
-4
@@ -350,15 +350,15 @@ namespace PD_Tool
|
||||
else if (filetype == "vag" ) Filter = GetArgs("VAG" , "vag", "wav") +
|
||||
GetArgs("VAG", true, "vag") + wav;
|
||||
|
||||
using OpenFileDialog ofd = new OpenFileDialog { InitialDirectory = Application.StartupPath,
|
||||
Filter = Filter, Multiselect = true, Title = "Choose file(s) to open:" };
|
||||
using OpenFileDialog ofd = new OpenFileDialog { Filter = Filter,
|
||||
Multiselect = true, Title = "Choose file(s) to open:" };
|
||||
if (ofd.ShowDialog() == DialogResult.OK) FileNames = ofd.FileNames;
|
||||
}
|
||||
else if (code == 2)
|
||||
{
|
||||
string Return = "";
|
||||
using (OpenFileDialog ofd = new OpenFileDialog { InitialDirectory = Application.StartupPath,
|
||||
ValidateNames = false, CheckFileExists = false, Filter = " | ", CheckPathExists = true,
|
||||
using (OpenFileDialog ofd = new OpenFileDialog { ValidateNames = false,
|
||||
CheckFileExists = false, Filter = " | ", CheckPathExists = true,
|
||||
Title = "Choose any file in folder:", FileName = "Folder Selection." })
|
||||
if (ofd.ShowDialog() == DialogResult.OK) Return = Path.GetDirectoryName(ofd.FileName);
|
||||
return Return;
|
||||
|
||||
@@ -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.2")]
|
||||
[assembly: AssemblyFileVersion("0.4.10.2")]
|
||||
[assembly: AssemblyVersion("0.4.10.3")]
|
||||
[assembly: AssemblyFileVersion("0.4.10.3")]
|
||||
|
||||
+45
-27
@@ -18,34 +18,50 @@ namespace PD_Tool
|
||||
foreach (string file in fileNames)
|
||||
if (file.EndsWith(".mp") || file.EndsWith(".json") || file.EndsWith(".farc")) { mp = true; break; }
|
||||
|
||||
bool a3dcOpt = false;
|
||||
Format format = Format.NULL;
|
||||
string choose = "";
|
||||
Console.Clear();
|
||||
Program.ConsoleDesign(true);
|
||||
Program.ConsoleDesign(" Choose type of format to export:");
|
||||
Program.ConsoleDesign(false);
|
||||
Program.ConsoleDesign(" Tip: A3DC Opt - A3DC Optimization");
|
||||
Program.ConsoleDesign(" WARNING! CHECK RESULTS AFTER CONVERTING ");
|
||||
Program.ConsoleDesign(false);
|
||||
Program.ConsoleDesign("1. A3DA [DT/AC/F]");
|
||||
Program.ConsoleDesign("2. A3DC [DT/AC/F]");
|
||||
Program.ConsoleDesign("3. A3DA [AFT/FT/M39]");
|
||||
Program.ConsoleDesign("4. A3DC [AFT/FT/M39]");
|
||||
Program.ConsoleDesign("5. A3DC [F2]");
|
||||
Program.ConsoleDesign("6. A3DC [MGF]");
|
||||
Program.ConsoleDesign("7. A3DC [X]");
|
||||
Program.ConsoleDesign("8. A3DC [XHD]");
|
||||
if (!mp) Program.ConsoleDesign($"9. {(json ? "JSON" : "MsgPack")}");
|
||||
Program.ConsoleDesign("3. A3DC [DT/AC/F] (A3DC Opt)");
|
||||
Program.ConsoleDesign("4. A3DA [AFT/FT/M39]");
|
||||
Program.ConsoleDesign("5. A3DC [AFT/FT/M39]");
|
||||
Program.ConsoleDesign("6. A3DC [AFT/FT/M39] (A3DC Opt)");
|
||||
Program.ConsoleDesign("7. A3DC [F2]");
|
||||
Program.ConsoleDesign("8. A3DC [F2] (A3DC Opt)");
|
||||
Program.ConsoleDesign("9. A3DC [MGF]");
|
||||
Program.ConsoleDesign("A. A3DC [MGF] (A3DC Opt)");
|
||||
Program.ConsoleDesign("B. A3DC [X]");
|
||||
Program.ConsoleDesign("C. A3DC [X] (A3DC Opt)");
|
||||
Program.ConsoleDesign("D. A3DC [XHD]");
|
||||
Program.ConsoleDesign("E. A3DC [XHD] (A3DC Opt)");
|
||||
if (!mp) Program.ConsoleDesign($"F. {(json ? "JSON" : "MsgPack")}");
|
||||
Program.ConsoleDesign(false);
|
||||
Program.ConsoleDesign(true);
|
||||
Console.WriteLine();
|
||||
choose = Console.ReadLine().ToUpper();
|
||||
if (choose == "1") format = Format.DT ;
|
||||
else if (choose == "2") format = Format.F ;
|
||||
else if (choose == "3") format = Format.AFT;
|
||||
else if (choose == "4") format = Format.AFT;
|
||||
else if (choose == "5") format = Format.F2;
|
||||
else if (choose == "6") format = Format.MGF;
|
||||
else if (choose == "7") format = Format.X ;
|
||||
else if (choose == "8") format = Format.XHD;
|
||||
else if (choose == "9") format = Format.NULL;
|
||||
if (choose == "1") format = Format.DT ;
|
||||
else if (choose == "2") format = Format.F ;
|
||||
else if (choose == "3") { format = Format.F ; a3dcOpt = true; }
|
||||
else if (choose == "4") format = Format.AFT;
|
||||
else if (choose == "5") format = Format.AFT;
|
||||
else if (choose == "6") { format = Format.AFT; a3dcOpt = true; }
|
||||
else if (choose == "7") format = Format.F2 ;
|
||||
else if (choose == "8") { format = Format.F2 ; a3dcOpt = true; }
|
||||
else if (choose == "9") format = Format.MGF;
|
||||
else if (choose == "A") { format = Format.MGF; a3dcOpt = true; }
|
||||
else if (choose == "B") format = Format.X ;
|
||||
else if (choose == "C") { format = Format.X ; a3dcOpt = true; }
|
||||
else if (choose == "D") format = Format.XHD;
|
||||
else if (choose == "E") { format = Format.XHD; a3dcOpt = true; }
|
||||
else if (choose == "F") format = Format.NULL;
|
||||
else return;
|
||||
|
||||
int state;
|
||||
@@ -60,9 +76,9 @@ namespace PD_Tool
|
||||
Console.Title = "A3DA Converter: " + Path.GetFileNameWithoutExtension(file);
|
||||
if (ext == ".farc")
|
||||
using (farc = new KKdFARC(file))
|
||||
FARCProcessor(farc, choose, format);
|
||||
FARCProcessor(farc, choose, format, a3dcOpt);
|
||||
else if (ext == ".a3da")
|
||||
using (a3da = new KKdA3DA())
|
||||
using (a3da = new KKdA3DA(a3dcOpt))
|
||||
{
|
||||
state = a3da.A3DAReader(filepath);
|
||||
if (state == 1)
|
||||
@@ -71,22 +87,22 @@ namespace PD_Tool
|
||||
{
|
||||
a3da.Head.Format = format;
|
||||
File.WriteAllBytes(filepath + ".a3da", (choose == "1" ||
|
||||
choose == "3") ? a3da.A3DAWriter() : a3da.A3DCWriter());
|
||||
choose == "4") ? a3da.A3DAWriter() : a3da.A3DCWriter());
|
||||
}
|
||||
}
|
||||
else if (ext == ".mp" || ext == ".json")
|
||||
using (a3da = new KKdA3DA())
|
||||
using (a3da = new KKdA3DA(a3dcOpt))
|
||||
{
|
||||
a3da.MsgPackReader(filepath, ext == ".json");
|
||||
a3da.Head.Format = format;
|
||||
|
||||
File.WriteAllBytes(filepath + ".a3da", (choose == "1" ||
|
||||
choose == "3") ? a3da.A3DAWriter() : a3da.A3DCWriter());
|
||||
choose == "4") ? a3da.A3DAWriter() : a3da.A3DCWriter());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void FARCProcessor(KKdFARC farc, string choose, Format format)
|
||||
private static void FARCProcessor(KKdFARC farc, string choose, Format format, bool a3dcOpt)
|
||||
{
|
||||
if (!farc.HeaderReader() || !farc.HasFiles) return;
|
||||
|
||||
@@ -107,7 +123,7 @@ namespace PD_Tool
|
||||
{
|
||||
KKdA3DA a3da;
|
||||
for (int i = 0; i < A3DAlist.Count; i++)
|
||||
using (a3da = new KKdA3DA())
|
||||
using (a3da = new KKdA3DA(a3dcOpt))
|
||||
{
|
||||
data = farc.FileReader(A3DAlist[i]);
|
||||
int state = a3da.A3DAReader(data);
|
||||
@@ -115,7 +131,8 @@ namespace PD_Tool
|
||||
{
|
||||
KKdFARC.FARCFile file = farc.Files[i];
|
||||
a3da.Head.Format = format;
|
||||
file.Data = (choose == "1"|| choose == "3") ? a3da.A3DAWriter() : a3da.A3DCWriter();
|
||||
file.Data = (choose == "1"|| choose == "4")
|
||||
? a3da.A3DAWriter() : a3da.A3DCWriter();
|
||||
farc.Files[i] = file;
|
||||
}
|
||||
}
|
||||
@@ -129,7 +146,7 @@ namespace PD_Tool
|
||||
for (int i = 0; i < list.Count; i++)
|
||||
{
|
||||
KKdA3DA a3da;
|
||||
using (a3da = new KKdA3DA())
|
||||
using (a3da = new KKdA3DA(a3dcOpt))
|
||||
{
|
||||
data = farc.FileReader(list[i]);
|
||||
int state = a3da.A3DAReader(data);
|
||||
@@ -147,7 +164,7 @@ namespace PD_Tool
|
||||
string ext = Path.GetExtension(list[i]).ToLower();
|
||||
KKdA3DA a3da;
|
||||
for (int i1 = 1; i1 < div; i1++)
|
||||
using (a3da = new KKdA3DA())
|
||||
using (a3da = new KKdA3DA(a3dcOpt))
|
||||
{
|
||||
string file = filename + "_div_" + i1 + ext;
|
||||
data = farc.FileReader(file);
|
||||
@@ -164,7 +181,8 @@ namespace PD_Tool
|
||||
KKdFARC.FARCFile file = default;
|
||||
file.Name = list[i];
|
||||
a3daArray[i].Head.Format = format;
|
||||
file.Data = (choose == "1" || choose == "3") ? a3daArray[i].A3DAWriter() : a3daArray[i].A3DCWriter();
|
||||
file.Data = (choose == "1" || choose == "4")
|
||||
? a3daArray[i].A3DAWriter() : a3daArray[i].A3DCWriter();
|
||||
farc.Files.Add(file);
|
||||
}
|
||||
farc.Save();
|
||||
|
||||
Reference in New Issue
Block a user