Esempio n. 1
0
        public static ActorTemplate RenderActor(ActorInfo info, TileSet tileset, Palette p)
        {
            var image = RenderSimple.GetImage(info, tileset.Id);

            using (var s = FileSystem.OpenWithExts(image, tileset.Extensions))
            {
                var shp = new ShpReader(s);
                var bitmap = RenderShp(shp, p);

                try
                {
                    using (var s2 = FileSystem.OpenWithExts(image + "2", tileset.Extensions))
                    {
                        var shp2 = new ShpReader(s2);
                        var roofBitmap = RenderShp(shp2, p);

                        using (var g = System.Drawing.Graphics.FromImage(bitmap))
                            g.DrawImage(roofBitmap, 0, 0);
                    }
                }
                catch { }

                return new ActorTemplate
                {
                    Bitmap = bitmap,
                    Info = info,
                    Appearance = info.Traits.GetOrDefault<EditorAppearanceInfo>()
                };
            }
        }
Esempio n. 2
0
        public static ResourceTemplate RenderResourceType(ResourceTypeInfo info, string[] exts, Palette p)
        {
            var image = info.SpriteNames[0];
            using (var s = FileSystem.OpenWithExts(image, exts))
            {
                var shp = new ShpReader(s);
                var frame = shp[shp.ImageCount - 1];

                var bitmap = new Bitmap(shp.Width, shp.Height, PixelFormat.Format8bppIndexed);
                bitmap.Palette = MakeSystemPalette(p);
                var data = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height),
                    ImageLockMode.WriteOnly, PixelFormat.Format8bppIndexed);

                unsafe
                {
                    byte* q = (byte*)data.Scan0.ToPointer();
                    var stride = data.Stride;

                    for (var i = 0; i < shp.Width; i++)
                        for (var j = 0; j < shp.Height; j++)
                            q[j * stride + i] = frame.Image[i + shp.Width * j];
                }

                bitmap.UnlockBits(data);
                return new ResourceTemplate { Bitmap = bitmap, Info = info, Value = shp.ImageCount - 1 };
            }
        }
Esempio n. 3
0
        public static ActorTemplate RenderActor(ActorInfo info, TileSet tileset, Palette p)
        {
            var ri = info.Traits.Get<RenderSimpleInfo>();
            string image = null;
            if (ri.OverrideTheater != null)
                for (int i = 0; i < ri.OverrideTheater.Length; i++)
                    if (ri.OverrideTheater[i] == tileset.Id)
                        image = ri.OverrideImage[i];

            image = image ?? ri.Image ?? info.Name;
            using (var s = FileSystem.OpenWithExts(image, tileset.Extensions))
            {
                var shp = new ShpReader(s);
                var bitmap = RenderShp(shp, p);

                try
                {
                    using (var s2 = FileSystem.OpenWithExts(image + "2", tileset.Extensions))
                    {
                        var shp2 = new ShpReader(s2);
                        var roofBitmap = RenderShp(shp2, p);

                        using (var g = System.Drawing.Graphics.FromImage(bitmap))
                            g.DrawImage(roofBitmap, 0, 0);
                    }
                }
                catch { }

                return new ActorTemplate { Bitmap = bitmap, Info = info, Centered = !info.Traits.Contains<BuildingInfo>() };
            }
        }
Esempio n. 4
0
        static ActorTemplate RenderActor(ActorInfo info, TileSet tileset, Palette p)
        {
            var ri = info.Traits.Get<RenderSimpleInfo>();
            string image = null;
            if (ri.OverrideTheater != null)
                for (int i = 0; i < ri.OverrideTheater.Length; i++)
                    if (ri.OverrideTheater[i] == tileset.Id)
                        image = ri.OverrideImage[i];

            image = image ?? ri.Image ?? info.Name;
            using (var s = FileSystem.OpenWithExts(image, tileset.Extensions))
            {
                var shp = new ShpReader(s);
                var frame = shp[0];

                var bitmap = new Bitmap(shp.Width, shp.Height);
                var data = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height),
                    ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);

                unsafe
                {
                    int* q = (int*)data.Scan0.ToPointer();
                    var stride = data.Stride >> 2;

                    for (var i = 0; i < shp.Width; i++)
                        for (var j = 0; j < shp.Height; j++)
                            q[j * stride + i] = p.GetColor(frame.Image[i + shp.Width * j]).ToArgb();
                }

                bitmap.UnlockBits(data);
                return new ActorTemplate { Bitmap = bitmap, Info = info, Centered = !info.Traits.Contains<BuildingInfo>() };
            }
        }
Esempio n. 5
0
		public static ResourceTemplate RenderResourceType(ResourceTypeInfo info, string[] exts, IPalette p)
		{
			var image = info.EditorSprite;
			using (var s = GlobalFileSystem.OpenWithExts(image, exts))
			{
				// TODO: Do this properly
				var shp = new ShpReader(s) as ISpriteSource;
				var frame = shp.Frames.Last();

				var bitmap = new Bitmap(frame.Size.Width, frame.Size.Height, PixelFormat.Format8bppIndexed);
				bitmap.Palette = p.AsSystemPalette();
				var data = bitmap.LockBits(bitmap.Bounds(),
					ImageLockMode.WriteOnly, PixelFormat.Format8bppIndexed);

				unsafe
				{
					var q = (byte*)data.Scan0.ToPointer();
					var stride = data.Stride;

					for (var i = 0; i < frame.Size.Width; i++)
						for (var j = 0; j < frame.Size.Height; j++)
							q[j * stride + i] = frame.Data[i + frame.Size.Width * j];
				}

				bitmap.UnlockBits(data);
				return new ResourceTemplate { Bitmap = bitmap, Info = info, Value = shp.Frames.Count - 1 };
			}
		}
Esempio n. 6
0
			public ImageHeader(Stream stream, ShpReader reader)
			{
				this.reader = reader;
				var data = stream.ReadUInt32();
				FileOffset = data & 0xffffff;
				Format = (Format)(data >> 24);

				RefOffset = stream.ReadUInt16();
				RefFormat = (Format)stream.ReadUInt16();
			}
Esempio n. 7
0
        public ImageHeader(Stream stream, ShpReader reader)
        {
            this.reader = reader;
            var data = stream.ReadUInt32();

            FileOffset = data & 0xffffff;
            Format     = (Format)(data >> 24);

            RefOffset = stream.ReadUInt16();
            RefFormat = (Format)stream.ReadUInt16();
        }
Esempio n. 8
0
 Sprite[] LoadCursors(string filename)
 {
     try
     {
         var shp = new Dune2ShpReader(FileSystem.OpenWithExts(filename, exts));
         return shp.Select(a => modData.SheetBuilder.Add(a.Image, a.Size)).ToArray();
     }
     catch (IndexOutOfRangeException) // This will occur when loading a custom (RA-format) .shp
     {
         var shp = new ShpReader(FileSystem.OpenWithExts(filename, exts));
         return shp.Select(a => modData.SheetBuilder.Add(a.Image, shp.Size)).ToArray();
     }
 }
Esempio n. 9
0
        public static void LoadAndResolve( string shp )
        {
            try
            {
                if (Shps.ContainsKey(shp)) return;

                var reader = new ShpReader(FileSystem.OpenWithExts(shp, ".tem", ".sno", ".int", ".shp"));
                Shps[shp] = reader.Select(ih =>
                    {
                        var bmp = new Bitmap(reader.Width, reader.Height);
                        for (var j = 0; j < bmp.Height; j++)
                            for (var i = 0; i < bmp.Width; i++)
                                bmp.SetPixel(i, j, Pal.GetColor(ih.Image[j * bmp.Width + i]));
                        return bmp;
                    }).ToArray();
            }
            catch { }
        }
Esempio n. 10
0
        Sprite[] LoadSprites(string filename)
        {
            // TODO: Cleanly abstract file type detection
            if (filename.ToLower().EndsWith("r8"))
            {
                var r8 = new R8Reader(FileSystem.Open(filename));
                return r8.Select(a => SheetBuilder.Add(a.Image, a.Size, a.Offset)).ToArray();
            }

            BinaryReader reader = new BinaryReader(FileSystem.OpenWithExts(filename, exts));

            var ImageCount = reader.ReadUInt16();
            if (ImageCount == 0)
            {
                var shp = new ShpTSReader(FileSystem.OpenWithExts(filename, exts));
                return shp.Select(a => SheetBuilder.Add(a.Image, shp.Size)).ToArray();
            }
            else
            {
                var shp = new ShpReader(FileSystem.OpenWithExts(filename, exts));
                return shp.Frames.Select(a => SheetBuilder.Add(a.Image, shp.Size)).ToArray();
            }
        }
        static Bitmap RenderShp(ShpReader shp, Palette p)
        {
            var frame = shp[0];

            var bitmap = new Bitmap(shp.Width, shp.Height, PixelFormat.Format8bppIndexed);

            bitmap.Palette = p.AsSystemPalette();

            var data = bitmap.LockBits(bitmap.Bounds(),
                ImageLockMode.WriteOnly, PixelFormat.Format8bppIndexed);

            unsafe
            {
                byte* q = (byte*)data.Scan0.ToPointer();
                var stride2 = data.Stride;

                for (var i = 0; i < shp.Width; i++)
                    for (var j = 0; j < shp.Height; j++)
                        q[j * stride2 + i] = frame.Image[i + shp.Width * j];
            }

            bitmap.UnlockBits(data);
            return bitmap;
        }
Esempio n. 12
0
 static Sprite[] LoadSprites(string filename)
 {
     var shp = new ShpReader(FileSystem.OpenWithExts(filename, exts));
     return shp.Select(a => Game.modData.SheetBuilder.Add(a.Image, shp.Size)).ToArray();
 }
Esempio n. 13
0
        public void OpenSHP(string filename)
        {
            tmPlay.Enabled = false;
            tbPlay.Enabled = false;
            cbLoop.Enabled = false;
            cbLoop.Checked = false;
            bPNG = false;
            tbPlay.Value = 1;
            tbPlay.Maximum = 1;
            fnum = 1;

            FileStream F = new FileStream(filename, FileMode.Open, FileAccess.Read);
            FileStream S = new FileStream(filename, FileMode.Open, FileAccess.Read);
            BinaryReader rdr = new BinaryReader(S);

            int ImageCount = rdr.ReadUInt16();
            rdr.Close();
            S.Close();

            if (ImageCount == 0)
            {
                shp = new ShpTSReader(F);
                oldshp = false;
            }
            else
            {
                shpold = new ShpReader(F);
                oldshp = true;
            }
            Text = sname + sver + " - " + filename;

            ApplyNewPalette(lastpal);

            tbPlay.Enabled = true;
            cbLoop.Enabled = true;
        }
Esempio n. 14
0
        static Bitmap RenderShp(ShpReader shp, Palette p)
        {
            var frame = shp[0];

            var bitmap = new Bitmap(shp.Width, shp.Height);
            var data = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height),
                ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);

            unsafe
            {
                int* q = (int*)data.Scan0.ToPointer();
                var stride2 = data.Stride >> 2;

                for (var i = 0; i < shp.Width; i++)
                    for (var j = 0; j < shp.Height; j++)
                        q[j * stride2 + i] = p.GetColor(frame.Image[i + shp.Width * j]).ToArgb();
            }

            bitmap.UnlockBits(data);
            return bitmap;
        }