Esempio n. 1
0
        public EvolutionData(string script)
        {
            string[] sides = script.Split(':');
            string pokemon = sides[0];
            string[] methods = sides[1].Split(new string[]{ "(" }, StringSplitOptions.RemoveEmptyEntries);
            string methodType = methods[0];
            string[] methodParameters = new string[0];
            if (methods.Length == 2)
                methodParameters = methods[1].Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries);

            PokemonData pokemonData = PokemonDatabase.GetPokemonFromName(pokemon);
            if (pokemonData == null) {
                Console.WriteLine("");
            }
            else {
                // Get dex ID
                this.dexID = pokemonData.DexID;

                // Get Evolution Type
                EvolutionTypes[] types = (EvolutionTypes[])Enum.GetValues(typeof(EvolutionTypes));
                foreach (EvolutionTypes t in types) {
                    if (t.ToString().ToUpper() == methodType.ToUpper()) {
                        this.type = t;
                        break;
                    }
                }

                // Get Parameters
                this.parameters = new int[methodParameters.Length];
                for (int i = 0; i < methodParameters.Length; i++) {
                    methodParameters[i] = methodParameters[i].Replace(")", "");
                    this.parameters[i] = -1;
                    EvolutionParameters[] evoParamTypes = (EvolutionParameters[])Enum.GetValues(typeof(EvolutionParameters));
                    foreach (EvolutionParameters p in evoParamTypes) {
                        if (p.ToString().ToUpper() == methodParameters[i].ToUpper()) {
                            this.parameters[i] = (int)p;
                            break;
                        }
                    }
                    if (this.parameters[i] == -1) {
                        ItemData itemData = ItemDatabase.GetItemFromName(methodParameters[i]);
                        if (itemData != null)
                            this.parameters[i] = itemData.ID;
                    }
                    if (methodParameters[i] == "BEAUTY") {
                        // Ignore
                        this.parameters[i] = 0;
                    }
                    if (this.parameters[i] == -1) {
                        if (!int.TryParse(methodParameters[i], out this.parameters[i])) {
                            Console.WriteLine("Error reading evolution parameter " + methodParameters[i]);
                        }
                    }
                }
            }
        }
Esempio n. 2
0
        public EvolutionData(string script)
        {
            string[] sides   = script.Split(':');
            string   pokemon = sides[0];

            string[] methods    = sides[1].Split(new string[] { "(" }, StringSplitOptions.RemoveEmptyEntries);
            string   methodType = methods[0];

            string[] methodParameters = new string[0];
            if (methods.Length == 2)
            {
                methodParameters = methods[1].Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries);
            }

            PokemonData pokemonData = PokemonDatabase.GetPokemonFromName(pokemon);

            if (pokemonData == null)
            {
                Console.WriteLine("");
            }
            else
            {
                // Get dex ID
                this.dexID = pokemonData.DexID;

                // Get Evolution Type
                EvolutionTypes[] types = (EvolutionTypes[])Enum.GetValues(typeof(EvolutionTypes));
                foreach (EvolutionTypes t in types)
                {
                    if (t.ToString().ToUpper() == methodType.ToUpper())
                    {
                        this.type = t;
                        break;
                    }
                }

                // Get Parameters
                this.parameters = new int[methodParameters.Length];
                for (int i = 0; i < methodParameters.Length; i++)
                {
                    methodParameters[i] = methodParameters[i].Replace(")", "");
                    this.parameters[i]  = -1;
                    EvolutionParameters[] evoParamTypes = (EvolutionParameters[])Enum.GetValues(typeof(EvolutionParameters));
                    foreach (EvolutionParameters p in evoParamTypes)
                    {
                        if (p.ToString().ToUpper() == methodParameters[i].ToUpper())
                        {
                            this.parameters[i] = (int)p;
                            break;
                        }
                    }
                    if (this.parameters[i] == -1)
                    {
                        ItemData itemData = ItemDatabase.GetItemFromName(methodParameters[i]);
                        if (itemData != null)
                        {
                            this.parameters[i] = itemData.ID;
                        }
                    }
                    if (methodParameters[i] == "BEAUTY")
                    {
                        // Ignore
                        this.parameters[i] = 0;
                    }
                    if (this.parameters[i] == -1)
                    {
                        if (!int.TryParse(methodParameters[i], out this.parameters[i]))
                        {
                            Console.WriteLine("Error reading evolution parameter " + methodParameters[i]);
                        }
                    }
                }
            }
        }
Esempio n. 3
0
        static void Main(string[] args)
        {
            BinaryReader      rom      = new BinaryReader(File.Open("d:/Pokéhacks/fr.gba", FileMode.Open), Encoding.Default);
            XmlDocument       xml      = new XmlDocument();
            List <XmlElement> monNodes = new List <XmlElement>();
            List <XmlElement> dexNodes = new List <XmlElement>();
            List <XmlElement> bstNodes = new List <XmlElement>();
            List <XmlElement> movNodes = new List <XmlElement>();
            List <XmlElement> tmsNodes = new List <XmlElement>();
            List <XmlElement> evoNodes = new List <XmlElement>();

            Console.WriteLine("Reading move names...");
            string[] moves = ReadDefs("../../../../../data/moves.h");
            Console.WriteLine("Reading ability names...");
            string[] abilities = ReadDefs("../../../../../data/abilities.h");
            Console.WriteLine("Reading item names...");
            string[] items = ReadDefs("../../../../../data/itemdata.h");
            items[0] = "0";

            Console.WriteLine("Reading national dex order...");
            UInt16[] NationalDexOrder = new UInt16[412];
            rom.BaseStream.Seek(0x251FEC, SeekOrigin.Begin);
            for (int i = 0; i < 411; i++)
            {
                NationalDexOrder[i] = rom.ReadUInt16();
            }
            NationalDexOrder[0] = 0;

            Console.WriteLine("Reading TM table...");
            UInt16[] TMs = new UInt16[64];
            rom.BaseStream.Seek(0x45A5A4, SeekOrigin.Begin);
            for (int i = 0; i < 64; i++)
            {
                TMs[i] = rom.ReadUInt16();
            }

            Console.WriteLine("Reading names and creating nodes...");
            for (int i = 0; i < 411; i++)
            {
                XmlElement thisMon = xml.CreateElement("mon");
                monNodes.Add(thisMon);
                rom.BaseStream.Seek(0x245EE0 + (i * 11), SeekOrigin.Begin);
                string name = Translation.CleanUp(Translation.ToAscii(Translation.ReadString(rom)));
                thisMon.SetAttribute("name", name);
            }

            #region Dex
            Console.WriteLine("Reading dex information...");
            for (int i = 0; i < 387; i++)
            {
                XmlElement dex = xml.CreateElement("dex");
                rom.BaseStream.Seek(0x44E850 + (i * 36), SeekOrigin.Begin);
                string type = Translation.CleanUp(Translation.ToAscii(Translation.ReadString(rom)));
                dex.SetAttribute("type", type);
                rom.BaseStream.Seek(0x44E850 + (i * 36) + 12, SeekOrigin.Begin);
                dex.SetAttribute("height", rom.ReadInt16().ToString());
                dex.SetAttribute("weight", rom.ReadInt16().ToString());
                long dexText1 = rom.ReadUInt32() - 0x8000000;
                long dexText2 = rom.ReadUInt32() - 0x8000000;
                dex.SetAttribute("moffset", rom.ReadInt16().ToString());
                dex.SetAttribute("mscale", rom.ReadInt16().ToString());
                dex.SetAttribute("toffset", rom.ReadInt16().ToString());
                dex.SetAttribute("tscale", rom.ReadInt16().ToString());

                rom.BaseStream.Seek(dexText1, SeekOrigin.Begin);
                string dexText = Translation.ToAscii(Translation.ReadString(rom));
                rom.BaseStream.Seek(dexText2, SeekOrigin.Begin);
                dexText += '\n' + Translation.ToAscii(Translation.ReadString(rom));
                dex.AppendChild(xml.CreateTextNode(dexText));
                dexNodes.Add(dex);
            }
            #endregion

            #region Base stats
            Console.WriteLine("Reading base stats...");
            rom.BaseStream.Seek(0x254784, SeekOrigin.Begin);
            for (int i = 0; i < 411; i++)
            {
                XmlElement bst = xml.CreateElement("stats");
                bst.SetAttribute("hp", rom.ReadByte().ToString());
                bst.SetAttribute("atk", rom.ReadByte().ToString());
                bst.SetAttribute("def", rom.ReadByte().ToString());
                bst.SetAttribute("spd", rom.ReadByte().ToString());
                bst.SetAttribute("sat", rom.ReadByte().ToString());
                bst.SetAttribute("sdf", rom.ReadByte().ToString());
                bst.SetAttribute("type1", ((Types)rom.ReadByte()).ToString());
                bst.SetAttribute("type2", ((Types)rom.ReadByte()).ToString());
                bst.SetAttribute("rate", rom.ReadByte().ToString());
                bst.SetAttribute("expyield", rom.ReadByte().ToString());
                bst.SetAttribute("effort", "0x" + rom.ReadUInt16().ToString("X"));
                bst.SetAttribute("item1", items[rom.ReadUInt16()]);
                bst.SetAttribute("item2", items[rom.ReadUInt16()]);
                bst.SetAttribute("gender", rom.ReadByte().ToString());
                bst.SetAttribute("hatch", rom.ReadByte().ToString());
                bst.SetAttribute("happy", rom.ReadByte().ToString());
                bst.SetAttribute("lvgrad", ((LevelGradients)rom.ReadByte()).ToString());
                bst.SetAttribute("egg1", ((EggGroups)rom.ReadByte()).ToString());
                bst.SetAttribute("egg2", ((EggGroups)rom.ReadByte()).ToString());
                bst.SetAttribute("ability1", abilities[rom.ReadByte()]);
                bst.SetAttribute("ability2", abilities[rom.ReadByte()]);
                bst.SetAttribute("safari", rom.ReadByte().ToString());
                bst.SetAttribute("color", rom.ReadByte().ToString("X"));
                rom.ReadInt16();
                bstNodes.Add(bst);
            }
            #endregion

            #region Movesets
            Console.WriteLine("Reading movesets...");
            rom.BaseStream.Seek(0x257496, SeekOrigin.Begin);
            movNodes.Add(xml.CreateElement("moveset"));
            for (int i = 1; i < 412; i++)
            {
                XmlElement moveset = xml.CreateElement("moveset");
                do
                {
                    int j = rom.ReadUInt16();
                    if (j == 0xFFFF)
                    {
                        break;
                    }
                    XmlElement move = xml.CreateElement("move");
                    move.SetAttribute("level", ((j & 0xFE00) / 512).ToString());
                    move.SetAttribute("id", moves[j & 0x1FF]);
                    //move.SetAttribute("number", (j & 0x1FF).ToString());
                    moveset.AppendChild(move);
                } while (true);
                movNodes.Add(moveset);
            }
            #endregion

            #region TMs
            Console.WriteLine("Reading TM sets...");
            rom.BaseStream.Seek(0x252BC8, SeekOrigin.Begin);
            for (int i = 0; i < 411; i++)
            {
                XmlElement TMSet = xml.CreateElement("tmset");
                //byte[] TMBytes = rom.ReadBytes(8);
                System.Collections.BitArray TMBits = new System.Collections.BitArray(rom.ReadBytes(8));
                for (int t = 0; t < 58; t++)
                {
                    //int j = (TMBytes[t / 8] & (2 ^ (t % 8)));
                    //if (j > 0)
                    if (TMBits[t])
                    {
                        XmlElement tm = xml.CreateElement("tm");
                        tm.SetAttribute("number", (t + 1).ToString());
                        if (t > 49)
                        {
                            tm.SetAttribute("id", moves[TMs[t]] + " (HM)");
                        }
                        else
                        {
                            tm.SetAttribute("id", moves[TMs[t]]);
                        }
                        tm.SetAttribute("number", (t + 1).ToString());
                        TMSet.AppendChild(tm);
                    }
                }
                tmsNodes.Add(TMSet);
            }
            #endregion

            #region Evolutions
            Console.WriteLine("Reading evolutions...");
            rom.BaseStream.Seek(0x25977C, SeekOrigin.Begin);
            evoNodes.Add(xml.CreateElement("evolutions"));
            for (int i = 0; i < 411; i++)
            {
                XmlElement evoSet = xml.CreateElement("evolutions");
                for (int e = 0; e < 5; e++)
                {
                    XmlElement     evo    = xml.CreateElement("evo");
                    EvolutionTypes type   = (EvolutionTypes)rom.ReadUInt16();
                    UInt16         param  = rom.ReadUInt16();
                    UInt16         target = rom.ReadUInt16();
                    rom.ReadUInt16();
                    evo.SetAttribute("type", type.ToString());
                    if ((EvolutionTypes)type == EvolutionTypes.Item || (EvolutionTypes)type == EvolutionTypes.ItemTrade)
                    {
                        evo.SetAttribute("param", items[param]);
                    }
                    else
                    {
                        evo.SetAttribute("param", param.ToString());
                    }
                    evo.SetAttribute("target", monNodes[target].GetAttribute("name"));
                    if (type > 0)
                    {
                        evoSet.AppendChild(evo);
                    }
                }
                evoNodes.Add(evoSet);
            }
            #endregion

            Console.WriteLine("Connecting the dots...");
            for (int i = 0; i < 411; i++)
            {
                int j = NationalDexOrder[i];
                if (i >= 252 && i < 277)
                {
                    j = 0;
                }
                monNodes[i].AppendChild(dexNodes[j]);
                monNodes[i].AppendChild(bstNodes[i]);
                if (movNodes[i].ChildNodes.Count > 0)
                {
                    monNodes[i].AppendChild(movNodes[i]);
                }
                if (tmsNodes[i].ChildNodes.Count > 0)
                {
                    monNodes[i].AppendChild(tmsNodes[i]);
                }
                if (evoNodes[i].ChildNodes.Count > 0)
                {
                    monNodes[i].AppendChild(evoNodes[i]);
                }
            }

            XmlElement root = xml.CreateElement("monsters");
            foreach (XmlElement mon in monNodes)
            {
                root.AppendChild(mon);
            }
            xml.Schemas.Add(null, "monsters.xsd");
            xml.AppendChild(root);
            xml.Save("temp.xml");
            //Console.ReadKey();
        }