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()); }