Localize StatNature => Stat Alignment

bulbapedia's Contest Stat nature amp table for neutral natures is wrong lol
https://bulbapedia.bulbagarden.net/wiki/Contest_condition#Natures
This commit is contained in:
Kurt
2026-06-14 13:47:18 -05:00
parent 3e6895b906
commit bbef47e0bd
80 changed files with 233 additions and 198 deletions

View File

@@ -623,8 +623,8 @@ private void AddEVs(List<string> result, in BattleTemplateExportSettings setting
var nameEVs = cfg.GetStatDisplay(settings.StatsEVs);
var line = token switch
{
BattleTemplateToken.EVsWithNature => GetStringStatsNatureAmp(EVs, 0, nameEVs, Nature),
BattleTemplateToken.EVsAppendNature => GetStringStatsNatureAmp(EVs, 0, nameEVs, Nature),
BattleTemplateToken.EVsWithNature => GetStringStatsStatAlignmentAmp(EVs, 0, nameEVs, Nature),
BattleTemplateToken.EVsAppendNature => GetStringStatsStatAlignmentAmp(EVs, 0, nameEVs, Nature),
_ => GetStringStats(EVs, 0, nameEVs),
};
if (token is BattleTemplateToken.EVsAppendNature && Nature.IsFixed)
@@ -654,7 +654,7 @@ private static string GetAbilityHeldItem(GameStrings strings, int ability, int i
/// <inheritdoc cref="GetStringStats{T}(ReadOnlySpan{T}, T, StatDisplayConfig)"/>
/// <remarks>Appends the nature amplification to the stat values, if not a neutral nature.</remarks>
public static string GetStringStatsNatureAmp<T>(ReadOnlySpan<T> stats, T ignoreValue, StatDisplayConfig statNames, Nature nature) where T : IEquatable<T>
public static string GetStringStatsStatAlignmentAmp<T>(ReadOnlySpan<T> stats, T ignoreValue, StatDisplayConfig statNames, Nature nature) where T : IEquatable<T>
{
var (plus, minus) = nature.GetNatureModification();
if (plus == minus)
@@ -806,7 +806,7 @@ public ShowdownSet(PKM pk, BattleTemplateLocalization? localization = null)
if (Moves.Contains((ushort)Move.HiddenPower))
HiddenPowerType = (sbyte)HiddenPower.GetType(IVs, Context);
Nature = pk.StatNature;
Nature = pk.StatAlignment;
Gender = pk.Gender < 2 ? pk.Gender : (byte)2;
Friendship = pk.CurrentFriendship;
Level = pk.CurrentLevel;

View File

@@ -28,8 +28,8 @@ public static class BatchMods
new TypeSuggestion<PKM>(nameof(PKM.EggMetDate), p => p.EggMetDate = p.MetDate),
new TypeSuggestion<PKM>(nameof(PKM.MetDate), p => p.MetDate = p.EggMetDate),
new TypeSuggestion<PKM>(nameof(PKM.Nature), p => p.Format >= 8, p => p.Nature = p.StatNature),
new TypeSuggestion<PKM>(nameof(PKM.StatNature), p => p.Format >= 8, p => p.StatNature = p.Nature),
new TypeSuggestion<PKM>(nameof(PKM.Nature), p => p.Format >= 8, p => p.Nature = p.StatAlignment),
new TypeSuggestion<PKM>(nameof(PKM.StatAlignment), p => p.Format >= 8, p => p.StatAlignment = p.Nature),
new TypeSuggestion<PKM>(nameof(PKM.Stats), p => p.ResetPartyStats()),
new TypeSuggestion<PKM>(nameof(PKM.Ball), p => BallApplicator.ApplyBallLegalByColor(p)),
new TypeSuggestion<PKM>(nameof(PKM.Heal), p => p.Heal()),

View File

@@ -13,7 +13,7 @@ public static class CommonEdits
public static bool ShowdownSetIVMarkings { get; set; } = true;
/// <summary>
/// Setting which causes the <see cref="PKM.StatNature"/> to the <see cref="PKM.Nature"/> in Gen8+ formats.
/// Setting which causes the <see cref="PKM.StatAlignment"/> to the <see cref="PKM.Nature"/> in Gen8+ formats.
/// </summary>
public static bool ShowdownSetBehaviorNature { get; set; }
@@ -144,7 +144,7 @@ public void SetNature(Nature nature)
var format = pk.Format;
if (format >= 8)
pk.StatNature = nature;
pk.StatAlignment = nature;
else if (format is 3 or 4)
pk.SetPIDNature(nature);
else
@@ -250,7 +250,7 @@ public void ApplySetDetails(IBattleTemplate set)
s.SetMoveShopFlags(set.Moves, pk);
if (ShowdownSetBehaviorNature && pk.Format >= 8)
pk.Nature = pk.StatNature;
pk.Nature = pk.StatAlignment;
var legal = new LegalityAnalysis(pk);
if (pk is ITechRecord t)

View File

@@ -13,7 +13,7 @@ public static class NatureAmp
/// <summary>
/// Mutate the nature amp indexes to match the request
/// </summary>
/// <param name="statIndex">Stat Index to mutate</param>
/// <param name="statIndex">Stat Index to mutate, internal order</param>
/// <param name="currentNature">Current nature to derive the current amps from</param>
/// <returns>New nature value</returns>
public Nature GetNewNature(int statIndex, Nature currentNature)
@@ -26,6 +26,9 @@ public Nature GetNewNature(int statIndex, Nature currentNature)
return type.GetNewNature(statIndex, up, dn);
}
/// <param name="statIndex">Stat Index to mutate, internal order</param>
/// <param name="up">Current increased stat index, internal order</param>
/// <param name="dn">Current decreased stat index, internal order</param>
/// <inheritdoc cref="GetNewNature(NatureAmpRequest,int,Nature)"/>
public Nature GetNewNature(int statIndex, int up, int dn)
{
@@ -54,6 +57,7 @@ public Nature GetNewNature(int statIndex, int up, int dn)
/// <summary>
/// Decompose the nature to the two stat indexes that are modified
/// </summary>
/// <returns>Tuple containing the increased and decreased stat indexes, internal order</returns>
public (int up, int dn) GetNatureModification()
{
var up = ((byte)nature / 5);
@@ -71,8 +75,8 @@ public bool IsNeutralOrInvalid()
/// <summary>
/// Checks if the nature is out of range or the stat amplifications are not neutral.
/// </summary>
/// <param name="up">Increased stat</param>
/// <param name="dn">Decreased stat</param>
/// <param name="up">Increased stat, internal order</param>
/// <param name="dn">Decreased stat, internal order</param>
/// <returns>True if nature modification values are equal or the Nature is out of range.</returns>
public bool IsNeutralOrInvalid(int up, int dn)
{
@@ -83,7 +87,7 @@ public bool IsNeutralOrInvalid(int up, int dn)
/// Updates stats according to the specified nature.
/// </summary>
/// <param name="stats">Current stats to amplify if appropriate</param>
public void ModifyStatsForNature(Span<ushort> stats)
public void ModifyStatsForAlignment(Span<ushort> stats)
{
var (up, dn) = nature.GetNatureModification();
if (nature.IsNeutralOrInvalid(up, dn))
@@ -99,8 +103,8 @@ public void ModifyStatsForNature(Span<ushort> stats)
/// <summary>
/// Recombine the stat amps into a nature value.
/// </summary>
/// <param name="up">Increased stat</param>
/// <param name="dn">Decreased stat</param>
/// <param name="up">Increased stat, internal order</param>
/// <param name="dn">Decreased stat, internal order</param>
/// <returns>Nature</returns>
public static Nature CreateNatureFromAmps(int up, int dn)
{
@@ -110,7 +114,7 @@ public static Nature CreateNatureFromAmps(int up, int dn)
}
/// <summary>
/// Nature Amplification Table
/// Nature / Stat Alignment Amplification Table, speed last (visual order).
/// </summary>
/// <remarks>-1 is 90%, 0 is 100%, 1 is 110%.</remarks>
public static ReadOnlySpan<sbyte> Table =>
@@ -145,6 +149,13 @@ public static Nature CreateNatureFromAmps(int up, int dn)
private const byte NatureCount = 25;
private const int AmpWidth = 5;
/// <summary>
/// Amplify the stat according to the nature. If the nature is out of range, it will be treated as neutral.
/// </summary>
/// <param name="nature">Nature to use for amplification</param>
/// <param name="index">Stat index to amplify (0-4), visual index</param>
/// <param name="initial">Initial stat value</param>
/// <returns>Amplified stat value</returns>
public static int AmplifyStat(Nature nature, int index, int initial) => GetNatureAmp(nature, index) switch
{
1 => 110 * initial / 100, // 110%
@@ -152,6 +163,12 @@ public static Nature CreateNatureFromAmps(int up, int dn)
_ => initial,
};
/// <summary>
/// Get the nature amp for the specified stat index. If the nature is out of range, it will be treated as neutral.
/// </summary>
/// <param name="nature">Nature to use for amplification</param>
/// <param name="index">Stat index to amplify (0-4), visual index</param>
/// <returns>Nature amp value: 1 for 110%, -1 for 90%, 0 for 100%.</returns>
private static sbyte GetNatureAmp(Nature nature, int index)
{
if ((uint)nature >= NatureCount)
@@ -160,6 +177,11 @@ private static sbyte GetNatureAmp(Nature nature, int index)
return amps[index];
}
/// <summary>
/// Get the nature amps for all stats. If the nature is out of range, it will be treated as neutral.
/// </summary>
/// <param name="nature">Nature to use for amplification</param>
/// <returns>ReadOnlySpan of stat amps for all stats (visual order)</returns>
public static ReadOnlySpan<sbyte> GetAmps(Nature nature)
{
if ((uint)nature >= NatureCount)

View File

@@ -19,7 +19,7 @@ public class EntitySummary : IFatefulEncounterReadOnly // do NOT seal, allow inh
public virtual string Position => "???";
public string Nickname => Entity.Nickname;
public string Species => Get(Strings.specieslist, Entity.Species);
public string Nature => Get(Strings.natures, (byte)Entity.StatNature);
public string Nature => Get(Strings.natures, (byte)Entity.StatAlignment);
public string Gender => Get(GenderSymbols, Entity.Gender);
public string ESV => Entity.PSV.ToString("0000");
public string HP_Type => GetSpan(Strings.HiddenPowerTypes, Entity.HPType);

View File

@@ -2,8 +2,9 @@ namespace PKHeX.Core;
public sealed class SetImportSettings
{
[LocalizedDescription("Apply StatNature to Nature on Import")]
public bool ApplyNature { get; set; } = true;
[LocalizedDescription("Apply Stat Alignment to Nature on Import")]
public bool ApplyStatAlignment { get; set; } = true;
[LocalizedDescription("Apply Markings on Import")]
public bool ApplyMarkings { get; set; } = true;
}

View File

@@ -23,7 +23,7 @@ public static void ReloadSettings(IProgramSettings settings)
SaveFile.SetUpdatePKM = write.SetUpdatePKM ? EntityImportOption.Enable : EntityImportOption.Disable;
SaveFile.SetUpdateRecords = write.SetUpdateRecords ? EntityImportOption.Enable : EntityImportOption.Disable;
CommonEdits.ShowdownSetIVMarkings = settings.Import.ApplyMarkings;
CommonEdits.ShowdownSetBehaviorNature = settings.Import.ApplyNature;
CommonEdits.ShowdownSetBehaviorNature = settings.Import.ApplyStatAlignment;
ParseSettings.Initialize(settings.Legality);
var converter = settings.Converter;

View File

@@ -88,7 +88,7 @@ private void SetPINGA(PB7 pk, in EncounterCriteria criteria)
var ability = criteria.GetAbilityFromNumber(Ability);
criteria.SetRandomIVsGO(pk, Type.MinimumIV);
pk.Nature = pk.StatNature = nature;
pk.Nature = pk.StatAlignment = nature;
pk.Gender = gender;
pk.RefreshAbility(ability);

View File

@@ -173,7 +173,7 @@ private void SetPINGA(PKM pk, in EncounterCriteria criteria)
var nature = criteria.GetNature();
var ability = criteria.GetAbilityFromNumber(Ability);
pk.Nature = pk.StatNature = nature;
pk.Nature = pk.StatAlignment = nature;
pk.Gender = gender;
pk.AbilityNumber = 1 << ability;

View File

@@ -68,7 +68,7 @@ public PK6 ConvertToPKM(ITrainerInfo tr, EncounterCriteria criteria)
Country = geo.Country,
Region = geo.Region,
};
pk.StatNature = pk.Nature;
pk.StatAlignment = pk.Nature;
pk.SetHatchMemory6();
if (Species is (int)Core.Species.Scatterbug)

View File

@@ -66,7 +66,7 @@ public PK7 ConvertToPKM(ITrainerInfo tr, EncounterCriteria criteria)
Country = geo.Country,
Region = geo.Region,
};
pk.StatNature = pk.Nature;
pk.StatAlignment = pk.Nature;
if (Species is (int)Core.Species.Scatterbug)
pk.Form = Vivillon3DS.GetPattern(pk.Country, pk.Region);

View File

@@ -59,7 +59,7 @@ public PK8 ConvertToPKM(ITrainerInfo tr, EncounterCriteria criteria)
Nature = criteria.GetNature(),
Gender = criteria.GetGender(pi),
};
pk.StatNature = pk.Nature;
pk.StatAlignment = pk.Nature;
SetEncounterMoves(pk);

View File

@@ -94,7 +94,7 @@ private void SetPINGA(PK8 pk, in EncounterCriteria criteria, PersonalInfo8SWSH p
{
bool symbol = Parent.PermitCrossover;
pk.RefreshAbility(criteria.GetAbilityFromNumber(Ability));
pk.Nature = pk.StatNature = criteria.GetNature();
pk.Nature = pk.StatAlignment = criteria.GetNature();
pk.Gender = criteria.GetGender(pi);
var req = GetRequirement(pk);

View File

@@ -119,7 +119,7 @@ private void SetPINGA(PK8 pk, in EncounterCriteria criteria)
var pi = PersonalTable.SWSH[Species, Form];
pk.RefreshAbility(criteria.GetAbilityFromNumber(Ability));
pk.Nature = pk.StatNature = criteria.GetNature();
pk.Nature = pk.StatAlignment = criteria.GetNature();
pk.Gender = criteria.GetGender(Gender, pi);
var req = GetRequirement(pk);

View File

@@ -154,7 +154,7 @@ private void SetPINGA(PK8 pk, in EncounterCriteria criteria, PersonalInfo8SWSH p
var gender = criteria.GetGender(Gender, pi);
var nature = criteria.GetNature(Nature);
int ability = criteria.GetAbilityFromNumber(Ability);
pk.Nature = pk.StatNature = nature;
pk.Nature = pk.StatAlignment = nature;
pk.Gender = gender;
pk.RefreshAbility(ability);
if (IVs.IsSpecified)

View File

@@ -179,7 +179,7 @@ private void SetPINGA(PB8 pk, in EncounterCriteria criteria, PersonalInfo8BDSP p
// Set the rest of the values as per our generating via the egg seed.
pk.EncryptionConstant = rng.NextUInt(); // PID would be re-rolled after here, but we aren't going to have re-rolls in our hypothetical setup.
pk.SetIVs(ivs);
pk.StatNature = pk.Nature = criteria.GetNature(); // Everstone (see above)
pk.StatAlignment = pk.Nature = criteria.GetNature(); // Everstone (see above)
pk.Gender = gender;
pk.RefreshAbility(abilityIndex);
return;

View File

@@ -106,7 +106,7 @@ private void SetPINGA(PB8 pk, in EncounterCriteria criteria, PersonalInfo8BDSP p
pk.PID = EncounterUtil.GetRandomPID(pk, rnd, criteria.Shiny);
pk.EncryptionConstant = rnd.Rand32();
criteria.SetRandomIVs(pk);
pk.Nature = pk.StatNature = criteria.GetNature();
pk.Nature = pk.StatAlignment = criteria.GetNature();
pk.Gender = criteria.GetGender(pi);
pk.RefreshAbility(criteria.GetAbilityFromNumber(Ability));

View File

@@ -88,7 +88,7 @@ public PB8 ConvertToPKM(ITrainerInfo tr, EncounterCriteria criteria)
MetDate = EncounterDate.GetDateSwitch(),
Gender = Gender,
Nature = Nature,
StatNature = Nature,
StatAlignment = Nature,
Ball = (byte)FixedBall,
ID32 = ID32,

View File

@@ -60,7 +60,7 @@ public PK9 ConvertToPKM(ITrainerInfo tr, EncounterCriteria criteria)
Nature = criteria.GetNature(),
Gender = criteria.GetGender(pi),
};
pk.StatNature = pk.Nature;
pk.StatAlignment = pk.Nature;
SetEncounterMoves(pk);

View File

@@ -115,7 +115,7 @@ private void SetPINGA(PK9 pk, in EncounterCriteria criteria, PersonalInfo9SV pi)
var rnd = Util.Rand;
pk.PID = EncounterUtil.GetRandomPID(pk, rnd, criteria.Shiny);
pk.EncryptionConstant = rnd.Rand32();
pk.Nature = pk.StatNature = criteria.GetNature();
pk.Nature = pk.StatAlignment = criteria.GetNature();
pk.Gender = criteria.GetGender(pi);
pk.RefreshAbility(criteria.GetAbilityFromNumber(Ability));

View File

@@ -116,7 +116,7 @@ private void SetPINGA(PK9 pk, in EncounterCriteria criteria, PersonalInfo9SV pi)
var rnd = Util.Rand;
pk.PID = EncounterUtil.GetRandomPID(pk, rnd, criteria.Shiny);
pk.EncryptionConstant = rnd.Rand32();
pk.Nature = pk.StatNature = criteria.GetNature();
pk.Nature = pk.StatAlignment = criteria.GetNature();
pk.Gender = criteria.GetGender(pi);
pk.RefreshAbility(criteria.GetAbilityFromNumber(Ability));

View File

@@ -88,7 +88,7 @@ private void SetPINGA(PK9 pk, in EncounterCriteria criteria, PersonalInfo9SV pi)
pk.EncryptionConstant = rnd.Rand32();
criteria.SetRandomIVs(pk);
pk.Nature = pk.StatNature = criteria.GetNature();
pk.Nature = pk.StatAlignment = criteria.GetNature();
pk.Gender = criteria.GetGender(Gender, pi);
pk.RefreshAbility(criteria.GetAbilityFromNumber(Ability));

View File

@@ -155,7 +155,7 @@ private void SetPINGA(PK9 pk, in EncounterCriteria criteria, PersonalInfo9SV pi)
if (Gender != FixedGenderUtil.GenderRandom)
pk.Gender = Gender;
if (Nature.IsFixed)
pk.Nature = pk.StatNature = Nature;
pk.Nature = pk.StatAlignment = Nature;
}
#endregion

View File

@@ -84,7 +84,7 @@ public PK9 ConvertToPKM(ITrainerInfo tr, EncounterCriteria criteria)
MetDate = EncounterDate.GetDateSwitch(),
Gender = Gender,
Nature = Nature,
StatNature = Nature,
StatAlignment = Nature,
Ball = (byte)FixedBall,
ID32 = ID32,
@@ -130,7 +130,7 @@ private void SetPINGA(PK9 pk, in EncounterCriteria criteria, PersonalInfo9SV pi)
var rnd = Util.Rand;
pk.PID = EncounterUtil.GetRandomPID(pk, rnd, Shiny, criteria.Shiny);
pk.EncryptionConstant = rnd.Rand32();
pk.Nature = pk.StatNature = criteria.GetNature(Nature);
pk.Nature = pk.StatAlignment = criteria.GetNature(Nature);
pk.Gender = criteria.GetGender(Gender, pi);
pk.RefreshAbility(criteria.GetAbilityFromNumber(Ability));
criteria.SetRandomIVs(pk, IVs);

View File

@@ -75,7 +75,7 @@ public PA9 ConvertToPKM(ITrainerInfo tr, EncounterCriteria criteria)
MetDate = EncounterDate.GetDateSwitch(),
Gender = Gender,
Nature = Nature,
StatNature = Nature,
StatAlignment = Nature,
Ball = (byte)FixedBall,
ID32 = ID32,

View File

@@ -110,7 +110,7 @@ public static bool GenerateData(PA9 pk, in GenerateParam9a enc, in EncounterCrit
// Compromise on Nature -- some are fixed, some are random. If the request wants a specific nature, just mint it.
if (criteria.IsSpecifiedNature() && !criteria.IsSatisfiedNature(nature))
return false;
pk.Nature = pk.StatNature = nature;
pk.Nature = pk.StatAlignment = nature;
// If Hyperspace, the player can have an active Teensy/Humungo boost. The scale is pre-determined outside of the seed=>pa9, consider it not correlated or traceable.
// When calling the method to verify the entity, pass SizeType9.VALUE instead.

View File

@@ -94,7 +94,7 @@ public sealed class LegalityCheckLocalization
public string EggLocationTrade { get; init; } = "Able to hatch a traded Egg at Met Location.";
public string EggLocationTradeFail { get; init; } = "Invalid Egg Location, shouldn't be 'traded' while an Egg.";
public string EggMetLocationFail { get; init; } = "Can't obtain Egg from Egg Location.";
public string EggNature { get; init; } = "Eggs cannot have their Stat Nature changed.";
public string EggNature { get; init; } = "Eggs cannot have their Stat Alignment changed.";
public string EggPP { get; init; } = "Eggs cannot have modified move PP counts.";
public string EggPPUp { get; init; } = "Cannot apply PP Ups to an Egg.";
public string EggRelearnFlags { get; init; } = "Expected no Relearn Move Flags.";
@@ -370,7 +370,7 @@ public sealed class LegalityCheckLocalization
public string StatIncorrectCP { get; init; } = "Calculated CP does not match stored value.";
public string StatGigantamaxInvalid { get; init; } = "Gigantamax Flag mismatch.";
public string StatGigantamaxValid { get; init; } = "Gigantamax Flag was changed via Max Soup.";
public string StatNatureInvalid { get; init; } = "Stat Nature is not within the expected range.";
public string StatAlignmentInvalid { get; init; } = "Stat Alignment is not within the expected range.";
public string StatBattleVersionInvalid { get; init; } = "Battle Version is not within the expected range.";
public string StatNobleInvalid { get; init; } = "Noble Flag mismatch.";
public string StatAlphaInvalid { get; init; } = "Alpha Flag mismatch.";

View File

@@ -367,7 +367,7 @@ public static class LegalityCheckResultCodeExtensions
StatIncorrectCP_0 => localization.StatIncorrectCP,
StatGigantamaxInvalid => localization.StatGigantamaxInvalid,
StatGigantamaxValid => localization.StatGigantamaxValid,
StatNatureInvalid => localization.StatNatureInvalid,
StatAlignmentInvalid => localization.StatAlignmentInvalid,
StatBattleVersionInvalid => localization.StatBattleVersionInvalid,
StatNobleInvalid => localization.StatNobleInvalid,
StatAlphaInvalid => localization.StatAlphaInvalid,

View File

@@ -139,9 +139,13 @@ public static bool Verify(PKM pk, ulong seed, Span<int> ivs, in GenerateParam8 p
if (s.WeightScalar != weight)
{
if (height == 0 && s.WeightScalar == 0 && HomeQuirks.HasEnteredSetZeroScale(pk))
{ } // OK
{
// OK
}
else
{
return false;
}
}
}
}
@@ -251,7 +255,7 @@ public static bool TryApply(PK8 pk, ulong seed, Span<int> ivs, in GenerateParam8
if (criteria.IsSpecifiedNature() && !criteria.IsSatisfiedNature(nature))
return false;
pk.Nature = pk.StatNature = nature;
pk.Nature = pk.StatAlignment = nature;
var height = rng.NextInt(0x81) + rng.NextInt(0x80);
var weight = rng.NextInt(0x81) + rng.NextInt(0x80);

View File

@@ -176,7 +176,7 @@ public static bool TryApplyFromSeed(PA8 pk, in EncounterCriteria criteria, in Ov
var nature = (Nature)rand.NextInt(25);
if (criteria.IsSpecifiedNature() && !criteria.IsSatisfiedNature(nature))
return false;
pk.Nature = pk.StatNature = nature;
pk.Nature = pk.StatAlignment = nature;
var (height, weight) = para.IsAlpha
? (byte.MaxValue, byte.MaxValue)

View File

@@ -22,7 +22,7 @@ public static void ApplyDetails(PB8 pk, in EncounterCriteria criteria, Shiny shi
// Since the inner methods do not set Gender (only fixed Genders are applicable) and Nature (assume Synchronize used), set them here.
pk.Gender = (byte)(pk.Species == (int)Species.Cresselia ? 1 : 2); // Mesprit
pk.Nature = pk.StatNature = criteria.GetNature();
pk.Nature = pk.StatAlignment = criteria.GetNature();
int ctr = 0;
var rnd = Util.Rand;

View File

@@ -134,7 +134,7 @@ public static bool TryApplyFromSeed(PB8 pk, in EncounterCriteria criteria, Shiny
if (!criteria.IsSatisfiedNature(nature))
return false;
pk.StatNature = pk.Nature = nature;
pk.StatAlignment = pk.Nature = nature;
// Remainder
pk.HeightScalar = (byte)(xors.NextUInt(0x81) + xors.NextUInt(0x80));

View File

@@ -128,7 +128,7 @@ public static bool GenerateData(PK9 pk, in GenerateParam9 enc, in EncounterCrite
// Compromise on Nature -- some are fixed, some are random. If the request wants a specific nature, just mint it.
if (criteria.IsSpecifiedNature() && !criteria.IsSatisfiedNature(nature))
return false;
pk.Nature = pk.StatNature = nature;
pk.Nature = pk.StatAlignment = nature;
pk.HeightScalar = enc.Height != 0 ? enc.Height : (byte)(rand.NextInt(0x81) + rand.NextInt(0x80));
pk.WeightScalar = enc.Weight != 0 ? enc.Weight : (byte)(rand.NextInt(0x81) + rand.NextInt(0x80));

View File

@@ -311,7 +311,7 @@ public enum LegalityCheckResultCode : ushort
StatInvalidHeightWeight,
StatGigantamaxInvalid,
StatGigantamaxValid,
StatNatureInvalid,
StatAlignmentInvalid,
StatBattleVersionInvalid,
StatNobleInvalid,
StatAlphaInvalid,

View File

@@ -57,7 +57,7 @@ internal void VerifyCommon(LegalityAnalysis data, PKM pk)
{
if (record.GetMoveRecordFlagAny())
data.AddLine(GetInvalid(Egg, EggRelearnFlags));
if (pk.StatNature != pk.Nature)
if (pk.StatAlignment != pk.Nature)
data.AddLine(GetInvalid(Egg, EggNature));
}
}

View File

@@ -177,12 +177,12 @@ private static int GetAverageFeel(IContestStatsReadOnly s, Nature nature, IConte
return (int)Math.Ceiling(sum / 5f);
}
// Indexes into the NatureAmpTable
private const int AmpIndexCool = 0; // Spicy
private const int AmpIndexTough = 1; // Sour
private const int AmpIndexBeauty = 2; // Dry
private const int AmpIndexSmart = 3; // Bitter
private const int AmpIndexCute = 4; // Sweet
// Indexes into the NatureAmpTable (visual index)
private const int AmpIndexCool = 0; // Spicy (Attack)
private const int AmpIndexTough = 1; // Sour (Defense)
private const int AmpIndexBeauty = 2; // Dry (Sp. Attack)
private const int AmpIndexSmart = 3; // Bitter (Sp. Defense)
private const int AmpIndexCute = 4; // Sweet (Speed)
private static int GetGainedSum(IContestStatsReadOnly s, Nature nature, IContestStatsReadOnly initial)
{

View File

@@ -8,17 +8,17 @@ namespace PKHeX.Core;
internal static class MiscVerifierHelpers
{
internal static void VerifyStatNature(LegalityAnalysis data, PKM pk)
internal static void VerifyStatAlignment(LegalityAnalysis data, PKM pk)
{
// No encounters innately come with a different Stat Nature...
// No encounters innately come with a different Stat Alignment...
// If it matches the Nature, it is valid. If it doesn't, it should be one of the mint natures.
var statNature = pk.StatNature;
if (statNature == pk.Nature)
var alignment = pk.StatAlignment;
if (alignment == pk.Nature)
return;
// Must be a valid mint nature.
if (!statNature.IsMint)
data.AddLine(Get(Invalid, Misc, StatNatureInvalid));
if (!alignment.IsMint)
data.AddLine(Get(Invalid, Misc, StatAlignmentInvalid));
}
internal static void VerifyAbsoluteSizes<T>(LegalityAnalysis data, T pk) where T : IScaledSizeValue

View File

@@ -18,7 +18,7 @@ public override void Verify(LegalityAnalysis data)
internal void Verify(LegalityAnalysis data, PA8 pk)
{
Arceus.Verify(data);
MiscVerifierHelpers.VerifyStatNature(data, pk);
MiscVerifierHelpers.VerifyStatAlignment(data, pk);
MiscVerifierHelpers.VerifyAbsoluteSizes(data, pk);
MiscVerifierPK8.VerifyTechRecordFlags(data, pk); // copied from SW/SH via HOME
FullnessRules.Verify(data, pk);

View File

@@ -17,7 +17,7 @@ public override void Verify(LegalityAnalysis data)
internal void Verify(LegalityAnalysis data, PA9 pa9)
{
MiscVerifierHelpers.VerifyStatNature(data, pa9);
MiscVerifierHelpers.VerifyStatAlignment(data, pa9);
LegendsZA.Verify(data);
if (!pa9.IsBattleVersionValid(data.Info.EvoChainsAllGens))

View File

@@ -15,7 +15,7 @@ public override void Verify(LegalityAnalysis data)
internal void Verify(LegalityAnalysis data, PB8 pk)
{
MiscVerifierHelpers.VerifyStatNature(data, pk);
MiscVerifierHelpers.VerifyStatAlignment(data, pk);
MiscVerifierPK8.VerifyTechRecordFlags(data, pk); // copied from SW/SH via HOME
FullnessRules.Verify(data, pk);

View File

@@ -15,7 +15,7 @@ public override void Verify(LegalityAnalysis data)
internal void Verify(LegalityAnalysis data, PK8 pk)
{
MiscVerifierHelpers.VerifyStatNature(data, pk);
MiscVerifierHelpers.VerifyStatAlignment(data, pk);
VerifyTechRecordFlags(data, pk);
FullnessRules.Verify(data, pk);

View File

@@ -16,7 +16,7 @@ public override void Verify(LegalityAnalysis data)
internal void Verify(LegalityAnalysis data, PK9 pk)
{
MiscVerifierHelpers.VerifyStatNature(data, pk);
MiscVerifierHelpers.VerifyStatAlignment(data, pk);
VerifyTechRecordFlags(data, pk);
if (!pk.IsBattleVersionValid(data.Info.EvoChainsAllGens))

View File

@@ -549,7 +549,7 @@ private void SetEggMetData(PA8 pk)
private void SetPINGA(PA8 pk, in EncounterCriteria criteria)
{
var pi = pk.PersonalInfo;
pk.Nature = pk.StatNature = criteria.GetNature((sbyte)Nature == -1 ? Nature.Random : Nature);
pk.Nature = pk.StatAlignment = criteria.GetNature((sbyte)Nature == -1 ? Nature.Random : Nature);
pk.Gender = criteria.GetGender(Gender, pi);
var av = GetAbilityIndex(criteria);
pk.RefreshAbility(av);

View File

@@ -528,7 +528,7 @@ private void SetPINGA(PA9 pk, EncounterCriteria criteria, PersonalInfo9ZA pi)
{
if (IsHOMEGift) // Do not use LumioseRNG for HOME gifts
{
pk.Nature = pk.StatNature = criteria.GetNature((sbyte)Nature == -1 ? Nature.Random : Nature);
pk.Nature = pk.StatAlignment = criteria.GetNature((sbyte)Nature == -1 ? Nature.Random : Nature);
pk.Gender = criteria.GetGender(Gender, pi);
var av = GetAbilityIndex(criteria, AbilityType);
pk.RefreshAbility(av);

View File

@@ -549,7 +549,7 @@ private void SetEggMetData(PB8 pk, DateOnly date)
private void SetPINGA(PB8 pk, in EncounterCriteria criteria)
{
var pi = pk.PersonalInfo;
pk.Nature = pk.StatNature = criteria.GetNature((sbyte)Nature == -1 ? Nature.Random : Nature);
pk.Nature = pk.StatAlignment = criteria.GetNature((sbyte)Nature == -1 ? Nature.Random : Nature);
pk.Gender = criteria.GetGender(Gender, pi);
var av = GetAbilityIndex(criteria);
pk.RefreshAbility(av);

View File

@@ -568,7 +568,7 @@ private void SetEggMetData(PK8 pk)
private void SetPINGA(PK8 pk, in EncounterCriteria criteria)
{
var pi = pk.PersonalInfo;
pk.Nature = pk.StatNature = criteria.GetNature((sbyte)Nature == -1 ? Nature.Random : Nature);
pk.Nature = pk.StatAlignment = criteria.GetNature((sbyte)Nature == -1 ? Nature.Random : Nature);
pk.Gender = criteria.GetGender(Gender, pi);
var av = GetAbilityIndex(criteria);
pk.RefreshAbility(av);

View File

@@ -570,7 +570,7 @@ private void SetEggMetData(PK9 pk)
private void SetPINGA(PK9 pk, in EncounterCriteria criteria)
{
var pi = pk.PersonalInfo;
pk.Nature = pk.StatNature = criteria.GetNature((sbyte)Nature == -1 ? Nature.Random : Nature);
pk.Nature = pk.StatAlignment = criteria.GetNature((sbyte)Nature == -1 ? Nature.Random : Nature);
pk.Gender = criteria.GetGender(Gender, pi);
var av = GetAbilityIndex(criteria);
pk.RefreshAbility(av);

View File

@@ -43,7 +43,7 @@ public int WriteTo(Span<byte> result)
public ushort MarkingValue { get => ReadUInt16LittleEndian(Data[0x18..]); set => WriteUInt16LittleEndian(Data[0x18..], value); }
public uint PID { get => ReadUInt32LittleEndian(Data[0x1A..]); set => WriteUInt32LittleEndian(Data[0x1A..], value); }
public Nature Nature { get => (Nature)Data[0x1E]; set => Data[0x1E] = (byte)value; }
public Nature StatNature { get => (Nature)Data[0x1F]; set => Data[0x1F] = (byte)value; }
public Nature StatAlignment { get => (Nature)Data[0x1F]; set => Data[0x1F] = (byte)value; }
public bool FatefulEncounter { get => Data[0x20] != 0; set => Data[0x20] = (byte)(value ? 1 : 0); }
public byte Gender { get => Data[0x21]; set => Data[0x21] = value; }
public byte Form { get => Data[0x22]; set => WriteUInt16LittleEndian(Data[0x22..], value); }
@@ -333,7 +333,7 @@ public void CopyFrom(PKM pk)
EXP = pk.EXP;
MarkingValue = pk is IAppliedMarkings7 m7 ? m7.MarkingValue : (ushort)0;
Nature = pk.Nature;
StatNature = pk.StatNature;
StatAlignment = pk.StatAlignment;
FatefulEncounter = pk.FatefulEncounter;
// HeldItem = pk.HeldItem;
IV_HP = pk.IV_HP;
@@ -391,7 +391,7 @@ public void CopyTo(PKM pk)
if (pk is IAppliedMarkings7 m7)
m7.MarkingValue = MarkingValue;
pk.Nature = Nature;
pk.StatNature = StatNature;
pk.StatAlignment = StatAlignment;
pk.FatefulEncounter = FatefulEncounter;
pk.HeldItem = HeldItem;
pk.IV_HP = IV_HP;

View File

@@ -106,7 +106,7 @@ private static Memory<byte> DecryptHome(Memory<byte> data)
public ushort MarkingValue { get => Core.MarkingValue; set => Core.MarkingValue = value; }
public override uint PID { get => Core.PID; set => Core.PID = value; }
public override Nature Nature { get => Core.Nature; set => Core.Nature = value; }
public override Nature StatNature { get => Core.StatNature; set => Core.StatNature = value; }
public override Nature StatAlignment { get => Core.StatAlignment; set => Core.StatAlignment = value; }
public override bool FatefulEncounter { get => Core.FatefulEncounter; set => Core.FatefulEncounter = value; }
public override byte Gender { get => Core.Gender; set => Core.Gender = value; }
public override byte Form { get => Core.Form; set => Core.Form = value; }

View File

@@ -138,7 +138,7 @@ public void FixRelearn()
// 0x1B alignment unused
public override uint PID { get => ReadUInt32LittleEndian(Data[0x1C..]); set => WriteUInt32LittleEndian(Data[0x1C..], value); }
public override Nature Nature { get => (Nature)Data[0x20]; set => Data[0x20] = (byte)value; }
public override Nature StatNature { get => (Nature)Data[0x21]; set => Data[0x21] = (byte)value; }
public override Nature StatAlignment { get => (Nature)Data[0x21]; set => Data[0x21] = (byte)value; }
public override bool FatefulEncounter { get => (Data[0x22] & 1) == 1; set => Data[0x22] = (byte)((Data[0x22] & ~0x01) | (value ? 1 : 0)); }
public bool Flag2 { get => (Data[0x22] & 2) == 2; set => Data[0x22] = (byte)((Data[0x22] & ~0x02) | (value ? 2 : 0)); }
public override byte Gender { get => (byte)((Data[0x22] >> 2) & 0x3); set => Data[0x22] = (byte)((Data[0x22] & 0xF3) | (value << 2)); }
@@ -514,7 +514,7 @@ public ulong Tracker
public override void LoadStats(IBaseStat p, Span<ushort> stats)
{
var level = CurrentLevel;
var nature = StatNature;
var nature = StatAlignment;
stats[0] = (ushort)(GetGanbaruStat(p.HP, HT_HP ? 31 : IV_HP, GV_HP, level) + GetStatHp(p.HP, level));
stats[1] = (ushort)(GetGanbaruStat(p.ATK, HT_ATK ? 31 : IV_ATK, GV_ATK, level) + GetStat(p.ATK, level, nature, 0));

View File

@@ -126,7 +126,7 @@ public void FixRelearn()
// 0x1B alignment unused
public override uint PID { get => ReadUInt32LittleEndian(Data[0x1C..]); set => WriteUInt32LittleEndian(Data[0x1C..], value); }
public override Nature Nature { get => (Nature)Data[0x20]; set => Data[0x20] = (byte)value; }
public override Nature StatNature { get => (Nature)Data[0x21]; set => Data[0x21] = (byte)value; }
public override Nature StatAlignment { get => (Nature)Data[0x21]; set => Data[0x21] = (byte)value; }
public override bool FatefulEncounter { get => (Data[0x22] & 1) == 1; set => Data[0x22] = (byte)((Data[0x22] & ~0x01) | (value ? 1 : 0)); }
public override byte Gender { get => (byte)((Data[0x22] >> 1) & 0x3); set => Data[0x22] = (byte)((Data[0x22] & 0xF9) | (value << 1)); }
public bool IsAlpha { get => Data[0x23] != 0; set => Data[0x23] = (byte)(value ? 1 : 0); }

View File

@@ -131,7 +131,7 @@ public void FixRelearn()
// 0x1B alignment unused
public override uint PID { get => ReadUInt32LittleEndian(Data[0x1C..]); set => WriteUInt32LittleEndian(Data[0x1C..], value); }
public override Nature Nature { get => (Nature)Data[0x20]; set => Data[0x20] = (byte)value; }
public override Nature StatNature { get => (Nature)Data[0x21]; set => Data[0x21] = (byte)value; }
public override Nature StatAlignment { get => (Nature)Data[0x21]; set => Data[0x21] = (byte)value; }
public override bool FatefulEncounter { get => (Data[0x22] & 1) == 1; set => Data[0x22] = (byte)((Data[0x22] & ~0x01) | (value ? 1 : 0)); }
public override byte Gender { get => (byte)((Data[0x22] >> 1) & 0x3); set => Data[0x22] = (byte)((Data[0x22] & 0xF9) | (value << 1)); }
// 0x23 alignment unused

View File

@@ -105,7 +105,7 @@ public virtual void WriteEncryptedDataParty(Span<byte> stored, Span<byte> party)
public abstract int HeldItem { get; set; }
public abstract byte Gender { get; set; }
public abstract Nature Nature { get; set; }
public virtual Nature StatNature { get => Nature; set => Nature = value; }
public virtual Nature StatAlignment { get => Nature; set => Nature = value; }
public abstract int Ability { get; set; }
public abstract byte CurrentFriendship { get; set; }
public abstract byte Form { get; set; }
@@ -753,8 +753,8 @@ public virtual void LoadStats(IBaseStat p, Span<ushort> stats)
else
LoadStats(stats, p, level);
// Amplify stats based on the stat nature.
StatNature.ModifyStatsForNature(stats);
// Amplify stats based on the stat alignment.
StatAlignment.ModifyStatsForAlignment(stats);
}
private void LoadStats(Span<ushort> stats, IBaseStat p, IHyperTrain t, byte level)

View File

@@ -168,7 +168,7 @@ private bool SearchSimple(PKM pk)
return false;
if (Ability > -1 && pk.Ability != Ability)
return false;
if (Nature.IsFixed && pk.StatNature != Nature)
if (Nature.IsFixed && pk.StatAlignment != Nature)
return false;
if (Item > -1 && pk.HeldItem != Item)
return false;

View File

@@ -112,7 +112,7 @@ public void FixRelearn()
// 0x1B alignment unused
public override uint PID { get => ReadUInt32LittleEndian(Data[0x1C..]); set => WriteUInt32LittleEndian(Data[0x1C..], value); }
public override Nature Nature { get => (Nature)Data[0x20]; set => Data[0x20] = (byte)value; }
public override Nature StatNature { get => (Nature)Data[0x21]; set => Data[0x21] = (byte)value; }
public override Nature StatAlignment { get => (Nature)Data[0x21]; set => Data[0x21] = (byte)value; }
public override bool FatefulEncounter { get => (Data[0x22] & 1) == 1; set => Data[0x22] = (byte)((Data[0x22] & ~0x01) | (value ? 1 : 0)); }
public bool Flag2 { get => (Data[0x22] & 2) == 2; set => Data[0x22] = (byte)((Data[0x22] & ~0x02) | (value ? 2 : 0)); }
public override byte Gender { get => (byte)((Data[0x22] >> 2) & 0x3); set => Data[0x22] = (byte)((Data[0x22] & 0xF3) | (value << 2)); }

View File

@@ -53,7 +53,7 @@
"EggLocationTrade": "Ein getauschtes Ei kann am Fundort ausgebrütet werden.",
"EggLocationTradeFail": "Ungültiger Ei-Ort, sollte im Ei-Status nicht 'getauscht' sein.",
"EggMetLocationFail": "Ei kann an diesem Ei-Ort nicht erhalten werden.",
"EggNature": "Das Wesen (Statuswerte) eines Eis kann nicht geändert werden.",
"EggNature": "Statuswertanpassung eines Ei kann nicht geändert werden.",
"EggPP": "Eier können keine modifizierten AP-Werte haben.",
"EggPPUp": "AP-Plus kann nicht auf ein Ei angewendet werden.",
"EggRelearnFlags": "Keine Markierungen für wiedererlernbare Attacken erwartet.",
@@ -293,7 +293,7 @@
"StatIncorrectCP": "Berechnete WP stimmen nicht mit dem gespeicherten Wert überein.",
"StatGigantamaxInvalid": "Gigadynamax-Markierung fehlerhaft.",
"StatGigantamaxValid": "Gigadynamax-Markierung wurde durch Dyna-Suppe geändert.",
"StatNatureInvalid": "Status-Wesen liegt nicht im erwarteten Bereich.",
"StatAlignmentInvalid": "Statuswertanpassung liegt nicht im erwarteten Bereich.",
"StatBattleVersionInvalid": "Kampf-Version liegt nicht im erwarteten Bereich.",
"StatNobleInvalid": "Königliche-Markierung fehlerhaft.",
"StatAlphaInvalid": "Elite-Markierung fehlerhaft.",

View File

@@ -53,7 +53,7 @@
"EggLocationTrade": "Able to hatch a traded Egg at Met Location.",
"EggLocationTradeFail": "Invalid Egg Location, shouldn't be 'traded' while an Egg.",
"EggMetLocationFail": "Can't obtain Egg from Egg Location.",
"EggNature": "Eggs cannot have their Stat Nature changed.",
"EggNature": "Eggs cannot have their Stat Alignment changed.",
"EggPP": "Eggs cannot have modified move PP counts.",
"EggPPUp": "Cannot apply PP Ups to an Egg.",
"EggRelearnFlags": "Expected no Relearn Move Flags.",
@@ -293,7 +293,7 @@
"StatIncorrectCP": "Calculated CP does not match stored value.",
"StatGigantamaxInvalid": "Gigantamax Flag mismatch.",
"StatGigantamaxValid": "Gigantamax Flag was changed via Max Soup.",
"StatNatureInvalid": "Stat Nature is not within the expected range.",
"StatAlignmentInvalid": "Stat Alignment is not within the expected range.",
"StatBattleVersionInvalid": "Battle Version is not within the expected range.",
"StatNobleInvalid": "Noble Flag mismatch.",
"StatAlphaInvalid": "Alpha Flag mismatch.",

View File

@@ -53,7 +53,7 @@
"EggLocationTrade": "Se puede eclosionar el Huevo intercambiado en la localización.",
"EggLocationTradeFail": "Localización del Huevo inválida, no debería haber sido intercambiado mientras era un Huevo.",
"EggMetLocationFail": "No se puede obtener el Huevo en la localización.",
"EggNature": "Los Huevos no pueden tener Naturaleza estadística.",
"EggNature": "Los Huevos no pueden tener ajustes de estadísticas.",
"EggPP": "Los Huevos no pueden tener los contadores de PP modificados.",
"EggPPUp": "No se puede aplicar Más PP a un huevo.",
"EggRelearnFlags": "Los Huevos no pueden tener Discos Técnicos marcados.",
@@ -293,7 +293,7 @@
"StatIncorrectCP": "Los PC calculados no coinciden con el valor almacenado.",
"StatGigantamaxInvalid": "Gigamax incompatible.",
"StatGigantamaxValid": "La marca de Gigamax fue cambiada por Maxisopa.",
"StatNatureInvalid": "La estadística de la naturaleza no está dentro del rango esperado.",
"StatAlignmentInvalid": "La variación de características no está dentro del rango esperado.",
"StatBattleVersionInvalid": "La Versión de Batalla no está dentro del rango esperado.",
"StatNobleInvalid": "Pokémon señorial incompatible.",
"StatAlphaInvalid": "Alfa incompatible.",

View File

@@ -53,7 +53,7 @@
"EggLocationTrade": "Se puede eclosionar el Huevo intercambiado en la localización.",
"EggLocationTradeFail": "Localización del Huevo inválida, no debería haber sido intercambiado mientras era un Huevo.",
"EggMetLocationFail": "No se puede obtener el Huevo en la localización.",
"EggNature": "Los Huevos no pueden tener Naturaleza estadística.",
"EggNature": "Los Huevos no pueden tener ajustes de estadísticas.",
"EggPP": "Los Huevos no pueden tener los contadores de PP modificados.",
"EggPPUp": "No se puede aplicar Más PP a un huevo.",
"EggRelearnFlags": "Los Huevos no pueden tener Discos Técnicos marcados.",
@@ -293,7 +293,7 @@
"StatIncorrectCP": "Los PC calculados no coinciden con el valor almacenado.",
"StatGigantamaxInvalid": "Gigamax incompatible.",
"StatGigantamaxValid": "La marca de Gigamax fue cambiada por Maxisopa.",
"StatNatureInvalid": "La estadística de la naturaleza no está dentro del rango esperado.",
"StatAlignmentInvalid": "La variación de características no está dentro del rango esperado.",
"StatBattleVersionInvalid": "La Versión de Batalla no está dentro del rango esperado.",
"StatNobleInvalid": "Pokémon señorial incompatible.",
"StatAlphaInvalid": "Alfa incompatible.",

View File

@@ -53,7 +53,7 @@
"EggLocationTrade": "Œuf échangé peut éclore au Lieu de Rencontre.",
"EggLocationTradeFail": "Lieu de Rencontre de l'Œuf non valide, ne devrait pas être « échangé » en Œuf.",
"EggMetLocationFail": "L'Œuf ne peut pas être obtenu au Lieu de Rencontre.",
"EggNature": "Impossible de modifier la statistique de Nature d'un Œuf.",
"EggNature": "Impossible de modifier l'ajustement des statistiques d'un Œuf.",
"EggPP": "Impossible de modifier les PP d'un Œuf.",
"EggPPUp": "Impossible d'appliquer des PP Plus à un Œuf.",
"EggRelearnFlags": "Aucun drapeau de Capacité Réapprise attendu.",
@@ -293,7 +293,7 @@
"StatIncorrectCP": "Les PCs calculés ne correspondent pas à la valeur enregistrée.",
"StatGigantamaxInvalid": "Le drapeau de Gigamax est incorrect.",
"StatGigantamaxValid": "Le drapeau de Gigamax a été changé avec une Maxi Soupe.",
"StatNatureInvalid": "La Stat de la Nature n'est pas dans la plage attendue.",
"StatAlignmentInvalid": "La Ajust. de stats n'est pas dans la plage attendue.",
"StatBattleVersionInvalid": "La Version de Combat n'est pas dans la plage attendue.",
"StatNobleInvalid": "Le drapeau de Monarque est incorrect.",
"StatAlphaInvalid": "Le drapeau de Baron est incorrect.",

View File

@@ -53,7 +53,7 @@
"EggLocationTrade": "È possibile schiudere un Uovo scambiato nel luogo di incontro.",
"EggLocationTradeFail": "Il luogo di incontro non dovrebbe essere 'Scambio', se è un Uovo.",
"EggMetLocationFail": "Impossibile ottenre l'Uovo nel Luogo dell'Uovo.",
"EggNature": "Le Uova non possono avere la Natura delle Statistiche cambiata.",
"EggNature": "Le Uova non possono avere l'aggiustamento delle statistiche cambiato.",
"EggPP": "Le Uova non possono avere modifiche ai PP.",
"EggPPUp": "Non si possono applicare PP Up alle Uova.",
"EggRelearnFlags": "Non sono previsti segnali di Mosse Ricordabili.",
@@ -293,9 +293,9 @@
"StatIncorrectCP": "I PL calcolati non combaciano con il valore nei dati.",
"StatGigantamaxInvalid": "Gigamax non corrispondente.",
"StatGigantamaxValid": "Gigamax ottenuto con la Zuppamax.",
"StatNatureInvalid": "La Natura delle Statistiche non è in un range accettabile.",
"StatBattleVersionInvalid": "la Versione Lotta non è in un range accettabile.",
"StatNobleInvalid": "Sgnale Nobile non corrispondente.",
"StatAlignmentInvalid": "La calibrazione statistiche non è in un range accettabile.",
"StatBattleVersionInvalid": "La Versione Lotta non è in un range accettabile.",
"StatNobleInvalid": "Segnale Nobile non corrispondente.",
"StatAlphaInvalid": "Alfa non corrispondente.",
"StoredSourceEgg": "L'uovo deve trovarsi nei Box o in squadra.",
"StoredSlotSourceInvalid_0": "Origine della fusione non valida: {0}",

View File

@@ -53,7 +53,7 @@
"EggLocationTrade": "出会った場所で交換したタマゴを孵化させることができます。",
"EggLocationTradeFail": "もらった場所が無効です。タマゴの状態で交換してはいけません。",
"EggMetLocationFail": "そのもらった場所では、タマゴを入手できません。",
"EggNature": "タマゴはミントで性格変更できません。",
"EggNature": "タマゴは能力調整を変更できません。",
"EggPP": "タマゴは技のPPを変更することはできません。",
"EggPPUp": "タマゴにポイントアップは使用できません",
"EggRelearnFlags": "技を思い出すフラグがないと思われます。",
@@ -293,7 +293,7 @@
"StatIncorrectCP": "計算されたCPが保存値と一致しません。",
"StatGigantamaxInvalid": "キョダイマックスフラグの不一致。",
"StatGigantamaxValid": "ダイスープによってキョダイマックスフラグが変更されました。",
"StatNatureInvalid": "ミント性格補正予想の範囲内にありません。",
"StatAlignmentInvalid": "ミント能力補正予想の範囲内にありません。",
"StatBattleVersionInvalid": "バトルバージョンは予想の範囲内ではありません。",
"StatNobleInvalid": "キング/クイーンのフラグが不一致。",
"StatAlphaInvalid": "オヤブンフラグ不一致。",

View File

@@ -53,7 +53,7 @@
"EggLocationTrade": "만난 장소에서 교환한 알을 부화시킬 수 있습니다.",
"EggLocationTradeFail": "알을 만난 장소가 잘못되었습니다. 부화 전 알을 교환할 수 없습니다.",
"EggMetLocationFail": "알을 만난 장소에서 알을 얻을 수 없습니다.",
"EggNature": "알은 성격과 능력치 성격이 서로 다를 수 없습니다.",
"EggNature": "알은 능력치 조정을 변경할 수 없습니다.",
"EggPP": "알은 PP를 수정할 수 없습니다.",
"EggPPUp": "알에는 PP업을 적용할 수 없습니다.",
"EggRelearnFlags": "떠올리기 기술 플래그가 없어야 합니다.",
@@ -293,7 +293,7 @@
"StatIncorrectCP": "계산된 CP와 저장된 값이 일치하지 않습니다.",
"StatGigantamaxInvalid": "거다이맥스 플래그가 일치하지 않습니다.",
"StatGigantamaxValid": "거다이맥스 플래그가 다이수프를 통해 변경되었습니다.",
"StatNatureInvalid": "능력치 성격 수치가 예상 범위 내에 있지 않습니다.",
"StatAlignmentInvalid": "능력 보정 수치가 예상 범위 내에 있지 않습니다.",
"StatBattleVersionInvalid": "배틀 버전 수치가 예상 범위 내에 있지 않습니다.",
"StatNobleInvalid": "왕/여왕 플래그가 일치하지 않습니다.",
"StatAlphaInvalid": "우두머리 플래그가 일치하지 않습니다.",

View File

@@ -53,7 +53,7 @@
"EggLocationTrade": "能在相遇地点孵化交易的蛋。",
"EggLocationTradeFail": "非法蛋取得场所, 不能在还是蛋时“交换”",
"EggMetLocationFail": "不能在蛋取得场所获得蛋。",
"EggNature": "不能改变蛋的能力性格(薄荷)。",
"EggNature": "不能改变蛋的能力调整(薄荷)。",
"EggPP": "蛋不能有PP数变动。",
"EggPPUp": "不能对蛋使用PP提升剂。",
"EggRelearnFlags": "蛋没有回忆招式。",
@@ -293,7 +293,7 @@
"StatIncorrectCP": "计算的CP值与存储值不匹配。",
"StatGigantamaxInvalid": "超极巨标志不匹配。",
"StatGigantamaxValid": "超极巨标志已被极巨汤修改。",
"StatNatureInvalid": "性格不在期望范围内。",
"StatAlignmentInvalid": "能力调整不在期望范围内。",
"StatBattleVersionInvalid": "对战版本不在期望范围内。",
"StatNobleInvalid": "王标记非法。",
"StatAlphaInvalid": "头目标记不匹配。",

View File

@@ -53,7 +53,7 @@
"EggLocationTrade": "可於遇見地點孵化「連線交換」所得蛋。",
"EggLocationTradeFail": "不合法之蛋取得場所, 無法於寶可夢仍是蛋時「連線交換」。",
"EggMetLocationFail": "無法於設定之蛋取得場所獲得該蛋。",
"EggNature": "無法使用「薄荷」修正蛋之性格。",
"EggNature": "無法使用「薄荷」修正蛋之能力調整。",
"EggPP": "蛋不能修改 PP 值。",
"EggPPUp": "不能對蛋使用 PP 提升劑。",
"EggRelearnFlags": "預期不會重新學習技能標記。",
@@ -293,7 +293,7 @@
"StatIncorrectCP": "計算之 CP 值與存儲值不匹配。",
"StatGigantamaxInvalid": "超極巨標識不匹配。",
"StatGigantamaxValid": "超極巨標識已被極巨湯修改。",
"StatNatureInvalid": "薄荷修正之性格表現不在期望範圍內。",
"StatAlignmentInvalid": "能力調整現不在期望範圍內。",
"StatBattleVersionInvalid": "對戰版本不在期望範圍內。",
"StatNobleInvalid": "王標識不合法。",
"StatAlphaInvalid": "頭目標識不合法。",

View File

@@ -15,7 +15,7 @@ public partial class ExperienceBar : UserControl
private double CurrentPercent => Experience.GetEXPToLevelUpPercentage(Level, EXP, Growth);
private void NotifyUpdate() => ValueChanged?.Invoke(this, EventArgs.Empty);
private int RealWidth => BorderStyle == BorderStyle.None ? Width : Width - SystemInformation.BorderSize.Width * 2;
private int RealWidth => BorderStyle == BorderStyle.None ? Width : Width - (SystemInformation.BorderSize.Width * 2);
private int Border => BorderStyle == BorderStyle.None ? 0 : SystemInformation.BorderSize.Width;
private uint GetEXPEdgeHigh()
@@ -100,13 +100,21 @@ private void SetNewPixelPercent(int newWidth, bool scroll)
var maxWidth = RealWidth;
// Recalculate EXP, trigger the event, which will trigger another Update.
if (newWidth < 0)
{
Underflow();
}
else if (newWidth >= maxWidth)
{
Overflow();
}
else if (newWidth >= maxWidth + 1)
{
EdgeHigh();
}
else if (newWidth == 0)
{
EdgeLow();
}
else // somewhere in between
{
var range = Experience.GetEXPToLevelUp(Level, Growth);

View File

@@ -423,7 +423,7 @@ private static int GetAbilityIndex4(PKM pk)
private void LoadMisc8(PK8 pk8)
{
CB_StatNature.SelectedValue = (int)pk8.StatNature;
CB_StatAlignment.SelectedValue = (int)pk8.StatAlignment;
LoadClamp(Stats.CB_DynamaxLevel, pk8.DynamaxLevel);
Stats.CHK_Gigantamax.Checked = pk8.CanGigantamax;
CB_HTLanguage.SelectedValue = (int)pk8.HandlingTrainerLanguage;
@@ -433,7 +433,7 @@ private void LoadMisc8(PK8 pk8)
private void SaveMisc8(PK8 pk8)
{
pk8.StatNature = (Nature)WinFormsUtil.GetIndex(CB_StatNature);
pk8.StatAlignment = (Nature)WinFormsUtil.GetIndex(CB_StatAlignment);
pk8.DynamaxLevel = (byte)Math.Max(0, Stats.CB_DynamaxLevel.SelectedIndex);
pk8.CanGigantamax = Stats.CHK_Gigantamax.Checked;
pk8.HandlingTrainerLanguage = (byte)WinFormsUtil.GetIndex(CB_HTLanguage);
@@ -442,7 +442,7 @@ private void SaveMisc8(PK8 pk8)
private void LoadMisc8(PB8 pk8)
{
CB_StatNature.SelectedValue = (int)pk8.StatNature;
CB_StatAlignment.SelectedValue = (int)pk8.StatAlignment;
LoadClamp(Stats.CB_DynamaxLevel, pk8.DynamaxLevel);
Stats.CHK_Gigantamax.Checked = pk8.CanGigantamax;
CB_HTLanguage.SelectedValue = (int)pk8.HandlingTrainerLanguage;
@@ -452,7 +452,7 @@ private void LoadMisc8(PB8 pk8)
private void SaveMisc8(PB8 pk8)
{
pk8.StatNature = (Nature)WinFormsUtil.GetIndex(CB_StatNature);
pk8.StatAlignment = (Nature)WinFormsUtil.GetIndex(CB_StatAlignment);
pk8.DynamaxLevel = (byte)Math.Max(0, Stats.CB_DynamaxLevel.SelectedIndex);
pk8.CanGigantamax = Stats.CHK_Gigantamax.Checked;
pk8.HandlingTrainerLanguage = (byte)WinFormsUtil.GetIndex(CB_HTLanguage);
@@ -461,7 +461,7 @@ private void SaveMisc8(PB8 pk8)
private void LoadMisc8(PA8 pk8)
{
CB_StatNature.SelectedValue = (int)pk8.StatNature;
CB_StatAlignment.SelectedValue = (int)pk8.StatAlignment;
LoadClamp(Stats.CB_DynamaxLevel, pk8.DynamaxLevel);
Stats.CHK_Gigantamax.Checked = pk8.CanGigantamax;
CB_HTLanguage.SelectedValue = (int)pk8.HandlingTrainerLanguage;
@@ -474,7 +474,7 @@ private void LoadMisc8(PA8 pk8)
private void SaveMisc8(PA8 pk8)
{
pk8.StatNature = (Nature)WinFormsUtil.GetIndex(CB_StatNature);
pk8.StatAlignment = (Nature)WinFormsUtil.GetIndex(CB_StatAlignment);
pk8.DynamaxLevel = (byte)Math.Max(0, Stats.CB_DynamaxLevel.SelectedIndex);
pk8.CanGigantamax = Stats.CHK_Gigantamax.Checked;
pk8.HandlingTrainerLanguage = (byte)WinFormsUtil.GetIndex(CB_HTLanguage);
@@ -486,7 +486,7 @@ private void SaveMisc8(PA8 pk8)
private void LoadMisc9(PK9 pk9)
{
CB_StatNature.SelectedValue = (int)pk9.StatNature;
CB_StatAlignment.SelectedValue = (int)pk9.StatAlignment;
CB_HTLanguage.SelectedValue = (int)pk9.HandlingTrainerLanguage;
TB_HomeTracker.Text = pk9.Tracker.ToString("X16");
CB_BattleVersion.SelectedValue = (int)pk9.BattleVersion;
@@ -497,7 +497,7 @@ private void LoadMisc9(PK9 pk9)
private void SaveMisc9(PK9 pk9)
{
pk9.StatNature = (Nature)WinFormsUtil.GetIndex(CB_StatNature);
pk9.StatAlignment = (Nature)WinFormsUtil.GetIndex(CB_StatAlignment);
pk9.HandlingTrainerLanguage = (byte)WinFormsUtil.GetIndex(CB_HTLanguage);
pk9.BattleVersion = (GameVersion)WinFormsUtil.GetIndex(CB_BattleVersion);
pk9.TeraTypeOriginal = (MoveType)WinFormsUtil.GetIndex(Stats.CB_TeraTypeOriginal);
@@ -507,7 +507,7 @@ private void SaveMisc9(PK9 pk9)
private void LoadMisc9(PA9 pk9)
{
CB_StatNature.SelectedValue = (int)pk9.StatNature;
CB_StatAlignment.SelectedValue = (int)pk9.StatAlignment;
CB_HTLanguage.SelectedValue = (int)pk9.HandlingTrainerLanguage;
TB_HomeTracker.Text = pk9.Tracker.ToString("X16");
CB_BattleVersion.SelectedValue = (int)pk9.BattleVersion;
@@ -517,7 +517,7 @@ private void LoadMisc9(PA9 pk9)
private void SaveMisc9(PA9 pk9)
{
pk9.StatNature = (Nature)WinFormsUtil.GetIndex(CB_StatNature);
pk9.StatAlignment = (Nature)WinFormsUtil.GetIndex(CB_StatAlignment);
pk9.HandlingTrainerLanguage = (byte)WinFormsUtil.GetIndex(CB_HTLanguage);
pk9.BattleVersion = (GameVersion)WinFormsUtil.GetIndex(CB_BattleVersion);
pk9.ObedienceLevel = (byte)Util.ToInt32(TB_ObedienceLevel.Text);

View File

@@ -65,8 +65,8 @@ private void InitializeComponent()
L_FormArgument = new System.Windows.Forms.Label();
CB_Form = new System.Windows.Forms.ComboBox();
Label_Form = new System.Windows.Forms.Label();
CB_StatNature = new System.Windows.Forms.ComboBox();
L_StatNature = new System.Windows.Forms.Label();
CB_StatAlignment = new System.Windows.Forms.ComboBox();
L_StatAlignment = new System.Windows.Forms.Label();
CB_Nature = new System.Windows.Forms.ComboBox();
Label_Nature = new System.Windows.Forms.Label();
FLP_EXPLevelRight = new System.Windows.Forms.FlowLayoutPanel();
@@ -92,6 +92,7 @@ private void InitializeComponent()
PB_ShinyStar = new SelectablePictureBox();
PB_ShinySquare = new SelectablePictureBox();
NUD_ShadowID = new System.Windows.Forms.NumericUpDown();
ExperienceBar = new ExperienceBar();
Hidden_Met = new System.Windows.Forms.TabPage();
FLP_Met = new System.Windows.Forms.FlowLayoutPanel();
FLP_OriginGame = new System.Windows.Forms.FlowLayoutPanel();
@@ -250,7 +251,6 @@ private void InitializeComponent()
Tab_Moves = new System.Windows.Forms.TabPage();
Tab_Cosmetic = new System.Windows.Forms.TabPage();
Tab_OTMisc = new System.Windows.Forms.TabPage();
ExperienceBar = new ExperienceBar();
Hidden_TC.SuspendLayout();
Hidden_Main.SuspendLayout();
TLP_Main.SuspendLayout();
@@ -391,8 +391,8 @@ private void InitializeComponent()
TLP_Main.Controls.Add(L_FormArgument, 0, 8);
TLP_Main.Controls.Add(CB_Form, 1, 7);
TLP_Main.Controls.Add(Label_Form, 0, 7);
TLP_Main.Controls.Add(CB_StatNature, 1, 6);
TLP_Main.Controls.Add(L_StatNature, 0, 6);
TLP_Main.Controls.Add(CB_StatAlignment, 1, 6);
TLP_Main.Controls.Add(L_StatAlignment, 0, 6);
TLP_Main.Controls.Add(CB_Nature, 1, 5);
TLP_Main.Controls.Add(Label_Nature, 0, 5);
TLP_Main.Controls.Add(FLP_EXPLevelRight, 1, 3);
@@ -823,31 +823,31 @@ private void InitializeComponent()
Label_Form.Text = "Form:";
Label_Form.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// CB_StatNature
// CB_StatAlignment
//
CB_StatNature.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
CB_StatNature.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
CB_StatNature.FormattingEnabled = true;
CB_StatNature.Location = new System.Drawing.Point(120, 158);
CB_StatNature.Margin = new System.Windows.Forms.Padding(0, 0, 0, 1);
CB_StatNature.Name = "CB_StatNature";
CB_StatNature.Size = new System.Drawing.Size(144, 25);
CB_StatNature.TabIndex = 11;
CB_StatNature.SelectedIndexChanged += ValidateComboBox2;
CB_StatNature.Validating += ValidateComboBox;
CB_StatAlignment.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
CB_StatAlignment.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
CB_StatAlignment.FormattingEnabled = true;
CB_StatAlignment.Location = new System.Drawing.Point(120, 158);
CB_StatAlignment.Margin = new System.Windows.Forms.Padding(0, 0, 0, 1);
CB_StatAlignment.Name = "CB_StatAlignment";
CB_StatAlignment.Size = new System.Drawing.Size(144, 25);
CB_StatAlignment.TabIndex = 11;
CB_StatAlignment.SelectedIndexChanged += ValidateComboBox2;
CB_StatAlignment.Validating += ValidateComboBox;
//
// L_StatNature
// L_StatAlignment
//
L_StatNature.Anchor = System.Windows.Forms.AnchorStyles.Right;
L_StatNature.AutoSize = true;
L_StatNature.Location = new System.Drawing.Point(43, 161);
L_StatNature.Margin = new System.Windows.Forms.Padding(0, 0, 0, 2);
L_StatNature.Name = "L_StatNature";
L_StatNature.Size = new System.Drawing.Size(77, 17);
L_StatNature.TabIndex = 10;
L_StatNature.Text = "Stat Nature:";
L_StatNature.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
L_StatNature.Click += ClickNature;
L_StatAlignment.Anchor = System.Windows.Forms.AnchorStyles.Right;
L_StatAlignment.AutoSize = true;
L_StatAlignment.Location = new System.Drawing.Point(25, 161);
L_StatAlignment.Margin = new System.Windows.Forms.Padding(0, 0, 0, 2);
L_StatAlignment.Name = "L_StatAlignment";
L_StatAlignment.Size = new System.Drawing.Size(95, 17);
L_StatAlignment.TabIndex = 10;
L_StatAlignment.Text = "Stat Alignment:";
L_StatAlignment.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
L_StatAlignment.Click += ClickNature;
//
// CB_Nature
//
@@ -1177,6 +1177,15 @@ private void InitializeComponent()
NUD_ShadowID.TabIndex = 29;
NUD_ShadowID.ValueChanged += UpdateShadowID;
//
// ExperienceBar
//
ExperienceBar.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
ExperienceBar.Location = new System.Drawing.Point(120, 118);
ExperienceBar.Margin = new System.Windows.Forms.Padding(0, 0, 0, 4);
ExperienceBar.Name = "ExperienceBar";
ExperienceBar.Size = new System.Drawing.Size(144, 10);
ExperienceBar.TabIndex = 34;
//
// Hidden_Met
//
Hidden_Met.AllowDrop = true;
@@ -1692,10 +1701,10 @@ private void InitializeComponent()
//
// GB_CurrentMoves
//
GB_CurrentMoves.Location = new System.Drawing.Point(56, 8);
GB_CurrentMoves.Margin = new System.Windows.Forms.Padding(56, 8, 0, 0);
GB_CurrentMoves.Location = new System.Drawing.Point(48, 8);
GB_CurrentMoves.Margin = new System.Windows.Forms.Padding(48, 8, 0, 0);
GB_CurrentMoves.Name = "GB_CurrentMoves";
GB_CurrentMoves.Size = new System.Drawing.Size(136, 24);
GB_CurrentMoves.Size = new System.Drawing.Size(158, 24);
GB_CurrentMoves.TabIndex = 48;
GB_CurrentMoves.Text = "Current Moves";
GB_CurrentMoves.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
@@ -1707,7 +1716,7 @@ private void InitializeComponent()
FLP_PP.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
FLP_PP.Controls.Add(Label_CurPP);
FLP_PP.Controls.Add(Label_PPups);
FLP_PP.Location = new System.Drawing.Point(192, 8);
FLP_PP.Location = new System.Drawing.Point(206, 8);
FLP_PP.Margin = new System.Windows.Forms.Padding(0, 8, 0, 0);
FLP_PP.Name = "FLP_PP";
FLP_PP.Size = new System.Drawing.Size(64, 24);
@@ -1721,7 +1730,7 @@ private void InitializeComponent()
Label_CurPP.Size = new System.Drawing.Size(24, 24);
Label_CurPP.TabIndex = 2;
Label_CurPP.Text = "PP";
Label_CurPP.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
Label_CurPP.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
Label_CurPP.Click += ClickPP;
//
// Label_PPups
@@ -1732,7 +1741,7 @@ private void InitializeComponent()
Label_PPups.Size = new System.Drawing.Size(40, 24);
Label_PPups.TabIndex = 12;
Label_PPups.Text = "Ups";
Label_PPups.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
Label_PPups.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
Label_PPups.Click += ClickPPUps;
//
// MC_Move1
@@ -1794,10 +1803,10 @@ private void InitializeComponent()
// GB_RelearnMoves
//
FLP_Moves.SetFlowBreak(GB_RelearnMoves, true);
GB_RelearnMoves.Location = new System.Drawing.Point(56, 148);
GB_RelearnMoves.Margin = new System.Windows.Forms.Padding(56, 8, 0, 0);
GB_RelearnMoves.Location = new System.Drawing.Point(48, 148);
GB_RelearnMoves.Margin = new System.Windows.Forms.Padding(48, 8, 0, 0);
GB_RelearnMoves.Name = "GB_RelearnMoves";
GB_RelearnMoves.Size = new System.Drawing.Size(216, 24);
GB_RelearnMoves.Size = new System.Drawing.Size(224, 24);
GB_RelearnMoves.TabIndex = 50;
GB_RelearnMoves.Text = "Relearn Moves";
GB_RelearnMoves.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
@@ -3201,15 +3210,6 @@ private void InitializeComponent()
Tab_OTMisc.Text = "OT/Misc";
Tab_OTMisc.UseVisualStyleBackColor = true;
//
// ExperienceBar
//
ExperienceBar.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
ExperienceBar.Location = new System.Drawing.Point(120, 118);
ExperienceBar.Margin = new System.Windows.Forms.Padding(0, 0, 0, 4);
ExperienceBar.Name = "ExperienceBar";
ExperienceBar.Size = new System.Drawing.Size(144, 10);
ExperienceBar.TabIndex = 34;
//
// PKMEditor
//
AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
@@ -3460,8 +3460,8 @@ private void InitializeComponent()
private CatchRate CR_PK1;
public SizeCP SizeCP;
private System.Windows.Forms.PictureBox PB_Favorite;
private System.Windows.Forms.Label L_StatNature;
private System.Windows.Forms.ComboBox CB_StatNature;
private System.Windows.Forms.Label L_StatAlignment;
private System.Windows.Forms.ComboBox CB_StatAlignment;
private System.Windows.Forms.PictureBox PB_Origin;
private System.Windows.Forms.ComboBox CB_HTLanguage;
private System.Windows.Forms.Button B_RelearnFlags;

View File

@@ -48,7 +48,7 @@ public PKMEditor()
new([CB_EggLocation], pk => pk.Format >= 4, Criteria),
new([CB_Country, CB_SubRegion], pk => pk is PK6 or PK7, Criteria),
new(Relearn, pk => pk.Format >= 6, Criteria),
new([CB_StatNature], pk => pk.Format >= 8, Criteria),
new([CB_StatAlignment], pk => pk.Format >= 8, Criteria),
new([CB_AlphaMastered], pk => pk is PA8, Criteria),
];
@@ -118,7 +118,7 @@ public void InitializeBinding()
{
ComboBox[] cbs =
[
CB_Nature, CB_StatNature,
CB_Nature, CB_StatAlignment,
CB_Country, CB_SubRegion, CB_3DSReg, CB_Language, CB_Ball, CB_HeldItem, CB_Species, DEV_Ability,
CB_GroundTile, CB_GameOrigin, CB_BattleVersion, CB_Ability, CB_MetLocation, CB_EggLocation, CB_Language, CB_HTLanguage,
CB_AlphaMastered,
@@ -343,7 +343,7 @@ private void LoadFieldsFromPKM(PKM pk, bool focus = true, bool skipConversionChe
Stats.UpdateIVs(this, EventArgs.Empty);
UpdatePKRSInfected(this, EventArgs.Empty);
UpdatePKRSCured(this, EventArgs.Empty);
UpdateNatureModification(CB_StatNature, Entity.StatNature);
UpdateNatureModification(CB_StatAlignment, Entity.StatAlignment);
if (HaX)
{
@@ -766,9 +766,9 @@ private void ClickNature(object sender, EventArgs e)
if (Entity.Format < 8)
return;
if (sender == Label_Nature)
CB_Nature.SelectedIndex = CB_StatNature.SelectedIndex;
CB_Nature.SelectedIndex = CB_StatAlignment.SelectedIndex;
else
CB_StatNature.SelectedIndex = CB_Nature.SelectedIndex;
CB_StatAlignment.SelectedIndex = CB_Nature.SelectedIndex;
}
private void ClickMoves(object? sender, EventArgs e)
@@ -1371,7 +1371,7 @@ public void ChangeNature(Nature newNature)
if (Entity.Format < 3)
return;
var cb = Entity.Format >= 8 ? CB_StatNature : CB_Nature;
var cb = Entity.Format >= 8 ? CB_StatAlignment : CB_Nature;
cb.SelectedValue = (int)newNature;
}
@@ -1796,10 +1796,10 @@ private void ValidateComboBox2(object? sender, EventArgs e)
Stats.UpdateIVs(sender, EventArgs.Empty); // updating Nature will trigger stats to update as well
UpdateLegality();
}
else if (sender == CB_StatNature)
else if (sender == CB_StatAlignment)
{
Entity.StatNature = (Nature)WinFormsUtil.GetIndex(CB_StatNature);
UpdateNatureModification(CB_StatNature, Entity.StatNature);
Entity.StatAlignment = (Nature)WinFormsUtil.GetIndex(CB_StatAlignment);
UpdateNatureModification(CB_StatAlignment, Entity.StatAlignment);
Stats.UpdateIVs(sender, EventArgs.Empty); // updating Nature will trigger stats to update as well
UpdateLegality();
}
@@ -2103,7 +2103,7 @@ private void ToggleInterface(byte format)
CB_Ability.Visible = CB_Ability.TabStop = !DEV_Ability.Enabled && format >= 3;
Label_Nature.Visible = CB_Nature.Visible = format >= 3;
L_StatNature.Visible = CB_StatNature.Visible = format >= 8;
L_StatAlignment.Visible = CB_StatAlignment.Visible = format >= 8;
Label_Ability.Visible = FLP_AbilityRight.Visible = format >= 3;
FLP_ExtraBytes.Visible = format >= 3;
GB_Markings.Visible = GB_Markings.TabStop = format >= 3;
@@ -2296,7 +2296,7 @@ private void InitializeLanguage(ITrainerInfo sav)
CB_GroundTile.DataSource = new BindingSource(source.G4GroundTiles, string.Empty);
CB_Nature.DataSource = new BindingSource(source.Natures, string.Empty);
CB_StatNature.DataSource = new BindingSource(source.Natures, string.Empty);
CB_StatAlignment.DataSource = new BindingSource(source.Natures, string.Empty);
// Sub-editors
Stats.InitializeDataSources();

View File

@@ -351,7 +351,7 @@ private void ClickStatLabel(object sender, MouseEventArgs e)
_ => NatureAmpRequest.Increase,
};
var newNature = request.GetNewNature(index, Entity.StatNature);
var newNature = request.GetNewNature(index, Entity.StatAlignment);
if (newNature == Nature.Random)
return;

View File

@@ -272,7 +272,7 @@ LocalizedDescription.AllowGen1Tradeback=Erlaube Gen 1 Rücktausch
LocalizedDescription.AllowGuessRejuvenateHOME=Erlaube der PKM Konvertierung, legale Begegnungs Daten, welche nicht im vorherigen Format gespeichert sind, zu erraten.
LocalizedDescription.AllowIncompatibleConversion=Erlaube PKM Transfer Methoden, die nicht offiziell möglich sind. Einzelne Eigenschaften werden der Reihe nach kopiert.
LocalizedDescription.ApplyMarkings=Markierungen beim Import anwenden
LocalizedDescription.ApplyNature=Statuswesen auf Wesen beim Import anwenden
LocalizedDescription.ApplyStatAlignment=Statuswertanpassung auf Wesen beim Import anwenden
LocalizedDescription.AutoLoadSaveOnStartup=Spielstand beim Programmstart automatisch erkennen
LocalizedDescription.BackupPath=Pfad zum Backup-Ordner, in dem Sicherungskopien der Spielstände aufbewahrt werden.
LocalizedDescription.BAKEnabled=Automatische Spielstand Backups aktiviert
@@ -519,7 +519,7 @@ Main.L_SaveSlot=Speicher-Slot:
Main.L_Scale=Größe:
Main.L_ShadowID=Crypto-ID:
Main.L_Spirit7b=Elan:
Main.L_StatNature=Status-Wesen:
Main.L_StatAlignment=StatAnp.:
Main.L_TeraTypeOriginal=Original Tera Typ:
Main.L_TeraTypeOverride=Überschr. Tera Typ:
Main.L_WalkingMood=Lauf-Laune:

View File

@@ -272,7 +272,7 @@ LocalizedDescription.AllowGen1Tradeback=GB: Allow Generation 2 tradeback learnse
LocalizedDescription.AllowGuessRejuvenateHOME=Allow PKM file conversion paths to guess the legal original encounter data that is not stored in the format that it was converted from.
LocalizedDescription.AllowIncompatibleConversion=Allow PKM file conversion paths that are not possible via official methods. Individual properties will be copied sequentially.
LocalizedDescription.ApplyMarkings=Apply Markings on Import
LocalizedDescription.ApplyNature=Apply StatNature to Nature on Import
LocalizedDescription.ApplyStatAlignment=Apply Stat Alignment to Nature on Import
LocalizedDescription.AutoLoadSaveOnStartup=Automatically Detect Save File on Program Startup
LocalizedDescription.BackupPath=Path to the backup folder for keeping save file backups.
LocalizedDescription.BAKEnabled=Automatic Save File Backups Enabled
@@ -519,7 +519,7 @@ Main.L_SaveSlot=Save Slot:
Main.L_Scale=Scale:
Main.L_ShadowID=Shadow ID:
Main.L_Spirit7b=Spirit:
Main.L_StatNature=Stat Nature:
Main.L_StatAlignment=Stat Alignment:
Main.L_TeraTypeOriginal=Original Tera Type:
Main.L_TeraTypeOverride=Override Tera Type:
Main.L_WalkingMood=Walking Mood:

View File

@@ -272,7 +272,7 @@ LocalizedDescription.AllowGen1Tradeback=GB: Permitir intercambio de movimientos
LocalizedDescription.AllowGuessRejuvenateHOME=Permitir adivinar a la ruta de conversión de archivos PKM los datos del encuentro original que no estén almacenados en el formato origen.
LocalizedDescription.AllowIncompatibleConversion=Permitir direcciones de conversión de archivos PKM que no son posibles por métodos oficiales. Las propiedades individuales serán copiadas secuencialmente.
LocalizedDescription.ApplyMarkings=Aplicar marcadores al importar
LocalizedDescription.ApplyNature=Aplicar Naturaleza Estadística a la naturaleza al importar
LocalizedDescription.ApplyStatAlignment=Aplicar Variación de características a la naturaleza al importar
LocalizedDescription.AutoLoadSaveOnStartup=Detectar automáticamente el archivo de guardado al iniciar el programa
LocalizedDescription.BackupPath=Ruta a la carpeta de respaldos para conservar las copias de seguridad de las partidas.
LocalizedDescription.BAKEnabled=Respaldo Automático de archivos de guardado habilitado
@@ -519,7 +519,7 @@ Main.L_SaveSlot=Ranura de guardado:
Main.L_Scale=Escala:
Main.L_ShadowID=ID Oscuro:
Main.L_Spirit7b=Ánimo:
Main.L_StatNature=Naturaleza Estad.:
Main.L_StatAlignment=Var. carac.:
Main.L_TeraTypeOriginal=Teratipo original:
Main.L_TeraTypeOverride=Teratipo sobreescrito:
Main.L_WalkingMood=Humor de Caminar:

View File

@@ -272,7 +272,7 @@ LocalizedDescription.AllowGen1Tradeback=GB: Permitir intercambio de movimientos
LocalizedDescription.AllowGuessRejuvenateHOME=Permitir adivinar a la ruta de conversión de archivos PKM los datos del encuentro original que no estén almacenados en el formato origen.
LocalizedDescription.AllowIncompatibleConversion=Permitir direcciones de conversión de archivos PKM que no son posibles por métodos oficiales. Las propiedades individuales serán copiadas secuencialmente.
LocalizedDescription.ApplyMarkings=Aplicar marcadores al importar
LocalizedDescription.ApplyNature=Aplicar Naturaleza Estadística a la naturaleza al importar
LocalizedDescription.ApplyStatAlignment=Aplicar Variación de características a la naturaleza al importar
LocalizedDescription.AutoLoadSaveOnStartup=Detectar automáticamente el archivo de guardado al iniciar el programa
LocalizedDescription.BackupPath=Ruta a la carpeta de copias de seguridad para guardar los archivos de respaldo.
LocalizedDescription.BAKEnabled=Respaldo Automático de archivos de guardado habilitado
@@ -519,7 +519,7 @@ Main.L_SaveSlot=Ranura de guardado:
Main.L_Scale=Escala:
Main.L_ShadowID=ID Oscuro:
Main.L_Spirit7b=Ánimo:
Main.L_StatNature=Naturaleza Estad.:
Main.L_StatAlignment=Var. carac.:
Main.L_TeraTypeOriginal=Teratipo original:
Main.L_TeraTypeOverride=Teratipo sobreescrito:
Main.L_WalkingMood=Humor de Caminar:

View File

@@ -272,7 +272,7 @@ LocalizedDescription.AllowGen1Tradeback=GB : Autorise les attaques de revenants
LocalizedDescription.AllowGuessRejuvenateHOME=Autorise les chemins de conversion des fichiers PKM de deviner les données de rencontre originales légales qui ne sont pas stockées dans le format à partir duquel elles ont été converties.
LocalizedDescription.AllowIncompatibleConversion=Autorise les chemins de conversion des fichiers PKM qui ne sont pas possibles via les méthodes officielles. Les propriétés individuelles seront copiées de manière séquentielle.
LocalizedDescription.ApplyMarkings=Appliquer des Marques lors de l'import
LocalizedDescription.ApplyNature=Appliquer StatNature à la Nature lors de l'import
LocalizedDescription.ApplyStatAlignment=Appliquer Ajust. de stats à la Nature lors de l'import
LocalizedDescription.AutoLoadSaveOnStartup=Détection automatique du fichier de sauvegarde au démarrage du programme
LocalizedDescription.BackupPath=Chemin vers le dossier de secours (backup) pour conserver des copies des sauvegardes.
LocalizedDescription.BAKEnabled=Sauvegarde automatique des fichiers activée
@@ -519,7 +519,7 @@ Main.L_SaveSlot=Sauvegarde :
Main.L_Scale=Échelle :
Main.L_ShadowID=ID Obscur :
Main.L_Spirit7b=Esprit :
Main.L_StatNature=Stat nature :
Main.L_StatAlignment=Stat alignement :
Main.L_TeraTypeOriginal=Type Téra d'origine :
Main.L_TeraTypeOverride=Type Téra remplaçant :
Main.L_WalkingMood=Humeur de marche :

View File

@@ -272,7 +272,7 @@ LocalizedDescription.AllowGen1Tradeback=GB:Consenti insieme di mosse tradeback d
LocalizedDescription.AllowGuessRejuvenateHOME=Prova ad indovinare dati di incontro originali legali, quando questi non sono contenuti all'interno del file di origine.
LocalizedDescription.AllowIncompatibleConversion=Consenti conversioni di file PKM via percorsi non possibili con metodi ufficiali. Le proprietà individuali verranno copiate in maniera sequenziale.
LocalizedDescription.ApplyMarkings=Applica Segnalini durante l'importazione
LocalizedDescription.ApplyNature=Applica la Natura delle Statistiche alla Natura durante l'importazine.
LocalizedDescription.ApplyStatAlignment=Applica Calibrazione statistiche alla Natura durante l'importazione.
LocalizedDescription.AutoLoadSaveOnStartup=Rileva automaticamente il tipo del Salvtaggio durante l'Avvio.
LocalizedDescription.BackupPath=Percorso della cartella di backup per la conservazione dei salvataggi.
LocalizedDescription.BAKEnabled=Backup automatico dei File di Salvataggio attivo.
@@ -519,7 +519,7 @@ Main.L_SaveSlot=Slot Salvataggio:
Main.L_Scale=Scala:
Main.L_ShadowID=ID Ombra:
Main.L_Spirit7b=Entusiasmo:
Main.L_StatNature=Natura Statistiche:
Main.L_StatAlignment=Calib. stat.:
Main.L_TeraTypeOriginal=Teratipo originale:
Main.L_TeraTypeOverride=Teratipo sostitutivo:
Main.L_WalkingMood=Umore a spasso:

View File

@@ -272,7 +272,7 @@ LocalizedDescription.AllowGen1Tradeback=GB: 第2世代からの逆輸入によ
LocalizedDescription.AllowGuessRejuvenateHOME=PKMファイル変換時、変換元形式に保存されていない正規な元の出会い情報を推測することを許可します。
LocalizedDescription.AllowIncompatibleConversion=公式手段では不可能なPKMファイル変換経路を許可します。各プロパティは順番にコピーされます。
LocalizedDescription.ApplyMarkings=インポート時にマーキングを適用する。
LocalizedDescription.ApplyNature=インポート時に、ミントによって変化した性格を元々の性格として適用します。
LocalizedDescription.ApplyStatAlignment=インポート時に、ミントによって変化した能力補正を元々の能力補正として適用します。
LocalizedDescription.AutoLoadSaveOnStartup=起動時にセーブファイルを自動的に検出します。
LocalizedDescription.BackupPath=セーブファイルのバックアップを保存するためのバックアップフォルダーのパス。
LocalizedDescription.BAKEnabled=セーブデータの自動バックアップを有効にします。
@@ -519,7 +519,7 @@ Main.L_SaveSlot=セーブスロット:
Main.L_Scale=サイズ
Main.L_ShadowID=ダークポケモンID
Main.L_Spirit7b=やるき:
Main.L_StatNature=ミント性格補正
Main.L_StatAlignment=能力補正
Main.L_TeraTypeOriginal=元のテラスタイプ
Main.L_TeraTypeOverride=変更テラスタイプ
Main.L_WalkingMood=きげん:

View File

@@ -272,7 +272,7 @@ LocalizedDescription.AllowGen1Tradeback=GB: 2세대에서 옮겨온 1세대 기
LocalizedDescription.AllowGuessRejuvenateHOME=변환된 형식에 저장되지 않은 합법적인 원래 출현 데이터를 PKM 파일 변환 경로가 추측하도록 허용.
LocalizedDescription.AllowIncompatibleConversion=공식 방식으로는 불가능한 PKM 파일 변환 경로를 허용합니다. 개별 속성은 순차적으로 복사됩니다.
LocalizedDescription.ApplyMarkings=가져오기 시 마킹하기
LocalizedDescription.ApplyNature=임포트시 자연에 StatNature 적용
LocalizedDescription.ApplyStatAlignment=임포트시 자연에 능력 보정 적용
LocalizedDescription.AutoLoadSaveOnStartup=프로그램 시작 시 저장 파일 자동 감지
LocalizedDescription.BackupPath=저장 파일 백업을 위한 백업 폴더 경로
LocalizedDescription.BAKEnabled=세이브 파일 자동 백업 사용
@@ -519,7 +519,7 @@ Main.L_SaveSlot=세이브 슬롯:
Main.L_Scale=배율:
Main.L_ShadowID=다크 ID:
Main.L_Spirit7b=의욕:
Main.L_StatNature=능력치 성격:
Main.L_StatAlignment=능력 보정:
Main.L_TeraTypeOriginal=원래 테라스탈타입:
Main.L_TeraTypeOverride=변경된 테라스탈타입:
Main.L_WalkingMood=걷는 기분:

View File

@@ -272,7 +272,7 @@ LocalizedDescription.AllowGen1Tradeback=GB 允许二代传回的招式组合
LocalizedDescription.AllowGuessRejuvenateHOME=允许在PKM文件转换中猜测那些未在文件中存储的合法原始相遇数据。
LocalizedDescription.AllowIncompatibleConversion=允许在PKM文件使用非官方方法转换其个体值将按顺序复制。
LocalizedDescription.ApplyMarkings=导入时标记。
LocalizedDescription.ApplyNature=在导入时将修正性格应用于性格
LocalizedDescription.ApplyStatAlignment=在导入时将能力调整应用为原始的能力调整
LocalizedDescription.AutoLoadSaveOnStartup=在程序启动时自动加载存档文件。
LocalizedDescription.BackupPath=用于保存存档备份的备份文件夹路径。
LocalizedDescription.BAKEnabled=自动保存文件备份已启用
@@ -519,7 +519,7 @@ Main.L_SaveSlot=存档槽:
Main.L_Scale=大小:
Main.L_ShadowID=黑暗ID:
Main.L_Spirit7b=干劲:
Main.L_StatNature=薄荷修正:
Main.L_StatAlignment=能力调整:
Main.L_TeraTypeOriginal=原始太晶属性:
Main.L_TeraTypeOverride=修正太晶属性:
Main.L_WalkingMood=跟随宝可梦心情:

View File

@@ -272,7 +272,7 @@ LocalizedDescription.AllowGen1Tradeback=GB 允許從第二世代傳回之招式
LocalizedDescription.AllowGuessRejuvenateHOME=允許 PKM 檔轉換時猜測未於轉換格式存儲的合法原始遇見數據。
LocalizedDescription.AllowIncompatibleConversion=允許 PKM 檔依照非官方方法進行轉換。個體值將按順序複製。
LocalizedDescription.ApplyMarkings=導入時標記
LocalizedDescription.ApplyNature=在導入時將修正性格應用於性格
LocalizedDescription.ApplyStatAlignment=在導入時將能力調整套用為原始的能力調整。
LocalizedDescription.AutoLoadSaveOnStartup=在程式啟動時自動載入儲存資料檔
LocalizedDescription.BackupPath=用於保存存檔備份的備份資料夾路徑。
LocalizedDescription.BAKEnabled=自動保儲存資料案備份已啟用
@@ -519,7 +519,7 @@ Main.L_SaveSlot=儲存資料槽:
Main.L_Scale=尺寸:
Main.L_ShadowID=黑暗ID:
Main.L_Spirit7b=幹勁:
Main.L_StatNature=薄荷修正性格:
Main.L_StatAlignment=能力調整:
Main.L_TeraTypeOriginal=原始太晶屬性:
Main.L_TeraTypeOverride=轉變太晶屬性:
Main.L_WalkingMood=跟隨寶可夢心情: