diff --git a/src/GMSprite.cs b/src/GMSprite.cs index 3c13bb9..f4aff20 100644 --- a/src/GMSprite.cs +++ b/src/GMSprite.cs @@ -21,11 +21,17 @@ namespace Palettizer public GMSpriteCompositeImage CompositeImage { get; set; } } + public struct GMSpriteLayer + { + public string Name { get; set; } // this is actually a GUID lol + } + public struct GMSprite { public GMTextureGroupID TextureGroupID { get; set; } public GMSpriteFrame[] Frames { get; set; } - public string ResourceType { get; set; } + public GMSpriteLayer[] Layers { get; set; } + public string ResourceType { get; set; } public string Name { get; set; } } } diff --git a/src/Palette.cs b/src/Palette.cs index fc94473..b32b78f 100644 --- a/src/Palette.cs +++ b/src/Palette.cs @@ -27,9 +27,9 @@ namespace Palettizer if (GrayscaleToColorMap.ContainsKey((byte)average)) { var increment = 1; - for (var i = 0; i < 256 - GrayscaleCount; i += 1) + for (var i = 0; i < 256; i += 1) { - average += increment; + average = (average + increment) % 256; if (!GrayscaleToColorMap.ContainsKey((byte)average)) { @@ -38,7 +38,6 @@ namespace Palettizer increment = ((increment > 0) ? (increment + 1) : (increment - 1)) * -1; // up by 1, down by 2, up by 3, etc } - } GrayscaleToColorMap.Add((byte)average, color); diff --git a/src/Program.cs b/src/Program.cs index b5fb598..278d331 100644 --- a/src/Program.cs +++ b/src/Program.cs @@ -46,10 +46,6 @@ namespace Palettizer console.Out.Write("Parsing: " + gmProject.Name + "\n"); - if (Directory.Exists("output")) - { - Directory.Delete("output", true); - } var outputDir = Directory.CreateDirectory("output"); var palette = new Palette(); @@ -75,9 +71,10 @@ namespace Palettizer { console.Out.Write(sprite.Name + "\n"); - foreach (var spriteFrame in sprite.Frames) + for (var i = 0; i < sprite.Frames.Length; i += 1) { - ImageResult image; + var spriteFrame = sprite.Frames[i]; + ImageResult image; byte[] grayscaleImage; var spriteImageFilePath = Path.Combine(spriteDir, spriteFrame.CompositeImage.FrameID.Name + ".png"); @@ -89,17 +86,24 @@ namespace Palettizer grayscaleImage = AddSpriteToPalette(palette, image, console); } - var spriteWriteDir = Path.Combine(outputDir.FullName, Path.GetRelativePath(projectDir.FullName, spriteDir)); - Directory.CreateDirectory(spriteWriteDir); + var spriteWriteDir = Path.Combine(outputDir.FullName, Path.GetRelativePath(projectDir.FullName, spriteDir)); + Directory.CreateDirectory(spriteWriteDir); - var spriteWritePath = Path.Combine(spriteWriteDir, spriteFrame.CompositeImage.FrameID.Name + ".png"); - // Now write the image to output directory as grayscale - using (var stream = File.OpenWrite(spriteWritePath)) + var spriteWritePath = Path.Combine(spriteWriteDir, spriteFrame.CompositeImage.FrameID.Name + ".png"); + // Now write the image to output directory as grayscale + using (var stream = File.OpenWrite(spriteWritePath)) { writer.WritePng(grayscaleImage, image.Width, image.Height, StbImageWriteSharp.ColorComponents.RedGreenBlueAlpha, stream); } + + // Now write out the layer + // There's just 1 always because nobody uses GM's shit ass sprite editor + var layerSpriteWriteDir = Path.Combine(spriteWriteDir, "layers", sprite.Frames[i].CompositeImage.FrameID.Name); + Directory.CreateDirectory(layerSpriteWriteDir); + var layerSpriteWritePath = Path.Combine(layerSpriteWriteDir, sprite.Layers[0].Name + ".png"); + File.Copy(spriteWritePath, layerSpriteWritePath); } - } + } } } @@ -136,6 +140,7 @@ namespace Palettizer } } + // build the alternate rows for (var j = 1; j < paletteImage.Width; j += 1) { var colorPalette = new Color[256];