Exemplo n.º 1
0
        public static void decompile_acmd(string mtable, string motionFolder, string output)
        {
            string script_dir = Path.Combine(output, "animcmd");

            Directory.CreateDirectory(script_dir);

            Console.WriteLine($">\tDecompile ACMD.. -> \"{script_dir}\"");

            Endianness endian = Endianness.Big;
            SortedList <string, ACMDFile> files = new SortedList <string, ACMDFile>();

            Dictionary <uint, string> animations = new Dictionary <uint, string>();

            if (!string.IsNullOrEmpty(motionFolder))
            {
                animations = ParseAnimations(motionFolder);
            }

            //string dir = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
            //if (mtable.Contains(Path.DirectorySeparatorChar))
            //    dir = Path.GetDirectoryName(mtable);
            string dir = Path.GetDirectoryName(mtable);

            foreach (string path in Directory.EnumerateFiles(dir, "*.bin"))
            {
                var file = new ACMDFile(path);
                files.Add(Path.GetFileNameWithoutExtension(path), file);
                endian = file.Endian;
            }
            var table  = new MTable(mtable, endian);
            var hashes = new List <uint>(table.ToList());

            write_mlist(table, animations, Path.Combine(output, "fighter.mlist"));

            // workaround for unlisted moves
            foreach (var f in files)
            {
                foreach (var s in f.Value.Scripts)
                {
                    if (!hashes.Contains(s.Key))
                    {
                        hashes.Add(s.Key);
                    }
                }
            }


            foreach (uint u in hashes)
            {
                string animName = $"0x{u:X8}";
                if (animations.ContainsKey(u))
                {
                    animName = animations[u];
                }

#if DEBUG
                Console.WriteLine($">\tDecompiling {animName}..");
#endif

                ACMDScript game = null, effect = null, sound = null, expression = null;
                if (files.ContainsKey("game") && files["game"].Scripts.ContainsKey(u))
                {
                    game = (ACMDScript)files["game"].Scripts[u];
                }
                if (files.ContainsKey("effect") && files["effect"].Scripts.ContainsKey(u))
                {
                    effect = (ACMDScript)files["effect"].Scripts[u];
                }
                if (files.ContainsKey("sound") && files["sound"].Scripts.ContainsKey(u))
                {
                    sound = (ACMDScript)files["sound"].Scripts[u];
                }
                if (files.ContainsKey("expression") && files["expression"].Scripts.ContainsKey(u))
                {
                    expression = (ACMDScript)files["expression"].Scripts[u];
                }

                write_movedef(game, effect, sound, expression, animName, !table.Contains(u), script_dir);
            }
            Console.WriteLine(">\tFinished\n");
        }