added the ability to check out all data (base stats, moves, abilities etc) for the forms implmeneted in the RHH pokemon_expansion

This commit is contained in:
TheXaman 2022-01-03 21:38:59 +01:00
parent 27e7a48e04
commit b2601f043b
3 changed files with 241 additions and 57 deletions

View File

@ -609,6 +609,7 @@ extern const u8 gText_EVO_Buttons_PE[];
extern const u8 gText_EVO_Buttons_Decapped_PE[];
extern const u8 gText_EVO_Name[];
extern const u8 gText_EVO_PreEvo[];
extern const u8 gText_EVO_PreEvo_PE_Mega[];
extern const u8 gText_EVO_FRIENDSHIP[];
extern const u8 gText_EVO_FRIENDSHIP_DAY[];
extern const u8 gText_EVO_FRIENDSHIP_NIGHT[];
@ -646,6 +647,8 @@ extern const u8 gText_EVO_NONE[];
extern const u8 gText_FORMS_Buttons_PE[];
extern const u8 gText_FORMS_Buttons_Decapped_PE[];
extern const u8 gText_FORMS_Buttons_Submenu_PE[];
extern const u8 gText_FORMS_Buttons_Submenu_Decapped_PE[];
extern const u8 gText_FORMS_NONE[];

View File

@ -228,8 +228,22 @@ struct EvoScreenData
bool8 seen[10];
u8 menuPos;
u8 arrowSpriteId;
#ifdef POKEMON_EXPANSION
bool8 isMega;
#endif
};
#ifdef POKEMON_EXPANSION
struct FromScreenData
{
u8 numForms;
u16 formIds[30];
bool8 inSubmenu;
u8 menuPos;
u8 arrowSpriteId;
};
#endif
struct PokedexView
{
struct PokedexListItem pokedexList[NATIONAL_DEX_COUNT + 1];
@ -259,6 +273,10 @@ struct PokedexView
u8 numPreEvolutions; //HGSS_Ui
struct PokemonStats sPokemonStats; //HGSS_Ui
struct EvoScreenData sEvoScreenData; //HGSS_Ui
#ifdef POKEMON_EXPANSION
struct FromScreenData sFormScreenData; //HGSS_Ui
#endif
u16 formSpecies;
u16 selectedMonSpriteId;
u16 pokeBallRotationStep;
u16 pokeBallRotationBackup;
@ -395,6 +413,7 @@ static void CreateTypeIconSprites(void);
#define HGSS_DECAPPED 0 //0 false, 1 true
#define HGSS_DARK_MODE 0 //0 false, 1 true
#define HGSS_HIDE_UNSEEN_EVOLUTION_NAMES 0 //0 false, 1 true
static u16 NationalPokedexNumToSpeciesHGSS(u16 nationalNum);
static void LoadTilesetTilemapHGSS(u8 page);
static void Task_HandleStatsScreenInput(u8 taskId);
static void Task_LoadStatsScreen(u8 taskId);
@ -2079,7 +2098,10 @@ static void CB2_Pokedex(void)
void Task_OpenPokedexMainPage(u8 taskId)
{
sPokedexView->isSearchResults = FALSE;
#ifdef POKEMON_EXPANSION
sPokedexView->sEvoScreenData.fromEvoPage = FALSE;
sPokedexView->formSpecies = 0;
#endif
if (LoadPokedexListPage(PAGE_MAIN))
gTasks[taskId].func = Task_HandlePokedexInput;
}
@ -2299,6 +2321,10 @@ static void Task_ClosePokedex(u8 taskId)
static void Task_OpenSearchResults(u8 taskId)
{
sPokedexView->isSearchResults = TRUE;
#ifdef POKEMON_EXPANSION
sPokedexView->sEvoScreenData.fromEvoPage = FALSE;
sPokedexView->formSpecies = 0;
#endif
if (LoadPokedexListPage(PAGE_SEARCH_RESULTS))
gTasks[taskId].func = Task_HandleSearchResultsInput;
}
@ -3958,7 +3984,7 @@ static void Task_LoadAreaScreen(u8 taskId)
gMain.state++;
break;
case 2:
ShowPokedexAreaScreen(NationalPokedexNumToSpecies(sPokedexListItem->dexNum), &sPokedexView->screenSwitchState);
ShowPokedexAreaScreen(NationalPokedexNumToSpeciesHGSS(sPokedexListItem->dexNum), &sPokedexView->screenSwitchState);
SetVBlankCallback(gPokedexVBlankCB);
sPokedexView->screenSwitchState = 0;
gMain.state = 0;
@ -4108,7 +4134,7 @@ static void Task_HandleCryScreenInput(u8 taskId)
if (JOY_NEW(A_BUTTON))
{
LoadPlayArrowPalette(TRUE);
CryScreenPlayButton(NationalPokedexNumToSpecies(sPokedexListItem->dexNum));
CryScreenPlayButton(NationalPokedexNumToSpeciesHGSS(sPokedexListItem->dexNum));
return;
}
else if (!gPaletteFade.active)
@ -4485,7 +4511,7 @@ static void Task_DisplayCaughtMonDexPage(u8 taskId)
case 6:
if (!gPaletteFade.active)
{
PlayCry_Normal(NationalPokedexNumToSpecies(dexNum), 0);
PlayCry_Normal(NationalPokedexNumToSpeciesHGSS(dexNum), 0);
gTasks[taskId].tPalTimer = 0;
gTasks[taskId].func = Task_HandleCaughtMonPageInput;
}
@ -4629,7 +4655,7 @@ static void PrintCurrentSpeciesTypeInfo(u8 newEntry, u16 species)
if (!newEntry)
{
species = NationalPokedexNumToSpecies(sPokedexListItem->dexNum);
species = NationalPokedexNumToSpeciesHGSS(sPokedexListItem->dexNum);
dexNum = SpeciesToNationalPokedexNum(species);
}
//type icon(s)
@ -4689,7 +4715,7 @@ static void PrintMonInfo(u32 num, u32 value, u32 owned, u32 newEntry)
value = num;
ConvertIntToDecimalStringN(StringCopy(str, gText_NumberClear01), value, STR_CONV_MODE_LEADING_ZEROS, 3);
PrintInfoScreenTextWhite(str, 123, 17); //HGSS_Ui
species = NationalPokedexNumToSpecies(num);
species = NationalPokedexNumToSpeciesHGSS(num);
if (species)
name = gSpeciesNames[species];
else
@ -5083,7 +5109,7 @@ static u8 PrintCryScreenSpeciesName(u8 windowId, u16 num, u8 left, u8 top)
for (i = 0; i < ARRAY_COUNT(str); i++)
str[i] = EOS;
num = NationalPokedexNumToSpecies(num);
num = NationalPokedexNumToSpeciesHGSS(num);
switch (num)
{
default:
@ -6326,6 +6352,23 @@ static void ClearSearchParameterBoxText(void)
//PokedexPlus HGSS_Ui
static u16 NationalPokedexNumToSpeciesHGSS(u16 nationalNum)
{
u16 species;
if (!nationalNum)
return 0;
#ifndef POKEMON_EXPANSION
return NationalPokedexNumToSpecies(nationalNum);
#else
if (sPokedexView->formSpecies != 0)
return sPokedexView->formSpecies;
else
return NationalPokedexNumToSpecies(nationalNum);
#endif
}
static void LoadTilesetTilemapHGSS(u8 page)
{
switch (page)
@ -6410,7 +6453,7 @@ static void ResetStatsWindows(void)
}
static void SaveMonDataInStruct(void)
{
u16 species = NationalPokedexNumToSpecies(sPokedexListItem->dexNum);
u16 species = NationalPokedexNumToSpeciesHGSS(sPokedexListItem->dexNum);
u8 EVs[6] = {gBaseStats[species].evYield_HP, gBaseStats[species].evYield_Speed, gBaseStats[species].evYield_Attack, gBaseStats[species].evYield_SpAttack, gBaseStats[species].evYield_Defense, gBaseStats[species].evYield_SpDefense};
u8 differentEVs;
u8 i;
@ -6515,12 +6558,12 @@ static void Task_LoadStatsScreen(u8 taskId)
{
//Icon
FreeMonIconPalettes(); //Free space for new pallete
LoadMonIconPalette(NationalPokedexNumToSpecies(sPokedexListItem->dexNum)); //Loads pallete for current mon
LoadMonIconPalette(NationalPokedexNumToSpeciesHGSS(sPokedexListItem->dexNum)); //Loads pallete for current mon
#ifndef POKEMON_EXPANSION
gTasks[taskId].data[4] = CreateMonIcon(NationalPokedexNumToSpecies(sPokedexListItem->dexNum), SpriteCB_MonIcon, 18, 31, 4, 0, TRUE); //Create pokemon sprite
gTasks[taskId].data[4] = CreateMonIcon(NationalPokedexNumToSpeciesHGSS(sPokedexListItem->dexNum), SpriteCB_MonIcon, 18, 31, 4, 0, TRUE); //Create pokemon sprite
#endif
#ifdef POKEMON_EXPANSION
gTasks[taskId].data[6] = CreateMonIcon(NationalPokedexNumToSpecies(sPokedexListItem->dexNum), SpriteCB_MonIcon, 18, 31, 4, 0); //Create pokemon sprite
gTasks[taskId].data[6] = CreateMonIcon(NationalPokedexNumToSpeciesHGSS(sPokedexListItem->dexNum), SpriteCB_MonIcon, 18, 31, 4, 0); //Create pokemon sprite
#endif
gSprites[gTasks[taskId].data[4]].oam.priority = 0;
}
@ -6696,7 +6739,7 @@ static void PrintStatsScreen_DestroyMoveItemIcon(u8 taskId)
}
static bool8 CalculateMoves(void)
{
u16 species = NationalPokedexNumToSpecies(sPokedexListItem->dexNum);
u16 species = NationalPokedexNumToSpeciesHGSS(sPokedexListItem->dexNum);
u16 statsMovesEgg[EGG_MOVES_ARRAY_COUNT] = {0};
u16 statsMovesLevelUp[EGG_LVL_UP_MOVES_ARRAY_COUNT] = {0};
@ -6769,7 +6812,7 @@ static void PrintStatsScreen_Moves_Top(u8 taskId)
u16 move;
u16 item;
u16 species = NationalPokedexNumToSpecies(sPokedexListItem->dexNum);
u16 species = NationalPokedexNumToSpeciesHGSS(sPokedexListItem->dexNum);
//Move
move = sStatsMoves[selected];
@ -6947,7 +6990,7 @@ static void PrintStatsScreen_NameGender(u8 taskId, u32 num, u32 value)
u8 str[16];
u8 str2[32];
u8 strEV[25];
u16 species = NationalPokedexNumToSpecies(sPokedexListItem->dexNum);
u16 species = NationalPokedexNumToSpeciesHGSS(sPokedexListItem->dexNum);
u16 natNum;
u8 evVal;
const u8 *category;
@ -7044,7 +7087,6 @@ static void PrintStatsScreen_Left(u8 taskId)
u8 base_y = 5;
u32 align_x;
u8 total_x = 93;
u16 species = NationalPokedexNumToSpecies(sPokedexListItem->dexNum);
u8 strEV[25];
u8 strBase[14];
u8 EVs[6] = {sPokedexView->sPokemonStats.evYield_HP, sPokedexView->sPokemonStats.evYield_Speed, sPokedexView->sPokemonStats.evYield_Attack, sPokedexView->sPokemonStats.evYield_SpAttack, sPokedexView->sPokemonStats.evYield_Defense, sPokedexView->sPokemonStats.evYield_SpDefense};
@ -7447,7 +7489,7 @@ static void PrintStatsScreen_Left(u8 taskId)
}
static void PrintStatsScreen_Abilities(u8 taskId)
{
u16 species = NationalPokedexNumToSpecies(sPokedexListItem->dexNum);
u16 species = NationalPokedexNumToSpeciesHGSS(sPokedexListItem->dexNum);
u8 abilities_x = 5;
u8 abilities_y = 3;
u16 ability0;
@ -7459,12 +7501,12 @@ static void PrintStatsScreen_Abilities(u8 taskId)
if (gTasks[taskId].data[5] == 0)
{
#endif
ability0 = sPokedexView->sPokemonStats.ability0; //GetAbilityBySpecies(species, 0); //gBaseStats[species].abilities[0];
ability0 = sPokedexView->sPokemonStats.ability0;
PrintStatsScreenTextSmallWhite(WIN_STATS_ABILITIES, gAbilityNames[ability0], abilities_x, abilities_y);
PrintStatsScreenTextSmall(WIN_STATS_ABILITIES, gAbilityDescriptionPointers[ability0], abilities_x, abilities_y + 14);
ability1 = sPokedexView->sPokemonStats.ability1; //GetAbilityBySpecies(species, 1);
if (ability1 != ABILITY_NONE) //(gBaseStats[species].abilities[1] != ABILITY_NONE)
ability1 = sPokedexView->sPokemonStats.ability1;
if (ability1 != ABILITY_NONE && ability1 != ability0)
{
PrintStatsScreenTextSmallWhite(WIN_STATS_ABILITIES, gAbilityNames[ability1], abilities_x, abilities_y + 30);
PrintStatsScreenTextSmall(WIN_STATS_ABILITIES, gAbilityDescriptionPointers[ability1], abilities_x, abilities_y + 44);
@ -7473,7 +7515,7 @@ static void PrintStatsScreen_Abilities(u8 taskId)
}
else //Hidden abilities
{
abilityHidden = sPokedexView->sPokemonStats.abilityHidden; //GetAbilityBySpecies(species, 2);
abilityHidden = sPokedexView->sPokemonStats.abilityHidden;
PrintStatsScreenTextSmallWhite(WIN_STATS_ABILITIES, gAbilityNames[abilityHidden], abilities_x, abilities_y);
PrintStatsScreenTextSmall(WIN_STATS_ABILITIES, gAbilityDescriptionPointers[abilityHidden], abilities_x, abilities_y + 14);
}
@ -7556,6 +7598,8 @@ static void EvoFormsPage_PrintNavigationButtons(void)
u8 x = 6;
u8 y = 0;
FillWindowPixelBuffer(WIN_NAVIGATION_BUTTONS, PIXEL_FILL(0));
#ifdef POKEMON_EXPANSION
if (sPokedexView->selectedScreen == EVO_SCREEN)
{
@ -7566,10 +7610,20 @@ static void EvoFormsPage_PrintNavigationButtons(void)
}
else if (sPokedexView->selectedScreen == FORMS_SCREEN)
{
if (!HGSS_DECAPPED)
AddTextPrinterParameterized3(WIN_NAVIGATION_BUTTONS, 0, x, y, sStatsPageNavigationTextColor, 0, gText_FORMS_Buttons_PE);
if (sPokedexView->sFormScreenData.inSubmenu)
{
if (!HGSS_DECAPPED)
AddTextPrinterParameterized3(WIN_NAVIGATION_BUTTONS, 0, x, y, sStatsPageNavigationTextColor, 0, gText_FORMS_Buttons_Submenu_PE);
else
AddTextPrinterParameterized3(WIN_NAVIGATION_BUTTONS, 0, x, y, sStatsPageNavigationTextColor, 0, gText_FORMS_Buttons_Submenu_Decapped_PE);
}
else
AddTextPrinterParameterized3(WIN_NAVIGATION_BUTTONS, 0, x, y, sStatsPageNavigationTextColor, 0, gText_FORMS_Buttons_Decapped_PE);
{
if (!HGSS_DECAPPED)
AddTextPrinterParameterized3(WIN_NAVIGATION_BUTTONS, 0, x, y, sStatsPageNavigationTextColor, 0, gText_FORMS_Buttons_PE);
else
AddTextPrinterParameterized3(WIN_NAVIGATION_BUTTONS, 0, x, y, sStatsPageNavigationTextColor, 0, gText_FORMS_Buttons_Decapped_PE);
}
}
#else
if (!HGSS_DECAPPED)
@ -7656,12 +7710,12 @@ static void Task_LoadEvolutionScreen(u8 taskId)
ResetEvoScreenDataStruct();
//Icon
FreeMonIconPalettes(); //Free space for new pallete
LoadMonIconPalette(NationalPokedexNumToSpecies(sPokedexListItem->dexNum)); //Loads pallete for current mon
PrintPreEvolutions(taskId, NationalPokedexNumToSpecies(sPokedexListItem->dexNum));
LoadMonIconPalette(NationalPokedexNumToSpeciesHGSS(sPokedexListItem->dexNum)); //Loads pallete for current mon
PrintPreEvolutions(taskId, NationalPokedexNumToSpeciesHGSS(sPokedexListItem->dexNum));
#ifdef POKEMON_EXPANSION
gTasks[taskId].data[4] = CreateMonIcon(NationalPokedexNumToSpecies(sPokedexListItem->dexNum), SpriteCB_MonIcon, 18 + 32*sPokedexView->numPreEvolutions, 31, 4, 0); //Create pokemon sprite
gTasks[taskId].data[4] = CreateMonIcon(NationalPokedexNumToSpeciesHGSS(sPokedexListItem->dexNum), SpriteCB_MonIcon, 18 + 32*sPokedexView->numPreEvolutions, 31, 4, 0); //Create pokemon sprite
#else
gTasks[taskId].data[4] = CreateMonIcon(NationalPokedexNumToSpecies(sPokedexListItem->dexNum), SpriteCB_MonIcon, 18 + 32*sPokedexView->numPreEvolutions, 31, 4, 0, TRUE); //Create pokemon sprite
gTasks[taskId].data[4] = CreateMonIcon(NationalPokedexNumToSpeciesHGSS(sPokedexListItem->dexNum), SpriteCB_MonIcon, 18 + 32*sPokedexView->numPreEvolutions, 31, 4, 0, TRUE); //Create pokemon sprite
#endif
EvoFormsPage_PrintNavigationButtons(); //HGSS_Ui Navigation buttons
gSprites[gTasks[taskId].data[4]].oam.priority = 0;
@ -7671,7 +7725,7 @@ static void Task_LoadEvolutionScreen(u8 taskId)
case 4:
//Print evo info and icons
gTasks[taskId].data[3] = 0;
PrintEvolutionTargetSpeciesAndMethod(taskId, NationalPokedexNumToSpecies(sPokedexListItem->dexNum), 0, sPokedexView->numPreEvolutions);
PrintEvolutionTargetSpeciesAndMethod(taskId, NationalPokedexNumToSpeciesHGSS(sPokedexListItem->dexNum), 0, sPokedexView->numPreEvolutions);
LoadSpritePalette(&sSpritePalette_Arrow);
GetSeenFlagTargetSpecies();
if (sPokedexView->sEvoScreenData.numAllEvolutions != 0 && sPokedexView->sEvoScreenData.numSeen != 0)
@ -7775,6 +7829,13 @@ static void Task_HandleEvolutionScreenInput(u8 taskId)
sPokedexListItem->seen = GetSetPokedexFlag(dexNum, FLAG_GET_SEEN);
sPokedexListItem->owned = GetSetPokedexFlag(dexNum, FLAG_GET_CAUGHT);
#ifdef POKEMON_EXPANSION
if (gFormSpeciesIdTables[targetSpecies] != NULL)
sPokedexView->formSpecies = targetSpecies;
else
sPokedexView->formSpecies = 0;
#endif
sPokedexView->sEvoScreenData.fromEvoPage = TRUE;
PlaySE(SE_PIN);
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK);
@ -7871,12 +7932,25 @@ static void HandlePreEvolutionSpeciesPrint(u8 taskId, u16 preSpecies, u16 specie
bool8 seen = GetSetPokedexFlag(SpeciesToNationalPokedexNum(preSpecies), FLAG_GET_SEEN);
StringCopy(gStringVar1, gSpeciesNames[species]); //evolution mon name
if (seen || !HGSS_HIDE_UNSEEN_EVOLUTION_NAMES)
StringCopy(gStringVar2, gSpeciesNames[preSpecies]); //evolution mon name
else
StringCopy(gStringVar2, gText_ThreeQuestionMarks); //show questionmarks instead of name
StringExpandPlaceholders(gStringVar3, gText_EVO_PreEvo); //evolution mon name
#ifdef POKEMON_EXPANSION
if (sPokedexView->sEvoScreenData.isMega)
StringExpandPlaceholders(gStringVar3, gText_EVO_PreEvo_PE_Mega);
else
{
#endif
if (seen || !HGSS_HIDE_UNSEEN_EVOLUTION_NAMES)
StringCopy(gStringVar2, gSpeciesNames[preSpecies]); //evolution mon name
else
StringCopy(gStringVar2, gText_ThreeQuestionMarks); //show questionmarks instead of name
StringExpandPlaceholders(gStringVar3, gText_EVO_PreEvo); //evolution mon name
#ifdef POKEMON_EXPANSION
}
#endif
PrintInfoScreenTextSmall(gStringVar3, base_x, base_y + base_y_offset*base_i); //evolution mon name
if(base_i < 3)
@ -7898,7 +7972,6 @@ static u8 PrintPreEvolutions(u8 taskId, u16 species)
u16 j;
u8 base_x = 13+8;
u8 base_x_offset = 54;
u8 base_y = 51;
u8 base_y_offset = 9;
u8 base_i = 0;
@ -7908,6 +7981,11 @@ static u8 PrintPreEvolutions(u8 taskId, u16 species)
u16 preEvolutionTwo = 0;
u8 numPreEvolutions = 0;
#ifdef POKEMON_EXPANSION
bool8 isMega = FALSE;
sPokedexView->sEvoScreenData.isMega = FALSE;
#endif
//Calculate previous evolution
for (i = 0; i < NUM_SPECIES; i++)
{
@ -7917,11 +7995,31 @@ static u8 PrintPreEvolutions(u8 taskId, u16 species)
{
preEvolutionOne = i;
numPreEvolutions += 1;
#ifdef POKEMON_EXPANSION
if (gEvolutionTable[i][j].method == EVO_MEGA_EVOLUTION)
{
CopyItemName(gEvolutionTable[i][j].param, gStringVar2); //item
isMega = TRUE;
}
#endif
break;
}
}
}
#ifdef POKEMON_EXPANSION
if (isMega)
{
sPokedexView->numPreEvolutions = numPreEvolutions;
sPokedexView->sEvoScreenData.numAllEvolutions += numPreEvolutions;
sPokedexView->sEvoScreenData.isMega = isMega;
CreateCaughtBallEvolutionScreen(preEvolutionOne, base_x - 9 - 8, base_y + base_y_offset*(numPreEvolutions - 1), 0);
HandlePreEvolutionSpeciesPrint(taskId, preEvolutionOne, species, base_x - 8, base_y, base_y_offset, numPreEvolutions - 1);
return numPreEvolutions;
}
#endif
//Calculate if previous evolution also has a previous evolution
if (numPreEvolutions != 0)
{
@ -7959,7 +8057,7 @@ static u8 PrintPreEvolutions(u8 taskId, u16 species)
}
//vertical line
FillWindowPixelRect(0, PIXEL_FILL(5), 33 + 32*numPreEvolutions, 18, 1, 32); //PIXEL_FILL(15) for black
//FillWindowPixelRect(0, PIXEL_FILL(5), 33 + 32*numPreEvolutions, 18, 1, 32); //PIXEL_FILL(15) for black
sPokedexView->numPreEvolutions = numPreEvolutions;
sPokedexView->sEvoScreenData.numAllEvolutions += numPreEvolutions;
@ -7981,7 +8079,7 @@ static u8 PrintEvolutionTargetSpeciesAndMethod(u8 taskId, u16 species, u8 depth,
bool8 left = TRUE;
u8 base_x = 13+8;
u8 base_x_offset = 54;
u8 base_x_offset = 54+8;
u8 base_y = 51;
u8 base_y_offset = 9;
u8 base_i = 0;
@ -7989,6 +8087,11 @@ static u8 PrintEvolutionTargetSpeciesAndMethod(u8 taskId, u16 species, u8 depth,
u8 depth_x = 16;
bool8 isEevee = FALSE;
#ifdef POKEMON_EXPANSION
if (sPokedexView->sEvoScreenData.isMega)
return 0;
#endif
StringCopy(gStringVar1, gSpeciesNames[species]);
if (species == SPECIES_EEVEE)
@ -8483,17 +8586,19 @@ static void Task_LoadFormsScreen(u8 taskId)
{
//Icon
FreeMonIconPalettes(); //Free space for new pallete
LoadMonIconPalette(NationalPokedexNumToSpecies(sPokedexListItem->dexNum)); //Loads pallete for current mon
gTasks[taskId].data[4] = CreateMonIcon(NationalPokedexNumToSpecies(sPokedexListItem->dexNum), SpriteCB_MonIcon, 18, 31, 4, 0); //Create pokemon sprite
LoadMonIconPalette(NationalPokedexNumToSpeciesHGSS(sPokedexListItem->dexNum)); //Loads pallete for current mon
gTasks[taskId].data[4] = CreateMonIcon(NationalPokedexNumToSpeciesHGSS(sPokedexListItem->dexNum), SpriteCB_MonIcon, 18, 31, 4, 0); //Create pokemon sprite
gSprites[gTasks[taskId].data[4]].oam.priority = 0;
}
EvoFormsPage_PrintNavigationButtons(); //HGSS_Ui Navigation buttons
sPokedexView->sFormScreenData.menuPos = 1;
gMain.state++;
break;
case 4:
//Print form icons
gTasks[taskId].data[3] = 0;
PrintForms(taskId, NationalPokedexNumToSpecies(sPokedexListItem->dexNum));
PrintForms(taskId, NationalPokedexNumToSpeciesHGSS(sPokedexListItem->dexNum));
LoadSpritePalette(&sSpritePalette_Arrow);
gMain.state++;
break;
case 5:
@ -8539,29 +8644,100 @@ static void Task_LoadFormsScreen(u8 taskId)
}
static void Task_HandleFormsScreenInput(u8 taskId)
{
if (JOY_NEW(A_BUTTON))
u8 base_x = 5;
u8 base_y = 34;
u8 offset_x = 34;
u8 offset_y = 34;
if (!sPokedexView->sFormScreenData.inSubmenu)
{
sPokedexView->selectedScreen = EVO_SCREEN;
BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 0x10, RGB_BLACK);
sPokedexView->screenSwitchState = 1;
gTasks[taskId].func = Task_SwitchScreensFromFormsScreen;
PlaySE(SE_PIN);
}
if (JOY_NEW(A_BUTTON))
{
sPokedexView->sFormScreenData.inSubmenu = TRUE;
sPokedexView->sFormScreenData.arrowSpriteId = CreateSprite(&gSpriteTemplate_Arrow, base_x + offset_x, base_y, 0);
gSprites[sPokedexView->sFormScreenData.arrowSpriteId].animNum = 2;
EvoFormsPage_PrintNavigationButtons();
}
//Exit to overview
if (JOY_NEW(B_BUTTON))
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
gTasks[taskId].func = Task_ExitFormsScreen;
PlaySE(SE_PC_OFF);
return;
if (JOY_NEW(START_BUTTON))
{
sPokedexView->selectedScreen = EVO_SCREEN;
BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 0x10, RGB_BLACK);
sPokedexView->screenSwitchState = 1;
gTasks[taskId].func = Task_SwitchScreensFromFormsScreen;
PlaySE(SE_PIN);
}
//Exit to overview
if (JOY_NEW(B_BUTTON))
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
gTasks[taskId].func = Task_ExitFormsScreen;
PlaySE(SE_PC_OFF);
return;
}
}
else //inSubmenu
{
u8 row = 0;
u8 column = 0;
u8 menuPos = sPokedexView->sFormScreenData.menuPos;
//Grid navigation
if (JOY_NEW(DPAD_RIGHT))
menuPos += 1;
else if (JOY_NEW(DPAD_LEFT))
menuPos -= 1;
else if (JOY_NEW(DPAD_DOWN))
menuPos += 7;
else if (JOY_NEW(DPAD_UP))
{
if (menuPos > 7)
menuPos -= 7;
else
menuPos = 1;
}
if (menuPos <= 0)
menuPos = 1;
else if (menuPos >= sPokedexView->sFormScreenData.numForms)
menuPos = sPokedexView->sFormScreenData.numForms;
row = menuPos / 7;
column = menuPos % 7;
gSprites[sPokedexView->sFormScreenData.arrowSpriteId].x = base_x + offset_x * column;
gSprites[sPokedexView->sFormScreenData.arrowSpriteId].y = base_y + offset_y * row;
sPokedexView->sFormScreenData.menuPos = menuPos;
if (JOY_NEW(A_BUTTON))
{
u8 formId = sPokedexView->sFormScreenData.formIds[menuPos];
u16 formSpecies = GetFormSpeciesId(NationalPokedexNumToSpecies(sPokedexListItem->dexNum), formId);
if (formSpecies == GetFormSpeciesId(formSpecies, 0))
sPokedexView->formSpecies = 0;
else
sPokedexView->formSpecies = formSpecies;
sPokedexView->sEvoScreenData.fromEvoPage = TRUE;
sPokedexView->sFormScreenData.inSubmenu = FALSE;
PlaySE(SE_PIN);
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK);
gTasks[taskId].func = Task_LoadInfoScreenWaitForFade;
}
if (JOY_NEW(B_BUTTON))
{
DestroySprite(&gSprites[sPokedexView->sFormScreenData.arrowSpriteId]);
sPokedexView->sFormScreenData.inSubmenu = FALSE;
EvoFormsPage_PrintNavigationButtons();
}
}
}
#define FORM_SPECIES_END (0xffff)
static void PrintForms(u8 taskId, u16 species)
{
int i;
u8 i;
u8 j = 1;
u16 speciesForm;
@ -8588,6 +8764,7 @@ static void PrintForms(u8 taskId, u16 species)
continue;
else
{
sPokedexView->sFormScreenData.formIds[j++] = i;
times += 1;
LoadMonIconPalette(speciesForm); //Loads pallete for current mon
if (times < 7)
@ -8602,6 +8779,7 @@ static void PrintForms(u8 taskId, u16 species)
}
}
gTasks[taskId].data[3] = times;
sPokedexView->sFormScreenData.numForms = times;
//If there are no forms print text
if (times == 0)

View File

@ -1892,10 +1892,11 @@ const u8 gText_Dex_OWN[] = _("OWN");
const u8 gText_EVO_Buttons[] = _("{DPAD_UPDOWN}EVOs {A_BUTTON}CHECK");
const u8 gText_EVO_Buttons_Decapped[] = _("{DPAD_UPDOWN}Evos {A_BUTTON}Check");
const u8 gText_EVO_Buttons_PE[] = _("{DPAD_UPDOWN}EVOs {A_BUTTON}CHECK {START_BUTTON}FORMS");
const u8 gText_EVO_Buttons_PE[] = _("{DPAD_UPDOWN}EVOs {A_BUTTON}CHECK {START_BUTTON}FORMs");
const u8 gText_EVO_Buttons_Decapped_PE[] = _("{DPAD_UPDOWN}Evos {A_BUTTON}Check {START_BUTTON}Froms");
const u8 gText_EVO_Name[] = _("{STR_VAR_3}:");
const u8 gText_EVO_PreEvo[] = _("{STR_VAR_1} evolves from {STR_VAR_2}");
const u8 gText_EVO_PreEvo_PE_Mega[] = _("{STR_VAR_1} mega evolves with {STR_VAR_2}");
const u8 gText_EVO_FRIENDSHIP[] = _("LvlUp, high friendship");
const u8 gText_EVO_FRIENDSHIP_DAY[] = _("LvlUp, high friendship, day");
const u8 gText_EVO_FRIENDSHIP_NIGHT[] = _("Lvlup, high friendship, night");
@ -1931,6 +1932,8 @@ const u8 gText_EVO_SPECIFIC_MAP[] = _("LvlUp on {STR_VAR_2}");
const u8 gText_EVO_UNKNOWN[] = _("Method unknown");
const u8 gText_EVO_NONE[] = _("{STR_VAR_1} has no evolution.");
const u8 gText_FORMS_Buttons_PE[] = _("{A_BUTTON}EVOLUTIONS");
const u8 gText_FORMS_Buttons_Decapped_PE[] = _("{A_BUTTON}Evolutions");
const u8 gText_FORMS_Buttons_PE[] = _("{A_BUTTON}FORM MODE {START_BUTTON}EVOs");
const u8 gText_FORMS_Buttons_Decapped_PE[] = _("{START_BUTTON}Evos");
const u8 gText_FORMS_Buttons_Submenu_PE[] = _("{DPAD_NONE}FORMs {A_BUTTON}CHECK {START_BUTTON}EVOs");
const u8 gText_FORMS_Buttons_Submenu_Decapped_PE[] = _("{START_BUTTON}Evos");
const u8 gText_FORMS_NONE[] = _("{STR_VAR_1} has no alternate forms.");