mirror of
https://github.com/kwsch/PKHeX.git
synced 2026-08-17 13:17:06 -05:00
BDSP: Condense voiceless array
saves 0.4KB lol no functional change update terminology; might not be explicitly "footprint" type, more "footprint man's evaluated type" https://bulbapedia.bulbagarden.net/wiki/Footprint#Footprint_Ribbon
This commit is contained in:
@@ -76,8 +76,8 @@ public static bool IsRibbonValidFootprint(PKM pk, EvolutionHistory evos)
|
||||
// Gen8-BDSP: Variable by species Footprint
|
||||
if (evos.HasVisitedBDSP)
|
||||
{
|
||||
if (IsAnyWithoutFootprint8b(evos.Gen8b))
|
||||
return true; // no footprint
|
||||
if (IsVoiceless(evos.Gen8b))
|
||||
return true; // no voice, any level.
|
||||
if (IsWellTraveled30(pk))
|
||||
return true; // traveled well
|
||||
}
|
||||
@@ -230,76 +230,39 @@ public static bool IsRibbonValidTwinklingStar(EvolutionHistory evos, PKM pk)
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks if any of the species it existed as in BD/SP lacked footprints.
|
||||
/// Checks if any of the species it existed as in BD/SP was "voiceless".
|
||||
/// </summary>
|
||||
private static bool IsAnyWithoutFootprint8b(EvoCriteria[] evos)
|
||||
private static bool IsVoiceless(ReadOnlySpan<EvoCriteria> evos)
|
||||
{
|
||||
var arr = HasFootprintBDSP;
|
||||
foreach (var evo in evos)
|
||||
{
|
||||
var species = evo.Species;
|
||||
if (species >= arr.Length)
|
||||
continue;
|
||||
if (!arr[species])
|
||||
if (IsVoiceless(evo.Species))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Derived from ROM data: true for all Footprint types besides 5 (5 = no feet).
|
||||
// If true, requires gaining 30 levels to obtain ribbon. If false, can obtain ribbon at any level.
|
||||
private static ReadOnlySpan<bool> HasFootprintBDSP =>
|
||||
private static bool IsVoiceless(ushort species)
|
||||
{
|
||||
var arr = VoicelessBDSP;
|
||||
int index = species >> 3;
|
||||
if (index >= arr.Length)
|
||||
return false;
|
||||
int bit = species & 7;
|
||||
return (arr[index] & (1 << bit)) != 0;
|
||||
}
|
||||
|
||||
// If true, can obtain the Footprint ribbon at any level ("voiceless"). If false, requires gaining 30 levels to obtain ribbon.
|
||||
// Derived from ROM data: false for all Footprint types besides `5`.
|
||||
// Metapod, Kakuna, Paras, Parasect, Venomoth, Magnemite, Magneton, Staryu, Starmie, Porygon, Kabuto, Xatu, Unown, Pineco, Forretress,
|
||||
// Remoraid, Porygon2, Pupitar, Silcoon, Cascoon, Seedot, Nincada, Nosepass, Lunatone, Solrock, Baltoy, Claydol, Lileep, Cradily,
|
||||
// Anorith, Shelgon, Beldum, Metang, Regirock, Regice, Registeel, Bronzor, Bronzong, Magnezone, Porygon-Z, Probopass, Regigigas
|
||||
private static ReadOnlySpan<byte> VoicelessBDSP =>
|
||||
[
|
||||
true, true, true, true, true, true, true, true, true, true,
|
||||
true, false, true, true, false, true, true, true, true, true,
|
||||
true, true, true, true, true, true, true, true, true, true,
|
||||
true, true, true, true, true, true, true, true, true, true,
|
||||
true, true, true, true, true, true, false, false, true, false,
|
||||
true, true, true, true, true, true, true, true, true, true,
|
||||
true, true, true, true, true, true, true, true, true, true,
|
||||
true, true, true, true, true, true, true, true, true, true,
|
||||
true, false, false, true, true, true, true, true, true, true,
|
||||
true, true, true, true, true, true, true, true, true, true,
|
||||
true, true, true, true, true, true, true, true, true, true,
|
||||
true, true, true, true, true, true, true, true, true, true,
|
||||
false, false, true, true, true, true, true, true, true, true,
|
||||
true, true, true, true, true, true, true, false, true, true,
|
||||
false, true, true, true, true, true, true, true, true, true,
|
||||
true, true, true, true, true, true, true, true, true, true,
|
||||
true, true, true, true, true, true, true, true, true, true,
|
||||
true, true, true, true, true, true, true, true, false, true,
|
||||
true, true, true, true, true, true, true, true, true, true,
|
||||
true, true, true, true, true, true, true, true, true, true,
|
||||
true, false, true, true, false, false, true, true, true, true,
|
||||
true, true, true, true, true, true, true, true, true, true,
|
||||
true, true, true, false, true, true, true, true, true, true,
|
||||
true, true, true, false, true, true, true, true, true, true,
|
||||
true, true, true, true, true, true, true, false, true, true,
|
||||
true, true, true, true, true, true, true, true, true, true,
|
||||
true, true, true, true, true, true, false, true, false, true,
|
||||
true, true, true, false, true, true, true, true, true, true,
|
||||
true, true, true, true, true, true, true, true, true, true,
|
||||
false, true, true, true, true, true, true, true, true, false,
|
||||
true, true, true, true, true, true, true, true, true, true,
|
||||
true, true, true, true, true, true, true, true, true, true,
|
||||
true, true, true, true, true, true, true, true, true, true,
|
||||
true, true, true, true, true, true, true, false, false, true,
|
||||
true, true, true, false, false, false, false, false, true, true,
|
||||
true, true, true, true, true, true, true, true, true, true,
|
||||
true, true, true, true, true, true, true, true, true, true,
|
||||
true, true, false, true, false, false, true, false, false, false,
|
||||
true, true, true, true, true, true, true, true, true, true,
|
||||
true, true, true, true, true, true, true, true, true, true,
|
||||
true, true, true, true, true, true, true, true, true, true,
|
||||
true, true, true, true, true, true, true, true, true, true,
|
||||
true, true, true, true, true, true, true, true, true, true,
|
||||
true, true, true, true, true, true, false, false, true, true,
|
||||
true, true, true, true, true, true, true, true, true, true,
|
||||
true, true, true, true, true, true, true, true, true, true,
|
||||
true, true, false, true, true, true, true, true, true, true,
|
||||
true, true, true, true, false, true, false, true, true, true,
|
||||
true, true, true, true, true, true, false, true, true, true,
|
||||
true, true, true, true,
|
||||
0x00, 0x48, 0x00, 0x00, 0x00, 0xC0, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x03,
|
||||
0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x32, 0x00, 0x80, 0x00, 0x02, 0x80, 0x00,
|
||||
0x00, 0x14, 0x02, 0x00, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00, 0x86, 0x0F, 0x00, 0x00, 0xD0, 0x0E,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x40, 0x00, 0x14, 0x40,
|
||||
];
|
||||
|
||||
/// <summary>
|
||||
|
||||
Reference in New Issue
Block a user