Minor tweaks

Simplify moveset application for Z-A; less branching since they all do essentially the same thing. The API is pretty stable so the simplifications are safe.
This commit is contained in:
Kurt 2025-12-15 22:34:57 -06:00
parent 84912a16e7
commit de2c6151e6
8 changed files with 29 additions and 64 deletions

View File

@ -124,25 +124,17 @@ private void SetPINGA(PA9 pk, EncounterCriteria criteria, PersonalInfo9ZA pi)
private void SetMoves(PA9 pk, PersonalInfo9ZA pi, byte level)
{
var (learn, plus) = LearnSource9ZA.GetLearnsetAndPlus(Species, Form);
Span<ushort> moves = stackalloc ushort[4];
PlusRecordApplicator.SetPlusFlagsEncounter(pk, pi, plus, level);
if (Moves.HasMoves)
{
pk.SetMoves(Moves);
pk.GetMoves(moves);
PlusRecordApplicator.SetPlusFlagsEncounter(pk, pi, plus, level);
return;
}
if (!IsAlpha)
{
learn.SetEncounterMovesBackwards(level, moves, sameDescend: false);
PlusRecordApplicator.SetPlusFlagsEncounter(pk, pi, plus, level);
}
else
{
learn.SetEncounterMovesBackwards(level, moves, sameDescend: false);
PlusRecordApplicator.SetPlusFlagsEncounter(pk, pi, plus, level, moves[0] = pi.AlphaMove);
}
Span<ushort> moves = stackalloc ushort[4];
learn.SetEncounterMovesBackwards(level, moves, sameDescend: false);
if (pk.IsAlpha)
PlusRecordApplicator.SetPlusFlagsSpecific(pk, pi, moves[0] = pi.AlphaMove);
pk.SetMoves(moves);
}

View File

@ -79,17 +79,12 @@ private void SetPINGA(PA9 pk, EncounterCriteria criteria, PersonalInfo9ZA pi)
private void SetMoves(PA9 pk, PersonalInfo9ZA pi, byte level)
{
var (learn, plus) = LearnSource9ZA.GetLearnsetAndPlus(Species, Form);
PlusRecordApplicator.SetPlusFlagsEncounter(pk, pi, plus, level);
Span<ushort> moves = stackalloc ushort[4];
if (!IsAlpha)
{
learn.SetEncounterMovesBackwards(level, moves, sameDescend: false);
PlusRecordApplicator.SetPlusFlagsEncounter(pk, pi, plus, level);
}
else
{
learn.SetEncounterMovesBackwards(level, moves, sameDescend: false);
PlusRecordApplicator.SetPlusFlagsEncounter(pk, pi, plus, level, moves[0] = pi.AlphaMove);
}
learn.SetEncounterMovesBackwards(level, moves, sameDescend: false);
if (pk.IsAlpha)
PlusRecordApplicator.SetPlusFlagsSpecific(pk, pi, moves[0] = pi.AlphaMove);
pk.SetMoves(moves);
}

View File

@ -101,25 +101,17 @@ private void SetPINGA(PA9 pk, EncounterCriteria criteria, PersonalInfo9ZA pi)
private void SetMoves(PA9 pk, PersonalInfo9ZA pi, byte level)
{
var (learn, plus) = LearnSource9ZA.GetLearnsetAndPlus(Species, Form);
Span<ushort> moves = stackalloc ushort[4];
PlusRecordApplicator.SetPlusFlagsEncounter(pk, pi, plus, level);
if (Moves.HasMoves)
{
pk.SetMoves(Moves);
pk.GetMoves(moves);
PlusRecordApplicator.SetPlusFlagsEncounter(pk, pi, plus, level);
return;
}
if (!IsAlpha)
{
learn.SetEncounterMovesBackwards(level, moves, sameDescend: false);
PlusRecordApplicator.SetPlusFlagsEncounter(pk, pi, plus, level);
}
else
{
learn.SetEncounterMovesBackwards(level, moves, sameDescend: false);
PlusRecordApplicator.SetPlusFlagsEncounter(pk, pi, plus, level, moves[0] = pi.AlphaMove);
}
Span<ushort> moves = stackalloc ushort[4];
learn.SetEncounterMovesBackwards(level, moves, sameDescend: false);
if (pk.IsAlpha)
PlusRecordApplicator.SetPlusFlagsSpecific(pk, pi, moves[0] = pi.AlphaMove);
pk.SetMoves(moves);
}

View File

@ -127,25 +127,17 @@ private void SetPINGA(PA9 pk, EncounterCriteria criteria, PersonalInfo9ZA pi)
private void SetMoves(PA9 pk, PersonalInfo9ZA pi, byte level)
{
var (learn, plus) = LearnSource9ZA.GetLearnsetAndPlus(Species, Form);
Span<ushort> moves = stackalloc ushort[4];
PlusRecordApplicator.SetPlusFlagsEncounter(pk, pi, plus, level);
if (Moves.HasMoves)
{
pk.SetMoves(Moves);
pk.GetMoves(moves);
PlusRecordApplicator.SetPlusFlagsEncounter(pk, pi, plus, level);
return;
}
if (!IsAlpha)
{
learn.SetEncounterMovesBackwards(level, moves, sameDescend: false);
PlusRecordApplicator.SetPlusFlagsEncounter(pk, pi, plus, level);
}
else
{
learn.SetEncounterMovesBackwards(level, moves, sameDescend: false);
PlusRecordApplicator.SetPlusFlagsEncounter(pk, pi, plus, level, moves[0] = pi.AlphaMove);
}
Span<ushort> moves = stackalloc ushort[4];
learn.SetEncounterMovesBackwards(level, moves, sameDescend: false);
if (pk.IsAlpha)
PlusRecordApplicator.SetPlusFlagsSpecific(pk, pi, moves[0] = pi.AlphaMove);
pk.SetMoves(moves);
}

View File

@ -83,7 +83,6 @@ public int Evolve(Span<EvoCriteria> result, PKM pk, EvolutionOrigin enc, Evoluti
private static bool IsUnavailableEvoChain(ushort species, byte form) => species switch
{
// TODO DLC ZA: ALT Evolutions
// Split-evolution Alolans can't be reached in any game Gen8+. Must have been via Gen7.
(int)Raichu when form == 1 => true,
(int)Exeggutor when form == 1 => true,
@ -174,7 +173,7 @@ private static void RevertMutatedForms(ref EvoCriteria evo)
// Eager check: only reversions are if form is not 0.
if (form == 0)
return;
// TODO DLC ZA: Is this necessary?
// None present in Z-A.
//if (species is (ushort)Dialga or (ushort)Palkia or (ushort)Arceus or (ushort)Silvally)
// evo = evo with { Form = 0 }; // Normal
if (FormInfo.IsBattleOnlyForm(species, form, Latest.Generation))

View File

@ -116,13 +116,9 @@ private static void GetInitialMoves(IEncounter9a enc, PA9 pa9, Span<ushort> move
}
var level = Math.Max((byte)1, pa9.MetLevel);
var learn = LearnSource9ZA.Instance.GetLearnset(enc.Species, enc.Form);
if (!enc.IsAlpha)
{
learn.SetEncounterMovesBackwards(level, moves, sameDescend: false);
return;
}
learn.SetEncounterMovesBackwards(level, moves, sameDescend: false);
moves[0] = PersonalTable.ZA[enc.Species, enc.Form].AlphaMove;
if (enc.IsAlpha)
moves[0] = PersonalTable.ZA[enc.Species, enc.Form].AlphaMove;
}
private void CheckFlagsTM(LegalityAnalysis data, PA9 pa9)

View File

@ -489,13 +489,12 @@ public override PA9 ConvertToPKM(ITrainerInfo tr, EncounterCriteria criteria)
private void SetMoves(byte currentLevel, PA9 pk, PersonalInfo9ZA pi)
{
var (learn, plus) = LearnSource9ZA.GetLearnsetAndPlus(Species, Form);
if (Move1 == 0) // Just in case they forget to set moves on an event.
{
Span<ushort> moves = stackalloc ushort[4];
learn.SetEncounterMoves(currentLevel, moves);
pk.SetMoves(moves);
}
PlusRecordApplicator.SetPlusFlagsEncounter(pk, pi, plus, currentLevel);
if (Move1 != 0) // Just in case they forget to set moves on an event.
return;
Span<ushort> moves = stackalloc ushort[4];
learn.SetEncounterMoves(currentLevel, moves);
pk.SetMoves(moves);
}
private DateOnly GetSuggestedDate()

View File

@ -279,6 +279,6 @@ private void PopulateFromCore(PKH pkh)
Ability = (ushort)pi.GetAbilityAtIndex(index);
var level = Experience.GetLevel(pkh.EXP, pi.EXPGrowth);
this.ResetMoves(pkh.Species, pkh.Form, level, LearnSource9ZA.Instance, EntityContext.Gen9);
this.ResetMoves(pkh.Species, pkh.Form, level, LearnSource9ZA.Instance, EntityContext.Gen9a);
}
}