Remember this? Have you tried editing it?
In the exefs is a 38 count list of species IDs:
.data.r:0059E870 word_59E870 DCW 150, 151, 249, 250, 251, 382, 383, 384, 385, 386, 483
.data.r:0059E870 DCW 484, 487, 489, 490, 491, 492, 493, 494, 643, 644, 646
.data.r:0059E870 DCW 647, 648, 649, 716, 717, 718, 719, 720, 721, 789, 790
.data.r:0059E870 DCW 791, 792, 800, 801, 802
It's called by PokeRegulation::CheckLegend, which looks like this:
signed int __fastcall PokeRegulation::CheckLegend(PokeRegulation *this, int a2, unsigned __int8 a3)
{
signed int v3; // r1@2
__int16 *v4; // r2@5
PokeRegulation *v5; // r12@5
bool v6; // zf@5
if ( this != 670 ) // floette
{
v3 = 0;
while ( 1 ) // iterate until list is finished
{
v4 = &word_59E870[v3]; // legend list
v5 = *v4;
v6 = v5 == this;
if ( v5 != this )
v6 = v4[1] == this;
if ( v6 ) // ???? dunno, possibly an external banlist having a bitflag set
break; // returns true
v3 += 2; // each species is 2 bytes (ushort)
if ( v3 >= 38 ) // last entry exhausted
return 0; // false
}
return 1; // true
}
if ( a2 == 5 ) // AZ Floette
return 1; // true
return 0; // false
}
That's probably the function it calls; simplest way for the game to check is to just check all species through a list rather than bitflags, which would be reserved for dynamic banlists (ie rulesets in the save file, in which the goal is to minimize the space used rather than speed).