Exemplo n.º 1
0
        void CreateNewTileset()
        {
            Show();
            using (var formNew = new FormNew())
                if (DialogResult.OK == formNew.ShowDialog())
                {
                    srcfile = formNew.ImageFile;
                    size    = formNew.TileSize;

                    var bitmap = new Bitmap(srcfile);
                    if (!formNew.PaletteFromImage)
                    {
                        var terrainPalette = new ImmutablePalette(formNew.PaletteFile, new int[0]);

                        ColorPalette pal;
                        using (var b = new Bitmap(1, 1, PixelFormat.Format8bppIndexed))
                            pal = b.Palette;

                        for (var i = 0; i < 256; i++)
                        {
                            pal.Entries[i] = Color.FromArgb(terrainPalette.GetColor(i).ToArgb());
                        }

                        bitmap.Palette = pal;
                    }

                    InitializeSurface(bitmap);
                }
        }
Exemplo n.º 2
0
        void IUtilityCommand.Run(Utility utility, string[] args)
        {
            // HACK: The engine code assumes that Game.modData is set.
            var modData = Game.ModData = utility.ModData;

            var src         = args[1];
            var shadowIndex = Array.Empty <int>();

            if (args.Contains("--noshadow"))
            {
                Array.Resize(ref shadowIndex, shadowIndex.Length + 3);
                shadowIndex[shadowIndex.Length - 1] = 1;
                shadowIndex[shadowIndex.Length - 2] = 3;
                shadowIndex[shadowIndex.Length - 3] = 4;
            }

            var palette   = new ImmutablePalette(args[2], new[] { 0 }, shadowIndex);
            var palColors = new Color[Palette.Size];

            for (var i = 0; i < Palette.Size; i++)
            {
                palColors[i] = palette.GetColor(i);
            }

            var frames = FrameLoader.GetFrames(File.OpenRead(src), modData.SpriteLoaders, src, out _);

            var usePadding = !args.Contains("--nopadding");
            var count      = 0;
            var prefix     = Path.GetFileNameWithoutExtension(src);

            foreach (var frame in frames)
            {
                var frameSize = usePadding && !frame.DisableExportPadding ? frame.FrameSize : frame.Size;
                var offset    = usePadding && !frame.DisableExportPadding ? (frame.Offset - 0.5f * new float2(frame.Size - frame.FrameSize)).ToInt2() : int2.Zero;

                // shp(ts) may define empty frames
                if (frameSize.Width == 0 && frameSize.Height == 0)
                {
                    count++;
                    continue;
                }

                // TODO: expand frame with zero padding
                var pngData = frame.Data;
                if (frameSize != frame.Size)
                {
                    pngData = new byte[frameSize.Width * frameSize.Height];
                    for (var i = 0; i < frame.Size.Height; i++)
                    {
                        Buffer.BlockCopy(frame.Data, i * frame.Size.Width,
                                         pngData, (i + offset.Y) * frameSize.Width + offset.X,
                                         frame.Size.Width);
                    }
                }

                var png = new Png(pngData, SpriteFrameType.Indexed8, frameSize.Width, frameSize.Height, palColors);
                png.Save($"{prefix}-{(count++):D4}.png");
            }

            Console.WriteLine("Saved {0}-[0..{1}].png", prefix, count - 1);
        }