S/V 1.2.0 Support (#3819)

This commit is contained in:
Kurt 2023-02-27 19:12:27 -08:00 committed by GitHub
parent 353ca40f42
commit 0f1fba86f7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
45 changed files with 132 additions and 68 deletions

View file

@ -880,8 +880,8 @@ public enum Move
AquaStep, AquaStep,
RagingBull, RagingBull,
MakeItRain, MakeItRain,
_875, Psyblade,
_876, HydroSteam,
Ruination, Ruination,
CollisionCourse, CollisionCourse,
ElectroDrift, ElectroDrift,

View file

@ -1014,7 +1014,7 @@ public enum Species : ushort
IronValiant, IronValiant,
Koraidon, Koraidon,
Miraidon, Miraidon,
_980, WalkingWake,
_987, IronLeaves,
MAX_COUNT, MAX_COUNT,
} }

View file

@ -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;
} }

View file

@ -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,
};
} }

View file

@ -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,
}; };

View file

@ -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
}; };
} }

View file

@ -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();

View file

@ -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]),

View file

@ -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;

View file

@ -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)

View file

@ -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

View file

@ -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,
}; };

View file

@ -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,
}; };

View file

@ -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

View file

@ -1007,5 +1007,5 @@ Donnersichel
Eisenkrieger Eisenkrieger
Koraidon Koraidon
Miraidon Miraidon
AKETUBAN Windewoge
BKETUBAN Eisenblatt

View file

@ -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

View file

@ -1007,5 +1007,5 @@ Roaring Moon
Iron Valiant Iron Valiant
Koraidon Koraidon
Miraidon Miraidon
AKETUBAN Walking Wake
BKETUBAN Iron Leaves

View file

@ -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

View file

@ -1007,5 +1007,5 @@ Bramaluna
Ferropaladín Ferropaladín
Koraidon Koraidon
Miraidon Miraidon
AKETUBAN Ondulagua
BKETUBAN Ferroverdor

View file

@ -873,8 +873,8 @@ Chant Flamboyant
Danse Aquatique Danse Aquatique
Taurogne Taurogne
Ruée dOr Ruée dOr
WAZA_SAIKOBUREIDO Lame Psychique
WAZA_HAIDOROSUTIIMU Hydrovapeur
Cataclysme Cataclysme
Nitro Crash Nitro Crash
Turbo Volt Turbo Volt

View file

@ -1007,5 +1007,5 @@ Rugit-Lune
Garde-de-Fer Garde-de-Fer
Koraidon Koraidon
Miraidon Miraidon
AKETUBAN Serpente-Eau
BKETUBAN Vert-de-Fer

View file

@ -873,8 +873,8 @@ Canzone Ardente
Idroballetto Idroballetto
Scatenatoro Scatenatoro
Corsa allOro Corsa allOro
WAZA_SAIKOBUREIDO Psicolama
WAZA_HAIDOROSUTIIMU Idrovapore
Catastrofe Catastrofe
Turboschianto Turboschianto
Fulmiscatto Fulmiscatto

View file

@ -1007,5 +1007,5 @@ Lunaruggente
Eroeferreo Eroeferreo
Koraidon Koraidon
Miraidon Miraidon
AKETUBAN Acquecrespe
BKETUBAN Fogliaferrea

View file

@ -873,8 +873,8 @@
アクアステップ アクアステップ
レイジングブル レイジングブル
ゴールドラッシュ ゴールドラッシュ
WAZA_SAIKOBUREIDO サイコブレイド
WAZA_HAIDOROSUTIIMU ハイドロスチーム
カタストロフィ カタストロフィ
アクセルブレイク アクセルブレイク
イナズマドライブ イナズマドライブ

View file

@ -1007,5 +1007,5 @@
テツノブジン テツノブジン
コライドン コライドン
ミライドン ミライドン
AKETUBAN ウネルミナモ
BKETUBAN テツノイサハ

View file

@ -873,8 +873,8 @@ G의힘
아쿠아스텝 아쿠아스텝
레이징불 레이징불
골드러시 골드러시
WAZA_SAIKOBUREIDO 사이코블레이드
WAZA_HAIDOROSUTIIMU 하이드로스팀
카타스트로피 카타스트로피
액셀브레이크 액셀브레이크
라이트닝드라이브 라이트닝드라이브

View file

@ -1007,5 +1007,5 @@
무쇠무인 무쇠무인
코라이돈 코라이돈
미라이돈 미라이돈
AKETUBAN 굽이치는물결
BKETUBAN 무쇠잎새

View file

@ -873,8 +873,8 @@
流水旋舞 流水旋舞
怒牛 怒牛
淘金潮 淘金潮
WAZA_SAIKOBUREIDO 精神剑
WAZA_HAIDOROSUTIIMU 水蒸气
大灾难 大灾难
全开猛撞 全开猛撞
闪电猛冲 闪电猛冲

View file

@ -873,8 +873,8 @@
流水旋舞 流水旋舞
怒牛 怒牛
淘金潮 淘金潮
WAZA_SAIKOBUREIDO 精神劍
WAZA_HAIDOROSUTIIMU 水蒸氣
大災難 大災難
全開猛撞 全開猛撞
閃電猛衝 閃電猛衝

View file

@ -1007,5 +1007,5 @@
铁武者 铁武者
故勒顿 故勒顿
密勒顿 密勒顿
AKETUBAN 波荡水
BKETUBAN 铁斑叶

View file

@ -1007,5 +1007,5 @@
鐵武者 鐵武者
故勒頓 故勒頓
密勒頓 密勒頓
AKETUBAN 波盪水
BKETUBAN 鐵斑葉

View file

@ -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

View file

@ -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()

View file

@ -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>

View file

@ -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

View file

@ -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);
} }