mirror of
https://github.com/kwsch/PKHeX
synced 2025-02-17 05:48:44 +00:00
Add display of pla static encounter seeds
Show single shiny roll slots for PLA too Update MiscVerifier.cs
This commit is contained in:
parent
43cd9300fb
commit
8206427d21
6 changed files with 46 additions and 13 deletions
|
@ -8,7 +8,7 @@ namespace PKHeX.Core;
|
||||||
/// <param name="AlphaType">0=Never, 1=Random, 2=Guaranteed</param>
|
/// <param name="AlphaType">0=Never, 1=Random, 2=Guaranteed</param>
|
||||||
/// <param name="FlawlessIVCount"></param>
|
/// <param name="FlawlessIVCount"></param>
|
||||||
public sealed record EncounterSlot8a(EncounterArea8a Parent, ushort Species, byte Form, byte LevelMin, byte LevelMax, byte AlphaType, byte FlawlessIVCount, Gender Gender)
|
public sealed record EncounterSlot8a(EncounterArea8a Parent, ushort Species, byte Form, byte LevelMin, byte LevelMax, byte AlphaType, byte FlawlessIVCount, Gender Gender)
|
||||||
: IEncounterable, IEncounterMatch, IEncounterConvertible<PA8>, IAlphaReadOnly, IMasteryInitialMoveShop8, IFlawlessIVCount
|
: IEncounterable, IEncounterMatch, IEncounterConvertible<PA8>, IAlphaReadOnly, IMasteryInitialMoveShop8, IFlawlessIVCount, ISeedCorrelation64<PKM>
|
||||||
{
|
{
|
||||||
public byte Generation => 8;
|
public byte Generation => 8;
|
||||||
public EntityContext Context => EntityContext.Gen8a;
|
public EntityContext Context => EntityContext.Gen8a;
|
||||||
|
@ -233,4 +233,21 @@ public sealed record EncounterSlot8a(EncounterArea8a Parent, ushort Species, byt
|
||||||
return p.IsValidMasteredEncounter(moves, learn, mastery, level, alpha, allowAlphaPurchaseBug);
|
return p.IsValidMasteredEncounter(moves, learn, mastery, level, alpha, allowAlphaPurchaseBug);
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
public bool TryGetSeed(PKM pk, out ulong seed)
|
||||||
|
{
|
||||||
|
// Check if it matches any single-roll seed.
|
||||||
|
var pi = PersonalTable.LA[Species, Form];
|
||||||
|
var param = GetParams(pi) with { RollCount = 1 };
|
||||||
|
var solver = new XoroMachineSkip(pk.EncryptionConstant, pk.PID);
|
||||||
|
foreach (var s in solver)
|
||||||
|
{
|
||||||
|
if (!Overworld8aRNG.Verify(pk, s, param))
|
||||||
|
continue;
|
||||||
|
seed = s;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
seed = default;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,9 @@ namespace PKHeX.Core;
|
||||||
/// Generation 8 Static Encounter
|
/// Generation 8 Static Encounter
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public sealed record EncounterStatic8a
|
public sealed record EncounterStatic8a
|
||||||
: IEncounterable, IEncounterMatch, IEncounterConvertible<PA8>, IAlphaReadOnly, IMasteryInitialMoveShop8, IScaledSizeReadOnly, IMoveset, IFlawlessIVCount, IFatefulEncounterReadOnly, IFixedGender
|
: IEncounterable, IEncounterMatch, IEncounterConvertible<PA8>, ISeedCorrelation64<PKM>,
|
||||||
|
IAlphaReadOnly, IMasteryInitialMoveShop8, IScaledSizeReadOnly,
|
||||||
|
IMoveset, IFlawlessIVCount, IFatefulEncounterReadOnly, IFixedGender
|
||||||
{
|
{
|
||||||
public byte Generation => 8;
|
public byte Generation => 8;
|
||||||
public EntityContext Context => EntityContext.Gen8a;
|
public EntityContext Context => EntityContext.Gen8a;
|
||||||
|
@ -283,4 +285,20 @@ public sealed record EncounterStatic8a
|
||||||
return p.IsValidMasteredEncounter(moves, learn, mastery, level, alpha, allowAlphaPurchaseBug);
|
return p.IsValidMasteredEncounter(moves, learn, mastery, level, alpha, allowAlphaPurchaseBug);
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
public bool TryGetSeed(PKM pk, out ulong seed)
|
||||||
|
{
|
||||||
|
// Check if it matches any single-roll seed.
|
||||||
|
var param = GetParams();
|
||||||
|
var solver = new XoroMachineSkip(pk.EncryptionConstant, pk.PID);
|
||||||
|
foreach (var s in solver)
|
||||||
|
{
|
||||||
|
if (!Overworld8aRNG.Verify(pk, s, param, HasFixedHeight, HasFixedWeight))
|
||||||
|
continue;
|
||||||
|
seed = s;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
seed = default;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -201,7 +201,8 @@ public static class Overworld8aRNG
|
||||||
_ => Shiny.Never,
|
_ => Shiny.Never,
|
||||||
};
|
};
|
||||||
|
|
||||||
public static bool Verify(PKM pk, ulong seed, in OverworldParam8a para)
|
public static bool Verify(PKM pk, ulong seed, in OverworldParam8a para,
|
||||||
|
bool isFixedH = false, bool isFixedW = false)
|
||||||
{
|
{
|
||||||
var rand = new Xoroshiro128Plus(seed);
|
var rand = new Xoroshiro128Plus(seed);
|
||||||
var ec = (uint)rand.NextInt();
|
var ec = (uint)rand.NextInt();
|
||||||
|
@ -290,9 +291,9 @@ public static class Overworld8aRNG
|
||||||
|
|
||||||
if (pk is IScaledSize s)
|
if (pk is IScaledSize s)
|
||||||
{
|
{
|
||||||
if (s.HeightScalar != height)
|
if (!isFixedH && s.HeightScalar != height)
|
||||||
return false;
|
return false;
|
||||||
if (s.WeightScalar != weight)
|
if (!isFixedW && s.WeightScalar != weight)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -52,7 +52,7 @@ public readonly struct PIDIV
|
||||||
#endif
|
#endif
|
||||||
public bool IsClassicMethod() => Type.IsClassicMethod();
|
public bool IsClassicMethod() => Type.IsClassicMethod();
|
||||||
|
|
||||||
public bool IsSeed64() => Type is PIDType.Raid8;
|
public bool IsSeed64() => Type is PIDType.Xoroshiro;
|
||||||
|
|
||||||
public PIDIV AsEncounteredVia(LeadSeed condition) => this with { Lead = condition.Lead, EncounterSeed = condition.Seed };
|
public PIDIV AsEncounteredVia(LeadSeed condition) => this with { Lead = condition.Lead, EncounterSeed = condition.Seed };
|
||||||
}
|
}
|
||||||
|
|
|
@ -172,10 +172,10 @@ public enum PIDType : byte
|
||||||
Pokewalker,
|
Pokewalker,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Generation 8 Raid PID
|
/// Generation 8 Xoroshiro correlation
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <remarks>Formulaic based on PID & EC values from a 64bit-seed.</remarks>
|
/// <remarks>Formulaic based on PID & EC values from a 64bit-seed.</remarks>
|
||||||
Raid8,
|
Xoroshiro,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Generation 8 Overworld Spawn PID
|
/// Generation 8 Overworld Spawn PID
|
||||||
|
|
|
@ -130,11 +130,8 @@ public sealed class MiscVerifier : Verifier
|
||||||
else if (enc is ISeedCorrelation64<PKM> s64)
|
else if (enc is ISeedCorrelation64<PKM> s64)
|
||||||
{
|
{
|
||||||
if (s64.TryGetSeed(pk, out var seed))
|
if (s64.TryGetSeed(pk, out var seed))
|
||||||
data.Info.PIDIV = new PIDIV(PIDType.Raid8, seed);
|
data.Info.PIDIV = new PIDIV(PIDType.Xoroshiro, seed);
|
||||||
}
|
if (enc is IMasteryInitialMoveShop8 m && !m.IsForcedMasteryCorrect(pk))
|
||||||
else if (enc is IMasteryInitialMoveShop8 m)
|
|
||||||
{
|
|
||||||
if (!m.IsForcedMasteryCorrect(pk))
|
|
||||||
data.AddLine(GetInvalid(LEncMasteryInitial));
|
data.AddLine(GetInvalid(LEncMasteryInitial));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue