Shows the first form seen by form table order

This commit is contained in:
Eduardo Quezada 2022-10-10 22:12:11 -03:00
parent ee03065904
commit f84a1edc48

View file

@ -153,7 +153,7 @@ struct SearchMenuItem
struct PokedexListItem struct PokedexListItem
{ {
u16 dexNum; u16 dexNum;
u16 seen:1; u16 seenSpecies:15;
u16 owned:1; u16 owned:1;
}; };
@ -1540,11 +1540,11 @@ static void ResetPokedexView(struct PokedexView *pokedexView)
for (i = 0; i < NATIONAL_DEX_COUNT; i++) for (i = 0; i < NATIONAL_DEX_COUNT; i++)
{ {
pokedexView->pokedexList[i].dexNum = 0xFFFF; pokedexView->pokedexList[i].dexNum = 0xFFFF;
pokedexView->pokedexList[i].seen = FALSE; pokedexView->pokedexList[i].seenSpecies = SPECIES_NONE;
pokedexView->pokedexList[i].owned = FALSE; pokedexView->pokedexList[i].owned = FALSE;
} }
pokedexView->pokedexList[NATIONAL_DEX_COUNT].dexNum = 0; pokedexView->pokedexList[NATIONAL_DEX_COUNT].dexNum = 0;
pokedexView->pokedexList[NATIONAL_DEX_COUNT].seen = FALSE; pokedexView->pokedexList[NATIONAL_DEX_COUNT].seenSpecies = SPECIES_NONE;
pokedexView->pokedexList[NATIONAL_DEX_COUNT].owned = FALSE; pokedexView->pokedexList[NATIONAL_DEX_COUNT].owned = FALSE;
pokedexView->pokemonListCount = 0; pokedexView->pokemonListCount = 0;
pokedexView->selectedPokemon = 0; pokedexView->selectedPokemon = 0;
@ -1668,7 +1668,7 @@ static void Task_HandlePokedexInput(u8 taskId)
} }
else else
{ {
if (JOY_NEW(A_BUTTON) && sPokedexView->pokedexList[sPokedexView->selectedPokemon].seen) if (JOY_NEW(A_BUTTON) && sPokedexView->pokedexList[sPokedexView->selectedPokemon].seenSpecies != SPECIES_NONE)
{ {
UpdateSelectedMonSpriteId(); UpdateSelectedMonSpriteId();
BeginNormalPaletteFade(~(1 << (gSprites[sPokedexView->selectedMonSpriteId].oam.paletteNum + 16)), 0, 0, 0x10, RGB_BLACK); BeginNormalPaletteFade(~(1 << (gSprites[sPokedexView->selectedMonSpriteId].oam.paletteNum + 16)), 0, 0, 0x10, RGB_BLACK);
@ -1871,7 +1871,7 @@ static void Task_HandleSearchResultsInput(u8 taskId)
} }
else else
{ {
if (JOY_NEW(A_BUTTON) && sPokedexView->pokedexList[sPokedexView->selectedPokemon].seen) if (JOY_NEW(A_BUTTON) && sPokedexView->pokedexList[sPokedexView->selectedPokemon].seenSpecies != SPECIES_NONE)
{ {
u32 a; u32 a;
@ -2210,9 +2210,9 @@ static void CreatePokedexList(u8 dexMode, u8 order)
{ {
temp_dexNum = HoennToNationalOrder(i + 1); temp_dexNum = HoennToNationalOrder(i + 1);
sPokedexView->pokedexList[i].dexNum = temp_dexNum; sPokedexView->pokedexList[i].dexNum = temp_dexNum;
sPokedexView->pokedexList[i].seen = GetPokedexFlagFirstSeen(temp_dexNum) ? TRUE : FALSE; sPokedexView->pokedexList[i].seenSpecies = GetPokedexFlagFirstSeen(temp_dexNum);
sPokedexView->pokedexList[i].owned = GetSetPokedexCaughtFlag(temp_dexNum, FLAG_GET_CAUGHT); sPokedexView->pokedexList[i].owned = GetSetPokedexCaughtFlag(temp_dexNum, FLAG_GET_CAUGHT);
if (sPokedexView->pokedexList[i].seen) if (sPokedexView->pokedexList[i].seenSpecies != SPECIES_NONE)
sPokedexView->pokemonListCount = i + 1; sPokedexView->pokemonListCount = i + 1;
} }
} }
@ -2222,14 +2222,14 @@ static void CreatePokedexList(u8 dexMode, u8 order)
for (i = 0, r5 = 0, r10 = 0; i < temp_dexCount; i++) for (i = 0, r5 = 0, r10 = 0; i < temp_dexCount; i++)
{ {
temp_dexNum = i + 1; temp_dexNum = i + 1;
if (GetPokedexFlagFirstSeen(temp_dexNum) ? TRUE : FALSE) if (GetPokedexFlagFirstSeen(temp_dexNum) != SPECIES_NONE)
r10 = 1; r10 = 1;
if (r10) if (r10)
{ {
sPokedexView->pokedexList[r5].dexNum = temp_dexNum; sPokedexView->pokedexList[r5].dexNum = temp_dexNum;
sPokedexView->pokedexList[r5].seen = GetPokedexFlagFirstSeen(temp_dexNum) ? TRUE : FALSE; sPokedexView->pokedexList[r5].seenSpecies = GetPokedexFlagFirstSeen(temp_dexNum);
sPokedexView->pokedexList[r5].owned = GetSetPokedexCaughtFlag(temp_dexNum, FLAG_GET_CAUGHT); sPokedexView->pokedexList[r5].owned = GetSetPokedexCaughtFlag(temp_dexNum, FLAG_GET_CAUGHT);
if (sPokedexView->pokedexList[r5].seen) if (sPokedexView->pokedexList[r5].seenSpecies != SPECIES_NONE)
sPokedexView->pokemonListCount = r5 + 1; sPokedexView->pokemonListCount = r5 + 1;
r5++; r5++;
} }
@ -2239,12 +2239,14 @@ static void CreatePokedexList(u8 dexMode, u8 order)
case ORDER_ALPHABETICAL: case ORDER_ALPHABETICAL:
for (i = 0; i < ARRAY_COUNT(gPokedexOrder_Alphabetical); i++) for (i = 0; i < ARRAY_COUNT(gPokedexOrder_Alphabetical); i++)
{ {
u16 seenSpecies;
temp_dexNum = gPokedexOrder_Alphabetical[i]; temp_dexNum = gPokedexOrder_Alphabetical[i];
seenSpecies = GetPokedexFlagFirstSeen(temp_dexNum);
if (temp_dexNum <= NATIONAL_DEX_COUNT && (!temp_isHoennDex || NationalToHoennOrder(temp_dexNum) != 0) && GetPokedexFlagFirstSeen(temp_dexNum) ? TRUE : FALSE) if (temp_dexNum <= NATIONAL_DEX_COUNT && (!temp_isHoennDex || NationalToHoennOrder(temp_dexNum) != 0) && seenSpecies != SPECIES_NONE)
{ {
sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = temp_dexNum; sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = temp_dexNum;
sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = TRUE; sPokedexView->pokedexList[sPokedexView->pokemonListCount].seenSpecies = seenSpecies;
sPokedexView->pokedexList[sPokedexView->pokemonListCount].owned = GetSetPokedexCaughtFlag(temp_dexNum, FLAG_GET_CAUGHT); sPokedexView->pokedexList[sPokedexView->pokemonListCount].owned = GetSetPokedexCaughtFlag(temp_dexNum, FLAG_GET_CAUGHT);
sPokedexView->pokemonListCount++; sPokedexView->pokemonListCount++;
} }
@ -2253,12 +2255,14 @@ static void CreatePokedexList(u8 dexMode, u8 order)
case ORDER_HEAVIEST: case ORDER_HEAVIEST:
for (i = ARRAY_COUNT(gPokedexOrder_Weight) - 1; i >= 0; i--) for (i = ARRAY_COUNT(gPokedexOrder_Weight) - 1; i >= 0; i--)
{ {
u16 seenSpecies;
temp_dexNum = gPokedexOrder_Weight[i]; temp_dexNum = gPokedexOrder_Weight[i];
seenSpecies = GetPokedexFlagFirstSeen(temp_dexNum);
if (temp_dexNum <= NATIONAL_DEX_COUNT && (!temp_isHoennDex || NationalToHoennOrder(temp_dexNum) != 0) && GetSetPokedexCaughtFlag(temp_dexNum, FLAG_GET_CAUGHT)) if (temp_dexNum <= NATIONAL_DEX_COUNT && (!temp_isHoennDex || NationalToHoennOrder(temp_dexNum) != 0) && GetSetPokedexCaughtFlag(temp_dexNum, FLAG_GET_CAUGHT))
{ {
sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = temp_dexNum; sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = temp_dexNum;
sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = TRUE; sPokedexView->pokedexList[sPokedexView->pokemonListCount].seenSpecies = seenSpecies;
sPokedexView->pokedexList[sPokedexView->pokemonListCount].owned = TRUE; sPokedexView->pokedexList[sPokedexView->pokemonListCount].owned = TRUE;
sPokedexView->pokemonListCount++; sPokedexView->pokemonListCount++;
} }
@ -2267,12 +2271,14 @@ static void CreatePokedexList(u8 dexMode, u8 order)
case ORDER_LIGHTEST: case ORDER_LIGHTEST:
for (i = 0; i < ARRAY_COUNT(gPokedexOrder_Weight); i++) for (i = 0; i < ARRAY_COUNT(gPokedexOrder_Weight); i++)
{ {
u16 seenSpecies;
temp_dexNum = gPokedexOrder_Weight[i]; temp_dexNum = gPokedexOrder_Weight[i];
seenSpecies = GetPokedexFlagFirstSeen(temp_dexNum);
if (temp_dexNum <= NATIONAL_DEX_COUNT && (!temp_isHoennDex || NationalToHoennOrder(temp_dexNum) != 0) && GetSetPokedexCaughtFlag(temp_dexNum, FLAG_GET_CAUGHT)) if (temp_dexNum <= NATIONAL_DEX_COUNT && (!temp_isHoennDex || NationalToHoennOrder(temp_dexNum) != 0) && GetSetPokedexCaughtFlag(temp_dexNum, FLAG_GET_CAUGHT))
{ {
sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = temp_dexNum; sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = temp_dexNum;
sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = TRUE; sPokedexView->pokedexList[sPokedexView->pokemonListCount].seenSpecies = seenSpecies;
sPokedexView->pokedexList[sPokedexView->pokemonListCount].owned = TRUE; sPokedexView->pokedexList[sPokedexView->pokemonListCount].owned = TRUE;
sPokedexView->pokemonListCount++; sPokedexView->pokemonListCount++;
} }
@ -2281,12 +2287,14 @@ static void CreatePokedexList(u8 dexMode, u8 order)
case ORDER_TALLEST: case ORDER_TALLEST:
for (i = ARRAY_COUNT(gPokedexOrder_Height) - 1; i >= 0; i--) for (i = ARRAY_COUNT(gPokedexOrder_Height) - 1; i >= 0; i--)
{ {
u16 seenSpecies;
temp_dexNum = gPokedexOrder_Height[i]; temp_dexNum = gPokedexOrder_Height[i];
seenSpecies = GetPokedexFlagFirstSeen(temp_dexNum);
if (temp_dexNum <= NATIONAL_DEX_COUNT && (!temp_isHoennDex || NationalToHoennOrder(temp_dexNum) != 0) && GetSetPokedexCaughtFlag(temp_dexNum, FLAG_GET_CAUGHT)) if (temp_dexNum <= NATIONAL_DEX_COUNT && (!temp_isHoennDex || NationalToHoennOrder(temp_dexNum) != 0) && GetSetPokedexCaughtFlag(temp_dexNum, FLAG_GET_CAUGHT))
{ {
sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = temp_dexNum; sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = temp_dexNum;
sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = TRUE; sPokedexView->pokedexList[sPokedexView->pokemonListCount].seenSpecies = seenSpecies;
sPokedexView->pokedexList[sPokedexView->pokemonListCount].owned = TRUE; sPokedexView->pokedexList[sPokedexView->pokemonListCount].owned = TRUE;
sPokedexView->pokemonListCount++; sPokedexView->pokemonListCount++;
} }
@ -2295,12 +2303,14 @@ static void CreatePokedexList(u8 dexMode, u8 order)
case ORDER_SMALLEST: case ORDER_SMALLEST:
for (i = 0; i < ARRAY_COUNT(gPokedexOrder_Height); i++) for (i = 0; i < ARRAY_COUNT(gPokedexOrder_Height); i++)
{ {
u16 seenSpecies;
temp_dexNum = gPokedexOrder_Height[i]; temp_dexNum = gPokedexOrder_Height[i];
seenSpecies = GetPokedexFlagFirstSeen(temp_dexNum);
if (temp_dexNum <= NATIONAL_DEX_COUNT && (!temp_isHoennDex || NationalToHoennOrder(temp_dexNum) != 0) && GetSetPokedexCaughtFlag(temp_dexNum, FLAG_GET_CAUGHT)) if (temp_dexNum <= NATIONAL_DEX_COUNT && (!temp_isHoennDex || NationalToHoennOrder(temp_dexNum) != 0) && GetSetPokedexCaughtFlag(temp_dexNum, FLAG_GET_CAUGHT))
{ {
sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = temp_dexNum; sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = temp_dexNum;
sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = TRUE; sPokedexView->pokedexList[sPokedexView->pokemonListCount].seenSpecies = seenSpecies;
sPokedexView->pokedexList[sPokedexView->pokemonListCount].owned = TRUE; sPokedexView->pokedexList[sPokedexView->pokemonListCount].owned = TRUE;
sPokedexView->pokemonListCount++; sPokedexView->pokemonListCount++;
} }
@ -2311,7 +2321,7 @@ static void CreatePokedexList(u8 dexMode, u8 order)
for (i = sPokedexView->pokemonListCount; i < NATIONAL_DEX_COUNT; i++) for (i = sPokedexView->pokemonListCount; i < NATIONAL_DEX_COUNT; i++)
{ {
sPokedexView->pokedexList[i].dexNum = 0xFFFF; sPokedexView->pokedexList[i].dexNum = 0xFFFF;
sPokedexView->pokedexList[i].seen = FALSE; sPokedexView->pokedexList[i].seenSpecies = SPECIES_NONE;
sPokedexView->pokedexList[i].owned = FALSE; sPokedexView->pokedexList[i].owned = FALSE;
} }
} }
@ -2347,7 +2357,7 @@ static void CreateMonListEntry(u8 position, u16 b, u16 ignored)
else else
{ {
ClearMonListEntry(17, i * 2, ignored); ClearMonListEntry(17, i * 2, ignored);
if (sPokedexView->pokedexList[entryNum].seen) if (sPokedexView->pokedexList[entryNum].seenSpecies != SPECIES_NONE)
{ {
CreateMonDexNum(entryNum, 0x12, i * 2, ignored); CreateMonDexNum(entryNum, 0x12, i * 2, ignored);
CreateCaughtBall(sPokedexView->pokedexList[entryNum].owned, 0x11, i * 2, ignored); CreateCaughtBall(sPokedexView->pokedexList[entryNum].owned, 0x11, i * 2, ignored);
@ -2372,7 +2382,7 @@ static void CreateMonListEntry(u8 position, u16 b, u16 ignored)
else else
{ {
ClearMonListEntry(17, sPokedexView->listVOffset * 2, ignored); ClearMonListEntry(17, sPokedexView->listVOffset * 2, ignored);
if (sPokedexView->pokedexList[entryNum].seen) if (sPokedexView->pokedexList[entryNum].seenSpecies != SPECIES_NONE)
{ {
CreateMonDexNum(entryNum, 18, sPokedexView->listVOffset * 2, ignored); CreateMonDexNum(entryNum, 18, sPokedexView->listVOffset * 2, ignored);
CreateCaughtBall(sPokedexView->pokedexList[entryNum].owned, 0x11, sPokedexView->listVOffset * 2, ignored); CreateCaughtBall(sPokedexView->pokedexList[entryNum].owned, 0x11, sPokedexView->listVOffset * 2, ignored);
@ -2396,7 +2406,7 @@ static void CreateMonListEntry(u8 position, u16 b, u16 ignored)
else else
{ {
ClearMonListEntry(17, vOffset * 2, ignored); ClearMonListEntry(17, vOffset * 2, ignored);
if (sPokedexView->pokedexList[entryNum].seen) if (sPokedexView->pokedexList[entryNum].seenSpecies != SPECIES_NONE)
{ {
CreateMonDexNum(entryNum, 18, vOffset * 2, ignored); CreateMonDexNum(entryNum, 18, vOffset * 2, ignored);
CreateCaughtBall(sPokedexView->pokedexList[entryNum].owned, 0x11, vOffset * 2, ignored); CreateCaughtBall(sPokedexView->pokedexList[entryNum].owned, 0x11, vOffset * 2, ignored);
@ -2459,7 +2469,7 @@ static void ClearMonListEntry(u8 x, u8 y, u16 unused)
static void CreateMonSpritesAtPos(u16 selectedMon, u16 ignored) static void CreateMonSpritesAtPos(u16 selectedMon, u16 ignored)
{ {
u8 i; u8 i;
u16 dexNum; u16 species;
u8 spriteId; u8 spriteId;
gPaletteFade.bufferTransferDisabled = TRUE; gPaletteFade.bufferTransferDisabled = TRUE;
@ -2469,28 +2479,28 @@ static void CreateMonSpritesAtPos(u16 selectedMon, u16 ignored)
sPokedexView->selectedMonSpriteId = 0xFFFF; sPokedexView->selectedMonSpriteId = 0xFFFF;
// Create top mon sprite // Create top mon sprite
dexNum = GetPokemonSpriteToDisplay(selectedMon - 1); species = GetPokemonSpriteToDisplay(selectedMon - 1);
if (dexNum != 0xFFFF) if (species != 0xFFFF)
{ {
spriteId = CreatePokedexMonSprite(dexNum, 0x60, 0x50); spriteId = CreatePokedexMonSprite(species, 0x60, 0x50);
gSprites[spriteId].callback = SpriteCB_PokedexListMonSprite; gSprites[spriteId].callback = SpriteCB_PokedexListMonSprite;
gSprites[spriteId].data[5] = -32; gSprites[spriteId].data[5] = -32;
} }
// Create mid mon sprite // Create mid mon sprite
dexNum = GetPokemonSpriteToDisplay(selectedMon); species = GetPokemonSpriteToDisplay(selectedMon);
if (dexNum != 0xFFFF) if (species != 0xFFFF)
{ {
spriteId = CreatePokedexMonSprite(dexNum, 0x60, 0x50); spriteId = CreatePokedexMonSprite(species, 0x60, 0x50);
gSprites[spriteId].callback = SpriteCB_PokedexListMonSprite; gSprites[spriteId].callback = SpriteCB_PokedexListMonSprite;
gSprites[spriteId].data[5] = 0; gSprites[spriteId].data[5] = 0;
} }
// Create bottom mon sprite // Create bottom mon sprite
dexNum = GetPokemonSpriteToDisplay(selectedMon + 1); species = GetPokemonSpriteToDisplay(selectedMon + 1);
if (dexNum != 0xFFFF) if (species != 0xFFFF)
{ {
spriteId = CreatePokedexMonSprite(dexNum, 0x60, 0x50); spriteId = CreatePokedexMonSprite(species, 0x60, 0x50);
gSprites[spriteId].callback = SpriteCB_PokedexListMonSprite; gSprites[spriteId].callback = SpriteCB_PokedexListMonSprite;
gSprites[spriteId].data[5] = 32; gSprites[spriteId].data[5] = 32;
} }
@ -2546,17 +2556,17 @@ static bool8 UpdateDexListScroll(u8 direction, u8 monMoveIncrement, u8 scrollTim
static void CreateScrollingPokemonSprite(u8 direction, u16 selectedMon) static void CreateScrollingPokemonSprite(u8 direction, u16 selectedMon)
{ {
u16 dexNum; u16 species;
u8 spriteId; u8 spriteId;
sPokedexView->listMovingVOffset = sPokedexView->listVOffset; sPokedexView->listMovingVOffset = sPokedexView->listVOffset;
switch (direction) switch (direction)
{ {
case 1: // up case 1: // up
dexNum = GetPokemonSpriteToDisplay(selectedMon - 1); species = GetPokemonSpriteToDisplay(selectedMon - 1);
if (dexNum != 0xFFFF) if (species != 0xFFFF)
{ {
spriteId = CreatePokedexMonSprite(dexNum, 0x60, 0x50); spriteId = CreatePokedexMonSprite(species, 0x60, 0x50);
gSprites[spriteId].callback = SpriteCB_PokedexListMonSprite; gSprites[spriteId].callback = SpriteCB_PokedexListMonSprite;
gSprites[spriteId].data[5] = -64; gSprites[spriteId].data[5] = -64;
} }
@ -2566,10 +2576,10 @@ static void CreateScrollingPokemonSprite(u8 direction, u16 selectedMon)
sPokedexView->listVOffset = LIST_SCROLL_STEP - 1; sPokedexView->listVOffset = LIST_SCROLL_STEP - 1;
break; break;
case 2: // down case 2: // down
dexNum = GetPokemonSpriteToDisplay(selectedMon + 1); species = GetPokemonSpriteToDisplay(selectedMon + 1);
if (dexNum != 0xFFFF) if (species != 0xFFFF)
{ {
spriteId = CreatePokedexMonSprite(dexNum, 0x60, 0x50); spriteId = CreatePokedexMonSprite(species, 0x60, 0x50);
gSprites[spriteId].callback = SpriteCB_PokedexListMonSprite; gSprites[spriteId].callback = SpriteCB_PokedexListMonSprite;
gSprites[spriteId].data[5] = 64; gSprites[spriteId].data[5] = 64;
} }
@ -2673,7 +2683,7 @@ static bool8 TryDoInfoScreenScroll(void)
{ {
nextPokemon = GetNextPosition(1, nextPokemon, 0, sPokedexView->pokemonListCount - 1); nextPokemon = GetNextPosition(1, nextPokemon, 0, sPokedexView->pokemonListCount - 1);
if (sPokedexView->pokedexList[nextPokemon].seen) if (sPokedexView->pokedexList[nextPokemon].seenSpecies != SPECIES_NONE)
{ {
selectedPokemon = nextPokemon; selectedPokemon = nextPokemon;
break; break;
@ -2696,7 +2706,7 @@ static bool8 TryDoInfoScreenScroll(void)
{ {
nextPokemon = GetNextPosition(0, nextPokemon, 0, sPokedexView->pokemonListCount - 1); nextPokemon = GetNextPosition(0, nextPokemon, 0, sPokedexView->pokemonListCount - 1);
if (sPokedexView->pokedexList[nextPokemon].seen) if (sPokedexView->pokedexList[nextPokemon].seenSpecies != SPECIES_NONE)
{ {
selectedPokemon = nextPokemon; selectedPokemon = nextPokemon;
break; break;
@ -2732,15 +2742,16 @@ static u8 ClearMonSprites(void)
static u16 GetPokemonSpriteToDisplay(u16 species) static u16 GetPokemonSpriteToDisplay(u16 species)
{ {
MgbaPrintf(MGBA_LOG_INFO, "aaaaa:%d", sPokedexView->pokedexList[species].seenSpecies);
if (species >= NATIONAL_DEX_COUNT || sPokedexView->pokedexList[species].dexNum == 0xFFFF) if (species >= NATIONAL_DEX_COUNT || sPokedexView->pokedexList[species].dexNum == 0xFFFF)
return 0xFFFF; return 0xFFFF;
else if (sPokedexView->pokedexList[species].seen) else if (sPokedexView->pokedexList[species].seenSpecies != SPECIES_NONE)
return sPokedexView->pokedexList[species].dexNum; return sPokedexView->pokedexList[species].seenSpecies;
else else
return 0; return SPECIES_NONE;
} }
static u32 CreatePokedexMonSprite(u16 num, s16 x, s16 y) static u32 CreatePokedexMonSprite(u16 species, s16 x, s16 y)
{ {
u8 i; u8 i;
@ -2748,13 +2759,13 @@ static u32 CreatePokedexMonSprite(u16 num, s16 x, s16 y)
{ {
if (sPokedexView->monSpriteIds[i] == 0xFFFF) if (sPokedexView->monSpriteIds[i] == 0xFFFF)
{ {
u8 spriteId = CreateMonSpriteFromNationalDexNumber(num, x, y, i); u8 spriteId = CreateMonSpriteFromNationalDexNumber(species, x, y, i);
gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
gSprites[spriteId].oam.priority = 3; gSprites[spriteId].oam.priority = 3;
gSprites[spriteId].data[0] = 0; gSprites[spriteId].data[0] = 0;
gSprites[spriteId].data[1] = i; gSprites[spriteId].data[1] = i;
gSprites[spriteId].data[2] = NationalPokedexNumToSpecies(num); gSprites[spriteId].data[2] = species;
sPokedexView->monSpriteIds[i] = spriteId; sPokedexView->monSpriteIds[i] = spriteId;
return spriteId; return spriteId;
} }
@ -3272,7 +3283,7 @@ static void Task_LoadInfoScreen(u8 taskId)
case 5: case 5:
if (!gTasks[taskId].tMonSpriteDone) if (!gTasks[taskId].tMonSpriteDone)
{ {
gTasks[taskId].tMonSpriteId = (u16)CreateMonSpriteFromNationalDexNumber(sPokedexListItem->dexNum, MON_PAGE_X, MON_PAGE_Y, 0); gTasks[taskId].tMonSpriteId = (u16)CreateMonSpriteFromNationalDexNumber(sPokedexListItem->seenSpecies, MON_PAGE_X, MON_PAGE_Y, 0);
gSprites[gTasks[taskId].tMonSpriteId].oam.priority = 0; gSprites[gTasks[taskId].tMonSpriteId].oam.priority = 0;
} }
gMain.state++; gMain.state++;
@ -3563,7 +3574,7 @@ static void Task_LoadCryScreen(u8 taskId)
gMain.state++; gMain.state++;
break; break;
case 5: case 5:
gTasks[taskId].tMonSpriteId = CreateMonSpriteFromNationalDexNumber(sPokedexListItem->dexNum, MON_PAGE_X, MON_PAGE_Y, 0); gTasks[taskId].tMonSpriteId = CreateMonSpriteFromNationalDexNumber(sPokedexListItem->seenSpecies, MON_PAGE_X, MON_PAGE_Y, 0);
gSprites[gTasks[taskId].tMonSpriteId].oam.priority = 0; gSprites[gTasks[taskId].tMonSpriteId].oam.priority = 0;
gDexCryScreenState = 0; gDexCryScreenState = 0;
gMain.state++; gMain.state++;
@ -3771,7 +3782,7 @@ static void Task_LoadSizeScreen(u8 taskId)
gMain.state++; gMain.state++;
break; break;
case 6: case 6:
spriteId = CreateMonSpriteFromNationalDexNumber(sPokedexListItem->dexNum, 88, 56, 1); spriteId = CreateMonSpriteFromNationalDexNumber(sPokedexListItem->seenSpecies, 88, 56, 1);
gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
gSprites[spriteId].oam.matrixNum = 2; gSprites[spriteId].oam.matrixNum = 2;
gSprites[spriteId].oam.priority = 0; gSprites[spriteId].oam.priority = 0;
@ -4305,20 +4316,15 @@ u16 GetPokedexFlagFirstSeen(u16 nationalDexNo)
{ {
for (formId = 0; formTable[formId] != FORM_SPECIES_END; formId++) for (formId = 0; formTable[formId] != FORM_SPECIES_END; formId++)
{ {
if (nationalDexNo == 25)
MgbaPrintf(MGBA_LOG_INFO, "species1:%d, found:%d", formTable[formId], GetSetPokedexSeenFlag(formTable[formId], FLAG_GET_SEEN));
if (GetSetPokedexSeenFlag(formTable[formId], FLAG_GET_SEEN)) if (GetSetPokedexSeenFlag(formTable[formId], FLAG_GET_SEEN))
return formTable[formId]; return formTable[formId];
} }
return SPECIES_NONE;
} }
else else if (GetSetPokedexSeenFlag(gBaseFormSpeciesIdTable[nationalDexNo], FLAG_GET_SEEN))
{ {
if (nationalDexNo == 25) return gBaseFormSpeciesIdTable[nationalDexNo];
MgbaPrintf(MGBA_LOG_INFO, "species2:%d, found:%d", gBaseFormSpeciesIdTable[nationalDexNo], GetSetPokedexSeenFlag(gBaseFormSpeciesIdTable[nationalDexNo], FLAG_GET_SEEN));
return GetSetPokedexSeenFlag(gBaseFormSpeciesIdTable[nationalDexNo], FLAG_GET_SEEN);
} }
return SPECIES_NONE;
} }
s8 GetSetPokedexFlag(u16 nationalDexNo, u8 caseID) s8 GetSetPokedexFlag(u16 nationalDexNo, u8 caseID)
@ -4674,10 +4680,9 @@ static u32 GetPokedexMonPersonality(u16 species)
} }
} }
u16 CreateMonSpriteFromNationalDexNumber(u16 nationalNum, s16 x, s16 y, u16 paletteSlot) u16 CreateMonSpriteFromNationalDexNumber(u16 species, s16 x, s16 y, u16 paletteSlot)
{ {
nationalNum = NationalPokedexNumToSpecies(nationalNum); return CreateMonPicSprite(species, SHINY_ODDS, GetPokedexMonPersonality(species), TRUE, x, y, paletteSlot, TAG_NONE);
return CreateMonPicSprite(nationalNum, SHINY_ODDS, GetPokedexMonPersonality(nationalNum), TRUE, x, y, paletteSlot, TAG_NONE);
} }
static u16 CreateSizeScreenTrainerPic(u16 species, s16 x, s16 y, s8 paletteSlot) static u16 CreateSizeScreenTrainerPic(u16 species, s16 x, s16 y, s8 paletteSlot)
@ -4696,7 +4701,7 @@ static int DoPokedexSearch(u8 dexMode, u8 order, u8 abcGroup, u8 bodyColor, u8 t
for (i = 0, resultsCount = 0; i < NATIONAL_DEX_COUNT; i++) for (i = 0, resultsCount = 0; i < NATIONAL_DEX_COUNT; i++)
{ {
if (sPokedexView->pokedexList[i].seen) if (sPokedexView->pokedexList[i].seenSpecies != SPECIES_NONE)
{ {
sPokedexView->pokedexList[resultsCount] = sPokedexView->pokedexList[i]; sPokedexView->pokedexList[resultsCount] = sPokedexView->pokedexList[i];
resultsCount++; resultsCount++;
@ -4791,7 +4796,7 @@ static int DoPokedexSearch(u8 dexMode, u8 order, u8 abcGroup, u8 bodyColor, u8 t
for (i = sPokedexView->pokemonListCount; i < NATIONAL_DEX_COUNT; i++) for (i = sPokedexView->pokemonListCount; i < NATIONAL_DEX_COUNT; i++)
{ {
sPokedexView->pokedexList[i].dexNum = 0xFFFF; sPokedexView->pokedexList[i].dexNum = 0xFFFF;
sPokedexView->pokedexList[i].seen = FALSE; sPokedexView->pokedexList[i].seenSpecies = SPECIES_NONE;
sPokedexView->pokedexList[i].owned = FALSE; sPokedexView->pokedexList[i].owned = FALSE;
} }
} }