mirror of
https://github.com/kwsch/pk3DS.git
synced 2026-03-22 01:44:33 -05:00
116 lines
3.2 KiB
C#
116 lines
3.2 KiB
C#
using pk3DS.Core.Structures;
|
|
|
|
namespace pk3DS.Core.Randomizers;
|
|
|
|
public class EvolutionRandomizer : IRandomizer
|
|
{
|
|
private readonly EvolutionSet[] Evolutions;
|
|
private readonly GameConfig Config;
|
|
|
|
public readonly SpeciesRandomizer Randomizer;
|
|
public readonly FormRandomizer FormRandomizer;
|
|
|
|
public EvolutionRandomizer(GameConfig config, EvolutionSet[] evolutions)
|
|
{
|
|
Config = config;
|
|
Evolutions = evolutions;
|
|
Randomizer = new SpeciesRandomizer(Config);
|
|
FormRandomizer = new FormRandomizer(config);
|
|
}
|
|
|
|
public void Execute()
|
|
{
|
|
for (var i = 0; i < Evolutions.Length; i++)
|
|
{
|
|
var evo = Evolutions[i];
|
|
Randomize(evo, i);
|
|
}
|
|
}
|
|
|
|
public void ExecuteTrade()
|
|
{
|
|
for (var i = 0; i < Evolutions.Length; i++)
|
|
{
|
|
var evo = Evolutions[i];
|
|
Trade(evo, i);
|
|
}
|
|
}
|
|
|
|
public void ExecuteEvolveEveryLevel()
|
|
{
|
|
foreach (var evo in Evolutions)
|
|
MakeEvolveEveryLevel(evo);
|
|
}
|
|
|
|
private void Randomize(EvolutionSet evo, int i)
|
|
{
|
|
var evos = evo.PossibleEvolutions;
|
|
foreach (EvolutionMethod v in evos)
|
|
{
|
|
if (v.Method > 0)
|
|
{
|
|
v.Species = Randomizer.GetRandomSpecies(v.Species, i);
|
|
v.Form = FormRandomizer.GetRandomForme(v.Species);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void Trade(EvolutionSet evo, int i)
|
|
{
|
|
var evos = evo.PossibleEvolutions;
|
|
foreach (EvolutionMethod v in evos)
|
|
{
|
|
if (Config.Generation == 6 && v.Method == 5) // Gen 6 uses Argument rather than Level
|
|
{
|
|
v.Argument = 30;
|
|
v.Method = 4; // trade -> level up
|
|
}
|
|
else if (Config.Generation == 7 && v.Method == 5)
|
|
{
|
|
v.Level = 30;
|
|
v.Method = 4; // trade -> level up
|
|
}
|
|
|
|
if (v.Method == 6) // trade with held item -> level up with held item
|
|
v.Method = 19;
|
|
|
|
if (v.Method == 7) // trade for opposite -> level up with party
|
|
{
|
|
if (i == 588)
|
|
v.Argument = 616; // Karrablast with Shelmet
|
|
if (i == 616)
|
|
v.Argument = 588; // Shelmet with Karrablast
|
|
v.Method = 22;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void MakeEvolveEveryLevel(EvolutionSet evo)
|
|
{
|
|
var evos = evo.PossibleEvolutions;
|
|
foreach (EvolutionMethod v in evos)
|
|
{
|
|
switch (Config.Generation)
|
|
{
|
|
case 6:
|
|
v.Argument = 1;
|
|
v.Method = 4;
|
|
v.Species = 1;
|
|
break;
|
|
default:
|
|
v.Argument = 0;
|
|
v.Form = 0;
|
|
v.Level = 1;
|
|
v.Method = 4;
|
|
v.Species = 1; // will be randomized after
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (evos[1].Species != 0) // has other branched evolutions; remove them
|
|
{
|
|
for (int i = 1; i < evos.Length; i++)
|
|
evos[i] = new EvolutionMethod();
|
|
}
|
|
}
|
|
} |