feat: SPC-PS2 Image Format

This commit is contained in:
ManicSteiner 2023-12-16 21:46:17 +08:00
parent 30b875efe8
commit 0434623308
3 changed files with 46 additions and 1 deletions

View File

@ -133,6 +133,7 @@
<Compile Include="Ism\ImagePNG.cs" /> <Compile Include="Ism\ImagePNG.cs" />
<Compile Include="Kid\ArcDATRAW.cs" /> <Compile Include="Kid\ArcDATRAW.cs" />
<Compile Include="Kid\ImageLBG.cs" /> <Compile Include="Kid\ImageLBG.cs" />
<Compile Include="Kid\ImageSPC.cs" />
<Compile Include="Kogado\ArcARC.cs" /> <Compile Include="Kogado\ArcARC.cs" />
<Compile Include="Ice\ImageIBM.cs" /> <Compile Include="Ice\ImageIBM.cs" />
<Compile Include="Ice\ScriptISD.cs" /> <Compile Include="Ice\ScriptISD.cs" />

View File

@ -33,7 +33,7 @@ namespace GameRes.Formats.Cri
[Export(typeof(ImageFormat))] [Export(typeof(ImageFormat))]
public class SpcFormat : XtxFormat public class SpcFormat : XtxFormat
{ {
public override string Tag { get { return "SPC"; } } public override string Tag { get { return "SPC/Xbox360"; } }
public override string Description { get { return "CRI MiddleWare compressed texture format"; } } public override string Description { get { return "CRI MiddleWare compressed texture format"; } }
public override uint Signature { get { return 0; } } public override uint Signature { get { return 0; } }

View File

@ -0,0 +1,44 @@
using GameRes.Compression;
using System.ComponentModel.Composition;
using System.IO;
namespace GameRes.Formats.Kid
{
[Export(typeof(ImageFormat))]
public class SpcFormat: LbgFormat
{
public override string Tag { get { return "SPC/PS2"; } }
public override string Description { get { return "PS2 CRI MiddleWare compressed texture format"; } }
public override uint Signature { get { return 0; } }
public SpcFormat()
{
Extensions = new string[] { "spc" };
}
public override ImageMetaData ReadMetaData(IBinaryStream stream)
{
uint unpacked_size = stream.Signature;
if (unpacked_size <= 0x20 || unpacked_size > 0x5000000) // ~83MB
return null;
stream.Position = 4;
using (var lzss = new LzssStream(stream.AsStream, LzssMode.Decompress, true))
using (var input = new SeekableStream(lzss))
using (var lbg = new BinaryStream(input, stream.Name))
return base.ReadMetaData(lbg);
}
public override ImageData Read(IBinaryStream stream, ImageMetaData info)
{
stream.Position = 4;
using (var lzss = new LzssStream(stream.AsStream, LzssMode.Decompress, true))
using (var input = new SeekableStream(lzss))
using (var lbg = new BinaryStream(input, stream.Name))
return base.Read(lbg, info);
}
public override void Write(Stream file, ImageData image)
{
throw new System.NotImplementedException("SpcFormat.Write not implemented");
}
}
}