Skip to content

Commit

Permalink
Fix Seed Checker and GameVersion instead of SAV reference
Browse files Browse the repository at this point in the history
  • Loading branch information
Manu098vm committed Dec 26, 2023
1 parent bb30d8c commit 2d8a32c
Show file tree
Hide file tree
Showing 8 changed files with 193 additions and 66 deletions.
2 changes: 2 additions & 0 deletions TeraFinder.Core/Classes/EncounterRaid9.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ public class EncounterRaid9(ITeraRaid9 encounter) : IEncounterable, IEncounterCo
public bool CanBeEncounteredScarlet => GetCanBeEncountered(GameVersion.SL);
public bool CanBeEncounteredViolet => GetCanBeEncountered(GameVersion.VL);

public Type GetEncounterType() => Encounter.GetType();

public bool CanBeEncountered(uint seed) => Encounter.CanBeEncountered(seed);

public static EncounterRaid9[] GetEncounters(ITeraRaid9[] encounters)
Expand Down
49 changes: 39 additions & 10 deletions TeraFinder.Core/Utils/TeraUtil.cs
Original file line number Diff line number Diff line change
Expand Up @@ -225,12 +225,13 @@ public static List<string> GetAvailableSpecies(SAV9SV sav, string[] species, str
_ => Properties.Resources.encounter_gem_blueberry
}, map));

public static EncounterRaid9[][] GetAllDistEncounters()
{
var dist = EncounterRaid9.GetEncounters(PKHeX.Core.EncounterDist9.GetArray(Util.GetBinaryResource("encounter_dist_paldea.pkl")));
var mighty = EncounterRaid9.GetEncounters(PKHeX.Core.EncounterMight9.GetArray(Util.GetBinaryResource("encounter_might_paldea.pkl")));
return [dist, mighty];
}
public static EncounterRaid9[] GetAllDistEncounters(RaidContent type) =>
type switch
{
RaidContent.Event => EncounterRaid9.GetEncounters(PKHeX.Core.EncounterDist9.GetArray(Util.GetBinaryResource("encounter_dist_paldea.pkl"))),
RaidContent.Event_Mighty => EncounterRaid9.GetEncounters(PKHeX.Core.EncounterMight9.GetArray(Util.GetBinaryResource("encounter_might_paldea.pkl"))),
_ => throw new ArgumentException("Invalid RaidContent type"),
};

public static EncounterRaid9[][] GetSAVDistEncounters(SAV9SV sav)
{
Expand All @@ -250,9 +251,8 @@ public static EncounterRaid9[][] GetSAVDistEncounters(SAV9SV sav)
}
}

public static EncounterRaid9? GetTeraEncounter(uint seed, SAV9SV sav, int stars, EncounterRaid9[] encounters, TeraRaidMapParent map)
public static EncounterRaid9? GetTeraEncounter(uint seed, GameVersion game, int stars, EncounterRaid9[] encounters, TeraRaidMapParent map)
{
var game = (GameVersion)sav.Game;
var xoro = new Xoroshiro128Plus(seed);
if (stars < 6) xoro.NextInt(100);
var max = game is GameVersion.SL ? EncounterTera9.GetRateTotalSL(stars, map) : EncounterTera9.GetRateTotalVL(stars, map);
Expand All @@ -266,9 +266,8 @@ public static EncounterRaid9[][] GetSAVDistEncounters(SAV9SV sav)
return null;
}

public static EncounterRaid9? GetDistEncounter(uint seed, SAV9SV sav, GameProgress progress, EncounterRaid9[] encounters, int groupid = -2)
public static EncounterRaid9? GetDistEncounter(uint seed, GameVersion game, GameProgress progress, EncounterRaid9[] encounters, int groupid = -2)
{
var game = (GameVersion)sav.Game;
var p = progress switch
{
GameProgress.Unlocked6Stars or GameProgress.Unlocked5Stars => 3,
Expand All @@ -295,6 +294,36 @@ public static EncounterRaid9[][] GetSAVDistEncounters(SAV9SV sav)
return null;
}

public static EncounterRaid9[] FilterDistEncounters(uint seed, GameVersion version, GameProgress progress, EncounterRaid9[] encounters, int groupid, ushort species)
{
var res = new List<EncounterRaid9>();
var p = progress switch
{
GameProgress.Unlocked6Stars or GameProgress.Unlocked5Stars => 3,
GameProgress.Unlocked4Stars => 2,
GameProgress.Unlocked3Stars => 1,
_ => 0,
};

foreach (var encounter in encounters)
{
if (encounter.Species != species || encounter.Index != groupid)
continue;
var max = version is GameVersion.SL ? encounter.GetRandRateTotalScarlet(p) : encounter.GetRandRateTotalViolet(p);
var min = version is GameVersion.SL ? encounter.GetRandRateMinScarlet(p) : encounter.GetRandRateMinViolet(p);
if (min >= 0 && max > 0)
{
var xoro = new Xoroshiro128Plus(seed);
xoro.NextInt(100);
var rateRand = xoro.NextInt(max);
if ((uint)(rateRand - min) < encounter.RandRate)
res.Add(encounter);
}
}

return [..res];
}

public static byte GetGender(EncounterRaid9 enc, bool isMighty)
{
if (isMighty)
Expand Down
6 changes: 3 additions & 3 deletions TeraFinder.Plugins/Forms/CalculatorForm.cs
Original file line number Diff line number Diff line change
Expand Up @@ -662,10 +662,10 @@ private async Task<List<GridEntry>> StartSearch(SAV9SV sav, GameProgress progres
private TeraDetails? CalcResult(ulong Seed, GameProgress progress, SAV9SV sav, RaidContent content, ulong calc, int groupid, TeraRaidMapParent map)
{
var seed = (uint)(Seed & 0xFFFFFFFF);
var encounter = content is RaidContent.Standard or RaidContent.Black ? TeraUtil.GetTeraEncounter(seed, sav,
var encounter = content is RaidContent.Standard or RaidContent.Black ? TeraUtil.GetTeraEncounter(seed, sav.Version,
TeraUtil.GetStars(seed, progress), map switch { TeraRaidMapParent.Paldea => Editor.Paldea!, TeraRaidMapParent.Kitakami => Editor.Kitakami!, _ => Editor.Blueberry! }, map) :
content is RaidContent.Event_Mighty ? TeraUtil.GetDistEncounter(seed, sav, progress, Editor.Mighty!, groupid) :
TeraUtil.GetDistEncounter(seed, sav, progress, Editor.Dist!, groupid);
content is RaidContent.Event_Mighty ? TeraUtil.GetDistEncounter(seed, sav.Version, progress, Editor.Mighty!, groupid) :
TeraUtil.GetDistEncounter(seed, sav.Version, progress, Editor.Dist!, groupid);

if (encounter is null)
return null;
Expand Down
120 changes: 108 additions & 12 deletions TeraFinder.Plugins/Forms/CheckerForm.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,9 @@ namespace TeraFinder.Plugins;
public partial class CheckerForm : Form
{
private readonly PK9 PKM = null!;
private readonly SAV9SV SAV;
private Dictionary<string, string> Strings = null!;

public CheckerForm(PKM pk, SAV9SV sav, string language)
public CheckerForm(PKM pk, string language)
{
InitializeComponent();
GenerateDictionary();
Expand All @@ -26,7 +25,6 @@ public CheckerForm(PKM pk, SAV9SV sav, string language)
cmbTera.Items.Clear();
cmbTera.Items.AddRange(types);

SAV = sav;
PKM = (PK9)pk;
txtTid.Text = $"{PKM.TrainerTID7}";
txtSid.Text = $"{PKM.TrainerSID7}";
Expand Down Expand Up @@ -114,19 +112,117 @@ private void btnCalc_Click(object sender, EventArgs e)
};

var seed = Tera9RNG.GetOriginalSeed(pk);
var legality = new LegalityAnalysis(pk);

if (legality.Valid)
//Standard & Black Raids Check
for (var map = TeraRaidMapParent.Paldea; map <= TeraRaidMapParent.Blueberry; map++)
{
if (legality.EncounterMatch is PKHeX.Core.EncounterDist9)
var encounters = TeraUtil.GetAllTeraEncounters(map);
for (var progress = GameProgress.UnlockedTeraRaids; progress <= GameProgress.None; progress++)
{
for (var version = GameVersion.SL; version <= GameVersion.VL; version++)
{
var encounter = TeraUtil.GetTeraEncounter(seed, version, TeraUtil.GetStars(seed, progress), encounters, map);
if (encounter is not null)
{
var rng = TeraUtil.CalcRNG(seed, pk.TrainerTID7, pk.TrainerSID7, progress is not GameProgress.None ?
RaidContent.Standard : RaidContent.Black, encounter, 0);

if (CompareResult(pk, rng))
{
SetReultText(seed, encounter);
return;
}
}
}
}
}

//Events & Events Mighty Raids Check
for (var content = RaidContent.Event; content <= RaidContent.Event_Mighty; content++)
{
var dist = TeraUtil.GetAllDistEncounters(content);
for (var progress = GameProgress.UnlockedTeraRaids; progress < GameProgress.None; progress++)
{
for (var version = GameVersion.SL; version <= GameVersion.VL; version++) {
for (var groupid = 0; groupid < 10; groupid++)
{
var encounters = TeraUtil.FilterDistEncounters(seed, version, progress, dist, groupid, species);
foreach (var encounter in encounters) {

if (encounter is not null)
{
var rng = TeraUtil.CalcRNG(seed, pk.TrainerTID7, pk.TrainerSID7, content, encounter, groupid);

if (CompareResult(pk, rng))
{
SetReultText(seed, encounter);
return;
}
}
}
}
}
}
}
SetReultText(seed);
}

private static bool CompareResult (PK9 pkm, TeraDetails rng)
{
if (pkm.Species != rng.Species)
return false;
if (pkm.EncryptionConstant != rng.EC)
return false;
if (pkm.PID != rng.PID)
return false;
if (pkm.IV_HP != rng.HP)
return false;
if (pkm.IV_ATK != rng.ATK)
return false;
if (pkm.IV_DEF != rng.DEF)
return false;
if (pkm.IV_SPA != rng.SPA)
return false;
if (pkm.IV_SPD != rng.SPD)
return false;
if (pkm.IV_SPE != rng.SPE)
return false;
if (pkm.Nature != rng.Nature)
return false;
if ((sbyte)pkm.TeraTypeOriginal != rng.TeraType)
return false;
if (pkm.HeightScalar != rng.Height &&
pkm.HeightScalar != rng.Scale)
return false;
if (pkm.WeightScalar != rng.Weight)
return false;
if (pkm.Scale != rng.Scale)
return false;

return true;
}

private void SetReultText (uint seed, EncounterRaid9? enc = null)
{
if (enc is not null)
{
var type = enc.GetEncounterType();
var isBlack = enc.Stars >= 6;

if (type == typeof(Core.EncounterTera9) && !isBlack)
txtSeed.Text = $"{seed:X8} ({Strings["RaidContent.Standard"]})";
else if (type == typeof(Core.EncounterTera9) && isBlack)
txtSeed.Text = $"{seed:X8} ({Strings["RaidContent.Black"]})";
else if (type == typeof(PKHeX.Core.EncounterDist9))
txtSeed.Text = $"{seed:X8} ({Strings["RaidContent.Event"]})";
else if (legality.EncounterMatch is PKHeX.Core.EncounterMight9)
else if (type == typeof(PKHeX.Core.EncounterMight9))
txtSeed.Text = $"{seed:X8} ({Strings["RaidContent.Event_Mighty"]})";
else
txtSeed.Text = (byte)((dynamic)legality.EncounterMatch).Stars == 6 ?
$"{seed:X8} ({Strings["RaidContent.Black"]})" : $"{seed:X8} ({Strings["RaidContent.Standard"]})";

return;
}
else
txtSeed.Text = $"{seed:X8} ({Strings["RaidContent.Invalid"]})";

txtSeed.Text = $"{seed:X8} ({Strings["RaidContent.Invalid"]})";
return;

}
}

0 comments on commit 2d8a32c

Please sign in to comment.