From eff21004f881ef7f658ebd197adab3dcec365bc5 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Tue, 11 Oct 2022 11:41:57 -0300 Subject: [PATCH] Option to separate dex letter filter by single letter --- include/constants/pokemon_config.h | 1 + include/strings.h | 29 ++++++++++ src/pokedex.c | 87 ++++++++++++++++++++++++++++++ src/strings.c | 29 ++++++++++ 4 files changed, 146 insertions(+) diff --git a/include/constants/pokemon_config.h b/include/constants/pokemon_config.h index 22825e40d8..01928ca6d5 100644 --- a/include/constants/pokemon_config.h +++ b/include/constants/pokemon_config.h @@ -10,6 +10,7 @@ #define P_KADABRA_EVERSTONE GEN_LATEST // Since Gen 4, Kadabra can evolve even when holding an Everstone. #define P_NIDORAN_M_DITTO_BREED GEN_LATEST // Since Gen 5, when Nidoran♂ breeds with Ditto it can produce Nidoran♀ offspring. Before, it would only yield male offspring. This change also applies to Volbeat. #define P_HIPPO_GENDER_DIFF_ICONS TRUE // If TRUE, will give Hippopotas and Hippowdon custom icons for their female forms. +#define P_DEX_SEARCH_SINGLE_LETTER TRUE // If TRUE, the Pokédex filter by name will be separated by letter, instead of groups of 3 letters. // Modifying the latest generation WILL change the saveblock due to Dex flags and will require a new save file. // Forms are kept based on the base species, Eg: Meowth and Persian will keep all of their forms, but Perrserker will not be available if P_GEN_8_POKEMON is set to FALSE. diff --git a/include/strings.h b/include/strings.h index 3736adf9b0..de71890579 100644 --- a/include/strings.h +++ b/include/strings.h @@ -1143,6 +1143,34 @@ extern const u8 gText_DexSortHeaviestTitle[]; extern const u8 gText_DexSortLightestTitle[]; extern const u8 gText_DexSortTallestTitle[]; extern const u8 gText_DexSortSmallestTitle[]; +#if P_DEX_SEARCH_SINGLE_LETTER == TRUE +extern const u8 gText_DexSearchAlphaA[]; +extern const u8 gText_DexSearchAlphaB[]; +extern const u8 gText_DexSearchAlphaC[]; +extern const u8 gText_DexSearchAlphaD[]; +extern const u8 gText_DexSearchAlphaE[]; +extern const u8 gText_DexSearchAlphaF[]; +extern const u8 gText_DexSearchAlphaG[]; +extern const u8 gText_DexSearchAlphaH[]; +extern const u8 gText_DexSearchAlphaI[]; +extern const u8 gText_DexSearchAlphaJ[]; +extern const u8 gText_DexSearchAlphaK[]; +extern const u8 gText_DexSearchAlphaL[]; +extern const u8 gText_DexSearchAlphaM[]; +extern const u8 gText_DexSearchAlphaN[]; +extern const u8 gText_DexSearchAlphaO[]; +extern const u8 gText_DexSearchAlphaP[]; +extern const u8 gText_DexSearchAlphaQ[]; +extern const u8 gText_DexSearchAlphaR[]; +extern const u8 gText_DexSearchAlphaS[]; +extern const u8 gText_DexSearchAlphaT[]; +extern const u8 gText_DexSearchAlphaU[]; +extern const u8 gText_DexSearchAlphaV[]; +extern const u8 gText_DexSearchAlphaW[]; +extern const u8 gText_DexSearchAlphaX[]; +extern const u8 gText_DexSearchAlphaY[]; +extern const u8 gText_DexSearchAlphaZ[]; +#else extern const u8 gText_DexSearchAlphaABC[]; extern const u8 gText_DexSearchAlphaDEF[]; extern const u8 gText_DexSearchAlphaGHI[]; @@ -1152,6 +1180,7 @@ extern const u8 gText_DexSearchAlphaPQR[]; extern const u8 gText_DexSearchAlphaSTU[]; extern const u8 gText_DexSearchAlphaVWX[]; extern const u8 gText_DexSearchAlphaYZ[]; +#endif extern const u8 gText_DexSearchColorRed[]; extern const u8 gText_DexSearchColorBlue[]; extern const u8 gText_DexSearchColorYellow[]; diff --git a/src/pokedex.c b/src/pokedex.c index 6ca365f169..a6a5827db4 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -82,6 +82,34 @@ enum enum { +#if P_DEX_SEARCH_SINGLE_LETTER == TRUE + NAME_A = 1, + NAME_B, + NAME_C, + NAME_D, + NAME_E, + NAME_F, + NAME_G, + NAME_H, + NAME_I, + NAME_J, + NAME_K, + NAME_L, + NAME_M, + NAME_N, + NAME_O, + NAME_P, + NAME_Q, + NAME_R, + NAME_S, + NAME_T, + NAME_U, + NAME_V, + NAME_W, + NAME_X, + NAME_Y, + NAME_Z, +#else NAME_ABC = 1, NAME_DEF, NAME_GHI, @@ -91,6 +119,7 @@ enum NAME_STU, NAME_VWX, NAME_YZ, +#endif }; // For scrolling search parameter @@ -993,6 +1022,34 @@ static const u8 sText_TenDashes2[] = _("----------"); static const u8 sLetterSearchRanges[][4] = { {}, // Name not specified, shouldn't be reached +#if P_DEX_SEARCH_SINGLE_LETTER == TRUE + [NAME_A] = {CHAR_A, 1, CHAR_a, 1}, + [NAME_B] = {CHAR_B, 1, CHAR_b, 1}, + [NAME_C] = {CHAR_C, 1, CHAR_c, 1}, + [NAME_D] = {CHAR_D, 1, CHAR_d, 1}, + [NAME_E] = {CHAR_E, 1, CHAR_e, 1}, + [NAME_F] = {CHAR_F, 1, CHAR_f, 1}, + [NAME_G] = {CHAR_G, 1, CHAR_g, 1}, + [NAME_H] = {CHAR_H, 1, CHAR_h, 1}, + [NAME_I] = {CHAR_I, 1, CHAR_i, 1}, + [NAME_J] = {CHAR_J, 1, CHAR_j, 1}, + [NAME_K] = {CHAR_K, 1, CHAR_k, 1}, + [NAME_L] = {CHAR_L, 1, CHAR_l, 1}, + [NAME_M] = {CHAR_M, 1, CHAR_m, 1}, + [NAME_N] = {CHAR_N, 1, CHAR_n, 1}, + [NAME_O] = {CHAR_O, 1, CHAR_o, 1}, + [NAME_P] = {CHAR_P, 1, CHAR_p, 1}, + [NAME_Q] = {CHAR_Q, 1, CHAR_q, 1}, + [NAME_R] = {CHAR_R, 1, CHAR_r, 1}, + [NAME_S] = {CHAR_S, 1, CHAR_s, 1}, + [NAME_T] = {CHAR_T, 1, CHAR_t, 1}, + [NAME_U] = {CHAR_U, 1, CHAR_u, 1}, + [NAME_V] = {CHAR_V, 1, CHAR_v, 1}, + [NAME_W] = {CHAR_W, 1, CHAR_w, 1}, + [NAME_X] = {CHAR_X, 1, CHAR_x, 1}, + [NAME_Y] = {CHAR_Y, 1, CHAR_y, 1}, + [NAME_Z] = {CHAR_Z, 1, CHAR_z, 1}, +#else [NAME_ABC] = {CHAR_A, 3, CHAR_a, 3}, [NAME_DEF] = {CHAR_D, 3, CHAR_d, 3}, [NAME_GHI] = {CHAR_G, 3, CHAR_g, 3}, @@ -1002,6 +1059,7 @@ static const u8 sLetterSearchRanges[][4] = [NAME_STU] = {CHAR_S, 3, CHAR_s, 3}, [NAME_VWX] = {CHAR_V, 3, CHAR_v, 3}, [NAME_YZ] = {CHAR_Y, 2, CHAR_y, 2}, +#endif }; #define LETTER_IN_RANGE_UPPER(letter, range) \ @@ -1346,6 +1404,34 @@ static const struct SearchOptionText sDexOrderOptions[] = static const struct SearchOptionText sDexSearchNameOptions[] = { {gText_DexEmptyString, gText_DexSearchDontSpecify}, +#if P_DEX_SEARCH_SINGLE_LETTER == TRUE + [NAME_A] = {gText_DexEmptyString, gText_DexSearchAlphaA}, + [NAME_B] = {gText_DexEmptyString, gText_DexSearchAlphaB}, + [NAME_C] = {gText_DexEmptyString, gText_DexSearchAlphaC}, + [NAME_D] = {gText_DexEmptyString, gText_DexSearchAlphaD}, + [NAME_E] = {gText_DexEmptyString, gText_DexSearchAlphaE}, + [NAME_F] = {gText_DexEmptyString, gText_DexSearchAlphaF}, + [NAME_G] = {gText_DexEmptyString, gText_DexSearchAlphaG}, + [NAME_H] = {gText_DexEmptyString, gText_DexSearchAlphaH}, + [NAME_I] = {gText_DexEmptyString, gText_DexSearchAlphaI}, + [NAME_J] = {gText_DexEmptyString, gText_DexSearchAlphaJ}, + [NAME_K] = {gText_DexEmptyString, gText_DexSearchAlphaK}, + [NAME_L] = {gText_DexEmptyString, gText_DexSearchAlphaL}, + [NAME_M] = {gText_DexEmptyString, gText_DexSearchAlphaM}, + [NAME_N] = {gText_DexEmptyString, gText_DexSearchAlphaN}, + [NAME_O] = {gText_DexEmptyString, gText_DexSearchAlphaO}, + [NAME_P] = {gText_DexEmptyString, gText_DexSearchAlphaP}, + [NAME_Q] = {gText_DexEmptyString, gText_DexSearchAlphaQ}, + [NAME_R] = {gText_DexEmptyString, gText_DexSearchAlphaR}, + [NAME_S] = {gText_DexEmptyString, gText_DexSearchAlphaS}, + [NAME_T] = {gText_DexEmptyString, gText_DexSearchAlphaT}, + [NAME_U] = {gText_DexEmptyString, gText_DexSearchAlphaU}, + [NAME_V] = {gText_DexEmptyString, gText_DexSearchAlphaV}, + [NAME_W] = {gText_DexEmptyString, gText_DexSearchAlphaW}, + [NAME_X] = {gText_DexEmptyString, gText_DexSearchAlphaX}, + [NAME_Y] = {gText_DexEmptyString, gText_DexSearchAlphaY}, + [NAME_Z] = {gText_DexEmptyString, gText_DexSearchAlphaZ}, +#else [NAME_ABC] = {gText_DexEmptyString, gText_DexSearchAlphaABC}, [NAME_DEF] = {gText_DexEmptyString, gText_DexSearchAlphaDEF}, [NAME_GHI] = {gText_DexEmptyString, gText_DexSearchAlphaGHI}, @@ -1355,6 +1441,7 @@ static const struct SearchOptionText sDexSearchNameOptions[] = [NAME_STU] = {gText_DexEmptyString, gText_DexSearchAlphaSTU}, [NAME_VWX] = {gText_DexEmptyString, gText_DexSearchAlphaVWX}, [NAME_YZ] = {gText_DexEmptyString, gText_DexSearchAlphaYZ}, +#endif {}, }; diff --git a/src/strings.c b/src/strings.c index 4452fd8256..8f2c443434 100644 --- a/src/strings.c +++ b/src/strings.c @@ -131,6 +131,34 @@ const u8 gText_DexSortHeaviestTitle[] = _("HEAVIEST MODE"); const u8 gText_DexSortLightestTitle[] = _("LIGHTEST MODE"); const u8 gText_DexSortTallestTitle[] = _("TALLEST MODE"); const u8 gText_DexSortSmallestTitle[] = _("SMALLEST MODE"); +#if P_DEX_SEARCH_SINGLE_LETTER == TRUE +const u8 gText_DexSearchAlphaA[] = _("A"); +const u8 gText_DexSearchAlphaB[] = _("B"); +const u8 gText_DexSearchAlphaC[] = _("C"); +const u8 gText_DexSearchAlphaD[] = _("D"); +const u8 gText_DexSearchAlphaE[] = _("E"); +const u8 gText_DexSearchAlphaF[] = _("F"); +const u8 gText_DexSearchAlphaG[] = _("G"); +const u8 gText_DexSearchAlphaH[] = _("H"); +const u8 gText_DexSearchAlphaI[] = _("I"); +const u8 gText_DexSearchAlphaJ[] = _("J"); +const u8 gText_DexSearchAlphaK[] = _("K"); +const u8 gText_DexSearchAlphaL[] = _("L"); +const u8 gText_DexSearchAlphaM[] = _("M"); +const u8 gText_DexSearchAlphaN[] = _("N"); +const u8 gText_DexSearchAlphaO[] = _("O"); +const u8 gText_DexSearchAlphaP[] = _("P"); +const u8 gText_DexSearchAlphaQ[] = _("Q"); +const u8 gText_DexSearchAlphaR[] = _("R"); +const u8 gText_DexSearchAlphaS[] = _("S"); +const u8 gText_DexSearchAlphaT[] = _("T"); +const u8 gText_DexSearchAlphaU[] = _("U"); +const u8 gText_DexSearchAlphaV[] = _("V"); +const u8 gText_DexSearchAlphaW[] = _("W"); +const u8 gText_DexSearchAlphaX[] = _("X"); +const u8 gText_DexSearchAlphaY[] = _("Y"); +const u8 gText_DexSearchAlphaZ[] = _("Z"); +#else const u8 gText_DexSearchAlphaABC[] = _("ABC"); const u8 gText_DexSearchAlphaDEF[] = _("DEF"); const u8 gText_DexSearchAlphaGHI[] = _("GHI"); @@ -140,6 +168,7 @@ const u8 gText_DexSearchAlphaPQR[] = _("PQR"); const u8 gText_DexSearchAlphaSTU[] = _("STU"); const u8 gText_DexSearchAlphaVWX[] = _("VWX"); const u8 gText_DexSearchAlphaYZ[] = _("YZ"); +#endif const u8 gText_DexSearchColorRed[] = _("RED"); const u8 gText_DexSearchColorBlue[] = _("BLUE"); const u8 gText_DexSearchColorYellow[] = _("YELLOW");