Пример #1
0
        static void ConvertClientVersion(int fromVersion, int toVersion, bool useAlpha)
        {
            string datFile = fromVersion.ToString() + "/Tibia.dat";
            string sprFile = fromVersion.ToString() + "/Tibia.spr";

            if (!File.Exists(datFile) || !File.Exists(sprFile))
            {
                Console.WriteLine("Tibia.dat or Tibia.spr doesn't exist");
                Environment.Exit(0);
                return;
            }

            Directory.CreateDirectory(toVersion.ToString());
            string newDatFile = toVersion.ToString() + "/Tibia.dat";
            string newSprFile = toVersion.ToString() + "/Tibia.spr";

            var datParser = new Core.Sprites.ContentData(File.ReadAllBytes(datFile), fromVersion);

            datParser.Parse();

            byte[] result = datParser.ConvertTo(toVersion);
            File.WriteAllBytes(newDatFile, result);

            var sprParser = new Core.Sprites.ContentSprites(File.ReadAllBytes(sprFile), fromVersion, useAlpha);

            sprParser.Parse();

            result = sprParser.ConvertTo(toVersion);
            File.WriteAllBytes(newSprFile, result);

            Console.WriteLine("Convertion Successfull to " + toVersion + ".");
        }
Пример #2
0
        static void GenerateEverything(int clientVersion, bool useAlpha)
        {
            // generating new appearances
            string datFile = clientVersion.ToString() + "/Tibia.dat";
            string sprFile = clientVersion.ToString() + "/Tibia.spr";

            if (!File.Exists(datFile) || !File.Exists(sprFile))
            {
                Console.WriteLine("Tibia.dat or Tibia.spr doesn't exist");
                Environment.Exit(0);
                return;
            }

            Appearances appearances = GenerateAppearances(datFile, clientVersion);

            // loading tibia.spr into chunks
            Core.Sprites.ContentSprites sprParser;
            try {
                var bytes = File.ReadAllBytes(sprFile);
                sprParser = new Core.Sprites.ContentSprites(bytes, clientVersion, useAlpha);
                sprParser.Parse();
            } catch (Exception e) {
                Console.WriteLine(e.Message + '\n' + e.StackTrace);
                Environment.Exit(0);
                return;
            }

            Directory.CreateDirectory(clientVersion + "/sprites");

            int start = 0;

            SaveSprites(appearances.Outfits, ref start, sprParser, clientVersion);
            SaveSprites(appearances.Effects, ref start, sprParser, clientVersion);
            SaveSprites(appearances.Missles, ref start, sprParser, clientVersion);
            SaveSprites(appearances.Objects, ref start, sprParser, clientVersion);

            Task.WaitAll(tasks.ToArray());

            // saving appearances.dat (with the respective version)
            using (FileStream file = File.Create(clientVersion + "/appearances.dat")) {
                appearances.WriteTo(file);
            }

            // saving spritesheets information (catalog-content)
            using (FileStream file = File.Create(clientVersion + "/catalog-content.json")) {
                jsonTokens.Sort(ITokenItemSort);
                foreach (var token in jsonTokens)
                {
                    catalogJson.Add(token.GetJObject());
                }

                string str = catalogJson.ToString();
                file.Write(Encoding.ASCII.GetBytes(str), 0, str.Length);
            }
        }
Пример #3
0
        static void Main(string[] args)
        {
            // Generating New appearances
            Appearances appearances0001 = GenerateAppearances001();

            // Creating the sprites folder to save files in.
            Directory.CreateDirectory("sprites");

            // Loading tibia.spr into chunks
            Core.Sprites.ContentSprites sprParser;
            try {
                var bytes = File.ReadAllBytes("tibia.spr");
                sprParser = new Core.Sprites.ContentSprites(bytes);
                sprParser.Parse();
            } catch (Exception e) {
                Console.WriteLine(e.Message);
                Environment.Exit(0);
                return;
            }

            int start = 0;

            RepeatedField <uint>[] sortedFrameGroups = new RepeatedField <uint> [4];

            // This is following how tibia did it exactly,
            // Tibia did every appearances group (32x32, 32x64, 64x32, 64x64)
            // Outfits, Effects, Missles, Items
            // This doesn't affect how it works, you can save the way you want..
            for (int i = 0; i < 4; i++)
            {
                sortedFrameGroups[i] = new RepeatedField <uint>();
            }
            DeploySprites(appearances0001.Outfits, ref sortedFrameGroups);
            SaveStaticBitmaps(sortedFrameGroups[0], ref start, ref sprParser, 32, 32);
            SaveStaticBitmaps(sortedFrameGroups[1], ref start, ref sprParser, 32, 64);
            SaveStaticBitmaps(sortedFrameGroups[2], ref start, ref sprParser, 64, 32);
            SaveStaticBitmaps(sortedFrameGroups[3], ref start, ref sprParser, 64, 64);

            for (int i = 0; i < 4; i++)
            {
                sortedFrameGroups[i] = new RepeatedField <uint>();
            }
            DeploySprites(appearances0001.Effects, ref sortedFrameGroups);
            SaveStaticBitmaps(sortedFrameGroups[0], ref start, ref sprParser, 32, 32);
            SaveStaticBitmaps(sortedFrameGroups[1], ref start, ref sprParser, 32, 64);
            SaveStaticBitmaps(sortedFrameGroups[2], ref start, ref sprParser, 64, 32);
            SaveStaticBitmaps(sortedFrameGroups[3], ref start, ref sprParser, 64, 64);

            for (int i = 0; i < 4; i++)
            {
                sortedFrameGroups[i] = new RepeatedField <uint>();
            }
            DeploySprites(appearances0001.Missles, ref sortedFrameGroups);
            SaveStaticBitmaps(sortedFrameGroups[0], ref start, ref sprParser, 32, 32);
            SaveStaticBitmaps(sortedFrameGroups[1], ref start, ref sprParser, 32, 64);
            SaveStaticBitmaps(sortedFrameGroups[2], ref start, ref sprParser, 64, 32);
            SaveStaticBitmaps(sortedFrameGroups[3], ref start, ref sprParser, 64, 64);

            for (int i = 0; i < 4; i++)
            {
                sortedFrameGroups[i] = new RepeatedField <uint>();
            }
            DeploySprites(appearances0001.Objects, ref sortedFrameGroups);
            SaveStaticBitmaps(sortedFrameGroups[0], ref start, ref sprParser, 32, 32);
            SaveStaticBitmaps(sortedFrameGroups[1], ref start, ref sprParser, 32, 64);
            SaveStaticBitmaps(sortedFrameGroups[2], ref start, ref sprParser, 64, 32);
            SaveStaticBitmaps(sortedFrameGroups[3], ref start, ref sprParser, 64, 64);

            // saving appearances.dat (with the respective version)
            using (FileStream file1 = File.Create("appearances001.dat")) {
                appearances0001.WriteTo(file1);
            }

            // This is a helper, by using some sort of data structure (i.e interval tree)
            // you can load any sprite quickly at runtime
            using (FileStream file2 = File.Create("catalog-content.json")) {
                string str = catalogJson.ToString();
                file2.Write(Encoding.ASCII.GetBytes(str), 0, str.Length);
            }
        }