Example #1
0
        private IStarterModel[] LoadStarters()
        {
            var commonStrings   = rom.GetCommonStrings();
            var mainExecutable  = rom.GetMainExecutable();
            var natureDiagnosis = rom.GetNatureDiagnosis();
            var fixedPokemon    = rom.GetFixedPokemon();

            var starters = new List <StarterModel>();

            foreach (var starter in natureDiagnosis.m_pokemonNatureAndTypeList)
            {
                var fixedPokemonSymbol = mainExecutable.StarterFixedPokemonMaps.FirstOrDefault(m => m.PokemonId == starter.m_nameLabel);
                if (fixedPokemonSymbol == default)
                {
                    // This isn't a usable starter
                    // The game WILL crash when loading the initial move set
                    continue;
                }

                var fixedPokemonEntry = fixedPokemon.Entries[(int)fixedPokemonSymbol.FixedPokemonId];
                starters.Add(new StarterModel(commonStrings)
                {
                    PokemonId = starter.m_nameLabel,
                    NatureDiagnosisMaleModelSymbol   = starter.m_symbolName,
                    NatureDiagnosisFemaleModelSymbol = starter.m_symbolNameFemale,
                    Move1        = fixedPokemonEntry.Move1,
                    Move2        = fixedPokemonEntry.Move2,
                    Move3        = fixedPokemonEntry.Move3,
                    Move4        = fixedPokemonEntry.Move4,
                    MaleNature   = starter.m_maleNature,
                    FemaleNature = starter.m_femaleNature
                });
            }
            return(starters.Cast <IStarterModel>().ToArray());
        }