Added evolution screen! Improved BE compatibility

This commit is contained in:
TheXaman 2021-02-04 13:48:32 +01:00
parent 04bf06a7c0
commit fbbc604848
14 changed files with 554 additions and 6 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 762 B

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Binary file not shown.

View File

@ -3286,6 +3286,7 @@ extern const u32 gBattleTerrainPalette_StadiumWallace[];
extern const u32 gPokedexInterface_Gfx[];
extern const u16 gPokedexBgHoenn_Pal[];
extern const u32 gPokedexMenuRest_Gfx[];
extern const u32 gPokedexEvo_Gfx[];
extern const u32 gPokedexMenuList_Gfx[];
extern const u32 gPokedexMenu_Gfx[];
extern const u8 gPokedexList_Tilemap[];
@ -3296,6 +3297,7 @@ extern const u16 gPokedexSearchResults_Pal[];
extern const u16 gPokedexBgNational_Pal[];
extern const u8 gPokedexInfoScreen_Tilemap[];
extern const u8 gPokedexStatsScreen_Tilemap[];
extern const u8 gPokedexEvolutionScreen_Tilemap[];
extern const u8 gPokedexCryScreen_Tilemap[];
extern const u8 gPokedexSizeScreen_Tilemap[];
extern const u8 gPokedexScreenSelectBarMain_Tilemap[];

View File

@ -595,6 +595,41 @@ extern const u8 gText_Stats_eggGroup_UNDISCOVERED[];
extern const u8 gText_Dex_SEEN[];
extern const u8 gText_Dex_OWN[];
extern const u8 gText_EVO_Name[];
extern const u8 gText_EVO_FRIENDSHIP[];
extern const u8 gText_EVO_FRIENDSHIP_DAY[];
extern const u8 gText_EVO_FRIENDSHIP_NIGHT[];
extern const u8 gText_EVO_LEVEL[];
extern const u8 gText_EVO_TRADE[];
extern const u8 gText_EVO_TRADE_ITEM[];
extern const u8 gText_EVO_ITEM[];
extern const u8 gText_EVO_LEVEL_ATK_GT_DEF[];
extern const u8 gText_EVO_LEVEL_ATK_EQ_DEF[];
extern const u8 gText_EVO_LEVEL_ATK_LT_DEF[];
extern const u8 gText_EVO_LEVEL_SILCOON[];
extern const u8 gText_EVO_LEVEL_CASCOON[];
extern const u8 gText_EVO_LEVEL_NINJASK[];
extern const u8 gText_EVO_LEVEL_SHEDINJA[];
extern const u8 gText_EVO_BEAUTY[];
extern const u8 gText_EVO_LEVEL_FEMALE[];
extern const u8 gText_EVO_LEVEL_MALE[];
extern const u8 gText_EVO_LEVEL_NIGHT[];
extern const u8 gText_EVO_LEVEL_DAY[];
extern const u8 gText_EVO_LEVEL_DUSK[];
extern const u8 gText_EVO_ITEM_HOLD_DAY[];
extern const u8 gText_EVO_ITEM_HOLD_NIGHT[];
extern const u8 gText_EVO_MOVE[];
extern const u8 gText_EVO_MOVE_TYPE[];
extern const u8 gText_EVO_MAPSEC[];
extern const u8 gText_EVO_ITEM_MALE[];
extern const u8 gText_EVO_ITEM_FEMALE[];
extern const u8 gText_EVO_LEVEL_RAIN[];
extern const u8 gText_EVO_SPECIFIC_MON_IN_PARTY[];
extern const u8 gText_EVO_LEVEL_DARK_TYPE_MON_IN_PARTY[];
extern const u8 gText_EVO_TRADE_SPECIFIC_MON[];
extern const u8 gText_EVO_SPECIFIC_MAP[];
extern const u8 gText_EVO_NONE[];
// birch dex rating text
extern const u8 gBirchDexRatingText_LessThan10[];

View File

@ -1258,6 +1258,7 @@ const u16 gPokedexCaughtScreen_Pal[] = INCBIN_U16("graphics/pokedex/caught_scree
const u16 gPokedexSearchResults_Pal[] = INCBIN_U16("graphics/pokedex/search_results_bg.gbapal");
const u16 gPokedexBgNational_Pal[] = INCBIN_U16("graphics/pokedex/bg_national.gbapal");
const u32 gPokedexMenuRest_Gfx[] = INCBIN_U32("graphics/pokedex/menu_rest.4bpp.lz");
const u32 gPokedexEvo_Gfx[] = INCBIN_U32("graphics/pokedex/evo_tileset.4bpp.lz");
const u32 gPokedexMenuList_Gfx[] = INCBIN_U32("graphics/pokedex/menu_list.4bpp.lz");
const u32 gPokedexMenu_Gfx[] = INCBIN_U32("graphics/pokedex/menu.4bpp.lz");
const u32 gPokedexInterface_Gfx[] = INCBIN_U32("graphics/pokedex/interface.4bpp.lz");
@ -1275,6 +1276,7 @@ const u32 gPokedexScreenSelectBarSubmenu_Tilemap_Clear[] = INCBIN_U32("graphics/
// const u32 gPokedexScreenSelectBarSubmenu_Size_Tilemap[] = INCBIN_U32("graphics/pokedex/screen_select_bar_submenu_size.bin.lz");
const u32 gPokedexInfoScreen_Tilemap[] = INCBIN_U32("graphics/pokedex/info_screen.bin.lz");
const u32 gPokedexStatsScreen_Tilemap[] = INCBIN_U32("graphics/pokedex/stats_screen.bin.lz");
const u32 gPokedexEvolutionScreen_Tilemap[] = INCBIN_U32("graphics/pokedex/evo_tileset.bin.lz");
const u32 gPokedexCryScreen_Tilemap[] = INCBIN_U32("graphics/pokedex/cry_screen.bin.lz");
const u16 gPokedexSearchMenu_Pal[] = INCBIN_U16("graphics/pokedex/search_menu.gbapal");
const u32 gPokedexSearchMenu_Gfx[] = INCBIN_U32("graphics/pokedex/search_menu.4bpp.lz");

View File

@ -60,6 +60,7 @@ enum
{
INFO_SCREEN,
STATS_SCREEN,
EVO_SCREEN,
AREA_SCREEN,
CRY_SCREEN,
SIZE_SCREEN,
@ -348,6 +349,11 @@ static void PrintMonStatsToggle(u8 taskId);
static void PrintInfoScreenTextWhite(const u8* str, u8 left, u8 top);
static void PrintInfoScreenTextSmall(const u8* str, u8 left, u8 top);
static void PrintInfoScreenTextSmallWhite(const u8* str, u8 left, u8 top);
static void Task_LoadEvolutionScreen(u8 taskId);
static void Task_HandleEvolutionScreenInput(u8 taskId);
static void Task_SwitchScreensFromEvolutionScreen(u8 taskId);
static void Task_ExitEvolutionScreen(u8 taskId);
static void PrintEvolutionTargetSpeciesAndMethod(u8 taskId, u16 species);
#ifdef BATTLE_ENGINE
static u8 ShowSplitIcon(u32 split); //Physical/Special Split from BE
@ -3910,7 +3916,7 @@ static void Task_SwitchScreensFromCryScreen(u8 taskId)
gTasks[taskId].func = Task_LoadInfoScreen;
break;
case 2:
gTasks[taskId].func = Task_LoadStatsScreen;
gTasks[taskId].func = Task_LoadEvolutionScreen;
break;
case 3:
gTasks[taskId].func = Task_LoadSizeScreen;
@ -6114,7 +6120,12 @@ static void Task_LoadStatsScreen(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, 17, 31, 4, 0, TRUE); //Create pokemon sprite
#ifndef POKEMON_EXPANSION
gTasks[taskId].data[4] = CreateMonIcon(NationalPokedexNumToSpecies(sPokedexListItem->dexNum), SpriteCB_MonIcon, 17, 31, 4, 0, TRUE); //Create pokemon sprite
#endif
#ifdef POKEMON_EXPANSION
gTasks[taskId].data[6] = CreateMonIcon(NationalPokedexNumToSpecies(sPokedexListItem->dexNum), SpriteCB_MonIcon, 17, 31, 4, 0); //Create pokemon sprite
#endif
gSprites[gTasks[taskId].data[4]].oam.priority = 0;
}
gMain.state++;
@ -6239,14 +6250,13 @@ static void Task_HandleStatsScreenInput(u8 taskId)
PlaySE(SE_FAILURE);
else
{
sPokedexView->selectedScreen = AREA_SCREEN;
sPokedexView->selectedScreen = EVO_SCREEN;
BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 0x10, RGB_BLACK);
sPokedexView->screenSwitchState = 2;
sPokedexView->screenSwitchState = 3;
gTasks[taskId].func = Task_SwitchScreensFromStatsScreen;
PlaySE(SE_PIN);
}
}
}
#define ITEM_TAG 0xFDF3
static void DestroyMoveIcon(u8 taskId)
@ -6848,6 +6858,9 @@ static void Task_SwitchScreensFromStatsScreen(u8 taskId)
case 2:
gTasks[taskId].func = Task_LoadCryScreen;
break;
case 3:
gTasks[taskId].func = Task_LoadEvolutionScreen;
break;
default:
gTasks[taskId].func = Task_LoadInfoScreen;
break;
@ -6882,7 +6895,6 @@ static u8 ShowSplitIcon(u32 split)
StartSpriteAnim(&gSprites[sPokedexView->splitIconSpriteId], split);
return sPokedexView->splitIconSpriteId;
}
static void DestroySplitIcon(void)
{
if (sPokedexView->splitIconSpriteId != 0xFF)
@ -6890,3 +6902,465 @@ static void DestroySplitIcon(void)
sPokedexView->splitIconSpriteId = 0xFF;
}
#endif
//PokedexPlus HGSS_Ui Evolution Page
static void Task_LoadEvolutionScreen(u8 taskId)
{
switch (gMain.state)
{
case 0:
default:
if (!gPaletteFade.active)
{
u16 r2;
sPokedexView->currentPage = EVO_SCREEN;
gPokedexVBlankCB = gMain.vblankCallback;
SetVBlankCallback(NULL);
r2 = 0;
if (gTasks[taskId].data[1] != 0)
r2 += DISPCNT_OBJ_ON;
if (gTasks[taskId].data[2] != 0)
r2 |= DISPCNT_BG1_ON;
ResetOtherVideoRegisters(r2);
gMain.state = 1;
}
break;
case 1:
DecompressAndLoadBgGfxUsingHeap(3, gPokedexEvo_Gfx, 0x2000, 0, 0);
CopyToBgTilemapBuffer(3, gPokedexEvolutionScreen_Tilemap, 0, 0);
FillWindowPixelBuffer(WIN_INFO, PIXEL_FILL(0));
PutWindowTilemap(WIN_INFO);
CopyWindowToVram(WIN_INFO, 3);
CopyBgTilemapBufferToVram(1);
CopyBgTilemapBufferToVram(2);
CopyBgTilemapBufferToVram(3);
gMain.state++;
break;
case 2:
LoadScreenSelectBarMain(0xD);
LoadPokedexBgPalette(sPokedexView->isSearchResults);
gMain.state++;
break;
case 3:
if (gTasks[taskId].data[1] == 0)
{
//Icon
FreeMonIconPalettes(); //Free space for new pallete
LoadMonIconPalette(NationalPokedexNumToSpecies(sPokedexListItem->dexNum)); //Loads pallete for current mon
#ifndef POKEMON_EXPANSION
gTasks[taskId].data[4] = CreateMonIcon(NationalPokedexNumToSpecies(sPokedexListItem->dexNum), SpriteCB_MonIcon, 17, 31, 4, 0, TRUE); //Create pokemon sprite
#endif
#ifdef POKEMON_EXPANSION
gTasks[taskId].data[4] = CreateMonIcon(NationalPokedexNumToSpecies(sPokedexListItem->dexNum), SpriteCB_MonIcon, 17, 31, 4, 0); //Create pokemon sprite
#endif
gSprites[gTasks[taskId].data[4]].oam.priority = 0;
}
gMain.state++;
break;
case 4:
//Print evo info and icons
gTasks[taskId].data[3] = 0;
PrintEvolutionTargetSpeciesAndMethod(taskId, NationalPokedexNumToSpecies(sPokedexListItem->dexNum));
gMain.state++;
break;
case 5:
{
u32 preservedPalettes = 0;
if (gTasks[taskId].data[2] != 0)
preservedPalettes = 0x14; // each bit represents a palette index
if (gTasks[taskId].data[1] != 0)
preservedPalettes |= (1 << (gSprites[gTasks[taskId].tMonSpriteId].oam.paletteNum + 16));
BeginNormalPaletteFade(~preservedPalettes, 0, 16, 0, RGB_BLACK);
SetVBlankCallback(gPokedexVBlankCB);
gMain.state++;
}
break;
case 6:
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
SetGpuReg(REG_OFFSET_BLDY, 0);
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON);
HideBg(0);
ShowBg(1);
ShowBg(2);
ShowBg(3);
gMain.state++;
break;
case 7:
if (!gPaletteFade.active)
gMain.state++;
break;
case 8:
gMain.state++;
break;
case 9:
gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = 0;
gTasks[taskId].data[2] = 1;
gTasks[taskId].func = Task_HandleEvolutionScreenInput;
gMain.state = 0;
break;
}
}
static void Task_HandleEvolutionScreenInput(u8 taskId)
{
//Exit to overview
if (JOY_NEW(B_BUTTON))
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
gTasks[taskId].func = Task_ExitEvolutionScreen;
PlaySE(SE_PC_OFF);
return;
}
//Switch screens
if ((JOY_NEW(DPAD_LEFT) || (JOY_NEW(L_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)))
{
sPokedexView->selectedScreen = STATS_SCREEN;
BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 0x10, RGB_BLACK);
sPokedexView->screenSwitchState = 1;
gTasks[taskId].func = Task_SwitchScreensFromEvolutionScreen;
PlaySE(SE_PIN);
}
if ((JOY_NEW(DPAD_RIGHT) || (JOY_NEW(R_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)))
{
if (!sPokedexListItem->owned)
PlaySE(SE_FAILURE);
else
{
sPokedexView->selectedScreen = CRY_SCREEN;
BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 0x10, RGB_BLACK);
sPokedexView->screenSwitchState = 2;
gTasks[taskId].func = Task_SwitchScreensFromEvolutionScreen;
PlaySE(SE_PIN);
}
}
}
static void handleTargetSpeciesPrint(u8 taskId, u16 targetSpecies, u8 base_x, u8 base_y, u8 base_offset, u8 base_i)
{
StringCopy(gStringVar3, gSpeciesNames[targetSpecies]); //evolution mon name
StringExpandPlaceholders(gStringVar3, gText_EVO_Name); //evolution mon name
PrintInfoScreenTextSmall(gStringVar3, base_x, base_y + base_offset*base_i); //evolution mon name
if(base_i < 6)
{
LoadMonIconPalette(targetSpecies); //Loads pallete for current mon
#ifndef POKEMON_EXPANSION
gTasks[taskId].data[4+base_i] = CreateMonIcon(targetSpecies, SpriteCB_MonIcon, 50 + 32*base_i, 31, 4, 0, TRUE); //Create pokemon sprite
#endif
#ifdef POKEMON_EXPANSION
gTasks[taskId].data[4+base_i] = CreateMonIcon(targetSpecies, SpriteCB_MonIcon, 50 + 32*base_i, 31, 4, 0); //Create pokemon sprite
#endif
gSprites[gTasks[taskId].data[4+base_i]].oam.priority = 0;
}
}
#define EVO_SCREEN_LVL_DIGITS 2
static void PrintEvolutionTargetSpeciesAndMethod(u8 taskId, u16 species)
{
int i;
#ifdef POKEMON_EXPANSION
int j;
u16 currentMap;
#endif
u16 targetSpecies = 0;
u16 item;
bool8 left = TRUE;
u8 base_x = 5;
u8 base_x_offset = 54;
u8 base_y = 52;
u8 base_offset = 9;
u8 base_i = 0;
u8 times = 0;
StringCopy(gStringVar1, gSpeciesNames[species]);
//Calculate number of possible direct evolutions (e.g. Eevee has 5 but torchic has 1)
for (i = 0; i < EVOS_PER_MON; i++)
{
if(gEvolutionTable[species][i].method != 0)
times += 1;
gTasks[taskId].data[3] = times;
}
//If there are no evolutions print text
if (times == 0)
{
StringExpandPlaceholders(gStringVar4, gText_EVO_NONE);
PrintInfoScreenTextSmall(gStringVar4, base_x, base_y + base_offset*base_i);
}
//If there are evolutions find out which and print them 1 by 1
for (i = 0; i < times; i++)
{
base_i = i;
left = !left;
switch (gEvolutionTable[species][i].method)
{
case EVO_FRIENDSHIP:
targetSpecies = gEvolutionTable[species][i].targetSpecies;
ConvertIntToDecimalStringN(gStringVar2, 220, STR_CONV_MODE_LEADING_ZEROS, 3); //friendship value
handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name
StringExpandPlaceholders(gStringVar4, gText_EVO_FRIENDSHIP );
PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i);
break;
case EVO_FRIENDSHIP_DAY:
targetSpecies = gEvolutionTable[species][i].targetSpecies;
handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name
StringExpandPlaceholders(gStringVar4, gText_EVO_FRIENDSHIP_DAY );
PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i);
break;
case EVO_FRIENDSHIP_NIGHT:
targetSpecies = gEvolutionTable[species][i].targetSpecies;
handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name
StringExpandPlaceholders(gStringVar4, gText_EVO_FRIENDSHIP_NIGHT );
PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i);
break;
case EVO_LEVEL:
targetSpecies = gEvolutionTable[species][i].targetSpecies;
ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level
handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name
StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL );
PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i);
break;
case EVO_TRADE:
targetSpecies = gEvolutionTable[species][i].targetSpecies;
handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name
StringExpandPlaceholders(gStringVar4, gText_EVO_TRADE );
PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i);
break;
case EVO_TRADE_ITEM:
item = gEvolutionTable[species][i].param; //item
CopyItemName(item, gStringVar2); //item
targetSpecies = gEvolutionTable[species][i].targetSpecies;
handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name
StringExpandPlaceholders(gStringVar4, gText_EVO_TRADE_ITEM );
PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i);
break;
case EVO_ITEM:
item = gEvolutionTable[species][i].param;
CopyItemName(item, gStringVar2);
targetSpecies = gEvolutionTable[species][i].targetSpecies;
handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name
StringExpandPlaceholders(gStringVar4, gText_EVO_ITEM );
PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i);
break;
case EVO_LEVEL_ATK_GT_DEF:
ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level
targetSpecies = gEvolutionTable[species][i].targetSpecies;
handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name
StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_ATK_GT_DEF );
PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i);
break;
case EVO_LEVEL_ATK_EQ_DEF:
ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level
targetSpecies = gEvolutionTable[species][i].targetSpecies;
handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name
StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_ATK_EQ_DEF );
PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i);
break;
case EVO_LEVEL_ATK_LT_DEF:
ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level
targetSpecies = gEvolutionTable[species][i].targetSpecies;
handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon namee
StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_ATK_LT_DEF );
PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i);
break;
case EVO_LEVEL_SILCOON:
ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level
targetSpecies = gEvolutionTable[species][i].targetSpecies;
handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name
StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_SILCOON );
PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i);
break;
case EVO_LEVEL_CASCOON:
ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level
targetSpecies = gEvolutionTable[species][i].targetSpecies;
handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name
StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_CASCOON );
PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i);
break;
case EVO_LEVEL_NINJASK:
ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level
targetSpecies = gEvolutionTable[species][i].targetSpecies;
handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name
StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_NINJASK );
PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i);
break;
case EVO_BEAUTY:
ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, 3); //beauty
targetSpecies = gEvolutionTable[species][i].targetSpecies;
handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name
StringExpandPlaceholders(gStringVar4, gText_EVO_BEAUTY );
PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i);
break;
#ifdef POKEMON_EXPANSION
case EVO_LEVEL_FEMALE:
ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level
targetSpecies = gEvolutionTable[species][i].targetSpecies;
handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name
StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_FEMALE );
PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i);
break;
case EVO_LEVEL_MALE:
ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level
targetSpecies = gEvolutionTable[species][i].targetSpecies;
handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name
StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_MALE );
PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i);
break;
case EVO_LEVEL_NIGHT:
ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level
targetSpecies = gEvolutionTable[species][i].targetSpecies;
handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name
StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_NIGHT );
PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i);
break;
case EVO_LEVEL_DAY:
ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level
targetSpecies = gEvolutionTable[species][i].targetSpecies;
handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name
StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_DAY );
PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i);
break;
case EVO_LEVEL_DUSK:
ConvertIntToDecimalStringN(gStringVar2, gEvolutionTable[species][i].param, STR_CONV_MODE_LEADING_ZEROS, EVO_SCREEN_LVL_DIGITS); //level
targetSpecies = gEvolutionTable[species][i].targetSpecies;
handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name
StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_DUSK );
PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i);
break;
case EVO_ITEM_HOLD_DAY:
item = gEvolutionTable[species][i].param; //item
CopyItemName(item, gStringVar2); //item
targetSpecies = gEvolutionTable[species][i].targetSpecies;
handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name
StringExpandPlaceholders(gStringVar4, gText_EVO_ITEM_HOLD_DAY );
PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i);
break;
case EVO_ITEM_HOLD_NIGHT:
item = gEvolutionTable[species][i].param; //item
CopyItemName(item, gStringVar2); //item
targetSpecies = gEvolutionTable[species][i].targetSpecies;
handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name
StringExpandPlaceholders(gStringVar4, gText_EVO_ITEM_HOLD_NIGHT );
PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i);
break;
case EVO_MOVE:
StringCopy(gStringVar2, gMoveNames[gEvolutionTable[species][i].param]);
targetSpecies = gEvolutionTable[species][i].targetSpecies;
handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name
StringExpandPlaceholders(gStringVar4, gText_EVO_MOVE );
PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i);
break;
case EVO_MOVE_TYPE:
StringCopy(gStringVar2, gTypeNames[gEvolutionTable[species][i].param]);
targetSpecies = gEvolutionTable[species][i].targetSpecies;
handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name
StringExpandPlaceholders(gStringVar4, gText_EVO_MOVE_TYPE );
PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i);
break;
case EVO_MAPSEC:
StringCopy(gStringVar2, gRegionMapEntries[gEvolutionTable[species][i].param].name);
targetSpecies = gEvolutionTable[species][i].targetSpecies;
handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name
StringExpandPlaceholders(gStringVar4, gText_EVO_MAPSEC );
PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i);
break;
case EVO_ITEM_MALE:
item = gEvolutionTable[species][i].param; //item
CopyItemName(item, gStringVar2); //item
targetSpecies = gEvolutionTable[species][i].targetSpecies;
handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name
StringExpandPlaceholders(gStringVar4, gText_EVO_ITEM_MALE );
PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i);
break;
case EVO_ITEM_FEMALE:
item = gEvolutionTable[species][i].param; //item
CopyItemName(item, gStringVar2); //item
targetSpecies = gEvolutionTable[species][i].targetSpecies;
handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name
StringExpandPlaceholders(gStringVar4, gText_EVO_ITEM_FEMALE );
PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i);
break;
case EVO_LEVEL_RAIN:
//if (j == WEATHER_RAIN || j == WEATHER_RAIN_THUNDERSTORM || j == WEATHER_DOWNPOUR)
targetSpecies = gEvolutionTable[species][i].targetSpecies;
handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name
StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_RAIN );
PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i);
break;
case EVO_SPECIFIC_MON_IN_PARTY:
StringCopy(gStringVar2, gSpeciesNames[gEvolutionTable[species][i].param]); //mon name
targetSpecies = gEvolutionTable[species][i].targetSpecies;
handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name
StringExpandPlaceholders(gStringVar4, gText_EVO_SPECIFIC_MON_IN_PARTY );
PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i);
break;
case EVO_LEVEL_DARK_TYPE_MON_IN_PARTY:
targetSpecies = gEvolutionTable[species][i].targetSpecies;
handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name
StringExpandPlaceholders(gStringVar4, gText_EVO_LEVEL_DARK_TYPE_MON_IN_PARTY );
PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i);
break;
case EVO_TRADE_SPECIFIC_MON:
StringCopy(gStringVar2, gSpeciesNames[gEvolutionTable[species][i].param]); //mon name
targetSpecies = gEvolutionTable[species][i].targetSpecies;
handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name
StringExpandPlaceholders(gStringVar4, gText_EVO_TRADE_SPECIFIC_MON );
PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i);
break;
case EVO_SPECIFIC_MAP:
//currentMap = ((gSaveBlock1Ptr->location.mapGroup) << 8 | gSaveBlock1Ptr->location.mapNum);
GetMapName(gStringVar2, gEvolutionTable[species][i].param, 0);
targetSpecies = gEvolutionTable[species][i].targetSpecies;
handleTargetSpeciesPrint(taskId, targetSpecies, base_x, base_y, base_offset, base_i); //evolution mon name
StringExpandPlaceholders(gStringVar4, gText_EVO_SPECIFIC_MAP );
PrintInfoScreenTextSmall(gStringVar4, base_x+base_x_offset, base_y + base_offset*base_i);
break;
#endif
}//Switch end
}//For loop end
}
static void Task_SwitchScreensFromEvolutionScreen(u8 taskId)
{
if (!gPaletteFade.active)
{
FreeMonIconPalettes(); //Destroy pokemon icon sprite
FreeAndDestroyMonIconSprite(&gSprites[gTasks[taskId].data[4]]); //Destroy pokemon icon sprite
FreeAndDestroyMonPicSprite(gTasks[taskId].tMonSpriteId);
switch (sPokedexView->screenSwitchState)
{
case 1:
gTasks[taskId].func = Task_LoadStatsScreen;
break;
case 2:
gTasks[taskId].func = Task_LoadCryScreen;
break;
default:
gTasks[taskId].func = Task_LoadInfoScreen;
break;
}
}
}
static void Task_ExitEvolutionScreen(u8 taskId)
{
u8 i;
if (!gPaletteFade.active)
{
FreeMonIconPalettes(); //Destroy pokemon icon sprite
FreeAndDestroyMonIconSprite(&gSprites[gTasks[taskId].data[4]]); //Destroy pokemon icon sprite
for (i = 1; i <= gTasks[taskId].data[3]; i++)
{
FreeAndDestroyMonIconSprite(&gSprites[gTasks[taskId].data[4+i]]); //Destroy pokemon icon sprite
}
FreeAndDestroyMonPicSprite(gTasks[taskId].tMonSpriteId);
FreeInfoScreenWindowAndBgBuffers();
DestroyTask(taskId);
}
}

View File

@ -1880,3 +1880,38 @@ const u8 gText_Stats_eggGroup_DRAGON[] = _("DRAGON");
const u8 gText_Stats_eggGroup_UNDISCOVERED[]= _("---");
const u8 gText_Dex_SEEN[] = _("SEEN");
const u8 gText_Dex_OWN[] = _("OWN");
const u8 gText_EVO_Name[] = _("{STR_VAR_3}:");
const u8 gText_EVO_FRIENDSHIP[] = _("Lvl up with friendship >= 220");
const u8 gText_EVO_FRIENDSHIP_DAY[] = _("Lvl up at day with friendship >= 220");
const u8 gText_EVO_FRIENDSHIP_NIGHT[] = _("Lvl up at night with friendship >= 220");
const u8 gText_EVO_LEVEL[] = _("Lvl up to {STR_VAR_2}");
const u8 gText_EVO_TRADE[] = _("via trading");
const u8 gText_EVO_TRADE_ITEM[] = _("via trading while holding {STR_VAR_2}");
const u8 gText_EVO_ITEM[] = _("{STR_VAR_2} is used on Pokémon");
const u8 gText_EVO_LEVEL_ATK_GT_DEF[] = _("Lvl up to {STR_VAR_2} with attack > defense");
const u8 gText_EVO_LEVEL_ATK_EQ_DEF[] = _("Lvl up to {STR_VAR_2} with attack = defense");
const u8 gText_EVO_LEVEL_ATK_LT_DEF[] = _("Lvl up to {STR_VAR_2} with attack < defense");
const u8 gText_EVO_LEVEL_SILCOON[] = _("Lvl up to {STR_VAR_2} with Silcoon persona");
const u8 gText_EVO_LEVEL_CASCOON[] = _("Lvl up to {STR_VAR_2} with Cascoon persona");
const u8 gText_EVO_LEVEL_NINJASK[] = _("Lvl up to {STR_VAR_2} (special value for Ninjask)");
const u8 gText_EVO_LEVEL_SHEDINJA[] = _("Lvl up to {STR_VAR_2} (special value for Shedinja)");
const u8 gText_EVO_BEAUTY[] = _("Lvl up with beauty >= {STR_VAR_2}");
const u8 gText_EVO_LEVEL_FEMALE[] = _("Lvl up to {STR_VAR_2}, is female");
const u8 gText_EVO_LEVEL_MALE[] = _("Lvl up to {STR_VAR_2}, is male");
const u8 gText_EVO_LEVEL_NIGHT[] = _("Lvl up to {STR_VAR_2} at night");
const u8 gText_EVO_LEVEL_DAY[] = _("Lvl up to {STR_VAR_2} at day");
const u8 gText_EVO_LEVEL_DUSK[] = _("Lvl up to {STR_VAR_2} at dusk (5-6 P.M)");
const u8 gText_EVO_ITEM_HOLD_DAY[] = _("Lvl up, holds {STR_VAR_2} at day");
const u8 gText_EVO_ITEM_HOLD_NIGHT[] = _("Lvl up, holds{STR_VAR_2} at night");
const u8 gText_EVO_MOVE[] = _("Lvl up, knows {STR_VAR_2}");
const u8 gText_EVO_MOVE_TYPE[] = _("Lvl up, knows {STR_VAR_2} type move");
const u8 gText_EVO_MAPSEC[] = _("Lvl up on {STR_VAR_2}");
const u8 gText_EVO_ITEM_MALE[] = _("{STR_VAR_2} used on male");
const u8 gText_EVO_ITEM_FEMALE[] = _("{STR_VAR_2} used on female");
const u8 gText_EVO_LEVEL_RAIN[] = _("Lvl up to {STR_VAR_2} while raining");
const u8 gText_EVO_SPECIFIC_MON_IN_PARTY[] = _("Lvl up with a {STR_VAR_2} in party");
const u8 gText_EVO_LEVEL_DARK_TYPE_MON_IN_PARTY[] = _("Lvl up with with dark type in party");
const u8 gText_EVO_TRADE_SPECIFIC_MON[] = _("is traded for a {STR_VAR_2}");
const u8 gText_EVO_SPECIFIC_MAP[] = _("Lvl up on {STR_VAR_2}");
const u8 gText_EVO_NONE[] = _("There is no evolution for {STR_VAR_1}.");