diff --git a/graphics/pokedex/bg_hoenn.pal b/graphics/pokedex/bg_hoenn.pal index 569c7821a9..5889ede7ac 100644 --- a/graphics/pokedex/bg_hoenn.pal +++ b/graphics/pokedex/bg_hoenn.pal @@ -1,21 +1,21 @@ JASC-PAL 0100 48 -123 131 0 -255 255 255 -222 222 222 -189 189 189 -164 164 164 -98 98 115 -41 57 65 -41 57 106 -0 0 41 -255 255 255 -238 246 57 -255 0 189 -49 213 74 -24 131 32 -189 156 90 +193 33 177 +249 249 249 +225 225 225 +201 201 201 +169 169 169 +129 129 129 +249 153 161 +233 49 49 +193 33 41 +145 17 33 +249 153 161 +193 33 41 +141 251 184 +52 66 162 +194 181 66 0 0 0 123 131 0 255 255 255 diff --git a/graphics/pokedex/bg_national.pal b/graphics/pokedex/bg_national.pal index ea8f2bc64c..10dc02e885 100644 --- a/graphics/pokedex/bg_national.pal +++ b/graphics/pokedex/bg_national.pal @@ -1,21 +1,21 @@ JASC-PAL 0100 96 -123 131 0 -255 255 255 -222 222 222 -189 189 189 -164 164 164 -98 98 115 -41 57 65 -164 164 164 -41 57 65 -255 255 255 -238 246 57 -255 0 189 -123 164 115 -74 115 65 -189 156 90 +193 33 177 +249 249 249 +225 225 225 +201 201 201 +169 169 169 +129 129 129 +249 153 161 +233 49 49 +193 33 41 +145 17 33 +249 153 161 +193 33 41 +141 251 184 +52 66 162 +194 181 66 0 0 0 123 131 0 255 255 255 diff --git a/graphics/pokedex/caught_screen.pal b/graphics/pokedex/caught_screen.pal index 26da98a84c..7b855bfc66 100644 --- a/graphics/pokedex/caught_screen.pal +++ b/graphics/pokedex/caught_screen.pal @@ -1,21 +1,21 @@ JASC-PAL 0100 48 -123 131 0 -255 255 255 -255 238 0 -255 189 0 -255 115 0 -98 98 115 -41 57 65 -41 57 106 -0 0 41 -255 255 255 -238 246 57 -255 0 189 -49 213 74 -24 131 32 -189 156 90 +193 33 177 +249 249 249 +225 225 225 +201 201 201 +169 169 169 +129 129 129 +249 153 161 +233 49 49 +193 33 41 +145 17 33 +249 153 161 +193 33 41 +141 251 184 +52 66 162 +194 181 66 0 0 0 123 131 0 255 255 255 diff --git a/graphics/pokedex/cry_screen.bin b/graphics/pokedex/cry_screen.bin index 6a72a88bc4..411311b531 100644 Binary files a/graphics/pokedex/cry_screen.bin and b/graphics/pokedex/cry_screen.bin differ diff --git a/graphics/pokedex/hgss_pokedex_tileset.pal b/graphics/pokedex/hgss_pokedex_tileset.pal new file mode 100644 index 0000000000..892bb6c104 --- /dev/null +++ b/graphics/pokedex/hgss_pokedex_tileset.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +193 33 177 +249 249 249 +225 225 225 +201 201 201 +169 169 169 +129 129 129 +249 153 161 +233 49 49 +193 33 41 +145 17 33 +156 226 199 +141 251 184 +52 66 162 +194 181 66 +159 216 234 +0 0 0 diff --git a/graphics/pokedex/info_screen.bin b/graphics/pokedex/info_screen.bin index dbfea3ba53..4db95aa345 100644 Binary files a/graphics/pokedex/info_screen.bin and b/graphics/pokedex/info_screen.bin differ diff --git a/graphics/pokedex/interface.png b/graphics/pokedex/interface.png index 5299148134..8b4e944417 100644 Binary files a/graphics/pokedex/interface.png and b/graphics/pokedex/interface.png differ diff --git a/graphics/pokedex/list.bin b/graphics/pokedex/list.bin index cd6a67be40..be59b03594 100644 Binary files a/graphics/pokedex/list.bin and b/graphics/pokedex/list.bin differ diff --git a/graphics/pokedex/list_underlay.bin b/graphics/pokedex/list_underlay.bin index 300fa8ff47..e0d0557100 100644 Binary files a/graphics/pokedex/list_underlay.bin and b/graphics/pokedex/list_underlay.bin differ diff --git a/graphics/pokedex/menu.png b/graphics/pokedex/menu.png index fea195312c..7896d7f09e 100644 Binary files a/graphics/pokedex/menu.png and b/graphics/pokedex/menu.png differ diff --git a/graphics/pokedex/menuOLD.png b/graphics/pokedex/menuOLD.png new file mode 100644 index 0000000000..fea195312c Binary files /dev/null and b/graphics/pokedex/menuOLD.png differ diff --git a/graphics/pokedex/menu_list.png b/graphics/pokedex/menu_list.png new file mode 100644 index 0000000000..12faa82764 Binary files /dev/null and b/graphics/pokedex/menu_list.png differ diff --git a/graphics/pokedex/menu_rest.png b/graphics/pokedex/menu_rest.png new file mode 100644 index 0000000000..724ef52010 Binary files /dev/null and b/graphics/pokedex/menu_rest.png differ diff --git a/graphics/pokedex/screen_select_bar_main.bin b/graphics/pokedex/screen_select_bar_main.bin index 154ed71962..16bff53618 100644 Binary files a/graphics/pokedex/screen_select_bar_main.bin and b/graphics/pokedex/screen_select_bar_main.bin differ diff --git a/graphics/pokedex/screen_select_bar_submenu.bin b/graphics/pokedex/screen_select_bar_submenu.bin index 7183514e6a..178ba4e0a2 100644 Binary files a/graphics/pokedex/screen_select_bar_submenu.bin and b/graphics/pokedex/screen_select_bar_submenu.bin differ diff --git a/graphics/pokedex/screen_select_bar_submenu_clear.bin b/graphics/pokedex/screen_select_bar_submenu_clear.bin new file mode 100644 index 0000000000..85cab7327e Binary files /dev/null and b/graphics/pokedex/screen_select_bar_submenu_clear.bin differ diff --git a/graphics/pokedex/search_menu.png b/graphics/pokedex/search_menu.png index 755c2d35d1..9410eef337 100644 Binary files a/graphics/pokedex/search_menu.png and b/graphics/pokedex/search_menu.png differ diff --git a/graphics/pokedex/search_menu_hoenn.bin b/graphics/pokedex/search_menu_hoenn.bin index 838007715d..ec2f179065 100644 Binary files a/graphics/pokedex/search_menu_hoenn.bin and b/graphics/pokedex/search_menu_hoenn.bin differ diff --git a/graphics/pokedex/search_menu_national.bin b/graphics/pokedex/search_menu_national.bin index 83bf29becf..34a68f509f 100644 Binary files a/graphics/pokedex/search_menu_national.bin and b/graphics/pokedex/search_menu_national.bin differ diff --git a/graphics/pokedex/search_results_bg.pal b/graphics/pokedex/search_results_bg.pal index 41196a2698..a5df732edf 100644 --- a/graphics/pokedex/search_results_bg.pal +++ b/graphics/pokedex/search_results_bg.pal @@ -1,21 +1,21 @@ JASC-PAL 0100 96 -123 131 0 -255 255 255 -222 222 222 -189 189 189 -164 164 164 -98 98 115 -41 57 65 -98 98 115 -49 49 65 -255 255 255 -238 246 57 -255 0 189 -123 148 32 -41 82 0 -189 156 90 +193 33 177 +249 249 249 +225 225 225 +201 201 201 +169 169 169 +129 129 129 +249 153 161 +233 49 49 +193 33 41 +145 17 33 +249 153 161 +193 33 41 +141 251 184 +52 66 162 +194 181 66 0 0 0 123 131 0 255 255 255 diff --git a/graphics/pokedex/size_screen.bin b/graphics/pokedex/size_screen.bin index 283aa518c5..cbcfbf3412 100644 Binary files a/graphics/pokedex/size_screen.bin and b/graphics/pokedex/size_screen.bin differ diff --git a/graphics/pokedex/start_menu_main.bin b/graphics/pokedex/start_menu_main.bin index 585524babe..419fe03be0 100644 Binary files a/graphics/pokedex/start_menu_main.bin and b/graphics/pokedex/start_menu_main.bin differ diff --git a/graphics/pokedex/start_menu_search_results.bin b/graphics/pokedex/start_menu_search_results.bin index ac2e068f21..fa94c3be20 100644 Binary files a/graphics/pokedex/start_menu_search_results.bin and b/graphics/pokedex/start_menu_search_results.bin differ diff --git a/graphics/pokedex/stats_screen.bin b/graphics/pokedex/stats_screen.bin new file mode 100644 index 0000000000..0605b5821c Binary files /dev/null and b/graphics/pokedex/stats_screen.bin differ diff --git a/include/daycare.h b/include/daycare.h index 7d6f2fb193..b95cd834d5 100644 --- a/include/daycare.h +++ b/include/daycare.h @@ -24,4 +24,7 @@ bool8 NameHasGenderSymbol(const u8 *name, u8 genderRatio); void ShowDaycareLevelMenu(void); void ChooseSendDaycareMon(void); +u8 GetEggMovesSpecies(u16 species, u16 *eggMoves); +bool8 SpeciesCanLearnEggMove(u16 species, u16 move); + #endif // GUARD_DAYCARE_H diff --git a/include/graphics.h b/include/graphics.h index 32268d6dbd..6c78508593 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -3285,6 +3285,8 @@ extern const u32 gBattleTerrainPalette_StadiumWallace[]; // pokedex extern const u32 gPokedexInterface_Gfx[]; extern const u16 gPokedexBgHoenn_Pal[]; +extern const u32 gPokedexMenuRest_Gfx[]; +extern const u32 gPokedexMenuList_Gfx[]; extern const u32 gPokedexMenu_Gfx[]; extern const u8 gPokedexList_Tilemap[]; extern const u8 gPokedexListUnderlay_Tilemap[]; @@ -3293,10 +3295,12 @@ extern const u8 gPokedexStartMenuSearchResults_Tilemap[]; extern const u16 gPokedexSearchResults_Pal[]; extern const u16 gPokedexBgNational_Pal[]; extern const u8 gPokedexInfoScreen_Tilemap[]; +extern const u8 gPokedexStatsScreen_Tilemap[]; extern const u8 gPokedexCryScreen_Tilemap[]; extern const u8 gPokedexSizeScreen_Tilemap[]; extern const u8 gPokedexScreenSelectBarMain_Tilemap[]; extern const u8 gPokedexScreenSelectBarSubmenu_Tilemap[]; +extern const u8 gPokedexScreenSelectBarSubmenu_Tilemap_Clear[]; extern const u16 gPokedexCaughtScreen_Pal[]; extern const u32 gPokedexSearchMenu_Gfx[]; extern const u32 gPokedexSearchMenuHoenn_Tilemap[]; diff --git a/include/party_menu.h b/include/party_menu.h index 7f51d08c9f..4457646731 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -90,4 +90,6 @@ void BufferMoveDeleterNicknameAndMove(void); void GetNumMovesSelectedMonHas(void); void MoveDeleterChooseMoveToForget(void); +bool8 CanLearnTutorMove(u16, u8); + #endif // GUARD_PARTY_MENU_H diff --git a/include/pokemon_summary_screen.h b/include/pokemon_summary_screen.h index 6413dcdeca..53f3bf71a2 100755 --- a/include/pokemon_summary_screen.h +++ b/include/pokemon_summary_screen.h @@ -7,6 +7,8 @@ extern u8 gLastViewedMonIndex; extern const u8 *const gMoveDescriptionPointers[]; extern const u8 *const gNatureNamePointers[]; +extern const struct SpriteTemplate sSpriteTemplate_MoveTypes; +extern const struct CompressedSpriteSheet sSpriteSheet_MoveTypes; void ShowPokemonSummaryScreen(u8 mode, void *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void)); void ShowSelectMovePokemonSummaryScreen(struct Pokemon *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void), u16 newMove); diff --git a/include/strings.h b/include/strings.h index 7018f9e0d3..5f224e2459 100644 --- a/include/strings.h +++ b/include/strings.h @@ -532,6 +532,69 @@ extern const u8 gText_SearchingPleaseWait[]; extern const u8 gText_SearchCompleted[]; extern const u8 gText_NoMatchingPkmnWereFound[]; extern const u8 gText_SelectorArrow[]; +//PokedexPlus HGSS_Ui +extern const u8 gText_Stats_EV[]; +extern const u8 gText_Stats_EV_HP[]; +extern const u8 gText_Stats_EV_Attack[]; +extern const u8 gText_Stats_EV_Defense[]; +extern const u8 gText_Stats_EV_Speed[]; +extern const u8 gText_Stats_EV_SpAtk[]; +extern const u8 gText_Stats_EV_SpDef[]; +extern const u8 gText_Stats_HP[]; +extern const u8 gText_Stats_Attack[]; +extern const u8 gText_Stats_Defense[]; +extern const u8 gText_Stats_Speed[]; +extern const u8 gText_Stats_SpAtk[]; +extern const u8 gText_Stats_SpDef[]; +extern const u8 gText_Stats_EVHP[]; +extern const u8 gText_Stats_EVAttack[]; +extern const u8 gText_Stats_EVDefense[]; +extern const u8 gText_Stats_EVSpeed[]; +extern const u8 gText_Stats_EVSpAtk[]; +extern const u8 gText_Stats_EVSpDef[]; +extern const u8 gText_Stats_MoveSelectedMax[]; +extern const u8 gText_Stats_MoveLevel[]; +extern const u8 gText_Stats_Gender_0[]; +extern const u8 gText_Stats_Gender_12_5[]; +extern const u8 gText_Stats_Gender_25[]; +extern const u8 gText_Stats_Gender_50[]; +extern const u8 gText_Stats_Gender_75[]; +extern const u8 gText_Stats_Gender_87_5[]; +extern const u8 gText_Stats_Gender_100[]; +extern const u8 gText_Stats_Catch[]; +extern const u8 gText_Stats_Exp[]; +extern const u8 gText_Stats_EggCycles[]; +extern const u8 gText_Stats_Growthrate[]; +extern const u8 gText_Stats_Friendship[]; +extern const u8 gText_Stats_MEDIUM_FAST[]; +extern const u8 gText_Stats_ERRATIC[]; +extern const u8 gText_Stats_FLUCTUATING[]; +extern const u8 gText_Stats_MEDIUM_SLOW[]; +extern const u8 gText_Stats_FAST[]; +extern const u8 gText_Stats_SLOW[]; +extern const u8 gText_Stats_ContestHeart[]; +extern const u8 gText_PlusSymbol[]; +extern const u8 gText_Stats_Minus[]; +extern const u8 gText_Stats_eggGroup_g1[]; +extern const u8 gText_Stats_eggGroup_g2[]; +extern const u8 gText_Stats_eggGroup_MONSTER[]; +extern const u8 gText_Stats_eggGroup_WATER_1[]; +extern const u8 gText_Stats_eggGroup_BUG[]; +extern const u8 gText_Stats_eggGroup_FLYING[]; +extern const u8 gText_Stats_eggGroup_FIELD[]; +extern const u8 gText_Stats_eggGroup_FAIRY[]; +extern const u8 gText_Stats_eggGroup_GRASS[]; +extern const u8 gText_Stats_eggGroup_HUMAN_LIKE[]; +extern const u8 gText_Stats_eggGroup_WATER_3[]; +extern const u8 gText_Stats_eggGroup_MINERAL[]; +extern const u8 gText_Stats_eggGroup_AMORPHOUS[]; +extern const u8 gText_Stats_eggGroup_WATER_2[]; +extern const u8 gText_Stats_eggGroup_DITTO[]; +extern const u8 gText_Stats_eggGroup_DRAGON[]; +extern const u8 gText_Stats_eggGroup_UNDISCOVERED[]; +extern const u8 gText_Dex_SEEN[]; +extern const u8 gText_Dex_OWN[]; + // birch dex rating text extern const u8 gBirchDexRatingText_LessThan10[]; diff --git a/src/daycare.c b/src/daycare.c index 31014bf7f4..882859eac4 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -625,6 +625,61 @@ static u8 GetEggMoves(struct Pokemon *pokemon, u16 *eggMoves) return numEggMoves; } +u8 GetEggMovesSpecies(u16 species, u16 *eggMoves) +{ + u16 eggMoveIdx; + u16 numEggMoves; + u16 i; + + numEggMoves = 0; + eggMoveIdx = 0; + for (i = 0; i < ARRAY_COUNT(gEggMoves) - 1; i++) + { + if (gEggMoves[i] == species + EGG_MOVES_SPECIES_OFFSET) + { + eggMoveIdx = i + 1; + break; + } + } + + for (i = 0; i < EGG_MOVES_ARRAY_COUNT; i++) + { + if (gEggMoves[eggMoveIdx + i] > EGG_MOVES_SPECIES_OFFSET) + { + // TODO: the curly braces around this if statement are required for a matching build. + break; + } + + eggMoves[i] = gEggMoves[eggMoveIdx + i]; + numEggMoves++; + } + + return numEggMoves; +} +bool8 SpeciesCanLearnEggMove(u16 species, u16 move) //Move search PokedexPlus HGSS_Ui +{ + u16 eggMoveIdx; + u16 i; + eggMoveIdx = 0; + for (i = 0; i < ARRAY_COUNT(gEggMoves) - 1; i++) + { + if (gEggMoves[i] == species + EGG_MOVES_SPECIES_OFFSET) + { + eggMoveIdx = i + 1; + break; + } + } + + for (i = 0; i < EGG_MOVES_ARRAY_COUNT; i++) + { + if (gEggMoves[eggMoveIdx + i] > EGG_MOVES_SPECIES_OFFSET) + return FALSE; + + if (move == gEggMoves[eggMoveIdx + i]) + return TRUE; + } + return FALSE; +} static void BuildEggMoveset(struct Pokemon *egg, struct BoxPokemon *father, struct BoxPokemon *mother) { diff --git a/src/graphics.c b/src/graphics.c index 3973c15076..6ee521d1c5 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1257,6 +1257,8 @@ const u16 gPokedexBgHoenn_Pal[] = INCBIN_U16("graphics/pokedex/bg_hoenn.gbapal") const u16 gPokedexCaughtScreen_Pal[] = INCBIN_U16("graphics/pokedex/caught_screen.gbapal"); 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 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"); const u32 gUnused_PokedexNoBall[] = INCBIN_U32("graphics/pokedex/noball_unused.4bpp.lz"); @@ -1267,7 +1269,12 @@ const u32 gPokedexListUnderlay_Tilemap[] = INCBIN_U32("graphics/pokedex/list_und const u32 gPokedexSizeScreen_Tilemap[] = INCBIN_U32("graphics/pokedex/size_screen.bin.lz"); const u32 gPokedexScreenSelectBarMain_Tilemap[] = INCBIN_U32("graphics/pokedex/screen_select_bar_main.bin.lz"); const u32 gPokedexScreenSelectBarSubmenu_Tilemap[] = INCBIN_U32("graphics/pokedex/screen_select_bar_submenu.bin.lz"); +const u32 gPokedexScreenSelectBarSubmenu_Tilemap_Clear[] = INCBIN_U32("graphics/pokedex/screen_select_bar_submenu_clear.bin.lz"); +// const u32 gPokedexScreenSelectBarSubmenu_Area_Tilemap[] = INCBIN_U32("graphics/pokedex/screen_select_bar_submenu_area.bin.lz"); +// const u32 gPokedexScreenSelectBarSubmenu_Cry_Tilemap[] = INCBIN_U32("graphics/pokedex/screen_select_bar_submenu_cry.bin.lz"); +// 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 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"); diff --git a/src/party_menu.c b/src/party_menu.c index 1d49523756..2eda56b6c7 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -254,7 +254,7 @@ static bool16 IsMonAllowedInPokemonJump(struct Pokemon*); static bool16 IsMonAllowedInDodrioBerryPicking(struct Pokemon*); static void Task_CancelParticipationYesNo(u8); static void Task_HandleCancelParticipationYesNoInput(u8); -static bool8 CanLearnTutorMove(u16, u8); +// static bool8 CanLearnTutorMove(u16, u8); static u16 GetTutorMove(u8); static bool8 ShouldUseChooseMonText(void); static void SetPartyMonFieldSelectionActions(struct Pokemon*, u8); @@ -1989,7 +1989,7 @@ static u16 GetTutorMove(u8 tutor) return gTutorMoves[tutor]; } -static bool8 CanLearnTutorMove(u16 species, u8 tutor) +bool8 CanLearnTutorMove(u16 species, u8 tutor) { if (sTutorLearnsets[species] & (1 << tutor)) return TRUE; diff --git a/src/pokedex.c b/src/pokedex.c index 803b6019c3..fbc925d753 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -1,22 +1,30 @@ #include "global.h" #include "battle_main.h" #include "bg.h" +#include "contest_effect.h" #include "data.h" +#include "daycare.h" #include "decompress.h" #include "event_data.h" #include "gpu_regs.h" #include "graphics.h" #include "international_string_util.h" +#include "item.h" +#include "item_icon.h" #include "main.h" #include "malloc.h" #include "menu.h" #include "m4a.h" #include "overworld.h" #include "palette.h" +#include "party_menu.h" #include "pokedex.h" #include "pokedex_area_screen.h" #include "pokedex_cry_screen.h" +#include "pokemon_icon.h" +#include "pokemon_summary_screen.h" #include "scanline_effect.h" +#include "shop.h" #include "sound.h" #include "sprite.h" #include "string_util.h" @@ -26,6 +34,10 @@ #include "trainer_pokemon_sprites.h" #include "trig.h" #include "window.h" +#include "constants/abilities.h" +#include "constants/items.h" +#include "constants/moves.h" +#include "constants/party_menu.h" #include "constants/rgb.h" #include "constants/songs.h" @@ -43,6 +55,8 @@ enum enum { + INFO_SCREEN, + STATS_SCREEN, AREA_SCREEN, CRY_SCREEN, SIZE_SCREEN, @@ -109,6 +123,12 @@ static EWRAM_DATA struct PokedexView *sPokedexView = NULL; static EWRAM_DATA u16 sLastSelectedPokemon = 0; static EWRAM_DATA u8 sPokeBallRotation = 0; static EWRAM_DATA struct PokedexListItem *sPokedexListItem = NULL; +//Pokedex Plus HGSS_Ui +EWRAM_DATA static u16 sStatsMovesLevelUp[EGG_LVL_UP_MOVES_ARRAY_COUNT] = {0}; +EWRAM_DATA static u16 sStatsMovesEgg[EGG_MOVES_ARRAY_COUNT] = {0}; +EWRAM_DATA static u16 sStatsMovesTMHM[NUM_TECHNICAL_MACHINES + NUM_HIDDEN_MACHINES] = {0}; +EWRAM_DATA static u16 sStatsMovesTMHM_ID[NUM_TECHNICAL_MACHINES + NUM_HIDDEN_MACHINES] = {0}; +EWRAM_DATA static u16 sStatsMovesTutor[TUTOR_MOVE_COUNT] = {0}; // IWRAM common // This is written to, but never read. @@ -170,6 +190,14 @@ struct PokedexView u16 seenCount; u16 ownCount; u16 monSpriteIds[MAX_MONS_ON_SCREEN]; + u8 typeIconSpriteIds[2]; //HGSS_Ui + u16 moveSelected; //HGSS_Ui + u8 moveMax; //HGSS_Ui + // u8 splitIconSpriteId; //HGSS_Ui Physical/Special Split from BE + u8 numEggMoves; + u8 numLevelUpMoves; + u8 numTMHMMoves; + u8 numTutorMoves; u16 selectedMonSpriteId; s16 pokeBallRotationStep; s16 pokeBallRotationBackup; @@ -299,6 +327,78 @@ static void EraseSelectorArrow(u32); static void PrintSelectorArrow(u32); static void PrintSearchParameterTitle(u32, const u8*); static void ClearSearchParameterBoxText(void); +static void SetSpriteInvisibility(u8 spriteArrayId, bool8 invisible); +static void CreateTypeIconSprites(void); +//Stats screen HGSS_Ui +#define SCROLLING_MON_X 146 +static void Task_HandleStatsScreenInput(u8 taskId); +static void PrintMonStats(u8 taskId, u32 num, u32 value, u32 owned, u32 newEntry); +static void Task_LoadStatsScreen(u8 taskId); +static void Task_SwitchScreensFromStatsScreen(u8 taskId); +static void Task_ExitStatsScreen(u8 taskId); +static bool8 CalculateMoves(void); +static void DestroyMoveIcon(u8 taskId); +static void PrintMoveNameAndInfo(u8 taskId, bool8 toogle); +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 u8 ShowSplitIcon(u32 split); //Physical/Special Split from BE +// static void DestroySplitIcon(void); //Physical/Special Split from BE + +//Physical/Special Split from BE +// #define TAG_SPLIT_ICONS 30004 +// static const u16 sSplitIcons_Pal[] = INCBIN_U16("graphics/interface/split_icons.gbapal"); +// static const u32 sSplitIcons_Gfx[] = INCBIN_U32("graphics/interface/split_icons.4bpp.lz"); +// static const struct OamData sOamData_SplitIcons = +// { +// .size = SPRITE_SIZE(16x16), +// .shape = SPRITE_SHAPE(16x16), +// .priority = 0, +// }; +// static const struct CompressedSpriteSheet sSpriteSheet_SplitIcons = +// { +// .data = sSplitIcons_Gfx, +// .size = 16*16*3/2, +// .tag = TAG_SPLIT_ICONS, +// }; +// static const struct SpritePalette sSpritePal_SplitIcons = +// { +// .data = sSplitIcons_Pal, +// .tag = TAG_SPLIT_ICONS +// }; +// static const union AnimCmd sSpriteAnim_SplitIcon0[] = +// { +// ANIMCMD_FRAME(0, 0), +// ANIMCMD_END +// }; +// static const union AnimCmd sSpriteAnim_SplitIcon1[] = +// { +// ANIMCMD_FRAME(4, 0), +// ANIMCMD_END +// }; +// static const union AnimCmd sSpriteAnim_SplitIcon2[] = +// { +// ANIMCMD_FRAME(8, 0), +// ANIMCMD_END +// }; +// static const union AnimCmd *const sSpriteAnimTable_SplitIcons[] = +// { +// sSpriteAnim_SplitIcon0, +// sSpriteAnim_SplitIcon1, +// sSpriteAnim_SplitIcon2, +// }; +// static const struct SpriteTemplate sSpriteTemplate_SplitIcons = +// { +// .tileTag = TAG_SPLIT_ICONS, +// .paletteTag = TAG_SPLIT_ICONS, +// .oam = &sOamData_SplitIcons, +// .anims = sSpriteAnimTable_SplitIcons, +// .images = NULL, +// .affineAnims = gDummySpriteAffineAnimTable, +// .callback = SpriteCallbackDummy +// }; + // const rom data #include "data/pokemon/pokedex_orders.h" @@ -907,8 +1007,8 @@ static const struct WindowTemplate sInfoScreen_WindowTemplates[] = [WIN_FOOTPRINT] = { .bg = 2, - .tilemapLeft = 25, - .tilemapTop = 8, + .tilemapLeft = 15, //HGSSS_Ui + .tilemapTop = 7, //HGSSS_Ui .width = 2, .height = 2, .paletteNum = 15, @@ -974,8 +1074,8 @@ static const struct WindowTemplate sNewEntryInfoScreen_WindowTemplates[] = [WIN_FOOTPRINT] = { .bg = 2, - .tilemapLeft = 25, - .tilemapTop = 8, + .tilemapLeft = 15, //HGSSS_Ui + .tilemapTop = 7, //HGSSS_Ui .width = 2, .height = 2, .paletteNum = 15, @@ -2063,7 +2163,7 @@ static bool8 LoadPokedexListPage(u8 page) SetBgTilemapBuffer(2, AllocZeroed(BG_SCREEN_SIZE)); SetBgTilemapBuffer(1, AllocZeroed(BG_SCREEN_SIZE)); SetBgTilemapBuffer(0, AllocZeroed(BG_SCREEN_SIZE)); - DecompressAndLoadBgGfxUsingHeap(3, gPokedexMenu_Gfx, 0x2000, 0, 0); + DecompressAndLoadBgGfxUsingHeap(3, gPokedexMenuList_Gfx, 0x2000, 0, 0); CopyToBgTilemapBuffer(1, gPokedexList_Tilemap, 0, 0); CopyToBgTilemapBuffer(3, gPokedexListUnderlay_Tilemap, 0, 0); if (page == PAGE_MAIN) @@ -2326,6 +2426,7 @@ static void PrintMonDexNumAndName(u8 windowId, u8 fontId, const u8* str, u8 left } // u16 ignored is passed but never used +#define MON_LIST_X 2 static void CreateMonListEntry(u8 position, u16 b, u16 ignored) { s16 entryNum; @@ -2341,22 +2442,22 @@ static void CreateMonListEntry(u8 position, u16 b, u16 ignored) { if (entryNum < 0 || entryNum >= NATIONAL_DEX_COUNT || sPokedexView->pokedexList[entryNum].dexNum == 0xFFFF) { - ClearMonListEntry(17, i * 2, ignored); + ClearMonListEntry(MON_LIST_X, i * 2, ignored); } else { - ClearMonListEntry(17, i * 2, ignored); + ClearMonListEntry(MON_LIST_X, i * 2, ignored); if (sPokedexView->pokedexList[entryNum].seen) { - CreateMonDexNum(entryNum, 0x12, i * 2, ignored); - CreateCaughtBall(sPokedexView->pokedexList[entryNum].owned, 0x11, i * 2, ignored); - CreateMonName(sPokedexView->pokedexList[entryNum].dexNum, 0x16, i * 2); + CreateMonDexNum(entryNum, MON_LIST_X+1, i * 2, ignored); + CreateCaughtBall(sPokedexView->pokedexList[entryNum].owned, MON_LIST_X, i * 2, ignored); + CreateMonName(sPokedexView->pokedexList[entryNum].dexNum, MON_LIST_X+5, i * 2); } else { - CreateMonDexNum(entryNum, 0x12, i * 2, ignored); - CreateCaughtBall(FALSE, 0x11, i * 2, ignored); - CreateMonName(0, 0x16, i * 2); + CreateMonDexNum(entryNum, MON_LIST_X+1, i * 2, ignored); + CreateCaughtBall(FALSE, MON_LIST_X, i * 2, ignored); + CreateMonName(0, MON_LIST_X+5, i * 2); } } entryNum++; @@ -2366,22 +2467,22 @@ static void CreateMonListEntry(u8 position, u16 b, u16 ignored) entryNum = b - 5; if (entryNum < 0 || entryNum >= NATIONAL_DEX_COUNT || sPokedexView->pokedexList[entryNum].dexNum == 0xFFFF) { - ClearMonListEntry(17, sPokedexView->listVOffset * 2, ignored); + ClearMonListEntry(MON_LIST_X, sPokedexView->listVOffset * 2, ignored); } else { - ClearMonListEntry(17, sPokedexView->listVOffset * 2, ignored); + ClearMonListEntry(MON_LIST_X, sPokedexView->listVOffset * 2, ignored); if (sPokedexView->pokedexList[entryNum].seen) { - CreateMonDexNum(entryNum, 18, sPokedexView->listVOffset * 2, ignored); - CreateCaughtBall(sPokedexView->pokedexList[entryNum].owned, 0x11, sPokedexView->listVOffset * 2, ignored); - CreateMonName(sPokedexView->pokedexList[entryNum].dexNum, 0x16, sPokedexView->listVOffset * 2); + CreateMonDexNum(entryNum, MON_LIST_X+1, sPokedexView->listVOffset * 2, ignored); + CreateCaughtBall(sPokedexView->pokedexList[entryNum].owned, MON_LIST_X, sPokedexView->listVOffset * 2, ignored); + CreateMonName(sPokedexView->pokedexList[entryNum].dexNum, MON_LIST_X+5, sPokedexView->listVOffset * 2); } else { - CreateMonDexNum(entryNum, 18, sPokedexView->listVOffset * 2, ignored); - CreateCaughtBall(FALSE, 17, sPokedexView->listVOffset * 2, ignored); - CreateMonName(0, 0x16, sPokedexView->listVOffset * 2); + CreateMonDexNum(entryNum, MON_LIST_X+1, sPokedexView->listVOffset * 2, ignored); + CreateCaughtBall(FALSE, MON_LIST_X, sPokedexView->listVOffset * 2, ignored); + CreateMonName(0, MON_LIST_X+5, sPokedexView->listVOffset * 2); } } break; @@ -2391,21 +2492,21 @@ static void CreateMonListEntry(u8 position, u16 b, u16 ignored) if (vOffset >= LIST_SCROLL_STEP) vOffset -= LIST_SCROLL_STEP; if (entryNum < 0 || entryNum >= NATIONAL_DEX_COUNT || sPokedexView->pokedexList[entryNum].dexNum == 0xFFFF) - ClearMonListEntry(17, vOffset * 2, ignored); + ClearMonListEntry(MON_LIST_X, vOffset * 2, ignored); else { - ClearMonListEntry(17, vOffset * 2, ignored); + ClearMonListEntry(MON_LIST_X, vOffset * 2, ignored); if (sPokedexView->pokedexList[entryNum].seen) { - CreateMonDexNum(entryNum, 18, vOffset * 2, ignored); - CreateCaughtBall(sPokedexView->pokedexList[entryNum].owned, 0x11, vOffset * 2, ignored); - CreateMonName(sPokedexView->pokedexList[entryNum].dexNum, 0x16, vOffset * 2); + CreateMonDexNum(entryNum, MON_LIST_X+1, vOffset * 2, ignored); + CreateCaughtBall(sPokedexView->pokedexList[entryNum].owned, MON_LIST_X, vOffset * 2, ignored); + CreateMonName(sPokedexView->pokedexList[entryNum].dexNum, MON_LIST_X+5, vOffset * 2); } else { - CreateMonDexNum(entryNum, 18, vOffset * 2, ignored); - CreateCaughtBall(FALSE, 0x11, vOffset * 2, ignored); - CreateMonName(0, 0x16, vOffset * 2); + CreateMonDexNum(entryNum, MON_LIST_X+1, vOffset * 2, ignored); + CreateCaughtBall(FALSE, MON_LIST_X, vOffset * 2, ignored); + CreateMonName(0, MON_LIST_X+5, vOffset * 2); } } break; @@ -2471,7 +2572,7 @@ static void CreateMonSpritesAtPos(u16 selectedMon, u16 ignored) dexNum = GetPokemonSpriteToDisplay(selectedMon - 1); if (dexNum != 0xFFFF) { - spriteId = CreatePokedexMonSprite(dexNum, 0x60, 0x50); + spriteId = CreatePokedexMonSprite(dexNum, SCROLLING_MON_X, 0x50); gSprites[spriteId].callback = SpriteCB_PokedexListMonSprite; gSprites[spriteId].data[5] = -32; } @@ -2480,7 +2581,7 @@ static void CreateMonSpritesAtPos(u16 selectedMon, u16 ignored) dexNum = GetPokemonSpriteToDisplay(selectedMon); if (dexNum != 0xFFFF) { - spriteId = CreatePokedexMonSprite(dexNum, 0x60, 0x50); + spriteId = CreatePokedexMonSprite(dexNum, SCROLLING_MON_X, 0x50); gSprites[spriteId].callback = SpriteCB_PokedexListMonSprite; gSprites[spriteId].data[5] = 0; } @@ -2489,7 +2590,7 @@ static void CreateMonSpritesAtPos(u16 selectedMon, u16 ignored) dexNum = GetPokemonSpriteToDisplay(selectedMon + 1); if (dexNum != 0xFFFF) { - spriteId = CreatePokedexMonSprite(dexNum, 0x60, 0x50); + spriteId = CreatePokedexMonSprite(dexNum, SCROLLING_MON_X, 0x50); gSprites[spriteId].callback = SpriteCB_PokedexListMonSprite; gSprites[spriteId].data[5] = 32; } @@ -2555,7 +2656,7 @@ static void CreateScrollingPokemonSprite(u8 direction, u16 selectedMon) dexNum = GetPokemonSpriteToDisplay(selectedMon - 1); if (dexNum != 0xFFFF) { - spriteId = CreatePokedexMonSprite(dexNum, 0x60, 0x50); + spriteId = CreatePokedexMonSprite(dexNum, SCROLLING_MON_X, 0x50); gSprites[spriteId].callback = SpriteCB_PokedexListMonSprite; gSprites[spriteId].data[5] = -64; } @@ -2568,7 +2669,7 @@ static void CreateScrollingPokemonSprite(u8 direction, u16 selectedMon) dexNum = GetPokemonSpriteToDisplay(selectedMon + 1); if (dexNum != 0xFFFF) { - spriteId = CreatePokedexMonSprite(dexNum, 0x60, 0x50); + spriteId = CreatePokedexMonSprite(dexNum, SCROLLING_MON_X, 0x50); gSprites[spriteId].callback = SpriteCB_PokedexListMonSprite; gSprites[spriteId].data[5] = 64; } @@ -2763,43 +2864,47 @@ static u32 CreatePokedexMonSprite(u16 num, s16 x, s16 y) #define sIsDownArrow data[1] +#define LIST_RIGHT_SIDE_TEXT_X 204 +#define LIST_RIGHT_SIDE_TEXT_X_OFFSET 12 +#define LIST_RIGHT_SIDE_TEXT_Y_OFFSET 13 static void CreateInterfaceSprites(u8 page) { u8 spriteId; u16 digitNum; + u8 color[3]; // Scroll arrows - spriteId = CreateSprite(&sScrollArrowSpriteTemplate, 184, 4, 0); + spriteId = CreateSprite(&sScrollArrowSpriteTemplate, 10, 4, 0); gSprites[spriteId].sIsDownArrow = FALSE; - spriteId = CreateSprite(&sScrollArrowSpriteTemplate, 184, 156, 0); + spriteId = CreateSprite(&sScrollArrowSpriteTemplate, 10, 156, 0); gSprites[spriteId].sIsDownArrow = TRUE; gSprites[spriteId].vFlip = TRUE; - CreateSprite(&sScrollBarSpriteTemplate, 230, 20, 0); + CreateSprite(&sScrollBarSpriteTemplate, 8, 20, 0); // Start button - CreateSprite(&sInterfaceTextSpriteTemplate, 16, 120, 0); + // CreateSprite(&sInterfaceTextSpriteTemplate, 16, 120, 0); // Menu text - spriteId = CreateSprite(&sInterfaceTextSpriteTemplate, 48, 120, 0); - StartSpriteAnim(&gSprites[spriteId], 3); + // spriteId = CreateSprite(&sInterfaceTextSpriteTemplate, 48, 120, 0); + // StartSpriteAnim(&gSprites[spriteId], 3); // Select button - spriteId = CreateSprite(&sInterfaceTextSpriteTemplate, 16, 144, 0); - StartSpriteAnim(&gSprites[spriteId], 2); - gSprites[spriteId].data[2] = 0x80; + // spriteId = CreateSprite(&sInterfaceTextSpriteTemplate, 16, 144, 0); + // StartSpriteAnim(&gSprites[spriteId], 2); + // gSprites[spriteId].data[2] = 0x80; // Search text - spriteId = CreateSprite(&sInterfaceTextSpriteTemplate, 48, 144, 0); - StartSpriteAnim(&gSprites[spriteId], 1); + // spriteId = CreateSprite(&sInterfaceTextSpriteTemplate, 48, 144, 0); + // StartSpriteAnim(&gSprites[spriteId], 1); - spriteId = CreateSprite(&sRotatingPokeBallSpriteTemplate, 0, 80, 2); - gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; - gSprites[spriteId].oam.matrixNum = 30; - gSprites[spriteId].data[0] = 30; - gSprites[spriteId].data[1] = 0; + // spriteId = CreateSprite(&sRotatingPokeBallSpriteTemplate, 0, 80, 2); + // gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; + // gSprites[spriteId].oam.matrixNum = 30; + // gSprites[spriteId].data[0] = 30; + // gSprites[spriteId].data[1] = 0; - spriteId = CreateSprite(&sRotatingPokeBallSpriteTemplate, 0, 80, 2); - gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; - gSprites[spriteId].oam.matrixNum = 31; - gSprites[spriteId].data[0] = 31; - gSprites[spriteId].data[1] = 128; + // spriteId = CreateSprite(&sRotatingPokeBallSpriteTemplate, 0, 80, 2); + // gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; + // gSprites[spriteId].oam.matrixNum = 31; + // gSprites[spriteId].data[0] = 31; + // gSprites[spriteId].data[1] = 128; if (page == PAGE_MAIN) { @@ -2807,15 +2912,70 @@ static void CreateInterfaceSprites(u8 page) if (!IsNationalPokedexEnabled()) { - // Seen text - CreateSprite(&sSeenOwnTextSpriteTemplate, 32, 40, 1); - // Own text - spriteId = CreateSprite(&sSeenOwnTextSpriteTemplate, 32, 72, 1); + + // // Seen text + // CreateSprite(&sSeenOwnTextSpriteTemplate, 32, 40, 1); + // // Own text + // spriteId = CreateSprite(&sSeenOwnTextSpriteTemplate, 32, 72, 1); + // StartSpriteAnim(&gSprites[spriteId], 1); + + // // Seen value - 100s + // drawNextDigit = FALSE; + // spriteId = CreateSprite(&sHoennDexSeenOwnNumberSpriteTemplate, 24, 48, 1); + // digitNum = sPokedexView->seenCount / 100; + // StartSpriteAnim(&gSprites[spriteId], digitNum); + // if (digitNum != 0) + // drawNextDigit = TRUE; + // else + // gSprites[spriteId].invisible = TRUE; + + // // Seen value - 10s + // spriteId = CreateSprite(&sHoennDexSeenOwnNumberSpriteTemplate, 32, 48, 1); + // digitNum = (sPokedexView->seenCount % 100) / 10; + // if (digitNum != 0 || drawNextDigit) + // StartSpriteAnim(&gSprites[spriteId], digitNum); + // else + // gSprites[spriteId].invisible = TRUE; + + // // Seen value - 1s + // spriteId = CreateSprite(&sHoennDexSeenOwnNumberSpriteTemplate, 40, 48, 1); + // digitNum = (sPokedexView->seenCount % 100) % 10; + // StartSpriteAnim(&gSprites[spriteId], digitNum); + + // // Owned value - 100s + // drawNextDigit = FALSE; + // spriteId = CreateSprite(&sHoennDexSeenOwnNumberSpriteTemplate, 24, 80, 1); + // digitNum = sPokedexView->ownCount / 100; + // StartSpriteAnim(&gSprites[spriteId], digitNum); + // if (digitNum != 0) + // drawNextDigit = TRUE; + // else + // gSprites[spriteId].invisible = TRUE; + + // // Owned value - 10s + // spriteId = CreateSprite(&sHoennDexSeenOwnNumberSpriteTemplate, 32, 80, 1); + // digitNum = (sPokedexView->ownCount % 100) / 10; + // if (digitNum != 0 || drawNextDigit) + // StartSpriteAnim(&gSprites[spriteId], digitNum); + // else + // gSprites[spriteId].invisible = TRUE; + + // // Owned value - 1s + // spriteId = CreateSprite(&sHoennDexSeenOwnNumberSpriteTemplate, 40, 80, 1); + // digitNum = (sPokedexView->ownCount % 100) % 10; + // StartSpriteAnim(&gSprites[spriteId], digitNum); + + // Hoenn text + CreateSprite(&sHoennNationalTextSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X, 40 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET - 6, 1); + // Hoenn seen + CreateSprite(&sSeenOwnTextSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X, 45 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET + 6, 1); + // Hoenn own + spriteId = CreateSprite(&sSeenOwnTextSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X, 55 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET + 7, 1); StartSpriteAnim(&gSprites[spriteId], 1); - // Seen value - 100s + // Hoenn seen value - 100s drawNextDigit = FALSE; - spriteId = CreateSprite(&sHoennDexSeenOwnNumberSpriteTemplate, 24, 48, 1); + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET, 45 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); digitNum = sPokedexView->seenCount / 100; StartSpriteAnim(&gSprites[spriteId], digitNum); if (digitNum != 0) @@ -2823,22 +2983,23 @@ static void CreateInterfaceSprites(u8 page) else gSprites[spriteId].invisible = TRUE; - // Seen value - 10s - spriteId = CreateSprite(&sHoennDexSeenOwnNumberSpriteTemplate, 32, 48, 1); + // Hoenn seen value - 10s + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET + 8, 45 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); digitNum = (sPokedexView->seenCount % 100) / 10; if (digitNum != 0 || drawNextDigit) StartSpriteAnim(&gSprites[spriteId], digitNum); else gSprites[spriteId].invisible = TRUE; - // Seen value - 1s - spriteId = CreateSprite(&sHoennDexSeenOwnNumberSpriteTemplate, 40, 48, 1); + // Hoenn seen value - 1s + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET + 16, 45 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); digitNum = (sPokedexView->seenCount % 100) % 10; StartSpriteAnim(&gSprites[spriteId], digitNum); - // Owned value - 100s + + // Hoenn owned value - 100s drawNextDigit = FALSE; - spriteId = CreateSprite(&sHoennDexSeenOwnNumberSpriteTemplate, 24, 80, 1); + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET, 55 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); digitNum = sPokedexView->ownCount / 100; StartSpriteAnim(&gSprites[spriteId], digitNum); if (digitNum != 0) @@ -2846,16 +3007,16 @@ static void CreateInterfaceSprites(u8 page) else gSprites[spriteId].invisible = TRUE; - // Owned value - 10s - spriteId = CreateSprite(&sHoennDexSeenOwnNumberSpriteTemplate, 32, 80, 1); + // Hoenn owned value - 10s + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET + 8, 55 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); digitNum = (sPokedexView->ownCount % 100) / 10; if (digitNum != 0 || drawNextDigit) StartSpriteAnim(&gSprites[spriteId], digitNum); else gSprites[spriteId].invisible = TRUE; - // Owned value - 1s - spriteId = CreateSprite(&sHoennDexSeenOwnNumberSpriteTemplate, 40, 80, 1); + // Hoenn owned value - 1s + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET + 16, 55 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); digitNum = (sPokedexView->ownCount % 100) % 10; StartSpriteAnim(&gSprites[spriteId], digitNum); } @@ -2863,30 +3024,28 @@ static void CreateInterfaceSprites(u8 page) { u16 seenOwnedCount; - // Seen text - CreateSprite(&sSeenOwnTextSpriteTemplate, 32, 40, 1); - // Own text - spriteId = CreateSprite(&sSeenOwnTextSpriteTemplate, 32, 76, 1); + + // Hoenn text + CreateSprite(&sHoennNationalTextSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X, 40 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET - 6, 1); + // Hoenn seen + CreateSprite(&sSeenOwnTextSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X, 45 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET + 6, 1); + // Hoenn own + spriteId = CreateSprite(&sSeenOwnTextSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X, 55 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET + 7, 1); StartSpriteAnim(&gSprites[spriteId], 1); - // Hoenn text (seen) - CreateSprite(&sHoennNationalTextSpriteTemplate, 17, 45, 1); - - // National text (seen) - spriteId = CreateSprite(&sHoennNationalTextSpriteTemplate, 17, 55, 1); + // National text + spriteId = CreateSprite(&sHoennNationalTextSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X, 73 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET - 6, 1); StartSpriteAnim(&gSprites[spriteId], 1); - - // Hoenn text (own) - CreateSprite(&sHoennNationalTextSpriteTemplate, 17, 81, 1); - - // National text (own) - spriteId = CreateSprite(&sHoennNationalTextSpriteTemplate, 17, 91, 1); + // National seen + CreateSprite(&sSeenOwnTextSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X, 78 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET + 6, 1); + // National own + spriteId = CreateSprite(&sSeenOwnTextSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X, 88 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET + 6, 1); StartSpriteAnim(&gSprites[spriteId], 1); // Hoenn seen value - 100s seenOwnedCount = GetHoennPokedexCount(FLAG_GET_SEEN); drawNextDigit = FALSE; - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, 40, 45, 1); + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET, 45 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); digitNum = seenOwnedCount / 100; StartSpriteAnim(&gSprites[spriteId], digitNum); if (digitNum != 0) @@ -2895,7 +3054,7 @@ static void CreateInterfaceSprites(u8 page) gSprites[spriteId].invisible = TRUE; // Hoenn seen value - 10s - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, 48, 45, 1); + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET + 8, 45 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); digitNum = (seenOwnedCount % 100) / 10; if (digitNum != 0 || drawNextDigit) StartSpriteAnim(&gSprites[spriteId], digitNum); @@ -2903,38 +3062,14 @@ static void CreateInterfaceSprites(u8 page) gSprites[spriteId].invisible = TRUE; // Hoenn seen value - 1s - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, 56, 45, 1); + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET + 16, 45 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); digitNum = (seenOwnedCount % 100) % 10; StartSpriteAnim(&gSprites[spriteId], digitNum); - // National seen value - 100s - drawNextDigit = FALSE; - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, 40, 55, 1); - digitNum = sPokedexView->seenCount / 100; - StartSpriteAnim(&gSprites[spriteId], digitNum); - if (digitNum != 0) - drawNextDigit = TRUE; - else - gSprites[spriteId].invisible = TRUE; - - // National seen value - 10s - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, 48, 55, 1); - digitNum = (sPokedexView->seenCount % 100) / 10; - if (digitNum != 0 || drawNextDigit) - StartSpriteAnim(&gSprites[spriteId], digitNum); - else - gSprites[spriteId].invisible = TRUE; - - // National seen value - 1s - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, 56, 55, 1); - digitNum = (sPokedexView->seenCount % 100) % 10; - StartSpriteAnim(&gSprites[spriteId], digitNum); - seenOwnedCount = GetHoennPokedexCount(FLAG_GET_CAUGHT); - // Hoenn owned value - 100s drawNextDigit = FALSE; - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, 40, 81, 1); + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET, 55 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); digitNum = seenOwnedCount / 100; StartSpriteAnim(&gSprites[spriteId], digitNum); if (digitNum != 0) @@ -2943,7 +3078,7 @@ static void CreateInterfaceSprites(u8 page) gSprites[spriteId].invisible = TRUE; // Hoenn owned value - 10s - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, 48, 81, 1); + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET + 8, 55 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); digitNum = (seenOwnedCount % 100) / 10; if (digitNum != 0 || drawNextDigit) StartSpriteAnim(&gSprites[spriteId], digitNum); @@ -2951,13 +3086,39 @@ static void CreateInterfaceSprites(u8 page) gSprites[spriteId].invisible = TRUE; // Hoenn owned value - 1s - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, 56, 81, 1); + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET + 16, 55 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); digitNum = (seenOwnedCount % 100) % 10; StartSpriteAnim(&gSprites[spriteId], digitNum); + + + //**************************** + // National seen value - 100s + drawNextDigit = FALSE; + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET, 78 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); + digitNum = sPokedexView->seenCount / 100; + StartSpriteAnim(&gSprites[spriteId], digitNum); + if (digitNum != 0) + drawNextDigit = TRUE; + else + gSprites[spriteId].invisible = TRUE; + + // National seen value - 10s + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET + 8, 78 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); + digitNum = (sPokedexView->seenCount % 100) / 10; + if (digitNum != 0 || drawNextDigit) + StartSpriteAnim(&gSprites[spriteId], digitNum); + else + gSprites[spriteId].invisible = TRUE; + + // National seen value - 1s + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET + 16, 78 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); + digitNum = (sPokedexView->seenCount % 100) % 10; + StartSpriteAnim(&gSprites[spriteId], digitNum); + // National owned value - 100s drawNextDigit = FALSE; - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, 40, 91, 1); + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET, 88 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); digitNum = sPokedexView->ownCount / 100; StartSpriteAnim(&gSprites[spriteId], digitNum); if (digitNum != 0) @@ -2966,7 +3127,7 @@ static void CreateInterfaceSprites(u8 page) gSprites[spriteId].invisible = TRUE; // National owned value - 10s - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, 48, 91, 1); + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET + 8, 88 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); digitNum = (sPokedexView->ownCount % 100) / 10; if (digitNum != 0 || drawNextDigit) StartSpriteAnim(&gSprites[spriteId], digitNum); @@ -2974,7 +3135,7 @@ static void CreateInterfaceSprites(u8 page) gSprites[spriteId].invisible = TRUE; // National owned value - 1s - spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, 56, 91, 1); + spriteId = CreateSprite(&sNationalDexSeenOwnNumberSpriteTemplate, LIST_RIGHT_SIDE_TEXT_X + LIST_RIGHT_SIDE_TEXT_X_OFFSET + 16, 88 - LIST_RIGHT_SIDE_TEXT_Y_OFFSET, 1); digitNum = (sPokedexView->ownCount % 100) % 10; StartSpriteAnim(&gSprites[spriteId], digitNum); } @@ -3008,14 +3169,14 @@ void SpriteCB_MoveMonForInfoScreen(struct Sprite *sprite) if (sprite->pos1.x != 48 || sprite->pos1.y != 56) { if (sprite->pos1.x > 48) - sprite->pos1.x--; + sprite->pos1.x -= 4; if (sprite->pos1.x < 48) - sprite->pos1.x++; + sprite->pos1.x = 48; if (sprite->pos1.y > 56) - sprite->pos1.y--; + sprite->pos1.y -= 4; if (sprite->pos1.y < 56) - sprite->pos1.y++; + sprite->pos1.y = 56; } else { @@ -3168,6 +3329,34 @@ static void PrintInfoScreenText(const u8* str, u8 left, u8 top) AddTextPrinterParameterized4(0, 1, left, top, 0, 0, color, -1, str); } +static void PrintInfoScreenTextWhite(const u8* str, u8 left, u8 top) //HGSS_Ui +{ + u8 color[3]; + color[0] = TEXT_COLOR_TRANSPARENT; + color[1] = TEXT_COLOR_WHITE; + color[2] = TEXT_DYNAMIC_COLOR_6; + + AddTextPrinterParameterized4(0, 1, left, top, 0, 0, color, -1, str); +} +static void PrintInfoScreenTextSmall(const u8* str, u8 left, u8 top) +{ + u8 color[3]; + color[0] = TEXT_COLOR_TRANSPARENT; + color[1] = TEXT_DYNAMIC_COLOR_6; + color[2] = TEXT_COLOR_LIGHT_GREY; + + AddTextPrinterParameterized4(0, 0, left, top, 0, 0, color, 0, str); +} +static void PrintInfoScreenTextSmallWhite(const u8* str, u8 left, u8 top) +{ + u8 color[3]; + color[0] = TEXT_COLOR_TRANSPARENT; + color[1] = TEXT_COLOR_WHITE; + color[2] = TEXT_DYNAMIC_COLOR_6; + + AddTextPrinterParameterized4(0, 0, left, top, 0, 0, color, 0, str); +} + #define tMonSpriteId data[4] @@ -3247,11 +3436,14 @@ static void Task_LoadInfoScreen(u8 taskId) break; case 2: LoadScreenSelectBarMain(0xD); - HighlightScreenSelectBarItem(sPokedexView->selectedScreen, 0xD); + // HighlightScreenSelectBarItem(sPokedexView->selectedScreen, 0xD); LoadPokedexBgPalette(sPokedexView->isSearchResults); gMain.state++; break; case 3: + sPokedexView->typeIconSpriteIds[0] = 0xFF; + sPokedexView->typeIconSpriteIds[1] = 0xFF; + CreateTypeIconSprites(); gMain.state++; break; case 4: @@ -3300,20 +3492,20 @@ static void Task_LoadInfoScreen(u8 taskId) if (!gPaletteFade.active) { gMain.state++; - if (gTasks[taskId].data[3] == 0) - { - StopCryAndClearCrySongs(); - PlayCry2(NationalPokedexNumToSpecies(sPokedexListItem->dexNum), 0, 0x7D, 0xA); - } - else - { - gMain.state++; - } + // if (gTasks[taskId].data[3] == 0) + // { + // StopCryAndClearCrySongs(); + // PlayCry2(NationalPokedexNumToSpecies(sPokedexListItem->dexNum), 0, 0x7D, 0xA); + // } + // else + // { + // gMain.state++; + // } } break; case 9: - if (!IsCryPlayingOrClearCrySongs()) - gMain.state++; + // if (!IsCryPlayingOrClearCrySongs()) + gMain.state++; break; case 10: gTasks[taskId].data[0] = 0; @@ -3362,61 +3554,71 @@ static void Task_HandleInfoScreenInput(u8 taskId) PlaySE(SE_PC_OFF); return; } - if (JOY_NEW(A_BUTTON)) + // if (JOY_NEW(A_BUTTON)) + // { + // switch (sPokedexView->selectedScreen) + // { + // case AREA_SCREEN: + // BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 16, RGB_BLACK); + // sPokedexView->screenSwitchState = 1; + // gTasks[taskId].func = Task_SwitchScreensFromInfoScreen; + // PlaySE(SE_PIN); + // break; + // case CRY_SCREEN: + // BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 0x10, RGB_BLACK); + // sPokedexView->screenSwitchState = 2; + // gTasks[taskId].func = Task_SwitchScreensFromInfoScreen; + // PlaySE(SE_PIN); + // break; + // case SIZE_SCREEN: + // if (!sPokedexListItem->owned) + // { + // PlaySE(SE_FAILURE); + // } + // else + // { + // BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 0x10, RGB_BLACK); + // sPokedexView->screenSwitchState = 3; + // gTasks[taskId].func = Task_SwitchScreensFromInfoScreen; + // PlaySE(SE_PIN); + // } + // break; + // case CANCEL_SCREEN: + // BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); + // gTasks[taskId].func = Task_ExitInfoScreen; + // PlaySE(SE_PC_OFF); + // break; + // } + // return; + // } + // if ((JOY_NEW(DPAD_LEFT) + // || (JOY_NEW(L_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + // && sPokedexView->selectedScreen > 0) + // { + // sPokedexView->selectedScreen--; + // HighlightScreenSelectBarItem(sPokedexView->selectedScreen, 0xD); + // PlaySE(SE_DEX_PAGE); + // return; + // } + // if ((JOY_NEW(DPAD_RIGHT) + // || (JOY_NEW(R_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + // && sPokedexView->selectedScreen < CANCEL_SCREEN) + // { + // sPokedexView->selectedScreen++; + // HighlightScreenSelectBarItem(sPokedexView->selectedScreen, 0xD); + // PlaySE(SE_DEX_PAGE); + // return; + // } + + if ((JOY_NEW(DPAD_RIGHT) || (JOY_NEW(R_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR))) { - switch (sPokedexView->selectedScreen) - { - case AREA_SCREEN: - BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 16, RGB_BLACK); - sPokedexView->screenSwitchState = 1; - gTasks[taskId].func = Task_SwitchScreensFromInfoScreen; - PlaySE(SE_PIN); - break; - case CRY_SCREEN: - BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 0x10, RGB_BLACK); - sPokedexView->screenSwitchState = 2; - gTasks[taskId].func = Task_SwitchScreensFromInfoScreen; - PlaySE(SE_PIN); - break; - case SIZE_SCREEN: - if (!sPokedexListItem->owned) - { - PlaySE(SE_FAILURE); - } - else - { - BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 0x10, RGB_BLACK); - sPokedexView->screenSwitchState = 3; - gTasks[taskId].func = Task_SwitchScreensFromInfoScreen; - PlaySE(SE_PIN); - } - break; - case CANCEL_SCREEN: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); - gTasks[taskId].func = Task_ExitInfoScreen; - PlaySE(SE_PC_OFF); - break; - } - return; - } - if ((JOY_NEW(DPAD_LEFT) - || (JOY_NEW(L_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) - && sPokedexView->selectedScreen > 0) - { - sPokedexView->selectedScreen--; - HighlightScreenSelectBarItem(sPokedexView->selectedScreen, 0xD); - PlaySE(SE_DEX_PAGE); - return; - } - if ((JOY_NEW(DPAD_RIGHT) - || (JOY_NEW(R_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) - && sPokedexView->selectedScreen < CANCEL_SCREEN) - { - sPokedexView->selectedScreen++; - HighlightScreenSelectBarItem(sPokedexView->selectedScreen, 0xD); - PlaySE(SE_DEX_PAGE); - return; + sPokedexView->selectedScreen = AREA_SCREEN; + BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 0x10, RGB_BLACK); + sPokedexView->screenSwitchState = 1; + gTasks[taskId].func = Task_SwitchScreensFromInfoScreen; + PlaySE(SE_PIN); } + } static void Task_SwitchScreensFromInfoScreen(u8 taskId) @@ -3476,8 +3678,8 @@ static void Task_LoadAreaScreen(u8 taskId) } break; case 1: - LoadScreenSelectBarSubmenu(0xD); - HighlightSubmenuScreenSelectBarItem(0, 0xD); + LoadScreenSelectBarSubmenu(0xD); //HGSS_Ui + // HighlightSubmenuScreenSelectBarItem(0, 0xD); LoadPokedexBgPalette(sPokedexView->isSearchResults); SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(13) | BGCNT_16COLOR | BGCNT_TXT256x256); gMain.state++; @@ -3510,7 +3712,10 @@ static void Task_SwitchScreensFromAreaScreen(u8 taskId) gTasks[taskId].func = Task_LoadInfoScreen; break; case 2: - gTasks[taskId].func = Task_LoadCryScreen; + if (!sPokedexListItem->owned) + PlaySE(SE_FAILURE); + else + gTasks[taskId].func = Task_LoadStatsScreen; break; } } @@ -3534,7 +3739,7 @@ static void Task_LoadCryScreen(u8 taskId) } break; case 1: - DecompressAndLoadBgGfxUsingHeap(3, &gPokedexMenu_Gfx, 0x2000, 0, 0); + DecompressAndLoadBgGfxUsingHeap(3, &gPokedexMenuRest_Gfx, 0x2000, 0, 0); CopyToBgTilemapBuffer(3, &gPokedexCryScreen_Tilemap, 0, 0); FillWindowPixelBuffer(WIN_INFO, PIXEL_FILL(0)); PutWindowTilemap(WIN_INFO); @@ -3543,8 +3748,8 @@ static void Task_LoadCryScreen(u8 taskId) gMain.state++; break; case 2: - LoadScreenSelectBarSubmenu(0xD); - HighlightSubmenuScreenSelectBarItem(1, 0xD); + LoadScreenSelectBarMain(0xD); //HGSS_Ui + // HighlightSubmenuScreenSelectBarItem(1, 0xD); LoadPokedexBgPalette(sPokedexView->isSearchResults); gMain.state++; break; @@ -3689,7 +3894,7 @@ static void Task_SwitchScreensFromCryScreen(u8 taskId) gTasks[taskId].func = Task_LoadInfoScreen; break; case 2: - gTasks[taskId].func = Task_LoadAreaScreen; + gTasks[taskId].func = Task_LoadStatsScreen; break; case 3: gTasks[taskId].func = Task_LoadSizeScreen; @@ -3728,15 +3933,15 @@ static void Task_LoadSizeScreen(u8 taskId) } break; case 1: - DecompressAndLoadBgGfxUsingHeap(3, gPokedexMenu_Gfx, 0x2000, 0, 0); + DecompressAndLoadBgGfxUsingHeap(3, gPokedexMenuRest_Gfx, 0x2000, 0, 0); CopyToBgTilemapBuffer(3, gPokedexSizeScreen_Tilemap, 0, 0); FillWindowPixelBuffer(WIN_INFO, PIXEL_FILL(0)); PutWindowTilemap(WIN_INFO); gMain.state++; break; case 2: - LoadScreenSelectBarSubmenu(0xD); - HighlightSubmenuScreenSelectBarItem(2, 0xD); + LoadScreenSelectBarMain(0xD); //HGSS_Ui + // HighlightSubmenuScreenSelectBarItem(2, 0xD); LoadPokedexBgPalette(sPokedexView->isSearchResults); gMain.state++; break; @@ -3849,15 +4054,18 @@ static void Task_SwitchScreensFromSizeScreen(u8 taskId) static void LoadScreenSelectBarMain(u16 unused) { - CopyToBgTilemapBuffer(1, gPokedexScreenSelectBarMain_Tilemap, 0, 0); + //CopyToBgTilemapBuffer(1, gPokedexScreenSelectBarMain_Tilemap, 0, 0); + CopyToBgTilemapBuffer(1, gPokedexScreenSelectBarSubmenu_Tilemap_Clear, 0, 0); + CopyBgTilemapBufferToVram(1); } static void LoadScreenSelectBarSubmenu(u16 unused) { CopyToBgTilemapBuffer(1, gPokedexScreenSelectBarSubmenu_Tilemap, 0, 0); + CopyBgTilemapBufferToVram(1); } -static void HighlightScreenSelectBarItem(u8 selectedScreen, u16 unused) +static void HighlightScreenSelectBarItem(u8 selectedScreen, u16 unused) //HGSS_Ui { u8 i; u8 j; @@ -4078,6 +4286,96 @@ static void SpriteCB_SlideCaughtMonToCenter(struct Sprite *sprite) #undef tPersonalityLo #undef tPersonalityHi +//Type Icon +static void SetSpriteInvisibility(u8 spriteArrayId, bool8 invisible) +{ + gSprites[sPokedexView->typeIconSpriteIds[spriteArrayId]].invisible = invisible; +} +// different from pokemon_summary_screen +#define TYPE_ICON_PAL_NUM_0 13 +#define TYPE_ICON_PAL_NUM_1 14 +#define TYPE_ICON_PAL_NUM_2 15 +static const u8 sMoveTypeToOamPaletteNum[NUMBER_OF_MON_TYPES + CONTEST_CATEGORIES_COUNT] = +{ + [TYPE_NORMAL] = TYPE_ICON_PAL_NUM_0, + [TYPE_FIGHTING] = TYPE_ICON_PAL_NUM_0, + [TYPE_FLYING] = TYPE_ICON_PAL_NUM_1, + [TYPE_POISON] = TYPE_ICON_PAL_NUM_1, + [TYPE_GROUND] = TYPE_ICON_PAL_NUM_0, + [TYPE_ROCK] = TYPE_ICON_PAL_NUM_0, + [TYPE_BUG] = TYPE_ICON_PAL_NUM_2, + [TYPE_GHOST] = TYPE_ICON_PAL_NUM_1, + [TYPE_STEEL] = TYPE_ICON_PAL_NUM_0, + [TYPE_MYSTERY] = TYPE_ICON_PAL_NUM_2, + [TYPE_FIRE] = TYPE_ICON_PAL_NUM_0, + [TYPE_WATER] = TYPE_ICON_PAL_NUM_1, + [TYPE_GRASS] = TYPE_ICON_PAL_NUM_2, + [TYPE_ELECTRIC] = TYPE_ICON_PAL_NUM_0, + [TYPE_PSYCHIC] = TYPE_ICON_PAL_NUM_1, + [TYPE_ICE] = TYPE_ICON_PAL_NUM_1, + [TYPE_DRAGON] = TYPE_ICON_PAL_NUM_2, + [TYPE_DARK] = TYPE_ICON_PAL_NUM_0, + [NUMBER_OF_MON_TYPES + CONTEST_CATEGORY_COOL] = TYPE_ICON_PAL_NUM_0, + [NUMBER_OF_MON_TYPES + CONTEST_CATEGORY_BEAUTY] = TYPE_ICON_PAL_NUM_1, + [NUMBER_OF_MON_TYPES + CONTEST_CATEGORY_CUTE] = TYPE_ICON_PAL_NUM_1, + [NUMBER_OF_MON_TYPES + CONTEST_CATEGORY_SMART] = TYPE_ICON_PAL_NUM_2, + [NUMBER_OF_MON_TYPES + CONTEST_CATEGORY_TOUGH] = TYPE_ICON_PAL_NUM_0, + #ifdef TYPE_FAIRY + [TYPE_FAIRY] = TYPE_ICON_PAL_NUM_1, //based on battle_engine + #endif +}; +static void SetTypeIconPosAndPal(u8 typeId, u8 x, u8 y, u8 spriteArrayId) +{ + struct Sprite *sprite; + + sprite = &gSprites[sPokedexView->typeIconSpriteIds[spriteArrayId]]; + StartSpriteAnim(sprite, typeId); + sprite->oam.paletteNum = sMoveTypeToOamPaletteNum[typeId]; + sprite->pos1.x = x + 16; + sprite->pos1.y = y + 8; + SetSpriteInvisibility(spriteArrayId, FALSE); +} +static void PrintCurrentSpeciesTypeInfo(void) +{ + u16 species = NationalPokedexNumToSpecies(sPokedexListItem->dexNum); + u32 i; + u16 dexNum = SpeciesToNationalPokedexNum(species); + u8 type1, type2; + + //type icon(s) + type1 = gBaseStats[species].type1; + type2 = gBaseStats[species].type2; + if (species == SPECIES_NONE) + type1 = type2 = TYPE_MYSTERY; + + if (type1 == type2) + { + SetTypeIconPosAndPal(type1, 147, 48, 0); + SetSpriteInvisibility(1, TRUE); + } + else + { + SetTypeIconPosAndPal(type1, 147, 48, 0); + SetTypeIconPosAndPal(type2, 147 + 33, 48, 1); + } + +} +static void CreateTypeIconSprites(void) +{ + u8 i; + + LoadCompressedSpriteSheet(&sSpriteSheet_MoveTypes); + LoadCompressedPalette(gMoveTypes_Pal, 0x1D0, 0x60); + for (i = 0; i < 2; i++) + { + if (sPokedexView->typeIconSpriteIds[i] == 0xFF) + sPokedexView->typeIconSpriteIds[i] = CreateSprite(&sSpriteTemplate_MoveTypes, 10, 10, 2); + + SetSpriteInvisibility(i, TRUE); + } +} + + // u32 value is re-used, but passed as a bool that's TRUE if national dex is enabled static void PrintMonInfo(u32 num, u32 value, u32 owned, u32 newEntry) { @@ -4088,20 +4386,20 @@ static void PrintMonInfo(u32 num, u32 value, u32 owned, u32 newEntry) const u8 *category; const u8 *description; - if (newEntry) - PrintInfoScreenText(gText_PokedexRegistration, GetStringCenterAlignXOffset(1, gText_PokedexRegistration, 0xF0), 0); + // if (newEntry) + // PrintInfoScreenText(gText_PokedexRegistration, GetStringCenterAlignXOffset(1, gText_PokedexRegistration, 0xF0), 0); if (value == 0) value = NationalToHoennOrder(num); else value = num; ConvertIntToDecimalStringN(StringCopy(str, gText_NumberClear01), value, STR_CONV_MODE_LEADING_ZEROS, 3); - PrintInfoScreenText(str, 0x60, 0x19); + PrintInfoScreenTextWhite(str, 123, 17); //HGSS_Ui natNum = NationalPokedexNumToSpecies(num); if (natNum) name = gSpeciesNames[natNum]; else name = sText_TenDashes2; - PrintInfoScreenText(name, 0x84, 0x19); + PrintInfoScreenTextWhite(name, 157, 17); //HGSS_Ui if (owned) { CopyMonCategoryText(num, str2); @@ -4111,24 +4409,33 @@ static void PrintMonInfo(u32 num, u32 value, u32 owned, u32 newEntry) { category = gText_5MarksPokemon; } - PrintInfoScreenText(category, 0x64, 0x29); - PrintInfoScreenText(gText_HTHeight, 0x60, 0x39); - PrintInfoScreenText(gText_WTWeight, 0x60, 0x49); + PrintInfoScreenText(category, 123, 31); //HGSS_Ui + PrintInfoScreenText(gText_HTHeight, 155, 64); //HGSS_Ui + PrintInfoScreenText(gText_WTWeight, 155, 77); //HGSS_Ui if (owned) { - PrintMonHeight(gPokedexEntries[num].height, 0x81, 0x39); - PrintMonWeight(gPokedexEntries[num].weight, 0x81, 0x49); + PrintMonHeight(gPokedexEntries[num].height, 180, 64); //HGSS_Ui + PrintMonWeight(gPokedexEntries[num].weight, 180, 77); //HGSS_Ui } else { - PrintInfoScreenText(gText_UnkHeight, 0x81, 0x39); - PrintInfoScreenText(gText_UnkWeight, 0x81, 0x49); + PrintInfoScreenText(gText_UnkHeight, 180, 64); //HGSS_Ui + PrintInfoScreenText(gText_UnkWeight, 180, 77); //HGSS_Ui } if (owned) + { description = gPokedexEntries[num].description; + } else description = gExpandedPlaceholder_PokedexDescription; - PrintInfoScreenText(description, GetStringCenterAlignXOffset(1, description, 0xF0), 0x5F); + PrintInfoScreenText(description, GetStringCenterAlignXOffset(1, description, 0xF0), 93); //HGSS_Ui + + //Type Icon(s) //HGSS_Ui + if (owned && !newEntry) + { + description = gPokedexEntries[num].description; + PrintCurrentSpeciesTypeInfo(); //HGSS_Ui + } } static void PrintMonHeight(u16 height, u8 left, u8 top) @@ -4652,13 +4959,31 @@ static u16 CreateSizeScreenTrainerPic(u16 species, s16 x, s16 y, s8 paletteSlot) return CreateTrainerPicSprite(species, TRUE, x, y, paletteSlot, 0xFFFF); } -static int DoPokedexSearch(u8 dexMode, u8 order, u8 abcGroup, u8 bodyColor, u8 type1, u8 type2) + +bool8 SpeciesCanLearnLvlUpMove(u16 species, u16 move) //Move search PokedexPlus HGSS_Ui +{ + u16 j; + for (j = 0; j < MAX_LEVEL_UP_MOVES && gLevelUpLearnsets[species][j] != LEVEL_UP_END; j++) + { + if (move == (gLevelUpLearnsets[species][j] & LEVEL_UP_MOVE_ID)) + { + return TRUE; + } + } + return FALSE; +} + + +static int DoPokedexSearch(u8 dexMode, u8 order, u8 abcGroup, u8 bodyColor, u8 type1, u8 type2) // ,u16 move) { u16 species; - u16 i; + u16 i,j; u16 resultsCount; u8 types[2]; + u8 tutorMoveId, tmMoveId; //PokedexPlus HGSS_Ui + u16 move = 0xFFFF; + CreatePokedexList(dexMode, order); for (i = 0, resultsCount = 0; i < NATIONAL_DEX_COUNT; i++) @@ -4753,6 +5078,66 @@ static int DoPokedexSearch(u8 dexMode, u8 order, u8 abcGroup, u8 bodyColor, u8 t sPokedexView->pokemonListCount = resultsCount; } + // Search by move + if (move != 0xFFFF) + { + //Calc tutor move ID + tutorMoveId = 0xFF; + for (i = 0; i < TUTOR_MOVE_COUNT; i++) + { + if(move == gTutorMoves[i]) + { + tutorMoveId = i; + break; + } + } + //Calc tm move ID + tmMoveId = 0xFF; + for (i = 0; i < NUM_TECHNICAL_MACHINES + NUM_HIDDEN_MACHINES; i++) + { + if(move == ItemIdToBattleMoveId(ITEM_TM01_FOCUS_PUNCH + i)) + { + tmMoveId = (ITEM_TM01_FOCUS_PUNCH + i); + break; + } + } + + for (i = 0, resultsCount = 0; i < sPokedexView->pokemonListCount; i++) + { + species = NationalPokedexNumToSpecies(sPokedexView->pokedexList[i].dexNum); + + //LevelUp + if (SpeciesCanLearnLvlUpMove(species, move)) + { + sPokedexView->pokedexList[resultsCount] = sPokedexView->pokedexList[i]; + resultsCount++; + continue; + } + //TMHM + if(CanSpeciesLearnTMHM(species, tmMoveId)) + { + sPokedexView->pokedexList[resultsCount] = sPokedexView->pokedexList[i]; + resultsCount++; + continue; + } + //Tutor + if(CanLearnTutorMove(species, tutorMoveId)) + { + sPokedexView->pokedexList[resultsCount] = sPokedexView->pokedexList[i]; + resultsCount++; + continue; + } + //EGGs + if(SpeciesCanLearnEggMove(species, move)) + { + sPokedexView->pokedexList[resultsCount] = sPokedexView->pokedexList[i]; + resultsCount++; + continue; + } + } + sPokedexView->pokemonListCount = resultsCount; + } + if (sPokedexView->pokemonListCount != 0) { for (i = sPokedexView->pokemonListCount; i < NATIONAL_DEX_COUNT; i++) @@ -5631,3 +6016,838 @@ static void ClearSearchParameterBoxText(void) { ClearSearchMenuRect(144, 8, 96, 96); } + + + + + +//PokedexPlus HGSS_Ui Stats Page +#define tMonSpriteId data[4] +static void Task_LoadStatsScreen(u8 taskId) +{ + switch (gMain.state) + { + case 0: + default: + if (!gPaletteFade.active) + { + u16 r2; + + sPokedexView->currentPage = STATS_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, gPokedexMenu_Gfx, 0x2000, 0, 0); + CopyToBgTilemapBuffer(3, gPokedexStatsScreen_Tilemap, 0, 0); + FillWindowPixelBuffer(WIN_INFO, PIXEL_FILL(0)); + PutWindowTilemap(WIN_INFO); + // PutWindowTilemap(WIN_FOOTPRINT); + // PrintFootprint(WIN_FOOTPRINT, sPokedexListItem->dexNum); + // CopyWindowToVram(WIN_FOOTPRINT, 2); + gMain.state++; + break; + case 2: + LoadScreenSelectBarMain(0xD); + LoadPokedexBgPalette(sPokedexView->isSearchResults); + gMain.state++; + break; + case 3: + sPokedexView->typeIconSpriteIds[0] = 0xFF; + sPokedexView->typeIconSpriteIds[1] = 0xFF; + CreateTypeIconSprites(); + // sMonSummaryScreen->splitIconSpriteId = 0xFF; //Physical/Special Split from BE + // LoadCompressedPalette(gMoveTypes_Pal, 0x1D0, 0x60); //Physical/Special Split from BE + // LoadCompressedSpriteSheet(&sSpriteSheet_SplitIcons); //Physical/Special Split from BE + // LoadSpritePalette(&sSpritePal_SplitIcons); //Physical/Special Split from BE + gMain.state++; + break; + case 4: + sPokedexView->moveSelected = 0; + sPokedexView->moveMax = 0; + sPokedexView->numEggMoves = 0; + sPokedexView->numLevelUpMoves = 0; + sPokedexView->numTMHMMoves = 0; + if(CalculateMoves()) + gMain.state++; + break; + case 5: + if (gTasks[taskId].data[1] == 0) + { + //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 + gSprites[gTasks[taskId].data[4]].oam.priority = 0; + } + gMain.state++; + break; + case 6: + gTasks[taskId].data[5] = 0; + PrintMonStats(taskId, sPokedexListItem->dexNum, sPokedexView->dexMode == DEX_MODE_HOENN ? FALSE : TRUE, sPokedexListItem->owned, 0); + PrintMonStatsToggle(taskId); + if (!sPokedexListItem->owned) + LoadPalette(gPlttBufferUnfaded + 1, 0x31, 0x1E); + CopyWindowToVram(WIN_INFO, 3); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(2); + CopyBgTilemapBufferToVram(3); + gMain.state++; + break; + case 7: + { + 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 8: + 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 9: + if (!gPaletteFade.active) + gMain.state++; + break; + case 10: + gMain.state++; + break; + case 11: + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = 1; + gTasks[taskId].func = Task_HandleStatsScreenInput; + gMain.state = 0; + break; + } +} +static void FreeStatsScreenWindowAndBgBuffers(void) +{ + void *tilemapBuffer; + + FreeAllWindowBuffers(); + tilemapBuffer = GetBgTilemapBuffer(0); + if (tilemapBuffer) + Free(tilemapBuffer); + tilemapBuffer = GetBgTilemapBuffer(1); + if (tilemapBuffer) + Free(tilemapBuffer); + tilemapBuffer = GetBgTilemapBuffer(2); + if (tilemapBuffer) + Free(tilemapBuffer); + tilemapBuffer = GetBgTilemapBuffer(3); + if (tilemapBuffer) + Free(tilemapBuffer); +} +static void Task_HandleStatsScreenInput(u8 taskId) +{ + // gTasks[taskId].data[5] = 0; + if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_DEX_PAGE); + if (gTasks[taskId].data[5] == 0) + gTasks[taskId].data[5] = 1; + else + gTasks[taskId].data[5] = 0; + PrintMonStatsToggle(taskId); + DestroyMoveIcon(taskId); + PrintMoveNameAndInfo(taskId, TRUE); + } + if (JOY_NEW(B_BUTTON)) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gTasks[taskId].func = Task_ExitStatsScreen; + PlaySE(SE_PC_OFF); + return; + } + + //Change moves + if (JOY_REPEAT(DPAD_UP) && sPokedexView->moveSelected > 0) + { + sPokedexView->moveSelected -= 1; + PlaySE(SE_SELECT); + DestroyMoveIcon(taskId); + PrintMoveNameAndInfo(taskId, FALSE); + } + if (JOY_REPEAT(DPAD_DOWN) && sPokedexView->moveSelected < sPokedexView->moveMax -1 ) + { + sPokedexView->moveSelected = sPokedexView->moveSelected + 1; + PlaySE(SE_SELECT); + DestroyMoveIcon(taskId); + PrintMoveNameAndInfo(taskId, FALSE); + } + + //Switch screens + if ((JOY_NEW(DPAD_LEFT) || (JOY_NEW(L_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR))) + { + sPokedexView->selectedScreen = INFO_SCREEN; + BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 0x10, RGB_BLACK); + sPokedexView->screenSwitchState = 1; + gTasks[taskId].func = Task_SwitchScreensFromStatsScreen; + 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 = AREA_SCREEN; + BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 0x10, RGB_BLACK); + sPokedexView->screenSwitchState = 2; + gTasks[taskId].func = Task_SwitchScreensFromStatsScreen; + PlaySE(SE_PIN); + } + } + +} +#define ITEM_TAG 0xFDF3 +static void DestroyMoveIcon(u8 taskId) +{ + FreeSpriteTilesByTag(ITEM_TAG); //Destroy item icon + FreeSpritePaletteByTag(ITEM_TAG); //Destroy item icon + FreeSpriteOamMatrix(&gSprites[gTasks[taskId].data[3]]); //Destroy item icon + DestroySprite(&gSprites[gTasks[taskId].data[3]]); //Destroy item icon +} +static bool8 CalculateMoves(void) +{ + //Moves + u16 species = NationalPokedexNumToSpecies(sPokedexListItem->dexNum); + u8 numEggMoves = GetEggMovesSpecies(species, sStatsMovesEgg); + u8 numLevelUpMoves = GetLevelUpMovesBySpecies(species, sStatsMovesLevelUp); + u8 numTMHMMoves; + u8 numTutorMoves = 0; + u16 movestotal; + u8 i,j; + + // sTutorLearnsets + for (i=0; imoveMax = movestotal; + + sPokedexView->numEggMoves = numEggMoves; + sPokedexView->numLevelUpMoves = numLevelUpMoves; + sPokedexView->numTMHMMoves = numTMHMMoves; + sPokedexView->numTutorMoves = numTutorMoves; + + return TRUE; +} +static void PrintMoveNameAndInfo(u8 taskId, bool8 toggle) +{ + u8 numEggMoves = sPokedexView->numEggMoves; + u8 numLevelUpMoves = sPokedexView->numLevelUpMoves; + u8 numTMHMMoves = sPokedexView->numTMHMMoves; + u8 numTutorMoves = sPokedexView->numTutorMoves; + + u8 selected = sPokedexView->moveSelected; + u8 total = sPokedexView->moveMax; + + u16 move; + u16 item; + + u8 moves_x = 101; + u8 moves_y = 19; + + u8 level = 0; + + u16 species = NationalPokedexNumToSpecies(sPokedexListItem->dexNum); + + //Contest + u8 contest_i, contest_effectValue, contest_appeal, contest_jam; + + //Clear space + if (!toggle) + FillWindowPixelRect(0, PIXEL_FILL(0), moves_x-1, moves_y, 139, 78); + else + FillWindowPixelRect(0, PIXEL_FILL(0), moves_x-1, moves_y+29, 139, 55); + + //Calculate and retrieve correct move from the arrays + if (selected < numEggMoves) + { + move = sStatsMovesEgg[sPokedexView->moveSelected]; + StringCopy(gStringVar3, gMoveNames[move]); + StringCopy(gStringVar4, gMoveDescriptionPointers[(move - 1)]); + PrintInfoScreenTextSmall(gText_ThreeDashes, moves_x + 113, moves_y + 9); + item = ITEM_LUCKY_EGG; + } + else if (selected < (numEggMoves + numLevelUpMoves)) + { + move = sStatsMovesLevelUp[sPokedexView->moveSelected - numEggMoves]; + StringCopy(gStringVar3, gMoveNames[move]); + StringCopy(gStringVar4, gMoveDescriptionPointers[(move - 1)]); + //Calculate level of the move + while (((gLevelUpLearnsets[species][(selected-numEggMoves)] & LEVEL_UP_MOVE_LV) != (level << 9)) && level < 0xFF) + { + level++; + if (gLevelUpLearnsets[species][(selected-numEggMoves)] == LEVEL_UP_END) + level = 0xFF; + } + ConvertIntToDecimalStringN(gStringVar1, level, STR_CONV_MODE_LEFT_ALIGN, 3); //Move learn lvl + PrintInfoScreenTextSmall(gText_Stats_MoveLevel, moves_x + 113, moves_y + 3); //Level text + PrintInfoScreenTextSmall(gStringVar1, moves_x + 113, moves_y + 14); //Print level + item = ITEM_EXP_SHARE; + } + else if (selected < (numEggMoves + numLevelUpMoves + numTMHMMoves)) + { + move = sStatsMovesTMHM[sPokedexView->moveSelected - numEggMoves - numLevelUpMoves]; + StringCopy(gStringVar3, gMoveNames[move]); + StringCopy(gStringVar4, gMoveDescriptionPointers[(move - 1)]); + CopyItemName(sStatsMovesTMHM_ID[(selected-numEggMoves-numLevelUpMoves)], gStringVar1); //TM name + PrintInfoScreenTextSmall(gStringVar1, moves_x + 113, moves_y + 9); + item = sStatsMovesTMHM_ID[(selected-numEggMoves-numLevelUpMoves)]; + } + else if (selected < (numEggMoves + numLevelUpMoves + numTMHMMoves + numTutorMoves)) + { + move = sStatsMovesTutor[sPokedexView->moveSelected - numEggMoves - numLevelUpMoves - numTMHMMoves]; + StringCopy(gStringVar3, gMoveNames[move]); + StringCopy(gStringVar4, gMoveDescriptionPointers[(move - 1)]); + PrintInfoScreenTextSmall(gText_ThreeDashes, moves_x + 113, moves_y + 9); + item = ITEM_TEACHY_TV; + } + else + { + StringCopy(gStringVar4, gText_CommunicationError); + item = ITEM_MASTER_BALL; + } + + + //Move name and description + StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 20); + PrintInfoScreenTextSmall(gStringVar3, moves_x, moves_y + 17); //Name + if (gTasks[taskId].data[5] == 0) + PrintInfoScreenTextSmall(gStringVar4, moves_x, moves_y + 34); + else + PrintInfoScreenTextSmall(gContestEffectDescriptionPointers[gContestMoves[move].effect], moves_x, moves_y + 34); + + + //Egg/TM/Level/Tutor Item Icon + gTasks[taskId].data[3] = AddItemIconSprite(ITEM_TAG, ITEM_TAG, item); + gSprites[gTasks[taskId].data[3]].pos2.x = 203; + gSprites[gTasks[taskId].data[3]].pos2.y = 39; + gSprites[gTasks[taskId].data[3]].oam.priority = 0; + + //Moves selected from move max + ConvertIntToDecimalStringN(gStringVar1, (selected+1), STR_CONV_MODE_RIGHT_ALIGN, 3); + ConvertIntToDecimalStringN(gStringVar2, total, STR_CONV_MODE_RIGHT_ALIGN, 3); + StringExpandPlaceholders(gStringVar1, gText_Stats_MoveSelectedMax); + PrintInfoScreenTextSmallWhite(gStringVar1, moves_x-1, moves_y+1); + + if (gTasks[taskId].data[5] == 0) + { + //Power + PrintInfoScreenTextSmall(gText_Power, moves_x + 3, moves_y + 64); + if (gBattleMoves[move].power < 2) + StringCopy(gStringVar1, gText_ThreeDashes); + else + ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[move].power, STR_CONV_MODE_RIGHT_ALIGN, 3); + PrintInfoScreenTextSmall(gStringVar1, moves_x + 48, moves_y + 64); + //Accuracy + PrintInfoScreenTextSmall(gText_Accuracy2, moves_x + 69, moves_y + 64); + if (gBattleMoves[move].accuracy == 0) + StringCopy(gStringVar1, gText_ThreeDashes); + else + ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[move].accuracy, STR_CONV_MODE_RIGHT_ALIGN, 3); + PrintInfoScreenTextSmall(gStringVar1, moves_x + 117, moves_y + 64); + } + else + { + //Appeal + PrintInfoScreenTextSmall(gText_Appeal, moves_x + 3, moves_y + 64); + contest_appeal = 0; + contest_effectValue = gContestEffects[gContestMoves[move].effect].appeal; + if (contest_effectValue != 0xFF) + contest_effectValue /= 10; + for (contest_i = 0; contest_i < 8; contest_i++) + { + if (contest_effectValue != 0xFF && contest_i < contest_effectValue) + contest_appeal += 1; + } + ConvertIntToDecimalStringN(gStringVar1, contest_appeal, STR_CONV_MODE_RIGHT_ALIGN, 1); + StringCopy(gStringVar2, gText_PlusSymbol); + StringAppend(gStringVar2, gStringVar1); + PrintInfoScreenTextSmall(gStringVar2, moves_x + 48, moves_y + 64); + + //Jam + PrintInfoScreenTextSmall(gText_Jam, moves_x + 69, moves_y + 64); + contest_jam = 0; + contest_effectValue = gContestEffects[gContestMoves[move].effect].jam; + if (contest_effectValue != 0xFF) + contest_effectValue /= 10; + for (contest_i = 0; contest_i < 8; contest_i++) + { + if (contest_effectValue != 0xFF && contest_i < contest_effectValue) + contest_jam += 1; + } + ConvertIntToDecimalStringN(gStringVar1, contest_jam, STR_CONV_MODE_RIGHT_ALIGN, 1); + StringCopy(gStringVar2, gText_Stats_Minus); + StringAppend(gStringVar2, gStringVar1); + PrintInfoScreenTextSmall(gStringVar2, moves_x + 122, moves_y + 64); + } + + //Draw move type icon + if (gTasks[taskId].data[5] == 0) + { + SetTypeIconPosAndPal(gBattleMoves[move].type, moves_x + 50, moves_y+1, 0); + SetSpriteInvisibility(1, TRUE); + } + else + { + SetTypeIconPosAndPal(NUMBER_OF_MON_TYPES + gContestMoves[move].contestCategory, moves_x + 50, moves_y+1, 1); + SetSpriteInvisibility(0, TRUE); + } + + + //Physical/Special Split from BE + // DestroySplitIcon(); + // ShowSplitIcon(GetBattleMoveSplit(move)); +} +// u32 value is re-used, but passed as a bool that's TRUE if national dex is enabled +static void PrintMonStats(u8 taskId, u32 num, u32 value, u32 owned, u32 newEntry) //HGSS_Ui +{ + u8 str[16]; + u8 str2[32]; + u8 strEV[25]; + u16 species = NationalPokedexNumToSpecies(sPokedexListItem->dexNum); + u16 natNum; + u8 evVal; + const u8 *category; + const u8 *description; + const u8 *strEVtype; + + u8 gender_x, gender_y; + + u8 base_i = 0; + u8 base_offset = 11; + u8 base_x = 8; + u8 base_y = 52; + + //Name + PrintInfoScreenTextSmall(gSpeciesNames[species], 38, 16); + + //Number + if (value == 0) + value = NationalToHoennOrder(num); + else + value = num; + ConvertIntToDecimalStringN(StringCopy(str, gText_NumberClear01), value, STR_CONV_MODE_LEADING_ZEROS, 3); + PrintInfoScreenTextSmall(str, 38, 26); + + //Gender ratio //MON_GENDERLESS == 0xFF + gender_x = 38; + gender_y = 36; + switch (gBaseStats[species].genderRatio) + { + case 0: + PrintInfoScreenTextSmall(gText_Stats_Gender_0, gender_x, gender_y); + break; + case 31: + PrintInfoScreenTextSmall(gText_Stats_Gender_12_5, gender_x, gender_y); + break; + case 63: + PrintInfoScreenTextSmall(gText_Stats_Gender_25, gender_x, gender_y); + break; + case 127: + PrintInfoScreenTextSmall(gText_Stats_Gender_50, gender_x, gender_y); + break; + case 191: + PrintInfoScreenTextSmall(gText_Stats_Gender_75, gender_x, gender_y); + break; + case 223: + PrintInfoScreenTextSmall(gText_Stats_Gender_87_5, gender_x, gender_y); + break; + case 254: + PrintInfoScreenTextSmall(gText_Stats_Gender_100, gender_x, gender_y); + break; + default: + PrintInfoScreenTextSmall(gText_ThreeDashes, gender_x, gender_y); + break; + } + + + //Moves + PrintMoveNameAndInfo(taskId, FALSE); + +} +static void PrintMonStatsToggle(u8 taskId) +{ + u8 base_x = 8; + u8 base_x_offset = 70; + u8 base_offset = 11; + u8 base_x_first_row = 23; + u8 base_x_second_row = 43; + u8 base_i = 0; + u8 base_y = 52; + u32 align_x; + u8 total_x = 93; + u16 species = NationalPokedexNumToSpecies(sPokedexListItem->dexNum); + u8 strEV[25]; + u8 strBase[14]; + u8 abilities_x = 101; + u8 abilities_y = 99; + u8 ability0; + + //Clear old text + FillWindowPixelRect(0, PIXEL_FILL(0), base_x, base_y, 90, 100); //bottom stats + FillWindowPixelRect(0, PIXEL_FILL(0), abilities_x, 99, 130, 58); //abilities + + + //Base stats + if (gTasks[taskId].data[5] == 0) + { + PrintInfoScreenTextSmall(gText_Stats_HP, base_x, base_y + base_offset*base_i); + ConvertIntToDecimalStringN(strBase, gBaseStats[species].baseHP, STR_CONV_MODE_RIGHT_ALIGN, 3); + PrintInfoScreenTextSmall(strBase, base_x+base_x_first_row, base_y + base_offset*base_i); + + PrintInfoScreenTextSmall(gText_Stats_Speed, base_x+base_x_second_row, base_y + base_offset*base_i); + ConvertIntToDecimalStringN(strBase, gBaseStats[species].baseSpeed, STR_CONV_MODE_RIGHT_ALIGN, 3); + PrintInfoScreenTextSmall(strBase, base_x+base_x_offset, base_y + base_offset*base_i); + + base_i++; + PrintInfoScreenTextSmall(gText_Stats_Attack, base_x, base_y + base_offset*base_i); + ConvertIntToDecimalStringN(strBase, gBaseStats[species].baseAttack, STR_CONV_MODE_RIGHT_ALIGN, 3); + PrintInfoScreenTextSmall(strBase, base_x+base_x_first_row, base_y + base_offset*base_i); + + PrintInfoScreenTextSmall(gText_Stats_SpAtk, base_x+base_x_second_row, base_y + base_offset*base_i); + ConvertIntToDecimalStringN(strBase, gBaseStats[species].baseSpAttack, STR_CONV_MODE_RIGHT_ALIGN, 3); + PrintInfoScreenTextSmall(strBase, base_x+base_x_offset, base_y + base_offset*base_i); + + base_i++; + PrintInfoScreenTextSmall(gText_Stats_Defense, base_x, base_y + base_offset*base_i); + ConvertIntToDecimalStringN(strBase, gBaseStats[species].baseDefense, STR_CONV_MODE_RIGHT_ALIGN, 3); + PrintInfoScreenTextSmall(strBase, base_x+base_x_first_row, base_y + base_offset*base_i); + + PrintInfoScreenTextSmall(gText_Stats_SpDef, base_x+base_x_second_row, base_y + base_offset*base_i); + ConvertIntToDecimalStringN(strBase, gBaseStats[species].baseSpDefense, STR_CONV_MODE_RIGHT_ALIGN, 3); + PrintInfoScreenTextSmall(strBase, base_x+base_x_offset, base_y + base_offset*base_i); + base_i++; + } + else //EV increses + { + PrintInfoScreenTextSmall(gText_Stats_EVHP, base_x, base_y + base_offset*base_i); + ConvertIntToDecimalStringN(strBase, gBaseStats[species].evYield_HP, STR_CONV_MODE_RIGHT_ALIGN, 3); + PrintInfoScreenTextSmall(strBase, base_x+base_x_first_row, base_y + base_offset*base_i); + + PrintInfoScreenTextSmall(gText_Stats_EVSpeed, base_x+base_x_second_row, base_y + base_offset*base_i); + ConvertIntToDecimalStringN(strBase, gBaseStats[species].evYield_Speed, STR_CONV_MODE_RIGHT_ALIGN, 3); + PrintInfoScreenTextSmall(strBase, base_x+base_x_offset, base_y + base_offset*base_i); + + base_i++; + PrintInfoScreenTextSmall(gText_Stats_EVAttack, base_x, base_y + base_offset*base_i); + ConvertIntToDecimalStringN(strBase, gBaseStats[species].evYield_Attack, STR_CONV_MODE_RIGHT_ALIGN, 3); + PrintInfoScreenTextSmall(strBase, base_x+base_x_first_row, base_y + base_offset*base_i); + + PrintInfoScreenTextSmall(gText_Stats_EVSpAtk, base_x+base_x_second_row, base_y + base_offset*base_i); + ConvertIntToDecimalStringN(strBase, gBaseStats[species].evYield_SpAttack, STR_CONV_MODE_RIGHT_ALIGN, 3); + PrintInfoScreenTextSmall(strBase, base_x+base_x_offset, base_y + base_offset*base_i); + + base_i++; + PrintInfoScreenTextSmall(gText_Stats_EVDefense, base_x, base_y + base_offset*base_i); + ConvertIntToDecimalStringN(strBase, gBaseStats[species].evYield_Defense, STR_CONV_MODE_RIGHT_ALIGN, 3); + PrintInfoScreenTextSmall(strBase, base_x+base_x_first_row, base_y + base_offset*base_i); + + PrintInfoScreenTextSmall(gText_Stats_EVSpDef, base_x+base_x_second_row, base_y + base_offset*base_i); + ConvertIntToDecimalStringN(strBase, gBaseStats[species].evYield_SpDefense, STR_CONV_MODE_RIGHT_ALIGN, 3); + PrintInfoScreenTextSmall(strBase, base_x+base_x_offset, base_y + base_offset*base_i); + base_i++; + } + + + base_y = 86; + base_i = 0; + + if (gTasks[taskId].data[5] == 0) + { + //Exp + PrintInfoScreenTextSmall(gText_Stats_Exp, base_x, base_y + base_offset*base_i); + ConvertIntToDecimalStringN(gStringVar1, gBaseStats[species].expYield, STR_CONV_MODE_RIGHT_ALIGN, 3); + PrintInfoScreenTextSmall(gStringVar1, base_x + base_x_offset, base_y + base_offset*base_i); + base_i++; + + //friendship + PrintInfoScreenTextSmall(gText_Stats_Friendship, base_x, base_y + base_offset*base_i); + ConvertIntToDecimalStringN(strEV, gBaseStats[species].friendship, STR_CONV_MODE_RIGHT_ALIGN, 3); + align_x = GetStringRightAlignXOffset(0, strEV, total_x); + PrintInfoScreenTextSmall(strEV, align_x, base_y + base_offset*base_i); + base_i++; + + //Egg cycles + if (gBaseStats[species].eggGroup1 == EGG_GROUP_UNDISCOVERED || gBaseStats[species].eggGroup2 == EGG_GROUP_UNDISCOVERED) + { + PrintInfoScreenTextSmall(gText_Stats_EggCycles, base_x, base_y + base_offset*base_i); + PrintInfoScreenTextSmall(gText_ThreeDashes, 78, base_y + base_offset*base_i); + } + else + { + PrintInfoScreenTextSmall(gText_Stats_EggCycles, base_x, base_y + base_offset*base_i); + ConvertIntToDecimalStringN(strEV, gBaseStats[species].eggCycles, STR_CONV_MODE_RIGHT_ALIGN, 2); + align_x = GetStringRightAlignXOffset(0, strEV, total_x); + PrintInfoScreenTextSmall(strEV, align_x, base_y + base_offset*base_i); + } + base_i++; + + //Catch rate + PrintInfoScreenTextSmall(gText_Stats_Catch, base_x, base_y + base_offset*base_i); + ConvertIntToDecimalStringN(gStringVar1, gBaseStats[species].catchRate, STR_CONV_MODE_RIGHT_ALIGN, 3); + PrintInfoScreenTextSmall(gStringVar1, base_x + base_x_offset, base_y + base_offset*base_i); + base_i++; + + //Growth rate + PrintInfoScreenTextSmall(gText_Stats_Growthrate, base_x, base_y + base_offset*base_i); + switch (gBaseStats[species].growthRate) + { + case GROWTH_MEDIUM_FAST: + StringCopy(strEV, gText_Stats_MEDIUM_FAST); + break; + case GROWTH_ERRATIC: + StringCopy(strEV, gText_Stats_ERRATIC); + break; + case GROWTH_FLUCTUATING: + StringCopy(strEV, gText_Stats_FLUCTUATING); + break; + case GROWTH_MEDIUM_SLOW: + StringCopy(strEV, gText_Stats_MEDIUM_SLOW); + break; + case GROWTH_FAST: + StringCopy(strEV, gText_Stats_FAST); + break; + case GROWTH_SLOW: + StringCopy(strEV, gText_Stats_SLOW); + break; + default: + break; + } + align_x = GetStringRightAlignXOffset(0, strEV, total_x); + PrintInfoScreenTextSmall(strEV, align_x, base_y + base_offset*base_i); + } + else + { + base_i = 0; + //Egg group 1 + PrintInfoScreenTextSmall(gText_Stats_eggGroup_g1, base_x, base_y + base_offset*base_i); + switch (gBaseStats[species].eggGroup1) + { + case EGG_GROUP_MONSTER : + StringCopy(gStringVar1, gText_Stats_eggGroup_MONSTER); + break; + case EGG_GROUP_WATER_1 : + StringCopy(gStringVar1, gText_Stats_eggGroup_WATER_1); + break; + case EGG_GROUP_BUG : + StringCopy(gStringVar1, gText_Stats_eggGroup_BUG); + break; + case EGG_GROUP_FLYING : + StringCopy(gStringVar1, gText_Stats_eggGroup_FLYING); + break; + case EGG_GROUP_FIELD : + StringCopy(gStringVar1, gText_Stats_eggGroup_FIELD); + break; + case EGG_GROUP_FAIRY : + StringCopy(gStringVar1, gText_Stats_eggGroup_FAIRY); + break; + case EGG_GROUP_GRASS : + StringCopy(gStringVar1, gText_Stats_eggGroup_GRASS); + break; + case EGG_GROUP_HUMAN_LIKE : + StringCopy(gStringVar1, gText_Stats_eggGroup_HUMAN_LIKE); + break; + case EGG_GROUP_WATER_3 : + StringCopy(gStringVar1, gText_Stats_eggGroup_WATER_3); + break; + case EGG_GROUP_MINERAL : + StringCopy(gStringVar1, gText_Stats_eggGroup_MINERAL); + break; + case EGG_GROUP_AMORPHOUS : + StringCopy(gStringVar1, gText_Stats_eggGroup_AMORPHOUS); + break; + case EGG_GROUP_WATER_2 : + StringCopy(gStringVar1, gText_Stats_eggGroup_WATER_2); + break; + case EGG_GROUP_DITTO : + StringCopy(gStringVar1, gText_Stats_eggGroup_DITTO); + break; + case EGG_GROUP_DRAGON : + StringCopy(gStringVar1, gText_Stats_eggGroup_DRAGON); + break; + case EGG_GROUP_UNDISCOVERED: + StringCopy(gStringVar1, gText_Stats_eggGroup_UNDISCOVERED); + break; + } + PrintInfoScreenTextSmall(gStringVar1, base_x + 37, base_y + base_offset*base_i); + base_i++; + + //Egg group 2 + PrintInfoScreenTextSmall(gText_Stats_eggGroup_g2, base_x, base_y + base_offset*base_i); + switch (gBaseStats[species].eggGroup2) + { + case EGG_GROUP_MONSTER : + StringCopy(gStringVar1, gText_Stats_eggGroup_MONSTER); + break; + case EGG_GROUP_WATER_1 : + StringCopy(gStringVar1, gText_Stats_eggGroup_WATER_1); + break; + case EGG_GROUP_BUG : + StringCopy(gStringVar1, gText_Stats_eggGroup_BUG); + break; + case EGG_GROUP_FLYING : + StringCopy(gStringVar1, gText_Stats_eggGroup_FLYING); + break; + case EGG_GROUP_FIELD : + StringCopy(gStringVar1, gText_Stats_eggGroup_FIELD); + break; + case EGG_GROUP_FAIRY : + StringCopy(gStringVar1, gText_Stats_eggGroup_FAIRY); + break; + case EGG_GROUP_GRASS : + StringCopy(gStringVar1, gText_Stats_eggGroup_GRASS); + break; + case EGG_GROUP_HUMAN_LIKE : + StringCopy(gStringVar1, gText_Stats_eggGroup_HUMAN_LIKE); + break; + case EGG_GROUP_WATER_3 : + StringCopy(gStringVar1, gText_Stats_eggGroup_WATER_3); + break; + case EGG_GROUP_MINERAL : + StringCopy(gStringVar1, gText_Stats_eggGroup_MINERAL); + break; + case EGG_GROUP_AMORPHOUS : + StringCopy(gStringVar1, gText_Stats_eggGroup_AMORPHOUS); + break; + case EGG_GROUP_WATER_2 : + StringCopy(gStringVar1, gText_Stats_eggGroup_WATER_2); + break; + case EGG_GROUP_DITTO : + StringCopy(gStringVar1, gText_Stats_eggGroup_DITTO); + break; + case EGG_GROUP_DRAGON : + StringCopy(gStringVar1, gText_Stats_eggGroup_DRAGON); + break; + case EGG_GROUP_UNDISCOVERED: + StringCopy(gStringVar1, gText_Stats_eggGroup_UNDISCOVERED); + break; + } + PrintInfoScreenTextSmall(gStringVar1, base_x + 37, base_y + base_offset*base_i); + } + + + + //Abilitie(s) + if (gTasks[taskId].data[5] == 0) + { + ability0 = gBaseStats[species].abilities[0]; + PrintInfoScreenTextSmallWhite(gAbilityNames[ability0], abilities_x, abilities_y); + PrintInfoScreenTextSmall(gAbilityDescriptionPointers[ability0], abilities_x, abilities_y + 14); + + if (gBaseStats[species].abilities[1] != ABILITY_NONE) + { + PrintInfoScreenTextSmallWhite(gAbilityNames[gBaseStats[species].abilities[1]], abilities_x, abilities_y + 30); + PrintInfoScreenTextSmall(gAbilityDescriptionPointers[gBaseStats[species].abilities[1]], abilities_x, abilities_y + 44); + } + // }else{ //For PokemonExpansion + // ability0 = gBaseStats[species].abilityHidden; + // PrintInfoScreenTextSmallWhite(gAbilityNames[ability0], abilities_x, abilities_y); + // PrintInfoScreenTextSmall(gAbilityDescriptionPointers[ability0], abilities_x, abilities_y + 14); + } + +} +static void Task_SwitchScreensFromStatsScreen(u8 taskId) +{ + if (!gPaletteFade.active) + { + FreeSpriteTilesByTag(ITEM_TAG); //Destroy item icon + FreeSpritePaletteByTag(ITEM_TAG); //Destroy item icon + FreeSpriteOamMatrix(&gSprites[gTasks[taskId].data[3]]); //Destroy item icon + DestroySprite(&gSprites[gTasks[taskId].data[3]]); //Destroy item icon + 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_LoadAreaScreen; + break; + case 2: + gTasks[taskId].func = Task_LoadCryScreen; + break; + default: + gTasks[taskId].func = Task_LoadInfoScreen; + break; + } + } +} +static void Task_ExitStatsScreen(u8 taskId) +{ + if (!gPaletteFade.active) + { + FreeSpriteTilesByTag(ITEM_TAG); //Destroy item icon + FreeSpritePaletteByTag(ITEM_TAG); //Destroy item icon + FreeSpriteOamMatrix(&gSprites[gTasks[taskId].data[3]]); //Destroy item icon + DestroySprite(&gSprites[gTasks[taskId].data[3]]); //Destroy item icon + FreeMonIconPalettes(); //Destroy pokemon icon sprite + FreeAndDestroyMonIconSprite(&gSprites[gTasks[taskId].data[4]]); //Destroy pokemon icon sprite + + FreeAndDestroyMonPicSprite(gTasks[taskId].tMonSpriteId); + FreeInfoScreenWindowAndBgBuffers(); + DestroyTask(taskId); + } +} + +//Physical/Special Split from BE +// static u8 ShowSplitIcon(u32 split) +// { +// if (sPokedexListItem->splitIconSpriteId == 0xFF) +// sPokedexListItem->splitIconSpriteId = CreateSprite(&sSpriteTemplate_SplitIcons, 48, 129, 0); + +// gSprites[sPokedexListItem->splitIconSpriteId].invisible = FALSE; +// StartSpriteAnim(&gSprites[sPokedexListItem->splitIconSpriteId], split); +// return sPokedexListItem->splitIconSpriteId; +// } + +// static void DestroySplitIcon(void) +// { +// if (sPokedexListItem->splitIconSpriteId != 0xFF) +// DestroySprite(&gSprites[sPokedexListItem->splitIconSpriteId]); +// sPokedexListItem->splitIconSpriteId = 0xFF; +// } + diff --git a/src/pokedex_area_screen.c b/src/pokedex_area_screen.c index 7a3b38dc2a..656c952208 100755 --- a/src/pokedex_area_screen.c +++ b/src/pokedex_area_screen.c @@ -8,6 +8,7 @@ #include "menu.h" #include "overworld.h" #include "palette.h" +#include "pokedex.h" #include "pokedex_area_screen.h" #include "region_map.h" #include "roamer.h" @@ -726,10 +727,20 @@ static void Task_HandlePokedexAreaScreenInput(u8 taskId) if (JOY_NEW(B_BUTTON)) { gTasks[taskId].data[1] = 1; - PlaySE(SE_PC_OFF); + PlaySE(SE_DEX_PAGE); + } + else if (JOY_NEW(DPAD_LEFT) || (JOY_NEW(L_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + { + gTasks[taskId].data[1] = 1; + PlaySE(SE_DEX_PAGE); } else if (JOY_NEW(DPAD_RIGHT) || (JOY_NEW(R_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) { + if (!GetSetPokedexFlag(SpeciesToNationalPokedexNum(sPokedexAreaScreen->species), FLAG_GET_CAUGHT)) + { + PlaySE(SE_FAILURE); + return; + } gTasks[taskId].data[1] = 2; PlaySE(SE_DEX_PAGE); } diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index 012e133e66..3d97e77c00 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -851,13 +851,13 @@ static const union AnimCmd *const sSpriteAnimTable_MoveTypes[NUMBER_OF_MON_TYPES sSpriteAnim_CategoryTough, }; -static const struct CompressedSpriteSheet sSpriteSheet_MoveTypes = +const struct CompressedSpriteSheet sSpriteSheet_MoveTypes = { .data = gMoveTypes_Gfx, .size = (NUMBER_OF_MON_TYPES + CONTEST_CATEGORIES_COUNT) * 0x100, .tag = TAG_MOVE_TYPES }; -static const struct SpriteTemplate sSpriteTemplate_MoveTypes = +const struct SpriteTemplate sSpriteTemplate_MoveTypes = { .tileTag = TAG_MOVE_TYPES, .paletteTag = TAG_MOVE_TYPES, @@ -3752,7 +3752,7 @@ static void CreateMoveTypeIcons(void) } } -static void SetTypeSpritePosAndPal(u8 typeId, u8 x, u8 y, u8 spriteArrayId) +void SetTypeSpritePosAndPal(u8 typeId, u8 x, u8 y, u8 spriteArrayId) //HGSS_Ui { struct Sprite *sprite = &gSprites[sMonSummaryScreen->spriteIds[spriteArrayId]]; StartSpriteAnim(sprite, typeId); diff --git a/src/strings.c b/src/strings.c index fe5051d711..f8b3ede6de 100644 --- a/src/strings.c +++ b/src/strings.c @@ -1817,3 +1817,66 @@ const u8 gText_Answer[] = _("ANSWER"); const u8 gText_PokeBalls[] = _("POKé BALLS"); const u8 gText_Berry[] = _("BERRY"); const u8 gText_Berries[] = _("BERRIES"); + + +//HGSS_Ui PokedexPlus +const u8 gText_Stats_EV[] = _("EV: "); +const u8 gText_Stats_EV_HP[] = _("HP {PLUS} "); +const u8 gText_Stats_EV_Attack[] = _("ATTACK {PLUS} "); +const u8 gText_Stats_EV_Defense[] = _("DEFENSE {PLUS} "); +const u8 gText_Stats_EV_Speed[] = _("SPEED {PLUS} "); +const u8 gText_Stats_EV_SpAtk[] = _("SP. ATK {PLUS} "); +const u8 gText_Stats_EV_SpDef[] = _("SP. DEF {PLUS}"); +const u8 gText_Stats_HP[] = _("HP "); +const u8 gText_Stats_Attack[] = _("ATK "); +const u8 gText_Stats_Defense[] = _("DEF "); +const u8 gText_Stats_Speed[] = _("SPE "); +const u8 gText_Stats_SpAtk[] = _("SP.A "); +const u8 gText_Stats_SpDef[] = _("SP.D "); +const u8 gText_Stats_EVHP[] = _("EV HP"); +const u8 gText_Stats_EVAttack[] = _("EV ATK"); +const u8 gText_Stats_EVDefense[] = _("EV DEF"); +const u8 gText_Stats_EVSpeed[] = _("EV SPE"); +const u8 gText_Stats_EVSpAtk[] = _("EV SP.A"); +const u8 gText_Stats_EVSpDef[] = _("EV SP.D"); +const u8 gText_Stats_MoveSelectedMax[] = _("{STR_VAR_1} / {STR_VAR_2}"); +const u8 gText_Stats_MoveLevel[] = _("LVL"); +const u8 gText_Stats_Gender_0[] = _("♂"); +const u8 gText_Stats_Gender_12_5[] = _("♀ 1/7 ♂"); //_("♀ 12.5 / 87.5 ♂"); +const u8 gText_Stats_Gender_25[] = _("♀ 1/3 ♂"); //_("♀ 25 / 75 ♂"); +const u8 gText_Stats_Gender_50[] = _("♀ 1/1 ♂"); //_("♀ 50 / 50 ♂"); +const u8 gText_Stats_Gender_75[] = _("♀ 3/1 ♂"); //_("♀ 75 / 25 ♂"); +const u8 gText_Stats_Gender_87_5[] = _("♀ 7/1 ♂"); +const u8 gText_Stats_Gender_100[] = _("♀"); +const u8 gText_Stats_Catch[] = _("CATCH RATE: "); +const u8 gText_Stats_Exp[] = _("EXPERIENCE: "); +const u8 gText_Stats_EggCycles[] = _("EGG CYCLES: "); +const u8 gText_Stats_Growthrate[] = _("GROW: "); +const u8 gText_Stats_Friendship[] = _("FRIENDSHIP:" ); +const u8 gText_Stats_MEDIUM_FAST[] = _("MED. FAST"); +const u8 gText_Stats_ERRATIC[] = _("ERRATIC"); +const u8 gText_Stats_FLUCTUATING[] = _("FLUCTUATING"); +const u8 gText_Stats_MEDIUM_SLOW[] = _("MED. SLOW"); +const u8 gText_Stats_FAST[] = _("FAST"); +const u8 gText_Stats_SLOW[] = _("SLOW"); +const u8 gText_Stats_ContestHeart[] = _("H"); +const u8 gText_Stats_Minus[] = _("-"); +const u8 gText_Stats_eggGroup_g1[] = _("EGG G1:"); +const u8 gText_Stats_eggGroup_g2[] = _("EGG G2:"); +const u8 gText_Stats_eggGroup_MONSTER[] = _("MONSTER"); +const u8 gText_Stats_eggGroup_WATER_1[] = _("WATER 1"); +const u8 gText_Stats_eggGroup_BUG[] = _("BUG"); +const u8 gText_Stats_eggGroup_FLYING[] = _("FLYING"); +const u8 gText_Stats_eggGroup_FIELD[] = _("FIELD"); +const u8 gText_Stats_eggGroup_FAIRY[] = _("FAIR"); +const u8 gText_Stats_eggGroup_GRASS[] = _("GRASS"); +const u8 gText_Stats_eggGroup_HUMAN_LIKE[] = _("HUMAN LIKE"); +const u8 gText_Stats_eggGroup_WATER_3[] = _("WATER 3"); +const u8 gText_Stats_eggGroup_MINERAL[] = _("MINERAL"); +const u8 gText_Stats_eggGroup_AMORPHOUS[] = _("AMORPHOUS"); +const u8 gText_Stats_eggGroup_WATER_2[] = _("WATER 2"); +const u8 gText_Stats_eggGroup_DITTO[] = _("DITTO"); +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");