diff --git a/ArcFormats/ArcFormats.csproj b/ArcFormats/ArcFormats.csproj
index 39752fe1..0057045d 100644
--- a/ArcFormats/ArcFormats.csproj
+++ b/ArcFormats/ArcFormats.csproj
@@ -133,6 +133,7 @@
+
diff --git a/ArcFormats/Cri/ImageSPC.cs b/ArcFormats/Cri/ImageSPC.cs
index bd5da105..772aef31 100644
--- a/ArcFormats/Cri/ImageSPC.cs
+++ b/ArcFormats/Cri/ImageSPC.cs
@@ -33,7 +33,7 @@ namespace GameRes.Formats.Cri
[Export(typeof(ImageFormat))]
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 uint Signature { get { return 0; } }
diff --git a/ArcFormats/Kid/ImageSPC.cs b/ArcFormats/Kid/ImageSPC.cs
new file mode 100644
index 00000000..30ccd141
--- /dev/null
+++ b/ArcFormats/Kid/ImageSPC.cs
@@ -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");
+ }
+ }
+}