Some buffer fixes for LM2

This commit is contained in:
KillzXGaming 2019-07-27 11:49:47 -04:00
parent 91f71c1cc5
commit 1885319061
7 changed files with 125 additions and 60 deletions

Binary file not shown.

View file

@ -187,7 +187,7 @@ namespace FirstPlugin.LuigisMansion.DarkMoon
UShortToFloatDecode(reader.ReadInt16()), UShortToFloatDecode(reader.ReadInt16()),
UShortToFloatDecode(reader.ReadInt16())); UShortToFloatDecode(reader.ReadInt16()));
// reader.BaseStream.Position += 0x4; reader.BaseStream.Position += 0x4;
vert.pos = Vector3.TransformPosition(vert.pos, mesh.Transform); vert.pos = Vector3.TransformPosition(vert.pos, mesh.Transform);
vert.uv0 = NormalizeUvCoordsToFloat(reader.ReadUInt16(), reader.ReadUInt16()); vert.uv0 = NormalizeUvCoordsToFloat(reader.ReadUInt16(), reader.ReadUInt16());
@ -445,7 +445,7 @@ namespace FirstPlugin.LuigisMansion.DarkMoon
{ 0x314A20AEFADABB22, new FormatInfo(VertexDataFormat.Float32_32_32, 0x18)}, { 0x314A20AEFADABB22, new FormatInfo(VertexDataFormat.Float32_32_32, 0x18)},
{ 0x0F3F68A287C2B716, new FormatInfo(VertexDataFormat.Float32_32_32, 0x18)}, { 0x0F3F68A287C2B716, new FormatInfo(VertexDataFormat.Float32_32_32, 0x18)},
{ 0x27F993771090E6EB, new FormatInfo(VertexDataFormat.Float32_32_32, 0x1C)}, { 0x27F993771090E6EB, new FormatInfo(VertexDataFormat.Float32_32_32, 0x1C)},
{ 0x4E315C83A856FBF7, new FormatInfo(VertexDataFormat.Float32, 0x1C)}, { 0x4E315C83A856FBF7, new FormatInfo(VertexDataFormat.Float32_32_32, 0x1C)},
{ 0xBD15F722F07FC596, new FormatInfo(VertexDataFormat.Float32_32_32, 0x1C)}, { 0xBD15F722F07FC596, new FormatInfo(VertexDataFormat.Float32_32_32, 0x1C)},
{ 0xFBACD243DDCC31B7, new FormatInfo(VertexDataFormat.Float32_32_32, 0x1C)}, { 0xFBACD243DDCC31B7, new FormatInfo(VertexDataFormat.Float32_32_32, 0x1C)},
{ 0x8A4CC565333626D9, new FormatInfo(VertexDataFormat.Float32_32, 0x1C)}, { 0x8A4CC565333626D9, new FormatInfo(VertexDataFormat.Float32_32, 0x1C)},

View file

@ -247,6 +247,17 @@ namespace FirstPlugin
} }
} }
} }
static uint NameHash(string name)
{
uint result = 0;
for (int i = 0; i < name.Length; i++)
{
result = name[i] + result * 0x00000065;
}
return result;
}
public byte[] Save() public byte[] Save()
{ {
sarcData.Files.Clear(); sarcData.Files.Clear();

View file

@ -63,7 +63,6 @@ namespace FirstPlugin
return raw; return raw;
} }
//Decryption process from https://github.com/TheFearsomeDzeraora/BFTTFutil/blob/master/Program.cs
public void Load(System.IO.Stream stream) public void Load(System.IO.Stream stream)
{ {
Text = FileName; Text = FileName;

View file

@ -0,0 +1,106 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using Toolbox.Library;
using Toolbox.Library.IO;
using System.Drawing;
namespace FirstPlugin
{
public class GITextureContainer : TreeNodeFile, IFileFormat
{
public FileType FileType { get; set; } = FileType.Image;
public bool CanSave { get; set; }
public string[] Description { get; set; } = new string[] { "GT1" };
public string[] Extension { get; set; } = new string[] { "*.gt1" };
public string FileName { get; set; }
public string FilePath { get; set; }
public IFileInfo IFileInfo { get; set; }
public bool Identify(System.IO.Stream stream)
{
using (var reader = new Toolbox.Library.IO.FileReader(stream, true))
{
return reader.CheckSignature(4, "GT1G");
}
}
public Type[] Types
{
get
{
List<Type> types = new List<Type>();
return types.ToArray();
}
}
public void Load(Stream stream)
{
Read(new FileReader(stream));
}
public void Unload()
{
}
public byte[] Save()
{
return null;
}
public void Read(FileReader reader)
{
long StartPos = reader.Position;
string Magic = reader.ReadString(8);
uint FileSize = reader.ReadUInt32();
uint DataOffset = reader.ReadUInt32();
uint TextureCount = reader.ReadUInt32();
uint unk = reader.ReadUInt32();
uint unk2 = reader.ReadUInt32();
uint[] unk3s = reader.ReadUInt32s((int)TextureCount);
for (int i = 0; i < TextureCount; i++)
{
reader.SeekBegin(StartPos + DataOffset + (i * 4));
uint InfoOffset = reader.ReadUInt32();
reader.SeekBegin(DataOffset + InfoOffset);
byte unk4 = reader.ReadByte();
byte format = reader.ReadByte();
}
}
}
public class GITexture : STGenericTexture
{
public override bool CanEdit { get; set; } = false;
public byte[] ImageData;
public override TEX_FORMAT[] SupportedFormats
{
get
{
return new TEX_FORMAT[] {
TEX_FORMAT.R8G8B8A8_UNORM,
};
}
}
public override void SetImageData(Bitmap bitmap, int ArrayLevel)
{
}
public override byte[] GetImageData(int ArrayLevel = 0, int MipLevel = 0)
{
return ImageData;
}
}
}

View file

@ -91,15 +91,16 @@ namespace FirstPlugin
var fileEntry = new FileEntry(); var fileEntry = new FileEntry();
reader.SeekBegin(Offsets[i]); reader.SeekBegin(Offsets[i]);
string Magic = reader.ReadString(8); string Magic = reader.ReadString(8);
reader.Seek(-8);
switch (Magic) switch (Magic)
{ {
case "G1TG0060": //PC or Wii U Texture case "G1TG0060": //PC or Wii U Texture
GITextureContainer GITextureU = new GITextureContainer(); GITextureContainer GITextureU = new GITextureContainer();
GITextureU.Read(reader, true); GITextureU.Read(reader);
break; break;
case "GT1G0600": //Switch Texture case "GT1G0600": //Switch Texture
GITextureContainer GITexture = new GITextureContainer(); GITextureContainer GITexture = new GITextureContainer();
GITexture.Read(reader, false); GITexture.Read(reader);
break; break;
} }
@ -111,60 +112,7 @@ namespace FirstPlugin
} }
} }
} }
public class GITextureContainer
{
public void Read(FileReader reader, bool IsWiiU)
{
long StartPos = reader.Position;
uint FileSize = reader.ReadUInt32();
uint DataOffset = reader.ReadUInt32();
uint TextureCount = reader.ReadUInt32();
uint unk = reader.ReadUInt32();
uint unk2 = reader.ReadUInt32();
uint[] unk3s = reader.ReadUInt32s((int)TextureCount);
for (int i = 0; i < TextureCount; i++)
{
reader.SeekBegin(StartPos + DataOffset + (i * 4));
uint InfoOffset = reader.ReadUInt32();
reader.SeekBegin(DataOffset + InfoOffset);
byte unk4 = reader.ReadByte();
byte format = reader.ReadByte();
}
}
}
public class GITexture : STGenericTexture
{
public override bool CanEdit { get; set; } = false;
public byte[] ImageData;
public override TEX_FORMAT[] SupportedFormats
{
get
{
return new TEX_FORMAT[] {
TEX_FORMAT.R8G8B8A8_UNORM,
};
}
}
public override void SetImageData(Bitmap bitmap, int ArrayLevel)
{
}
public override byte[] GetImageData(int ArrayLevel = 0, int MipLevel = 0)
{
return ImageData;
}
}
public void Unload() public void Unload()
{ {

View file

@ -205,7 +205,8 @@
<Compile Include="FileFormats\Archives\APAK.cs" /> <Compile Include="FileFormats\Archives\APAK.cs" />
<Compile Include="FileFormats\Archives\ARC.cs" /> <Compile Include="FileFormats\Archives\ARC.cs" />
<Compile Include="FileFormats\Archives\GFA.cs" /> <Compile Include="FileFormats\Archives\GFA.cs" />
<Compile Include="FileFormats\Archives\HyruleWarriors\HWBinGzResource.cs" /> <Compile Include="FileFormats\HyruleWarriors\GITextureContainer.cs" />
<Compile Include="FileFormats\HyruleWarriors\HWBinGzResource.cs" />
<Compile Include="FileFormats\Archives\IGA_PAK.cs" /> <Compile Include="FileFormats\Archives\IGA_PAK.cs" />
<Compile Include="FileFormats\Archives\LM2\LM2_ChunkTable.cs" /> <Compile Include="FileFormats\Archives\LM2\LM2_ChunkTable.cs" />
<Compile Include="FileFormats\Archives\LM2\LM2_DICT.cs" /> <Compile Include="FileFormats\Archives\LM2\LM2_DICT.cs" />