public static void RandomizePokemon(Random random, TeamShufflerSettings settings, ITrainerPokemon pokemon, Pokemon[] pokemonList) { if (settings.RandomizePokemon) { var index = 0; while (index == 0 || RandomizerConstants.SpecialPokemon.Contains(index) || (settings.DontUseLegendaries && RandomizerConstants.Legendaries.Contains(index))) { index = random.Next(1, pokemonList.Length); } pokemon.Pokemon = (ushort)index; } if (settings.ForceFullyEvolved && pokemon.Level >= settings.ForceFullyEvolvedLevel) { var currPoke = pokemonList[pokemon.Pokemon]; if (PokemonTraitShuffler.CheckForSplitOrEndEvolution(currPoke, out var count) && count > 0) { // randomly pick from the split var evoInd = random.Next(0, count); pokemon.Pokemon = currPoke.Evolutions[evoInd].EvolvesInto; } else if (count == 1) { // it wasn't split or the end but still evolved pokemon.Pokemon = currPoke.Evolutions[0].EvolvesInto; } } }
public static void RandomizeMoveSet(Random random, TeamShufflerSettings settings, ITrainerPokemon pokemon, ExtractedGame extractedGame) { ushort[] moveSet = null; if (settings.MoveSetOptions.MetronomeOnly) { moveSet = Enumerable.Repeat(RandomizerConstants.MetronomeIndex, Constants.NumberOfPokemonMoves).ToArray(); } else if (settings.MoveSetOptions.RandomizeMovesets || settings.RandomizePokemon) { moveSet = MoveShuffler.GetNewMoveset(random, settings.MoveSetOptions, pokemon.Pokemon, pokemon.Level, extractedGame); } if (moveSet != null) { Logger.Log($"It knows:\n"); for (int i = 0; i < moveSet.Length; i++) { var move = moveSet[i]; Logger.Log($"{extractedGame.MoveList[move].Name}\n"); pokemon.SetMove(i, move); } } }