mirror of
https://mirror.ghproxy.com/https://github.com/dexyfex/CodeWalker
synced 2025-01-10 23:42:55 +08:00
Added placeholder class for loading encrypted strings block in RSC Meta (only in debug build), added ResourceAnalyzer to Meta class (also debug build only).
This commit is contained in:
parent
06f24af091
commit
e812674e69
@ -25,7 +25,7 @@ namespace CodeWalker.GameFiles
|
|||||||
// structure data
|
// structure data
|
||||||
public int Unknown_10h { get; set; } = 0x50524430;
|
public int Unknown_10h { get; set; } = 0x50524430;
|
||||||
public short Unknown_14h { get; set; } = 0x0079;
|
public short Unknown_14h { get; set; } = 0x0079;
|
||||||
public byte HasUselessData { get; set; }
|
public byte HasEncryptedStrings { get; set; }
|
||||||
public byte Unknown_17h { get; set; } = 0x00;
|
public byte Unknown_17h { get; set; } = 0x00;
|
||||||
public int Unknown_18h { get; set; } = 0x00000000;
|
public int Unknown_18h { get; set; } = 0x00000000;
|
||||||
public int RootBlockIndex { get; set; }
|
public int RootBlockIndex { get; set; }
|
||||||
@ -33,7 +33,7 @@ namespace CodeWalker.GameFiles
|
|||||||
public long EnumInfosPointer { get; set; }
|
public long EnumInfosPointer { get; set; }
|
||||||
public long DataBlocksPointer { get; set; }
|
public long DataBlocksPointer { get; set; }
|
||||||
public long NamePointer { get; set; }
|
public long NamePointer { get; set; }
|
||||||
public long UselessPointer { get; set; }
|
public long EncryptedStringsPointer { get; set; }
|
||||||
public short StructureInfosCount { get; set; }
|
public short StructureInfosCount { get; set; }
|
||||||
public short EnumInfosCount { get; set; }
|
public short EnumInfosCount { get; set; }
|
||||||
public short DataBlocksCount { get; set; }
|
public short DataBlocksCount { get; set; }
|
||||||
@ -53,10 +53,16 @@ namespace CodeWalker.GameFiles
|
|||||||
public ResourceSimpleArray<MetaDataBlock> DataBlocks { get; set; }
|
public ResourceSimpleArray<MetaDataBlock> DataBlocks { get; set; }
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
//public string[] Strings { get; set; }
|
//public string[] Strings { get; set; }
|
||||||
|
public MetaEncryptedStringsBlock EncryptedStrings { get; set; }
|
||||||
|
|
||||||
private string_r NameBlock = null;
|
private string_r NameBlock = null;
|
||||||
|
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
|
public ResourceAnalyzer Analyzer { get; set; }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Reads the data-block from a stream.
|
/// Reads the data-block from a stream.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -67,7 +73,7 @@ namespace CodeWalker.GameFiles
|
|||||||
// read structure data
|
// read structure data
|
||||||
this.Unknown_10h = reader.ReadInt32();
|
this.Unknown_10h = reader.ReadInt32();
|
||||||
this.Unknown_14h = reader.ReadInt16();
|
this.Unknown_14h = reader.ReadInt16();
|
||||||
this.HasUselessData = reader.ReadByte();
|
this.HasEncryptedStrings = reader.ReadByte();
|
||||||
this.Unknown_17h = reader.ReadByte();
|
this.Unknown_17h = reader.ReadByte();
|
||||||
this.Unknown_18h = reader.ReadInt32();
|
this.Unknown_18h = reader.ReadInt32();
|
||||||
this.RootBlockIndex = reader.ReadInt32();
|
this.RootBlockIndex = reader.ReadInt32();
|
||||||
@ -75,7 +81,7 @@ namespace CodeWalker.GameFiles
|
|||||||
this.EnumInfosPointer = reader.ReadInt64();
|
this.EnumInfosPointer = reader.ReadInt64();
|
||||||
this.DataBlocksPointer = reader.ReadInt64();
|
this.DataBlocksPointer = reader.ReadInt64();
|
||||||
this.NamePointer = reader.ReadInt64();
|
this.NamePointer = reader.ReadInt64();
|
||||||
this.UselessPointer = reader.ReadInt64();
|
this.EncryptedStringsPointer = reader.ReadInt64();
|
||||||
this.StructureInfosCount = reader.ReadInt16();
|
this.StructureInfosCount = reader.ReadInt16();
|
||||||
this.EnumInfosCount = reader.ReadInt16();
|
this.EnumInfosCount = reader.ReadInt16();
|
||||||
this.DataBlocksCount = reader.ReadInt16();
|
this.DataBlocksCount = reader.ReadInt16();
|
||||||
@ -113,6 +119,13 @@ namespace CodeWalker.GameFiles
|
|||||||
{ }
|
{ }
|
||||||
|
|
||||||
//Strings = MetaTypes.GetStrings(this);
|
//Strings = MetaTypes.GetStrings(this);
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
|
EncryptedStrings = reader.ReadBlockAt<MetaEncryptedStringsBlock>((ulong)EncryptedStringsPointer);
|
||||||
|
|
||||||
|
Analyzer = new ResourceAnalyzer(reader);
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -127,7 +140,7 @@ namespace CodeWalker.GameFiles
|
|||||||
this.EnumInfosPointer = this.EnumInfos?.FilePosition ?? 0;
|
this.EnumInfosPointer = this.EnumInfos?.FilePosition ?? 0;
|
||||||
this.DataBlocksPointer = this.DataBlocks?.FilePosition ?? 0;
|
this.DataBlocksPointer = this.DataBlocks?.FilePosition ?? 0;
|
||||||
this.NamePointer = this.NameBlock?.FilePosition ?? 0;
|
this.NamePointer = this.NameBlock?.FilePosition ?? 0;
|
||||||
this.UselessPointer = 0;
|
this.EncryptedStringsPointer = 0;
|
||||||
this.StructureInfosCount = (short)(this.StructureInfos?.Count ?? 0);
|
this.StructureInfosCount = (short)(this.StructureInfos?.Count ?? 0);
|
||||||
this.EnumInfosCount = (short)(this.EnumInfos?.Count ?? 0);
|
this.EnumInfosCount = (short)(this.EnumInfos?.Count ?? 0);
|
||||||
this.DataBlocksCount = (short)(this.DataBlocks?.Count ?? 0);
|
this.DataBlocksCount = (short)(this.DataBlocks?.Count ?? 0);
|
||||||
@ -135,7 +148,7 @@ namespace CodeWalker.GameFiles
|
|||||||
// write structure data
|
// write structure data
|
||||||
writer.Write(this.Unknown_10h);
|
writer.Write(this.Unknown_10h);
|
||||||
writer.Write(this.Unknown_14h);
|
writer.Write(this.Unknown_14h);
|
||||||
writer.Write(this.HasUselessData);
|
writer.Write(this.HasEncryptedStrings);
|
||||||
writer.Write(this.Unknown_17h);
|
writer.Write(this.Unknown_17h);
|
||||||
writer.Write(this.Unknown_18h);
|
writer.Write(this.Unknown_18h);
|
||||||
writer.Write(this.RootBlockIndex);
|
writer.Write(this.RootBlockIndex);
|
||||||
@ -143,7 +156,7 @@ namespace CodeWalker.GameFiles
|
|||||||
writer.Write(this.EnumInfosPointer);
|
writer.Write(this.EnumInfosPointer);
|
||||||
writer.Write(this.DataBlocksPointer);
|
writer.Write(this.DataBlocksPointer);
|
||||||
writer.Write(this.NamePointer);
|
writer.Write(this.NamePointer);
|
||||||
writer.Write(this.UselessPointer);
|
writer.Write(this.EncryptedStringsPointer);
|
||||||
writer.Write(this.StructureInfosCount);
|
writer.Write(this.StructureInfosCount);
|
||||||
writer.Write(this.EnumInfosCount);
|
writer.Write(this.EnumInfosCount);
|
||||||
writer.Write(this.DataBlocksCount);
|
writer.Write(this.DataBlocksCount);
|
||||||
@ -584,7 +597,48 @@ namespace CodeWalker.GameFiles
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[TC(typeof(EXP))] public class MetaEncryptedStringsBlock : ResourceSystemBlock
|
||||||
|
{
|
||||||
|
public override long BlockLength
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return 4 + Count;// + PadCount;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public uint Count { get; set; }
|
||||||
|
public byte[] EncryptedData { get; set; }
|
||||||
|
//public uint PadCount { get; set; }
|
||||||
|
//public byte[] PadData { get; set; }
|
||||||
|
//public string[] TestStrings { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
public override void Read(ResourceDataReader reader, params object[] parameters)
|
||||||
|
{
|
||||||
|
Count = MetaTypes.SwapBytes(reader.ReadUInt32()); //okay. so this is big endian
|
||||||
|
EncryptedData = reader.ReadBytes((int)Count);
|
||||||
|
//PadCount = (uint)((8 - (reader.Position % 8)) % 8);//maybe next block just needs to be aligned instead?
|
||||||
|
//PadData = reader.ReadBytes((int)PadCount);
|
||||||
|
|
||||||
|
|
||||||
|
////none of these work :(
|
||||||
|
//var strs = new List<string>();
|
||||||
|
//foreach (var key in GTA5Keys.PC_NG_KEYS)
|
||||||
|
//{
|
||||||
|
// var decr = GTACrypto.DecryptNG(EncryptedData, key);
|
||||||
|
// strs.Add(Encoding.ASCII.GetString(decr));
|
||||||
|
//}
|
||||||
|
//TestStrings = strs.ToArray();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Write(ResourceDataWriter writer, params object[] parameters)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user