mirror of
https://github.com/kwsch/PKHeX
synced 2024-11-26 05:50:22 +00:00
S/V 1.2.0 Support (#3819)
This commit is contained in:
parent
353ca40f42
commit
0f1fba86f7
45 changed files with 132 additions and 68 deletions
|
@ -880,8 +880,8 @@ public enum Move
|
||||||
AquaStep,
|
AquaStep,
|
||||||
RagingBull,
|
RagingBull,
|
||||||
MakeItRain,
|
MakeItRain,
|
||||||
_875,
|
Psyblade,
|
||||||
_876,
|
HydroSteam,
|
||||||
Ruination,
|
Ruination,
|
||||||
CollisionCourse,
|
CollisionCourse,
|
||||||
ElectroDrift,
|
ElectroDrift,
|
||||||
|
|
|
@ -1014,7 +1014,7 @@ public enum Species : ushort
|
||||||
IronValiant,
|
IronValiant,
|
||||||
Koraidon,
|
Koraidon,
|
||||||
Miraidon,
|
Miraidon,
|
||||||
_980,
|
WalkingWake,
|
||||||
_987,
|
IronLeaves,
|
||||||
MAX_COUNT,
|
MAX_COUNT,
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,7 @@ namespace PKHeX.Core;
|
||||||
public static class GeoLocation
|
public static class GeoLocation
|
||||||
{
|
{
|
||||||
private static readonly string[]?[] CountryList = GetCountryList();
|
private static readonly string[]?[] CountryList = GetCountryList();
|
||||||
internal static readonly string[] lang_geo = { "ja", "en", "fr", "de", "it", "es", "zh", "ko", "zh2" };
|
private static readonly string[] lang_geo = { "ja", "en", "fr", "de", "it", "es", "zh", "ko", "zh2" };
|
||||||
private static readonly string[]?[]?[] RegionList = new string[CountryList.Length][][];
|
private static readonly string[]?[]?[] RegionList = new string[CountryList.Length][][];
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -58,7 +58,7 @@ public static class GeoLocation
|
||||||
if ((uint)country >= CountryList.Length)
|
if ((uint)country >= CountryList.Length)
|
||||||
return INVALID;
|
return INVALID;
|
||||||
var countryNames = CountryList[country];
|
var countryNames = CountryList[country];
|
||||||
if (countryNames is not null && l < countryNames.Length)
|
if (countryNames is not null && (uint)l < countryNames.Length)
|
||||||
return countryNames[l + 1];
|
return countryNames[l + 1];
|
||||||
return INVALID;
|
return INVALID;
|
||||||
}
|
}
|
||||||
|
@ -73,7 +73,7 @@ public static class GeoLocation
|
||||||
if ((uint)region >= regionNames.Length)
|
if ((uint)region >= regionNames.Length)
|
||||||
return INVALID;
|
return INVALID;
|
||||||
var localized = regionNames[region];
|
var localized = regionNames[region];
|
||||||
if (localized is not null && l < localized.Length)
|
if (localized is not null && (uint)l < localized.Length)
|
||||||
return localized[l + 1];
|
return localized[l + 1];
|
||||||
return INVALID;
|
return INVALID;
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,7 +60,7 @@ public sealed record EncounterArea9 : EncounterArea
|
||||||
{
|
{
|
||||||
if (slot.Species != evo.Species)
|
if (slot.Species != evo.Species)
|
||||||
continue;
|
continue;
|
||||||
if (slot.Form != evo.Form && slot.Species is not ((int)Species.Rotom or (int)Species.Deerling or (int)Species.Sawsbuck or (int)Species.Oricorio))
|
if (slot.Form != evo.Form && !IsFormOkayWild(slot.Species, evo.Form))
|
||||||
break;
|
break;
|
||||||
if (slot.Gender != -1 && pk.Gender != slot.Gender)
|
if (slot.Gender != -1 && pk.Gender != slot.Gender)
|
||||||
break;
|
break;
|
||||||
|
@ -80,4 +80,13 @@ public sealed record EncounterArea9 : EncounterArea
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static bool IsFormOkayWild(ushort species, byte form) => species switch
|
||||||
|
{
|
||||||
|
(int)Species.Rotom => true,
|
||||||
|
(int)Species.Deerling or (int)Species.Sawsbuck => true,
|
||||||
|
(int)Species.Scatterbug or (int)Species.Spewpa or (int)Species.Vivillon => form < Vivillon3DS.FancyFormID, // GO Postcard
|
||||||
|
(int)Species.Oricorio => true,
|
||||||
|
_ => false,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -191,8 +191,8 @@ public static class Breeding
|
||||||
|
|
||||||
// Gen9
|
// Gen9
|
||||||
(int)Gimmighoul, (int)Gholdengo,
|
(int)Gimmighoul, (int)Gholdengo,
|
||||||
(int)GreatTusk, (int)BruteBonnet, (int)_980, (int)SandyShocks, (int)ScreamTail, (int)FlutterMane, (int)SlitherWing, (int)RoaringMoon,
|
(int)GreatTusk, (int)BruteBonnet, (int)WalkingWake, (int)SandyShocks, (int)ScreamTail, (int)FlutterMane, (int)SlitherWing, (int)RoaringMoon,
|
||||||
(int)IronTreads, (int)_987, (int)IronMoth, (int)IronHands, (int)IronJugulis, (int)IronThorns, (int)IronBundle, (int)IronValiant,
|
(int)IronTreads, (int)IronLeaves, (int)IronMoth, (int)IronHands, (int)IronJugulis, (int)IronThorns, (int)IronBundle, (int)IronValiant,
|
||||||
(int)TingLu, (int)ChienPao, (int)WoChien, (int)ChiYu,
|
(int)TingLu, (int)ChienPao, (int)WoChien, (int)ChiYu,
|
||||||
(int)Koraidon, (int)Miraidon,
|
(int)Koraidon, (int)Miraidon,
|
||||||
};
|
};
|
||||||
|
|
|
@ -108,5 +108,6 @@ public static class EncounterServerDate
|
||||||
{0001, (new(2022, 11, 17), Never)}, // PokéCenter Flabébé
|
{0001, (new(2022, 11, 17), Never)}, // PokéCenter Flabébé
|
||||||
{0006, (new(2022, 12, 16), new(2023, 02, 01))}, // Jump Festa Gyarados
|
{0006, (new(2022, 12, 16), new(2023, 02, 01))}, // Jump Festa Gyarados
|
||||||
{0501, (new(2023, 02, 16), new(2023, 02, 21))}, // Jiseok's Garganacl
|
{0501, (new(2023, 02, 16), new(2023, 02, 21))}, // Jiseok's Garganacl
|
||||||
|
{1513, (new(2023, 02, 27), new(2024, 03, 01))}, // Hisuian Zoroark DLC Purchase Gift
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,11 @@ public sealed record EncounterDist9 : EncounterStatic, ITeraRaid9
|
||||||
public byte Stars { get; private init; }
|
public byte Stars { get; private init; }
|
||||||
public byte RandRate { get; private init; } // weight chance of this encounter
|
public byte RandRate { get; private init; } // weight chance of this encounter
|
||||||
|
|
||||||
|
/// <summary> Indicates how the <see cref="Scale"/> value is used, if at all. </summary>
|
||||||
|
public SizeType9 ScaleType { get; private init; }
|
||||||
|
/// <summary> Used only for <see cref="ScaleType"/> == <see cref="SizeType9.VALUE"/> </summary>
|
||||||
|
public byte Scale { get; private init; }
|
||||||
|
|
||||||
public ushort RandRate0MinScarlet { get; private init; }
|
public ushort RandRate0MinScarlet { get; private init; }
|
||||||
public ushort RandRate0MinViolet { get; private init; }
|
public ushort RandRate0MinViolet { get; private init; }
|
||||||
public ushort RandRate0TotalScarlet { get; private init; }
|
public ushort RandRate0TotalScarlet { get; private init; }
|
||||||
|
@ -149,7 +154,7 @@ public sealed record EncounterDist9 : EncounterStatic, ITeraRaid9
|
||||||
|
|
||||||
private EncounterDist9() : base(GameVersion.SV) { }
|
private EncounterDist9() : base(GameVersion.SV) { }
|
||||||
|
|
||||||
private const int SerializedSize = WeightStart + (sizeof(ushort) * 2 * 2 * 4);
|
private const int SerializedSize = WeightStart + (sizeof(ushort) * 2 * 2 * 4) + 2;
|
||||||
private const int WeightStart = 0x14;
|
private const int WeightStart = 0x14;
|
||||||
private static EncounterDist9 ReadEncounter(ReadOnlySpan<byte> data) => new()
|
private static EncounterDist9 ReadEncounter(ReadOnlySpan<byte> data) => new()
|
||||||
{
|
{
|
||||||
|
@ -189,6 +194,9 @@ public sealed record EncounterDist9 : EncounterStatic, ITeraRaid9
|
||||||
RandRate3MinViolet = ReadUInt16LittleEndian(data[(WeightStart + (sizeof(ushort) * 13))..]),
|
RandRate3MinViolet = ReadUInt16LittleEndian(data[(WeightStart + (sizeof(ushort) * 13))..]),
|
||||||
RandRate3TotalScarlet = ReadUInt16LittleEndian(data[(WeightStart + (sizeof(ushort) * 14))..]),
|
RandRate3TotalScarlet = ReadUInt16LittleEndian(data[(WeightStart + (sizeof(ushort) * 14))..]),
|
||||||
RandRate3TotalViolet = ReadUInt16LittleEndian(data[(WeightStart + (sizeof(ushort) * 15))..]),
|
RandRate3TotalViolet = ReadUInt16LittleEndian(data[(WeightStart + (sizeof(ushort) * 15))..]),
|
||||||
|
|
||||||
|
ScaleType = (SizeType9)data[0x34],
|
||||||
|
Scale = data[0x35],
|
||||||
};
|
};
|
||||||
|
|
||||||
private static AbilityPermission GetAbility(byte b) => b switch
|
private static AbilityPermission GetAbility(byte b) => b switch
|
||||||
|
@ -238,7 +246,7 @@ public sealed record EncounterDist9 : EncounterStatic, ITeraRaid9
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
var pi = PersonalTable.SV.GetFormEntry(Species, Form);
|
var pi = PersonalTable.SV.GetFormEntry(Species, Form);
|
||||||
var param = new GenerateParam9(Species, pi.Gender, FlawlessIVCount, 1, 0, 0, 0, 0, Ability, Shiny);
|
var param = new GenerateParam9(Species, pi.Gender, FlawlessIVCount, 1, 0, 0, ScaleType, Scale, Ability, Shiny);
|
||||||
if (!Encounter9RNG.IsMatch(pk, param, seed))
|
if (!Encounter9RNG.IsMatch(pk, param, seed))
|
||||||
return true;
|
return true;
|
||||||
return base.IsMatchPartial(pk);
|
return base.IsMatchPartial(pk);
|
||||||
|
@ -259,7 +267,7 @@ public sealed record EncounterDist9 : EncounterStatic, ITeraRaid9
|
||||||
const byte undefinedSize = 0;
|
const byte undefinedSize = 0;
|
||||||
var pi = PersonalTable.SV.GetFormEntry(Species, Form);
|
var pi = PersonalTable.SV.GetFormEntry(Species, Form);
|
||||||
var param = new GenerateParam9(Species, pi.Gender, FlawlessIVCount, rollCount,
|
var param = new GenerateParam9(Species, pi.Gender, FlawlessIVCount, rollCount,
|
||||||
undefinedSize, undefinedSize, undefinedSize, undefinedSize,
|
undefinedSize, undefinedSize, ScaleType, Scale,
|
||||||
Ability, Shiny);
|
Ability, Shiny);
|
||||||
|
|
||||||
var init = Util.Rand.Rand64();
|
var init = Util.Rand.Rand64();
|
||||||
|
|
|
@ -175,25 +175,25 @@ public sealed record EncounterMight9 : EncounterStatic, ITeraRaid9
|
||||||
Stars = data[0x12],
|
Stars = data[0x12],
|
||||||
RandRate = data[0x13],
|
RandRate = data[0x13],
|
||||||
|
|
||||||
RandRate0MinScarlet = ReadUInt16LittleEndian(data[WeightStart..]),
|
RandRate0MinScarlet = ReadUInt16LittleEndian(data[WeightStart..]),
|
||||||
RandRate0MinViolet = ReadUInt16LittleEndian(data[(WeightStart + sizeof(ushort))..]),
|
RandRate0MinViolet = ReadUInt16LittleEndian(data[(WeightStart + sizeof(ushort))..]),
|
||||||
RandRate0TotalScarlet = ReadUInt16LittleEndian(data[(WeightStart + (sizeof(ushort) * 2))..]),
|
RandRate0TotalScarlet = ReadUInt16LittleEndian(data[(WeightStart + (sizeof(ushort) * 2))..]),
|
||||||
RandRate0TotalViolet = ReadUInt16LittleEndian(data[(WeightStart + (sizeof(ushort) * 3))..]),
|
RandRate0TotalViolet = ReadUInt16LittleEndian(data[(WeightStart + (sizeof(ushort) * 3))..]),
|
||||||
|
|
||||||
RandRate1MinScarlet = ReadUInt16LittleEndian(data[(WeightStart + (sizeof(ushort) * 4))..]),
|
RandRate1MinScarlet = ReadUInt16LittleEndian(data[(WeightStart + (sizeof(ushort) * 4))..]),
|
||||||
RandRate1MinViolet = ReadUInt16LittleEndian(data[(WeightStart + (sizeof(ushort) * 5))..]),
|
RandRate1MinViolet = ReadUInt16LittleEndian(data[(WeightStart + (sizeof(ushort) * 5))..]),
|
||||||
RandRate1TotalScarlet = ReadUInt16LittleEndian(data[(WeightStart + (sizeof(ushort) * 6))..]),
|
RandRate1TotalScarlet = ReadUInt16LittleEndian(data[(WeightStart + (sizeof(ushort) * 6))..]),
|
||||||
RandRate1TotalViolet = ReadUInt16LittleEndian(data[(WeightStart + (sizeof(ushort) * 7))..]),
|
RandRate1TotalViolet = ReadUInt16LittleEndian(data[(WeightStart + (sizeof(ushort) * 7))..]),
|
||||||
|
|
||||||
RandRate2MinScarlet = ReadUInt16LittleEndian(data[(WeightStart + (sizeof(ushort) * 8))..]),
|
RandRate2MinScarlet = ReadUInt16LittleEndian(data[(WeightStart + (sizeof(ushort) * 8))..]),
|
||||||
RandRate2MinViolet = ReadUInt16LittleEndian(data[(WeightStart + (sizeof(ushort) * 9))..]),
|
RandRate2MinViolet = ReadUInt16LittleEndian(data[(WeightStart + (sizeof(ushort) * 9))..]),
|
||||||
RandRate2TotalScarlet = ReadUInt16LittleEndian(data[(WeightStart + (sizeof(ushort) * 10))..]),
|
RandRate2TotalScarlet = ReadUInt16LittleEndian(data[(WeightStart + (sizeof(ushort) * 10))..]),
|
||||||
RandRate2TotalViolet = ReadUInt16LittleEndian(data[(WeightStart + (sizeof(ushort) * 11))..]),
|
RandRate2TotalViolet = ReadUInt16LittleEndian(data[(WeightStart + (sizeof(ushort) * 11))..]),
|
||||||
|
|
||||||
RandRate3MinScarlet = ReadUInt16LittleEndian(data[(WeightStart + (sizeof(ushort) * 12))..]),
|
RandRate3MinScarlet = ReadUInt16LittleEndian(data[(WeightStart + (sizeof(ushort) * 12))..]),
|
||||||
RandRate3MinViolet = ReadUInt16LittleEndian(data[(WeightStart + (sizeof(ushort) * 13))..]),
|
RandRate3MinViolet = ReadUInt16LittleEndian(data[(WeightStart + (sizeof(ushort) * 13))..]),
|
||||||
RandRate3TotalScarlet = ReadUInt16LittleEndian(data[(WeightStart + (sizeof(ushort) * 14))..]),
|
RandRate3TotalScarlet = ReadUInt16LittleEndian(data[(WeightStart + (sizeof(ushort) * 14))..]),
|
||||||
RandRate3TotalViolet = ReadUInt16LittleEndian(data[(WeightStart + (sizeof(ushort) * 15))..]),
|
RandRate3TotalViolet = ReadUInt16LittleEndian(data[(WeightStart + (sizeof(ushort) * 15))..]),
|
||||||
|
|
||||||
Nature = (Nature)data[0x34],
|
Nature = (Nature)data[0x34],
|
||||||
IVs = new IndividualValueSet((sbyte)data[0x35], (sbyte)data[0x36], (sbyte)data[0x37], (sbyte)data[0x38], (sbyte)data[0x39], (sbyte)data[0x3A], data[0x3B]),
|
IVs = new IndividualValueSet((sbyte)data[0x35], (sbyte)data[0x36], (sbyte)data[0x37], (sbyte)data[0x38], (sbyte)data[0x39], (sbyte)data[0x3A], data[0x3B]),
|
||||||
|
|
|
@ -4,7 +4,7 @@ namespace PKHeX.Core;
|
||||||
|
|
||||||
public static partial class Legal
|
public static partial class Legal
|
||||||
{
|
{
|
||||||
internal const int MaxSpeciesID_9 = (int)Species.Miraidon;
|
internal const int MaxSpeciesID_9 = (int)Species.IronLeaves;
|
||||||
internal const int MaxMoveID_9 = (int)Move.MagicalTorque;
|
internal const int MaxMoveID_9 = (int)Move.MagicalTorque;
|
||||||
internal const int MaxItemID_9 = 2400; // Yellow Dish
|
internal const int MaxItemID_9 = 2400; // Yellow Dish
|
||||||
internal const int MaxAbilityID_9 = (int)Ability.MyceliumMight;
|
internal const int MaxAbilityID_9 = (int)Ability.MyceliumMight;
|
||||||
|
|
|
@ -22,6 +22,10 @@ public sealed class MarkVerifier : Verifier
|
||||||
VerifyMarksPresent(data, m);
|
VerifyMarksPresent(data, m);
|
||||||
|
|
||||||
VerifyAffixedRibbonMark(data, m);
|
VerifyAffixedRibbonMark(data, m);
|
||||||
|
|
||||||
|
// temp logic to catch this case; in the future we will need more robust checks for encounters
|
||||||
|
if (data.EncounterMatch is WC9 { RibbonMarkCharismatic: true} && pk is IRibbonSetMark8 { RibbonMarkCharismatic: false})
|
||||||
|
data.AddLine(GetInvalid(string.Format(LRibbonMarkingFInvalid_0, GetRibbonNameSafe(MarkCharismatic))));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void VerifyNoMarksPresent(LegalityAnalysis data, IRibbonIndex m)
|
private void VerifyNoMarksPresent(LegalityAnalysis data, IRibbonIndex m)
|
||||||
|
|
|
@ -192,7 +192,6 @@ public sealed class MiscVerifier : Verifier
|
||||||
(int)Species.Sneasel | (1 << 11), // Sneasel-1
|
(int)Species.Sneasel | (1 << 11), // Sneasel-1
|
||||||
(int)Species.Oshawott, // Oshawott
|
(int)Species.Oshawott, // Oshawott
|
||||||
(int)Species.Basculin | (2 << 11), // Basculin-2
|
(int)Species.Basculin | (2 << 11), // Basculin-2
|
||||||
(int)Species.Zorua | (1 << 11), // Zorua-1
|
|
||||||
(int)Species.Chespin, // Chespin
|
(int)Species.Chespin, // Chespin
|
||||||
(int)Species.Fennekin, // Fennekin
|
(int)Species.Fennekin, // Fennekin
|
||||||
(int)Species.Carbink, // Carbink
|
(int)Species.Carbink, // Carbink
|
||||||
|
|
|
@ -34,6 +34,7 @@ public static class MarkRules
|
||||||
{
|
{
|
||||||
EncounterSlot8 or EncounterStatic8 { Gift: false, ScriptedNoMarks: false } => IsMarkAllowedSpecific8(mark, pk, enc),
|
EncounterSlot8 or EncounterStatic8 { Gift: false, ScriptedNoMarks: false } => IsMarkAllowedSpecific8(mark, pk, enc),
|
||||||
EncounterSlot9 s => IsMarkAllowedSpecific9(mark, s),
|
EncounterSlot9 s => IsMarkAllowedSpecific9(mark, s),
|
||||||
|
WC9 wc9 => wc9.GetRibbonIndex(mark),
|
||||||
_ => false,
|
_ => false,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -53,7 +53,7 @@ internal static class MoveInfo9
|
||||||
10, 10, 05, 20, 20, 10, 10, 05, 05, 05, 40, 10, 20, 10, 10, 10, 10, 05, 05, 15,
|
10, 10, 05, 20, 20, 10, 10, 05, 05, 05, 40, 10, 20, 10, 10, 10, 10, 05, 05, 15,
|
||||||
05, 10, 10, 10, 05, 05, 05, 15, 10, 10, 15, 05, 10, 10, 10, 05, 10, 10, 05, 10,
|
05, 10, 10, 10, 05, 05, 05, 15, 10, 10, 15, 05, 10, 10, 10, 05, 10, 10, 05, 10,
|
||||||
10, 10, 10, 10, 15, 15, 10, 10, 10, 05, 15, 10, 10, 10, 10, 10, 10, 15, 15, 05,
|
10, 10, 10, 10, 15, 15, 10, 10, 10, 05, 15, 10, 10, 10, 10, 10, 10, 15, 15, 05,
|
||||||
10, 15, 05, 01, 15, 10, 15, 10, 10, 10, 10, 10, 10, 10, 05, 35, 35, 10, 05, 05,
|
10, 15, 05, 01, 15, 10, 15, 10, 10, 10, 10, 10, 10, 10, 05, 15, 15, 10, 05, 05,
|
||||||
10, 10, 10, 10, 20, 20, 20, 05, 10, 10, 05, 10, 05, 05, 10, 20, 10, 10, 10, 10,
|
10, 10, 10, 10, 20, 20, 20, 05, 10, 10, 05, 10, 05, 05, 10, 20, 10, 10, 10, 10,
|
||||||
10,
|
10,
|
||||||
};
|
};
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -873,8 +873,8 @@ Loderlied
|
||||||
Wogentanz
|
Wogentanz
|
||||||
Rasender Stier
|
Rasender Stier
|
||||||
Goldrausch
|
Goldrausch
|
||||||
WAZA_SAIKOBUREIDO
|
Psychoschneide
|
||||||
WAZA_HAIDOROSUTIIMU
|
Hydrodampf
|
||||||
Verderben
|
Verderben
|
||||||
Kollisionskurs
|
Kollisionskurs
|
||||||
Blitztour
|
Blitztour
|
||||||
|
|
|
@ -1007,5 +1007,5 @@ Donnersichel
|
||||||
Eisenkrieger
|
Eisenkrieger
|
||||||
Koraidon
|
Koraidon
|
||||||
Miraidon
|
Miraidon
|
||||||
AKETUBAN
|
Windewoge
|
||||||
BKETUBAN
|
Eisenblatt
|
|
@ -873,8 +873,8 @@ Torch Song
|
||||||
Aqua Step
|
Aqua Step
|
||||||
Raging Bull
|
Raging Bull
|
||||||
Make It Rain
|
Make It Rain
|
||||||
WAZA_SAIKOBUREIDO
|
Psyblade
|
||||||
WAZA_HAIDOROSUTIIMU
|
Hydro Steam
|
||||||
Ruination
|
Ruination
|
||||||
Collision Course
|
Collision Course
|
||||||
Electro Drift
|
Electro Drift
|
||||||
|
|
|
@ -1007,5 +1007,5 @@ Roaring Moon
|
||||||
Iron Valiant
|
Iron Valiant
|
||||||
Koraidon
|
Koraidon
|
||||||
Miraidon
|
Miraidon
|
||||||
AKETUBAN
|
Walking Wake
|
||||||
BKETUBAN
|
Iron Leaves
|
|
@ -873,8 +873,8 @@ Canto Ardiente
|
||||||
Danza Acuática
|
Danza Acuática
|
||||||
Furia Taurina
|
Furia Taurina
|
||||||
Fiebre Dorada
|
Fiebre Dorada
|
||||||
WAZA_SAIKOBUREIDO
|
Psicohojas
|
||||||
WAZA_HAIDOROSUTIIMU
|
Hidrovapor
|
||||||
Calamidad
|
Calamidad
|
||||||
Nitrochoque
|
Nitrochoque
|
||||||
Electroderrape
|
Electroderrape
|
||||||
|
|
|
@ -1007,5 +1007,5 @@ Bramaluna
|
||||||
Ferropaladín
|
Ferropaladín
|
||||||
Koraidon
|
Koraidon
|
||||||
Miraidon
|
Miraidon
|
||||||
AKETUBAN
|
Ondulagua
|
||||||
BKETUBAN
|
Ferroverdor
|
|
@ -873,8 +873,8 @@ Chant Flamboyant
|
||||||
Danse Aquatique
|
Danse Aquatique
|
||||||
Taurogne
|
Taurogne
|
||||||
Ruée d’Or
|
Ruée d’Or
|
||||||
WAZA_SAIKOBUREIDO
|
Lame Psychique
|
||||||
WAZA_HAIDOROSUTIIMU
|
Hydrovapeur
|
||||||
Cataclysme
|
Cataclysme
|
||||||
Nitro Crash
|
Nitro Crash
|
||||||
Turbo Volt
|
Turbo Volt
|
||||||
|
|
|
@ -1007,5 +1007,5 @@ Rugit-Lune
|
||||||
Garde-de-Fer
|
Garde-de-Fer
|
||||||
Koraidon
|
Koraidon
|
||||||
Miraidon
|
Miraidon
|
||||||
AKETUBAN
|
Serpente-Eau
|
||||||
BKETUBAN
|
Vert-de-Fer
|
|
@ -873,8 +873,8 @@ Canzone Ardente
|
||||||
Idroballetto
|
Idroballetto
|
||||||
Scatenatoro
|
Scatenatoro
|
||||||
Corsa all’Oro
|
Corsa all’Oro
|
||||||
WAZA_SAIKOBUREIDO
|
Psicolama
|
||||||
WAZA_HAIDOROSUTIIMU
|
Idrovapore
|
||||||
Catastrofe
|
Catastrofe
|
||||||
Turboschianto
|
Turboschianto
|
||||||
Fulmiscatto
|
Fulmiscatto
|
||||||
|
|
|
@ -1007,5 +1007,5 @@ Lunaruggente
|
||||||
Eroeferreo
|
Eroeferreo
|
||||||
Koraidon
|
Koraidon
|
||||||
Miraidon
|
Miraidon
|
||||||
AKETUBAN
|
Acquecrespe
|
||||||
BKETUBAN
|
Fogliaferrea
|
|
@ -873,8 +873,8 @@
|
||||||
アクアステップ
|
アクアステップ
|
||||||
レイジングブル
|
レイジングブル
|
||||||
ゴールドラッシュ
|
ゴールドラッシュ
|
||||||
WAZA_SAIKOBUREIDO
|
サイコブレイド
|
||||||
WAZA_HAIDOROSUTIIMU
|
ハイドロスチーム
|
||||||
カタストロフィ
|
カタストロフィ
|
||||||
アクセルブレイク
|
アクセルブレイク
|
||||||
イナズマドライブ
|
イナズマドライブ
|
||||||
|
|
|
@ -1007,5 +1007,5 @@
|
||||||
テツノブジン
|
テツノブジン
|
||||||
コライドン
|
コライドン
|
||||||
ミライドン
|
ミライドン
|
||||||
AKETUBAN
|
ウネルミナモ
|
||||||
BKETUBAN
|
テツノイサハ
|
|
@ -873,8 +873,8 @@ G의힘
|
||||||
아쿠아스텝
|
아쿠아스텝
|
||||||
레이징불
|
레이징불
|
||||||
골드러시
|
골드러시
|
||||||
WAZA_SAIKOBUREIDO
|
사이코블레이드
|
||||||
WAZA_HAIDOROSUTIIMU
|
하이드로스팀
|
||||||
카타스트로피
|
카타스트로피
|
||||||
액셀브레이크
|
액셀브레이크
|
||||||
라이트닝드라이브
|
라이트닝드라이브
|
||||||
|
|
|
@ -1007,5 +1007,5 @@
|
||||||
무쇠무인
|
무쇠무인
|
||||||
코라이돈
|
코라이돈
|
||||||
미라이돈
|
미라이돈
|
||||||
AKETUBAN
|
굽이치는물결
|
||||||
BKETUBAN
|
무쇠잎새
|
|
@ -873,8 +873,8 @@
|
||||||
流水旋舞
|
流水旋舞
|
||||||
怒牛
|
怒牛
|
||||||
淘金潮
|
淘金潮
|
||||||
WAZA_SAIKOBUREIDO
|
精神剑
|
||||||
WAZA_HAIDOROSUTIIMU
|
水蒸气
|
||||||
大灾难
|
大灾难
|
||||||
全开猛撞
|
全开猛撞
|
||||||
闪电猛冲
|
闪电猛冲
|
||||||
|
|
|
@ -873,8 +873,8 @@
|
||||||
流水旋舞
|
流水旋舞
|
||||||
怒牛
|
怒牛
|
||||||
淘金潮
|
淘金潮
|
||||||
WAZA_SAIKOBUREIDO
|
精神劍
|
||||||
WAZA_HAIDOROSUTIIMU
|
水蒸氣
|
||||||
大災難
|
大災難
|
||||||
全開猛撞
|
全開猛撞
|
||||||
閃電猛衝
|
閃電猛衝
|
||||||
|
|
|
@ -1007,5 +1007,5 @@
|
||||||
铁武者
|
铁武者
|
||||||
故勒顿
|
故勒顿
|
||||||
密勒顿
|
密勒顿
|
||||||
AKETUBAN
|
波荡水
|
||||||
BKETUBAN
|
铁斑叶
|
|
@ -1007,5 +1007,5 @@
|
||||||
鐵武者
|
鐵武者
|
||||||
故勒頓
|
故勒頓
|
||||||
密勒頓
|
密勒頓
|
||||||
AKETUBAN
|
波盪水
|
||||||
BKETUBAN
|
鐵斑葉
|
|
@ -566,6 +566,10 @@ public sealed class SaveBlockAccessor9SV : SCBlockAccessor, ISaveBlock9Main
|
||||||
private const uint FSYS_RAID_DIFFICTLTY6_SURVEY = 0xAD1DC231;
|
private const uint FSYS_RAID_DIFFICTLTY6_SURVEY = 0xAD1DC231;
|
||||||
private const uint FSYS_NETCONTENTS_OFF = 0x9AB093F2;
|
private const uint FSYS_NETCONTENTS_OFF = 0x9AB093F2;
|
||||||
|
|
||||||
|
private const uint FSYS_VIVILLON = 0x22F70BCF; // real name todo
|
||||||
|
private const uint FSYS_GO_LINK_ENABLED = 0x3ABC21E3; // real name todo
|
||||||
|
private const uint KGoTransfer = 0x7EE0A576;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region FEVT
|
#region FEVT
|
||||||
|
|
|
@ -26,6 +26,14 @@ public static class SaveUtil
|
||||||
public const int SIZE_G9_1Ab = 0x31A2DD; // 1.0.0 -> 1.0.1 -> 1.0.1 after multiplayer -> 1.1.0
|
public const int SIZE_G9_1Ab = 0x31A2DD; // 1.0.0 -> 1.0.1 -> 1.0.1 after multiplayer -> 1.1.0
|
||||||
public const int SIZE_G9_2 = 0x31A2D0; // 1.0.0 -> 1.1.0
|
public const int SIZE_G9_2 = 0x31A2D0; // 1.0.0 -> 1.1.0
|
||||||
|
|
||||||
|
// 1.2.0: add 0x2C9F; clean upgrade (1.1.0->1.2.0 is same as *1.2.0)
|
||||||
|
public const int SIZE_G9_3A0 = 0x31CF7C; // 1.0.0 -> 1.0.1 -> 1.1.0 -> 1.2.0 AM
|
||||||
|
public const int SIZE_G9_3A1 = 0x31CA6F; // 1.0.1 -> 1.1.0 -> 1.2.0 AM
|
||||||
|
public const int SIZE_G9_3B0 = SIZE_G9_3A0 - 0xD; // BM
|
||||||
|
public const int SIZE_G9_3B1 = SIZE_G9_3A1 - 0xD; // BM
|
||||||
|
public const int SIZE_G9_3G0 = SIZE_G9_3A0 + 0x5; // GO
|
||||||
|
public const int SIZE_G9_3G1 = SIZE_G9_3A1 + 0x5; // GO
|
||||||
|
|
||||||
public const int SIZE_G8LA = 0x136DDE;
|
public const int SIZE_G8LA = 0x136DDE;
|
||||||
public const int SIZE_G8LA_1 = 0x13AD06;
|
public const int SIZE_G8LA_1 = 0x13AD06;
|
||||||
|
|
||||||
|
@ -112,6 +120,10 @@ public static class SaveUtil
|
||||||
SIZE_G9_1A, SIZE_G9_1Aa,
|
SIZE_G9_1A, SIZE_G9_1Aa,
|
||||||
SIZE_G9_1Ba, SIZE_G9_1Ab,
|
SIZE_G9_1Ba, SIZE_G9_1Ab,
|
||||||
SIZE_G9_2, SIZE_G9_3,
|
SIZE_G9_2, SIZE_G9_3,
|
||||||
|
|
||||||
|
SIZE_G9_3A0, SIZE_G9_3A1,
|
||||||
|
SIZE_G9_3B0, SIZE_G9_3B1,
|
||||||
|
SIZE_G9_3G0, SIZE_G9_3G1,
|
||||||
};
|
};
|
||||||
|
|
||||||
private static readonly HashSet<int> SizesSWSH = new()
|
private static readonly HashSet<int> SizesSWSH = new()
|
||||||
|
|
|
@ -640,6 +640,16 @@ namespace PKHeX.Drawing.PokeSprite.Properties {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||||
|
/// </summary>
|
||||||
|
public static System.Drawing.Bitmap a_1009 {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("a_1009", resourceCulture);
|
||||||
|
return ((System.Drawing.Bitmap)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -660,6 +670,16 @@ namespace PKHeX.Drawing.PokeSprite.Properties {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||||
|
/// </summary>
|
||||||
|
public static System.Drawing.Bitmap a_1010 {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("a_1010", resourceCulture);
|
||||||
|
return ((System.Drawing.Bitmap)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -1357,12 +1357,18 @@
|
||||||
<data name="a_1008_4" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="a_1008_4" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>..\Resources\img\Artwork Pokemon Sprites\a_1008-4.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
<value>..\Resources\img\Artwork Pokemon Sprites\a_1008-4.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="a_1009" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\img\Artwork Pokemon Sprites\a_1009.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
<data name="a_100_1" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="a_100_1" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>..\Resources\img\Artwork Pokemon Sprites\a_100-1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
<value>..\Resources\img\Artwork Pokemon Sprites\a_100-1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="a_101" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="a_101" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>..\Resources\img\Artwork Pokemon Sprites\a_101.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
<value>..\Resources\img\Artwork Pokemon Sprites\a_101.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="a_1010" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\img\Artwork Pokemon Sprites\a_1010.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
<data name="a_101_1" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="a_101_1" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>..\Resources\img\Artwork Pokemon Sprites\a_101-1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
<value>..\Resources\img\Artwork Pokemon Sprites\a_101-1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
</data>
|
</data>
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 3.7 KiB |
Binary file not shown.
After Width: | Height: | Size: 3.4 KiB |
|
@ -37,14 +37,14 @@ public class SpeciesConverterTests
|
||||||
[Theory]
|
[Theory]
|
||||||
[InlineData(0)]
|
[InlineData(0)]
|
||||||
[InlineData(934, Palafin)]
|
[InlineData(934, Palafin)]
|
||||||
[InlineData(980, _980)]
|
[InlineData(980, WalkingWake)]
|
||||||
[InlineData(987, _987)]
|
[InlineData(987, IronLeaves)]
|
||||||
public void GetNational9(ushort raw, Species national = 0) => ((Species)SpeciesConverter.GetNational9(raw)).Should().Be(national);
|
public void GetNational9(ushort raw, Species national = 0) => ((Species)SpeciesConverter.GetNational9(raw)).Should().Be(national);
|
||||||
|
|
||||||
[Theory]
|
[Theory]
|
||||||
[InlineData(0)]
|
[InlineData(0)]
|
||||||
[InlineData(934, Palafin)]
|
[InlineData(934, Palafin)]
|
||||||
[InlineData(980, _980)]
|
[InlineData(980, WalkingWake)]
|
||||||
[InlineData(987, _987)]
|
[InlineData(987, IronLeaves)]
|
||||||
public void GetInternal9(ushort raw, Species national = 0) => SpeciesConverter.GetInternal9((ushort)national).Should().Be(raw);
|
public void GetInternal9(ushort raw, Species national = 0) => SpeciesConverter.GetInternal9((ushort)national).Should().Be(raw);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue