Last big feature for this build

-Improved Color Editor
-Fixed Add Display ID in the LOC Editor
-Added a Rename Display ID in the LOC Editor
This commit is contained in:
MattNL
2022-03-25 15:38:47 -04:00
parent 53b358001b
commit 274aa43b35
17 changed files with 3509 additions and 703 deletions
+57 -3
View File
@@ -14,10 +14,11 @@ namespace PckStudio.Classes
byte[] data;
List<byte> extradata = new List<byte>();
public List<object[]> entries = new List<object[]>();
public List<object[]> waterEntries = new List<object[]>();
public void Open(byte[] filePath)
{
data = filePath;
COL.Open(this, entries, data, extradata);
COL.Open(this, entries, waterEntries, data, extradata);
foreach (object[] obj in entries)
{
Console.WriteLine(obj[0].ToString() + " - #" + obj[1]);
@@ -29,11 +30,17 @@ namespace PckStudio.Classes
SaveData.AddRange(new byte[] { 0x00, 0x00, 0x00, 0x01 });
Console.WriteLine(entries.Count);
List<byte> ItemAmmount = new List<byte>();
List<byte> WaterItemAmmount = new List<byte>();
ItemAmmount.AddRange(BitConverter.GetBytes(entries.Count));
WaterItemAmmount.AddRange(BitConverter.GetBytes(waterEntries.Count / 3));
ItemAmmount.Reverse();
WaterItemAmmount.Reverse();
byte[] ItemNum = ItemAmmount.ToArray();
byte[] WaterItemNum = WaterItemAmmount.ToArray();
ItemNum.Reverse();
WaterItemNum.Reverse();
Console.WriteLine(BitConverter.ToString(ItemNum));
Console.WriteLine(BitConverter.ToString(WaterItemNum));
SaveData.AddRange(ItemNum);
foreach (object[] obj in entries)
{
@@ -45,12 +52,25 @@ namespace PckStudio.Classes
SaveData.Add(data[SaveData.Count]);
SaveData.AddRange(StringToByteArrayFastest(obj[1].ToString()));
}
SaveData.AddRange(extradata);
SaveData.AddRange(WaterItemNum);
foreach (object[] obj in waterEntries)
{
//Console.WriteLine(obj[0] + " - #" + obj[1]);
string name = obj[0].ToString();
if (!name.EndsWith("(Underwater)") && !name.EndsWith("(Fog)"))
{
byte[] NameLength = (BitConverter.GetBytes(obj[0].ToString().Length));
SaveData.Add(NameLength[1]);
SaveData.Add(NameLength[0]);
SaveData.AddRange(Encoding.ASCII.GetBytes(obj[0].ToString()));
}
SaveData.AddRange(StringToByteArrayFastest(obj[1].ToString()));
}
return SaveData.ToArray();
//File.WriteAllBytes(Path.GetDirectoryName(filePath) + "\\coloursSaved.col", SaveData.ToArray());
}
}
public static void Open(COLFile This, List<object[]> entries, byte[] data, List<byte> extradata)
public static void Open(COLFile This, List<object[]> entries, List<object[]> waterEntries, byte[] data, List<byte> extradata)
{
List<byte> MaxEntArrTemp = new List<byte>();
MaxEntArrTemp.AddRange(data.Skip(4).Take(4));
@@ -79,6 +99,40 @@ namespace PckStudio.Classes
Console.WriteLine(data.Length);
Console.WriteLine(data.Length - LeftAt);
extradata.AddRange(data.Skip(LeftAt).Take((data.Length) - LeftAt).ToArray());
try
{
List<byte> MaxEntArrTempB = new List<byte>();
MaxEntArrTempB.AddRange(extradata.Skip(-1).Take(4));
MaxEntArrTempB.Reverse();
int MaxEntriesB = BitConverter.ToInt32(MaxEntArrTempB.ToArray(), 0);
int LeftAtB = 4;
Console.WriteLine("MaxEntries (Extra Data) - " + MaxEntriesB);
for (int j = 0; j < MaxEntriesB; j++)
{
List<byte> ItemNameLength = new List<byte>();
ItemNameLength.AddRange(extradata.Skip(LeftAtB).Take(2));
ItemNameLength.Reverse();
int EntryLength = BitConverter.ToInt16(ItemNameLength.ToArray(), 0);
//Console.WriteLine(EntryLength);
byte[] ItemName = (extradata.Skip(LeftAtB + 2).Take(EntryLength).ToArray());
byte[] ItemHex = (extradata.Skip(LeftAtB + 2 + EntryLength).Take(4).ToArray());
byte[] ItemHexB = (extradata.Skip(LeftAtB + 6 + EntryLength).Take(4).ToArray());
byte[] ItemHexC = (extradata.Skip(LeftAtB + 10 + EntryLength).Take(4).ToArray());
object[] outentry = { System.Text.Encoding.Default.GetString(ItemName), BitConverter.ToString(ItemHex).Replace("-", "") };
object[] outentryB = { System.Text.Encoding.Default.GetString(ItemName) + " (Underwater)", BitConverter.ToString(ItemHexB).Replace("-", "") };
object[] outentryC = { System.Text.Encoding.Default.GetString(ItemName) + " (Fog)", BitConverter.ToString(ItemHexC).Replace("-", "") };
waterEntries.Add(outentry);
waterEntries.Add(outentryB);
waterEntries.Add(outentryC);
LeftAtB = LeftAtB + 14 + EntryLength;
}
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
}