From 8b37b4292a17c67a4711b90aa0e83d63acf26af6 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 9 May 2023 22:04:26 -0400 Subject: [PATCH 01/43] Document DrawFootprint --- include/gba/defines.h | 17 +++++++++++++---- src/pokedex.c | 40 +++++++++++++++++++++++++++------------- 2 files changed, 40 insertions(+), 17 deletions(-) diff --git a/include/gba/defines.h b/include/gba/defines.h index 82caf56e68..f2ea0899d9 100644 --- a/include/gba/defines.h +++ b/include/gba/defines.h @@ -64,14 +64,23 @@ #define ROM_HEADER_SIZE 0xC0 +// Dimensions of a tile in pixels +#define TILE_WIDTH 8 +#define TILE_HEIGHT 8 + +// Dimensions of the GBA screen in pixels #define DISPLAY_WIDTH 240 #define DISPLAY_HEIGHT 160 -#define DISPLAY_TILE_WIDTH (DISPLAY_WIDTH / 8) -#define DISPLAY_TILE_HEIGHT (DISPLAY_HEIGHT / 8) +// Dimensions of the GBA screen in tiles +#define DISPLAY_TILE_WIDTH (DISPLAY_WIDTH / TILE_WIDTH) +#define DISPLAY_TILE_HEIGHT (DISPLAY_HEIGHT / TILE_HEIGHT) -#define TILE_SIZE_4BPP 32 -#define TILE_SIZE_8BPP 64 +// Size of different tile formats in bytes +#define TILE_SIZE(bpp)((bpp) * TILE_WIDTH * TILE_HEIGHT / 8) +#define TILE_SIZE_1BPP TILE_SIZE(1) // 8 +#define TILE_SIZE_4BPP TILE_SIZE(4) // 32 +#define TILE_SIZE_8BPP TILE_SIZE(8) // 64 #define TILE_OFFSET_4BPP(n) ((n) * TILE_SIZE_4BPP) #define TILE_OFFSET_8BPP(n) ((n) * TILE_SIZE_8BPP) diff --git a/src/pokedex.c b/src/pokedex.c index 88558d6f2c..af96b88771 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -93,6 +93,13 @@ enum NAME_YZ, }; +enum { + WIN_INFO, + WIN_FOOTPRINT, + WIN_CRY_WAVE, + WIN_VU_METER, +}; + // For scrolling search parameter #define MAX_SEARCH_PARAM_ON_SCREEN 6 #define MAX_SEARCH_PARAM_CURSOR_POS (MAX_SEARCH_PARAM_ON_SCREEN - 1) @@ -888,11 +895,6 @@ static const struct BgTemplate sInfoScreen_BgTemplate[] = } }; -#define WIN_INFO 0 -#define WIN_FOOTPRINT 1 -#define WIN_CRY_WAVE 2 -#define WIN_VU_METER 3 - static const struct WindowTemplate sInfoScreen_WindowTemplates[] = { [WIN_INFO] = @@ -4570,26 +4572,38 @@ static void PrintDecimalNum(u8 windowId, u16 num, u8 left, u8 top) PrintInfoSubMenuText(windowId, str, left, top); } +// The footprints are drawn on WIN_FOOTPRINT, which uses BG palette 15 (loaded with graphics/text_window/message_box.gbapal) +// The footprint pixels are stored as 1BPP, and set to the below color index in this palette when converted to 4BPP. +#define FOOTPRINT_COLOR_IDX 2 + +#define NUM_FOOTPRINT_TILES 4 + static void DrawFootprint(u8 windowId, u16 dexNum) { - u8 footprint[32 * 4]; + u8 footprint4bpp[TILE_SIZE_4BPP * NUM_FOOTPRINT_TILES]; const u8 * footprintGfx = gMonFootprintTable[NationalPokedexNumToSpecies(dexNum)]; u16 tileIdx = 0; u16 i, j; - for (i = 0; i < 32; i++) + for (i = 0; i < TILE_SIZE_1BPP * NUM_FOOTPRINT_TILES; i++) { - u8 tile = footprintGfx[i]; + u8 footprint1bpp = footprintGfx[i]; + + // Convert the 8 pixels in the above 1BPP byte to 4BPP. + // Each iteration creates one 4BPP byte (2 pixels), + // so we need 4 iterations to do all 8 pixels. for (j = 0; j < 4; j++) { - u8 value = ((tile >> (2 * j)) & 1 ? 2 : 0); - if (tile & (2 << (2 * j))) - value |= 0x20; - footprint[tileIdx] = value; + u8 tile = 0; + if (footprint1bpp & (1 << (2 * j))) + tile |= FOOTPRINT_COLOR_IDX; // Set pixel + if (footprint1bpp & (2 << (2 * j))) + tile |= FOOTPRINT_COLOR_IDX << 4; // Set pixel + footprint4bpp[tileIdx] = tile; tileIdx++; } } - CopyToWindowPixelBuffer(windowId, footprint, sizeof(footprint), 0); + CopyToWindowPixelBuffer(windowId, footprint4bpp, sizeof(footprint4bpp), 0); } // Unused Ruby/Sapphire function. From 41ac28b2107e409a7ba39079a8435cb02a21eda6 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 9 May 2023 22:43:48 -0400 Subject: [PATCH 02/43] Index pokemon footprint pngs --- graphics/pokemon/abra/footprint.png | Bin 94 -> 108 bytes graphics/pokemon/absol/footprint.png | Bin 102 -> 119 bytes graphics/pokemon/aerodactyl/footprint.png | Bin 92 -> 108 bytes graphics/pokemon/aggron/footprint.png | Bin 102 -> 119 bytes graphics/pokemon/aipom/footprint.png | Bin 86 -> 102 bytes graphics/pokemon/alakazam/footprint.png | Bin 95 -> 112 bytes graphics/pokemon/altaria/footprint.png | Bin 100 -> 118 bytes graphics/pokemon/ampharos/footprint.png | Bin 90 -> 106 bytes graphics/pokemon/anorith/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/arbok/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/arcanine/footprint.png | Bin 99 -> 114 bytes graphics/pokemon/ariados/footprint.png | Bin 86 -> 100 bytes graphics/pokemon/armaldo/footprint.png | Bin 95 -> 112 bytes graphics/pokemon/aron/footprint.png | Bin 90 -> 103 bytes graphics/pokemon/articuno/footprint.png | Bin 106 -> 122 bytes graphics/pokemon/azumarill/footprint.png | Bin 88 -> 101 bytes graphics/pokemon/azurill/footprint.png | Bin 84 -> 99 bytes graphics/pokemon/bagon/footprint.png | Bin 91 -> 106 bytes graphics/pokemon/baltoy/footprint.png | Bin 76 -> 92 bytes graphics/pokemon/banette/footprint.png | Bin 85 -> 98 bytes graphics/pokemon/barboach/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/bayleef/footprint.png | Bin 87 -> 103 bytes graphics/pokemon/beautifly/footprint.png | Bin 89 -> 103 bytes graphics/pokemon/beedrill/footprint.png | Bin 84 -> 99 bytes graphics/pokemon/beldum/footprint.png | Bin 82 -> 96 bytes graphics/pokemon/bellossom/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/bellsprout/footprint.png | Bin 109 -> 122 bytes graphics/pokemon/blastoise/footprint.png | Bin 98 -> 115 bytes graphics/pokemon/blaziken/footprint.png | Bin 116 -> 132 bytes graphics/pokemon/blissey/footprint.png | Bin 96 -> 111 bytes graphics/pokemon/breloom/footprint.png | Bin 94 -> 110 bytes graphics/pokemon/bulbasaur/footprint.png | Bin 88 -> 102 bytes graphics/pokemon/butterfree/footprint.png | Bin 87 -> 102 bytes graphics/pokemon/cacnea/footprint.png | Bin 81 -> 95 bytes graphics/pokemon/cacturne/footprint.png | Bin 87 -> 102 bytes graphics/pokemon/camerupt/footprint.png | Bin 109 -> 125 bytes graphics/pokemon/carvanha/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/cascoon/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/castform/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/caterpie/footprint.png | Bin 81 -> 96 bytes graphics/pokemon/celebi/footprint.png | Bin 88 -> 101 bytes graphics/pokemon/chansey/footprint.png | Bin 88 -> 103 bytes graphics/pokemon/charizard/footprint.png | Bin 95 -> 110 bytes graphics/pokemon/charmander/footprint.png | Bin 90 -> 106 bytes graphics/pokemon/charmeleon/footprint.png | Bin 95 -> 109 bytes graphics/pokemon/chikorita/footprint.png | Bin 81 -> 97 bytes graphics/pokemon/chimecho/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/chinchou/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/clamperl/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/claydol/footprint.png | Bin 80 -> 95 bytes graphics/pokemon/clefable/footprint.png | Bin 101 -> 114 bytes graphics/pokemon/clefairy/footprint.png | Bin 85 -> 100 bytes graphics/pokemon/cleffa/footprint.png | Bin 79 -> 95 bytes graphics/pokemon/cloyster/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/combusken/footprint.png | Bin 109 -> 123 bytes graphics/pokemon/corphish/footprint.png | Bin 102 -> 116 bytes graphics/pokemon/corsola/footprint.png | Bin 81 -> 96 bytes graphics/pokemon/cradily/footprint.png | Bin 98 -> 116 bytes graphics/pokemon/crawdaunt/footprint.png | Bin 104 -> 119 bytes graphics/pokemon/crobat/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/croconaw/footprint.png | Bin 85 -> 101 bytes graphics/pokemon/cubone/footprint.png | Bin 87 -> 102 bytes graphics/pokemon/cyndaquil/footprint.png | Bin 84 -> 99 bytes graphics/pokemon/delcatty/footprint.png | Bin 107 -> 121 bytes graphics/pokemon/delibird/footprint.png | Bin 90 -> 105 bytes graphics/pokemon/deoxys/footprint.png | Bin 84 -> 97 bytes graphics/pokemon/dewgong/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/diglett/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/ditto/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/dodrio/footprint.png | Bin 110 -> 125 bytes graphics/pokemon/doduo/footprint.png | Bin 101 -> 114 bytes graphics/pokemon/donphan/footprint.png | Bin 96 -> 113 bytes graphics/pokemon/dragonair/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/dragonite/footprint.png | Bin 92 -> 108 bytes graphics/pokemon/dratini/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/drowzee/footprint.png | Bin 87 -> 103 bytes graphics/pokemon/dugtrio/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/dunsparce/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/dusclops/footprint.png | Bin 106 -> 124 bytes graphics/pokemon/duskull/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/dustox/footprint.png | Bin 92 -> 107 bytes graphics/pokemon/eevee/footprint.png | Bin 96 -> 111 bytes graphics/pokemon/ekans/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/electabuzz/footprint.png | Bin 93 -> 109 bytes graphics/pokemon/electrike/footprint.png | Bin 101 -> 115 bytes graphics/pokemon/electrode/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/elekid/footprint.png | Bin 89 -> 102 bytes graphics/pokemon/entei/footprint.png | Bin 101 -> 117 bytes graphics/pokemon/espeon/footprint.png | Bin 85 -> 100 bytes graphics/pokemon/exeggcute/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/exeggutor/footprint.png | Bin 92 -> 108 bytes graphics/pokemon/exploud/footprint.png | Bin 108 -> 125 bytes graphics/pokemon/farfetchd/footprint.png | Bin 99 -> 115 bytes graphics/pokemon/fearow/footprint.png | Bin 102 -> 118 bytes graphics/pokemon/feebas/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/feraligatr/footprint.png | Bin 94 -> 111 bytes graphics/pokemon/flaaffy/footprint.png | Bin 81 -> 97 bytes graphics/pokemon/flareon/footprint.png | Bin 103 -> 118 bytes graphics/pokemon/flygon/footprint.png | Bin 92 -> 110 bytes graphics/pokemon/forretress/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/furret/footprint.png | Bin 87 -> 100 bytes graphics/pokemon/gardevoir/footprint.png | Bin 86 -> 99 bytes graphics/pokemon/gastly/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/gengar/footprint.png | Bin 91 -> 106 bytes graphics/pokemon/geodude/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/girafarig/footprint.png | Bin 83 -> 97 bytes graphics/pokemon/glalie/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/gligar/footprint.png | Bin 92 -> 105 bytes graphics/pokemon/gloom/footprint.png | Bin 90 -> 104 bytes graphics/pokemon/golbat/footprint.png | Bin 94 -> 109 bytes graphics/pokemon/goldeen/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/golduck/footprint.png | Bin 98 -> 113 bytes graphics/pokemon/golem/footprint.png | Bin 97 -> 114 bytes graphics/pokemon/gorebyss/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/granbull/footprint.png | Bin 93 -> 109 bytes graphics/pokemon/graveler/footprint.png | Bin 91 -> 107 bytes graphics/pokemon/grimer/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/groudon/footprint.png | Bin 103 -> 121 bytes graphics/pokemon/grovyle/footprint.png | Bin 100 -> 114 bytes graphics/pokemon/growlithe/footprint.png | Bin 91 -> 104 bytes graphics/pokemon/grumpig/footprint.png | Bin 96 -> 113 bytes graphics/pokemon/gulpin/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/gyarados/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/hariyama/footprint.png | Bin 94 -> 113 bytes graphics/pokemon/haunter/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/heracross/footprint.png | Bin 92 -> 106 bytes graphics/pokemon/hitmonchan/footprint.png | Bin 90 -> 106 bytes graphics/pokemon/hitmonlee/footprint.png | Bin 104 -> 121 bytes graphics/pokemon/hitmontop/footprint.png | Bin 103 -> 119 bytes graphics/pokemon/ho_oh/footprint.png | Bin 95 -> 110 bytes graphics/pokemon/hoothoot/footprint.png | Bin 102 -> 115 bytes graphics/pokemon/hoppip/footprint.png | Bin 84 -> 99 bytes graphics/pokemon/horsea/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/houndoom/footprint.png | Bin 103 -> 118 bytes graphics/pokemon/houndour/footprint.png | Bin 91 -> 104 bytes graphics/pokemon/huntail/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/hypno/footprint.png | Bin 95 -> 111 bytes graphics/pokemon/igglybuff/footprint.png | Bin 85 -> 100 bytes graphics/pokemon/illumise/footprint.png | Bin 84 -> 100 bytes graphics/pokemon/ivysaur/footprint.png | Bin 96 -> 112 bytes graphics/pokemon/jigglypuff/footprint.png | Bin 85 -> 101 bytes graphics/pokemon/jirachi/footprint.png | Bin 83 -> 98 bytes graphics/pokemon/jolteon/footprint.png | Bin 91 -> 107 bytes graphics/pokemon/jumpluff/footprint.png | Bin 84 -> 100 bytes graphics/pokemon/jynx/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/kabuto/footprint.png | Bin 76 -> 92 bytes graphics/pokemon/kabutops/footprint.png | Bin 94 -> 109 bytes graphics/pokemon/kadabra/footprint.png | Bin 100 -> 117 bytes graphics/pokemon/kakuna/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/kangaskhan/footprint.png | Bin 96 -> 111 bytes graphics/pokemon/kecleon/footprint.png | Bin 96 -> 108 bytes graphics/pokemon/kingdra/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/kingler/footprint.png | Bin 93 -> 106 bytes graphics/pokemon/kirlia/footprint.png | Bin 81 -> 96 bytes graphics/pokemon/koffing/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/krabby/footprint.png | Bin 86 -> 101 bytes graphics/pokemon/kyogre/footprint.png | Bin 104 -> 121 bytes graphics/pokemon/lairon/footprint.png | Bin 101 -> 116 bytes graphics/pokemon/lanturn/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/lapras/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/larvitar/footprint.png | Bin 82 -> 96 bytes graphics/pokemon/latias/footprint.png | Bin 104 -> 119 bytes graphics/pokemon/latios/footprint.png | Bin 105 -> 121 bytes graphics/pokemon/ledian/footprint.png | Bin 94 -> 109 bytes graphics/pokemon/ledyba/footprint.png | Bin 99 -> 112 bytes graphics/pokemon/lickitung/footprint.png | Bin 102 -> 117 bytes graphics/pokemon/lileep/footprint.png | Bin 99 -> 112 bytes graphics/pokemon/linoone/footprint.png | Bin 90 -> 107 bytes graphics/pokemon/lombre/footprint.png | Bin 110 -> 124 bytes graphics/pokemon/lotad/footprint.png | Bin 88 -> 103 bytes graphics/pokemon/loudred/footprint.png | Bin 105 -> 120 bytes graphics/pokemon/ludicolo/footprint.png | Bin 94 -> 111 bytes graphics/pokemon/lugia/footprint.png | Bin 95 -> 111 bytes graphics/pokemon/lunatone/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/luvdisc/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/machamp/footprint.png | Bin 98 -> 115 bytes graphics/pokemon/machoke/footprint.png | Bin 97 -> 112 bytes graphics/pokemon/machop/footprint.png | Bin 90 -> 106 bytes graphics/pokemon/magby/footprint.png | Bin 88 -> 102 bytes graphics/pokemon/magcargo/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/magikarp/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/magmar/footprint.png | Bin 94 -> 109 bytes graphics/pokemon/magnemite/footprint.png | Bin 83 -> 98 bytes graphics/pokemon/magneton/footprint.png | Bin 90 -> 104 bytes graphics/pokemon/makuhita/footprint.png | Bin 97 -> 112 bytes graphics/pokemon/manectric/footprint.png | Bin 100 -> 117 bytes graphics/pokemon/mankey/footprint.png | Bin 110 -> 125 bytes graphics/pokemon/mantine/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/mareep/footprint.png | Bin 84 -> 100 bytes graphics/pokemon/marill/footprint.png | Bin 85 -> 100 bytes graphics/pokemon/marowak/footprint.png | Bin 86 -> 102 bytes graphics/pokemon/marshtomp/footprint.png | Bin 90 -> 106 bytes graphics/pokemon/masquerain/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/mawile/footprint.png | Bin 102 -> 116 bytes graphics/pokemon/medicham/footprint.png | Bin 92 -> 107 bytes graphics/pokemon/meditite/footprint.png | Bin 89 -> 104 bytes graphics/pokemon/meganium/footprint.png | Bin 97 -> 111 bytes graphics/pokemon/meowth/footprint.png | Bin 94 -> 109 bytes graphics/pokemon/metagross/footprint.png | Bin 91 -> 108 bytes graphics/pokemon/metang/footprint.png | Bin 92 -> 106 bytes graphics/pokemon/metapod/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/mew/footprint.png | Bin 88 -> 103 bytes graphics/pokemon/mewtwo/footprint.png | Bin 100 -> 117 bytes graphics/pokemon/mightyena/footprint.png | Bin 113 -> 129 bytes graphics/pokemon/milotic/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/miltank/footprint.png | Bin 86 -> 100 bytes graphics/pokemon/minun/footprint.png | Bin 86 -> 101 bytes graphics/pokemon/misdreavus/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/moltres/footprint.png | Bin 101 -> 116 bytes graphics/pokemon/mr_mime/footprint.png | Bin 89 -> 105 bytes graphics/pokemon/mudkip/footprint.png | Bin 90 -> 105 bytes graphics/pokemon/muk/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/murkrow/footprint.png | Bin 94 -> 109 bytes graphics/pokemon/natu/footprint.png | Bin 84 -> 99 bytes graphics/pokemon/nidoking/footprint.png | Bin 94 -> 111 bytes graphics/pokemon/nidoqueen/footprint.png | Bin 98 -> 114 bytes graphics/pokemon/nidoran_f/footprint.png | Bin 87 -> 102 bytes graphics/pokemon/nidoran_m/footprint.png | Bin 89 -> 104 bytes graphics/pokemon/nidorina/footprint.png | Bin 94 -> 110 bytes graphics/pokemon/nidorino/footprint.png | Bin 100 -> 114 bytes graphics/pokemon/nincada/footprint.png | Bin 92 -> 106 bytes graphics/pokemon/ninetales/footprint.png | Bin 96 -> 110 bytes graphics/pokemon/ninjask/footprint.png | Bin 91 -> 107 bytes graphics/pokemon/noctowl/footprint.png | Bin 101 -> 118 bytes graphics/pokemon/nosepass/footprint.png | Bin 96 -> 111 bytes graphics/pokemon/numel/footprint.png | Bin 87 -> 102 bytes graphics/pokemon/nuzleaf/footprint.png | Bin 101 -> 115 bytes graphics/pokemon/octillery/footprint.png | Bin 101 -> 114 bytes graphics/pokemon/oddish/footprint.png | Bin 81 -> 97 bytes graphics/pokemon/omanyte/footprint.png | Bin 80 -> 96 bytes graphics/pokemon/omastar/footprint.png | Bin 85 -> 101 bytes graphics/pokemon/onix/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/paras/footprint.png | Bin 83 -> 99 bytes graphics/pokemon/parasect/footprint.png | Bin 85 -> 99 bytes graphics/pokemon/pelipper/footprint.png | Bin 102 -> 119 bytes graphics/pokemon/persian/footprint.png | Bin 98 -> 114 bytes graphics/pokemon/phanpy/footprint.png | Bin 85 -> 100 bytes graphics/pokemon/pichu/footprint.png | Bin 85 -> 99 bytes graphics/pokemon/pidgeot/footprint.png | Bin 100 -> 115 bytes graphics/pokemon/pidgeotto/footprint.png | Bin 93 -> 108 bytes graphics/pokemon/pidgey/footprint.png | Bin 94 -> 109 bytes graphics/pokemon/pikachu/footprint.png | Bin 84 -> 99 bytes graphics/pokemon/piloswine/footprint.png | Bin 94 -> 109 bytes graphics/pokemon/pineco/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/pinsir/footprint.png | Bin 93 -> 106 bytes graphics/pokemon/plusle/footprint.png | Bin 86 -> 101 bytes graphics/pokemon/politoed/footprint.png | Bin 95 -> 112 bytes graphics/pokemon/poliwag/footprint.png | Bin 86 -> 101 bytes graphics/pokemon/poliwhirl/footprint.png | Bin 90 -> 105 bytes graphics/pokemon/poliwrath/footprint.png | Bin 92 -> 107 bytes graphics/pokemon/ponyta/footprint.png | Bin 90 -> 105 bytes graphics/pokemon/poochyena/footprint.png | Bin 107 -> 119 bytes graphics/pokemon/porygon/footprint.png | Bin 88 -> 103 bytes graphics/pokemon/porygon2/footprint.png | Bin 87 -> 103 bytes graphics/pokemon/primeape/footprint.png | Bin 99 -> 115 bytes graphics/pokemon/psyduck/footprint.png | Bin 95 -> 109 bytes graphics/pokemon/pupitar/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/quagsire/footprint.png | Bin 88 -> 105 bytes graphics/pokemon/question_mark/footprint.png | Bin 110 -> 127 bytes graphics/pokemon/quilava/footprint.png | Bin 85 -> 100 bytes graphics/pokemon/qwilfish/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/raichu/footprint.png | Bin 87 -> 103 bytes graphics/pokemon/raikou/footprint.png | Bin 95 -> 110 bytes graphics/pokemon/ralts/footprint.png | Bin 76 -> 92 bytes graphics/pokemon/rapidash/footprint.png | Bin 94 -> 109 bytes graphics/pokemon/raticate/footprint.png | Bin 95 -> 110 bytes graphics/pokemon/rattata/footprint.png | Bin 88 -> 101 bytes graphics/pokemon/rayquaza/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/regice/footprint.png | Bin 76 -> 92 bytes graphics/pokemon/regirock/footprint.png | Bin 100 -> 117 bytes graphics/pokemon/registeel/footprint.png | Bin 105 -> 122 bytes graphics/pokemon/relicanth/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/remoraid/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/rhydon/footprint.png | Bin 97 -> 114 bytes graphics/pokemon/rhyhorn/footprint.png | Bin 85 -> 101 bytes graphics/pokemon/roselia/footprint.png | Bin 82 -> 95 bytes graphics/pokemon/sableye/footprint.png | Bin 84 -> 99 bytes graphics/pokemon/salamence/footprint.png | Bin 102 -> 119 bytes graphics/pokemon/sandshrew/footprint.png | Bin 91 -> 106 bytes graphics/pokemon/sandslash/footprint.png | Bin 90 -> 106 bytes graphics/pokemon/sceptile/footprint.png | Bin 99 -> 116 bytes graphics/pokemon/scizor/footprint.png | Bin 87 -> 105 bytes graphics/pokemon/scyther/footprint.png | Bin 99 -> 114 bytes graphics/pokemon/seadra/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/seaking/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/sealeo/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/seedot/footprint.png | Bin 90 -> 105 bytes graphics/pokemon/seel/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/sentret/footprint.png | Bin 85 -> 100 bytes graphics/pokemon/seviper/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/sharpedo/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/shedinja/footprint.png | Bin 92 -> 107 bytes graphics/pokemon/shelgon/footprint.png | Bin 88 -> 103 bytes graphics/pokemon/shellder/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/shiftry/footprint.png | Bin 76 -> 92 bytes graphics/pokemon/shroomish/footprint.png | Bin 89 -> 104 bytes graphics/pokemon/shuckle/footprint.png | Bin 86 -> 101 bytes graphics/pokemon/shuppet/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/silcoon/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/skarmory/footprint.png | Bin 101 -> 116 bytes graphics/pokemon/skiploom/footprint.png | Bin 87 -> 102 bytes graphics/pokemon/skitty/footprint.png | Bin 106 -> 118 bytes graphics/pokemon/slaking/footprint.png | Bin 114 -> 132 bytes graphics/pokemon/slakoth/footprint.png | Bin 97 -> 112 bytes graphics/pokemon/slowbro/footprint.png | Bin 90 -> 105 bytes graphics/pokemon/slowking/footprint.png | Bin 84 -> 100 bytes graphics/pokemon/slowpoke/footprint.png | Bin 85 -> 100 bytes graphics/pokemon/slugma/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/smeargle/footprint.png | Bin 94 -> 110 bytes graphics/pokemon/smoochum/footprint.png | Bin 83 -> 98 bytes graphics/pokemon/sneasel/footprint.png | Bin 93 -> 108 bytes graphics/pokemon/snorlax/footprint.png | Bin 102 -> 116 bytes graphics/pokemon/snorunt/footprint.png | Bin 91 -> 107 bytes graphics/pokemon/snubbull/footprint.png | Bin 89 -> 103 bytes graphics/pokemon/solrock/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/spearow/footprint.png | Bin 94 -> 109 bytes graphics/pokemon/spheal/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/spinarak/footprint.png | Bin 76 -> 92 bytes graphics/pokemon/spinda/footprint.png | Bin 94 -> 109 bytes graphics/pokemon/spoink/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/squirtle/footprint.png | Bin 89 -> 103 bytes graphics/pokemon/stantler/footprint.png | Bin 86 -> 100 bytes graphics/pokemon/starmie/footprint.png | Bin 81 -> 96 bytes graphics/pokemon/staryu/footprint.png | Bin 81 -> 96 bytes graphics/pokemon/steelix/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/sudowoodo/footprint.png | Bin 87 -> 102 bytes graphics/pokemon/suicune/footprint.png | Bin 84 -> 100 bytes graphics/pokemon/sunflora/footprint.png | Bin 89 -> 105 bytes graphics/pokemon/sunkern/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/surskit/footprint.png | Bin 87 -> 99 bytes graphics/pokemon/swablu/footprint.png | Bin 82 -> 97 bytes graphics/pokemon/swalot/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/swampert/footprint.png | Bin 103 -> 121 bytes graphics/pokemon/swellow/footprint.png | Bin 107 -> 124 bytes graphics/pokemon/swinub/footprint.png | Bin 81 -> 97 bytes graphics/pokemon/taillow/footprint.png | Bin 97 -> 112 bytes graphics/pokemon/tangela/footprint.png | Bin 97 -> 111 bytes graphics/pokemon/tauros/footprint.png | Bin 91 -> 105 bytes graphics/pokemon/teddiursa/footprint.png | Bin 91 -> 105 bytes graphics/pokemon/tentacool/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/tentacruel/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/togepi/footprint.png | Bin 90 -> 104 bytes graphics/pokemon/togetic/footprint.png | Bin 90 -> 104 bytes graphics/pokemon/torchic/footprint.png | Bin 103 -> 118 bytes graphics/pokemon/torkoal/footprint.png | Bin 104 -> 119 bytes graphics/pokemon/totodile/footprint.png | Bin 88 -> 103 bytes graphics/pokemon/trapinch/footprint.png | Bin 95 -> 107 bytes graphics/pokemon/treecko/footprint.png | Bin 96 -> 112 bytes graphics/pokemon/tropius/footprint.png | Bin 109 -> 125 bytes graphics/pokemon/typhlosion/footprint.png | Bin 88 -> 103 bytes graphics/pokemon/tyranitar/footprint.png | Bin 97 -> 112 bytes graphics/pokemon/tyrogue/footprint.png | Bin 81 -> 97 bytes graphics/pokemon/umbreon/footprint.png | Bin 81 -> 97 bytes graphics/pokemon/unown/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/ursaring/footprint.png | Bin 99 -> 113 bytes graphics/pokemon/vaporeon/footprint.png | Bin 94 -> 110 bytes graphics/pokemon/venomoth/footprint.png | Bin 76 -> 92 bytes graphics/pokemon/venonat/footprint.png | Bin 89 -> 103 bytes graphics/pokemon/venusaur/footprint.png | Bin 96 -> 111 bytes graphics/pokemon/vibrava/footprint.png | Bin 86 -> 99 bytes graphics/pokemon/victreebel/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/vigoroth/footprint.png | Bin 110 -> 125 bytes graphics/pokemon/vileplume/footprint.png | Bin 89 -> 105 bytes graphics/pokemon/volbeat/footprint.png | Bin 84 -> 99 bytes graphics/pokemon/voltorb/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/vulpix/footprint.png | Bin 95 -> 110 bytes graphics/pokemon/wailmer/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/wailord/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/walrein/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/wartortle/footprint.png | Bin 93 -> 109 bytes graphics/pokemon/weedle/footprint.png | Bin 81 -> 96 bytes graphics/pokemon/weepinbell/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/weezing/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/whiscash/footprint.png | Bin 71 -> 87 bytes graphics/pokemon/whismur/footprint.png | Bin 114 -> 129 bytes graphics/pokemon/wigglytuff/footprint.png | Bin 89 -> 105 bytes graphics/pokemon/wingull/footprint.png | Bin 92 -> 105 bytes graphics/pokemon/wobbuffet/footprint.png | Bin 81 -> 97 bytes graphics/pokemon/wooper/footprint.png | Bin 81 -> 96 bytes graphics/pokemon/wurmple/footprint.png | Bin 81 -> 97 bytes graphics/pokemon/wynaut/footprint.png | Bin 88 -> 101 bytes graphics/pokemon/xatu/footprint.png | Bin 88 -> 105 bytes graphics/pokemon/yanma/footprint.png | Bin 84 -> 97 bytes graphics/pokemon/zangoose/footprint.png | Bin 103 -> 117 bytes graphics/pokemon/zapdos/footprint.png | Bin 104 -> 120 bytes graphics/pokemon/zigzagoon/footprint.png | Bin 100 -> 115 bytes graphics/pokemon/zubat/footprint.png | Bin 71 -> 87 bytes 387 files changed, 0 insertions(+), 0 deletions(-) diff --git a/graphics/pokemon/abra/footprint.png b/graphics/pokemon/abra/footprint.png index 42b5e416f322f2978dbc04b358abf827e95edfaf..073c7871915c099e80c94bfd126361c51d819c52 100644 GIT binary patch delta 88 zcma#cnIIX=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VGr;B3<$IRq}21YSgRZkbk5RRG2KmN~WY^r;o{=-JT#qN~xpAGB_?Y{%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U{r;B3<$IRq}l!SmM2?p~H zChTQyabcGDA!qQRSgT~8Os5RRG2Kfcd@c(1(8_$80~9mf|}tJ?ZM@yH)|!7gyK j`NI6FHv7+xFYZ?}@NE=hb9Vjm9b|x~tDnm{r-UW|Zki%8 diff --git a/graphics/pokemon/aerodactyl/footprint.png b/graphics/pokemon/aerodactyl/footprint.png index 7c5d3e6c19cad818f67914aceb1c0cbc52fac27a..b127884a536f67f8cb4c5916e85bb1e707e2370c 100644 GIT binary patch delta 88 zcma#anIIX=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VGr;B3<$IRpeAP{6wG-DP> ns%vQBYYgWltB!5RRG2KmN~u_`O=-SEXFbzZ1%eKo+~p*Mu+gAO5dr Xh*>I8ZdIiq0n+B_>gTe~DWM4f?^GM; diff --git a/graphics/pokemon/aggron/footprint.png b/graphics/pokemon/aggron/footprint.png index 3ba6d480ba6d642c5f3aa522cfc4b63518f5bc66..7c9d7177c917efcc4c23d099b61c92cc958a8ef6 100644 GIT binary patch delta 99 zcmYc*pCB2>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U{r;B3<$IRq}oP-3s;|VqW z2b=m2{^D-_!O!;3p6Anwj`K~8f0>vcGqbfZGx+@Av$(%^Uq4VEgQu&X%Q~loCIAR? BCAgT~8Os5RRG2Kf=#{I6mQFkJ90f{XFhFB;z(1*CeD>G<4a? jrTbP0l+XkK$&D9Q delta 66 zcmYcbn;>b+00ib8ht2>gSx*?O>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM3981i(?4K%;bcG1Ob7B4I3B~ sXLGUrzopr05=&NmjD0& delta 75 zcmXSjpCIYR00ib8ht2>gHBT4E5RRG2KmN~u__w<4@o~o&1=fd|>qNdd&U@Hydw718 c#;@=43?c_b7hPH=vkj!v)78&qol`;+0DW*C_W%F@ diff --git a/graphics/pokemon/altaria/footprint.png b/graphics/pokemon/altaria/footprint.png index 6c65deae5395825eff738bb3460ff29bd8dcc550..3310f5d0d2a2985d67a558d5bc406120da30d233 100644 GIT binary patch delta 98 zcmYc(n;;p>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Var;B3<$IRq}l!S!51dn%# z8uJb({BL&r$INUmV4IL&&*0>sX~DEAC53@OQkyII#pn57fZ7;5UHx3vIVCg!07)<) A_5c6? delta 80 zcmXR*nIP%S00ib8ht2>gZBG}+5RRG2Kfcd@=x=*?PEy;vls4u!Jp4Z-?HDH79OkbU hVDdUB81Quee}*T)qWyl=b235NJzf1=);T3K0RWVd9cBOk diff --git a/graphics/pokemon/ampharos/footprint.png b/graphics/pokemon/ampharos/footprint.png index bfc2f80345670bfe3002935ba5e737bd42f12ce6..6f0cc20f08d37c26c301638136ec2a207445e735 100644 GIT binary patch delta 86 zcma#bnjjg-%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Vgr;B3<$IRpe2IgaIY|of^ o-taqg{Aadm>R=W%FkoQ#F`0Ybtf$9M1C=s(y85}Sb4q9e0F65wE&u=k delta 70 zcmd0bnjq=O00ib8ht2>gMNb#U5RRG2KmN~W?D%)p_|L}lABy}=@;@#Ly2z|}@V}mc W<+X^*QK_DJAWfdGelF{r5}E*%h8l+e diff --git a/graphics/pokemon/anorith/footprint.png b/graphics/pokemon/anorith/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vgEl(H65RRG2KmN~u7;k%6xU`M=3=eM)2g?(ti_B#LzYd)L gaC{!)ickOR8R~xu+*lwx_cTbir>mdKI;Vst0H56-cmMzZ diff --git a/graphics/pokemon/ariados/footprint.png b/graphics/pokemon/ariados/footprint.png index cee3b1ba5b53c8cc52a6ff71946dc20d77698941..e766c18df2e60c152225016d8c48db11440c819e 100644 GIT binary patch delta 80 zcmWGbnIP%S%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VIr;B3<$IRq}0}MXW5;yD( hKG-KbC_ONRg~3gi>6u*f^kSeQ22WQ%mvv4FO#lNB8c+ZL delta 66 zcmYcZn;>b+00ib8ht2>gSx*bP0l+XkKap)W? diff --git a/graphics/pokemon/armaldo/footprint.png b/graphics/pokemon/armaldo/footprint.png index d12d2e42c098253a7527ec000040c60abae4a5de..b6c085f3dfd29b0561e2b38f3b63fe0935454b19 100644 GIT binary patch delta 92 zcmazqm>?O>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM3981i(?4K%;bOv2?i4w6uG(C t9&+-$QkQsBzd-pXzrvBahQ>xl2EOAwuO@8ix&_q0;OXk;vd$@?2>@@QACCY4 delta 75 zcmXSjpCIYR00ib8ht2>gHBT4E5RRG2JO0mo_@`LFs&39hU%SJ+#cj-QUc6wm=lHuJ c{l|ZKhIiYAe%vs7oCVV9>FVdQ&MBb@08!H(!TLuwofoV}SSmdq8yzp00i_>zopr05#|ui2wiq delta 70 zcmYd~njq=O00ib8ht2>gMNb#U5RRG2KmN~WZ2EWA_|N9_AIkhr_6aZgZJA>jB^Vh( WZb&BbSe{D;Y4UXSb6Mw<&;$Tfg%`U3 diff --git a/graphics/pokemon/articuno/footprint.png b/graphics/pokemon/articuno/footprint.png index e6e4fa9ef33bf4f1b978535ddb9d1a8715fafaa5..b364b5211b9a580aacc7772bc8918f3c341c9045 100644 GIT binary patch delta 102 zcmd0*njo3T%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Vir;B3<$IRq}j06UygTg#* z=@L4P8GOx8c-U^r^8AsPxFK(_K|UcNuR+O;O@VgLr)jS5RRG2KjP0bxV%3jc}~(;hIvs+Tl!0${yUO(AB_J@ nNdJ*|{=;&)u77{ifBctcc(_ZngjdMwAjl9;S3j3^P6KWqz delta 68 zcmYd|m>_A-00ib8ht2>gc~2L|5RRG2KmN~W?D%)X_|F7)cLzs~U*YE&0>AyYXAt!h UdsSYV`w^tY)78&qol`;+07oYoM*si- diff --git a/graphics/pokemon/azurill/footprint.png b/graphics/pokemon/azurill/footprint.png index 60db8e03b896c91b1789ba71a1f212454ba311d8..0839c9c089a55ea5364b9ba3c65338c2d5cbe3ff 100644 GIT binary patch delta 79 zcmWGZo*?PP%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U-r;B3<$IRpe2c|RZ4jq3P gnH*gtq#t-OEIiMy)y;pv52%L0)78&qol`;+0Kq31ivR!s delta 64 zcmYcenILJ+00ib8ht2>gX-^l&5RRG2KmN~W?E814`2v3>OH;?6)$OYp8KT!q>@b;k QCm5vM)78&qol`;+0OLXzwEzGB diff --git a/graphics/pokemon/bagon/footprint.png b/graphics/pokemon/bagon/footprint.png index 9a93a7564e0f78f9fecae9c42d7a9960f329c610..aec25f6acb3bf172236b0fee04ed811fa45d93f4 100644 GIT binary patch delta 86 zcma#fnjjg-%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Vgr;B3<$IRq}2F7j7JT?3h nKOVkdV76v4H85Zn3=w5G;>Z4G?;C+1K&1?xu6{1-oD!MgB~KT}5RRG2KmN~WY^u9uTr(y82ZQ@J9(#oq^B(dGI8J3` Xurv_=#=q&^TaYeKS3j3^P6gVNVyw5RRG2KmN~W6#l!KT`?z!;ptqt`@1t0zkrl^y85}S Ib4q9e0QbTY?EnA( diff --git a/graphics/pokemon/banette/footprint.png b/graphics/pokemon/banette/footprint.png index a15814f2f0c258a565160837b88e47a3dc474ca6..20f6b642e3f26a0c763aa339e7fda8e9907b6415 100644 GIT binary patch delta 78 zcmWGdnjq=P%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Vcr;B3<$IRpe2i6{5o*s6I f83#E|9AjVz3SstgRIm60RKnot>gTe~DWM4fnba55 delta 65 zcmYcaogit$00ib8ht2>g8BZ6-5RRG2KmN~Wl>ECo{YU!w59~b+IVLy%|7TpSB{M_y Rn56+oy{D_6%Q~loCIAUR7-Ikc diff --git a/graphics/pokemon/barboach/footprint.png b/graphics/pokemon/barboach/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vmdKI;Vst02lHZa{vGU delta 67 zcmYcfpCD<+00ib8ht2>gIZqeI5RRG2KmN~Wl>ECo{YT>Y4~}vzbqyEgt5aARn!=^D T&NDaf1L^Q|^>bP0l+XkK9#0qL diff --git a/graphics/pokemon/beautifly/footprint.png b/graphics/pokemon/beautifly/footprint.png index 49175cb0267fddea4ef305365c533bf55c2bfce8..7111a8b703abce4f8ccabeb30011d6e2ec6081ba 100644 GIT binary patch delta 83 zcmaz{pCIYS%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U_r;B3<$IRpe2i6{5o-=$r lK3ob%<{UUs!Qd;$U~r8|_twG5pMdHZJYD@<);T3K0RS~=8u9=D delta 69 zcmYd~oFM7I00ib8ht2>g1y2{p5RRG2KmN~Wl>ECo{m16{58u}c{4$>ZaK0_`Dkg?A WD`dA$_vknb(&Ops=d#Wzp$Pz#yBj?K diff --git a/graphics/pokemon/beedrill/footprint.png b/graphics/pokemon/beedrill/footprint.png index 5c3f21090f08b937a65491e712a8ba637195f7d0..475d5235a5af0450b13c4b6a279fdd1cf73de659 100644 GIT binary patch delta 79 zcmWGZo*?PP%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U-r;B3<$IRpe2WDQL9*2^K gM#-LroDc?v@Sn`5I`)aK0jgo}boFyt=akR{0K}ykDF6Tf delta 64 zcmYcenILJ+00ib8ht2>gX-^l&5RRG2KmN~WWW8$qhgqq*%|3x8Ww90m!_rn6iP9)% PE0A(eS3j3^P6}uS%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VMr;B3<$IRpe2i6{51s28} dPK6dO2JP33=T&D|od+sl@O1TaS?83{1OQAa7D@mB delta 62 zcmYcYnjmS(00ib8ht2>gNlzEY5RRG2KmN~Wl>EDzU6JGW^BMuCPzHvJljVfZU0Qho Oq}bEd&t;ucLK6Uao)u02 diff --git a/graphics/pokemon/bellossom/footprint.png b/graphics/pokemon/bellossom/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vg6Hgb%5RRG2KmN~WYS6G7^>bP0l+XkK_--Gq delta 78 zcmXR;njq=P00ib8ht2>gO-~oc5RRG2KmN~u7;k%6zPe5Q6_5KANj?K(n*?`9`5%s( e99TlW{kLa0x<%;zMQgn}kY-O;KbLh*2~7YpA{*)e diff --git a/graphics/pokemon/blaziken/footprint.png b/graphics/pokemon/blaziken/footprint.png index cf18a353ab28f3f74a971e1e86a267dad8000207..371621ba4574669ee2403925c81ba6ff807b0b9e 100644 GIT binary patch delta 113 zcmXSEVVoeD&CI~SplX||1f|G|6zsNHpd?<%^zggPXFim|KIS+-^2;46EgTe~DWM4fb0#e@ delta 97 zcmZo+ESVq~%>V@E9f!^UDQiy`#}JO0j0Ozn|1}uS00ib8ht2>gbx#+^5RRG2KmN~W?D{47Z@clIboPbye-ysB%eB8-u65gursIjg26!p00i_>zopr07^p~m;e9( diff --git a/graphics/pokemon/breloom/footprint.png b/graphics/pokemon/breloom/footprint.png index 98d920669da7e8cd5784a8a447c1645812c79427..7e940a5d7f9f686a6d5f1096fb73ec396343711d 100644 GIT binary patch delta 90 zcma#cn;;p=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VWr;B3<$IRq}f`kOmgaq$| r2igt_*I0Ra*d=B>T+!Gl*d)QQXAOsif?3`npmGLJS3j3^P6gRZkbk5RRG2Klaam_`RlW{%1+MZ^{?eSG3iCgTe~DWM4fNy;7O diff --git a/graphics/pokemon/bulbasaur/footprint.png b/graphics/pokemon/bulbasaur/footprint.png index 8e9ab9c6bd25f1d07d0eb421947deda30eee968f..6dafa96e2bd8e86290ed1c93739becf9aee603fe 100644 GIT binary patch delta 82 zcmaz@n;_}S%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VYr;B3<$IRpe2R2@wHR2LC k>=gt)GqW9IKB2`h_dMIRL!WKDfyx*>UHx3vIVCg!01^QjOaK4? delta 68 zcmYd`m>_A-00ib8ht2>gc~2L|5RRG2KmN~WYzopr09~&c+5i9m diff --git a/graphics/pokemon/butterfree/footprint.png b/graphics/pokemon/butterfree/footprint.png index b2740e9ccc7a3f58bfabb6b9ed66b973d9391201..c6b4750d3097dc04a7633f10ab8861da50695749 100644 GIT binary patch delta 82 zcmWGfn;_}S%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VYr;B3<$IRq}2F7D-Y|oe# jj{IY2R8Vrzlwe@kQp&#ib6rXVP#J@#tDnm{r-UW|8{8TB delta 67 zcmYcbpCD<+00ib8ht2>gIZqeI5RRG2KmN~WZ2EWA_|Hc6h4P;`SOgip4o+cY@Z^** T-^r;B3<$IRq}11y|8JoX1P c7=!s3>?4>qw&bcC1LYY!UHx3vIVCg!05rT6cK`qY delta 61 zcmazKoFHkz00ib8ht2>g2~QWt5RRG2KmN~Wls%jN<2;|+XTv4`m>Kq|$r>Ko_0gIZqeI5RRG2KmN~W?5I0oY?Hvgkon9D4kf-2hA>WsJr9LK T3T&6RIK6a(XGuBP)2f@(nB44$rjF6*2U FngCtdBar|A delta 89 zcmb=;ogf*)00ib8ht2>g6Hgb%5RRG2KmN~uxZKv+Q|IuMgtmRhd7jTRK2e`CSio#oT+$p`onwWZU6r>{=O`lptx}&8^|0_S3j3^P6?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v}uS%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VMr;B3<$IRq}0}MU9JZIP) dI8Gd3V6fi8)cJ|OLm8-m!PC{xWt~$(699Oc7o`9I delta 61 zcmYcYoFHkz00ib8ht2>g2~QWt5RRG2KmN~Wp=fS?83{1ORFT6$tHQ6dLO|`x-X#-FdgQu&X%Q~loCIH+`7;gXo delta 68 zcmYd|m>_A-00ib8ht2>gc~2L|5RRG2KmN~Wl>GbW{D;N!9`@UE{9T>yF!}F)d4>Zq Vvc3oE^cg`~JYD@<);T3K0RVoa8hHQ! diff --git a/graphics/pokemon/chansey/footprint.png b/graphics/pokemon/chansey/footprint.png index 17893b9fb7abe7579687ad5eb471d53578fab3d0..20028e8b7487691a082b65d1ebc46bb62384399e 100644 GIT binary patch delta 83 zcmaz@pCIYS%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U_r;B3<$IRpe2IgbTJZJbX k2>xc2$Vy0PTanDb@Jxf_v#`ReD4;q9Pgg&ebxsLQ05?Dyb^rhX delta 68 zcmYd~m>_A-00ib8ht2>gc~2L|5RRG2KmN~W?D%)n_|HUlcl$SqE9O1qkGT2&KZAIf U*n6#32@{YOPgg&ebxsLQ0A@}Z&Hw-a diff --git a/graphics/pokemon/charizard/footprint.png b/graphics/pokemon/charizard/footprint.png index e69f383927475ff6ba14ae45014dfbc9c03d9721..86218af32e6a9d28d92b6644618425926fa99b9f 100644 GIT binary patch delta 90 zcma#gn;;p=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VWr;B3<$IRpeh9)+FM>Yo! sR5v^R delta 75 zcmd0cpCIYR00ib8ht2>gHBT4E5RRG2KmN~uSZ~WwYn=XL$+-^=lCrf4>Ny85}Sb4q9e05*3WVgLXD diff --git a/graphics/pokemon/charmander/footprint.png b/graphics/pokemon/charmander/footprint.png index 2f7723621e4196de12eaa3ddf4ceb7b2bb2e2559..9f0bcbdd913c976a674f7334bdee95b101756c07 100644 GIT binary patch delta 86 zcma#bnjjg-%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Vgr;B3<$IRq}hGsUlX`DQ3 o#3gRnFHm^Ku5hG+VG#$z5fx6Co1gQnfJzxWUHx3vIVCg!0FgNxrT_o{ delta 70 zcmd0bnjq=O00ib8ht2>gMNb#U5RRG2KmN~W?0O|x_uTl;rSu;M`NRy|lpUXO@geCyJq8r`- diff --git a/graphics/pokemon/charmeleon/footprint.png b/graphics/pokemon/charmeleon/footprint.png index 6ec15ee2042e2a1b3dff94fbe87151e9ae69ba34..87305df5be941d8d826cc80bbf0a3318993db2eb 100644 GIT binary patch delta 89 zcma#gogf*)%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V0r;B3<$IRq}h6Xl)M>Yo! rR5v&NXBXL6-=Or2ou`Lg;T6LRZm!T*hYH<*su?_8{an^LB{Ts5L}MQp delta 75 zcmd0epCIYR00ib8ht2>gHBT4E5RRG2KmN~WYg2~QWt5RRG2KmN~W6#lz8{f9EYlLOl-5r$n%GBbJZGVcPZ N^>p=fS?83{1OQAT6IlQN diff --git a/graphics/pokemon/chimecho/footprint.png b/graphics/pokemon/chimecho/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vr;B3<$IRq}11#(k67mfK c6B-#Ad=4@@hehtl2Ff#dy85}Sb4q9e07GIHQ~&?~ delta 60 zcmazKm>_A+00ib8ht2>gaZeY=5RRG2KmN~Wl)Y*EXEM8@0<*Ii!-l;w^SkH0ssbtX MboFyt=akR{06B>hv;Y7A diff --git a/graphics/pokemon/clefable/footprint.png b/graphics/pokemon/clefable/footprint.png index 5ff3e19a1de46290dfdd4b12941b2a23c16d4ff4..2f3f60fbdf45b5ddae26dfd3c9f37d9a2160aa9e 100644 GIT binary patch delta 94 zcmYc-njjg;%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Ver;B3<$IRpe24*v6wtrk~ vcHC?~?E_TO4g9Zwg>5RRG2KmN~W?5LZU{^P>A4<9WKGpA`(Rm^z!xmbXS i>)(U)AL-{A!Z;bCT_oO`P12GD>GyQ?b6Mw<&;$S$?H_dj diff --git a/graphics/pokemon/clefairy/footprint.png b/graphics/pokemon/clefairy/footprint.png index 85c25a5dccebc65df4bb478874680cc968ac15ad..86276e6d0a6d10a3805b0cb4e02ee45ec4ecec07 100644 GIT binary patch delta 80 zcmWGdnIP%S%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VIr;B3<$IRq}2F7D-Y|oe# gj{IYgWn=|P?N;Y7J$12i3Q!S)r>mdKI;Vst0NSh=@Bjb+ delta 65 zcmYcZogit$00ib8ht2>g8BZ6-5RRG2KmN~WZ2EWA_|Hc6h4Pr;B3<$IRq}18frf1_t&F c6D1fJOdd0(r3zKa1LYY!UHx3vIVCg!056agHUIzs delta 59 zcma#|pCD<*00ib8ht2>gF;5rA5RRG2KmN~W6#lz8{f9EYlHn4D6SHM&GgTe~DWM4fKkyW1 diff --git a/graphics/pokemon/cloyster/footprint.png b/graphics/pokemon/cloyster/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v`dswtV)<6rf%PPgg&ebxsLQ E0E?6$5&!@I delta 89 zcmb=g6Hgb%5RRG2Kfcd@c)q%=`nlveCP^T{5NLmR@=qTACz5tI pjQ^}i|H16?U-I97_KE-hF*DR(klKD!c)1D498Xt2mvv4FO#oQ=B>DgV diff --git a/graphics/pokemon/corphish/footprint.png b/graphics/pokemon/corphish/footprint.png index f624724c71d78759167096cf7be0241a7803aade..5717fd7f23bfa71082034a1742bf63b038fb759f 100644 GIT binary patch delta 96 zcmYc*nIIX>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VKr;B3<$IRpe2Uas4o^K8% x4UYd9ng6r1eUsgT~8Os5RRG2KmN~Wl$8B}uS%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VMr;B3<$IRq}0}MUv5;No* d1ST{xGWdotd){(hdm5;K!PC{xWt~$(699C>7rg)g delta 61 zcmYcYoFHkz00ib8ht2>g2~QWt5RRG2KmN~W%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VKr;B3<$IRq_ghY)8$vgO-~oc5RRG2JO0mJ_+Od1o5`73nL{?gZ2|img)c61ANJcG f-d`o~>%Tlh`Wu0nt)C`xgEV`(`njxgN@xNAF6%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U{r;B3<$IRq}goFtX5-03E ztnjz3@i!~;Z+5miiAnVgZtN0oBqiQ7oNDlrWDp4Es!Q3g775hH;OXk;vd$@?2>`f5 BB60u# delta 84 zcmXTVm>}uT00ib8ht2>geNPw15RRG2KmN~u_%prD{S=RXi{!oz<3A75e=s=nKRI|} l-opd+ZOsm;|0VzZXJ>e;Et(Q#^KdfA2v1i(mvv4FO#r@`BWM5s diff --git a/graphics/pokemon/crobat/footprint.png b/graphics/pokemon/crobat/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vA9|ar~L}@_8Ik6@#a%pUXO@geCy@bs6jc delta 65 zcmYcdogit$00ib8ht2>g8BZ6-5RRG2KmN~W?0O^l@09VMgD&3`zO0v9#KT}1Blheq RPjneby{D_6%Q~loCIAH97#jcp diff --git a/graphics/pokemon/cubone/footprint.png b/graphics/pokemon/cubone/footprint.png index 21deee1a6c1f32760c6a541df45babb5238a5c41..46a6a96595508a686a2d4c18d46270dc4fc915fa 100644 GIT binary patch delta 82 zcmWGfn;_}S%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VYr;B3<$IRpe2c{lgo-^zY j9e)``7;ic_sxUD0tYc%eJkR+XsEonW)z4*}Q$iB}{!SS0 delta 67 zcmYcbpCD<+00ib8ht2>gIZqeI5RRG2KmN~W?E81s_|Hc6h4P;QSW=i-CthJ-D7YZ` T@Oau8S&$A-S3j3^P6F?c233{=D5>FVdQ&MBb@0H;nDp8x;= delta 64 zcmYcenILJ+00ib8ht2>gX-^l&5RRG2KmN~Wl>ECo{YUco56*Ip4KXUL3@yP@cKhas QsezPxy85}Sb4q9e0KNGYX5on&x2c|%v?hSiB1CL{_xVDMxVZD3?L`I-Hz-JOVuK%ESpu6{1-oD!M< D-sU72 delta 87 zcmb=-o*)^-00ib8ht2>gBTpB{5RRG2KmN~W?5I0oTyr|zV%nJvC#NSS>mNSZ$>T0= oER&OF@o&b%zvUA|0vIDy8H~Hd-@2ZRy8<%B)78&qol`;+0Jn!BkpKVy diff --git a/graphics/pokemon/delibird/footprint.png b/graphics/pokemon/delibird/footprint.png index e7348586ec32968bd988c204b0baa2332db7ca2b..56baaef90a3d3f2085241819636b8c6ee6288374 100644 GIT binary patch delta 85 zcma#boFEy%%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VAr;B3<$IRpe2IggK0!h{f m4)8hu;TPaIk($?_!NPF<52xDMgrIVuN(N6?KbLh*2~7ZNsT(2y delta 70 zcmd0dnjq=O00ib8ht2>gMNb#U5RRG2KmN~W?D%)B`GS9So4mmnN4ds^JN93B5~ecf WHi_*yb@wM1NRy|lpUXO@geCxwjT)%{ diff --git a/graphics/pokemon/deoxys/footprint.png b/graphics/pokemon/deoxys/footprint.png index ea97e4014c644dc0e5f62ff9fa3ed23c91c893c2..31270c17c1be199ed735d0e0ec8216e177651726 100644 GIT binary patch delta 77 zcmWGZoFM7J%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V6r;B3<$IRq}0}N+)dCssq ebbMr3ro!N`j_I`W368ly6%3xPelF{r5}E*}J{ZFQ delta 64 zcmYccnILJ+00ib8ht2>gX-^l&5RRG2KmN~WJzf1=);T3K0Ra1(83O?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vgTe~ HDWM4fU5q4N delta 90 zcmb=;n;;p=00ib8ht2>gQ%@Ji5RRG2Klaam__wa@^CyLpJM$jS)IGe|sg3^(kNgkG sx*NuSe(*cV|2MArcmBg4`@{eLGcbjUFFMkm=m|2&)78&qol`;+0Qhhx^Z)<= diff --git a/graphics/pokemon/doduo/footprint.png b/graphics/pokemon/doduo/footprint.png index 0710eca52335487793d62a73c3e601a453c398b7..21ca1be91cd24ff127bee58b944ad29f1a954798 100644 GIT binary patch delta 94 zcmYc-njjg;%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Ver;B3<$IRpe24+4+fk%c6 wirZKOs{YSi_)ot14?o*Cex5Vz5(x|pGY#2SvT?522Gqjf>FVdQ&MBb@0BpS-kN^Mx delta 81 zcmXR)ognGM00ib8ht2>g9Zwg>5RRG2KmN~W?AW)Tec}1%jxV0q2nan$$Vf=3IB@Pm i^ZbYXw#+U!|Nm!5@s+StlH+Lu>GyQ?b6Mw<&;$S@{2(a+ diff --git a/graphics/pokemon/donphan/footprint.png b/graphics/pokemon/donphan/footprint.png index 394cf64570335f0d1ff910eed817c8c175a8eb97..0bb8543ed59ab68ec3a7245ef1f4ed5db8bc23a1 100644 GIT binary patch delta 93 zcmYc&oFEy&%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V8r;B3<$IRpeAjnBbuw!s~ tmM`(_2y9zFm7 delta 76 zcmXR+m>}uS00ib8ht2>gbx#+^5RRG2KmN~u7;k%6zFNRa@k~L3WQ*JeXGsAwf!YV` cnm_)_Gi>)0?3_FG+Eb8LPgg&ebxsLQ0Pjy5F#rGn diff --git a/graphics/pokemon/dragonair/footprint.png b/graphics/pokemon/dragonair/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vX7F_Nb6Mw<&;$VP=N={i delta 72 zcmd0anIP%R00ib8ht2>gWltB!5RRG2KmN~uSZ{k+zqZZ)mBN<>$ws>k$`|asU7T diff --git a/graphics/pokemon/dratini/footprint.png b/graphics/pokemon/dratini/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vzopr07OL^mH+?% delta 67 zcmYcfpCD<+00ib8ht2>gIZqeI5RRG2KmN~WZ2EU5{l`ImC;1x}1zrC1+XP55$kvEV Ty`GcH2-4x{>gTe~DWM4fAXXQ> diff --git a/graphics/pokemon/dugtrio/footprint.png b/graphics/pokemon/dugtrio/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vgLr)jS5RRG2Ka$UXXq^A>XK|bLH6G~-NuFwnDg6x-lDM0h mxSJXIJp?pZLl{E79hYOMn91+ixN^^TkRhI~elF{r5}E)ZryczO diff --git a/graphics/pokemon/duskull/footprint.png b/graphics/pokemon/duskull/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vgWltB!5RRG2KmN~Wl>ECo{fG7Zhwp3K_P>|>#~5gL`2Wun ZTny*#%ARobaq0kR^K|udS?83{1ON%j9c=&r diff --git a/graphics/pokemon/eevee/footprint.png b/graphics/pokemon/eevee/footprint.png index 4e4c01c9f52e8e339c7e5b2e69396dcd98705720..793daaba5287a9c136ac686ff458b1b7586e799b 100644 GIT binary patch delta 91 zcmYeupCB2=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U@r;B3<$IRpe2i6{5o;}hM sPwE>c#IQ2=Gcw0BGXG|tU?IW4P$kNy>fLnm4p2RVr>mdKI;Vst0P$%XV*mgE delta 76 zcmc~#m>}uS00ib8ht2>gbx#+^5RRG2KmN~Wl>ECo{l}B@9~xv^?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vCz`*dom*Y$BhM50A)eN4lelF{r5}E)2m>pjL delta 73 zcmd0eognGL00ib8ht2>g6;Bt(5RRG2KlaUM?6A9SY%`&K5&t)h7w)!)=l@su^4SkK6Oo0(0Foh^)=?HQX!Qi=l`!{+0xrylc|lmYcHc)I$ztaD0e0s!(TAFu!b delta 81 zcmXR;ognGM00ib8ht2>g9Zwg>5RRG2KmN~u7;Jkuys~ZmM;`e{l69wy|J*zOA>01& i{3?xK-{(KHXJTaV+%6?CiG$}4NWZ76pUXO@geCwms3492 diff --git a/graphics/pokemon/electrode/footprint.png b/graphics/pokemon/electrode/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vg1y2{p5RRG2KmN~W?D%)X_|F9Ph5UasIFvZ1v}*kRFVDch VBYMOt&`uPj$J5o%Wt~$(696()7YqOZ diff --git a/graphics/pokemon/entei/footprint.png b/graphics/pokemon/entei/footprint.png index 7336df599ddbf4867b284a1eac39f6b54f8a30a5..50470342a1dfc63a51de702e4aaf3bb2ec14c2ea 100644 GIT binary patch delta 97 zcmYc-ogf**%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V4r;B3<$IRpeAjnCWV0R#) yzWLxkevXs>6CeCPc;G){*A00G!Ox5fq8J=qcpJH=xl9J?V(@hJb6Mw<&;$UvvLsLd delta 81 zcmXR-ognGM00ib8ht2>g9Zwg>5RRG2KmN~u7;k%6xVnw`6%YFi#}|yohuO>8`2Pfa iahB`)cf@PJZ3cUWbiu6+*99pg8BZ6-5RRG2KmN~W?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vR;L-mB2Wl8rh%rdn^ZI$1$36urX7F_Nb6Mw<&;$S?86IT- delta 72 zcmd0anIP%R00ib8ht2>gWltB!5RRG2KmN~u_`AC8_;JS<48~$#8f07SJ{bSmnEvCx YJi}vqp(#Oedio%3p00i_>zopr0Qoc=B>(^b diff --git a/graphics/pokemon/exploud/footprint.png b/graphics/pokemon/exploud/footprint.png index b27283a141af13e22cd338bd6cf3c068980bc019..daecfd459d369de32f16e8531775097edabba067 100644 GIT binary patch delta 105 zcmd0)ogkUQ%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U~r;B3<$IRq}v;>cLi5l|` zC+uxM=+xx+hmrX|JDVgo8z-m0qX`KQ_8mA-!_XqpxPp=4)oRXdE@E-~K-~gV^0^y5RRG2KR(Y-^fPq!H##hs-uC#sWZVhkng{6>HFF;R pEEf3nZ_dMRyTkI;0>9W@zA^}17Spj)3Cjf;vd$@?2>|cyB60u# diff --git a/graphics/pokemon/farfetchd/footprint.png b/graphics/pokemon/farfetchd/footprint.png index 2f08f732d57ba03dd0dc4c80f222e72fae641c16..cbfca034d5eee3883f7f201bb83fd69bcca33d25 100644 GIT binary patch delta 95 zcmYc;o*)^;%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Uv8w7_Mq^7By^15(nyG@O1TaS?83{1OV{6AP4{e delta 79 zcmXR;o*?PP00ib8ht2>gEl(H65RRG2KmN~W?D*GsaZXa3Sb7`t8-*_o@-22JjQ?y% f{}IgZ^xr{?Q6p5Wpsp@33#8lA)z4*}Q$iB}oQNHP diff --git a/graphics/pokemon/fearow/footprint.png b/graphics/pokemon/fearow/footprint.png index 04ea7924d542db2a49a487eb02dd537ce482d089..82302a8043948dfb7b5398b6109718c3f7d37e54 100644 GIT binary patch delta 98 zcmYc*n;;p>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Var;B3<$IRq}goFno2@mER zP_S%vEMw>RSkIvNja}hLO+%w#htvU%6;l`)p1kBtl;_fO1!`mPboFyt=akR{0A>*( AIsgCw delta 82 zcmXR*n;_}S00ib8ht2>gT~8Os5RRG2KmN~uc)PkS|0mD+OOkRsn=i1}3H(yzcdCCQ j`HwNsR^o5^kN@%v5>v$*<+u*GgADL=^>bP0l+XkK9kL%M diff --git a/graphics/pokemon/feebas/footprint.png b/graphics/pokemon/feebas/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vgRZkbk5RRG2KmN~um~VGDzP4@tD}^u3vW@>f9G+mq@pp6j bkN@%vckT(NR=xMm2Wj+l^>bP0l+XkKWc43Z diff --git a/graphics/pokemon/flaaffy/footprint.png b/graphics/pokemon/flaaffy/footprint.png index d1695ec805ec5d5c06d1b784fd4f4158ac56c48f..6824d2bb9e28d6866aa388f8de1e55f10f7c396a 100644 GIT binary patch delta 77 zcmWGcoFM7J%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V6r;B3<$IRq}0}MU93P)-f e8XICH7#KnWSSD=w>7EZ%!QkoY=d#Wzp$Pz$$QVQb delta 61 zcmYccoFHkz00ib8ht2>g2~QWt5RRG2KmN~W*?y}vd$@?2>@oP6q5h| diff --git a/graphics/pokemon/flareon/footprint.png b/graphics/pokemon/flareon/footprint.png index db5d37ed461ebfb586a73eeabf27814696f06a4d..aecf35c717cf1cbf8d8f1ad85533d8625b5ae4a3 100644 GIT binary patch delta 98 zcmYc%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Var;B3<$IRpe2c{lgo;}hM zKkN-o{7;y$I$^@bga?KR53~~!>JJ>KVOYe%&^?)L@l9r@eL!stp00i_>zopr0E}WI AZvX%Q delta 83 zcmXR*pCIYS00ib8ht2>gJx>?M5RRG2KmN~W?E81sxaL#(j|1mFG|YXNXnpwcW1jiv ljceYd|4=;t;keu)Hip92lJ>#hc@01&c)I$ztaD0e0s!IWBpv_& diff --git a/graphics/pokemon/flygon/footprint.png b/graphics/pokemon/flygon/footprint.png index 5af877878d1576ba585bad5fc76442f91b1b0638..ef9f392cf1072bb4830e4352edef5f45adbc6e1d 100644 GIT binary patch delta 90 zcma#an;;p=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VWr;B3<$IRq}oP-2B2B#cO ro;BPKJm1(8N*J{GLKwmi-(X;1Hs<gWltB!5RRG2Kf=#{I4;*xcP{;hD1XwQ3GB+%D=Y#SW6tic YV)*4P^5SVk1V|Tyr>mdKI;Vst0I`1>fdBvi diff --git a/graphics/pokemon/forretress/footprint.png b/graphics/pokemon/forretress/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vgIZqeI5RRG2KmN~W?E81s_|L}nMf-m{a%eQIdGNoUVP?II T(5~6JIUpULu6{1-oD!Mb+00ib8ht2>gSx*ECo{RgwlH=h4*9CJ)={{PRoNlxa5 T{Gz$@K^i<={an^LB{Ts5D3uw9 diff --git a/graphics/pokemon/gastly/footprint.png b/graphics/pokemon/gastly/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vgB~KT}5RRG2KmN~W?0O|xchtD%Q~Hks{SNj|9AEU?`kbw2 Xurn7g`oHvUEl8KAtDnm{r-UW|ziS)X diff --git a/graphics/pokemon/geodude/footprint.png b/graphics/pokemon/geodude/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vgDNh&25RRG2KmN~Wl>ECk{YPTIL;Wks08s{pIl9sZ7P&6) P0jc(M^>bP0l+XkKo2M0C diff --git a/graphics/pokemon/glalie/footprint.png b/graphics/pokemon/glalie/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v{vGWE{C4;A{pUXO@geCw{N*YT5 delta 72 zcmd0dnIP%R00ib8ht2>gWltB!5RRG2KmN~WZ2HF-Xxs7e_`HYhHX@8S|G$xZkoE6B ZJ3}j%RPr3nC0jw-JYD@<);T3K0RYqO8_WOz diff --git a/graphics/pokemon/gloom/footprint.png b/graphics/pokemon/gloom/footprint.png index 7e9c265e81c8f7c24bf5d8385c93ed02ed9bacab..13ca4ee71eaf5eaa4eec2b2b4f90a8d4e6718b03 100644 GIT binary patch delta 84 zcma#bm>}uT%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VQr;B3<$IRpe2R3#I3Hb&A lV*%NO1olO2Y-u8*4Bc;8tHRixr2`c*c)I$ztaD0e0s!?V7svnr delta 70 zcmd0Znjq=O00ib8ht2>gMNb#U5RRG2KmN~WYgRZkbk5RRG2KmN~WY< diff --git a/graphics/pokemon/goldeen/footprint.png b/graphics/pokemon/goldeen/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v}@~zk6q+sJ%i#uc7-E#4UIb+8F?6-fACB$v|9cUsDr`N)z4*}Q$iB}gO-~oc5RRG2JHF3l?5LXLxZ>!{hYZ#twh!1B@_$nJa(LcD ff7`?V|2wcS>}(VEXSsI852V@C)z4*}Q$iB}bVwcc diff --git a/graphics/pokemon/golem/footprint.png b/graphics/pokemon/golem/footprint.png index 8ddc6345cc597c7221e869abf81b99dce36b3103..c9f61444290bb9d6885ca773eaedfafb624feaa0 100644 GIT binary patch delta 94 zcmYc+njjg;%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Ver;B3<$IRpeAV^9G5KGu# umN4NzgVP`W0D<4kY|of^dUz9#FfiN=g4Nn)x5RRG2KmN~u_`bf)`n_b|ob-wV{7&*u0x$4aw%LE< e`Ty$R3ws6yUD4Bi`&r9CdOcnJT-G@yGywpKP#zNi diff --git a/graphics/pokemon/gorebyss/footprint.png b/graphics/pokemon/gorebyss/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vg6;Bt(5RRG2KmN~WY_j`lY*Un8ae&W>ea1qLLw^sP|8QJx Z5f20NRgs2_ANeLAeV(p0w{ew*%EOc)I$ztaD0e0s!Ye9vA=s delta 71 zcmd0fo*?PO00ib8ht2>gB~KT}5RRG2KmN~W?6do6Y*Un8ae&WB{)ga;cALZU)g4j{ X){n)i|5-FF2kG*3^>bP0l+XkKZPpn> diff --git a/graphics/pokemon/grimer/footprint.png b/graphics/pokemon/grimer/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vgJx>?M5RRG2KjP1S*gNOpY|F#SsRF;M=RagMXR;MctN1hH kA*1nO_OdqrS3LVaGhR;;dS=EV69zKD)78&qol`;+056#zjQ{`u diff --git a/graphics/pokemon/grovyle/footprint.png b/graphics/pokemon/grovyle/footprint.png index c78ea507c9d1ad31443fbc7fb1531c862f38bca2..149efec284efb96c6c9d8469289ace7a2727f0db 100644 GIT binary patch delta 94 zcmYc(njjg;%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Ver;B3<$IRq}goFo%2?C!I w1WqSRSe@|T|A7Pl7`kTgD+nYrGfOZqT(seM!`+`40o20a>FVdQ&MBb@00TuJyZ`_I delta 80 zcmXR)nIP%S00ib8ht2>gZBG}+5RRG2KmN~u__?xe`)$cMzx0Y5=RP#ff7os#@^_>A hg8HvK4paaCXJ*iG68o0fmpcul-P6_2Wt~$(697YbA;$m! diff --git a/graphics/pokemon/growlithe/footprint.png b/graphics/pokemon/growlithe/footprint.png index 2517cdcbadabf5a79cac05d35cf1f7a1df6c9438..b9af4c119c797d11771944fed097c284c9efc4be 100644 GIT binary patch delta 84 zcma#fm>}uT%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VQr;B3<$IRpe2IgaIZ11>v lKG_Ed{AU+PvOCbg!thI;bK(}cBPKwF44$rjF6*2UngB|t8hZc$ delta 71 zcmd0Zo*?PO00ib8ht2>gB~KT}5RRG2KmN~W?D%)pxaMMd#eu#iyARD5}uS00ib8ht2>gbx#+^5RRG2KmN~uxZIYbc1rpWh4UXO?G8_`5MXYqyP>gnp|vd$@?2>^l|AC>?B diff --git a/graphics/pokemon/gulpin/footprint.png b/graphics/pokemon/gulpin/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vgRZkbk5RRG26?*3jI%HdJ&6Kp7B`GB#_=3S$#5RF_A^#tq a`ZtV?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vgWltB!5RRG2KmN~uSZ~YmcXRuq`|l;|J}6(1uM}YFY7Y6w Y&LDk6OkHW~qZW`hPgg&ebxsLQ0MAkz00000 diff --git a/graphics/pokemon/hitmonchan/footprint.png b/graphics/pokemon/hitmonchan/footprint.png index cfd1efd54a09ddefdf5afadc77a802ebd8f0c9a0..4a185f878a3592c9036fa9c3abf893863685f66a 100644 GIT binary patch delta 86 zcma#bnjjg-%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Vgr;B3<$IRpe2IgnXJa6~| n1U@rQQ1FoHkaFmdTq3~mMwGMTDDRRLK&1?xu6{1-oD!MgMNb#U5RRG2KmN~W?D%)X_|F7)$NDFZO$vnytJoLXD@V+6lZg>aWV@$3P^b1nUIjjz;H8#v%T-$O-`Ur22WQ%mvv4FO#q^Y BA}0U< delta 84 zcmb=-m>}uT00ib8ht2>geNPw15RRG2KmN~uc)z}_{JrG8C&o4((<=_}yRzSKd{JP1 l`15ClFMsV0KmW;7|B6vXN-SEd(8~^Fgr}>Y%Q~loCIHcIBJ%(M diff --git a/graphics/pokemon/hitmontop/footprint.png b/graphics/pokemon/hitmontop/footprint.png index ba8c1cca2a11f05817497af73be5943bf891e08e..16e5173ce4a530642a81c628e6bf4dd491dc0997 100644 GIT binary patch delta 99 zcmYc%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U{r;B3<$IRq}goJ{GM2`oF z8}1!U_}}cftl{7xrmlvZf9yPGcomMEU~uB$VL14R-Rh@M{VAY622WQ%mvv4FO#uGz BB?kZi delta 83 zcmXRgJx>?M5RRG2KmN~8{GZ?UbG~HX4r7^w^ol#@3;tM$Fy54Z kBKhx1^M(EY6~6qpXRw|lvBK6rtQlm2r>mdKI;Vst0EWmSV*mgE diff --git a/graphics/pokemon/ho_oh/footprint.png b/graphics/pokemon/ho_oh/footprint.png index adceb38787b4292ab1935316d591bda35f49496e..a6cfc377d555b2edee4023116425160bafe471ec 100644 GIT binary patch delta 90 zcma#gn;;p=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VWr;B3<$IRpe2IgaIZ09(6 rCK)?)lrxKLv}aI!#;m{+!r;bmES0l+Lm}HWpmGLJS3j3^P6gHBT4E5RRG2KmN~W?D%)pxaM?v#WX&r`F|F^Xt&|`yOCXS b0h0j}gSn(wxXax-NsvxYS3j3^P6gLVG4!*uJ#gT~8Os5RRG2KmN~WY^s}={-Z+1<=@Qn1#XibGAJKrPHU6@ j!&Co6^51pi15+3o^2#L{h30xCfDG_-^>bP0l+XkK`xYLG diff --git a/graphics/pokemon/hoppip/footprint.png b/graphics/pokemon/hoppip/footprint.png index 0be22ed86982f826ab6fa1d9f8d052810f88adb5..d482d69e5ea243c57f56d390714a46dd835c0631 100644 GIT binary patch delta 79 zcmWGZo*?PP%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U-r;B3<$IRq}0}MU9JZIP? gX2>{joN!}hFkxcy+OxVZ9H@rD)78&qol`;+0Ii=FumAu6 delta 64 zcmYcenILJ+00ib8ht2>gX-^l&5RRG2KmN~W?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Var;B3<$IRpe2IgaIY|of^ zgoJpWzopr08d0B AY5)KL delta 83 zcmXR*pCIYS00ib8ht2>gJx>?M5RRG2KmN~W?D%)p_|L}lihpw+wip~{&1++S!z2I0 k@kP6h2xDqv*1!Mk3?h7@l3Gg3Z9yh@y85}Sb4q9e06{7q?*IS* diff --git a/graphics/pokemon/houndour/footprint.png b/graphics/pokemon/houndour/footprint.png index 3f81614316c28197620e00c0cbbdf2fffb0891f5..bbc1115d75b46e88deaea266d1656aa40891d022 100644 GIT binary patch delta 84 zcma#fm>}uT%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VQr;B3<$IRpe2c{lgo;}hM lKkN-Q*f%IWW9C`Gz|h0Px-Cohpd3&kgQu&X%Q~loCICRg8O;Cy delta 71 zcmd0Zo*?PO00ib8ht2>gB~KT}5RRG2KmN~W?E81sxaL#(j|1mFILmeYyJ4)L{o}tp YLt&AW&adkezk_sny85}Sb4q9e0Q8<6ga7~l diff --git a/graphics/pokemon/huntail/footprint.png b/graphics/pokemon/huntail/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v|BrjGq}Ftcj)-Z5TMJT$Hpt_cI2TMP(6dEtDnm{r-UW|mewDi delta 75 zcmd0gpCIYR00ib8ht2>gHBT4E5RRG2KmN~u7;k%6y}r%;9S{GFzzghk8ow0zo$B96 b{`=3)aK1w5Y?faP3rMG@tDnm{r-UW|2A&&p diff --git a/graphics/pokemon/igglybuff/footprint.png b/graphics/pokemon/igglybuff/footprint.png index bbb7352a6016ea4b5a824f1afb1065adc80bf28e..d24c1760df92d06bd51e3799ee673bc9f2e46ef8 100644 GIT binary patch delta 80 zcmWGdnIP%S%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VIr;B3<$IRpe2i6{Ti5c<+ h8=M6u+-*?fXDGbOvX}F7q$p4kgQu&X%Q~loCIH#u82kVL delta 65 zcmYcZogit$00ib8ht2>g8BZ6-5RRG2KmN~Wl>ECn{fF}T56n#sZ>rcrSQ)w(N~`YZ Rv7ZA{@9FC2vd$@?2>|9A7Zv~j diff --git a/graphics/pokemon/illumise/footprint.png b/graphics/pokemon/illumise/footprint.png index 451d532b2f44e88db71bb31f1051d51ff4669458..d39b4f00541e985e0e62141ad25228f14f082d73 100644 GIT binary patch delta 80 zcmWGZnIP%S%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VIr;B3<$IRpe2i6{5o-^zR hUNDLn$~jD9XDFG@S~UIl)lQ%y22WQ%mvv4FO#t8y8J++D delta 64 zcmYcZnILJ+00ib8ht2>gX-^l&5RRG2KmN~Wl>ECo{YNst+oymp=j9?989JUz6{NoN QHv=j6boFyt=akR{0L=at+5i9m diff --git a/graphics/pokemon/ivysaur/footprint.png b/graphics/pokemon/ivysaur/footprint.png index 29206b935ee19c1ab050067906f6fa1016567e31..d837294f9db2cc31700a40e576eee6dcb79c9a43 100644 GIT binary patch delta 92 zcmYc&m>?O>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM3981i(?4K%;bcIW;V7yKDK+( tJb&yZp8R(ZoWSeyMqWaK-$8_t;mQ&&k=FlPqk$S2JYD@<);T3K0RTyR9i0FG delta 76 zcmXR&m>}uS00ib8ht2>gbx#+^5RRG2KmN~W?0O}+Z@O_!Q2LJp=RPz@b~WTE{5p94 d!+E(yJPaDQM9p=fS?83{1ORkG9-9CF diff --git a/graphics/pokemon/jigglypuff/footprint.png b/graphics/pokemon/jigglypuff/footprint.png index 59b5f1171b3c10c930f8c598a8e81dae8a46f804..b6d981b10489da2e1352dcaf486e2bbb534ec60b 100644 GIT binary patch delta 81 zcmWGdognGM%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V2r;B3<$IRpe2IgbTJZJa~ iE--2&&t;ucLK6VrgBa%k delta 65 zcmYcdogit$00ib8ht2>g8BZ6-5RRG2KmN~W?D%)n_|L@S4&MU4te0y!pv5TiMXb3$ R^xX!KdQVqBmvv4FO#mSQ8Fv5x diff --git a/graphics/pokemon/jirachi/footprint.png b/graphics/pokemon/jirachi/footprint.png index 856bb5faafd226f980ad8165ae3bf048bb4ee251..1153c76dfef3d2c54ccd621023ae3f0b79def0d7 100644 GIT binary patch delta 78 zcmWGenjq=P%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Vcr;B3<$IRpe2i6{5o-^zV fI8LxBg)lHg&1XJ)FLOs0Pzi<Dnm{r-UW|pT-zk delta 63 zcmYcao*-$(00ib8ht2>gDNh&25RRG2KmN~Wl>ECo{YNsttAm-qLM;Y{MfYVy|K#i| P2dVaS^>bP0l+XkKi@Fsi diff --git a/graphics/pokemon/jolteon/footprint.png b/graphics/pokemon/jolteon/footprint.png index d1e9477b3d0c9da9d144ac0fe63e0bf72c968881..450c3c4953d212df6b81d2c4f4074edd7079030a 100644 GIT binary patch delta 87 zcma#fo*)^-%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U*r;B3<$IRpe2c{lgo;}hM pKkN-o{BKZFknWhle_$#D!$xHemxND~)&SKqc)I$ztaD0e0sz1F9Jc@f delta 71 zcmd0fo*?PO00ib8ht2>gB~KT}5RRG2KmN~W?E81sxaL#(j|1mFG{|-}gX-^l&5RRG2KmN~Wl>ECn{fF}T56pcHcdAlY8R~+i?0oxI Q+yN=~boFyt=akR{0MiW@7XSbN diff --git a/graphics/pokemon/jynx/footprint.png b/graphics/pokemon/jynx/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vgVNVyw5RRG2KmN~W6#l!KT`?z!;ptqt`@1t0zkrl^y85}S Ib4q9e0QbTY?EnA( diff --git a/graphics/pokemon/kabutops/footprint.png b/graphics/pokemon/kabutops/footprint.png index 127b741d827af8c403e29d4b5bad7dce3b1725b9..54f193c502e7aca95eeec8573d008696fee44239 100644 GIT binary patch delta 89 zcma#cogf*)%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V0r;B3<$IRpe24*o#bOUs&EVgRZkbk5RRG2KmN~W?5MlXzOetV!k1z@j=vMqebP0l+XkKHLV`Y diff --git a/graphics/pokemon/kadabra/footprint.png b/graphics/pokemon/kadabra/footprint.png index a699f29879c7bf7c74af15c828cbaab32f7c638b..8cbac4eddc77046f61ed6e3e02b4b75207cabdea 100644 GIT binary patch delta 97 zcmYc(ogf**%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V4r;B3<$IRq}goFnH2@gCI zCTKD!?qlcqB)_2JKO@IR`GkZ#21PeE1ty03=A5NB-bQc(buoCl`njxgN@xNA7{DLb delta 80 zcmXR-nIP%S00ib8ht2>gZBG}+5RRG2KmN~u_`A04{AWqI@68w7E8E!r1blInYpJ_o h{AVTm!utP>91L>qV!0O{cngBGd%F6$taD0e0stW%AXfkY diff --git a/graphics/pokemon/kakuna/footprint.png b/graphics/pokemon/kakuna/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vK9Ase7o5~aPoI8FOP(6dEtDnm{r-UW|f}uS00ib8ht2>gbx#+^5RRG2KmN~u7;k%6zFMH_z`243$(Dv5{y!XFoaI!w cLw^3ZXE^s#c!EW`_ezjfPgg&ebxsLQ059bnd;kCd diff --git a/graphics/pokemon/kecleon/footprint.png b/graphics/pokemon/kecleon/footprint.png index 3c69684379972211f839eaae341bbc76858585a8..986c726fa04414f813911ef60cac5d903ab4637e 100644 GIT binary patch delta 88 zcmYeunIIX=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VGr;B3<$IRq}21YkFwx@h- pFL`+;vGKfNm-r#?AUL6yg`w*Mn@n$c-xi=^22WQ%mvv4FO#rR_8}uS00ib8ht2>gbx#+^5RRG2KmN~WZ2I>%eMj)Q4@c%dyjj^M|BXlf$wH13 dZL5F&muD#IlRPGO=H4cdR!>(ymvv4FO#r|~Am0E0 diff --git a/graphics/pokemon/kingdra/footprint.png b/graphics/pokemon/kingdra/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vg6;Bt(5RRG2KmN~W?5n$CY%?L<;=s8J2hLphGx6b%c(#;C a115&zZBkFYR=@cS(&y>w=d#Wzp$PyL8Xdy` diff --git a/graphics/pokemon/kirlia/footprint.png b/graphics/pokemon/kirlia/footprint.png index c1c0058e74e9c2354f9bf9ca74251c564bcb95d1..2a1c1f3dd159502c8024d197d965920376b79bfa 100644 GIT binary patch delta 76 zcmWGcm>}uS%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VMr;B3<$IRq}0}MU9JZIP) dI8Gd3V6fi8)cJ|OLm8-m!PC{xWt~$(699Oc7o`9I delta 61 zcmYcYoFHkz00ib8ht2>g2~QWt5RRG2KmN~Wp=fS?83{1ORFT6$t?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vi%o!8~8#WZE~NDh5wiKbLh*2~7b078zIo delta 66 zcmYcdn;>b+00ib8ht2>gSx*P$z?@tDnm{r-UW| D{skj3 delta 84 zcmb=-m>}uT00ib8ht2>geNPw15RRG27XRlj{Aqu|)JAC3S3 diff --git a/graphics/pokemon/lairon/footprint.png b/graphics/pokemon/lairon/footprint.png index 9a6527c1c98c0721021880ea08322388afeedf8d..e465f42d51ca4e0d21420ae0be39096947978638 100644 GIT binary patch delta 96 zcmYc-nIIX>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VKr;B3<$IRpeh9)+)W6V5z y%pE%N*_nT{v;C9j`BcAv;{==1Gj^T?1_s%+JVFoGNbmzSF?hQAxvXg9Zwg>5RRG2KmN~uSZ{mSzPio-mBN>cb04zXA7(FWV?PtX ilEQpZzLIUiss9Z3FA84>3Rxlo((mc&=d#Wzp$P!|ryqp? diff --git a/graphics/pokemon/lanturn/footprint.png b/graphics/pokemon/lanturn/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v}uS%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VMr;B3<$IRpe2i6{5o*woI d0nD>(7~&4Iu)DpNX9Ox>@O1TaS?83{1OQgI7B2t* delta 62 zcmYcYnjmS(00ib8ht2>gNlzEY5RRG2KmN~Wl>ECo{YQF#%PYwMQ3i&2yQOctMb7&T OQtavK=d#Wzp$Pz(n-((w diff --git a/graphics/pokemon/latias/footprint.png b/graphics/pokemon/latias/footprint.png index 0419630c1521eb245bb63cda013ca98adca12c89..f0f34c50042edc58ca31fe61eea9db5b318e7cf2 100644 GIT binary patch delta 99 zcmc~OpCB2>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U{r;B3<$IRpe2IgaIY-Mb0 zmTYYQ?0NpkOWfdZ*zty!=MTR_%mNGR2wrAphROA8vzC60xDC|D;OXk;vd$@?2>=0x BAFlua delta 84 zcmXTVm>}uT00ib8ht2>geNPw15RRG2KmN~W?D%)p_|K2?A3oS0W>0J5|HEVd#_^8) mS04E%jxh^<@Nby)|372qe@PEB*~w}kBRpOGT-G@yGywq0K_d+S diff --git a/graphics/pokemon/latios/footprint.png b/graphics/pokemon/latios/footprint.png index f77d0fa867c580f726d9ca9fba181a0b1f89e597..7c22956b66b01ef1d585d86fb63cef6ecb008815 100644 GIT binary patch delta 101 zcmd0-oFJLN%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VCr;B3<$IRpeAV^D?keu)U z$gDqbpst~DXJg|}M&{4_1~(am7`vELpE_zWF1^CuJp1kLzopr04aPW Ang9R* delta 85 zcmb=-oFEy%00ib8ht2>g15X#n5RRG2KmN~uc)q@^{lBE$zw{r9=RX{t_t4+=uzY2k m{hNeMaw<$B?5FG)R#2 pUuKby{~MGz#5Gu59841!81z$lM5;gK)dN*Cc)I$ztaD0e0st+_9i0FG delta 74 zcmd0en;_}R00ib8ht2>gRZkbk5RRG2KmN~uIN$cLd}W*bpMWoovRw)>3q%AMuQG)G a`_IpCPEz?O>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM3981i(?4K%;bayMl&|He=KbO snAo;4vGwuu{7E?Suc7fL1G5kVL+e#G?z~hrE}#YmPgg&ebxsLQ05WPEi~s-t delta 79 zcmXR&o*?PP00ib8ht2>gEl(H65RRG2KmN~WY^wX0{=;DYLudQL=j+ZzGnTKEyv}gzI2TB_r>mdKI;Vst0R5>U0ssI2 diff --git a/graphics/pokemon/lickitung/footprint.png b/graphics/pokemon/lickitung/footprint.png index 1f88f23fc620f3ff118b2413d255c43f04fe7e3f..fb92001035934b955f8bdc9c5f45d0d2d2e1500e 100644 GIT binary patch delta 97 zcmYc*ogf**%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V4r;B3<$IRpe2IgmMY~Pr9 z{_smYv2U30mtSDh%7h6942mGY~5pe_baS3j3^P6gT~8Os5RRG2KmN~W?D%)Z_|Jy)9}4F`G|0E`ZD_vmu&nL* kbH^8j_8wd-p8c<9;6E;UYt_fz86X2ZUHx3vIVCg!0G)Rv4FCWD diff --git a/graphics/pokemon/lileep/footprint.png b/graphics/pokemon/lileep/footprint.png index ce6b2790e1380c56b9d03076b830c1cff67fa766..ee68853045d81fce9ad012f2e3c4a080934eda15 100644 GIT binary patch delta 92 zcmYc;m>?O>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM3981i(?4K%;W?HW@b6I+qOKP s>>WD(GjllJxK=K~Q!ODOEs?;$@I96DX;Q-PV?YfIp00i_>zopr05LNip8x;= delta 79 zcmXR&o*?PP00ib8ht2>gEl(H65RRG2KmN~W>^N7SX7S|AhX&aeyARC*EwwH)AI2CS g-e1MmvFZPRMm9;&zdPD2r-F2Qy85}Sb4q9e0L;@LrT_o{ diff --git a/graphics/pokemon/linoone/footprint.png b/graphics/pokemon/linoone/footprint.png index 8d83166d3e8e16cf12134420cb6c7577c190675d..ff6019b7bc24400ff531729115e154ed41fbbd97 100644 GIT binary patch delta 87 zcma#bo*)^-%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U*r;B3<$IRq}tON$7ZOj2j p9vwJv=D>kEhQ=Av2_1|b47aU0JT*^?h5*$vc)I$ztaD0e0ssK{9q#}D delta 70 zcmd0fnjq=O00ib8ht2>gMNb#U5RRG2KcdewxY)m4_~LtAoBe;ux*N(D=2uDl;&)+C Wau%Oi*FLKRq{-9O&t;ucLK6UWiW!ms diff --git a/graphics/pokemon/lombre/footprint.png b/graphics/pokemon/lombre/footprint.png index 051e5ab550250967b005534e57782ff6fd31e40d..333b1c7b448111256d012265db932237eac23079 100644 GIT binary patch delta 104 zcmd0+nIM_W%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VFr;B3<$IRpeh90y^hU|`TI;y(ED-lMlb%?zHdelF{r G5}E*4>m`i< delta 90 zcmb=)n;;p=00ib8ht2>gQ%@Ji5RRG2KmN~uSZ{mSrn+s~P9E{ulIJRnZ4AmdKI;Vst04JLo82|tP delta 68 zcmYd~m>_A-00ib8ht2>gc~2L|5RRG2KmN~Wl>ECg{YT>Y4~}wOb*GH~-0fe(z|bKk UwP?{&z9x_sPgg&ebxsLQ09=I`ssI20 diff --git a/graphics/pokemon/loudred/footprint.png b/graphics/pokemon/loudred/footprint.png index 604af90004997cc9af74376a03aae66c14e76dd3..8468d3ea6cb1549811f06024e43019cb42747ef1 100644 GIT binary patch delta 100 zcmd0-m>?O?%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VSr;B3<$IRq}gam^Ji5n&) zPS}_*Vc)?6{~8?EF&$y+a+uJ<(s4Tcz=0Zu6=DoCrP#6(ychleYGm+q^>bP0l+XkK DJMAU^ delta 85 zcmb=(oFEy%00ib8ht2>g15X#n5RRG2KmN~u_$R&XalfRTe0s&Ab03`NJxsLj;1y|H m@cg{vo&LW(^=~Bq{by%LNs+9$ZQQR6GQ-o=&t;ucLK6VfZzBr; diff --git a/graphics/pokemon/ludicolo/footprint.png b/graphics/pokemon/ludicolo/footprint.png index 23163f358cdc6e382e2fd53e1dd42d97f0eacf18..e5aa759abcd6b46c24beb819df1c19ee8f9986d3 100644 GIT binary patch delta 91 zcma#cpCB2=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U@r;B3<$IRq}goFpx2NeD{ tI=*9WzRS^>xAI$&& delta 74 zcmd0gn;_}R00ib8ht2>gRZkbk5RRG2KmN~uxY*_}b6s2eA0GCbf-e{(7>_ExXtv?_ ayON!u=ZOH*P7jIMAdQ}`elF{r5}E+oVH#fm diff --git a/graphics/pokemon/lugia/footprint.png b/graphics/pokemon/lugia/footprint.png index e6642ed07f1cd991dc6bcd8dc7bab0bd1c64f894..bb807c6dd543deb9a98bc751d3a3b3ed7cc4d692 100644 GIT binary patch delta 91 zcma#gpCB2=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U@r;B3<$IRpeAjnC0aQA@1 r?q>?lQ8gHBT4E5RRG2KmN~u7;k%6y}r%;9S{GFg)f-xMgC53Uts@@ c=l_3ZhHEE;b>&2*?tyfAy85}Sb4q9e02~S&5dZ)H diff --git a/graphics/pokemon/lunatone/footprint.png b/graphics/pokemon/lunatone/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vgO-~oc5RRG2KmN~u_`If#|1XdHElIl##(x?X+W%4b!rbxX f;0d{we^;0pes&0N{cnBs9!RsNtDnm{r-UW|)(jyM diff --git a/graphics/pokemon/machoke/footprint.png b/graphics/pokemon/machoke/footprint.png index d9009d3e19ccdb3a3744bea78bf0ece180b8d59f..5cde0083d574b77244440bfe9e6004f60b797c6b 100644 GIT binary patch delta 92 zcmYc+m>?O>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM3981i(?4K%;W?hNKbfBp73D* sfdl^;TW%=6VC0cyP<+P5X28JkT95OE{nKlcfEpM)UHx3vIVCg!0L8f=+yDRo delta 77 zcmXR&oFM7J00ib8ht2>g4Nn)x5RRG2KmN~uc)Y%i|F@*w3*(vx>GgE=b6Mw<&;$Ts=^cIm diff --git a/graphics/pokemon/machop/footprint.png b/graphics/pokemon/machop/footprint.png index 8b2808553b5498ecfc464696ab5f03a82de570f4..9bb3ae06333f26a7cfd5d889dbcce600a4a8b333 100644 GIT binary patch delta 86 zcma#bnjjg-%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Vgr;B3<$IRpe2c{l&i5c<+ n2K5YzWeQacZVm_8b_g-7KF>bO;M+N6pi%};S3j3^P6gMNb#U5RRG2KmN~W?E81q_|L@jABXv!>>E7fdK#L(7ML;w Wu9xsI_kNcS(&Xvt=d#Wzp$PzrHW}yu diff --git a/graphics/pokemon/magby/footprint.png b/graphics/pokemon/magby/footprint.png index 655d0ca2b84422a87f978db6a4a46e4ca7d0f71f..45e1a343e083c3d5fa6fd69ca6a9ab2eaa76a7cd 100644 GIT binary patch delta 82 zcmaz@n;_}S%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VYr;B3<$IRpe2c{fOg(LqO j8viqkFy8FpJ>kXB70V{cmiL+osEonW)z4*}Q$iB}EQlH` delta 68 zcmYd`m>_A-00ib8ht2>gc~2L|5RRG2KmN~W?5jJ+zEJ)XkNl5?94G#TpKn;g#!##% Uc~WKR(p?}ep00i_>zopr05+)@)c^nh diff --git a/graphics/pokemon/magcargo/footprint.png b/graphics/pokemon/magcargo/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vgRZkbk5RRG2KmN~u_`A04{Ab4(%{C&o58M?xPViT^*?;Bv a|DTzGYm&$Y;~d{GkVa2eKbLh*2~7YfXB<8N diff --git a/graphics/pokemon/magnemite/footprint.png b/graphics/pokemon/magnemite/footprint.png index f710e502832073b9517ea3df1521259e00ef78fd..3f8f930cbee499d9c468f4931a20183279deb790 100644 GIT binary patch delta 78 zcmWGenjq=P%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Vcr;B3<$IRq}0}MTUJZCr+ f*e0-S3S?xE$zb$cdRt~cPzi<Dnm{r-UW|mq8by delta 63 zcmYcao*-$(00ib8ht2>gDNh&25RRG2KmN~W}uT%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VQr;B3<$IRpe2i6{Ti5bEY lH@GDtSR7O)@QOGxF?cLv_Lko^K>(gMNb#U5RRG2KmN~Wl>ECn{fF`Vhwk==-+xySI>FYZpvl0n X<%Z03lhQ^1L7F^W{an^LB{Ts5gbx}p diff --git a/graphics/pokemon/makuhita/footprint.png b/graphics/pokemon/makuhita/footprint.png index 3da20ccb317125c24760c5cb14189361dc6bbc69..4f2aca69ec30ea5169cdd41a4758796a08ed52b0 100644 GIT binary patch delta 92 zcmYc+m>?O>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM3981i(?4K%;bcI1{St9ex4e8 ti6?aiC;mG+{;_xH_{+@vm~nv>gHRC9uGLblbAcKdJYD@<);T3K0RVGd9_0W4 delta 77 zcmXR&oFM7J00ib8ht2>g4Nn)x5RRG2KmN~WY^x`K9Xd8Lwn;D?vfz-uK1oIlsEfhV)z4*}Q$iB}PpTl? delta 80 zcmXR-nIP%S00ib8ht2>gZBG}+5RRG2Kfca?xZ3vc^$LMs0_Q&z+8uuXTj7iLyodcZ hhvlmUeueWp|7Wyz6F**^bX6Rr-P6_2Wt~$(696g*AiDqn diff --git a/graphics/pokemon/mankey/footprint.png b/graphics/pokemon/mankey/footprint.png index f02036af503a8618ff23ddf0eb1a09426c978b50..4881d17c33cf3dc42ff0754acaf2a6f862383116 100644 GIT binary patch delta 105 zcmd0+ogkUQ%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U~r;B3<$IRq}goFtb5;kl| z+^{im!b%3kef&Is_$6-e8*DH)*kIfsV9(4f&&(_xpvlazsFii2y-0BvP&b38tDnm{ Hr-UW|Lc1Z; delta 90 zcmb=;n;;p=00ib8ht2>gQ%@Ji5RRFmhYST76nIz;7B{dgQRo#))D&=3HRWS`YC02Ai8-k$RJNwKbLh*2~7a|;T_=s diff --git a/graphics/pokemon/mantine/footprint.png b/graphics/pokemon/mantine/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v`AWYGS@9> delta 64 zcmYcZnILJ+00ib8ht2>gX-^l&5RRG2KmN~W6#jer{D*YA!}67F_1`jr7%n!+&b)Bb Q_a;cWr>mdKI;Vst0QjpI>i_@% diff --git a/graphics/pokemon/marill/footprint.png b/graphics/pokemon/marill/footprint.png index a09d8f2c0187020e679dc1dd4434a05d24af92af..f70b3ea55d540bcc40a444bc5a1dab03200e6e77 100644 GIT binary patch delta 80 zcmWGdnIP%S%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VIr;B3<$IRq}2F7P>Y~PqU hSe`fuC^H)|F!WflYWc2_a{(%1@O1TaS?83{1OT)67To{< delta 65 zcmYcZogit$00ib8ht2>g8BZ6-5RRG2KmN~WZ2EV__|FD+1qJb@e+NYx1Q`llq;_a< Ro%RQ*_jL7hS?83{1OV3$7C`_2 diff --git a/graphics/pokemon/marowak/footprint.png b/graphics/pokemon/marowak/footprint.png index fbde41d04b5ae5170d314a631c21e1f9db79b3d1..e05d5d0005f667cac5ce2580072b525769dc4138 100644 GIT binary patch delta 82 zcmWGbn;_}S%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VYr;B3<$IRpe2c{l&i5c<@ j0>9Z=n2H)7889$xsN~>~F^h5nDr4|;^>bP0l+XkK?+O?8 delta 66 zcmYcbn;>b+00ib8ht2>gSx*gMNb#U5RRG2KmN~W?E81c*ybbqLiRsA>^A}h0-m(n2JkYN WT8Uf`yjgMrq{-9O&t;ucLK6T|7#L9i diff --git a/graphics/pokemon/masquerain/footprint.png b/graphics/pokemon/masquerain/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VKr;B3<$IRpeAh0@cU=o8< xjl9H;UfpgT~8Os5RRG2KmN~uxZd{g`=1J5CeDAzEcB~p{=@mUhxsep jgWltB!5RRG2KmN~W?D*#xV0&0zVH5kp`h+j?9j_c8Ik1Fr YGE~l#ocLpNKoCfqr>mdKI;Vst0Fclbwg3PC diff --git a/graphics/pokemon/meditite/footprint.png b/graphics/pokemon/meditite/footprint.png index 034cb0df8db238d6009b91e340d55de7355089f7..4cf72d9aef9cc848fdd1c1d6278bd326b12d0f04 100644 GIT binary patch delta 84 zcma#dm>}uT%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VQr;B3<$IRq}2F7R1Ja70N lI{q^=ZLDwLVoE*8z;JIemzZ;EQU_2WgQu&X%Q~loCIDie8rc8< delta 69 zcmd0ZoFM7I00ib8ht2>g1y2{p5RRG2KmN~WZ2EV@_|F9Ph5UawzBJ2gaZF*=W@eCk VEqZ1~?;>-M9#2<4mvv4FO#ne$7!Uve diff --git a/graphics/pokemon/meganium/footprint.png b/graphics/pokemon/meganium/footprint.png index 39303ac4fa069d961f8b65445136b3d9bed42d79..1592e145c05107d95cc29d4ffd4d2f71eb52d28e 100644 GIT binary patch delta 91 zcmYeypCB2=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U@r;B3<$IRpe2IgaIY%isG szST=Ssc-PGU@B_t_|MGznX$u(LA{!1al}8x6rg$rPgg&ebxsLQ06(A|^#A|> delta 77 zcmc~#oFM7J00ib8ht2>g4Nn)x5RRG2KmN~W?D%)p*d{RD;=q{?4YDqW1SfF2$p4W1 dcf+_Ll!@UQv#@gRZkbk5RRG2KmN~W?E81s_|Js&AENw9|8F#3xc^syC6PJx b|9^Id!s8NmtUg@J1Znhi^>bP0l+XkKK7Jl8 diff --git a/graphics/pokemon/metagross/footprint.png b/graphics/pokemon/metagross/footprint.png index 07f91d604f6dff45dc0f8aa2acd8a39f29e4ef36..fd7039efd32dee848261a7583f5f403330e99b01 100644 GIT binary patch delta 88 zcma#fnIIX=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VGr;B3<$IRq}l!Syl2E}j8 p3PLAbnOTh#zBu+hWRRY~&QNro)t*g0IRvPf!PC{xWt~$(69BBM8leCH delta 71 zcmd0ao*?PO00ib8ht2>gB~KT}5RRG2Kfcd@=x@vMcLV!Ghj;ZMSN==1{E#=g@t>uL Xv1`55;@6gau^?TZu6{1-oD!MbP0l+XkK5lt5P delta 72 zcmd0bnIP%R00ib8ht2>gWltB!5RRG2KmN~WZ2I>%{YNmr)Bgk|hcAC@4u5>i^L+kc ZSB7&=vNwNAN{55AdAj?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vY~PqU kSe`Hm3QI6b_5_47On<mdKI;Vst01+G*+5i9m delta 68 zcmYd~m>_A-00ib8ht2>gc~2L|5RRG2KmN~WZ2EV__|FD+1qJbre@%iDKJu^PVMv`P UxuqhqzXhbl)78&qol`;+06eM~rvLx| diff --git a/graphics/pokemon/mewtwo/footprint.png b/graphics/pokemon/mewtwo/footprint.png index 0f7573dd3b9663a98152411aa68ba6474e86f3d8..bedffad65db4a03110a8244148a231b295331242 100644 GIT binary patch delta 97 zcmYc(ogf**%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V4r;B3<$IRq}tjY?_k{wbK5)uq={&S`N=z8Q1)WzWG>gTe~DWM4fM%N*{ delta 80 zcmXR-nIP%S00ib8ht2>gZBG}+5RRG2KYq@Cc(}5S|82sN^Bhj|-R7Ub hlJbXfQB~Xj|BM3lqO~ti=U)M7_jL7hS?83{1OO-AA(H?A diff --git a/graphics/pokemon/mightyena/footprint.png b/graphics/pokemon/mightyena/footprint.png index b39af65bc021851d7d0e440e9623123885884c37..f7693643515a6b54f97773722dc74bd7ee6d3170 100644 GIT binary patch delta 110 zcmXSHWSk(G!OXzGplX||1fm| zB#)wGjzopr06cCeA^-pY delta 94 zcmZoFVdQ&MBb@04mQX%K!iX diff --git a/graphics/pokemon/milotic/footprint.png b/graphics/pokemon/milotic/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?0 hXZRO%d}Nqq!w|Zh`Tf@msR2Mm44$rjF6*2UngI4J8iD`- delta 66 zcmYcZn;>b+00ib8ht2>gSx*EE<{D*YA!}66HztYb)tYTnTeqH+W Timcl=KpH$<{an^LB{Ts5G9?-v diff --git a/graphics/pokemon/minun/footprint.png b/graphics/pokemon/minun/footprint.png index 1071b8069e0e22818c1ee50c9958c643828a02fa..3a2365e1685731ea78a0f4d297a9670310477e63 100644 GIT binary patch delta 81 zcmWGbognGM%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V2r;B3<$IRpe2i6{5o-^zc iH{=}zC-90mGBFf)v)U~Sm%R#9#o+1c=d#Wzp$P!a(-+JD delta 66 zcmYcdn;>b+00ib8ht2>gSx*ECo{YUco56*I34LJ)qCNVK|ewJFI Sc-m_wNQ0-VpUXO@geCwD2^bjw diff --git a/graphics/pokemon/misdreavus/footprint.png b/graphics/pokemon/misdreavus/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VKr;B3<$IRpeh9)+)K2DxV x<^mn%Y|QW31d{3*oX)UI%#fD2At`Y~g5ggFm#j5^w**iVgQu&X%Q~loCID-x94G() delta 81 zcmXR(ognGM00ib8ht2>g9Zwg>5RRG2KmN~uSZ{mydre#VD~>Okb01E&=lDB;eWCp~ ip88jkb$`--{FG;46carg1y2{p5RRG2KmN~W?D%)p_|HamKl~4u`4*LFfdH`!{+&Irspf5N(N6?KbLh*2~7ZLbsJy+ delta 70 zcmd0dnjq=O00ib8ht2>gMNb#U5RRG2KmN~W?E81s_)k~*k0<9pG|G3?ooHs6c!hx> Wr%7_=1P3=ckS0%8KbLh*2~7aIX&V;+ diff --git a/graphics/pokemon/muk/footprint.png b/graphics/pokemon/muk/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vkHf delta 74 zcmd0en;_}R00ib8ht2>gRZkbk5RRG2KmN~WYgTe~DWM4f6fYcv diff --git a/graphics/pokemon/natu/footprint.png b/graphics/pokemon/natu/footprint.png index f17821fc00dcc247dd6c8179d1696d3c5e211d39..348068d1c534d734f3eb7d61708f6a5172252f9c 100644 GIT binary patch delta 79 zcmWGZo*?PP%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U-r;B3<$IRpe2UZ`xfFm^w gEfUfPI28FAoKG?bEXkU}3RJ`3>FVdQ&MBb@0HoX(X8-^I delta 64 zcmYcenILJ+00ib8ht2>gX-^l&5RRG2KmN~Wl>B>_-?jdYFVdQ&MBb@0HLWB5dZ)H diff --git a/graphics/pokemon/nidoking/footprint.png b/graphics/pokemon/nidoking/footprint.png index 577e14f302b4639921e6bff5c839e751ab4f7083..c0e6690e10e666ea9d9e0b931728022815865b09 100644 GIT binary patch delta 91 zcma#cpCB2=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U@r;B3<$IRq}oP>n>0|)*$ tI{ssyvgJRstAiN}f1}#YmhO$<^Pg!?v>H^g>c)I$ztaD0e0sy27AbtP< delta 74 zcmd0gn;_}R00ib8ht2>gRZkbk5RRG2Kf=#{aGv*&+5RwdnMP%UWLHBD2U8dGRff=i a|M?l(ehPd@o7-gt(&*{x=d#Wzp$P!Gry5rP diff --git a/graphics/pokemon/nidoqueen/footprint.png b/graphics/pokemon/nidoqueen/footprint.png index c3156e6215e1f951c582334ed8cbd33489f84c3e..a5b255592946a350acef6368360b7defe219e8d7 100644 GIT binary patch delta 94 zcmYc)njjg;%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Ver;B3<$IRq}gam;H2@@tH wOjw<;;eT_}lllgM|Lg)u^#=~zUHq)$ delta 78 zcmXR)njq=P00ib8ht2>gO-~oc5RRG2KmN~u__w_6`FTmXZN@SQZjSsn9A7ZobNro< f{v-VShyV5rFKUH7y0)gKgEV`(`njxgN@xNAr^g=z diff --git a/graphics/pokemon/nidoran_f/footprint.png b/graphics/pokemon/nidoran_f/footprint.png index f673df1128c0dd0eb1c4453f406ba2a3bea78a65..d0111077b5e16ed781320c4918c8a722552a547a 100644 GIT binary patch delta 82 zcmWGfn;_}S%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VYr;B3<$IRpe2UZ_Go-^zc jH{=}zC!D>}pu^9Q{hH-}!HU={pfUzeS3j3^P6gIZqeI5RRG2KmN~Wl>B@5{DbP0l+XkKT!I>A diff --git a/graphics/pokemon/nidoran_m/footprint.png b/graphics/pokemon/nidoran_m/footprint.png index 874c6078172949c6f4b6df926e31b40bdd692131..a6b3e3b4ad5586c930fd1e7ca2ae6d3f724308fc 100644 GIT binary patch delta 84 zcma#dm>}uT%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VQr;B3<$IRq}21Ye@fh4;F l2mUcMHpD0-g1y2{p5RRG2KmN~WZ2I?(eWCp~9{VSP94A;8)qmwNNM%TN VllX35l6w%O$J5o%Wt~$(697dg7gRZkbk5RRG2KmN~WZ2I>%{l~QPA5PAH$Y{+}`+$9+{3o9O buM|%)I7W({*pxZ#7)Yb1tDnm{r-UW|Rl**5 diff --git a/graphics/pokemon/nidorino/footprint.png b/graphics/pokemon/nidorino/footprint.png index eaa67b3791b4933647c59e160a8a1b42a5578d52..9ab80e766aa01039fd853c90cf08cfc8c5fd8d04 100644 GIT binary patch delta 94 zcmYc(njjg;%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Ver;B3<$IRpe24*)lwsV|3 wd#oj%)Ej)LXP79!lEN(bo0;txTZa?FgCZ_PuOri&fm#?mUHx3vIVCg!09&XXWdHyG delta 80 zcmXR)nIP%S00ib8ht2>gZBG}+5RRG2KmN~W?D+RL{l~QPA5PAF$Y_0-y-tAB(ZNjM h?}YRp;pZ8`I2mMlL=V2?etZR_-P6_2Wt~$(69DKW9`67E diff --git a/graphics/pokemon/nincada/footprint.png b/graphics/pokemon/nincada/footprint.png index deea05721e666cdff97872ffbea1eecd620b4fad..69d2b0491dd02815656ec8fbdee018f52a538fb2 100644 GIT binary patch delta 86 zcma#anjjg-%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Vgr;B3<$IRq}2F9OkY|r?4 mcuaYCiV{K&ANbM02-KOO$-Kfn>dzaXQU*^~KbLh*2~7Zo7aM8- delta 72 zcmd0bnIP%R00ib8ht2>gWltB!5RRG2KmN~WY?8ZT{O4i%kNamn{8yAPHU2X>z2WpB Z0fwoeGFCIKceaDHdAjFVdQ&MBb@06QWcMgRZ+ delta 76 zcmc~xm>}uS00ib8ht2>gbx#+^5RRG2KmN~WZ2EWAxaL!O#Q{E7{@apv^Vt{9|1A0M dhVg+Zj10l0lIrt5SbYF#^>p=fS?83{1OP$r9UA}u diff --git a/graphics/pokemon/ninjask/footprint.png b/graphics/pokemon/ninjask/footprint.png index eacba16dc87057ad313731b6d7a45aaa64a7cabd..f582fcc058c498573e3f924938f72c83b3192adb 100644 GIT binary patch delta 87 zcma#fo*)^-%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U*r;B3<$IRpe2WD2D9(xH1 oEeVM_1B3d63HApL^egc)WPM`UJtO^E1yC)6r>mdKI;Vst0EA~7eEgB~KT}5RRG2KmN~WWc_OVCprDc{c|7Y&wa>mf0((tjbDR{ XVN#E@x`?q!AV`;|tDnm{r-UW|l%yE< diff --git a/graphics/pokemon/noctowl/footprint.png b/graphics/pokemon/noctowl/footprint.png index 89ed409e986e46064eea8fa700354b218129423d..0386b465ac0199f04483ed8d03d583752220c61f 100644 GIT binary patch delta 98 zcmYc-n;;p>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Var;B3<$IRpeAV^6_$V>2e ym#8uCaKis)$A8Ss|Ct4n>=}gG6&6StFfhE^#PMUg*0ae#Z492SelF{r5}E*USt3>d delta 81 zcmXR*ognGM00ib8ht2>g9Zwg>5RRG2KmN~uc)z~Q{wq&$mt@r>NxlunHV@K&DDXSk hzj1sdz!LIVzJ-DBjM%Gmg;GzDeot3Fmvv4FO#s8P9e@A; diff --git a/graphics/pokemon/nosepass/footprint.png b/graphics/pokemon/nosepass/footprint.png index 9b9ad27082eb00b534f55cdaeec20639a82b34cb..ad8673add30396f0784450cf19a49cdf9c7dd49e 100644 GIT binary patch delta 91 zcmYeupCB2=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U@r;B3<$IRpe2Ig7bx6{Xeq@*9rz6hNsz_+bxy~F9E7&@O1TaS?83{1OO@59Wnp_ delta 76 zcmc~#m>}uS00ib8ht2>gbx#+^5RRG2KmN~W?5Mk8Tr(lPLgD;}3G*Ko+A}fkl>gxv cgIZqeI5RRG2KmN~WY^pn9Y?HvgkogP;iy))d!6}Rk-%UhL T?_Sd<2h!o`>gTe~DWM4f%i0yF diff --git a/graphics/pokemon/nuzleaf/footprint.png b/graphics/pokemon/nuzleaf/footprint.png index b35288e05947ef6d7fcbbd6f4c392d0152384447..bd9be61709573c7903b283cd2c5f98f34ca7ca2f 100644 GIT binary patch delta 95 zcmYc-o*)^;%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*US6G7^>bP0l+XkK;S(S- delta 81 zcmXR;ognGM00ib8ht2>g9Zwg>5RRG2KmN~u7;k%6zq-x;6_0#Fhiq3JgP=XfUq+?M hw)$^84paaCXJ&YyEMm6jfcP4aeot3Fmvv4FO#q%p9Z&!O diff --git a/graphics/pokemon/octillery/footprint.png b/graphics/pokemon/octillery/footprint.png index afa1f5433c3e8e975aa346658e2395ab26ceb1e4..2306c5b0bef512b1cd89356d1714be1efc92f3cb 100644 GIT binary patch delta 94 zcmYc-njjg;%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Ver;B3<$IRq}24*=nIXN~n vMYd=DJm=~qF6BzR(UtgNZ(tyw;K0OCyp`2=*DKRwKrIZOu6{1-oD!Mg9Zwg>5RRG2KmN~W?6Nbi`FG~SXWhf{ac#C|c#QdsWh~Bp iXq^AB-^n1GcxvXg2~QWt5RRG2KmN~Wl)Y*Ehk3F6SDyL{sf@ec$x7bbD{lu< N>*?y}vd$@?2>^6j6*&L^ diff --git a/graphics/pokemon/omanyte/footprint.png b/graphics/pokemon/omanyte/footprint.png index f5eb9fdba0aa321d78f34dbfb6b2e9ecead8e81f..ec2dde19c66618e61c2d61194f93a2376d58d515 100644 GIT binary patch delta 76 zcmWGYm>}uS%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VMr;B3<$IRq}11#(k5{)Yu dyLp(I8H^Q~m`mD~rUMl)c)I$ztaD0e0suob6-595 delta 60 zcmYcYm>_A+00ib8ht2>gaZeY=5RRG2KmN~Wl)Y*Ehj~#IPoV%4!>L%=`%gY?Uk+00 M>FVdQ&MBb@08XqF&Hw-a diff --git a/graphics/pokemon/omastar/footprint.png b/graphics/pokemon/omastar/footprint.png index fdd911ecf7c7fe51a86b733ddfc3df41f511fa01..e587f45031f2e2401775e4e27a5f650796da3432 100644 GIT binary patch delta 81 zcmWGdognGM%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V2r;B3<$IRpe2WEB&33&qp iX2A&;8}v>dU|>j?!hF)5S=&t;ucLK6VRofn1x delta 65 zcmYcdogit$00ib8ht2>g8BZ6-5RRG2KmN~WWW8zpXL9-vW)}xHTjpJF>KW#|l99Bm R;d~EL@9FC2vd$@?2>{7!7Eu5I diff --git a/graphics/pokemon/onix/footprint.png b/graphics/pokemon/onix/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vcY`rW?!c2dZK4boFyt=akR{0E~|oZ2$lO delta 63 zcmYceo*-$(00ib8ht2>gDNh&25RRG2KmN~WJuQJhOI9n^*(3{Y< P8l>9O)z4*}Q$iB}&%qar diff --git a/graphics/pokemon/parasect/footprint.png b/graphics/pokemon/parasect/footprint.png index e0f1715f2f04f00c853813b74b6d1e4984791432..ed9221adef53034ade55a9e652085f93d4ca3c59 100644 GIT binary patch delta 79 zcmWGdo*?PP%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U-r;B3<$IRpe2WEDM4#5s7 gi5Zd-H!dt?^k!x{bF|y(IZzFQr>mdKI;Vst0KPRD4FCWD delta 65 zcmYceogit$00ib8ht2>g8BZ6-5RRG2KmN~WWWCvZ!Cqli`j5}^AF9uKQ_rxeT2^e; ReP?cvdQVqBmvv4FO#uAq7$pDz diff --git a/graphics/pokemon/pelipper/footprint.png b/graphics/pokemon/pelipper/footprint.png index 54718d259e56a8cf58d8809950e3186a62d12ab5..bfb9703f55f6465ba8dcd356eb562046e1ebb5ad 100644 GIT binary patch delta 99 zcmYc*pCB2>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U{r;B3<$IRq}l!Syg2?Bc# zD%7?g{KqeHlKCRPz$5lW{5)?QzBDxcWMqEK$l#mJ_m*p4^*o?H22WQ%mvv4FO#sE7 BBg_B* delta 82 zcmXRgT~8Os5RRG2Kfcd@7;kyly0lIG6c781g)bNdHa1^iS9p~E jgVE&^PyG|ge>a&KHV6xR-4(y?9LNAqS3j3^P6mdKI;Vst06%vks{jB1 delta 78 zcmXR)njq=P00ib8ht2>gO-~oc5RRG2Kf=#{aGCp%!I;A~A??S3a~~Y#+TJXD!7gys f_|MPtAO71j%x@R=`X!{j6QtSG)z4*}Q$iB}t?(bW diff --git a/graphics/pokemon/phanpy/footprint.png b/graphics/pokemon/phanpy/footprint.png index 70498b18f6b273c127e876706cfde3a76b70fa84..61eb3ebac37cc186126f1fe4df697b22dd8f8717 100644 GIT binary patch delta 80 zcmWGdnIP%S%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VIr;B3<$IRpe2i7g8BZ6-5RRG2KmN~Wl>9p({l|fR2M0ZYzZ=`N85k0$N#x$1 RW?BnU@9FC2vd$@?2>{xz7RUeq diff --git a/graphics/pokemon/pichu/footprint.png b/graphics/pokemon/pichu/footprint.png index 823c7e32d4a43522b56932071ae5bd7df9342816..62d82450417cf9ea8ec47bd18a3f5c2772d1c2a5 100644 GIT binary patch delta 79 zcmWGdo*?PP%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U-r;B3<$IRpe2R2?FA9jfu g69tl)nY9=gD$-dlSf^F?0@W~hy85}Sb4q9e0E1Z;bN~PV delta 65 zcmYceogit$00ib8ht2>g8BZ6-5RRG2KmN~WYR;go~~gFq5@+u_^Oo&)tTc)I$ztaD0e0szMsAaei! delta 80 zcmXR;nIP%S00ib8ht2>gZBG}+5RRG2KmN~uSZ{mydr@2dGoJn_jxU(4MgBfW|Dk;T h!+E)`hExCkvopMv5sBGV_H!CYyQiz4%Q~loCIC5&B3l3e diff --git a/graphics/pokemon/pidgeotto/footprint.png b/graphics/pokemon/pidgeotto/footprint.png index c507f72b8308b7b3cebc55ee37efa2fd298ddfc0..8d9cd78e0d839a121abfa1cbfc21df1113712585 100644 GIT binary patch delta 88 zcma#enIIX=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VGr;B3<$IRpe24*ovfk&Ge q6un=x(4;|-nPEy8`+=58^F)A(89ZJ6T-G@yGywp{5F8W$ delta 73 zcmd0aognGL00ib8ht2>g6;Bt(5RRG2KmN~W?5Nw%zOete;|q3sk-rnuf28xf{(pV& Zg*`*2hJ@12-Jw<>eV(pqCb(4;|-gMp!F2^$Ch42F83Y6eeNKbLh*2~7al+#4_e delta 74 zcmd0en;_}R00ib8ht2>gRZkbk5RRG2KmN~WY^vMOzOete;|q3sj=vMrf28v}{eOLs aV+jvK*Dc9gg@R1lAdQ}`elF{r5}E+)KN}qY diff --git a/graphics/pokemon/pikachu/footprint.png b/graphics/pokemon/pikachu/footprint.png index a8ee2e4ac9a4e18dddd27fb3126b657980aa7d01..9145eff5b81ea35c86a21abd98279868313863ca 100644 GIT binary patch delta 79 zcmWGZo*?PP%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U-r;B3<$IRpe2WDO#A8v^m g@(Kcv8B;PDihr>d1S!-s0@W~hy85}Sb4q9e0F>?*Hvj+t delta 64 zcmYcenILJ+00ib8ht2>gX-^l&5RRG2KmN~WWW8$qr#JnFa=*j>Hxoq}7&=>|iu`}a Q&IT#>boFyt=akR{0L)ky1^@s6 diff --git a/graphics/pokemon/piloswine/footprint.png b/graphics/pokemon/piloswine/footprint.png index 0b7405eceb5df61de5729b7af406ff2fac69fd7b..122f3e3529ad21060ec6f4e4890d309c99eef7eb 100644 GIT binary patch delta 89 zcma#cogf*)%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V0r;B3<$IRpe2PPdZo*Gu3 qKk^b!>Kz0p@VdO=mynQF@M2h`z~Q^TJ-h&@n!(f6&t;ucLK6U@`x;09 delta 74 zcmd0en;_}R00ib8ht2>gRZkbk5RRG2KmN~W?5n$<{^Q2^4~_F5GFpo;-gNllJnvz= btqU(hbe#CqBbh(0gEV@&`njxgN@xNAC>$Lt diff --git a/graphics/pokemon/pineco/footprint.png b/graphics/pokemon/pineco/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vg6;Bt(5RRG2KmN~W?69*>uc(k{v17Ve$kw62@^@qVqWZ56 ZdJJ36Nv}6%TwV#%=jrO_vd$@?2>^-#8Cn1U diff --git a/graphics/pokemon/plusle/footprint.png b/graphics/pokemon/plusle/footprint.png index 1071b8069e0e22818c1ee50c9958c643828a02fa..3a2365e1685731ea78a0f4d297a9670310477e63 100644 GIT binary patch delta 81 zcmWGbognGM%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V2r;B3<$IRpe2i6{5o-^zc iH{=}zC-90mGBFf)v)U~Sm%R#9#o+1c=d#Wzp$P!a(-+JD delta 66 zcmYcdn;>b+00ib8ht2>gSx*ECo{YUco56*I34LJ)qCNVK|ewJFI Sc-m_wNQ0-VpUXO@geCwD2^bjw diff --git a/graphics/pokemon/politoed/footprint.png b/graphics/pokemon/politoed/footprint.png index f97b789949904a280aa0feb94a9a63a65b32adee..9499c60ecc1a794d67de8f8e5b2870432838a8d8 100644 GIT binary patch delta 92 zcmazqm>?O>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM3981i(?4K%;bcegakVVr#4$2 s(ITF&|0T}cH`rj`z@?AHI!N7?7>#s$P=0FV$p00i_>zopr09Y0t6aWAK delta 75 zcmXSjpCIYR00ib8ht2>gHBT4E5RRG2Kf=#{I4;+6PSkjdeM&|`iiP5t56*I09X$V(@hJb6Mw<&;$U+!xtF< delta 66 zcmYcdn;>b+00ib8ht2>gSx*gMNb#U5RRG2KmN~WYbP0l+XkKzqlMk diff --git a/graphics/pokemon/poliwrath/footprint.png b/graphics/pokemon/poliwrath/footprint.png index 8f562fcef69f3b823f11712c9d16b2a50d0fb07a..393f8191c8639eaff28e5274b4537be56478e8a8 100644 GIT binary patch delta 87 zcma#ao*)^-%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U*r;B3<$IRq}h6Z+?9(jow o^$G%y`8RL~*fJ;{V-_f7;9}ucdLFjwA5blWr>mdKI;Vst0DyZMMgRZ+ delta 72 zcmd0fnIP%R00ib8ht2>gWltB!5RRG2KmN~WYtZxRF*Cb2K9|CW&Y ZpYd~*$bm20K7({Ic)I$ztaD0e0s!rS9S8sb diff --git a/graphics/pokemon/ponyta/footprint.png b/graphics/pokemon/ponyta/footprint.png index 906ee7a5b5306d3ac20589488b697be0ff9b74f4..593b4eae8155988bea5aace81c0955245325af23 100644 GIT binary patch delta 85 zcma#boFEy%%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VAr;B3<$IRpe2c|RZ5;x=< m1pc#YFm1XiBr!wgffvK_3G8y*T0#myl?gMNb#U5RRG2KmN~W?E81a_|F9Ph5Ua4SW^DaIsc*DK8BYe W^qs^JmsO2iAWfdGelF{r5}E*%wi;>x diff --git a/graphics/pokemon/poochyena/footprint.png b/graphics/pokemon/poochyena/footprint.png index c4afe995f028c17f3013e5c3adc00383dc796659..820645c7cd1fec261fc47c035127cdded119b561 100644 GIT binary patch delta 99 zcmc~UpCB2>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U{r;B3<$IRpe24*)lwr6Yt zM)M9PWFAaNJgBg@vGFeh^M7Wxee66sd^`pW43iVt(o=u9{sZb`@O1TaS?83{1OO*b BAM*eJ delta 87 zcmXTVo*)^-00ib8ht2>gBTpB{5RRG2KmN~W?D+RL{YNmrQ~D*zKG}4Ox;YO!?GN); oxAA}Ck$);#_ddNrZ@i!l^|0*UHx3vIVCg!0J?)AbN~PV diff --git a/graphics/pokemon/porygon/footprint.png b/graphics/pokemon/porygon/footprint.png index 02243e3bc455be68400e4e593bdfe4bb84da39f5..39764c24a40afa748e9927a8fb0adbab7d18ff23 100644 GIT binary patch delta 83 zcmaz@pCIYS%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U_r;B3<$IRpeAjnHd_}9>M iL-7S8lc8M#12cpCM(%aG$_{2gbqt=aelF{r5}E)=!5QWN delta 68 zcmYd~m>_A-00ib8ht2>gc~2L|5RRG2KmN~u=x=*izE0!|bJG*S7xQhH1D^i>&v5sw Uh{<=RnlB(Np00i_>zopr09;fWWdHyG diff --git a/graphics/pokemon/porygon2/footprint.png b/graphics/pokemon/porygon2/footprint.png index f92224af35c43509cc3e19c400fff249400a23d2..40f947b463556e97a3f621928aebadc69badbfca 100644 GIT binary patch delta 83 zcmWGfpCIYS%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U_r;B3<$IRpe2IgnXJa70H jbo^)LYU*abYG43V{)YRFk)z`spgIOmS3j3^P6 delta 67 zcmYcfpCD<+00ib8ht2>gIZqeI5RRG2KmN~W?D%)X_|Js)Mf`s>IP~~JKL598_%=!S T8*5-l7D$JutDnm{r-UW|F>n~C diff --git a/graphics/pokemon/primeape/footprint.png b/graphics/pokemon/primeape/footprint.png index f4c90ee17574c08ea0a8fb14feb3bacda9eccd69..76f77d387ec8010c70b953c9558510559de22173 100644 GIT binary patch delta 95 zcmYc;o*)^;%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Uzopr0E;~x@c;k- delta 79 zcmXR;o*?PP00ib8ht2>gEl(H65RRG2KmN~uSZ{yWy{xVM4Nw0KNjnBX`@`&&0>2Xb f9qL~>zW86yaI;&)N^oA&G>~pjS3j3^P6gHBT4E5RRG2KmN~WYDigP ct=ROR;ok<)O1J9MUqL!OUHx3vIVCg!02>n>CjbBd diff --git a/graphics/pokemon/pupitar/footprint.png b/graphics/pokemon/pupitar/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v_A-00ib8ht2>gc~2L|5RRG2KmN~u7;bY|y}phAkHtm)N`YU==Rf?nXSi@h U==*!QZyq2mp00i_>zopr0B)ljB>(^b diff --git a/graphics/pokemon/question_mark/footprint.png b/graphics/pokemon/question_mark/footprint.png index 7c4f45eaad890c5daa66312196220449bae97634..8da752a46b30d4f1163cdadd9b84f2d418bd9e75 100644 GIT binary patch delta 107 zcmd0+pCFmW%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U?r;B3<$IRpeAjnBDusa-3 z+rO|#u9=aa`8PA$PkA0AF`j9~5^r)P-eft%?BtqY!OYCSdzM>PaQ`eBpne8VS3j3^ HP6gQ%@Ji5RRG2KmN~u7;k%6GPzC6wQZYA+voX`btjB%64EPb s<~)orI^1}ehkdr=o%Xj1AOHVne7{lT=&pFNO(26jUHx3vIVCg!0AWQXkpKVy diff --git a/graphics/pokemon/quilava/footprint.png b/graphics/pokemon/quilava/footprint.png index 28324dd7c98bfc45dc45be134ce91dbb01426e7b..46c185bffe9e260608a049d2806b42eef920cbda 100644 GIT binary patch delta 80 zcmWGdnIP%S%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VIr;B3<$IRpe2UZ_mo*Zt8 h8}bSQpBYms8OoGcJ8u8Zo&r?F;OXk;vd$@?2>`?K7_tBW delta 65 zcmYcZogit$00ib8ht2>g8BZ6-5RRG2KmN~Wl>ECk{fFfF56*Ip|86L2GcdHrNJR-> RKOqEC@9FC2vd$@?2>{}y7SaF! diff --git a/graphics/pokemon/qwilfish/footprint.png b/graphics/pokemon/qwilfish/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vgIZqeI5RRG2KmN~WZ2EW8_|L@j9|!v#9Q0%uQxBeEP>~iB Tc^B*z4$|T2>gTe~DWM4fAdnZ1 diff --git a/graphics/pokemon/raikou/footprint.png b/graphics/pokemon/raikou/footprint.png index b7081dcd35bb2e252476df282d527b5d729adf85..b7cd9c7dbf4d7aa76f07cb8f2274db828f94a4c4 100644 GIT binary patch delta 90 zcma#gn;;p=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VWr;B3<$IRpeh9)+)Wvo1J rgHBT4E5RRG2KmN~uSZ{myenp%7AB8WCvW*H#4qx2oJ)CdL b?D4do;enor&W8<=%pjefu6{1-oD!MgVNVyw5RRG2KmN~W6#l!KT`?z!;ptqt`@1t0zkrl^y85}S Ib4q9e0QbTY?EnA( diff --git a/graphics/pokemon/rapidash/footprint.png b/graphics/pokemon/rapidash/footprint.png index 3361489fd9fe30cdc6b98a6edf53ce626b9ed607..ffa2c80a9f23987ee5b78e6ffc11a8268e31f14a 100644 GIT binary patch delta 89 zcma#cogf*)%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V0r;B3<$IRpeAh0`d;D4jz pKX#6r{~a9#92e+BGcijrFvL0XuAVSEa~e=JgQu&X%Q~loCIBr(9mfCw delta 74 zcmd0en;_}R00ib8ht2>gRZkbk5RRG2KmN~u*l&B7y{?V@jY3I-B&#D!<0kv(#tfnV a{_``;w-qus)Vg&8q|wvW&t;ucLK6VJ=o#Js diff --git a/graphics/pokemon/raticate/footprint.png b/graphics/pokemon/raticate/footprint.png index 6628cfdd7563bd2c276372cd55dbb9c98933d1ac..e1462e71a47fbe507217d909bb48a2610e71fa34 100644 GIT binary patch delta 90 zcma#gn;;p=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VWr;B3<$IRq}hGsUlX`DQJ r%q4!*HwgS@7f7l*aG;`rk&}U8M=<-WxX{ZcK;;acu6{1-oD!M<9G@Lk delta 75 zcmd0cpCIYR00ib8ht2>gHBT4E5RRG2KmN~W?0O|x_uRN9DE-F)J}3JhjxYLc4%=6= bwaog@;HoX*@%?V@T98gpS3j3^P6_A-00ib8ht2>gc~2L|5RRG2KmN~Wl>Gbq{D*A&!~E3(zk<&?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vgVNVyw5RRG2KmN~W6#l!KT`?z!;ptqt`@1t0zkrl^y85}S Ib4q9e0QbTY?EnA( diff --git a/graphics/pokemon/regirock/footprint.png b/graphics/pokemon/regirock/footprint.png index 44da2a57fd99456cc87a3b26569c3b06ece88ee7..d7a4380a77ee37f4c6ddd69b8678063e57936c7a 100644 GIT binary patch delta 97 zcmYc(ogf**%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V4r;B3<$IRpeAc#G1pr)bm xHxqL^L-P-AjYt0(oCLOourR-8n_$Go#=yLdTXRL{iDsZK22WQ%mvv4FO#ne3Am{)9 delta 80 zcmXR-nIP%S00ib8ht2>gZBG}+5RRG2KmN~u7;bY|zPe5S7tj6s#(MluEY5ZNj8_t_+nc28G7mvv4FO#u76AzJ_d diff --git a/graphics/pokemon/registeel/footprint.png b/graphics/pokemon/registeel/footprint.png index e191faabc874c27330f63af3b9bd51571239febe..7f4ee5797017d5ca3e212745377d2459a8b67753 100644 GIT binary patch delta 102 zcmd0-njo3T%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Vir;B3<$IRpeAh0`d;D4jz zv8IC!?FTosE1v9CbmeVn;876Q;F!Xs#h{g(z`$_oBuDebE3z&?tqh*7elF{r5}E)p Ct0T4m delta 85 zcmb=*oFEy%00ib8ht2>g15X#n5RRG2KmN~u*l&B7y{_%}amjP_X%^vU49e9HznQJT mlESdl!Eu2|0As+-|Nj|`wu;A33cs}lWQM1!pUXO@geCxZMIjOZ diff --git a/graphics/pokemon/relicanth/footprint.png b/graphics/pokemon/relicanth/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v^wcZJUl!MK5zMi9?$+$57ffo>FVdQ&MBb@0Q&_YApigX delta 77 zcmXR)oFM7J00ib8ht2>g4Nn)x5RRG2KkDZ{thPV=xUQ}J4G+7)1!jdu=|2vf|KL3D eVZ80(|Nj{_OccD(nzyzFq}S8c&t;ucLK6V3XdrU{ diff --git a/graphics/pokemon/rhyhorn/footprint.png b/graphics/pokemon/rhyhorn/footprint.png index 632b753c24f66704784dc8ea326165c9c4b23e65..84e88598c7bb03ba04100dacf814744e3f77a9a8 100644 GIT binary patch delta 81 zcmWGdognGM%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V2r;B3<$IRq}21YSfwtY+j ilm0idew1(sVPx3xkK

uG)n_RScf4elF{r5}E)B_Zqg8BZ6-5RRG2KmN~WY^uAT{^JI}6aS5k3(h}RJjLMBAoj$< R>Bl{gdQVqBmvv4FO#loi83q6V diff --git a/graphics/pokemon/roselia/footprint.png b/graphics/pokemon/roselia/footprint.png index bedf2ab695d1eb9a1a5bd7230764362960d7a89c..6ea3494a033b21d5a9875d67a60c250454aaca8a 100644 GIT binary patch delta 75 zcmWHFpCIYR%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U>r;B3<$IRq}0}MU9JZJbF cRLmF{^d~VsdzEp)3MkLu>FVdQ&MBb@09fZ2Qvd(} delta 62 zcmazKnjmS(00ib8ht2>gNlzEY5RRG2KmN~WgX-^l&5RRG2KmN~Wl>B?^{D;Hy9`dtXJuKkF$gpUd^x^bG Qzl$K{p00i_>zopr0Ok@Gp8x;= diff --git a/graphics/pokemon/salamence/footprint.png b/graphics/pokemon/salamence/footprint.png index 2440a370fd6a5ea8af7c21ed6aecde31ffb01417..b943d076537fc11cf10035a23dc51bd57bf89570 100644 GIT binary patch delta 99 zcmYc*pCB2>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U{r;B3<$IRq}lmvl!2Nd=; z9;{;Lkn}Kku|HwL{{spCnHw8o{;~6%;pO4sVbE6QRs1|fXa!IogQu&X%Q~loCIFq^ BA{+n! delta 82 zcmXRgT~8Os5RRG2Kfcd@=xcXaxV}yKokGb!%fqaNZR~$|*l!4O jocOD7{=@Ql5C7LQT#6PtC}_070AzrttDnm{r-UW|7MCDM diff --git a/graphics/pokemon/sandshrew/footprint.png b/graphics/pokemon/sandshrew/footprint.png index 481de0993e992dae38bf0d34400249a41eb18bb2..030c4165d7593d6529a4591a7be5641e4063a480 100644 GIT binary patch delta 86 zcma#fnjjg-%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Vgr;B3<$IRpe2c{lAo->?0 nXZR&<*gFVL;C1O?f8fQ?x0UTn*R4B!K&1?xu6{1-oD!MgB~KT}5RRG2KmN~W?ECjN{fF`Vhy6B(`Rg>8HZ{JOZyUqQ XkatqzUDt=nZXjKru6{1-oD!MgMNb#U5RRG2KmN~WZ2I>${fDu9&lAbI56*%Ucpd-0Q9Q*E WWiP%WEwy7lNRy|lpUXO@geCxsof%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VKr;B3<$IN7dH;E^>k_(EG xPV76DP}}ZU#?JhoT_CBR!RZXUK*vVL4hGjYUd~?y*-b!A44$rjF6*2UngA+LAmRW3 delta 79 zcmXR(o*?PP00ib8ht2>gEl(H65RRG27U5?MN>vZv+shMdBH5>5Y*Uo};{d;t{S(I* f{kBYhSFE k&*17{7BGiVjWvy#p>Zv1&KVB5pFouip00i_>zopr06+#AS^xk5 delta 67 zcmc}{pCD<+00ib8ht2>gIZqeI5RRG2KmN~uC@=AMW&0xeZviYR%t!wpUUDFZq57g! U+5a<_b3r;hUHx3vIVCg!0905Swg3PC diff --git a/graphics/pokemon/scyther/footprint.png b/graphics/pokemon/scyther/footprint.png index c6b7730285ade3c17cba3a1d256f04ddbece8ee6..e12c46d3c8dd64bd414a140117f5fd8482cb37b8 100644 GIT binary patch delta 94 zcmYc;njjg;%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Ver;B3<$IRpeh9))vA)7-A wm2HimS(yLx3rzaY>?)x5o1N_$yTeijiE5t9k0;fh25MpOboFyt=akR{0FZYdKL7v# delta 79 zcmXR)o*?PP00ib8ht2>gEl(H65RRG2KmN~uSZ~X*cXL`r+L;e$=R9P#=CDm@Q{wo} gZhu(5vhDwW#;44}{OVjsJV3fVUHx3vIVCg!0Gm%8L;wH) diff --git a/graphics/pokemon/seadra/footprint.png b/graphics/pokemon/seadra/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v)yX8gMNb#U5RRG2KmN~W?E81axaI--LiRTSEFymt`JEgzH%KwK W35a{W|I1_m(&Xvt=d#Wzp$Py#0T(v_ diff --git a/graphics/pokemon/seel/footprint.png b/graphics/pokemon/seel/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v^7>ED> delta 65 zcmYcZogit$00ib8ht2>g8BZ6-5RRG2KmN~Wl>ECo{YNstQ~md5feGEK7#KD!lDWEJ RfyhpfdQVqBmvv4FO#te}7rOue diff --git a/graphics/pokemon/seviper/footprint.png b/graphics/pokemon/seviper/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vgWltB!5RRG2KmN~W?D)qJXnUByn&lU>^Z!?p|E@KQ{9#$i Z!VtDs;?@4nvyVX9JYD@<);T3K0RXd?8=e3F diff --git a/graphics/pokemon/shelgon/footprint.png b/graphics/pokemon/shelgon/footprint.png index e2d61b9bc8d6975c8e963e0dfa77c73227d899f1..5c7a6ab3f042bc140f4ff4d22c9ac8848be4c0e4 100644 GIT binary patch delta 83 zcmaz@pCIYS%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U_r;B3<$IRpe2i7<25zopr0BtrLb^rhX delta 68 zcmYd~m>_A-00ib8ht2>gc~2L|5RRG2KmN~Wl>ECP{fEN&4~_C&btjDfY;+G}U?^BG U*|Ph4kQ+#gr>mdKI;Vst09Zm9x&QzG diff --git a/graphics/pokemon/shellder/footprint.png b/graphics/pokemon/shellder/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vBngyc@O1TaS?83{1OO9>71IC! delta 56 zcma#?nILJ*00ib8ht2>gVNVyw5RRG2KmN~W6qZeBQ{vHNSRE~6@N{}uT%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VQr;B3<$IRpe2i6{5o-^zc lH{=aAs2UhpHtblzz!2EL9J=UNPaIGogQu&X%Q~loCICgs8jt`0 delta 69 zcmd0ZoFM7I00ib8ht2>g1y2{p5RRG2KmN~Wl>ECo{YUco56<%*KCfxp|JyMpgq30S VKbhXV$;E0QJ)W+9F6*2UngE@!8&CiM diff --git a/graphics/pokemon/shuckle/footprint.png b/graphics/pokemon/shuckle/footprint.png index e26b60bcd3520fce27686fd5c5f174cedd50163f..169bb4cf5b13c995eeea4972d680f9be0899ee32 100644 GIT binary patch delta 81 zcmWGbognGM%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V2r;B3<$IRpe2c|RZ5;x=x iKGZuXD2QuxurRENU=RFhk+&MCiow&>&t;ucLK6V=rx`y0 delta 66 zcmYcdn;>b+00ib8ht2>gSx*?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VKr;B3<$IRq}goJg9Zwg>5RRG2KmN~u_^-U}^Lfd6^63?I^B(%!9_FtW_?66` i#GLy7z=iw&9rPF)mrIvdlyYqZ>GyQ?b6Mw<&;$T4V<4gc diff --git a/graphics/pokemon/skiploom/footprint.png b/graphics/pokemon/skiploom/footprint.png index efa7f5034220e4a80460ec793d8f11bacf8b73df..544ef0ea6da31e918a22c8d7f0b184006f49e482 100644 GIT binary patch delta 82 zcmWGfn;_}S%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VYr;B3<$IRpe2i6{Ti5c<@ j0@ebu42sX#QYsm0l35$V(r;$~l`(j_`njxgN@xNA>UkJ^ delta 67 zcmYcbpCD<+00ib8ht2>gIZqeI5RRG2KmN~Wl>ECn{f9EYlYPSpxt4!dl(iWc8l|O@ TqBd4s0_pH{^>bP0l+XkK{52O5 diff --git a/graphics/pokemon/skitty/footprint.png b/graphics/pokemon/skitty/footprint.png index 355153dcb5062c5a4e056d70ece1951051c4cb71..2e78b5093e9eef09009d530924e33707b5034328 100644 GIT binary patch delta 98 zcmc~Qn;;p>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Var;B3<$IRpe2IgmMY|Gf# zW-_r&=3raO$F^CTCrDbNLP)|wMB)a&fdV7Lyo;>A`MVZf1ZrdOboFyt=akR{0E3+z Ai~s-t delta 86 zcmXTRnjjg-00ib8ht2>gLr)jS5RRG2KmN~W?D%)Z_|Mw(iaX~Esw@xREoz(mipT%2 nq}}=SA9eE|w%anh@JcW;#I2QlUQi7Mg% delta 95 zcmZo+ESex0$p8fA9f!^UDN9cm#}JO0$v^(jfB3w?O>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM3981i(?4K%;W?I)-oQRqwEqw s_692d5)JB(ANbeUxUj9UkzbFWVd_-2LotVBKt?cly85}Sb4q9e09q*?Y5)KL delta 77 zcmXR&oFM7J00ib8ht2>g4Nn)x5RRG2KmN~Wl$8B*{zCG3gZ}x6a>j=x9oyvp@cf@G d`LDi3n}H$yrKEy}8egMNb#U5RRG2KmN~WY^uAT{^Q2^4~_CIavPKdT%NSsxJWXX W8i+AmG}CVYY4UXSb6Mw<&;$T$0~kI4 diff --git a/graphics/pokemon/slowking/footprint.png b/graphics/pokemon/slowking/footprint.png index 52593624a24eb306eeb6717e27eee91b4b336af4..e85d1307c4d880d4cf663fab4839de730a987eab 100644 GIT binary patch delta 80 zcmWGZnIP%S%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VIr;B3<$IRpe2c|Q;Ja5<~ ie#kFSSim8~z%c6u+uq%)-+l%vV(@hJb6Mw<&;$VX>KeoV delta 64 zcmYcZnILJ+00ib8ht2>gX-^l&5RRG2KmN~W?E81c_|Jy)9}4|V4N4wa3`xr*RfRrD QxPg>=y85}Sb4q9e0Mz3ae*gdg diff --git a/graphics/pokemon/slowpoke/footprint.png b/graphics/pokemon/slowpoke/footprint.png index a66ebbc32e0fb18886e94ab7122c9a429372db80..f3330b57f658a339e1ab9419174e26ed6bacf5d5 100644 GIT binary patch delta 80 zcmWGdnIP%S%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VIr;B3<$IRpe2c|Q;Ja5g8BZ6-5RRG2KmN~W?E81c_|FFRh5Vm5Se_`YWMoL^lk`>8 RnRg$g-qY33Wt~$(69Ca^761SM diff --git a/graphics/pokemon/slugma/footprint.png b/graphics/pokemon/slugma/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vFVdQ&MBb@04($#*8l(j delta 74 zcmd0cn;_}R00ib8ht2>gRZkbk5RRG2KmN~W?D%)pxaL!O#Q{Di`5%ri+HH7lI$xY$ awZMyk<-EwN7J&miAdQ}`elF{r5}E)A{TufH diff --git a/graphics/pokemon/smoochum/footprint.png b/graphics/pokemon/smoochum/footprint.png index e901d9334cf4cf715531d83a799193ea9c7f786b..15461e49a3b7f92463839103d8d3962f5cf31b15 100644 GIT binary patch delta 78 zcmWGenjq=P%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Vcr;B3<$IRpe2i7yZJa5=1 f1TZrjciAu`-e=MBk!`XCDq-++^>bP0l+XkKkfj$9 delta 63 zcmYcao*-$(00ib8ht2>gDNh&25RRG2KmN~Wl>ECg{YPSd%PYx$3p5xQX3v-2v8VrL PFi5qhtDnm{r-UW|$-Ebi diff --git a/graphics/pokemon/sneasel/footprint.png b/graphics/pokemon/sneasel/footprint.png index 2159ef3dcfaa686e7f55fbf6c453c0939e80c18e..c3472d32a684560cdd00b9ea9f570a04d7150a20 100644 GIT binary patch delta 88 zcma#enIIX=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VGr;B3<$IRq}2F5-%wt377 qN4_^S%Jg6;Bt(5RRG2KmN~WY}$9-xMmys!v0S@@&{h93*2nJFu#gz Zh7p6)e(}G~_7UPBeV(p%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VKr;B3<$IRpe24*)lwuhWN ym!u`0*c;sV&!9M)i;bIGfXS$#=?%LA7vtG`oZJh#&sqUBF?hQAxvXgT~8Os5RRG2KmN~W?D+RLy<+nD4@c%dWVAobSSDa~=Ul-b j3l2s}hlBFpcoL>E=r0hvzWlGnGmrtEu6{1-oD!M< p{>VFc{A1^Eyy4)uK!k^Z;qqFJ-}jVwZv)jbc)I$ztaD0e0sy=39CH8w delta 71 zcmd0fo*?PO00ib8ht2>gB~KT}5RRG2KmN~WZ2EWA_|Js&9|!oI_-{CJ9Ae{QTAFZ* XLGz;6b067sd5|toS3j3^P6g1y2{p5RRG2KmN~W?E81s_)k~*j|2S<_D>}L-7r>I$;goS VMpD#K?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vqCb(4;|-gMp!F2^$Ch42F83Y6eeNKbLh*2~7al+#4_e delta 74 zcmd0en;_}R00ib8ht2>gRZkbk5RRG2KmN~WY^vMOzOete;|q3sj=vMrf28v}{eOLs aV+jvK*Dc9gg@R1lAdQ}`elF{r5}E+)KN}qY diff --git a/graphics/pokemon/spheal/footprint.png b/graphics/pokemon/spheal/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vgVNVyw5RRG2KmN~W6#l!KT`?z!;ptqt`@1t0zkrl^y85}S Ib4q9e0QbTY?EnA( diff --git a/graphics/pokemon/spinda/footprint.png b/graphics/pokemon/spinda/footprint.png index 7be943a892aaef2f4d8336f73fb21149e4666eae..688e1ec1e3defbefbc114cd427deab9cbc9d9953 100644 GIT binary patch delta 89 zcma#cogf*)%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V0r;B3<$IRpe2i7+{JT|;M qGJFb0J~cG{WMqEK%+|(SP|4tbl%?nYjZd;b)eN4lelF{r5}E+zs~s-@ delta 74 zcmd0en;_}R00ib8ht2>gRZkbk5RRG2KmN~Wl>GbS{D+?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vg1y2{p5RRG2KmN~W?ECjO{fE%`4~}w;bvKOvtW0+ZVrHoI Vk?0 hXZQmI9y6w>GBjARUd@|u-wddT!PC{xWt~$(69CL-7@zb+00ib8ht2>gSx*NQ0-VpUXO@geCwWSQthC diff --git a/graphics/pokemon/starmie/footprint.png b/graphics/pokemon/starmie/footprint.png index c1c0058e74e9c2354f9bf9ca74251c564bcb95d1..2a1c1f3dd159502c8024d197d965920376b79bfa 100644 GIT binary patch delta 76 zcmWGcm>}uS%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VMr;B3<$IRq}0}MU9JZIP) dI8Gd3V6fi8)cJ|OLm8-m!PC{xWt~$(699Oc7o`9I delta 61 zcmYcYoFHkz00ib8ht2>g2~QWt5RRG2KmN~Wp=fS?83{1ORFT6$t}uS%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VMr;B3<$IRq}0}MU9JZIP) dI8Gd3V6fi8)cJ|OLm8-m!PC{xWt~$(699Oc7o`9I delta 61 zcmYcYoFHkz00ib8ht2>g2~QWt5RRG2KmN~Wp=fS?83{1ORFT6$t?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vgIZqeI5RRG2KmN~W?D%)n_|HUl*KZ03>%S(jgfY7@s6Ud> TnpxqK2-4x{>gTe~DWM4fA`=(E diff --git a/graphics/pokemon/suicune/footprint.png b/graphics/pokemon/suicune/footprint.png index 946c35dd0efade8dde45842ecdd7a8c04aba0df6..57258fb0c3286fd336ffd2f9c5715929850eba05 100644 GIT binary patch delta 80 zcmWGZnIP%S%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VIr;B3<$IRpe2i7xuJa70H hbV&9{@GG2VW+-{j+Q9wYxE!d6!PC{xWt~$(69C|@86p4x delta 64 zcmYcZnILJ+00ib8ht2>gX-^l&5RRG2KmN~Wl>B@1{0C>bu73>|?W_a>8_)m% delta 69 zcmd0doFM7I00ib8ht2>g1y2{p5RRG2KmN~uxZd`#f2GE+#+H8$6KqBPu1^2)U!LKi Vl8B?nt?9}jJ)W+9F6*2UngEcW8omGk diff --git a/graphics/pokemon/sunkern/footprint.png b/graphics/pokemon/sunkern/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vxaY5)KL delta 67 zcmYcepCD<+00ib8ht2>gIZqeI5RRG2KmN~Wl>ECg{m0(<53kn=aHcFi`R_kJ!}$er Ue82ard;#h3boFyt=akR{0A0}<&Hw-a diff --git a/graphics/pokemon/swablu/footprint.png b/graphics/pokemon/swablu/footprint.png index 7e71113c3aff9a09dddd9672bc7f1200f7cb7a74..747e2caaa8b887af4f7768dcc27c7c05fb82fa25 100644 GIT binary patch delta 77 zcmWGaoFM7J%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V6r;B3<$IRq}0}MTU2_+4U e8yR~7R2cO?GP%Fcs(cGn!QkoY=d#Wzp$P!6Oc{j$ delta 62 zcmYccnjmS(00ib8ht2>gNlzEY5RRG2KmN~W?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vQZxRm6O}nyfI1mGUHx3vIVCg! E0DZwGJOBUy delta 83 zcmbgJx>?M5RRG2Khn>CI63d(1dGFtiEZsoJp3$@b_PZ@0VzKY k@HpAuNbHbr`FDbup~FLf_urq5lR+kUy85}Sb4q9e00Jc+G5`Po diff --git a/graphics/pokemon/swellow/footprint.png b/graphics/pokemon/swellow/footprint.png index f44a71c29b41d0ffb0ac72b219a2c65355b3333d..9757114c026160cd03c61285ed722a36817dde6d 100644 GIT binary patch delta 104 zcmd0Rfq~)FI*xmbP0 Hl+XkKkC-PU delta 87 zcmb=)o*)^-00ib8ht2>gBTpB{5RRG2Kfcd@7;k&{cU4>ZeaU-Ejcd5le>^$=p>h7h ocALZU3Y*wZ{#&2kpz%ANpTX#YIEz5(Cn1n2p00i_>zopr06i@u^8f$< diff --git a/graphics/pokemon/swinub/footprint.png b/graphics/pokemon/swinub/footprint.png index fb56709ec6e920dd60f932e9b39bc68d95d5e68e..c1573fe84acdc67df9e8397d07bc8cfbadabd9f0 100644 GIT binary patch delta 77 zcmWGcoFM7J%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V6r;B3<$IRq}0}MXg5;No- e1Rpb+crrwEvG87qT|O76g2B_(&t;ucLK6Uf$QO11 delta 61 zcmYccoFHkz00ib8ht2>g2~QWt5RRG2KmN~W%Q~loCIF?~7xVxC diff --git a/graphics/pokemon/taillow/footprint.png b/graphics/pokemon/taillow/footprint.png index dbf5c5c6b4e858137c77fb6a8148065b0b7c4973..a54a5c93fe451858e7dcd7b1986b1c4fdbd9fd3c 100644 GIT binary patch delta 92 zcmYc+m>?O>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM3981i(?4K%;bcIW;V8CY;1gt tZ1;E-*e0aZA2?9MaD+{1f{q6-Lu(w{p~rb)8-N-ZJYD@<);T3K0RSpc9V`F< delta 77 zcmXR&oFM7J00ib8ht2>g4Nn)x5RRG2KmN~W?0O~n@2YW4{rL|k<&Q8-vVS7^??&?t e2bM{!D;XIo6eJZs_-sE3((CE!=d#Wzp$Pziy&drY diff --git a/graphics/pokemon/tangela/footprint.png b/graphics/pokemon/tangela/footprint.png index c05d3b4375c5773f50d3640439fee5368b504d10..2b0c03fa5fe89e546219a981b5cc27b41c9fccde 100644 GIT binary patch delta 91 zcmYeypCB2=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U@r;B3<$IRpe2IgbzJa6PB te$+cmv|*`bQ2fWv^M_sHhTg4Nn)x5RRG2KmN~W?D%)m_|Jp%9|!nc`4u|kTkK94*KA1t e!5H@KzdggtV3EfmlZBE&dOcnJT-G@yGywp5VIA%O diff --git a/graphics/pokemon/tauros/footprint.png b/graphics/pokemon/tauros/footprint.png index 602011c6d6c3f92cd76342e390afa3255fc7070c..3ae3a980d1f495ec05038d23eb154098bb4aa9c9 100644 GIT binary patch delta 85 zcma#foFEy%%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VAr;B3<$IRpe2c{l&i5vC} m0`pm!`&l>`C3Toicrm21FwdwzQ&kOA$>8bg=d#Wzp$PyrLm3bN delta 71 zcmd0do*?PO00ib8ht2>gB~KT}5RRG2KmN~W?E81q_|F6Oh5g4R?d;hV6&`=DW>Ya` Xm{BF;WgIR!1EkB-)z4*}Q$iB}ebX3) diff --git a/graphics/pokemon/teddiursa/footprint.png b/graphics/pokemon/teddiursa/footprint.png index def88c323394ced33e406b8f31b5ebe787f4a580..6e0bdfd171875a477214a48472893b163fd59233 100644 GIT binary patch delta 85 zcma#foFEy%%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VAr;B3<$IRpe2c{lAo->?0 mXZR&<*gFVLI9tIG$;r@~$0nHl_GB7RC4;A{pUXO@geCx5?iz>y delta 71 zcmd0do*?PO00ib8ht2>gB~KT}5RRG2KmN~W?ECjN{fF`Vhy6B(`Rg>8HvPY8tgw=i Xp+Z3NVr<4tBakjnS3j3^P6?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v}uT%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VQr;B3<$IRpe2c{lAo->?0 lXZRO%crvy~@GEFDGNfK*3BG-N<5i$S22WQ%mvv4FO#nJY8eRYZ delta 70 zcmd0Znjq=O00ib8ht2>gMNb#U5RRG2KmN~W?ECjN{fF`Vhy6ApfA{h`{eL4l;R*x8 W^p(>6e%V3FAWfdGelF{r5}E+1AR4~_ diff --git a/graphics/pokemon/togetic/footprint.png b/graphics/pokemon/togetic/footprint.png index b15913fa81c98af152bc727accfd91c152c53e5a..239f42d98d43b960de934402d6eaf302f4dfc79d 100644 GIT binary patch delta 84 zcma#bm>}uT%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VQr;B3<$IRpe24**Qwr4B? lN&g%AX2>@PJZ9{0VmQ8sGxE}B23DX#22WQ%mvv4FO#o9>8v6hM delta 70 zcmd0Znjq=O00ib8ht2>gMNb#U5RRG2KmN~W?D+RK{fDu9OWlXXi|s!td^talag7jz W=^?SsQi0?fAWfdGelF{r5}E*}uNv(D diff --git a/graphics/pokemon/torchic/footprint.png b/graphics/pokemon/torchic/footprint.png index 955afa82accd31a048e4e2cdc2d3a1d5b8801017..4149f9bb1fe1c54e23f6786d5c7376331b04b77d 100644 GIT binary patch delta 98 zcmYc%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*Var;B3<$IRq}h6XmagUUQY zHatD-5*7IdAO0sK{6BEu55o~wB?X3wybe+fM^ibDY+Up`5U7p8)78&qol`;+06Zcg Ar2qf` delta 83 zcmXR*pCIYS00ib8ht2>gJx>?M5RRG2KmN~WY+p>FVdQ&MBb@04kgw;{X5v diff --git a/graphics/pokemon/torkoal/footprint.png b/graphics/pokemon/torkoal/footprint.png index 208f3bb7755de13b144695c6197394554a441766..35facf20e46c5128a2d2c2d060de7e2f5bac5508 100644 GIT binary patch delta 99 zcmc~OpCB2>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U{r;B3<$IRq}21YkFwuhWN zm!us${xLWII3Ry@O1TaS?83{1OQy7 BAol}uT00ib8ht2>geNPw15RRG2KmN~WZ2I>%y<+nD4@cx%c diff --git a/graphics/pokemon/totodile/footprint.png b/graphics/pokemon/totodile/footprint.png index 2102602737d5574af23d1089362943af251f17fa..dd3fd2e209149832ae647594a139e3a338e59068 100644 GIT binary patch delta 83 zcmaz@pCIYS%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U_r;B3<$IRq}2F7D-Y~NUU l-tY%pWE4osYgo<1uyr&0-d+3HgMjK7JYD@<);T3K0RTxm8x#Nl delta 68 zcmYd~m>_A-00ib8ht2>gc~2L|5RRG2KmN~WZ2EWA_)kar55@kjH;ym-ZJB)}8Qf1x UsQ%P>ngP<{>FVdQ&MBb@08?BUG5`Po diff --git a/graphics/pokemon/trapinch/footprint.png b/graphics/pokemon/trapinch/footprint.png index c3e6e785b207d755a4943cae52529ca052a7aa14..be4eeb90ef76655a1cc5dcccf905f7444c9603e3 100644 GIT binary patch delta 87 zcma#go*)^-%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U*r;B3<$IRpe2c|RZ5)twS p1vLo|Dh?cwK5$?kgGv(@Lq{}gK<gHBT4E5RRG2KmN~W?E81a_|K&DALq`0h@JQFa#frBM+LzY c*8l&R8A_FFVdQ&MBb@0DiU}wg3PC diff --git a/graphics/pokemon/treecko/footprint.png b/graphics/pokemon/treecko/footprint.png index ed3854702ecf72061fa555e585493190561e8a88..695c6a891d250a24c6fd9bdf5c8a27111efe6d73 100644 GIT binary patch delta 92 zcmYc&m>?O>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM3981i(?4K%;W?h$Vr&6?_k1z r_Lh`#gAMi!iqDt>Sf;QlNiZ;otmnMBSdOC%sDZ)L)z4*}Q$iB}a_b$c delta 76 zcmXR&m>}uS00ib8ht2>gbx#+^5RRG2KmN~u7;k%6xU`M=jKY@_b04g6Hgb%5RRG2KmN~uc)q?({VUJ;H_A-00ib8ht2>gc~2L|5RRG2KmN~WZ2EW2_|KN~AB--aR&eP2ST47ShrwP& U+-|D5eGN#9r>mdKI;Vst077gS7ytkO diff --git a/graphics/pokemon/tyranitar/footprint.png b/graphics/pokemon/tyranitar/footprint.png index ea12c75b08769cb2d340cd813324996649517447..c5e6dfdd7ff1dd84036ce7d091deb7021776b4a5 100644 GIT binary patch delta 92 zcmYc+m>?O>%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM3981i(?4K%;bay26nbKW*!-J siHdxK5C0pKzVRn~VQ87b?{I~Y;n@@}FT3`r`9KW}p00i_>zopr07O3?0RR91 delta 77 zcmXR&oFM7J00ib8ht2>g4Nn)x5RRG2KmN~WZ24yVXM6gOymKEs=RRb%7Ww;tUAa== eS2BOtH+crJSE4iAPAxtU((CE!=d#Wzp$Pzuh#r9e diff --git a/graphics/pokemon/tyrogue/footprint.png b/graphics/pokemon/tyrogue/footprint.png index 0ef849eb894a9c7217d53a5cb226786240cf94d7..66cbd808060fedd4b44a6fa31eaf42201488c169 100644 GIT binary patch delta 77 zcmWGcoFM7J%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V6r;B3<$IRq}0}MUv5;No% eC@kRMVPGg!Vf|#5*t!R(g2B_(&t;ucLK6UjEf;hE delta 61 zcmYccoFHkz00ib8ht2>g2~QWt5RRG2KmN~W e1U@sTcrxUyV@+zlQ(y>G!QkoY=d#Wzp$PzxG#C^B delta 61 zcmYccoFHkz00ib8ht2>g2~QWt5RRG2KmN~Wp=fS?83{1OSY971jU% diff --git a/graphics/pokemon/unown/footprint.png b/graphics/pokemon/unown/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vGI8pDQpdhZn&Bk!@1!u;TXs&fY9SokXelF{r5}E)dWE>s< delta 79 zcmXR+o*?PP00ib8ht2>gEl(H65RRG2KmN~W?D+RL{YUWm3zN?j{IfjFTinL~iHHA( gAjb*TQ%#{v493&Msu(sXZwBf1boFyt=akR{0LjiC4FCWD diff --git a/graphics/pokemon/vaporeon/footprint.png b/graphics/pokemon/vaporeon/footprint.png index 2b44d4b2491b80132b81ff783599d8c301e6c490..7e40d8198eac8658f1d646567daefc0e55ec2b5e 100644 GIT binary patch delta 90 zcma#cn;;p=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VWr;B3<$IRpe2c{lgo;}hM rKkN-o{BKZFknXr4Z(tzbpuxzn{W+($?lIFEpmGLJS3j3^P6gRZkbk5RRG2KmN~W?E81sxaL#(j|1mFG{|-}bP0l+XkKN_`!` diff --git a/graphics/pokemon/venomoth/footprint.png b/graphics/pokemon/venomoth/footprint.png index 6965dbe60faf9d737d166f33082414b9cfb07195..a9b0e33c2899262a2f3194da12bb624ee577b2c4 100644 GIT binary patch delta 72 zcmeZ?nIP%R%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VEr;B3<$IRq}18fq~4jj@9 Z4B`(NnP+Dl_XbKbc)I$ztaD0e0s!$#6w?3z delta 56 zcma#?nILJ*00ib8ht2>gVNVyw5RRG2KmN~W6#l!KT`?z!;ptqt`@1t0zkrl^y85}S Ib4q9e0QbTY?EnA( diff --git a/graphics/pokemon/venonat/footprint.png b/graphics/pokemon/venonat/footprint.png index 3675945c9241a95407d89551b26a714a3978acdf..f1f332f81d8b5444a0f095f2c25ae0a81d6c5cdf 100644 GIT binary patch delta 83 zcmaz{pCIYS%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U_r;B3<$IRpe2Ig(dJT?3d k9rDZ@C8r>mdKI;Vst01g1y2{p5RRG2KmN~W?5MkCTr-7zA-}|nc3Y0WE7KWPvoJ7i V6P@yZ^X8KvJ)W+9F6*2UngBRb7`Ffb diff --git a/graphics/pokemon/venusaur/footprint.png b/graphics/pokemon/venusaur/footprint.png index bdef2c818ebc7cbff4ccb99329e3fa895ed23e22..188dd9608141b87c15dd72c935d10ce620203a94 100644 GIT binary patch delta 91 zcmYeupCB2=%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U@r;B3<$IRq}h6XmabHY4( t%q5=uZ}uS00ib8ht2>gbx#+^5RRG2KmN~WYDigPrD51jkp dF1O~5J;T!`;hJrxm3u*2Jzf1=);T3K0RSA49DM)) diff --git a/graphics/pokemon/vibrava/footprint.png b/graphics/pokemon/vibrava/footprint.png index fdf76f9f2289646d9f7e61d48684a2838409a4b4..b935f853a3f30d9f00052f8545d5d4695550ef53 100644 GIT binary patch delta 79 zcmWGbo*?PP%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U-r;B3<$IRq}0}O1uJgoK- gTCXH^vJ6xiqw1KC9L&4H4^+e8>FVdQ&MBb@0G+HCjsO4v delta 66 zcmYcen;>b+00ib8ht2>gSx*?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v{ z_B1zMY-;?;#{8R`?HfN&4J(fgo5GRl2M+viX#C5-T+GaHq?h9>$G^GUK-~gQ%@Ji5RRG2KmN~uSZ{lHe~rMe$LBu0w>T_c+9v;q$Nq<; s-8bVJJANnm=f*V?(tjkL|FB$+!Q!LXTkZpKY#@U?UHx3vIVCg!0G{Jf;l-#>^}X4D7m`P2rZ?xq&JfJYD@<);T3K0RVN%8SnrA delta 69 zcmd0doFM7I00ib8ht2>g1y2{p5RRG2KmN~uIN$cLd?m{-M#pakA^cAD|BU~zD>8fw V6ifIOrh6Qu$J5o%Wt~$(697x97{34j diff --git a/graphics/pokemon/volbeat/footprint.png b/graphics/pokemon/volbeat/footprint.png index 916c59f606a931938f0d6263b3ff6780db0277a3..f5df06fdc3cedb955dcda52a28806fcae32c6d58 100644 GIT binary patch delta 79 zcmWGZo*?PP%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*U-r;B3<$IRpe2c{l}D+dnn gxUdUwXf&}fBuBAKmQ5484OGM6>FVdQ&MBb@0JXOl$^ZZW delta 64 zcmYcenILJ+00ib8ht2>gX-^l&5RRG2KmN~W?EA+UXnR;*VUxSU0**;i46{_E{d0Wg Q=YW)Zy85}Sb4q9e0EfU7C;$Ke diff --git a/graphics/pokemon/voltorb/footprint.png b/graphics/pokemon/voltorb/footprint.png index c7ccf57f373ce23b1fe41fe7de4a616bbf5c2cc2..2449369fd6b8d8076c846240a518fe6bbd7fedee 100644 GIT binary patch delta 67 zcmZ<{pCD<+%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4$+dr;B3<$IRpe1zsS}fPv9@ S%Jy_1i^0>?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v;u)EvnK%sP6B05SPB1eR&t^S!BSY~#P&tFAtDnm{r-UW|+2I@K delta 75 zcmd0cpCIYR00ib8ht2>gHBT4E5RRG2KmN~Wl>ECo{l}B@9~$Lb?7kWQnZxf?|3>oP cb!QO?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vzD+v5%7f7l*aG-)=5eLI*9nKlqVt2!Usu?_8{an^LB{Ts5@N68$ delta 73 zcmd0eognGL00ib8ht2>g6;Bt(5RRG2KmN~W?0O|x_uTl;rSu;M`W)k*B<59@lh6**=jrO_vd$@?2>|^A8_xg$ diff --git a/graphics/pokemon/weedle/footprint.png b/graphics/pokemon/weedle/footprint.png index c1c0058e74e9c2354f9bf9ca74251c564bcb95d1..2a1c1f3dd159502c8024d197d965920376b79bfa 100644 GIT binary patch delta 76 zcmWGcm>}uS%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VMr;B3<$IRq}0}MU9JZIP) dI8Gd3V6fi8)cJ|OLm8-m!PC{xWt~$(699Oc7o`9I delta 61 zcmYcYoFHkz00ib8ht2>g2~QWt5RRG2KmN~Wp=fS?83{1ORFT6$t?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!vjjfjg5cVne7GsCO)V?e4wtaac*m4B_H!+KDIV~hph}ZyEva)Oyn>Hn!w=c L>gTe~DWM4fpxY?( delta 95 zcmZo|jb&wps1`;b|{ x(6~k*?MLF750A|c&rfNqf5-Fxr{ur?>g1y2{p5RRG2Khn>CaF=VTJ8(hXVpIDf`L7CJp4%V(|DWN= WY>`F3qO>o8^mw}ZxvXuh@ diff --git a/graphics/pokemon/wingull/footprint.png b/graphics/pokemon/wingull/footprint.png index 057b2cefad6c44ce191fee72f5a3f3cf1505419f..26b410ad371603abe10f5c1954334e610946beb1 100644 GIT binary patch delta 85 zcma#aoFEy%%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VAr;B3<$IRpe24*pKwr$J` mNB%RgZj@(Ge8$Em!N72-iK91EcEwhpN(N6?KbLh*2~7Ylei;`4 delta 72 zcmd0dnIP%R00ib8ht2>gWltB!5RRG2KmN~W?5KO6{v(s$N&ZRT1^#M*U%}@Y0>AyY YXVCg19vZx4|2L2}Pgg&ebxsLQ0KBvtd;kCd diff --git a/graphics/pokemon/wobbuffet/footprint.png b/graphics/pokemon/wobbuffet/footprint.png index 49fa6818d129fc3a0be1917dc361834456f06769..b7d2324d23b3a903e3d0dbc5d0db76a5e4673c6a 100644 GIT binary patch delta 77 zcmWGcoFM7J%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V6r;B3<$IRq}0}MUv5;No- e1Rpb-crwJkW%0Q;*>5&b1%s!npUXO@geCxydKg3i delta 61 zcmYccoFHkz00ib8ht2>g2~QWt5RRG2KmN~W;ESgQyAw@l%CdTrlt*2 N>*?y}vd$@?2>^Zp6+Hj| diff --git a/graphics/pokemon/wooper/footprint.png b/graphics/pokemon/wooper/footprint.png index 5e1ba56e61e3e0899204630a37d9ad49eb98530b..22911aa46c4f23723982114d589ecbd7230edc5d 100644 GIT binary patch delta 76 zcmWGcm>}uS%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VMr;B3<$IRpe2R3#I3Hb#I d3plhG7$#3*eKuR<;u@d=22WQ%mvv4FO#oFz7U2K@ delta 61 zcmYcYoFHkz00ib8ht2>g2~QWt5RRG2KmN~WY*?y}vd$@?2>_U~7QFxf diff --git a/graphics/pokemon/wurmple/footprint.png b/graphics/pokemon/wurmple/footprint.png index 3ac4abd9f7a1a2a8d1ae64d938998b423cd51001..bbb7102f669553bb34301c80ba1653f8bb820906 100644 GIT binary patch delta 77 zcmWGcoFM7J%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V6r;B3<$IRq}18frf1_t&F eiVDo43=GaS%$`+!-=_jqFnGH9xvXg2~QWt5RRG2KmN~W6#lz8{f9EYlLOl-5r$n%GBbJZGVcPZ N^>p=fS?83{1OQAT6IlQN diff --git a/graphics/pokemon/wynaut/footprint.png b/graphics/pokemon/wynaut/footprint.png index 4fe4832c08b40644a12d1572d6047dc7cda5e97d..6b0daca37ada476dd182ebce8e1e8d4726c8c17f 100644 GIT binary patch delta 81 zcmaz@ognGM%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*V2r;B3<$IRq}2F7E|JZJbP iTwt8Q!C`8kz{s$zhF!!XY}yl`Dh5wiKbLh*2~7a%z!<6k delta 68 zcmYd|m>_A-00ib8ht2>gc~2L|5RRG2KmN~WZ2EW8_|HUlr*8^^0;|#+R{#7j&*07^ UagMQ;GZdu7)78&qol`;+065kc_y7O^ diff --git a/graphics/pokemon/xatu/footprint.png b/graphics/pokemon/xatu/footprint.png index 44fcad1e3ed9a90d7a426104e849b53c176eb5e3..52be0000848a3680ff39cdb9c760f77760fe7534 100644 GIT binary patch delta 85 zcma#ZoFEy%%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VAr;B3<$IRpeAZSs1#ujqq kzyToQbMr|!a)5!svz2L8)#9g@fhrk1UHx3vIVCg!0NrjL`2YX_ delta 68 zcmd0dm>_A-00ib8ht2>gc~2L|5RRG2KmN~uD9`hErMv5Y$$$USe=xe$AAIq@o?-J( US&Q_Z%v_KbPgg&ebxsLQ0D%GbuApIg2B_(&t;ucLK6Ur@E7I) delta 64 zcmYccnILJ+00ib8ht2>gX-^l&5RRG2KmN~W*%=$w RXB-46_jL7hS?83{1OOh$8a@C3 diff --git a/graphics/pokemon/zangoose/footprint.png b/graphics/pokemon/zangoose/footprint.png index e07e58ceecbe4f320a940c538d4b2223aa8fd346..cc43fe9176b418ab67931029beb78c6036c9a7d1 100644 GIT binary patch delta 97 zcmYcje zNB%W7?rmr^ZD{<;)NwG4VNz1vfddr`iv$>^ShE!suzmIh>SFM8^>bP0l+XkKD7qm) delta 83 zcmXR-pCIYS00ib8ht2>gJx>?M5RRG2KmN~W?D%&t{f9Kall>3Lx-Z6mqRxNtmOt{N kQcmTo`@DzqZJ8rf88V$E3tlzc-v=_m)78&qol`;+09^zjYXATM diff --git a/graphics/pokemon/zapdos/footprint.png b/graphics/pokemon/zapdos/footprint.png index 480063a88b754bf8889b0d48e7eb984ee208bd42..80b07a5b0a3f9a6de91c78f175c20f9308412041 100644 GIT binary patch delta 100 zcmd0(m>?O?%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*VSr;B3<$IRpeh9))vp^QWW zn_~%;eU6`an%~H>{gdZ;BQG&S-oQYvL1}^!8w2A8Zqe#CwM9UU44$rjF6*2UngBS` BA2}uT00ib8ht2>geNPw15RRG2KmN~uSZ~X*cYT^g`pJSb6CTbqJgl7B#{Y)L m{)gnh6UKiww<}H9^q=APIgzs*2NGU^jPP{zb6Mw<&;$Uh(<9FS diff --git a/graphics/pokemon/zigzagoon/footprint.png b/graphics/pokemon/zigzagoon/footprint.png index d7373e064189cfb22854231695714a414b75a53a..421b25991e343b89921d2d77dd5b617e0a87b2a3 100644 GIT binary patch delta 95 zcmYc(o*)^;%)r2)YMZMBq}T#{LR|m<|DTkU^y=BsM4*UJg7c!;1z=qOVL3FhAcVOy|dVhdVqQuJYD@<);T3K0RWD69xwm^ delta 80 zcmXR;nIP%S00ib8ht2>gZBG}+5RRG2KmN~W?ECjO{fE%`4=d(B{9W57|BXlfiKN{r h<3G3fg;?&t;ucLK6UY8xo}e delta 51 zcmWG{pCGBn00ib8ht2>gK2I0N5RRG2KmN~e6k%cb>nH!v Date: Wed, 10 May 2023 13:37:48 -0400 Subject: [PATCH 03/43] Support plain pixel conversion, convert spinda spots to .png --- graphics/spinda_spots/spot_0.bin | Bin 32 -> 0 bytes graphics/spinda_spots/spot_0.png | Bin 0 -> 111 bytes graphics/spinda_spots/spot_1.bin | Bin 32 -> 0 bytes graphics/spinda_spots/spot_1.png | Bin 0 -> 112 bytes graphics/spinda_spots/spot_2.bin | Bin 32 -> 0 bytes graphics/spinda_spots/spot_2.png | Bin 0 -> 99 bytes graphics/spinda_spots/spot_3.bin | Bin 32 -> 0 bytes graphics/spinda_spots/spot_3.png | Bin 0 -> 99 bytes graphics_file_rules.mk | 13 +++++ src/pokemon.c | 8 +-- tools/gbagfx/convert_png.c | 1 - tools/gbagfx/gfx.c | 90 ++++++++++++++++++++++++++----- tools/gbagfx/gfx.h | 6 ++- tools/gbagfx/main.c | 72 ++++++++++++++++++++----- tools/gbagfx/options.h | 4 ++ 15 files changed, 159 insertions(+), 35 deletions(-) delete mode 100644 graphics/spinda_spots/spot_0.bin create mode 100644 graphics/spinda_spots/spot_0.png delete mode 100644 graphics/spinda_spots/spot_1.bin create mode 100644 graphics/spinda_spots/spot_1.png delete mode 100644 graphics/spinda_spots/spot_2.bin create mode 100644 graphics/spinda_spots/spot_2.png delete mode 100644 graphics/spinda_spots/spot_3.bin create mode 100644 graphics/spinda_spots/spot_3.png diff --git a/graphics/spinda_spots/spot_0.bin b/graphics/spinda_spots/spot_0.bin deleted file mode 100644 index 938d1d592394b24026aeaa0666b0d46ad670d876..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32 gcmXS5_`~>*`5*g#_W%4K_>cV``yb{9j0{i!0PQ~ujsO4v diff --git a/graphics/spinda_spots/spot_0.png b/graphics/spinda_spots/spot_0.png new file mode 100644 index 0000000000000000000000000000000000000000..e0a515d77dff8653bd8c130dfcb49b40a83082cc GIT binary patch literal 111 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;TYyi9>;M1%fy~fDm+OF(il>WX z2*=Fi1dW7*KZg(e>2H+n_-Fj#uz+<$%TIph$INUh3=F>Wxcdrb=RF3hXYh3Ob6Mw< G&;$VAS|CjT literal 0 HcmV?d00001 diff --git a/graphics/spinda_spots/spot_1.bin b/graphics/spinda_spots/spot_1.bin deleted file mode 100644 index db46b5de4d91fafcc99795bc418398a0ea77236e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32 fcmaFB_=EWm`#=7F{Qu=a5XAb!{)7Di0|Wp735^X< diff --git a/graphics/spinda_spots/spot_1.png b/graphics/spinda_spots/spot_1.png new file mode 100644 index 0000000000000000000000000000000000000000..0e7fbd399a98f7556fb0f33100e0634433941665 GIT binary patch literal 112 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;TYyi9>;M1%fy~fDm+L?ho-U3d z95a&>Y7QLu)7;M1%fy~fDm+OF(gr|#R t2*=Figb9fW8 literal 0 HcmV?d00001 diff --git a/graphics/spinda_spots/spot_3.bin b/graphics/spinda_spots/spot_3.bin deleted file mode 100644 index 10c73f9bad7062d5e75a881e8e1f1211fbc803ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32 TcmcCvsAKpKhjk1#45$DAnurE) diff --git a/graphics/spinda_spots/spot_3.png b/graphics/spinda_spots/spot_3.png new file mode 100644 index 0000000000000000000000000000000000000000..cf4a96f7d3c27760d2b11f062ca3286b2fabd995 GIT binary patch literal 99 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;TYyi9>;M1%fy~fDm+OF(gr|#R t2*=Figbj%aE0Pm_^mjEVITY$JFx+~_Rxop=%TAyg22WQ%mvv4FO#nrJ8w>yd literal 0 HcmV?d00001 diff --git a/graphics_file_rules.mk b/graphics_file_rules.mk index 69fc398d8c..97a7794b30 100644 --- a/graphics_file_rules.mk +++ b/graphics_file_rules.mk @@ -21,6 +21,7 @@ JPCONTESTGFXDIR := graphics/contest/japanese POKEDEXGFXDIR := graphics/pokedex STARTERGFXDIR := graphics/starter_choose NAMINGGFXDIR := graphics/naming_screen +SPINDAGFXDIR := graphics/spinda_spots types := normal fight flying poison ground rock bug ghost steel mystery fire water grass electric psychic ice dragon dark contest_types := cool beauty cute smart tough @@ -680,3 +681,15 @@ $(NAMINGGFXDIR)/cursor_squished.4bpp: %.4bpp: %.png $(NAMINGGFXDIR)/cursor_filled.4bpp: %.4bpp: %.png $(GFX) $< $@ -num_tiles 5 -Wnum_tiles + +$(SPINDAGFXDIR)/spot_0.1bpp: %.1bpp: %.png + $(GFX) $< $@ -plain -data_width 2 + +$(SPINDAGFXDIR)/spot_1.1bpp: %.1bpp: %.png + $(GFX) $< $@ -plain -data_width 2 + +$(SPINDAGFXDIR)/spot_2.1bpp: %.1bpp: %.png + $(GFX) $< $@ -plain -data_width 2 + +$(SPINDAGFXDIR)/spot_3.1bpp: %.1bpp: %.png + $(GFX) $< $@ -plain -data_width 2 diff --git a/src/pokemon.c b/src/pokemon.c index bebed465bf..fa2eee42c0 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -1346,10 +1346,10 @@ static const u16 sHoennToNationalOrder[NUM_SPECIES - 1] = const struct SpindaSpot gSpindaSpotGraphics[] = { - {.x = 16, .y = 7, .image = INCBIN_U16("graphics/spinda_spots/spot_0.bin")}, - {.x = 40, .y = 8, .image = INCBIN_U16("graphics/spinda_spots/spot_1.bin")}, - {.x = 22, .y = 25, .image = INCBIN_U16("graphics/spinda_spots/spot_2.bin")}, - {.x = 34, .y = 26, .image = INCBIN_U16("graphics/spinda_spots/spot_3.bin")} + {.x = 16, .y = 7, .image = INCBIN_U16("graphics/spinda_spots/spot_0.1bpp")}, + {.x = 40, .y = 8, .image = INCBIN_U16("graphics/spinda_spots/spot_1.1bpp")}, + {.x = 22, .y = 25, .image = INCBIN_U16("graphics/spinda_spots/spot_2.1bpp")}, + {.x = 34, .y = 26, .image = INCBIN_U16("graphics/spinda_spots/spot_3.1bpp")} }; #include "data/pokemon/item_effects.h" diff --git a/tools/gbagfx/convert_png.c b/tools/gbagfx/convert_png.c index a5fefbd8b6..c9c240efbb 100644 --- a/tools/gbagfx/convert_png.c +++ b/tools/gbagfx/convert_png.c @@ -130,7 +130,6 @@ void ReadPng(char *path, struct Image *image) FATAL_ERROR("Bit depth of image must be 1, 2, 4, or 8.\n"); image->pixels = ConvertBitDepth(image->pixels, bit_depth, image->bitDepth, image->width * image->height); free(src); - image->bitDepth = bit_depth; } } diff --git a/tools/gbagfx/gfx.c b/tools/gbagfx/gfx.c index 832e9bb397..1dfc38e2d0 100644 --- a/tools/gbagfx/gfx.c +++ b/tools/gbagfx/gfx.c @@ -204,6 +204,18 @@ static void ConvertToTiles8Bpp(unsigned char *src, unsigned char *dest, int numT } } +// For untiled, plain images +static void CopyPlainPixels(unsigned char *src, unsigned char *dest, int size, int dataWidth, bool invertColors) +{ + if (dataWidth == 0) return; + for (int i = 0; i < size; i += dataWidth) { + for (int j = dataWidth; j > 0; j--) { + unsigned char pixels = src[i + j - 1]; + *dest++ = invertColors ? ~pixels : pixels; + } + } +} + static void DecodeAffineTilemap(unsigned char *input, unsigned char *output, unsigned char *tilemap, int tileSize, int numTiles) { for (int i = 0; i < numTiles; i++) @@ -345,9 +357,9 @@ static unsigned char *DecodeTilemap(unsigned char *tiles, struct Tilemap *tilema return decoded; } -void ReadImage(char *path, int tilesWidth, int bitDepth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors) +void ReadTileImage(char *path, int tilesWidth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors) { - int tileSize = bitDepth * 8; + int tileSize = image->bitDepth * 8; int fileSize; unsigned char *buffer = ReadWholeFile(path, &fileSize); @@ -355,26 +367,25 @@ void ReadImage(char *path, int tilesWidth, int bitDepth, int metatileWidth, int int numTiles = fileSize / tileSize; if (image->tilemap.data.affine != NULL) { - int outTileSize = (bitDepth == 4 && image->palette.numColors > 16) ? 64 : tileSize; - buffer = DecodeTilemap(buffer, &image->tilemap, &numTiles, image->isAffine, tileSize, outTileSize, bitDepth); + int outTileSize = (image->bitDepth == 4 && image->palette.numColors > 16) ? 64 : tileSize; + buffer = DecodeTilemap(buffer, &image->tilemap, &numTiles, image->isAffine, tileSize, outTileSize, image->bitDepth); if (outTileSize == 64) { tileSize = 64; - image->bitDepth = bitDepth = 8; + image->bitDepth = 8; } } int tilesHeight = (numTiles + tilesWidth - 1) / tilesWidth; if (tilesWidth % metatileWidth != 0) - FATAL_ERROR("The width in tiles (%d) isn't a multiple of the specified metatile width (%d)", tilesWidth, metatileWidth); + FATAL_ERROR("The width in tiles (%d) isn't a multiple of the specified metatile width (%d)\n", tilesWidth, metatileWidth); if (tilesHeight % metatileHeight != 0) - FATAL_ERROR("The height in tiles (%d) isn't a multiple of the specified metatile height (%d)", tilesHeight, metatileHeight); + FATAL_ERROR("The height in tiles (%d) isn't a multiple of the specified metatile height (%d)\n", tilesHeight, metatileHeight); image->width = tilesWidth * 8; image->height = tilesHeight * 8; - image->bitDepth = bitDepth; image->pixels = calloc(tilesWidth * tilesHeight, tileSize); if (image->pixels == NULL) @@ -382,7 +393,7 @@ void ReadImage(char *path, int tilesWidth, int bitDepth, int metatileWidth, int int metatilesWide = tilesWidth / metatileWidth; - switch (bitDepth) { + switch (image->bitDepth) { case 1: ConvertFromTiles1Bpp(buffer, image->pixels, numTiles, metatilesWide, metatileWidth, metatileHeight, invertColors); break; @@ -397,9 +408,9 @@ void ReadImage(char *path, int tilesWidth, int bitDepth, int metatileWidth, int free(buffer); } -void WriteImage(char *path, enum NumTilesMode numTilesMode, int numTiles, int bitDepth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors) +void WriteTileImage(char *path, enum NumTilesMode numTilesMode, int numTiles, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors) { - int tileSize = bitDepth * 8; + int tileSize = image->bitDepth * 8; if (image->width % 8 != 0) FATAL_ERROR("The width in pixels (%d) isn't a multiple of 8.\n", image->width); @@ -411,10 +422,10 @@ void WriteImage(char *path, enum NumTilesMode numTilesMode, int numTiles, int bi int tilesHeight = image->height / 8; if (tilesWidth % metatileWidth != 0) - FATAL_ERROR("The width in tiles (%d) isn't a multiple of the specified metatile width (%d)", tilesWidth, metatileWidth); + FATAL_ERROR("The width in tiles (%d) isn't a multiple of the specified metatile width (%d)\n", tilesWidth, metatileWidth); if (tilesHeight % metatileHeight != 0) - FATAL_ERROR("The height in tiles (%d) isn't a multiple of the specified metatile height (%d)", tilesHeight, metatileHeight); + FATAL_ERROR("The height in tiles (%d) isn't a multiple of the specified metatile height (%d)\n", tilesHeight, metatileHeight); int maxNumTiles = tilesWidth * tilesHeight; @@ -432,7 +443,7 @@ void WriteImage(char *path, enum NumTilesMode numTilesMode, int numTiles, int bi int metatilesWide = tilesWidth / metatileWidth; - switch (bitDepth) { + switch (image->bitDepth) { case 1: ConvertToTiles1Bpp(image->pixels, buffer, maxNumTiles, metatilesWide, metatileWidth, metatileHeight, invertColors); break; @@ -468,6 +479,57 @@ void WriteImage(char *path, enum NumTilesMode numTilesMode, int numTiles, int bi free(buffer); } +void ReadPlainImage(char *path, int dataWidth, struct Image *image, bool invertColors) +{ + int fileSize; + unsigned char *buffer = ReadWholeFile(path, &fileSize); + + if (fileSize % dataWidth != 0) + FATAL_ERROR("The image data size (%d) isn't a multiple of the specified data width %d.\n", fileSize, dataWidth); + + // png scanlines have wasted bits if they do not align to byte boundaries. + // pngs misaligned in this way are not currently handled. + int pixelsPerByte = 8 / image->bitDepth; + if (image->width % pixelsPerByte != 0) + FATAL_ERROR("The width in pixels (%d) isn't a multiple of %d.\n", image->width, pixelsPerByte); + + int numPixels = fileSize * pixelsPerByte; + image->height = (numPixels + image->width - 1) / image->width; + image->pixels = calloc(image->width * image->height * image->bitDepth / 8, 1); + + if (image->pixels == NULL) + FATAL_ERROR("Failed to allocate memory for pixels.\n"); + + CopyPlainPixels(buffer, image->pixels, fileSize, dataWidth, invertColors); + + free(buffer); +} + +void WritePlainImage(char *path, int dataWidth, struct Image *image, bool invertColors) +{ + int bufferSize = image->width * image->height * image->bitDepth / 8; + + if (bufferSize % dataWidth != 0) + FATAL_ERROR("The image data size (%d) isn't a multiple of the specified data width %d.\n", bufferSize, dataWidth); + + // png scanlines have wasted bits if they do not align to byte boundaries. + // pngs misaligned in this way are not currently handled. + int pixelsPerByte = 8 / image->bitDepth; + if (image->width % pixelsPerByte != 0) + FATAL_ERROR("The width in pixels (%d) isn't a multiple of %d.\n", image->width, pixelsPerByte); + + unsigned char *buffer = malloc(bufferSize); + + if (buffer == NULL) + FATAL_ERROR("Failed to allocate memory for pixels.\n"); + + CopyPlainPixels(image->pixels, buffer, bufferSize, dataWidth, invertColors); + + WriteWholeFile(path, buffer, bufferSize); + + free(buffer); +} + void FreeImage(struct Image *image) { if (image->tilemap.data.affine != NULL) diff --git a/tools/gbagfx/gfx.h b/tools/gbagfx/gfx.h index f1dbfcf4f7..1797d84dfd 100644 --- a/tools/gbagfx/gfx.h +++ b/tools/gbagfx/gfx.h @@ -50,8 +50,10 @@ enum NumTilesMode { NUM_TILES_ERROR, }; -void ReadImage(char *path, int tilesWidth, int bitDepth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors); -void WriteImage(char *path, enum NumTilesMode numTilesMode, int numTiles, int bitDepth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors); +void ReadTileImage(char *path, int tilesWidth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors); +void WriteTileImage(char *path, enum NumTilesMode numTilesMode, int numTiles, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors); +void ReadPlainImage(char *path, int dataWidth, struct Image *image, bool invertColors); +void WritePlainImage(char *path, int dataWidth, struct Image *image, bool invertColors); void FreeImage(struct Image *image); void ReadGbaPalette(char *path, struct Palette *palette); void WriteGbaPalette(char *path, struct Palette *palette); diff --git a/tools/gbagfx/main.c b/tools/gbagfx/main.c index 5d4faacab0..98a1a1edf9 100644 --- a/tools/gbagfx/main.c +++ b/tools/gbagfx/main.c @@ -25,6 +25,9 @@ void ConvertGbaToPng(char *inputPath, char *outputPath, struct GbaToPngOptions * { struct Image image; + image.bitDepth = options->bitDepth; + image.tilemap.data.affine = NULL; + if (options->paletteFilePath != NULL) { char *paletteFileExtension = GetFileExtensionAfterDot(options->paletteFilePath); @@ -45,22 +48,25 @@ void ConvertGbaToPng(char *inputPath, char *outputPath, struct GbaToPngOptions * image.hasPalette = false; } - if (options->tilemapFilePath != NULL) + if (options->isTiled) { - int fileSize; - image.tilemap.data.affine = ReadWholeFile(options->tilemapFilePath, &fileSize); - if (options->isAffineMap && options->bitDepth != 8) - FATAL_ERROR("affine maps are necessarily 8bpp\n"); - image.isAffine = options->isAffineMap; - image.tilemap.size = fileSize; + if (options->tilemapFilePath != NULL) + { + int fileSize; + image.tilemap.data.affine = ReadWholeFile(options->tilemapFilePath, &fileSize); + if (options->isAffineMap && options->bitDepth != 8) + FATAL_ERROR("affine maps are necessarily 8bpp\n"); + image.isAffine = options->isAffineMap; + image.tilemap.size = fileSize; + } + ReadTileImage(inputPath, options->width, options->metatileWidth, options->metatileHeight, &image, !image.hasPalette); } else { - image.tilemap.data.affine = NULL; + image.width = options->width; + ReadPlainImage(inputPath, options->dataWidth, &image, !image.hasPalette); } - ReadImage(inputPath, options->width, options->bitDepth, options->metatileWidth, options->metatileHeight, &image, !image.hasPalette); - image.hasTransparency = options->hasTransparency; WritePng(outputPath, &image); @@ -77,7 +83,10 @@ void ConvertPngToGba(char *inputPath, char *outputPath, struct PngToGbaOptions * ReadPng(inputPath, &image); - WriteImage(outputPath, options->numTilesMode, options->numTiles, options->bitDepth, options->metatileWidth, options->metatileHeight, &image, !image.hasPalette); + if (options->isTiled) + WriteTileImage(outputPath, options->numTilesMode, options->numTiles, options->metatileWidth, options->metatileHeight, &image, !image.hasPalette); + else + WritePlainImage(outputPath, options->dataWidth, &image, !image.hasPalette); FreeImage(&image); } @@ -94,6 +103,8 @@ void HandleGbaToPngCommand(char *inputPath, char *outputPath, int argc, char **a options.metatileHeight = 1; options.tilemapFilePath = NULL; options.isAffineMap = false; + options.isTiled = true; + options.dataWidth = 1; for (int i = 3; i < argc; i++) { @@ -162,6 +173,22 @@ void HandleGbaToPngCommand(char *inputPath, char *outputPath, int argc, char **a { options.isAffineMap = true; } + else if (strcmp(option, "-plain") == 0) + { + options.isTiled = false; + } + else if (strcmp(option, "-data_width") == 0) + { + if (i + 1 >= argc) + FATAL_ERROR("No data width value following \"-data_width\".\n"); + i++; + + if (!ParseNumber(argv[i], NULL, 10, &options.dataWidth)) + FATAL_ERROR("Failed to parse data width.\n"); + + if (options.dataWidth < 1) + FATAL_ERROR("Data width must be positive.\n"); + } else { FATAL_ERROR("Unrecognized option \"%s\".\n", option); @@ -177,15 +204,16 @@ void HandleGbaToPngCommand(char *inputPath, char *outputPath, int argc, char **a void HandlePngToGbaCommand(char *inputPath, char *outputPath, int argc, char **argv) { char *outputFileExtension = GetFileExtensionAfterDot(outputPath); - int bitDepth = outputFileExtension[0] - '0'; struct PngToGbaOptions options; options.numTilesMode = NUM_TILES_IGNORE; options.numTiles = 0; - options.bitDepth = bitDepth; + options.bitDepth = outputFileExtension[0] - '0'; options.metatileWidth = 1; options.metatileHeight = 1; options.tilemapFilePath = NULL; options.isAffineMap = false; + options.isTiled = true; + options.dataWidth = 1; for (int i = 3; i < argc; i++) { @@ -236,6 +264,22 @@ void HandlePngToGbaCommand(char *inputPath, char *outputPath, int argc, char **a if (options.metatileHeight < 1) FATAL_ERROR("metatile height must be positive.\n"); } + else if (strcmp(option, "-plain") == 0) + { + options.isTiled = false; + } + else if (strcmp(option, "-data_width") == 0) + { + if (i + 1 >= argc) + FATAL_ERROR("No data width value following \"-data_width\".\n"); + i++; + + if (!ParseNumber(argv[i], NULL, 10, &options.dataWidth)) + FATAL_ERROR("Failed to parse data width.\n"); + + if (options.dataWidth < 1) + FATAL_ERROR("Data width must be positive.\n"); + } else { FATAL_ERROR("Unrecognized option \"%s\".\n", option); @@ -403,7 +447,7 @@ void HandleLZCompressCommand(char *inputPath, char *outputPath, int argc, char * else if (strcmp(option, "-search") == 0) { if (i + 1 >= argc) - FATAL_ERROR("No size following \"-overflow\".\n"); + FATAL_ERROR("No size following \"-search\".\n"); i++; diff --git a/tools/gbagfx/options.h b/tools/gbagfx/options.h index 250b723450..830158b52e 100644 --- a/tools/gbagfx/options.h +++ b/tools/gbagfx/options.h @@ -15,6 +15,8 @@ struct GbaToPngOptions { int metatileHeight; char *tilemapFilePath; bool isAffineMap; + bool isTiled; + int dataWidth; }; struct PngToGbaOptions { @@ -25,6 +27,8 @@ struct PngToGbaOptions { int metatileHeight; char *tilemapFilePath; bool isAffineMap; + bool isTiled; + int dataWidth; }; #endif // OPTIONS_H From 14f7e49099b18fd6c5aa185781ba84925f3254a2 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 23 May 2023 13:16:18 -0400 Subject: [PATCH 04/43] Add some missing palette macro use --- gflib/sprite.c | 2 +- include/gba/defines.h | 12 +++--- include/palette.h | 3 +- src/battle_anim.c | 16 +------ src/battle_anim_effects_1.c | 6 +-- src/battle_anim_effects_2.c | 2 +- src/battle_anim_effects_3.c | 18 ++++---- src/battle_anim_flying.c | 8 ++-- src/battle_anim_ghost.c | 2 +- src/battle_anim_mons.c | 9 ++-- src/battle_anim_psychic.c | 2 +- src/battle_anim_status_effects.c | 8 ++-- src/battle_anim_utility_funcs.c | 8 ++-- src/battle_anim_water.c | 8 ++-- src/battle_bg.c | 3 +- src/battle_factory_screen.c | 18 ++++---- src/battle_gfx_sfx_util.c | 8 ++-- src/battle_interface.c | 2 +- src/battle_message.c | 8 ++-- src/battle_pyramid.c | 2 +- src/battle_records.c | 2 +- src/battle_script_commands.c | 2 +- src/battle_transition.c | 4 +- src/berry_blender.c | 5 ++- src/berry_tag_screen.c | 2 +- src/contest.c | 34 +++++++-------- src/contest_util.c | 2 +- src/decoration.c | 4 +- src/diploma.c | 2 +- src/easy_chat.c | 12 +++--- src/evolution_graphics.c | 8 ++-- src/evolution_scene.c | 6 +-- src/field_effect.c | 25 ++++++----- src/field_special_scene.c | 2 +- src/field_weather.c | 24 +++++------ src/fieldmap.c | 2 +- src/fldeff_flash.c | 2 +- src/fldeff_sweetscent.c | 6 +-- src/hall_of_fame.c | 6 +-- src/intro.c | 50 +++++++++++----------- src/intro_credits_graphics.c | 8 ++-- src/link.c | 2 +- src/list_menu.c | 6 +-- src/mail.c | 21 ++++----- src/main_menu.c | 4 +- src/mirage_tower.c | 3 +- src/naming_screen.c | 10 ++--- src/palette.c | 10 ++--- src/party_menu.c | 44 +++++++++---------- src/pokedex.c | 2 +- src/pokedex_area_region_map.c | 2 +- src/pokedex_area_screen.c | 2 +- src/pokemon_icon.c | 12 ++---- src/pokemon_storage_system.c | 11 +++-- src/pokenav_conditions_search_results.c | 4 +- src/pokenav_main_menu.c | 4 +- src/pokenav_match_call_gfx.c | 10 ++--- src/pokenav_menu_handler_gfx.c | 4 +- src/pokenav_region_map.c | 2 +- src/pokenav_ribbons_list.c | 4 +- src/pokenav_ribbons_summary.c | 2 +- src/region_map.c | 2 +- src/roulette.c | 36 ++++++++-------- src/scrcmd.c | 4 +- src/slot_machine.c | 4 +- src/tileset_anims.c | 4 +- src/wireless_communication_status_screen.c | 2 +- 67 files changed, 270 insertions(+), 294 deletions(-) diff --git a/gflib/sprite.c b/gflib/sprite.c index c489eb6a4c..80fba81fe3 100644 --- a/gflib/sprite.c +++ b/gflib/sprite.c @@ -1600,7 +1600,7 @@ u8 LoadSpritePalette(const struct SpritePalette *palette) else { sSpritePaletteTags[index] = palette->tag; - DoLoadSpritePalette(palette->data, index * 16); + DoLoadSpritePalette(palette->data, PLTT_ID(index)); return index; } } diff --git a/include/gba/defines.h b/include/gba/defines.h index 82caf56e68..10e84b8b1a 100644 --- a/include/gba/defines.h +++ b/include/gba/defines.h @@ -27,14 +27,12 @@ #define IWRAM_START 0x03000000 #define IWRAM_END (IWRAM_START + 0x8000) -#define PLTT 0x5000000 -#define PLTT_SIZE 0x400 - -#define BG_PLTT PLTT -#define BG_PLTT_SIZE 0x200 - -#define OBJ_PLTT (PLTT + 0x200) +#define PLTT 0x5000000 +#define BG_PLTT PLTT +#define BG_PLTT_SIZE 0x200 +#define OBJ_PLTT (PLTT + BG_PLTT_SIZE) #define OBJ_PLTT_SIZE 0x200 +#define PLTT_SIZE (BG_PLTT_SIZE + OBJ_PLTT_SIZE) #define VRAM 0x6000000 #define VRAM_SIZE 0x18000 diff --git a/include/palette.h b/include/palette.h index 29723ef6c8..d23a658b4a 100644 --- a/include/palette.h +++ b/include/palette.h @@ -6,8 +6,7 @@ #define gPaletteFade_delay (gPaletteFade.multipurpose2) // normal and hardware fade #define gPaletteFade_submode (gPaletteFade.multipurpose2) // fast fade -#define PLTT_BUFFER_SIZE 0x200 -#define PLTT_DECOMP_BUFFER_SIZE (PLTT_BUFFER_SIZE * 2) +#define PLTT_BUFFER_SIZE (PLTT_SIZE / sizeof(u16)) #define PALETTE_FADE_STATUS_DELAY 2 #define PALETTE_FADE_STATUS_ACTIVE 1 diff --git a/src/battle_anim.c b/src/battle_anim.c index 2f5d515c02..e6e049c370 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -824,27 +824,15 @@ static void Task_UpdateMonBg(u8 taskId) if (!gTasks[taskId].t2_InBg2) { - u16 *src; - u16 *dst; - gBattle_BG1_X = x + gTasks[taskId].t2_BgX; gBattle_BG1_Y = y + gTasks[taskId].t2_BgY; - - src = &gPlttBufferFaded[0x100 + battlerId * 16]; - dst = &gPlttBufferFaded[0x100 + animBg.paletteId * 16 - 256]; - CpuCopy32(src, dst, 32); + CpuCopy32(&gPlttBufferFaded[OBJ_PLTT_ID(battlerId)], &gPlttBufferFaded[BG_PLTT_ID(animBg.paletteId)], PLTT_SIZE_4BPP); } else { - u16 *src; - u16 *dst; - gBattle_BG2_X = x + gTasks[taskId].t2_BgX; gBattle_BG2_Y = y + gTasks[taskId].t2_BgY; - - src = &gPlttBufferFaded[0x100 + battlerId * 16]; - dst = &gPlttBufferFaded[0x100 - 112]; - CpuCopy32(src, dst, 32); + CpuCopy32(&gPlttBufferFaded[OBJ_PLTT_ID(battlerId)], &gPlttBufferFaded[BG_PLTT_ID(9)], PLTT_SIZE_4BPP); } } diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index 0ee894085e..1d9a12cafb 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -3963,7 +3963,7 @@ static void AnimProtect(struct Sprite *sprite) sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker); sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[2] = (IndexOfSpritePaletteTag(ANIM_TAG_PROTECT) << 4) + 0x100; + sprite->data[2] = OBJ_PLTT_ID(IndexOfSpritePaletteTag(ANIM_TAG_PROTECT)); sprite->data[7] = 16; SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16 - sprite->data[7], sprite->data[7])); @@ -5251,7 +5251,7 @@ void AnimTask_MusicNotesRainbowBlend(u8 taskId) index = IndexOfSpritePaletteTag(gParticlesColorBlendTable[0][0]); if (index != 0xFF) { - index = (index << 4) + 0x100; + index = OBJ_PLTT_ID(index); for (i = 1; i < ARRAY_COUNT(gParticlesColorBlendTable[0]); i++) gPlttBufferFaded[index + i] = gParticlesColorBlendTable[0][i]; } @@ -5261,7 +5261,7 @@ void AnimTask_MusicNotesRainbowBlend(u8 taskId) index = AllocSpritePalette(gParticlesColorBlendTable[j][0]); if (index != 0xFF) { - index = (index << 4) + 0x100; + index = OBJ_PLTT_ID(index); for (i = 1; i < ARRAY_COUNT(gParticlesColorBlendTable[0]); i++) gPlttBufferFaded[index + i] = gParticlesColorBlendTable[j][i]; } diff --git a/src/battle_anim_effects_2.c b/src/battle_anim_effects_2.c index 13cfc1b4ea..89696d7dd3 100755 --- a/src/battle_anim_effects_2.c +++ b/src/battle_anim_effects_2.c @@ -1751,7 +1751,7 @@ void AnimTask_AirCutterProjectile(u8 taskId) static void AnimVoidLines(struct Sprite *sprite) { InitSpritePosToAnimAttacker(sprite, FALSE); - sprite->data[0] = 0x100 + (IndexOfSpritePaletteTag(sVoidLinesSpriteTemplate.paletteTag) << 4); + sprite->data[0] = OBJ_PLTT_ID(IndexOfSpritePaletteTag(sVoidLinesSpriteTemplate.paletteTag)); sprite->callback = AnimVoidLines_Step; } diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c index ca0beabd32..75a6ee22d9 100755 --- a/src/battle_anim_effects_3.c +++ b/src/battle_anim_effects_3.c @@ -1383,11 +1383,11 @@ static void SetPsychicBackground_Step(u8 taskId) if (++gTasks[taskId].data[5] == 4) { - lastColor = gPlttBufferFaded[paletteIndex * 16 + 11]; + lastColor = gPlttBufferFaded[BG_PLTT_ID(paletteIndex) + 11]; for (i = 10; i > 0; i--) - gPlttBufferFaded[paletteIndex * 16 + i + 1] = gPlttBufferFaded[paletteIndex * 16 + i]; + gPlttBufferFaded[BG_PLTT_ID(paletteIndex) + i + 1] = gPlttBufferFaded[BG_PLTT_ID(paletteIndex) + i]; - gPlttBufferFaded[paletteIndex * 16 + 1] = lastColor; + gPlttBufferFaded[BG_PLTT_ID(paletteIndex) + 1] = lastColor; gTasks[taskId].data[5] = 0; } @@ -1409,15 +1409,15 @@ static void FadeScreenToWhite_Step(u8 taskId) if (++gTasks[taskId].data[5] == 4) { - lastColor = gPlttBufferFaded[paletteIndex * 16 + 11]; + lastColor = gPlttBufferFaded[BG_PLTT_ID(paletteIndex) + 11]; for (i = 10; i > 0; i--) - gPlttBufferFaded[paletteIndex * 16 + i + 1] = gPlttBufferFaded[paletteIndex * 16 + i]; - gPlttBufferFaded[paletteIndex * 16 + 1] = lastColor; + gPlttBufferFaded[BG_PLTT_ID(paletteIndex) + i + 1] = gPlttBufferFaded[BG_PLTT_ID(paletteIndex) + i]; + gPlttBufferFaded[BG_PLTT_ID(paletteIndex) + 1] = lastColor; - lastColor = gPlttBufferUnfaded[paletteIndex * 16 + 11]; + lastColor = gPlttBufferUnfaded[BG_PLTT_ID(paletteIndex) + 11]; for (i = 10; i > 0; i--) - gPlttBufferUnfaded[paletteIndex * 16 + i + 1] = gPlttBufferUnfaded[paletteIndex * 16 + i]; - gPlttBufferUnfaded[paletteIndex * 16 + 1] = lastColor; + gPlttBufferUnfaded[BG_PLTT_ID(paletteIndex) + i + 1] = gPlttBufferUnfaded[BG_PLTT_ID(paletteIndex) + i]; + gPlttBufferUnfaded[BG_PLTT_ID(paletteIndex) + 1] = lastColor; gTasks[taskId].data[5] = 0; } diff --git a/src/battle_anim_flying.c b/src/battle_anim_flying.c index 746e3bdd73..7e5c5e9393 100644 --- a/src/battle_anim_flying.c +++ b/src/battle_anim_flying.c @@ -388,17 +388,17 @@ static void AnimTask_AnimateGustTornadoPalette_Step(u8 taskId) { gTasks[taskId].data[10] = 0; data2 = gTasks[taskId].data[2]; - temp = gPlttBufferFaded[16 * data2 + 0x108]; + temp = gPlttBufferFaded[OBJ_PLTT_ID(data2) + 8]; i = 7; - base = data2 * 16; + base = PLTT_ID(data2); do { - gPlttBufferFaded[base + 0x101 + i] = gPlttBufferFaded[base + 0x100 + i]; + gPlttBufferFaded[base + OBJ_PLTT_OFFSET + 1 + i] = gPlttBufferFaded[base + OBJ_PLTT_OFFSET + i]; i--; } while (i > 0); - gPlttBufferFaded[base + 0x101] = temp; + gPlttBufferFaded[base + OBJ_PLTT_OFFSET + 1] = temp; } if (--gTasks[taskId].data[0] == 0) diff --git a/src/battle_anim_ghost.c b/src/battle_anim_ghost.c index 9b74fdada3..228ba12cee 100644 --- a/src/battle_anim_ghost.c +++ b/src/battle_anim_ghost.c @@ -627,7 +627,7 @@ static void AnimTask_SpiteTargetShadow_Step1(u8 taskId) task->data[2] = 0; task->data[3] = 16; task->data[13] = GetAnimBattlerSpriteId(ANIM_TARGET); - task->data[4] = (gSprites[task->data[13]].oam.paletteNum + 16) * 16; + task->data[4] = OBJ_PLTT_ID2(gSprites[task->data[13]].oam.paletteNum); if (position == 1) { u16 mask = DISPCNT_BG1_ON; mask2 = mask; diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c index ac38c5e474..d9fd652311 100644 --- a/src/battle_anim_mons.c +++ b/src/battle_anim_mons.c @@ -1382,18 +1382,17 @@ void SetGrayscaleOrOriginalPalette(u16 paletteNum, bool8 restoreOriginalColor) struct PlttData *originalColor; struct PlttData *destColor; u16 average; - - paletteNum *= 16; + u16 paletteOffset = PLTT_ID(paletteNum); if (!restoreOriginalColor) { for (i = 0; i < 16; i++) { - originalColor = (struct PlttData *)&gPlttBufferUnfaded[paletteNum + i]; + originalColor = (struct PlttData *)&gPlttBufferUnfaded[paletteOffset + i]; average = originalColor->r + originalColor->g + originalColor->b; average /= 3; - destColor = (struct PlttData *)&gPlttBufferFaded[paletteNum + i]; + destColor = (struct PlttData *)&gPlttBufferFaded[paletteOffset + i]; destColor->r = average; destColor->g = average; destColor->b = average; @@ -1401,7 +1400,7 @@ void SetGrayscaleOrOriginalPalette(u16 paletteNum, bool8 restoreOriginalColor) } else { - CpuCopy32(&gPlttBufferUnfaded[paletteNum], &gPlttBufferFaded[paletteNum], 32); + CpuCopy32(&gPlttBufferUnfaded[paletteOffset], &gPlttBufferFaded[paletteOffset], PLTT_SIZE_4BPP); } } diff --git a/src/battle_anim_psychic.c b/src/battle_anim_psychic.c index 978d14c4cd..f7bc6e31ae 100644 --- a/src/battle_anim_psychic.c +++ b/src/battle_anim_psychic.c @@ -468,7 +468,7 @@ static void AnimDefensiveWall(struct Sprite *sprite) sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + gBattleAnimArgs[1]; } - sprite->data[0] = 256 + IndexOfSpritePaletteTag(gBattleAnimArgs[2]) * 16; + sprite->data[0] = OBJ_PLTT_ID(IndexOfSpritePaletteTag(gBattleAnimArgs[2])); if (isContest) { diff --git a/src/battle_anim_status_effects.c b/src/battle_anim_status_effects.c index 4e6b3a3402..5000e11096 100644 --- a/src/battle_anim_status_effects.c +++ b/src/battle_anim_status_effects.c @@ -424,10 +424,10 @@ static void AnimTask_FrozenIceCube_Step2(u8 taskId) { u16 temp; - temp = gPlttBufferFaded[0x100 + palIndex * 16 + 13]; - gPlttBufferFaded[0x100 + palIndex * 16 + 13] = gPlttBufferFaded[0x100 + palIndex * 16 + 14]; - gPlttBufferFaded[0x100 + palIndex * 16 + 14] = gPlttBufferFaded[0x100 + palIndex * 16 + 15]; - gPlttBufferFaded[0x100 + palIndex * 16 + 15] = temp; + temp = gPlttBufferFaded[OBJ_PLTT_ID(palIndex) + 13]; + gPlttBufferFaded[OBJ_PLTT_ID(palIndex) + 13] = gPlttBufferFaded[OBJ_PLTT_ID(palIndex) + 14]; + gPlttBufferFaded[OBJ_PLTT_ID(palIndex) + 14] = gPlttBufferFaded[OBJ_PLTT_ID(palIndex) + 15]; + gPlttBufferFaded[OBJ_PLTT_ID(palIndex) + 15] = temp; gTasks[taskId].data[2] = 0; gTasks[taskId].data[3]++; diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c index d8e1e7baa3..b399bd5b5c 100644 --- a/src/battle_anim_utility_funcs.c +++ b/src/battle_anim_utility_funcs.c @@ -663,7 +663,7 @@ static void SetPalettesToColor(u32 selectedPalettes, u16 color) { if (selectedPalettes & 1) { - u16 curOffset = i * 16; + u16 curOffset = PLTT_ID(i); u16 paletteOffset = curOffset; while (curOffset < paletteOffset + 16) { @@ -932,7 +932,7 @@ void AnimTask_CopyPalUnfadedToBackup(u8 taskId) paletteIndex = gBattleAnimTarget + 16; } - memcpy(&gMonSpritesGfxPtr->buffer[gBattleAnimArgs[1] * 16], &gPlttBufferUnfaded[paletteIndex * 16], 32); + memcpy(&gMonSpritesGfxPtr->buffer[gBattleAnimArgs[1] * 16], &gPlttBufferUnfaded[PLTT_ID(paletteIndex)], PLTT_SIZE_4BPP); DestroyAnimVisualTask(taskId); } @@ -959,7 +959,7 @@ void AnimTask_CopyPalUnfadedFromBackup(u8 taskId) paletteIndex = gBattleAnimTarget + 16; } - memcpy(&gPlttBufferUnfaded[paletteIndex * 16], &gMonSpritesGfxPtr->buffer[gBattleAnimArgs[1] * 16], 32); + memcpy(&gPlttBufferUnfaded[PLTT_ID(paletteIndex)], &gMonSpritesGfxPtr->buffer[gBattleAnimArgs[1] * 16], PLTT_SIZE_4BPP); DestroyAnimVisualTask(taskId); } @@ -986,7 +986,7 @@ void AnimTask_CopyPalFadedToUnfaded(u8 taskId) paletteIndex = gBattleAnimTarget + 16; } - memcpy(&gPlttBufferUnfaded[paletteIndex * 16], &gPlttBufferFaded[paletteIndex * 16], 32); + memcpy(&gPlttBufferUnfaded[PLTT_ID(paletteIndex)], &gPlttBufferFaded[PLTT_ID(paletteIndex)], PLTT_SIZE_4BPP); DestroyAnimVisualTask(taskId); } diff --git a/src/battle_anim_water.c b/src/battle_anim_water.c index 117dd3b88c..dc793f70a5 100644 --- a/src/battle_anim_water.c +++ b/src/battle_anim_water.c @@ -619,7 +619,7 @@ static void AnimAuroraBeamRings_Step(struct Sprite *sprite) void AnimTask_RotateAuroraRingColors(u8 taskId) { gTasks[taskId].data[0] = gBattleAnimArgs[0]; - gTasks[taskId].data[2] = IndexOfSpritePaletteTag(ANIM_TAG_RAINBOW_RINGS) * 16 + 256; + gTasks[taskId].data[2] = OBJ_PLTT_ID(IndexOfSpritePaletteTag(ANIM_TAG_RAINBOW_RINGS)); gTasks[taskId].func = AnimTask_RotateAuroraRingColors_Step; } @@ -887,12 +887,12 @@ static void AnimTask_CreateSurfWave_Step1(u8 taskId) gTasks[taskId].data[2] += gTasks[taskId].data[1]; if (++gTasks[taskId].data[5] == 4) { - rgbBuffer = gPlttBufferFaded[animBg.paletteId * 16 + 7]; + rgbBuffer = gPlttBufferFaded[BG_PLTT_ID(animBg.paletteId) + 7]; for (i = 6; i != 0; i--) { - gPlttBufferFaded[animBg.paletteId * 16 + 1 + i] = gPlttBufferFaded[animBg.paletteId * 16 + 1 + i - 1]; // 1 + i - 1 is needed to match for some bizarre reason + gPlttBufferFaded[BG_PLTT_ID(animBg.paletteId) + 1 + i] = gPlttBufferFaded[BG_PLTT_ID(animBg.paletteId) + 1 + i - 1]; // 1 + i - 1 is needed to match for some bizarre reason } - gPlttBufferFaded[animBg.paletteId * 16 + 1] = rgbBuffer; + gPlttBufferFaded[BG_PLTT_ID(animBg.paletteId) + 1] = rgbBuffer; gTasks[taskId].data[5] = 0; } if (++gTasks[taskId].data[6] > 1) diff --git a/src/battle_bg.c b/src/battle_bg.c index b7c2b1494c..b3091d965e 100644 --- a/src/battle_bg.c +++ b/src/battle_bg.c @@ -21,6 +21,7 @@ #include "trig.h" #include "window.h" #include "constants/map_types.h" +#include "constants/rgb.h" #include "constants/songs.h" #include "constants/trainers.h" @@ -1071,7 +1072,7 @@ void InitLinkBattleVsScreen(u8 taskId) break; case 1: palId = AllocSpritePalette(TAG_VS_LETTERS); - gPlttBufferUnfaded[palId * 16 + 0x10F] = gPlttBufferFaded[palId * 16 + 0x10F] = 0x7FFF; + gPlttBufferUnfaded[OBJ_PLTT_ID(palId) + 15] = gPlttBufferFaded[OBJ_PLTT_ID(palId) + 15] = RGB_WHITE; gBattleStruct->linkBattleVsSpriteId_V = CreateSprite(&sVsLetter_V_SpriteTemplate, 111, 80, 0); gBattleStruct->linkBattleVsSpriteId_S = CreateSprite(&sVsLetter_S_SpriteTemplate, 129, 80, 0); gSprites[gBattleStruct->linkBattleVsSpriteId_V].invisible = TRUE; diff --git a/src/battle_factory_screen.c b/src/battle_factory_screen.c index 16f702c72c..0812953235 100644 --- a/src/battle_factory_screen.c +++ b/src/battle_factory_screen.c @@ -1183,7 +1183,7 @@ static void CB2_InitSelectScreen(void) #else if (sFactorySelectScreen->fromSummaryScreen == TRUE) #endif - gPlttBufferUnfaded[228] = sFactorySelectScreen->speciesNameColorBackup; + gPlttBufferUnfaded[BG_PLTT_ID(14) + 4] = sFactorySelectScreen->speciesNameColorBackup; LoadPalette(sMonPicBg_Pal, BG_PLTT_ID(2), PLTT_SIZEOF(2)); gMain.state++; break; @@ -1449,7 +1449,7 @@ static void Select_Task_OpenSummaryScreen(u8 taskId) switch (gTasks[taskId].tState) { case STATE_SUMMARY_FADE: - gPlttBufferUnfaded[228] = gPlttBufferFaded[228]; + gPlttBufferUnfaded[BG_PLTT_ID(14) + 4] = gPlttBufferFaded[BG_PLTT_ID(14) + 4]; BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); gTasks[taskId].tState = STATE_SUMMARY_CLEAN; break; @@ -1468,7 +1468,7 @@ static void Select_Task_OpenSummaryScreen(u8 taskId) } break; case STATE_SUMMARY_SHOW: - sFactorySelectScreen->speciesNameColorBackup = gPlttBufferUnfaded[228]; + sFactorySelectScreen->speciesNameColorBackup = gPlttBufferUnfaded[BG_PLTT_ID(14) + 4]; DestroyTask(taskId); sFactorySelectScreen->fromSummaryScreen = TRUE; currMonId = sFactorySelectScreen->cursorPos; @@ -1641,8 +1641,8 @@ static void Select_Task_HandleMenu(u8 taskId) { if (sFactorySelectScreen->fromSummaryScreen == TRUE) { - gPlttBufferFaded[228] = sFactorySelectScreen->speciesNameColorBackup; - gPlttBufferUnfaded[228] = gPlttBufferUnfaded[244]; + gPlttBufferFaded[BG_PLTT_ID(14) + 4] = sFactorySelectScreen->speciesNameColorBackup; + gPlttBufferUnfaded[BG_PLTT_ID(14) + 4] = gPlttBufferUnfaded[BG_PLTT_ID(15) + 4]; } sFactorySelectScreen->fromSummaryScreen = FALSE; gTasks[taskId].tState = STATE_MENU_HANDLE_INPUT; @@ -2388,7 +2388,7 @@ static void Swap_Task_OpenSummaryScreen(u8 taskId) case STATE_SUMMARY_SHOW: DestroyTask(taskId); sFactorySwapScreen->fromSummaryScreen = TRUE; - sFactorySwapScreen->speciesNameColorBackup = gPlttBufferUnfaded[244]; + sFactorySwapScreen->speciesNameColorBackup = gPlttBufferUnfaded[BG_PLTT_ID(15) + 4]; ShowPokemonSummaryScreen(SUMMARY_MODE_NORMAL, gPlayerParty, sFactorySwapScreen->cursorPos, FRONTIER_PARTY_SIZE - 1, CB2_InitSwapScreen); break; } @@ -2761,7 +2761,7 @@ static void Swap_Task_FadeOutSpeciesName(u8 taskId) if (sFactorySwapScreen->fadeSpeciesNameCoeffDelay > 3) { sFactorySwapScreen->fadeSpeciesNameCoeffDelay = 0; - gPlttBufferUnfaded[244] = gPlttBufferFaded[228]; + gPlttBufferUnfaded[BG_PLTT_ID(15) + 4] = gPlttBufferFaded[BG_PLTT_ID(14) + 4]; sFactorySwapScreen->fadeSpeciesNameCoeff++; } BlendPalettes(0x4000, sFactorySwapScreen->fadeSpeciesNameCoeff, 0); @@ -3125,7 +3125,7 @@ static void Swap_Task_ScreenInfoTransitionIn(u8 taskId) if (gTasks[taskId].tSlideFinishedPkmn == TRUE && gTasks[taskId].tSlideFinishedCancel == TRUE) { - gPlttBufferFaded[226] = sPokeballGray_Pal[37]; + gPlttBufferFaded[BG_PLTT_ID(14) + 2] = sPokeballGray_Pal[37]; Swap_PrintActionStrings(); PutWindowTilemap(SWAP_WIN_ACTION_FADE); gTasks[taskId].tState++; @@ -3864,7 +3864,7 @@ static void Swap_PrintMonSpeciesAtFade(void) CpuCopy16(sSwapText_Pal, pal, 8); if (!sFactorySwapScreen->fromSummaryScreen) - pal[4] = gPlttBufferFaded[228]; + pal[4] = gPlttBufferFaded[BG_PLTT_ID(14) + 4]; else pal[4] = sFactorySwapScreen->speciesNameColorBackup; LoadPalette(pal, BG_PLTT_ID(15), sizeof(sSwapText_Pal)); diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index 0b5796487c..55ed328b89 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -598,7 +598,7 @@ void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 battlerId) if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE) { BlendPalette(paletteOffset, 16, 6, RGB_WHITE); - CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, PLTT_SIZEOF(16)); + CpuCopy32(&gPlttBufferFaded[paletteOffset], &gPlttBufferUnfaded[paletteOffset], PLTT_SIZEOF(16)); } } @@ -661,7 +661,7 @@ void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 battlerId) if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE) { BlendPalette(paletteOffset, 16, 6, RGB_WHITE); - CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, PLTT_SIZEOF(16)); + CpuCopy32(&gPlttBufferFaded[paletteOffset], &gPlttBufferUnfaded[paletteOffset], PLTT_SIZEOF(16)); } } @@ -909,7 +909,7 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 castform) if (gBattleSpritesDataPtr->battlerData[battlerAtk].transformSpecies != SPECIES_NONE) { BlendPalette(paletteOffset, 16, 6, RGB_WHITE); - CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, PLTT_SIZEOF(16)); + CpuCopy32(&gPlttBufferFaded[paletteOffset], &gPlttBufferUnfaded[paletteOffset], PLTT_SIZEOF(16)); } gSprites[gBattlerSpriteIds[battlerAtk]].y = GetBattlerSpriteDefault_Y(battlerAtk); } @@ -978,7 +978,7 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 castform) } BlendPalette(paletteOffset, 16, 6, RGB_WHITE); - CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, PLTT_SIZEOF(16)); + CpuCopy32(&gPlttBufferFaded[paletteOffset], &gPlttBufferUnfaded[paletteOffset], PLTT_SIZEOF(16)); if (!IsContest()) { diff --git a/src/battle_interface.c b/src/battle_interface.c index bc86ede4ac..f9a7be58ea 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -2059,7 +2059,7 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId) pltAdder += battlerId + 12; FillPalette(sStatusIconColors[statusPalId], OBJ_PLTT_OFFSET + pltAdder, PLTT_SIZEOF(1)); - CpuCopy16(gPlttBufferUnfaded + OBJ_PLTT_OFFSET + pltAdder, (u16 *)OBJ_PLTT + pltAdder, PLTT_SIZEOF(1)); + CpuCopy16(&gPlttBufferUnfaded[OBJ_PLTT_OFFSET + pltAdder], (u16 *)OBJ_PLTT + pltAdder, PLTT_SIZEOF(1)); CpuCopy32(statusGfxPtr, (void *)(OBJ_VRAM0 + (gSprites[healthboxSpriteId].oam.tileNum + tileNumAdder) * TILE_SIZE_4BPP), 96); if (IsDoubleBattle() == TRUE || GetBattlerSide(battlerId) == B_SIDE_OPPONENT) { diff --git a/src/battle_message.c b/src/battle_message.c index f02e38f134..b02e9e445c 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -3025,11 +3025,11 @@ void SetPpNumbersPaletteInMoveSelection(void) u8 var = GetCurrentPpToMaxPpState(chooseMoveStruct->currentPp[gMoveSelectionCursor[gActiveBattler]], chooseMoveStruct->maxPp[gMoveSelectionCursor[gActiveBattler]]); - gPlttBufferUnfaded[92] = palPtr[(var * 2) + 0]; - gPlttBufferUnfaded[91] = palPtr[(var * 2) + 1]; + gPlttBufferUnfaded[BG_PLTT_ID(5) + 12] = palPtr[(var * 2) + 0]; + gPlttBufferUnfaded[BG_PLTT_ID(5) + 11] = palPtr[(var * 2) + 1]; - CpuCopy16(&gPlttBufferUnfaded[92], &gPlttBufferFaded[92], sizeof(u16)); - CpuCopy16(&gPlttBufferUnfaded[91], &gPlttBufferFaded[91], sizeof(u16)); + CpuCopy16(&gPlttBufferUnfaded[BG_PLTT_ID(5) + 12], &gPlttBufferFaded[BG_PLTT_ID(5) + 12], PLTT_SIZEOF(1)); + CpuCopy16(&gPlttBufferUnfaded[BG_PLTT_ID(5) + 11], &gPlttBufferFaded[BG_PLTT_ID(5) + 11], PLTT_SIZEOF(1)); } u8 GetCurrentPpToMaxPpState(u8 currentPp, u8 maxPp) diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c index 84a439037d..07d7772f42 100644 --- a/src/battle_pyramid.c +++ b/src/battle_pyramid.c @@ -1185,7 +1185,7 @@ static void Task_SetPyramidFloorPalette(u8 taskId) { if (gPaletteFade.active) { - CpuCopy16(gBattlePyramidFloor_Pal[gSaveBlock2Ptr->frontier.curChallengeBattleNum], &gPlttBufferUnfaded[96], 32); + CpuCopy16(gBattlePyramidFloor_Pal[gSaveBlock2Ptr->frontier.curChallengeBattleNum], &gPlttBufferUnfaded[BG_PLTT_ID(6)], PLTT_SIZE_4BPP); DestroyTask(taskId); } } diff --git a/src/battle_records.c b/src/battle_records.c index 4463a9ebfc..edc48d8202 100644 --- a/src/battle_records.c +++ b/src/battle_records.c @@ -444,7 +444,7 @@ static void LoadTrainerHillRecordsWindowGfx(u8 bgId) { LoadBgTiles(bgId, sTrainerHillWindowTileset, sizeof(sTrainerHillWindowTileset), 0); CopyToBgTilemapBufferRect(bgId, sTrainerHillWindowTilemap, 0, 0, 0x20, 0x20); - LoadPalette(sTrainerHillWindowPalette, BG_PLTT_ID(0), PLTT_SIZE_4BPP); + LoadPalette(sTrainerHillWindowPalette, BG_PLTT_ID(0), sizeof(sTrainerHillWindowPalette)); } static void VblankCB_TrainerHillRecords(void) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index d12477bea8..bf9197a0e8 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6013,7 +6013,7 @@ static void InitLevelUpBanner(void) gBattle_BG2_Y = 0; gBattle_BG2_X = LEVEL_UP_BANNER_START; - LoadPalette(sLevelUpBanner_Pal, BG_PLTT_ID(6), PLTT_SIZE_4BPP); + LoadPalette(sLevelUpBanner_Pal, BG_PLTT_ID(6), sizeof(sLevelUpBanner_Pal)); CopyToWindowPixelBuffer(B_WIN_LEVEL_UP_BANNER, sLevelUpBanner_Gfx, 0, 0); PutWindowTilemap(B_WIN_LEVEL_UP_BANNER); CopyWindowToVram(B_WIN_LEVEL_UP_BANNER, COPYWIN_FULL); diff --git a/src/battle_transition.c b/src/battle_transition.c index 4066f72e58..2e87b9c1d7 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -1069,7 +1069,7 @@ static void Task_BattleTransition(u8 taskId) static bool8 Transition_StartIntro(struct Task *task) { SetWeatherScreenFadeOut(); - CpuCopy32(gPlttBufferFaded, gPlttBufferUnfaded, sizeof(gPlttBufferUnfaded)); + CpuCopy32(gPlttBufferFaded, gPlttBufferUnfaded, PLTT_SIZE); if (sTasks_Intro[task->tTransitionId] != NULL) { CreateTask(sTasks_Intro[task->tTransitionId], 4); @@ -4498,7 +4498,7 @@ static bool8 FrontierSquares_Shrink(struct Task *task) switch (task->tShrinkState) { case 0: - for (i = 250; i < 255; i++) + for (i = BG_PLTT_ID(15) + 10; i < BG_PLTT_ID(15) + 15; i++) { gPlttBufferUnfaded[i] = RGB_BLACK; gPlttBufferFaded[i] = RGB_BLACK; diff --git a/src/berry_blender.c b/src/berry_blender.c index cf0de017fa..10b02c86b7 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -1033,11 +1033,12 @@ static void InitBerryBlenderWindows(void) s32 i; DeactivateAllTextPrinters(); - for (i = 0; i < 5; i++) + // Initialize only the main text windows (player names and message box; excludes results screen) + for (i = 0; i < WIN_RESULTS; i++) FillWindowPixelBuffer(i, PIXEL_FILL(0)); FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, DISPLAY_TILE_WIDTH, DISPLAY_TILE_HEIGHT); - Menu_LoadStdPalAt(0xE0); + Menu_LoadStdPalAt(BG_PLTT_ID(14)); } } diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c index e43d686001..448ee33848 100644 --- a/src/berry_tag_screen.c +++ b/src/berry_tag_screen.c @@ -367,7 +367,7 @@ static void HandleInitWindows(void) InitWindows(sWindowTemplates); DeactivateAllTextPrinters(); - LoadPalette(sFontPalette, BG_PLTT_ID(15), PLTT_SIZE_4BPP); + LoadPalette(sFontPalette, BG_PLTT_ID(15), sizeof(sFontPalette)); for (i = 0; i < ARRAY_COUNT(sWindowTemplates) - 1; i++) PutWindowTilemap(i); ScheduleBgCopyTilemapToVram(0); diff --git a/src/contest.c b/src/contest.c index 8a1847f111..84d295f132 100644 --- a/src/contest.c +++ b/src/contest.c @@ -1076,10 +1076,10 @@ static void LoadContestPalettes(void) { s32 i; - LoadPalette(sText_Pal, BG_PLTT_ID(15), PLTT_SIZE_4BPP); + LoadPalette(sText_Pal, BG_PLTT_ID(15), sizeof(sText_Pal)); SetBackdropFromColor(RGB_BLACK); for (i = 10; i < 14; i++) - LoadPalette(gPlttBufferUnfaded + BG_PLTT_ID(15) + 1, BG_PLTT_ID(15) + i, PLTT_SIZEOF(1)); + LoadPalette(&gPlttBufferUnfaded[BG_PLTT_ID(15) + 1], BG_PLTT_ID(15) + i, PLTT_SIZEOF(1)); FillPalette(RGB(31, 17, 31), BG_PLTT_ID(15) + 3, PLTT_SIZEOF(1)); } @@ -1331,10 +1331,10 @@ static bool8 SetupContestGraphics(u8 *stateVar) break; case 5: LoadCompressedPalette(gContestInterfaceAudiencePalette, BG_PLTT_OFFSET, BG_PLTT_SIZE); - CpuCopy32(gPlttBufferUnfaded + BG_PLTT_ID(8), tempPalette1, PLTT_SIZE_4BPP); - CpuCopy32(gPlttBufferUnfaded + BG_PLTT_ID(5 + gContestPlayerMonIndex), tempPalette2, PLTT_SIZE_4BPP); - CpuCopy32(tempPalette2, gPlttBufferUnfaded + BG_PLTT_ID(8), PLTT_SIZE_4BPP); - CpuCopy32(tempPalette1, gPlttBufferUnfaded + BG_PLTT_ID(5 + gContestPlayerMonIndex), PLTT_SIZE_4BPP); + CpuCopy32(&gPlttBufferUnfaded[BG_PLTT_ID(8)], tempPalette1, PLTT_SIZE_4BPP); + CpuCopy32(&gPlttBufferUnfaded[BG_PLTT_ID(5 + gContestPlayerMonIndex)], tempPalette2, PLTT_SIZE_4BPP); + CpuCopy32(tempPalette2, &gPlttBufferUnfaded[BG_PLTT_ID(8)], PLTT_SIZE_4BPP); + CpuCopy32(tempPalette1, &gPlttBufferUnfaded[BG_PLTT_ID(5 + gContestPlayerMonIndex)], PLTT_SIZE_4BPP); DmaCopy32Defvars(3, gPlttBufferUnfaded, eContestTempSave.cachedWindowPalettes, sizeof(eContestTempSave.cachedWindowPalettes)); LoadContestPalettes(); break; @@ -1475,7 +1475,7 @@ static void Task_DisplayAppealNumberText(u8 taskId) gBattle_BG0_Y = 0; gBattle_BG2_Y = 0; ContestDebugDoPrint(); - DmaCopy32Defvars(3, gPlttBufferUnfaded, eContestTempSave.cachedPlttBufferUnfaded, PLTT_BUFFER_SIZE * 2); + DmaCopy32Defvars(3, gPlttBufferUnfaded, eContestTempSave.cachedPlttBufferUnfaded, PLTT_SIZE); ConvertIntToDecimalStringN(gStringVar1, eContest.appealNumber + 1, STR_CONV_MODE_LEFT_ALIGN, 1); if (!Contest_IsMonsTurnDisabled(gContestPlayerMonIndex)) StringCopy(gDisplayedStringBattle, gText_AppealNumWhichMoveWillBePlayed); @@ -1674,8 +1674,8 @@ static void Task_HideMoveSelectScreen(u8 taskId) } Contest_SetBgCopyFlags(0); // This seems to be a bug; it should have just copied PLTT_BUFFER_SIZE. - DmaCopy32Defvars(3, gPlttBufferFaded, eContestTempSave.cachedPlttBufferFaded, PLTT_BUFFER_SIZE * 2); - LoadPalette(eContestTempSave.cachedPlttBufferUnfaded, 0, PLTT_BUFFER_SIZE * 2); + DmaCopy32Defvars(3, gPlttBufferFaded, eContestTempSave.cachedPlttBufferFaded, PLTT_SIZE); + LoadPalette(eContestTempSave.cachedPlttBufferUnfaded, 0, PLTT_SIZE); gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 0; gTasks[taskId].func = Task_HideApplauseMeterForAppealStart; @@ -2561,7 +2561,7 @@ static void Task_WaitForHeartSliders(u8 taskId) static void Task_RestorePlttBufferUnfaded(u8 taskId) { - DmaCopy32Defvars(3, eContestTempSave.cachedPlttBufferUnfaded, gPlttBufferUnfaded, PLTT_BUFFER_SIZE * 2); + DmaCopy32Defvars(3, eContestTempSave.cachedPlttBufferUnfaded, gPlttBufferUnfaded, PLTT_SIZE); gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 2; gTasks[taskId].func = Task_WaitPrintRoundResult; @@ -4068,14 +4068,14 @@ static void UpdateBlendTaskContestantData(u8 contestant) palOffset1 = contestant + 5; DmaCopy16Defvars(3, - gPlttBufferUnfaded + palOffset1 * 16 + 10, - gPlttBufferFaded + palOffset1 * 16 + 10, - 2); - palOffset2 = (contestant + 5) * 16 + 12 + contestant; + &gPlttBufferUnfaded[PLTT_ID(palOffset1) + 10], + &gPlttBufferFaded[PLTT_ID(palOffset1) + 10], + PLTT_SIZEOF(1)); + palOffset2 = PLTT_ID(contestant + 5) + 12 + contestant; DmaCopy16Defvars(3, - gPlttBufferUnfaded + palOffset2, - gPlttBufferFaded + palOffset2, - 2); + &gPlttBufferUnfaded[palOffset2], + &gPlttBufferFaded[palOffset2], + PLTT_SIZEOF(1)); } // See comments on CreateUnusedBlendTask diff --git a/src/contest_util.c b/src/contest_util.c index 4c9e63c0b8..ec999be924 100644 --- a/src/contest_util.c +++ b/src/contest_util.c @@ -456,7 +456,7 @@ static void LoadContestResultsBgGfx(void) CopyToBgTilemapBuffer(2, gContestResults_Interface_Tilemap, 0, 0); CopyToBgTilemapBuffer(0, gContestResults_WinnerBanner_Tilemap, 0, 0); LoadContestResultsTitleBarTilemaps(); - LoadCompressedPalette(gContestResults_Pal, BG_PLTT_ID(0), 16 * PLTT_SIZE_4BPP); + LoadCompressedPalette(gContestResults_Pal, BG_PLTT_OFFSET, BG_PLTT_SIZE); LoadPalette(sResultsTextWindow_Pal, BG_PLTT_ID(15), sizeof(sResultsTextWindow_Pal)); for (i = 0; i < CONTESTANT_COUNT; i++) diff --git a/src/decoration.c b/src/decoration.c index 6d95cfbdc3..27ef85de9e 100644 --- a/src/decoration.c +++ b/src/decoration.c @@ -688,7 +688,7 @@ static void ReturnToDecorationActionsAfterInvalidSelection(u8 taskId) static void SecretBasePC_PrepMenuForSelectingStoredDecors(u8 taskId) { - LoadPalette(sDecorationMenuPalette, BG_PLTT_ID(13), PLTT_SIZE_4BPP); + LoadPalette(sDecorationMenuPalette, BG_PLTT_ID(13), sizeof(sDecorationMenuPalette)); ClearDialogWindowAndFrame(0, FALSE); RemoveDecorationWindow(WINDOW_MAIN_MENU); InitDecorationCategoriesWindow(taskId); @@ -834,7 +834,7 @@ static void ReturnToActionsMenuFromCategories(u8 taskId) void ShowDecorationCategoriesWindow(u8 taskId) { - LoadPalette(sDecorationMenuPalette, BG_PLTT_ID(13), PLTT_SIZE_4BPP); + LoadPalette(sDecorationMenuPalette, BG_PLTT_ID(13), sizeof(sDecorationMenuPalette)); ClearDialogWindowAndFrame(0, FALSE); gTasks[taskId].tDecorationMenuCommand = DECOR_MENU_TRADE; sCurDecorationCategory = DECORCAT_DESK; diff --git a/src/diploma.c b/src/diploma.c index 4f62644924..2a18867450 100644 --- a/src/diploma.c +++ b/src/diploma.c @@ -72,7 +72,7 @@ void CB2_ShowDiploma(void) ResetSpriteData(); ResetPaletteFade(); FreeAllSpritePalettes(); - LoadPalette(sDiplomaPalettes, BG_PLTT_ID(0), 2 * PLTT_SIZE_4BPP); + LoadPalette(sDiplomaPalettes, BG_PLTT_ID(0), sizeof(sDiplomaPalettes)); sDiplomaTilemapPtr = Alloc(0x1000); InitDiplomaBg(); InitDiplomaWindow(); diff --git a/src/easy_chat.c b/src/easy_chat.c index 35ba633cf4..5c910dced1 100644 --- a/src/easy_chat.c +++ b/src/easy_chat.c @@ -3930,12 +3930,12 @@ static void LoadEasyChatPalettes(void) { ResetPaletteFade(); LoadPalette(gEasyChatMode_Pal, BG_PLTT_ID(0), PLTT_SIZE_4BPP); - LoadPalette(sTextInputFrameOrange_Pal, BG_PLTT_ID(1), PLTT_SIZE_4BPP); - LoadPalette(sTextInputFrameGreen_Pal, BG_PLTT_ID(4), PLTT_SIZE_4BPP); - LoadPalette(sTitleText_Pal, BG_PLTT_ID(10), PLTT_SIZEOF(4)); - LoadPalette(sText_Pal, BG_PLTT_ID(11), PLTT_SIZEOF(6)); - LoadPalette(sText_Pal, BG_PLTT_ID(15), PLTT_SIZEOF(6)); - LoadPalette(sText_Pal, BG_PLTT_ID(3), PLTT_SIZEOF(6)); + LoadPalette(sTextInputFrameOrange_Pal, BG_PLTT_ID(1), sizeof(sTextInputFrameOrange_Pal)); + LoadPalette(sTextInputFrameGreen_Pal, BG_PLTT_ID(4), sizeof(sTextInputFrameGreen_Pal)); + LoadPalette(sTitleText_Pal, BG_PLTT_ID(10), sizeof(sTitleText_Pal)); + LoadPalette(sText_Pal, BG_PLTT_ID(11), sizeof(sText_Pal)); + LoadPalette(sText_Pal, BG_PLTT_ID(15), sizeof(sText_Pal)); + LoadPalette(sText_Pal, BG_PLTT_ID(3), sizeof(sText_Pal)); } static void PrintTitle(void) diff --git a/src/evolution_graphics.c b/src/evolution_graphics.c index a86f16201f..96ff1b52df 100644 --- a/src/evolution_graphics.c +++ b/src/evolution_graphics.c @@ -409,7 +409,7 @@ static void Task_Sparkles_SprayAndFlash_Init(u8 taskId) { SetEvoSparklesMatrices(); gTasks[taskId].tTimer = 0; - CpuSet(&gPlttBufferFaded[0x20], &gPlttBufferUnfaded[0x20], 0x30); + CpuCopy16(&gPlttBufferFaded[BG_PLTT_ID(2)], &gPlttBufferUnfaded[BG_PLTT_ID(2)], 3 * PLTT_SIZE_4BPP); BeginNormalPaletteFade(0xFFF9041C, 0, 0, 0x10, RGB_WHITE); // was 0xFFF9001C in R/S gTasks[taskId].func = Task_Sparkles_SprayAndFlash; PlaySE(SE_M_PETAL_DANCE); @@ -458,7 +458,7 @@ static void Task_Sparkles_SprayAndFlashTrade_Init(u8 taskId) { SetEvoSparklesMatrices(); gTasks[taskId].tTimer = 0; - CpuSet(&gPlttBufferFaded[0x20], &gPlttBufferUnfaded[0x20], 0x30); + CpuCopy16(&gPlttBufferFaded[BG_PLTT_ID(2)], &gPlttBufferUnfaded[BG_PLTT_ID(2)], 3 * PLTT_SIZE_4BPP); BeginNormalPaletteFade(0xFFF90400, 0, 0, 0x10, RGB_WHITE); // was 0xFFFF0001 in R/S gTasks[taskId].func = Task_Sparkles_SprayAndFlashTrade; PlaySE(SE_M_PETAL_DANCE); @@ -536,13 +536,13 @@ u8 CycleEvolutionMonSprite(u8 preEvoSpriteId, u8 postEvoSpriteId) gSprites[preEvoSpriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; gSprites[preEvoSpriteId].oam.matrixNum = MATRIX_PRE_EVO; gSprites[preEvoSpriteId].invisible = FALSE; - CpuSet(monPalette, &gPlttBufferFaded[0x100 + (gSprites[preEvoSpriteId].oam.paletteNum * 16)], 16); + CpuSet(monPalette, &gPlttBufferFaded[OBJ_PLTT_ID(gSprites[preEvoSpriteId].oam.paletteNum)], 16); gSprites[postEvoSpriteId].callback = SpriteCB_EvolutionMonSprite; gSprites[postEvoSpriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; gSprites[postEvoSpriteId].oam.matrixNum = MATRIX_POST_EVO; gSprites[postEvoSpriteId].invisible = FALSE; - CpuSet(monPalette, &gPlttBufferFaded[0x100 + (gSprites[postEvoSpriteId].oam.paletteNum * 16)], 16); + CpuSet(monPalette, &gPlttBufferFaded[OBJ_PLTT_ID(gSprites[postEvoSpriteId].oam.paletteNum)], 16); gTasks[taskId].tEvoStopped = FALSE; return taskId; diff --git a/src/evolution_scene.c b/src/evolution_scene.c index eeb22edd24..3b92a0c435 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -298,7 +298,7 @@ void EvolutionScene(struct Pokemon *mon, u16 postEvoSpecies, bool8 canStopEvo, u gTasks[id].tEvoWasStopped = FALSE; gTasks[id].tPartyId = partyId; - memcpy(&sEvoStructPtr->savedPalette, &gPlttBufferUnfaded[0x20], sizeof(sEvoStructPtr->savedPalette)); + memcpy(&sEvoStructPtr->savedPalette, &gPlttBufferUnfaded[BG_PLTT_ID(2)], sizeof(sEvoStructPtr->savedPalette)); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_1D_MAP); @@ -741,7 +741,7 @@ static void Task_EvolutionScene(u8 taskId) if (IsSEPlaying()) { m4aMPlayAllStop(); - memcpy(&gPlttBufferUnfaded[0x20], sEvoStructPtr->savedPalette, sizeof(sEvoStructPtr->savedPalette)); + memcpy(&gPlttBufferUnfaded[BG_PLTT_ID(2)], sEvoStructPtr->savedPalette, sizeof(sEvoStructPtr->savedPalette)); RestoreBgAfterAnim(); BeginNormalPaletteFade(0x1C, 0, 0x10, 0, RGB_BLACK); gTasks[taskId].tState++; @@ -1170,7 +1170,7 @@ static void Task_TradeEvolutionScene(u8 taskId) // Restore bg, do mon anim/cry Free(sBgAnimPal); EvoScene_DoMonAnimAndCry(sEvoStructPtr->postEvoSpriteId, gTasks[taskId].tPostEvoSpecies); - memcpy(&gPlttBufferUnfaded[0x20], sEvoStructPtr->savedPalette, sizeof(sEvoStructPtr->savedPalette)); + memcpy(&gPlttBufferUnfaded[BG_PLTT_ID(2)], sEvoStructPtr->savedPalette, sizeof(sEvoStructPtr->savedPalette)); gTasks[taskId].tState++; } break; diff --git a/src/field_effect.c b/src/field_effect.c index 7cae89d22f..d51c6ab88a 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -900,7 +900,8 @@ u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buf return CreateSprite(&spriteTemplate, x, y, subpriority); } -void LoadTrainerGfx_TrainerCard(u8 gender, u16 palOffset, u8 *dest) +// Unused +static void LoadTrainerGfx_TrainerCard(u8 gender, u16 palOffset, u8 *dest) { LZDecompressVram(gTrainerFrontPicTable[gender].data, dest); LoadCompressedPalette(gTrainerFrontPicPaletteTable[gender].data, palOffset, PLTT_SIZE_4BPP); @@ -1190,14 +1191,14 @@ static void PokeballGlowEffect_Flash1(struct Sprite *sprite) sprite->data[3]++; } phase = (sprite->sCounter + 3) & 3; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x108, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents(OBJ_PLTT_ID(IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW)) + 8, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); phase = (sprite->sCounter + 2) & 3; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x106, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents(OBJ_PLTT_ID(IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW)) + 6, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); phase = (sprite->sCounter + 1) & 3; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x102, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents(OBJ_PLTT_ID(IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW)) + 2, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); phase = sprite->sCounter; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x105, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x103, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents(OBJ_PLTT_ID(IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW)) + 5, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents(OBJ_PLTT_ID(IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW)) + 3, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); if (sprite->data[3] > 2) { sprite->sState++; @@ -1221,19 +1222,17 @@ static void PokeballGlowEffect_Flash2(struct Sprite *sprite) } } phase = sprite->sCounter; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x108, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x106, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x102, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x105, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW) << 4) + 0x103, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents(OBJ_PLTT_ID(IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW)) + 8, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents(OBJ_PLTT_ID(IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW)) + 6, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents(OBJ_PLTT_ID(IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW)) + 2, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents(OBJ_PLTT_ID(IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW)) + 5, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); + MultiplyInvertedPaletteRGBComponents(OBJ_PLTT_ID(IndexOfSpritePaletteTag(FLDEFF_PAL_TAG_POKEBALL_GLOW)) + 3, sPokeballGlowReds[phase], sPokeballGlowGreens[phase], sPokeballGlowBlues[phase]); } static void PokeballGlowEffect_WaitAfterFlash(struct Sprite *sprite) { if ((--sprite->sTimer) == 0) - { sprite->sState++; - } } static void PokeballGlowEffect_Dummy(struct Sprite *sprite) diff --git a/src/field_special_scene.c b/src/field_special_scene.c index 7c98703c6b..a2b3d6366f 100644 --- a/src/field_special_scene.c +++ b/src/field_special_scene.c @@ -264,7 +264,7 @@ void ExecuteTruckSequence(void) MapGridSetMetatileIdAt(4 + MAP_OFFSET, 3 + MAP_OFFSET, METATILE_InsideOfTruck_DoorClosedFloor_Bottom); DrawWholeMapView(); LockPlayerFieldControls(); - CpuFastFill(0, gPlttBufferFaded, 0x400); + CpuFastFill(0, gPlttBufferFaded, PLTT_SIZE); CreateTask(Task_HandleTruckSequence, 0xA); } diff --git a/src/field_weather.c b/src/field_weather.c index 92863dee5f..73aef3746d 100644 --- a/src/field_weather.c +++ b/src/field_weather.c @@ -156,7 +156,7 @@ void StartWeather(void) if (!FuncIsActiveTask(Task_WeatherMain)) { u8 index = AllocSpritePalette(PALTAG_WEATHER); - CpuCopy32(gFogPalette, &gPlttBufferUnfaded[0x100 + index * 16], 32); + CpuCopy32(gFogPalette, &gPlttBufferUnfaded[OBJ_PLTT_ID(index)], PLTT_SIZE_4BPP); BuildColorMaps(); gWeatherPtr->contrastColorMapSpritePalIndex = index; gWeatherPtr->weatherPicSpritePalIndex = AllocSpritePalette(PALTAG_WEATHER_2); @@ -471,7 +471,7 @@ static void ApplyColorMap(u8 startPalIndex, u8 numPalettes, s8 colorMapIndex) if (colorMapIndex > 0) { colorMapIndex--; - palOffset = startPalIndex * 16; + palOffset = PLTT_ID(startPalIndex); numPalettes += startPalIndex; curPalIndex = startPalIndex; @@ -481,7 +481,7 @@ static void ApplyColorMap(u8 startPalIndex, u8 numPalettes, s8 colorMapIndex) if (sPaletteColorMapTypes[curPalIndex] == COLOR_MAP_NONE) { // No palette change. - CpuFastCopy(gPlttBufferUnfaded + palOffset, gPlttBufferFaded + palOffset, 16 * sizeof(u16)); + CpuFastCopy(&gPlttBufferUnfaded[palOffset], &gPlttBufferFaded[palOffset], PLTT_SIZE_4BPP); palOffset += 16; } else @@ -511,7 +511,7 @@ static void ApplyColorMap(u8 startPalIndex, u8 numPalettes, s8 colorMapIndex) { // A negative gammIndex value means that the blending will come from the special Drought weather's palette tables. colorMapIndex = -colorMapIndex - 1; - palOffset = startPalIndex * 16; + palOffset = PLTT_ID(startPalIndex); numPalettes += startPalIndex; curPalIndex = startPalIndex; @@ -520,7 +520,7 @@ static void ApplyColorMap(u8 startPalIndex, u8 numPalettes, s8 colorMapIndex) if (sPaletteColorMapTypes[curPalIndex] == COLOR_MAP_NONE) { // No palette change. - CpuFastCopy(gPlttBufferUnfaded + palOffset, gPlttBufferFaded + palOffset, 16 * sizeof(u16)); + CpuFastCopy(&gPlttBufferUnfaded[palOffset], &gPlttBufferFaded[palOffset], PLTT_SIZE_4BPP); palOffset += 16; } else @@ -538,7 +538,7 @@ static void ApplyColorMap(u8 startPalIndex, u8 numPalettes, s8 colorMapIndex) else { // No palette blending. - CpuFastCopy(gPlttBufferUnfaded + startPalIndex * 16, gPlttBufferFaded + startPalIndex * 16, numPalettes * 16 * sizeof(u16)); + CpuFastCopy(&gPlttBufferUnfaded[PLTT_ID(startPalIndex)], &gPlttBufferFaded[PLTT_ID(startPalIndex)], numPalettes * PLTT_SIZE_4BPP); } } @@ -552,7 +552,7 @@ static void ApplyColorMapWithBlend(u8 startPalIndex, u8 numPalettes, s8 colorMap u8 gBlend = color.g; u8 bBlend = color.b; - palOffset = BG_PLTT_ID(startPalIndex); + palOffset = PLTT_ID(startPalIndex); numPalettes += startPalIndex; colorMapIndex--; curPalIndex = startPalIndex; @@ -666,8 +666,8 @@ static void ApplyFogBlend(u8 blendCoeff, u16 blendColor) { if (LightenSpritePaletteInFog(curPalIndex)) { - u16 palEnd = (curPalIndex + 1) * 16; - u16 palOffset = curPalIndex * 16; + u16 palEnd = PLTT_ID(curPalIndex + 1); + u16 palOffset = PLTT_ID(curPalIndex); while (palOffset < palEnd) { @@ -786,7 +786,7 @@ void FadeScreen(u8 mode, s8 delay) if (fadeOut) { if (useWeatherPal) - CpuFastCopy(gPlttBufferFaded, gPlttBufferUnfaded, PLTT_BUFFER_SIZE * 2); + CpuFastCopy(gPlttBufferFaded, gPlttBufferUnfaded, PLTT_SIZE); BeginNormalPaletteFade(PALETTES_ALL, delay, 0, 16, fadeColor); gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_SCREEN_FADING_OUT; @@ -824,14 +824,14 @@ void UpdateSpritePaletteWithWeather(u8 spritePaletteIndex) { if (gWeatherPtr->currWeather == WEATHER_FOG_HORIZONTAL) MarkFogSpritePalToLighten(paletteIndex); - paletteIndex *= 16; + paletteIndex = PLTT_ID(paletteIndex); for (i = 0; i < 16; i++) gPlttBufferFaded[paletteIndex + i] = gWeatherPtr->fadeDestColor; } break; case WEATHER_PAL_STATE_SCREEN_FADING_OUT: paletteIndex = PLTT_ID(paletteIndex); - CpuFastCopy(gPlttBufferFaded + paletteIndex, gPlttBufferUnfaded + paletteIndex, PLTT_SIZE_4BPP); + CpuFastCopy(&gPlttBufferFaded[paletteIndex], &gPlttBufferUnfaded[paletteIndex], PLTT_SIZE_4BPP); BlendPalette(paletteIndex, 16, gPaletteFade.y, gPaletteFade.blendColor); break; // WEATHER_PAL_STATE_CHANGING_WEATHER diff --git a/src/fieldmap.c b/src/fieldmap.c index df4db47b53..bdacf7ab25 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -871,7 +871,7 @@ static void ApplyGlobalTintToPaletteSlot(u8 slot, u8 count) } -void LoadTilesetPalette(struct Tileset const *tileset, u16 destOffset, u16 size) +static void LoadTilesetPalette(struct Tileset const *tileset, u16 destOffset, u16 size) { u16 black = RGB_BLACK; diff --git a/src/fldeff_flash.c b/src/fldeff_flash.c index 87d0117410..5c7d23b5ac 100644 --- a/src/fldeff_flash.c +++ b/src/fldeff_flash.c @@ -270,7 +270,7 @@ static void Task_ExitCaveTransition4(u8 taskId) if (count < 8) { gTasks[taskId].data[2]++; - LoadPalette(&sCaveTransitionPalette_Exit[count], BG_PLTT_ID(14), PLTT_SIZEOF(8) - PLTT_SIZEOF(count)); + LoadPalette(&sCaveTransitionPalette_Exit[count], BG_PLTT_ID(14), sizeof(sCaveTransitionPalette_Exit) - PLTT_SIZEOF(count)); } else { diff --git a/src/fldeff_sweetscent.c b/src/fldeff_sweetscent.c index 7e93526094..dd979c77a8 100644 --- a/src/fldeff_sweetscent.c +++ b/src/fldeff_sweetscent.c @@ -52,8 +52,8 @@ static void StartSweetScentFieldEffect(void) u8 taskId; PlaySE(SE_M_SWEET_SCENT); - CpuFastSet(gPlttBufferUnfaded, gPaletteDecompressionBuffer, 0x100); - CpuFastSet(gPlttBufferFaded, gPlttBufferUnfaded, 0x100); + CpuFastCopy(gPlttBufferUnfaded, gPaletteDecompressionBuffer, PLTT_SIZE); + CpuFastCopy(gPlttBufferFaded, gPlttBufferUnfaded, PLTT_SIZE); BeginNormalPaletteFade(~(1 << (gSprites[GetPlayerAvatarSpriteId()].oam.paletteNum + 16)), 4, 0, 8, RGB_RED); taskId = CreateTask(TrySweetScentEncounter, 0); gTasks[taskId].data[0] = 0; @@ -91,7 +91,7 @@ static void FailSweetScentEncounter(u8 taskId) { if (!gPaletteFade.active) { - CpuFastSet(gPaletteDecompressionBuffer, gPlttBufferUnfaded, 0x100); + CpuFastCopy(gPaletteDecompressionBuffer, gPlttBufferUnfaded, PLTT_SIZE); SetWeatherPalStateIdle(); ScriptContext_SetupScript(EventScript_FailSweetScent); DestroyTask(taskId); diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index f4a4c96d71..2e79a1f6b6 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -740,7 +740,7 @@ static void Task_Hof_ExitOnKeyPressed(u8 taskId) static void Task_Hof_HandlePaletteOnExit(u8 taskId) { - CpuCopy16(gPlttBufferFaded, gPlttBufferUnfaded, 0x400); + CpuCopy16(gPlttBufferFaded, gPlttBufferUnfaded, PLTT_SIZE); BeginNormalPaletteFade(PALETTES_ALL, 8, 0, 0x10, RGB_BLACK); gTasks[taskId].func = Task_Hof_HandleExit; } @@ -1044,7 +1044,7 @@ static void Task_HofPC_HandlePaletteOnExit(u8 taskId) { struct HallofFameTeam *fameTeam; - CpuCopy16(gPlttBufferFaded, gPlttBufferUnfaded, 0x400); + CpuCopy16(gPlttBufferFaded, gPlttBufferUnfaded, PLTT_SIZE); fameTeam = (struct HallofFameTeam *)(gDecompressionBuffer); fameTeam->mon[0] = sDummyFameMon; ComputerScreenCloseEffect(0, 0, 0); @@ -1269,7 +1269,7 @@ static void ClearVramOamPltt_LoadHofPal(void) DmaFill16(3, 0, plttOffset, plttSize); ResetPaletteFade(); - LoadPalette(sHallOfFame_Pal, BG_PLTT_ID(0), PLTT_SIZE_4BPP); + LoadPalette(sHallOfFame_Pal, BG_PLTT_ID(0), sizeof(sHallOfFame_Pal)); } static void LoadHofGfx(void) diff --git a/src/intro.c b/src/intro.c index fd9c124670..ed50208e7d 100644 --- a/src/intro.c +++ b/src/intro.c @@ -1188,13 +1188,13 @@ static void Task_Scene1_Load(u8 taskId) LoadSpritePalettes(sSpritePalettes_Intro1); LoadCompressedSpriteSheet(sSpriteSheet_Sparkle); LoadSpritePalettes(sSpritePalette_Sparkle); - CpuCopy16(&gPlttBufferUnfaded[0x100], &gPlttBufferUnfaded[0x1F0], 0x20); - CpuCopy16(&gPlttBufferUnfaded[0x100], &gPlttBufferUnfaded[0x1E1], 0x1E); - CpuCopy16(&gPlttBufferUnfaded[0x100], &gPlttBufferUnfaded[0x1D2], 0x1C); - CpuCopy16(&gPlttBufferUnfaded[0x100], &gPlttBufferUnfaded[0x1C3], 0x1A); - CpuCopy16(&gPlttBufferUnfaded[0x100], &gPlttBufferUnfaded[0x1B4], 0x18); - CpuCopy16(&gPlttBufferUnfaded[0x100], &gPlttBufferUnfaded[0x1A5], 0x16); - CpuCopy16(&gPlttBufferUnfaded[0x100], &gPlttBufferUnfaded[0x196], 0x14); + CpuCopy16(&gPlttBufferUnfaded[OBJ_PLTT_ID(0)], &gPlttBufferUnfaded[OBJ_PLTT_ID(15) + 0], PLTT_SIZEOF(16 - 0)); + CpuCopy16(&gPlttBufferUnfaded[OBJ_PLTT_ID(0)], &gPlttBufferUnfaded[OBJ_PLTT_ID(14) + 1], PLTT_SIZEOF(16 - 1) + 1); // Copying an extra half color? + CpuCopy16(&gPlttBufferUnfaded[OBJ_PLTT_ID(0)], &gPlttBufferUnfaded[OBJ_PLTT_ID(13) + 2], PLTT_SIZEOF(16 - 2)); + CpuCopy16(&gPlttBufferUnfaded[OBJ_PLTT_ID(0)], &gPlttBufferUnfaded[OBJ_PLTT_ID(12) + 3], PLTT_SIZEOF(16 - 3)); + CpuCopy16(&gPlttBufferUnfaded[OBJ_PLTT_ID(0)], &gPlttBufferUnfaded[OBJ_PLTT_ID(11) + 4], PLTT_SIZEOF(16 - 4)); + CpuCopy16(&gPlttBufferUnfaded[OBJ_PLTT_ID(0)], &gPlttBufferUnfaded[OBJ_PLTT_ID(10) + 5], PLTT_SIZEOF(16 - 5)); + CpuCopy16(&gPlttBufferUnfaded[OBJ_PLTT_ID(0)], &gPlttBufferUnfaded[OBJ_PLTT_ID( 9) + 6], PLTT_SIZEOF(16 - 6)); CreateGameFreakLogoSprites(120, 80, 0); gTasks[taskId].sBigDropSpriteId = CreateWaterDrop(236, -14, 0x200, 1, 0x78, FALSE); gTasks[taskId].func = Task_Scene1_FadeIn; @@ -1884,7 +1884,7 @@ static void Task_Scene3_Groudon(u8 taskId) if (--tDelay == 0) { tDelay = 2; - CpuCopy16(&gIntro3Bg_Pal[tPalIdx], &gPlttBufferFaded[31], sizeof(u16)); + CpuCopy16(&gIntro3Bg_Pal[tPalIdx], &gPlttBufferFaded[BG_PLTT_ID(1) + 15], PLTT_SIZEOF(1)); tPalIdx += 2; if (tPalIdx == 0x1EC) tState++; @@ -1901,7 +1901,7 @@ static void Task_Scene3_Groudon(u8 taskId) if (--tDelay == 0) { tDelay = 2; - CpuCopy16(&gIntro3Bg_Pal[tPalIdx], &gPlttBufferFaded[31], sizeof(u16)); + CpuCopy16(&gIntro3Bg_Pal[tPalIdx], &gPlttBufferFaded[BG_PLTT_ID(1) + 15], PLTT_SIZEOF(1)); tPalIdx -= 2; if (tPalIdx == 0x1E0) { @@ -2143,7 +2143,7 @@ static void Task_Scene3_Kyogre(u8 taskId) if (--tDelay == 0) { tDelay = 4; - CpuCopy16(&gIntro3Bg_Pal[tPalIdx], &gPlttBufferFaded[47], sizeof(u16)); + CpuCopy16(&gIntro3Bg_Pal[tPalIdx], &gPlttBufferFaded[BG_PLTT_ID(2) + 15], PLTT_SIZEOF(1)); tPalIdx -= 2; if (tPalIdx == 0x1E0) tState++; @@ -2161,7 +2161,7 @@ static void Task_Scene3_Kyogre(u8 taskId) if (--tDelay == 0) { tDelay = 4; - CpuCopy16(&gIntro3Bg_Pal[tPalIdx], &gPlttBufferFaded[47], sizeof(u16)); + CpuCopy16(&gIntro3Bg_Pal[tPalIdx], &gPlttBufferFaded[BG_PLTT_ID(2) + 15], PLTT_SIZEOF(1)); tPalIdx += 2; if (tPalIdx == 0x1EE) { @@ -2492,7 +2492,7 @@ static void SpriteCB_Lightning(struct Sprite *sprite) sprite->sPalIdx = 0x1C2; sprite->sState++; case 1: - CpuCopy16(&gIntro3Bg_Pal[sprite->sPalIdx], &gPlttBufferFaded[93], 2); + CpuCopy16(&gIntro3Bg_Pal[sprite->sPalIdx], &gPlttBufferFaded[BG_PLTT_ID(5) + 13], PLTT_SIZEOF(1)); sprite->sPalIdx += 2; if (sprite->sPalIdx != 0x1CE) break; @@ -2503,7 +2503,7 @@ static void SpriteCB_Lightning(struct Sprite *sprite) if (--sprite->sDelay == 0) { sprite->sDelay = 4; - CpuCopy16(&gIntro3Bg_Pal[sprite->sPalIdx], &gPlttBufferFaded[93], 2); + CpuCopy16(&gIntro3Bg_Pal[sprite->sPalIdx], &gPlttBufferFaded[BG_PLTT_ID(5) + 13], PLTT_SIZEOF(1)); sprite->sPalIdx -= 2; if (sprite->sPalIdx == 0x1C0) DestroySprite(sprite); @@ -2606,7 +2606,7 @@ static void Task_RayquazaAttack(u8 taskId) case 0: if ((data[2] & 1) != 0) { - CpuCopy16(&gIntro3Bg_Pal[0x1A2 + data[1] * 2], &gPlttBufferFaded[94], 2); + CpuCopy16(&gIntro3Bg_Pal[0x1A2 + data[1] * 2], &gPlttBufferFaded[BG_PLTT_ID(5) + 14], PLTT_SIZEOF(1)); data[1]++; } if (data[1] == 6) @@ -2621,7 +2621,7 @@ static void Task_RayquazaAttack(u8 taskId) { if ((data[2] & 1) != 0) { - CpuCopy16(&gIntro3Bg_Pal[0x1A2 + data[1] * 2], &gPlttBufferFaded[88], 2); + CpuCopy16(&gIntro3Bg_Pal[0x1A2 + data[1] * 2], &gPlttBufferFaded[BG_PLTT_ID(5) + 8], PLTT_SIZEOF(1)); data[1]++; } if (data[1] == 6) @@ -2640,7 +2640,7 @@ static void Task_RayquazaAttack(u8 taskId) { if ((data[2] & 1) != 0) { - CpuCopy16(&gIntro3Bg_Pal[0x182 + data[1] * 2], &gPlttBufferFaded[92], 2); + CpuCopy16(&gIntro3Bg_Pal[0x182 + data[1] * 2], &gPlttBufferFaded[BG_PLTT_ID(5) + 12], PLTT_SIZEOF(1)); data[1]++; } if (data[1] == 6) @@ -3197,16 +3197,16 @@ static void SpriteCB_LogoLetter(struct Sprite *sprite) sprite->sColorDelay = 2; if (sprite->sTimer != 0) { - CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer], &gPlttBufferFaded[0x11F], 2); - CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer + 16], &gPlttBufferFaded[0x114], 2); - CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer + 32], &gPlttBufferFaded[0x11A], 2); + CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer], &gPlttBufferFaded[OBJ_PLTT_ID(1) + 15], PLTT_SIZEOF(1)); + CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer + 16], &gPlttBufferFaded[OBJ_PLTT_ID(1) + 4], PLTT_SIZEOF(1)); + CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer + 32], &gPlttBufferFaded[OBJ_PLTT_ID(1) + 10], PLTT_SIZEOF(1)); sprite->sTimer--; } else { - CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer], &gPlttBufferFaded[0x11F], 2); - CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer + 16], &gPlttBufferFaded[0x114], 2); - CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer + 32], &gPlttBufferFaded[0x11A], 2); + CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer], &gPlttBufferFaded[OBJ_PLTT_ID(1) + 15], PLTT_SIZEOF(1)); + CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer + 16], &gPlttBufferFaded[OBJ_PLTT_ID(1) + 4], PLTT_SIZEOF(1)); + CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer + 32], &gPlttBufferFaded[OBJ_PLTT_ID(1) + 10], PLTT_SIZEOF(1)); sprite->sState++; } } @@ -3226,9 +3226,9 @@ static void SpriteCB_LogoLetter(struct Sprite *sprite) sprite->sColorDelay = 2; if (sprite->sTimer <= COLOR_CHANGES) { - CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer], &gPlttBufferFaded[0x11F], 2); - CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer + 16], &gPlttBufferFaded[0x114], 2); - CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer + 32], &gPlttBufferFaded[0x11A], 2); + CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer], &gPlttBufferFaded[OBJ_PLTT_ID(1) + 15], PLTT_SIZEOF(1)); + CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer + 16], &gPlttBufferFaded[OBJ_PLTT_ID(1) + 4], PLTT_SIZEOF(1)); + CpuCopy16(&gIntroGameFreakTextFade_Pal[sprite->sTimer + 32], &gPlttBufferFaded[OBJ_PLTT_ID(1) + 10], PLTT_SIZEOF(1)); sprite->sTimer++; } else diff --git a/src/intro_credits_graphics.c b/src/intro_credits_graphics.c index 7593a296e8..05b5a3a050 100644 --- a/src/intro_credits_graphics.c +++ b/src/intro_credits_graphics.c @@ -998,13 +998,13 @@ void CycleSceneryPalette(u8 mode) break; if (gMain.vblankCounter1 & 4) { - x = gPlttBufferUnfaded[9]; - y = gPlttBufferUnfaded[10]; + x = gPlttBufferUnfaded[BG_PLTT_ID(0) + 9]; + y = gPlttBufferUnfaded[BG_PLTT_ID(0) + 10]; } else { - x = gPlttBufferUnfaded[10]; - y = gPlttBufferUnfaded[9]; + x = gPlttBufferUnfaded[BG_PLTT_ID(0) + 10]; + y = gPlttBufferUnfaded[BG_PLTT_ID(0) + 9]; } LoadPalette(&x, BG_PLTT_ID(0) + 9, sizeof(x)); LoadPalette(&y, BG_PLTT_ID(0) + 10, sizeof(y)); diff --git a/src/link.c b/src/link.c index 06bde1e38f..0894021b56 100644 --- a/src/link.c +++ b/src/link.c @@ -1650,7 +1650,7 @@ static void ErrorMsg_MoveCloserToPartner(void) DecompressAndLoadBgGfxUsingHeap(1, sWirelessLinkDisplayGfx, FALSE, 0, 0); CopyToBgTilemapBuffer(1, sWirelessLinkDisplayTilemap, 0, 0); CopyBgTilemapBufferToVram(1); - LoadPalette(sWirelessLinkDisplayPal, 0, 0x20); + LoadPalette(sWirelessLinkDisplayPal, BG_PLTT_ID(0), sizeof(sWirelessLinkDisplayPal)); FillWindowPixelBuffer(WIN_LINK_ERROR_TOP, PIXEL_FILL(0)); FillWindowPixelBuffer(WIN_LINK_ERROR_BOTTOM, PIXEL_FILL(0)); AddTextPrinterParameterized3(WIN_LINK_ERROR_TOP, FONT_SHORT_COPY_1, 2, 6, sTextColors, 0, gText_CommErrorEllipsis); diff --git a/src/list_menu.c b/src/list_menu.c index 546ec6f6cd..e24442ca02 100644 --- a/src/list_menu.c +++ b/src/list_menu.c @@ -316,7 +316,7 @@ static void ListMenuDummyTask(u8 taskId) } -s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 drawMode, u16 tileNum, u16 palNum) +s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 drawMode, u16 tileNum, u16 palOffset) { switch (sMysteryGiftLinkMenu.state) { @@ -326,9 +326,9 @@ s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const str switch (drawMode) { case 2: - LoadUserWindowBorderGfx(sMysteryGiftLinkMenu.windowId, tileNum, palNum); + LoadUserWindowBorderGfx(sMysteryGiftLinkMenu.windowId, tileNum, palOffset); case 1: - DrawTextBorderOuter(sMysteryGiftLinkMenu.windowId, tileNum, palNum / 16); + DrawTextBorderOuter(sMysteryGiftLinkMenu.windowId, tileNum, palOffset / 16); break; } gMultiuseListMenuTemplate = *listMenuTemplate; diff --git a/src/mail.c b/src/mail.c index a6f3bc0ffd..424a286f3f 100644 --- a/src/mail.c +++ b/src/mail.c @@ -551,9 +551,7 @@ static bool8 MailReadBuildGraphics(void) break; case 9: if (FreeTempTileDataBuffersIfPossible()) - { return FALSE; - } break; case 10: FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, DISPLAY_TILE_WIDTH, DISPLAY_TILE_HEIGHT); @@ -567,23 +565,20 @@ static bool8 MailReadBuildGraphics(void) break; case 12: LoadPalette(GetOverworldTextboxPalettePtr(), BG_PLTT_ID(15), PLTT_SIZE_4BPP); + gPlttBufferUnfaded[BG_PLTT_ID(15) + 10] = sMailGraphics[sMailRead->mailType].textColor; + gPlttBufferFaded[BG_PLTT_ID(15) + 10] = sMailGraphics[sMailRead->mailType].textColor; + gPlttBufferUnfaded[BG_PLTT_ID(15) + 11] = sMailGraphics[sMailRead->mailType].textShadow; + gPlttBufferFaded[BG_PLTT_ID(15) + 11] = sMailGraphics[sMailRead->mailType].textShadow; - gPlttBufferUnfaded[250] = sMailGraphics[sMailRead->mailType].textColor; - gPlttBufferFaded[250] = sMailGraphics[sMailRead->mailType].textColor; - gPlttBufferUnfaded[251] = sMailGraphics[sMailRead->mailType].textShadow; - gPlttBufferFaded[251] = sMailGraphics[sMailRead->mailType].textShadow; LoadPalette(sMailGraphics[sMailRead->mailType].palette, BG_PLTT_ID(0), PLTT_SIZE_4BPP); - - gPlttBufferUnfaded[10] = sBgColors[gSaveBlock2Ptr->playerGender][0]; - gPlttBufferFaded[10] = sBgColors[gSaveBlock2Ptr->playerGender][0]; - gPlttBufferUnfaded[11] = sBgColors[gSaveBlock2Ptr->playerGender][1]; - gPlttBufferFaded[11] = sBgColors[gSaveBlock2Ptr->playerGender][1]; + gPlttBufferUnfaded[BG_PLTT_ID(0) + 10] = sBgColors[gSaveBlock2Ptr->playerGender][0]; + gPlttBufferFaded[BG_PLTT_ID(0) + 10] = sBgColors[gSaveBlock2Ptr->playerGender][0]; + gPlttBufferUnfaded[BG_PLTT_ID(0) + 11] = sBgColors[gSaveBlock2Ptr->playerGender][1]; + gPlttBufferFaded[BG_PLTT_ID(0) + 11] = sBgColors[gSaveBlock2Ptr->playerGender][1]; break; case 13: if (sMailRead->hasText) - { BufferMailText(); - } break; case 14: if (sMailRead->hasText) diff --git a/src/main_menu.c b/src/main_menu.c index 6808a8f11a..ef4bbd636d 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -1086,8 +1086,8 @@ static void Task_HandleMainMenuAPressed(u8 taskId) case ACTION_INVALID: gTasks[taskId].tCurrItem = 0; gTasks[taskId].func = Task_DisplayMainMenuInvalidActionError; - gPlttBufferUnfaded[0xF1] = RGB_WHITE; - gPlttBufferFaded[0xF1] = RGB_WHITE; + gPlttBufferUnfaded[BG_PLTT_ID(15) + 1] = RGB_WHITE; + gPlttBufferFaded[BG_PLTT_ID(15) + 1] = RGB_WHITE; SetGpuReg(REG_OFFSET_BG2HOFS, 0); SetGpuReg(REG_OFFSET_BG2VOFS, 0); SetGpuReg(REG_OFFSET_BG1HOFS, 0); diff --git a/src/mirage_tower.c b/src/mirage_tower.c index 01b87393ae..f9806e7768 100644 --- a/src/mirage_tower.c +++ b/src/mirage_tower.c @@ -8,6 +8,7 @@ #include "gpu_regs.h" #include "menu.h" #include "random.h" +#include "palette.h" #include "palette_util.h" #include "script.h" #include "sound.h" @@ -163,7 +164,7 @@ static const struct SpriteTemplate sSpriteTemplate_FallingFossil = const struct PulseBlendSettings gMirageTowerPulseBlendSettings = { .blendColor = RGB(27, 25, 16), - .paletteOffset = 0x61, + .paletteOffset = BG_PLTT_ID(6) + 1, .numColors = 15, .delay = 5, .numFadeCycles = -1, diff --git a/src/naming_screen.c b/src/naming_screen.c index 58c9f0f369..6dd45aa7e1 100644 --- a/src/naming_screen.c +++ b/src/naming_screen.c @@ -978,10 +978,10 @@ static u16 GetButtonPalOffset(u8 button) { const u16 palOffsets[BUTTON_COUNT + 1] = { - [BUTTON_PAGE] = IndexOfSpritePaletteTag(PALTAG_PAGE_SWAP) * 16 + 0x10E, - [BUTTON_BACK] = IndexOfSpritePaletteTag(PALTAG_BACK_BUTTON) * 16 + 0x10E, - [BUTTON_OK] = IndexOfSpritePaletteTag(PALTAG_OK_BUTTON) * 16 + 0x10E, - [BUTTON_COUNT] = IndexOfSpritePaletteTag(PALTAG_OK_BUTTON) * 16 + 0x101, + [BUTTON_PAGE] = OBJ_PLTT_ID(IndexOfSpritePaletteTag(PALTAG_PAGE_SWAP)) + 14, + [BUTTON_BACK] = OBJ_PLTT_ID(IndexOfSpritePaletteTag(PALTAG_BACK_BUTTON)) + 14, + [BUTTON_OK] = OBJ_PLTT_ID(IndexOfSpritePaletteTag(PALTAG_OK_BUTTON)) + 14, + [BUTTON_COUNT] = OBJ_PLTT_ID(IndexOfSpritePaletteTag(PALTAG_OK_BUTTON)) + 1, }; return palOffsets[button]; @@ -1051,7 +1051,7 @@ static void SpriteCB_Cursor(struct Sprite *sprite) { s8 gb = sprite->sColor; s8 r = sprite->sColor >> 1; - u16 index = IndexOfSpritePaletteTag(PALTAG_CURSOR) * 16 + 0x0101; + u16 index = OBJ_PLTT_ID(IndexOfSpritePaletteTag(PALTAG_CURSOR)) + 1; MultiplyInvertedPaletteRGBComponents(index, r, gb, gb); } diff --git a/src/palette.c b/src/palette.c index 577257eff3..6ce47a4933 100644 --- a/src/palette.c +++ b/src/palette.c @@ -64,7 +64,7 @@ static EWRAM_DATA struct PaletteStruct sPaletteStructs[NUM_PALETTE_STRUCTS] = {0 EWRAM_DATA struct PaletteFadeControl gPaletteFade = {0}; static EWRAM_DATA u32 sFiller = 0; static EWRAM_DATA u32 sPlttBufferTransferPending = 0; -EWRAM_DATA u8 gPaletteDecompressionBuffer[PLTT_DECOMP_BUFFER_SIZE] = {0}; +EWRAM_DATA u8 gPaletteDecompressionBuffer[PLTT_SIZE] = {0}; static const struct PaletteStructTemplate sDummyPaletteStructTemplate = { .id = 0xFFFF, @@ -148,7 +148,7 @@ static void ReadPlttIntoBuffers(void) u16 i; u16 *pltt = (u16 *)PLTT; - for (i = 0; i < PLTT_SIZE / 2; i++) + for (i = 0; i < PLTT_BUFFER_SIZE; i++) { gPlttBufferUnfaded[i] = pltt[i]; gPlttBufferFaded[i] = pltt[i]; @@ -592,13 +592,13 @@ static u8 UpdateFastPaletteFade(void) if (gPaletteFade.objPaletteToggle) { - paletteOffsetStart = 256; - paletteOffsetEnd = 512; + paletteOffsetStart = OBJ_PLTT_OFFSET; + paletteOffsetEnd = PLTT_BUFFER_SIZE; } else { paletteOffsetStart = 0; - paletteOffsetEnd = 256; + paletteOffsetEnd = OBJ_PLTT_OFFSET; } switch (gPaletteFade_submode) diff --git a/src/party_menu.c b/src/party_menu.c index 61b694753c..02c742dc90 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -776,11 +776,11 @@ static bool8 AllocPartyMenuBgGfx(void) return FALSE; } -static void PartyPaletteBufferCopy(u8 offset) +static void PartyPaletteBufferCopy(u8 palNum) { - offset *= 16; - CpuCopy16(&gPlttBufferUnfaded[0x30], &gPlttBufferUnfaded[offset], 32); - CpuCopy16(&gPlttBufferUnfaded[0x30], &gPlttBufferFaded[offset], 32); + u8 offset = PLTT_ID(palNum); + CpuCopy16(&gPlttBufferUnfaded[BG_PLTT_ID(3)], &gPlttBufferUnfaded[offset], PLTT_SIZE_4BPP); + CpuCopy16(&gPlttBufferUnfaded[BG_PLTT_ID(3)], &gPlttBufferFaded[offset], PLTT_SIZE_4BPP); } static void FreePartyPointers(void) @@ -2195,16 +2195,16 @@ static void DrawEmptySlot(u8 windowId) BlitBitmapToPartyWindow(windowId, sSlotTilemap_WideEmpty, 18, 0, 0, 18, 3); } -#define LOAD_PARTY_BOX_PAL(paletteIds, paletteOffsets) \ -{ \ - LoadPalette(GetPartyMenuPalBufferPtr(paletteIds[0]), paletteOffsets[0] + palNum, PLTT_SIZEOF(1)); \ - LoadPalette(GetPartyMenuPalBufferPtr(paletteIds[1]), paletteOffsets[1] + palNum, PLTT_SIZEOF(1)); \ - LoadPalette(GetPartyMenuPalBufferPtr(paletteIds[2]), paletteOffsets[2] + palNum, PLTT_SIZEOF(1)); \ +#define LOAD_PARTY_BOX_PAL(paletteIds, paletteOffsets) \ +{ \ + LoadPalette(GetPartyMenuPalBufferPtr(paletteIds[0]), paletteOffsets[0] + palOffset, PLTT_SIZEOF(1)); \ + LoadPalette(GetPartyMenuPalBufferPtr(paletteIds[1]), paletteOffsets[1] + palOffset, PLTT_SIZEOF(1)); \ + LoadPalette(GetPartyMenuPalBufferPtr(paletteIds[2]), paletteOffsets[2] + palOffset, PLTT_SIZEOF(1)); \ } static void LoadPartyBoxPalette(struct PartyMenuBox *menuBox, u8 palFlags) { - u8 palNum = GetWindowAttribute(menuBox->windowId, WINDOW_PALETTE_NUM) * 16; + u8 palOffset = BG_PLTT_ID(GetWindowAttribute(menuBox->windowId, WINDOW_PALETTE_NUM)); if (palFlags & PARTY_PAL_NO_MON) { @@ -2332,7 +2332,7 @@ static void DisplayPartyPokemonGenderNidoranCheck(struct Pokemon *mon, struct Pa static void DisplayPartyPokemonGender(u8 gender, u16 species, u8 *nickname, struct PartyMenuBox *menuBox) { - u8 palNum = GetWindowAttribute(menuBox->windowId, WINDOW_PALETTE_NUM) * 16; + u8 palOffset = BG_PLTT_ID(GetWindowAttribute(menuBox->windowId, WINDOW_PALETTE_NUM)); if (species == SPECIES_NONE) return; @@ -2341,13 +2341,13 @@ static void DisplayPartyPokemonGender(u8 gender, u16 species, u8 *nickname, stru switch (gender) { case MON_MALE: - LoadPalette(GetPartyMenuPalBufferPtr(sGenderMalePalIds[0]), sGenderPalOffsets[0] + palNum, PLTT_SIZEOF(1)); - LoadPalette(GetPartyMenuPalBufferPtr(sGenderMalePalIds[1]), sGenderPalOffsets[1] + palNum, PLTT_SIZEOF(1)); + LoadPalette(GetPartyMenuPalBufferPtr(sGenderMalePalIds[0]), sGenderPalOffsets[0] + palOffset, PLTT_SIZEOF(1)); + LoadPalette(GetPartyMenuPalBufferPtr(sGenderMalePalIds[1]), sGenderPalOffsets[1] + palOffset, PLTT_SIZEOF(1)); DisplayPartyPokemonBarDetail(menuBox->windowId, gText_MaleSymbol, 2, &menuBox->infoRects->dimensions[8]); break; case MON_FEMALE: - LoadPalette(GetPartyMenuPalBufferPtr(sGenderFemalePalIds[0]), sGenderPalOffsets[0] + palNum, PLTT_SIZEOF(1)); - LoadPalette(GetPartyMenuPalBufferPtr(sGenderFemalePalIds[1]), sGenderPalOffsets[1] + palNum, PLTT_SIZEOF(1)); + LoadPalette(GetPartyMenuPalBufferPtr(sGenderFemalePalIds[0]), sGenderPalOffsets[0] + palOffset, PLTT_SIZEOF(1)); + LoadPalette(GetPartyMenuPalBufferPtr(sGenderFemalePalIds[1]), sGenderPalOffsets[1] + palOffset, PLTT_SIZEOF(1)); DisplayPartyPokemonBarDetail(menuBox->windowId, gText_FemaleSymbol, 2, &menuBox->infoRects->dimensions[8]); break; } @@ -2401,23 +2401,23 @@ static void DisplayPartyPokemonHPBarCheck(struct Pokemon *mon, struct PartyMenuB static void DisplayPartyPokemonHPBar(u16 hp, u16 maxhp, struct PartyMenuBox *menuBox) { - u8 palNum = GetWindowAttribute(menuBox->windowId, WINDOW_PALETTE_NUM) * 16; + u8 palOffset = BG_PLTT_ID(GetWindowAttribute(menuBox->windowId, WINDOW_PALETTE_NUM)); u8 hpFraction; switch (GetHPBarLevel(hp, maxhp)) { case HP_BAR_GREEN: case HP_BAR_FULL: - LoadPalette(GetPartyMenuPalBufferPtr(sHPBarGreenPalIds[0]), sHPBarPalOffsets[0] + palNum, PLTT_SIZEOF(1)); - LoadPalette(GetPartyMenuPalBufferPtr(sHPBarGreenPalIds[1]), sHPBarPalOffsets[1] + palNum, PLTT_SIZEOF(1)); + LoadPalette(GetPartyMenuPalBufferPtr(sHPBarGreenPalIds[0]), sHPBarPalOffsets[0] + palOffset, PLTT_SIZEOF(1)); + LoadPalette(GetPartyMenuPalBufferPtr(sHPBarGreenPalIds[1]), sHPBarPalOffsets[1] + palOffset, PLTT_SIZEOF(1)); break; case HP_BAR_YELLOW: - LoadPalette(GetPartyMenuPalBufferPtr(sHPBarYellowPalIds[0]), sHPBarPalOffsets[0] + palNum, PLTT_SIZEOF(1)); - LoadPalette(GetPartyMenuPalBufferPtr(sHPBarYellowPalIds[1]), sHPBarPalOffsets[1] + palNum, PLTT_SIZEOF(1)); + LoadPalette(GetPartyMenuPalBufferPtr(sHPBarYellowPalIds[0]), sHPBarPalOffsets[0] + palOffset, PLTT_SIZEOF(1)); + LoadPalette(GetPartyMenuPalBufferPtr(sHPBarYellowPalIds[1]), sHPBarPalOffsets[1] + palOffset, PLTT_SIZEOF(1)); break; default: - LoadPalette(GetPartyMenuPalBufferPtr(sHPBarRedPalIds[0]), sHPBarPalOffsets[0] + palNum, PLTT_SIZEOF(1)); - LoadPalette(GetPartyMenuPalBufferPtr(sHPBarRedPalIds[1]), sHPBarPalOffsets[1] + palNum, PLTT_SIZEOF(1)); + LoadPalette(GetPartyMenuPalBufferPtr(sHPBarRedPalIds[0]), sHPBarPalOffsets[0] + palOffset, PLTT_SIZEOF(1)); + LoadPalette(GetPartyMenuPalBufferPtr(sHPBarRedPalIds[1]), sHPBarPalOffsets[1] + palOffset, PLTT_SIZEOF(1)); break; } diff --git a/src/pokedex.c b/src/pokedex.c index 88558d6f2c..5a2667759e 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -3264,7 +3264,7 @@ static void Task_LoadInfoScreen(u8 taskId) case 4: PrintMonInfo(sPokedexListItem->dexNum, sPokedexView->dexMode == DEX_MODE_HOENN ? FALSE : TRUE, sPokedexListItem->owned, 0); if (!sPokedexListItem->owned) - LoadPalette(gPlttBufferUnfaded + 1, BG_PLTT_ID(3) + 1, PLTT_SIZEOF(16 - 1)); + LoadPalette(&gPlttBufferUnfaded[BG_PLTT_ID(0) + 1], BG_PLTT_ID(3) + 1, PLTT_SIZEOF(16 - 1)); CopyWindowToVram(WIN_INFO, COPYWIN_FULL); CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(2); diff --git a/src/pokedex_area_region_map.c b/src/pokedex_area_region_map.c index ff32f8eef1..da50f8c688 100644 --- a/src/pokedex_area_region_map.c +++ b/src/pokedex_area_region_map.c @@ -41,7 +41,7 @@ void LoadPokedexAreaMapGfx(const struct PokedexAreaMapTemplate *template) ChangeBgX(template->bg, 0, BG_COORD_SET); ChangeBgY(template->bg, 0, BG_COORD_SET); SetBgAttribute(template->bg, BG_ATTR_PALETTEMODE, 1); - CpuCopy32(sPokedexAreaMap_Pal, &gPlttBufferUnfaded[0x70], sizeof(sPokedexAreaMap_Pal)); + CpuCopy32(sPokedexAreaMap_Pal, &gPlttBufferUnfaded[BG_PLTT_ID(7)], sizeof(sPokedexAreaMap_Pal)); *sPokedexAreaMapBgNum = template->bg; } diff --git a/src/pokedex_area_screen.c b/src/pokedex_area_screen.c index 01cbacb447..f9181a985b 100755 --- a/src/pokedex_area_screen.c +++ b/src/pokedex_area_screen.c @@ -224,7 +224,7 @@ static bool8 DrawAreaGlow(void) case 3: if (!FreeTempTileDataBuffersIfPossible()) { - CpuCopy32(sAreaGlow_Pal, &gPlttBufferUnfaded[GLOW_PALETTE * 16], sizeof(sAreaGlow_Pal)); + CpuCopy32(sAreaGlow_Pal, &gPlttBufferUnfaded[BG_PLTT_ID(GLOW_PALETTE)], sizeof(sAreaGlow_Pal)); sPokedexAreaScreen->drawAreaGlowState++; } return TRUE; diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c index 237f728381..8e37018cba 100644 --- a/src/pokemon_icon.c +++ b/src/pokemon_icon.c @@ -1199,16 +1199,12 @@ const u8 *GetMonIconTiles(u16 species, bool32 handleDeoxys) void TryLoadAllMonIconPalettesAtOffset(u16 offset) { s32 i; - const struct SpritePalette* monIconPalettePtr; - - if (offset <= BG_PLTT_ID(10)) + if (offset <= BG_PLTT_ID(16 - ARRAY_COUNT(gMonIconPaletteTable))) { - monIconPalettePtr = gMonIconPaletteTable; - for (i = ARRAY_COUNT(gMonIconPaletteTable) - 1; i >= 0; i--) + for (i = 0; i < (int)ARRAY_COUNT(gMonIconPaletteTable); i++) { - LoadPalette(monIconPalettePtr->data, offset, PLTT_SIZE_4BPP); - offset += 0x10; - monIconPalettePtr++; + LoadPalette(gMonIconPaletteTable[i].data, offset, PLTT_SIZE_4BPP); + offset += 16; } } } diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 8649e3ce79..99b0dae0e7 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -5490,7 +5490,7 @@ static void InitBoxTitle(u8 boxId) tagIndex = IndexOfSpritePaletteTag(PALTAG_BOX_TITLE); sStorage->boxTitlePalOffset = OBJ_PLTT_ID(tagIndex) + 14; - sStorage->wallpaperPalBits |= 0x10000 << tagIndex; + sStorage->wallpaperPalBits |= (1 << 16) << tagIndex; // The below seems intended to have separately tracked // the incoming wallpaper title's palette, but as they now @@ -5498,7 +5498,7 @@ static void InitBoxTitle(u8 boxId) // this is redundant along with the use of boxTitleAltPalOffset tagIndex = IndexOfSpritePaletteTag(PALTAG_BOX_TITLE); sStorage->boxTitleAltPalOffset = OBJ_PLTT_ID(tagIndex) + 14; - sStorage->wallpaperPalBits |= 0x10000 << tagIndex; + sStorage->wallpaperPalBits |= (1 << 16) << tagIndex; StringCopyPadded(sStorage->boxTitleText, GetBoxNamePtr(boxId), 0, BOX_NAME_LENGTH); DrawTextWindowAndBufferTiles(sStorage->boxTitleText, sStorage->boxTitleTiles, 0, 0, 2); @@ -5616,9 +5616,9 @@ static void CycleBoxTitleColor(void) u8 boxId = StorageGetCurrentBox(); u8 wallpaperId = GetBoxWallpaper(boxId); if (sStorage->boxTitleCycleId == 0) - CpuCopy16(sBoxTitleColors[wallpaperId], gPlttBufferUnfaded + sStorage->boxTitlePalOffset, 4); + CpuCopy16(sBoxTitleColors[wallpaperId], &gPlttBufferUnfaded[sStorage->boxTitlePalOffset], PLTT_SIZEOF(2)); else - CpuCopy16(sBoxTitleColors[wallpaperId], gPlttBufferUnfaded + sStorage->boxTitleAltPalOffset, 4); + CpuCopy16(sBoxTitleColors[wallpaperId], &gPlttBufferUnfaded[sStorage->boxTitleAltPalOffset], PLTT_SIZEOF(2)); } static s16 GetBoxTitleBaseX(const u8 *string) @@ -8746,8 +8746,7 @@ static void CreateItemIconSprites(void) LoadCompressedSpriteSheet(&spriteSheet); sStorage->itemIcons[i].tiles = GetSpriteTileStartByTag(spriteSheet.tag) * TILE_SIZE_4BPP + (void *)(OBJ_VRAM0); sStorage->itemIcons[i].palIndex = AllocSpritePalette(PALTAG_ITEM_ICON_0 + i); - sStorage->itemIcons[i].palIndex *= 16; - sStorage->itemIcons[i].palIndex += 0x100; + sStorage->itemIcons[i].palIndex = OBJ_PLTT_ID(sStorage->itemIcons[i].palIndex); spriteTemplate.tileTag = GFXTAG_ITEM_ICON_0 + i; spriteTemplate.paletteTag = PALTAG_ITEM_ICON_0 + i; spriteId = CreateSprite(&spriteTemplate, 0, 0, 11); diff --git a/src/pokenav_conditions_search_results.c b/src/pokenav_conditions_search_results.c index d3764cb802..1817398020 100644 --- a/src/pokenav_conditions_search_results.c +++ b/src/pokenav_conditions_search_results.c @@ -432,7 +432,7 @@ static u32 LoopedTask_OpenConditionSearchResults(s32 state) SetBgTilemapBuffer(1, gfx->buff); CopyToBgTilemapBuffer(1, sConditionSearchResultTilemap, 0, 0); CopyBgTilemapBufferToVram(1); - CopyPaletteIntoBufferUnfaded(sConditionSearchResultFramePal, BG_PLTT_ID(1), PLTT_SIZE_4BPP); + CopyPaletteIntoBufferUnfaded(sConditionSearchResultFramePal, BG_PLTT_ID(1), sizeof(sConditionSearchResultFramePal)); CopyBgTilemapBufferToVram(1); return LT_INC_AND_PAUSE; case 1: @@ -444,7 +444,7 @@ static u32 LoopedTask_OpenConditionSearchResults(s32 state) case 2: if (FreeTempTileDataBuffersIfPossible()) return LT_PAUSE; - CopyPaletteIntoBufferUnfaded(sListBg_Pal, BG_PLTT_ID(2), PLTT_SIZE_4BPP); + CopyPaletteIntoBufferUnfaded(sListBg_Pal, BG_PLTT_ID(2), sizeof(sListBg_Pal)); CreateSearchResultsList(); return LT_INC_AND_PAUSE; case 3: diff --git a/src/pokenav_main_menu.c b/src/pokenav_main_menu.c index bfc5ba0cb4..761f572d6b 100644 --- a/src/pokenav_main_menu.c +++ b/src/pokenav_main_menu.c @@ -443,7 +443,7 @@ static u32 LoopedTask_SlideMenuHeaderDown(s32 state) void CopyPaletteIntoBufferUnfaded(const u16 *palette, u32 bufferOffset, u32 size) { - CpuCopy16(palette, gPlttBufferUnfaded + bufferOffset, size); + CpuCopy16(palette, &gPlttBufferUnfaded[bufferOffset], size); } void Pokenav_AllocAndLoadPalettes(const struct SpritePalette *palettes) @@ -468,7 +468,7 @@ void Pokenav_AllocAndLoadPalettes(const struct SpritePalette *palettes) void PokenavFillPalette(u32 palIndex, u16 fillValue) { - CpuFill16(fillValue, gPlttBufferFaded + 0x100 + (palIndex * 16), 16 * sizeof(u16)); + CpuFill16(fillValue, &gPlttBufferFaded[OBJ_PLTT_ID(palIndex)], PLTT_SIZE_4BPP); } void PokenavCopyPalette(const u16 *src, const u16 *dest, int size, int a3, int a4, u16 *palette) diff --git a/src/pokenav_match_call_gfx.c b/src/pokenav_match_call_gfx.c index 1747d3ef0b..4271e2ff23 100755 --- a/src/pokenav_match_call_gfx.c +++ b/src/pokenav_match_call_gfx.c @@ -333,7 +333,7 @@ static u32 LoopedTask_OpenMatchCall(s32 state) SetBgTilemapBuffer(2, gfx->bgTilemapBuffer2); CopyToBgTilemapBuffer(2, sMatchCallUI_Tilemap, 0, 0); CopyBgTilemapBufferToVram(2); - CopyPaletteIntoBufferUnfaded(sMatchCallUI_Pal, BG_PLTT_ID(2), PLTT_SIZE_4BPP); + CopyPaletteIntoBufferUnfaded(sMatchCallUI_Pal, BG_PLTT_ID(2), sizeof(sMatchCallUI_Pal)); CopyBgTilemapBufferToVram(2); return LT_INC_AND_PAUSE; case 1: @@ -343,7 +343,7 @@ static u32 LoopedTask_OpenMatchCall(s32 state) BgDmaFill(1, 0, 0, 1); SetBgTilemapBuffer(1, gfx->bgTilemapBuffer1); FillBgTilemapBufferRect_Palette0(1, 0x1000, 0, 0, 32, 20); - CopyPaletteIntoBufferUnfaded(sCallWindow_Pal, BG_PLTT_ID(1), PLTT_SIZE_4BPP); + CopyPaletteIntoBufferUnfaded(sCallWindow_Pal, BG_PLTT_ID(1), sizeof(sCallWindow_Pal)); CopyBgTilemapBufferToVram(1); return LT_INC_AND_PAUSE; case 2: @@ -352,7 +352,7 @@ static u32 LoopedTask_OpenMatchCall(s32 state) LoadCallWindowAndFade(gfx); DecompressAndCopyTileDataToVram(3, sPokeball_Gfx, 0, 0, 0); - CopyPaletteIntoBufferUnfaded(sListWindow_Pal, BG_PLTT_ID(3), PLTT_SIZE_4BPP); + CopyPaletteIntoBufferUnfaded(sListWindow_Pal, BG_PLTT_ID(3), sizeof(sListWindow_Pal)); CopyPaletteIntoBufferUnfaded(sPokeball_Pal, BG_PLTT_ID(5), PLTT_SIZE_4BPP); return LT_INC_AND_PAUSE; case 3: @@ -913,9 +913,9 @@ static void Task_FlashPokeballIcons(u8 taskId) tSinIdx += 4; tSinIdx &= 0x7F; tSinVal = gSineTable[tSinIdx] >> 4; - PokenavCopyPalette(sPokeball_Pal, &sPokeball_Pal[0x10], 0x10, 0x10, tSinVal, &gPlttBufferUnfaded[0x50]); + PokenavCopyPalette(sPokeball_Pal, &sPokeball_Pal[0x10], 0x10, 0x10, tSinVal, &gPlttBufferUnfaded[BG_PLTT_ID(5)]); if (!gPaletteFade.active) - CpuCopy32(&gPlttBufferUnfaded[0x50], &gPlttBufferFaded[0x50], 0x20); + CpuCopy32(&gPlttBufferUnfaded[BG_PLTT_ID(5)], &gPlttBufferFaded[BG_PLTT_ID(5)], PLTT_SIZE_4BPP); } } diff --git a/src/pokenav_menu_handler_gfx.c b/src/pokenav_menu_handler_gfx.c index 3367442362..ede88affdb 100644 --- a/src/pokenav_menu_handler_gfx.c +++ b/src/pokenav_menu_handler_gfx.c @@ -470,14 +470,14 @@ static u32 LoopedTask_OpenMenu(s32 state) return LT_PAUSE; DecompressAndCopyTileDataToVram(2, sPokenavDeviceBgTiles, 0, 0, 0); DecompressAndCopyTileDataToVram(2, sPokenavDeviceBgTilemap, 0, 0, 1); - CopyPaletteIntoBufferUnfaded(sPokenavDeviceBgPal, BG_PLTT_ID(2), PLTT_SIZE_4BPP); + CopyPaletteIntoBufferUnfaded(sPokenavDeviceBgPal, BG_PLTT_ID(2), sizeof(sPokenavDeviceBgPal)); return LT_INC_AND_PAUSE; case 2: if (FreeTempTileDataBuffersIfPossible()) return LT_PAUSE; DecompressAndCopyTileDataToVram(3, sPokenavBgDotsTiles, 0, 0, 0); DecompressAndCopyTileDataToVram(3, sPokenavBgDotsTilemap, 0, 0, 1); - CopyPaletteIntoBufferUnfaded(sPokenavBgDotsPal, BG_PLTT_ID(3), PLTT_SIZE_4BPP); + CopyPaletteIntoBufferUnfaded(sPokenavBgDotsPal, BG_PLTT_ID(3), sizeof(sPokenavBgDotsPal)); if (GetPokenavMenuType() == POKENAV_MENU_TYPE_CONDITION || GetPokenavMenuType() == POKENAV_MENU_TYPE_CONDITION_SEARCH) ChangeBgDotsColorToPurple(); return LT_INC_AND_PAUSE; diff --git a/src/pokenav_region_map.c b/src/pokenav_region_map.c index 50f01345c8..e589e28187 100755 --- a/src/pokenav_region_map.c +++ b/src/pokenav_region_map.c @@ -515,7 +515,7 @@ static void LoadPokenavRegionMapGfx(struct Pokenav_RegionMapGfx *state) FillWindowPixelBuffer(state->infoWindowId, PIXEL_FILL(1)); PutWindowTilemap(state->infoWindowId); CopyWindowToVram(state->infoWindowId, COPYWIN_FULL); - CopyPaletteIntoBufferUnfaded(sMapSecInfoWindow_Pal, BG_PLTT_ID(1), PLTT_SIZE_4BPP); + CopyPaletteIntoBufferUnfaded(sMapSecInfoWindow_Pal, BG_PLTT_ID(1), sizeof(sMapSecInfoWindow_Pal)); CopyPaletteIntoBufferUnfaded(gRegionMapCityZoomTiles_Pal, BG_PLTT_ID(3), PLTT_SIZE_4BPP); if (!IsRegionMapZoomed()) ChangeBgY(1, -0x6000, BG_COORD_SET); diff --git a/src/pokenav_ribbons_list.c b/src/pokenav_ribbons_list.c index c1ca7f9d92..344b44f009 100644 --- a/src/pokenav_ribbons_list.c +++ b/src/pokenav_ribbons_list.c @@ -432,7 +432,7 @@ static u32 LoopedTask_OpenRibbonsMonList(s32 state) DecompressAndCopyTileDataToVram(1, sMonRibbonListFrameTiles, 0, 0, 0); SetBgTilemapBuffer(1, menu->buff); CopyToBgTilemapBuffer(1, sMonRibbonListFrameTilemap, 0, 0); - CopyPaletteIntoBufferUnfaded(sMonRibbonListFramePal, BG_PLTT_ID(1), PLTT_SIZE_4BPP); + CopyPaletteIntoBufferUnfaded(sMonRibbonListFramePal, BG_PLTT_ID(1), sizeof(sMonRibbonListFramePal)); CopyBgTilemapBufferToVram(1); return LT_INC_AND_PAUSE; case 1: @@ -447,7 +447,7 @@ static u32 LoopedTask_OpenRibbonsMonList(s32 state) case 2: if (FreeTempTileDataBuffersIfPossible()) return LT_PAUSE; - CopyPaletteIntoBufferUnfaded(sMonRibbonListUi_Pal, BG_PLTT_ID(2), PLTT_SIZE_4BPP); + CopyPaletteIntoBufferUnfaded(sMonRibbonListUi_Pal, BG_PLTT_ID(2), sizeof(sMonRibbonListUi_Pal)); CreateRibbonMonsList(); return LT_INC_AND_PAUSE; case 3: diff --git a/src/pokenav_ribbons_summary.c b/src/pokenav_ribbons_summary.c index 4861b8e0ea..e77f839a80 100644 --- a/src/pokenav_ribbons_summary.c +++ b/src/pokenav_ribbons_summary.c @@ -584,7 +584,7 @@ static u32 LoopedTask_OpenRibbonsSummaryMenu(s32 state) SetBgTilemapBuffer(1, menu->tilemapBuffers[1]); FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 32, 20); CopyPaletteIntoBufferUnfaded(sRibbonIcons1_Pal, BG_PLTT_ID(2), 5 * PLTT_SIZE_4BPP); - CopyPaletteIntoBufferUnfaded(sMonInfo_Pal, BG_PLTT_ID(10), PLTT_SIZE_4BPP); + CopyPaletteIntoBufferUnfaded(sMonInfo_Pal, BG_PLTT_ID(10), sizeof(sMonInfo_Pal)); CopyBgTilemapBufferToVram(1); return LT_INC_AND_PAUSE; } diff --git a/src/region_map.c b/src/region_map.c index ebe3afb8e9..f6123359be 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -621,7 +621,7 @@ bool8 LoadRegionMapGfx(void) void BlendRegionMap(u16 color, u32 coeff) { BlendPalettes(0x380, coeff, color); - CpuCopy16(gPlttBufferFaded + 0x70, gPlttBufferUnfaded + 0x70, 0x60); + CpuCopy16(&gPlttBufferFaded[BG_PLTT_ID(7)], &gPlttBufferUnfaded[BG_PLTT_ID(7)], 3 * PLTT_SIZE_4BPP); } void FreeRegionMapIconResources(void) diff --git a/src/roulette.c b/src/roulette.c index 06561f7988..d311ad0940 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -860,7 +860,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + { { // F_FLASH_COLOR_O_WYNAUT .color = FLASHUTIL_USE_EXISTING_COLOR, - .paletteOffset = 0x5, + .paletteOffset = BG_PLTT_ID(0) + 5, .numColors = 1, .delay = 1, .unk6 = -1, @@ -870,7 +870,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + }, { // F_FLASH_COLOR_G_AZURILL .color = FLASHUTIL_USE_EXISTING_COLOR, - .paletteOffset = 0xA, + .paletteOffset = BG_PLTT_ID(0) + 10, .numColors = 1, .delay = 1, .unk6 = -1, @@ -880,7 +880,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + }, { // F_FLASH_COLOR_P_SKITTY .color = FLASHUTIL_USE_EXISTING_COLOR, - .paletteOffset = 0x15, + .paletteOffset = BG_PLTT_ID(1) + 5, .numColors = 1, .delay = 1, .unk6 = -1, @@ -890,7 +890,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + }, { // F_FLASH_COLOR_O_MAKUHITA .color = FLASHUTIL_USE_EXISTING_COLOR, - .paletteOffset = 0x55, + .paletteOffset = BG_PLTT_ID(5) + 5, .numColors = 1, .delay = 1, .unk6 = -1, @@ -900,7 +900,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + }, { // F_FLASH_COLOR_G_WYNAUT .color = FLASHUTIL_USE_EXISTING_COLOR, - .paletteOffset = 0x5A, + .paletteOffset = BG_PLTT_ID(5) + 10, .numColors = 1, .delay = 1, .unk6 = -1, @@ -910,7 +910,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + }, { // F_FLASH_COLOR_P_AZURILL .color = FLASHUTIL_USE_EXISTING_COLOR, - .paletteOffset = 0x65, + .paletteOffset = BG_PLTT_ID(6) + 5, .numColors = 1, .delay = 1, .unk6 = -1, @@ -920,7 +920,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + }, { // F_FLASH_COLOR_O_SKITTY .color = FLASHUTIL_USE_EXISTING_COLOR, - .paletteOffset = 0x75, + .paletteOffset = BG_PLTT_ID(7) + 5, .numColors = 1, .delay = 1, .unk6 = -1, @@ -930,7 +930,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + }, { // F_FLASH_COLOR_G_MAKUHITA .color = FLASHUTIL_USE_EXISTING_COLOR, - .paletteOffset = 0x7A, + .paletteOffset = BG_PLTT_ID(7) + 10, .numColors = 1, .delay = 1, .unk6 = -1, @@ -940,7 +940,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + }, { // F_FLASH_COLOR_P_WYNAUT .color = FLASHUTIL_USE_EXISTING_COLOR, - .paletteOffset = 0x85, + .paletteOffset = BG_PLTT_ID(8) + 5, .numColors = 1, .delay = 1, .unk6 = -1, @@ -950,7 +950,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + }, { // F_FLASH_COLOR_O_AZURILL .color = FLASHUTIL_USE_EXISTING_COLOR, - .paletteOffset = 0x95, + .paletteOffset = BG_PLTT_ID(9) + 5, .numColors = 1, .delay = 1, .unk6 = -1, @@ -960,7 +960,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + }, { // F_FLASH_COLOR_G_SKITTY .color = FLASHUTIL_USE_EXISTING_COLOR, - .paletteOffset = 0x9A, + .paletteOffset = BG_PLTT_ID(9) + 10, .numColors = 1, .delay = 1, .unk6 = -1, @@ -970,7 +970,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + }, { // F_FLASH_COLOR_P_MAKUHITA .color = FLASHUTIL_USE_EXISTING_COLOR, - .paletteOffset = 0xA5, + .paletteOffset = BG_PLTT_ID(10) + 5, .numColors = 1, .delay = 1, .unk6 = -1, @@ -980,7 +980,7 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + }, { // F_FLASH_OUTER_EDGES .color = RGB(22, 30, 29), - .paletteOffset = 0x28, + .paletteOffset = BG_PLTT_ID(2) + 8, .numColors = 2, .delay = 10, .unk6 = -1, @@ -996,7 +996,7 @@ static const struct RouletteFlashSettings sFlashData_PokeIcons[NUM_BOARD_COLORS] { [GET_ROW_IDX(ROW_ORANGE)] = { .color = RGB(31, 31, 20), - .paletteOffset = 0x101, + .paletteOffset = OBJ_PLTT_ID(0) + 1, .numColors = 5, .delay = 30, .unk6 = -1, @@ -1006,7 +1006,7 @@ static const struct RouletteFlashSettings sFlashData_PokeIcons[NUM_BOARD_COLORS] }, [GET_ROW_IDX(ROW_GREEN)] = { .color = RGB(27, 31, 31), - .paletteOffset = 0x106, + .paletteOffset = OBJ_PLTT_ID(0) + 6, .numColors = 5, .delay = 30, .unk6 = -1, @@ -1016,7 +1016,7 @@ static const struct RouletteFlashSettings sFlashData_PokeIcons[NUM_BOARD_COLORS] }, [GET_ROW_IDX(ROW_PURPLE)] = { .color = RGB(31, 27, 31), - .paletteOffset = 0x10B, + .paletteOffset = OBJ_PLTT_ID(0) + 11, .numColors = 5, .delay = 30, .unk6 = -1, @@ -1129,9 +1129,9 @@ static void InitRouletteTableData(void) // Left table (with min bet of 1) has red background, other table has green if (sRoulette->minBet == 1) - gPlttBufferUnfaded[0] = gPlttBufferUnfaded[0x51] = gPlttBufferFaded[0] = gPlttBufferFaded[0x51] = bgColors[0]; + gPlttBufferUnfaded[BG_PLTT_ID(0)] = gPlttBufferUnfaded[BG_PLTT_ID(5) + 1] = gPlttBufferFaded[BG_PLTT_ID(0)] = gPlttBufferFaded[BG_PLTT_ID(5) + 1] = bgColors[0]; else - gPlttBufferUnfaded[0] = gPlttBufferUnfaded[0x51] = gPlttBufferFaded[0] = gPlttBufferFaded[0x51] = bgColors[1]; + gPlttBufferUnfaded[BG_PLTT_ID(0)] = gPlttBufferUnfaded[BG_PLTT_ID(5) + 1] = gPlttBufferFaded[BG_PLTT_ID(0)] = gPlttBufferFaded[BG_PLTT_ID(5) + 1] = bgColors[1]; RouletteFlash_Reset(&sRoulette->flashUtil); diff --git a/src/scrcmd.c b/src/scrcmd.c index 18a56631d3..bf4ec38f44 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -649,12 +649,12 @@ bool8 ScrCmd_fadescreenswapbuffers(struct ScriptContext *ctx) case FADE_TO_BLACK: case FADE_TO_WHITE: default: - CpuCopy32(gPlttBufferUnfaded, gPaletteDecompressionBuffer, PLTT_DECOMP_BUFFER_SIZE); + CpuCopy32(gPlttBufferUnfaded, gPaletteDecompressionBuffer, PLTT_SIZE); FadeScreen(mode, 0); break; case FADE_FROM_BLACK: case FADE_FROM_WHITE: - CpuCopy32(gPaletteDecompressionBuffer, gPlttBufferUnfaded, PLTT_DECOMP_BUFFER_SIZE); + CpuCopy32(gPaletteDecompressionBuffer, gPlttBufferUnfaded, PLTT_SIZE); FadeScreen(mode, 0); break; } diff --git a/src/slot_machine.c b/src/slot_machine.c index 2fc0e2c035..581e5c78e0 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -4427,7 +4427,7 @@ static void SpriteCB_ReelTimePikachuAura(struct Sprite *sprite) u8 colors[] = {16, 0}; if (sprite->sFlashPal && --sprite->sDelayTimer <= 0) { - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(PALTAG_PIKA_AURA) << 4) + 0x103, colors[sprite->sColorIdx], colors[sprite->sColorIdx], colors[sprite->sColorIdx]); + MultiplyInvertedPaletteRGBComponents(OBJ_PLTT_ID(IndexOfSpritePaletteTag(PALTAG_PIKA_AURA)) + 3, colors[sprite->sColorIdx], colors[sprite->sColorIdx], colors[sprite->sColorIdx]); ++sprite->sColorIdx; sprite->sColorIdx &= 1; sprite->sDelayTimer = sprite->sDelay; @@ -4442,7 +4442,7 @@ static void SetReelTimePikachuAuraFlashDelay(s16 delay) static void DestroyReelTimePikachuAuraSprites(void) { u8 i; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(PALTAG_PIKA_AURA) << 4) + 0x103, 0, 0, 0); + MultiplyInvertedPaletteRGBComponents(OBJ_PLTT_ID(IndexOfSpritePaletteTag(PALTAG_PIKA_AURA)) + 3, 0, 0, 0); for (i = 0; i < ARRAY_COUNT(sSlotMachine->reelTimePikachuAuraSpriteIds); i++) DestroySprite(&gSprites[sSlotMachine->reelTimePikachuAuraSpriteIds[i]]); } diff --git a/src/tileset_anims.c b/src/tileset_anims.c index 12701fb5f0..595ba08a6f 100644 --- a/src/tileset_anims.c +++ b/src/tileset_anims.c @@ -1167,7 +1167,7 @@ static void QueueAnimTiles_BattlePyramid_StatueShadow(u16 timer) static void BlendAnimPalette_BattleDome_FloorLights(u16 timer) { - CpuCopy16(sTilesetAnims_BattleDomeFloorLightPals[timer % ARRAY_COUNT(sTilesetAnims_BattleDomeFloorLightPals)], &gPlttBufferUnfaded[0x80], 32); + CpuCopy16(sTilesetAnims_BattleDomeFloorLightPals[timer % ARRAY_COUNT(sTilesetAnims_BattleDomeFloorLightPals)], &gPlttBufferUnfaded[BG_PLTT_ID(8)], PLTT_SIZE_4BPP); BlendPalette(BG_PLTT_ID(8), 16, gPaletteFade.y, gPaletteFade.blendColor & 0x7FFF); if ((u8)FindTaskIdByFunc(Task_BattleTransition_Intro) != TASK_NONE) { @@ -1178,7 +1178,7 @@ static void BlendAnimPalette_BattleDome_FloorLights(u16 timer) static void BlendAnimPalette_BattleDome_FloorLightsNoBlend(u16 timer) { - CpuCopy16(sTilesetAnims_BattleDomeFloorLightPals[timer % ARRAY_COUNT(sTilesetAnims_BattleDomeFloorLightPals)], &gPlttBufferUnfaded[0x80], 32); + CpuCopy16(sTilesetAnims_BattleDomeFloorLightPals[timer % ARRAY_COUNT(sTilesetAnims_BattleDomeFloorLightPals)], &gPlttBufferUnfaded[BG_PLTT_ID(8)], PLTT_SIZE_4BPP); if ((u8)FindTaskIdByFunc(Task_BattleTransition_Intro) == TASK_NONE) { BlendPalette(BG_PLTT_ID(8), 16, gPaletteFade.y, gPaletteFade.blendColor & 0x7FFF); diff --git a/src/wireless_communication_status_screen.c b/src/wireless_communication_status_screen.c index d10c39c7df..9a562cf7f7 100644 --- a/src/wireless_communication_status_screen.c +++ b/src/wireless_communication_status_screen.c @@ -222,7 +222,7 @@ static void CB2_InitWirelessCommunicationScreen(void) ChangeBgX(1, 0, BG_COORD_SET); ChangeBgY(1, 0, BG_COORD_SET); LoadPalette(sPalettes, BG_PLTT_ID(0), PLTT_SIZE_4BPP); - Menu_LoadStdPalAt(0xF0); + Menu_LoadStdPalAt(BG_PLTT_ID(15)); DynamicPlaceholderTextUtil_Reset(); FillBgTilemapBufferRect(0, 0, 0, 0, 32, 32, 15); CopyBgTilemapBufferToVram(1); From 23b57050c29258f005d8d74553fa744e02600507 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 1 Jun 2023 15:28:20 -0400 Subject: [PATCH 05/43] Fix some compressed tilemaps --- .../frontier_logo_center.bin | Bin 428 -> 2048 bytes graphics/pokeblock/use_screen/graph_data.bin | Bin 164 -> 1280 bytes graphics/pokeblock/use_screen/mon_frame.bin | Bin 172 -> 1280 bytes src/battle_transition_frontier.c | 2 +- src/use_pokeblock.c | 4 ++-- 5 files changed, 3 insertions(+), 3 deletions(-) diff --git a/graphics/battle_transitions/frontier_logo_center.bin b/graphics/battle_transitions/frontier_logo_center.bin index 7b9d2af284bc62e16d244945b05f653b5fad0a04..52479134604aba9f512d9ab40a3f033488e53f32 100644 GIT binary patch literal 2048 zcmeIxM-Bop5JXXvbIv)(`ycEt>Hy3P8YCp!GDvKI?u|FET22P@ew(P?*TnpjK0`*{ zeCPZuIr0=JD6gEdt`vtaQldZTg1tM-C#)1ga`e&YM; zsjH6Kwgl_^0YgTNnIwLqu|^td5bUSSm`A-}$x;i&>zSs(e#JWRu}gccRj}W%eYn(b zwF&ly9s8$*y>>S3dA|paoRW-_jyl-2#~aRExN_A+XP5SR@4HX`to8nb-ek@Af^p$>H?Gnh!p zH7aQ|Rn_WlRmUn+sRG17i&Any_sY!eHLtl?k5;yl@=$`0GNeqOC3<)|!{kyyfDo#R z8fvUE2pO<~4CX~tggP2%;&`W|$p-5@MYfkYN{j@43vG0?=}_8iF=33%w$#!^4}HV~ z47C|@z@X0_-4fRGM;PN?$pqdMQ%)F1;|Goka|ZpX&6{Y>3L%+e@nsgA!+f~0ORV10 z6;Df~Zud1d$hP`%%MI5^?eMegu*U(xfqU*;6>Kgpqn}jl-wD5{6`l*~>aK7VfAA0C JcADIt<{L}+yr2L8 diff --git a/graphics/pokeblock/use_screen/graph_data.bin b/graphics/pokeblock/use_screen/graph_data.bin index 5f8f364fc90762c2a6165d60cefc8b7f087b3430..75581f46e235c83b6f875ca1755f0f500efdfc8d 100644 GIT binary patch literal 1280 lcmZQz7zKkj1X_*IA!%+!*WGF~s-Kh)80z6iieE>jS^y?oIp_cY literal 164 zcmWe&U}dmpVEDj@fd3Ip2n$1C{sqQXqYI25l!5a0AM7FWKn8^Sfe|Et#03eUa6wu? Rijg413?zXE5LpHw0036PP#pjO diff --git a/graphics/pokeblock/use_screen/mon_frame.bin b/graphics/pokeblock/use_screen/mon_frame.bin index 4e7c2d4adc325726e191a63c1d77cec62262916b..130dcff29c7480e1a76fea3b75fb1b2b0c32e92a 100644 GIT binary patch literal 1280 ycmZR$$S?{=a0oD7M2Acyg$DCQbjUKQpM(%V4?X6KLo57PFQP*>5_~`KWe)(Jqzlym literal 172 zcmWe&U}dmpxcGq)0skYI5Eh2OKV%gKjEuV;Ffx5m{lJ*O$oznj Date: Mon, 5 Jun 2023 14:15:07 +0200 Subject: [PATCH 06/43] Rename GAME_STAT_FISHING_CAPTURES to GAME_STAT_FISHING_ENCOUNTERS --- include/constants/game_stat.h | 2 +- src/mauville_old_man.c | 2 +- src/wild_encounter.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/include/constants/game_stat.h b/include/constants/game_stat.h index 053e4a8f9e..5796afbaec 100644 --- a/include/constants/game_stat.h +++ b/include/constants/game_stat.h @@ -13,7 +13,7 @@ #define GAME_STAT_TRAINER_BATTLES 9 #define GAME_STAT_ENTERED_HOF 10 #define GAME_STAT_POKEMON_CAPTURES 11 -#define GAME_STAT_FISHING_CAPTURES 12 +#define GAME_STAT_FISHING_ENCOUNTERS 12 #define GAME_STAT_HATCHED_EGGS 13 #define GAME_STAT_EVOLVED_POKEMON 14 #define GAME_STAT_USED_POKECENTER 15 diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index 6075bd5d95..36b29ed73b 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -969,7 +969,7 @@ static const struct Story sStorytellerStories[] = { MauvilleCity_PokemonCenter_1F_Text_PokemonCaughtStory }, { - GAME_STAT_FISHING_CAPTURES, 1, + GAME_STAT_FISHING_ENCOUNTERS, 1, MauvilleCity_PokemonCenter_1F_Text_FishingPokemonCaughtTitle, MauvilleCity_PokemonCenter_1F_Text_FishingPokemonCaughtAction, MauvilleCity_PokemonCenter_1F_Text_FishingPokemonCaughtStory diff --git a/src/wild_encounter.c b/src/wild_encounter.c index cc3ce82273..87d7d866bb 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -783,7 +783,7 @@ void FishingWildEncounter(u8 rod) { species = GenerateFishingWildMon(gWildMonHeaders[GetCurrentMapWildMonHeaderId()].fishingMonsInfo, rod); } - IncrementGameStat(GAME_STAT_FISHING_CAPTURES); + IncrementGameStat(GAME_STAT_FISHING_ENCOUNTERS); SetPokemonAnglerSpecies(species); BattleSetup_StartWildBattle(); } From 86459acb699e9182f78b163cc2a11029c859380d Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 5 Jun 2023 13:13:35 -0400 Subject: [PATCH 07/43] Fix sTVPokemonAnslerTextGroup typo --- src/tv.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tv.c b/src/tv.c index b32881d090..85819a7a1d 100644 --- a/src/tv.c +++ b/src/tv.c @@ -485,7 +485,7 @@ static const u8 *const sTVPokemonTodayFailedTextGroup[] = { gTVPokemonTodayFailedText06 }; -static const u8 *const sTVPokemonAnslerTextGroup[] = { +static const u8 *const sTVPokemonAnglerTextGroup[] = { gTVPokemonAnglerText00, gTVPokemonAnglerText01 }; @@ -5502,7 +5502,7 @@ static void DoTVShowPokemonAngler(void) TVShowDone(); break; } - ShowFieldMessage(sTVPokemonAnslerTextGroup[state]); + ShowFieldMessage(sTVPokemonAnglerTextGroup[state]); } static void DoTVShowTheWorldOfMasters(void) From 9c4a59f865360b7d6e0dede0e52812b897526588 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 5 Jun 2023 19:53:59 -0400 Subject: [PATCH 08/43] Fix swapped Dodrio Berry Picking palettes --- graphics/dodrio_berry_picking/bg.pal | 19 ------------------- graphics/dodrio_berry_picking/tree_border.pal | 19 ------------------- src/dodrio_berry_picking.c | 8 ++++---- 3 files changed, 4 insertions(+), 42 deletions(-) delete mode 100644 graphics/dodrio_berry_picking/bg.pal delete mode 100644 graphics/dodrio_berry_picking/tree_border.pal diff --git a/graphics/dodrio_berry_picking/bg.pal b/graphics/dodrio_berry_picking/bg.pal deleted file mode 100644 index c06550002f..0000000000 --- a/graphics/dodrio_berry_picking/bg.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -230 246 255 -82 180 172 -82 205 189 -156 156 131 -106 156 148 -123 123 98 -189 172 98 -189 189 139 -74 172 156 -172 172 131 -74 156 123 -115 115 82 -139 139 106 -164 164 115 -197 197 148 -230 246 255 diff --git a/graphics/dodrio_berry_picking/tree_border.pal b/graphics/dodrio_berry_picking/tree_border.pal deleted file mode 100644 index be2b62cc98..0000000000 --- a/graphics/dodrio_berry_picking/tree_border.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -230 246 255 -246 246 222 -230 230 180 -139 238 139 -246 246 189 -197 246 164 -246 230 197 -230 246 255 -230 213 180 -205 197 164 -148 222 148 -222 238 255 -139 205 139 -213 238 246 -222 246 255 -213 205 164 diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c index 8d47595c8b..1ba82c6d21 100644 --- a/src/dodrio_berry_picking.c +++ b/src/dodrio_berry_picking.c @@ -552,8 +552,8 @@ static const u8 sUnsharedColumns[MAX_RFU_PLAYERS][MAX_RFU_PLAYERS] = }; // Duplicate and unused gfx. Feel free to remove. -static const u32 sDuplicateGfx[] = INCBIN_U32("graphics/dodrio_berry_picking/bg.gbapal", - "graphics/dodrio_berry_picking/tree_border.gbapal", +static const u32 sDuplicateGfx[] = INCBIN_U32("graphics/dodrio_berry_picking/tree_border.gbapal", + "graphics/dodrio_berry_picking/bg.gbapal", "graphics/dodrio_berry_picking/dodrio.gbapal", "graphics/dodrio_berry_picking/shiny.gbapal", "graphics/dodrio_berry_picking/status.gbapal", @@ -3586,8 +3586,8 @@ static const u8 sUnsharedColumns_Duplicate[MAX_RFU_PLAYERS][MAX_RFU_PLAYERS] = {1, 3, 5, 6, 9}, }; -static const u16 sBg_Pal[] = INCBIN_U16("graphics/dodrio_berry_picking/bg.gbapal", - "graphics/dodrio_berry_picking/tree_border.gbapal"); +static const u16 sBg_Pal[] = INCBIN_U16("graphics/dodrio_berry_picking/tree_border.gbapal", + "graphics/dodrio_berry_picking/bg.gbapal"); static const u16 sDodrioNormal_Pal[] = INCBIN_U16("graphics/dodrio_berry_picking/dodrio.gbapal"); static const u16 sDodrioShiny_Pal[] = INCBIN_U16("graphics/dodrio_berry_picking/shiny.gbapal"); static const u16 sStatus_Pal[] = INCBIN_U16("graphics/dodrio_berry_picking/status.gbapal"); From 62f592f4df59e39b77fe356c8d1aff1f23208ad3 Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Tue, 6 Jun 2023 09:02:52 +0100 Subject: [PATCH 09/43] Fix EWRAM_DATA wildcards `ewram_data` not `.ewram_data`, doh! --- ld_script.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ld_script.txt b/ld_script.txt index bd9d7c4a35..4be5965240 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -20,8 +20,8 @@ SECTIONS { . = 0x1C000; INCLUDE "sym_ewram.ld" - src/*.o(.ewram_data); - gflib/*.o(.ewram_data); + src/*.o(ewram_data); + gflib/*.o(ewram_data); *libc.a:impure.o(.data); *libc.a:locale.o(.data); From 2651401e6b17a0ab5db1f28ec5c8220434950c42 Mon Sep 17 00:00:00 2001 From: Michael Panzlaff Date: Mon, 29 May 2023 01:00:38 +0200 Subject: [PATCH 10/43] Fix PATH for modern target for non dkp systems When prepending something to PATH, we should use PATH=/foo/bar:$PATH and not PATH=/foo/bar:PATH. Because your shell won't certainly find something under the literal name PATH. If one is not using devkitarm, TOOLCHAIN will resolve to an empty string. If TOOLCHAIN is an empty string the only search path for the modern gcc will be /bin which may work on some installations but is probably not what was originally intended with this line. So let's just search the standard search path if nothing can be found under $(TOOLCHAIN). Either way, PATH is already set up previously, so we can make sure MODERNCC is invoked properly by calling MODERNCC with PATH=$(PATH). --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 50a7e0d255..7476a9dc31 100644 --- a/Makefile +++ b/Makefile @@ -28,7 +28,7 @@ LD := $(PREFIX)ld # note: the makefile must be set up so MODERNCC is never called # if MODERN=0 MODERNCC := $(PREFIX)gcc -PATH_MODERNCC := PATH=$(TOOLCHAIN)/bin:PATH $(MODERNCC) +PATH_MODERNCC := PATH="$(PATH)" $(MODERNCC) ifeq ($(OS),Windows_NT) EXE := .exe From b2901c51b0a589de6a1b8bd5971ee244a9c62b80 Mon Sep 17 00:00:00 2001 From: PSF Date: Tue, 27 Jun 2023 15:32:49 -0700 Subject: [PATCH 11/43] Added bugfix for SaveBeforeLinkMultisChallenge to remove extra incrementgamestat --- data/maps/BattleFrontier_BattleTowerLobby/scripts.inc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc b/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc index e99c7f88e8..8d60105bd3 100644 --- a/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc @@ -421,7 +421,12 @@ BattleFrontier_BattleTowerLobby_EventScript_SaveBeforeLinkMultisChallenge:: call Common_EventScript_SaveGame setvar VAR_TEMP_0, 255 goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleTowerLobby_EventScript_CancelChallengeSaveFailed +@ GAME_STAT_ENTERED_BATTLE_TOWER should not be incremented here, for two reasons: +@ 1. It is incremented again in BattleFrontier_BattleTowerLobby_EventScript_CableLinkSuccessful or BattleFrontier_BattleTowerLobby_EventScript_WirelessLinkSuccessful +@ 2. If the player tries to save, but fails, the counter will still be incremented even if the player never enters the tower. +.ifndef BUGFIX incrementgamestat GAME_STAT_ENTERED_BATTLE_TOWER +.endif specialvar VAR_RESULT, IsWirelessAdapterConnected goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattleTowerLobby_EventScript_TryWirelessLink goto BattleFrontier_BattleTowerLobby_EventScript_TryCableLink From 010ce6bc634ed9cd0dd2133fbc1dc4f25af3fe90 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 6 Jul 2023 11:56:04 -0400 Subject: [PATCH 12/43] Revert "Install libpng using pacman instead of manual build for msys2" This reverts commit dc2e210ade38bc5789764d0c3836c3d995a1d4ef. --- INSTALL.md | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 01fbd5ceef..9aca02a15d 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -125,12 +125,12 @@ Otherwise, ask for help on Discord or IRC (see [README.md](README.md)), or conti Note that in msys2, Copy is Ctrl+Insert and Paste is Shift+Insert. -1. Open msys2 at C:\devkitPro\msys2\mingw64.exe or run `C:\devkitPro\msys2\msys2_shell.bat -mingw64`. +1. Open msys2 at C:\devkitPro\msys2\msys2_shell.bat. 2. Certain packages are required to build pokeemerald. Install these by running the following command: ```bash - pacman -S make zlib-devel git mingw-w64-x86_64-gcc mingw-w64-x86_64-libpng + pacman -S make gcc zlib-devel git ```

Note... @@ -138,6 +138,39 @@ Note that in msys2, Copy is Ctrl+Insert and Paste is Shift+Insert. > This command will ask for confirmation, just enter the yes action when prompted.
+3. Download [libpng](https://sourceforge.net/projects/libpng/files/libpng16/1.6.37/libpng-1.6.37.tar.xz/download). + +4. Change directory to where libpng was downloaded. By default, msys2 will start in the current user's profile folder, located at **C:\Users\\⁠_\_**, where *\* is your Windows username. In most cases, libpng should be saved within a subfolder of the profile folder. For example, if libpng was saved to **C:\Users\\_\_\Downloads** (the Downloads location for most users), enter this command: + + ```bash + cd Downloads + ``` + +
+ Notes... + + > Note 1: While not shown, msys uses forward slashes `/` instead of backwards slashes `\` as the directory separator. + > Note 2: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "Downloads/My Downloads"`. + > Note 3: Windows path names are case-insensitive so adhering to capitalization isn’t needed. + > Note 4: If libpng was saved elsewhere, you will need to specify the full path to where libpng was downloaded, e.g. `cd c:/devkitpro/msys2` if it was saved there. +
+ +5. Run the following commands to uncompress and install libpng. + + ```bash + tar xf libpng-1.6.37.tar.xz + cd libpng-1.6.37 + ./configure --prefix=/usr + make check + make install + ``` + +6. Then finally, run the following command to change back to the user profile folder. + + ```bash + cd + ``` + ### Choosing where to store pokeemerald (msys2) At this point, you can choose a folder to store pokeemerald into. If you're okay with storing pokeemerald in the user profile folder, then proceed to [Installation](#installation). Otherwise, you'll need to account for where pokeemerald is stored when changing directory to the pokeemerald folder. From f4111d8082cce24b94969d5b49e977a165abbcb4 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sun, 9 Jul 2023 14:57:51 -0400 Subject: [PATCH 13/43] Sync castform folder organization --- .../anim_front.png} | Bin .../{back_normal_form.png => normal/back.png} | Bin .../front.png} | Bin .../normal.pal} | 0 .../shiny.pal} | 0 .../anim_front.png} | Bin .../{back_rainy_form.png => rainy/back.png} | Bin .../{front_rainy_form.png => rainy/front.png} | Bin .../normal.pal} | 0 .../{shiny_rainy_form.pal => rainy/shiny.pal} | 0 .../anim_front.png} | Bin .../{back_snowy_form.png => snowy/back.png} | Bin .../{front_snowy_form.png => snowy/front.png} | Bin .../normal.pal} | 0 .../{shiny_snowy_form.pal => snowy/shiny.pal} | 0 .../anim_front.png} | Bin .../{back_sunny_form.png => sunny/back.png} | Bin .../{front_sunny_form.png => sunny/front.png} | Bin .../normal.pal} | 0 .../{shiny_sunny_form.pal => sunny/shiny.pal} | 0 graphics_file_rules.mk | 40 +++++++++--------- 21 files changed, 20 insertions(+), 20 deletions(-) rename graphics/pokemon/castform/{anim_front_normal_form.png => normal/anim_front.png} (100%) rename graphics/pokemon/castform/{back_normal_form.png => normal/back.png} (100%) rename graphics/pokemon/castform/{front_normal_form.png => normal/front.png} (100%) rename graphics/pokemon/castform/{normal_normal_form.pal => normal/normal.pal} (100%) rename graphics/pokemon/castform/{shiny_normal_form.pal => normal/shiny.pal} (100%) rename graphics/pokemon/castform/{anim_front_rainy_form.png => rainy/anim_front.png} (100%) rename graphics/pokemon/castform/{back_rainy_form.png => rainy/back.png} (100%) rename graphics/pokemon/castform/{front_rainy_form.png => rainy/front.png} (100%) rename graphics/pokemon/castform/{normal_rainy_form.pal => rainy/normal.pal} (100%) rename graphics/pokemon/castform/{shiny_rainy_form.pal => rainy/shiny.pal} (100%) rename graphics/pokemon/castform/{anim_front_snowy_form.png => snowy/anim_front.png} (100%) rename graphics/pokemon/castform/{back_snowy_form.png => snowy/back.png} (100%) rename graphics/pokemon/castform/{front_snowy_form.png => snowy/front.png} (100%) rename graphics/pokemon/castform/{normal_snowy_form.pal => snowy/normal.pal} (100%) rename graphics/pokemon/castform/{shiny_snowy_form.pal => snowy/shiny.pal} (100%) rename graphics/pokemon/castform/{anim_front_sunny_form.png => sunny/anim_front.png} (100%) rename graphics/pokemon/castform/{back_sunny_form.png => sunny/back.png} (100%) rename graphics/pokemon/castform/{front_sunny_form.png => sunny/front.png} (100%) rename graphics/pokemon/castform/{normal_sunny_form.pal => sunny/normal.pal} (100%) rename graphics/pokemon/castform/{shiny_sunny_form.pal => sunny/shiny.pal} (100%) diff --git a/graphics/pokemon/castform/anim_front_normal_form.png b/graphics/pokemon/castform/normal/anim_front.png similarity index 100% rename from graphics/pokemon/castform/anim_front_normal_form.png rename to graphics/pokemon/castform/normal/anim_front.png diff --git a/graphics/pokemon/castform/back_normal_form.png b/graphics/pokemon/castform/normal/back.png similarity index 100% rename from graphics/pokemon/castform/back_normal_form.png rename to graphics/pokemon/castform/normal/back.png diff --git a/graphics/pokemon/castform/front_normal_form.png b/graphics/pokemon/castform/normal/front.png similarity index 100% rename from graphics/pokemon/castform/front_normal_form.png rename to graphics/pokemon/castform/normal/front.png diff --git a/graphics/pokemon/castform/normal_normal_form.pal b/graphics/pokemon/castform/normal/normal.pal similarity index 100% rename from graphics/pokemon/castform/normal_normal_form.pal rename to graphics/pokemon/castform/normal/normal.pal diff --git a/graphics/pokemon/castform/shiny_normal_form.pal b/graphics/pokemon/castform/normal/shiny.pal similarity index 100% rename from graphics/pokemon/castform/shiny_normal_form.pal rename to graphics/pokemon/castform/normal/shiny.pal diff --git a/graphics/pokemon/castform/anim_front_rainy_form.png b/graphics/pokemon/castform/rainy/anim_front.png similarity index 100% rename from graphics/pokemon/castform/anim_front_rainy_form.png rename to graphics/pokemon/castform/rainy/anim_front.png diff --git a/graphics/pokemon/castform/back_rainy_form.png b/graphics/pokemon/castform/rainy/back.png similarity index 100% rename from graphics/pokemon/castform/back_rainy_form.png rename to graphics/pokemon/castform/rainy/back.png diff --git a/graphics/pokemon/castform/front_rainy_form.png b/graphics/pokemon/castform/rainy/front.png similarity index 100% rename from graphics/pokemon/castform/front_rainy_form.png rename to graphics/pokemon/castform/rainy/front.png diff --git a/graphics/pokemon/castform/normal_rainy_form.pal b/graphics/pokemon/castform/rainy/normal.pal similarity index 100% rename from graphics/pokemon/castform/normal_rainy_form.pal rename to graphics/pokemon/castform/rainy/normal.pal diff --git a/graphics/pokemon/castform/shiny_rainy_form.pal b/graphics/pokemon/castform/rainy/shiny.pal similarity index 100% rename from graphics/pokemon/castform/shiny_rainy_form.pal rename to graphics/pokemon/castform/rainy/shiny.pal diff --git a/graphics/pokemon/castform/anim_front_snowy_form.png b/graphics/pokemon/castform/snowy/anim_front.png similarity index 100% rename from graphics/pokemon/castform/anim_front_snowy_form.png rename to graphics/pokemon/castform/snowy/anim_front.png diff --git a/graphics/pokemon/castform/back_snowy_form.png b/graphics/pokemon/castform/snowy/back.png similarity index 100% rename from graphics/pokemon/castform/back_snowy_form.png rename to graphics/pokemon/castform/snowy/back.png diff --git a/graphics/pokemon/castform/front_snowy_form.png b/graphics/pokemon/castform/snowy/front.png similarity index 100% rename from graphics/pokemon/castform/front_snowy_form.png rename to graphics/pokemon/castform/snowy/front.png diff --git a/graphics/pokemon/castform/normal_snowy_form.pal b/graphics/pokemon/castform/snowy/normal.pal similarity index 100% rename from graphics/pokemon/castform/normal_snowy_form.pal rename to graphics/pokemon/castform/snowy/normal.pal diff --git a/graphics/pokemon/castform/shiny_snowy_form.pal b/graphics/pokemon/castform/snowy/shiny.pal similarity index 100% rename from graphics/pokemon/castform/shiny_snowy_form.pal rename to graphics/pokemon/castform/snowy/shiny.pal diff --git a/graphics/pokemon/castform/anim_front_sunny_form.png b/graphics/pokemon/castform/sunny/anim_front.png similarity index 100% rename from graphics/pokemon/castform/anim_front_sunny_form.png rename to graphics/pokemon/castform/sunny/anim_front.png diff --git a/graphics/pokemon/castform/back_sunny_form.png b/graphics/pokemon/castform/sunny/back.png similarity index 100% rename from graphics/pokemon/castform/back_sunny_form.png rename to graphics/pokemon/castform/sunny/back.png diff --git a/graphics/pokemon/castform/front_sunny_form.png b/graphics/pokemon/castform/sunny/front.png similarity index 100% rename from graphics/pokemon/castform/front_sunny_form.png rename to graphics/pokemon/castform/sunny/front.png diff --git a/graphics/pokemon/castform/normal_sunny_form.pal b/graphics/pokemon/castform/sunny/normal.pal similarity index 100% rename from graphics/pokemon/castform/normal_sunny_form.pal rename to graphics/pokemon/castform/sunny/normal.pal diff --git a/graphics/pokemon/castform/shiny_sunny_form.pal b/graphics/pokemon/castform/sunny/shiny.pal similarity index 100% rename from graphics/pokemon/castform/shiny_sunny_form.pal rename to graphics/pokemon/castform/sunny/shiny.pal diff --git a/graphics_file_rules.mk b/graphics_file_rules.mk index 97a7794b30..090620ebe8 100644 --- a/graphics_file_rules.mk +++ b/graphics_file_rules.mk @@ -30,34 +30,34 @@ contest_types := cool beauty cute smart tough ### Castform ### -$(CASTFORMGFXDIR)/front.4bpp: $(CASTFORMGFXDIR)/front_normal_form.4bpp \ - $(CASTFORMGFXDIR)/front_sunny_form.4bpp \ - $(CASTFORMGFXDIR)/front_rainy_form.4bpp \ - $(CASTFORMGFXDIR)/front_snowy_form.4bpp +$(CASTFORMGFXDIR)/front.4bpp: $(CASTFORMGFXDIR)/normal/front.4bpp \ + $(CASTFORMGFXDIR)/sunny/front.4bpp \ + $(CASTFORMGFXDIR)/rainy/front.4bpp \ + $(CASTFORMGFXDIR)/snowy/front.4bpp @cat $^ >$@ -$(CASTFORMGFXDIR)/back.4bpp: $(CASTFORMGFXDIR)/back_normal_form.4bpp \ - $(CASTFORMGFXDIR)/back_sunny_form.4bpp \ - $(CASTFORMGFXDIR)/back_rainy_form.4bpp \ - $(CASTFORMGFXDIR)/back_snowy_form.4bpp +$(CASTFORMGFXDIR)/back.4bpp: $(CASTFORMGFXDIR)/normal/back.4bpp \ + $(CASTFORMGFXDIR)/sunny/back.4bpp \ + $(CASTFORMGFXDIR)/rainy/back.4bpp \ + $(CASTFORMGFXDIR)/snowy/back.4bpp @cat $^ >$@ -$(CASTFORMGFXDIR)/anim_front.4bpp: $(CASTFORMGFXDIR)/anim_front_normal_form.4bpp \ - $(CASTFORMGFXDIR)/anim_front_sunny_form.4bpp \ - $(CASTFORMGFXDIR)/anim_front_rainy_form.4bpp \ - $(CASTFORMGFXDIR)/anim_front_snowy_form.4bpp +$(CASTFORMGFXDIR)/anim_front.4bpp: $(CASTFORMGFXDIR)/normal/anim_front.4bpp \ + $(CASTFORMGFXDIR)/sunny/anim_front.4bpp \ + $(CASTFORMGFXDIR)/rainy/anim_front.4bpp \ + $(CASTFORMGFXDIR)/snowy/anim_front.4bpp @cat $^ >$@ -$(CASTFORMGFXDIR)/normal.gbapal: $(CASTFORMGFXDIR)/normal_normal_form.gbapal \ - $(CASTFORMGFXDIR)/normal_sunny_form.gbapal \ - $(CASTFORMGFXDIR)/normal_rainy_form.gbapal \ - $(CASTFORMGFXDIR)/normal_snowy_form.gbapal +$(CASTFORMGFXDIR)/normal.gbapal: $(CASTFORMGFXDIR)/normal/normal.gbapal \ + $(CASTFORMGFXDIR)/sunny/normal.gbapal \ + $(CASTFORMGFXDIR)/rainy/normal.gbapal \ + $(CASTFORMGFXDIR)/snowy/normal.gbapal @cat $^ >$@ -$(CASTFORMGFXDIR)/shiny.gbapal: $(CASTFORMGFXDIR)/shiny_normal_form.gbapal \ - $(CASTFORMGFXDIR)/shiny_sunny_form.gbapal \ - $(CASTFORMGFXDIR)/shiny_rainy_form.gbapal \ - $(CASTFORMGFXDIR)/shiny_snowy_form.gbapal +$(CASTFORMGFXDIR)/shiny.gbapal: $(CASTFORMGFXDIR)/normal/shiny.gbapal \ + $(CASTFORMGFXDIR)/sunny/shiny.gbapal \ + $(CASTFORMGFXDIR)/rainy/shiny.gbapal \ + $(CASTFORMGFXDIR)/snowy/shiny.gbapal @cat $^ >$@ From 5fd881a1b68b62679452591a6299fad0668db2e9 Mon Sep 17 00:00:00 2001 From: gruxor Date: Wed, 12 Jul 2023 14:44:23 -0400 Subject: [PATCH 14/43] Remove unused macro to fix syntax highlights --- include/global.h | 1 - 1 file changed, 1 deletion(-) diff --git a/include/global.h b/include/global.h index 184abdbe4c..0ca226c036 100644 --- a/include/global.h +++ b/include/global.h @@ -20,7 +20,6 @@ #define BLOCK_CROSS_JUMP asm(""); // to help in decompiling -#define asm_comment(x) asm volatile("@ -- " x " -- ") #define asm_unified(x) asm(".syntax unified\n" x "\n.syntax divided") #define NAKED __attribute__((naked)) From 8ec0bff0342413ac4996b63382c8d03a3b532899 Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Tue, 18 Jul 2023 19:28:41 -0400 Subject: [PATCH 15/43] Update msys2 instructions Add pacman -Sy msys2-keyring --- INSTALL.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 9aca02a15d..a76d0acc75 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -127,15 +127,16 @@ Note that in msys2, Copy is Ctrl+Insert and Paste is Shift+Insert. 1. Open msys2 at C:\devkitPro\msys2\msys2_shell.bat. -2. Certain packages are required to build pokeemerald. Install these by running the following command: +2. Certain packages are required to build pokeemerald. Install these by running the following two commands: ```bash + pacman -Sy msys2-keyring pacman -S make gcc zlib-devel git ```
Note... - > This command will ask for confirmation, just enter the yes action when prompted. + > The commands will ask for confirmation, just enter the yes action when prompted.
3. Download [libpng](https://sourceforge.net/projects/libpng/files/libpng16/1.6.37/libpng-1.6.37.tar.xz/download). From 7fa6ed8b05d794b1e2656849d1631230cc8084fa Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Wed, 19 Jul 2023 17:33:28 +0200 Subject: [PATCH 16/43] Fix priortiy typos --- include/pokeball.h | 2 +- src/pokeball.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/include/pokeball.h b/include/pokeball.h index 1149791b86..2f003c4079 100644 --- a/include/pokeball.h +++ b/include/pokeball.h @@ -34,7 +34,7 @@ extern const struct SpriteTemplate gBallSpriteTemplates[]; #define POKEBALL_OPPONENT_SENDOUT 0xFE u8 DoPokeballSendOutAnimation(s16 pan, u8 kindOfThrow); -void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 monPalNum, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 delay, u32 fadePalettes, u16 species); +void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 monPalNum, u8 x, u8 y, u8 oamPriority, u8 subpriority, u8 delay, u32 fadePalettes, u16 species); u8 CreateTradePokeballSprite(u8 monSpriteId, u8 monPalNum, u8 x, u8 y, u8 oamPriority, u8 subPriority, u8 delay, u32 fadePalettes); void StartHealthboxSlideIn(u8 battler); void DoHitAnimHealthboxEffect(u8 battler); diff --git a/src/pokeball.c b/src/pokeball.c index 2633fd5740..22d973381e 100644 --- a/src/pokeball.c +++ b/src/pokeball.c @@ -1028,13 +1028,13 @@ static u8 LaunchBallFadeMonTaskForPokeball(bool8 unFadeLater, u8 spritePalNum, u #define sTrigIdx data[7] // Pokeball in Birch intro, and when receiving via trade -void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 monPalNum, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 delay, u32 fadePalettes, u16 species) +void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 monPalNum, u8 x, u8 y, u8 oamPriority, u8 subpriority, u8 delay, u32 fadePalettes, u16 species) { u8 spriteId; LoadCompressedSpriteSheetUsingHeap(&gBallSpriteSheets[BALL_POKE]); LoadCompressedSpritePaletteUsingHeap(&gBallSpritePalettes[BALL_POKE]); - spriteId = CreateSprite(&gBallSpriteTemplates[BALL_POKE], x, y, subpriortiy); + spriteId = CreateSprite(&gBallSpriteTemplates[BALL_POKE], x, y, subpriority); gSprites[spriteId].sMonSpriteId = monSpriteId; gSprites[spriteId].sFinalMonX = gSprites[monSpriteId].x; From b53cca1a064d3a565900c9a096f9f6a7779b1dd5 Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Mon, 24 Jul 2023 14:57:37 +0100 Subject: [PATCH 17/43] Declarations for 2- and 3-argument GetMonData (#1756) * Type-safe GetMonData/GetBoxMonData * Comments --- include/global.h | 7 +++++++ include/pokemon.h | 17 +++++++++++------ src/daycare.c | 2 +- src/pokemon.c | 16 ++++++++++++++-- 4 files changed, 33 insertions(+), 9 deletions(-) diff --git a/include/global.h b/include/global.h index 0ca226c036..00b08f48fa 100644 --- a/include/global.h +++ b/include/global.h @@ -134,6 +134,13 @@ #define NUM_FLAG_BYTES ROUND_BITS_TO_BYTES(FLAGS_COUNT) #define NUM_TRENDY_SAYING_BYTES ROUND_BITS_TO_BYTES(NUM_TRENDY_SAYINGS) +// This returns the number of arguments passed to it (up to 8). +#define NARG_8(...) NARG_8_(_, ##__VA_ARGS__, 8, 7, 6, 5, 4, 3, 2, 1, 0) +#define NARG_8_(_, a, b, c, d, e, f, g, h, N, ...) N + +#define CAT(a, b) CAT_(a, b) +#define CAT_(a, b) a ## b + // This produces an error at compile-time if expr is zero. // It looks like file.c:line: size of array `id' is negative #define STATIC_ASSERT(expr, id) typedef char id[(expr) ? 1 : -1]; diff --git a/include/pokemon.h b/include/pokemon.h index 54b4841f7e..f4f6d6989e 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -436,12 +436,17 @@ void SetMultiuseSpriteTemplateToPokemon(u16 speciesTag, u8 battlerPosition); void SetMultiuseSpriteTemplateToTrainerBack(u16 trainerSpriteId, u8 battlerPosition); void SetMultiuseSpriteTemplateToTrainerFront(u16 trainerPicId, u8 battlerPosition); -// These are full type signatures for GetMonData() and GetBoxMonData(), -// but they are not used since some code erroneously omits the third arg. -// u32 GetMonData(struct Pokemon *mon, s32 field, u8 *data); -// u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data); -u32 GetMonData(); -u32 GetBoxMonData(); +/* GameFreak called Get(Box)MonData with either 2 or 3 arguments, for + * type safety we have a Get(Box)MonData macro which dispatches to + * either Get(Box)MonData2 or Get(Box)MonData3 based on the number of + * arguments. The two functions are aliases of each other, but they + * differ for matching purposes in the caller's codegen. */ +#define GetMonData(...) CAT(GetMonData, NARG_8(__VA_ARGS__))(__VA_ARGS__) +#define GetBoxMonData(...) CAT(GetBoxMonData, NARG_8(__VA_ARGS__))(__VA_ARGS__) +u32 GetMonData3(struct Pokemon *mon, s32 field, u8 *data); +u32 GetMonData2(struct Pokemon *mon, s32 field); +u32 GetBoxMonData3(struct BoxPokemon *boxMon, s32 field, u8 *data); +u32 GetBoxMonData2(struct BoxPokemon *boxMon, s32 field); void SetMonData(struct Pokemon *mon, s32 field, const void *dataArg); void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg); diff --git a/src/daycare.c b/src/daycare.c index c3f4dd9906..9d199f0f3a 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -341,7 +341,7 @@ static void Debug_AddDaycareSteps(u16 numSteps) u8 GetNumLevelsGainedFromDaycare(void) { - if (GetBoxMonData(&gSaveBlock1Ptr->daycare.mons[gSpecialVar_0x8004], MON_DATA_SPECIES) != 0) + if (GetBoxMonData(&gSaveBlock1Ptr->daycare.mons[gSpecialVar_0x8004].mon, MON_DATA_SPECIES) != 0) return GetNumLevelsGainedForDaycareMon(&gSaveBlock1Ptr->daycare.mons[gSpecialVar_0x8004]); return 0; diff --git a/src/pokemon.c b/src/pokemon.c index fa2eee42c0..b8f7ae48b3 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -3622,7 +3622,11 @@ static union PokemonSubstruct *GetSubstruct(struct BoxPokemon *boxMon, u32 perso return substruct; } -u32 GetMonData(struct Pokemon *mon, s32 field, u8 *data) +/* GameFreak called GetMonData with either 2 or 3 arguments, for type + * safety we have a GetMonData macro (in include/pokemon.h) which + * dispatches to either GetMonData2 or GetMonData3 based on the number + * of arguments. */ +u32 GetMonData3(struct Pokemon *mon, s32 field, u8 *data) { u32 ret; @@ -3690,7 +3694,13 @@ u32 GetMonData(struct Pokemon *mon, s32 field, u8 *data) return ret; } -u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data) +u32 GetMonData2(struct Pokemon *mon, s32 field) __attribute__((alias("GetMonData3"))); + +/* GameFreak called GetBoxMonData with either 2 or 3 arguments, for type + * safety we have a GetBoxMonData macro (in include/pokemon.h) which + * dispatches to either GetBoxMonData2 or GetBoxMonData3 based on the + * number of arguments. */ +u32 GetBoxMonData3(struct BoxPokemon *boxMon, s32 field, u8 *data) { s32 i; u32 retVal = 0; @@ -4046,6 +4056,8 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data) return retVal; } +u32 GetBoxMonData2(struct BoxPokemon *boxMon, s32 field) __attribute__((alias("GetBoxMonData3"))); + #define SET8(lhs) (lhs) = *data #define SET16(lhs) (lhs) = data[0] + (data[1] << 8) #define SET32(lhs) (lhs) = data[0] + (data[1] << 8) + (data[2] << 16) + (data[3] << 24) From 31a3ada7de629aa28c828762352b1d307113a1bd Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Mon, 24 Jul 2023 19:04:23 +0100 Subject: [PATCH 18/43] Detect potential misalignment in modern --- include/decompress.h | 2 +- include/gba/m4a_internal.h | 2 +- include/gba/macro.h | 83 ++++++++++++++++++++++++++++++++--- include/gba/syscall.h | 22 ++++++++++ include/global.h | 2 +- include/graphics.h | 6 +-- include/item_menu.h | 2 +- include/librfu.h | 2 +- include/link.h | 2 +- include/mon_markings.h | 2 +- include/palette.h | 6 +-- include/scanline_effect.h | 2 +- src/battle_factory_screen.c | 2 +- src/berry_fix_program.c | 2 +- src/contest.c | 4 +- src/decoration.c | 2 +- src/field_weather.c | 6 +-- src/fieldmap.c | 2 +- src/graphics.c | 4 +- src/item_menu.c | 6 +-- src/link.c | 2 +- src/mirage_tower.c | 2 +- src/palette.c | 2 +- src/pokedex_area_region_map.c | 2 +- src/pokemon_storage_system.c | 4 +- src/pokenav_conditions_gfx.c | 4 +- src/pokenav_region_map.c | 2 +- src/rayquaza_scene.c | 4 +- src/scanline_effect.c | 2 +- src/util.c | 2 +- 30 files changed, 142 insertions(+), 45 deletions(-) diff --git a/include/decompress.h b/include/decompress.h index 5e33665b72..18340d54b2 100644 --- a/include/decompress.h +++ b/include/decompress.h @@ -3,7 +3,7 @@ #include "sprite.h" -extern u8 gDecompressionBuffer[0x4000]; +extern u8 ALIGNED(4) gDecompressionBuffer[0x4000]; void LZDecompressWram(const u32 *src, void *dest); void LZDecompressVram(const u32 *src, void *dest); diff --git a/include/gba/m4a_internal.h b/include/gba/m4a_internal.h index 40a25ba059..fc8205efd9 100644 --- a/include/gba/m4a_internal.h +++ b/include/gba/m4a_internal.h @@ -213,7 +213,7 @@ struct SoundInfo ExtVolPitFunc ExtVolPit; u8 gap2[16]; struct SoundChannel chans[MAX_DIRECTSOUND_CHANNELS]; - s8 pcmBuffer[PCM_DMA_BUF_SIZE * 2]; + s8 ALIGNED(4) pcmBuffer[PCM_DMA_BUF_SIZE * 2]; }; struct SongHeader diff --git a/include/gba/macro.h b/include/gba/macro.h index 3b35a19464..5239cd4c87 100644 --- a/include/gba/macro.h +++ b/include/gba/macro.h @@ -1,7 +1,7 @@ #ifndef GUARD_GBA_MACRO_H #define GUARD_GBA_MACRO_H -#define CPU_FILL(value, dest, size, bit) \ +#define CPU_FILL_UNCHECKED(value, dest, size, bit) \ { \ vu##bit tmp = (vu##bit)(value); \ CpuSet((void *)&tmp, \ @@ -9,10 +9,33 @@ CPU_SET_##bit##BIT | CPU_SET_SRC_FIXED | ((size)/(bit/8) & 0x1FFFFF)); \ } +#if MODERN +#define CPU_FILL(value, dest, size, bit) \ + do \ + { \ + _Static_assert(_Alignof(dest) >= (bit / 8), "destination potentially unaligned"); \ + CPU_FILL_UNCHECKED(value, dest, size, bit); \ + } while (0) +#else +#define CPU_FILL(value, dest, size, bit) CPU_FILL_UNCHECKED(value, dest, size, bit) +#endif + #define CpuFill16(value, dest, size) CPU_FILL(value, dest, size, 16) #define CpuFill32(value, dest, size) CPU_FILL(value, dest, size, 32) -#define CPU_COPY(src, dest, size, bit) CpuSet(src, dest, CPU_SET_##bit##BIT | ((size)/(bit/8) & 0x1FFFFF)) +#define CPU_COPY_UNCHECKED(src, dest, size, bit) CpuSet(src, dest, CPU_SET_##bit##BIT | ((size)/(bit/8) & 0x1FFFFF)) + +#if MODERN +#define CPU_COPY(src, dest, size, bit) \ + do \ + { \ + _Static_assert(_Alignof(src) >= (bit / 8), "source potentially unaligned"); \ + _Static_assert(_Alignof(dest) >= (bit / 8), "destination potentially unaligned"); \ + CPU_COPY_UNCHECKED(src, dest, size, bit); \ + } while (0) +#else +#define CPU_COPY(src, dest, size, bit) CPU_COPY_UNCHECKED(src, dest, size, bit) +#endif #define CpuCopy16(src, dest, size) CPU_COPY(src, dest, size, 16) #define CpuCopy32(src, dest, size) CPU_COPY(src, dest, size, 32) @@ -31,7 +54,7 @@ #define CpuFastCopy(src, dest, size) CpuFastSet(src, dest, ((size)/(32/8) & 0x1FFFFF)) -#define DmaSet(dmaNum, src, dest, control) \ +#define DmaSetUnchecked(dmaNum, src, dest, control) \ { \ vu32 *dmaRegs = (vu32 *)REG_ADDR_DMA##dmaNum; \ dmaRegs[0] = (vu32)(src); \ @@ -40,7 +63,21 @@ dmaRegs[2]; \ } -#define DMA_FILL(dmaNum, value, dest, size, bit) \ +#if MODERN +// NOTE: Assumes 16-bit DMAs. +#define DmaSet(dmaNum, src, dest, control) \ + do \ + { \ + _Static_assert(_Alignof(src) >= __builtin_choose_expr(__builtin_constant_p(control), ((control) & (DMA_32BIT << 16)) ? 4 : 2, 2), "source potentially unaligned"); \ + _Static_assert(_Alignof(dest) >= __builtin_choose_expr(__builtin_constant_p(control), ((control) & (DMA_32BIT << 16)) ? 4 : 2, 2), "destination potentially unaligned"); \ + DmaSetUnchecked(dmaNum, src, dest, control); \ + } while (0) +#else +#define DmaSet(dmaNum, src, dest, control) \ + DmaSetUnchecked(dmaNum, src, dest, control) +#endif + +#define DMA_FILL_UNCHECKED(dmaNum, value, dest, size, bit) \ { \ vu##bit tmp = (vu##bit)(value); \ DmaSet(dmaNum, \ @@ -50,6 +87,17 @@ | ((size)/(bit/8))); \ } +#if MODERN +#define DMA_FILL(dmaNum, value, dest, size, bit) \ + do \ + { \ + _Static_assert(_Alignof(dest) >= (bit / 8), "destination potentially unaligned"); \ + DMA_FILL_UNCHECKED(dmaNum, value, dest, size, bit); \ + } while (0) +#else +#define DMA_FILL(dmaNum, value, dest, size, bit) DMA_FILL_UNCHECKED(dmaNum, value, dest, size, bit) +#endif + #define DmaFill16(dmaNum, value, dest, size) DMA_FILL(dmaNum, value, dest, size, 16) #define DmaFill32(dmaNum, value, dest, size) DMA_FILL(dmaNum, value, dest, size, 32) @@ -58,23 +106,46 @@ // unit size (2 or 4 bytes) and then combined with the DMA control flags using a // bitwise OR operation. -#define DMA_CLEAR(dmaNum, dest, size, bit) \ +#define DMA_CLEAR_UNCHECKED(dmaNum, dest, size, bit) \ { \ vu##bit *_dest = (vu##bit *)(dest); \ u32 _size = size; \ DmaFill##bit(dmaNum, 0, _dest, _size); \ } +#if MODERN +#define DMA_CLEAR(dmaNum, dest, size, bit) \ + do \ + { \ + _Static_assert(_Alignof(dest) >= (bit / 8), "destination potentially unaligned"); \ + DMA_CLEAR_UNCHECKED(dmaNum, dest, size, bit); \ + } while (0) +#else +#define DMA_CLEAR(dmaNum, dest, size, bit) DMA_CLEAR_UNCHECKED(dmaNum, dest, size, bit) +#endif + #define DmaClear16(dmaNum, dest, size) DMA_CLEAR(dmaNum, dest, size, 16) #define DmaClear32(dmaNum, dest, size) DMA_CLEAR(dmaNum, dest, size, 32) -#define DMA_COPY(dmaNum, src, dest, size, bit) \ +#define DMA_COPY_UNCHECKED(dmaNum, src, dest, size, bit) \ DmaSet(dmaNum, \ src, \ dest, \ (DMA_ENABLE | DMA_START_NOW | DMA_##bit##BIT | DMA_SRC_INC | DMA_DEST_INC) << 16 \ | ((size)/(bit/8))) +#if MODERN +#define DMA_COPY(dmaNum, src, dest, size, bit) \ + do \ + { \ + _Static_assert(_Alignof(src) >= (bit / 8), "source potentially unaligned"); \ + _Static_assert(_Alignof(dest) >= (bit / 8), "destination potentially unaligned"); \ + DMA_COPY_UNCHECKED(dmaNum, src, dest, size, bit); \ + } while (0) +#else +#define DMA_COPY(dmaNum, src, dest, size, bit) DMA_COPY_UNCHECKED(dmaNum, src, dest, size, bit) +#endif + #define DmaCopy16(dmaNum, src, dest, size) DMA_COPY(dmaNum, src, dest, size, 16) #define DmaCopy32(dmaNum, src, dest, size) DMA_COPY(dmaNum, src, dest, size, 32) diff --git a/include/gba/syscall.h b/include/gba/syscall.h index 56cd4ba587..c922084d5f 100644 --- a/include/gba/syscall.h +++ b/include/gba/syscall.h @@ -27,10 +27,32 @@ u16 ArcTan2(s16 x, s16 y); void CpuSet(const void *src, void *dest, u32 control); +#if MODERN +// NOTE: Assumes 16-bit CpuSets unless control is a constant and has +// CPU_SET_32BIT set. +#define CpuSet(src, dest, control) \ + do \ + { \ + _Static_assert(_Alignof(src) >= __builtin_choose_expr(__builtin_constant_p(control), ((control) & CPU_SET_32BIT) ? 4 : 2, 2), "source potentially unaligned"); \ + _Static_assert(_Alignof(dest) >= __builtin_choose_expr(__builtin_constant_p(control), ((control) & CPU_SET_32BIT) ? 4 : 2, 2), "destination potentially unaligned"); \ + CpuSet(src, dest, control); \ + } while (0) +#endif + #define CPU_FAST_SET_SRC_FIXED 0x01000000 void CpuFastSet(const void *src, void *dest, u32 control); +#if MODERN +#define CpuFastSet(src, dest, control) \ + do \ + { \ + _Static_assert(_Alignof(src) >= 4, "source potentially unaligned"); \ + _Static_assert(_Alignof(dest) >= 4, "destination potentially unaligned"); \ + CpuFastSet(src, dest, control); \ + } while (0) +#endif + void BgAffineSet(struct BgAffineSrcData *src, struct BgAffineDstData *dest, s32 count); void ObjAffineSet(struct ObjAffineSrcData *src, void *dest, s32 count, s32 offset); diff --git a/include/global.h b/include/global.h index 00b08f48fa..e0cecafd07 100644 --- a/include/global.h +++ b/include/global.h @@ -845,7 +845,7 @@ struct WaldaPhrase struct TrainerNameRecord { u32 trainerId; - u8 trainerName[PLAYER_NAME_LENGTH + 1]; + u8 ALIGNED(2) trainerName[PLAYER_NAME_LENGTH + 1]; }; struct TrainerHillSave diff --git a/include/graphics.h b/include/graphics.h index 135eaa95e3..04ad64606d 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -3893,7 +3893,7 @@ extern const u32 gIntroGroudon_Gfx[]; extern const u32 gIntroGroudon_Tilemap[]; extern const u32 gIntroLegendBg_Gfx[]; extern const u32 gIntroGroudonBg_Tilemap[]; -extern const u8 gIntro3Bg_Pal[0x200]; +extern const u8 ALIGNED(2) gIntro3Bg_Pal[0x200]; extern const u32 gIntroKyogre_Gfx[]; extern const u32 gIntroKyogre_Tilemap[]; extern const u32 gIntroKyogreBg_Tilemap[]; @@ -5018,8 +5018,8 @@ extern const u32 gPokenavOptions_Gfx[]; extern const u16 gPokenavOptions_Pal[]; // Battle Factory Screen -extern const u8 gFrontierFactorySelectMenu_Gfx[]; -extern const u8 gFrontierFactorySelectMenu_Tilemap[]; +extern const u16 gFrontierFactorySelectMenu_Gfx[]; +extern const u16 gFrontierFactorySelectMenu_Tilemap[]; extern const u16 gFrontierFactorySelectMenu_Pal[]; // Object event pals diff --git a/include/item_menu.h b/include/item_menu.h index ce03cdacb8..09ddd729c4 100644 --- a/include/item_menu.h +++ b/include/item_menu.h @@ -78,7 +78,7 @@ struct BagMenu u8 numShownItems[POCKETS_COUNT]; s16 graphicsLoadState; u8 unused2[14]; - u8 pocketNameBuffer[32][32]; + u8 ALIGNED(4) pocketNameBuffer[32][32]; u8 unused3[4]; }; diff --git a/include/librfu.h b/include/librfu.h index 0026adecea..6b0bd97c71 100644 --- a/include/librfu.h +++ b/include/librfu.h @@ -329,7 +329,7 @@ struct RfuIntrStruct { union RfuPacket rxPacketAlloc; union RfuPacket txPacketAlloc; - u8 block1[0x960]; // size of librfu_intr.s binary + u8 ALIGNED(2) block1[0x960]; // size of librfu_intr.s binary struct STWIStatus block2; }; diff --git a/include/link.h b/include/link.h index f27cddc620..66dd5fecd2 100644 --- a/include/link.h +++ b/include/link.h @@ -238,7 +238,7 @@ struct BlockRequest }; extern struct Link gLink; -extern u16 gRecvCmds[MAX_RFU_PLAYERS][CMD_LENGTH]; +extern u16 ALIGNED(4) gRecvCmds[MAX_RFU_PLAYERS][CMD_LENGTH]; extern u8 gBlockSendBuffer[BLOCK_BUFFER_SIZE]; extern u16 gLinkType; extern u32 gLinkStatus; diff --git a/include/mon_markings.h b/include/mon_markings.h index fda7ad5630..dbb53f8e82 100644 --- a/include/mon_markings.h +++ b/include/mon_markings.h @@ -18,7 +18,7 @@ struct MonMarkingsMenu struct Sprite *textSprite; const u8 *frameTiles; const u16 *framePalette; - u8 windowSpriteTiles[0x1000]; + u8 ALIGNED(2) windowSpriteTiles[0x1000]; u8 unused[0x80]; u8 tileLoadState; }; diff --git a/include/palette.h b/include/palette.h index d23a658b4a..15c92cc2a7 100644 --- a/include/palette.h +++ b/include/palette.h @@ -54,9 +54,9 @@ struct PaletteFadeControl extern struct PaletteFadeControl gPaletteFade; extern u32 gPlttBufferTransferPending; -extern u8 gPaletteDecompressionBuffer[]; -extern u16 gPlttBufferUnfaded[PLTT_BUFFER_SIZE]; -extern u16 gPlttBufferFaded[PLTT_BUFFER_SIZE]; +extern u8 ALIGNED(4) gPaletteDecompressionBuffer[]; +extern u16 ALIGNED(4) gPlttBufferUnfaded[PLTT_BUFFER_SIZE]; +extern u16 ALIGNED(4) gPlttBufferFaded[PLTT_BUFFER_SIZE]; void LoadCompressedPalette(const u32 *src, u16 offset, u16 size); void LoadPalette(const void *src, u16 offset, u16 size); diff --git a/include/scanline_effect.h b/include/scanline_effect.h index ae534d9699..80d9df764d 100644 --- a/include/scanline_effect.h +++ b/include/scanline_effect.h @@ -37,7 +37,7 @@ struct ScanlineEffect extern struct ScanlineEffect gScanlineEffect; -extern u16 gScanlineEffectRegBuffers[2][0x3C0]; +extern u16 ALIGNED(4) gScanlineEffectRegBuffers[2][0x3C0]; void ScanlineEffect_Stop(void); void ScanlineEffect_Clear(void); diff --git a/src/battle_factory_screen.c b/src/battle_factory_screen.c index 0812953235..c5633ce28c 100644 --- a/src/battle_factory_screen.c +++ b/src/battle_factory_screen.c @@ -268,7 +268,7 @@ static const u8 sActionHighlightMiddle_Gfx[] = INCBIN_U8( "graphics/battle_front static const u8 sActionHighlightRight_Gfx[] = INCBIN_U8( "graphics/battle_frontier/factory_screen/action_highlight_right.4bpp"); static const u8 sMonPicBgAnim_Gfx[] = INCBIN_U8( "graphics/battle_frontier/factory_screen/mon_pic_bg_anim.4bpp"); static const u8 sMonPicBg_Tilemap[] = INCBIN_U8( "graphics/battle_frontier/factory_screen/mon_pic_bg.bin"); -static const u8 sMonPicBg_Gfx[] = INCBIN_U8( "graphics/battle_frontier/factory_screen/mon_pic_bg.4bpp"); +static const u16 sMonPicBg_Gfx[] = INCBIN_U16("graphics/battle_frontier/factory_screen/mon_pic_bg.4bpp"); static const u16 sMonPicBg_Pal[] = INCBIN_U16("graphics/battle_frontier/factory_screen/mon_pic_bg.gbapal"); static const struct SpriteSheet sSelect_SpriteSheets[] = diff --git a/src/berry_fix_program.c b/src/berry_fix_program.c index af21bb929a..26af445a08 100644 --- a/src/berry_fix_program.c +++ b/src/berry_fix_program.c @@ -117,7 +117,7 @@ static const struct WindowTemplate sBerryFixWindowTemplates[] = { DUMMY_WIN_TEMPLATE }; -static const u16 sBerryFixPalColors[] = { +static const u16 ALIGNED(4) sBerryFixPalColors[] = { RGB_WHITE, RGB_WHITE, RGB(12, 12, 12), RGB(26, 26, 25), RGB(28, 1, 1), RGB(31, 23, 14), RGB(4, 19, 1), RGB(18, 30, 18), RGB(6, 10, 25), RGB(20, 24, 30), RGB_WHITE, RGB(12, 12, 12), diff --git a/src/contest.c b/src/contest.c index 84d295f132..741a0e12db 100644 --- a/src/contest.c +++ b/src/contest.c @@ -1301,8 +1301,8 @@ static void Task_ReadyStartLinkContest(u8 taskId) static bool8 SetupContestGraphics(u8 *stateVar) { - u16 tempPalette1[16]; - u16 tempPalette2[16]; + u16 ALIGNED(4) tempPalette1[16]; + u16 ALIGNED(4) tempPalette2[16]; switch (*stateVar) { diff --git a/src/decoration.c b/src/decoration.c index 27ef85de9e..b33580d2d3 100644 --- a/src/decoration.c +++ b/src/decoration.c @@ -1916,7 +1916,7 @@ static void CopyPalette(u16 *dest, u16 pal) static void CopyTile(u8 *dest, u16 tile) { - u8 buffer[TILE_SIZE_4BPP]; + u8 ALIGNED(4) buffer[TILE_SIZE_4BPP]; u16 mode; u16 i; diff --git a/src/field_weather.c b/src/field_weather.c index 73aef3746d..bcc6a1c440 100644 --- a/src/field_weather.c +++ b/src/field_weather.c @@ -61,7 +61,7 @@ static void None_Main(void); static u8 None_Finish(void); EWRAM_DATA struct Weather gWeather = {0}; -EWRAM_DATA static u8 sFieldEffectPaletteColorMapTypes[32] = {0}; +EWRAM_DATA static u8 ALIGNED(2) sFieldEffectPaletteColorMapTypes[32] = {0}; static const u8 *sPaletteColorMapTypes; @@ -111,7 +111,7 @@ void (*const gWeatherPalStateFuncs[])(void) = // This table specifies which of the color maps should be // applied to each of the background and sprite palettes. -static const u8 sBasePaletteColorMapTypes[32] = +static const u8 ALIGNED(2) sBasePaletteColorMapTypes[32] = { // background palettes COLOR_MAP_DARK_CONTRAST, @@ -149,7 +149,7 @@ static const u8 sBasePaletteColorMapTypes[32] = COLOR_MAP_DARK_CONTRAST, }; -const u16 gFogPalette[] = INCBIN_U16("graphics/weather/fog.gbapal"); +const u16 ALIGNED(4) gFogPalette[] = INCBIN_U16("graphics/weather/fog.gbapal"); void StartWeather(void) { diff --git a/src/fieldmap.c b/src/fieldmap.c index bdacf7ab25..9534255c78 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -25,7 +25,7 @@ struct ConnectionFlags u8 east:1; }; -EWRAM_DATA static u16 sBackupMapData[MAX_MAP_DATA_SIZE] = {0}; +EWRAM_DATA static u16 ALIGNED(4) sBackupMapData[MAX_MAP_DATA_SIZE] = {0}; EWRAM_DATA struct MapHeader gMapHeader = {0}; EWRAM_DATA struct Camera gCamera = {0}; EWRAM_DATA static struct ConnectionFlags sMapConnectionFlags = {0}; diff --git a/src/graphics.c b/src/graphics.c index e8f891d8b2..3cfd47ea76 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1219,8 +1219,8 @@ const u32 gRouletteMultiplier_Gfx[] = INCBIN_U32("graphics/roulette/multiplier.4 const u16 gFrontierFactorySelectMenu_Pal[] = INCBIN_U16("graphics/battle_frontier/factory_menu1.gbapal"); const u16 gFrontierFactorySelectMenu_Pal2[] = INCBIN_U16("graphics/battle_frontier/factory_menu2.gbapal"); -const u8 gFrontierFactorySelectMenu_Gfx[] = INCBIN_U8("graphics/battle_frontier/factory_menu1.4bpp"); -const u8 gFrontierFactorySelectMenu_Gfx2[] = INCBIN_U8("graphics/battle_frontier/factory_menu2.4bpp"); +const u16 gFrontierFactorySelectMenu_Gfx[] = INCBIN_U16("graphics/battle_frontier/factory_menu1.4bpp"); +const u16 gFrontierFactorySelectMenu_Gfx2[] = INCBIN_U16("graphics/battle_frontier/factory_menu2.4bpp"); const u16 gFrontierFactorySelectMenu_Tilemap[] = INCBIN_U16("graphics/battle_frontier/factory_menu.bin"); diff --git a/src/item_menu.c b/src/item_menu.c index 00449c6ec7..223f028d02 100755 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -2429,16 +2429,16 @@ static void PrintPocketNames(const u8 *pocketName1, const u8 *pocketName2) static void CopyPocketNameToWindow(u32 a) { - u8 (* tileDataBuffer)[32][32]; + u8 (*tileDataBuffer)[32][32]; u8 *windowTileData; int b; if (a > 8) a = 8; tileDataBuffer = &gBagMenu->pocketNameBuffer; windowTileData = (u8 *)GetWindowAttribute(2, WINDOW_TILE_DATA); - CpuCopy32(tileDataBuffer[0][a], windowTileData, 0x100); // Top half of pocket name + CpuCopy32(&tileDataBuffer[0][a], windowTileData, 0x100); // Top half of pocket name b = a + 16; - CpuCopy32(tileDataBuffer[0][b], windowTileData + 0x100, 0x100); // Bottom half of pocket name + CpuCopy32(&tileDataBuffer[0][b], windowTileData + 0x100, 0x100); // Bottom half of pocket name CopyWindowToVram(WIN_POCKET_NAME, COPYWIN_GFX); } diff --git a/src/link.c b/src/link.c index 0894021b56..c51abc9526 100644 --- a/src/link.c +++ b/src/link.c @@ -78,7 +78,7 @@ bool8 gRemoteLinkPlayersNotReceived[MAX_LINK_PLAYERS]; u8 gBlockReceivedStatus[MAX_LINK_PLAYERS]; u32 gLinkFiller2; u16 gLinkHeldKeys; -u16 gRecvCmds[MAX_RFU_PLAYERS][CMD_LENGTH]; +u16 ALIGNED(4) gRecvCmds[MAX_RFU_PLAYERS][CMD_LENGTH]; u32 gLinkStatus; bool8 gLinkDummy1; // Never read bool8 gLinkDummy2; // Never read diff --git a/src/mirage_tower.c b/src/mirage_tower.c index f9806e7768..9b48ee24b7 100644 --- a/src/mirage_tower.c +++ b/src/mirage_tower.c @@ -75,7 +75,7 @@ static void Task_FossilFallAndSink(u8); static void SpriteCB_FallingFossil(struct Sprite *); static void UpdateDisintegrationEffect(u8 *, u16, u8, u8, u8); -static const u8 sBlankTile_Gfx[32] = {0}; +static const u8 ALIGNED(2) sBlankTile_Gfx[32] = {0}; static const u8 sMirageTower_Gfx[] = INCBIN_U8("graphics/misc/mirage_tower.4bpp"); static const u16 sMirageTowerTilemap[] = INCBIN_U16("graphics/misc/mirage_tower.bin"); static const u16 sFossil_Pal[] = INCBIN_U16("graphics/object_events/pics/misc/fossil.gbapal"); // Unused diff --git a/src/palette.c b/src/palette.c index 6ce47a4933..43a4c213c7 100644 --- a/src/palette.c +++ b/src/palette.c @@ -64,7 +64,7 @@ static EWRAM_DATA struct PaletteStruct sPaletteStructs[NUM_PALETTE_STRUCTS] = {0 EWRAM_DATA struct PaletteFadeControl gPaletteFade = {0}; static EWRAM_DATA u32 sFiller = 0; static EWRAM_DATA u32 sPlttBufferTransferPending = 0; -EWRAM_DATA u8 gPaletteDecompressionBuffer[PLTT_SIZE] = {0}; +EWRAM_DATA u8 ALIGNED(2) gPaletteDecompressionBuffer[PLTT_SIZE] = {0}; static const struct PaletteStructTemplate sDummyPaletteStructTemplate = { .id = 0xFFFF, diff --git a/src/pokedex_area_region_map.c b/src/pokedex_area_region_map.c index da50f8c688..cd2975473a 100644 --- a/src/pokedex_area_region_map.c +++ b/src/pokedex_area_region_map.c @@ -8,7 +8,7 @@ static EWRAM_DATA u8 *sPokedexAreaMapBgNum = NULL; -static const u16 sPokedexAreaMap_Pal[] = INCBIN_U16("graphics/pokedex/region_map.gbapal"); +static const u16 ALIGNED(4) sPokedexAreaMap_Pal[] = INCBIN_U16("graphics/pokedex/region_map.gbapal"); static const u32 sPokedexAreaMap_Gfx[] = INCBIN_U32("graphics/pokedex/region_map.8bpp.lz"); static const u32 sPokedexAreaMap_Tilemap[] = INCBIN_U32("graphics/pokedex/region_map.bin.lz"); static const u32 sPokedexAreaMapAffine_Gfx[] = INCBIN_U32("graphics/pokedex/region_map_affine.8bpp.lz"); diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 99b0dae0e7..9db0d77c6c 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -550,8 +550,8 @@ struct PokemonStorageSystemData u16 *displayMonTilePtr; struct Sprite *displayMonSprite; u16 displayMonPalBuffer[0x40]; - u8 tileBuffer[MON_PIC_SIZE * MAX_MON_PIC_FRAMES]; - u8 itemIconBuffer[0x800]; + u8 ALIGNED(4) tileBuffer[MON_PIC_SIZE * MAX_MON_PIC_FRAMES]; + u8 ALIGNED(4) itemIconBuffer[0x800]; u8 wallpaperBgTilemapBuffer[0x1000]; u8 displayMenuTilemapBuffer[0x800]; }; diff --git a/src/pokenav_conditions_gfx.c b/src/pokenav_conditions_gfx.c index e382cbf699..9f4b2db612 100644 --- a/src/pokenav_conditions_gfx.c +++ b/src/pokenav_conditions_gfx.c @@ -116,10 +116,12 @@ static const LoopedTask sLoopedTaskFuncs[] = [CONDITION_FUNC_CLOSE_MARKINGS] = LoopedTask_CloseMonMarkingsWindow }; +typedef u8 ALIGNED(4) TilemapBuffer[BG_SCREEN_SIZE]; + struct Pokenav_ConditionMenuGfx { u32 loopedTaskId; - u8 tilemapBuffers[3][BG_SCREEN_SIZE]; + TilemapBuffer tilemapBuffers[3]; u8 filler[2]; u8 partyPokeballSpriteIds[PARTY_SIZE + 1]; u32 (*callback)(void); diff --git a/src/pokenav_region_map.c b/src/pokenav_region_map.c index e589e28187..f81ff42966 100755 --- a/src/pokenav_region_map.c +++ b/src/pokenav_region_map.c @@ -35,7 +35,7 @@ struct Pokenav_RegionMapGfx u32 loopTaskId; u16 infoWindowId; struct Sprite *cityZoomTextSprites[3]; - u8 tilemapBuffer[BG_SCREEN_SIZE]; + u8 ALIGNED(2) tilemapBuffer[BG_SCREEN_SIZE]; u8 cityZoomPics[NUM_CITY_MAPS][200]; }; diff --git a/src/rayquaza_scene.c b/src/rayquaza_scene.c index c984dfec8a..cacadf5280 100644 --- a/src/rayquaza_scene.c +++ b/src/rayquaza_scene.c @@ -60,10 +60,12 @@ enum #define MAX_SMOKE 10 +typedef u8 ALIGNED(4) TilemapBuffer[BG_SCREEN_SIZE]; + struct RayquazaScene { MainCallback exitCallback; - u8 tilemapBuffers[4][BG_SCREEN_SIZE]; + TilemapBuffer tilemapBuffers[4]; u16 unk; // never read u8 animId; bool8 endEarly; diff --git a/src/scanline_effect.c b/src/scanline_effect.c index dc3ca03f4a..684c89546a 100644 --- a/src/scanline_effect.c +++ b/src/scanline_effect.c @@ -13,7 +13,7 @@ static void CopyValue32Bit(void); // Per-scanline register values. // This is double buffered so that it can be safely written to at any time // without overwriting the buffer that the DMA is currently reading -EWRAM_DATA u16 gScanlineEffectRegBuffers[2][0x3C0] = {0}; +EWRAM_DATA u16 ALIGNED(4) gScanlineEffectRegBuffers[2][0x3C0] = {0}; EWRAM_DATA struct ScanlineEffect gScanlineEffect = {0}; EWRAM_DATA static bool8 sShouldStopWaveTask = FALSE; diff --git a/src/util.c b/src/util.c index 32f31a26dd..ab5603b867 100644 --- a/src/util.c +++ b/src/util.c @@ -158,7 +158,7 @@ void CopySpriteTiles(u8 shape, u8 size, u8 *tiles, u16 *tilemap, u8 *output) { u8 x, y; s8 i, j; - u8 xflip[32]; + u8 ALIGNED(4) xflip[32]; u8 h = sSpriteDimensions[shape][size][1]; u8 w = sSpriteDimensions[shape][size][0]; From f8c0f91c66eb7cea4728286094c2d06303440c97 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Mon, 31 Jul 2023 15:33:14 -0400 Subject: [PATCH 19/43] Using RGB color constants where appropiate --- src/battle_anim_effects_1.c | 18 +++++++++--------- src/battle_anim_effects_2.c | 2 +- src/battle_anim_effects_3.c | 2 +- src/battle_anim_ghost.c | 2 +- src/battle_anim_normal.c | 2 +- src/battle_anim_throw.c | 10 +++++----- src/battle_anim_utility_funcs.c | 4 ++-- src/berry_crush.c | 8 ++++---- src/cable_car.c | 6 +++--- src/contest_painting.c | 2 +- src/slot_machine.c | 14 +++++++------- 11 files changed, 35 insertions(+), 35 deletions(-) diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index 1d9a12cafb..e328849407 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -1045,10 +1045,10 @@ const struct SpriteTemplate gSilverWindSmallSparkSpriteTemplate = const u16 gMagicalLeafBlendColors[] = { - RGB(31, 0, 0), + RGB_RED, RGB(31, 19, 0), - RGB(31, 31, 0), - RGB(0, 31, 0), + RGB_YELLOW, + RGB_GREEN, RGB(5, 14, 31), RGB(22, 10, 31), RGB(22, 21, 31), @@ -1971,10 +1971,10 @@ const struct SpriteTemplate gWavyMusicNotesSpriteTemplate = const u16 gParticlesColorBlendTable[][6] = { - {ANIM_TAG_MUSIC_NOTES, RGB(31, 31, 31), RGB(31, 26, 28), RGB(31, 22, 26), RGB(31, 17, 24), RGB(31, 13, 22)}, - {ANIM_TAG_BENT_SPOON, RGB(31, 31, 31), RGB(25, 31, 26), RGB(20, 31, 21), RGB(15, 31, 16), RGB(10, 31, 12)}, - {ANIM_TAG_SPHERE_TO_CUBE, RGB(31, 31, 31), RGB(31, 31, 24), RGB(31, 31, 17), RGB(31, 31, 10), RGB(31, 31, 3)}, - {ANIM_TAG_LARGE_FRESH_EGG, RGB(31, 31, 31), RGB(26, 28, 31), RGB(21, 26, 31), RGB(16, 24, 31), RGB(12, 22, 31)}, + {ANIM_TAG_MUSIC_NOTES, RGB_WHITE, RGB(31, 26, 28), RGB(31, 22, 26), RGB(31, 17, 24), RGB(31, 13, 22)}, + {ANIM_TAG_BENT_SPOON, RGB_WHITE, RGB(25, 31, 26), RGB(20, 31, 21), RGB(15, 31, 16), RGB(10, 31, 12)}, + {ANIM_TAG_SPHERE_TO_CUBE, RGB_WHITE, RGB(31, 31, 24), RGB(31, 31, 17), RGB(31, 31, 10), RGB(31, 31, 3)}, + {ANIM_TAG_LARGE_FRESH_EGG, RGB_WHITE, RGB(26, 28, 31), RGB(21, 26, 31), RGB(16, 24, 31), RGB(12, 22, 31)}, }; const struct SpriteTemplate gFastFlyingMusicNotesSpriteTemplate = @@ -4343,7 +4343,7 @@ static void AnimLockOnTarget_Step4(struct Sprite *sprite) sprite->data[1] = 0; } - BlendPalettes(GetBattlePalettesMask(TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE), sprite->data[1], RGB(31, 31, 31)); + BlendPalettes(GetBattlePalettesMask(TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE), sprite->data[1], RGB_WHITE); if (sprite->data[1] == 16) { int pal; @@ -5178,7 +5178,7 @@ void AnimTask_DoubleTeam(u8 taskId) for (i = 1; i < 16; i++) gPlttBufferUnfaded[r3 + i] = gPlttBufferUnfaded[r4 + i]; - BlendPalette(r3, 16, 11, RGB(0, 0, 0)); + BlendPalette(r3, 16, 11, RGB_BLACK); task->data[3] = 0; i = 0; while (i < 2 && (obj = CloneBattlerSpriteWithBlend(0)) >= 0) diff --git a/src/battle_anim_effects_2.c b/src/battle_anim_effects_2.c index 89696d7dd3..c10bc02b8e 100755 --- a/src/battle_anim_effects_2.c +++ b/src/battle_anim_effects_2.c @@ -3114,7 +3114,7 @@ static void AnimTask_FakeOut_Step2(u8 taskId) { gTasks[taskId].data[11] = 0x88; SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_LIGHTEN); - BlendPalettes(GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE), 16, RGB(31, 31, 31)); + BlendPalettes(GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE), 16, RGB_WHITE); } else if (gTasks[taskId].data[10] > 4) { diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c index 75a6ee22d9..6c5fd59c86 100755 --- a/src/battle_anim_effects_3.c +++ b/src/battle_anim_effects_3.c @@ -3896,7 +3896,7 @@ static void AnimTask_FacadeColorBlend_Step(u8 taskId) } else { - BlendPalette(gTasks[taskId].data[2], 16, 0, RGB(0, 0, 0)); + BlendPalette(gTasks[taskId].data[2], 16, 0, RGB_BLACK); DestroyAnimVisualTask(taskId); } } diff --git a/src/battle_anim_ghost.c b/src/battle_anim_ghost.c index 228ba12cee..fed1325bc3 100644 --- a/src/battle_anim_ghost.c +++ b/src/battle_anim_ghost.c @@ -1005,7 +1005,7 @@ static void AnimTask_CurseStretchingBlackBg_Step1(u8 taskId) top = 0; bottom = 112; selectedPalettes = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE); - BeginNormalPaletteFade(selectedPalettes, 0, 16, 16, RGB(0, 0, 0)); + BeginNormalPaletteFade(selectedPalettes, 0, 16, 16, RGB_BLACK); gTasks[taskId].func = AnimTask_CurseStretchingBlackBg_Step2; } diff --git a/src/battle_anim_normal.c b/src/battle_anim_normal.c index 1c90a3d641..94bbb6ee4e 100644 --- a/src/battle_anim_normal.c +++ b/src/battle_anim_normal.c @@ -709,7 +709,7 @@ static void AnimTask_FlashAnimTagWithColor_Step2(u8 taskId) if (!gPaletteFade.active) { selectedPalettes = 1 << (IndexOfSpritePaletteTag(gTasks[taskId].data[7]) + 16); - BeginNormalPaletteFade(selectedPalettes, 0, 0, 0, RGB(0, 0, 0)); + BeginNormalPaletteFade(selectedPalettes, 0, 0, 0, RGB_BLACK); DestroyAnimVisualTask(taskId); } } diff --git a/src/battle_anim_throw.c b/src/battle_anim_throw.c index 7a7a423834..e7c7a560b2 100755 --- a/src/battle_anim_throw.c +++ b/src/battle_anim_throw.c @@ -384,7 +384,7 @@ const u16 gBallOpenFadeColors[] = [BALL_PREMIER] = RGB(31, 9, 10), // Garbage data - RGB(0, 0, 0), + RGB_BLACK, RGB(1, 16, 0), RGB(3, 0, 1), RGB(1, 8, 0), @@ -1309,12 +1309,12 @@ static void SpriteCB_Ball_Capture_Step(struct Sprite *sprite) if (sprite->sTimer == 40) { PlaySE(SE_RG_BALL_CLICK); - BlendPalettes(0x10000 << sprite->oam.paletteNum, 6, RGB(0, 0, 0)); + BlendPalettes(0x10000 << sprite->oam.paletteNum, 6, RGB_BLACK); MakeCaptureStars(sprite); } else if (sprite->sTimer == 60) { - BeginNormalPaletteFade(0x10000 << sprite->oam.paletteNum, 2, 6, 0, RGB(0, 0, 0)); + BeginNormalPaletteFade(0x10000 << sprite->oam.paletteNum, 2, 6, 0, RGB_BLACK); } else if (sprite->sTimer == 95) { @@ -1352,7 +1352,7 @@ static void SpriteCB_Ball_FadeOut(struct Sprite *sprite) SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0)); paletteIndex = IndexOfSpritePaletteTag(sprite->template->paletteTag); - BeginNormalPaletteFade(1 << (paletteIndex + 0x10), 0, 0, 16, RGB(31, 31, 31)); + BeginNormalPaletteFade(1 << (paletteIndex + 0x10), 0, 0, 16, RGB_WHITE); sprite->sState++; break; case 1: @@ -2041,7 +2041,7 @@ u8 LaunchBallFadeMonTask(bool8 unfadeLater, u8 spritePalNum, u32 selectedPalette gTasks[taskId].func = Task_FadeMon_ToNormal; } - BeginNormalPaletteFade(selectedPalettes, 0, 0, 16, RGB(31, 31, 31)); + BeginNormalPaletteFade(selectedPalettes, 0, 0, 16, RGB_WHITE); return taskId; } diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c index b399bd5b5c..afc3d61ce4 100644 --- a/src/battle_anim_utility_funcs.c +++ b/src/battle_anim_utility_funcs.c @@ -133,10 +133,10 @@ void AnimTask_SetCamouflageBlend(u8 taskId) gBattleAnimArgs[4] = RGB(14, 9, 3); break; case BATTLE_TERRAIN_BUILDING: - gBattleAnimArgs[4] = RGB(31, 31, 31); + gBattleAnimArgs[4] = RGB_WHITE; break; case BATTLE_TERRAIN_PLAIN: - gBattleAnimArgs[4] = RGB(31, 31, 31); + gBattleAnimArgs[4] = RGB_WHITE; break; } diff --git a/src/berry_crush.c b/src/berry_crush.c index 812ca19344..c0a75b1994 100755 --- a/src/berry_crush.c +++ b/src/berry_crush.c @@ -2898,13 +2898,13 @@ static u32 Cmd_FinishGame(struct BerryCrushGame *game, u8 *args) case 0: game->gameState = STATE_FINISHED; PlaySE(SE_M_STRENGTH); - BlendPalettes(PALETTES_ALL, 8, RGB(31, 31, 0)); + BlendPalettes(PALETTES_ALL, 8, RGB_YELLOW); game->gfx.counter = 2; break; case 1: if (--game->gfx.counter != (u8)-1) return 0; - BlendPalettes(PALETTES_ALL, 0, RGB(31, 31, 0)); + BlendPalettes(PALETTES_ALL, 0, RGB_YELLOW); game->gfx.vibrationIdx = 4; game->gfx.counter = 0; game->gfx.numVibrations = sIntroOutroVibrationData[game->gfx.vibrationIdx][0]; @@ -2955,13 +2955,13 @@ static u32 Cmd_HandleTimeUp(struct BerryCrushGame *game, u8 *args) case 0: game->gameState = STATE_TIMES_UP; PlaySE(SE_FAILURE); - BlendPalettes(PALETTES_ALL, 8, RGB(31, 0, 0)); + BlendPalettes(PALETTES_ALL, 8, RGB_RED); game->gfx.counter = 4; break; case 1: if (--game->gfx.counter != (u8)-1) return 0; - BlendPalettes(PALETTES_ALL, 0, RGB(31, 0, 0)); + BlendPalettes(PALETTES_ALL, 0, RGB_RED); game->gfx.counter = 0; break; case 2: diff --git a/src/cable_car.c b/src/cable_car.c index 7d18df7b7f..8a666a536e 100644 --- a/src/cable_car.c +++ b/src/cable_car.c @@ -237,7 +237,7 @@ void CableCar(void) { LockPlayerFieldControls(); CreateTask(Task_LoadCableCar, 1); - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB(0, 0, 0)); + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); } static void CB2_LoadCableCar(void) @@ -341,7 +341,7 @@ static void CB2_LoadCableCar(void) gMain.state++; break; case 8: - BeginNormalPaletteFade(PALETTES_ALL, 3, 16, 0, RGB(0, 0, 0)); + BeginNormalPaletteFade(PALETTES_ALL, 3, 16, 0, RGB_BLACK); FadeInNewBGM(MUS_CABLE_CAR, 1); SetBgRegs(TRUE); gMain.state++; @@ -459,7 +459,7 @@ static void Task_CableCar(u8 taskId) if (sCableCar->timer == 570) { sCableCar->state = 3; - BeginNormalPaletteFade(PALETTES_ALL, 3, 0, 16, RGB(0, 0, 0)); + BeginNormalPaletteFade(PALETTES_ALL, 3, 0, 16, RGB_BLACK); FadeOutBGM(4); } break; diff --git a/src/contest_painting.c b/src/contest_painting.c index a1a8a51975..30ca51c966 100644 --- a/src/contest_painting.c +++ b/src/contest_painting.c @@ -248,7 +248,7 @@ static void HoldContestPainting(void) if ((JOY_NEW(A_BUTTON)) || (JOY_NEW(B_BUTTON))) { sHoldState++; - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB(0, 0, 0)); + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); } if (sVarsInitialized) diff --git a/src/slot_machine.c b/src/slot_machine.c index 581e5c78e0..5b058b9702 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -1285,7 +1285,7 @@ static void Task_SlotMachine(u8 taskId) // SLOTTASK_UNFADE static bool8 SlotTask_UnfadeScreen(struct Task *task) { - BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB(0, 0, 0)); + BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); LoadPikaPowerMeter(sSlotMachine->pikaPowerBolts); sSlotMachine->state++; // SLOTTASK_WAIT_FADE return FALSE; @@ -1731,7 +1731,7 @@ static bool8 SlotTask_EndGame(struct Task *task) { SetCoins(sSlotMachine->coins); TryPutFindThatGamerOnAir(GetCoins()); - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB(0, 0, 0)); + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); sSlotMachine->state++; // SLOTTASK_FREE return FALSE; } @@ -3904,7 +3904,7 @@ static void Task_InfoBox(u8 taskId) static void InfoBox_FadeIn(struct Task *task) { - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB(0, 0, 0)); + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); task->tState++; } @@ -3928,7 +3928,7 @@ static void InfoBox_AddText(struct Task *task) { AddTextPrinterParameterized3(1, FONT_NORMAL, 2, 5, sColors_ReeltimeHelp, 0, gText_ReelTimeHelp); CopyWindowToVram(1, COPYWIN_FULL); - BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB(0, 0, 0)); + BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); task->tState++; } @@ -3940,7 +3940,7 @@ static void InfoBox_WaitInput(struct Task *task) ClearWindowTilemap(1); CopyWindowToVram(1, COPYWIN_MAP); RemoveWindow(1); - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB(0, 0, 0)); + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); task->tState++; } } @@ -3961,7 +3961,7 @@ static void InfoBox_CreateDigitalDisplay(struct Task *task) static void InfoBox_LoadPikaPowerMeter(struct Task *task) { LoadPikaPowerMeter(sSlotMachine->pikaPowerBolts); - BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB(0, 0, 0)); + BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); task->tState++; } @@ -7853,7 +7853,7 @@ static const u16 sUnusedColors[] = RGB(27, 27, 27), RGB(8, 11, 26), RGB(11, 21, 13), - RGB(31, 31, 31), + RGB_WHITE, RGB(16, 26, 21), RGB(0, 22, 31), RGB(26, 21, 0), From 16c0be7ed26528b6bc485a0085c7bb97add15a1b Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 31 Jul 2023 20:00:34 -0400 Subject: [PATCH 20/43] Fix some frontier gfx, adjacent cleanup --- graphics/battle_frontier/factory_menu1.png | Bin 309 -> 0 bytes graphics/battle_frontier/factory_menu2.png | Bin 234 -> 0 bytes .../menu.bin} | Bin .../battle_frontier/factory_screen/menu.png | Bin 0 -> 3876 bytes graphics/battle_frontier/tourney.pal | 259 --------- graphics/battle_frontier/tourney_tree.png | Bin 983 -> 7347 bytes include/constants/trainer_hill.h | 2 +- include/graphics.h | 6 +- src/battle_dome.c | 550 +++++++++--------- src/battle_factory.c | 12 +- src/battle_factory_screen.c | 138 +++-- src/battle_pike.c | 6 + src/battle_pyramid.c | 6 +- src/battle_tower.c | 8 +- src/frontier_util.c | 4 +- src/graphics.c | 12 +- src/start_menu.c | 37 +- 17 files changed, 428 insertions(+), 612 deletions(-) delete mode 100644 graphics/battle_frontier/factory_menu1.png delete mode 100644 graphics/battle_frontier/factory_menu2.png rename graphics/battle_frontier/{factory_menu.bin => factory_screen/menu.bin} (100%) create mode 100644 graphics/battle_frontier/factory_screen/menu.png delete mode 100644 graphics/battle_frontier/tourney.pal diff --git a/graphics/battle_frontier/factory_menu1.png b/graphics/battle_frontier/factory_menu1.png deleted file mode 100644 index 52f073ff3081c164655a460c9fdc5b9b13800c8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 309 zcmeAS@N?(olHy`uVBq!ia0vp^JAjyjg&D-UuF(jj3<7*YT!AzY{J+PbscGrx7!(zi z1QEd`*Ia$pyk@VEhuRXL+yPG)#}JK)t&=YDHXHD;Zf@G^sB6fO)MCV#_3b`GC+Cae z9QJUor?o6eZyq~nvMMf7I-*qdbX(H<(*5qG!e_g#hY(&Sq&{-^ot+PB^w7na%?wC}P_u52m) z=JV*)m8+Erd|xX*E60c@oA0RTUwQgO4Zp?l`{$Yqo2J}8x_0Nv;1!#Fm_IL>=hwr} j_i(eRIWt#jj>tdOyzJ@QX4aQ|1o_j`)z4*}Q$iB}f>3vE diff --git a/graphics/battle_frontier/factory_menu2.png b/graphics/battle_frontier/factory_menu2.png deleted file mode 100644 index 0d103927e439ad225fe8028b15a5a095cedfccca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 234 zcmeAS@N?(olHy`uVBq!ia0vp^5kSnr!VDz)O;tYtDT4r?5LX}#2TRthdH3zzy=Tw% z9zELJ+zb@o`|R7AtIwwFJ=?ry@Bjb*fg-;a&+q|KrJgR1ArezdCv4fSnm)b$^qH7L zQ+7<;`snoTj>QgBZf|Oi}@n#9S*29kF-wJ3-9F`v>A|7j%ssf{DnXzM3t X!}{xT85zR*AQyYO`njxgN@xNAEY@4# diff --git a/graphics/battle_frontier/factory_menu.bin b/graphics/battle_frontier/factory_screen/menu.bin similarity index 100% rename from graphics/battle_frontier/factory_menu.bin rename to graphics/battle_frontier/factory_screen/menu.bin diff --git a/graphics/battle_frontier/factory_screen/menu.png b/graphics/battle_frontier/factory_screen/menu.png new file mode 100644 index 0000000000000000000000000000000000000000..5271973b31090763aa5dc7bc467549e706fde5a3 GIT binary patch literal 3876 zcmV+<58LpGP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3&ck|eneME`jT9f9Bm@;KaJrW@$^dWgubUT4fk zrpoEcC}so~INn~c07Ruk6lg}CfK^H*f3$RRXx3aysI|7LwbxN+%dNE9TGQqnH8pF| zs!dh94xK&s(ra&Bd+(#qkw%8X>S#m5=wpmIS#&b>EuKCpLR5ye#V(sE~#|Ot+!ph{f;}0T(fM&sx?#VHf(;O_CfV$)Z`cB z{vI{?pyr5`=RW<88pEpJrVyu->X?C8Dgxr_2$0apF^gSFNsgRj7Kam9O`s;#!8ziH zfnd3ks>v62-;w)U+(Iq?2)FcC$OVV)|AAa^=sw8(j@utlJM&SL`~c)t=rN7iAU1Be zeI9OdvB{w0R|XfgXUsZ^pne4fsX-%l-@m75uFutmYDYHfWA1zxg<#`m(`SO5)=2gA zUFT7Yn>n~{%Rgfa{H8qTu;=d{*z@qq+v`5{*#X4Qrfy@07i-%jOpuMU?7tV68CA!Nro z`|eB%O4{mLQO8)1yzi=I853E}Fj}|LN6hT0jH|--O-MR3nR?fmLp#qD-w*6V;@&fN z@5D&fJvojR`o=}9!Nz;8m*EuK;I_i%)$U0IvXRi9*vQoG$ez@FZ}!V#GCW(-4D%K% zGj}4NsjhzNy=$H0nO1EZ>CbSQHO+DdsH|*@vm=0(=R|osMX`3s>|u7T&f{#pN$r;c zO;IT}>Eo=`DOAq8J5|(DpPasx-h>=0gCZw;dPmnbHSyRC>Xbn1%$F){gIMdnHz~d5?OXBKgZ(udo9XZXxgo_Qr zaRq8DJsjAEdmyhxVCV^`{(RW}qRo@eOyC~SRZ6}5cW zW+r6N1L4C5Ng=ho?O9~6JgSjMy+nLa=T!;z z#zc&7$1#`^y4!oP>4R?icmlGWi8rEnp1?xp^R@62QZmU<^)Npf*RxTvWuH*gdLatp@T7_o=a#i%5JAN z>S(KuZH4T{NLhOL3~YsUiMl2*h;#+HGV%5s-HGqHkV7LM{FZinXjkidw9lQzJ5LO#)$bG$Bx z=sj21+EZQ$=d75kfrk-}x7tijvPlk-@>eUx9B5!1MI;W0IBixOA!T88yUyybuHbj2d zZr-tu%+@nF1t4<6M8%L=#WGfc=CdJ)c@o=(RwFU!33y6sH(4$IA5C`7ByGZkKq)ok zeJ;9lV1rn&aMWZ)4?A{|EQg}eRQGy!UR4Ny-C!Lm?FeaJCz(X=oJSA%iVor}mcmI| zBvneK>4)94AYzM<49KZ+J1&5#_IBG7oeJG(x3}006QS#`SnpBMiQjM8I|$Do&WVB! z3<>F*H_q_Rlkr4r1bTsIqG)c74kjOi0hKAW*a~)yiD)q&p~6sQ{JQi-v*WA@m*N8` z=0!qAv>|2fsM{&DwotdisY~*3BuTfDiY2nNxT@o$uRRvWqexH^aUzOA1ouIwVVjm+ zXn#7MB3&lO!*2g#D`8voy1SyoDR3|T*kBpUglf4JOe-3wErfr!M#(=Z0$CuuZ$lxK zc5LoNiWvRL#{bW>CeXj z;bynr*D|s*%R`zQHf)@}-s4|vAsH#)XbTTrI4c50(?i=6A8L2co#b=#AdlW#i5I9x zCQg)iP4O;hD3)t@`kG+UvExEqHg$uP9;42e4XZ zuk^XwuZgTTw*k}}S4FSa|V9n_3_{ENhf zA)m~PJz2d3|9%m&Nf_#$L?^ujlfuSyj^K#bF9i*74JCb`G>w@0Tea67#Pg2z4}~U$HZAIF=ZK zOV0b)x>L;#2d9Y_EG010qNS#tmYE+YT{E+YYW zr9XB6000McNliru=LQ`TE;cc_5Yqqv0WC>HK~zY`t(40WgCGn=h03SVL>@7d8=$yJ114fb5p3KtokU_Ls${}sLZsI4GkS@HOcXQuU!?K~ zGrEa{Ot=Y4C2vPr1ScjD*<+B1n2CIPu=lhGj4zsTR8m5DocCfp2YeIGIcu#G@ZGi+ z5lynlhw&azdd!Fz`bWJYkv&j)INu&7Qm$!jl11=Khlzl~1_Y0(r71TTH_=%Hzju@f zMp1|y9@cH-lJ*Eaewv+>lZm7y$s)nS3La5JiN}wagt2ppM319F64`AixDiSbW}+&S mI5J9PC&2#n1yYxFU6CK66ISaKn50Vp0000j?)BQ$IM-4obIJ?Ci0kHhO+?dt07vQ7+IdMOFR5_`@Uc9 zfMWK-GjDc7?xlDs6@8wx+})kVy-0D(jBuIT?O`Q$YT>`qN2wOb>%=3K%AmWW@E?v_{U^Ca z`@KFbc%G3=&rYt+YB$3pZa4#ULtkCUC5%e%_$ys=s*(a7Pi=?v^xt%=q3I*Od#fQ?Qn*F6>w%$cn~kN8=#0o)$?$DHa+?e8n&VFw zVFjN4Ct+Gm9I?l7y{)kG)0-s50~7bF9LKrvV**s~2kVnCnJBPefSu4vPBe!ZlY6^v z0H1{xJ<*l(^tY=`DVkQnKIa*BaU@5!VevRhX00UjmEVQXydn$B^Bj%mXK8lv;QCT} zLeZs)jFC^&hSP1IXf6J7R^=N^X;3e>&oNIF`^-LB{g%vM{wZ6NuX<^rp^*_kMReKC zrM|Okyev&k9J$_8*?HJ^R6bD>a#+2J#Qh~an#7tWJylovT>P%;&arT9T4>MhGoPk& z{9_aI;9O%9#1j1c*?!OBZ2x{Ag2T0?={{fd#t?O1B6>4bC`36Me#Pzja`x&DpIhS1 z6b+5OcYY{fB{G zIs4hC{^&Q;G}VW>y;djZMNKmS)MKUC^+b;sCp@Fl=w3KCdrjb0p0@|g{l1tI_JmW2 z!27iuH%i-08n0*g$;}9UG1gzeQyUBF7DY}qq0#7Z;>gg~&?cc(5nX!2;`O#iBaCj8Dh2Qr!g+*qG2Gn{mt>t_XR_D1J}ae07lMJOtHus|w@S1@PXY(iLFaw8Dc z7HO%u29sJ9`DVAP`z={N)Ww2(xrCzU3niPSsEyy!4E+854wf5oHa&vToH5*LOj2cg z$ZdA_h#}-v%SvWPAZNz6IV{eX!wHD(gPR)>OJ66V<^LfhZc0$~o95oM@Hf72C) zjT>SUsXq40n3NZ-)5;lhYZu|p>mn$r`h85s-rOsD)S!m>e8lr+P%i8BkCv^ipQlLZ z8#U|a%w2&z?zT%&R)fcKH<01k(Lm()?( zRawuYi%mKB;adf5{AigPM0lZg?qEMF-==7)v~F4VZto&P#QWjKCj%ny0$rcy^&g1F z5;=*%xM-9|2m=76*AqIj1|xvH<)M+!^Sz%cYzRhi3{qG_O;S@nAEvM5#o7!~I}=^#c);s?a^u!fBbQV$8mT`A;!5g_WN03@54;t-Xe0#A)|$ z4`pM&Y+U72Y-n8+>`Me;`&R@Xs=(X01ZAp{{76{1!B()mbCFHDFw3@2dy~dlRx+ll zzN`56Ex`a1OgENaX4mXKWdB!x@|dQ*5j|-goge~#=0|u-fFyWtK9wbEiUB#0!5_xI zqDExzAdMcEd-@+eQ+=Nr($5OJaSu0NA61;5a}pa+W7XXICs2gRH`akV6W0;ej1h}l z^}8pQ`Gzs!BEt2Lr)`5oq*aaOQ+fv*#^6?iZ6`NF2liS+0d>xj^x<5rXB(gK*$2x$ zzntc=Q*`m}NO+|qL(y#yPuL8s4w_Su2$FL@1NSiNH%cCIKIP1T3Fg$abBJ3Cd-s)m zH|tMxC22m4nxxnFyoivYv!8e5dY>pqA^n69k4fJ-G}2QLL~?s-&$C_5(T7{cPgR8SzDFNC0|wtT>a+wi9{&Ldx!&8 zys4WQai4K3bN3+G`v~IaoheAS-(%$UEHwsi{TQhPerA~co`iBgj|MC$FEtxg0B|tjuLpLIi1Kqx%$Wz@WuVD%} z!MK^&F$%pGGZL9wgU?gu`FJYNd)&W`l#dnv$gL1qVK z32m&?gOs3h(NuF2oQ#o*T*mgVw5%KG{j5Tpuj_Hr3;Nkf1 zB4~X2|FSTZIP%@lKfNYVW}ks-8-4F9T^EUvU(e((t&Z;t-^b~-}@D-OlFSKM6qIj*wRcX5n-`a zw>73cd);!*md2A{RCy1Q41?3u*IqNeF$;7mvAnzEX{sa(YlF;?Z~ihWce5vLJ~OwH z8LJhem_D^fJXbB>AJ%(W0ch|$qhyTxY+kY>by7f#z@K{9wo+$kGax7^+8u%Sl4cTpuQ7u3NT8SxO))K$k373SPng{qZ@S7a? z{lu_HFc1ep!lXQBD7Y={BTH!1MLiYW>AAw1wb{j8rB@xL<R+o4_^n;B$3tnG2 z=pQ=>q?)4y7@&^X0`Oe3*p)XFpR2XSuA2C>;wu8Ddk!j{Jm~mOiT){WRsY=8eXXkh z=%Xt$18tQmmX!VI<&s|}2kqn6leROLLVW%jMg?Nk91+I#qk%=$e-tVg?gI6ntVfT% z%Al*3bLHonA28w)c4)WjiHE)j%lR!{K=>CrY*f%|zakf{uM`%KQX$Nb^BjwB{}hKq zYCO}yOIeeaum|8*yvAf`X3(YL7*Ar^UR$XY>=Axa(tp0XU}^h9NY@~tck5!&TID0F zIyK`>G1JeMgbZ3nh+|NE`e(;e>4VTSl;~~$>iu$Q^2(K{sTVk1{34^8)6XD<1kxr~U0xoS^r`Gy9Z1(xjwIe7+=M#cX;~zp}c$x;;++G%v(< zQGnz@HHXWtl&*1N+Ad+o3S>SUmxq;*KP{j<{QXpY=Ft#Wt5prDB`#Q8!-!*Yn4+iu z* z#%$W*rmv{Na(ow+>-0t@C-62W*A{l|(D*QnNfq9-H{$O4Z(K z=6WMf1M#|bT)w_tP9EesC>K?+LWaBRqI3(c`uLHDEzVQ&YsE~~T1cprVSyRlAa=9u zU693_Px&vRRYGv=%IrwMI_H4rrFaE{=R zuQkVUHlC0bVQ;CWc=|))Bj8}VbubwngZ8CLv8cjg!@!?dp#trRC_LT!o5cp^ANtp?XBC!`&CX#1xavrZaE7CJg@#d^HkI-k!BM z?8$MD$Q#NJs!%UVVbR*ge}3&Uq`QGmJuAG;%v+YYZ_NayzU6i-NI6tUu9RtnMF-D(zaieVWcp6=G z?eazJKslHG-1ikPX(Pw|+DHxKA2zN~)82(<&X4WV)n5|fww1o_T~NwV-tP-69wWkO z(FFzh9`Z;=Qdf)R1k-m}`U)&MzkMVKt~h;DKcje0B?zrww;`06CbQ&hPA0EEuJDs! zwDA`jwtiv&e+~c_n$9BCPl+x|-xV1C&6k+?yI}g&xRAoshO(*uqpKZGn#x<5qH$!}q^b>gdq`Er^e?Zq$UZ%O!FyVKce)TC@~ z1)iFEW=UzDe=*?9foJtEpAggIa*@8~UUr~AilNJr%Cyshrg!sB8`pTlns%ukv3r-u zriPTwRSp-^G!&Ha*2lN|Q;YUl=oP0y8zrdngll#rLpX0z6Y0G;)yqy|68?ZKOcPJ# zm%fkwz7(<8JRWk@Dq&n05eqDzdpANm2{TGYuueyPUg)(bQW7B)(xSzSS=DEM55HDY ztdTPO1T6r~zZHyN$s-6AVZ+m+_hIK4iNDqfdL~UdV0J>$?h5bGFVATXPAy;TA{uI> zj`j_|%4EikbrX5vU%D2zZT?AjP4>)u-Kh=6E^6$? z6|Q&s`2E|&t-F!JPH3N^dvNTtSIUcp{7hidH#G8mTJ34ZeKKVPOXVQevtb`rLf=a% zQfG{S7q`R3q+dYN*1^zY-Kp;KW>b>1DZ0j&l28O<&27ePoSdzktYHZ*eCjV`Wl%nA zq5Q-~xE$2C5!hnOcWrG@-^tWI_lV@st4>D=TT+h~r>vypV%DT!p4WB@!upH2Wu|F8 zza2~(zw02M3hFZ19)L>~tAU;b2Hww(uV+!qlnV1*f|Cud6JstFh1!Vkx3If4d{cew zh;VKrzQ2@J6RK@COEC~g?Uzy)m0%=D_Uaz<{L;|y)FMc9{R(^U$hJgxo$+(=bfZ@_ zQsg5yvZ^`fRlbNDV9*)pKB9S&Bi46%XuCX)7+=Q?Pt}R=`xdkXZXURre)7JTKKP_S zBLl9um_Re8S)$H!I7M4woUwacxiR>oJLHmKt{WAlvJdvZI87IoO-$Fh$*eoyl6B04 zw=HZ;THN}iF2!zXo-6MPhI$_Jt&^ztYVPI{Bvkyth}3v;#Ne%}=%Q6X`1EJ(@vk{E zNVCLN-V+3iK?vxm6R(>r^--{bo}rqV8eYBRdp0a}XArYRjF>zs`c%QCvVe$dYhWNs zsjhu=vHxrTTjheHNQC52Ml56?)@BOx{6~nn)7_LGjXDFq<)h!V35KcibxmP|Pvv(G zJ>$c#*1}kS*S#VjRK-&^)g)drlCE#?5u=%Xy8T+8CzO%Uq@+WjD2;*%dF^M?@4xy~ z<^5HHD_NK7H2nVghv!bzN7$*2clJ_5r>*muUIm||B$oatC#i9@Myu@z(-kt?QRA1Z z5MILJaxB=8aoBRsEC=;hg^5hb80OcCUZ6Wp5F(u%_spN|$KHCK=8t7>X_Bv%v@qg- ze#OZW`osFv^YpDao~8W^L+DMtUkE&p+@mW?n)v*E#lSv)q%KWS+&I`%*~@jVmX^%Zor6z$6l0-udv{v2A%*} zc=ZMBu(x^xGxtuS0Io>!D2~nV)6LwF?@9oP4JGl5cNHW}T;8>viQ(>6OXsz`T@$xE z@sXF#bJpK{tLCHWJF3FR*QG%(EcotyBlNbW3%Rzgdu#EI49^VMpqMf%cGX`Bg2+-@ zVwmF;D-wfXymL7ojjWzLBgHsa&7}0tt0+2G^i=Dv6N$ATCY~>zZGlK4$cGTD1Bbmc za{izsvf*GymGjejKE*)%i)9&q(_b_{%W;RmC0c~IIiQ3CQOBm!C-(iDOD#ae`bv; z{QB{3ARc*sa+KmDR9;QS@sjs!{GpnF6e*6Q%&8Grw#Q9gp|-T03ohceUdb-U04M3H zy86>FebK+pl0^E4Bb>bD2~{hYl(5>&J*b$J=F!V;$fSFCg$jGT_xDAwbU9=#Q`ZlL zPP~0}{&wraxrt{|0`Xkkm&&6teiPJRbzF5nb;c$m5nV2+R+8hlMRp=jUixzKe|-yS z&1M{VniQ+dZ)Rp0_Wn<4Ps;G2d)9(Efsz1~7lNEbxK-%ZCO%ZKV{IvG#4>7_@k6%~ zojP{vi-A%`f;kK7`MTWs7d*#H9-WoRWCCT3v(q&ASgdis%rVz+Bw9}NQ!gAnveUm? zRl`Ga@(GS48#TWb98a@1ulzQZb|^}+73n5vnzIAjm#*FZ&^@`J6Dtw4ERnD{{JB0f z%kJfNwMU`2{`wdC?^T6?)L}N{f{>0mknxd8N*wzh8^OIBO$WcILH5L^cAI81V(ziStVVJ}XQ>;sIXect}9F2Ye&e7-p%K!kV!*eA1aPV*}G&IzAtoT3p*bEBd zoAQtxd5C;KV#iV*WJ>XvZ^|HGZs1atBI#>Bh#dRhNoHowQHQAIWpr^d^6(HnICzLc zp^-@R*x32Q8VW@h(yoK%plQ7H2NG> z_24{s4*fqv9t!>!L<3b&C|dL1Hvg~v{u_SyU&a3$vF!5T|NrU#`3d}IUjKa=qMuop zA3QK@wA7S=Bpe3yhYf+3x|uHk@Ui~O7(vx?0S_RapT=_)ylq?tGAhniU%rQlV?}8w zD;Pa|aTLsCS3!s;ZXQEF^zxi{%q$uG%7kCYwXlqU@n3iMoQ$9=lCn#gu|FYZc0Sg3 z-S%=db>~5EQg(q-ole|_U9+nT3~e1WXtQPU0^|4Y?run6123Y9Vg>Kb??D3wh#Zw2 zvC%R=CN|7?GkxDrQr;Kv00m-_E)YkpU?IIQ0SnA|zkPZDjCt8e1xUn_!;HV}@BD@G z@~c@4zw_o6#`0?n&s?`*$_kG6sM%h^{)wRn$ddqLtn-+_F2*J{kct7pilPTZqDFQl z03lbJsLholP?SFq^av0Kcre%!tq6hTpy!wnjMpTaYiA0aWTIAOw_yMRz7TC>sq>>3 zVz_}J1+$J`jDgLXX+t>JPfPi&H{++FD{%S%EbiAJ>nG+O+^juMmWg;)SyUAZL(Bk9x*j|iH z{d5wwrVMO>CW2kP)RVB(KXSnsw;F?OmyRVQlvn3j*Ai_9@m`iNuzQBD&_<;8C*Br4 zl>wg(5`wGXV^U9YjfjI(QE)+;m<|`yW0*sjgIU@wpW*Q|5*fmk9JL(r?Vw0C`w!1O^dnbbU#FCJTcs?1kVOg?yWv1gz-H3fX4<9K4h=mVn*O3 z5sm}{Yt-^f_$4@*M5EI3(4x+~5*+-5l|cZk!r1Rc2-DQVjdIF3mX7M?0bGhcUt+?t zNZ+<#K)PS>V}EtOrnckjA%{rvzQh6Rs;**Iu~%|qK+a<~Haw~C04C!Q&L@FUEb=>Y zR=!aSkwe@-JNl{+vuC9PeN~)O2yEhJqUX9Xi={Ym){q#JxyP0P00+;aEpQ5yVMO7< z-T^)RFNFgAG}yeNiEH$a*&iWev&0d#O6WB}@b6{EO>V3$7eExos*he4V3qw9w1~74Z;s0NBM|+2*^#vyx3j6!v-z%=6 MqNCib_&Vl)06E_S!~g&Q delta 930 zcmV;T16};HIoAh}7!d>m0000n5PbLm001yhOjJda5*9Fj%Q645000AGNkl8nu5XS`+$dFAokfEKTdKJ)uYbHTs9wI>t4n!WxSvc?&GI{q>7|4=nNFN~2&^waH zFWIuFCXEZ|56F~k-jB!QhmI}^Pzl;sGWOj(FBuEJ@9EvMa9@_6Q-JV8=mF9XVF(Zi zkTGCL|IvQn4Tj&1Ghjd*^a^?@E8Ml(heX`y8m>Eh-Y}!>#%65k3_Hf$ z-?sHO%7m=El#+Uo)MR^r6z zc0uJ=^k3TtU1+~j%Mrj#-MR}$LrUw$q^aEPOr;kJL0doU z?Lr57v?~V3l02eT+?X~``vEkWbmkz<-O&C)5$U>L{uHOJl-5x|XXW+-0x0DPLjX6G zmoY#PK#m0@F;FUSVF+MCdzAtNWnQ`%0+=xWNCDP&O&9~3J|8 zkemlI0rzEk9_*b91_5vmNY8_#&jn`kBY^g0T>{|v_U-@z0Wtjsx9Ekt{h1yCN~ z1c0M2n9~7>LjXA*aN7r5j0B(%AY*%ffq+rQZw62?K>cgLeMz~I?SaBk$OA+!sCuMXT)U52O#kh!h9 z4AG{W+3y9P*00000NkvWtM6N<$ Ef>CXTjQ{`u diff --git a/include/constants/trainer_hill.h b/include/constants/trainer_hill.h index e0f660b6f0..610cb81c68 100644 --- a/include/constants/trainer_hill.h +++ b/include/constants/trainer_hill.h @@ -55,7 +55,7 @@ #define TRAINER_HILL_OTID 0x10000000 // The full map of each Trainer Hill floor is 16x21. -// The first 5x21 at the top is the entrance/exit area, +// The first 16x5 at the top is the entrance/exit area, // and the remaining 16x16 is the randomized portion of // the room where the trainers are. #define HILL_FLOOR_WIDTH 16 diff --git a/include/graphics.h b/include/graphics.h index 04ad64606d..e2d0060f5c 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -5018,9 +5018,9 @@ extern const u32 gPokenavOptions_Gfx[]; extern const u16 gPokenavOptions_Pal[]; // Battle Factory Screen -extern const u16 gFrontierFactorySelectMenu_Gfx[]; -extern const u16 gFrontierFactorySelectMenu_Tilemap[]; -extern const u16 gFrontierFactorySelectMenu_Pal[]; +extern const u16 gFrontierFactoryMenu_Gfx[34 * TILE_SIZE_4BPP / 2]; +extern const u16 gFrontierFactoryMenu_Tilemap[]; +extern const u16 gFrontierFactoryMenu_Pal[]; // Object event pals extern const u16 gObjectEventPal_Brendan[]; diff --git a/src/battle_dome.c b/src/battle_dome.c index 32a43c3d94..ffb7fa5bb3 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -40,6 +40,8 @@ #include "constants/battle_frontier.h" #include "constants/rgb.h" +#define TAG_BUTTONS 0 + // Enough space to hold 2 match info cards worth of trainers and their parties #define NUM_INFOCARD_SPRITES ((FRONTIER_PARTY_SIZE + 1) * 4) #define NUM_INFOCARD_TRAINERS 2 @@ -56,7 +58,7 @@ struct TourneyTreeLineSection { u8 x; u8 y; - u16 src; + u16 tile; }; #define DOME_TRAINERS gSaveBlock2Ptr->frontier.domeTrainers @@ -904,14 +906,14 @@ static const struct ScanlineEffectParams sTourneyTreeScanlineEffectParams = static const struct CompressedSpriteSheet sTourneyTreeButtonsSpriteSheet[] = { - {gDomeTourneyTreeButtons_Gfx, 0x0600, 0x0000}, + {.data = gDomeTourneyTreeButtons_Gfx, .size = 0x0600, .tag = TAG_BUTTONS}, {}, }; // Unused static const struct CompressedSpritePalette sTourneyTreeButtonsSpritePal[] = { - {gDomeTourneyTreeButtons_Pal, 0x0000}, + {.data = gDomeTourneyTreeButtons_Pal, .tag = TAG_BUTTONS}, {}, }; @@ -1004,7 +1006,7 @@ static const union AnimCmd * const sSpriteAnimTable_TourneyTreePokeball[] = // Sprite template for the pokeballs on the tourney tree that act as buttons to view a trainer/match info card static const struct SpriteTemplate sTourneyTreePokeballSpriteTemplate = { - .tileTag = 0x0000, + .tileTag = TAG_BUTTONS, .paletteTag = TAG_NONE, .oam = &sOamData_TourneyTreePokeball, .anims = sSpriteAnimTable_TourneyTreePokeball, @@ -1033,7 +1035,7 @@ static const union AnimCmd * const sSpriteAnimTable_TourneyTreeCancelButton[] = static const struct SpriteTemplate sCancelButtonSpriteTemplate = { - .tileTag = 0x0000, + .tileTag = TAG_BUTTONS, .paletteTag = TAG_NONE, .oam = &sOamData_TourneyTreeCloseButton, .anims = sSpriteAnimTable_TourneyTreeCancelButton, @@ -1062,7 +1064,7 @@ static const union AnimCmd * const sSpriteAnimTable_TourneyTreeExitButton[] = static const struct SpriteTemplate sExitButtonSpriteTemplate = { - .tileTag = 0x0000, + .tileTag = TAG_BUTTONS, .paletteTag = TAG_NONE, .oam = &sOamData_TourneyTreeCloseButton, .anims = sSpriteAnimTable_TourneyTreeExitButton, @@ -1109,7 +1111,7 @@ static const union AnimCmd * const sSpriteAnimTable_HorizontalScrollArrow[] = static const struct SpriteTemplate sHorizontalScrollArrowSpriteTemplate = { - .tileTag = 0x0000, + .tileTag = TAG_BUTTONS, .paletteTag = TAG_NONE, .oam = &sOamData_HorizontalScrollArrow, .anims = sSpriteAnimTable_HorizontalScrollArrow, @@ -1120,7 +1122,7 @@ static const struct SpriteTemplate sHorizontalScrollArrowSpriteTemplate = static const struct SpriteTemplate sVerticalScrollArrowSpriteTemplate = { - .tileTag = 0x0000, + .tileTag = TAG_BUTTONS, .paletteTag = TAG_NONE, .oam = &sOamData_VerticalScrollArrow, .anims = sSpriteAnimTable_VerticalScrollArrow, @@ -1482,589 +1484,617 @@ static const u8 sTourneyTreePokeballCoords[DOME_TOURNAMENT_TRAINERS_COUNT + DOME {120, 89}, // Final match }; +// Tile values from tourney_tree.png for the highlighted lines of the tourney tree. +// These tiles will be used to replace the existing, unhighlighted line tiles on the tourney tree tilemap. +#define LINE_PAL (6 << 12) +#define LINE_H (LINE_PAL | 0x21) // Horizontal +#define LINE_CORNER_R (LINE_PAL | 0x23) // Horizontal into a right-side vertical +#define LINE_CORNER_L (LINE_PAL | 0x25) // Horizontal into a left-side vertical +#define LINE_V_R (LINE_PAL | 0x27) // Right-side vertical +#define LINE_V_L (LINE_PAL | 0x29) // Left-side vertical +#define LINE_H_BOTTOM (LINE_PAL | 0x2B) // Horizontal on the bottom of the tree +#define LINE_H_LOGO1 (LINE_PAL | 0x2C) // Horizontal, logo behind +#define LINE_H_LOGO2 (LINE_PAL | 0x2D) // Horizontal, logo behind +#define LINE_H_LOGO3 (LINE_PAL | 0x2E) // Horizontal, logo behind +#define LINE_H_LOGO4 (LINE_PAL | 0x2F) // Horizontal, logo behind +#define LINE_V_R_LOGO1 (LINE_PAL | 0x30) // Right-side vertical, logo behind +#define LINE_V_R_LOGO2 (LINE_PAL | 0x31) // Right-side vertical, logo behind +#define LINE_V_R_LOGO3 (LINE_PAL | 0x32) // Right-side vertical, logo behind +#define LINE_V_R_LOGO4 (LINE_PAL | 0x33) // Right-side vertical, logo behind +#define LINE_V_L_LOGO1 (LINE_PAL | 0x35) // Left-side vertical, logo behind +#define LINE_V_L_LOGO2 (LINE_PAL | 0x36) // Left-side vertical, logo behind +#define LINE_V_L_LOGO3 (LINE_PAL | 0x37) // Left-side vertical, logo behind +#define LINE_V_L_LOGO4 (LINE_PAL | 0x38) // Left-side vertical, logo behind +#define LINE_V_R_HALF_LOGO (LINE_PAL | 0x3B) // Right-side vertical, half lit from the top, logo behind +#define LINE_V_L_HALF_LOGO (LINE_PAL | 0x3C) // Left-side vertical, half lit from the top, logo behind +#define LINE_CORNER_R_HALF (LINE_PAL | 0x43) // Lit horizontal, unlit right-side vertical +#define LINE_CORNER_L_HALF (LINE_PAL | 0x45) // Lit horizontal, unlit left-side vertical +#define LINE_V_R_HALF (LINE_PAL | 0x47) // Right-side vertical, half lit from the top +#define LINE_V_L_HALF (LINE_PAL | 0x49) // Left-side vertical, half lit from the top + // Each of these line sections define the position of the advancement line on the tourney tree for the victor of that round // The trainers here are numbered by tourney ID (rank/seed) and ordered according to where they start on the tourney tree -#define LINESECTION_ROUND1_TRAINER1(lastSrc) \ - {.src = 0x6021, .y = 0x04, .x = 0x09}, \ - {.src = 0x6023, .y = 0x04, .x = 0x0a}, \ - {.src = 0x6047, .y = 0x05, .x = 0x0a}, \ - {.src = lastSrc, .y = 0x05, .x = 0x0b}, +#define LINESECTION_ROUND1_TRAINER1(lastTile) \ + {.tile = LINE_H, .y = 4, .x = 9}, \ + {.tile = LINE_CORNER_R, .y = 4, .x = 10}, \ + {.tile = LINE_V_R_HALF, .y = 5, .x = 10}, \ + {.tile = lastTile, .y = 5, .x = 11}, -#define LINESECTION_ROUND1_TRAINER9(lastSrc) \ - {.src = 0x6021, .y = 0x06, .x = 0x09}, \ - {.src = 0x6021, .y = 0x06, .x = 0x0a}, \ - {.src = 0x6027, .y = 0x05, .x = 0x0a}, \ - {.src = lastSrc, .y = 0x05, .x = 0x0b}, +#define LINESECTION_ROUND1_TRAINER9(lastTile) \ + {.tile = LINE_H, .y = 6, .x = 9}, \ + {.tile = LINE_H, .y = 6, .x = 10}, \ + {.tile = LINE_V_R, .y = 5, .x = 10}, \ + {.tile = lastTile, .y = 5, .x = 11}, -#define LINESECTION_ROUND1_TRAINER13(lastSrc) \ - {.src = 0x6021, .y = 0x08, .x = 0x09}, \ - {.src = 0x6023, .y = 0x08, .x = 0x0a}, \ - {.src = 0x6047, .y = 0x09, .x = 0x0a}, \ - {.src = lastSrc, .y = 0x09, .x = 0x0b}, +#define LINESECTION_ROUND1_TRAINER13(lastTile) \ + {.tile = LINE_H, .y = 8, .x = 9}, \ + {.tile = LINE_CORNER_R, .y = 8, .x = 10}, \ + {.tile = LINE_V_R_HALF, .y = 9, .x = 10}, \ + {.tile = lastTile, .y = 9, .x = 11}, -#define LINESECTION_ROUND1_TRAINER5(lastSrc) \ - {.src = 0x6021, .y = 0x0a, .x = 0x09}, \ - {.src = 0x6021, .y = 0x0a, .x = 0x0a}, \ - {.src = 0x6027, .y = 0x09, .x = 0x0a}, \ - {.src = lastSrc, .y = 0x09, .x = 0x0b}, +#define LINESECTION_ROUND1_TRAINER5(lastTile) \ + {.tile = LINE_H, .y = 10, .x = 9}, \ + {.tile = LINE_H, .y = 10, .x = 10}, \ + {.tile = LINE_V_R, .y = 9, .x = 10}, \ + {.tile = lastTile, .y = 9, .x = 11}, -#define LINESECTION_ROUND1_TRAINER8(lastSrc) \ - {.src = 0x6021, .y = 0x0c, .x = 0x09}, \ - {.src = 0x6023, .y = 0x0c, .x = 0x0a}, \ - {.src = 0x6047, .y = 0x0d, .x = 0x0a}, \ - {.src = lastSrc, .y = 0x0d, .x = 0x0b}, +#define LINESECTION_ROUND1_TRAINER8(lastTile) \ + {.tile = LINE_H, .y = 12, .x = 9}, \ + {.tile = LINE_CORNER_R, .y = 12, .x = 10}, \ + {.tile = LINE_V_R_HALF, .y = 13, .x = 10}, \ + {.tile = lastTile, .y = 13, .x = 11}, -#define LINESECTION_ROUND1_TRAINER16(lastSrc) \ - {.src = 0x6021, .y = 0x0e, .x = 0x09}, \ - {.src = 0x6021, .y = 0x0e, .x = 0x0a}, \ - {.src = 0x6027, .y = 0x0d, .x = 0x0a}, \ - {.src = lastSrc, .y = 0x0d, .x = 0x0b}, +#define LINESECTION_ROUND1_TRAINER16(lastTile) \ + {.tile = LINE_H, .y = 14, .x = 9}, \ + {.tile = LINE_H, .y = 14, .x = 10}, \ + {.tile = LINE_V_R, .y = 13, .x = 10}, \ + {.tile = lastTile, .y = 13, .x = 11}, -#define LINESECTION_ROUND1_TRAINER12(lastSrc) \ - {.src = 0x6021, .y = 0x10, .x = 0x09}, \ - {.src = 0x6023, .y = 0x10, .x = 0x0a}, \ - {.src = 0x6047, .y = 0x11, .x = 0x0a}, \ - {.src = lastSrc, .y = 0x11, .x = 0x0b}, +#define LINESECTION_ROUND1_TRAINER12(lastTile) \ + {.tile = LINE_H, .y = 16, .x = 9}, \ + {.tile = LINE_CORNER_R, .y = 16, .x = 10}, \ + {.tile = LINE_V_R_HALF, .y = 17, .x = 10}, \ + {.tile = lastTile, .y = 17, .x = 11}, -#define LINESECTION_ROUND1_TRAINER4(lastSrc) \ - {.src = 0x602b, .y = 0x12, .x = 0x09}, \ - {.src = 0x602b, .y = 0x12, .x = 0x0a}, \ - {.src = 0x6027, .y = 0x11, .x = 0x0a}, \ - {.src = lastSrc, .y = 0x11, .x = 0x0b}, +#define LINESECTION_ROUND1_TRAINER4(lastTile) \ + {.tile = LINE_H_BOTTOM, .y = 18, .x = 9}, \ + {.tile = LINE_H_BOTTOM, .y = 18, .x = 10}, \ + {.tile = LINE_V_R, .y = 17, .x = 10}, \ + {.tile = lastTile, .y = 17, .x = 11}, -#define LINESECTION_ROUND1_TRAINER3(lastSrc) \ - {.src = 0x6021, .y = 0x04, .x = 0x14}, \ - {.src = 0x6025, .y = 0x04, .x = 0x13}, \ - {.src = 0x6049, .y = 0x05, .x = 0x13}, \ - {.src = lastSrc, .y = 0x05, .x = 0x12}, +#define LINESECTION_ROUND1_TRAINER3(lastTile) \ + {.tile = LINE_H, .y = 4, .x = 20}, \ + {.tile = LINE_CORNER_L, .y = 4, .x = 19}, \ + {.tile = LINE_V_L_HALF, .y = 5, .x = 19}, \ + {.tile = lastTile, .y = 5, .x = 18}, -#define LINESECTION_ROUND1_TRAINER11(lastSrc) \ - {.src = 0x6021, .y = 0x06, .x = 0x14}, \ - {.src = 0x6021, .y = 0x06, .x = 0x13}, \ - {.src = 0x6029, .y = 0x05, .x = 0x13}, \ - {.src = lastSrc, .y = 0x05, .x = 0x12}, +#define LINESECTION_ROUND1_TRAINER11(lastTile) \ + {.tile = LINE_H, .y = 6, .x = 20}, \ + {.tile = LINE_H, .y = 6, .x = 19}, \ + {.tile = LINE_V_L, .y = 5, .x = 19}, \ + {.tile = lastTile, .y = 5, .x = 18}, -#define LINESECTION_ROUND1_TRAINER15(lastSrc) \ - {.src = 0x6021, .y = 0x08, .x = 0x14}, \ - {.src = 0x6025, .y = 0x08, .x = 0x13}, \ - {.src = 0x6049, .y = 0x09, .x = 0x13}, \ - {.src = lastSrc, .y = 0x09, .x = 0x12}, +#define LINESECTION_ROUND1_TRAINER15(lastTile) \ + {.tile = LINE_H, .y = 8, .x = 20}, \ + {.tile = LINE_CORNER_L, .y = 8, .x = 19}, \ + {.tile = LINE_V_L_HALF, .y = 9, .x = 19}, \ + {.tile = lastTile, .y = 9, .x = 18}, -#define LINESECTION_ROUND1_TRAINER7(lastSrc) \ - {.src = 0x6021, .y = 0x0a, .x = 0x14}, \ - {.src = 0x6021, .y = 0x0a, .x = 0x13}, \ - {.src = 0x6029, .y = 0x09, .x = 0x13}, \ - {.src = lastSrc, .y = 0x09, .x = 0x12}, +#define LINESECTION_ROUND1_TRAINER7(lastTile) \ + {.tile = LINE_H, .y = 10, .x = 20}, \ + {.tile = LINE_H, .y = 10, .x = 19}, \ + {.tile = LINE_V_L, .y = 9, .x = 19}, \ + {.tile = lastTile, .y = 9, .x = 18}, -#define LINESECTION_ROUND1_TRAINER6(lastSrc) \ - {.src = 0x6021, .y = 0x0c, .x = 0x14}, \ - {.src = 0x6025, .y = 0x0c, .x = 0x13}, \ - {.src = 0x6049, .y = 0x0d, .x = 0x13}, \ - {.src = lastSrc, .y = 0x0d, .x = 0x12}, +#define LINESECTION_ROUND1_TRAINER6(lastTile) \ + {.tile = LINE_H, .y = 12, .x = 20}, \ + {.tile = LINE_CORNER_L, .y = 12, .x = 19}, \ + {.tile = LINE_V_L_HALF, .y = 13, .x = 19}, \ + {.tile = lastTile, .y = 13, .x = 18}, -#define LINESECTION_ROUND1_TRAINER14(lastSrc) \ - {.src = 0x6021, .y = 0x0e, .x = 0x14}, \ - {.src = 0x6021, .y = 0x0e, .x = 0x13}, \ - {.src = 0x6029, .y = 0x0d, .x = 0x13}, \ - {.src = lastSrc, .y = 0x0d, .x = 0x12}, +#define LINESECTION_ROUND1_TRAINER14(lastTile) \ + {.tile = LINE_H, .y = 14, .x = 20}, \ + {.tile = LINE_H, .y = 14, .x = 19}, \ + {.tile = LINE_V_L, .y = 13, .x = 19}, \ + {.tile = lastTile, .y = 13, .x = 18}, -#define LINESECTION_ROUND1_TRAINER10(lastSrc) \ - {.src = 0x6021, .y = 0x10, .x = 0x14}, \ - {.src = 0x6025, .y = 0x10, .x = 0x13}, \ - {.src = 0x6049, .y = 0x11, .x = 0x13}, \ - {.src = lastSrc, .y = 0x11, .x = 0x12}, +#define LINESECTION_ROUND1_TRAINER10(lastTile) \ + {.tile = LINE_H, .y = 16, .x = 20}, \ + {.tile = LINE_CORNER_L, .y = 16, .x = 19}, \ + {.tile = LINE_V_L_HALF, .y = 17, .x = 19}, \ + {.tile = lastTile, .y = 17, .x = 18}, -#define LINESECTION_ROUND1_TRAINER2(lastSrc) \ - {.src = 0x602b, .y = 0x12, .x = 0x14}, \ - {.src = 0x602b, .y = 0x12, .x = 0x13}, \ - {.src = 0x6029, .y = 0x11, .x = 0x13}, \ - {.src = lastSrc, .y = 0x11, .x = 0x12}, +#define LINESECTION_ROUND1_TRAINER2(lastTile) \ + {.tile = LINE_H_BOTTOM, .y = 18, .x = 20}, \ + {.tile = LINE_H_BOTTOM, .y = 18, .x = 19}, \ + {.tile = LINE_V_L, .y = 17, .x = 19}, \ + {.tile = lastTile, .y = 17, .x = 18}, -#define LINESECTION_ROUND2_MATCH1(lastSrc) \ - {.src = 0x6027, .y = 0x06, .x = 0x0b}, \ - {.src = 0x6047, .y = 0x07, .x = 0x0b}, \ - {.src = lastSrc, .y = 0x07, .x = 0x0c}, +#define LINESECTION_ROUND2_MATCH1(lastTile) \ + {.tile = LINE_V_R, .y = 6, .x = 11}, \ + {.tile = LINE_V_R_HALF, .y = 7, .x = 11}, \ + {.tile = lastTile, .y = 7, .x = 12}, -#define LINESECTION_ROUND2_MATCH2(lastSrc) \ - {.src = 0x6027, .y = 0x08, .x = 0x0b}, \ - {.src = 0x6027, .y = 0x07, .x = 0x0b}, \ - {.src = lastSrc, .y = 0x07, .x = 0x0c}, +#define LINESECTION_ROUND2_MATCH2(lastTile) \ + {.tile = LINE_V_R, .y = 8, .x = 11}, \ + {.tile = LINE_V_R, .y = 7, .x = 11}, \ + {.tile = lastTile, .y = 7, .x = 12}, -#define LINESECTION_ROUND2_MATCH3(lastSrc) \ - {.src = 0x6027, .y = 0x0e, .x = 0x0b}, \ - {.src = 0x6047, .y = 0x0f, .x = 0x0b}, \ - {.src = lastSrc, .y = 0x0f, .x = 0x0c}, +#define LINESECTION_ROUND2_MATCH3(lastTile) \ + {.tile = LINE_V_R, .y = 14, .x = 11}, \ + {.tile = LINE_V_R_HALF, .y = 15, .x = 11}, \ + {.tile = lastTile, .y = 15, .x = 12}, -#define LINESECTION_ROUND2_MATCH4(lastSrc) \ - {.src = 0x6027, .y = 0x10, .x = 0x0b}, \ - {.src = 0x6027, .y = 0x0f, .x = 0x0b}, \ - {.src = lastSrc, .y = 0x0f, .x = 0x0c}, +#define LINESECTION_ROUND2_MATCH4(lastTile) \ + {.tile = LINE_V_R, .y = 16, .x = 11}, \ + {.tile = LINE_V_R, .y = 15, .x = 11}, \ + {.tile = lastTile, .y = 15, .x = 12}, -#define LINESECTION_ROUND2_MATCH5(lastSrc) \ - {.src = 0x6029, .y = 0x06, .x = 0x12}, \ - {.src = 0x6049, .y = 0x07, .x = 0x12}, \ - {.src = lastSrc, .y = 0x07, .x = 0x11}, +#define LINESECTION_ROUND2_MATCH5(lastTile) \ + {.tile = LINE_V_L, .y = 6, .x = 18}, \ + {.tile = LINE_V_L_HALF, .y = 7, .x = 18}, \ + {.tile = lastTile, .y = 7, .x = 17}, -#define LINESECTION_ROUND2_MATCH6(lastSrc) \ - {.src = 0x6029, .y = 0x08, .x = 0x12}, \ - {.src = 0x6029, .y = 0x07, .x = 0x12}, \ - {.src = lastSrc, .y = 0x07, .x = 0x11}, +#define LINESECTION_ROUND2_MATCH6(lastTile) \ + {.tile = LINE_V_L, .y = 8, .x = 18}, \ + {.tile = LINE_V_L, .y = 7, .x = 18}, \ + {.tile = lastTile, .y = 7, .x = 17}, -#define LINESECTION_ROUND2_MATCH7(lastSrc) \ - {.src = 0x6029, .y = 0x0e, .x = 0x12}, \ - {.src = 0x6049, .y = 0x0f, .x = 0x12}, \ - {.src = lastSrc, .y = 0x0f, .x = 0x11}, +#define LINESECTION_ROUND2_MATCH7(lastTile) \ + {.tile = LINE_V_L, .y = 14, .x = 18}, \ + {.tile = LINE_V_L_HALF, .y = 15, .x = 18}, \ + {.tile = lastTile, .y = 15, .x = 17}, -#define LINESECTION_ROUND2_MATCH8(lastSrc) \ - {.src = 0x6029, .y = 0x10, .x = 0x12}, \ - {.src = 0x6029, .y = 0x0f, .x = 0x12}, \ - {.src = lastSrc, .y = 0x0f, .x = 0x11}, +#define LINESECTION_ROUND2_MATCH8(lastTile) \ + {.tile = LINE_V_L, .y = 16, .x = 18}, \ + {.tile = LINE_V_L, .y = 15, .x = 18}, \ + {.tile = lastTile, .y = 15, .x = 17}, -#define LINESECTION_SEMIFINAL_TOP_LEFT \ - {.src = 0x6027, .y = 0x08, .x = 0x0c}, \ - {.src = 0x6027, .y = 0x09, .x = 0x0c}, \ - {.src = 0x6027, .y = 0x0a, .x = 0x0c}, \ - {.src = 0x603b, .y = 0x0b, .x = 0x0c}, +#define LINESECTION_SEMIFINAL_TOP_LEFT \ + {.tile = LINE_V_R, .y = 8, .x = 12}, \ + {.tile = LINE_V_R, .y = 9, .x = 12}, \ + {.tile = LINE_V_R, .y = 10, .x = 12}, \ + {.tile = LINE_V_R_HALF_LOGO, .y = 11, .x = 12}, -#define LINESECTION_SEMIFINAL_BOTTOM_LEFT \ - {.src = 0x6033, .y = 0x0e, .x = 0x0c}, \ - {.src = 0x6032, .y = 0x0d, .x = 0x0c}, \ - {.src = 0x6031, .y = 0x0c, .x = 0x0c}, \ - {.src = 0x6030, .y = 0x0b, .x = 0x0c}, - -#define LINESECTION_SEMIFINAL_TOP_RIGHT \ - {.src = 0x6029, .y = 0x08, .x = 0x11}, \ - {.src = 0x6029, .y = 0x09, .x = 0x11}, \ - {.src = 0x6029, .y = 0x0a, .x = 0x11}, \ - {.src = 0x603c, .y = 0x0b, .x = 0x11}, +#define LINESECTION_SEMIFINAL_BOTTOM_LEFT \ + {.tile = LINE_V_R_LOGO4, .y = 14, .x = 12}, \ + {.tile = LINE_V_R_LOGO3, .y = 13, .x = 12}, \ + {.tile = LINE_V_R_LOGO2, .y = 12, .x = 12}, \ + {.tile = LINE_V_R_LOGO1, .y = 11, .x = 12}, +#define LINESECTION_SEMIFINAL_TOP_RIGHT \ + {.tile = LINE_V_L, .y = 8, .x = 17}, \ + {.tile = LINE_V_L, .y = 9, .x = 17}, \ + {.tile = LINE_V_L, .y = 10, .x = 17}, \ + {.tile = LINE_V_L_HALF_LOGO, .y = 11, .x = 17}, + #define LINESECTION_SEMIFINAL_BOTTOM_RIGHT \ - {.src = 0x6038, .y = 0x0e, .x = 0x11}, \ - {.src = 0x6037, .y = 0x0d, .x = 0x11}, \ - {.src = 0x6036, .y = 0x0c, .x = 0x11}, \ - {.src = 0x6035, .y = 0x0b, .x = 0x11}, + {.tile = LINE_V_L_LOGO4, .y = 14, .x = 17}, \ + {.tile = LINE_V_L_LOGO3, .y = 13, .x = 17}, \ + {.tile = LINE_V_L_LOGO2, .y = 12, .x = 17}, \ + {.tile = LINE_V_L_LOGO1, .y = 11, .x = 17}, + +#define LINESECTION_FINAL_LEFT \ + {.tile = LINE_H_LOGO1, .y = 11, .x = 13}, \ + {.tile = LINE_H_LOGO2, .y = 11, .x = 14}, -#define LINESECTION_FINAL_LEFT \ - {.src = 0x602c, .y = 0x0b, .x = 0x0d}, \ - {.src = 0x602d, .y = 0x0b, .x = 0x0e}, - -#define LINESECTION_FINAL_RIGHT \ - {.src = 0x602f, .y = 0x0b, .x = 0x10}, \ - {.src = 0x602e, .y = 0x0b, .x = 0x0f}, +#define LINESECTION_FINAL_RIGHT \ + {.tile = LINE_H_LOGO4, .y = 11, .x = 16}, \ + {.tile = LINE_H_LOGO3, .y = 11, .x = 15}, static const struct TourneyTreeLineSection sLineSectionTrainer1Round1[] = { - LINESECTION_ROUND1_TRAINER1(0x6043) + LINESECTION_ROUND1_TRAINER1(LINE_CORNER_R_HALF) }; static const struct TourneyTreeLineSection sLineSectionTrainer1Round2[] = { - LINESECTION_ROUND1_TRAINER1(0x6023) - LINESECTION_ROUND2_MATCH1(0x6043) + LINESECTION_ROUND1_TRAINER1(LINE_CORNER_R) + LINESECTION_ROUND2_MATCH1(LINE_CORNER_R_HALF) }; static const struct TourneyTreeLineSection sLineSectionTrainer1Semifinal[] = { - LINESECTION_ROUND1_TRAINER1(0x6023) - LINESECTION_ROUND2_MATCH1(0x6023) + LINESECTION_ROUND1_TRAINER1(LINE_CORNER_R) + LINESECTION_ROUND2_MATCH1(LINE_CORNER_R) LINESECTION_SEMIFINAL_TOP_LEFT }; static const struct TourneyTreeLineSection sLineSectionTrainer1Final[] = { - LINESECTION_ROUND1_TRAINER1(0x6023) - LINESECTION_ROUND2_MATCH1(0x6023) + LINESECTION_ROUND1_TRAINER1(LINE_CORNER_R) + LINESECTION_ROUND2_MATCH1(LINE_CORNER_R) LINESECTION_SEMIFINAL_TOP_LEFT LINESECTION_FINAL_LEFT }; static const struct TourneyTreeLineSection sLineSectionTrainer9Round1[] = { - LINESECTION_ROUND1_TRAINER9(0x6043) + LINESECTION_ROUND1_TRAINER9(LINE_CORNER_R_HALF) }; static const struct TourneyTreeLineSection sLineSectionTrainer9Round2[] = { - LINESECTION_ROUND1_TRAINER9(0x6023) - LINESECTION_ROUND2_MATCH1(0x6043) + LINESECTION_ROUND1_TRAINER9(LINE_CORNER_R) + LINESECTION_ROUND2_MATCH1(LINE_CORNER_R_HALF) }; static const struct TourneyTreeLineSection sLineSectionTrainer9Semifinal[] = { - LINESECTION_ROUND1_TRAINER9(0x6023) - LINESECTION_ROUND2_MATCH1(0x6023) + LINESECTION_ROUND1_TRAINER9(LINE_CORNER_R) + LINESECTION_ROUND2_MATCH1(LINE_CORNER_R) LINESECTION_SEMIFINAL_TOP_LEFT }; static const struct TourneyTreeLineSection sLineSectionTrainer9Final[] = { - LINESECTION_ROUND1_TRAINER9(0x6023) - LINESECTION_ROUND2_MATCH1(0x6023) + LINESECTION_ROUND1_TRAINER9(LINE_CORNER_R) + LINESECTION_ROUND2_MATCH1(LINE_CORNER_R) LINESECTION_SEMIFINAL_TOP_LEFT LINESECTION_FINAL_LEFT }; static const struct TourneyTreeLineSection sLineSectionTrainer13Round1[] = { - LINESECTION_ROUND1_TRAINER13(0x6021) + LINESECTION_ROUND1_TRAINER13(LINE_H) }; static const struct TourneyTreeLineSection sLineSectionTrainer13Round2[] = { - LINESECTION_ROUND1_TRAINER13(0x6021) - LINESECTION_ROUND2_MATCH2(0x6043) + LINESECTION_ROUND1_TRAINER13(LINE_H) + LINESECTION_ROUND2_MATCH2(LINE_CORNER_R_HALF) }; static const struct TourneyTreeLineSection sLineSectionTrainer13Semifinal[] = { - LINESECTION_ROUND1_TRAINER13(0x6021) - LINESECTION_ROUND2_MATCH2(0x6023) + LINESECTION_ROUND1_TRAINER13(LINE_H) + LINESECTION_ROUND2_MATCH2(LINE_CORNER_R) LINESECTION_SEMIFINAL_TOP_LEFT }; static const struct TourneyTreeLineSection sLineSectionTrainer13Final[] = { - LINESECTION_ROUND1_TRAINER13(0x6021) - LINESECTION_ROUND2_MATCH2(0x6023) + LINESECTION_ROUND1_TRAINER13(LINE_H) + LINESECTION_ROUND2_MATCH2(LINE_CORNER_R) LINESECTION_SEMIFINAL_TOP_LEFT LINESECTION_FINAL_LEFT }; static const struct TourneyTreeLineSection sLineSectionTrainer5Round1[] = { - LINESECTION_ROUND1_TRAINER5(0x6021) + LINESECTION_ROUND1_TRAINER5(LINE_H) }; static const struct TourneyTreeLineSection sLineSectionTrainer5Round2[] = { - LINESECTION_ROUND1_TRAINER5(0x6021) - LINESECTION_ROUND2_MATCH2(0x6043) + LINESECTION_ROUND1_TRAINER5(LINE_H) + LINESECTION_ROUND2_MATCH2(LINE_CORNER_R_HALF) }; static const struct TourneyTreeLineSection sLineSectionTrainer5Semifinal[] = { - LINESECTION_ROUND1_TRAINER5(0x6021) - LINESECTION_ROUND2_MATCH2(0x6023) + LINESECTION_ROUND1_TRAINER5(LINE_H) + LINESECTION_ROUND2_MATCH2(LINE_CORNER_R) LINESECTION_SEMIFINAL_TOP_LEFT }; static const struct TourneyTreeLineSection sLineSectionTrainer5Final[] = { - LINESECTION_ROUND1_TRAINER5(0x6021) - LINESECTION_ROUND2_MATCH2(0x6023) + LINESECTION_ROUND1_TRAINER5(LINE_H) + LINESECTION_ROUND2_MATCH2(LINE_CORNER_R) LINESECTION_SEMIFINAL_TOP_LEFT LINESECTION_FINAL_LEFT }; static const struct TourneyTreeLineSection sLineSectionTrainer8Round1[] = { - LINESECTION_ROUND1_TRAINER8(0x6043) + LINESECTION_ROUND1_TRAINER8(LINE_CORNER_R_HALF) }; static const struct TourneyTreeLineSection sLineSectionTrainer8Round2[] = { - LINESECTION_ROUND1_TRAINER8(0x6023) - LINESECTION_ROUND2_MATCH3(0x6021) + LINESECTION_ROUND1_TRAINER8(LINE_CORNER_R) + LINESECTION_ROUND2_MATCH3(LINE_H) }; static const struct TourneyTreeLineSection sLineSectionTrainer8Semifinal[] = { - LINESECTION_ROUND1_TRAINER8(0x6023) - LINESECTION_ROUND2_MATCH3(0x6021) + LINESECTION_ROUND1_TRAINER8(LINE_CORNER_R) + LINESECTION_ROUND2_MATCH3(LINE_H) LINESECTION_SEMIFINAL_BOTTOM_LEFT }; static const struct TourneyTreeLineSection sLineSectionTrainer8Final[] = { - LINESECTION_ROUND1_TRAINER8(0x6023) - LINESECTION_ROUND2_MATCH3(0x6021) + LINESECTION_ROUND1_TRAINER8(LINE_CORNER_R) + LINESECTION_ROUND2_MATCH3(LINE_H) LINESECTION_SEMIFINAL_BOTTOM_LEFT LINESECTION_FINAL_LEFT }; static const struct TourneyTreeLineSection sLineSectionTrainer16Round1[] = { - LINESECTION_ROUND1_TRAINER16(0x6043) + LINESECTION_ROUND1_TRAINER16(LINE_CORNER_R_HALF) }; static const struct TourneyTreeLineSection sLineSectionTrainer16Round2[] = { - LINESECTION_ROUND1_TRAINER16(0x6023) - LINESECTION_ROUND2_MATCH3(0x6021) + LINESECTION_ROUND1_TRAINER16(LINE_CORNER_R) + LINESECTION_ROUND2_MATCH3(LINE_H) }; static const struct TourneyTreeLineSection sLineSectionTrainer16Semifinal[] = { - LINESECTION_ROUND1_TRAINER16(0x6023) - LINESECTION_ROUND2_MATCH3(0x6021) + LINESECTION_ROUND1_TRAINER16(LINE_CORNER_R) + LINESECTION_ROUND2_MATCH3(LINE_H) LINESECTION_SEMIFINAL_BOTTOM_LEFT }; static const struct TourneyTreeLineSection sLineSectionTrainer16Final[] = { - LINESECTION_ROUND1_TRAINER16(0x6023) - LINESECTION_ROUND2_MATCH3(0x6021) + LINESECTION_ROUND1_TRAINER16(LINE_CORNER_R) + LINESECTION_ROUND2_MATCH3(LINE_H) LINESECTION_SEMIFINAL_BOTTOM_LEFT LINESECTION_FINAL_LEFT }; static const struct TourneyTreeLineSection sLineSectionTrainer12Round1[] = { - LINESECTION_ROUND1_TRAINER12(0x6021) + LINESECTION_ROUND1_TRAINER12(LINE_H) }; static const struct TourneyTreeLineSection sLineSectionTrainer12Round2[] = { - LINESECTION_ROUND1_TRAINER12(0x6021) - LINESECTION_ROUND2_MATCH4(0x6021) + LINESECTION_ROUND1_TRAINER12(LINE_H) + LINESECTION_ROUND2_MATCH4(LINE_H) }; static const struct TourneyTreeLineSection sLineSectionTrainer12Semifinal[] = { - LINESECTION_ROUND1_TRAINER12(0x6021) - LINESECTION_ROUND2_MATCH4(0x6021) + LINESECTION_ROUND1_TRAINER12(LINE_H) + LINESECTION_ROUND2_MATCH4(LINE_H) LINESECTION_SEMIFINAL_BOTTOM_LEFT }; static const struct TourneyTreeLineSection sLineSectionTrainer12Final[] = { - LINESECTION_ROUND1_TRAINER12(0x6021) - LINESECTION_ROUND2_MATCH4(0x6021) + LINESECTION_ROUND1_TRAINER12(LINE_H) + LINESECTION_ROUND2_MATCH4(LINE_H) LINESECTION_SEMIFINAL_BOTTOM_LEFT LINESECTION_FINAL_LEFT }; static const struct TourneyTreeLineSection sLineSectionTrainer4Round1[] = { - LINESECTION_ROUND1_TRAINER4(0x6021) + LINESECTION_ROUND1_TRAINER4(LINE_H) }; static const struct TourneyTreeLineSection sLineSectionTrainer4Round2[] = { - LINESECTION_ROUND1_TRAINER4(0x6021) - LINESECTION_ROUND2_MATCH4(0x6021) + LINESECTION_ROUND1_TRAINER4(LINE_H) + LINESECTION_ROUND2_MATCH4(LINE_H) }; static const struct TourneyTreeLineSection sLineSectionTrainer4Semifinal[] = { - LINESECTION_ROUND1_TRAINER4(0x6021) - LINESECTION_ROUND2_MATCH4(0x6021) + LINESECTION_ROUND1_TRAINER4(LINE_H) + LINESECTION_ROUND2_MATCH4(LINE_H) LINESECTION_SEMIFINAL_BOTTOM_LEFT }; static const struct TourneyTreeLineSection sLineSectionTrainer4Final[] = { - LINESECTION_ROUND1_TRAINER4(0x6021) - LINESECTION_ROUND2_MATCH4(0x6021) + LINESECTION_ROUND1_TRAINER4(LINE_H) + LINESECTION_ROUND2_MATCH4(LINE_H) LINESECTION_SEMIFINAL_BOTTOM_LEFT LINESECTION_FINAL_LEFT }; static const struct TourneyTreeLineSection sLineSectionTrainer3Round1[] = { - LINESECTION_ROUND1_TRAINER3(0x6045) + LINESECTION_ROUND1_TRAINER3(LINE_CORNER_L_HALF) }; static const struct TourneyTreeLineSection sLineSectionTrainer3Round2[] = { - LINESECTION_ROUND1_TRAINER3(0x6025) - LINESECTION_ROUND2_MATCH5(0x6045) + LINESECTION_ROUND1_TRAINER3(LINE_CORNER_L) + LINESECTION_ROUND2_MATCH5(LINE_CORNER_L_HALF) }; static const struct TourneyTreeLineSection sLineSectionTrainer3Semifinal[] = { - LINESECTION_ROUND1_TRAINER3(0x6025) - LINESECTION_ROUND2_MATCH5(0x6025) + LINESECTION_ROUND1_TRAINER3(LINE_CORNER_L) + LINESECTION_ROUND2_MATCH5(LINE_CORNER_L) LINESECTION_SEMIFINAL_TOP_RIGHT }; static const struct TourneyTreeLineSection sLineSectionTrainer3Final[] = { - LINESECTION_ROUND1_TRAINER3(0x6025) - LINESECTION_ROUND2_MATCH5(0x6025) + LINESECTION_ROUND1_TRAINER3(LINE_CORNER_L) + LINESECTION_ROUND2_MATCH5(LINE_CORNER_L) LINESECTION_SEMIFINAL_TOP_RIGHT LINESECTION_FINAL_RIGHT }; static const struct TourneyTreeLineSection sLineSectionTrainer11Round1[] = { - LINESECTION_ROUND1_TRAINER11(0x6045) + LINESECTION_ROUND1_TRAINER11(LINE_CORNER_L_HALF) }; static const struct TourneyTreeLineSection sLineSectionTrainer11Round2[] = { - LINESECTION_ROUND1_TRAINER11(0x6025) - LINESECTION_ROUND2_MATCH5(0x6045) + LINESECTION_ROUND1_TRAINER11(LINE_CORNER_L) + LINESECTION_ROUND2_MATCH5(LINE_CORNER_L_HALF) }; static const struct TourneyTreeLineSection sLineSectionTrainer11Semifinal[] = { - LINESECTION_ROUND1_TRAINER11(0x6025) - LINESECTION_ROUND2_MATCH5(0x6025) + LINESECTION_ROUND1_TRAINER11(LINE_CORNER_L) + LINESECTION_ROUND2_MATCH5(LINE_CORNER_L) LINESECTION_SEMIFINAL_TOP_RIGHT }; static const struct TourneyTreeLineSection sLineSectionTrainer11Final[] = { - LINESECTION_ROUND1_TRAINER11(0x6025) - LINESECTION_ROUND2_MATCH5(0x6025) + LINESECTION_ROUND1_TRAINER11(LINE_CORNER_L) + LINESECTION_ROUND2_MATCH5(LINE_CORNER_L) LINESECTION_SEMIFINAL_TOP_RIGHT LINESECTION_FINAL_RIGHT }; static const struct TourneyTreeLineSection sLineSectionTrainer15Round1[] = { - LINESECTION_ROUND1_TRAINER15(0x6021) + LINESECTION_ROUND1_TRAINER15(LINE_H) }; static const struct TourneyTreeLineSection sLineSectionTrainer15Round2[] = { - LINESECTION_ROUND1_TRAINER15(0x6021) - LINESECTION_ROUND2_MATCH6(0x6045) + LINESECTION_ROUND1_TRAINER15(LINE_H) + LINESECTION_ROUND2_MATCH6(LINE_CORNER_L_HALF) }; static const struct TourneyTreeLineSection sLineSectionTrainer15Semifinal[] = { - LINESECTION_ROUND1_TRAINER15(0x6021) - LINESECTION_ROUND2_MATCH6(0x6025) + LINESECTION_ROUND1_TRAINER15(LINE_H) + LINESECTION_ROUND2_MATCH6(LINE_CORNER_L) LINESECTION_SEMIFINAL_TOP_RIGHT }; static const struct TourneyTreeLineSection sLineSectionTrainer15Final[] = { - LINESECTION_ROUND1_TRAINER15(0x6021) - LINESECTION_ROUND2_MATCH6(0x6025) + LINESECTION_ROUND1_TRAINER15(LINE_H) + LINESECTION_ROUND2_MATCH6(LINE_CORNER_L) LINESECTION_SEMIFINAL_TOP_RIGHT LINESECTION_FINAL_RIGHT }; static const struct TourneyTreeLineSection sLineSectionTrainer7Round1[] = { - LINESECTION_ROUND1_TRAINER7(0x6021) + LINESECTION_ROUND1_TRAINER7(LINE_H) }; static const struct TourneyTreeLineSection sLineSectionTrainer7Round2[] = { - LINESECTION_ROUND1_TRAINER7(0x6021) - LINESECTION_ROUND2_MATCH6(0x6045) + LINESECTION_ROUND1_TRAINER7(LINE_H) + LINESECTION_ROUND2_MATCH6(LINE_CORNER_L_HALF) }; static const struct TourneyTreeLineSection sLineSectionTrainer7Semifinal[] = { - LINESECTION_ROUND1_TRAINER7(0x6021) - LINESECTION_ROUND2_MATCH6(0x6025) + LINESECTION_ROUND1_TRAINER7(LINE_H) + LINESECTION_ROUND2_MATCH6(LINE_CORNER_L) LINESECTION_SEMIFINAL_TOP_RIGHT }; static const struct TourneyTreeLineSection sLineSectionTrainer7Final[] = { - LINESECTION_ROUND1_TRAINER7(0x6021) - LINESECTION_ROUND2_MATCH6(0x6025) + LINESECTION_ROUND1_TRAINER7(LINE_H) + LINESECTION_ROUND2_MATCH6(LINE_CORNER_L) LINESECTION_SEMIFINAL_TOP_RIGHT LINESECTION_FINAL_RIGHT }; static const struct TourneyTreeLineSection sLineSectionTrainer6Round1[] = { - LINESECTION_ROUND1_TRAINER6(0x6045) + LINESECTION_ROUND1_TRAINER6(LINE_CORNER_L_HALF) }; static const struct TourneyTreeLineSection sLineSectionTrainer6Round2[] = { - LINESECTION_ROUND1_TRAINER6(0x6025) - LINESECTION_ROUND2_MATCH7(0x6021) + LINESECTION_ROUND1_TRAINER6(LINE_CORNER_L) + LINESECTION_ROUND2_MATCH7(LINE_H) }; static const struct TourneyTreeLineSection sLineSectionTrainer6Semifinal[] = { - LINESECTION_ROUND1_TRAINER6(0x6025) - LINESECTION_ROUND2_MATCH7(0x6021) + LINESECTION_ROUND1_TRAINER6(LINE_CORNER_L) + LINESECTION_ROUND2_MATCH7(LINE_H) LINESECTION_SEMIFINAL_BOTTOM_RIGHT }; static const struct TourneyTreeLineSection sLineSectionTrainer6Final[] = { - LINESECTION_ROUND1_TRAINER6(0x6025) - LINESECTION_ROUND2_MATCH7(0x6021) + LINESECTION_ROUND1_TRAINER6(LINE_CORNER_L) + LINESECTION_ROUND2_MATCH7(LINE_H) LINESECTION_SEMIFINAL_BOTTOM_RIGHT LINESECTION_FINAL_RIGHT }; static const struct TourneyTreeLineSection sLineSectionTrainer14Round1[] = { - LINESECTION_ROUND1_TRAINER14(0x6045) + LINESECTION_ROUND1_TRAINER14(LINE_CORNER_L_HALF) }; static const struct TourneyTreeLineSection sLineSectionTrainer14Round2[] = { - LINESECTION_ROUND1_TRAINER14(0x6025) - LINESECTION_ROUND2_MATCH7(0x6021) + LINESECTION_ROUND1_TRAINER14(LINE_CORNER_L) + LINESECTION_ROUND2_MATCH7(LINE_H) }; static const struct TourneyTreeLineSection sLineSectionTrainer14Semifinal[] = { - LINESECTION_ROUND1_TRAINER14(0x6025) - LINESECTION_ROUND2_MATCH7(0x6021) + LINESECTION_ROUND1_TRAINER14(LINE_CORNER_L) + LINESECTION_ROUND2_MATCH7(LINE_H) LINESECTION_SEMIFINAL_BOTTOM_RIGHT }; static const struct TourneyTreeLineSection sLineSectionTrainer14Final[] = { - LINESECTION_ROUND1_TRAINER14(0x6025) - LINESECTION_ROUND2_MATCH7(0x6021) + LINESECTION_ROUND1_TRAINER14(LINE_CORNER_L) + LINESECTION_ROUND2_MATCH7(LINE_H) LINESECTION_SEMIFINAL_BOTTOM_RIGHT LINESECTION_FINAL_RIGHT }; static const struct TourneyTreeLineSection sLineSectionTrainer10Round1[] = { - LINESECTION_ROUND1_TRAINER10(0x6021) + LINESECTION_ROUND1_TRAINER10(LINE_H) }; static const struct TourneyTreeLineSection sLineSectionTrainer10Round2[] = { - LINESECTION_ROUND1_TRAINER10(0x6021) - LINESECTION_ROUND2_MATCH8(0x6021) + LINESECTION_ROUND1_TRAINER10(LINE_H) + LINESECTION_ROUND2_MATCH8(LINE_H) }; static const struct TourneyTreeLineSection sLineSectionTrainer10Semifinal[] = { - LINESECTION_ROUND1_TRAINER10(0x6021) - LINESECTION_ROUND2_MATCH8(0x6021) + LINESECTION_ROUND1_TRAINER10(LINE_H) + LINESECTION_ROUND2_MATCH8(LINE_H) LINESECTION_SEMIFINAL_BOTTOM_RIGHT }; static const struct TourneyTreeLineSection sLineSectionTrainer10Final[] = { - LINESECTION_ROUND1_TRAINER10(0x6021) - LINESECTION_ROUND2_MATCH8(0x6021) + LINESECTION_ROUND1_TRAINER10(LINE_H) + LINESECTION_ROUND2_MATCH8(LINE_H) LINESECTION_SEMIFINAL_BOTTOM_RIGHT LINESECTION_FINAL_RIGHT }; static const struct TourneyTreeLineSection sLineSectionTrainer2Round1[] = { - LINESECTION_ROUND1_TRAINER2(0x6021) + LINESECTION_ROUND1_TRAINER2(LINE_H) }; static const struct TourneyTreeLineSection sLineSectionTrainer2Round2[] = { - LINESECTION_ROUND1_TRAINER2(0x6021) - LINESECTION_ROUND2_MATCH8(0x6021) + LINESECTION_ROUND1_TRAINER2(LINE_H) + LINESECTION_ROUND2_MATCH8(LINE_H) }; static const struct TourneyTreeLineSection sLineSectionTrainer2Semifinal[] = { - LINESECTION_ROUND1_TRAINER2(0x6021) - LINESECTION_ROUND2_MATCH8(0x6021) + LINESECTION_ROUND1_TRAINER2(LINE_H) + LINESECTION_ROUND2_MATCH8(LINE_H) LINESECTION_SEMIFINAL_BOTTOM_RIGHT }; static const struct TourneyTreeLineSection sLineSectionTrainer2Final[] = { - LINESECTION_ROUND1_TRAINER2(0x6021) - LINESECTION_ROUND2_MATCH8(0x6021) + LINESECTION_ROUND1_TRAINER2(LINE_H) + LINESECTION_ROUND2_MATCH8(LINE_H) LINESECTION_SEMIFINAL_BOTTOM_RIGHT LINESECTION_FINAL_RIGHT }; @@ -5538,7 +5568,7 @@ static void DrawTourneyAdvancementLine(u8 tournamentId, u8 roundId) const struct TourneyTreeLineSection *lineSection = sTourneyTreeLineSections[tournamentId][roundId]; for (i = 0; i < sTourneyTreeLineSectionArrayCounts[tournamentId][roundId]; i++) - CopyToBgTilemapBufferRect_ChangePalette(1, &lineSection[i].src, lineSection[i].x, lineSection[i].y, 1, 1, 17); + CopyToBgTilemapBufferRect_ChangePalette(1, &lineSection[i].tile, lineSection[i].x, lineSection[i].y, 1, 1, 17); CopyBgTilemapBufferToVram(1); } diff --git a/src/battle_factory.c b/src/battle_factory.c index eac9f0403e..4cb1c8676c 100644 --- a/src/battle_factory.c +++ b/src/battle_factory.c @@ -525,13 +525,13 @@ static void GenerateInitialRentalMons(void) gFacilityTrainers = gBattleFrontierTrainers; for (i = 0; i < PARTY_SIZE; i++) { - species[i] = 0; + species[i] = SPECIES_NONE; monIds[i] = 0; - heldItems[i] = 0; + heldItems[i] = ITEM_NONE; } lvlMode = gSaveBlock2Ptr->frontier.lvlMode; battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / 7; + challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / FRONTIER_STAGES_PER_CHALLENGE; if (VarGet(VAR_FRONTIER_BATTLE_MODE) == FRONTIER_MODE_DOUBLES) factoryBattleMode = FRONTIER_MODE_DOUBLES; else @@ -582,7 +582,7 @@ static void GenerateInitialRentalMons(void) // Cannot have two same held items. for (j = firstMonId; j < firstMonId + i; j++) { - if (heldItems[j] != 0 && heldItems[j] == gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]) + if (heldItems[j] != ITEM_NONE && heldItems[j] == gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]) { if (gFacilityTrainerMons[monId].species == currSpecies) currSpecies = SPECIES_NONE; @@ -761,7 +761,7 @@ void FillFactoryBrainParty(void) u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - u8 challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / 7; + u8 challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / FRONTIER_STAGES_PER_CHALLENGE; fixedIV = GetFactoryMonFixedIV(challengeNum + 2, FALSE); monLevel = SetFacilityPtrsGetLevel(); i = 0; @@ -890,7 +890,7 @@ u32 GetAiScriptsInBattleFactory(void) else { int battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - int challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / 7; + int challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / FRONTIER_STAGES_PER_CHALLENGE; if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN) return AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY; diff --git a/src/battle_factory_screen.c b/src/battle_factory_screen.c index c5633ce28c..a543e64c93 100644 --- a/src/battle_factory_screen.c +++ b/src/battle_factory_screen.c @@ -28,6 +28,7 @@ #include "strings.h" #include "graphics.h" #include "constants/battle_frontier.h" +#include "constants/battle_tent.h" #include "constants/songs.h" #include "constants/rgb.h" @@ -43,6 +44,9 @@ #define SELECTABLE_MONS_COUNT 6 +#define PALNUM_FADE_TEXT 14 +#define PALNUM_TEXT 15 + enum { PALTAG_BALL_GRAY = 100, PALTAG_BALL_SELECTED, @@ -350,7 +354,7 @@ static const struct WindowTemplate sSelect_WindowTemplates[] = .tilemapTop = 2, .width = 12, .height = 2, - .paletteNum = 15, + .paletteNum = PALNUM_TEXT, .baseBlock = 0x0001, }, [SELECT_WIN_SPECIES] = { @@ -359,7 +363,7 @@ static const struct WindowTemplate sSelect_WindowTemplates[] = .tilemapTop = 2, .width = 11, .height = 2, - .paletteNum = 14, + .paletteNum = PALNUM_FADE_TEXT, .baseBlock = 0x0019, }, [SELECT_WIN_INFO] = { @@ -368,7 +372,7 @@ static const struct WindowTemplate sSelect_WindowTemplates[] = .tilemapTop = 15, .width = 20, .height = 3, - .paletteNum = 15, + .paletteNum = PALNUM_TEXT, .baseBlock = 0x002f, }, [SELECT_WIN_OPTIONS] = { @@ -377,7 +381,7 @@ static const struct WindowTemplate sSelect_WindowTemplates[] = .tilemapTop = 14, .width = 8, .height = 6, - .paletteNum = 15, + .paletteNum = PALNUM_TEXT, .baseBlock = 0x006b, }, [SELECT_WIN_YES_NO] = { @@ -386,7 +390,7 @@ static const struct WindowTemplate sSelect_WindowTemplates[] = .tilemapTop = 14, .width = 8, .height = 4, - .paletteNum = 15, + .paletteNum = PALNUM_TEXT, .baseBlock = 0x009b, }, [SELECT_WIN_MON_CATEGORY] = { @@ -395,7 +399,7 @@ static const struct WindowTemplate sSelect_WindowTemplates[] = .tilemapTop = 0, .width = 15, .height = 2, - .paletteNum = 15, + .paletteNum = PALNUM_TEXT, .baseBlock = 0x00bb, }, DUMMY_WIN_TEMPLATE, @@ -634,7 +638,11 @@ static const struct SpriteSheet sSwap_SpriteSheets[] = {sMenuHighlightRight_Gfx, sizeof(sMenuHighlightRight_Gfx), GFXTAG_MENU_HIGHLIGHT_RIGHT}, {sActionBoxLeft_Gfx, sizeof(sActionBoxLeft_Gfx), GFXTAG_ACTION_BOX_LEFT}, {sActionBoxRight_Gfx, sizeof(sActionBoxRight_Gfx), GFXTAG_ACTION_BOX_RIGHT}, - {sActionHighlightLeft_Gfx, 0x100, GFXTAG_ACTION_HIGHLIGHT_LEFT}, +#ifdef BUGFIX + {sActionHighlightLeft_Gfx, sizeof(sActionHighlightLeft_Gfx), GFXTAG_ACTION_HIGHLIGHT_LEFT}, +#else + {sActionHighlightLeft_Gfx, 8 * TILE_SIZE_4BPP, /* Incorrect size */ GFXTAG_ACTION_HIGHLIGHT_LEFT}, +#endif {sActionHighlightMiddle_Gfx, sizeof(sActionHighlightMiddle_Gfx), GFXTAG_ACTION_HIGHLIGHT_MIDDLE}, {sActionHighlightRight_Gfx, sizeof(sActionHighlightRight_Gfx), GFXTAG_ACTION_HIGHLIGHT_RIGHT}, {sMonPicBgAnim_Gfx, sizeof(sMonPicBgAnim_Gfx), GFXTAG_MON_PIC_BG_ANIM}, @@ -945,7 +953,7 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = .tilemapTop = 2, .width = 12, .height = 2, - .paletteNum = 15, + .paletteNum = PALNUM_TEXT, .baseBlock = 0x0001, }, [SWAP_WIN_SPECIES] = { @@ -954,7 +962,7 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = .tilemapTop = 2, .width = 11, .height = 2, - .paletteNum = 14, + .paletteNum = PALNUM_FADE_TEXT, .baseBlock = 0x0019, }, [SWAP_WIN_INFO] = { @@ -963,7 +971,7 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = .tilemapTop = 15, .width = 20, .height = 3, - .paletteNum = 15, + .paletteNum = PALNUM_TEXT, .baseBlock = 0x002f, }, [SWAP_WIN_OPTIONS] = { @@ -972,7 +980,7 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = .tilemapTop = 14, .width = 9, .height = 6, - .paletteNum = 15, + .paletteNum = PALNUM_TEXT, .baseBlock = 0x006b, }, [SWAP_WIN_YES_NO] = { @@ -981,7 +989,7 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = .tilemapTop = 14, .width = 8, .height = 4, - .paletteNum = 15, + .paletteNum = PALNUM_TEXT, .baseBlock = 0x00a1, }, [SWAP_WIN_ACTION_FADE] = { @@ -990,7 +998,7 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = .tilemapTop = 15, .width = 9, .height = 5, - .paletteNum = 14, + .paletteNum = PALNUM_FADE_TEXT, .baseBlock = 0x006b, }, [SWAP_WIN_UNUSED] = { @@ -999,7 +1007,7 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = .tilemapTop = 2, .width = 4, .height = 2, - .paletteNum = 14, + .paletteNum = PALNUM_FADE_TEXT, .baseBlock = 0x00c1, }, [SWAP_WIN_SPECIES_AT_FADE] = { @@ -1008,7 +1016,7 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = .tilemapTop = 2, .width = 11, .height = 2, - .paletteNum = 15, + .paletteNum = PALNUM_TEXT, .baseBlock = 0x00c9, }, [SWAP_WIN_MON_CATEGORY] = { @@ -1017,7 +1025,7 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = .tilemapTop = 0, .width = 15, .height = 2, - .paletteNum = 15, + .paletteNum = PALNUM_TEXT, .baseBlock = 0x00df, }, DUMMY_WIN_TEMPLATE, @@ -1142,8 +1150,12 @@ static void CB2_InitSelectScreen(void) gMain.state++; break; case 1: - sSelectMenuTilesetBuffer = Alloc(0x440); - sSelectMonPicBgTilesetBuffer = AllocZeroed(0x440); + sSelectMenuTilesetBuffer = Alloc(sizeof(gFrontierFactoryMenu_Gfx)); +#ifdef BUGFIX + sSelectMonPicBgTilesetBuffer = AllocZeroed(sizeof(sMonPicBg_Gfx)); +#else + sSelectMonPicBgTilesetBuffer = AllocZeroed(sizeof(gFrontierFactoryMenu_Gfx)); // Incorrect size +#endif sSelectMenuTilemapBuffer = Alloc(BG_SCREEN_SIZE); sSelectMonPicBgTilemapBuffer = AllocZeroed(BG_SCREEN_SIZE); ChangeBgX(0, 0, BG_COORD_SET); @@ -1169,21 +1181,21 @@ static void CB2_InitSelectScreen(void) ResetSpriteData(); ResetTasks(); FreeAllSpritePalettes(); - CpuCopy16(gFrontierFactorySelectMenu_Gfx, sSelectMenuTilesetBuffer, 0x440); - CpuCopy16(sMonPicBg_Gfx, sSelectMonPicBgTilesetBuffer, 0x60); - LoadBgTiles(1, sSelectMenuTilesetBuffer, 0x440, 0); - LoadBgTiles(3, sSelectMonPicBgTilesetBuffer, 0x60, 0); - CpuCopy16(gFrontierFactorySelectMenu_Tilemap, sSelectMenuTilemapBuffer, BG_SCREEN_SIZE); + CpuCopy16(gFrontierFactoryMenu_Gfx, sSelectMenuTilesetBuffer, sizeof(gFrontierFactoryMenu_Gfx)); + CpuCopy16(sMonPicBg_Gfx, sSelectMonPicBgTilesetBuffer, sizeof(sMonPicBg_Gfx)); + LoadBgTiles(1, sSelectMenuTilesetBuffer, sizeof(gFrontierFactoryMenu_Gfx), 0); + LoadBgTiles(3, sSelectMonPicBgTilesetBuffer, sizeof(sMonPicBg_Gfx), 0); + CpuCopy16(gFrontierFactoryMenu_Tilemap, sSelectMenuTilemapBuffer, BG_SCREEN_SIZE); LoadBgTilemap(1, sSelectMenuTilemapBuffer, BG_SCREEN_SIZE, 0); - LoadPalette(gFrontierFactorySelectMenu_Pal, 0, 2 * PLTT_SIZE_4BPP); - LoadPalette(sSelectText_Pal, BG_PLTT_ID(15), PLTT_SIZEOF(4)); - LoadPalette(sSelectText_Pal, BG_PLTT_ID(14), PLTT_SIZEOF(5)); + LoadPalette(gFrontierFactoryMenu_Pal, 0, 2 * PLTT_SIZE_4BPP); + LoadPalette(sSelectText_Pal, BG_PLTT_ID(PALNUM_TEXT), PLTT_SIZEOF(4)); + LoadPalette(sSelectText_Pal, BG_PLTT_ID(PALNUM_FADE_TEXT), PLTT_SIZEOF(5)); #ifdef UBFIX if (sFactorySelectScreen && sFactorySelectScreen->fromSummaryScreen) #else if (sFactorySelectScreen->fromSummaryScreen == TRUE) #endif - gPlttBufferUnfaded[BG_PLTT_ID(14) + 4] = sFactorySelectScreen->speciesNameColorBackup; + gPlttBufferUnfaded[BG_PLTT_ID(PALNUM_FADE_TEXT) + 4] = sFactorySelectScreen->speciesNameColorBackup; LoadPalette(sMonPicBg_Pal, BG_PLTT_ID(2), PLTT_SIZEOF(2)); gMain.state++; break; @@ -1449,7 +1461,7 @@ static void Select_Task_OpenSummaryScreen(u8 taskId) switch (gTasks[taskId].tState) { case STATE_SUMMARY_FADE: - gPlttBufferUnfaded[BG_PLTT_ID(14) + 4] = gPlttBufferFaded[BG_PLTT_ID(14) + 4]; + gPlttBufferUnfaded[BG_PLTT_ID(PALNUM_FADE_TEXT) + 4] = gPlttBufferFaded[BG_PLTT_ID(PALNUM_FADE_TEXT) + 4]; BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); gTasks[taskId].tState = STATE_SUMMARY_CLEAN; break; @@ -1468,7 +1480,7 @@ static void Select_Task_OpenSummaryScreen(u8 taskId) } break; case STATE_SUMMARY_SHOW: - sFactorySelectScreen->speciesNameColorBackup = gPlttBufferUnfaded[BG_PLTT_ID(14) + 4]; + sFactorySelectScreen->speciesNameColorBackup = gPlttBufferUnfaded[BG_PLTT_ID(PALNUM_FADE_TEXT) + 4]; DestroyTask(taskId); sFactorySelectScreen->fromSummaryScreen = TRUE; currMonId = sFactorySelectScreen->cursorPos; @@ -1641,8 +1653,8 @@ static void Select_Task_HandleMenu(u8 taskId) { if (sFactorySelectScreen->fromSummaryScreen == TRUE) { - gPlttBufferFaded[BG_PLTT_ID(14) + 4] = sFactorySelectScreen->speciesNameColorBackup; - gPlttBufferUnfaded[BG_PLTT_ID(14) + 4] = gPlttBufferUnfaded[BG_PLTT_ID(15) + 4]; + gPlttBufferFaded[BG_PLTT_ID(PALNUM_FADE_TEXT) + 4] = sFactorySelectScreen->speciesNameColorBackup; + gPlttBufferUnfaded[BG_PLTT_ID(PALNUM_FADE_TEXT) + 4] = gPlttBufferUnfaded[BG_PLTT_ID(PALNUM_TEXT) + 4]; } sFactorySelectScreen->fromSummaryScreen = FALSE; gTasks[taskId].tState = STATE_MENU_HANDLE_INPUT; @@ -1735,9 +1747,9 @@ static void CreateFrontierFactorySelectableMons(u8 firstMonId) gFacilityTrainerMons = gBattleFrontierMons; if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_50) - level = 100; + level = FRONTIER_MAX_LEVEL_OPEN; else - level = 50; + level = FRONTIER_MAX_LEVEL_50; rentalRank = GetNumPastRentalsRank(battleMode, lvlMode); otId = T1_READ_32(gSaveBlock2Ptr->playerTrainerId); @@ -1769,7 +1781,7 @@ static void CreateSlateportTentSelectableMons(u8 firstMonId) { u8 i, j; u8 ivs = 0; - u8 level = 30; + u8 level = TENT_MIN_LEVEL; u8 friendship = 0; u32 otId = 0; @@ -1993,7 +2005,7 @@ static void Select_PrintMonCategory(void) FillWindowPixelBuffer(SELECT_WIN_MON_CATEGORY, PIXEL_FILL(0)); species = GetMonData(&sFactorySelectScreen->mons[monId].monData, MON_DATA_SPECIES, NULL); CopyMonCategoryText(SpeciesToNationalPokedexNum(species), text); - x = GetStringRightAlignXOffset(FONT_NORMAL, text, 0x76); + x = GetStringRightAlignXOffset(FONT_NORMAL, text, 118); AddTextPrinterParameterized(SELECT_WIN_MON_CATEGORY, FONT_NORMAL, text, x, 1, 0, NULL); CopyWindowToVram(SELECT_WIN_MON_CATEGORY, COPYWIN_GFX); } @@ -2290,7 +2302,7 @@ static void Select_Task_FadeSpeciesName(u8 taskId) else sFactorySelectScreen->fadeSpeciesNameCoeff++; } - BlendPalettes(0x4000, sFactorySelectScreen->fadeSpeciesNameCoeff, 0); + BlendPalettes(1 << PALNUM_FADE_TEXT, sFactorySelectScreen->fadeSpeciesNameCoeff, 0); if (sFactorySelectScreen->fadeSpeciesNameCoeff > 5) { sFactorySelectScreen->fadeSpeciesNameFadeOut = FALSE; @@ -2388,7 +2400,7 @@ static void Swap_Task_OpenSummaryScreen(u8 taskId) case STATE_SUMMARY_SHOW: DestroyTask(taskId); sFactorySwapScreen->fromSummaryScreen = TRUE; - sFactorySwapScreen->speciesNameColorBackup = gPlttBufferUnfaded[BG_PLTT_ID(15) + 4]; + sFactorySwapScreen->speciesNameColorBackup = gPlttBufferUnfaded[BG_PLTT_ID(PALNUM_TEXT) + 4]; ShowPokemonSummaryScreen(SUMMARY_MODE_NORMAL, gPlayerParty, sFactorySwapScreen->cursorPos, FRONTIER_PARTY_SIZE - 1, CB2_InitSwapScreen); break; } @@ -2709,7 +2721,7 @@ static void Swap_Task_FadeSpeciesName(u8 taskId) else sFactorySwapScreen->fadeSpeciesNameCoeff++; } - BlendPalettes(0x4000, sFactorySwapScreen->fadeSpeciesNameCoeff, 0); + BlendPalettes(1 << PALNUM_FADE_TEXT, sFactorySwapScreen->fadeSpeciesNameCoeff, 0); if (sFactorySwapScreen->fadeSpeciesNameCoeff > 5) { sFactorySwapScreen->fadeSpeciesNameFadeOut = FALSE; @@ -2748,7 +2760,7 @@ static void Swap_Task_FadeOutSpeciesName(u8 taskId) gTasks[taskId].tState++; break; case 1: - LoadPalette(&gPlttBufferUnfaded[BG_PLTT_ID(15)], BG_PLTT_ID(14), PLTT_SIZEOF(5)); + LoadPalette(&gPlttBufferUnfaded[BG_PLTT_ID(PALNUM_TEXT)], BG_PLTT_ID(PALNUM_FADE_TEXT), PLTT_SIZEOF(5)); gTasks[taskId].tState++; break; case 2: @@ -2761,10 +2773,10 @@ static void Swap_Task_FadeOutSpeciesName(u8 taskId) if (sFactorySwapScreen->fadeSpeciesNameCoeffDelay > 3) { sFactorySwapScreen->fadeSpeciesNameCoeffDelay = 0; - gPlttBufferUnfaded[BG_PLTT_ID(15) + 4] = gPlttBufferFaded[BG_PLTT_ID(14) + 4]; + gPlttBufferUnfaded[BG_PLTT_ID(PALNUM_TEXT) + 4] = gPlttBufferFaded[BG_PLTT_ID(PALNUM_FADE_TEXT) + 4]; sFactorySwapScreen->fadeSpeciesNameCoeff++; } - BlendPalettes(0x4000, sFactorySwapScreen->fadeSpeciesNameCoeff, 0); + BlendPalettes(1 << PALNUM_FADE_TEXT, sFactorySwapScreen->fadeSpeciesNameCoeff, 0); break; } } @@ -2994,7 +3006,7 @@ static void Swap_Task_ScreenInfoTransitionOut(u8 taskId) switch (gTasks[taskId].tState) { case 0: - LoadPalette(sSwapText_Pal, BG_PLTT_ID(14), sizeof(sSwapText_Pal)); + LoadPalette(sSwapText_Pal, BG_PLTT_ID(PALNUM_FADE_TEXT), sizeof(sSwapText_Pal)); Swap_PrintActionStrings(); PutWindowTilemap(SWAP_WIN_ACTION_FADE); gTasks[taskId].tState++; @@ -3004,7 +3016,7 @@ static void Swap_Task_ScreenInfoTransitionOut(u8 taskId) gTasks[taskId].tState++; break; case 2: - BeginNormalPaletteFade(0x4000, 0, 0, 16, sPokeballGray_Pal[37]); + BeginNormalPaletteFade(1 << PALNUM_FADE_TEXT, 0, 0, 16, sPokeballGray_Pal[37]); gTasks[taskId].tState++; break; case 3: @@ -3125,14 +3137,14 @@ static void Swap_Task_ScreenInfoTransitionIn(u8 taskId) if (gTasks[taskId].tSlideFinishedPkmn == TRUE && gTasks[taskId].tSlideFinishedCancel == TRUE) { - gPlttBufferFaded[BG_PLTT_ID(14) + 2] = sPokeballGray_Pal[37]; + gPlttBufferFaded[BG_PLTT_ID(PALNUM_FADE_TEXT) + 2] = sPokeballGray_Pal[37]; Swap_PrintActionStrings(); PutWindowTilemap(SWAP_WIN_ACTION_FADE); gTasks[taskId].tState++; } break; case 3: - BeginNormalPaletteFade(0x4000, 0, 16, 0, sPokeballGray_Pal[37]); + BeginNormalPaletteFade(1 << PALNUM_FADE_TEXT, 0, 16, 0, sPokeballGray_Pal[37]); gTasks[taskId].tState++; break; case 4: @@ -3275,8 +3287,12 @@ static void CB2_InitSwapScreen(void) gMain.state++; break; case 1: - sSwapMenuTilesetBuffer = Alloc(0x440); - sSwapMonPicBgTilesetBuffer = AllocZeroed(0x440); + sSwapMenuTilesetBuffer = Alloc(sizeof(gFrontierFactoryMenu_Gfx)); +#ifdef BUGFIX + sSwapMonPicBgTilesetBuffer = AllocZeroed(sizeof(sMonPicBg_Gfx)); +#else + sSwapMonPicBgTilesetBuffer = AllocZeroed(sizeof(gFrontierFactoryMenu_Gfx)); // Incorrect size +#endif sSwapMenuTilemapBuffer = Alloc(BG_SCREEN_SIZE); sSwapMonPicBgTilemapBuffer = AllocZeroed(BG_SCREEN_SIZE); ChangeBgX(0, 0, BG_COORD_SET); @@ -3303,15 +3319,15 @@ static void CB2_InitSwapScreen(void) ResetTasks(); FreeAllSpritePalettes(); ResetAllPicSprites(); - CpuCopy16(gFrontierFactorySelectMenu_Gfx, sSwapMenuTilesetBuffer, 0x440); - CpuCopy16(sMonPicBg_Gfx, sSwapMonPicBgTilesetBuffer, 0x60); - LoadBgTiles(1, sSwapMenuTilesetBuffer, 0x440, 0); - LoadBgTiles(3, sSwapMonPicBgTilesetBuffer, 0x60, 0); - CpuCopy16(gFrontierFactorySelectMenu_Tilemap, sSwapMenuTilemapBuffer, BG_SCREEN_SIZE); + CpuCopy16(gFrontierFactoryMenu_Gfx, sSwapMenuTilesetBuffer, sizeof(gFrontierFactoryMenu_Gfx)); + CpuCopy16(sMonPicBg_Gfx, sSwapMonPicBgTilesetBuffer, sizeof(sMonPicBg_Gfx)); + LoadBgTiles(1, sSwapMenuTilesetBuffer, sizeof(gFrontierFactoryMenu_Gfx), 0); + LoadBgTiles(3, sSwapMonPicBgTilesetBuffer, sizeof(sMonPicBg_Gfx), 0); + CpuCopy16(gFrontierFactoryMenu_Tilemap, sSwapMenuTilemapBuffer, BG_SCREEN_SIZE); LoadBgTilemap(1, sSwapMenuTilemapBuffer, BG_SCREEN_SIZE, 0); - LoadPalette(gFrontierFactorySelectMenu_Pal, 0, 2 * PLTT_SIZE_4BPP); - LoadPalette(sSwapText_Pal, BG_PLTT_ID(15), sizeof(sSwapText_Pal)); - LoadPalette(sSwapText_Pal, BG_PLTT_ID(14), sizeof(sSwapText_Pal)); + LoadPalette(gFrontierFactoryMenu_Pal, 0, 2 * PLTT_SIZE_4BPP); + LoadPalette(sSwapText_Pal, BG_PLTT_ID(PALNUM_TEXT), sizeof(sSwapText_Pal)); + LoadPalette(sSwapText_Pal, BG_PLTT_ID(PALNUM_FADE_TEXT), sizeof(sSwapText_Pal)); LoadPalette(sMonPicBg_Pal, BG_PLTT_ID(2), PLTT_SIZEOF(2)); gMain.state++; break; @@ -3808,7 +3824,7 @@ static void Swap_PrintYesNoOptions(void) static void Swap_PrintActionString(const u8 *str, u32 y, u32 windowId) { - s32 x = GetStringRightAlignXOffset(FONT_SMALL, str, 0x46); + s32 x = GetStringRightAlignXOffset(FONT_SMALL, str, 70); AddTextPrinterParameterized3(windowId, FONT_SMALL, x, y, sSwapMenuOptionsTextColors, 0, str); } @@ -3864,10 +3880,10 @@ static void Swap_PrintMonSpeciesAtFade(void) CpuCopy16(sSwapText_Pal, pal, 8); if (!sFactorySwapScreen->fromSummaryScreen) - pal[4] = gPlttBufferFaded[BG_PLTT_ID(14) + 4]; + pal[4] = gPlttBufferFaded[BG_PLTT_ID(PALNUM_FADE_TEXT) + 4]; else pal[4] = sFactorySwapScreen->speciesNameColorBackup; - LoadPalette(pal, BG_PLTT_ID(15), sizeof(sSwapText_Pal)); + LoadPalette(pal, BG_PLTT_ID(PALNUM_TEXT), sizeof(sSwapText_Pal)); PutWindowTilemap(SWAP_WIN_SPECIES_AT_FADE); FillWindowPixelBuffer(SWAP_WIN_SPECIES_AT_FADE, PIXEL_FILL(0)); @@ -3895,8 +3911,8 @@ static void Swap_PrintMonSpeciesForTransition(void) u16 species; u8 x; - LoadPalette(sSwapText_Pal, BG_PLTT_ID(14), sizeof(sSwapText_Pal)); - CpuCopy16(&gPlttBufferUnfaded[BG_PLTT_ID(15)], &gPlttBufferFaded[BG_PLTT_ID(14)], PLTT_SIZEOF(5)); + LoadPalette(sSwapText_Pal, BG_PLTT_ID(PALNUM_FADE_TEXT), sizeof(sSwapText_Pal)); + CpuCopy16(&gPlttBufferUnfaded[BG_PLTT_ID(PALNUM_TEXT)], &gPlttBufferFaded[BG_PLTT_ID(PALNUM_FADE_TEXT)], PLTT_SIZEOF(5)); if (sFactorySwapScreen->cursorPos >= FRONTIER_PARTY_SIZE) { @@ -3936,7 +3952,7 @@ static void Swap_PrintMonCategory(void) else species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, NULL); CopyMonCategoryText(SpeciesToNationalPokedexNum(species), text); - x = GetStringRightAlignXOffset(FONT_NORMAL, text, 0x76); + x = GetStringRightAlignXOffset(FONT_NORMAL, text, 118); AddTextPrinterParameterized(SWAP_WIN_MON_CATEGORY, FONT_NORMAL, text, x, 1, 0, NULL); CopyWindowToVram(SWAP_WIN_MON_CATEGORY, COPYWIN_GFX); } diff --git a/src/battle_pike.c b/src/battle_pike.c index 462ae4f383..d45a358d17 100644 --- a/src/battle_pike.c +++ b/src/battle_pike.c @@ -1267,6 +1267,10 @@ static void TryHealMons(u8 healCount) for (i = 0; i < FRONTIER_PARTY_SIZE; i++) indices[i] = i; + + // Only 'healCount' number of pokemon will be healed. + // The order in which they're (attempted to be) healed is random, + // and determined by performing 10 random swaps to this index array. for (k = 0; k < 10; k++) { u8 temp; @@ -1423,6 +1427,7 @@ static void PrepareTwoTrainers(void) gFacilityTrainers = gBattleFrontierTrainers; do { + // Pick the 1st trainer, making sure it's not one that's been encountered yet in this challenge. trainerId = GetRandomScaledFrontierTrainerId(challengeNum, 1); for (i = 0; i < gSaveBlock2Ptr->frontier.curChallengeBattleNum - 1; i++) { @@ -1438,6 +1443,7 @@ static void PrepareTwoTrainers(void) do { + // Pick the 2nd trainer, making sure it's not one that's been encountered yet in this challenge. trainerId = GetRandomScaledFrontierTrainerId(challengeNum, 1); for (i = 0; i < gSaveBlock2Ptr->frontier.curChallengeBattleNum; i++) { diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c index 07d7772f42..a692a4db88 100644 --- a/src/battle_pyramid.c +++ b/src/battle_pyramid.c @@ -38,6 +38,8 @@ #include "constants/moves.h" #include "constants/trainers.h" +#define NUM_LAYOUT_OFFSETS 8 // Assumed to be a power of 2 + extern const struct MapLayout *const gMapLayouts[]; struct PyramidWildMon @@ -55,7 +57,7 @@ struct PyramidFloorTemplate u8 itemPositions; u8 trainerPositions; u8 runMultiplier; - u8 layoutOffsets[8]; + u8 layoutOffsets[NUM_LAYOUT_OFFSETS]; }; struct PyramidTrainerEncounterMusic @@ -1902,7 +1904,7 @@ static void GetPyramidFloorLayoutOffsets(u8 *layoutOffsets) for (i = 0; i < NUM_PYRAMID_FLOOR_SQUARES; i++) { - layoutOffsets[i] = sPyramidFloorTemplates[id].layoutOffsets[rand & 0x7]; + layoutOffsets[i] = sPyramidFloorTemplates[id].layoutOffsets[rand & (NUM_LAYOUT_OFFSETS - 1)]; rand >>= 3; if (i == 7) { diff --git a/src/battle_tower.c b/src/battle_tower.c index 8838b5f2d2..4e99ec9add 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -3175,7 +3175,7 @@ void CalcApprenticeChecksum(struct Apprentice *apprentice) s32 i; apprentice->checksum = 0; - for (i = 0; i < (sizeof(struct Apprentice) - 4) / 4; i++) + for (i = 0; i < offsetof(struct Apprentice, checksum) / sizeof(u32); i++) apprentice->checksum += ((u32 *)apprentice)[i]; } @@ -3183,7 +3183,7 @@ static void ClearApprentice(struct Apprentice *apprentice) { s32 i; - for (i = 0; i < (sizeof(struct Apprentice)) / 4; i++) + for (i = 0; i < sizeof(struct Apprentice) / sizeof(u32); i++) ((u32 *)apprentice)[i] = 0; ResetApprenticeStruct(apprentice); } @@ -3196,7 +3196,7 @@ static void ValidateApprenticesChecksums(void) { u32 *data = (u32 *) &gSaveBlock2Ptr->apprentices[i]; u32 checksum = 0; - for (j = 0; j < (sizeof(struct Apprentice) - 4) / 4; j++) + for (j = 0; j < offsetof(struct Apprentice, checksum) / sizeof(u32); j++) checksum += data[j]; if (gSaveBlock2Ptr->apprentices[i].checksum != checksum) ClearApprentice(&gSaveBlock2Ptr->apprentices[i]); @@ -3506,7 +3506,7 @@ bool32 ValidateBattleTowerRecord(u8 recordId) // unused u32 *record = (u32 *)(&gSaveBlock2Ptr->frontier.towerRecords[recordId]); u32 checksum = 0; u32 hasData = 0; - for (i = 0; i < (sizeof(struct EmeraldBattleTowerRecord) - 4) / 4; i++) // - 4, because of the last fjeld bejng the checksum jtself. + for (i = 0; i < offsetof(struct EmeraldBattleTowerRecord, checksum) / sizeof(u32); i++) { checksum += record[i]; hasData |= record[i]; diff --git a/src/frontier_util.c b/src/frontier_util.c index 8cd385e653..528d83a659 100644 --- a/src/frontier_util.c +++ b/src/frontier_util.c @@ -698,8 +698,8 @@ static const u8 *const sRecordsWindowChallengeTexts[][2] = static const u8 *const sLevelModeText[] = { - gText_RecordsLv50, - gText_RecordsOpenLevel, + [FRONTIER_LVL_50] = gText_RecordsLv50, + [FRONTIER_LVL_OPEN] = gText_RecordsOpenLevel, }; static const u8 *const sHallFacilityToRecordsText[] = diff --git a/src/graphics.c b/src/graphics.c index 3cfd47ea76..220f5d44d9 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -955,7 +955,7 @@ const u32 gDomeTourneyInfoCard_Gfx[] = INCBIN_U32("graphics/battle_frontier/tour const u32 gDomeTourneyInfoCard_Tilemap[] = INCBIN_U32("graphics/battle_frontier/tourney_info_card_tilemap.bin.lz"); const u32 gDomeTourneyInfoCardBg_Tilemap[] = INCBIN_U32("graphics/battle_frontier/tourney_info_card_bg.bin.lz"); const u32 gDomeTourneyTreeButtons_Gfx[] = INCBIN_U32("graphics/battle_frontier/tourney_buttons.4bpp.lz"); // exit/cancel and pokeball buttons -const u32 gDomeTourneyTree_Pal[] = INCBIN_U32("graphics/battle_frontier/tourney.gbapal.lz"); +const u32 gDomeTourneyTree_Pal[] = INCBIN_U32("graphics/battle_frontier/tourney_tree.gbapal.lz"); const u32 gDomeTourneyTreeButtons_Pal[] = INCBIN_U32("graphics/battle_frontier/tourney_buttons.gbapal.lz"); const u32 gDomeTourneyMatchCardBg_Pal[] = INCBIN_U32("graphics/battle_frontier/tourney_match_card_bg.gbapal.lz"); @@ -1216,13 +1216,9 @@ const u32 gRouletteMultiplier_Gfx[] = INCBIN_U32("graphics/roulette/multiplier.4 #include "data/graphics/mail.h" -const u16 gFrontierFactorySelectMenu_Pal[] = INCBIN_U16("graphics/battle_frontier/factory_menu1.gbapal"); -const u16 gFrontierFactorySelectMenu_Pal2[] = INCBIN_U16("graphics/battle_frontier/factory_menu2.gbapal"); - -const u16 gFrontierFactorySelectMenu_Gfx[] = INCBIN_U16("graphics/battle_frontier/factory_menu1.4bpp"); -const u16 gFrontierFactorySelectMenu_Gfx2[] = INCBIN_U16("graphics/battle_frontier/factory_menu2.4bpp"); - -const u16 gFrontierFactorySelectMenu_Tilemap[] = INCBIN_U16("graphics/battle_frontier/factory_menu.bin"); +const u16 gFrontierFactoryMenu_Pal[] = INCBIN_U16("graphics/battle_frontier/factory_screen/menu.gbapal"); +const u16 gFrontierFactoryMenu_Gfx[] = INCBIN_U16("graphics/battle_frontier/factory_screen/menu.4bpp"); +const u16 gFrontierFactoryMenu_Tilemap[] = INCBIN_U16("graphics/battle_frontier/factory_screen/menu.bin"); const u32 gFrontierPassMedals_Gfx[] = INCBIN_U32("graphics/frontier_pass/medals.4bpp.lz"); diff --git a/src/start_menu.c b/src/start_menu.c index f19af9c09d..e39a5438ee 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -137,7 +137,15 @@ static void Task_SaveAfterLinkBattle(u8 taskId); static void Task_WaitForBattleTowerLinkSave(u8 taskId); static bool8 FieldCB_ReturnToFieldStartMenu(void); -static const struct WindowTemplate sSafariBallsWindowTemplate = {0, 1, 1, 9, 4, 0xF, 8}; +static const struct WindowTemplate sWindowTemplate_SafariBalls = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 1, + .width = 9, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x8 +}; static const u8 *const sPyramidFloorNames[FRONTIER_STAGES_PER_CHALLENGE + 1] = { @@ -151,8 +159,25 @@ static const u8 *const sPyramidFloorNames[FRONTIER_STAGES_PER_CHALLENGE + 1] = gText_Peak }; -static const struct WindowTemplate sPyramidFloorWindowTemplate_2 = {0, 1, 1, 0xA, 4, 0xF, 8}; -static const struct WindowTemplate sPyramidFloorWindowTemplate_1 = {0, 1, 1, 0xC, 4, 0xF, 8}; +static const struct WindowTemplate sWindowTemplate_PyramidFloor = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 1, + .width = 10, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x8 +}; + +static const struct WindowTemplate sWindowTemplate_PyramidPeak = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 1, + .width = 12, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x8 +}; static const struct MenuAction sStartMenuItems[] = { @@ -382,7 +407,7 @@ static void BuildMultiPartnerRoomStartMenu(void) static void ShowSafariBallsWindow(void) { - sSafariBallsWindowId = AddWindow(&sSafariBallsWindowTemplate); + sSafariBallsWindowId = AddWindow(&sWindowTemplate_SafariBalls); PutWindowTilemap(sSafariBallsWindowId); DrawStdWindowFrame(sSafariBallsWindowId, FALSE); ConvertIntToDecimalStringN(gStringVar1, gNumSafariBalls, STR_CONV_MODE_RIGHT_ALIGN, 2); @@ -394,9 +419,9 @@ static void ShowSafariBallsWindow(void) static void ShowPyramidFloorWindow(void) { if (gSaveBlock2Ptr->frontier.curChallengeBattleNum == FRONTIER_STAGES_PER_CHALLENGE) - sBattlePyramidFloorWindowId = AddWindow(&sPyramidFloorWindowTemplate_1); + sBattlePyramidFloorWindowId = AddWindow(&sWindowTemplate_PyramidPeak); else - sBattlePyramidFloorWindowId = AddWindow(&sPyramidFloorWindowTemplate_2); + sBattlePyramidFloorWindowId = AddWindow(&sWindowTemplate_PyramidFloor); PutWindowTilemap(sBattlePyramidFloorWindowId); DrawStdWindowFrame(sBattlePyramidFloorWindowId, FALSE); From 6d4dadd7b55c61e8dae9df0332a7538bcde426dc Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 3 Aug 2023 15:45:53 -0400 Subject: [PATCH 21/43] Add temp flag aliases --- data/maps/IslandCave/scripts.inc | 10 ++++----- data/maps/Route130/map.json | 2 +- data/maps/Route130/scripts.inc | 3 ++- .../ShoalCave_LowTideEntranceRoom/scripts.inc | 4 ++-- data/scripts/gabby_and_ty.inc | 8 +++---- include/constants/flags.h | 6 +++++ src/braille_puzzles.c | 22 +++++++++++-------- src/tv.c | 7 ++---- 8 files changed, 35 insertions(+), 27 deletions(-) diff --git a/data/maps/IslandCave/scripts.inc b/data/maps/IslandCave/scripts.inc index d15802aaa8..1bfadb9f2e 100644 --- a/data/maps/IslandCave/scripts.inc +++ b/data/maps/IslandCave/scripts.inc @@ -51,10 +51,10 @@ IslandCave_EventScript_OpenRegiEntrance:: IslandCave_EventScript_CaveEntranceMiddle:: lockall - call_if_set FLAG_TEMP_3, IslandCave_EventScript_ClearSteps + call_if_set FLAG_TEMP_REGICE_PUZZLE_FAILED, IslandCave_EventScript_ClearSteps goto_if_set FLAG_SYS_BRAILLE_REGICE_COMPLETED, IslandCave_EventScript_BigHoleInWall braillemessage IslandCave_Braille_RunLapAroundWall - setflag FLAG_TEMP_2 + setflag FLAG_TEMP_REGICE_PUZZLE_STARTED special ShouldDoBrailleRegicePuzzle goto IslandCave_EventScript_CloseBrailleMsg end @@ -66,10 +66,10 @@ IslandCave_EventScript_BigHoleInWall:: IslandCave_EventScript_CaveEntranceSide:: lockall - call_if_set FLAG_TEMP_3, IslandCave_EventScript_ClearSteps + call_if_set FLAG_TEMP_REGICE_PUZZLE_FAILED, IslandCave_EventScript_ClearSteps braillemessage IslandCave_Braille_RunLapAroundWall goto_if_set FLAG_SYS_BRAILLE_REGICE_COMPLETED, IslandCave_EventScript_CloseBrailleMsg - setflag FLAG_TEMP_2 + setflag FLAG_TEMP_REGICE_PUZZLE_STARTED special ShouldDoBrailleRegicePuzzle goto IslandCave_EventScript_CloseBrailleMsg end @@ -84,7 +84,7 @@ IslandCave_EventScript_ClearSteps:: setvar VAR_REGICE_STEPS_1, 0 setvar VAR_REGICE_STEPS_2, 0 setvar VAR_REGICE_STEPS_3, 0 - clearflag FLAG_TEMP_3 + clearflag FLAG_TEMP_REGICE_PUZZLE_FAILED return IslandCave_EventScript_Regice:: diff --git a/data/maps/Route130/map.json b/data/maps/Route130/map.json index 7b37a10edd..bb79a2bb4a 100644 --- a/data/maps/Route130/map.json +++ b/data/maps/Route130/map.json @@ -62,7 +62,7 @@ "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "BERRY_TREE_ROUTE_130_LIECHI", "script": "BerryTreeScript", - "flag": "FLAG_TEMP_11" + "flag": "FLAG_TEMP_HIDE_MIRAGE_ISLAND_BERRY_TREE" }, { "graphics_id": "OBJ_EVENT_GFX_SWIMMER_M", diff --git a/data/maps/Route130/scripts.inc b/data/maps/Route130/scripts.inc index 7e0ecc8bd1..b5b9227e84 100644 --- a/data/maps/Route130/scripts.inc +++ b/data/maps/Route130/scripts.inc @@ -6,7 +6,8 @@ Route130_OnTransition: call_if_ge VAR_SOOTOPOLIS_CITY_STATE, 4, Route130_EventScript_CheckSetAbnormalWeather specialvar VAR_RESULT, IsMirageIslandPresent goto_if_eq VAR_RESULT, TRUE, Route130_EventScript_SetMirageIslandLayout - setflag FLAG_TEMP_11 +@ Mirage Island isn't currently visible, hide any objects on the island. Only the first flag is actually associated with anything. + setflag FLAG_TEMP_HIDE_MIRAGE_ISLAND_BERRY_TREE setflag FLAG_TEMP_12 setflag FLAG_TEMP_13 setflag FLAG_TEMP_14 diff --git a/data/maps/ShoalCave_LowTideEntranceRoom/scripts.inc b/data/maps/ShoalCave_LowTideEntranceRoom/scripts.inc index 905a9a77a7..80368b1488 100644 --- a/data/maps/ShoalCave_LowTideEntranceRoom/scripts.inc +++ b/data/maps/ShoalCave_LowTideEntranceRoom/scripts.inc @@ -33,9 +33,9 @@ ShoalCave_LowTideEntranceRoom_EventScript_ShellBellExpert:: removeitem ITEM_SHOAL_SALT, 4 removeitem ITEM_SHOAL_SHELL, 4 giveitem ITEM_SHELL_BELL - goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull + goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull @ Never FALSE, we already made sure there will be room in the bag. msgbox ShoalCave_LowTideEntranceRoom_Text_ExplainShellBell, MSGBOX_DEFAULT - setflag FLAG_TEMP_2 + setflag FLAG_TEMP_2 @ Not read. Perhaps meant to stop him from re-explaining the Shell Bell if multiple are received in one sitting. release end diff --git a/data/scripts/gabby_and_ty.inc b/data/scripts/gabby_and_ty.inc index e3dbdfd665..260526c4b6 100644 --- a/data/scripts/gabby_and_ty.inc +++ b/data/scripts/gabby_and_ty.inc @@ -202,7 +202,7 @@ GabbyAndTy_EventScript_FirstInterview:: call_if_eq VAR_FACING, DIR_NORTH, GabbyAndTy_EventScript_FacePlayerNorth call_if_eq VAR_FACING, DIR_SOUTH, GabbyAndTy_EventScript_FacePlayerSouth call_if_eq VAR_FACING, DIR_EAST, GabbyAndTy_EventScript_FacePlayerEast - goto_if_set FLAG_TEMP_1, GabbyAndTy_EventScript_KeepingAnEyeOutForYou + goto_if_set FLAG_TEMP_SKIP_GABBY_INTERVIEW, GabbyAndTy_EventScript_KeepingAnEyeOutForYou msgbox GabbyAndTy_Text_WhoAreYouInterview, MSGBOX_YESNO goto GabbyAndTy_EventScript_Interview end @@ -230,7 +230,7 @@ GabbyAndTy_EventScript_RequestInterview:: call_if_eq VAR_FACING, DIR_NORTH, GabbyAndTy_EventScript_FacePlayerNorth call_if_eq VAR_FACING, DIR_SOUTH, GabbyAndTy_EventScript_FacePlayerSouth call_if_eq VAR_FACING, DIR_EAST, GabbyAndTy_EventScript_FacePlayerEast - goto_if_set FLAG_TEMP_1, GabbyAndTy_EventScript_KeepingAnEyeOutForYou + goto_if_set FLAG_TEMP_SKIP_GABBY_INTERVIEW, GabbyAndTy_EventScript_KeepingAnEyeOutForYou specialvar VAR_RESULT, GabbyAndTyGetLastQuote goto_if_eq VAR_RESULT, 0, GabbyAndTy_EventScript_DidntInterviewLastTime msgbox GabbyAndTy_Text_QuoteFromLastInterview, MSGBOX_DEFAULT @@ -295,13 +295,13 @@ GabbyAndTy_EventScript_Interview:: goto_if_eq VAR_RESULT, 0, GabbyAndTy_EventScript_DontGiveUpKeepingEyeOut msgbox GabbyAndTy_Text_PerfectWellBeSeeingYou, MSGBOX_DEFAULT special GabbyAndTyAfterInterview - setflag FLAG_TEMP_1 + setflag FLAG_TEMP_SKIP_GABBY_INTERVIEW release end GabbyAndTy_EventScript_DontGiveUpKeepingEyeOut:: msgbox GabbyAndTy_Text_DontGiveUpKeepingEyeOut, MSGBOX_DEFAULT - setflag FLAG_TEMP_1 + setflag FLAG_TEMP_SKIP_GABBY_INTERVIEW release end diff --git a/include/constants/flags.h b/include/constants/flags.h index 59bde846c5..5761fb0eda 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -1644,4 +1644,10 @@ // FLAG_SPECIAL_FLAG_0x4005 - 0x407F also exist and are unused #define SPECIAL_FLAGS_END (SPECIAL_FLAGS_START + 0x7F) +// Temp flag aliases +#define FLAG_TEMP_SKIP_GABBY_INTERVIEW FLAG_TEMP_1 +#define FLAG_TEMP_REGICE_PUZZLE_STARTED FLAG_TEMP_2 +#define FLAG_TEMP_REGICE_PUZZLE_FAILED FLAG_TEMP_3 +#define FLAG_TEMP_HIDE_MIRAGE_ISLAND_BERRY_TREE FLAG_TEMP_11 + #endif // GUARD_CONSTANTS_FLAGS_H diff --git a/src/braille_puzzles.c b/src/braille_puzzles.c index 3487428495..49f73dd6b7 100644 --- a/src/braille_puzzles.c +++ b/src/braille_puzzles.c @@ -278,6 +278,8 @@ bool8 FldEff_UsePuzzleEffect(void) return FALSE; } +// The puzzle to unlock Regice's cave requires the player to interact with the braille message on the back wall, +// step on every space on the perimeter of the cave (and only those spaces) then return to the back wall. bool8 ShouldDoBrailleRegicePuzzle(void) { u8 i; @@ -287,9 +289,11 @@ bool8 ShouldDoBrailleRegicePuzzle(void) { if (FlagGet(FLAG_SYS_BRAILLE_REGICE_COMPLETED)) return FALSE; - if (FlagGet(FLAG_TEMP_2) == FALSE) + // Set when the player interacts with the braille message + if (FlagGet(FLAG_TEMP_REGICE_PUZZLE_STARTED) == FALSE) return FALSE; - if (FlagGet(FLAG_TEMP_3) == TRUE) + // Cleared when the player interacts with the braille message + if (FlagGet(FLAG_TEMP_REGICE_PUZZLE_FAILED) == TRUE) return FALSE; for (i = 0; i < ARRAY_COUNT(sRegicePathCoords); i++) @@ -298,8 +302,7 @@ bool8 ShouldDoBrailleRegicePuzzle(void) u8 yPos = sRegicePathCoords[i][1]; if (gSaveBlock1Ptr->pos.x == xPos && gSaveBlock1Ptr->pos.y == yPos) { - u16 varValue; - + // Player is standing on a correct space, set the corresponding bit if (i < 16) { u16 val = VarGet(VAR_REGICE_STEPS_1); @@ -319,11 +322,11 @@ bool8 ShouldDoBrailleRegicePuzzle(void) VarSet(VAR_REGICE_STEPS_3, val); } - varValue = VarGet(VAR_REGICE_STEPS_1); - if (varValue != 0xFFFF || VarGet(VAR_REGICE_STEPS_2) != 0xFFFF || VarGet(VAR_REGICE_STEPS_3) != 0xF) + // Make sure a full lap has been completed. There are 36 steps in a lap, so 16+16+4 bits to check across the 3 vars. + if (VarGet(VAR_REGICE_STEPS_1) != 0xFFFF || VarGet(VAR_REGICE_STEPS_2) != 0xFFFF || VarGet(VAR_REGICE_STEPS_3) != 0xF) return FALSE; - // This final check is redundant. + // A lap has been completed, the puzzle is complete when the player returns to the braille message. if (gSaveBlock1Ptr->pos.x == 8 && gSaveBlock1Ptr->pos.y == 21) return TRUE; else @@ -331,8 +334,9 @@ bool8 ShouldDoBrailleRegicePuzzle(void) } } - FlagSet(FLAG_TEMP_3); - FlagClear(FLAG_TEMP_2); + // Player stepped on an incorrect space, puzzle failed. + FlagSet(FLAG_TEMP_REGICE_PUZZLE_FAILED); + FlagClear(FLAG_TEMP_REGICE_PUZZLE_STARTED); } return FALSE; diff --git a/src/tv.c b/src/tv.c index 85819a7a1d..696e0519ba 100644 --- a/src/tv.c +++ b/src/tv.c @@ -941,9 +941,8 @@ void GabbyAndTyBeforeInterview(void) gSaveBlock1Ptr->gabbyAndTyData.mon2 = gBattleResults.playerMon2Species; gSaveBlock1Ptr->gabbyAndTyData.lastMove = gBattleResults.lastUsedMovePlayer; if (gSaveBlock1Ptr->gabbyAndTyData.battleNum != 0xFF) - { gSaveBlock1Ptr->gabbyAndTyData.battleNum++; - } + gSaveBlock1Ptr->gabbyAndTyData.battleTookMoreThanOneTurn = gBattleResults.playerMonWasDamaged; if (gBattleResults.playerFaintCounter != 0) @@ -975,9 +974,7 @@ void GabbyAndTyBeforeInterview(void) TakeGabbyAndTyOffTheAir(); if (gSaveBlock1Ptr->gabbyAndTyData.lastMove == MOVE_NONE) - { - FlagSet(FLAG_TEMP_1); - } + FlagSet(FLAG_TEMP_SKIP_GABBY_INTERVIEW); } void GabbyAndTyAfterInterview(void) From 866c32a7352812f686b0d620b5a17b73eb6a8ae9 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 4 Aug 2023 14:17:28 -0400 Subject: [PATCH 22/43] Add temp var aliases --- asm/macros/battle_frontier/frontier_util.inc | 2 +- .../scripts.inc | 24 ++++++------- .../scripts.inc | 22 ++++++------ .../scripts.inc | 22 ++++++------ .../scripts.inc | 24 ++++++------- .../scripts.inc | 20 +++++------ .../scripts.inc | 8 ++--- .../scripts.inc | 6 ++-- .../scripts.inc | 22 ++++++------ .../scripts.inc | 6 ++-- .../scripts.inc | 34 +++++++++---------- data/maps/BattleFrontier_Lounge7/scripts.inc | 26 +++++++------- .../FallarborTown_BattleTentLobby/scripts.inc | 26 +++++++------- data/maps/FortreeCity_Gym/scripts.inc | 1 + .../scripts.inc | 6 ++-- .../MossdeepCity_StevensHouse/scripts.inc | 2 +- .../Route110_TrickHousePuzzle6/scripts.inc | 1 + .../Route119_WeatherInstitute_2F/scripts.inc | 2 +- .../RustboroCity_DevonCorp_2F/scripts.inc | 4 +-- .../SlateportCity_BattleTentLobby/scripts.inc | 22 ++++++------ .../scripts.inc | 26 +++++++------- data/scripts/cable_club.inc | 13 ++++--- data/scripts/pc_transfer.inc | 2 +- include/constants/flags.h | 3 ++ include/constants/vars.h | 16 ++++++++- src/battle_arena.c | 2 +- src/battle_dome.c | 2 +- src/battle_factory.c | 2 +- src/battle_palace.c | 2 +- src/battle_pike.c | 2 +- src/battle_pyramid.c | 4 +-- src/battle_setup.c | 4 +-- src/battle_tent.c | 6 ++-- src/battle_tower.c | 2 +- src/event_data.c | 11 ++---- src/field_specials.c | 4 +-- src/field_tasks.c | 3 ++ src/frontier_util.c | 12 +++---- src/record_mixing.c | 6 ++-- src/rotating_gate.c | 15 ++++---- src/tv.c | 5 +++ 41 files changed, 223 insertions(+), 199 deletions(-) diff --git a/asm/macros/battle_frontier/frontier_util.inc b/asm/macros/battle_frontier/frontier_util.inc index c875fcdde2..e40eccb5e7 100644 --- a/asm/macros/battle_frontier/frontier_util.inc +++ b/asm/macros/battle_frontier/frontier_util.inc @@ -1,4 +1,4 @@ - @ Get the status (CHALLENGE_STATUS_*) of the current challenge and store the result in VAR_TEMP_0 + @ Get the status (CHALLENGE_STATUS_*) of the current challenge and store the result in VAR_TEMP_CHALLENGE_STATUS .macro frontier_getstatus setvar VAR_0x8004, FRONTIER_UTIL_FUNC_GET_STATUS special CallFrontierUtilFunc diff --git a/data/maps/BattleFrontier_BattleArenaLobby/scripts.inc b/data/maps/BattleFrontier_BattleArenaLobby/scripts.inc index 9467f34197..5d9ee507ec 100644 --- a/data/maps/BattleFrontier_BattleArenaLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattleArenaLobby/scripts.inc @@ -15,11 +15,11 @@ BattleFrontier_BattleArenaLobby_EventScript_TurnPlayerNorth:: end BattleFrontier_BattleArenaLobby_OnFrame: - map_script_2 VAR_TEMP_0, 0, BattleFrontier_BattleArenaLobby_EventScript_GetChallengeStatus - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_SAVING, BattleFrontier_BattleArenaLobby_EventScript_QuitWithoutSaving - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_PAUSED, BattleFrontier_BattleArenaLobby_EventScript_ResumeChallenge - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_WON, BattleFrontier_BattleArenaLobby_EventScript_WonChallenge - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_LOST, BattleFrontier_BattleArenaLobby_EventScript_LostChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, 0, BattleFrontier_BattleArenaLobby_EventScript_GetChallengeStatus + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING, BattleFrontier_BattleArenaLobby_EventScript_QuitWithoutSaving + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_PAUSED, BattleFrontier_BattleArenaLobby_EventScript_ResumeChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_WON, BattleFrontier_BattleArenaLobby_EventScript_WonChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_LOST, BattleFrontier_BattleArenaLobby_EventScript_LostChallenge .2byte 0 BattleFrontier_BattleArenaLobby_EventScript_GetChallengeStatus:: @@ -33,7 +33,7 @@ BattleFrontier_BattleArenaLobby_EventScript_QuitWithoutSaving:: arena_set ARENA_DATA_WIN_STREAK, 0 arena_set ARENA_DATA_WIN_STREAK_ACTIVE, FALSE frontier_set FRONTIER_DATA_CHALLENGE_STATUS, 0 - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -55,7 +55,7 @@ BattleFrontier_BattleArenaLobby_EventScript_GiveBattlePoints:: call BattleFrontier_BattleArenaLobby_EventScript_SaveAfterChallenge msgbox BattleFrontier_BattleArenaLobby_Text_AwaitAnotherChallenge2, MSGBOX_DEFAULT closemessage - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -67,7 +67,7 @@ BattleFrontier_BattleArenaLobby_EventScript_LostChallenge:: call BattleFrontier_BattleArenaLobby_EventScript_SaveAfterChallenge msgbox BattleFrontier_BattleArenaLobby_Text_AwaitAnotherChallenge2, MSGBOX_DEFAULT closemessage - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -101,7 +101,7 @@ BattleFrontier_BattleArenaLobby_EventScript_ResumeChallenge:: playse SE_SAVE waitse frontier_set FRONTIER_DATA_PAUSED, FALSE - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 goto BattleFrontier_BattleArenaLobby_EventScript_EnterChallenge BattleFrontier_BattleArenaLobby_EventScript_Attendant:: @@ -146,7 +146,7 @@ BattleFrontier_BattleArenaLobby_EventScript_TryEnterChallenge:: case MULTI_B_PRESSED, BattleFrontier_BattleArenaLobby_EventScript_LoadPartyAndCancelChallenge BattleFrontier_BattleArenaLobby_EventScript_SaveBeforeChallenge:: - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 frontier_set FRONTIER_DATA_SELECTED_MON_ORDER arena_init arena_set ARENA_DATA_WIN_STREAK_ACTIVE, TRUE @@ -156,7 +156,7 @@ BattleFrontier_BattleArenaLobby_EventScript_SaveBeforeChallenge:: closemessage delay 2 call Common_EventScript_SaveGame - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleArenaLobby_EventScript_CancelChallengeSaveFailed BattleFrontier_BattleArenaLobby_EventScript_EnterChallenge:: special SavePlayerParty @@ -167,7 +167,7 @@ BattleFrontier_BattleArenaLobby_EventScript_EnterChallenge:: call_if_eq VAR_RESULT, FRONTIER_LVL_50, BattleFrontier_BattleArenaLobby_EventScript_WalkToDoorLv50 call_if_eq VAR_RESULT, FRONTIER_LVL_OPEN, BattleFrontier_BattleArenaLobby_EventScript_WalkToDoorLvOpen warp MAP_BATTLE_FRONTIER_BATTLE_ARENA_CORRIDOR, 9, 13 - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 waitstate end diff --git a/data/maps/BattleFrontier_BattleDomeLobby/scripts.inc b/data/maps/BattleFrontier_BattleDomeLobby/scripts.inc index b972a0814c..9801b19fe5 100644 --- a/data/maps/BattleFrontier_BattleDomeLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattleDomeLobby/scripts.inc @@ -21,11 +21,11 @@ BattleFrontier_BattleDomeLobby_EventScript_TurnPlayerNorth:: end BattleFrontier_BattleDomeLobby_OnFrame: - map_script_2 VAR_TEMP_0, 0, BattleFrontier_BattleDomeLobby_EventScript_GetChallengeStatus - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_SAVING, BattleFrontier_BattleDomeLobby_EventScript_QuitWithoutSaving - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_PAUSED, BattleFrontier_BattleDomeLobby_EventScript_ResumeChallenge - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_WON, BattleFrontier_BattleDomeLobby_EventScript_WonChallenge - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_LOST, BattleFrontier_BattleDomeLobby_EventScript_LostChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, 0, BattleFrontier_BattleDomeLobby_EventScript_GetChallengeStatus + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING, BattleFrontier_BattleDomeLobby_EventScript_QuitWithoutSaving + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_PAUSED, BattleFrontier_BattleDomeLobby_EventScript_ResumeChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_WON, BattleFrontier_BattleDomeLobby_EventScript_WonChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_LOST, BattleFrontier_BattleDomeLobby_EventScript_LostChallenge .2byte 0 BattleFrontier_BattleDomeLobby_EventScript_GetChallengeStatus:: @@ -40,7 +40,7 @@ BattleFrontier_BattleDomeLobby_EventScript_QuitWithoutSaving:: dome_set DOME_DATA_WIN_STREAK_ACTIVE, FALSE dome_set DOME_DATA_ATTEMPTED_CHALLENGE, TRUE frontier_set FRONTIER_DATA_CHALLENGE_STATUS, 0 - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -101,7 +101,7 @@ BattleFrontier_BattleDomeLobby_EventScript_RecordBattle:: BattleFrontier_BattleDomeLobby_EventScript_EndChallenge:: msgbox BattleFrontier_BattleDomeLobby_Text_HopeToSeeYouAgain, MSGBOX_DEFAULT closemessage - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -114,7 +114,7 @@ BattleFrontier_BattleDomeLobby_EventScript_ResumeChallenge:: playse SE_SAVE waitse frontier_set FRONTIER_DATA_PAUSED, FALSE - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 goto BattleFrontier_BattleDomeLobby_EventScript_EnterChallenge BattleFrontier_BattleDomeLobby_EventScript_SinglesAttendant:: @@ -173,7 +173,7 @@ BattleFrontier_BattleDomeLobby_EventScript_TryEnterChallenge:: case MULTI_B_PRESSED, BattleFrontier_BattleDomeLobby_EventScript_LoadPartyCancelChallenge BattleFrontier_BattleDomeLobby_EventScript_SaveBeforeChallenge:: - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 frontier_set FRONTIER_DATA_SELECTED_MON_ORDER dome_init frontier_set FRONTIER_DATA_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING @@ -182,7 +182,7 @@ BattleFrontier_BattleDomeLobby_EventScript_SaveBeforeChallenge:: closemessage delay 2 call Common_EventScript_SaveGame - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleDomeLobby_EventScript_CancelChallengeSaveFailed dome_inittrainers BattleFrontier_BattleDomeLobby_EventScript_EnterChallenge:: @@ -194,7 +194,7 @@ BattleFrontier_BattleDomeLobby_EventScript_EnterChallenge:: call BattleFrontier_BattleDomeLobby_EventScript_WalkToDoor special HealPlayerParty warp MAP_BATTLE_FRONTIER_BATTLE_DOME_CORRIDOR, 23, 6 - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 waitstate end diff --git a/data/maps/BattleFrontier_BattleFactoryLobby/scripts.inc b/data/maps/BattleFrontier_BattleFactoryLobby/scripts.inc index 682b2c91d1..be9caa0cd7 100644 --- a/data/maps/BattleFrontier_BattleFactoryLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattleFactoryLobby/scripts.inc @@ -16,11 +16,11 @@ BattleFrontier_BattleFactoryLobby_EventScript_TurnPlayerNorth:: end BattleFrontier_BattleFactoryLobby_OnFrame: - map_script_2 VAR_TEMP_0, 0, BattleFrontier_BattleFactoryLobby_EventScript_GetChallengeStatus - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_SAVING, BattleFrontier_BattleFactoryLobby_EventScript_QuitWithoutSaving - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_PAUSED, BattleFrontier_BattleFactoryLobby_EventScript_ResumeChallenge - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_WON, BattleFrontier_BattleFactoryLobby_EventScript_WonChallenge - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_LOST, BattleFrontier_BattleFactoryLobby_EventScript_LostChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, 0, BattleFrontier_BattleFactoryLobby_EventScript_GetChallengeStatus + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING, BattleFrontier_BattleFactoryLobby_EventScript_QuitWithoutSaving + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_PAUSED, BattleFrontier_BattleFactoryLobby_EventScript_ResumeChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_WON, BattleFrontier_BattleFactoryLobby_EventScript_WonChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_LOST, BattleFrontier_BattleFactoryLobby_EventScript_LostChallenge .2byte 0 BattleFrontier_BattleFactoryLobby_EventScript_GetChallengeStatus:: @@ -36,7 +36,7 @@ BattleFrontier_BattleFactoryLobby_EventScript_QuitWithoutSaving:: factory_set FACTORY_DATA_WIN_STREAK, 0 factory_set FACTORY_DATA_WIN_STREAK_ACTIVE, FALSE frontier_set FRONTIER_DATA_CHALLENGE_STATUS, 0 - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -92,7 +92,7 @@ BattleFrontier_BattleFactoryLobby_EventScript_RecordBattle:: BattleFrontier_BattleFactoryLobby_EventScript_EndRecordBattle:: msgbox BattleFrontier_BattleFactoryLobby_Text_LookForwardToNextVisit, MSGBOX_DEFAULT closemessage - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -104,7 +104,7 @@ BattleFrontier_BattleFactoryLobby_EventScript_ResumeChallenge:: playse SE_SAVE waitse frontier_set FRONTIER_DATA_PAUSED, FALSE - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 setvar VAR_0x8006, 2 goto BattleFrontier_BattleFactoryLobby_EventScript_EnterChallenge @@ -152,7 +152,7 @@ BattleFrontier_BattleFactoryLobby_EventScript_TryEnterChallenge:: case MULTI_B_PRESSED, BattleFrontier_BattleFactoryLobby_EventScript_LoadPartyAndCancelChallenge BattleFrontier_BattleFactoryLobby_EventScript_SaveBeforeChallenge:: - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 factory_init frontier_set FRONTIER_DATA_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING factory_set FACTORY_DATA_WIN_STREAK_ACTIVE, TRUE @@ -160,7 +160,7 @@ BattleFrontier_BattleFactoryLobby_EventScript_SaveBeforeChallenge:: closemessage delay 2 call Common_EventScript_SaveGame - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleFactoryLobby_EventScript_CancelChallengeSaveFailed setvar VAR_0x8006, 0 BattleFrontier_BattleFactoryLobby_EventScript_EnterChallenge:: @@ -173,7 +173,7 @@ BattleFrontier_BattleFactoryLobby_EventScript_EnterChallenge:: applymovement OBJ_EVENT_ID_PLAYER, BattleFrontier_BattleFactoryLobby_Movement_PlayerEnterDoor waitmovement 0 warp MAP_BATTLE_FRONTIER_BATTLE_FACTORY_PRE_BATTLE_ROOM, 8, 13 - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 waitstate end diff --git a/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc b/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc index 2a8903fe6f..e38ec6f7db 100644 --- a/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc @@ -16,11 +16,11 @@ BattleFrontier_BattlePalaceLobby_EventScript_TurnPlayerNorth:: end BattleFrontier_BattlePalaceLobby_OnFrame: - map_script_2 VAR_TEMP_0, 0, BattleFrontier_BattlePalaceLobby_EventScript_GetChallengeStatus - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_SAVING, BattleFrontier_BattlePalaceLobby_EventScript_QuitWithoutSaving - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_PAUSED, BattleFrontier_BattlePalaceLobby_EventScript_ResumeChallenge - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_WON, BattleFrontier_BattlePalaceLobby_EventScript_WonChallenge - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_LOST, BattleFrontier_BattlePalaceLobby_EventScript_LostChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, 0, BattleFrontier_BattlePalaceLobby_EventScript_GetChallengeStatus + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING, BattleFrontier_BattlePalaceLobby_EventScript_QuitWithoutSaving + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_PAUSED, BattleFrontier_BattlePalaceLobby_EventScript_ResumeChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_WON, BattleFrontier_BattlePalaceLobby_EventScript_WonChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_LOST, BattleFrontier_BattlePalaceLobby_EventScript_LostChallenge .2byte 0 BattleFrontier_BattlePalaceLobby_EventScript_GetChallengeStatus:: @@ -34,7 +34,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_QuitWithoutSaving:: palace_set PALACE_DATA_WIN_STREAK, 0 palace_set PALACE_DATA_WIN_STREAK_ACTIVE, FALSE frontier_set FRONTIER_DATA_CHALLENGE_STATUS, 0 - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -56,7 +56,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_GiveBattlePoints:: call BattleFrontier_BattlePalaceLobby_EventScript_SaveAfterChallenge msgbox BattleFrontier_BattlePalaceLobby_Text_ReturnWhenFortified, MSGBOX_DEFAULT closemessage - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -68,7 +68,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_LostChallenge:: call BattleFrontier_BattlePalaceLobby_EventScript_SaveAfterChallenge msgbox BattleFrontier_BattlePalaceLobby_Text_ReturnWhenFortified, MSGBOX_DEFAULT closemessage - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -103,7 +103,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_ResumeChallenge:: playse SE_SAVE waitse frontier_set FRONTIER_DATA_PAUSED, FALSE - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 goto BattleFrontier_BattlePalaceLobby_EventScript_EnterChallenge BattleFrontier_BattlePalaceLobby_EventScript_SinglesAttendant:: @@ -164,7 +164,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_TryEnterChallenge:: case MULTI_B_PRESSED, BattleFrontier_BattlePalaceLobby_EventScript_LoadPartyAndCancelChallenge BattleFrontier_BattlePalaceLobby_EventScript_SaveBeforeChallenge:: - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 frontier_set FRONTIER_DATA_SELECTED_MON_ORDER palace_init palace_set PALACE_DATA_WIN_STREAK_ACTIVE, TRUE @@ -174,7 +174,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_SaveBeforeChallenge:: closemessage delay 2 call Common_EventScript_SaveGame - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 goto_if_eq VAR_RESULT, 0, BattleFrontier_BattlePalaceLobby_EventScript_CancelChallengeSaveFailed BattleFrontier_BattlePalaceLobby_EventScript_EnterChallenge:: special SavePlayerParty @@ -183,7 +183,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_EnterChallenge:: closemessage call BattleFrontier_BattlePalaceLobby_EventScript_WalkToDoor warp MAP_BATTLE_FRONTIER_BATTLE_PALACE_CORRIDOR, 8, 13 - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 waitstate end diff --git a/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc b/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc index 3e729e2121..faba545f0e 100644 --- a/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc @@ -6,10 +6,10 @@ BattleFrontier_BattlePikeLobby_MapScripts:: .byte 0 BattleFrontier_BattlePikeLobby_OnFrame: - map_script_2 VAR_TEMP_0, 0, BattleFrontier_BattlePikeLobby_EventScript_GetChallengeStatus - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_SAVING, BattleFrontier_BattlePikeLobby_EventScript_QuitWithoutSaving - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_WON, BattleFrontier_BattlePikeLobby_EventScript_WonChallenge - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_LOST, BattleFrontier_BattlePikeLobby_EventScript_LostChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, 0, BattleFrontier_BattlePikeLobby_EventScript_GetChallengeStatus + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING, BattleFrontier_BattlePikeLobby_EventScript_QuitWithoutSaving + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_WON, BattleFrontier_BattlePikeLobby_EventScript_WonChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_LOST, BattleFrontier_BattlePikeLobby_EventScript_LostChallenge .2byte 0 BattleFrontier_BattlePikeLobby_OnWarp: @@ -34,7 +34,7 @@ BattleFrontier_BattlePikeLobby_EventScript_QuitWithoutSaving:: pike_set PIKE_DATA_WIN_STREAK, 0 pike_set PIKE_DATA_WIN_STREAK_ACTIVE, FALSE frontier_set FRONTIER_DATA_CHALLENGE_STATUS, 0 - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -67,7 +67,7 @@ BattleFrontier_BattlePikeLobby_EventScript_GiveBattlePoints:: waitse msgbox BattleFrontier_BattlePikeLobby_Text_LookForwardToSeeingYou, MSGBOX_DEFAULT closemessage - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -86,7 +86,7 @@ BattleFrontier_BattlePikeLobby_EventScript_LostChallenge:: waitse msgbox BattleFrontier_BattlePikeLobby_Text_LookForwardToSeeingYou, MSGBOX_DEFAULT closemessage - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -132,7 +132,7 @@ BattleFrontier_BattlePikeLobby_EventScript_TryEnterChallenge:: case MULTI_B_PRESSED, BattleFrontier_BattlePikeLobby_EventScript_LoadPartyAndCancelChallenge BattleFrontier_BattlePikeLobby_EventScript_SaveBeforeChallenge:: - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 setvar VAR_TEMP_1, 0 frontier_set FRONTIER_DATA_SELECTED_MON_ORDER pike_init @@ -144,7 +144,7 @@ BattleFrontier_BattlePikeLobby_EventScript_SaveBeforeChallenge:: closemessage delay 2 call Common_EventScript_SaveGame - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 pike_savehelditems goto_if_eq VAR_RESULT, 0, BattleFrontier_BattlePikeLobby_EventScript_CancelChallengeSaveFailed special SavePlayerParty @@ -156,7 +156,7 @@ BattleFrontier_BattlePikeLobby_EventScript_SaveBeforeChallenge:: special HealPlayerParty call BattleFrontier_BattlePike_EventScript_CloseCurtain warpsilent MAP_BATTLE_FRONTIER_BATTLE_PIKE_CORRIDOR, 6, 7 - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 waitstate end diff --git a/data/maps/BattleFrontier_BattlePikeThreePathRoom/scripts.inc b/data/maps/BattleFrontier_BattlePikeThreePathRoom/scripts.inc index e95ca9dcea..3547871444 100644 --- a/data/maps/BattleFrontier_BattlePikeThreePathRoom/scripts.inc +++ b/data/maps/BattleFrontier_BattlePikeThreePathRoom/scripts.inc @@ -7,9 +7,9 @@ BattleFrontier_BattlePikeThreePathRoom_MapScripts:: .byte 0 BattleFrontier_BattlePikeThreePathRoom_OnFrame: - map_script_2 VAR_TEMP_0, 0, BattleFrontier_BattlePikeThreePathRoom_EventScript_GetChallengeStatus - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_SAVING, BattleFrontier_BattlePikeThreePathRoom_EventScript_WarpToLobby - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_PAUSED, BattleFrontier_BattlePikeThreePathRoom_EventScript_ResumeChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, 0, BattleFrontier_BattlePikeThreePathRoom_EventScript_GetChallengeStatus + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING, BattleFrontier_BattlePikeThreePathRoom_EventScript_WarpToLobby + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_PAUSED, BattleFrontier_BattlePikeThreePathRoom_EventScript_ResumeChallenge map_script_2 VAR_TEMP_5, 0, BattleFrontier_BattlePikeThreePathRoom_EventScript_SetHintRoom map_script_2 VAR_TEMP_5, 1, BattleFrontier_BattlePikeThreePathRoom_EventScript_GivePikeQueenHint .2byte 0 @@ -40,7 +40,7 @@ BattleFrontier_BattlePikeThreePathRoom_EventScript_ResumeChallenge:: playse SE_SAVE waitse frontier_set FRONTIER_DATA_PAUSED, FALSE - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 special SavePlayerParty frontier_setpartyorder FRONTIER_PARTY_SIZE msgbox BattleFrontier_BattlePikeThreePathRoom_Text_PleaseEnjoyChallenge, MSGBOX_DEFAULT diff --git a/data/maps/BattleFrontier_BattlePyramidFloor/scripts.inc b/data/maps/BattleFrontier_BattlePyramidFloor/scripts.inc index a6b3f63c8e..ba9d996706 100644 --- a/data/maps/BattleFrontier_BattlePyramidFloor/scripts.inc +++ b/data/maps/BattleFrontier_BattlePyramidFloor/scripts.inc @@ -6,7 +6,7 @@ BattleFrontier_BattlePyramidFloor_MapScripts:: BattleFrontier_BattlePyramidFloor_OnFrame: map_script_2 VAR_TEMP_D, 1, BattleFrontier_BattlePyramidFloor_EventScript_UpdateLight - map_script_2 VAR_TEMP_E, 0, BattleFrontier_BattlePyramidFloor_EventScript_PlayPyramidMusic + map_script_2 VAR_TEMP_PLAYING_PYRAMID_MUSIC, 0, BattleFrontier_BattlePyramidFloor_EventScript_PlayPyramidMusic map_script_2 VAR_TEMP_F, 1, BattleFrontier_BattlePyramidFloor_EventScript_ShowMapName .2byte 0 @@ -33,13 +33,13 @@ BattleFrontier_BattlePyramidFloor_EventScript_ShowMapName:: BattleFrontier_BattlePyramidFloor_EventScript_PlayPyramidMusic:: playbgm MUS_B_PYRAMID, FALSE - setvar VAR_TEMP_E, 1 + setvar VAR_TEMP_PLAYING_PYRAMID_MUSIC, 1 end BattleFrontier_BattlePyramidFloor_OnResume: pyramid_setfloorpal frontier_getstatus - switch VAR_TEMP_0 + switch VAR_TEMP_CHALLENGE_STATUS case 0, BattleFrontier_BattlePyramidFloor_EventScript_ReadyChallenge case CHALLENGE_STATUS_SAVING, BattleFrontier_BattlePyramid_EventScript_WarpToLobby case CHALLENGE_STATUS_PAUSED, BattleFrontier_BattlePyramidFloor_EventScript_ReadyChallenge diff --git a/data/maps/BattleFrontier_BattlePyramidLobby/scripts.inc b/data/maps/BattleFrontier_BattlePyramidLobby/scripts.inc index 550644511b..25f5dc2b04 100644 --- a/data/maps/BattleFrontier_BattlePyramidLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattlePyramidLobby/scripts.inc @@ -17,11 +17,11 @@ BattleFrontier_BattlePyramidLobby_EventScript_TurnPlayerNorth: end BattleFrontier_BattlePyramidLobby_OnFrame: - map_script_2 VAR_TEMP_0, 0, BattleFrontier_BattlePyramidLobby_EventScript_GetChallengeStatus - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_SAVING, BattleFrontier_BattlePyramidLobby_EventScript_QuitWithoutSaving - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_PAUSED, BattleFrontier_BattlePyramidLobby_EventScript_ResumeChallenge - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_WON, BattleFrontier_BattlePyramidLobby_EventScript_WonChallenge - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_LOST, BattleFrontier_BattlePyramidLobby_EventScript_LostChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, 0, BattleFrontier_BattlePyramidLobby_EventScript_GetChallengeStatus + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING, BattleFrontier_BattlePyramidLobby_EventScript_QuitWithoutSaving + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_PAUSED, BattleFrontier_BattlePyramidLobby_EventScript_ResumeChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_WON, BattleFrontier_BattlePyramidLobby_EventScript_WonChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_LOST, BattleFrontier_BattlePyramidLobby_EventScript_LostChallenge .2byte 0 BattleFrontier_BattlePyramidLobby_EventScript_GetChallengeStatus:: @@ -38,7 +38,7 @@ BattleFrontier_BattlePyramidLobby_EventScript_QuitWithoutSaving:: pyramid_set PYRAMID_DATA_WIN_STREAK, 0 pyramid_set PYRAMID_DATA_WIN_STREAK_ACTIVE, FALSE frontier_set FRONTIER_DATA_CHALLENGE_STATUS, 0 - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -74,7 +74,7 @@ BattleFrontier_BattlePyramidLobby_EventScript_GiveBattlePoints:: waitse msgbox BattleFrontier_BattlePyramidLobby_Text_LookForwardToNextChallenge, MSGBOX_DEFAULT closemessage - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -96,7 +96,7 @@ BattleFrontier_BattlePyramidLobby_EventScript_LostChallenge:: waitse msgbox BattleFrontier_BattlePyramidLobby_Text_LookForwardToNextChallenge, MSGBOX_DEFAULT closemessage - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -145,7 +145,7 @@ BattleFrontier_BattlePyramidLobby_EventScript_TryEnterChallenge:: case MULTI_B_PRESSED, BattleFrontier_BattlePyramidLobby_EventScript_LoadPartyAndCancelChallenge BattleFrontier_BattlePyramidLobby_EventScript_SaveBeforeChallenge:: - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 frontier_set FRONTIER_DATA_SELECTED_MON_ORDER pyramid_init pyramid_set PYRAMID_DATA_WIN_STREAK_ACTIVE, TRUE @@ -157,7 +157,7 @@ BattleFrontier_BattlePyramidLobby_EventScript_SaveBeforeChallenge:: closemessage delay 2 call Common_EventScript_SaveGame - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 goto_if_eq VAR_RESULT, 0, BattleFrontier_BattlePyramidLobby_EventScript_CancelChallengeSaveFailed BattleFrontier_BattlePyramidLobby_EventScript_EnterChallenge:: special SavePlayerParty @@ -169,7 +169,7 @@ BattleFrontier_BattlePyramidLobby_EventScript_EnterChallenge:: setvar VAR_RESULT, 0 special HealPlayerParty warp MAP_BATTLE_FRONTIER_BATTLE_PYRAMID_FLOOR, 1, 1 - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 waitstate end diff --git a/data/maps/BattleFrontier_BattlePyramidTop/scripts.inc b/data/maps/BattleFrontier_BattlePyramidTop/scripts.inc index 385356c4ba..fa57635271 100644 --- a/data/maps/BattleFrontier_BattlePyramidTop/scripts.inc +++ b/data/maps/BattleFrontier_BattlePyramidTop/scripts.inc @@ -32,7 +32,7 @@ BattleFrontier_BattlePyramidTop_OnResume: BattleFrontier_BattlePyramidTop_EventScript_CheckChallengeStatus:: copyvar VAR_TEMP_C, VAR_RESULT frontier_getstatus - switch VAR_TEMP_0 + switch VAR_TEMP_CHALLENGE_STATUS case 0, BattleFrontier_BattlePyramidTop_EventScript_ReadyChallenge case CHALLENGE_STATUS_SAVING, BattleFrontier_BattlePyramid_EventScript_WarpToLobby case CHALLENGE_STATUS_PAUSED, BattleFrontier_BattlePyramidTop_EventScript_ReadyChallenge @@ -43,13 +43,13 @@ BattleFrontier_BattlePyramidTop_EventScript_CheckChallengeStatus:: end BattleFrontier_BattlePyramidTop_OnFrame: - map_script_2 VAR_TEMP_E, 0, BattleFrontier_BattlePyramidTop_EventScript_PlayPyramidMusic + map_script_2 VAR_TEMP_PLAYING_PYRAMID_MUSIC, 0, BattleFrontier_BattlePyramidTop_EventScript_PlayPyramidMusic map_script_2 VAR_TEMP_F, 1, BattleFrontier_BattlePyramidTop_EventScript_ShowMapName .2byte 0 BattleFrontier_BattlePyramidTop_EventScript_PlayPyramidMusic:: playbgm MUS_B_PYRAMID_TOP, FALSE - setvar VAR_TEMP_E, 1 + setvar VAR_TEMP_PLAYING_PYRAMID_MUSIC, 1 end BattleFrontier_BattlePyramidTop_EventScript_ShowMapName:: diff --git a/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc b/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc index 8d60105bd3..6162d0ada6 100644 --- a/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc @@ -41,11 +41,11 @@ BattleFrontier_BattleTowerLobby_EventScript_PlayerFaceNorth:: end BattleFrontier_BattleTowerLobby_OnFrame: - map_script_2 VAR_TEMP_0, 0, BattleFrontier_BattleTowerLobby_EventScript_GetChallengeStatus - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_SAVING, BattleFrontier_BattleTowerLobby_EventScript_QuitWithoutSaving - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_PAUSED, BattleFrontier_BattleTowerLobby_EventScript_ResumeChallenge - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_WON, BattleFrontier_BattleTowerLobby_EventScript_WonChallenge - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_LOST, BattleFrontier_BattleTowerLobby_EventScript_LostChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, 0, BattleFrontier_BattleTowerLobby_EventScript_GetChallengeStatus + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING, BattleFrontier_BattleTowerLobby_EventScript_QuitWithoutSaving + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_PAUSED, BattleFrontier_BattleTowerLobby_EventScript_ResumeChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_WON, BattleFrontier_BattleTowerLobby_EventScript_WonChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_LOST, BattleFrontier_BattleTowerLobby_EventScript_LostChallenge .2byte 0 BattleFrontier_BattleTowerLobby_EventScript_GetChallengeStatus:: @@ -60,7 +60,7 @@ BattleFrontier_BattleTowerLobby_EventScript_QuitWithoutSaving:: tower_set TOWER_DATA_WIN_STREAK, 0 tower_set TOWER_DATA_WIN_STREAK_ACTIVE, FALSE frontier_set FRONTIER_DATA_CHALLENGE_STATUS, 0 - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 release end @@ -94,7 +94,7 @@ BattleFrontier_BattleTowerLobby_EventScript_GiveBattlePoints:: BattleFrontier_BattleTowerLobby_EventScript_LookForwardToChallenge:: msgbox BattleFrontier_BattleTowerLobby_Text_LookForwardToAnotherChallenge, MSGBOX_DEFAULT closemessage - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 release end @@ -113,7 +113,7 @@ BattleFrontier_BattleTowerLobby_EventScript_LostThanksForPlaying:: call BattleFrontier_BattleTowerLobby_EventScript_AskSaveBattle msgbox BattleFrontier_BattleTowerLobby_Text_LookForwardToAnotherChallenge, MSGBOX_DEFAULT closemessage - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 release end @@ -214,7 +214,7 @@ BattleFrontier_BattleTowerLobby_EventScript_TryEnterSinglesChallenge:: BattleFrontier_BattleTowerLobby_EventScript_SaveBeforeSinglesChallenge:: frontier_set FRONTIER_DATA_SELECTED_MON_ORDER - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 tower_init tower_set TOWER_DATA_WIN_STREAK_ACTIVE, TRUE frontier_set FRONTIER_DATA_PAUSED, FALSE @@ -222,7 +222,7 @@ BattleFrontier_BattleTowerLobby_EventScript_SaveBeforeSinglesChallenge:: closemessage delay 2 call Common_EventScript_SaveGame - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleTowerLobby_EventScript_CancelChallengeSaveFailed incrementgamestat GAME_STAT_ENTERED_BATTLE_TOWER setvar VAR_BRAVO_TRAINER_BATTLE_TOWER_ON, TRUE @@ -277,7 +277,7 @@ BattleFrontier_BattleTowerLobby_EventScript_TryEnterDoublesChallenge:: BattleFrontier_BattleTowerLobby_EventScript_SaveBeforeDoublesChallenge:: frontier_set FRONTIER_DATA_SELECTED_MON_ORDER - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 tower_init tower_set TOWER_DATA_WIN_STREAK_ACTIVE, TRUE frontier_set FRONTIER_DATA_PAUSED, FALSE @@ -285,7 +285,7 @@ BattleFrontier_BattleTowerLobby_EventScript_SaveBeforeDoublesChallenge:: closemessage delay 2 call Common_EventScript_SaveGame - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleTowerLobby_EventScript_CancelChallengeSaveFailed incrementgamestat GAME_STAT_ENTERED_BATTLE_TOWER setvar VAR_BRAVO_TRAINER_BATTLE_TOWER_ON, FALSE @@ -341,7 +341,7 @@ BattleFrontier_BattleTowerLobby_EventScript_TryEnterMultisChallenge:: BattleFrontier_BattleTowerLobby_EventScript_SaveBeforeMultisChallenge:: frontier_set FRONTIER_DATA_SELECTED_MON_ORDER - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 tower_init tower_set TOWER_DATA_WIN_STREAK_ACTIVE, TRUE frontier_set FRONTIER_DATA_PAUSED, FALSE @@ -349,7 +349,7 @@ BattleFrontier_BattleTowerLobby_EventScript_SaveBeforeMultisChallenge:: closemessage delay 2 call Common_EventScript_SaveGame - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleTowerLobby_EventScript_CancelChallengeSaveFailed incrementgamestat GAME_STAT_ENTERED_BATTLE_TOWER setvar VAR_BRAVO_TRAINER_BATTLE_TOWER_ON, FALSE @@ -404,7 +404,7 @@ BattleFrontier_BattleTowerLobby_EventScript_TryEnterLinkMultisChallenge:: BattleFrontier_BattleTowerLobby_EventScript_SaveBeforeLinkMultisChallenge:: frontier_set FRONTIER_DATA_SELECTED_MON_ORDER - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 tower_init tower_set TOWER_DATA_WIN_STREAK_ACTIVE, TRUE frontier_set FRONTIER_DATA_PAUSED, FALSE @@ -419,7 +419,7 @@ BattleFrontier_BattleTowerLobby_EventScript_SaveBeforeLinkMultisChallenge:: tower_save 0 .endif call Common_EventScript_SaveGame - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleTowerLobby_EventScript_CancelChallengeSaveFailed @ GAME_STAT_ENTERED_BATTLE_TOWER should not be incremented here, for two reasons: @ 1. It is incremented again in BattleFrontier_BattleTowerLobby_EventScript_CableLinkSuccessful or BattleFrontier_BattleTowerLobby_EventScript_WirelessLinkSuccessful @@ -602,7 +602,7 @@ BattleFrontier_BattleTowerLobby_EventScript_WaitForLinkOpponentLoad:: call BattleFrontier_BattleTowerLobby_EventScript_ShowYouToBattleRoom clearflag FLAG_CANCEL_BATTLE_ROOM_CHALLENGE warp MAP_BATTLE_FRONTIER_BATTLE_TOWER_ELEVATOR, 1, 6 - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 waitstate end diff --git a/data/maps/BattleFrontier_Lounge7/scripts.inc b/data/maps/BattleFrontier_Lounge7/scripts.inc index c52df3cafb..d2b6114a72 100644 --- a/data/maps/BattleFrontier_Lounge7/scripts.inc +++ b/data/maps/BattleFrontier_Lounge7/scripts.inc @@ -20,12 +20,12 @@ BattleFrontier_Lounge7_EventScript_ChooseLeftTutorMove:: message BattleFrontier_Lounge7_Text_TeachWhichMove waitmessage special ShowBattlePointsWindow - setvar VAR_TEMP_E, 0 + setvar VAR_TEMP_FRONTIER_TUTOR_ID, 0 setvar VAR_0x8004, SCROLL_MULTI_BF_MOVE_TUTOR_1 setvar VAR_0x8006, 0 special ShowScrollableMultichoice waitstate - copyvar VAR_TEMP_D, VAR_RESULT + copyvar VAR_TEMP_FRONTIER_TUTOR_SELECTION, VAR_RESULT switch VAR_RESULT case 0, BattleFrontier_Lounge7_EventScript_Softboiled case 1, BattleFrontier_Lounge7_EventScript_SeismicToss @@ -44,12 +44,12 @@ BattleFrontier_Lounge7_EventScript_ChooseLeftTutorMove:: BattleFrontier_Lounge7_EventScript_ChooseNewLeftTutorMove:: message BattleFrontier_Lounge7_Text_TeachWhichMove waitmessage - setvar VAR_TEMP_E, 0 + setvar VAR_TEMP_FRONTIER_TUTOR_ID, 0 setvar VAR_0x8004, SCROLL_MULTI_BF_MOVE_TUTOR_1 setvar VAR_0x8006, 1 special ShowScrollableMultichoice waitstate - copyvar VAR_TEMP_D, VAR_RESULT + copyvar VAR_TEMP_FRONTIER_TUTOR_SELECTION, VAR_RESULT switch VAR_RESULT case 0, BattleFrontier_Lounge7_EventScript_Softboiled case 1, BattleFrontier_Lounge7_EventScript_SeismicToss @@ -134,12 +134,12 @@ BattleFrontier_Lounge7_EventScript_ChooseRightTutorMove:: message BattleFrontier_Lounge7_Text_TeachWhichMove waitmessage special ShowBattlePointsWindow - setvar VAR_TEMP_E, 1 + setvar VAR_TEMP_FRONTIER_TUTOR_ID, 1 setvar VAR_0x8004, SCROLL_MULTI_BF_MOVE_TUTOR_2 setvar VAR_0x8006, 0 special ShowScrollableMultichoice waitstate - copyvar VAR_TEMP_D, VAR_RESULT + copyvar VAR_TEMP_FRONTIER_TUTOR_SELECTION, VAR_RESULT switch VAR_RESULT case 0, BattleFrontier_Lounge7_EventScript_DefenseCurl case 1, BattleFrontier_Lounge7_EventScript_Snore @@ -158,12 +158,12 @@ BattleFrontier_Lounge7_EventScript_ChooseRightTutorMove:: BattleFrontier_Lounge7_EventScript_ChooseNewRightTutorMove:: message BattleFrontier_Lounge7_Text_TeachWhichMove waitmessage - setvar VAR_TEMP_E, 1 + setvar VAR_TEMP_FRONTIER_TUTOR_ID, 1 setvar VAR_0x8004, SCROLL_MULTI_BF_MOVE_TUTOR_2 setvar VAR_0x8006, 1 special ShowScrollableMultichoice waitstate - copyvar VAR_TEMP_D, VAR_RESULT + copyvar VAR_TEMP_FRONTIER_TUTOR_SELECTION, VAR_RESULT switch VAR_RESULT case 0, BattleFrontier_Lounge7_EventScript_DefenseCurl case 1, BattleFrontier_Lounge7_EventScript_Snore @@ -243,11 +243,11 @@ BattleFrontier_Lounge7_EventScript_CancelChooseMon:: @ VAR_0x8008 is the price @ VAR_TEMP_C is the scroll multichoice ID -@ VAR_TEMP_D is the move selection -@ VAR_TEMP_E is which move tutor was spoken to +@ VAR_TEMP_FRONTIER_TUTOR_SELECTION is the move selection +@ VAR_TEMP_FRONTIER_TUTOR_ID is which move tutor was spoken to BattleFrontier_Lounge7_EventScript_ConfirmMoveSelection:: - copyvar VAR_0x8004, VAR_TEMP_D - copyvar VAR_0x8005, VAR_TEMP_E + copyvar VAR_0x8004, VAR_TEMP_FRONTIER_TUTOR_SELECTION + copyvar VAR_0x8005, VAR_TEMP_FRONTIER_TUTOR_ID special BufferBattleFrontierTutorMoveName buffernumberstring STR_VAR_2, VAR_0x8008 copyvar VAR_0x8004, VAR_TEMP_C @@ -275,7 +275,7 @@ BattleFrontier_Lounge7_EventScript_TeachTutorMove:: end BattleFrontier_Lounge7_EventScript_ChooseNewMove:: - goto_if_eq VAR_TEMP_E, 0, BattleFrontier_Lounge7_EventScript_ChooseNewLeftTutorMove + goto_if_eq VAR_TEMP_FRONTIER_TUTOR_ID, 0, BattleFrontier_Lounge7_EventScript_ChooseNewLeftTutorMove goto BattleFrontier_Lounge7_EventScript_ChooseNewRightTutorMove end diff --git a/data/maps/FallarborTown_BattleTentLobby/scripts.inc b/data/maps/FallarborTown_BattleTentLobby/scripts.inc index 1bcd04559c..8f705075c7 100644 --- a/data/maps/FallarborTown_BattleTentLobby/scripts.inc +++ b/data/maps/FallarborTown_BattleTentLobby/scripts.inc @@ -15,11 +15,11 @@ FallarborTown_BattleTentLobby_EventScript_TurnPlayerNorth:: end FallarborTown_BattleTentLobby_OnFrame: - map_script_2 VAR_TEMP_0, 0, FallarborTown_BattleTentLobby_EventScript_GetChallengeStatus - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_SAVING, FallarborTown_BattleTentLobby_EventScript_QuitWithoutSaving - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_PAUSED, FallarborTown_BattleTentLobby_EventScript_ResumeChallenge - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_WON, FallarborTown_BattleTentLobby_EventScript_WonChallenge - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_LOST, FallarborTown_BattleTentLobby_EventScript_LostChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, 0, FallarborTown_BattleTentLobby_EventScript_GetChallengeStatus + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING, FallarborTown_BattleTentLobby_EventScript_QuitWithoutSaving + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_PAUSED, FallarborTown_BattleTentLobby_EventScript_ResumeChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_WON, FallarborTown_BattleTentLobby_EventScript_WonChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_LOST, FallarborTown_BattleTentLobby_EventScript_LostChallenge .2byte 0 FallarborTown_BattleTentLobby_EventScript_GetChallengeStatus:: @@ -31,7 +31,7 @@ FallarborTown_BattleTentLobby_EventScript_QuitWithoutSaving:: msgbox FallarborTown_BattleTentLobby_Text_DidntSaveBeforeQuitting, MSGBOX_DEFAULT closemessage frontier_set FRONTIER_DATA_CHALLENGE_STATUS, 0 - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 frontier_set FRONTIER_DATA_LVL_MODE, FRONTIER_LVL_50 releaseall end @@ -59,7 +59,7 @@ FallarborTown_BattleTentLobby_EventScript_GivePrize:: waitfanfare msgbox FallarborTown_BattleTentLobby_Text_AwaitAnotherChallenge2, MSGBOX_DEFAULT closemessage - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -67,7 +67,7 @@ FallarborTown_BattleTentLobby_EventScript_NoRoomForPrize:: msgbox FallarborTown_BattleTentLobby_Text_BagFullReturnForPrize, MSGBOX_DEFAULT waitmessage closemessage - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -87,7 +87,7 @@ FallarborTown_BattleTentLobby_EventScript_LostChallenge:: waitse msgbox FallarborTown_BattleTentLobby_Text_AwaitAnotherChallenge2, MSGBOX_DEFAULT closemessage - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -99,7 +99,7 @@ FallarborTown_BattleTentLobby_EventScript_ResumeChallenge:: playse SE_SAVE waitse frontier_set FRONTIER_DATA_PAUSED, FALSE - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 goto FallarborTown_BattleTentLobby_EventScript_EnterChallenge FallarborTown_BattleTentLobby_EventScript_Attendant:: @@ -140,7 +140,7 @@ FallarborTown_BattleTentLobby_EventScript_TryEnterChallenge:: case MULTI_B_PRESSED, FallarborTown_BattleTentLobby_EventScript_LoadPartyCancelChallenge FallarborTown_BattleTentLobby_EventScript_SaveBeforeChallenge:: - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 frontier_set FRONTIER_DATA_SELECTED_MON_ORDER fallarbortent_init frontier_set FRONTIER_DATA_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING @@ -149,7 +149,7 @@ FallarborTown_BattleTentLobby_EventScript_SaveBeforeChallenge:: closemessage delay 2 call Common_EventScript_SaveGame - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 goto_if_eq VAR_RESULT, 0, FallarborTown_BattleTentLobby_EventScript_CancelChallengeSaveFailed FallarborTown_BattleTentLobby_EventScript_EnterChallenge:: special SavePlayerParty @@ -158,7 +158,7 @@ FallarborTown_BattleTentLobby_EventScript_EnterChallenge:: closemessage call FallarborTown_BattleTentLobby_EventScript_WalkToDoor warp MAP_FALLARBOR_TOWN_BATTLE_TENT_CORRIDOR, 2, 7 - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 waitstate end diff --git a/data/maps/FortreeCity_Gym/scripts.inc b/data/maps/FortreeCity_Gym/scripts.inc index 1c729bc44e..b43913f638 100644 --- a/data/maps/FortreeCity_Gym/scripts.inc +++ b/data/maps/FortreeCity_Gym/scripts.inc @@ -11,6 +11,7 @@ FortreeCity_Gym_OnWarp: map_script_2 VAR_TEMP_0, VAR_TEMP_0, FortreeCity_Gym_EventScript_InitRotatingGates .2byte 0 +@ NOTE: This rotating gate puzzle makes use of VAR_TEMP_0 - VAR_TEMP_3 FortreeCity_Gym_EventScript_InitRotatingGates:: special RotatingGate_InitPuzzleAndGraphics end diff --git a/data/maps/LittlerootTown_ProfessorBirchsLab/scripts.inc b/data/maps/LittlerootTown_ProfessorBirchsLab/scripts.inc index acf80f0e40..0c8a468ab0 100644 --- a/data/maps/LittlerootTown_ProfessorBirchsLab/scripts.inc +++ b/data/maps/LittlerootTown_ProfessorBirchsLab/scripts.inc @@ -339,7 +339,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_TakeYourTime:: LittlerootTown_ProfessorBirchsLab_EventScript_GiveCyndaquil:: bufferspeciesname STR_VAR_1, SPECIES_CYNDAQUIL - setvar VAR_TEMP_1, SPECIES_CYNDAQUIL + setvar VAR_TEMP_TRANSFERRED_SPECIES, SPECIES_CYNDAQUIL givemon SPECIES_CYNDAQUIL, 5 goto_if_eq VAR_RESULT, MON_GIVEN_TO_PARTY, LittlerootTown_ProfessorBirchsLab_EventScript_SendCyndaquilToParty goto_if_eq VAR_RESULT, MON_GIVEN_TO_PC, LittlerootTown_ProfessorBirchsLab_EventScript_SendCyndaquilToPC @@ -380,7 +380,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_ReceivedCyndaquil:: LittlerootTown_ProfessorBirchsLab_EventScript_GiveTotodile:: bufferspeciesname STR_VAR_1, SPECIES_TOTODILE - setvar VAR_TEMP_1, SPECIES_TOTODILE + setvar VAR_TEMP_TRANSFERRED_SPECIES, SPECIES_TOTODILE givemon SPECIES_TOTODILE, 5 goto_if_eq VAR_RESULT, MON_GIVEN_TO_PARTY, LittlerootTown_ProfessorBirchsLab_EventScript_SendTotodileToParty goto_if_eq VAR_RESULT, MON_GIVEN_TO_PC, LittlerootTown_ProfessorBirchsLab_EventScript_SendTotodileToPC @@ -421,7 +421,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_ReceivedTotodile:: LittlerootTown_ProfessorBirchsLab_EventScript_GiveChikorita:: bufferspeciesname STR_VAR_1, SPECIES_CHIKORITA - setvar VAR_TEMP_1, SPECIES_CHIKORITA + setvar VAR_TEMP_TRANSFERRED_SPECIES, SPECIES_CHIKORITA givemon SPECIES_CHIKORITA, 5 goto_if_eq VAR_RESULT, MON_GIVEN_TO_PARTY, LittlerootTown_ProfessorBirchsLab_EventScript_SendChikoritaToParty goto_if_eq VAR_RESULT, MON_GIVEN_TO_PC, LittlerootTown_ProfessorBirchsLab_EventScript_SendChikoritaToPC diff --git a/data/maps/MossdeepCity_StevensHouse/scripts.inc b/data/maps/MossdeepCity_StevensHouse/scripts.inc index 0470e977a6..7aa1277793 100644 --- a/data/maps/MossdeepCity_StevensHouse/scripts.inc +++ b/data/maps/MossdeepCity_StevensHouse/scripts.inc @@ -85,7 +85,7 @@ MossdeepCity_StevensHouse_EventScript_LeaveBeldum:: end MossdeepCity_StevensHouse_EventScript_GiveBeldum:: - setvar VAR_TEMP_1, SPECIES_BELDUM + setvar VAR_TEMP_TRANSFERRED_SPECIES, SPECIES_BELDUM givemon SPECIES_BELDUM, 5 goto_if_eq VAR_RESULT, MON_GIVEN_TO_PARTY, MossdeepCity_StevensHouse_EventScript_SendBeldumParty goto_if_eq VAR_RESULT, MON_GIVEN_TO_PC, MossdeepCity_StevensHouse_EventScript_SendBeldumPC diff --git a/data/maps/Route110_TrickHousePuzzle6/scripts.inc b/data/maps/Route110_TrickHousePuzzle6/scripts.inc index e442d094d5..3a6d221e43 100644 --- a/data/maps/Route110_TrickHousePuzzle6/scripts.inc +++ b/data/maps/Route110_TrickHousePuzzle6/scripts.inc @@ -11,6 +11,7 @@ Route110_TrickHousePuzzle6_OnWarp: map_script_2 VAR_TEMP_0, VAR_TEMP_0, Route110_TrickHousePuzzle6_EventScript_InitPuzzle .2byte 0 +@ NOTE: This rotating gate puzzle makes use of VAR_TEMP_0 - VAR_TEMP_5 Route110_TrickHousePuzzle6_EventScript_InitPuzzle:: special RotatingGate_InitPuzzleAndGraphics end diff --git a/data/maps/Route119_WeatherInstitute_2F/scripts.inc b/data/maps/Route119_WeatherInstitute_2F/scripts.inc index 2060cb03c9..e5df03d4a1 100644 --- a/data/maps/Route119_WeatherInstitute_2F/scripts.inc +++ b/data/maps/Route119_WeatherInstitute_2F/scripts.inc @@ -88,7 +88,7 @@ Route119_WeatherInstitute_2F_EventScript_ShellyDefeated:: Route119_WeatherInstitute_2F_EventScript_ReceiveCastform:: msgbox Route119_WeatherInstitute_2F_Text_ThanksPleaseTakePokemon, MSGBOX_DEFAULT - setvar VAR_TEMP_1, SPECIES_CASTFORM + setvar VAR_TEMP_TRANSFERRED_SPECIES, SPECIES_CASTFORM givemon SPECIES_CASTFORM, 25, ITEM_MYSTIC_WATER goto_if_eq VAR_RESULT, MON_GIVEN_TO_PARTY, Route119_WeatherInstitute_2F_EventScript_ReceiveCastformParty goto_if_eq VAR_RESULT, MON_GIVEN_TO_PC, Route119_WeatherInstitute_2F_EventScript_ReceiveCastformPC diff --git a/data/maps/RustboroCity_DevonCorp_2F/scripts.inc b/data/maps/RustboroCity_DevonCorp_2F/scripts.inc index 747070645c..ba3a259ec3 100644 --- a/data/maps/RustboroCity_DevonCorp_2F/scripts.inc +++ b/data/maps/RustboroCity_DevonCorp_2F/scripts.inc @@ -144,7 +144,7 @@ RustboroCity_DevonCorp_2F_EventScript_AnorithReady:: end RustboroCity_DevonCorp_2F_EventScript_ReceiveLileep:: - setvar VAR_TEMP_1, SPECIES_LILEEP + setvar VAR_TEMP_TRANSFERRED_SPECIES, SPECIES_LILEEP givemon SPECIES_LILEEP, 20 goto_if_eq VAR_RESULT, MON_GIVEN_TO_PARTY, RustboroCity_DevonCorp_2F_EventScript_ReceiveLileepParty goto_if_eq VAR_RESULT, MON_GIVEN_TO_PC, RustboroCity_DevonCorp_2F_EventScript_ReceiveLileepPC @@ -189,7 +189,7 @@ RustboroCity_DevonCorp_2F_EventScript_FinishReceivingLileep:: end RustboroCity_DevonCorp_2F_EventScript_ReceiveAnorith:: - setvar VAR_TEMP_1, SPECIES_ANORITH + setvar VAR_TEMP_TRANSFERRED_SPECIES, SPECIES_ANORITH givemon SPECIES_ANORITH, 20 goto_if_eq VAR_RESULT, MON_GIVEN_TO_PARTY, RustboroCity_DevonCorp_2F_EventScript_ReceiveAnorithParty goto_if_eq VAR_RESULT, MON_GIVEN_TO_PC, RustboroCity_DevonCorp_2F_EventScript_ReceiveAnorithPC diff --git a/data/maps/SlateportCity_BattleTentLobby/scripts.inc b/data/maps/SlateportCity_BattleTentLobby/scripts.inc index 0d3fae875f..9416fe393f 100644 --- a/data/maps/SlateportCity_BattleTentLobby/scripts.inc +++ b/data/maps/SlateportCity_BattleTentLobby/scripts.inc @@ -15,11 +15,11 @@ SlateportCity_BattleTentLobby_EventScript_TurnPlayerNorth:: end SlateportCity_BattleTentLobby_OnFrame: - map_script_2 VAR_TEMP_0, 0, SlateportCity_BattleTentLobby_EventScript_GetChallengeStatus - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_SAVING, SlateportCity_BattleTentLobby_EventScript_QuitWithoutSaving - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_PAUSED, SlateportCity_BattleTentLobby_EventScript_ResumeChallenge - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_WON, SlateportCity_BattleTentLobby_EventScript_WonChallenge - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_LOST, SlateportCity_BattleTentLobby_EventScript_LostChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, 0, SlateportCity_BattleTentLobby_EventScript_GetChallengeStatus + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING, SlateportCity_BattleTentLobby_EventScript_QuitWithoutSaving + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_PAUSED, SlateportCity_BattleTentLobby_EventScript_ResumeChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_WON, SlateportCity_BattleTentLobby_EventScript_WonChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_LOST, SlateportCity_BattleTentLobby_EventScript_LostChallenge .2byte 0 SlateportCity_BattleTentLobby_EventScript_GetChallengeStatus:: @@ -31,7 +31,7 @@ SlateportCity_BattleTentLobby_EventScript_QuitWithoutSaving:: msgbox SlateportCity_BattleTentLobby_Text_DidntSaveBeforeQuitting, MSGBOX_DEFAULT closemessage frontier_set FRONTIER_DATA_CHALLENGE_STATUS, 0 - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 frontier_set FRONTIER_DATA_LVL_MODE, FRONTIER_LVL_50 releaseall end @@ -73,7 +73,7 @@ SlateportCity_BattleTentLobby_EventScript_LostChallenge:: SlateportCity_BattleTentLobby_EventScript_EndGivePrize:: msgbox SlateportCity_BattleTentLobby_Text_LookForwardToNextVisit, MSGBOX_DEFAULT closemessage - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -85,7 +85,7 @@ SlateportCity_BattleTentLobby_EventScript_ResumeChallenge:: playse SE_SAVE waitse frontier_set FRONTIER_DATA_PAUSED, FALSE - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 setvar VAR_0x8006, 2 goto SlateportCity_BattleTentLobby_EventScript_EnterChallenge @@ -117,7 +117,7 @@ SlateportCity_BattleTentLobby_EventScript_TryEnterChallenge:: case MULTI_B_PRESSED, SlateportCity_BattleTentLobby_EventScript_LoadPartyCancelChallenge SlateportCity_BattleTentLobby_EventScript_SaveBeforeChallenge:: - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 frontier_set FRONTIER_DATA_SELECTED_MON_ORDER slateporttent_init frontier_set FRONTIER_DATA_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING @@ -125,7 +125,7 @@ SlateportCity_BattleTentLobby_EventScript_SaveBeforeChallenge:: closemessage delay 2 call Common_EventScript_SaveGame - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 goto_if_eq VAR_RESULT, 0, SlateportCity_BattleTentLobby_EventScript_CancelChallengeSaveFailed setvar VAR_0x8006, 0 SlateportCity_BattleTentLobby_EventScript_EnterChallenge:: @@ -133,7 +133,7 @@ SlateportCity_BattleTentLobby_EventScript_EnterChallenge:: closemessage call SlateportCity_BattleTentLobby_EventScript_WalkToDoor warp MAP_SLATEPORT_CITY_BATTLE_TENT_CORRIDOR, 2, 7 - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 waitstate end diff --git a/data/maps/VerdanturfTown_BattleTentLobby/scripts.inc b/data/maps/VerdanturfTown_BattleTentLobby/scripts.inc index a78a6a78ed..d19f3eb266 100644 --- a/data/maps/VerdanturfTown_BattleTentLobby/scripts.inc +++ b/data/maps/VerdanturfTown_BattleTentLobby/scripts.inc @@ -15,11 +15,11 @@ VerdanturfTown_BattleTentLobby_EventScript_TurnPlayerNorth:: end VerdanturfTown_BattleTentLobby_OnFrame: - map_script_2 VAR_TEMP_0, 0, VerdanturfTown_BattleTentLobby_EventScript_GetChallengeStatus - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_SAVING, VerdanturfTown_BattleTentLobby_EventScript_QuitWithoutSaving - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_PAUSED, VerdanturfTown_BattleTentLobby_EventScript_ResumeChallenge - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_WON, VerdanturfTown_BattleTentLobby_EventScript_WonChallenge - map_script_2 VAR_TEMP_0, CHALLENGE_STATUS_LOST, VerdanturfTown_BattleTentLobby_EventScript_LostChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, 0, VerdanturfTown_BattleTentLobby_EventScript_GetChallengeStatus + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING, VerdanturfTown_BattleTentLobby_EventScript_QuitWithoutSaving + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_PAUSED, VerdanturfTown_BattleTentLobby_EventScript_ResumeChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_WON, VerdanturfTown_BattleTentLobby_EventScript_WonChallenge + map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_LOST, VerdanturfTown_BattleTentLobby_EventScript_LostChallenge .2byte 0 VerdanturfTown_BattleTentLobby_EventScript_GetChallengeStatus:: @@ -31,7 +31,7 @@ VerdanturfTown_BattleTentLobby_EventScript_QuitWithoutSaving:: msgbox BattleFrontier_BattlePalaceLobby_Text_FailedToSaveBeforeEndingChallenge, MSGBOX_DEFAULT closemessage frontier_set FRONTIER_DATA_CHALLENGE_STATUS, 0 - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 frontier_set FRONTIER_DATA_LVL_MODE, FRONTIER_LVL_50 releaseall end @@ -59,7 +59,7 @@ VerdanturfTown_BattleTentLobby_EventScript_GivePrize:: waitfanfare msgbox VerdanturfTown_BattleTentLobby_Text_ReturnFortified, MSGBOX_DEFAULT closemessage - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -67,7 +67,7 @@ VerdanturfTown_BattleTentLobby_EventScript_NoRoomForPrize:: msgbox BattleFrontier_BattlePalaceLobby_Text_NoSpaceForPrize, MSGBOX_DEFAULT waitmessage closemessage - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -87,7 +87,7 @@ VerdanturfTown_BattleTentLobby_EventScript_LostChallenge:: waitse msgbox VerdanturfTown_BattleTentLobby_Text_ReturnFortified, MSGBOX_DEFAULT closemessage - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 releaseall end @@ -100,7 +100,7 @@ VerdanturfTown_BattleTentLobby_EventScript_ResumeChallenge:: playse SE_SAVE waitse frontier_set FRONTIER_DATA_PAUSED, FALSE - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 goto VerdanturfTown_BattleTentLobby_EventScript_EnterChallenge VerdanturfTown_BattleTentLobby_EventScript_Attendant:: @@ -141,7 +141,7 @@ VerdanturfTown_BattleTentLobby_EventScript_TryEnterChallenge:: case MULTI_B_PRESSED, VerdanturfTown_BattleTentLobby_EventScript_LoadPartyCancelChallenge VerdanturfTown_BattleTentLobby_EventScript_SaveBeforeChallenge:: - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 frontier_set FRONTIER_DATA_SELECTED_MON_ORDER verdanturftent_init frontier_set FRONTIER_DATA_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING @@ -150,7 +150,7 @@ VerdanturfTown_BattleTentLobby_EventScript_SaveBeforeChallenge:: closemessage delay 2 call Common_EventScript_SaveGame - setvar VAR_TEMP_0, 255 + setvar VAR_TEMP_CHALLENGE_STATUS, 255 goto_if_eq VAR_RESULT, 0, VerdanturfTown_BattleTentLobby_EventScript_CancelChallengeSaveFailed VerdanturfTown_BattleTentLobby_EventScript_EnterChallenge:: special SavePlayerParty @@ -159,7 +159,7 @@ VerdanturfTown_BattleTentLobby_EventScript_EnterChallenge:: closemessage call VerdanturfTown_BattleTentLobby_EventScript_WalkToDoor warp MAP_VERDANTURF_TOWN_BATTLE_TENT_CORRIDOR, 2, 7 - setvar VAR_TEMP_0, 0 + setvar VAR_TEMP_CHALLENGE_STATUS, 0 waitstate end diff --git a/data/scripts/cable_club.inc b/data/scripts/cable_club.inc index 0ab93c4037..e810e354a5 100644 --- a/data/scripts/cable_club.inc +++ b/data/scripts/cable_club.inc @@ -743,37 +743,36 @@ EventScript_TradeCenter_Chair3:: waitstate end -@ VAR_TEMP_1 for below scripts set by ReceiveGiftItem EventScript_RecordCenter_Spot0:: setvar VAR_0x8005, 0 special RecordMixingPlayerSpotTriggered waitstate - goto_if_ne VAR_TEMP_1, ITEM_NONE, RecordCorner_EventScript_ReceivedGiftItem + goto_if_ne VAR_TEMP_RECORD_MIX_GIFT_ITEM, ITEM_NONE, RecordCorner_EventScript_ReceivedGiftItem end EventScript_RecordCenter_Spot1:: setvar VAR_0x8005, 1 special RecordMixingPlayerSpotTriggered waitstate - goto_if_ne VAR_TEMP_1, ITEM_NONE, RecordCorner_EventScript_ReceivedGiftItem + goto_if_ne VAR_TEMP_RECORD_MIX_GIFT_ITEM, ITEM_NONE, RecordCorner_EventScript_ReceivedGiftItem end EventScript_RecordCenter_Spot2:: setvar VAR_0x8005, 2 special RecordMixingPlayerSpotTriggered waitstate - goto_if_ne VAR_TEMP_1, ITEM_NONE, RecordCorner_EventScript_ReceivedGiftItem + goto_if_ne VAR_TEMP_RECORD_MIX_GIFT_ITEM, ITEM_NONE, RecordCorner_EventScript_ReceivedGiftItem end EventScript_RecordCenter_Spot3:: setvar VAR_0x8005, 3 special RecordMixingPlayerSpotTriggered waitstate - goto_if_ne VAR_TEMP_1, ITEM_NONE, RecordCorner_EventScript_ReceivedGiftItem + goto_if_ne VAR_TEMP_RECORD_MIX_GIFT_ITEM, ITEM_NONE, RecordCorner_EventScript_ReceivedGiftItem end RecordCorner_EventScript_ReceivedGiftItem:: - bufferitemname STR_VAR_2, VAR_TEMP_1 + bufferitemname STR_VAR_2, VAR_TEMP_RECORD_MIX_GIFT_ITEM message RecordCorner_Text_PlayerSentOverOneX waitmessage waitbuttonpress @@ -814,7 +813,7 @@ TradeCenter_EventScript_Attendant:: end RecordCorner_EventScript_Attendant:: - goto_if_ne VAR_TEMP_0, 0, RecordCorner_EventScript_AlreadyMixed + goto_if_ne VAR_TEMP_MIXED_RECORDS, 0, RecordCorner_EventScript_AlreadyMixed special Script_FacePlayer message RecordCorner_Text_TakeSeatAndWait waitmessage diff --git a/data/scripts/pc_transfer.inc b/data/scripts/pc_transfer.inc index 1204bece36..f279740caa 100644 --- a/data/scripts/pc_transfer.inc +++ b/data/scripts/pc_transfer.inc @@ -15,7 +15,7 @@ Common_EventScript_NameReceivedBoxMon:: Common_EventScript_TransferredToPC:: bufferboxname STR_VAR_1, VAR_PC_BOX_TO_SEND_MON - bufferspeciesname STR_VAR_2, VAR_TEMP_1 + bufferspeciesname STR_VAR_2, VAR_TEMP_TRANSFERRED_SPECIES call_if_unset FLAG_SYS_PC_LANETTE, EventScript_TransferredSomeonesPC call_if_set FLAG_SYS_PC_LANETTE, EventScript_TransferredLanettesPC return diff --git a/include/constants/flags.h b/include/constants/flags.h index 5761fb0eda..9bd2775a6b 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -40,6 +40,7 @@ #define FLAG_TEMP_1E (TEMP_FLAGS_START + 0x1E) #define FLAG_TEMP_1F (TEMP_FLAGS_START + 0x1F) #define TEMP_FLAGS_END FLAG_TEMP_1F +#define NUM_TEMP_FLAGS (TEMP_FLAGS_END - TEMP_FLAGS_START + 1) #define FLAG_UNUSED_0x020 0x20 // Unused Flag #define FLAG_UNUSED_0x021 0x21 // Unused Flag @@ -1631,6 +1632,7 @@ #define FLAG_UNUSED_0x95E (DAILY_FLAGS_START + 0x3E) // Unused Flag #define FLAG_UNUSED_0x95F (DAILY_FLAGS_START + 0x3F) // Unused Flag #define DAILY_FLAGS_END (FLAG_UNUSED_0x95F + (7 - FLAG_UNUSED_0x95F % 8)) +#define NUM_DAILY_FLAGS (DAILY_FLAGS_END - DAILY_FLAGS_START + 1) #define FLAGS_COUNT (DAILY_FLAGS_END + 1) @@ -1643,6 +1645,7 @@ #define FLAG_STORING_ITEMS_IN_PYRAMID_BAG (SPECIAL_FLAGS_START + 0x4) // FLAG_SPECIAL_FLAG_0x4005 - 0x407F also exist and are unused #define SPECIAL_FLAGS_END (SPECIAL_FLAGS_START + 0x7F) +#define NUM_SPECIAL_FLAGS (SPECIAL_FLAGS_END - SPECIAL_FLAGS_START + 1) // Temp flag aliases #define FLAG_TEMP_SKIP_GABBY_INTERVIEW FLAG_TEMP_1 diff --git a/include/constants/vars.h b/include/constants/vars.h index e0b08f4475..e79919c329 100644 --- a/include/constants/vars.h +++ b/include/constants/vars.h @@ -9,7 +9,7 @@ #define VAR_TEMP_0 (TEMP_VARS_START + 0x0) #define VAR_TEMP_1 (TEMP_VARS_START + 0x1) #define VAR_TEMP_2 (TEMP_VARS_START + 0x2) -#define VAR_TEMP_3 (TEMP_VARS_START + 0x3) +#define VAR_TEMP_3 (TEMP_VARS_START + 0x3) // Note: Used when the player checks a TV #define VAR_TEMP_4 (TEMP_VARS_START + 0x4) #define VAR_TEMP_5 (TEMP_VARS_START + 0x5) #define VAR_TEMP_6 (TEMP_VARS_START + 0x6) @@ -23,6 +23,7 @@ #define VAR_TEMP_E (TEMP_VARS_START + 0xE) #define VAR_TEMP_F (TEMP_VARS_START + 0xF) #define TEMP_VARS_END VAR_TEMP_F +#define NUM_TEMP_VARS (TEMP_VARS_END - TEMP_VARS_START + 1) // object gfx id vars // These 0x10 vars are used to dynamically control a map object's sprite. @@ -310,4 +311,17 @@ // cutscenes nor call a wait command. Used for weather effects in vanilla. #define TRIGGER_RUN_IMMEDIATELY 0 +// Temp var aliases +#define VAR_TEMP_CHALLENGE_STATUS VAR_TEMP_0 + +#define VAR_TEMP_MIXED_RECORDS VAR_TEMP_0 +#define VAR_TEMP_RECORD_MIX_GIFT_ITEM VAR_TEMP_1 + +#define VAR_TEMP_PLAYING_PYRAMID_MUSIC VAR_TEMP_E + +#define VAR_TEMP_FRONTIER_TUTOR_SELECTION VAR_TEMP_D +#define VAR_TEMP_FRONTIER_TUTOR_ID VAR_TEMP_E + +#define VAR_TEMP_TRANSFERRED_SPECIES VAR_TEMP_1 + #endif // GUARD_CONSTANTS_VARS_H diff --git a/src/battle_arena.c b/src/battle_arena.c index ed0fa2550a..98ec43fc1d 100644 --- a/src/battle_arena.c +++ b/src/battle_arena.c @@ -737,7 +737,7 @@ static void SetArenaData(void) static void SaveArenaChallenge(void) { gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; - VarSet(VAR_TEMP_0, 0); + VarSet(VAR_TEMP_CHALLENGE_STATUS, 0); gSaveBlock2Ptr->frontier.challengePaused = TRUE; SaveGameFrontier(); } diff --git a/src/battle_dome.c b/src/battle_dome.c index 32a43c3d94..d81988fef2 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -2990,7 +2990,7 @@ static void SetDomeOpponentGraphicsId(void) static void SaveDomeChallenge(void) { gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; - VarSet(VAR_TEMP_0, 0); + VarSet(VAR_TEMP_CHALLENGE_STATUS, 0); gSaveBlock2Ptr->frontier.challengePaused = TRUE; SaveGameFrontier(); } diff --git a/src/battle_factory.c b/src/battle_factory.c index eac9f0403e..97047bd634 100644 --- a/src/battle_factory.c +++ b/src/battle_factory.c @@ -269,7 +269,7 @@ static void SetBattleFactoryData(void) static void SaveFactoryChallenge(void) { gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; - VarSet(VAR_TEMP_0, 0); + VarSet(VAR_TEMP_CHALLENGE_STATUS, 0); gSaveBlock2Ptr->frontier.challengePaused = TRUE; SaveGameFrontier(); } diff --git a/src/battle_palace.c b/src/battle_palace.c index 0fa65200a6..a521acea2b 100644 --- a/src/battle_palace.c +++ b/src/battle_palace.c @@ -181,7 +181,7 @@ static void IncrementPalaceStreak(void) static void SavePalaceChallenge(void) { gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; - VarSet(VAR_TEMP_0, 0); + VarSet(VAR_TEMP_CHALLENGE_STATUS, 0); gSaveBlock2Ptr->frontier.challengePaused = TRUE; SaveGameFrontier(); } diff --git a/src/battle_pike.c b/src/battle_pike.c index 462ae4f383..30a6126f94 100644 --- a/src/battle_pike.c +++ b/src/battle_pike.c @@ -708,7 +708,7 @@ static void ClearInWildMonRoom(void) static void SavePikeChallenge(void) { gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; - VarSet(VAR_TEMP_0, 0); + VarSet(VAR_TEMP_CHALLENGE_STATUS, 0); gSaveBlock2Ptr->frontier.challengePaused = TRUE; SaveMapView(); TrySavingData(SAVE_LINK); diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c index 07d7772f42..8e1cbc5167 100644 --- a/src/battle_pyramid.c +++ b/src/battle_pyramid.c @@ -929,7 +929,7 @@ static void SetBattlePyramidData(void) static void SavePyramidChallenge(void) { gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; - VarSet(VAR_TEMP_0, 0); + VarSet(VAR_TEMP_CHALLENGE_STATUS, 0); gSaveBlock2Ptr->frontier.challengePaused = TRUE; SaveMapView(); TrySavingData(SAVE_LINK); @@ -1439,7 +1439,7 @@ void PausePyramidChallenge(void) { RestorePyramidPlayerParty(); gSaveBlock2Ptr->frontier.challengeStatus = CHALLENGE_STATUS_PAUSED; - VarSet(VAR_TEMP_E, 0); + VarSet(VAR_TEMP_PLAYING_PYRAMID_MUSIC, 0); LoadPlayerParty(); } } diff --git a/src/battle_setup.c b/src/battle_setup.c index cc1ad70fed..fc1586a5f2 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -407,7 +407,7 @@ static void DoStandardWildBattle(void) gBattleTypeFlags = 0; if (InBattlePyramid()) { - VarSet(VAR_TEMP_E, 0); + VarSet(VAR_TEMP_PLAYING_PYRAMID_MUSIC, 0); gBattleTypeFlags |= BATTLE_TYPE_PYRAMID; } CreateBattleStartTask(GetWildBattleTransition(), 0); @@ -1277,7 +1277,7 @@ void BattleSetup_StartTrainerBattle(void) if (InBattlePyramid()) { - VarSet(VAR_TEMP_E, 0); + VarSet(VAR_TEMP_PLAYING_PYRAMID_MUSIC, 0); gBattleTypeFlags |= BATTLE_TYPE_PYRAMID; if (gNoOfApproachingTrainers == 2) diff --git a/src/battle_tent.c b/src/battle_tent.c index e51ac38a5a..f0f7363f31 100644 --- a/src/battle_tent.c +++ b/src/battle_tent.c @@ -140,7 +140,7 @@ static void BufferVerdanturfTentTrainerIntro(void) static void SaveVerdanturfTentChallenge(void) { gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; - VarSet(VAR_TEMP_0, 0); + VarSet(VAR_TEMP_CHALLENGE_STATUS, 0); gSaveBlock2Ptr->frontier.challengePaused = TRUE; SaveGameFrontier(); } @@ -190,7 +190,7 @@ static void SetFallarborTentPrize(void) static void SaveFallarborTentChallenge(void) { gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; - VarSet(VAR_TEMP_0, 0); + VarSet(VAR_TEMP_CHALLENGE_STATUS, 0); gSaveBlock2Ptr->frontier.challengePaused = TRUE; SaveGameFrontier(); } @@ -245,7 +245,7 @@ static void SetSlateportTentPrize(void) static void SaveSlateportTentChallenge(void) { gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; - VarSet(VAR_TEMP_0, 0); + VarSet(VAR_TEMP_CHALLENGE_STATUS, 0); gSaveBlock2Ptr->frontier.challengePaused = TRUE; SaveGameFrontier(); } diff --git a/src/battle_tower.c b/src/battle_tower.c index 8838b5f2d2..d79418791b 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -2200,7 +2200,7 @@ static void SaveTowerChallenge(void) SaveBattleTowerRecord(); gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; - VarSet(VAR_TEMP_0, 0); + VarSet(VAR_TEMP_CHALLENGE_STATUS, 0); gSaveBlock2Ptr->frontier.challengePaused = TRUE; SaveGameFrontier(); } diff --git a/src/event_data.c b/src/event_data.c index 22ebdb0d1d..e3ee3dedb2 100644 --- a/src/event_data.c +++ b/src/event_data.c @@ -2,11 +2,6 @@ #include "event_data.h" #include "pokedex.h" -#define NUM_SPECIAL_FLAGS (SPECIAL_FLAGS_END - SPECIAL_FLAGS_START + 1) -#define NUM_TEMP_FLAGS (TEMP_FLAGS_END - TEMP_FLAGS_START + 1) -#define NUM_DAILY_FLAGS (DAILY_FLAGS_END - DAILY_FLAGS_START + 1) -#define NUM_TEMP_VARS (TEMP_VARS_END - TEMP_VARS_START + 1) - #define SPECIAL_FLAGS_SIZE (NUM_SPECIAL_FLAGS / 8) // 8 flags per byte #define TEMP_FLAGS_SIZE (NUM_TEMP_FLAGS / 8) #define DAILY_FLAGS_SIZE (NUM_DAILY_FLAGS / 8) @@ -43,8 +38,8 @@ void InitEventData(void) void ClearTempFieldEventData(void) { - memset(gSaveBlock1Ptr->flags + (TEMP_FLAGS_START / 8), 0, TEMP_FLAGS_SIZE); - memset(gSaveBlock1Ptr->vars + ((TEMP_VARS_START - VARS_START) * 2), 0, TEMP_VARS_SIZE); + memset(&gSaveBlock1Ptr->flags[TEMP_FLAGS_START / 8], 0, TEMP_FLAGS_SIZE); + memset(&gSaveBlock1Ptr->vars[TEMP_VARS_START - VARS_START], 0, TEMP_VARS_SIZE); FlagClear(FLAG_SYS_ENC_UP_ITEM); FlagClear(FLAG_SYS_ENC_DOWN_ITEM); FlagClear(FLAG_SYS_USE_STRENGTH); @@ -54,7 +49,7 @@ void ClearTempFieldEventData(void) void ClearDailyFlags(void) { - memset(gSaveBlock1Ptr->flags + (DAILY_FLAGS_START / 8), 0, DAILY_FLAGS_SIZE); + memset(&gSaveBlock1Ptr->flags[DAILY_FLAGS_START / 8], 0, DAILY_FLAGS_SIZE); } void DisableNationalPokedex(void) diff --git a/src/field_specials.c b/src/field_specials.c index 38746c97a4..b6f79b588a 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -3193,8 +3193,8 @@ void GetBattleFrontierTutorMoveIndex(void) u16 moveIndex = 0; gSpecialVar_0x8005 = 0; - moveTutor = VarGet(VAR_TEMP_E); - moveIndex = VarGet(VAR_TEMP_D); + moveTutor = VarGet(VAR_TEMP_FRONTIER_TUTOR_ID); + moveIndex = VarGet(VAR_TEMP_FRONTIER_TUTOR_SELECTION); if (moveTutor != 0) { diff --git a/src/field_tasks.c b/src/field_tasks.c index dec5cba800..8683301f26 100644 --- a/src/field_tasks.c +++ b/src/field_tasks.c @@ -100,6 +100,9 @@ static const struct PacifidlogMetatileOffsets sFloatingBridgeMetatileOffsets[] = }; // Each element corresponds to a y coordinate row in the sootopolis gym 1F map. +// The rows with ice each have a temp var used to track the ice steps. Each bit in the var +// represents whether ice at that x coordinate (starting from the left edge) has been visited. +// This method of tracking steps will break if the ice puzzle is more than 16 map spaces wide. static const u16 sSootopolisGymIceRowVars[] = { 0, diff --git a/src/frontier_util.c b/src/frontier_util.c index 8cd385e653..8f96fbf89e 100644 --- a/src/frontier_util.c +++ b/src/frontier_util.c @@ -789,28 +789,28 @@ void CallFrontierUtilFunc(void) sFrontierUtilFuncs[gSpecialVar_0x8004](); } -// Buffers into VAR_TEMP_0 specifically because this is used to react to the status in OnFrame map scripts +// VAR_TEMP_CHALLENGE_STATUS is used to react to the status in OnFrame map scripts static void GetChallengeStatus(void) { - VarSet(VAR_TEMP_0, 0xFF); + VarSet(VAR_TEMP_CHALLENGE_STATUS, 0xFF); switch (gSaveBlock2Ptr->frontier.challengeStatus) { case 0: break; case CHALLENGE_STATUS_SAVING: FrontierGamblerSetWonOrLost(FALSE); - VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.challengeStatus); + VarSet(VAR_TEMP_CHALLENGE_STATUS, gSaveBlock2Ptr->frontier.challengeStatus); break; case CHALLENGE_STATUS_LOST: FrontierGamblerSetWonOrLost(FALSE); - VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.challengeStatus); + VarSet(VAR_TEMP_CHALLENGE_STATUS, gSaveBlock2Ptr->frontier.challengeStatus); break; case CHALLENGE_STATUS_WON: FrontierGamblerSetWonOrLost(TRUE); - VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.challengeStatus); + VarSet(VAR_TEMP_CHALLENGE_STATUS, gSaveBlock2Ptr->frontier.challengeStatus); break; case CHALLENGE_STATUS_PAUSED: - VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.challengeStatus); + VarSet(VAR_TEMP_CHALLENGE_STATUS, gSaveBlock2Ptr->frontier.challengeStatus); break; } } diff --git a/src/record_mixing.c b/src/record_mixing.c index d6edd078b7..c5d915a9db 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -318,7 +318,7 @@ static void Task_RecordMixing_Main(u8 taskId) sSentRecord = Alloc(sizeof(*sSentRecord)); sReceivedRecords = Alloc(sizeof(*sReceivedRecords) * MAX_LINK_PLAYERS); SetLocalLinkPlayerId(gSpecialVar_0x8005); - VarSet(VAR_TEMP_0, 1); + VarSet(VAR_TEMP_MIXED_RECORDS, 1); sReadyToReceive = FALSE; PrepareExchangePacket(); CreateRecordMixingLights(); @@ -972,14 +972,14 @@ static void ReceiveGiftItem(u16 *item, u8 multiplayerId) { if (!CheckBagHasItem(*item, 1) && !CheckPCHasItem(*item, 1) && AddBagItem(*item, 1)) { - VarSet(VAR_TEMP_1, *item); + VarSet(VAR_TEMP_RECORD_MIX_GIFT_ITEM, *item); StringCopy(gStringVar1, gLinkPlayers[0].name); if (*item == ITEM_EON_TICKET) FlagSet(FLAG_ENABLE_SHIP_SOUTHERN_ISLAND); } else { - VarSet(VAR_TEMP_1, ITEM_NONE); + VarSet(VAR_TEMP_RECORD_MIX_GIFT_ITEM, ITEM_NONE); } } } diff --git a/src/rotating_gate.c b/src/rotating_gate.c index f9e732eb74..0b0c68a836 100644 --- a/src/rotating_gate.c +++ b/src/rotating_gate.c @@ -17,12 +17,10 @@ #define GATE_ROT_ACW(arm, longArm) GATE_ROT(ROTATE_ANTICLOCKWISE, arm, longArm) #define GATE_ROT_NONE 255 -// static functions static void SpriteCallback_RotatingGate(struct Sprite *sprite); static u8 RotatingGate_CreateGate(u8 gateId, s16 deltaX, s16 deltaY); static void RotatingGate_HideGatesOutsideViewport(struct Sprite *sprite); -// enums enum { /* @@ -180,7 +178,6 @@ enum PUZZLE_ROUTE110_TRICK_HOUSE_PUZZLE6, }; -// structure struct RotatingGatePuzzle { s16 x; @@ -189,7 +186,6 @@ struct RotatingGatePuzzle u8 orientation; }; -// .rodata // Fortree static const struct RotatingGatePuzzle sRotatingGate_FortreePuzzleConfig[] = { @@ -219,6 +215,15 @@ static const struct RotatingGatePuzzle sRotatingGate_TrickHousePuzzleConfig[] = {10, 19, GATE_SHAPE_L3, GATE_ORIENTATION_180}, }; +#define MAX_GATES max(ARRAY_COUNT(sRotatingGate_FortreePuzzleConfig), \ + ARRAY_COUNT(sRotatingGate_TrickHousePuzzleConfig)) + +// Rotating gate puzzles use the temp vars as a byte array to track the orientation of each gate. +// The assert below makes sure the existing puzzles don't have too many gates, and aren't quietly +// using vars outside the temp vars. Aside from potentially reading/writing vars being used for +// something else, using vars that persist when exiting the map could softlock the puzzle. +STATIC_ASSERT(MAX_GATES <= (2 * NUM_TEMP_VARS), TooManyRotatingGates) + static const u8 sRotatingGateTiles_1[] = INCBIN_U8("graphics/rotating_gates/l1.4bpp"); static const u8 sRotatingGateTiles_2[] = INCBIN_U8("graphics/rotating_gates/l2.4bpp"); static const u8 sRotatingGateTiles_3[] = INCBIN_U8("graphics/rotating_gates/l3.4bpp"); @@ -639,9 +644,7 @@ static void RotatingGate_ResetAllGateOrientations(void) u8 *ptr = (u8 *)GetVarPointer(VAR_TEMP_0); for (i = 0; i < sRotatingGate_PuzzleCount; i++) - { ptr[i] = sRotatingGate_PuzzleConfig[i].orientation; - } } static s32 RotatingGate_GetGateOrientation(u8 gateId) diff --git a/src/tv.c b/src/tv.c index 696e0519ba..e8d0145f21 100644 --- a/src/tv.c +++ b/src/tv.c @@ -3384,6 +3384,7 @@ u8 CheckForPlayersHouseNews(void) void GetMomOrDadStringForTVMessage(void) { + // If the player is checking the TV in their house it will only refer to their Mom. if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(LITTLEROOT_TOWN_BRENDANS_HOUSE_1F)) { if (gSaveBlock2Ptr->playerGender == MALE) @@ -3413,6 +3414,7 @@ void GetMomOrDadStringForTVMessage(void) } else if (VarGet(VAR_TEMP_3) > 2) { + // Should only happen if VAR_TEMP_3 is already in use by something else. if (VarGet(VAR_TEMP_3) % 2 == 0) StringCopy(gStringVar1, gText_Mom); else @@ -3420,6 +3422,9 @@ void GetMomOrDadStringForTVMessage(void) } else { + // Randomly choose whether to refer to Mom or Dad. + // NOTE: Because of this, any map that has a TV in it shouldn't rely on VAR_TEMP_3. + // If its value is 0, checking the TV will set it to 1 or 2. if (Random() % 2 != 0) { StringCopy(gStringVar1, gText_Mom); From 41847cd5aa45f3fd171e2f014d53dfc8b011913c Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 4 Aug 2023 16:27:45 -0400 Subject: [PATCH 23/43] STAT_ANIM constant usage --- include/battle_anim.h | 20 ++++++++-- src/battle_anim_status_effects.c | 68 ++++++++++++++++---------------- src/battle_anim_utility_funcs.c | 17 ++++---- src/battle_script_commands.c | 16 ++++---- src/battle_util.c | 10 ++--- 5 files changed, 71 insertions(+), 60 deletions(-) diff --git a/include/battle_anim.h b/include/battle_anim.h index f99af9059b..455bf5f4cd 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -192,14 +192,26 @@ u8 GetBattlerSpriteDefault_Y(u8 battlerId); u8 GetSubstituteSpriteDefault_Y(u8 battlerId); // battle_anim_status_effects.c -#define STAT_ANIM_PLUS1 15 -#define STAT_ANIM_PLUS2 39 -#define STAT_ANIM_MINUS1 22 -#define STAT_ANIM_MINUS2 46 +#define STAT_ANIM_PLUS1 14 +#define STAT_ANIM_PLUS2 38 +#define STAT_ANIM_MINUS1 21 +#define STAT_ANIM_MINUS2 45 #define STAT_ANIM_MULTIPLE_PLUS1 55 #define STAT_ANIM_MULTIPLE_PLUS2 56 #define STAT_ANIM_MULTIPLE_MINUS1 57 #define STAT_ANIM_MULTIPLE_MINUS2 58 + +enum { + STAT_ANIM_PAL_ATK, + STAT_ANIM_PAL_DEF, + STAT_ANIM_PAL_ACC, + STAT_ANIM_PAL_SPEED, + STAT_ANIM_PAL_EVASION, + STAT_ANIM_PAL_SPATK, + STAT_ANIM_PAL_SPDEF, + STAT_ANIM_PAL_MULTIPLE = 0xFF +}; + void LaunchStatusAnimation(u8 battlerId, u8 statusAnimId); // battle_anim_ground.c diff --git a/src/battle_anim_status_effects.c b/src/battle_anim_status_effects.c index 5000e11096..e09a368509 100644 --- a/src/battle_anim_status_effects.c +++ b/src/battle_anim_status_effects.c @@ -480,8 +480,6 @@ static void AnimTask_FrozenIceCube_Step4(u8 taskId) } } -#define CASE(by, stat) case (STAT_ANIM_##by + stat - 1) - void AnimTask_StatsChange(u8 taskId) { bool16 goesDown = FALSE; @@ -490,42 +488,42 @@ void AnimTask_StatsChange(u8 taskId) switch (gBattleSpritesDataPtr->animationData->animArg) { - CASE(PLUS1, STAT_ATK): goesDown = FALSE; animStatId = 0; break; - CASE(PLUS1, STAT_DEF): goesDown = FALSE; animStatId = 1; break; - CASE(PLUS1, STAT_SPEED): goesDown = FALSE; animStatId = 3; break; - CASE(PLUS1, STAT_SPATK): goesDown = FALSE; animStatId = 5; break; - CASE(PLUS1, STAT_SPDEF): goesDown = FALSE; animStatId = 6; break; - CASE(PLUS1, STAT_ACC): goesDown = FALSE; animStatId = 2; break; - CASE(PLUS1, STAT_EVASION): goesDown = FALSE; animStatId = 4; break; + case STAT_ANIM_PLUS1 + STAT_ATK: goesDown = FALSE; animStatId = STAT_ANIM_PAL_ATK; break; + case STAT_ANIM_PLUS1 + STAT_DEF: goesDown = FALSE; animStatId = STAT_ANIM_PAL_DEF; break; + case STAT_ANIM_PLUS1 + STAT_SPEED: goesDown = FALSE; animStatId = STAT_ANIM_PAL_SPEED; break; + case STAT_ANIM_PLUS1 + STAT_SPATK: goesDown = FALSE; animStatId = STAT_ANIM_PAL_SPATK; break; + case STAT_ANIM_PLUS1 + STAT_SPDEF: goesDown = FALSE; animStatId = STAT_ANIM_PAL_SPDEF; break; + case STAT_ANIM_PLUS1 + STAT_ACC: goesDown = FALSE; animStatId = STAT_ANIM_PAL_ACC; break; + case STAT_ANIM_PLUS1 + STAT_EVASION: goesDown = FALSE; animStatId = STAT_ANIM_PAL_EVASION; break; - CASE(MINUS1, STAT_ATK): goesDown = TRUE; animStatId = 0; break; - CASE(MINUS1, STAT_DEF): goesDown = TRUE; animStatId = 1; break; - CASE(MINUS1, STAT_SPEED): goesDown = TRUE; animStatId = 3; break; - CASE(MINUS1, STAT_SPATK): goesDown = TRUE; animStatId = 5; break; - CASE(MINUS1, STAT_SPDEF): goesDown = TRUE; animStatId = 6; break; - CASE(MINUS1, STAT_ACC): goesDown = TRUE; animStatId = 2; break; - CASE(MINUS1, STAT_EVASION): goesDown = TRUE; animStatId = 4; break; + case STAT_ANIM_MINUS1 + STAT_ATK: goesDown = TRUE; animStatId = STAT_ANIM_PAL_ATK; break; + case STAT_ANIM_MINUS1 + STAT_DEF: goesDown = TRUE; animStatId = STAT_ANIM_PAL_DEF; break; + case STAT_ANIM_MINUS1 + STAT_SPEED: goesDown = TRUE; animStatId = STAT_ANIM_PAL_SPEED; break; + case STAT_ANIM_MINUS1 + STAT_SPATK: goesDown = TRUE; animStatId = STAT_ANIM_PAL_SPATK; break; + case STAT_ANIM_MINUS1 + STAT_SPDEF: goesDown = TRUE; animStatId = STAT_ANIM_PAL_SPDEF; break; + case STAT_ANIM_MINUS1 + STAT_ACC: goesDown = TRUE; animStatId = STAT_ANIM_PAL_ACC; break; + case STAT_ANIM_MINUS1 + STAT_EVASION: goesDown = TRUE; animStatId = STAT_ANIM_PAL_EVASION; break; - CASE(PLUS2, STAT_ATK): goesDown = FALSE; animStatId = 0; sharply = TRUE; break; - CASE(PLUS2, STAT_DEF): goesDown = FALSE; animStatId = 1; sharply = TRUE; break; - CASE(PLUS2, STAT_SPEED): goesDown = FALSE; animStatId = 3; sharply = TRUE; break; - CASE(PLUS2, STAT_SPATK): goesDown = FALSE; animStatId = 5; sharply = TRUE; break; - CASE(PLUS2, STAT_SPDEF): goesDown = FALSE; animStatId = 6; sharply = TRUE; break; - CASE(PLUS2, STAT_ACC): goesDown = FALSE; animStatId = 2; sharply = TRUE; break; - CASE(PLUS2, STAT_EVASION): goesDown = FALSE; animStatId = 4; sharply = TRUE; break; + case STAT_ANIM_PLUS2 + STAT_ATK: goesDown = FALSE; animStatId = STAT_ANIM_PAL_ATK; sharply = TRUE; break; + case STAT_ANIM_PLUS2 + STAT_DEF: goesDown = FALSE; animStatId = STAT_ANIM_PAL_DEF; sharply = TRUE; break; + case STAT_ANIM_PLUS2 + STAT_SPEED: goesDown = FALSE; animStatId = STAT_ANIM_PAL_SPEED; sharply = TRUE; break; + case STAT_ANIM_PLUS2 + STAT_SPATK: goesDown = FALSE; animStatId = STAT_ANIM_PAL_SPATK; sharply = TRUE; break; + case STAT_ANIM_PLUS2 + STAT_SPDEF: goesDown = FALSE; animStatId = STAT_ANIM_PAL_SPDEF; sharply = TRUE; break; + case STAT_ANIM_PLUS2 + STAT_ACC: goesDown = FALSE; animStatId = STAT_ANIM_PAL_ACC; sharply = TRUE; break; + case STAT_ANIM_PLUS2 + STAT_EVASION: goesDown = FALSE; animStatId = STAT_ANIM_PAL_EVASION; sharply = TRUE; break; - CASE(MINUS2, STAT_ATK): goesDown = TRUE; animStatId = 0; sharply = TRUE; break; - CASE(MINUS2, STAT_DEF): goesDown = TRUE; animStatId = 1; sharply = TRUE; break; - CASE(MINUS2, STAT_SPEED): goesDown = TRUE; animStatId = 3; sharply = TRUE; break; - CASE(MINUS2, STAT_SPATK): goesDown = TRUE; animStatId = 5; sharply = TRUE; break; - CASE(MINUS2, STAT_SPDEF): goesDown = TRUE; animStatId = 6; sharply = TRUE; break; - CASE(MINUS2, STAT_ACC): goesDown = TRUE; animStatId = 2; sharply = TRUE; break; - CASE(MINUS2, STAT_EVASION): goesDown = TRUE; animStatId = 4; sharply = TRUE; break; + case STAT_ANIM_MINUS2 + STAT_ATK: goesDown = TRUE; animStatId = STAT_ANIM_PAL_ATK; sharply = TRUE; break; + case STAT_ANIM_MINUS2 + STAT_DEF: goesDown = TRUE; animStatId = STAT_ANIM_PAL_DEF; sharply = TRUE; break; + case STAT_ANIM_MINUS2 + STAT_SPEED: goesDown = TRUE; animStatId = STAT_ANIM_PAL_SPEED; sharply = TRUE; break; + case STAT_ANIM_MINUS2 + STAT_SPATK: goesDown = TRUE; animStatId = STAT_ANIM_PAL_SPATK; sharply = TRUE; break; + case STAT_ANIM_MINUS2 + STAT_SPDEF: goesDown = TRUE; animStatId = STAT_ANIM_PAL_SPDEF; sharply = TRUE; break; + case STAT_ANIM_MINUS2 + STAT_ACC: goesDown = TRUE; animStatId = STAT_ANIM_PAL_ACC; sharply = TRUE; break; + case STAT_ANIM_MINUS2 + STAT_EVASION: goesDown = TRUE; animStatId = STAT_ANIM_PAL_EVASION; sharply = TRUE; break; - case STAT_ANIM_MULTIPLE_PLUS1: goesDown = FALSE; animStatId = 0xFF; sharply = FALSE; break; - case STAT_ANIM_MULTIPLE_PLUS2: goesDown = FALSE; animStatId = 0xFF; sharply = TRUE; break; - case STAT_ANIM_MULTIPLE_MINUS1: goesDown = TRUE; animStatId = 0xFF; sharply = FALSE; break; - case STAT_ANIM_MULTIPLE_MINUS2: goesDown = TRUE; animStatId = 0xFF; sharply = TRUE; break; + case STAT_ANIM_MULTIPLE_PLUS1: goesDown = FALSE; animStatId = STAT_ANIM_PAL_MULTIPLE; sharply = FALSE; break; + case STAT_ANIM_MULTIPLE_PLUS2: goesDown = FALSE; animStatId = STAT_ANIM_PAL_MULTIPLE; sharply = TRUE; break; + case STAT_ANIM_MULTIPLE_MINUS1: goesDown = TRUE; animStatId = STAT_ANIM_PAL_MULTIPLE; sharply = FALSE; break; + case STAT_ANIM_MULTIPLE_MINUS2: goesDown = TRUE; animStatId = STAT_ANIM_PAL_MULTIPLE; sharply = TRUE; break; default: DestroyAnimVisualTask(taskId); @@ -538,7 +536,7 @@ void AnimTask_StatsChange(u8 taskId) gBattleAnimArgs[3] = 0; gBattleAnimArgs[4] = sharply; gTasks[taskId].func = InitStatsChangeAnimation; - InitStatsChangeAnimation(taskId); + gTasks[taskId].func(taskId); } #undef CASE diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c index afc3d61ce4..9375fda430 100644 --- a/src/battle_anim_utility_funcs.c +++ b/src/battle_anim_utility_funcs.c @@ -393,7 +393,7 @@ void InitStatsChangeAnimation(u8 taskId) u8 i; sAnimStatsChangeData = AllocZeroed(sizeof(struct AnimStatsChangeData)); - for (i = 0; i < 8; i++) + for (i = 0; i < ARRAY_COUNT(sAnimStatsChangeData->data); i++) sAnimStatsChangeData->data[i] = gBattleAnimArgs[i]; gTasks[taskId].func = StatsChangeAnimation_Step1; @@ -477,28 +477,29 @@ static void StatsChangeAnimation_Step2(u8 taskId) AnimLoadCompressedBgGfx(animBgData.bgId, gBattleStatMask_Gfx, animBgData.tilesOffset); switch (sAnimStatsChangeData->data[1]) { - case 0: + case STAT_ANIM_PAL_ATK: LoadCompressedPalette(gBattleStatMask2_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); break; - case 1: + case STAT_ANIM_PAL_DEF: LoadCompressedPalette(gBattleStatMask1_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); break; - case 2: + case STAT_ANIM_PAL_ACC: LoadCompressedPalette(gBattleStatMask3_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); break; - case 3: + case STAT_ANIM_PAL_SPEED: LoadCompressedPalette(gBattleStatMask4_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); break; - case 4: + case STAT_ANIM_PAL_EVASION: LoadCompressedPalette(gBattleStatMask6_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); break; - case 5: + case STAT_ANIM_PAL_SPATK: LoadCompressedPalette(gBattleStatMask7_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); break; - case 6: + case STAT_ANIM_PAL_SPDEF: LoadCompressedPalette(gBattleStatMask8_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); break; default: + // case STAT_ANIM_PAL_MULTIPLE: LoadCompressedPalette(gBattleStatMask5_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); break; } diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index bf9197a0e8..d86c1433ab 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -4061,16 +4061,16 @@ static void Cmd_setgraphicalstatchangevalues(void) switch (GET_STAT_BUFF_VALUE2(gBattleScripting.statChanger)) { case SET_STAT_BUFF_VALUE(1): // +1 - value = STAT_ANIM_PLUS1; + value = STAT_ANIM_PLUS1 + 1; break; case SET_STAT_BUFF_VALUE(2): // +2 - value = STAT_ANIM_PLUS2; + value = STAT_ANIM_PLUS2 + 1; break; case SET_STAT_BUFF_VALUE(1) | STAT_BUFF_NEGATIVE: // -1 - value = STAT_ANIM_MINUS1; + value = STAT_ANIM_MINUS1 + 1; break; case SET_STAT_BUFF_VALUE(2) | STAT_BUFF_NEGATIVE: // -2 - value = STAT_ANIM_MINUS2; + value = STAT_ANIM_MINUS2 + 1; break; } gBattleScripting.animArg1 = GET_STAT_BUFF_ID(gBattleScripting.statChanger) + value - 1; @@ -4092,9 +4092,9 @@ static void Cmd_playstatchangeanimation(void) { s16 startingStatAnimId; if (gBattlescriptCurrInstr[3] & STAT_CHANGE_BY_TWO) - startingStatAnimId = STAT_ANIM_MINUS2 - 1; + startingStatAnimId = STAT_ANIM_MINUS2; else - startingStatAnimId = STAT_ANIM_MINUS1 - 1; + startingStatAnimId = STAT_ANIM_MINUS1; while (statsToCheck != 0) { @@ -4136,9 +4136,9 @@ static void Cmd_playstatchangeanimation(void) { s16 startingStatAnimId; if (gBattlescriptCurrInstr[3] & STAT_CHANGE_BY_TWO) - startingStatAnimId = STAT_ANIM_PLUS2 - 1; + startingStatAnimId = STAT_ANIM_PLUS2; else - startingStatAnimId = STAT_ANIM_PLUS1 - 1; + startingStatAnimId = STAT_ANIM_PLUS1; while (statsToCheck != 0) { diff --git a/src/battle_util.c b/src/battle_util.c index 68a5b6adaa..837fdc3c71 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -374,7 +374,7 @@ void HandleAction_UseItem(void) gBattleTextBuff1[2]++; } - gBattleScripting.animArg1 = gBattleTextBuff1[2] + 14; + gBattleScripting.animArg1 = gBattleTextBuff1[2] + STAT_ANIM_PLUS1; gBattleScripting.animArg2 = 0; } break; @@ -2625,7 +2625,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA if (gBattleMons[battler].statStages[STAT_SPEED] < MAX_STAT_STAGE && gDisableStructs[battler].isFirstTurn != 2) { gBattleMons[battler].statStages[STAT_SPEED]++; - gBattleScripting.animArg1 = 14 + STAT_SPEED; + gBattleScripting.animArg1 = STAT_ANIM_PLUS1 + STAT_SPEED; gBattleScripting.animArg2 = 0; BattleScriptPushCursorAndCallback(BattleScript_SpeedBoostActivates); gBattleScripting.battler = battler; @@ -3229,7 +3229,7 @@ enum PREPARE_STAT_BUFFER(gBattleTextBuff1, stat); \ gEffectBattler = battlerId; \ SET_STATCHANGER(stat, 1, FALSE); \ - gBattleScripting.animArg1 = 14 + (stat); \ + gBattleScripting.animArg1 = STAT_ANIM_PLUS1 + (stat); \ gBattleScripting.animArg2 = 0; \ BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); \ effect = ITEM_STATS_CHANGE; \ @@ -3415,7 +3415,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) PREPARE_STRING_BUFFER(gBattleTextBuff2, STRINGID_STATROSE); // Only the Attack stat-up berry has this gEffectBattler = battlerId; SET_STATCHANGER(STAT_ATK, 1, FALSE); - gBattleScripting.animArg1 = 14 + STAT_ATK; + gBattleScripting.animArg1 = STAT_ANIM_PLUS1 + STAT_ATK; gBattleScripting.animArg2 = 0; BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); effect = ITEM_STATS_CHANGE; @@ -3470,7 +3470,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) gEffectBattler = battlerId; SET_STATCHANGER(i + 1, 2, FALSE); - gBattleScripting.animArg1 = 0x21 + i + 6; + gBattleScripting.animArg1 = STAT_ANIM_PLUS2 + (i + 1); gBattleScripting.animArg2 = 0; BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); effect = ITEM_STATS_CHANGE; From 8a3eaadf7b7d8e515563f2b3ed33895ca77700a7 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Tue, 8 Aug 2023 08:58:57 -0400 Subject: [PATCH 24/43] Renamed "ButItFailed" script name to align with names below it --- data/battle_scripts_1.s | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 7e99911b19..7aead3a6cc 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -533,7 +533,7 @@ BattleScript_EffectEvasionDown:: setstatchanger STAT_EVASION, 1, TRUE BattleScript_EffectStatDown:: attackcanceler - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailedAtkStringPpReduce + jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailedPpReduceAtkString accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE attackstring ppreduce @@ -1216,7 +1216,7 @@ BattleScript_EffectPsywave:: BattleScript_EffectCounter:: attackcanceler - counterdamagecalculator BattleScript_ButItFailedAtkStringPpReduce + counterdamagecalculator BattleScript_ButItFailedPpReduceAtkString accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE attackstring ppreduce @@ -1543,7 +1543,7 @@ BattleScript_EffectEndure:: BattleScript_EffectSpikes:: attackcanceler - trysetspikes BattleScript_ButItFailedAtkStringPpReduce + trysetspikes BattleScript_ButItFailedPpReduceAtkString attackstring ppreduce attackanimation @@ -1800,7 +1800,7 @@ BattleScript_EffectPsychUp:: BattleScript_EffectMirrorCoat:: attackcanceler - mirrorcoatdamagecalculator BattleScript_ButItFailedAtkStringPpReduce + mirrorcoatdamagecalculator BattleScript_ButItFailedPpReduceAtkString accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE attackstring ppreduce @@ -2047,11 +2047,11 @@ BattleScript_AlreadyAtFullHp:: BattleScript_EffectFakeOut:: attackcanceler - jumpifnotfirstturn BattleScript_ButItFailedAtkStringPpReduce + jumpifnotfirstturn BattleScript_ButItFailedPpReduceAtkString setmoveeffect MOVE_EFFECT_FLINCH | MOVE_EFFECT_CERTAIN goto BattleScript_EffectHit -BattleScript_ButItFailedAtkStringPpReduce:: +BattleScript_ButItFailedPpReduceAtkString:: attackstring BattleScript_ButItFailedPpReduce:: ppreduce @@ -2391,7 +2391,7 @@ BattleScript_EffectSuperpower:: BattleScript_EffectMagicCoat:: attackcanceler - trysetmagiccoat BattleScript_ButItFailedAtkStringPpReduce + trysetmagiccoat BattleScript_ButItFailedPpReduceAtkString attackstring ppreduce attackanimation @@ -2542,7 +2542,7 @@ BattleScript_EffectGrudge:: BattleScript_EffectSnatch:: attackcanceler - trysetsnatch BattleScript_ButItFailedAtkStringPpReduce + trysetsnatch BattleScript_ButItFailedPpReduceAtkString attackstring ppreduce attackanimation From 087a2cecefd3951637fb36e4a0e2d5ad269fe13d Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 8 Aug 2023 14:38:00 -0400 Subject: [PATCH 25/43] Fix Bravo Trainer Tower member names --- include/global.tv.h | 8 ++++---- src/tv.c | 50 ++++++++++++++++++++++----------------------- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/include/global.tv.h b/include/global.tv.h index 3729562cd6..9c3902e7cc 100644 --- a/include/global.tv.h +++ b/include/global.tv.h @@ -113,17 +113,17 @@ typedef union // size = 0x24 struct { /*0x00*/ u8 kind; /*0x01*/ bool8 active; - /*0x02*/ u8 trainerName[PLAYER_NAME_LENGTH + 1]; + /*0x02*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x0A*/ u16 species; - /*0x0C*/ u8 pokemonName[8]; + /*0x0C*/ u8 opponentName[PLAYER_NAME_LENGTH + 1]; /*0x14*/ u16 defeatedSpecies; /*0x16*/ u16 numFights; /*0x18*/ u16 words[1]; /*0x1A*/ u8 btLevel; /*0x1B*/ u8 interviewResponse; /*0x1C*/ bool8 wonTheChallenge; - /*0x1D*/ u8 language; - /*0x1E*/ u8 pokemonNameLanguage; + /*0x1D*/ u8 playerLanguage; + /*0x1E*/ u8 opponentLanguage; /*0x1F*/ //u8 padding; } bravoTrainerTower; diff --git a/src/tv.c b/src/tv.c index 85819a7a1d..db00cf31f1 100644 --- a/src/tv.c +++ b/src/tv.c @@ -1483,8 +1483,8 @@ static void InterviewAfter_BravoTrainerBattleTowerProfile(void) TVShow *show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot]; show->bravoTrainerTower.kind = TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE; show->bravoTrainerTower.active = TRUE; - StringCopy(show->bravoTrainerTower.trainerName, gSaveBlock2Ptr->playerName); - StringCopy(show->bravoTrainerTower.pokemonName, gSaveBlock2Ptr->frontier.towerInterview.opponentName); + StringCopy(show->bravoTrainerTower.playerName, gSaveBlock2Ptr->playerName); + StringCopy(show->bravoTrainerTower.opponentName, gSaveBlock2Ptr->frontier.towerInterview.opponentName); show->bravoTrainerTower.species = gSaveBlock2Ptr->frontier.towerInterview.playerSpecies; show->bravoTrainerTower.defeatedSpecies = gSaveBlock2Ptr->frontier.towerInterview.opponentSpecies; show->bravoTrainerTower.numFights = GetCurrentBattleTowerWinStreak(gSaveBlock2Ptr->frontier.towerLvlMode, 0); @@ -1495,11 +1495,11 @@ static void InterviewAfter_BravoTrainerBattleTowerProfile(void) show->bravoTrainerTower.btLevel = FRONTIER_MAX_LEVEL_OPEN; show->bravoTrainerTower.interviewResponse = gSpecialVar_0x8004; StorePlayerIdInNormalShow(show); - show->bravoTrainerTower.language = gGameLanguage; - if (show->bravoTrainerTower.language == LANGUAGE_JAPANESE || gSaveBlock2Ptr->frontier.towerInterview.opponentLanguage == LANGUAGE_JAPANESE) - show->bravoTrainerTower.pokemonNameLanguage = LANGUAGE_JAPANESE; + show->bravoTrainerTower.playerLanguage = gGameLanguage; + if (show->bravoTrainerTower.playerLanguage == LANGUAGE_JAPANESE || gSaveBlock2Ptr->frontier.towerInterview.opponentLanguage == LANGUAGE_JAPANESE) + show->bravoTrainerTower.opponentLanguage = LANGUAGE_JAPANESE; else - show->bravoTrainerTower.pokemonNameLanguage = gSaveBlock2Ptr->frontier.towerInterview.opponentLanguage; + show->bravoTrainerTower.opponentLanguage = gSaveBlock2Ptr->frontier.towerInterview.opponentLanguage; } void TryPutSmartShopperOnAir(void) @@ -3992,8 +3992,8 @@ static void TranslateShowNames(TVShow *show, u32 language) break; case TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE: shows[5] = &show[i]; - SetStrLanguage(shows[5]->bravoTrainerTower.trainerName, shows[5]->bravoTrainerTower.language, language); - SetStrLanguage(shows[5]->bravoTrainerTower.pokemonName, shows[5]->bravoTrainerTower.pokemonNameLanguage, language); + SetStrLanguage(shows[5]->bravoTrainerTower.playerName, shows[5]->bravoTrainerTower.playerLanguage, language); + SetStrLanguage(shows[5]->bravoTrainerTower.opponentName, shows[5]->bravoTrainerTower.opponentLanguage, language); break; case TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE: shows[4] = &show[i]; @@ -4035,8 +4035,8 @@ void SanitizeTVShowsForRuby(TVShow *shows) { if (curShow->bravoTrainerTower.kind == TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE) { - if ((curShow->bravoTrainerTower.language == LANGUAGE_JAPANESE && curShow->bravoTrainerTower.pokemonNameLanguage != LANGUAGE_JAPANESE) - || (curShow->bravoTrainerTower.language != LANGUAGE_JAPANESE && curShow->bravoTrainerTower.pokemonNameLanguage == LANGUAGE_JAPANESE)) + if ((curShow->bravoTrainerTower.playerLanguage == LANGUAGE_JAPANESE && curShow->bravoTrainerTower.opponentLanguage != LANGUAGE_JAPANESE) + || (curShow->bravoTrainerTower.playerLanguage != LANGUAGE_JAPANESE && curShow->bravoTrainerTower.opponentLanguage == LANGUAGE_JAPANESE)) memset(curShow, 0, sizeof(TVShow)); } } @@ -4050,10 +4050,10 @@ static void TranslateRubyShows(TVShow *shows) { if (curShow->bravoTrainerTower.kind == TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE) { - if (IsStringJapanese(curShow->bravoTrainerTower.pokemonName)) - curShow->bravoTrainerTower.pokemonNameLanguage = LANGUAGE_JAPANESE; + if (IsStringJapanese(curShow->bravoTrainerTower.opponentName)) + curShow->bravoTrainerTower.opponentLanguage = LANGUAGE_JAPANESE; else - curShow->bravoTrainerTower.pokemonNameLanguage = GAME_LANGUAGE; + curShow->bravoTrainerTower.opponentLanguage = GAME_LANGUAGE; } } } @@ -4093,8 +4093,8 @@ static void TranslateJapaneseEmeraldShows(TVShow *shows) curShow->bravoTrainer.pokemonNameLanguage = GetStringLanguage(curShow->bravoTrainer.pokemonNickname); break; case TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE: - curShow->bravoTrainerTower.language = GetStringLanguage(curShow->bravoTrainerTower.trainerName); - curShow->bravoTrainerTower.pokemonNameLanguage = GetStringLanguage(curShow->bravoTrainerTower.pokemonName); + curShow->bravoTrainerTower.playerLanguage = GetStringLanguage(curShow->bravoTrainerTower.playerName); + curShow->bravoTrainerTower.opponentLanguage = GetStringLanguage(curShow->bravoTrainerTower.opponentName); break; case TVSHOW_CONTEST_LIVE_UPDATES: curShow->contestLiveUpdates.winningTrainerLanguage = GetStringLanguage(curShow->contestLiveUpdates.winningTrainerName); @@ -4385,7 +4385,7 @@ static void DoTVShowBravoTrainerBattleTower(void) switch(state) { case BRAVOTOWER_STATE_INTRO: - TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.trainerName, show->bravoTrainerTower.language); + TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.playerName, show->bravoTrainerTower.playerLanguage); StringCopy(gStringVar2, gSpeciesNames[show->bravoTrainerTower.species]); if (show->bravoTrainerTower.numFights >= FRONTIER_STAGES_PER_CHALLENGE) sTVShowState = BRAVOTOWER_STATE_NEW_RECORD; @@ -4406,7 +4406,7 @@ static void DoTVShowBravoTrainerBattleTower(void) sTVShowState = BRAVOTOWER_STATE_LOST_FINAL; break; case BRAVOTOWER_STATE_LOST: - TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.pokemonName, show->bravoTrainerTower.pokemonNameLanguage); + TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.opponentName, show->bravoTrainerTower.opponentLanguage); ConvertIntToDecimalString(1, show->bravoTrainerTower.numFights + 1); if (show->bravoTrainerTower.interviewResponse == 0) sTVShowState = BRAVOTOWER_STATE_SATISFIED; @@ -4414,7 +4414,7 @@ static void DoTVShowBravoTrainerBattleTower(void) sTVShowState = BRAVOTOWER_STATE_UNSATISFIED; break; case BRAVOTOWER_STATE_WON: - TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.pokemonName, show->bravoTrainerTower.pokemonNameLanguage); + TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.opponentName, show->bravoTrainerTower.opponentLanguage); StringCopy(gStringVar2, gSpeciesNames[show->bravoTrainerTower.defeatedSpecies]); if (show->bravoTrainerTower.interviewResponse == 0) sTVShowState = BRAVOTOWER_STATE_SATISFIED; @@ -4422,7 +4422,7 @@ static void DoTVShowBravoTrainerBattleTower(void) sTVShowState = BRAVOTOWER_STATE_UNSATISFIED; break; case BRAVOTOWER_STATE_LOST_FINAL: - TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.pokemonName, show->bravoTrainerTower.pokemonNameLanguage); + TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.opponentName, show->bravoTrainerTower.opponentLanguage); StringCopy(gStringVar2, gSpeciesNames[show->bravoTrainerTower.defeatedSpecies]); if (show->bravoTrainerTower.interviewResponse == 0) sTVShowState = BRAVOTOWER_STATE_SATISFIED; @@ -4430,11 +4430,11 @@ static void DoTVShowBravoTrainerBattleTower(void) sTVShowState = BRAVOTOWER_STATE_UNSATISFIED; break; case BRAVOTOWER_STATE_SATISFIED: - TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.pokemonName, show->bravoTrainerTower.pokemonNameLanguage); + TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.opponentName, show->bravoTrainerTower.opponentLanguage); sTVShowState = BRAVOTOWER_STATE_RESPONSE; break; case BRAVOTOWER_STATE_UNSATISFIED: - TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.pokemonName, show->bravoTrainerTower.pokemonNameLanguage); + TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.opponentName, show->bravoTrainerTower.opponentLanguage); sTVShowState = BRAVOTOWER_STATE_RESPONSE; break; case BRAVOTOWER_STATE_UNUSED_1: @@ -4443,7 +4443,7 @@ static void DoTVShowBravoTrainerBattleTower(void) case BRAVOTOWER_STATE_UNUSED_2: case BRAVOTOWER_STATE_UNUSED_3: case BRAVOTOWER_STATE_UNUSED_4: - TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.trainerName, show->bravoTrainerTower.language); + TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.playerName, show->bravoTrainerTower.playerLanguage); sTVShowState = BRAVOTOWER_STATE_RESPONSE; break; case BRAVOTOWER_STATE_RESPONSE: @@ -4456,12 +4456,12 @@ static void DoTVShowBravoTrainerBattleTower(void) case BRAVOTOWER_STATE_RESPONSE_SATISFIED: case BRAVOTOWER_STATE_RESPONSE_UNSATISFIED: CopyEasyChatWord(gStringVar1, show->bravoTrainerTower.words[0]); - TVShowConvertInternationalString(gStringVar2, show->bravoTrainerTower.trainerName, show->bravoTrainerTower.language); - TVShowConvertInternationalString(gStringVar3, show->bravoTrainerTower.pokemonName, show->bravoTrainerTower.pokemonNameLanguage); + TVShowConvertInternationalString(gStringVar2, show->bravoTrainerTower.playerName, show->bravoTrainerTower.playerLanguage); + TVShowConvertInternationalString(gStringVar3, show->bravoTrainerTower.opponentName, show->bravoTrainerTower.opponentLanguage); sTVShowState = BRAVOTOWER_STATE_OUTRO; break; case BRAVOTOWER_STATE_OUTRO: - TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.trainerName, show->bravoTrainerTower.language); + TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.playerName, show->bravoTrainerTower.playerLanguage); StringCopy(gStringVar2, gSpeciesNames[show->bravoTrainerTower.species]); TVShowDone(); break; From 65fee186f84ab80c578878b2120ed4ce75e6cf14 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 8 Aug 2023 15:27:52 -0400 Subject: [PATCH 26/43] Automatically update nickname buffer sizes --- include/battle_message.h | 6 +++++- include/constants/global.h | 1 + src/battle_controller_link_opponent.c | 2 +- src/battle_controller_link_partner.c | 2 +- src/battle_controller_opponent.c | 2 +- src/battle_controller_player.c | 2 +- src/battle_controller_player_partner.c | 2 +- src/battle_controller_recorded_opponent.c | 2 +- src/battle_controller_recorded_player.c | 2 +- src/battle_controller_wally.c | 2 +- src/battle_message.c | 26 ++++++++++++++--------- src/contest.c | 20 +++++++++++------ src/daycare.c | 17 ++++++--------- src/egg_hatch.c | 2 +- src/evolution_scene.c | 18 +++++++--------- src/hall_of_fame.c | 20 ++++++++--------- src/menu_specialized.c | 6 +++--- src/pokemon.c | 6 +++--- src/pokenav_conditions.c | 4 ++-- src/trade.c | 14 ++++++------ 20 files changed, 83 insertions(+), 73 deletions(-) diff --git a/include/battle_message.h b/include/battle_message.h index d34d2125a2..d62c260049 100644 --- a/include/battle_message.h +++ b/include/battle_message.h @@ -1,7 +1,11 @@ #ifndef GUARD_BATTLE_MESSAGE_H #define GUARD_BATTLE_MESSAGE_H -#define TEXT_BUFF_ARRAY_COUNT 16 +// This buffer can hold many different things. Some of the things it can hold +// that have explicit sizes are listed below to ensure it can contain them. +#define TEXT_BUFF_ARRAY_COUNT max(16, \ + max(MOVE_NAME_LENGTH + 2, /* +2 to hold the "!" and EOS. */ \ + POKEMON_NAME_LENGTH + 1)) // for 0xFD #define B_TXT_BUFF1 0x0 diff --git a/include/constants/global.h b/include/constants/global.h index 04f1d548c4..199acfe6c6 100644 --- a/include/constants/global.h +++ b/include/constants/global.h @@ -92,6 +92,7 @@ // string lengths #define ITEM_NAME_LENGTH 14 #define POKEMON_NAME_LENGTH 10 +#define POKEMON_NAME_BUFFER_SIZE max(20, POKEMON_NAME_LENGTH + 1) // Frequently used buffer size. Larger than necessary #define PLAYER_NAME_LENGTH 7 #define MAIL_WORDS_COUNT 9 #define EASY_CHAT_BATTLE_WORDS_COUNT 6 diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c index 0f1ce1b17f..2104298775 100644 --- a/src/battle_controller_link_opponent.c +++ b/src/battle_controller_link_opponent.c @@ -556,7 +556,7 @@ static u32 CopyLinkOpponentMonData(u8 monId, u8 *dst) { struct BattlePokemon battleMon; struct MovePpInfo moveData; - u8 nickname[20]; + u8 nickname[POKEMON_NAME_BUFFER_SIZE]; u8 *src; s16 data16; u32 data32; diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c index 3b2e014253..054563ad3a 100644 --- a/src/battle_controller_link_partner.c +++ b/src/battle_controller_link_partner.c @@ -450,7 +450,7 @@ static u32 CopyLinkPartnerMonData(u8 monId, u8 *dst) { struct BattlePokemon battleMon; struct MovePpInfo moveData; - u8 nickname[20]; + u8 nickname[POKEMON_NAME_BUFFER_SIZE]; u8 *src; s16 data16; u32 data32; diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index 8246a6f80f..12402f91ea 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -561,7 +561,7 @@ static u32 GetOpponentMonData(u8 monId, u8 *dst) { struct BattlePokemon battleMon; struct MovePpInfo moveData; - u8 nickname[20]; + u8 nickname[POKEMON_NAME_BUFFER_SIZE]; u8 *src; s16 data16; u32 data32; diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 3d0531325e..cdc5fe8429 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -1608,7 +1608,7 @@ static u32 CopyPlayerMonData(u8 monId, u8 *dst) { struct BattlePokemon battleMon; struct MovePpInfo moveData; - u8 nickname[20]; + u8 nickname[POKEMON_NAME_BUFFER_SIZE]; u8 *src; s16 data16; u32 data32; diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c index 5b08a2c529..6127e2d655 100644 --- a/src/battle_controller_player_partner.c +++ b/src/battle_controller_player_partner.c @@ -634,7 +634,7 @@ static u32 CopyPlayerPartnerMonData(u8 monId, u8 *dst) { struct BattlePokemon battleMon; struct MovePpInfo moveData; - u8 nickname[20]; + u8 nickname[POKEMON_NAME_BUFFER_SIZE]; u8 *src; s16 data16; u32 data32; diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c index 872a61c0e7..b2db595f8a 100644 --- a/src/battle_controller_recorded_opponent.c +++ b/src/battle_controller_recorded_opponent.c @@ -542,7 +542,7 @@ static u32 CopyRecordedOpponentMonData(u8 monId, u8 *dst) { struct BattlePokemon battleMon; struct MovePpInfo moveData; - u8 nickname[20]; + u8 nickname[POKEMON_NAME_BUFFER_SIZE]; u8 *src; s16 data16; u32 data32; diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c index d23aaa8b04..591ddb67e3 100644 --- a/src/battle_controller_recorded_player.c +++ b/src/battle_controller_recorded_player.c @@ -525,7 +525,7 @@ static u32 CopyRecordedPlayerMonData(u8 monId, u8 *dst) { struct BattlePokemon battleMon; struct MovePpInfo moveData; - u8 nickname[20]; + u8 nickname[POKEMON_NAME_BUFFER_SIZE]; u8 *src; s16 data16; u32 data32; diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c index ca81677f20..5b94f2dd26 100644 --- a/src/battle_controller_wally.c +++ b/src/battle_controller_wally.c @@ -452,7 +452,7 @@ static u32 CopyWallyMonData(u8 monId, u8 *dst) { struct BattlePokemon battleMon; struct MovePpInfo moveData; - u8 nickname[20]; + u8 nickname[POKEMON_NAME_BUFFER_SIZE]; u8 *src; s16 data16; u32 data32; diff --git a/src/battle_message.c b/src/battle_message.c index b02e9e445c..6ae16164d9 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -1323,7 +1323,8 @@ const u8 gText_Draw[] = _("{HIGHLIGHT TRANSPARENT}Draw"); static const u8 sText_SpaceIs[] = _(" is"); static const u8 sText_ApostropheS[] = _("'s"); -// For displaying names of invalid moves +// For displaying names of invalid moves. +// This is large enough that the text for TYPE_ELECTRIC will exceed TEXT_BUFF_ARRAY_COUNT. static const u8 sATypeMove_Table[NUMBER_OF_MON_TYPES][17] = { [TYPE_NORMAL] = _("a NORMAL move"), @@ -1472,7 +1473,7 @@ static const u16 sGrammarMoveUsedTable[] = MOVE_COVET, 0 }; -static const u8 sDummyWeirdStatusString[] = {EOS, EOS, EOS, EOS, EOS, EOS, EOS, EOS, 0, 0}; +static const u8 sText_EmptyStatus[] = _("$$$$$$$"); static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = { @@ -2259,10 +2260,10 @@ static const u8 *TryGetStatusString(u8 *src) u32 chars1, chars2; u8 *statusPtr; - memcpy(status, sDummyWeirdStatusString, 8); + memcpy(status, sText_EmptyStatus, min(ARRAY_COUNT(status), ARRAY_COUNT(sText_EmptyStatus))); statusPtr = status; - for (i = 0; i < 8; i++) + for (i = 0; i < ARRAY_COUNT(status); i++) { if (*src == EOS) break; // one line required to match -g *statusPtr = *src; @@ -2304,11 +2305,16 @@ static const u8 *TryGetStatusString(u8 *src) StringGet_Nickname(text); \ toCpy = text; +// Ensure the defined length for an item name can contain the full defined length of a berry name. +// This ensures that custom Enigma Berry names will fit in the text buffer at the top of BattleStringExpandPlaceholders. +STATIC_ASSERT(BERRY_NAME_LENGTH + 1 + ARRAY_COUNT(sText_BerrySuffix) <= ITEM_NAME_LENGTH, BerryNameTooLong); + u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst) { u32 dstID = 0; // if they used dstID, why not use srcID as well? const u8 *toCpy = NULL; - u8 text[30]; + // This buffer may hold either the name of a trainer, pokemon, or item. + u8 text[max(max(max(32, TRAINER_NAME_LENGTH + 1), POKEMON_NAME_LENGTH + 1), ITEM_NAME_LENGTH)]; u8 multiplayerId; s32 i; @@ -2753,7 +2759,7 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst) { u32 srcID = 1; u32 value = 0; - u8 text[12]; + u8 nickname[POKEMON_NAME_LENGTH + 1]; u16 hword; *dst = EOS; @@ -2793,7 +2799,7 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst) case B_BUFF_MON_NICK_WITH_PREFIX: // poke nick with prefix if (GetBattlerSide(src[srcID + 1]) == B_SIDE_PLAYER) { - GetMonData(&gPlayerParty[src[srcID + 2]], MON_DATA_NICKNAME, text); + GetMonData(&gPlayerParty[src[srcID + 2]], MON_DATA_NICKNAME, nickname); } else { @@ -2802,10 +2808,10 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst) else StringAppend(dst, sText_WildPkmnPrefix); - GetMonData(&gEnemyParty[src[srcID + 2]], MON_DATA_NICKNAME, text); + GetMonData(&gEnemyParty[src[srcID + 2]], MON_DATA_NICKNAME, nickname); } - StringGet_Nickname(text); - StringAppend(dst, text); + StringGet_Nickname(nickname); + StringAppend(dst, nickname); srcID += 3; break; case B_BUFF_STAT: // stats diff --git a/src/contest.c b/src/contest.c index 741a0e12db..151e87af49 100644 --- a/src/contest.c +++ b/src/contest.c @@ -2775,7 +2775,7 @@ static bool8 IsPlayerLinkLeader(void) void CreateContestMonFromParty(u8 partyIndex) { - u8 name[20]; + u8 name[max(PLAYER_NAME_LENGTH + 1, POKEMON_NAME_BUFFER_SIZE)]; u16 heldItem; s16 cool; s16 beauty; @@ -2785,10 +2785,8 @@ void CreateContestMonFromParty(u8 partyIndex) StringCopy(name, gSaveBlock2Ptr->playerName); if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK) - { StripPlayerNameForLinkContest(name); - } - memcpy(gContestMons[gContestPlayerMonIndex].trainerName, name, 8); + memcpy(gContestMons[gContestPlayerMonIndex].trainerName, name, PLAYER_NAME_LENGTH + 1); if (gSaveBlock2Ptr->playerGender == MALE) gContestMons[gContestPlayerMonIndex].trainerGfxId = OBJ_EVENT_GFX_LINK_BRENDAN; else @@ -6020,8 +6018,10 @@ static u8 GetMonNicknameLanguage(u8 *nickname) if (nickname[0] == EXT_CTRL_CODE_BEGIN && nickname[1] == EXT_CTRL_CODE_JPN) return GAME_LANGUAGE; - if (StringLength(nickname) < PLAYER_NAME_LENGTH - 1) + if (StringLength(nickname) <= 5) { + // Name is short enough that it might be Japanese. + // Make sure all the character values are valid latin name characters. while (*nickname != EOS) { if ((*nickname >= CHAR_A && *nickname <= CHAR_z) @@ -6039,12 +6039,18 @@ static u8 GetMonNicknameLanguage(u8 *nickname) || *nickname == CHAR_DBL_QUOTE_LEFT || *nickname == CHAR_DBL_QUOTE_RIGHT || *nickname == CHAR_SGL_QUOTE_LEFT - || *nickname == CHAR_DBL_QUOTE_LEFT) // Most likely a typo, CHAR_SGL_QUOTE_RIGHT should be here instead. +#ifdef BUGFIX + || *nickname == CHAR_SGL_QUOTE_RIGHT +#else + || *nickname == CHAR_DBL_QUOTE_LEFT // Most likely a typo, CHAR_SGL_QUOTE_RIGHT should be here instead. +#endif + ) { nickname++; } else { + // Invalid latin name character, assume the name was Japanese. ret = LANGUAGE_JAPANESE; break; } @@ -6101,7 +6107,7 @@ void StripPlayerAndMonNamesForLinkContest(struct ContestPokemon *mon, s32 langua name = mon->trainerName; if (language == LANGUAGE_JAPANESE) { - name[PLAYER_NAME_LENGTH] = EOS; + name[7] = EOS; name[6] = name[4]; name[5] = name[3]; name[4] = name[2]; diff --git a/src/daycare.c b/src/daycare.c index 9d199f0f3a..5922a60fff 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -93,16 +93,14 @@ static const u8 sJapaneseEggNickname[] = _("タマゴ"); // "tamago" ("egg" in J u8 *GetMonNickname2(struct Pokemon *mon, u8 *dest) { - u8 nickname[POKEMON_NAME_LENGTH * 2]; - + u8 nickname[POKEMON_NAME_BUFFER_SIZE]; GetMonData(mon, MON_DATA_NICKNAME, nickname); return StringCopy_Nickname(dest, nickname); } u8 *GetBoxMonNickname(struct BoxPokemon *mon, u8 *dest) { - u8 nickname[POKEMON_NAME_LENGTH * 2]; - + u8 nickname[POKEMON_NAME_BUFFER_SIZE]; GetBoxMonData(mon, MON_DATA_NICKNAME, nickname); return StringCopy_Nickname(dest, nickname); } @@ -946,12 +944,12 @@ static bool8 IsEggPending(struct DayCare *daycare) // gStringVar3 = first mon trainer's name static void _GetDaycareMonNicknames(struct DayCare *daycare) { - u8 text[12]; + u8 otName[max(12, PLAYER_NAME_LENGTH + 1)]; if (GetBoxMonData(&daycare->mons[0].mon, MON_DATA_SPECIES) != 0) { GetBoxMonNickname(&daycare->mons[0].mon, gStringVar1); - GetBoxMonData(&daycare->mons[0].mon, MON_DATA_OT_NAME, text); - StringCopy(gStringVar3, text); + GetBoxMonData(&daycare->mons[0].mon, MON_DATA_OT_NAME, otName); + StringCopy(gStringVar3, otName); } if (GetBoxMonData(&daycare->mons[1].mon, MON_DATA_SPECIES) != 0) @@ -1146,7 +1144,7 @@ static u8 *AppendMonGenderSymbol(u8 *name, struct BoxPokemon *boxMon) static void GetDaycareLevelMenuText(struct DayCare *daycare, u8 *dest) { - u8 monNames[DAYCARE_MON_COUNT][20]; + u8 monNames[DAYCARE_MON_COUNT][POKEMON_NAME_BUFFER_SIZE]; u8 i; *dest = EOS; @@ -1204,8 +1202,7 @@ static void DaycareAddTextPrinter(u8 windowId, const u8 *text, u32 x, u32 y) static void DaycarePrintMonNickname(struct DayCare *daycare, u8 windowId, u32 daycareSlotId, u32 y) { - u8 nickname[POKEMON_NAME_LENGTH * 2]; - + u8 nickname[POKEMON_NAME_BUFFER_SIZE]; GetBoxMonNickname(&daycare->mons[daycareSlotId].mon, nickname); AppendMonGenderSymbol(nickname, &daycare->mons[daycareSlotId].mon); DaycareAddTextPrinter(windowId, nickname, 8, y); diff --git a/src/egg_hatch.c b/src/egg_hatch.c index 96d431a226..e9d287cf72 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -399,7 +399,7 @@ void ScriptHatchMon(void) static bool8 _CheckDaycareMonReceivedMail(struct DayCare *daycare, u8 daycareId) { - u8 nickname[32]; + u8 nickname[max(32, POKEMON_NAME_BUFFER_SIZE)]; struct DaycareMon *daycareMon = &daycare->mons[daycareId]; GetBoxMonNickname(&daycareMon->mon, nickname); diff --git a/src/evolution_scene.c b/src/evolution_scene.c index 3b92a0c435..dc19862616 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -208,7 +208,7 @@ void BeginEvolutionScene(struct Pokemon *mon, u16 postEvoSpecies, bool8 canStopE void EvolutionScene(struct Pokemon *mon, u16 postEvoSpecies, bool8 canStopEvo, u8 partyId) { - u8 name[20]; + u8 name[POKEMON_NAME_BUFFER_SIZE]; u16 currSpecies; u32 trainerId, personality; const struct CompressedSpritePalette* pokePal; @@ -467,7 +467,7 @@ static void CB2_TradeEvolutionSceneLoadGraphics(void) void TradeEvolutionScene(struct Pokemon *mon, u16 postEvoSpecies, u8 preEvoSpriteId, u8 partyId) { - u8 name[20]; + u8 name[POKEMON_NAME_BUFFER_SIZE]; u16 currSpecies; u32 trainerId, personality; const struct CompressedSpritePalette* pokePal; @@ -775,8 +775,7 @@ static void Task_EvolutionScene(u8 taskId) var = MonTryLearningNewMove(mon, gTasks[taskId].tLearnsFirstMove); if (var != MOVE_NONE && !gTasks[taskId].tEvoWasStopped) { - u8 text[20]; - + u8 nickname[POKEMON_NAME_BUFFER_SIZE]; if (!(gTasks[taskId].tBits & TASK_BIT_LEARN_MOVE)) { StopMapMusic(); @@ -786,8 +785,8 @@ static void Task_EvolutionScene(u8 taskId) gTasks[taskId].tBits |= TASK_BIT_LEARN_MOVE; gTasks[taskId].tLearnsFirstMove = FALSE; gTasks[taskId].tLearnMoveState = MVSTATE_INTRO_MSG_1; - GetMonData(mon, MON_DATA_NICKNAME, text); - StringCopy_Nickname(gBattleTextBuff1, text); + GetMonData(mon, MON_DATA_NICKNAME, nickname); + StringCopy_Nickname(gBattleTextBuff1, nickname); if (var == MON_HAS_MAX_MOVES) gTasks[taskId].tState = EVOSTATE_REPLACE_MOVE; @@ -1195,13 +1194,12 @@ static void Task_TradeEvolutionScene(u8 taskId) var = MonTryLearningNewMove(mon, gTasks[taskId].tLearnsFirstMove); if (var != MOVE_NONE && !gTasks[taskId].tEvoWasStopped) { - u8 text[20]; - + u8 nickname[POKEMON_NAME_BUFFER_SIZE]; gTasks[taskId].tBits |= TASK_BIT_LEARN_MOVE; gTasks[taskId].tLearnsFirstMove = FALSE; gTasks[taskId].tLearnMoveState = 0; - GetMonData(mon, MON_DATA_NICKNAME, text); - StringCopy_Nickname(gBattleTextBuff1, text); + GetMonData(mon, MON_DATA_NICKNAME, nickname); + StringCopy_Nickname(gBattleTextBuff1, nickname); if (var == MON_HAS_MAX_MOVES) gTasks[taskId].tState = T_EVOSTATE_REPLACE_MOVE; diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index 2e79a1f6b6..63c7c30c26 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -44,7 +44,7 @@ struct HallofFameMon u32 personality; u16 species:9; u16 lvl:7; - u8 nick[POKEMON_NAME_LENGTH]; + u8 nickname[POKEMON_NAME_LENGTH]; }; struct HallofFameTeam @@ -338,7 +338,7 @@ static const struct HallofFameMon sDummyFameMon = .personality = 0, .species = SPECIES_NONE, .lvl = 0, - .nick = {0} + .nickname = {0} }; // Unused, order of party slots on Hall of Fame screen @@ -442,18 +442,16 @@ static void Task_Hof_InitMonData(u8 taskId) for (i = 0; i < PARTY_SIZE; i++) { - u8 nick[POKEMON_NAME_LENGTH + 2]; + u8 nickname[POKEMON_NAME_LENGTH + 1]; if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES)) { sHofMonPtr->mon[i].species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); sHofMonPtr->mon[i].tid = GetMonData(&gPlayerParty[i], MON_DATA_OT_ID); sHofMonPtr->mon[i].personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY); sHofMonPtr->mon[i].lvl = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); - GetMonData(&gPlayerParty[i], MON_DATA_NICKNAME, nick); + GetMonData(&gPlayerParty[i], MON_DATA_NICKNAME, nickname); for (j = 0; j < POKEMON_NAME_LENGTH; j++) - { - sHofMonPtr->mon[i].nick[j] = nick[j]; - } + sHofMonPtr->mon[i].nickname[j] = nickname[j]; gTasks[taskId].tMonNumber++; } else @@ -462,7 +460,7 @@ static void Task_Hof_InitMonData(u8 taskId) sHofMonPtr->mon[i].tid = 0; sHofMonPtr->mon[i].personality = 0; sHofMonPtr->mon[i].lvl = 0; - sHofMonPtr->mon[i].nick[0] = EOS; + sHofMonPtr->mon[i].nickname[0] = EOS; } } @@ -1115,7 +1113,7 @@ static void HallOfFame_PrintWelcomeText(u8 unusedPossiblyWindowId, u8 unused2) static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 unused1, u8 unused2) { - u8 text[30]; + u8 text[max(32, POKEMON_NAME_LENGTH + 1)]; u8 *stringPtr; s32 dexNumber; s32 width; @@ -1148,8 +1146,8 @@ static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 unused1, u AddTextPrinterParameterized3(0, FONT_NORMAL, 0x10, 1, sMonInfoTextColors, TEXT_SKIP_DRAW, text); } - // nick, species names, gender and level - memcpy(text, currMon->nick, POKEMON_NAME_LENGTH); + // nickname, species names, gender and level + memcpy(text, currMon->nickname, POKEMON_NAME_LENGTH); text[POKEMON_NAME_LENGTH] = EOS; if (currMon->species == SPECIES_EGG) { diff --git a/src/menu_specialized.c b/src/menu_specialized.c index 8f25c3188f..15fdafbeb2 100644 --- a/src/menu_specialized.c +++ b/src/menu_specialized.c @@ -918,7 +918,7 @@ static u8 *GetConditionMenuMonString(u8 *dst, u16 boxId, u16 monId) *(dst++) = TEXT_COLOR_TRANSPARENT; *(dst++) = TEXT_COLOR_LIGHT_BLUE; if (GetBoxOrPartyMonData(box, mon, MON_DATA_IS_EGG, NULL)) - return StringCopyPadded(dst, gText_EggNickname, 0, 12); + return StringCopyPadded(dst, gText_EggNickname, 0, POKEMON_NAME_LENGTH + 2); GetBoxOrPartyMonData(box, mon, MON_DATA_NICKNAME, dst); StringGet_Nickname(dst); species = GetBoxOrPartyMonData(box, mon, MON_DATA_SPECIES, NULL); @@ -1020,7 +1020,7 @@ void GetConditionMenuMonNameAndLocString(u8 *locationDst, u8 *nameDst, u16 boxId locationDst[3] = TEXT_COLOR_TRANSPARENT; locationDst[4] = TEXT_COLOR_LIGHT_BLUE; if (box == TOTAL_BOXES_COUNT) // Party mon. - BufferConditionMenuSpacedStringN(&locationDst[5], gText_InParty, 8); + BufferConditionMenuSpacedStringN(&locationDst[5], gText_InParty, BOX_NAME_LENGTH); else BufferConditionMenuSpacedStringN(&locationDst[5], GetBoxNamePtr(box), BOX_NAME_LENGTH); } @@ -1029,7 +1029,7 @@ void GetConditionMenuMonNameAndLocString(u8 *locationDst, u8 *nameDst, u16 boxId for (i = 0; i < POKEMON_NAME_LENGTH + 2; i++) nameDst[i] = CHAR_SPACE; nameDst[i] = EOS; - for (i = 0; i < 8; i++) + for (i = 0; i < BOX_NAME_LENGTH; i++) locationDst[i] = CHAR_SPACE; locationDst[i] = EOS; } diff --git a/src/pokemon.c b/src/pokemon.c index b8f7ae48b3..f7a3ff88e5 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -2406,7 +2406,7 @@ void CreateMonWithEVSpread(struct Pokemon *mon, u16 species, u8 level, u8 fixedI void CreateBattleTowerMon(struct Pokemon *mon, struct BattleTowerPokemon *src) { s32 i; - u8 nickname[30]; + u8 nickname[max(32, POKEMON_NAME_BUFFER_SIZE)]; u8 language; u8 value; @@ -2460,7 +2460,7 @@ void CreateBattleTowerMon(struct Pokemon *mon, struct BattleTowerPokemon *src) void CreateBattleTowerMon_HandleLevel(struct Pokemon *mon, struct BattleTowerPokemon *src, bool8 lvl50) { s32 i; - u8 nickname[30]; + u8 nickname[max(32, POKEMON_NAME_BUFFER_SIZE)]; u8 level; u8 language; u8 value; @@ -4629,7 +4629,7 @@ void CopyPlayerPartyMonToBattleData(u8 battlerId, u8 partyIndex) { u16 *hpSwitchout; s32 i; - u8 nickname[POKEMON_NAME_LENGTH * 2]; + u8 nickname[POKEMON_NAME_BUFFER_SIZE]; gBattleMons[battlerId].species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES, NULL); gBattleMons[battlerId].item = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HELD_ITEM, NULL); diff --git a/src/pokenav_conditions.c b/src/pokenav_conditions.c index 05f86cab2f..1ebf6edbe9 100644 --- a/src/pokenav_conditions.c +++ b/src/pokenav_conditions.c @@ -348,7 +348,7 @@ static u8 *CopyConditionMonNameGender(u8 *str, u16 listId, bool8 skipPadding) *(str++) = TEXT_COLOR_LIGHT_BLUE; if (GetBoxOrPartyMonData(boxId, monId, MON_DATA_IS_EGG, NULL)) - return StringCopyPadded(str, gText_EggNickname, CHAR_SPACE, 12); + return StringCopyPadded(str, gText_EggNickname, CHAR_SPACE, POKEMON_NAME_LENGTH + 2); GetBoxOrPartyMonData(boxId, monId, MON_DATA_NICKNAME, str); StringGet_Nickname(str); @@ -445,7 +445,7 @@ static void CopyMonNameGenderLocation(s16 listId, u8 loadId) } else { - for (i = 0; i < 12; i++) + for (i = 0; i < POKEMON_NAME_LENGTH + 2; i++) menu->nameText[loadId][i] = CHAR_SPACE; menu->nameText[loadId][i] = EOS; diff --git a/src/trade.c b/src/trade.c index 971f0d966e..28e8f89d1c 100644 --- a/src/trade.c +++ b/src/trade.c @@ -1864,7 +1864,7 @@ static void SetSelectedMon(u8 cursorPosition) static void DrawSelectedMonScreen(u8 whichParty) { s8 nameStringWidth; - u8 nickname[20]; + u8 nickname[POKEMON_NAME_BUFFER_SIZE]; u8 movesString[56]; u8 i; u8 partyIdx; @@ -1950,7 +1950,7 @@ static void DrawSelectedMonScreen(u8 whichParty) static u8 GetMonNicknameWidth(u8 *str, u8 whichParty, u8 partyIdx) { - u8 nickname[POKEMON_NAME_LENGTH]; + u8 nickname[POKEMON_NAME_LENGTH + 1]; if (whichParty == TRADE_PLAYER) GetMonData(&gPlayerParty[partyIdx], MON_DATA_NICKNAME, nickname); @@ -2006,8 +2006,8 @@ static void PrintPartyMonNickname(u8 whichParty, u8 windowId, u8 *nickname) static void PrintPartyNicknames(u8 whichParty) { u8 i; - u8 nickname[20]; - u8 str[32]; + u8 nickname[POKEMON_NAME_BUFFER_SIZE]; + u8 str[max(32, POKEMON_NAME_BUFFER_SIZE)]; struct Pokemon *party = (whichParty == TRADE_PLAYER) ? gPlayerParty : gEnemyParty; for (i = 0; i < sTradeMenu->partyCounts[whichParty]; i++) @@ -2023,7 +2023,7 @@ static void PrintLevelAndGender(u8 whichParty, u8 monIdx, u8 x, u8 y, u8 width, u8 level; u32 symbolTile; u8 gender; - u8 nickname[POKEMON_NAME_LENGTH]; + u8 nickname[POKEMON_NAME_LENGTH + 1]; CopyToBgTilemapBufferRect_ChangePalette(1, gTradeMenuMonBox_Tilemap, width, height, 6, 3, 0); CopyBgTilemapBufferToVram(1); @@ -3330,7 +3330,7 @@ static void LoadTradeSequenceSpriteSheetsAndPalettes(void) static void BufferTradeSceneStrings(void) { u8 mpId; - u8 name[20]; + u8 name[POKEMON_NAME_BUFFER_SIZE]; const struct InGameTrade *ingameTrade; if (sTradeAnim->isLinkTrade) @@ -4539,7 +4539,7 @@ u16 GetInGameTradeSpeciesInfo(void) static void BufferInGameTradeMonName(void) { - u8 nickname[32]; + u8 nickname[max(32, POKEMON_NAME_BUFFER_SIZE)]; const struct InGameTrade *inGameTrade = &sIngameTrades[gSpecialVar_0x8004]; GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_NICKNAME, nickname); StringCopy_Nickname(gStringVar1, nickname); From 6598cb30bc1ebeed495e7921d0c2cfb4c5bbd630 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 8 Aug 2023 23:37:21 -0400 Subject: [PATCH 27/43] Document stat change animation --- .../stat3.pal => stat_change/accuracy.pal} | 0 .../stat2.pal => stat_change/attack.pal} | 0 .../decrease.bin} | Bin .../stat1.pal => stat_change/defense.pal} | 0 .../stat6.pal => stat_change/evasion.pal} | 0 .../increase.bin} | Bin .../stat5.pal => stat_change/multiple.pal} | 0 .../stat7.pal => stat_change/sp_attack.pal} | 0 .../stat8.pal => stat_change/sp_defense.pal} | 0 .../stat4.pal => stat_change/speed.pal} | 0 .../{masks/stat.png => stat_change/tiles.png} | Bin include/graphics.h | 23 +-- src/battle_anim_status_effects.c | 4 +- src/battle_anim_utility_funcs.c | 170 +++++++++++------- src/graphics.c | 23 ++- 15 files changed, 131 insertions(+), 89 deletions(-) rename graphics/battle_anims/{masks/stat3.pal => stat_change/accuracy.pal} (100%) rename graphics/battle_anims/{masks/stat2.pal => stat_change/attack.pal} (100%) rename graphics/battle_anims/{masks/stat_tilemap_2.bin => stat_change/decrease.bin} (100%) rename graphics/battle_anims/{masks/stat1.pal => stat_change/defense.pal} (100%) rename graphics/battle_anims/{masks/stat6.pal => stat_change/evasion.pal} (100%) rename graphics/battle_anims/{masks/stat_tilemap_1.bin => stat_change/increase.bin} (100%) rename graphics/battle_anims/{masks/stat5.pal => stat_change/multiple.pal} (100%) rename graphics/battle_anims/{masks/stat7.pal => stat_change/sp_attack.pal} (100%) rename graphics/battle_anims/{masks/stat8.pal => stat_change/sp_defense.pal} (100%) rename graphics/battle_anims/{masks/stat4.pal => stat_change/speed.pal} (100%) rename graphics/battle_anims/{masks/stat.png => stat_change/tiles.png} (100%) diff --git a/graphics/battle_anims/masks/stat3.pal b/graphics/battle_anims/stat_change/accuracy.pal similarity index 100% rename from graphics/battle_anims/masks/stat3.pal rename to graphics/battle_anims/stat_change/accuracy.pal diff --git a/graphics/battle_anims/masks/stat2.pal b/graphics/battle_anims/stat_change/attack.pal similarity index 100% rename from graphics/battle_anims/masks/stat2.pal rename to graphics/battle_anims/stat_change/attack.pal diff --git a/graphics/battle_anims/masks/stat_tilemap_2.bin b/graphics/battle_anims/stat_change/decrease.bin similarity index 100% rename from graphics/battle_anims/masks/stat_tilemap_2.bin rename to graphics/battle_anims/stat_change/decrease.bin diff --git a/graphics/battle_anims/masks/stat1.pal b/graphics/battle_anims/stat_change/defense.pal similarity index 100% rename from graphics/battle_anims/masks/stat1.pal rename to graphics/battle_anims/stat_change/defense.pal diff --git a/graphics/battle_anims/masks/stat6.pal b/graphics/battle_anims/stat_change/evasion.pal similarity index 100% rename from graphics/battle_anims/masks/stat6.pal rename to graphics/battle_anims/stat_change/evasion.pal diff --git a/graphics/battle_anims/masks/stat_tilemap_1.bin b/graphics/battle_anims/stat_change/increase.bin similarity index 100% rename from graphics/battle_anims/masks/stat_tilemap_1.bin rename to graphics/battle_anims/stat_change/increase.bin diff --git a/graphics/battle_anims/masks/stat5.pal b/graphics/battle_anims/stat_change/multiple.pal similarity index 100% rename from graphics/battle_anims/masks/stat5.pal rename to graphics/battle_anims/stat_change/multiple.pal diff --git a/graphics/battle_anims/masks/stat7.pal b/graphics/battle_anims/stat_change/sp_attack.pal similarity index 100% rename from graphics/battle_anims/masks/stat7.pal rename to graphics/battle_anims/stat_change/sp_attack.pal diff --git a/graphics/battle_anims/masks/stat8.pal b/graphics/battle_anims/stat_change/sp_defense.pal similarity index 100% rename from graphics/battle_anims/masks/stat8.pal rename to graphics/battle_anims/stat_change/sp_defense.pal diff --git a/graphics/battle_anims/masks/stat4.pal b/graphics/battle_anims/stat_change/speed.pal similarity index 100% rename from graphics/battle_anims/masks/stat4.pal rename to graphics/battle_anims/stat_change/speed.pal diff --git a/graphics/battle_anims/masks/stat.png b/graphics/battle_anims/stat_change/tiles.png similarity index 100% rename from graphics/battle_anims/masks/stat.png rename to graphics/battle_anims/stat_change/tiles.png diff --git a/include/graphics.h b/include/graphics.h index 04ad64606d..b3d87e77e7 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4769,17 +4769,18 @@ extern const u32 gMetalShineTilemap[]; extern const u32 gBattleAnimMaskImage_Curse[]; extern const u32 gBattleAnimMaskTilemap_Curse[]; -extern const u32 gBattleStatMask_Gfx[]; -extern const u32 gBattleStatMask1_Tilemap[]; -extern const u32 gBattleStatMask2_Tilemap[]; -extern const u32 gBattleStatMask1_Pal[]; -extern const u32 gBattleStatMask2_Pal[]; -extern const u32 gBattleStatMask3_Pal[]; -extern const u32 gBattleStatMask4_Pal[]; -extern const u32 gBattleStatMask5_Pal[]; -extern const u32 gBattleStatMask6_Pal[]; -extern const u32 gBattleStatMask7_Pal[]; -extern const u32 gBattleStatMask8_Pal[]; + +extern const u32 gStatAnim_Gfx[]; +extern const u32 gStatAnim_Increase_Tilemap[]; +extern const u32 gStatAnim_Decrease_Tilemap[]; +extern const u32 gStatAnim_Defense_Pal[]; +extern const u32 gStatAnim_Attack_Pal[]; +extern const u32 gStatAnim_Accuracy_Pal[]; +extern const u32 gStatAnim_Speed_Pal[]; +extern const u32 gStatAnim_Multiple_Pal[]; +extern const u32 gStatAnim_Evasion_Pal[]; +extern const u32 gStatAnim_SpAttack_Pal[]; +extern const u32 gStatAnim_SpDefense_Pal[]; extern const u32 gContestInterfaceGfx[]; extern const u32 gContestAudienceGfx[]; diff --git a/src/battle_anim_status_effects.c b/src/battle_anim_status_effects.c index e09a368509..b987ad33a3 100644 --- a/src/battle_anim_status_effects.c +++ b/src/battle_anim_status_effects.c @@ -532,8 +532,8 @@ void AnimTask_StatsChange(u8 taskId) gBattleAnimArgs[0] = goesDown; gBattleAnimArgs[1] = animStatId; - gBattleAnimArgs[2] = 0; - gBattleAnimArgs[3] = 0; + gBattleAnimArgs[2] = FALSE; // Whether it's the target, rather than attacker + gBattleAnimArgs[3] = FALSE; // Whether it hits multiple battlers gBattleAnimArgs[4] = sharply; gTasks[taskId].func = InitStatsChangeAnimation; gTasks[taskId].func(taskId); diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c index 9375fda430..ccbc7f902b 100644 --- a/src/battle_anim_utility_funcs.c +++ b/src/battle_anim_utility_funcs.c @@ -16,7 +16,7 @@ struct AnimStatsChangeData { u8 battler1; u8 battler2; - u8 higherPriority; + bool8 hidBattler2; s16 data[8]; u16 species; }; @@ -388,6 +388,27 @@ static void AnimTask_DrawFallingWhiteLinesOnAttacker_Step(u8 taskId) } } +// Defines for data array in sAnimStatsChangeData +#define aDecrease data[0] +#define aAnimStatId data[1] +#define aIsTarget data[2] +#define aMultipleBattlers data[3] // Always false. Changes for multiple battlers are instead run sequentially. +#define aSharply data[4] + +// Task data defines for InitStatsChangeAnimation +#define tAnimSpriteId1 data[0] +#define tVelocity data[1] +#define tMultipleBattlers data[2] +#define tAnimSpriteId2 data[3] +#define tTargetBlend data[4] +#define tWaitTime data[5] +#define tHidBattler2 data[6] +#define tBattler2SpriteId data[7] +#define tWaitTimer data[10] +#define tFadeTimer data[11] +#define tBlend data[12] +#define tState data[15] + void InitStatsChangeAnimation(u8 taskId) { u8 i; @@ -401,21 +422,19 @@ void InitStatsChangeAnimation(u8 taskId) static void StatsChangeAnimation_Step1(u8 taskId) { - if (sAnimStatsChangeData->data[2] == 0) + if (!sAnimStatsChangeData->aIsTarget) sAnimStatsChangeData->battler1 = gBattleAnimAttacker; else sAnimStatsChangeData->battler1 = gBattleAnimTarget; sAnimStatsChangeData->battler2 = BATTLE_PARTNER(sAnimStatsChangeData->battler1); - if (IsContest() || (sAnimStatsChangeData->data[3] && !IsBattlerSpriteVisible(sAnimStatsChangeData->battler2))) - sAnimStatsChangeData->data[3] = 0; + if (IsContest() || (sAnimStatsChangeData->aMultipleBattlers && !IsBattlerSpriteVisible(sAnimStatsChangeData->battler2))) + sAnimStatsChangeData->aMultipleBattlers = FALSE; gBattle_WIN0H = 0; gBattle_WIN0V = 0; - SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR - | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); - SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR - | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_ALL | WININ_WIN1_ALL); + SetGpuReg(REG_OFFSET_WINOUT, (WINOUT_WIN01_ALL & ~WINOUT_WIN01_BG1) | WINOUT_WINOBJ_ALL); SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16)); @@ -424,16 +443,17 @@ static void StatsChangeAnimation_Step1(u8 taskId) if (!IsContest()) SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1); - if (IsDoubleBattle() && sAnimStatsChangeData->data[3] == 0) + if (IsDoubleBattle() && !sAnimStatsChangeData->aMultipleBattlers) { if (GetBattlerPosition(sAnimStatsChangeData->battler1) == B_POSITION_OPPONENT_RIGHT || GetBattlerPosition(sAnimStatsChangeData->battler1) == B_POSITION_PLAYER_LEFT) { if (IsBattlerSpriteVisible(sAnimStatsChangeData->battler2) == TRUE) { - gSprites[gBattlerSpriteIds[sAnimStatsChangeData->battler2]].oam.priority -= 1; + // Push the battler not being animated back so it doesn't receive the animation. + gSprites[gBattlerSpriteIds[sAnimStatsChangeData->battler2]].oam.priority--; SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); - sAnimStatsChangeData->higherPriority = 1; + sAnimStatsChangeData->hidBattler2 = TRUE; } } } @@ -462,80 +482,80 @@ static void StatsChangeAnimation_Step2(u8 taskId) spriteId2 = 0; battlerSpriteId = gBattlerSpriteIds[sAnimStatsChangeData->battler1]; spriteId = CreateInvisibleSpriteCopy(sAnimStatsChangeData->battler1, battlerSpriteId, sAnimStatsChangeData->species); - if (sAnimStatsChangeData->data[3]) + if (sAnimStatsChangeData->aMultipleBattlers) { battlerSpriteId = gBattlerSpriteIds[sAnimStatsChangeData->battler2]; spriteId2 = CreateInvisibleSpriteCopy(sAnimStatsChangeData->battler2, battlerSpriteId, sAnimStatsChangeData->species); } GetBattleAnimBg1Data(&animBgData); - if (sAnimStatsChangeData->data[0] == 0) - AnimLoadCompressedBgTilemapHandleContest(&animBgData, gBattleStatMask1_Tilemap, FALSE); + if (!sAnimStatsChangeData->aDecrease) + AnimLoadCompressedBgTilemapHandleContest(&animBgData, gStatAnim_Increase_Tilemap, FALSE); else - AnimLoadCompressedBgTilemapHandleContest(&animBgData, gBattleStatMask2_Tilemap, FALSE); + AnimLoadCompressedBgTilemapHandleContest(&animBgData, gStatAnim_Decrease_Tilemap, FALSE); - AnimLoadCompressedBgGfx(animBgData.bgId, gBattleStatMask_Gfx, animBgData.tilesOffset); - switch (sAnimStatsChangeData->data[1]) + AnimLoadCompressedBgGfx(animBgData.bgId, gStatAnim_Gfx, animBgData.tilesOffset); + switch (sAnimStatsChangeData->aAnimStatId) { case STAT_ANIM_PAL_ATK: - LoadCompressedPalette(gBattleStatMask2_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); + LoadCompressedPalette(gStatAnim_Attack_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); break; case STAT_ANIM_PAL_DEF: - LoadCompressedPalette(gBattleStatMask1_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); + LoadCompressedPalette(gStatAnim_Defense_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); break; case STAT_ANIM_PAL_ACC: - LoadCompressedPalette(gBattleStatMask3_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); + LoadCompressedPalette(gStatAnim_Accuracy_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); break; case STAT_ANIM_PAL_SPEED: - LoadCompressedPalette(gBattleStatMask4_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); + LoadCompressedPalette(gStatAnim_Speed_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); break; case STAT_ANIM_PAL_EVASION: - LoadCompressedPalette(gBattleStatMask6_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); + LoadCompressedPalette(gStatAnim_Evasion_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); break; case STAT_ANIM_PAL_SPATK: - LoadCompressedPalette(gBattleStatMask7_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); + LoadCompressedPalette(gStatAnim_SpAttack_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); break; case STAT_ANIM_PAL_SPDEF: - LoadCompressedPalette(gBattleStatMask8_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); + LoadCompressedPalette(gStatAnim_SpDefense_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); break; default: // case STAT_ANIM_PAL_MULTIPLE: - LoadCompressedPalette(gBattleStatMask5_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); + LoadCompressedPalette(gStatAnim_Multiple_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); break; } gBattle_BG1_X = 0; gBattle_BG1_Y = 0; - if (sAnimStatsChangeData->data[0] == 1) + if (sAnimStatsChangeData->aDecrease == TRUE) { gBattle_BG1_X = 64; - gTasks[taskId].data[1] = -3; + gTasks[taskId].tVelocity = -3; } else { - gTasks[taskId].data[1] = 3; + gTasks[taskId].tVelocity = 3; } - if (sAnimStatsChangeData->data[4] == 0) + if (!sAnimStatsChangeData->aSharply) { - gTasks[taskId].data[4] = 10; - gTasks[taskId].data[5] = 20; + gTasks[taskId].tTargetBlend = 10; + gTasks[taskId].tWaitTime = 20; } else { - gTasks[taskId].data[4] = 13; - gTasks[taskId].data[5] = 30; + gTasks[taskId].tTargetBlend = 13; + gTasks[taskId].tWaitTime = 30; } - gTasks[taskId].data[0] = spriteId; - gTasks[taskId].data[2] = sAnimStatsChangeData->data[3]; - gTasks[taskId].data[3] = spriteId2; - gTasks[taskId].data[6] = sAnimStatsChangeData->higherPriority; - gTasks[taskId].data[7] = gBattlerSpriteIds[sAnimStatsChangeData->battler2]; + gTasks[taskId].tAnimSpriteId1 = spriteId; + gTasks[taskId].tMultipleBattlers = sAnimStatsChangeData->aMultipleBattlers; + gTasks[taskId].tAnimSpriteId2 = spriteId2; + gTasks[taskId].tHidBattler2 = sAnimStatsChangeData->hidBattler2; + gTasks[taskId].tBattler2SpriteId = gBattlerSpriteIds[sAnimStatsChangeData->battler2]; gTasks[taskId].func = StatsChangeAnimation_Step3; - if (sAnimStatsChangeData->data[0] == 0) + if (!sAnimStatsChangeData->aDecrease) PlaySE12WithPanning(SE_M_STAT_INCREASE, BattleAnimAdjustPanning2(SOUND_PAN_ATTACKER)); else PlaySE12WithPanning(SE_M_STAT_DECREASE, BattleAnimAdjustPanning2(SOUND_PAN_ATTACKER)); @@ -543,44 +563,46 @@ static void StatsChangeAnimation_Step2(u8 taskId) static void StatsChangeAnimation_Step3(u8 taskId) { - gBattle_BG1_Y += gTasks[taskId].data[1]; + gBattle_BG1_Y += gTasks[taskId].tVelocity; - switch (gTasks[taskId].data[15]) + switch (gTasks[taskId].tState) { case 0: - if (gTasks[taskId].data[11]++ > 0) + // Fade in + if (gTasks[taskId].tFadeTimer++ > 0) { - gTasks[taskId].data[11] = 0; - gTasks[taskId].data[12]++; - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[12], 16 - gTasks[taskId].data[12])); - if (gTasks[taskId].data[12] == gTasks[taskId].data[4]) - gTasks[taskId].data[15]++; + gTasks[taskId].tFadeTimer = 0; + gTasks[taskId].tBlend++; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].tBlend, 16 - gTasks[taskId].tBlend)); + if (gTasks[taskId].tBlend == gTasks[taskId].tTargetBlend) + gTasks[taskId].tState++; } break; case 1: - if (++gTasks[taskId].data[10] == gTasks[taskId].data[5]) - gTasks[taskId].data[15]++; + // Wait + if (++gTasks[taskId].tWaitTimer == gTasks[taskId].tWaitTime) + gTasks[taskId].tState++; break; case 2: - if (gTasks[taskId].data[11]++ > 0) + // Fade out + if (gTasks[taskId].tFadeTimer++ > 0) { - gTasks[taskId].data[11] = 0; - gTasks[taskId].data[12]--; - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[12], 16 - gTasks[taskId].data[12])); - if (gTasks[taskId].data[12] == 0) + gTasks[taskId].tFadeTimer = 0; + gTasks[taskId].tBlend--; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].tBlend, 16 - gTasks[taskId].tBlend)); + if (gTasks[taskId].tBlend == 0) { ResetBattleAnimBg(FALSE); - gTasks[taskId].data[15]++; + gTasks[taskId].tState++; } } break; case 3: + // Reset gBattle_WIN0H = 0; gBattle_WIN0V = 0; - SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR - | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); - SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR - | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_ALL | WININ_WIN1_ALL); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_ALL | WINOUT_WINOBJ_ALL); if (!IsContest()) SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0); @@ -588,12 +610,14 @@ static void StatsChangeAnimation_Step3(u8 taskId) SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) ^ DISPCNT_OBJWIN_ON); SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BLDALPHA, 0); - DestroySprite(&gSprites[gTasks[taskId].data[0]]); - if (gTasks[taskId].data[2]) - DestroySprite(&gSprites[gTasks[taskId].data[3]]); - if (gTasks[taskId].data[6] == 1) - gSprites[gTasks[taskId].data[7]].oam.priority++; + DestroySprite(&gSprites[gTasks[taskId].tAnimSpriteId1]); + if (gTasks[taskId].tMultipleBattlers) + DestroySprite(&gSprites[gTasks[taskId].tAnimSpriteId2]); + + // Restore battler 2's priority + if (gTasks[taskId].tHidBattler2 == TRUE) + gSprites[gTasks[taskId].tBattler2SpriteId].oam.priority++; FREE_AND_SET_NULL(sAnimStatsChangeData); DestroyAnimVisualTask(taskId); @@ -601,6 +625,24 @@ static void StatsChangeAnimation_Step3(u8 taskId) } } +#undef aDecrease +#undef aAnimStatId +#undef aIsTarget +#undef aMultipleBattlers +#undef aSharply +#undef tAnimSpriteId1 +#undef tVelocity +#undef tMultipleBattlers +#undef tAnimSpriteId2 +#undef tTargetBlend +#undef tWaitTime +#undef tHidBattler2 +#undef tBattler2SpriteId +#undef tWaitTimer +#undef tFadeTimer +#undef tBlend +#undef tState + void AnimTask_Flash(u8 taskId) { u32 selectedPalettes = GetBattleMonSpritePalettesMask(1, 1, 1, 1); diff --git a/src/graphics.c b/src/graphics.c index 3cfd47ea76..976e52f48e 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -865,18 +865,17 @@ const u32 gBattleAnimSpritePal_PinkCloud[] = INCBIN_U32("graphics/battle_anims/s const u32 gBattleAnimSpriteGfx_SweatDrop[] = INCBIN_U32("graphics/battle_anims/sprites/sweat_drop.4bpp.lz"); const u32 gBattleAnimSpritePal_SweatDrop[] = INCBIN_U32("graphics/battle_anims/sprites/sweat_drop.gbapal.lz"); -const u32 gBattleStatMask_Gfx[] = INCBIN_U32("graphics/battle_anims/masks/stat.4bpp.lz"); -const u32 gBattleStatMask1_Tilemap[] = INCBIN_U32("graphics/battle_anims/masks/stat_tilemap_1.bin.lz"); -const u32 gBattleStatMask2_Tilemap[] = INCBIN_U32("graphics/battle_anims/masks/stat_tilemap_2.bin.lz"); - -const u32 gBattleStatMask1_Pal[] = INCBIN_U32("graphics/battle_anims/masks/stat1.gbapal.lz"); -const u32 gBattleStatMask2_Pal[] = INCBIN_U32("graphics/battle_anims/masks/stat2.gbapal.lz"); -const u32 gBattleStatMask3_Pal[] = INCBIN_U32("graphics/battle_anims/masks/stat3.gbapal.lz"); -const u32 gBattleStatMask4_Pal[] = INCBIN_U32("graphics/battle_anims/masks/stat4.gbapal.lz"); -const u32 gBattleStatMask5_Pal[] = INCBIN_U32("graphics/battle_anims/masks/stat5.gbapal.lz"); -const u32 gBattleStatMask6_Pal[] = INCBIN_U32("graphics/battle_anims/masks/stat6.gbapal.lz"); -const u32 gBattleStatMask7_Pal[] = INCBIN_U32("graphics/battle_anims/masks/stat7.gbapal.lz"); -const u32 gBattleStatMask8_Pal[] = INCBIN_U32("graphics/battle_anims/masks/stat8.gbapal.lz"); +const u32 gStatAnim_Gfx[] = INCBIN_U32("graphics/battle_anims/stat_change/tiles.4bpp.lz"); +const u32 gStatAnim_Increase_Tilemap[] = INCBIN_U32("graphics/battle_anims/stat_change/increase.bin.lz"); +const u32 gStatAnim_Decrease_Tilemap[] = INCBIN_U32("graphics/battle_anims/stat_change/decrease.bin.lz"); +const u32 gStatAnim_Defense_Pal[] = INCBIN_U32("graphics/battle_anims/stat_change/defense.gbapal.lz"); +const u32 gStatAnim_Attack_Pal[] = INCBIN_U32("graphics/battle_anims/stat_change/attack.gbapal.lz"); +const u32 gStatAnim_Accuracy_Pal[] = INCBIN_U32("graphics/battle_anims/stat_change/accuracy.gbapal.lz"); +const u32 gStatAnim_Speed_Pal[] = INCBIN_U32("graphics/battle_anims/stat_change/speed.gbapal.lz"); +const u32 gStatAnim_Multiple_Pal[] = INCBIN_U32("graphics/battle_anims/stat_change/multiple.gbapal.lz"); +const u32 gStatAnim_Evasion_Pal[] = INCBIN_U32("graphics/battle_anims/stat_change/evasion.gbapal.lz"); +const u32 gStatAnim_SpAttack_Pal[] = INCBIN_U32("graphics/battle_anims/stat_change/sp_attack.gbapal.lz"); +const u32 gStatAnim_SpDefense_Pal[] = INCBIN_U32("graphics/battle_anims/stat_change/sp_defense.gbapal.lz"); const u32 gCureBubblesGfx[] = INCBIN_U32("graphics/battle_anims/masks/cure_bubbles.4bpp.lz"); const u32 gCureBubblesPal[] = INCBIN_U32("graphics/battle_anims/masks/cure_bubbles.gbapal.lz"); From 912a80e27a40c883c5718632453c9cf5ea1ccbd3 Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Wed, 9 Aug 2023 15:51:01 +0100 Subject: [PATCH 28/43] Reference TMs and HMs by move instead of number (#1732) --- constants/constants.inc | 1 + constants/tms_hms.inc | 17 + data/battle_ai_scripts.s | 1 + .../AbandonedShip_HiddenFloorRooms/map.json | 4 +- data/maps/AbandonedShip_Room_B1F/map.json | 4 +- data/maps/DewfordTown_Gym/scripts.inc | 10 +- data/maps/DewfordTown_Hall/scripts.inc | 6 +- .../FallarborTown_CozmosHouse/scripts.inc | 8 +- data/maps/FieryPath/map.json | 4 +- data/maps/FortreeCity_Gym/scripts.inc | 10 +- data/maps/FortreeCity_House2/scripts.inc | 6 +- data/maps/GraniteCave_1F/scripts.inc | 6 +- data/maps/GraniteCave_StevensRoom/scripts.inc | 2 +- data/maps/LavaridgeTown_Gym_1F/scripts.inc | 10 +- .../scripts.inc | 16 +- data/maps/LilycoveCity_House2/scripts.inc | 6 +- data/maps/MauvilleCity/scripts.inc | 8 +- data/maps/MauvilleCity_GameCorner/scripts.inc | 112 +- data/maps/MauvilleCity_Gym/scripts.inc | 10 +- data/maps/MauvilleCity_House1/scripts.inc | 6 +- data/maps/MeteorFalls_1F_1R/map.json | 4 +- data/maps/MeteorFalls_B1F_2R/map.json | 4 +- data/maps/MossdeepCity/scripts.inc | 4 +- data/maps/MossdeepCity_Gym/scripts.inc | 10 +- .../MossdeepCity_StevensHouse/scripts.inc | 8 +- data/maps/MtPyre_6F/map.json | 4 +- data/maps/MtPyre_Exterior/map.json | 4 +- data/maps/PacifidlogTown_House2/scripts.inc | 4 +- data/maps/PetalburgCity_Gym/scripts.inc | 6 +- .../PetalburgCity_WallysHouse/scripts.inc | 16 +- data/maps/Route104/scripts.inc | 6 +- data/maps/Route110_TrickHouseEnd/scripts.inc | 2 +- .../Route110_TrickHouseEntrance/scripts.inc | 2 +- data/maps/Route111/map.json | 4 +- data/maps/Route113/map.json | 4 +- data/maps/Route114/scripts.inc | 6 +- .../Route114_FossilManiacsHouse/scripts.inc | 6 +- data/maps/Route115/map.json | 4 +- data/maps/Route119/scripts.inc | 4 +- data/maps/Route123/scripts.inc | 6 +- .../RustboroCity_CuttersHouse/scripts.inc | 6 +- data/maps/RustboroCity_Gym/scripts.inc | 6 +- data/maps/RusturfTunnel/scripts.inc | 4 +- data/maps/SSTidalCorridor/scripts.inc | 4 +- data/maps/SSTidalRooms/scripts.inc | 6 +- data/maps/SafariZone_Northwest/map.json | 4 +- data/maps/ScorchedSlab/map.json | 4 +- data/maps/SeafloorCavern_Room9/map.json | 4 +- data/maps/ShoalCave_LowTideIceRoom/map.json | 4 +- data/maps/SlateportCity/scripts.inc | 4 +- .../SlateportCity_BattleTentLobby/scripts.inc | 6 +- .../scripts.inc | 4 +- data/maps/SootopolisCity/scripts.inc | 6 +- data/maps/SootopolisCity_Gym_1F/scripts.inc | 10 +- data/maps/SootopolisCity_House1/scripts.inc | 6 +- .../scripts.inc | 6 +- data/maps/VictoryRoad_B1F/map.json | 4 +- data/scripts/item_ball_scripts.inc | 56 +- data/scripts/secret_power_tm.inc | 2 +- include/constants/flags.h | 90 +- include/constants/items.h | 59 - include/constants/tms_hms.h | 70 + include/item.h | 23 + src/battle_script_commands.c | 6 +- src/data/items.h | 232 +- src/data/lilycove_lady.h | 2 +- src/data/party_menu.h | 69 +- src/data/pokemon/tmhm_learnsets.h | 19565 ++++++++-------- src/daycare.c | 2 +- src/item_use.c | 2 +- src/party_menu.c | 2 +- src/pokemon.c | 41 +- src/pokenav_match_call_data.c | 6 +- src/trainer_hill.c | 26 +- 74 files changed, 10759 insertions(+), 9937 deletions(-) create mode 100644 constants/tms_hms.inc create mode 100644 include/constants/tms_hms.h diff --git a/constants/constants.inc b/constants/constants.inc index e7561f4293..1f8f1cda2e 100644 --- a/constants/constants.inc +++ b/constants/constants.inc @@ -1,2 +1,3 @@ .include "constants/gba_constants.inc" .include "constants/global.inc" + .include "constants/tms_hms.inc" diff --git a/constants/tms_hms.inc b/constants/tms_hms.inc new file mode 100644 index 0000000000..3450aa73ba --- /dev/null +++ b/constants/tms_hms.inc @@ -0,0 +1,17 @@ +#include "constants/tms_hms.h" + +/* Expands to: +* enum_start ITEM_TM01 +* enum ITEM_TM_FOCUS_PUNCH +* ... +* enum_start ITEM_HM01 +* enum ITEM_HM_CUT +* ... */ +#define EQUIV_TM(id) enum ITEM_TM_ ## id; +#define EQUIV_HM(id) enum ITEM_HM_ ## id; + enum_start ITEM_TM01 +FOREACH_TM(EQUIV_TM) + enum_start ITEM_HM01 +FOREACH_HM(EQUIV_HM) +#undef EQUIV_TM +#undef EQUIV_HM diff --git a/data/battle_ai_scripts.s b/data/battle_ai_scripts.s index bdc80cd5b4..c296702a64 100644 --- a/data/battle_ai_scripts.s +++ b/data/battle_ai_scripts.s @@ -6,6 +6,7 @@ #include "constants/battle_move_effects.h" #include "constants/hold_effects.h" #include "constants/pokemon.h" + .include "asm/macros.inc" .include "asm/macros/battle_ai_script.inc" .include "constants/constants.inc" diff --git a/data/maps/AbandonedShip_HiddenFloorRooms/map.json b/data/maps/AbandonedShip_HiddenFloorRooms/map.json index e808250f47..08869317e3 100644 --- a/data/maps/AbandonedShip_HiddenFloorRooms/map.json +++ b/data/maps/AbandonedShip_HiddenFloorRooms/map.json @@ -50,8 +50,8 @@ "movement_range_y": 1, "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", - "script": "AbandonedShip_HiddenFloorRooms_EventScript_ItemTM18", - "flag": "FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_1_TM18" + "script": "AbandonedShip_HiddenFloorRooms_EventScript_ItemTMRainDance", + "flag": "FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_1_TM_RAIN_DANCE" }, { "graphics_id": "OBJ_EVENT_GFX_ITEM_BALL", diff --git a/data/maps/AbandonedShip_Room_B1F/map.json b/data/maps/AbandonedShip_Room_B1F/map.json index 2a296325c9..ac9820a8ab 100644 --- a/data/maps/AbandonedShip_Room_B1F/map.json +++ b/data/maps/AbandonedShip_Room_B1F/map.json @@ -24,8 +24,8 @@ "movement_range_y": 1, "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", - "script": "AbandonedShip_Room_B1F_EventScript_ItemTM13", - "flag": "FLAG_ITEM_ABANDONED_SHIP_ROOMS_B1F_TM13" + "script": "AbandonedShip_Room_B1F_EventScript_ItemTMIceBeam", + "flag": "FLAG_ITEM_ABANDONED_SHIP_ROOMS_B1F_TM_ICE_BEAM" } ], "warp_events": [ diff --git a/data/maps/DewfordTown_Gym/scripts.inc b/data/maps/DewfordTown_Gym/scripts.inc index 81474af726..c425819304 100644 --- a/data/maps/DewfordTown_Gym/scripts.inc +++ b/data/maps/DewfordTown_Gym/scripts.inc @@ -136,7 +136,7 @@ DewfordTown_Gym_EventScript_Brawly:: trainerbattle_single TRAINER_BRAWLY_1, DewfordTown_Gym_Text_BrawlyIntro, DewfordTown_Gym_Text_BrawlyDefeat, DewfordTown_Gym_EventScript_BrawlyDefeated, NO_MUSIC specialvar VAR_RESULT, ShouldTryRematchBattle goto_if_eq VAR_RESULT, TRUE, DewfordTown_Gym_EventScript_BrawlyRematch - goto_if_unset FLAG_RECEIVED_TM08, DewfordTown_Gym_EventScript_GiveBulkUp2 + goto_if_unset FLAG_RECEIVED_TM_BULK_UP, DewfordTown_Gym_EventScript_GiveBulkUp2 msgbox DewfordTown_Gym_Text_BrawlyPostBattle, MSGBOX_DEFAULT release end @@ -168,17 +168,17 @@ DewfordTown_Gym_EventScript_BrawlyDefeated:: end DewfordTown_Gym_EventScript_GiveBulkUp:: - giveitem ITEM_TM08 + giveitem ITEM_TM_BULK_UP goto_if_eq VAR_RESULT, 0, Common_EventScript_BagIsFull msgbox DewfordTown_Gym_Text_ExplainBulkUp, MSGBOX_DEFAULT - setflag FLAG_RECEIVED_TM08 + setflag FLAG_RECEIVED_TM_BULK_UP return DewfordTown_Gym_EventScript_GiveBulkUp2: - giveitem ITEM_TM08 + giveitem ITEM_TM_BULK_UP goto_if_eq VAR_RESULT, 0, Common_EventScript_ShowBagIsFull msgbox DewfordTown_Gym_Text_ExplainBulkUp, MSGBOX_DEFAULT - setflag FLAG_RECEIVED_TM08 + setflag FLAG_RECEIVED_TM_BULK_UP release end diff --git a/data/maps/DewfordTown_Hall/scripts.inc b/data/maps/DewfordTown_Hall/scripts.inc index 6249a7fac5..1472bebb24 100644 --- a/data/maps/DewfordTown_Hall/scripts.inc +++ b/data/maps/DewfordTown_Hall/scripts.inc @@ -246,11 +246,11 @@ DewfordTown_Hall_EventScript_SludgeBombMan:: lock faceplayer call Common_EventScript_BufferTrendyPhrase - goto_if_set FLAG_RECEIVED_TM36, DewfordTown_Hall_EventScript_ReceivedSludgeBomb + goto_if_set FLAG_RECEIVED_TM_SLUDGE_BOMB, DewfordTown_Hall_EventScript_ReceivedSludgeBomb msgbox DewfordTown_Hall_Text_GiveYouSludgeBomb, MSGBOX_DEFAULT - giveitem ITEM_TM36 + giveitem ITEM_TM_SLUDGE_BOMB goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull - setflag FLAG_RECEIVED_TM36 + setflag FLAG_RECEIVED_TM_SLUDGE_BOMB release end diff --git a/data/maps/FallarborTown_CozmosHouse/scripts.inc b/data/maps/FallarborTown_CozmosHouse/scripts.inc index 61f297e69d..27b03436da 100644 --- a/data/maps/FallarborTown_CozmosHouse/scripts.inc +++ b/data/maps/FallarborTown_CozmosHouse/scripts.inc @@ -4,7 +4,7 @@ FallarborTown_CozmosHouse_MapScripts:: FallarborTown_CozmosHouse_EventScript_ProfCozmo:: lock faceplayer - goto_if_set FLAG_RECEIVED_TM27, FallarborTown_CozmosHouse_EventScript_GaveMeteorite + goto_if_set FLAG_RECEIVED_TM_RETURN, FallarborTown_CozmosHouse_EventScript_GaveMeteorite checkitem ITEM_METEORITE goto_if_eq VAR_RESULT, TRUE, FallarborTown_CozmosHouse_EventScript_PlayerHasMeteorite msgbox FallarborTown_CozmosHouse_Text_MeteoriteWillNeverBeMineNow, MSGBOX_DEFAULT @@ -16,11 +16,11 @@ FallarborTown_CozmosHouse_EventScript_PlayerHasMeteorite:: call_if_set FLAG_TEMP_2, FallarborTown_CozmosHouse_EventScript_AskForMeteorite goto_if_eq VAR_RESULT, NO, FallarborTown_CozmosHouse_EventScript_DeclineGiveMeteorite msgbox FallarborTown_CozmosHouse_Text_PleaseUseThisTM, MSGBOX_DEFAULT - giveitem ITEM_TM27 + giveitem ITEM_TM_RETURN goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setvar VAR_0x8004, ITEM_METEORITE call Common_EventScript_PlayerHandedOverTheItem - setflag FLAG_RECEIVED_TM27 + setflag FLAG_RECEIVED_TM_RETURN msgbox FallarborTown_CozmosHouse_Text_ReallyGoingToHelpMyResearch, MSGBOX_DEFAULT release end @@ -48,7 +48,7 @@ FallarborTown_CozmosHouse_EventScript_GaveMeteorite:: FallarborTown_CozmosHouse_EventScript_CozmosWife:: lock faceplayer - goto_if_set FLAG_RECEIVED_TM27, FallarborTown_CozmosHouse_EventScript_CozmoIsHappy + goto_if_set FLAG_RECEIVED_TM_RETURN, FallarborTown_CozmosHouse_EventScript_CozmoIsHappy goto_if_set FLAG_DEFEATED_EVIL_TEAM_MT_CHIMNEY, FallarborTown_CozmosHouse_EventScript_CozmoIsSad msgbox FallarborTown_CozmosHouse_Text_CozmoWentToMeteorFalls, MSGBOX_DEFAULT release diff --git a/data/maps/FieryPath/map.json b/data/maps/FieryPath/map.json index 38b9aff75e..69f5050ad5 100644 --- a/data/maps/FieryPath/map.json +++ b/data/maps/FieryPath/map.json @@ -24,8 +24,8 @@ "movement_range_y": 1, "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", - "script": "FieryPath_EventScript_ItemTM06", - "flag": "FLAG_ITEM_FIERY_PATH_TM06" + "script": "FieryPath_EventScript_ItemTMToxic", + "flag": "FLAG_ITEM_FIERY_PATH_TM_TOXIC" }, { "graphics_id": "OBJ_EVENT_GFX_PUSHABLE_BOULDER", diff --git a/data/maps/FortreeCity_Gym/scripts.inc b/data/maps/FortreeCity_Gym/scripts.inc index 1c729bc44e..1445a36089 100644 --- a/data/maps/FortreeCity_Gym/scripts.inc +++ b/data/maps/FortreeCity_Gym/scripts.inc @@ -19,7 +19,7 @@ FortreeCity_Gym_EventScript_Winona:: trainerbattle_single TRAINER_WINONA_1, FortreeCity_Gym_Text_WinonaIntro, FortreeCity_Gym_Text_WinonaDefeat, FortreeCity_Gym_EventScript_WinonaDefeated, NO_MUSIC specialvar VAR_RESULT, ShouldTryRematchBattle goto_if_eq VAR_RESULT, TRUE, FortreeCity_Gym_EventScript_WinonaRematch - goto_if_unset FLAG_RECEIVED_TM40, FortreeCity_Gym_EventScript_GiveAerialAce2 + goto_if_unset FLAG_RECEIVED_TM_AERIAL_ACE, FortreeCity_Gym_EventScript_GiveAerialAce2 msgbox FortreeCity_Gym_Text_WinonaPostBattle, MSGBOX_DEFAULT release end @@ -48,18 +48,18 @@ FortreeCity_Gym_EventScript_WinonaDefeated:: end FortreeCity_Gym_EventScript_GiveAerialAce2:: - giveitem ITEM_TM40 + giveitem ITEM_TM_AERIAL_ACE goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull msgbox FortreeCity_Gym_Text_ExplainAerialAce, MSGBOX_DEFAULT - setflag FLAG_RECEIVED_TM40 + setflag FLAG_RECEIVED_TM_AERIAL_ACE release end FortreeCity_Gym_EventScript_GiveAerialAce:: - giveitem ITEM_TM40 + giveitem ITEM_TM_AERIAL_ACE goto_if_eq VAR_RESULT, FALSE, Common_EventScript_BagIsFull msgbox FortreeCity_Gym_Text_ExplainAerialAce, MSGBOX_DEFAULT - setflag FLAG_RECEIVED_TM40 + setflag FLAG_RECEIVED_TM_AERIAL_ACE return FortreeCity_Gym_EventScript_WinonaRematch:: diff --git a/data/maps/FortreeCity_House2/scripts.inc b/data/maps/FortreeCity_House2/scripts.inc index cdd0fc99f7..a81a7a8e0a 100644 --- a/data/maps/FortreeCity_House2/scripts.inc +++ b/data/maps/FortreeCity_House2/scripts.inc @@ -4,7 +4,7 @@ FortreeCity_House2_MapScripts:: FortreeCity_House2_EventScript_HiddenPowerGiver:: lock faceplayer - goto_if_set FLAG_RECEIVED_TM10, FortreeCity_House2_EventScript_ExplainHiddenPower + goto_if_set FLAG_RECEIVED_TM_HIDDEN_POWER, FortreeCity_House2_EventScript_ExplainHiddenPower call_if_unset FLAG_MET_HIDDEN_POWER_GIVER, FortreeCity_House2_EventScript_Greeting msgbox FortreeCity_House2_Text_CoinInWhichHand, MSGBOX_DEFAULT multichoice 21, 8, MULTI_RIGHTLEFT, TRUE @@ -19,9 +19,9 @@ FortreeCity_House2_EventScript_HiddenPowerGiver:: switch VAR_RESULT case 0, FortreeCity_House2_EventScript_WrongGuess msgbox FortreeCity_House2_Text_YourHiddenPowerHasAwoken, MSGBOX_DEFAULT - giveitem ITEM_TM10 + giveitem ITEM_TM_HIDDEN_POWER goto_if_eq VAR_RESULT, 0, Common_EventScript_ShowBagIsFull - setflag FLAG_RECEIVED_TM10 + setflag FLAG_RECEIVED_TM_HIDDEN_POWER msgbox FortreeCity_House2_Text_ExplainHiddenPower, MSGBOX_DEFAULT release end diff --git a/data/maps/GraniteCave_1F/scripts.inc b/data/maps/GraniteCave_1F/scripts.inc index 1bf81b997b..ab0ccac21c 100644 --- a/data/maps/GraniteCave_1F/scripts.inc +++ b/data/maps/GraniteCave_1F/scripts.inc @@ -4,10 +4,10 @@ GraniteCave_1F_MapScripts:: GraniteCave_1F_EventScript_Hiker:: lock faceplayer - goto_if_set FLAG_RECEIVED_HM05, GraniteCave_1F_EventScript_ReceivedFlash + goto_if_set FLAG_RECEIVED_HM_FLASH, GraniteCave_1F_EventScript_ReceivedFlash msgbox GraniteCave_1F_Text_GetsDarkAheadHereYouGo, MSGBOX_DEFAULT - giveitem ITEM_HM05 - setflag FLAG_RECEIVED_HM05 + giveitem ITEM_HM_FLASH + setflag FLAG_RECEIVED_HM_FLASH msgbox GraniteCave_1F_Text_ExplainFlash, MSGBOX_DEFAULT release end diff --git a/data/maps/GraniteCave_StevensRoom/scripts.inc b/data/maps/GraniteCave_StevensRoom/scripts.inc index 384e648ee2..eb32c26293 100644 --- a/data/maps/GraniteCave_StevensRoom/scripts.inc +++ b/data/maps/GraniteCave_StevensRoom/scripts.inc @@ -11,7 +11,7 @@ GraniteCave_StevensRoom_EventScript_Steven:: call Common_EventScript_PlayerHandedOverTheItem setflag FLAG_DELIVERED_STEVEN_LETTER msgbox GraniteCave_StevensRoom_Text_ThankYouTakeThis, MSGBOX_DEFAULT - giveitem ITEM_TM47 + giveitem ITEM_TM_STEEL_WING call_if_eq VAR_RESULT, FALSE, GraniteCave_StevensRoom_EventScript_BagFull msgbox GraniteCave_StevensRoom_Text_CouldBecomeChampionLetsRegister, MSGBOX_DEFAULT closemessage diff --git a/data/maps/LavaridgeTown_Gym_1F/scripts.inc b/data/maps/LavaridgeTown_Gym_1F/scripts.inc index 530d6e9598..b7db13f54a 100644 --- a/data/maps/LavaridgeTown_Gym_1F/scripts.inc +++ b/data/maps/LavaridgeTown_Gym_1F/scripts.inc @@ -52,7 +52,7 @@ LavaridgeTown_Gym_1F_EventScript_Flannery:: trainerbattle_single TRAINER_FLANNERY_1, LavaridgeTown_Gym_1F_Text_FlanneryIntro, LavaridgeTown_Gym_1F_Text_FlanneryDefeat, LavaridgeTown_Gym_1F_EventScript_FlanneryDefeated, NO_MUSIC specialvar VAR_RESULT, ShouldTryRematchBattle goto_if_eq VAR_RESULT, TRUE, LavaridgeTown_Gym_1F_EventScript_FlanneryRematch - goto_if_unset FLAG_RECEIVED_TM50, LavaridgeTown_Gym_1F_EventScript_GiveOverheat2 + goto_if_unset FLAG_RECEIVED_TM_OVERHEAT, LavaridgeTown_Gym_1F_EventScript_GiveOverheat2 msgbox LavaridgeTown_Gym_1F_Text_FlanneryPostBattle, MSGBOX_DEFAULT release end @@ -84,18 +84,18 @@ LavaridgeTown_Gym_1F_EventScript_FlanneryDefeated:: end LavaridgeTown_Gym_1F_EventScript_GiveOverheat2:: - giveitem ITEM_TM50 + giveitem ITEM_TM_OVERHEAT goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull msgbox LavaridgeTown_Gym_1F_Text_ExplainOverheat, MSGBOX_DEFAULT - setflag FLAG_RECEIVED_TM50 + setflag FLAG_RECEIVED_TM_OVERHEAT release end LavaridgeTown_Gym_1F_EventScript_GiveOverheat:: - giveitem ITEM_TM50 + giveitem ITEM_TM_OVERHEAT goto_if_eq VAR_RESULT, FALSE, Common_EventScript_BagIsFull msgbox LavaridgeTown_Gym_1F_Text_ExplainOverheat, MSGBOX_DEFAULT - setflag FLAG_RECEIVED_TM50 + setflag FLAG_RECEIVED_TM_OVERHEAT return LavaridgeTown_Gym_1F_EventScript_FlanneryRematch:: diff --git a/data/maps/LilycoveCity_DepartmentStore_4F/scripts.inc b/data/maps/LilycoveCity_DepartmentStore_4F/scripts.inc index d176781d6e..760abc600d 100644 --- a/data/maps/LilycoveCity_DepartmentStore_4F/scripts.inc +++ b/data/maps/LilycoveCity_DepartmentStore_4F/scripts.inc @@ -25,10 +25,10 @@ LilycoveCity_DepartmentStore_4F_EventScript_ClerkLeft:: .align 2 LilycoveCity_DepartmentStore_4F_Pokemart_AttackTMs: - .2byte ITEM_TM38 @ Fire Blast - .2byte ITEM_TM25 @ Thunder - .2byte ITEM_TM14 @ Blizzard - .2byte ITEM_TM15 @ Hyper Beam + .2byte ITEM_TM_FIRE_BLAST + .2byte ITEM_TM_THUNDER + .2byte ITEM_TM_BLIZZARD + .2byte ITEM_TM_HYPER_BEAM .2byte ITEM_NONE release end @@ -45,10 +45,10 @@ LilycoveCity_DepartmentStore_4F_EventScript_ClerkRight:: .align 2 LilycoveCity_DepartmentStore_4F_Pokemart_DefenseTMs: - .2byte ITEM_TM17 @ Protect - .2byte ITEM_TM20 @ Safeguard - .2byte ITEM_TM33 @ Reflect - .2byte ITEM_TM16 @ Light Screen + .2byte ITEM_TM_PROTECT + .2byte ITEM_TM_SAFEGUARD + .2byte ITEM_TM_REFLECT + .2byte ITEM_TM_LIGHT_SCREEN .2byte ITEM_NONE release end diff --git a/data/maps/LilycoveCity_House2/scripts.inc b/data/maps/LilycoveCity_House2/scripts.inc index 965d82acfb..5d1bc8eaa8 100644 --- a/data/maps/LilycoveCity_House2/scripts.inc +++ b/data/maps/LilycoveCity_House2/scripts.inc @@ -4,11 +4,11 @@ LilycoveCity_House2_MapScripts:: LilycoveCity_House2_EventScript_FatMan:: lock faceplayer - goto_if_set FLAG_RECEIVED_TM44, LilycoveCity_House2_EventScript_ReceivedRest + goto_if_set FLAG_RECEIVED_TM_REST, LilycoveCity_House2_EventScript_ReceivedRest msgbox LilycoveCity_House2_Text_NotAwakeYetHaveThis, MSGBOX_DEFAULT - giveitem ITEM_TM44 + giveitem ITEM_TM_REST goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull - setflag FLAG_RECEIVED_TM44 + setflag FLAG_RECEIVED_TM_REST msgbox LilycoveCity_House2_Text_SleepIsEssential, MSGBOX_DEFAULT release end diff --git a/data/maps/MauvilleCity/scripts.inc b/data/maps/MauvilleCity/scripts.inc index 2ad39aec1c..9211402705 100644 --- a/data/maps/MauvilleCity/scripts.inc +++ b/data/maps/MauvilleCity/scripts.inc @@ -13,7 +13,7 @@ MauvilleCity_OnTransition: setflag FLAG_SYS_TV_START clearflag FLAG_MAUVILLE_GYM_BARRIERS_STATE setvar VAR_MAUVILLE_GYM_STATE, 0 - call_if_set FLAG_GOT_TM24_FROM_WATTSON, MauvilleCity_EventScript_MoveWattsonBackToGym + call_if_set FLAG_GOT_TM_THUNDERBOLT_FROM_WATTSON, MauvilleCity_EventScript_MoveWattsonBackToGym end MauvilleCity_EventScript_MoveWattsonBackToGym:: @@ -418,7 +418,7 @@ MauvilleCity_Movement_ScottExitEast: MauvilleCity_EventScript_Wattson:: lock faceplayer - goto_if_set FLAG_GOT_TM24_FROM_WATTSON, MauvilleCity_EventScript_ReceivedThunderbolt + goto_if_set FLAG_GOT_TM_THUNDERBOLT_FROM_WATTSON, MauvilleCity_EventScript_ReceivedThunderbolt goto_if_eq VAR_NEW_MAUVILLE_STATE, 2, MauvilleCity_EventScript_CompletedNewMauville goto_if_set FLAG_GOT_BASEMENT_KEY_FROM_WATTSON, MauvilleCity_EventScript_BegunNewMauville msgbox MauvilleCity_Text_WattsonNeedFavorTakeKey, MSGBOX_DEFAULT @@ -435,9 +435,9 @@ MauvilleCity_EventScript_BegunNewMauville:: MauvilleCity_EventScript_CompletedNewMauville:: msgbox MauvilleCity_Text_WattsonThanksTakeTM, MSGBOX_DEFAULT - giveitem ITEM_TM24 + giveitem ITEM_TM_THUNDERBOLT goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull - setflag FLAG_GOT_TM24_FROM_WATTSON + setflag FLAG_GOT_TM_THUNDERBOLT_FROM_WATTSON msgbox MauvilleCity_Text_WattsonYoungTakeCharge, MSGBOX_DEFAULT release end diff --git a/data/maps/MauvilleCity_GameCorner/scripts.inc b/data/maps/MauvilleCity_GameCorner/scripts.inc index b7c8603a33..c9e425be73 100644 --- a/data/maps/MauvilleCity_GameCorner/scripts.inc +++ b/data/maps/MauvilleCity_GameCorner/scripts.inc @@ -2,12 +2,12 @@ MauvilleCity_GameCorner_MapScripts:: .byte 0 @ Game Corner prices - .set TM32_COINS, 1500 - .set TM29_COINS, 3500 - .set TM35_COINS, 4000 - .set TM24_COINS, 4000 - .set TM13_COINS, 4000 - .set DOLL_COINS, 1000 + .set TM_DOUBLE_TEAM_COINS, 1500 + .set TM_PSYCHIC_COINS, 3500 + .set TM_FLAMETHROWER_COINS, 4000 + .set TM_THUNDERBOLT_COINS, 4000 + .set TM_ICE_BEAM_COINS, 4000 + .set DOLL_COINS, 1000 .set COINS_PRICE_50, 1000 .set COINS_PRICE_500, 10000 @@ -236,43 +236,43 @@ MauvilleCity_GameCorner_EventScript_ReturnToChooseTMPrize:: MauvilleCity_GameCorner_EventScript_ChooseTMPrize:: multichoice 12, 0, MULTI_GAME_CORNER_TMS, FALSE switch VAR_RESULT - case 0, MauvilleCity_GameCorner_EventScript_TM32 - case 1, MauvilleCity_GameCorner_EventScript_TM29 - case 2, MauvilleCity_GameCorner_EventScript_TM35 - case 3, MauvilleCity_GameCorner_EventScript_TM24 - case 4, MauvilleCity_GameCorner_EventScript_TM13 + case 0, MauvilleCity_GameCorner_EventScript_TMDoubleTeam + case 1, MauvilleCity_GameCorner_EventScript_TMPsychic + case 2, MauvilleCity_GameCorner_EventScript_TMFlamethrower + case 3, MauvilleCity_GameCorner_EventScript_TMThunderbolt + case 4, MauvilleCity_GameCorner_EventScript_TMIceBeam case 5, MauvilleCity_GameCorner_EventScript_CancelTMSelect goto MauvilleCity_GameCorner_EventScript_CancelTMSelect end -MauvilleCity_GameCorner_EventScript_TM32:: +MauvilleCity_GameCorner_EventScript_TMDoubleTeam:: setvar VAR_TEMP_1, 1 - bufferitemname STR_VAR_1, ITEM_TM32 - setvar VAR_0x8004, ITEM_TM32 + bufferitemname STR_VAR_1, ITEM_TM_DOUBLE_TEAM + setvar VAR_0x8004, ITEM_TM_DOUBLE_TEAM goto MauvilleCity_GameCorner_EventScript_ConfirmTMPrize -MauvilleCity_GameCorner_EventScript_TM29:: +MauvilleCity_GameCorner_EventScript_TMPsychic:: setvar VAR_TEMP_1, 2 - bufferitemname STR_VAR_1, ITEM_TM29 - setvar VAR_0x8004, ITEM_TM29 + bufferitemname STR_VAR_1, ITEM_TM_PSYCHIC + setvar VAR_0x8004, ITEM_TM_PSYCHIC goto MauvilleCity_GameCorner_EventScript_ConfirmTMPrize -MauvilleCity_GameCorner_EventScript_TM35:: +MauvilleCity_GameCorner_EventScript_TMFlamethrower:: setvar VAR_TEMP_1, 3 - bufferitemname STR_VAR_1, ITEM_TM35 - setvar VAR_0x8004, ITEM_TM35 + bufferitemname STR_VAR_1, ITEM_TM_FLAMETHROWER + setvar VAR_0x8004, ITEM_TM_FLAMETHROWER goto MauvilleCity_GameCorner_EventScript_ConfirmTMPrize -MauvilleCity_GameCorner_EventScript_TM24:: +MauvilleCity_GameCorner_EventScript_TMThunderbolt:: setvar VAR_TEMP_1, 4 - bufferitemname STR_VAR_1, ITEM_TM24 - setvar VAR_0x8004, ITEM_TM24 + bufferitemname STR_VAR_1, ITEM_TM_THUNDERBOLT + setvar VAR_0x8004, ITEM_TM_THUNDERBOLT goto MauvilleCity_GameCorner_EventScript_ConfirmTMPrize -MauvilleCity_GameCorner_EventScript_TM13:: +MauvilleCity_GameCorner_EventScript_TMIceBeam:: setvar VAR_TEMP_1, 5 - bufferitemname STR_VAR_1, ITEM_TM13 - setvar VAR_0x8004, ITEM_TM13 + bufferitemname STR_VAR_1, ITEM_TM_ICE_BEAM + setvar VAR_0x8004, ITEM_TM_ICE_BEAM goto MauvilleCity_GameCorner_EventScript_ConfirmTMPrize MauvilleCity_GameCorner_EventScript_ConfirmTMPrize:: @@ -280,72 +280,72 @@ MauvilleCity_GameCorner_EventScript_ConfirmTMPrize:: msgbox MauvilleCity_GameCorner_Text_SoYourChoiceIsTheTMX, MSGBOX_YESNO goto_if_eq VAR_RESULT, NO, MauvilleCity_GameCorner_EventScript_CancelTMSelect switch VAR_TEMP_1 - case 1, MauvilleCity_GameCorner_EventScript_BuyTM32 - case 2, MauvilleCity_GameCorner_EventScript_BuyTM29 - case 3, MauvilleCity_GameCorner_EventScript_BuyTM35 - case 4, MauvilleCity_GameCorner_EventScript_BuyTM24 - case 5, MauvilleCity_GameCorner_EventScript_BuyTM13 + case 1, MauvilleCity_GameCorner_EventScript_BuyTMDoubleTeam + case 2, MauvilleCity_GameCorner_EventScript_BuyTMPsychic + case 3, MauvilleCity_GameCorner_EventScript_BuyTMFlamethrower + case 4, MauvilleCity_GameCorner_EventScript_BuyTMThunderbolt + case 5, MauvilleCity_GameCorner_EventScript_BuyTMIceBeam end -MauvilleCity_GameCorner_EventScript_BuyTM32:: +MauvilleCity_GameCorner_EventScript_BuyTMDoubleTeam:: checkcoins VAR_TEMP_2 - goto_if_lt VAR_TEMP_2, TM32_COINS, MauvilleCity_GameCorner_EventScript_NotEnoughCoinsForTM - checkitemspace ITEM_TM32 + goto_if_lt VAR_TEMP_2, TM_DOUBLE_TEAM_COINS, MauvilleCity_GameCorner_EventScript_NotEnoughCoinsForTM + checkitemspace ITEM_TM_DOUBLE_TEAM goto_if_eq VAR_RESULT, FALSE, MauvilleCity_GameCorner_EventScript_NoRoomForTM - removecoins TM32_COINS - additem ITEM_TM32 + removecoins TM_DOUBLE_TEAM_COINS + additem ITEM_TM_DOUBLE_TEAM updatecoinsbox 1, 1 playse SE_SHOP msgbox MauvilleCity_GameCorner_Text_HereYouGo, MSGBOX_DEFAULT goto MauvilleCity_GameCorner_EventScript_ReturnToChooseTMPrize end -MauvilleCity_GameCorner_EventScript_BuyTM29:: +MauvilleCity_GameCorner_EventScript_BuyTMPsychic:: checkcoins VAR_TEMP_2 - goto_if_lt VAR_TEMP_2, TM29_COINS, MauvilleCity_GameCorner_EventScript_NotEnoughCoinsForTM - checkitemspace ITEM_TM29 + goto_if_lt VAR_TEMP_2, TM_PSYCHIC_COINS, MauvilleCity_GameCorner_EventScript_NotEnoughCoinsForTM + checkitemspace ITEM_TM_PSYCHIC goto_if_eq VAR_RESULT, FALSE, MauvilleCity_GameCorner_EventScript_NoRoomForTM - removecoins TM29_COINS - additem ITEM_TM29 + removecoins TM_PSYCHIC_COINS + additem ITEM_TM_PSYCHIC updatecoinsbox 1, 1 playse SE_SHOP msgbox MauvilleCity_GameCorner_Text_HereYouGo, MSGBOX_DEFAULT goto MauvilleCity_GameCorner_EventScript_ReturnToChooseTMPrize end -MauvilleCity_GameCorner_EventScript_BuyTM35:: +MauvilleCity_GameCorner_EventScript_BuyTMFlamethrower:: checkcoins VAR_TEMP_2 - goto_if_lt VAR_TEMP_2, TM35_COINS, MauvilleCity_GameCorner_EventScript_NotEnoughCoinsForTM - checkitemspace ITEM_TM35 + goto_if_lt VAR_TEMP_2, TM_FLAMETHROWER_COINS, MauvilleCity_GameCorner_EventScript_NotEnoughCoinsForTM + checkitemspace ITEM_TM_FLAMETHROWER goto_if_eq VAR_RESULT, FALSE, MauvilleCity_GameCorner_EventScript_NoRoomForTM - removecoins TM35_COINS - additem ITEM_TM35 + removecoins TM_FLAMETHROWER_COINS + additem ITEM_TM_FLAMETHROWER updatecoinsbox 1, 1 playse SE_SHOP msgbox MauvilleCity_GameCorner_Text_HereYouGo, MSGBOX_DEFAULT goto MauvilleCity_GameCorner_EventScript_ReturnToChooseTMPrize end -MauvilleCity_GameCorner_EventScript_BuyTM24:: +MauvilleCity_GameCorner_EventScript_BuyTMThunderbolt:: checkcoins VAR_TEMP_2 - goto_if_lt VAR_TEMP_2, TM24_COINS, MauvilleCity_GameCorner_EventScript_NotEnoughCoinsForTM - checkitemspace ITEM_TM24 + goto_if_lt VAR_TEMP_2, TM_THUNDERBOLT_COINS, MauvilleCity_GameCorner_EventScript_NotEnoughCoinsForTM + checkitemspace ITEM_TM_THUNDERBOLT goto_if_eq VAR_RESULT, FALSE, MauvilleCity_GameCorner_EventScript_NoRoomForTM - removecoins TM24_COINS - additem ITEM_TM24 + removecoins TM_THUNDERBOLT_COINS + additem ITEM_TM_THUNDERBOLT updatecoinsbox 1, 1 playse SE_SHOP msgbox MauvilleCity_GameCorner_Text_HereYouGo, MSGBOX_DEFAULT goto MauvilleCity_GameCorner_EventScript_ReturnToChooseTMPrize end -MauvilleCity_GameCorner_EventScript_BuyTM13:: +MauvilleCity_GameCorner_EventScript_BuyTMIceBeam:: checkcoins VAR_TEMP_2 - goto_if_lt VAR_TEMP_2, TM13_COINS, MauvilleCity_GameCorner_EventScript_NotEnoughCoinsForTM - checkitemspace ITEM_TM13 + goto_if_lt VAR_TEMP_2, TM_ICE_BEAM_COINS, MauvilleCity_GameCorner_EventScript_NotEnoughCoinsForTM + checkitemspace ITEM_TM_ICE_BEAM goto_if_eq VAR_RESULT, FALSE, MauvilleCity_GameCorner_EventScript_NoRoomForTM - removecoins TM13_COINS - additem ITEM_TM13 + removecoins TM_ICE_BEAM_COINS + additem ITEM_TM_ICE_BEAM updatecoinsbox 1, 1 playse SE_SHOP msgbox MauvilleCity_GameCorner_Text_HereYouGo, MSGBOX_DEFAULT diff --git a/data/maps/MauvilleCity_Gym/scripts.inc b/data/maps/MauvilleCity_Gym/scripts.inc index de924d7d93..433c45bf81 100644 --- a/data/maps/MauvilleCity_Gym/scripts.inc +++ b/data/maps/MauvilleCity_Gym/scripts.inc @@ -77,7 +77,7 @@ MauvilleCity_Gym_EventScript_Wattson:: trainerbattle_single TRAINER_WATTSON_1, MauvilleCity_Gym_Text_WattsonIntro, MauvilleCity_Gym_Text_WattsonDefeat, MauvilleCity_Gym_EventScript_WattsonDefeated, NO_MUSIC specialvar VAR_RESULT, ShouldTryRematchBattle goto_if_eq VAR_RESULT, TRUE, MauvilleCity_Gym_EventScript_WattsonRematch - goto_if_unset FLAG_RECEIVED_TM34, MauvilleCity_Gym_EventScript_GiveShockWave2 + goto_if_unset FLAG_RECEIVED_TM_SHOCK_WAVE, MauvilleCity_Gym_EventScript_GiveShockWave2 goto_if_eq VAR_NEW_MAUVILLE_STATE, 2, MauvilleCity_Gym_EventScript_CompletedNewMauville msgbox MauvilleCity_Gym_Text_WattsonPostBattle, MSGBOX_DEFAULT release @@ -112,18 +112,18 @@ MauvilleCity_Gym_EventScript_WattsonDefeated:: end MauvilleCity_Gym_EventScript_GiveShockWave2:: - giveitem ITEM_TM34 + giveitem ITEM_TM_SHOCK_WAVE goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull msgbox MauvilleCity_Gym_Text_ExplainShockWave, MSGBOX_DEFAULT - setflag FLAG_RECEIVED_TM34 + setflag FLAG_RECEIVED_TM_SHOCK_WAVE release end MauvilleCity_Gym_EventScript_GiveShockWave:: - giveitem ITEM_TM34 + giveitem ITEM_TM_SHOCK_WAVE goto_if_eq VAR_RESULT, FALSE, Common_EventScript_BagIsFull msgbox MauvilleCity_Gym_Text_ExplainShockWave, MSGBOX_DEFAULT - setflag FLAG_RECEIVED_TM34 + setflag FLAG_RECEIVED_TM_SHOCK_WAVE return MauvilleCity_Gym_EventScript_CompletedNewMauville:: diff --git a/data/maps/MauvilleCity_House1/scripts.inc b/data/maps/MauvilleCity_House1/scripts.inc index d0d3481a66..2e4e9abcbc 100644 --- a/data/maps/MauvilleCity_House1/scripts.inc +++ b/data/maps/MauvilleCity_House1/scripts.inc @@ -4,10 +4,10 @@ MauvilleCity_House1_MapScripts:: MauvilleCity_House1_EventScript_RockSmashDude:: lock faceplayer - goto_if_set FLAG_RECEIVED_HM06, MauvilleCity_House1_EventScript_ReceivedRockSmash + goto_if_set FLAG_RECEIVED_HM_ROCK_SMASH, MauvilleCity_House1_EventScript_ReceivedRockSmash msgbox MauvilleCity_House1_Text_ImRockSmashDudeTakeThis, MSGBOX_DEFAULT - giveitem ITEM_HM06 - setflag FLAG_RECEIVED_HM06 + giveitem ITEM_HM_ROCK_SMASH + setflag FLAG_RECEIVED_HM_ROCK_SMASH setflag FLAG_HIDE_ROUTE_111_ROCK_SMASH_TIP_GUY msgbox MauvilleCity_House1_Text_ExplainRockSmash, MSGBOX_DEFAULT release diff --git a/data/maps/MeteorFalls_1F_1R/map.json b/data/maps/MeteorFalls_1F_1R/map.json index 71f1d1cc5b..e0d32c5804 100644 --- a/data/maps/MeteorFalls_1F_1R/map.json +++ b/data/maps/MeteorFalls_1F_1R/map.json @@ -24,8 +24,8 @@ "movement_range_y": 0, "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", - "script": "MeteorFalls_1F_1R_EventScript_ItemTM23", - "flag": "FLAG_ITEM_METEOR_FALLS_1F_1R_TM23" + "script": "MeteorFalls_1F_1R_EventScript_ItemTMIronTail", + "flag": "FLAG_ITEM_METEOR_FALLS_1F_1R_TM_IRON_TAIL" }, { "graphics_id": "OBJ_EVENT_GFX_ITEM_BALL", diff --git a/data/maps/MeteorFalls_B1F_2R/map.json b/data/maps/MeteorFalls_B1F_2R/map.json index 8d153c4239..79a89874e9 100644 --- a/data/maps/MeteorFalls_B1F_2R/map.json +++ b/data/maps/MeteorFalls_B1F_2R/map.json @@ -24,8 +24,8 @@ "movement_range_y": 1, "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", - "script": "MeteorFalls_B1F_2R_EventScript_ItemTM02", - "flag": "FLAG_ITEM_METEOR_FALLS_B1F_2R_TM02" + "script": "MeteorFalls_B1F_2R_EventScript_ItemTMDragonClaw", + "flag": "FLAG_ITEM_METEOR_FALLS_B1F_2R_TM_DRAGON_CLAW" } ], "warp_events": [ diff --git a/data/maps/MossdeepCity/scripts.inc b/data/maps/MossdeepCity/scripts.inc index 836490cbdd..a03b1db820 100644 --- a/data/maps/MossdeepCity/scripts.inc +++ b/data/maps/MossdeepCity/scripts.inc @@ -20,7 +20,7 @@ MossdeepCity_OnTransition: MossdeepCity_EventScript_PokefanF:: lock faceplayer - goto_if_set FLAG_RECEIVED_HM08, MossdeepCity_EventScript_PokefanFMagmaGone + goto_if_set FLAG_RECEIVED_HM_DIVE, MossdeepCity_EventScript_PokefanFMagmaGone msgbox MossdeepCity_Text_SpaceCenterReceivedLetter, MSGBOX_DEFAULT release end @@ -33,7 +33,7 @@ MossdeepCity_EventScript_PokefanFMagmaGone:: MossdeepCity_EventScript_Sailor:: lock faceplayer - goto_if_set FLAG_RECEIVED_HM08, MossdeepCity_EventScript_SailorMagmaGone + goto_if_set FLAG_RECEIVED_HM_DIVE, MossdeepCity_EventScript_SailorMagmaGone msgbox MossdeepCity_Text_MossdeepTargetedByMagma, MSGBOX_DEFAULT release end diff --git a/data/maps/MossdeepCity_Gym/scripts.inc b/data/maps/MossdeepCity_Gym/scripts.inc index 8892097dee..f2d08c13b1 100644 --- a/data/maps/MossdeepCity_Gym/scripts.inc +++ b/data/maps/MossdeepCity_Gym/scripts.inc @@ -52,7 +52,7 @@ MossdeepCity_Gym_EventScript_TateAndLiza:: trainerbattle_double TRAINER_TATE_AND_LIZA_1, MossdeepCity_Gym_Text_TateAndLizaIntro, MossdeepCity_Gym_Text_TateAndLizaDefeat, MossdeepCity_Gym_Text_TateAndLizaNeedTwoMons, MossdeepCity_Gym_EventScript_TateAndLizaDefeated, NO_MUSIC specialvar VAR_RESULT, ShouldTryRematchBattle goto_if_eq VAR_RESULT, TRUE, MossdeepCity_Gym_EventScript_TateAndLizaRematch - goto_if_unset FLAG_RECEIVED_TM04, MossdeepCity_Gym_EventScript_GiveCalmMind2 + goto_if_unset FLAG_RECEIVED_TM_CALM_MIND, MossdeepCity_Gym_EventScript_GiveCalmMind2 msgbox MossdeepCity_Gym_Text_TateAndLizaPostBattle, MSGBOX_DEFAULT release end @@ -90,18 +90,18 @@ MossdeepCity_Gym_EventScript_TateAndLizaDefeated:: end MossdeepCity_Gym_EventScript_GiveCalmMind2:: - giveitem ITEM_TM04 + giveitem ITEM_TM_CALM_MIND goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull msgbox MossdeepCity_Gym_Text_ExplainCalmMind, MSGBOX_DEFAULT - setflag FLAG_RECEIVED_TM04 + setflag FLAG_RECEIVED_TM_CALM_MIND release end MossdeepCity_Gym_EventScript_GiveCalmMind:: - giveitem ITEM_TM04 + giveitem ITEM_TM_CALM_MIND goto_if_eq VAR_RESULT, FALSE, Common_EventScript_BagIsFull msgbox MossdeepCity_Gym_Text_ExplainCalmMind, MSGBOX_DEFAULT - setflag FLAG_RECEIVED_TM04 + setflag FLAG_RECEIVED_TM_CALM_MIND return MossdeepCity_Gym_EventScript_TateAndLizaRematch:: diff --git a/data/maps/MossdeepCity_StevensHouse/scripts.inc b/data/maps/MossdeepCity_StevensHouse/scripts.inc index 0470e977a6..b30846e569 100644 --- a/data/maps/MossdeepCity_StevensHouse/scripts.inc +++ b/data/maps/MossdeepCity_StevensHouse/scripts.inc @@ -40,8 +40,8 @@ MossdeepCity_StevensHouse_EventScript_StevenGivesDive:: applymovement LOCALID_STEVEN, MossdeepCity_StevensHouse_Movement_StevenApproachPlayer waitmovement 0 msgbox MossdeepCity_StevensHouse_Text_YouveEarnedHMDive, MSGBOX_DEFAULT - giveitem ITEM_HM08 - setflag FLAG_RECEIVED_HM08 + giveitem ITEM_HM_DIVE + setflag FLAG_RECEIVED_HM_DIVE setflag FLAG_OMIT_DIVE_FROM_STEVEN_LETTER msgbox MossdeepCity_StevensHouse_Text_ExplainDive, MSGBOX_DEFAULT closemessage @@ -146,8 +146,8 @@ MossdeepCity_StevensHouse_EventScript_Letter:: @ Unused, leftover from RS MossdeepCity_StevensHouse_EventScript_DiveItemBall:: - finditem ITEM_HM08 - setflag FLAG_RECEIVED_HM08 + finditem ITEM_HM_DIVE + setflag FLAG_RECEIVED_HM_DIVE end MossdeepCity_StevensHouse_Text_YouveEarnedHMDive: diff --git a/data/maps/MtPyre_6F/map.json b/data/maps/MtPyre_6F/map.json index 9da33f4bc6..06bd940eac 100644 --- a/data/maps/MtPyre_6F/map.json +++ b/data/maps/MtPyre_6F/map.json @@ -37,8 +37,8 @@ "movement_range_y": 1, "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", - "script": "MtPyre_6F_EventScript_ItemTM30", - "flag": "FLAG_ITEM_MT_PYRE_6F_TM30" + "script": "MtPyre_6F_EventScript_ItemTMShadowBall", + "flag": "FLAG_ITEM_MT_PYRE_6F_TM_SHADOW_BALL" }, { "graphics_id": "OBJ_EVENT_GFX_PSYCHIC_M", diff --git a/data/maps/MtPyre_Exterior/map.json b/data/maps/MtPyre_Exterior/map.json index 417a38d977..a65f1259d4 100644 --- a/data/maps/MtPyre_Exterior/map.json +++ b/data/maps/MtPyre_Exterior/map.json @@ -37,8 +37,8 @@ "movement_range_y": 0, "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", - "script": "MtPyre_Exterior_EventScript_ItemTM48", - "flag": "FLAG_ITEM_MT_PYRE_EXTERIOR_TM48" + "script": "MtPyre_Exterior_EventScript_ItemTMSkillSwap", + "flag": "FLAG_ITEM_MT_PYRE_EXTERIOR_TM_SKILL_SWAP" } ], "warp_events": [ diff --git a/data/maps/PacifidlogTown_House2/scripts.inc b/data/maps/PacifidlogTown_House2/scripts.inc index 175b477e7a..3acb7583e8 100644 --- a/data/maps/PacifidlogTown_House2/scripts.inc +++ b/data/maps/PacifidlogTown_House2/scripts.inc @@ -38,7 +38,7 @@ PacifidlogTown_House2_EventScript_ClearReceivedFanClubTM:: PacifidlogTown_House2_EventScript_GiveReturn:: msgbox PacifidlogTown_House2_Text_AdoringPokemonTakeThis, MSGBOX_DEFAULT - giveitem ITEM_TM27 + giveitem ITEM_TM_RETURN goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_RECEIVED_FANCLUB_TM_THIS_WEEK special SetPacifidlogTMReceivedDay @@ -53,7 +53,7 @@ PacifidlogTown_House2_EventScript_PutInEffort:: PacifidlogTown_House2_EventScript_GiveFrustration:: msgbox PacifidlogTown_House2_Text_ViciousPokemonTakeThis, MSGBOX_DEFAULT - giveitem ITEM_TM21 + giveitem ITEM_TM_FRUSTRATION goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull setflag FLAG_RECEIVED_FANCLUB_TM_THIS_WEEK special SetPacifidlogTMReceivedDay diff --git a/data/maps/PetalburgCity_Gym/scripts.inc b/data/maps/PetalburgCity_Gym/scripts.inc index 836da26bfb..8b107c68ec 100644 --- a/data/maps/PetalburgCity_Gym/scripts.inc +++ b/data/maps/PetalburgCity_Gym/scripts.inc @@ -332,7 +332,7 @@ PetalburgCity_Gym_EventScript_NormanFaceDoorEast:: PetalburgCity_Gym_EventScript_NormanPostBattle:: call PetalburgCity_Gym_EventScript_ShouldGiveEnigmaBerry goto_if_eq VAR_RESULT, TRUE, PetalburgCity_Gym_EventScript_GiveEnigmaBerry - goto_if_unset FLAG_RECEIVED_TM42, PetalburgCity_Gym_EventScript_GiveFacade2 + goto_if_unset FLAG_RECEIVED_TM_FACADE, PetalburgCity_Gym_EventScript_GiveFacade2 goto_if_set FLAG_SYS_GAME_CLEAR, PetalburgCity_Gym_EventScript_NoAmountOfTrainingIsEnough msgbox PetalburgCity_Gym_Text_DadGoingToKeepTraining, MSGBOX_DEFAULT release @@ -405,9 +405,9 @@ PetalburgCity_Gym_EventScript_NormanBattle:: end PetalburgCity_Gym_EventScript_GiveFacade:: - giveitem ITEM_TM42 + giveitem ITEM_TM_FACADE goto_if_eq VAR_RESULT, FALSE, Common_EventScript_BagIsFull - setflag FLAG_RECEIVED_TM42 + setflag FLAG_RECEIVED_TM_FACADE msgbox PetalburgCity_Gym_Text_ExplainFacade, MSGBOX_DEFAULT return diff --git a/data/maps/PetalburgCity_WallysHouse/scripts.inc b/data/maps/PetalburgCity_WallysHouse/scripts.inc index 3a06208a78..f7e2e97828 100644 --- a/data/maps/PetalburgCity_WallysHouse/scripts.inc +++ b/data/maps/PetalburgCity_WallysHouse/scripts.inc @@ -15,14 +15,14 @@ PetalburgCity_WallysHouse_EventScript_PlayerWallysDadFaceEachOther:: end PetalburgCity_WallysHouse_OnFrame: - map_script_2 VAR_PETALBURG_CITY_STATE, 4, PetalburgCity_WallysHouse_EventScript_GiveHM03Surf + map_script_2 VAR_PETALBURG_CITY_STATE, 4, PetalburgCity_WallysHouse_EventScript_GiveHMSurf .2byte 0 -PetalburgCity_WallysHouse_EventScript_GiveHM03Surf:: +PetalburgCity_WallysHouse_EventScript_GiveHMSurf:: lockall msgbox PetalburgCity_WallysHouse_Text_PleaseExcuseUs, MSGBOX_DEFAULT - giveitem ITEM_HM03 - setflag FLAG_RECEIVED_HM03 + giveitem ITEM_HM_SURF + setflag FLAG_RECEIVED_HM_SURF msgbox PetalburgCity_WallysHouse_Text_SurfGoAllSortsOfPlaces, MSGBOX_DEFAULT setvar VAR_PETALBURG_CITY_STATE, 5 releaseall @@ -32,14 +32,14 @@ PetalburgCity_WallysHouse_EventScript_WallysDad:: lock faceplayer goto_if_set FLAG_DEFEATED_WALLY_VICTORY_ROAD, PetalburgCity_WallysHouse_EventScript_DefeatedWallyInVictoryRoad - goto_if_set FLAG_RECEIVED_HM03, PetalburgCity_WallysHouse_EventScript_ReceievedHM03Surf + goto_if_set FLAG_RECEIVED_HM_SURF, PetalburgCity_WallysHouse_EventScript_ReceievedHMSurf goto_if_set FLAG_THANKED_FOR_PLAYING_WITH_WALLY, PetalburgCity_WallysHouse_EventScript_PlayedWithWally msgbox PetalburgCity_WallysHouse_Text_ThanksForPlayingWithWally, MSGBOX_DEFAULT setflag FLAG_THANKED_FOR_PLAYING_WITH_WALLY release end -PetalburgCity_WallysHouse_EventScript_ReceievedHM03Surf:: +PetalburgCity_WallysHouse_EventScript_ReceievedHMSurf:: msgbox PetalburgCity_WallysHouse_Text_WallyIsComingHomeSoon, MSGBOX_DEFAULT release end @@ -57,12 +57,12 @@ PetalburgCity_WallysHouse_EventScript_PlayedWithWally:: PetalburgCity_WallysHouse_EventScript_WallysMom:: lock faceplayer - goto_if_set FLAG_RECEIVED_HM03, PetalburgCity_WallysHouse_EventScript_ReceivedHM03Surf + goto_if_set FLAG_RECEIVED_HM_SURF, PetalburgCity_WallysHouse_EventScript_ReceivedHMSurf msgbox PetalburgCity_WallysHouse_Text_WallyWasReallyHappy, MSGBOX_DEFAULT release end -PetalburgCity_WallysHouse_EventScript_ReceivedHM03Surf:: +PetalburgCity_WallysHouse_EventScript_ReceivedHMSurf:: msgbox PetalburgCity_WallysHouse_Text_WallyLeftWithoutTelling, MSGBOX_DEFAULT release end diff --git a/data/maps/Route104/scripts.inc b/data/maps/Route104/scripts.inc index 68aeb0a212..dfb7675e90 100644 --- a/data/maps/Route104/scripts.inc +++ b/data/maps/Route104/scripts.inc @@ -329,11 +329,11 @@ Route104_EventScript_Woman:: Route104_EventScript_Boy2:: lock faceplayer - goto_if_set FLAG_RECEIVED_TM09, Route104_EventScript_ReceivedBulletSeed + goto_if_set FLAG_RECEIVED_TM_BULLET_SEED, Route104_EventScript_ReceivedBulletSeed msgbox Route104_Text_LikeFillingMouthWithSeedsTakeThis, MSGBOX_DEFAULT - giveitem ITEM_TM09 + giveitem ITEM_TM_BULLET_SEED goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull - setflag FLAG_RECEIVED_TM09 + setflag FLAG_RECEIVED_TM_BULLET_SEED release end diff --git a/data/maps/Route110_TrickHouseEnd/scripts.inc b/data/maps/Route110_TrickHouseEnd/scripts.inc index be8f75e961..9f31d89e4c 100644 --- a/data/maps/Route110_TrickHouseEnd/scripts.inc +++ b/data/maps/Route110_TrickHouseEnd/scripts.inc @@ -109,7 +109,7 @@ Route110_TrickHouseEnd_EventScript_CompletedPuzzle5:: msgbox Route110_TrickHouseEnd_Text_AllNightToMakeMechadolls, MSGBOX_DEFAULT msgbox Route110_TrickHouseEnd_Text_YouHaveEarnedThisReward, MSGBOX_DEFAULT setvar VAR_TRICK_HOUSE_PRIZE_PICKUP, 0 - giveitem ITEM_TM12 + giveitem ITEM_TM_TAUNT call_if_eq VAR_RESULT, FALSE, Route110_TrickHouseEnd_EventScript_BagFull msgbox Route110_TrickHouseEnd_Text_MakeNewTricksToStumpYou, MSGBOX_DEFAULT closemessage diff --git a/data/maps/Route110_TrickHouseEntrance/scripts.inc b/data/maps/Route110_TrickHouseEntrance/scripts.inc index 52327553e3..51135ac339 100644 --- a/data/maps/Route110_TrickHouseEntrance/scripts.inc +++ b/data/maps/Route110_TrickHouseEntrance/scripts.inc @@ -370,7 +370,7 @@ Route110_TrickHouseEntrance_EventScript_GivePuzzle4Reward:: end Route110_TrickHouseEntrance_EventScript_GivePuzzle5Reward:: - giveitem ITEM_TM12 + giveitem ITEM_TM_TAUNT goto_if_eq VAR_RESULT, TRUE, Route110_TrickHouseEntrance_EventScript_GotReward call_if_eq VAR_RESULT, FALSE, Common_EventScript_BagIsFull msgbox Route110_TrickHouseEntrance_Text_DidYouNotComeToClaimReward, MSGBOX_DEFAULT diff --git a/data/maps/Route111/map.json b/data/maps/Route111/map.json index bc476ebaaf..6efa1770e2 100644 --- a/data/maps/Route111/map.json +++ b/data/maps/Route111/map.json @@ -261,8 +261,8 @@ "movement_range_y": 0, "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", - "script": "Route111_EventScript_ItemTM37", - "flag": "FLAG_ITEM_ROUTE_111_TM37" + "script": "Route111_EventScript_ItemTMSandstorm", + "flag": "FLAG_ITEM_ROUTE_111_TM_SANDSTORM" }, { "graphics_id": "OBJ_EVENT_GFX_BERRY_TREE", diff --git a/data/maps/Route113/map.json b/data/maps/Route113/map.json index 4c45d904cb..2e5890d656 100644 --- a/data/maps/Route113/map.json +++ b/data/maps/Route113/map.json @@ -450,8 +450,8 @@ "x": 22, "y": 5, "elevation": 3, - "item": "ITEM_TM32", - "flag": "FLAG_HIDDEN_ITEM_ROUTE_113_TM32" + "item": "ITEM_TM_DOUBLE_TEAM", + "flag": "FLAG_HIDDEN_ITEM_ROUTE_113_TM_DOUBLE_TEAM" }, { "type": "hidden_item", diff --git a/data/maps/Route114/scripts.inc b/data/maps/Route114/scripts.inc index abf70ea081..db46f7bb80 100644 --- a/data/maps/Route114/scripts.inc +++ b/data/maps/Route114/scripts.inc @@ -43,11 +43,11 @@ Route114_EventScript_ReceivedBerry:: Route114_EventScript_RoarGentleman:: lock faceplayer - goto_if_set FLAG_RECEIVED_TM05, Route114_EventScript_ReceivedRoar + goto_if_set FLAG_RECEIVED_TM_ROAR, Route114_EventScript_ReceivedRoar msgbox Route114_Text_AllMyMonDoesIsRoarTakeThis, MSGBOX_DEFAULT - giveitem ITEM_TM05 + giveitem ITEM_TM_ROAR goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull - setflag FLAG_RECEIVED_TM05 + setflag FLAG_RECEIVED_TM_ROAR msgbox Route114_Text_ExplainRoar, MSGBOX_DEFAULT release end diff --git a/data/maps/Route114_FossilManiacsHouse/scripts.inc b/data/maps/Route114_FossilManiacsHouse/scripts.inc index ba3c0c60e5..2586ea1076 100644 --- a/data/maps/Route114_FossilManiacsHouse/scripts.inc +++ b/data/maps/Route114_FossilManiacsHouse/scripts.inc @@ -9,11 +9,11 @@ Route114_FossilManiacsHouse_OnTransition: Route114_FossilManiacsHouse_EventScript_FossilManiacsBrother:: lock faceplayer - goto_if_set FLAG_RECEIVED_TM28, Route114_FossilManiacsHouse_EventScript_ReceivedDig + goto_if_set FLAG_RECEIVED_TM_DIG, Route114_FossilManiacsHouse_EventScript_ReceivedDig msgbox Route114_FossilManiacsHouse_Text_HaveThisToDigLikeMyBrother, MSGBOX_DEFAULT - giveitem ITEM_TM28 + giveitem ITEM_TM_DIG goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull - setflag FLAG_RECEIVED_TM28 + setflag FLAG_RECEIVED_TM_DIG release end diff --git a/data/maps/Route115/map.json b/data/maps/Route115/map.json index a4143fad30..ee0d71349d 100644 --- a/data/maps/Route115/map.json +++ b/data/maps/Route115/map.json @@ -165,8 +165,8 @@ "movement_range_y": 0, "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", - "script": "Route115_EventScript_ItemTM01", - "flag": "FLAG_ITEM_ROUTE_115_TM01" + "script": "Route115_EventScript_ItemTMFocusPunch", + "flag": "FLAG_ITEM_ROUTE_115_TM_FOCUS_PUNCH" }, { "graphics_id": "OBJ_EVENT_GFX_ITEM_BALL", diff --git a/data/maps/Route119/scripts.inc b/data/maps/Route119/scripts.inc index 94094206c7..6c9767dcb6 100644 --- a/data/maps/Route119/scripts.inc +++ b/data/maps/Route119/scripts.inc @@ -132,8 +132,8 @@ Route119_EventScript_DefeatedBrendan:: end Route119_EventScript_GiveFlyHM:: - giveitem ITEM_HM02 - setflag FLAG_RECEIVED_HM02 + giveitem ITEM_HM_FLY + setflag FLAG_RECEIVED_HM_FLY return Route119_EventScript_RivalExitScottArrive:: diff --git a/data/maps/Route123/scripts.inc b/data/maps/Route123/scripts.inc index fe63661261..92cfa62768 100644 --- a/data/maps/Route123/scripts.inc +++ b/data/maps/Route123/scripts.inc @@ -9,14 +9,14 @@ Route123_OnTransition: Route123_EventScript_GigaDrainGirl:: lock faceplayer - goto_if_set FLAG_RECEIVED_TM19, Route123_EventScript_ReceivedGigaDrain + goto_if_set FLAG_RECEIVED_TM_GIGA_DRAIN, Route123_EventScript_ReceivedGigaDrain msgbox Route123_Text_LoveGrassMonsHaveAny, MSGBOX_DEFAULT special IsGrassTypeInParty goto_if_eq VAR_RESULT, FALSE, Route123_EventScript_NoGrassMons msgbox Route123_Text_YouLikeGrassMonsTooHaveThis, MSGBOX_DEFAULT - giveitem ITEM_TM19 + giveitem ITEM_TM_GIGA_DRAIN goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull - setflag FLAG_RECEIVED_TM19 + setflag FLAG_RECEIVED_TM_GIGA_DRAIN msgbox Route123_Text_CheckTreesWithMyGrassMon, MSGBOX_DEFAULT release end diff --git a/data/maps/RustboroCity_CuttersHouse/scripts.inc b/data/maps/RustboroCity_CuttersHouse/scripts.inc index f1d6030761..11cd0f608f 100644 --- a/data/maps/RustboroCity_CuttersHouse/scripts.inc +++ b/data/maps/RustboroCity_CuttersHouse/scripts.inc @@ -4,10 +4,10 @@ RustboroCity_CuttersHouse_MapScripts:: RustboroCity_CuttersHouse_EventScript_Cutter:: lock faceplayer - goto_if_set FLAG_RECEIVED_HM01, RustboroCity_CuttersHouse_EventScript_ExplainCut + goto_if_set FLAG_RECEIVED_HM_CUT, RustboroCity_CuttersHouse_EventScript_ExplainCut msgbox RustboroCity_CuttersHouse_Text_YouCanPutThisHMToGoodUse, MSGBOX_DEFAULT - giveitem ITEM_HM01 - setflag FLAG_RECEIVED_HM01 + giveitem ITEM_HM_CUT + setflag FLAG_RECEIVED_HM_CUT msgbox RustboroCity_CuttersHouse_Text_ExplainCut, MSGBOX_DEFAULT release end diff --git a/data/maps/RustboroCity_Gym/scripts.inc b/data/maps/RustboroCity_Gym/scripts.inc index e1596a9730..53ed0b20be 100644 --- a/data/maps/RustboroCity_Gym/scripts.inc +++ b/data/maps/RustboroCity_Gym/scripts.inc @@ -5,7 +5,7 @@ RustboroCity_Gym_EventScript_Roxanne:: trainerbattle_single TRAINER_ROXANNE_1, RustboroCity_Gym_Text_RoxanneIntro, RustboroCity_Gym_Text_RoxanneDefeat, RustboroCity_Gym_EventScript_RoxanneDefeated, NO_MUSIC specialvar VAR_RESULT, ShouldTryRematchBattle goto_if_eq VAR_RESULT, TRUE, RustboroCity_Gym_EventScript_RoxanneRematch - goto_if_unset FLAG_RECEIVED_TM39, RustboroCity_Gym_EventScript_GiveRockTomb + goto_if_unset FLAG_RECEIVED_TM_ROCK_TOMB, RustboroCity_Gym_EventScript_GiveRockTomb msgbox RustboroCity_Gym_Text_RoxannePostBattle, MSGBOX_DEFAULT release end @@ -26,9 +26,9 @@ RustboroCity_Gym_EventScript_RoxanneDefeated:: end RustboroCity_Gym_EventScript_GiveRockTomb:: - giveitem ITEM_TM39 + giveitem ITEM_TM_ROCK_TOMB goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull - setflag FLAG_RECEIVED_TM39 + setflag FLAG_RECEIVED_TM_ROCK_TOMB msgbox RustboroCity_Gym_Text_ExplainRockTomb, MSGBOX_DEFAULT release end diff --git a/data/maps/RusturfTunnel/scripts.inc b/data/maps/RusturfTunnel/scripts.inc index e7eee5817a..a705100956 100644 --- a/data/maps/RusturfTunnel/scripts.inc +++ b/data/maps/RusturfTunnel/scripts.inc @@ -62,8 +62,8 @@ RusturfTunnel_EventScript_ClearTunnelScene:: msgbox RusturfTunnel_Text_YouShatteredBoulderTakeHM, MSGBOX_DEFAULT call_if_eq VAR_TEMP_1, 2, RusturfTunnel_EventScript_WandasBoyfriendApproachPlayer call_if_eq VAR_TEMP_1, 3, RusturfTunnel_EventScript_WandasBoyfriendApproachPlayer - giveitem ITEM_HM04 - setflag FLAG_RECEIVED_HM04 + giveitem ITEM_HM_STRENGTH + setflag FLAG_RECEIVED_HM_STRENGTH msgbox RusturfTunnel_Text_ExplainStrength, MSGBOX_DEFAULT closemessage call_if_eq VAR_TEMP_1, 1, RusturfTunnel_EventScript_BoyfriendApproachWanda1 diff --git a/data/maps/SSTidalCorridor/scripts.inc b/data/maps/SSTidalCorridor/scripts.inc index b39b9a4336..0d425889a7 100644 --- a/data/maps/SSTidalCorridor/scripts.inc +++ b/data/maps/SSTidalCorridor/scripts.inc @@ -124,7 +124,7 @@ SSTidalCorridor_EventScript_ExitSailor:: SSTidalCorridor_EventScript_ExitLilycove:: setrespawn HEAL_LOCATION_LILYCOVE_CITY msgbox SSTidalCorridor_Text_WeveArrived, MSGBOX_DEFAULT - call_if_set FLAG_RECEIVED_TM49, SSTidalCorridor_EventScript_HideSnatchGiver + call_if_set FLAG_RECEIVED_TM_SNATCH, SSTidalCorridor_EventScript_HideSnatchGiver warp MAP_LILYCOVE_CITY_HARBOR, 8, 11 waitstate release @@ -133,7 +133,7 @@ SSTidalCorridor_EventScript_ExitLilycove:: SSTidalCorridor_EventScript_ExitSlateport:: setrespawn HEAL_LOCATION_SLATEPORT_CITY msgbox SSTidalCorridor_Text_WeveArrived, MSGBOX_DEFAULT - call_if_set FLAG_RECEIVED_TM49, SSTidalCorridor_EventScript_HideSnatchGiver + call_if_set FLAG_RECEIVED_TM_SNATCH, SSTidalCorridor_EventScript_HideSnatchGiver warp MAP_SLATEPORT_CITY_HARBOR, 8, 11 waitstate release diff --git a/data/maps/SSTidalRooms/scripts.inc b/data/maps/SSTidalRooms/scripts.inc index c3aa8ff8ab..53596ba838 100644 --- a/data/maps/SSTidalRooms/scripts.inc +++ b/data/maps/SSTidalRooms/scripts.inc @@ -4,11 +4,11 @@ SSTidalRooms_MapScripts:: SSTidalRooms_EventScript_SnatchGiver:: lock faceplayer - goto_if_set FLAG_RECEIVED_TM49, SSTidalRooms_EventScript_ExplainSnatch + goto_if_set FLAG_RECEIVED_TM_SNATCH, SSTidalRooms_EventScript_ExplainSnatch msgbox SSTidalRooms_Text_NotSuspiciousTakeThis, MSGBOX_DEFAULT - giveitem ITEM_TM49 + giveitem ITEM_TM_SNATCH goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull - setflag FLAG_RECEIVED_TM49 + setflag FLAG_RECEIVED_TM_SNATCH msgbox SSTidalRooms_Text_ExplainSnatch, MSGBOX_DEFAULT release end diff --git a/data/maps/SafariZone_Northwest/map.json b/data/maps/SafariZone_Northwest/map.json index 93f3d2a79c..f30ef030a0 100644 --- a/data/maps/SafariZone_Northwest/map.json +++ b/data/maps/SafariZone_Northwest/map.json @@ -48,8 +48,8 @@ "movement_range_y": 1, "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", - "script": "SafariZone_Northwest_EventScript_ItemTM22", - "flag": "FLAG_ITEM_SAFARI_ZONE_NORTH_WEST_TM22" + "script": "SafariZone_Northwest_EventScript_ItemTMSolarBeam", + "flag": "FLAG_ITEM_SAFARI_ZONE_NORTH_WEST_TM_SOLAR_BEAM" } ], "warp_events": [], diff --git a/data/maps/ScorchedSlab/map.json b/data/maps/ScorchedSlab/map.json index ca367b9215..5e0380b4e8 100644 --- a/data/maps/ScorchedSlab/map.json +++ b/data/maps/ScorchedSlab/map.json @@ -24,8 +24,8 @@ "movement_range_y": 0, "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", - "script": "ScorchedSlab_EventScript_ItemTM11", - "flag": "FLAG_ITEM_SCORCHED_SLAB_TM11" + "script": "ScorchedSlab_EventScript_ItemTMSunnyDay", + "flag": "FLAG_ITEM_SCORCHED_SLAB_TM_SUNNY_DAY" } ], "warp_events": [ diff --git a/data/maps/SeafloorCavern_Room9/map.json b/data/maps/SeafloorCavern_Room9/map.json index f191941a2b..04fb621df1 100644 --- a/data/maps/SeafloorCavern_Room9/map.json +++ b/data/maps/SeafloorCavern_Room9/map.json @@ -89,8 +89,8 @@ "movement_range_y": 1, "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", - "script": "SeafloorCavern_Room9_EventScript_ItemTM26", - "flag": "FLAG_ITEM_SEAFLOOR_CAVERN_ROOM_9_TM26" + "script": "SeafloorCavern_Room9_EventScript_ItemTMEarthquake", + "flag": "FLAG_ITEM_SEAFLOOR_CAVERN_ROOM_9_TM_EARTHQUAKE" }, { "graphics_id": "OBJ_EVENT_GFX_KYOGRE_ASLEEP", diff --git a/data/maps/ShoalCave_LowTideIceRoom/map.json b/data/maps/ShoalCave_LowTideIceRoom/map.json index f87f88227e..dffa6d0de8 100644 --- a/data/maps/ShoalCave_LowTideIceRoom/map.json +++ b/data/maps/ShoalCave_LowTideIceRoom/map.json @@ -24,8 +24,8 @@ "movement_range_y": 1, "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", - "script": "ShoalCave_LowTideIceRoom_EventScript_ItemTM07", - "flag": "FLAG_ITEM_SHOAL_CAVE_ICE_ROOM_TM07" + "script": "ShoalCave_LowTideIceRoom_EventScript_ItemTMHail", + "flag": "FLAG_ITEM_SHOAL_CAVE_ICE_ROOM_TM_HAIL" }, { "graphics_id": "OBJ_EVENT_GFX_ITEM_BALL", diff --git a/data/maps/SlateportCity/scripts.inc b/data/maps/SlateportCity/scripts.inc index 653f405c45..ae3910750e 100644 --- a/data/maps/SlateportCity/scripts.inc +++ b/data/maps/SlateportCity/scripts.inc @@ -566,8 +566,8 @@ SlateportCity_EventScript_PowerTMClerk:: .align 2 SlateportCity_Pokemart_PowerTMs: - .2byte ITEM_TM10 @ Hidden Power - .2byte ITEM_TM43 @ Secret Power + .2byte ITEM_TM_HIDDEN_POWER + .2byte ITEM_TM_SECRET_POWER .2byte ITEM_NONE release end diff --git a/data/maps/SlateportCity_BattleTentLobby/scripts.inc b/data/maps/SlateportCity_BattleTentLobby/scripts.inc index 0d3fae875f..cb1bae4132 100644 --- a/data/maps/SlateportCity_BattleTentLobby/scripts.inc +++ b/data/maps/SlateportCity_BattleTentLobby/scripts.inc @@ -199,11 +199,11 @@ SlateportCity_BattleTentLobby_Movement_UnusedEnterDoor:: SlateportCity_BattleTentLobby_EventScript_TormentGiver:: lock faceplayer - goto_if_set FLAG_RECEIVED_TM41, SlateportCity_BattleTentLobby_EventScript_ReceivedTorment + goto_if_set FLAG_RECEIVED_TM_TORMENT, SlateportCity_BattleTentLobby_EventScript_ReceivedTorment msgbox SlateportCity_BattleTentLobby_Text_CouldntFindMonForMe, MSGBOX_DEFAULT - giveitem ITEM_TM41 + giveitem ITEM_TM_TORMENT goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull - setflag FLAG_RECEIVED_TM41 + setflag FLAG_RECEIVED_TM_TORMENT msgbox SlateportCity_BattleTentLobby_Text_ExplainTorment, MSGBOX_DEFAULT release end diff --git a/data/maps/SlateportCity_OceanicMuseum_1F/scripts.inc b/data/maps/SlateportCity_OceanicMuseum_1F/scripts.inc index 96892f948d..8b464f73ae 100644 --- a/data/maps/SlateportCity_OceanicMuseum_1F/scripts.inc +++ b/data/maps/SlateportCity_OceanicMuseum_1F/scripts.inc @@ -151,9 +151,9 @@ SlateportCity_OceanicMuseum_1F_EventScript_FamiliarGrunt:: applymovement LOCALID_FAMILIAR_GRUNT, Common_Movement_Delay48 waitmovement 0 msgbox SlateportCity_OceanicMuseum_1F_Text_RememberMeTakeThis, MSGBOX_DEFAULT - giveitem ITEM_TM46 + giveitem ITEM_TM_THIEF goto_if_eq VAR_RESULT, 0, SlateportCity_OceanicMuseum_1F_EventScript_NoRoomForThief - setflag FLAG_RECEIVED_TM46 + setflag FLAG_RECEIVED_TM_THIEF msgbox SlateportCity_OceanicMuseum_1F_Text_HopeINeverSeeYouAgain, MSGBOX_DEFAULT closemessage goto_if_eq VAR_FACING, DIR_NORTH, SlateportCity_OceanicMuseum_1F_EventScript_FamiliarGruntExitNorth diff --git a/data/maps/SootopolisCity/scripts.inc b/data/maps/SootopolisCity/scripts.inc index 69f74880ec..16e2d03252 100644 --- a/data/maps/SootopolisCity/scripts.inc +++ b/data/maps/SootopolisCity/scripts.inc @@ -1300,7 +1300,7 @@ SootopolisCity_EventScript_Wallace:: lock faceplayer goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 4, SootopolisCity_EventScript_GoToSkyPillar - goto_if_set FLAG_RECEIVED_HM07, SootopolisCity_EventScript_GoToGym + goto_if_set FLAG_RECEIVED_HM_WATERFALL, SootopolisCity_EventScript_GoToGym goto_if_set FLAG_SOOTOPOLIS_ARCHIE_MAXIE_LEAVE, SootopolisCity_EventScript_GiveWaterfall msgbox SootopolisCity_Text_AquaMagmaDidntMeanHarm, MSGBOX_DEFAULT release @@ -1308,8 +1308,8 @@ SootopolisCity_EventScript_Wallace:: SootopolisCity_EventScript_GiveWaterfall:: msgbox SootopolisCity_Text_ThankYouForHelpAcceptThis, MSGBOX_DEFAULT - giveitem ITEM_HM07 - setflag FLAG_RECEIVED_HM07 + giveitem ITEM_HM_WATERFALL + setflag FLAG_RECEIVED_HM_WATERFALL msgbox SootopolisCity_Text_ExplainWaterfallGoToGym, MSGBOX_DEFAULT closemessage call_if_eq VAR_FACING, DIR_NORTH, SootopolisCity_EventScript_WallaceMoveFromGym diff --git a/data/maps/SootopolisCity_Gym_1F/scripts.inc b/data/maps/SootopolisCity_Gym_1F/scripts.inc index 7f739935b1..5ae8145299 100644 --- a/data/maps/SootopolisCity_Gym_1F/scripts.inc +++ b/data/maps/SootopolisCity_Gym_1F/scripts.inc @@ -83,7 +83,7 @@ SootopolisCity_Gym_1F_EventScript_Juan:: trainerbattle_single TRAINER_JUAN_1, SootopolisCity_Gym_1F_Text_JuanIntro, SootopolisCity_Gym_1F_Text_JuanDefeat, SootopolisCity_Gym_1F_EventScript_JuanDefeated, NO_MUSIC specialvar VAR_RESULT, ShouldTryRematchBattle goto_if_eq VAR_RESULT, TRUE, SootopolisCity_Gym_1F_EventScript_JuanRematch - goto_if_unset FLAG_RECEIVED_TM03, SootopolisCity_Gym_1F_EventScript_GiveWaterPulse2 + goto_if_unset FLAG_RECEIVED_TM_WATER_PULSE, SootopolisCity_Gym_1F_EventScript_GiveWaterPulse2 goto_if_unset FLAG_BADGE06_GET, SootopolisCity_Gym_1F_EventScript_GoGetFortreeBadge msgbox SootopolisCity_Gym_1F_Text_JuanPostBattle, MSGBOX_DEFAULT release @@ -116,17 +116,17 @@ SootopolisCity_Gym_1F_EventScript_JuanDefeated:: end SootopolisCity_Gym_1F_EventScript_GiveWaterPulse:: - giveitem ITEM_TM03 + giveitem ITEM_TM_WATER_PULSE goto_if_eq VAR_RESULT, FALSE, Common_EventScript_BagIsFull msgbox SootopolisCity_Gym_1F_Text_ExplainWaterPulse, MSGBOX_DEFAULT - setflag FLAG_RECEIVED_TM03 + setflag FLAG_RECEIVED_TM_WATER_PULSE return SootopolisCity_Gym_1F_EventScript_GiveWaterPulse2:: - giveitem ITEM_TM03 + giveitem ITEM_TM_WATER_PULSE goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull msgbox SootopolisCity_Gym_1F_Text_ExplainWaterPulse, MSGBOX_DEFAULT - setflag FLAG_RECEIVED_TM03 + setflag FLAG_RECEIVED_TM_WATER_PULSE release end diff --git a/data/maps/SootopolisCity_House1/scripts.inc b/data/maps/SootopolisCity_House1/scripts.inc index 40f22a9c1f..b298e51d53 100644 --- a/data/maps/SootopolisCity_House1/scripts.inc +++ b/data/maps/SootopolisCity_House1/scripts.inc @@ -4,11 +4,11 @@ SootopolisCity_House1_MapScripts:: SootopolisCity_House1_EventScript_BrickBreakBlackBelt:: lock faceplayer - goto_if_set FLAG_RECEIVED_TM31, SootopolisCity_House1_EventScript_ReceivedBrickBreak + goto_if_set FLAG_RECEIVED_TM_BRICK_BREAK, SootopolisCity_House1_EventScript_ReceivedBrickBreak msgbox SootopolisCity_House1_Text_DevelopedThisTM, MSGBOX_DEFAULT - giveitem ITEM_TM31 + giveitem ITEM_TM_BRICK_BREAK goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull - setflag FLAG_RECEIVED_TM31 + setflag FLAG_RECEIVED_TM_BRICK_BREAK msgbox SootopolisCity_House1_Text_ExplainBrickBreak, MSGBOX_DEFAULT release end diff --git a/data/maps/VerdanturfTown_BattleTentLobby/scripts.inc b/data/maps/VerdanturfTown_BattleTentLobby/scripts.inc index a78a6a78ed..7520c83f04 100644 --- a/data/maps/VerdanturfTown_BattleTentLobby/scripts.inc +++ b/data/maps/VerdanturfTown_BattleTentLobby/scripts.inc @@ -225,11 +225,11 @@ VerdanturfTown_BattleTentLobby_Movement_PlayerEnterDoor: VerdanturfTown_BattleTentLobby_EventScript_AttractGiver:: lock faceplayer - goto_if_set FLAG_RECEIVED_TM45, VerdanturfTown_BattleTentLobby_EventScript_ReceivedAttract + goto_if_set FLAG_RECEIVED_TM_ATTRACT, VerdanturfTown_BattleTentLobby_EventScript_ReceivedAttract msgbox VerdanturfTown_BattleTentLobby_Text_AttractionRunsDeep, MSGBOX_DEFAULT - giveitem ITEM_TM45 + giveitem ITEM_TM_ATTRACT goto_if_eq VAR_RESULT, 0, Common_EventScript_ShowBagIsFull - setflag FLAG_RECEIVED_TM45 + setflag FLAG_RECEIVED_TM_ATTRACT msgbox VerdanturfTown_BattleTentLobby_Text_AttractionMutual, MSGBOX_DEFAULT release end diff --git a/data/maps/VictoryRoad_B1F/map.json b/data/maps/VictoryRoad_B1F/map.json index 6f339a1c25..c6033354ce 100644 --- a/data/maps/VictoryRoad_B1F/map.json +++ b/data/maps/VictoryRoad_B1F/map.json @@ -245,8 +245,8 @@ "movement_range_y": 1, "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", - "script": "VictoryRoad_B1F_EventScript_ItemTM29", - "flag": "FLAG_ITEM_VICTORY_ROAD_B1F_TM29" + "script": "VictoryRoad_B1F_EventScript_ItemTMPsychic", + "flag": "FLAG_ITEM_VICTORY_ROAD_B1F_TM_PSYCHIC" }, { "graphics_id": "OBJ_EVENT_GFX_ITEM_BALL", diff --git a/data/scripts/item_ball_scripts.inc b/data/scripts/item_ball_scripts.inc index 683c383df5..9b5a2eead3 100644 --- a/data/scripts/item_ball_scripts.inc +++ b/data/scripts/item_ball_scripts.inc @@ -58,8 +58,8 @@ Route110_EventScript_ItemElixir:: finditem ITEM_ELIXIR end -Route111_EventScript_ItemTM37:: - finditem ITEM_TM37 +Route111_EventScript_ItemTMSandstorm:: + finditem ITEM_TM_SANDSTORM end Route111_EventScript_ItemStardust:: @@ -106,8 +106,8 @@ Route115_EventScript_ItemSuperPotion:: finditem ITEM_SUPER_POTION end -Route115_EventScript_ItemTM01:: - finditem ITEM_TM01 +Route115_EventScript_ItemTMFocusPunch:: + finditem ITEM_TM_FOCUS_PUNCH end Route115_EventScript_ItemIron:: @@ -374,12 +374,12 @@ FieryPath_EventScript_ItemFireStone:: finditem ITEM_FIRE_STONE end -FieryPath_EventScript_ItemTM06:: - finditem ITEM_TM06 +FieryPath_EventScript_ItemTMToxic:: + finditem ITEM_TM_TOXIC end -MeteorFalls_1F_1R_EventScript_ItemTM23:: - finditem ITEM_TM23 +MeteorFalls_1F_1R_EventScript_ItemTMIronTail:: + finditem ITEM_TM_IRON_TAIL end MeteorFalls_1F_1R_EventScript_ItemFullHeal:: @@ -394,8 +394,8 @@ MeteorFalls_1F_1R_EventScript_ItemPPUP:: finditem ITEM_PP_UP end -MeteorFalls_B1F_2R_EventScript_ItemTM02:: - finditem ITEM_TM02 +MeteorFalls_B1F_2R_EventScript_ItemTMDragonClaw:: + finditem ITEM_TM_DRAGON_CLAW end NewMauville_Inside_EventScript_ItemUltraBall:: @@ -430,8 +430,8 @@ AbandonedShip_Rooms2_B1F_EventScript_ItemDiveBall:: finditem ITEM_DIVE_BALL end -AbandonedShip_Room_B1F_EventScript_ItemTM13:: - finditem ITEM_TM13 +AbandonedShip_Room_B1F_EventScript_ItemTMIceBeam:: + finditem ITEM_TM_ICE_BEAM end AbandonedShip_Rooms2_1F_EventScript_ItemRevive:: @@ -454,16 +454,16 @@ AbandonedShip_HiddenFloorRooms_EventScript_ItemWaterStone:: finditem ITEM_WATER_STONE end -AbandonedShip_HiddenFloorRooms_EventScript_ItemTM18:: - finditem ITEM_TM18 +AbandonedShip_HiddenFloorRooms_EventScript_ItemTMRainDance:: + finditem ITEM_TM_RAIN_DANCE end -ScorchedSlab_EventScript_ItemTM11:: - finditem ITEM_TM11 +ScorchedSlab_EventScript_ItemTMSunnyDay:: + finditem ITEM_TM_SUNNY_DAY end -SafariZone_Northwest_EventScript_ItemTM22:: - finditem ITEM_TM22 +SafariZone_Northwest_EventScript_ItemTMSolarBeam:: + finditem ITEM_TM_SOLAR_BEAM end SafariZone_North_EventScript_ItemCalcium:: @@ -498,16 +498,16 @@ MtPyre_5F_EventScript_ItemLaxIncense:: finditem ITEM_LAX_INCENSE end -MtPyre_6F_EventScript_ItemTM30:: - finditem ITEM_TM30 +MtPyre_6F_EventScript_ItemTMShadowBall:: + finditem ITEM_TM_SHADOW_BALL end MtPyre_Exterior_EventScript_ItemMaxPotion:: finditem ITEM_MAX_POTION end -MtPyre_Exterior_EventScript_ItemTM48:: - finditem ITEM_TM48 +MtPyre_Exterior_EventScript_ItemTMSkillSwap:: + finditem ITEM_TM_SKILL_SWAP end AquaHideout_B1F_EventScript_ItemMasterBall:: @@ -554,16 +554,16 @@ ShoalCave_LowTideStairsRoom_EventScript_ItemIceHeal:: finditem ITEM_ICE_HEAL end -ShoalCave_LowTideIceRoom_EventScript_ItemTM07:: - finditem ITEM_TM07 +ShoalCave_LowTideIceRoom_EventScript_ItemTMHail:: + finditem ITEM_TM_HAIL end ShoalCave_LowTideIceRoom_EventScript_ItemNeverMeltIce:: finditem ITEM_NEVER_MELT_ICE end -SeafloorCavern_Room9_EventScript_ItemTM26:: - finditem ITEM_TM26 +SeafloorCavern_Room9_EventScript_ItemTMEarthquake:: + finditem ITEM_TM_EARTHQUAKE end Route110_TrickHousePuzzle1_EventScript_ItemOrangeMail:: @@ -610,8 +610,8 @@ VictoryRoad_1F_EventScript_ItemPPUp:: finditem ITEM_PP_UP end -VictoryRoad_B1F_EventScript_ItemTM29:: - finditem ITEM_TM29 +VictoryRoad_B1F_EventScript_ItemTMPsychic:: + finditem ITEM_TM_PSYCHIC end VictoryRoad_B1F_EventScript_ItemFullRestore:: diff --git a/data/scripts/secret_power_tm.inc b/data/scripts/secret_power_tm.inc index 11a5d5b668..58ddc8ce55 100644 --- a/data/scripts/secret_power_tm.inc +++ b/data/scripts/secret_power_tm.inc @@ -43,7 +43,7 @@ Route111_EventScript_SecretPowerMan:: end Route111_EventScript_GiveSecretPower:: - giveitem ITEM_TM43 + giveitem ITEM_TM_SECRET_POWER goto_if_eq VAR_RESULT, FALSE, Route111_EventScript_NoRoomForSecretPower msgbox Route111_Text_ExplainSecretPower, MSGBOX_DEFAULT closemessage diff --git a/include/constants/flags.h b/include/constants/flags.h index 59bde846c5..2bcb39d8dd 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -121,11 +121,11 @@ #define FLAG_UNUSED_0x068 0x68 // Unused Flag #define FLAG_OCEANIC_MUSEUM_MET_REPORTER 0x69 -#define FLAG_RECEIVED_HM04 0x6A -#define FLAG_RECEIVED_HM06 0x6B +#define FLAG_RECEIVED_HM_STRENGTH 0x6A +#define FLAG_RECEIVED_HM_ROCK_SMASH 0x6B #define FLAG_WHITEOUT_TO_LAVARIDGE 0x6C // Set after defeating Flannery, so the player cant white out from poison before receiving Go Goggles -#define FLAG_RECEIVED_HM05 0x6D -#define FLAG_RECEIVED_HM02 0x6E +#define FLAG_RECEIVED_HM_FLASH 0x6D +#define FLAG_RECEIVED_HM_FLY 0x6E #define FLAG_GROUDON_AWAKENED_MAGMA_HIDEOUT 0x6F #define FLAG_TEAM_AQUA_ESCAPED_IN_SUBMARINE 0x70 #define FLAG_UNUSED_RS_LEGENDARY_BATTLE_DONE 0x71 // Unused Flag. Used in R/S to indicate whether player defeated or caught Groudon/Kyogre in Cave of Origin. @@ -138,9 +138,9 @@ #define FLAG_CANCEL_BATTLE_ROOM_CHALLENGE 0x77 #define FLAG_LANDMARK_MIRAGE_TOWER 0x78 -#define FLAG_RECEIVED_TM31 0x79 -#define FLAG_RECEIVED_HM03 0x7A -#define FLAG_RECEIVED_HM08 0x7B +#define FLAG_RECEIVED_TM_BRICK_BREAK 0x79 +#define FLAG_RECEIVED_HM_SURF 0x7A +#define FLAG_RECEIVED_HM_DIVE 0x7B #define FLAG_REGISTER_RIVAL_POKENAV 0x7C #define FLAG_DEFEATED_RIVAL_ROUTE_104 0x7D #define FLAG_DEFEATED_WALLY_VICTORY_ROAD 0x7E @@ -154,7 +154,7 @@ #define FLAG_PENDING_DAYCARE_EGG 0x86 #define FLAG_THANKED_FOR_PLAYING_WITH_WALLY 0x87 #define FLAG_ENABLE_FIRST_WALLY_POKENAV_CALL 0x88 // Set after defeating Wally outside Mauville Gym. Will activate a call later to register Wally. -#define FLAG_RECEIVED_HM01 0x89 +#define FLAG_RECEIVED_HM_CUT 0x89 #define FLAG_SCOTT_CALL_FORTREE_GYM 0x8A // Triggers call from Scott after defeating Winona #define FLAG_DEFEATED_EVIL_TEAM_MT_CHIMNEY 0x8B #define FLAG_RECEIVED_6_SODA_POP 0x8C @@ -182,14 +182,14 @@ #define FLAG_CUTE_PAINTING_MADE 0xA2 #define FLAG_SMART_PAINTING_MADE 0xA3 #define FLAG_TOUGH_PAINTING_MADE 0xA4 -#define FLAG_RECEIVED_TM39 0xA5 -#define FLAG_RECEIVED_TM08 0xA6 -#define FLAG_RECEIVED_TM34 0xA7 -#define FLAG_RECEIVED_TM50 0xA8 -#define FLAG_RECEIVED_TM42 0xA9 -#define FLAG_RECEIVED_TM40 0xAA -#define FLAG_RECEIVED_TM04 0xAB -#define FLAG_RECEIVED_TM03 0xAC +#define FLAG_RECEIVED_TM_ROCK_TOMB 0xA5 +#define FLAG_RECEIVED_TM_BULK_UP 0xA6 +#define FLAG_RECEIVED_TM_SHOCK_WAVE 0xA7 +#define FLAG_RECEIVED_TM_OVERHEAT 0xA8 +#define FLAG_RECEIVED_TM_FACADE 0xA9 +#define FLAG_RECEIVED_TM_AERIAL_ACE 0xAA +#define FLAG_RECEIVED_TM_CALM_MIND 0xAB +#define FLAG_RECEIVED_TM_WATER_PULSE 0xAC #define FLAG_HIDE_SECRET_BASE_TRAINER 0xAD #define FLAG_DECORATION_1 0xAE #define FLAG_DECORATION_2 0xAF @@ -226,7 +226,7 @@ #define FLAG_ENCOUNTERED_LATIAS_OR_LATIOS 0xCE #define FLAG_MET_ARCHIE_METEOR_FALLS 0xCF #define FLAG_GOT_BASEMENT_KEY_FROM_WATTSON 0xD0 -#define FLAG_GOT_TM24_FROM_WATTSON 0xD1 +#define FLAG_GOT_TM_THUNDERBOLT_FROM_WATTSON 0xD1 #define FLAG_FAN_CLUB_STRENGTH_SHARED 0xD2 // Set when you rate the strength of another trainer in Lilycove's Trainer Fan Club. #define FLAG_DEFEATED_RIVAL_RUSTBORO 0xD3 #define FLAG_RECEIVED_RED_OR_BLUE_ORB 0xD4 @@ -248,15 +248,15 @@ #define FLAG_RECEIVED_STARTER_DOLL 0xE2 #define FLAG_RECEIVED_GOOD_ROD 0xE3 #define FLAG_REGI_DOORS_OPENED 0xE4 -#define FLAG_RECEIVED_TM27 0xE5 -#define FLAG_RECEIVED_TM36 0xE6 -#define FLAG_RECEIVED_TM05 0xE7 -#define FLAG_RECEIVED_TM19 0xE8 +#define FLAG_RECEIVED_TM_RETURN 0xE5 +#define FLAG_RECEIVED_TM_SLUDGE_BOMB 0xE6 +#define FLAG_RECEIVED_TM_ROAR 0xE7 +#define FLAG_RECEIVED_TM_GIGA_DRAIN 0xE8 #define FLAG_UNUSED_0x0E9 0xE9 // Unused Flag -#define FLAG_RECEIVED_TM44 0xEA -#define FLAG_RECEIVED_TM45 0xEB +#define FLAG_RECEIVED_TM_REST 0xEA +#define FLAG_RECEIVED_TM_ATTRACT 0xEB #define FLAG_RECEIVED_GLASS_ORNAMENT 0xEC #define FLAG_RECEIVED_SILVER_SHIELD 0xED #define FLAG_RECEIVED_GOLD_SHIELD 0xEE @@ -281,16 +281,16 @@ #define FLAG_RECEIVED_OLD_ROD 0x101 #define FLAG_RECEIVED_COIN_CASE 0x102 #define FLAG_RETURNED_RED_OR_BLUE_ORB 0x103 -#define FLAG_RECEIVED_TM49 0x104 -#define FLAG_RECEIVED_TM28 0x105 -#define FLAG_RECEIVED_TM09 0x106 +#define FLAG_RECEIVED_TM_SNATCH 0x104 +#define FLAG_RECEIVED_TM_DIG 0x105 +#define FLAG_RECEIVED_TM_BULLET_SEED 0x106 #define FLAG_ENTERED_ELITE_FOUR 0x107 -#define FLAG_RECEIVED_TM10 0x108 -#define FLAG_RECEIVED_TM41 0x109 +#define FLAG_RECEIVED_TM_HIDDEN_POWER 0x108 +#define FLAG_RECEIVED_TM_TORMENT 0x109 #define FLAG_RECEIVED_LAVARIDGE_EGG 0x10A #define FLAG_RECEIVED_REVIVED_FOSSIL_MON 0x10B #define FLAG_SECRET_BASE_REGISTRY_ENABLED 0x10C -#define FLAG_RECEIVED_TM46 0x10D +#define FLAG_RECEIVED_TM_THIEF 0x10D #define FLAG_CONTEST_SKETCH_CREATED 0x10E // Set but never read #define FLAG_EVIL_TEAM_ESCAPED_STERN_SPOKE 0x10F #define FLAG_RECEIVED_EXP_SHARE 0x110 @@ -333,7 +333,7 @@ #define FLAG_MET_MAXIE_SOOTOPOLIS 0x135 #define FLAG_MET_SCOTT_RUSTBORO 0x136 #define FLAG_WALLACE_GOES_TO_SKY_PILLAR 0x137 // Set after speaking to Wallace within the Cave of Origin. -#define FLAG_RECEIVED_HM07 0x138 +#define FLAG_RECEIVED_HM_WATERFALL 0x138 #define FLAG_BEAT_MAGMA_GRUNT_JAGGED_PASS 0x139 #define FLAG_RECEIVED_AURORA_TICKET 0x13A #define FLAG_RECEIVED_MYSTIC_TICKET 0x13B @@ -568,7 +568,7 @@ #define FLAG_HIDDEN_ITEM_LILYCOVE_CITY_HEART_SCALE (FLAG_HIDDEN_ITEMS_START + 0x1B) #define FLAG_HIDDEN_ITEM_FALLARBOR_TOWN_NUGGET (FLAG_HIDDEN_ITEMS_START + 0x1C) #define FLAG_HIDDEN_ITEM_MT_PYRE_EXTERIOR_ULTRA_BALL (FLAG_HIDDEN_ITEMS_START + 0x1D) -#define FLAG_HIDDEN_ITEM_ROUTE_113_TM32 (FLAG_HIDDEN_ITEMS_START + 0x1E) +#define FLAG_HIDDEN_ITEM_ROUTE_113_TM_DOUBLE_TEAM (FLAG_HIDDEN_ITEMS_START + 0x1E) #define FLAG_HIDDEN_ITEM_ABANDONED_SHIP_RM_1_KEY (FLAG_HIDDEN_ITEMS_START + 0x1F) #define FLAG_HIDDEN_ITEM_ABANDONED_SHIP_RM_2_KEY (FLAG_HIDDEN_ITEMS_START + 0x20) #define FLAG_HIDDEN_ITEM_ABANDONED_SHIP_RM_4_KEY (FLAG_HIDDEN_ITEMS_START + 0x21) @@ -1053,7 +1053,7 @@ #define FLAG_ITEM_ROUTE_109_PP_UP 0x3ED #define FLAG_ITEM_ROUTE_110_RARE_CANDY 0x3EE #define FLAG_ITEM_ROUTE_110_DIRE_HIT 0x3EF -#define FLAG_ITEM_ROUTE_111_TM37 0x3F0 +#define FLAG_ITEM_ROUTE_111_TM_SANDSTORM 0x3F0 #define FLAG_ITEM_ROUTE_111_STARDUST 0x3F1 #define FLAG_ITEM_ROUTE_111_HP_UP 0x3F2 #define FLAG_ITEM_ROUTE_112_NUGGET 0x3F3 @@ -1062,7 +1062,7 @@ #define FLAG_ITEM_ROUTE_114_RARE_CANDY 0x3F6 #define FLAG_ITEM_ROUTE_114_PROTEIN 0x3F7 #define FLAG_ITEM_ROUTE_115_SUPER_POTION 0x3F8 -#define FLAG_ITEM_ROUTE_115_TM01 0x3F9 +#define FLAG_ITEM_ROUTE_115_TM_FOCUS_PUNCH 0x3F9 #define FLAG_ITEM_ROUTE_115_IRON 0x3FA #define FLAG_ITEM_ROUTE_116_ETHER 0x3FB #define FLAG_ITEM_ROUTE_116_REPEL 0x3FC @@ -1089,7 +1089,7 @@ #define FLAG_ITEM_RUSTBORO_CITY_X_DEFEND 0x411 #define FLAG_ITEM_LILYCOVE_CITY_MAX_REPEL 0x412 #define FLAG_ITEM_MOSSDEEP_CITY_NET_BALL 0x413 -#define FLAG_ITEM_METEOR_FALLS_1F_1R_TM23 0x414 +#define FLAG_ITEM_METEOR_FALLS_1F_1R_TM_IRON_TAIL 0x414 #define FLAG_ITEM_METEOR_FALLS_1F_1R_FULL_HEAL 0x415 #define FLAG_ITEM_METEOR_FALLS_1F_1R_MOON_STONE 0x416 #define FLAG_ITEM_METEOR_FALLS_1F_1R_PP_UP 0x417 @@ -1119,35 +1119,35 @@ #define FLAG_ITEM_AQUA_HIDEOUT_B1F_MAX_ELIXIR 0x42F #define FLAG_ITEM_AQUA_HIDEOUT_B2F_NEST_BALL 0x430 #define FLAG_ITEM_MT_PYRE_EXTERIOR_MAX_POTION 0x431 -#define FLAG_ITEM_MT_PYRE_EXTERIOR_TM48 0x432 +#define FLAG_ITEM_MT_PYRE_EXTERIOR_TM_SKILL_SWAP 0x432 #define FLAG_ITEM_NEW_MAUVILLE_ULTRA_BALL 0x433 #define FLAG_ITEM_NEW_MAUVILLE_ESCAPE_ROPE 0x434 #define FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_6_LUXURY_BALL 0x435 #define FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_2_SCANNER 0x436 -#define FLAG_ITEM_SCORCHED_SLAB_TM11 0x437 -#define FLAG_ITEM_METEOR_FALLS_B1F_2R_TM02 0x438 +#define FLAG_ITEM_SCORCHED_SLAB_TM_SUNNY_DAY 0x437 +#define FLAG_ITEM_METEOR_FALLS_B1F_2R_TM_DRAGON_CLAW 0x438 #define FLAG_ITEM_SHOAL_CAVE_ENTRANCE_BIG_PEARL 0x439 #define FLAG_ITEM_SHOAL_CAVE_INNER_ROOM_RARE_CANDY 0x43A #define FLAG_ITEM_SHOAL_CAVE_STAIRS_ROOM_ICE_HEAL 0x43B #define FLAG_ITEM_VICTORY_ROAD_1F_MAX_ELIXIR 0x43C #define FLAG_ITEM_VICTORY_ROAD_1F_PP_UP 0x43D -#define FLAG_ITEM_VICTORY_ROAD_B1F_TM29 0x43E +#define FLAG_ITEM_VICTORY_ROAD_B1F_TM_PSYCHIC 0x43E #define FLAG_ITEM_VICTORY_ROAD_B1F_FULL_RESTORE 0x43F #define FLAG_ITEM_VICTORY_ROAD_B2F_FULL_HEAL 0x440 -#define FLAG_ITEM_MT_PYRE_6F_TM30 0x441 -#define FLAG_ITEM_SEAFLOOR_CAVERN_ROOM_9_TM26 0x442 -#define FLAG_ITEM_FIERY_PATH_TM06 0x443 +#define FLAG_ITEM_MT_PYRE_6F_TM_SHADOW_BALL 0x441 +#define FLAG_ITEM_SEAFLOOR_CAVERN_ROOM_9_TM_EARTHQUAKE 0x442 +#define FLAG_ITEM_FIERY_PATH_TM_TOXIC 0x443 #define FLAG_ITEM_ROUTE_124_RED_SHARD 0x444 #define FLAG_ITEM_ROUTE_124_BLUE_SHARD 0x445 -#define FLAG_ITEM_SAFARI_ZONE_NORTH_WEST_TM22 0x446 +#define FLAG_ITEM_SAFARI_ZONE_NORTH_WEST_TM_SOLAR_BEAM 0x446 #define FLAG_ITEM_ABANDONED_SHIP_ROOMS_1F_HARBOR_MAIL 0x447 #define FLAG_ITEM_ABANDONED_SHIP_ROOMS_B1F_ESCAPE_ROPE 0x448 #define FLAG_ITEM_ABANDONED_SHIP_ROOMS_2_B1F_DIVE_BALL 0x449 -#define FLAG_ITEM_ABANDONED_SHIP_ROOMS_B1F_TM13 0x44A +#define FLAG_ITEM_ABANDONED_SHIP_ROOMS_B1F_TM_ICE_BEAM 0x44A #define FLAG_ITEM_ABANDONED_SHIP_ROOMS_2_1F_REVIVE 0x44B #define FLAG_ITEM_ABANDONED_SHIP_CAPTAINS_OFFICE_STORAGE_KEY 0x44C #define FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_3_WATER_STONE 0x44D -#define FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_1_TM18 0x44E +#define FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_1_TM_RAIN_DANCE 0x44E #define FLAG_ITEM_ROUTE_121_CARBOS 0x44F #define FLAG_ITEM_ROUTE_123_ULTRA_BALL 0x450 #define FLAG_ITEM_ROUTE_126_GREEN_SHARD 0x451 @@ -1157,7 +1157,7 @@ #define FLAG_ITEM_ROUTE_123_ELIXIR 0x455 #define FLAG_ITEM_NEW_MAUVILLE_THUNDER_STONE 0x456 #define FLAG_ITEM_FIERY_PATH_FIRE_STONE 0x457 -#define FLAG_ITEM_SHOAL_CAVE_ICE_ROOM_TM07 0x458 +#define FLAG_ITEM_SHOAL_CAVE_ICE_ROOM_TM_HAIL 0x458 #define FLAG_ITEM_SHOAL_CAVE_ICE_ROOM_NEVER_MELT_ICE 0x459 #define FLAG_ITEM_ROUTE_103_GUARD_SPEC 0x45A #define FLAG_ITEM_ROUTE_104_X_ACCURACY 0x45B diff --git a/include/constants/items.h b/include/constants/items.h index daf129c76f..63cbfe6b97 100644 --- a/include/constants/items.h +++ b/include/constants/items.h @@ -381,65 +381,6 @@ #define ITEM_HM07 345 #define ITEM_HM08 346 -#define ITEM_TM01_FOCUS_PUNCH ITEM_TM01 -#define ITEM_TM02_DRAGON_CLAW ITEM_TM02 -#define ITEM_TM03_WATER_PULSE ITEM_TM03 -#define ITEM_TM04_CALM_MIND ITEM_TM04 -#define ITEM_TM05_ROAR ITEM_TM05 -#define ITEM_TM06_TOXIC ITEM_TM06 -#define ITEM_TM07_HAIL ITEM_TM07 -#define ITEM_TM08_BULK_UP ITEM_TM08 -#define ITEM_TM09_BULLET_SEED ITEM_TM09 -#define ITEM_TM10_HIDDEN_POWER ITEM_TM10 -#define ITEM_TM11_SUNNY_DAY ITEM_TM11 -#define ITEM_TM12_TAUNT ITEM_TM12 -#define ITEM_TM13_ICE_BEAM ITEM_TM13 -#define ITEM_TM14_BLIZZARD ITEM_TM14 -#define ITEM_TM15_HYPER_BEAM ITEM_TM15 -#define ITEM_TM16_LIGHT_SCREEN ITEM_TM16 -#define ITEM_TM17_PROTECT ITEM_TM17 -#define ITEM_TM18_RAIN_DANCE ITEM_TM18 -#define ITEM_TM19_GIGA_DRAIN ITEM_TM19 -#define ITEM_TM20_SAFEGUARD ITEM_TM20 -#define ITEM_TM21_FRUSTRATION ITEM_TM21 -#define ITEM_TM22_SOLAR_BEAM ITEM_TM22 -#define ITEM_TM23_IRON_TAIL ITEM_TM23 -#define ITEM_TM24_THUNDERBOLT ITEM_TM24 -#define ITEM_TM25_THUNDER ITEM_TM25 -#define ITEM_TM26_EARTHQUAKE ITEM_TM26 -#define ITEM_TM27_RETURN ITEM_TM27 -#define ITEM_TM28_DIG ITEM_TM28 -#define ITEM_TM29_PSYCHIC ITEM_TM29 -#define ITEM_TM30_SHADOW_BALL ITEM_TM30 -#define ITEM_TM31_BRICK_BREAK ITEM_TM31 -#define ITEM_TM32_DOUBLE_TEAM ITEM_TM32 -#define ITEM_TM33_REFLECT ITEM_TM33 -#define ITEM_TM34_SHOCK_WAVE ITEM_TM34 -#define ITEM_TM35_FLAMETHROWER ITEM_TM35 -#define ITEM_TM36_SLUDGE_BOMB ITEM_TM36 -#define ITEM_TM37_SANDSTORM ITEM_TM37 -#define ITEM_TM38_FIRE_BLAST ITEM_TM38 -#define ITEM_TM39_ROCK_TOMB ITEM_TM39 -#define ITEM_TM40_AERIAL_ACE ITEM_TM40 -#define ITEM_TM41_TORMENT ITEM_TM41 -#define ITEM_TM42_FACADE ITEM_TM42 -#define ITEM_TM43_SECRET_POWER ITEM_TM43 -#define ITEM_TM44_REST ITEM_TM44 -#define ITEM_TM45_ATTRACT ITEM_TM45 -#define ITEM_TM46_THIEF ITEM_TM46 -#define ITEM_TM47_STEEL_WING ITEM_TM47 -#define ITEM_TM48_SKILL_SWAP ITEM_TM48 -#define ITEM_TM49_SNATCH ITEM_TM49 -#define ITEM_TM50_OVERHEAT ITEM_TM50 -#define ITEM_HM01_CUT ITEM_HM01 -#define ITEM_HM02_FLY ITEM_HM02 -#define ITEM_HM03_SURF ITEM_HM03 -#define ITEM_HM04_STRENGTH ITEM_HM04 -#define ITEM_HM05_FLASH ITEM_HM05 -#define ITEM_HM06_ROCK_SMASH ITEM_HM06 -#define ITEM_HM07_WATERFALL ITEM_HM07 -#define ITEM_HM08_DIVE ITEM_HM08 - // Unknown #define ITEM_15B 347 #define ITEM_15C 348 diff --git a/include/constants/tms_hms.h b/include/constants/tms_hms.h new file mode 100644 index 0000000000..03fb934139 --- /dev/null +++ b/include/constants/tms_hms.h @@ -0,0 +1,70 @@ +#ifndef GUARD_CONSTANTS_TMS_HMS_H +#define GUARD_CONSTANTS_TMS_HMS_H + +#define FOREACH_TM(F) \ + F(FOCUS_PUNCH) \ + F(DRAGON_CLAW) \ + F(WATER_PULSE) \ + F(CALM_MIND) \ + F(ROAR) \ + F(TOXIC) \ + F(HAIL) \ + F(BULK_UP) \ + F(BULLET_SEED) \ + F(HIDDEN_POWER) \ + F(SUNNY_DAY) \ + F(TAUNT) \ + F(ICE_BEAM) \ + F(BLIZZARD) \ + F(HYPER_BEAM) \ + F(LIGHT_SCREEN) \ + F(PROTECT) \ + F(RAIN_DANCE) \ + F(GIGA_DRAIN) \ + F(SAFEGUARD) \ + F(FRUSTRATION) \ + F(SOLAR_BEAM) \ + F(IRON_TAIL) \ + F(THUNDERBOLT) \ + F(THUNDER) \ + F(EARTHQUAKE) \ + F(RETURN) \ + F(DIG) \ + F(PSYCHIC) \ + F(SHADOW_BALL) \ + F(BRICK_BREAK) \ + F(DOUBLE_TEAM) \ + F(REFLECT) \ + F(SHOCK_WAVE) \ + F(FLAMETHROWER) \ + F(SLUDGE_BOMB) \ + F(SANDSTORM) \ + F(FIRE_BLAST) \ + F(ROCK_TOMB) \ + F(AERIAL_ACE) \ + F(TORMENT) \ + F(FACADE) \ + F(SECRET_POWER) \ + F(REST) \ + F(ATTRACT) \ + F(THIEF) \ + F(STEEL_WING) \ + F(SKILL_SWAP) \ + F(SNATCH) \ + F(OVERHEAT) + +#define FOREACH_HM(F) \ + F(CUT) \ + F(FLY) \ + F(SURF) \ + F(STRENGTH) \ + F(FLASH) \ + F(ROCK_SMASH) \ + F(WATERFALL) \ + F(DIVE) + +#define FOREACH_TMHM(F) \ + FOREACH_TM(F) \ + FOREACH_HM(F) + +#endif diff --git a/include/item.h b/include/item.h index c964e7628a..af8ff8b9d0 100644 --- a/include/item.h +++ b/include/item.h @@ -2,6 +2,8 @@ #define GUARD_ITEM_H #include "constants/item.h" +#include "constants/items.h" +#include "constants/tms_hms.h" typedef void (*ItemUseFunc)(u8); @@ -74,4 +76,25 @@ u8 ItemId_GetBattleUsage(u16 itemId); ItemUseFunc ItemId_GetBattleFunc(u16 itemId); u8 ItemId_GetSecondaryId(u16 itemId); +/* Expands to: + * enum + * { + * ITEM_TM_FOCUS_PUNCH, + * ... + * ITEM_HM_CUT, + * ... + * }; */ +#define ENUM_TM(id) CAT(ITEM_TM_, id), +#define ENUM_HM(id) CAT(ITEM_HM_, id), +enum +{ + ENUM_TM_START_ = ITEM_TM01 - 1, + FOREACH_TM(ENUM_TM) + + ENUM_HM_START_ = ITEM_HM01 - 1, + FOREACH_HM(ENUM_HM) +}; +#undef ENUM_TM +#undef ENUM_HM + #endif // GUARD_ITEM_H diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index bf9197a0e8..bcec87988a 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -811,11 +811,11 @@ static const u16 sRarePickupItems[] = ITEM_FULL_RESTORE, ITEM_ETHER, ITEM_WHITE_HERB, - ITEM_TM44_REST, + ITEM_TM_REST, ITEM_ELIXIR, - ITEM_TM01_FOCUS_PUNCH, + ITEM_TM_FOCUS_PUNCH, ITEM_LEFTOVERS, - ITEM_TM26_EARTHQUAKE, + ITEM_TM_EARTHQUAKE, }; static const u8 sPickupProbabilities[] = diff --git a/src/data/items.h b/src/data/items.h index 072ec1bf5e..27326e07f9 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -3513,10 +3513,10 @@ const struct Item gItems[] = // TMs/HMs - [ITEM_TM01_FOCUS_PUNCH] = + [ITEM_TM_FOCUS_PUNCH] = { .name = _("TM01"), - .itemId = ITEM_TM01_FOCUS_PUNCH, + .itemId = ITEM_TM01, .price = 3000, .description = sTM01Desc, .pocket = POCKET_TM_HM, @@ -3524,10 +3524,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM02_DRAGON_CLAW] = + [ITEM_TM_DRAGON_CLAW] = { .name = _("TM02"), - .itemId = ITEM_TM02_DRAGON_CLAW, + .itemId = ITEM_TM02, .price = 3000, .description = sTM02Desc, .pocket = POCKET_TM_HM, @@ -3535,10 +3535,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM03_WATER_PULSE] = + [ITEM_TM_WATER_PULSE] = { .name = _("TM03"), - .itemId = ITEM_TM03_WATER_PULSE, + .itemId = ITEM_TM03, .price = 3000, .description = sTM03Desc, .pocket = POCKET_TM_HM, @@ -3546,10 +3546,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM04_CALM_MIND] = + [ITEM_TM_CALM_MIND] = { .name = _("TM04"), - .itemId = ITEM_TM04_CALM_MIND, + .itemId = ITEM_TM04, .price = 3000, .description = sTM04Desc, .pocket = POCKET_TM_HM, @@ -3557,10 +3557,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM05_ROAR] = + [ITEM_TM_ROAR] = { .name = _("TM05"), - .itemId = ITEM_TM05_ROAR, + .itemId = ITEM_TM05, .price = 1000, .description = sTM05Desc, .pocket = POCKET_TM_HM, @@ -3568,10 +3568,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM06_TOXIC] = + [ITEM_TM_TOXIC] = { .name = _("TM06"), - .itemId = ITEM_TM06_TOXIC, + .itemId = ITEM_TM06, .price = 3000, .description = sTM06Desc, .pocket = POCKET_TM_HM, @@ -3579,10 +3579,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM07_HAIL] = + [ITEM_TM_HAIL] = { .name = _("TM07"), - .itemId = ITEM_TM07_HAIL, + .itemId = ITEM_TM07, .price = 3000, .description = sTM07Desc, .pocket = POCKET_TM_HM, @@ -3590,10 +3590,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM08_BULK_UP] = + [ITEM_TM_BULK_UP] = { .name = _("TM08"), - .itemId = ITEM_TM08_BULK_UP, + .itemId = ITEM_TM08, .price = 3000, .description = sTM08Desc, .pocket = POCKET_TM_HM, @@ -3601,10 +3601,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM09_BULLET_SEED] = + [ITEM_TM_BULLET_SEED] = { .name = _("TM09"), - .itemId = ITEM_TM09_BULLET_SEED, + .itemId = ITEM_TM09, .price = 3000, .description = sTM09Desc, .pocket = POCKET_TM_HM, @@ -3612,10 +3612,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM10_HIDDEN_POWER] = + [ITEM_TM_HIDDEN_POWER] = { .name = _("TM10"), - .itemId = ITEM_TM10_HIDDEN_POWER, + .itemId = ITEM_TM10, .price = 3000, .description = sTM10Desc, .pocket = POCKET_TM_HM, @@ -3623,10 +3623,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM11_SUNNY_DAY] = + [ITEM_TM_SUNNY_DAY] = { .name = _("TM11"), - .itemId = ITEM_TM11_SUNNY_DAY, + .itemId = ITEM_TM11, .price = 2000, .description = sTM11Desc, .pocket = POCKET_TM_HM, @@ -3634,10 +3634,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM12_TAUNT] = + [ITEM_TM_TAUNT] = { .name = _("TM12"), - .itemId = ITEM_TM12_TAUNT, + .itemId = ITEM_TM12, .price = 3000, .description = sTM12Desc, .pocket = POCKET_TM_HM, @@ -3645,10 +3645,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM13_ICE_BEAM] = + [ITEM_TM_ICE_BEAM] = { .name = _("TM13"), - .itemId = ITEM_TM13_ICE_BEAM, + .itemId = ITEM_TM13, .price = 3000, .description = sTM13Desc, .pocket = POCKET_TM_HM, @@ -3656,10 +3656,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM14_BLIZZARD] = + [ITEM_TM_BLIZZARD] = { .name = _("TM14"), - .itemId = ITEM_TM14_BLIZZARD, + .itemId = ITEM_TM14, .price = 5500, .description = sTM14Desc, .pocket = POCKET_TM_HM, @@ -3667,10 +3667,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM15_HYPER_BEAM] = + [ITEM_TM_HYPER_BEAM] = { .name = _("TM15"), - .itemId = ITEM_TM15_HYPER_BEAM, + .itemId = ITEM_TM15, .price = 7500, .description = sTM15Desc, .pocket = POCKET_TM_HM, @@ -3678,10 +3678,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM16_LIGHT_SCREEN] = + [ITEM_TM_LIGHT_SCREEN] = { .name = _("TM16"), - .itemId = ITEM_TM16_LIGHT_SCREEN, + .itemId = ITEM_TM16, .price = 3000, .description = sTM16Desc, .pocket = POCKET_TM_HM, @@ -3689,10 +3689,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM17_PROTECT] = + [ITEM_TM_PROTECT] = { .name = _("TM17"), - .itemId = ITEM_TM17_PROTECT, + .itemId = ITEM_TM17, .price = 3000, .description = sTM17Desc, .pocket = POCKET_TM_HM, @@ -3700,10 +3700,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM18_RAIN_DANCE] = + [ITEM_TM_RAIN_DANCE] = { .name = _("TM18"), - .itemId = ITEM_TM18_RAIN_DANCE, + .itemId = ITEM_TM18, .price = 2000, .description = sTM18Desc, .pocket = POCKET_TM_HM, @@ -3711,10 +3711,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM19_GIGA_DRAIN] = + [ITEM_TM_GIGA_DRAIN] = { .name = _("TM19"), - .itemId = ITEM_TM19_GIGA_DRAIN, + .itemId = ITEM_TM19, .price = 3000, .description = sTM19Desc, .pocket = POCKET_TM_HM, @@ -3722,10 +3722,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM20_SAFEGUARD] = + [ITEM_TM_SAFEGUARD] = { .name = _("TM20"), - .itemId = ITEM_TM20_SAFEGUARD, + .itemId = ITEM_TM20, .price = 3000, .description = sTM20Desc, .pocket = POCKET_TM_HM, @@ -3733,10 +3733,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM21_FRUSTRATION] = + [ITEM_TM_FRUSTRATION] = { .name = _("TM21"), - .itemId = ITEM_TM21_FRUSTRATION, + .itemId = ITEM_TM21, .price = 1000, .description = sTM21Desc, .pocket = POCKET_TM_HM, @@ -3744,10 +3744,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM22_SOLAR_BEAM] = + [ITEM_TM_SOLAR_BEAM] = { .name = _("TM22"), - .itemId = ITEM_TM22_SOLAR_BEAM, + .itemId = ITEM_TM22, .price = 3000, .description = sTM22Desc, .pocket = POCKET_TM_HM, @@ -3755,10 +3755,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM23_IRON_TAIL] = + [ITEM_TM_IRON_TAIL] = { .name = _("TM23"), - .itemId = ITEM_TM23_IRON_TAIL, + .itemId = ITEM_TM23, .price = 3000, .description = sTM23Desc, .pocket = POCKET_TM_HM, @@ -3766,10 +3766,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM24_THUNDERBOLT] = + [ITEM_TM_THUNDERBOLT] = { .name = _("TM24"), - .itemId = ITEM_TM24_THUNDERBOLT, + .itemId = ITEM_TM24, .price = 3000, .description = sTM24Desc, .pocket = POCKET_TM_HM, @@ -3777,10 +3777,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM25_THUNDER] = + [ITEM_TM_THUNDER] = { .name = _("TM25"), - .itemId = ITEM_TM25_THUNDER, + .itemId = ITEM_TM25, .price = 5500, .description = sTM25Desc, .pocket = POCKET_TM_HM, @@ -3788,10 +3788,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM26_EARTHQUAKE] = + [ITEM_TM_EARTHQUAKE] = { .name = _("TM26"), - .itemId = ITEM_TM26_EARTHQUAKE, + .itemId = ITEM_TM26, .price = 3000, .description = sTM26Desc, .pocket = POCKET_TM_HM, @@ -3799,10 +3799,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM27_RETURN] = + [ITEM_TM_RETURN] = { .name = _("TM27"), - .itemId = ITEM_TM27_RETURN, + .itemId = ITEM_TM27, .price = 1000, .description = sTM27Desc, .pocket = POCKET_TM_HM, @@ -3810,10 +3810,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM28_DIG] = + [ITEM_TM_DIG] = { .name = _("TM28"), - .itemId = ITEM_TM28_DIG, + .itemId = ITEM_TM28, .price = 2000, .description = sTM28Desc, .pocket = POCKET_TM_HM, @@ -3821,10 +3821,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM29_PSYCHIC] = + [ITEM_TM_PSYCHIC] = { .name = _("TM29"), - .itemId = ITEM_TM29_PSYCHIC, + .itemId = ITEM_TM29, .price = 2000, .description = sTM29Desc, .pocket = POCKET_TM_HM, @@ -3832,10 +3832,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM30_SHADOW_BALL] = + [ITEM_TM_SHADOW_BALL] = { .name = _("TM30"), - .itemId = ITEM_TM30_SHADOW_BALL, + .itemId = ITEM_TM30, .price = 3000, .description = sTM30Desc, .pocket = POCKET_TM_HM, @@ -3843,10 +3843,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM31_BRICK_BREAK] = + [ITEM_TM_BRICK_BREAK] = { .name = _("TM31"), - .itemId = ITEM_TM31_BRICK_BREAK, + .itemId = ITEM_TM31, .price = 3000, .description = sTM31Desc, .pocket = POCKET_TM_HM, @@ -3854,10 +3854,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM32_DOUBLE_TEAM] = + [ITEM_TM_DOUBLE_TEAM] = { .name = _("TM32"), - .itemId = ITEM_TM32_DOUBLE_TEAM, + .itemId = ITEM_TM32, .price = 2000, .description = sTM32Desc, .pocket = POCKET_TM_HM, @@ -3865,10 +3865,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM33_REFLECT] = + [ITEM_TM_REFLECT] = { .name = _("TM33"), - .itemId = ITEM_TM33_REFLECT, + .itemId = ITEM_TM33, .price = 3000, .description = sTM33Desc, .pocket = POCKET_TM_HM, @@ -3876,10 +3876,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM34_SHOCK_WAVE] = + [ITEM_TM_SHOCK_WAVE] = { .name = _("TM34"), - .itemId = ITEM_TM34_SHOCK_WAVE, + .itemId = ITEM_TM34, .price = 3000, .description = sTM34Desc, .pocket = POCKET_TM_HM, @@ -3887,10 +3887,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM35_FLAMETHROWER] = + [ITEM_TM_FLAMETHROWER] = { .name = _("TM35"), - .itemId = ITEM_TM35_FLAMETHROWER, + .itemId = ITEM_TM35, .price = 3000, .description = sTM35Desc, .pocket = POCKET_TM_HM, @@ -3898,10 +3898,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM36_SLUDGE_BOMB] = + [ITEM_TM_SLUDGE_BOMB] = { .name = _("TM36"), - .itemId = ITEM_TM36_SLUDGE_BOMB, + .itemId = ITEM_TM36, .price = 1000, .description = sTM36Desc, .pocket = POCKET_TM_HM, @@ -3909,10 +3909,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM37_SANDSTORM] = + [ITEM_TM_SANDSTORM] = { .name = _("TM37"), - .itemId = ITEM_TM37_SANDSTORM, + .itemId = ITEM_TM37, .price = 2000, .description = sTM37Desc, .pocket = POCKET_TM_HM, @@ -3920,10 +3920,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM38_FIRE_BLAST] = + [ITEM_TM_FIRE_BLAST] = { .name = _("TM38"), - .itemId = ITEM_TM38_FIRE_BLAST, + .itemId = ITEM_TM38, .price = 5500, .description = sTM38Desc, .pocket = POCKET_TM_HM, @@ -3931,10 +3931,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM39_ROCK_TOMB] = + [ITEM_TM_ROCK_TOMB] = { .name = _("TM39"), - .itemId = ITEM_TM39_ROCK_TOMB, + .itemId = ITEM_TM39, .price = 3000, .description = sTM39Desc, .pocket = POCKET_TM_HM, @@ -3942,10 +3942,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM40_AERIAL_ACE] = + [ITEM_TM_AERIAL_ACE] = { .name = _("TM40"), - .itemId = ITEM_TM40_AERIAL_ACE, + .itemId = ITEM_TM40, .price = 3000, .description = sTM40Desc, .pocket = POCKET_TM_HM, @@ -3953,10 +3953,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM41_TORMENT] = + [ITEM_TM_TORMENT] = { .name = _("TM41"), - .itemId = ITEM_TM41_TORMENT, + .itemId = ITEM_TM41, .price = 3000, .description = sTM41Desc, .pocket = POCKET_TM_HM, @@ -3964,10 +3964,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM42_FACADE] = + [ITEM_TM_FACADE] = { .name = _("TM42"), - .itemId = ITEM_TM42_FACADE, + .itemId = ITEM_TM42, .price = 3000, .description = sTM42Desc, .pocket = POCKET_TM_HM, @@ -3975,10 +3975,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM43_SECRET_POWER] = + [ITEM_TM_SECRET_POWER] = { .name = _("TM43"), - .itemId = ITEM_TM43_SECRET_POWER, + .itemId = ITEM_TM43, .price = 3000, .description = sTM43Desc, .pocket = POCKET_TM_HM, @@ -3986,10 +3986,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM44_REST] = + [ITEM_TM_REST] = { .name = _("TM44"), - .itemId = ITEM_TM44_REST, + .itemId = ITEM_TM44, .price = 3000, .description = sTM44Desc, .pocket = POCKET_TM_HM, @@ -3997,10 +3997,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM45_ATTRACT] = + [ITEM_TM_ATTRACT] = { .name = _("TM45"), - .itemId = ITEM_TM45_ATTRACT, + .itemId = ITEM_TM45, .price = 3000, .description = sTM45Desc, .pocket = POCKET_TM_HM, @@ -4008,10 +4008,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM46_THIEF] = + [ITEM_TM_THIEF] = { .name = _("TM46"), - .itemId = ITEM_TM46_THIEF, + .itemId = ITEM_TM46, .price = 3000, .description = sTM46Desc, .pocket = POCKET_TM_HM, @@ -4019,10 +4019,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM47_STEEL_WING] = + [ITEM_TM_STEEL_WING] = { .name = _("TM47"), - .itemId = ITEM_TM47_STEEL_WING, + .itemId = ITEM_TM47, .price = 3000, .description = sTM47Desc, .pocket = POCKET_TM_HM, @@ -4030,10 +4030,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM48_SKILL_SWAP] = + [ITEM_TM_SKILL_SWAP] = { .name = _("TM48"), - .itemId = ITEM_TM48_SKILL_SWAP, + .itemId = ITEM_TM48, .price = 3000, .description = sTM48Desc, .pocket = POCKET_TM_HM, @@ -4041,10 +4041,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM49_SNATCH] = + [ITEM_TM_SNATCH] = { .name = _("TM49"), - .itemId = ITEM_TM49_SNATCH, + .itemId = ITEM_TM49, .price = 3000, .description = sTM49Desc, .pocket = POCKET_TM_HM, @@ -4052,10 +4052,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_TM50_OVERHEAT] = + [ITEM_TM_OVERHEAT] = { .name = _("TM50"), - .itemId = ITEM_TM50_OVERHEAT, + .itemId = ITEM_TM50, .price = 3000, .description = sTM50Desc, .pocket = POCKET_TM_HM, @@ -4063,10 +4063,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_HM01_CUT] = + [ITEM_HM_CUT] = { .name = _("HM01"), - .itemId = ITEM_HM01_CUT, + .itemId = ITEM_HM01, .price = 0, .description = sHM01Desc, .importance = 1, @@ -4075,10 +4075,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_HM02_FLY] = + [ITEM_HM_FLY] = { .name = _("HM02"), - .itemId = ITEM_HM02_FLY, + .itemId = ITEM_HM02, .price = 0, .description = sHM02Desc, .importance = 1, @@ -4087,10 +4087,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_HM03_SURF] = + [ITEM_HM_SURF] = { .name = _("HM03"), - .itemId = ITEM_HM03_SURF, + .itemId = ITEM_HM03, .price = 0, .description = sHM03Desc, .importance = 1, @@ -4099,10 +4099,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_HM04_STRENGTH] = + [ITEM_HM_STRENGTH] = { .name = _("HM04"), - .itemId = ITEM_HM04_STRENGTH, + .itemId = ITEM_HM04, .price = 0, .description = sHM04Desc, .importance = 1, @@ -4111,10 +4111,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_HM05_FLASH] = + [ITEM_HM_FLASH] = { .name = _("HM05"), - .itemId = ITEM_HM05_FLASH, + .itemId = ITEM_HM05, .price = 0, .description = sHM05Desc, .importance = 1, @@ -4123,10 +4123,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_HM06_ROCK_SMASH] = + [ITEM_HM_ROCK_SMASH] = { .name = _("HM06"), - .itemId = ITEM_HM06_ROCK_SMASH, + .itemId = ITEM_HM06, .price = 0, .description = sHM06Desc, .importance = 1, @@ -4135,10 +4135,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_HM07_WATERFALL] = + [ITEM_HM_WATERFALL] = { .name = _("HM07"), - .itemId = ITEM_HM07_WATERFALL, + .itemId = ITEM_HM07, .price = 0, .description = sHM07Desc, .importance = 1, @@ -4147,10 +4147,10 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_TMHM, }, - [ITEM_HM08_DIVE] = + [ITEM_HM_DIVE] = { .name = _("HM08"), - .itemId = ITEM_HM08_DIVE, + .itemId = ITEM_HM08, .price = 0, .description = sHM08Desc, .importance = 1, diff --git a/src/data/lilycove_lady.h b/src/data/lilycove_lady.h index 4a3a7a7194..fdfb83478f 100644 --- a/src/data/lilycove_lady.h +++ b/src/data/lilycove_lady.h @@ -279,7 +279,7 @@ static const u16 sQuizLadyPrizes[] = ITEM_BELUE_BERRY, ITEM_DURIN_BERRY, ITEM_LUXURY_BALL, - ITEM_TM15_HYPER_BEAM, + ITEM_TM_HYPER_BEAM, ITEM_BIG_PEARL, ITEM_STAR_PIECE, ITEM_RARE_CANDY, diff --git a/src/data/party_menu.h b/src/data/party_menu.h index 7a9efce0b8..90faab0777 100644 --- a/src/data/party_menu.h +++ b/src/data/party_menu.h @@ -1117,64 +1117,17 @@ static const u8 *const sUnused_StatStrings[] = gText_Speed2 }; +/* Expands to: + * static const u16 sTMHMMoves[] = + * { + * MOVE_FOCUS_PUNCH, + * ... + * MOVE_CUT, + * ... + * }; */ +#define TMHM_MOVE(id) CAT(MOVE_, id), static const u16 sTMHMMoves[] = { - [ITEM_TM01 - ITEM_TM01] = MOVE_FOCUS_PUNCH, - [ITEM_TM02 - ITEM_TM01] = MOVE_DRAGON_CLAW, - [ITEM_TM03 - ITEM_TM01] = MOVE_WATER_PULSE, - [ITEM_TM04 - ITEM_TM01] = MOVE_CALM_MIND, - [ITEM_TM05 - ITEM_TM01] = MOVE_ROAR, - [ITEM_TM06 - ITEM_TM01] = MOVE_TOXIC, - [ITEM_TM07 - ITEM_TM01] = MOVE_HAIL, - [ITEM_TM08 - ITEM_TM01] = MOVE_BULK_UP, - [ITEM_TM09 - ITEM_TM01] = MOVE_BULLET_SEED, - [ITEM_TM10 - ITEM_TM01] = MOVE_HIDDEN_POWER, - [ITEM_TM11 - ITEM_TM01] = MOVE_SUNNY_DAY, - [ITEM_TM12 - ITEM_TM01] = MOVE_TAUNT, - [ITEM_TM13 - ITEM_TM01] = MOVE_ICE_BEAM, - [ITEM_TM14 - ITEM_TM01] = MOVE_BLIZZARD, - [ITEM_TM15 - ITEM_TM01] = MOVE_HYPER_BEAM, - [ITEM_TM16 - ITEM_TM01] = MOVE_LIGHT_SCREEN, - [ITEM_TM17 - ITEM_TM01] = MOVE_PROTECT, - [ITEM_TM18 - ITEM_TM01] = MOVE_RAIN_DANCE, - [ITEM_TM19 - ITEM_TM01] = MOVE_GIGA_DRAIN, - [ITEM_TM20 - ITEM_TM01] = MOVE_SAFEGUARD, - [ITEM_TM21 - ITEM_TM01] = MOVE_FRUSTRATION, - [ITEM_TM22 - ITEM_TM01] = MOVE_SOLAR_BEAM, - [ITEM_TM23 - ITEM_TM01] = MOVE_IRON_TAIL, - [ITEM_TM24 - ITEM_TM01] = MOVE_THUNDERBOLT, - [ITEM_TM25 - ITEM_TM01] = MOVE_THUNDER, - [ITEM_TM26 - ITEM_TM01] = MOVE_EARTHQUAKE, - [ITEM_TM27 - ITEM_TM01] = MOVE_RETURN, - [ITEM_TM28 - ITEM_TM01] = MOVE_DIG, - [ITEM_TM29 - ITEM_TM01] = MOVE_PSYCHIC, - [ITEM_TM30 - ITEM_TM01] = MOVE_SHADOW_BALL, - [ITEM_TM31 - ITEM_TM01] = MOVE_BRICK_BREAK, - [ITEM_TM32 - ITEM_TM01] = MOVE_DOUBLE_TEAM, - [ITEM_TM33 - ITEM_TM01] = MOVE_REFLECT, - [ITEM_TM34 - ITEM_TM01] = MOVE_SHOCK_WAVE, - [ITEM_TM35 - ITEM_TM01] = MOVE_FLAMETHROWER, - [ITEM_TM36 - ITEM_TM01] = MOVE_SLUDGE_BOMB, - [ITEM_TM37 - ITEM_TM01] = MOVE_SANDSTORM, - [ITEM_TM38 - ITEM_TM01] = MOVE_FIRE_BLAST, - [ITEM_TM39 - ITEM_TM01] = MOVE_ROCK_TOMB, - [ITEM_TM40 - ITEM_TM01] = MOVE_AERIAL_ACE, - [ITEM_TM41 - ITEM_TM01] = MOVE_TORMENT, - [ITEM_TM42 - ITEM_TM01] = MOVE_FACADE, - [ITEM_TM43 - ITEM_TM01] = MOVE_SECRET_POWER, - [ITEM_TM44 - ITEM_TM01] = MOVE_REST, - [ITEM_TM45 - ITEM_TM01] = MOVE_ATTRACT, - [ITEM_TM46 - ITEM_TM01] = MOVE_THIEF, - [ITEM_TM47 - ITEM_TM01] = MOVE_STEEL_WING, - [ITEM_TM48 - ITEM_TM01] = MOVE_SKILL_SWAP, - [ITEM_TM49 - ITEM_TM01] = MOVE_SNATCH, - [ITEM_TM50 - ITEM_TM01] = MOVE_OVERHEAT, - [ITEM_HM01 - ITEM_TM01] = MOVE_CUT, - [ITEM_HM02 - ITEM_TM01] = MOVE_FLY, - [ITEM_HM03 - ITEM_TM01] = MOVE_SURF, - [ITEM_HM04 - ITEM_TM01] = MOVE_STRENGTH, - [ITEM_HM05 - ITEM_TM01] = MOVE_FLASH, - [ITEM_HM06 - ITEM_TM01] = MOVE_ROCK_SMASH, - [ITEM_HM07 - ITEM_TM01] = MOVE_WATERFALL, - [ITEM_HM08 - ITEM_TM01] = MOVE_DIVE, + FOREACH_TMHM(TMHM_MOVE) }; +#undef TMHM_MOVE diff --git a/src/data/pokemon/tmhm_learnsets.h b/src/data/pokemon/tmhm_learnsets.h index cb42d7c6fc..4357cdd1a3 100644 --- a/src/data/pokemon/tmhm_learnsets.h +++ b/src/data/pokemon/tmhm_learnsets.h @@ -1,9388 +1,10183 @@ -#define TMHM_LEARNSET(moves) {(u32)(moves), ((u64)(moves) >> 32)} -#define TMHM(tmhm) ((u64)1 << (ITEM_##tmhm - ITEM_TM01_FOCUS_PUNCH)) - -// This table determines which TMs and HMs a species is capable of learning. -// Each entry is a 64-bit bit array spread across two 32-bit values, with -// each bit corresponding to a TM or HM. -const u32 gTMHMLearnsets[][2] = +/* Expands to: + * struct TMHMLearnset + * { + * u32 FOCUS_PUNCH:1; + * ... + * u32 CUT:1; + * ... + * }; */ +#define TMHM_LEARN(id) u32 id:1; +struct TMHMLearnset { - [SPECIES_NONE] = TMHM_LEARNSET(0), - - [SPECIES_BULBASAUR] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_IVYSAUR] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_VENUSAUR] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_CHARMANDER] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_CHARMELEON] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_CHARIZARD] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM47_STEEL_WING) - | TMHM(TM50_OVERHEAT) - | TMHM(HM01_CUT) - | TMHM(HM02_FLY) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SQUIRTLE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_WARTORTLE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_BLASTOISE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_CATERPIE] = TMHM_LEARNSET(0), - - [SPECIES_METAPOD] = TMHM_LEARNSET(0), - - [SPECIES_BUTTERFREE] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM05_FLASH)), - - [SPECIES_WEEDLE] = TMHM_LEARNSET(0), - - [SPECIES_KAKUNA] = TMHM_LEARNSET(0), - - [SPECIES_BEEDRILL] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_PIDGEY] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY)), - - [SPECIES_PIDGEOTTO] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY)), - - [SPECIES_PIDGEOT] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY)), - - [SPECIES_RATTATA] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_RATICATE] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SPEAROW] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY)), - - [SPECIES_FEAROW] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY)), - - [SPECIES_EKANS] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH)), - - [SPECIES_ARBOK] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH)), - - [SPECIES_PIKACHU] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_RAICHU] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SANDSHREW] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SANDSLASH] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_NIDORAN_F] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_NIDORINA] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_NIDOQUEEN] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_NIDORAN_M] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_NIDORINO] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_NIDOKING] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_CLEFAIRY] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH)), - - [SPECIES_CLEFABLE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH)), - - [SPECIES_VULPIX] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT)), - - [SPECIES_NINETALES] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT)), - - [SPECIES_JIGGLYPUFF] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH)), - - [SPECIES_WIGGLYTUFF] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH)), - - [SPECIES_ZUBAT] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(TM49_SNATCH)), - - [SPECIES_GOLBAT] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(TM49_SNATCH)), - - [SPECIES_ODDISH] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_GLOOM] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_VILEPLUME] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_PARAS] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_PARASECT] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_VENONAT] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM05_FLASH)), - - [SPECIES_VENOMOTH] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM05_FLASH)), - - [SPECIES_DIGLETT] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_DUGTRIO] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_MEOWTH] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM49_SNATCH) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_PERSIAN] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM49_SNATCH) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_PSYDUCK] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_GOLDUCK] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_MANKEY] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM50_OVERHEAT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_PRIMEAPE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM50_OVERHEAT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_GROWLITHE] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM50_OVERHEAT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_ARCANINE] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM50_OVERHEAT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_POLIWAG] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_POLIWHIRL] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_POLIWRATH] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_ABRA] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM05_FLASH)), - - [SPECIES_KADABRA] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM05_FLASH)), - - [SPECIES_ALAKAZAM] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM05_FLASH)), - - [SPECIES_MACHOP] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_MACHOKE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_MACHAMP] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_BELLSPROUT] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_WEEPINBELL] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_VICTREEBEL] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_TENTACOOL] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_TENTACRUEL] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_GEODUDE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_GRAVELER] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_GOLEM] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_PONYTA] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT) - | TMHM(HM04_STRENGTH)), - - [SPECIES_RAPIDASH] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT) - | TMHM(HM04_STRENGTH)), - - [SPECIES_SLOWPOKE] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM08_DIVE)), - - [SPECIES_SLOWBRO] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM08_DIVE)), - - [SPECIES_MAGNEMITE] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(HM05_FLASH)), - - [SPECIES_MAGNETON] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(HM05_FLASH)), - - [SPECIES_FARFETCHD] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM01_CUT) - | TMHM(HM02_FLY)), - - [SPECIES_DODUO] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY)), - - [SPECIES_DODRIO] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY)), - - [SPECIES_SEEL] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_DEWGONG] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_GRIMER] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF)), - - [SPECIES_MUK] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SHELLDER] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM08_DIVE)), - - [SPECIES_CLOYSTER] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM08_DIVE)), - - [SPECIES_GASTLY] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH)), - - [SPECIES_HAUNTER] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH)), - - [SPECIES_GENGAR] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_ONIX] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_DROWZEE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM05_FLASH)), - - [SPECIES_HYPNO] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM05_FLASH)), - - [SPECIES_KRABBY] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM08_DIVE)), - - [SPECIES_KINGLER] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM08_DIVE)), - - [SPECIES_VOLTORB] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM12_TAUNT) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM46_THIEF) - | TMHM(HM05_FLASH)), - - [SPECIES_ELECTRODE] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM46_THIEF) - | TMHM(HM05_FLASH)), - - [SPECIES_EXEGGCUTE] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH)), - - [SPECIES_EXEGGUTOR] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH)), - - [SPECIES_CUBONE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_MAROWAK] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_HITMONLEE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_HITMONCHAN] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_LICKITUNG] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_KOFFING] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM05_FLASH)), - - [SPECIES_WEEZING] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM05_FLASH)), - - [SPECIES_RHYHORN] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_RHYDON] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_CHANSEY] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_TANGELA] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_KANGASKHAN] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_HORSEA] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_SEADRA] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_GOLDEEN] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_SEAKING] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_STARYU] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(HM03_SURF) - | TMHM(HM05_FLASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_STARMIE] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM03_SURF) - | TMHM(HM05_FLASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_MR_MIME] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM05_FLASH)), - - [SPECIES_SCYTHER] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM01_CUT) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_JYNX] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM05_FLASH)), - - [SPECIES_ELECTABUZZ] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_MAGMAR] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_PINSIR] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_TAUROS] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_MAGIKARP] = TMHM_LEARNSET(0), - - [SPECIES_GYARADOS] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_LAPRAS] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_DITTO] = TMHM_LEARNSET(0), - - [SPECIES_EEVEE] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT)), - - [SPECIES_VAPOREON] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_JOLTEON] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM05_FLASH)), - - [SPECIES_FLAREON] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT)), - - [SPECIES_PORYGON] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM46_THIEF) - | TMHM(HM05_FLASH)), - - [SPECIES_OMANYTE] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM03_SURF) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_OMASTAR] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM03_SURF) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_KABUTO] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM03_SURF) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL)), - - [SPECIES_KABUTOPS] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_AERODACTYL] = TMHM_LEARNSET(TMHM(TM02_DRAGON_CLAW) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SNORLAX] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH)), - - [SPECIES_ARTICUNO] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM37_SANDSTORM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_ZAPDOS] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM37_SANDSTORM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_MOLTRES] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM47_STEEL_WING) - | TMHM(TM50_OVERHEAT) - | TMHM(HM02_FLY) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_DRATINI] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL)), - - [SPECIES_DRAGONAIR] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL)), - - [SPECIES_DRAGONITE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM47_STEEL_WING) - | TMHM(HM01_CUT) - | TMHM(HM02_FLY) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_MEWTWO] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_MEW] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM08_BULK_UP) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(TM50_OVERHEAT) - | TMHM(HM01_CUT) - | TMHM(HM02_FLY) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_CHIKORITA] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_BAYLEEF] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_MEGANIUM] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_CYNDAQUIL] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT) - | TMHM(HM01_CUT)), - - [SPECIES_QUILAVA] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_TYPHLOSION] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_TOTODILE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_CROCONAW] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_FERALIGATR] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_SENTRET] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF)), - - [SPECIES_FURRET] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_HOOTHOOT] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY) - | TMHM(HM05_FLASH)), - - [SPECIES_NOCTOWL] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY) - | TMHM(HM05_FLASH)), - - [SPECIES_LEDYBA] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM05_FLASH)), - - [SPECIES_LEDIAN] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM05_FLASH)), - - [SPECIES_SPINARAK] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM05_FLASH)), - - [SPECIES_ARIADOS] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM05_FLASH)), - - [SPECIES_CROBAT] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(TM49_SNATCH) - | TMHM(HM02_FLY)), - - [SPECIES_CHINCHOU] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM05_FLASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_LANTURN] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM05_FLASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_PICHU] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM05_FLASH)), - - [SPECIES_CLEFFA] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM05_FLASH)), - - [SPECIES_IGGLYBUFF] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM05_FLASH)), - - [SPECIES_TOGEPI] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_TOGETIC] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_NATU] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM05_FLASH)), - - [SPECIES_XATU] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM02_FLY) - | TMHM(HM05_FLASH)), - - [SPECIES_MAREEP] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM05_FLASH)), - - [SPECIES_FLAAFFY] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_AMPHAROS] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_BELLOSSOM] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_MARILL] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_AZUMARILL] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_SUDOWOODO] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_POLITOED] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_HOPPIP] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM05_FLASH)), - - [SPECIES_SKIPLOOM] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM05_FLASH)), - - [SPECIES_JUMPLUFF] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM05_FLASH)), - - [SPECIES_AIPOM] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM49_SNATCH) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SUNKERN] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_SUNFLORA] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_YANMA] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM05_FLASH)), - - [SPECIES_WOOPER] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_QUAGSIRE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_ESPEON] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_UMBREON] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM49_SNATCH) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_MURKROW] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(TM49_SNATCH) - | TMHM(HM02_FLY)), - - [SPECIES_SLOWKING] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM08_DIVE)), - - [SPECIES_MISDREAVUS] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM05_FLASH)), - - [SPECIES_UNOWN] = TMHM_LEARNSET(0), - - [SPECIES_WOBBUFFET] = TMHM_LEARNSET(0), - - [SPECIES_GIRAFARIG] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_PINECO] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM37_SANDSTORM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_FORRETRESS] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM37_SANDSTORM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_DUNSPARCE] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_GLIGAR] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_STEELIX] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SNUBBULL] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM50_OVERHEAT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_GRANBULL] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM50_OVERHEAT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_QWILFISH] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_SCIZOR] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SHUCKLE] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_HERACROSS] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SNEASEL] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM49_SNATCH) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_TEDDIURSA] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_URSARING] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SLUGMA] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_MAGCARGO] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SWINUB] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_PILOSWINE] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_CORSOLA] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_REMORAID] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_OCTILLERY] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_DELIBIRD] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM02_FLY)), - - [SPECIES_MANTINE] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_SKARMORY] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM01_CUT) - | TMHM(HM02_FLY) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_HOUNDOUR] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM49_SNATCH) - | TMHM(TM50_OVERHEAT) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_HOUNDOOM] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM49_SNATCH) - | TMHM(TM50_OVERHEAT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_KINGDRA] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_PHANPY] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_DONPHAN] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_PORYGON2] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM46_THIEF) - | TMHM(HM05_FLASH)), - - [SPECIES_STANTLER] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM05_FLASH)), - - [SPECIES_SMEARGLE] = TMHM_LEARNSET(0), - - [SPECIES_TYROGUE] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_HITMONTOP] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SMOOCHUM] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM05_FLASH)), - - [SPECIES_ELEKID] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_MAGBY] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_MILTANK] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_BLISSEY] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_RAIKOU] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM37_SANDSTORM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_ENTEI] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SUICUNE] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM37_SANDSTORM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_LARVITAR] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_PUPITAR] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_TYRANITAR] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_LUGIA] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM37_SANDSTORM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM47_STEEL_WING) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM02_FLY) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_HO_OH] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM47_STEEL_WING) - | TMHM(TM50_OVERHEAT) - | TMHM(HM02_FLY) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_CELEBI] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM37_SANDSTORM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_OLD_UNOWN_B] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_C] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_D] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_E] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_F] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_G] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_H] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_I] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_J] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_K] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_L] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_M] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_N] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_O] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_P] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_Q] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_R] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_S] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_T] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_U] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_V] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_W] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_X] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_Y] = TMHM_LEARNSET(0), - - [SPECIES_OLD_UNOWN_Z] = TMHM_LEARNSET(0), - - [SPECIES_TREECKO] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_GROVYLE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SCEPTILE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_TORCHIC] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_COMBUSKEN] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_BLAZIKEN] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_MUDKIP] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_MARSHTOMP] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_SWAMPERT] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_POOCHYENA] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM49_SNATCH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_MIGHTYENA] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_ZIGZAGOON] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_LINOONE] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_WURMPLE] = TMHM_LEARNSET(0), - - [SPECIES_SILCOON] = TMHM_LEARNSET(0), - - [SPECIES_BEAUTIFLY] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM05_FLASH)), - - [SPECIES_CASCOON] = TMHM_LEARNSET(0), - - [SPECIES_DUSTOX] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM05_FLASH)), - - [SPECIES_LOTAD] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM03_SURF) - | TMHM(HM05_FLASH)), - - [SPECIES_LOMBRE] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_LUDICOLO] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_SEEDOT] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_NUZLEAF] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SHIFTRY] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_NINCADA] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_NINJASK] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_SHEDINJA] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM46_THIEF) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_TAILLOW] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY)), - - [SPECIES_SWELLOW] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY)), - - [SPECIES_SHROOMISH] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM49_SNATCH) - | TMHM(HM05_FLASH)), - - [SPECIES_BRELOOM] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM49_SNATCH) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SPINDA] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_WINGULL] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY)), - - [SPECIES_PELIPPER] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY) - | TMHM(HM03_SURF)), - - [SPECIES_SURSKIT] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM05_FLASH)), - - [SPECIES_MASQUERAIN] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM05_FLASH)), - - [SPECIES_WAILMER] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_WAILORD] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_SKITTY] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM05_FLASH)), - - [SPECIES_DELCATTY] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_KECLEON] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_BALTOY] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM05_FLASH)), - - [SPECIES_CLAYDOL] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_NOSEPASS] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_TORKOAL] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SABLEYE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM49_SNATCH) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_BARBOACH] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_WHISCASH] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_LUVDISC] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_CORPHISH] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL)), - - [SPECIES_CRAWDAUNT] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_FEEBAS] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_MILOTIC] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_CARVANHA] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_SHARPEDO] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_TRAPINCH] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_VIBRAVA] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_FLYGON] = TMHM_LEARNSET(TMHM(TM02_DRAGON_CLAW) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_MAKUHITA] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_HARIYAMA] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_ELECTRIKE] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH)), - - [SPECIES_MANECTRIC] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH)), - - [SPECIES_NUMEL] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_CAMERUPT] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SPHEAL] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_SEALEO] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_WALREIN] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_CACNEA] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_CACTURNE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH)), - - [SPECIES_SNORUNT] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM05_FLASH)), - - [SPECIES_GLALIE] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM05_FLASH)), - - [SPECIES_LUNATONE] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM05_FLASH)), - - [SPECIES_SOLROCK] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM50_OVERHEAT) - | TMHM(HM05_FLASH)), - - [SPECIES_AZURILL] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL)), - - [SPECIES_SPOINK] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM05_FLASH)), - - [SPECIES_GRUMPIG] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM05_FLASH)), - - [SPECIES_PLUSLE] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM05_FLASH)), - - [SPECIES_MINUN] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM05_FLASH)), - - [SPECIES_MAWILE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_MEDITITE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_MEDICHAM] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SWABLU] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY)), - - [SPECIES_ALTARIA] = TMHM_LEARNSET(TMHM(TM02_DRAGON_CLAW) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM47_STEEL_WING) - | TMHM(HM02_FLY) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_WYNAUT] = TMHM_LEARNSET(0), - - [SPECIES_DUSKULL] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM05_FLASH)), - - [SPECIES_DUSCLOPS] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_ROSELIA] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM05_FLASH)), - - [SPECIES_SLAKOTH] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_VIGOROTH] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SLAKING] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_GULPIN] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SWALOT] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_TROPIUS] = TMHM_LEARNSET(TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM47_STEEL_WING) - | TMHM(HM01_CUT) - | TMHM(HM02_FLY) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_WHISMUR] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT)), - - [SPECIES_LOUDRED] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_EXPLOUD] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM50_OVERHEAT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_CLAMPERL] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_HUNTAIL] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM49_SNATCH) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_GOREBYSS] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_ABSOL] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM49_SNATCH) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SHUPPET] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM05_FLASH)), - - [SPECIES_BANETTE] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM05_FLASH)), - - [SPECIES_SEVIPER] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM49_SNATCH) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_ZANGOOSE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_RELICANTH] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM03_SURF) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_ARON] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_LAIRON] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_AGGRON] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM02_DRAGON_CLAW) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_CASTFORM] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM05_FLASH)), - - [SPECIES_VOLBEAT] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM05_FLASH)), - - [SPECIES_ILLUMISE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(HM05_FLASH)), - - [SPECIES_LILEEP] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT)), - - [SPECIES_CRADILY] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM09_BULLET_SEED) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM19_GIGA_DRAIN) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_ANORITH] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_ARMALDO] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_RALTS] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM05_FLASH)), - - [SPECIES_KIRLIA] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM05_FLASH)), - - [SPECIES_GARDEVOIR] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM46_THIEF) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM05_FLASH)), - - [SPECIES_BAGON] = TMHM_LEARNSET(TMHM(TM02_DRAGON_CLAW) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SHELGON] = TMHM_LEARNSET(TMHM(TM02_DRAGON_CLAW) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_SALAMENCE] = TMHM_LEARNSET(TMHM(TM02_DRAGON_CLAW) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM47_STEEL_WING) - | TMHM(HM01_CUT) - | TMHM(HM02_FLY) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_BELDUM] = TMHM_LEARNSET(0), - - [SPECIES_METANG] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_METAGROSS] = TMHM_LEARNSET(TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM36_SLUDGE_BOMB) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_REGIROCK] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_REGICE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_REGISTEEL] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM37_SANDSTORM) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_KYOGRE] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM07_HAIL) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_GROUDON] = TMHM_LEARNSET(TMHM(TM02_DRAGON_CLAW) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM28_DIG) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM50_OVERHEAT) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_RAYQUAZA] = TMHM_LEARNSET(TMHM(TM02_DRAGON_CLAW) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM08_BULK_UP) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM14_BLIZZARD) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM23_IRON_TAIL) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM35_FLAMETHROWER) - | TMHM(TM37_SANDSTORM) - | TMHM(TM38_FIRE_BLAST) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM50_OVERHEAT) - | TMHM(HM02_FLY) - | TMHM(HM03_SURF) - | TMHM(HM04_STRENGTH) - | TMHM(HM06_ROCK_SMASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_LATIAS] = TMHM_LEARNSET(TMHM(TM02_DRAGON_CLAW) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM37_SANDSTORM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM47_STEEL_WING) - | TMHM(HM01_CUT) - | TMHM(HM02_FLY) - | TMHM(HM03_SURF) - | TMHM(HM05_FLASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_LATIOS] = TMHM_LEARNSET(TMHM(TM02_DRAGON_CLAW) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM05_ROAR) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM26_EARTHQUAKE) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM37_SANDSTORM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM47_STEEL_WING) - | TMHM(HM01_CUT) - | TMHM(HM02_FLY) - | TMHM(HM03_SURF) - | TMHM(HM05_FLASH) - | TMHM(HM07_WATERFALL) - | TMHM(HM08_DIVE)), - - [SPECIES_JIRACHI] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM37_SANDSTORM) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM48_SKILL_SWAP) - | TMHM(HM05_FLASH)), - - [SPECIES_DEOXYS] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) - | TMHM(TM03_WATER_PULSE) - | TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM13_ICE_BEAM) - | TMHM(TM15_HYPER_BEAM) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM22_SOLAR_BEAM) - | TMHM(TM24_THUNDERBOLT) - | TMHM(TM25_THUNDER) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM31_BRICK_BREAK) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM39_ROCK_TOMB) - | TMHM(TM40_AERIAL_ACE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM01_CUT) - | TMHM(HM04_STRENGTH) - | TMHM(HM05_FLASH) - | TMHM(HM06_ROCK_SMASH)), - - [SPECIES_CHIMECHO] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) - | TMHM(TM06_TOXIC) - | TMHM(TM10_HIDDEN_POWER) - | TMHM(TM11_SUNNY_DAY) - | TMHM(TM12_TAUNT) - | TMHM(TM16_LIGHT_SCREEN) - | TMHM(TM17_PROTECT) - | TMHM(TM18_RAIN_DANCE) - | TMHM(TM20_SAFEGUARD) - | TMHM(TM21_FRUSTRATION) - | TMHM(TM27_RETURN) - | TMHM(TM29_PSYCHIC) - | TMHM(TM30_SHADOW_BALL) - | TMHM(TM32_DOUBLE_TEAM) - | TMHM(TM33_REFLECT) - | TMHM(TM34_SHOCK_WAVE) - | TMHM(TM41_TORMENT) - | TMHM(TM42_FACADE) - | TMHM(TM43_SECRET_POWER) - | TMHM(TM44_REST) - | TMHM(TM45_ATTRACT) - | TMHM(TM48_SKILL_SWAP) - | TMHM(TM49_SNATCH) - | TMHM(HM05_FLASH)), + FOREACH_TMHM(TMHM_LEARN) +}; +#undef TMHM_LEARN + +const union { + struct TMHMLearnset learnset; + u32 as_u32s[sizeof(struct TMHMLearnset) / sizeof(u32)]; +} gTMHMLearnsets[NUM_SPECIES] = +{ + [SPECIES_NONE] = {}, + + [SPECIES_BULBASAUR] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_IVYSAUR] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_VENUSAUR] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_CHARMANDER] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .DRAGON_CLAW = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_CHARMELEON] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .DRAGON_CLAW = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_CHARIZARD] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .DRAGON_CLAW = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STEEL_WING = TRUE, + .OVERHEAT = TRUE, + .CUT = TRUE, + .FLY = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SQUIRTLE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_WARTORTLE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_BLASTOISE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_CATERPIE] = { .learnset = { + } }, + + [SPECIES_METAPOD] = { .learnset = { + } }, + + [SPECIES_BUTTERFREE] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_WEEDLE] = { .learnset = { + } }, + + [SPECIES_KAKUNA] = { .learnset = { + } }, + + [SPECIES_BEEDRILL] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_PIDGEY] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + } }, + + [SPECIES_PIDGEOTTO] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + } }, + + [SPECIES_PIDGEOT] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + } }, + + [SPECIES_RATTATA] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_RATICATE] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SPEAROW] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + } }, + + [SPECIES_FEAROW] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + } }, + + [SPECIES_EKANS] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SNATCH = TRUE, + .STRENGTH = TRUE, + } }, + + [SPECIES_ARBOK] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SNATCH = TRUE, + .STRENGTH = TRUE, + } }, + + [SPECIES_PIKACHU] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_RAICHU] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SANDSHREW] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SANDSLASH] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_NIDORAN_F] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .SLUDGE_BOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_NIDORINA] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .SLUDGE_BOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_NIDOQUEEN] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SLUDGE_BOMB = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_NIDORAN_M] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_NIDORINO] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_NIDOKING] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SLUDGE_BOMB = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_CLEFAIRY] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SNATCH = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_CLEFABLE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SNATCH = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_VULPIX] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + } }, + + [SPECIES_NINETALES] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + } }, + + [SPECIES_JIGGLYPUFF] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SNATCH = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_WIGGLYTUFF] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SNATCH = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_ZUBAT] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .SNATCH = TRUE, + } }, + + [SPECIES_GOLBAT] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .SNATCH = TRUE, + } }, + + [SPECIES_ODDISH] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_GLOOM] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_VILEPLUME] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_PARAS] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_PARASECT] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_VENONAT] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_VENOMOTH] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_DIGLETT] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_DUGTRIO] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_MEOWTH] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SNATCH = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_PERSIAN] = { .learnset = { + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SNATCH = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_PSYDUCK] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_GOLDUCK] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_MANKEY] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .OVERHEAT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_PRIMEAPE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .OVERHEAT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_GROWLITHE] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .OVERHEAT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_ARCANINE] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .OVERHEAT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_POLIWAG] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_POLIWHIRL] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_POLIWRATH] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_ABRA] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_KADABRA] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_ALAKAZAM] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_MACHOP] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_MACHOKE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_MACHAMP] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_BELLSPROUT] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_WEEPINBELL] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_VICTREEBEL] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_TENTACOOL] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_TENTACRUEL] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_GEODUDE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_GRAVELER] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_GOLEM] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_PONYTA] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + .STRENGTH = TRUE, + } }, + + [SPECIES_RAPIDASH] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + .STRENGTH = TRUE, + } }, + + [SPECIES_SLOWPOKE] = { .learnset = { + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SKILL_SWAP = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_SLOWBRO] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SKILL_SWAP = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_MAGNEMITE] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_MAGNETON] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_FARFETCHD] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .CUT = TRUE, + .FLY = TRUE, + } }, + + [SPECIES_DODUO] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + } }, + + [SPECIES_DODRIO] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + } }, + + [SPECIES_SEEL] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_DEWGONG] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_GRIMER] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SLUDGE_BOMB = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + } }, + + [SPECIES_MUK] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SLUDGE_BOMB = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SHELLDER] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_CLOYSTER] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_GASTLY] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + } }, + + [SPECIES_HAUNTER] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + } }, + + [SPECIES_GENGAR] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_ONIX] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_DROWZEE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_HYPNO] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_KRABBY] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_KINGLER] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_VOLTORB] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .TAUNT = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .THIEF = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_ELECTRODE] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .THIEF = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_EXEGGCUTE] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_EXEGGUTOR] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_CUBONE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_MAROWAK] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_HITMONLEE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_HITMONCHAN] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_LICKITUNG] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_KOFFING] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SLUDGE_BOMB = TRUE, + .FIRE_BLAST = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_WEEZING] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SLUDGE_BOMB = TRUE, + .FIRE_BLAST = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_RHYHORN] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_RHYDON] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_CHANSEY] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_TANGELA] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_KANGASKHAN] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_HORSEA] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_SEADRA] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_GOLDEEN] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_SEAKING] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_STARYU] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .SURF = TRUE, + .FLASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_STARMIE] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .SKILL_SWAP = TRUE, + .SURF = TRUE, + .FLASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_MR_MIME] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_SCYTHER] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .CUT = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_JYNX] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_ELECTABUZZ] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_MAGMAR] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_PINSIR] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_TAUROS] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_MAGIKARP] = { .learnset = { + } }, + + [SPECIES_GYARADOS] = { .learnset = { + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_LAPRAS] = { .learnset = { + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_DITTO] = { .learnset = { + } }, + + [SPECIES_EEVEE] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + } }, + + [SPECIES_VAPOREON] = { .learnset = { + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_JOLTEON] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_FLAREON] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + } }, + + [SPECIES_PORYGON] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .THIEF = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_OMANYTE] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SURF = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_OMASTAR] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SURF = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_KABUTO] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SURF = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + } }, + + [SPECIES_KABUTOPS] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_AERODACTYL] = { .learnset = { + .DRAGON_CLAW = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SNORLAX] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + } }, + + [SPECIES_ARTICUNO] = { .learnset = { + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SANDSTORM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_ZAPDOS] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .SANDSTORM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_MOLTRES] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .STEEL_WING = TRUE, + .OVERHEAT = TRUE, + .FLY = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_DRATINI] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + } }, + + [SPECIES_DRAGONAIR] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + } }, + + [SPECIES_DRAGONITE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .DRAGON_CLAW = TRUE, + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STEEL_WING = TRUE, + .CUT = TRUE, + .FLY = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_MEWTWO] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_MEW] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .DRAGON_CLAW = TRUE, + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .BULK_UP = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SLUDGE_BOMB = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .OVERHEAT = TRUE, + .CUT = TRUE, + .FLY = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_CHIKORITA] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_BAYLEEF] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_MEGANIUM] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_CYNDAQUIL] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + .CUT = TRUE, + } }, + + [SPECIES_QUILAVA] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_TYPHLOSION] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_TOTODILE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_CROCONAW] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_FERALIGATR] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .DRAGON_CLAW = TRUE, + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_SENTRET] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .SURF = TRUE, + } }, + + [SPECIES_FURRET] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_HOOTHOOT] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_NOCTOWL] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_LEDYBA] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_LEDIAN] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_SPINARAK] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_ARIADOS] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_CROBAT] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .SNATCH = TRUE, + .FLY = TRUE, + } }, + + [SPECIES_CHINCHOU] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .FLASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_LANTURN] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .FLASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_PICHU] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_CLEFFA] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_IGGLYBUFF] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_TOGEPI] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_TOGETIC] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_NATU] = { .learnset = { + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .SKILL_SWAP = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_XATU] = { .learnset = { + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .SKILL_SWAP = TRUE, + .FLY = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_MAREEP] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_FLAAFFY] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_AMPHAROS] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_BELLOSSOM] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_MARILL] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_AZUMARILL] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_SUDOWOODO] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_POLITOED] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_HOPPIP] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_SKIPLOOM] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_JUMPLUFF] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_AIPOM] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SNATCH = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SUNKERN] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_SUNFLORA] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_YANMA] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_WOOPER] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .SANDSTORM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_QUAGSIRE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_ESPEON] = { .learnset = { + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SKILL_SWAP = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_UMBREON] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SNATCH = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_MURKROW] = { .learnset = { + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .SNATCH = TRUE, + .FLY = TRUE, + } }, + + [SPECIES_SLOWKING] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SKILL_SWAP = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_MISDREAVUS] = { .learnset = { + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_UNOWN] = { .learnset = { + } }, + + [SPECIES_WOBBUFFET] = { .learnset = { + } }, + + [SPECIES_GIRAFARIG] = { .learnset = { + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_PINECO] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SANDSTORM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_FORRETRESS] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SANDSTORM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_DUNSPARCE] = { .learnset = { + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_GLIGAR] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_STEELIX] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SNUBBULL] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SLUDGE_BOMB = TRUE, + .FIRE_BLAST = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .OVERHEAT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_GRANBULL] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SLUDGE_BOMB = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .OVERHEAT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_QWILFISH] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_SCIZOR] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SHUCKLE] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_HERACROSS] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SNEASEL] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SNATCH = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_TEDDIURSA] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_URSARING] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SLUGMA] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_MAGCARGO] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SWINUB] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_PILOSWINE] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_CORSOLA] = { .learnset = { + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_REMORAID] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_OCTILLERY] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .SLUDGE_BOMB = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_DELIBIRD] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .FLY = TRUE, + } }, + + [SPECIES_MANTINE] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_SKARMORY] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .CUT = TRUE, + .FLY = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_HOUNDOUR] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .SLUDGE_BOMB = TRUE, + .FIRE_BLAST = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SNATCH = TRUE, + .OVERHEAT = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_HOUNDOOM] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .SLUDGE_BOMB = TRUE, + .FIRE_BLAST = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SNATCH = TRUE, + .OVERHEAT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_KINGDRA] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_PHANPY] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_DONPHAN] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_PORYGON2] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .THIEF = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_STANTLER] = { .learnset = { + .CALM_MIND = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_SMEARGLE] = { .learnset = { + } }, + + [SPECIES_TYROGUE] = { .learnset = { + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_HITMONTOP] = { .learnset = { + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SMOOCHUM] = { .learnset = { + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_ELEKID] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_MAGBY] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_MILTANK] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_BLISSEY] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_RAIKOU] = { .learnset = { + .CALM_MIND = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .SANDSTORM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_ENTEI] = { .learnset = { + .CALM_MIND = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SUICUNE] = { .learnset = { + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SANDSTORM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_LARVITAR] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_PUPITAR] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_TYRANITAR] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .DRAGON_CLAW = TRUE, + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_LUGIA] = { .learnset = { + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .SANDSTORM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .STEEL_WING = TRUE, + .SKILL_SWAP = TRUE, + .FLY = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_HO_OH] = { .learnset = { + .CALM_MIND = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .STEEL_WING = TRUE, + .OVERHEAT = TRUE, + .FLY = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_CELEBI] = { .learnset = { + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .SANDSTORM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .SKILL_SWAP = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_OLD_UNOWN_B] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_C] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_D] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_E] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_F] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_G] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_H] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_I] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_J] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_K] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_L] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_M] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_N] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_O] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_P] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_Q] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_R] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_S] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_T] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_U] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_V] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_W] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_X] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_Y] = { .learnset = { + } }, + + [SPECIES_OLD_UNOWN_Z] = { .learnset = { + } }, + + [SPECIES_TREECKO] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_GROVYLE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SCEPTILE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .DRAGON_CLAW = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_TORCHIC] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_COMBUSKEN] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_BLAZIKEN] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_MUDKIP] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_MARSHTOMP] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_SWAMPERT] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_POOCHYENA] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SNATCH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_MIGHTYENA] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SNATCH = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_ZIGZAGOON] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_LINOONE] = { .learnset = { + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_WURMPLE] = { .learnset = { + } }, + + [SPECIES_SILCOON] = { .learnset = { + } }, + + [SPECIES_BEAUTIFLY] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_CASCOON] = { .learnset = { + } }, + + [SPECIES_DUSTOX] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_LOTAD] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SURF = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_LOMBRE] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_LUDICOLO] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_SEEDOT] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_NUZLEAF] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SHIFTRY] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_NINCADA] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_NINJASK] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_SHEDINJA] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .THIEF = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_TAILLOW] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + } }, + + [SPECIES_SWELLOW] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + } }, + + [SPECIES_SHROOMISH] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SNATCH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_BRELOOM] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SNATCH = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SPINDA] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_WINGULL] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + } }, + + [SPECIES_PELIPPER] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + .SURF = TRUE, + } }, + + [SPECIES_SURSKIT] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_MASQUERAIN] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_WAILMER] = { .learnset = { + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_WAILORD] = { .learnset = { + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_SKITTY] = { .learnset = { + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_DELCATTY] = { .learnset = { + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_KECLEON] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_BALTOY] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .SKILL_SWAP = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_CLAYDOL] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .SKILL_SWAP = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_NOSEPASS] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_TORKOAL] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .SLUDGE_BOMB = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SABLEYE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SNATCH = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_BARBOACH] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_WHISCASH] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_LUVDISC] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_CORPHISH] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + } }, + + [SPECIES_CRAWDAUNT] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_FEEBAS] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_MILOTIC] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_CARVANHA] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_SHARPEDO] = { .learnset = { + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_TRAPINCH] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_VIBRAVA] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_FLYGON] = { .learnset = { + .DRAGON_CLAW = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_MAKUHITA] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_HARIYAMA] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_ELECTRIKE] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_MANECTRIC] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_NUMEL] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_CAMERUPT] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SPHEAL] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_SEALEO] = { .learnset = { + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_WALREIN] = { .learnset = { + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_CACNEA] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_CACTURNE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_SNORUNT] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_GLALIE] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_LUNATONE] = { .learnset = { + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .SKILL_SWAP = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_SOLROCK] = { .learnset = { + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .SKILL_SWAP = TRUE, + .OVERHEAT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_AZURILL] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + } }, + + [SPECIES_SPOINK] = { .learnset = { + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_GRUMPIG] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_PLUSLE] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_MINUN] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_MAWILE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .SLUDGE_BOMB = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_MEDITITE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_MEDICHAM] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SWABLU] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + } }, + + [SPECIES_ALTARIA] = { .learnset = { + .DRAGON_CLAW = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STEEL_WING = TRUE, + .FLY = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_WYNAUT] = { .learnset = { + } }, + + [SPECIES_DUSKULL] = { .learnset = { + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_DUSCLOPS] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_ROSELIA] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_SLAKOTH] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_VIGOROTH] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SLAKING] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_GULPIN] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SNATCH = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SWALOT] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SNATCH = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_TROPIUS] = { .learnset = { + .ROAR = TRUE, + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STEEL_WING = TRUE, + .CUT = TRUE, + .FLY = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_WHISMUR] = { .learnset = { + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + } }, + + [SPECIES_LOUDRED] = { .learnset = { + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_EXPLOUD] = { .learnset = { + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .OVERHEAT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_CLAMPERL] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_HUNTAIL] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SNATCH = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_GOREBYSS] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_ABSOL] = { .learnset = { + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SNATCH = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SHUPPET] = { .learnset = { + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_BANETTE] = { .learnset = { + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_SEVIPER] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .SLUDGE_BOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SNATCH = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_ZANGOOSE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_RELICANTH] = { .learnset = { + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SURF = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_ARON] = { .learnset = { + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_LAIRON] = { .learnset = { + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_AGGRON] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .DRAGON_CLAW = TRUE, + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_CASTFORM] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_VOLBEAT] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_ILLUMISE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_LILEEP] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .SANDSTORM = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + } }, + + [SPECIES_CRADILY] = { .learnset = { + .TOXIC = TRUE, + .BULLET_SEED = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .GIGA_DRAIN = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DOUBLE_TEAM = TRUE, + .SLUDGE_BOMB = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_ANORITH] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_ARMALDO] = { .learnset = { + .WATER_PULSE = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_RALTS] = { .learnset = { + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_KIRLIA] = { .learnset = { + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_GARDEVOIR] = { .learnset = { + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .THIEF = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_BAGON] = { .learnset = { + .DRAGON_CLAW = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SHELGON] = { .learnset = { + .DRAGON_CLAW = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_SALAMENCE] = { .learnset = { + .DRAGON_CLAW = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .IRON_TAIL = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .FLAMETHROWER = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STEEL_WING = TRUE, + .CUT = TRUE, + .FLY = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_BELDUM] = { .learnset = { + } }, + + [SPECIES_METANG] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SLUDGE_BOMB = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_METAGROSS] = { .learnset = { + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SLUDGE_BOMB = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_REGIROCK] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_REGICE] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_REGISTEEL] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .SANDSTORM = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_KYOGRE] = { .learnset = { + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HAIL = TRUE, + .HIDDEN_POWER = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .ROCK_TOMB = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_GROUDON] = { .learnset = { + .DRAGON_CLAW = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .DIG = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .OVERHEAT = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_RAYQUAZA] = { .learnset = { + .DRAGON_CLAW = TRUE, + .WATER_PULSE = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .BULK_UP = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .BLIZZARD = TRUE, + .HYPER_BEAM = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .IRON_TAIL = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .SHOCK_WAVE = TRUE, + .FLAMETHROWER = TRUE, + .SANDSTORM = TRUE, + .FIRE_BLAST = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .OVERHEAT = TRUE, + .FLY = TRUE, + .SURF = TRUE, + .STRENGTH = TRUE, + .ROCK_SMASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_LATIAS] = { .learnset = { + .DRAGON_CLAW = TRUE, + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .SANDSTORM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STEEL_WING = TRUE, + .CUT = TRUE, + .FLY = TRUE, + .SURF = TRUE, + .FLASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_LATIOS] = { .learnset = { + .DRAGON_CLAW = TRUE, + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .ROAR = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .ICE_BEAM = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .EARTHQUAKE = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .SANDSTORM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .STEEL_WING = TRUE, + .CUT = TRUE, + .FLY = TRUE, + .SURF = TRUE, + .FLASH = TRUE, + .WATERFALL = TRUE, + .DIVE = TRUE, + } }, + + [SPECIES_JIRACHI] = { .learnset = { + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .SANDSTORM = TRUE, + .AERIAL_ACE = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .SKILL_SWAP = TRUE, + .FLASH = TRUE, + } }, + + [SPECIES_DEOXYS] = { .learnset = { + .FOCUS_PUNCH = TRUE, + .WATER_PULSE = TRUE, + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .ICE_BEAM = TRUE, + .HYPER_BEAM = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .SOLAR_BEAM = TRUE, + .THUNDERBOLT = TRUE, + .THUNDER = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .BRICK_BREAK = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .ROCK_TOMB = TRUE, + .AERIAL_ACE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .CUT = TRUE, + .STRENGTH = TRUE, + .FLASH = TRUE, + .ROCK_SMASH = TRUE, + } }, + + [SPECIES_CHIMECHO] = { .learnset = { + .CALM_MIND = TRUE, + .TOXIC = TRUE, + .HIDDEN_POWER = TRUE, + .SUNNY_DAY = TRUE, + .TAUNT = TRUE, + .LIGHT_SCREEN = TRUE, + .PROTECT = TRUE, + .RAIN_DANCE = TRUE, + .SAFEGUARD = TRUE, + .FRUSTRATION = TRUE, + .RETURN = TRUE, + .PSYCHIC = TRUE, + .SHADOW_BALL = TRUE, + .DOUBLE_TEAM = TRUE, + .REFLECT = TRUE, + .SHOCK_WAVE = TRUE, + .TORMENT = TRUE, + .FACADE = TRUE, + .SECRET_POWER = TRUE, + .REST = TRUE, + .ATTRACT = TRUE, + .SKILL_SWAP = TRUE, + .SNATCH = TRUE, + .FLASH = TRUE, + } }, }; diff --git a/src/daycare.c b/src/daycare.c index 9d199f0f3a..59bd7b7233 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -685,7 +685,7 @@ static void BuildEggMoveset(struct Pokemon *egg, struct BoxPokemon *father, stru { for (j = 0; j < NUM_TECHNICAL_MACHINES + NUM_HIDDEN_MACHINES; j++) { - if (sHatchedEggFatherMoves[i] == ItemIdToBattleMoveId(ITEM_TM01_FOCUS_PUNCH + j) && CanMonLearnTMHM(egg, j)) + if (sHatchedEggFatherMoves[i] == ItemIdToBattleMoveId(ITEM_TM01 + j) && CanMonLearnTMHM(egg, j)) { if (GiveMoveToMon(egg, sHatchedEggFatherMoves[i]) == MON_HAS_MAX_MOVES) DeleteFirstMoveAndGiveMoveToMon(egg, sHatchedEggFatherMoves[i]); diff --git a/src/item_use.c b/src/item_use.c index 8a02827176..9737ca7d87 100755 --- a/src/item_use.c +++ b/src/item_use.c @@ -781,7 +781,7 @@ void ItemUseOutOfBattle_RareCandy(u8 taskId) void ItemUseOutOfBattle_TMHM(u8 taskId) { - if (gSpecialVar_ItemId >= ITEM_HM01_CUT) + if (gSpecialVar_ItemId >= ITEM_HM01) DisplayItemMessage(taskId, FONT_NORMAL, gText_BootedUpHM, BootUpSoundTMHM); // HM else DisplayItemMessage(taskId, FONT_NORMAL, gText_BootedUpTM, BootUpSoundTMHM); // TM diff --git a/src/party_menu.c b/src/party_menu.c index 02c742dc90..f72814cbbf 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -4775,7 +4775,7 @@ static void Task_LearnedMove(u8 taskId) if (move[1] == 0) { AdjustFriendship(mon, FRIENDSHIP_EVENT_LEARN_TMHM); - if (item < ITEM_HM01_CUT) + if (item < ITEM_HM01) RemoveBagItem(item, 1); } GetMonNickname(mon, gStringVar1); diff --git a/src/pokemon.c b/src/pokemon.c index b8f7ae48b3..d8b45081f7 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -6199,15 +6199,26 @@ u32 CanMonLearnTMHM(struct Pokemon *mon, u8 tm) { return 0; } - else if (tm < 32) + + // Fewer than 64 moves, use GF's method (for matching). + if (sizeof(struct TMHMLearnset) <= 8) { - u32 mask = 1 << tm; - return gTMHMLearnsets[species][0] & mask; + if (tm < 32) + { + u32 mask = 1 << tm; + return gTMHMLearnsets[species].as_u32s[0] & mask; + } + else + { + u32 mask = 1 << (tm - 32); + return gTMHMLearnsets[species].as_u32s[1] & mask; + } } else { - u32 mask = 1 << (tm - 32); - return gTMHMLearnsets[species][1] & mask; + u32 index = tm / 32; + u32 mask = 1 << (tm % 32); + return gTMHMLearnsets[species].as_u32s[index] & mask; } } @@ -6217,15 +6228,25 @@ u32 CanSpeciesLearnTMHM(u16 species, u8 tm) { return 0; } - else if (tm < 32) + // Fewer than 64 moves, use GF's method (for matching). + if (sizeof(struct TMHMLearnset) <= 8) { - u32 mask = 1 << tm; - return gTMHMLearnsets[species][0] & mask; + if (tm < 32) + { + u32 mask = 1 << tm; + return gTMHMLearnsets[species].as_u32s[0] & mask; + } + else + { + u32 mask = 1 << (tm - 32); + return gTMHMLearnsets[species].as_u32s[1] & mask; + } } else { - u32 mask = 1 << (tm - 32); - return gTMHMLearnsets[species][1] & mask; + u32 index = tm / 32; + u32 mask = 1 << (tm % 32); + return gTMHMLearnsets[species].as_u32s[index] & mask; } } diff --git a/src/pokenav_match_call_data.c b/src/pokenav_match_call_data.c index 2e8cc40b5c..f6d71009bb 100644 --- a/src/pokenav_match_call_data.c +++ b/src/pokenav_match_call_data.c @@ -164,7 +164,7 @@ static const match_call_text_data_t sMrStoneTextScripts[] = { { MatchCall_Text_MrStone2, FLAG_ENABLE_MR_STONE_POKENAV, 0xFFFF }, { MatchCall_Text_MrStone3, FLAG_DELIVERED_STEVEN_LETTER, 0xFFFF }, { MatchCall_Text_MrStone4, FLAG_RECEIVED_EXP_SHARE, 0xFFFF }, - { MatchCall_Text_MrStone5, FLAG_RECEIVED_HM04, 0xFFFF }, + { MatchCall_Text_MrStone5, FLAG_RECEIVED_HM_STRENGTH, 0xFFFF }, { MatchCall_Text_MrStone6, FLAG_DEFEATED_PETALBURG_GYM, 0xFFFF }, { MatchCall_Text_MrStone7, FLAG_RECEIVED_CASTFORM, 0xFFFF }, { MatchCall_Text_MrStone8, FLAG_GROUDON_AWAKENED_MAGMA_HIDEOUT, 0xFFFF }, @@ -260,7 +260,7 @@ static const match_call_text_data_t sMayTextScripts[] = { { MatchCall_Text_May2, FLAG_DEFEATED_DEWFORD_GYM, 0xFFFF }, { MatchCall_Text_May3, FLAG_DELIVERED_DEVON_GOODS, 0xFFFF }, { MatchCall_Text_May4, FLAG_HIDE_MAUVILLE_CITY_WALLY, 0xFFFF }, - { MatchCall_Text_May5, FLAG_RECEIVED_HM04, 0xFFFF }, + { MatchCall_Text_May5, FLAG_RECEIVED_HM_STRENGTH, 0xFFFF }, { MatchCall_Text_May6, FLAG_DEFEATED_LAVARIDGE_GYM, 0xFFFF }, { MatchCall_Text_May7, FLAG_DEFEATED_PETALBURG_GYM, 0xFFFF }, { MatchCall_Text_May8, FLAG_RECEIVED_CASTFORM, 0xFFFF }, @@ -289,7 +289,7 @@ static const match_call_text_data_t sBrendanTextScripts[] = { { MatchCall_Text_Brendan2, FLAG_DEFEATED_DEWFORD_GYM, 0xFFFF }, { MatchCall_Text_Brendan3, FLAG_DELIVERED_DEVON_GOODS, 0xFFFF }, { MatchCall_Text_Brendan4, FLAG_HIDE_MAUVILLE_CITY_WALLY, 0xFFFF }, - { MatchCall_Text_Brendan5, FLAG_RECEIVED_HM04, 0xFFFF }, + { MatchCall_Text_Brendan5, FLAG_RECEIVED_HM_STRENGTH, 0xFFFF }, { MatchCall_Text_Brendan6, FLAG_DEFEATED_LAVARIDGE_GYM, 0xFFFF }, { MatchCall_Text_Brendan7, FLAG_DEFEATED_PETALBURG_GYM, 0xFFFF }, { MatchCall_Text_Brendan8, FLAG_RECEIVED_CASTFORM, 0xFFFF }, diff --git a/src/trainer_hill.c b/src/trainer_hill.c index a74270ec77..3fbec613ad 100644 --- a/src/trainer_hill.c +++ b/src/trainer_hill.c @@ -146,22 +146,22 @@ static const u16 sPrizeListLuxuryBall1[] = {ITEM_LUXURY_BALL, ITEM_ETHER, I static const u16 sPrizeListMaxRevive1[] = {ITEM_MAX_REVIVE, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; static const u16 sPrizeListMaxEther1[] = {ITEM_MAX_ETHER, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; static const u16 sPrizeListElixir1[] = {ITEM_ELIXIR, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; -static const u16 sPrizeListRoar[] = {ITEM_TM05_ROAR, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; -static const u16 sPrizeListSludgeBomb[] = {ITEM_TM36_SLUDGE_BOMB, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; -static const u16 sPrizeListToxic[] = {ITEM_TM06_TOXIC, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; -static const u16 sPrizeListSunnyDay[] = {ITEM_TM11_SUNNY_DAY, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; -static const u16 sPrizeListEarthQuake[] = {ITEM_TM26_EARTHQUAKE, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; +static const u16 sPrizeListRoar[] = {ITEM_TM_ROAR, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; +static const u16 sPrizeListSludgeBomb[] = {ITEM_TM_SLUDGE_BOMB, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; +static const u16 sPrizeListToxic[] = {ITEM_TM_TOXIC, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; +static const u16 sPrizeListSunnyDay[] = {ITEM_TM_SUNNY_DAY, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; +static const u16 sPrizeListEarthQuake[] = {ITEM_TM_EARTHQUAKE, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; static const u16 sPrizeListRareCandy2[] = {ITEM_RARE_CANDY, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; static const u16 sPrizeListLuxuryBall2[] = {ITEM_LUXURY_BALL, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; static const u16 sPrizeListMaxRevive2[] = {ITEM_MAX_REVIVE, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; static const u16 sPrizeListMaxEther2[] = {ITEM_MAX_ETHER, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; static const u16 sPrizeListElixir2[] = {ITEM_ELIXIR, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; -static const u16 sPrizeListBrickBreak[] = {ITEM_TM31_BRICK_BREAK, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; -static const u16 sPrizeListTorment[] = {ITEM_TM41_TORMENT, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; -static const u16 sPrizeListSkillSwap[] = {ITEM_TM48_SKILL_SWAP, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; -static const u16 sPrizeListGigaDrain[] = {ITEM_TM19_GIGA_DRAIN, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; -static const u16 sPrizeListAttract[] = {ITEM_TM45_ATTRACT, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; +static const u16 sPrizeListBrickBreak[] = {ITEM_TM_BRICK_BREAK, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; +static const u16 sPrizeListTorment[] = {ITEM_TM_TORMENT, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; +static const u16 sPrizeListSkillSwap[] = {ITEM_TM_SKILL_SWAP, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; +static const u16 sPrizeListGigaDrain[] = {ITEM_TM_GIGA_DRAIN, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; +static const u16 sPrizeListAttract[] = {ITEM_TM_ATTRACT, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL}; static const u16 *const sPrizeLists1[NUM_TRAINER_HILL_PRIZE_LISTS] = { @@ -1066,10 +1066,10 @@ static u16 GetPrizeItemId(void) // Which prize is given from the list depends on the time scored. // The prize for any time after 12 minutes is the same in every list. // The prizes for a time under 12 minutes are: - // - ITEM_TM11_SUNNY_DAY (Normal) + // - ITEM_TM_SUNNY_DAY (Normal) // - ITEM_ELIXIR (Variety) - // - ITEM_TM19_GIGA_DRAIN (Unique) - // - ITEM_TM31_BRICK_BREAK (Expert) + // - ITEM_TM_GIGA_DRAIN (Unique) + // - ITEM_TM_BRICK_BREAK (Expert) // As an additional note, if players were allowed to enter a Trainer Hill challenge before // entering the Hall of Fame, there would be 1 additional prize possibility (ITEM_MAX_ETHER) // as Normal / Unique modes would use sPrizeListSets[0][3] / sPrizeListSets[1][3] respectively. From 6eaaa50ad5252ee9c526be667800501d19aa482b Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 9 Aug 2023 12:49:21 -0400 Subject: [PATCH 29/43] Correct berry fix graphics colors, more PLTT constant use (#1892) --- gflib/bg.c | 4 +- .../{gba_small.bin => gba_connect.bin} | Bin graphics/berry_fix/gba_connect.png | Bin 0 -> 9109 bytes graphics/berry_fix/gba_small.pal | 35 ------------ graphics/berry_fix/gba_small.png | Bin 982 -> 0 bytes graphics/berry_fix/gba_transfer.pal | 35 ------------ graphics/berry_fix/gba_transfer.png | Bin 900 -> 5480 bytes graphics/berry_fix/gba_transfer_error.pal | 35 ------------ graphics/berry_fix/gba_transfer_error.png | Bin 1014 -> 6279 bytes graphics/berry_fix/gba_transfer_highlight.pal | 35 ------------ graphics/berry_fix/gba_transfer_highlight.png | Bin 1060 -> 6354 bytes graphics/berry_fix/logo.pal | 51 ------------------ graphics/berry_fix/logo.png | Bin 811 -> 4566 bytes graphics/berry_fix/text.pal | 19 +++++++ graphics/berry_fix/window.pal | 35 ------------ graphics/berry_fix/window.png | Bin 211 -> 279 bytes include/graphics.h | 6 +-- src/berry_fix_graphics.c | 10 ++-- src/berry_fix_program.c | 20 +++---- src/data/graphics/berry_fix.h | 6 +-- 20 files changed, 39 insertions(+), 252 deletions(-) rename graphics/berry_fix/{gba_small.bin => gba_connect.bin} (100%) create mode 100644 graphics/berry_fix/gba_connect.png delete mode 100644 graphics/berry_fix/gba_small.pal delete mode 100644 graphics/berry_fix/gba_small.png delete mode 100644 graphics/berry_fix/gba_transfer.pal delete mode 100644 graphics/berry_fix/gba_transfer_error.pal delete mode 100644 graphics/berry_fix/gba_transfer_highlight.pal delete mode 100644 graphics/berry_fix/logo.pal create mode 100644 graphics/berry_fix/text.pal delete mode 100644 graphics/berry_fix/window.pal diff --git a/gflib/bg.c b/gflib/bg.c index 89f5038246..4ccb95eb6b 100644 --- a/gflib/bg.c +++ b/gflib/bg.c @@ -421,13 +421,11 @@ u16 Unused_LoadBgPalette(u8 bg, const void *src, u16 size, u16 destOffset) if (!IsInvalidBg32(bg)) { - u16 paletteOffset = (sGpuBgConfigs2[bg].basePalette * 0x20) + (destOffset * 2); + u16 paletteOffset = PLTT_OFFSET_4BPP(sGpuBgConfigs2[bg].basePalette) + (destOffset * 2); cursor = RequestDma3Copy(src, (void *)(paletteOffset + BG_PLTT), size, 0); if (cursor == -1) - { return -1; - } } else { diff --git a/graphics/berry_fix/gba_small.bin b/graphics/berry_fix/gba_connect.bin similarity index 100% rename from graphics/berry_fix/gba_small.bin rename to graphics/berry_fix/gba_connect.bin diff --git a/graphics/berry_fix/gba_connect.png b/graphics/berry_fix/gba_connect.png new file mode 100644 index 0000000000000000000000000000000000000000..78e29251940e358b4b6130a03ea256132482f9f2 GIT binary patch literal 9109 zcmV;GBWm1 zaB^>EX>4U6ba`-PAZ2)IW&i+q+U=WJk{madMgOsiUIJ#|EeE4n@1U38=OTiXsFKR8 zs`{_RlrobM;qJg2?f`)9{Lg=1_h0;JJyw@X>(y%Y{K=Lr4u0wW^XKz3`24c-De*IX{#wuX^MlvRZx^)ueSQA=x@+rupZ>j3_<7^^C+W%h{rkE8y-|vv z*TeVk&c4@;{JZIV|Bvf?+waZ)`1jlh#xC41MHf#B$@9JIDM|mQH27KH_Z&a34!#Gz zhgAMNcJAk|e+b_Fi`e<`{Y3gT6wcT02kIYU^nE>)KfIoPW-b0QqVVI_`0E>OhV6g< z=XbHYclUeGXLci3B30dYQa?iYe&d6aP^NcT<*V_3;rI5wjIYiV7a7}RbMm!Zun>v% z4LR&E!VTyBTwyW998YZgjBycbz1CBU78l_UDeEiT*pj8~QYRmatR-HKKgSZ@bL~BE zh0c?A;FB?Mv%nSq@a6vO#ee7P=Z)@F>4xxv`H2Zj#S z4ULjYcBPbBTIt2gsHx^!YOSpbqee?Dx6*2Btv73ObJopl z3?4eT_2BBkC&rj@rkQ7%b+*~3&9Nw-l~-AHwbhrcvExpg_TP0kxBIp|PB@g($)}up z+Udv6xYXKBH{WvWZMR>$<7d{sS^YI@;SZVn=UEHitSMvpeXjkMHC}G*$1Q^3q$p=( zEapJQn=(K_N9D}-kaJY#lrwJvuoB5yC`!%_$`~2UC&Y5Y&)of%xqq5BSMtA)>Lh3cT-P<1J4Z^9n zcO=$3#bWR%6(@29t1EfQdP*p>fW`pGY5Od*;P<4`jyo;bArP@a66C#5LNkn7N2+0@ zbTlolUim-_9{66hj2Nb=rWO~?o^EGE%`+>aKcdZPJLL(bG=Hm=NTuF38)dM`LycjV z(F!wOmDk$Jvsvx8S-8Lm0|nSD67srwiR~uE-(bFB?fO|&oL~hNJCRgrjtLYV1Vg@& zrk<2sb6m9)lrR^Cyk@EMW~u{fqdO@gMA(`T-#%gKg_d~WI5sW;T~<%r_iXR@QMmBX z!-v^epu8tj_Z9eV?KaX-XRfUm`X-)!*JjX%WHHPfNexLIOl@1aaO;lL_aw_VW#&VI zM(%MlTo0gtakdYSPLwP4TNCeXW(iKjLw5yNn3z{Qj!$-)pl97w5D?o>dbB{wM2{p0 zGh(;Wpp~)%6GIxz(RZhU!J`~b8)~~kZ&Rk5dCy!XGgil~4*eI>=1*;xtVoq*xNU%0~(itRQ*xmRUQew7mdy*MYLTccPccMOq_jpbhz5 zz_Cn*12_q(Hh5-cVQZ8nXF#W6kXA0 zrD15QoL8U9d9zd|yl3N0D~^yZ_XISc%R|A?pWdM#f%Ku+3KhZyXn@fU8D_h&^Vmz9 z*qMES?ocKXNg}lrtVS5l!$Cg5Ycei%kJgjI0JiXCKl%*@PE~(41J;6&~Y zw1F6<-G$qBeED95rIIl3?bEYBlj~VPg6qAyCEGx z%|`DbIH=!QV5~fsIENcEN#@r3sod56@doxAsgyVi{O_sV*=YjqAev0$@a3u z7$Rq2d~P_8Mt-yji;!r_214}o1b9ND72w=DQ~)<^n(XR9>N4h92k^Z!;t9wh`hh-$ z7nTF%n<{An)^QiQ6b(g<97eCGpj5((4&^nrenauWP|)ep-zfMoGGesUP}hYl5kRfm z-1MeLnDCShQKQEOgt2M&n5a>Zin@j&sTji7Xc6GPw~G)c2d! z;OUrx%3w6ElxQVC6zLO@3fz=F2Dcq#4JklSc<7CVVn7Jfx(~g`SYR_k;L#gs$n^wM z1DB!VqCCd zQtiu2!fn#BUEskHGDKjG-YYN_tdqedC%x%Oe$ zs+KokHyVw?2ZDv6s4Pl{#)IP?%rkpXiS}UplsvMGJfep1W63oNMsOyyvLI)HXEU)f zJ&Hs$a*Vx|2$mm0fJ=rlV*{ctWwgXvXFDD;5kmwK@kCkycT@*MyhCBSt2el0+bJ_s zB_tGg!)+Jw8!;35=?VODCq2=(o=)p`fMBpLO+g!geDn_`26{bg96L}cPt_$bx30t# z(1Uw*2RHVTd_gqP=rXrGY$Pb=Y`_M<7y1`%OC53nY8;spJs$(wI<8IYO1!mQD}@+i zY^ex3l|=4*{LN#co67CXI|6Qa;EB~5LGl#CgRzMKL_a_o)@Alr*?uQd&P>sR0c56i zhG(RJ9p>hsNszAHq$(&9bO`tYD?xP!n}L3)rLava1B8YGGo^(L@KNwixQyMW z8c=^oufxq7&Jrz-n!+$$91(WKVLCGfbY9PSpnlaa>3I8gAEK98axKh5jXgH-@sSk+ z`>5^Wm`(J^*``j7I2h_uJ{m%z*4~G3d`%2GmloovO}Wc8fZ*5=pRqr|zA^rnaM{y5 z*eH~&eUJdzg8oJlQ3L6b3=eFjG%VZlF-EO}ahoED*yzr9AYkktFlZ6I0fYr}T8~Im zx{4@)GB`X0JXTU{wX{UkNX?O64WSrB6Sk6xnt@YHP9sNxf*P4J8#rv5U{%q+FIjT} z%!v$r3~tY`F>Bh3SuIPug+PC=f%(EWGiB*)ba29lGO8}^99zE9xg=+Sc3S;_8qh1f zt3#MG5(z#s7QYw+pQzxo=q$#hg-7EuN*Bn$6{UqgL8l_Wh2e-F zZGebd#VRhvFc38fN&YZh%)zsOq5&EK_G3Vwyih0*+$cN>{d%%PB7sc7X=5x7reWqx z!w^UKP?8eTmSBcMK8OU1$er8OQXpJ4MV_#ipZteD#tbcU2C8`6H$&fDE7K^o2$fJe zNksv`5N0HltCnpH^vb1elq4ihYG zb5OD&YhgmG5m5R28BqkwMg0AwCyL*dG!Gi#q=TS5egIR%vE4QQfoGEN{BrYgL*}DS@L*b7{Q#@luU90X}$$OC>5k= zidvw9=2x#7;5&S4l29~KN7P3umQdnYy_UkZlz%%rX~|?&K#2**nyD2OdVL#(xKkui zLkbTq2s1=n1d@w~Gnqj9ra&s(l9#0o5W@?jT9$|opGjUTlF+Y2{*9_2mk^}oC$np5$j2QJ-(_{0z*6!2ACb0bc|C-@6V2J(%mjtkTWB|ju`Opi>F!M5yV zi;TfFqd78Vz`%<^R`3#z7ODM$m2@@4-oxEbR!VN(fD6`Q5NPfOdVptPQg|RPhd4ly z2oo<2c>2P*qf(Cq;M987VE&dEh{_*1h3W82+LZu3qwWaUqY&(5xl5IZbIBrJk5I>_ zgfwv^70Hg|9P+134GoDvLHS&V9tt$W0y+Cf6E=(oMUSqT-T+#dnbJ(~H%xv4mKt#) z>lTX^C#v|M1}6an>{9*O(MeoG{nIRlt}fQ2mTb`A7u|gJGp5l$qJ#vp)}0Q93&rG+ zd(Y~l&oFAbI2e^wAYYG{q+$Rv`hHl%xyFmy(6TbNiPp18cyaReB5MRM)g#c!FKQ4^ zg_g%9Yne!^2C&M_3+@7}wAdTC-UlsvBMH$rer=;rTwbl?SO_74YUMDHqR7^F(*zKD zEf19}Yts_4OO!;5S}w~$i2WmJBBB~2BO=n~L$-3Wz;A8TM#O&fn(zWt zSnkqekQuo_UJ8QIM+4%iT5?)OxnW2l{DvBys7%}*fyU+_;#!?Cb}AI+D<^I#0Ny!@ z9$4uZfmYaQc9Jhx792qTLD>!0u)FBVR=V0{_f!ak{c+=Pfcohf9 zeG!)l=%nP~MdAc=!1vk=f;E6r29@*I1}+gGB}#fDdR;4>$lN^L3dp2lSP15X-JF8{ zT(ydZjJ$ckc0@v1o1=t95k3VAQ8lfBI*XeOuJxWkfHHr>JJePpi*ed z5l56A*P+DI#AS~t2Ok51Xp>!5{jXEIq9faD*9QtuVm~@@H+A781=Usuc zYvh@%+_PyYSeuG}-MzHXMm14rfX6(~cVban+Q?B_%blQgdR%>DqKwD{Ymls#2#vXj zU(hBP-I@VXz(pH9%w8sj9EpZ`z;N1(3|kJd3vB81EJv{yn!a2G7vf(MnfEQj54>Cj z7J*Z#5NZc828(ectwtZpDq>tPdIPfPI*I~P^ErA)yWC#eE%cHJlc%=58-0(AXJ~4iEsY76J{Y66!wIEUWx?j= zwFxL?I<<3(Ho`-aB|hnjwsQ&Z;Xf2ky?iPS{#Fp*6qmN^(Z#iCpNhcB(pEk%L9!3p z%EY4?U{l=#zG9Y!#6L|7Gaz__yQxWLNs|%IhG8SmdC)5JbLI;1eLByfE{aoX4X=ac zMoz9>@E$m8rol^OC{3MWqaH0OnHW^lqCG*}N!l-0ZT#ZLvj;M=@l$G5IQNUw2AsckM0PE+qxoV~@ zZNnNgT%f}z;n?p&Pk}^09qQhIGUG)(BySOmRejb*D@uXF#BIg5PvsC6 z#1YHfaP>MRk+oJ&g~q7q8zq&oCrX5lu934Xm8*RToflC}Y&sw~>JX@EfCq>GSyM3> zM;br)&lb)3EZNcUSH3j-#d}U~Huy~C6;)1@8%{Q*pmiJKj-KtfIJv4m-?@=<;5sd_ zApIgnSQ{15L7rmg4$hDe?Hd7MRo1bT4Oi{Y@>HHEKC}sLQ)`o82%3Z{lK7pJe@3yz z)*)eSIrK_wDw3{tY=;4TsGVBTDx@tZlpR=uB_*Lc0aDSV34A~=_JSILXsl_20KdS0 zS@gfO`NL#qCucCSLAhic>4sM7P(jAqt)tjBTY#WVT05QW<9^*Vz!wSri4xXmOb5@NYForzI~ zmi8v45p^m6oYmH^_ikx1aRA0JrM3Y~1CcjqP+`Sqp@Si>Is?I2UhBg>VTh3Kx)r1` zC0-9uD@Xx95Ov5VnuM`;gtU|ia^!?eTOh*o1uy)aHR)^+&VEMePFw-@8x1LauhWT8 z$(AS*P9q)Z8#DntF0{{T>}aSGFDigs@n$0j!KoH?5R~5C`RRTw?(Bf6BC7H?%<_IBQm==VKXy=d!~=R5w2Lxkza+nS5o zvAnx!^g4rAg{66Bsabz}?5H!KR$Geih?;yD1u&yStx52)4$m6Knb#vQg)_b)-h>uhaF}j@HYOT3W@Ux37)~AscBr0KlLlsN(m1;sjOWhw*~Q4$ zX#;?F$rnZ*sezfiZB390wq|axI@w5 z2#i?kLkr<=Z%stXuks!7gGYChKg7g4vZ5S+c5SpYR0OBPK6`I-NZAA(8XHn!S~9S3OGsJt*d2wF!8*E{ z7zM2|)p=WMY&XQKb;EkmV%S28*B6B3O0Hx1qTGY_iz&XXGktK47LM^WI-3f)l5Clg zjpITi!EuN!?GS{nZF$2kyJd`J>*${>3Qef$<{2BYN9E{HV$g<1)&fO z3fw_wW3EbzXz%F5o0E)UR71pOeNUVRKoBKFa0(2hEs%(&uU;FHO2&PgRa(#_c>oRa zI50Nt?5$5=lYP{OP9}gXndU@=C#}2y`>8_a5pRMSD>=XwPDj&J4NbfZ?u(`>8bCIt`)i;7(ng0(%o|pWo)E^vv_+Wfz^?8q^zFIO=Tf!Ti9tHhAt719L<4XxZk75f$3Yx6!d3n9>W=cIt&dsi+)`IQ9#(r1?V4+ zG59*Q{n;_cd-hnUFT_{cV@hL*pa|~g_%LP99R`!kI;J+_+pI(_$)z@MA=F%=8<}Fq z$7?O`YQ0U%zb96$qSNWZKd&rNKnxZ&rj0kmxfW&RmbJV~wV;n6qB({R_@VI;?MTnw zbjBLC2Gzoog9l1fBfbNSkVJs>x;C}$>$_c!LmCDhG{!e)o%euSP;$`0HXzVCeA!^!JVazR}+|`u}nxE%RXu{ukEhnf8eQ z4u}8%0ANr|R7C&)0RR90ARr*DtgPk;2>-ovAe;!4_LMPF&7{Tlq}5vP=Eao7)gU=y zYLvxVYMlT7|D@GgARr)nd(Hp<|4K@8#l^*9V!di=#bSFogM)+KDFD5DDYUfS00000 z004Qht@r={00Cl4M??UK1szBL000SaNLh0L04^f{04^f|c%?sf00007bV*G`2j>O_ z02L3|0e_7E00U)7L_t(|+U=OzlB6IEK;2iTd=Rfl|NnO`Nw@?=u-o3L+NzwX>aknF zV+c{~I>*>RD@3!O)ILoUY#7|X?>p``<6YoL>Q;?iTf`|GtL0D}C-O4hYE#ht>#hhj zwB6cfH$>n_a0nkBFM?-|A}`atD338=^Oguj1Sv(tjEP8jY_!ET+4clujQigdc^TkU z%MmAHDTvVdop@ji7-DaTSdCFlYBZ&RSI|*4BIMvk5)CF~gAconzu=dtB!bN;tqpzC zv{@SPT8?OPn1N`45-cjyr3i*FX0<)4J{jmR>@+=4kpo#UjS^jD-fI;)3EeEqq6*lb z*|l1rrAsKaatUlcCtwF%Pf!za*+s@^qsNeBk3=>m(#{c<=<@x2#!bRqp`gOAn zD(DhBW+LoLY=h%c1U&qQ*GY`x#d;Cz0JCeweq)L*OPFn$NQ{W>AQOpY4^BJN*~x-J zbS`~f1gAHNz}OVWyd04*HsKa}w*Y4)7`kyHcv3Fn!&Zw3HL!J$-_CJwLn5`H%GZ%Y z>^F$CbHq8nu5P+Dq(c4>ld&CBFLBk<{k$KS9x>C3;}AO zgEJLSm&|^H0DhO=k)nQGJIK_59}qj1sE^0HlPJ#vNR1_>J^fE>!3f!qrMgexYY!Vj zDGj`a1PtdwJW&luK5fVu8wTXhKFOA}#FR88T_J9ScoxVMB<)ut+195*KEL4S9tlLU zUKf$HiIKF6A*&TVRfhC8{52%oG<~h)1SRS*m#lOQS|E`$O@G%V+s#RkzS>_cDXWqA zl)`d_QVYh0j4dwJ;*POG0_O>7Z+r+MwGup5$;ncPE6$Z-h>3-jB`u|Nw%G+7$NMNbh-;^ep{OiM#`4l9J!PQ7qC75?G3xPe_Rfi=~OPV>+ z)q8*+Q_?J7A?fH7nPea^_f?5Lxil*=Cu3cXXgr+vw0AJulWWL!G>*n_aaj_LD-!r= zC0W5j%6S-urIO(#M$-Qxr^yeHKxPXp-a6n%O%a6padVv)=~$; zz#jE5+`HoN5W}14;DDsIr_?1G$0RxL zlfVaJ_uu9EDZ&1*CDcGQ_Q`Ur#JrOv3{ua|M82$Ta};n>t(;6 ze3kt< z?dRmbzHWnJ9N~PmJmuD06W=wiQsb*u<7a=rw>XH0@vibcSNVPI9+BS{@7uFqYM1Qu ze*L)=PwJlo`hPDq`n;dzm-p+p%aos1l)qp3r(f)zJpK6ZhuXOxb-!PCXRTAI{(Nrg zk6U@4ap0nq_5E1qG58XmkM}WoD7U!j*rA(?$A0q6g=%|l`DDwU@B4G-%@SL=W$?3< zUF!Ru)=_5Jv?13PkL+dCS(q)Ls6zjFOF1`2B zgQINJ(T0pZ#?Uc`Y1O8pU5BbpwOM9`!esV2o~d(AGcIbJ+W53_gxM;quC`?LHI}Zq zYy+R&w(P#g);+hKa_V9HPe0>1dgig4FHpMe%75*5T)p#}gEg<-T)g{m_38GlYxy&_ zKXont(z$=!wfyN?bgaF{jqhFK?J@p1MGiWV=ouX=Ez|K49RScJdX_Y|R-$v!vowRi zq|mi2(VUZ`V|1|HT*ULY-hJ=fKkVBh?ceHK`FovvqILg`&OOn(Pv`!&Z@=l#!l-Gg4zY2-T~~{%FqHhZWLd+{V6E}GmC6d*p>~HcI1EHdN+YTNvZni%vjonb z9)il?=chj_1F1PvEzOwJTo?@=qjxH{7rk&&R zt|Q$p%#ifD_Uz56>F8X|yX46dw$yiDRGL@wB%|D{oaSFSI(O~)THvesTy$Xe zz3+%i*WTTY8d2fpCvJ!CjaE%MB5=UKFoCHTJ*FyWu2mHQ7_t-9ocS(+T@t`ZLw}!6 z1s88q{mSfW=VrDbRdSB%ZWkF}49s4wtCxCx?}Mi8WjETE^I_s-KhmipFtIJu>RI@u z5Pyh|MjeJ_YRjX`25DAmztuB6KMR5CwKO`x6t-9qYhSalu<$$_!}`@N*&NN+_2hR7 z06&aR9y8Tdaw`xisGQtqp5D#nxqqCoqoQq|cOFMya`|u{fTCJD%tu*8?a=r=w6=ZF zN+t^-l?{}9HRkhKckRw}EtUgl%Mxj;ABII40PaVR&DDlxzn3|^$E{O2fJ=LJX>K+E z;L`^4#9ISBWv)4Y1uAn?YVLC~8>51)K5tp4inbA;=inm8ki%+YHV#GmH-7`o1{Z>X`Z7~^@;RKSoPRrJZRd>Dn3u`)QJ)@eBr$_K7(Fwv`D!<7?=7a8d;Ir4 zPao|*i|%h5H`aS^T5vsuYK&SS&v~*}SR)fq51c8`ZQGb*Ytj$C8|pl@Kd_+nxi@?Y z;_pr|76AA%lIpZ*7$i!+#)30uzm5hRh?AM&R-roxU>12;IUI7ec7J%1qbCjkv~C7= zOy{Dl?K_Rj7RH0}99&!nDH1pgeyn`F`BMh?<yD}dIG>6iOe2V@IDhR`ddvv6-V zI3o}}@B-v6Re9Tm5q>6&!5C3dmV1vtmnKm78B`cT$Om1*vM@FfHNOVo2L;Z8fWlTm z(ykXdnul`GvVAmB!he>iS#>D#v}L(1PC&Idx+97wkTe13IhkSMq%#H&`Cw?_GbHS* zr6UM*h9?D4&iJG=He8bEyIfSDfUV1tP|i9s{b>vJ9%VoE_Kq6>>zCOVgVJ#f%G5N} zQMq3V!zdVh0K34$4EChIEi~f$mC?1hI8v&tKoI!181@O>k7JR>oU&dM%Z@%?mYKHOV|Az02(_PQBhs3*HJ1=;ISxO%|+V*=7v^-*S#@jk6@26y8~VQ`j= zby#pRNq~ifhkuAwVNfcP3A;@MP@p#sqj`Gtk$Hl1X$mMiyy|$N>N9n`1H#39pl;GI zD6Y@~*rEV}ec{A9gUIA;(Ff2(TER0MhLzx9tN>}*&{n;M-lLDoO!?)6*d6Jlp@q2n z=+qE{)9)Vb!7$*Y!h1VY$$$bBuxJT0h42EX7Ul&(27hf(#O0e$T7YW9?w~jnY%u*; z4V)22pr{&l<}gC@Ea(ooKn3r{vUw3T>eLU!KGUd27|RJ5jLEqff!saMnD>U{tTwqF z+uYA+2UR!1+;DCn>Wcte#w!~gOH98~kq~;PO6PHn*_@ybJA{p@n>t;u2sD#-F~K`E zg=Tz5Q-An1G?5LRLf;e;6F!OghqLQJ=bcpwk_yA&4qJhXDI3lNykZerOQ1u74Iqjh zjiHl{JLFDJ#U4K3fSV8Ri(Nq8FXJNx)~Yoz=KGMz07?Mt41ChUMo>N?6AEdL^>Oa= zM6vNF33rHF1?=gR5^M@$aU_r-uOUD*0Iy!|CVvN1LNcTiy2ur}RVZTZ2i$uP)6meD z)mw4V1TNE7{Qspth`cRyfEpOhfVZdc0gj$vR9|OR+Qa2Qf)?zoWL6ULJ+m5UKj zAb%!z9|R5=zGnwR0@erR_9GzR5IZK^=Y>Jhng_K=G3W0wi`CHRkndx%gNHGy6PI3Pi=9nJ}PZ4`(m5r13+ zd)Ka}gENOVA8kadN$-exyhi*vH3v#)0^XWIAQ`pE>_GB-QC=)SY1m1kV3F8pqHYg7 z-WRDuFzSpO6C`0eqN_c z3#EW34X|D;Dlab?98fb!6~;lx9720AN>Cx>OJD}#fge&TeIbZ4y)R8+H zq$XUzihG?9spl3M*qAj0YHKuiLZyW{!HA_v@|NH>NUzG+Va3w>9p2!TV0&nr=+wwL9bF4Mg)P7bFk$n0e(1);I{^^L8*0Qj z-len_d30>u3dx)W9tYjb)J+hYVCoPmX;ux5!sVSOz2S}Lu%ARY?hkCq)qo(tn2p5WR@Ch~Ro6Kr-PdgRYy)jQt!8LV`O(qrlofjvj2f$kQlO4? zYetp93bqUtvBLO(TrNzwfQFk!f+RzRYu5-QGf0rUKhx^~1ldJmW>C(G#1skriCX~5 zFVaD7W4$+gA66~mJscl9+X>5ug;d0yQQW@aiOzaW=6}HdtF(s>fintuAS(POrPT!? z!M7IICzcvmL}DCej%;LDlKrlY07u-Q=)mP6+@NSLmLlxrPzq$}D+s<*uc^mo;BB#; zxI_68^+RKcQGWZov!eHj{nHC*6>31R5GknDUAd&p;E+RizzhWa#(%6VBz&ON(pMPC}7%2{~NZ3I*Cjw0RU;^>$tz+0p z?U;hdD3ER~J)HY_J22?kjr|T>Eee-_P68uKp+SFrZRGQCQLzJ?|2*lb31U<)H64Jy^E=?DV*Elk7oz*hLYC8+FR_yT=bf=P`l*lsKt)s ze1FJ5+yg4q3;jZjSP-2K3(`pih#>wyHbY`-04)V0g59z3e@cVj_!%i1UTh2~6Q_}6 z;xtHl?E7u(ki~8YgThT4y67wtQi3=_s7S%N1$@WA9+S0cCa$bUWW<@&*k{BXq6Q_5 zro%F+$R((h1gQ6fmup-qLSneqF!BCm$bYcX8&v-=&hNhZ;;u#}AK8SUfD+iK_|?9k zgYZ(7CF_n35Nk1P}scvt6I`Nlcjb}0F?}^@>Mt^tYaU%$tKQHA+2U)rh9Mmx+b4hh6+*Cn?nK%4P93<8 zta}W4F5zbIgd5c*p)3Kfs_`e1C$_64c0~XVOQJ^1puGD@fY9PQW>ta`Nncn394Zk6 z^v6|8rA)nG-ovAe;!4_LMPF&7{Tlq}5vP=Eao7 z)gU=yYLvxVYMhZNFn@Wmt@r={00Cl4M??UK1szBL000SaNLh0L04^f{04^f|c%?sf z00007bV*G`2j>O_0wxbH?#|Ny00S0DL_t(&-tCytvZEjjKK9{@oR!wX!1 z836qZ>hMZn?c5l2Ggz%Ks54^#7losr6g0D7-+_?8Dy3kcLHL`G&7@1TbAc2=Jc|N2 z9ClnuaW+{q6HmtiZ$I#p8TdeGa=cr}k;ec=iU}|dd3S(9ih?6hWq`3%tk8D-0KN{T zoSQR&$Ji|*M}HSbo_|P#1Qug4x*LuPBMx~E&f(5EE8v_FXS$9SL-T4Bi;X9K87>QA zRhMqsfdH$@`>N_%!PdvXgjM$l8>fC=07ta=BzWHugvRtStub3A;6?(+D-&gu%1{J_ z0E6hb<4CEHAfz@FWJO#Kp`I-*2rjU)fTq#fl^L)L{(p=D8lDRQeW(Orz{&VZfcHG? zL0r^fith;yCK!)F8qF#NE`aOPl9B{%pckg!vH+Lv4;bKk0_Uy-_}5CXZFo+z7w zEM_LK7)}|SQ4nI|Z0&GfmXdRM_8LLSAY9TwED2&C*bwadbp|UFKw~aQV{nxL2_UwN zVit_Y0DlE-0pu=>#{dOlpJ$*qJ@)(KDH;lq) zOesIqD8R(h4HYo^AZp`R6Q3jSU}lbi#PJ(o+8@-4-s9M@Sghs4lr2fC7y+!LhV4e*Bt6ucNSg0s!w^(c%5^t-|L z0$P1l7q}qbUB5*I|AjzN6h%=KMNt$*Q4~c{6h%=KMNt&xOa1`Rc`ULRpWU$l0000< KMNUMnLSTXp>_H*` delta 846 zcmV-U1F`(*Duf4+7!d>m0000+_jok`001yhOjJda(Gf6z7fyyU0009INkl8nu5P@u> z?~as2{Wx2v>H}iOy3fbsk*35L5OlETe2nkR6F&UtwNft}@Pv<3DGZf*Q0i3ymGE&Q ztNsiJ$H<|G8_*4$~c~QW@{LkXA%zdUE=|b3I)PpOnK^RIYzt!VlRC^(eF^utl>57-EDq(PEX!t3w;Rz$k-iUib zIHKxrngaCeVEb1HvGid|rJUnZ4ez@JDHlp%(}$*8FhAinC4naXy(uiIU!WyfTT1vP z6uG3PKQAH@CX1GUh7fua1)&poCEzsq1q$;`7KE>60!7yacyYow7~Fp*Y*P?+v%7^l zBWMzT+BIOMG&d*A6t0&i6v4giv<)USwdr!c9s9y`Srg!+6DD7En*9P{wZzr7!o_rn z8GbV%goT87!WoB)n zU3?4UL0zzg6m0Ov+z{yWv|)D}u)^uY=6dUn_Jf^(JGHHl=ZpsIfP^;?Hr;V60BqcU z8TN$YL+~ZHe-5Z7D(^O30^To5ACV6Y zdEGzwms|BNm)fkGdH&^|dmQ}G{MWy)@4@Hy_5I7AKk@rduYbGs?GKTc65rF;uXaAi z4_+@n-cUbh3iIdJUHzOXw$F*e_Y=Q=Nmtg-pX1u+L@9o~9zMUj{(0ZXf4H5`XI!7t zeop@D@3~TpT{vHgE}j&U=WEkdl0H)!e7E;C>mZI8d~NS*|9$OTDZek?_n&^Logbgq z)6b=F-aZG|FMl=qydKIgucz;qi9f9<{J8Q@e>gY%SlchPyLY#H&)40JY*fnJ=cc~h z%KM1}C#6j9ZN^9Cv+#3$ADxfJEiO8?>E`5PxzIzT+Bf8|!w5H=_kD%M5_3GU@;$~y z#r0ZCHTJk@Lr7U4;l`SJ+KyhtwCGym<@kLq;a#`C>wm4#xbhAh83QK^yyH(F?sqT# zHy__mbg!UGf!kM|fCcM{!ZgcJ=k%4MXh^u9nwD4J_u>4{z4_MIL>qtVx^W=dKs21TQRe0 z;;2zm&9zjkwYJ*pXsP8^nzhuvPd6BJgu_3C=-y^p~~2d5sqdvL@UGtM;gEYoJ4 zZT2}9@L744Wvi~X`Wid#v>E?xySm+W-{XV>lz&b><=CmGoqomzYd76|%e7l?yZw&u zT??PF{i$o=m(Kll*TSc3>R5iq)gN8sv@U-r$F{I~iR|5N9jTKB)`oKx#Qo%?g&e$%x* zo`0gG*C0)yYUvH)NV5dn}LYF(Mak)M{euH zJqw)OuUfOL#xZ9d{g!o4D7#RH8t(|fc9<+R=b2kbYpvY;oFSfk>$)@Cb*78swlH>^ zTw?dJ_bqQ7{#ap#ilw=_r`DjncX|65fz?y>vrf~&1n=v1U49`qrlXY9#fUw=S&R&sAYMo*?+^C z1$OZO!`J4F3Qk_8`ia?X#?7pPRF%D3Tlpa4lYvyJv(+dFKj8CZDrx`nRSqN!aK-pweri=C^ldqb9Ir{lvLbX}JpY9Df|k#xC77 zYR?>s_AdtLp2F1A6Oi8!a~NPBI*!oO)8Ow0%~KboBKFo2n5TO~A8{fw-NAu0Dw|(p z;R_p_P(nGiZb;xR1_{LUn`Vl&Of0}Gwc8%n4x_#1ID08w7g znu6WYm>y8FAh?bxiOrtDiGQh9E(8PF9Ha3^w+pnhPwgr1U1w%qI@3pe=nK{6KAX=6 zkGW1_K?Od%jkj`as%30b`{Q=Jd~SRc7+1-4fWnd9-06q77A|Xokr_|FyR^Xw52~@T z+_2_O2LBCneJ!XIu%G2M5n%T)jqTDMcqme{S~^u>QGk!d??HdjmwydfCw^-KCc})b zdQ?Af2T$zV*2UiSaeOTRagMD~E3-E%n}#rikQoe|;N*NmNdwK^tO)X)R4H*qeP3ZG zz;lZ4nl)~jNk;=H%Zd}yKnqX{DmkGQoI=Sfy zm;ri3XE+~sLPY2e-l=0Ek<93!YOur`8IS_3{9OYN$mQb~U=KF;a!aM3Ht0*3XyUM$ z-6XF04#C4MbfG}ceKmM+a%P$v*CQqvofT5E81ci?r?aJ!P=8XR(inKxQ(~SY;6?r0 zG+2?_VYwU+)F|7Lo&W$KUkmRZrALUIWrO+%7)OmIxLRS2I?I}gt0yp>#C^Flz2it< z3-Syi1W$g(_(E^VH*!E!`{6sLx4Jj@tK4=r_UB~}mTN8p|49}wST(;U$SYMjya z)iwgcrw8ZR5PwU@97Bt+CQv~gR;Absz(Bzbt>Ig`NV%V<<9w?qzCS~u`Ry7KgS|{f z3r;zlhj;f#&rzL=qXLqw4({OWH&i4Eou8DuV@fQ;A7Z1B(Xoak9Tz`z#fVnMSCsWd zqMR7XK#l0_>^>Tz32TE0{))b4Nd(kX0qQQtf&5wra(_#oYrtORDgQKY_Z*7Rt3~qx zdz@U25u}rYkA6_qT9JVp;n3r1d6r?Ydbx*m>&Q=a@9iM7foJOGF24xH^mC>xt5Ce*U)Sy1Bki6E)Sv$g4m?~cqBnU3B#Ih`Ey)A%? zr9E;V6M97fl#>wQL9P`Q%MQ4ma5Efk8_A)?NPi+`j`1>y>;-=;-N>rPh@$Y3&$c{M z1K8L0Mv3C7q$B!_5oiGlP|fLd!@rQh$Zt%IUWOIGk46QT)%?vIoF%pKVG8|)c3r^2 zaDsT?Ng_73K=OjPLgGLkzHF=n8j=yn9cvAyBc0%`HmqDA&6rIp^O1VeT76RN1 zL{95!(R0(sWjr>qpy0+LB0A9`T$TI*E`Jchd1mu*u=H!BIiQmRX=f(?kiP;vvo{_R z>*0$GAC=^8@R86e$Pq(PTFw})_*r2 zppHi0cOZHZ_^=@hFbqUD;%2y)QO}l#yZ```RFABoJTOAnu-ph+&veT=?khGp)oa&? zG$kku_-Mn!h!&kj6&xgrmu4`*8hE8afQ+26GPAQY$!b9@M~x2L^kzw6f`3pj0kA z;y?flic|2jUY;gVe#omThhXGU3L-!*-4it6YGy!ofe6Np*X?jR-DBDC7~bCI6aioP z`I1z*4?KF)ECPXR&@lDrfoV|~;8row7&E*ivqos)UC11nop%$o2-S&7mVZ~w6QC>X zBz({B9*Uy@;z6hfU8i8zHyZ@M5Z~>JCI)X}=t24FBxcZ=_Q&5DK00V=Kp=J}{5u~PoM?xxChM?^t06w(b1SCm>$PxTY z30XZ zE9(c*Y{m~T;7%bbYVE7}(<{isoJ55ogbFfj3`=!*R*4ydU1Xv$hP0iaL>L)6T7TP) z9qo-xCZ4wjNR7M62sDZ{C_M^>iNJa@_6%#qIPVrS9D_O##+W|@8Go~n$D>pi`Kw>% z0GXq)`FJcX6G4}W>$qA>U$sg$Cs0#NLS9M4Dd=lp@@OJ7f()VmsBi;G{vox(2-{y~ zo6&Mc?J``wcQ~vj({rL9!KDTc!t4$+;Rba@o)9#QDY=gY#WY|ELAQh>TSE*e4A;V= zLtfZ@+5z7bgtLu;n13<@RvCS18ES5lbP^r*jx?YhCrCKCDmw=cf-z70D!_k&J$MUM zKHLD{ng|#M4YtKQ=B9m=rufPaZ7LtlcpVB#N<%!gS4FPHQ{clT!)OWxNDE{(Bpz>I zSk1bHUJSc7uZVOw9PRcPdF{%zjGOQy;^v)sFF|2oL;59XTnciH+b9b_MLhqmpWmLLxF-RM`0{NUSuQd}FPNJ;F@p{T2pZBx@b>R#S&g=A@ zm9i$n5jhLiCVt-KML*3mU)e9T5+|a)D!@#l=yDQ_9pjB0w(4vfMT2pY1_R~qbQ__e zM%a$v(*msxNPmd9F`9U7+z|?}R-RW+i9*+)IDBBhRLfN;V943RTJSQ!?c^JxJ2i{Y z@`heXA6**=K48c$*{i+cGOUhD7XmcW8t_bndqgP={3}eJ4=8}3E8>e21;EO^+U^1o1*1+{axQc~QO9=>-wm?n>7=N7*mLGI;ogljHBf1_J5E!HlXzz$ogrtC37xJ&FlY-9HTkqg z^D^@jXMcff$B7*us5^hk40bEiadyr}+oRNu!qGQa+-81$PBLRQctsM?14KI(0 zh8l1@2?vC=NItnXx%I{Lh}?vLo`>OE`vTDY&m8n!zhbV$uSG}0(fPI z5D<+q9R))dTYnR$xfb$B44GR^ZlokE1!P00Y3E20k5U?U2$Z5c2NIv4K5iFT*-SKp z0e>Mv)Vznl=`b;{h6kO+7S45HRk`1*L%07y+;9z!j!k`Ni^BIU9Wd& zH)LX^w8POs8rBcck~tOTu_Wv3MxBt%RhYv!oC11*ED5|Q;6j9$moC>-@R(#jOB;;E z)bu2wAEuE6L>_im;y}!TgqtK9)z%!g?pgLh?q4X%#4+G>4%VHNxckxm)qn6zde=T1 zm&Y=}GRXc3odCu8a8m>1Rrd|=n;*t4I-@vypxIvz&a5sxb>)3%8i@8 zl!+ugFvuhzGIUb=!6p8}B&TS?yxMR?vW_7 zm}b05RwiJ0rp&3#D1{_BV`nf41U)_SgcS>5%VXj_n6U1Nm|m~qLeXBux1s-Q^!>a0 z^@acT`~Oe$cTa@S?GCv94Gdp2oXbaLM*si-U{Fj{MF0Q*|Ns9WARw%)tmX&^|Gje{ zoCuWmlrd7xq!h*Wq}5vP=Eao7)gU=yYLvxVYMhZNFn@Wmt@r={00Cl4M??UK1szBL z000SaNLh0L04^f{04^f|c%?sf00007bV*G`2j>O_0URCsxZk?~00V^zrk^#r3Yr3yq zyC#W%bUiRy2 z4)yLRBoY8NufhYgjma9?nnvNaPvz8{0UX-CK!37zW~A{CZbX1aTeR+)BSNeLhkWUD zf+nn$0LSMLFTG=hwWT07_8(5jmti=P_cl&v(Vh|5C1iW9T0j^sq_l*>8NI$GfWH|Boz1amScXFv4p;(Ms|8tWdB);PShdJyPw5j` z&VSg@#rWtL0we@X6QAb*p!FaUjthV`j1an@OBW9H>Z<`rLAV28wU7nz24G77Hq2K5 zTezUxL{oX%$cb_VR7YAVBEYBQEdY%x6haQrGJt~edIf-craXAM9RP7!oB_NoG+RAj z_kbb$v6(D-hS;|-l*7e*2c`=Ou ziovM|oxM~9T*u%Pa2*4S3E{*(4@j97z}8-PE52CczZQTV>|FrZ(+^=dNm0410DpPG zgXS-^LThx1dyx9zNdn<~=~8K0`TaxKs4>O`Bn)u!Anq4S1SZ1S;%!t}@rhxEr6{9p z-4(e#ZbyAJenctCC{uK0+qQ;6_i&BnfYhPXl@yIeX)~4p)<~-#?Z7Krw!kMq;o(|- zG&v`HqR0T=yD=4jvUj%uUs!X%E z06Is)gD3<*&fEd)wFfW-#sTph>3cvty(zi?fSf9LqjzpJkcl#Y-rNPyBwHdtcPBCm z=pFfV0aQpz0AElp0J#<-0GEmI$&6pkcwz1V4EMr(0}%EBQ&Uq@Q&Uq@Q&Uq@Q&Uq@ kQ&Uq@Q&Uq@Q&YdFe`+0E(0_BJ3;+NC07*qoM6N<$f=;reO#lD@ delta 961 zcmV;y13vtRG4=m0000+_jok`001yhOjJdagA_1-7fyyU000AlNkl8nu5Xbon)@Ia;=#Rufr!clNtAf$Fs$akk2qR+xn0s6xT;$UGoM7 z{4Tu@N}^=BXoqh413_%xPyag}kCKD{wQ97Ha)|$h2fX>w3$33d$OGQ?IWW-rR_kXC zDuA~=i2-nb*zL*=F3x}qYijTvx?!H}xQ4crZN9h)xK#w!2I{f^TESXv>_b}Z1Jp-( zgp_M_t|nm>2=tsC^!y0eNT*?)!*(mrtkZ)`xrTH5NWhk^wVt3+t-u&|fb~I(wY6*I zbZxB`_&Wm|t#9JkTII=F>cN>Y01V;VkUDbq-LKxe;yWe&jhIj!Up0qEDZl}8-6$$(xgw4O_u<`#?%mIV;U zQ>}-Yg-bNB1z^9x^5Iw0guxV2j+bZfP_-! zE^Og{nE;E|D$qq>a+jimBp~(`Wx&u?4Jm4Y)x0RO7BKUC*;SxV4IqFUCuoPf##BM^ z6RJhvYI*{|^|l=#3qV5n>Vui5)Q9%7y@E|E1F?#y<~9|$H^K54xQZ75tU@X>Sgyx6 zQ(XndiwOX@y#O57ps8a3yfQG>IHLuSC z>M{emql6st1B0_V`n)IrbnuTHZOM31aqtc;09ZrC!4m?K_gqgilp~g#iSA5G(`V8OZE0RT*%~09x8V0d=B{+dZWxVce|? zeH)$xvxDbz+rI!ADSva^9TSOAEnmUb`2-^1fbYMod$|~LZe0`jT$v- j)TmLTMvWRZ`fvIT?3k>t0$}!!00000NkvXXu0mjflUK9t diff --git a/graphics/berry_fix/gba_transfer_highlight.pal b/graphics/berry_fix/gba_transfer_highlight.pal deleted file mode 100644 index 0e177217f5..0000000000 --- a/graphics/berry_fix/gba_transfer_highlight.pal +++ /dev/null @@ -1,35 +0,0 @@ -JASC-PAL -0100 -32 -0 0 0 -255 255 255 -32 32 32 -172 172 172 -230 8 8 -255 189 115 -32 156 8 -148 246 148 -49 82 205 -164 197 246 -164 213 90 -238 230 197 -148 197 213 -32 57 98 -106 148 197 -90 106 156 -255 255 255 -164 213 90 -32 32 32 -123 123 205 -255 255 255 -74 74 115 -197 197 197 -98 98 189 -106 106 197 -98 123 57 -131 131 131 -222 41 0 -189 123 41 -180 180 222 -0 0 0 -0 0 0 diff --git a/graphics/berry_fix/gba_transfer_highlight.png b/graphics/berry_fix/gba_transfer_highlight.png index 9fb9b6a48b22e6c9de50ab571dbccc21b1313058..f1845bdafd2f44c5f4a5802851a6574d203fe42d 100644 GIT binary patch delta 6342 zcmV;%7&+&p2+}c-7=H)@0001k2bDAc02DBKR9JLUVRs;Ka&Km7Y-J#Hd2nSQWq4_3 z004N}?V4F~G&z!_-*JjQ0t`EjgT)}yH<;tkr%qO8XLePK)W|$GnLn3cggaoSrVAp2 z|DXSS;Xn8&W28`OA8oc4`6#o@wD@7fpO2sK7R&eb`zXJE;(zzQJRZ(J{*ZVm^F9Ck z+WhzVi^uDqFX+Elvi;Y`L;t-}8ow8^KQ8=zWZhXm|2}X0UMQ!Z$L;s`Fn?dS%759; z@4s|@FZ+A(zyDr3#kiI0Fw{aLDnrw04TD0nN~z$dmjQ-W&9yKhwbfon zoprU`N~^84-o#O>=U#g4t@l3q>}%vvMjdVRF~%HgrkSCzI@|1FjydOA+;nm2#j6+3 zSZk-9ciDBf-S^mYuLFEeIrX&D&p7j}n{K|0|9@?_hdb`P%guq37q8yD`|#=Ofwh-k zdG)o|-+1$_Ke}eWWBZq`+21<%KX=W3yQYqn?|J>tuJLg1|G0#SPO5rF$5Jsm-qisB zoz$~9tdykAsb_JDz-ppvR@Izq>KGj?ZmB-|qj!IH?tkoCsO8`4Tl!a>3u@i}kIn_P z?tiy)|GjVjq-%G5ijuzuX$n=-m>elIE4x%E?ItL1x) zYw}Ra&vU({v7bOK2PI3p-@M?wdaSYaL)}>^#cc)ZqQz;mBl@z8(xlbP&HJ8OQ5LVS zht_oI{d`T^JDur_nBQ@ppOsUiHn;S{8h_hOZ+2MEOIp)A-8}uBv^>8tgZt{Wmfhzr zbzE3Ip4m@p{53g?c;1rAd<-T9Z!_0+Gq@|j)oBBjj8N@;tp3^?MoaSSlx9)fQ+%D> zG&`dfZ>QAk?M=TgUAj!6=FU`-veSX*L8bH4_OhFHjnC<3zRAa_UYn=V&b{-r=zn>6 z6n5DS4D^=kasz^4dfEzW_|Bf>Y_74-6z?ju5LC~>XeHOJcwjd6^K4Z+v8rIZJGDK) zsoZh`Xc`)jmCtzlWtKZ~W>c#t%E#3!O48#&1_uBu;3;MBGV8g(J(sc5STEG+Sd|j} zGUat8+l95*>D+Q{FwOFggS@*>*?+d)N`qF6(>-2~4(93dTY=^FdALRaA}??7wAZMeGllih;OXkT49$0xYGH+5*Fx5gI`E0z$Ufc}Lh?%Oar|kpw0>D}>v^>pXy|};g>VMumFer+( z!F(UKLw9-#20+Uh0H3lhszc+33<4s~>i8&ti`JcU+IXkh>HzG33`X$MqlRY9$JXEs zZ);PwR&yU9`~Y&$255IG`{Ni&b*J;UcHLzf9?h75fIa)Lb^^U;cPR=O=at3g%AQN} zADP2$+M-`rlR+LMFA*;|cz=-w#&ekGg6~*iYJL~JdeudFRW4=G-QLd3h4!U9d1c|8gMI<{q&l#G&|BZs7-j9To)3a!c!j?3XQEB zq)1H}_!=S%`f{tQ*0C-X9n-m9t55)?iXDVo@d9sb%`%w%EPJg^oKf?3G*3R;F zYrgxf+u8fDo)#mL8&I;@@z6SI|9@6(>)sp+7w!xfUg!ZGYtSH?(IFqO!#Hi4cg}XivAl62n}ud$ z->svI`EB9>cnwkni1tAt?Cp-VC$&Rk(qm9vY=R=u`GoFWJX1$MkSCv3fhy3r4LLdC zoSK-Te3)lZJDVqBv5JkE9MGWSJs_UOOmKs}Ss~*HnsI!{|9@}{-ta+QnPSazicnJ5XYuW|LqBDf`;jds6Og=H~4$Sp~STTdCd4CLLUp`S#}wL za$c}kS>#$0xr@+_h-zPU1&_iThf6UNGEBURxhzhn9xj1GRWI-Q^+{U-1>r@I0asj( zK}B{ey%k40da*CX=dOjRAS2F6Hh<9Ht}CvE@lIQ2Qjt>;aRSG(caIGWi(Ec&J{2yj^;2zi@kK1 zTr-Y9qJMNnQ~MyBRV5?r2pY7ubCm-^im5*?V(U)~HCB|CLH`hcRy!&H42~@nIYA-3 zIt|yWkEb1|59*C{iY#6K! ziO)#Y5Y_f0?4vs7I~1e_-=jWlu*g1{=nGaEwRvDmTH+`l!;9y;Rk|g|jC;kZBQq?3 zsI~*eOk2=*Z*P3{z|kNuUo{`@^a1q>wkiL`L9P?vQJe|oIe5!) zaDRXjW&ngJWHx(gtu{Ns>*(?y(qcxCE>;ph`J_qjg2TZ|PjRso`0spEei$%v1EyqD z)ffA~NC8n+3131ftg~+h?mkS!>LcJc<}I`U4tm%RyxB|mv>_J2*2CZhPNW+!5SrpN zO;?l4*G3^RSQ#@qK&nKulmio2>@crmD}Ne)WF^rZpm`|w5{R1)ck;wZ)m%t`c_M_6 z&<>CpBl`9sH}ELT@&=Q6)~Yi210MB(`@~+w9|w%NLRqO)WoilFj3)AqijWz+C?eon z6fIy$MIcn-;ma5WjK@K!blDowut6&*4->o|cfcBAngYs)0>j%K<1!DFvXvKLE`NOd zXPfcCe5Hf5jI}hmUj;EJ>6QwyZB)UDSx`DmvB~zySrjmXM-jTopzG9_{FN5GNohio5UNzQ}q&~7#~Rk$TVcdnGdI_o)ZVwB_)kIrflV91D( zvlrOqLt6pr@f}h9Otxl1@ZKaNyMO0HGuvoPO-Jf`1HlX<13cTa0>NY+4GGRbvXcg7 zO2=?kB!zn;CKNhDT_G$=0_-n@x4|83s~qa2QCuU&3bY2=)G2Y%eW4O2A*EUn6eL=Y zVd697z>`K)@bFDF%Vcwi~YS7Ui`;@MEK(Q@T=kC=>NeUMBMh z6nbSyp?PaJXg{vK z9g+(I4izW}Ay9-OOi>RH`a&J+1=>2zz$`#*hY*UZE`-y0bl8V8fq&M?dMFMs1OyYqReuw}>Ag+b<#x z0>nj#>))J35|`!)nSZQ5Dgt){TsWK(qNP{b6M#Q=bVii@0TTJ2PE3_|=!e957G7B% zWt%e8cj>4@BRS;-Gi^cShF<#xyN#G5u1tQa7wm12%j(@Jz4%7)h5oZtKge_jh z;^B&*STsH(dJ#Ugr{jSenYd*LIE};qlH)pA5HVL&L`k6`(q3Dk6T{G`iX>y+ST#II zIK(tGD42_(xu!`)88(EdW-C|aPI}4SfC?lucbG*&2JJc#s4qb8iS9LAJTVfX1Xc&G zNreRMq7$ea%zqGP#9-Gbs>B(A#6088gvN^hFSy1*jDp2k2eSQTFov8tQjJPhb)ux| zwGR$tCw1)=4Ia0=2F);#)LwwTl8F3svPSxlZ6>6;ISGk{GI6FT%B168poV~(W)LHz z3UiY}=?7Gl7#X~UoMT_R9$YOMO1on3?I+2SR^br|%719L1Q1AWPh-XeAsR`I5DITJ zF_zzQN@AVbj%bsVd9hKR3EDTqK17my$x=BSu=OGi54!;~ToPAjP;nv=ziV&{X#oPd ztWn1s{3=V!LS;PRT7;rd4x(r?1OhQYqq7nW{0Zo$tiFLi3?rJ3yln=H90UfKJA{2) zJPFi=oqqw!!I*X<15?DA2_Xz^hB-Tyli2u*(*D)49n5eUZLU(+MM9D3sAJoPrKX?3 zbSiTL@JHAkTcgT}Xr<%F%(SJEt(UUGS?v+KNxD-q?1My+TmNC0+c5Z1wT zV1HAP0&QFj4+KGx7!SVU?RD}#kS0L9Y3yCJZz66b`Db zu(mm>1edW*IP;1?utHa7edHH-y2^>nsnb!f5jn`-cc9N5V%{2R#=eq&E~^zg3?dHf z_cOT4TMxSg_s^fxJGwhCj|u$sj;*OrLw}z0_X4-}{L_wyiw4{LXoPj3vLLsGXcU2q z#7wwr=wv&+b>e=&JYdGA-VqcNaRt-Sxo}B zEJ9N_-#fJ!M1x1K-m+u?d*l)<5#?|;ZH8wr}|Hz0_l_xF|@7)`*~H&HEp93omQj1Y%j1OUFlrVK%q$GajBV4WzwWSSuFMsK~EWpJCGHCK# z#Kw%%fGbg%8<}=b{znSXzh1T&}OLG1tGM-%}!jlyCMBh9W4dRLf5ASa9m6ix4*G;8rY zVs`f4u=zhsueFPz~m*qd9~sGH@A;b{8Eb zARWoZf^4iigLDiK3@$fGzNMOTMGue*I@E#F`XbS$!x;-hvVWnD+x&fKCU`j|4?yoiR-}xT?-531th5p5N;vO;(!~X@E4N9kf8;X1Y003Z6OjJbx z00960{~#bBtR}3i<_HM?y>lR(2$c4eF;dN>#rCAtTJGk>l*QE`Ibv#*#ae2dktr~L zd9khd00001VoOIv0Eh)0NB{r;32;bRa{vG?BLDy{BLR4&KXw2B00(qQO+^Ri1_c5M z1>Gkfpa1{^yh%hsRA}DqnB9`3APj}=+wSs0P5NQ_PT0B4p@G7p~*6+RUi{wBwzr zS!6L305>9{7o%v;^&%-qh0CtsgS_&$_Tx-BZEB9swn9u^(0Qf|T zD|7gB2jIU%KjIvd04sB-0WcN5yu3pZ3YM;b1JCHf8DF$i0ld{FAR)r^@ck`jh?4-L z1B_(^96|zY0YK?u0G5vm5D2NUuqclJu=WXnwPBL`lHUV-MHXWb${ZAbfJIo~S&RU< zKTWM$02+f++Tb35ED#_zToVwJFwX#R$pTg}tVm0q+&aL=hH9-Iu(@O*O|4}~Rn!4c zW(3d}zyeFbdIJDoiU6=cfS7}`AwZdU7J-leS2QwMn)2vdZM)>dI){tn1Ur0x+e=l^^7x)e>$Ts#HDb7KX7j3|KCOiO?dX(U1n#B1+&>&TY? zBPj+%Km^jhm#G1ND6PjK;dFp4H14AD7n=aBVW?O(ACw|)z#J2)z#J2)z#J2)z#J2)z#J2^-%v60GeodB5AjsIsgCw07*qo IM6N<$g130;vH$=8 delta 1007 zcmVm0000+_jok`001yhOjJdal@u_47fyyU000B8Nkl~OVPMlPh3GRdkL`dp0-=eXOZiQZEYPBX z40NS@kn&ZcrUq!UB?CZ)x3^-3-PQv{RPoS)My%jV22P^fc0(yH3F?KZ11`Ov1K0;h zunw0}-lZu4jrbxg33}2^)AW-Lmil=CmN#Vr+|s;%!C5?l53Ow(Xvk^k0fhuhVbpg( zd+nmDmFQ`sXR!c4zeIM16^+%NpbwN`XX=BxrPlM<=t^tJ09oL=wT?Y$9rTon*aFvG zhy&rC39`}bAcD;B##E96RQ#PL3q#@L0P@*5qZzz-322^C1s6U5{aRs+3$Z{awF+R5 z31}F91Ks;7kfviPq3K+yt^)cC{GK|1iof;&@NqMto&lOHDqz4~C)D_tapZu(xBws# z$Lf)nrD*`+0VfEI9v2L}>H(N%fSe>2=u^WQ_s4+Q)By9#yRkd~s3|QP0J#SPoKjr~ zY#F$exMl|c+&oL}_+bFc0AM&N0RqBS2KzF%_SWH`YL-|hCV0+d0~k%Gsc0fxm4F#~vjF7MS7?@2#{1>gv73Z)d~xIU17 z0T1z}=rIw;)eP)&DGXsZty3`@oN^tJrkzeF2a4IkAc0_#Ad@5}LtFqlNeW>=l1}QL zAOPI8Sh8@+yL;Am7i%%hPoPq8V%V$s=GsMXxN@Z)@kFtgdt4R_ch?KP9^h2i+NT^D z;S_JE{TePcOW58jwvYpDCVI+=EaZTHxk2G3;IO$K8OSp4{bj|)EcibL_WPqRI0XFo z69D=<06&DSJ^vVio5;O=90Ks(bijW9%K`q{5rD5KPz?p))0=-O5&*$H1`t3HzUPMd zfK886!CJ-f{7TPZ^$73{qUhi^OLq)#3JwXY$~He2u2E&-YJGssb`+2@3eV+ILxc;3 zs%GdKV1ER_cPe=4ig2@_s=&F;u;vG+EPSVW7r<5IDGWe6_dWe5K&@J}YSpS$t5&UA dwQBt%{RY5zu6OG_Qpo@S002ovPDHLkV1i^h(Eb1b diff --git a/graphics/berry_fix/logo.pal b/graphics/berry_fix/logo.pal deleted file mode 100644 index 4c76f3f9a8..0000000000 --- a/graphics/berry_fix/logo.pal +++ /dev/null @@ -1,51 +0,0 @@ -JASC-PAL -0100 -48 -0 0 0 -255 255 255 -32 32 32 -172 172 172 -230 8 8 -255 189 115 -32 156 8 -148 246 148 -49 82 205 -164 197 246 -164 213 90 -238 230 197 -148 197 213 -32 57 98 -106 148 197 -90 106 156 -255 255 255 -164 213 90 -32 32 32 -123 123 205 -255 255 255 -74 74 115 -197 197 197 -98 98 189 -106 106 197 -98 123 57 -131 131 131 -222 41 0 -189 123 41 -180 180 222 -0 0 0 -0 0 0 -0 0 0 -255 255 255 -238 238 238 -222 222 230 -205 205 222 -197 197 205 -180 180 197 -164 164 189 -156 156 172 -139 139 164 -123 123 156 -115 115 139 -98 98 131 -82 82 123 -74 74 115 -32 32 32 diff --git a/graphics/berry_fix/logo.png b/graphics/berry_fix/logo.png index 29cda79b0a6c82f5a161c38bb40ad657fef53173..189ca9780235eb79a8817337ddf8e22c71298422 100644 GIT binary patch delta 4540 zcmV;t5ku~)2G%2x7=H)@0001DevN|w01f(jR9JLUVRs;Ka&Km7Y-J#Hd2nSQWq4_3 z004N}?U`MY9JvjI-|G}U0{=je#{mg4!Z+~o{h_8Mt>oQ}@Xv!Eb~pB1U`+fe#SJgD0COZ1;J@M6Mo5grC(%0A5@0{BE^Zi<%KY#J>pI(3D+nWk6Resm6 zfA;fPZ@ex)-k|OC`uh3xNB8GC<8z_>{lf28jXTHl&${usP%U4t=g+^N`FWqU-yG-j zUH0d)pNs$c@1_*Ph3nPwlv8s}{2XzY8sD`Vzx(^M#UdWY_u!}0Kd9aF{pl~o`&PPN zYnSY^qW)ZpCx7+Ng8oa5KCfr_<@Nd8P3`XWaqsy$owZJ- z`tv!|w-Ub3SO{HOec#r3DBr?!eIJv@;D{T<95fe?{p6Vo)xNo9&z5gK@9&*ATWsYN z<##E&)c3Vfwal`CA=egg!!F5mZ(-+%kg_kKGM?(CVBC3CU-;`qzs z`MnqalgIZ9-5b=+If^;HYQ?@vaGGrda`BT@0Fv*grt;SJeLUY`{qYsRRuGi8%!313 zT3?q~l7DckzBpIbNor5}YK^S^xd0{N-oj>b1%cFamE3dEQZ#4kIKao)d4cu|1hPo+ z{9Lf9wSNQ7C~$${7p~oU+m+j|-f`!(@2GuH z{Ta3V3vz#sTK=FGh_!c}{y>eFRli*#hnz@Y24baU5Z6EeLYKfSjoexZwM@c?WZD~ zGPf(cDy(706uWaZ^oyI6>UqTtW)eAi9i_ZzfT!l##6+Kwk+oUQxV@G(VW!tP{rIWW zJd7%Ayq0b-SVuFrw(2}}mRo?X4Lw9SQ?ylZf@+oUuzw@LfW7XW# zIH_|DjVCQ9=_#iQDXq1BBAc1={-ZX*LUkF$2E2Lw}NTQ)KOGy*%D73*`24X zHuHHZ;?MfoM$oi_OlD(;b$tnB+PUlw^=3PX_@eomQ_)iIzyx4HV;8Nh$1st5Jbx`H z=hL_-SO93()b4UM*|PxZhHrH(!zFgBvD=czgeME6MccEi9%~cyXAQd0Laj|t)eI() zYEHQ_U1^s;>0-h4kmUoWQHfcl)i{!-3?SF15+RjZJrZmXE_c-ThT6svGl>!w2H(HT8;dPlN zRdKV&C!lajD3oTtUZ@@5sokNc)A-_bsesWY0L>=u8ANx1(`m#G_r0hUE#lOl>akh7 zx=z6w?ido~P`DD5qIiy`C>J9N+%@VEibP;h>6sSR`|KiN_t96n;1E@&L4O_Hxas!T z4xIrJ5G%ld=I<^P!_UA`=cW}d#d}(J0RTh`IavWF>=<*;Gdyq9Y1-zb7f$9r#6~w7 zmsVW;R-}d2f?_hBNG)-XRpqc_?s_K;OTW;WbD|rmEZUbArp?5;Q>zdi0Yhy(bMoux z(nDmKQm>9fIsxp%dRVrJkbha(AX{3kE-EN!K;3%U(2k_EPVMssxXquPUQ@}dpsViw z#n_ct)cc02nZN`S_2eF%Hjor+8)-*`&}@WluF?RG#1?1wC3PW{U>0RHJ9F<_JXB${ zjDk7o?rhV%=}AY%;XPD}RyPii-&|EO0?U1#oZw#B&t(3 z+s@d!U6C}iY8ED`y%2Oy9comLPX^Cfm#whswX76 z*X^j>Lb@bT1H9=NrSV4c@mx4P)<*Kom!n%2a8K}P=Q!7nE@ebOd#YkOA%P1qhlc}6 zP-0?dM3hVLV1L}v7l+xQ8C4hD$R5R6)`k}iCSrb<_umRb@u-r8WK^M<@TgIu^)L zn5fa}ky(tMdAQ{R@Osg?y%P;ZYqQmBr$zc2hi*!5&*Ix0%L!W$ac{}3FYI4MIAgpUftl2RILd9K4x{IZ#7A=g+@g7cmIUOodFUGjSk(J&M znjbqRfPWE?#$gy~5B?rea9l!y!d4s(QzDPB8!V99X`wU8TtuO9vxf+r$e+0OorE7H zHq}k{ALIk_6bz5_#RN$LRnFINplLUR0zZj7>oI{6E~61S0z2lB^oY5M zK0x%fc7huTq86fRg}zIRz1{G?5r1+*KRm>cqAtV&$NZ8|_UR-y-U9f; z(jj9Ku6R_ymIM31yB(n6AhmB=5=VdNnh|kn8)YY~^%dbC-XlSHU!-Swv)iO&hIMWz zd)(SCW)$AWL;yARGtab02^4Cv$8ahl4VeW;qB)>a^%K4$O^n3G-f0gSxF2xmXcGCnShzSsK#XP#U<$-~IdPu^ zPK&95#W07+dJCazqh@5`fvJSD9zb{&41em&*wNW(F;HoCk4m$1!F_JI5b=A!mFj#eHscK-yFmKV+CgN3T7!!HF|NLRJSUBkU~- zNpdUXF^kb4jF#?5Btn!xoRoRdh3HNq9;fP$u>am>u+B*`C>dd!8`q%CCcQ&MBO=2I zY#75ml&CC*pteG{7?a^$UeCb@BYzxo+LAV!#CIo9RP+lPBM|f$fscGZ;R<3lbZ8>h;w~Bi0q>8* zUtyvkfIViX9`jqqX_P6aQdMLhLml@`@$d$gNA6Z)2kGz<8EbzS_%^~p41d@IrvW4! zu@DS;jBli168T2B5JzBvSR9ueD5)hn8*oPkfyTU+5Mr{q1uZD=k{3;qGP95M8PQgk z#hgOuTg+UIDKX^T;vNR6hG&T1-BpJ(}KK77%u}UQ(+^|PO%M958e-?Xd73O_`bwjf#KeavVP6oXu@_vFH5zeY3cRkvXWEgAOTT=k$fJ_sJ74d+3 z#?%9~ApyZ8J4b#bI^P}EV{o+YAaz21`I<`>8jB8ihkBtuopE_FVG<)48|}qX-m*UA z%-ZM&XSO~S1)SyL%6~bs+vv2@j?YJMugySDK4HrxKC%f{OHOJscBqygY}PEN!ggun z5%cLgjz`zes*A`%b1;%H_}?7U?ndKxZNW7*IgqoRi$1q8qWAbLt}@UJfj@0W=0`DqVNcPy9^*Q7_rmqbr0YPQKRRI6$cOKQh!2GBcVe;=G_GV^iPfR zFwKW?l5TC&gT@dtW+Gp90(+$Bgh-OvE@cbA1T&4Aq52U2Pxo5qDg1HeXc7D*#49RE zfWeUHzcn~~WPAp4u!plmO;Q1K>BUa~=Df2UJgzlHx(CZR*{B)wJVOiBI}RUc%lKTZ zCC25If}2DKMt>s&osolzG53ssB>tx+em~!y{I|dVy3k)2`hU4lzSrmTPp_AUR@c zl*L+Vod5s-q}5s=ARv2t&Hw-ZN=kFZ#l>P`y=rR3VibEhgM)+KDFD5DDYUfS00000 z005CGFn>`8`qKaa00Cl4M??UK1szBL000SaNLh0L04^f{04^f|c%?sf00007bV*G` z2j>O_0vs|@FI>9-00PEIL_t(&-tCvkZrm^ohNssAKD5XS*ji|<^ZsvFZjwDtfSiiD zC_l8&G7|ZdqBN7oL;0!vy7D2sO_t^T$HADz?tlBT9PQ&zGX;OV@}1y?_~!&KcNcu& zEOd--CHTxWvm@g-68!eP;J14Te&H&3V1lna*U1(Dc8D8xV~k~E z8<)9cHluk;Q9^ka!A(zjo#w?ONWn_}BPFhEGX>&^8b4BlUcmDaHh&gOscp4Nf`89< zN^4av%Q(M$x*;4YCgdVm4*n3Fqg*Vts?|q{gt=~_*ppaTpNJ|dQ{RW{3+ODP4)_* zR6WYQBEZGUduz?53an+{(9?$5%MeT@wb6-P_WLjQo%338Ez(+ z4=>G%W5LTk1@ld$8g-$buF~`RyZ1JNd*o*k-^5tu+xH~+m0001|j$ncS001yhOjJdaj}9<@;+|lE0008ENkl6D18x+*SIkV3H3jTE|aBY`YBLe)T!b}C4qD_0HFh2kbqgf0pS z7I&6{cH>7F5Wk?9Kxmt3V&;YZ1K%@ADik+`DY&=~WM(+`-shfs?%YW%MueR2b75*~ zYD1~N*0AV*qnxXUzu0L}feMwA;(C4eti<)G#c%ucq*J%;2who`I486k~@Y_hgchFEYaGf=If55frLH&Z?p>rpK?a&ClQguxb0F zaNSvoJMId${))8^W)muo<3RG*8!9sLPDZt%r0L)yR@2z;iF1s!8Vq*wU^>gT&pWZa z?~+32SUk)g?!(+T<&s28s@P+4x;9&tO&jeMxM)r?Lh&$4@g*GMAk0az&{p`qg`M)ujRM~pIr~E#t(Zgj%~jDQ)H5pV%53!55ZB1!C{$!hsC9enGFEBNK1!dWt04(lp* zR~NVzZV7^1ejw)RL-9Jdi~Fhtj5B#Hepl{);u(uA#V*rZ?uoTidz*ts)K+~V_HQrT z{ZO2fL|+`|Gl^qj`@q6y%mn$C?$=ilO@uqnN%GyR;ryZahSy!#;%uo}tt5|1lKHe% ztJQLndhEK3Y>#n3F}U1l>VV@@!7tmX55q|)_WYE-*%bG`4^fHHN^9vTu16?d6AL?6 zx5IrJ8+?N!5w|W?kiFNP=!yIPb5V#<1LXc0h&_GlifxHpe6#VC2YfMlvB6+47z_r3 m!C){L3lR(2$c4eF;dN>#rCAtTJGk>l*QE`Ibv#*#ae2dktr~Ld9khd0001G zNkl!dspL;hCDV5`oVqK04l zG?UWS&agc*W3RAr?$MloIf`jghUQ9YK(jx@i(4r~2kh?X6aexVJYD@<);T3K0RZhz BH<|zd diff --git a/include/graphics.h b/include/graphics.h index 04ad64606d..2bfdc55372 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -3186,9 +3186,9 @@ extern const u16 gWallClockFemale_Pal[]; extern const u32 gWallClockStart_Tilemap[]; extern const u32 gWallClockView_Tilemap[]; -extern const u32 gBerryFixGameboy_Gfx[]; -extern const u32 gBerryFixGameboy_Tilemap[]; -extern const u16 gBerryFixGameboy_Pal[]; +extern const u32 gBerryFixGbaConnect_Gfx[]; +extern const u32 gBerryFixGbaConnect_Tilemap[]; +extern const u16 gBerryFixGbaConnect_Pal[]; extern const u32 gBerryFixGameboyLogo_Gfx[]; extern const u32 gBerryFixGameboyLogo_Tilemap[]; extern const u16 gBerryFixGameboyLogo_Pal[]; diff --git a/src/berry_fix_graphics.c b/src/berry_fix_graphics.c index b37645d4c2..d766c39662 100644 --- a/src/berry_fix_graphics.c +++ b/src/berry_fix_graphics.c @@ -8,9 +8,9 @@ static const struct { const u16 *pltt; } sBerryFixGraphics[] = { { - gBerryFixGameboy_Gfx, - gBerryFixGameboy_Tilemap, - gBerryFixGameboy_Pal + gBerryFixGbaConnect_Gfx, + gBerryFixGbaConnect_Tilemap, + gBerryFixGbaConnect_Pal }, { gBerryFixGameboyLogo_Gfx, gBerryFixGameboyLogo_Tilemap, @@ -43,7 +43,7 @@ static void LoadBerryFixGraphics(u32 idx) REG_BLDCNT = 0; LZ77UnCompVram(sBerryFixGraphics[idx].gfx, (void *)BG_CHAR_ADDR(0)); LZ77UnCompVram(sBerryFixGraphics[idx].tilemap, (void *)BG_SCREEN_ADDR(31)); - CpuCopy16(sBerryFixGraphics[idx].pltt, (void *)PLTT, 0x200); - REG_BG0CNT = 0x1f00; + CpuCopy16(sBerryFixGraphics[idx].pltt, (void *)BG_PLTT, BG_PLTT_SIZE); + REG_BG0CNT = BGCNT_SCREENBASE(31); REG_DISPCNT = DISPCNT_BG0_ON; } diff --git a/src/berry_fix_program.c b/src/berry_fix_program.c index 26af445a08..5900cb298a 100644 --- a/src/berry_fix_program.c +++ b/src/berry_fix_program.c @@ -117,13 +117,7 @@ static const struct WindowTemplate sBerryFixWindowTemplates[] = { DUMMY_WIN_TEMPLATE }; -static const u16 ALIGNED(4) sBerryFixPalColors[] = { - RGB_WHITE, RGB_WHITE, RGB(12, 12, 12), RGB(26, 26, 25), - RGB(28, 1, 1), RGB(31, 23, 14), RGB(4, 19, 1), RGB(18, 30, 18), - RGB(6, 10, 25), RGB(20, 24, 30), RGB_WHITE, RGB(12, 12, 12), - RGB(26, 26, 25), RGB_BLACK, RGB_BLACK, RGB_BLACK -}; - +static const u16 ALIGNED(4) sText_Pal[] = INCBIN_U16("graphics/berry_fix/text.gbapal"); static const u8 sBerryProgramTextColors[] = {TEXT_DYNAMIC_COLOR_1, TEXT_DYNAMIC_COLOR_2, TEXT_DYNAMIC_COLOR_3}; static const u8 sGameTitleTextColors[] = { TEXT_COLOR_TRANSPARENT, TEXT_DYNAMIC_COLOR_1, TEXT_DYNAMIC_COLOR_4}; @@ -152,9 +146,9 @@ static const struct { const u16 *palette; } sBerryFixGraphics[] = { [SCENE_ENSURE_CONNECT] = { - gBerryFixGameboy_Gfx, - gBerryFixGameboy_Tilemap, - gBerryFixGameboy_Pal + gBerryFixGbaConnect_Gfx, + gBerryFixGbaConnect_Tilemap, + gBerryFixGbaConnect_Pal }, [SCENE_TURN_OFF_POWER] = { gBerryFixGameboyLogo_Gfx, @@ -304,7 +298,7 @@ static void BerryFix_GpuSet(void) InitWindows(sBerryFixWindowTemplates); DeactivateAllTextPrinters(); - DmaCopy32(3, sBerryFixPalColors, BG_PLTT + 0x1E0, sizeof(sBerryFixPalColors)); + DmaCopy32(3, sText_Pal, BG_PLTT + PLTT_OFFSET_4BPP(15), sizeof(sText_Pal)); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP); FillWindowPixelBuffer(WIN_GAME_NAMES, PIXEL_FILL(0)); FillWindowPixelBuffer(WIN_TURN_OFF_TITLE, PIXEL_FILL(0)); @@ -374,7 +368,9 @@ static void BerryFix_SetScene(int scene) CopyBgTilemapBufferToVram(0); LZ77UnCompVram(sBerryFixGraphics[scene].gfx, (void *)BG_CHAR_ADDR(1)); LZ77UnCompVram(sBerryFixGraphics[scene].tilemap, (void *)BG_SCREEN_ADDR(31)); - CpuCopy32(sBerryFixGraphics[scene].palette, (void *)BG_PLTT, 0x100); + // These palettes range in size from 32-48 colors, so the below is interpreting whatever + // follows the palette (by default, the corresponding tiles) as the remaining 80-96. + CpuCopy32(sBerryFixGraphics[scene].palette, (void *)BG_PLTT, PLTT_SIZEOF(128)); ShowBg(0); ShowBg(1); } diff --git a/src/data/graphics/berry_fix.h b/src/data/graphics/berry_fix.h index 07e2cbf51c..0c26f7e92b 100644 --- a/src/data/graphics/berry_fix.h +++ b/src/data/graphics/berry_fix.h @@ -1,6 +1,6 @@ -const u16 gBerryFixGameboy_Pal[] = INCBIN_U16("graphics/berry_fix/gba_small.gbapal"); -const u32 gBerryFixGameboy_Gfx[] = INCBIN_U32("graphics/berry_fix/gba_small.4bpp.lz"); -const u32 gBerryFixGameboy_Tilemap[] = INCBIN_U32("graphics/berry_fix/gba_small.bin.lz"); +const u16 gBerryFixGbaConnect_Pal[] = INCBIN_U16("graphics/berry_fix/gba_connect.gbapal"); +const u32 gBerryFixGbaConnect_Gfx[] = INCBIN_U32("graphics/berry_fix/gba_connect.4bpp.lz"); +const u32 gBerryFixGbaConnect_Tilemap[] = INCBIN_U32("graphics/berry_fix/gba_connect.bin.lz"); const u16 gBerryFixGameboyLogo_Pal[] = INCBIN_U16("graphics/berry_fix/logo.gbapal"); const u32 gBerryFixGameboyLogo_Gfx[] = INCBIN_U32("graphics/berry_fix/logo.4bpp.lz"); From 079f2da0f6d0b6b87a143e57e04cfbdfce3f29ab Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 10 Aug 2023 00:38:23 -0400 Subject: [PATCH 30/43] Fix some missing constant use in Apprentice --- include/script_menu.h | 2 ++ src/apprentice.c | 10 +++++----- src/field_specials.c | 1 - src/tv.c | 1 - 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/include/script_menu.h b/include/script_menu.h index 36b66bf987..734c717cff 100644 --- a/include/script_menu.h +++ b/include/script_menu.h @@ -1,6 +1,8 @@ #ifndef GUARD_SCRIPT_MENU_H #define GUARD_SCRIPT_MENU_H +#include "constants/script_menu.h" + extern const u8 *const gStdStrings[]; bool8 ScriptMenu_Multichoice(u8 left, u8 top, u8 multichoiceId, bool8 ignoreBPress); diff --git a/src/apprentice.c b/src/apprentice.c index 89017de33a..9ce5ec0dc2 100644 --- a/src/apprentice.c +++ b/src/apprentice.c @@ -346,11 +346,10 @@ static u16 GetRandomAlternateMove(u8 monId) learnset = gLevelUpLearnsets[species]; j = 0; - // Despite being open level, level up moves are only read up to level 60 if (PLAYER_APPRENTICE.lvlMode == APPRENTICE_LVL_MODE_50) - level = 50; + level = FRONTIER_MAX_LEVEL_50; else // == APPRENTICE_LVL_MODE_OPEN - level = 60; + level = 60; // Despite being open level, level up moves are only read up to level 60 for (j = 0; learnset[j] != LEVEL_UP_END; j++) { @@ -464,7 +463,7 @@ static void GetLatestLearnedMoves(u16 species, u16 *moves) const u16 *learnset; if (PLAYER_APPRENTICE.lvlMode == APPRENTICE_LVL_MODE_50) - level = 50; + level = FRONTIER_MAX_LEVEL_50; else // == APPRENTICE_LVL_MODE_OPEN level = 60; @@ -666,11 +665,12 @@ static void Task_ChooseAnswer(u8 taskId) case MENU_NOTHING_CHOSEN: return; case MENU_B_PRESSED: + // Only ever true. Answering Apprentice questions is required. if (tNoBButton) return; PlaySE(SE_SELECT); - gSpecialVar_Result = 0x7F; + gSpecialVar_Result = MULTI_B_PRESSED; break; default: gSpecialVar_Result = input; diff --git a/src/field_specials.c b/src/field_specials.c index 38746c97a4..51c905513d 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -57,7 +57,6 @@ #include "constants/heal_locations.h" #include "constants/map_types.h" #include "constants/mystery_gift.h" -#include "constants/script_menu.h" #include "constants/slot_machine.h" #include "constants/songs.h" #include "constants/moves.h" diff --git a/src/tv.c b/src/tv.c index 85819a7a1d..bbd6a60c57 100644 --- a/src/tv.c +++ b/src/tv.c @@ -45,7 +45,6 @@ #include "constants/metatile_labels.h" #include "constants/moves.h" #include "constants/region_map_sections.h" -#include "constants/script_menu.h" #define LAST_TVSHOW_IDX (TV_SHOWS_COUNT - 1) From 18319e8da3a2fec83bd2ff5112bd8a924da86a3e Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 10 Aug 2023 01:21:38 -0400 Subject: [PATCH 31/43] Misc missing constant use --- include/constants/contest.h | 2 + src/battle_ai_script_commands.c | 16 +-- src/battle_ai_switch_items.c | 8 +- src/battle_script_commands.c | 9 ++ src/battle_util.c | 6 +- src/berry_tag_screen.c | 88 +++++++------ src/cable_club.c | 2 +- src/contest.c | 22 ++-- src/contest_ai.c | 10 +- src/contest_effect.c | 28 ++--- src/contest_util.c | 10 +- src/data/contest_opponents.h | 211 ++++++++++++++++---------------- src/decoration.c | 11 +- src/dewford_trend.c | 2 +- src/ereader_helpers.c | 4 +- src/field_specials.c | 19 ++- src/librfu_rfu.c | 10 +- src/link_rfu_2.c | 3 +- src/main_menu.c | 3 +- src/palette.c | 2 +- src/region_map.c | 2 +- src/secret_base.c | 4 +- 22 files changed, 254 insertions(+), 218 deletions(-) diff --git a/include/constants/contest.h b/include/constants/contest.h index 775dcbe62b..905306203a 100644 --- a/include/constants/contest.h +++ b/include/constants/contest.h @@ -6,6 +6,8 @@ #define CONTEST_LAST_APPEAL (CONTEST_NUM_APPEALS - 1) #define MAX_CONTEST_MOVE_HEARTS 8 +#define CONTESTANT_NONE 0xFF + #define LINK_CONTEST_FLAG_IS_LINK (1 << 0) #define LINK_CONTEST_FLAG_IS_WIRELESS (1 << 1) #define LINK_CONTEST_FLAG_HAS_RS_PLAYER (1 << 2) diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c index 2152be374a..b2c900b422 100644 --- a/src/battle_ai_script_commands.c +++ b/src/battle_ai_script_commands.c @@ -13,16 +13,13 @@ #include "constants/abilities.h" #include "constants/battle_ai.h" #include "constants/battle_move_effects.h" +#include "constants/items.h" #include "constants/moves.h" -#define AI_ACTION_DONE 0x0001 -#define AI_ACTION_FLEE 0x0002 -#define AI_ACTION_WATCH 0x0004 -#define AI_ACTION_DO_NOT_ATTACK 0x0008 -#define AI_ACTION_UNK5 0x0010 -#define AI_ACTION_UNK6 0x0020 -#define AI_ACTION_UNK7 0x0040 -#define AI_ACTION_UNK8 0x0080 +#define AI_ACTION_DONE (1 << 0) +#define AI_ACTION_FLEE (1 << 1) +#define AI_ACTION_WATCH (1 << 2) +#define AI_ACTION_DO_NOT_ATTACK (1 << 3) #define AI_THINKING_STRUCT ((struct AI_ThinkingStruct *)(gBattleResources->ai)) #define BATTLE_HISTORY ((struct BattleHistory *)(gBattleResources->battleHistory)) @@ -283,7 +280,6 @@ static const u16 sIgnoredPowerfulMoveEffects[] = IGNORED_MOVES_END }; -// code void BattleAI_HandleItemUseBeforeAISetup(u8 defaultScoreMoves) { s32 i; @@ -302,7 +298,7 @@ void BattleAI_HandleItemUseBeforeAISetup(u8 defaultScoreMoves) { for (i = 0; i < MAX_TRAINER_ITEMS; i++) { - if (gTrainers[gTrainerBattleOpponent_A].items[i] != 0) + if (gTrainers[gTrainerBattleOpponent_A].items[i] != ITEM_NONE) { BATTLE_HISTORY->trainerItems[BATTLE_HISTORY->itemsNo] = gTrainers[gTrainerBattleOpponent_A].items[i]; BATTLE_HISTORY->itemsNo++; diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 5789a3ff6f..06cdd6c82f 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -687,7 +687,7 @@ u8 GetMostSuitableMonToSwitchInto(void) invalidMons = 0; - while (invalidMons != 0x3F) // All mons are invalid. + while (invalidMons != (1 << PARTY_SIZE) - 1) // All mons are invalid. { bestDmg = TYPE_MUL_NO_EFFECT; bestMonId = PARTY_SIZE; @@ -741,7 +741,7 @@ u8 GetMostSuitableMonToSwitchInto(void) } else { - invalidMons = 0x3F; // No viable mon to switch. + invalidMons = (1 << PARTY_SIZE) - 1; // No viable mon to switch. } } @@ -862,7 +862,7 @@ static bool8 ShouldUseItem(void) shouldUse = TRUE; break; case AI_ITEM_HEAL_HP: - paramOffset = GetItemEffectParamOffset(item, 4, 4); + paramOffset = GetItemEffectParamOffset(item, 4, ITEM4_HEAL_HP); if (paramOffset == 0) break; if (gBattleMons[gActiveBattler].hp == 0) @@ -935,7 +935,7 @@ static bool8 ShouldUseItem(void) { BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_USE_ITEM, 0); *(gBattleStruct->chosenItem + (gActiveBattler / 2) * 2) = item; - gBattleResources->battleHistory->trainerItems[i] = 0; + gBattleResources->battleHistory->trainerItems[i] = ITEM_NONE; return shouldUse; } } diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index bf9197a0e8..0161103045 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -7812,9 +7812,18 @@ static void Cmd_metronome(void) { s32 i; + #if MOVES_COUNT < 512 + // Original GF method of move selection is to pick a random + // number between 1-511. 355-511 are not valid moves, so if it + // picks in this range it retries. If MOVES_COUNT exceeds 511 we + // instead use a simpler solution. gCurrentMove = (Random() & 0x1FF) + 1; if (gCurrentMove >= MOVES_COUNT) continue; + #else + // Just pick a valid move value (between 1 and MOVES_COUNT-1) + gCurrentMove = (Random() % (MOVES_COUNT - 1)) + 1; + #endif for (i = 0; i < MAX_MON_MOVES; i++); // ? diff --git a/src/battle_util.c b/src/battle_util.c index 68a5b6adaa..51fbaa3cfb 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -342,7 +342,11 @@ void HandleAction_UseItem(void) gBattleCommunication[MULTISTRING_CHOOSER] = AI_HEAL_CONFUSION; if (*(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) & (1 << AI_HEAL_CONFUSION)) { - if (*(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) & 0x3E) + if (*(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) & ((1 << AI_HEAL_PARALYSIS) + | (1 << AI_HEAL_FREEZE) + | (1 << AI_HEAL_BURN) + | (1 << AI_HEAL_POISON) + | (1 << AI_HEAL_SLEEP))) gBattleCommunication[MULTISTRING_CHOOSER] = AI_HEAL_SLEEP; } else diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c index 448ee33848..415f22e59e 100644 --- a/src/berry_tag_screen.c +++ b/src/berry_tag_screen.c @@ -310,6 +310,8 @@ static void HandleInitBackgrounds(void) ShowBg(3); } +#define BG_TILE 0x42 + static bool8 LoadBerryTagGfx(void) { u16 i; @@ -333,15 +335,16 @@ static bool8 LoadBerryTagGfx(void) sBerryTag->gfxState++; break; case 3: + // Palette of the bg tiles changes depending on the player's gender if (gSaveBlock2Ptr->playerGender == MALE) { for (i = 0; i < ARRAY_COUNT(sBerryTag->tilemapBuffers[1]); i++) - sBerryTag->tilemapBuffers[1][i] = 0x4042; + sBerryTag->tilemapBuffers[1][i] = (4 << 12) | BG_TILE; } else { for (i = 0; i < ARRAY_COUNT(sBerryTag->tilemapBuffers[1]); i++) - sBerryTag->tilemapBuffers[1][i] = 0x5042; + sBerryTag->tilemapBuffers[1][i] = (5 << 12) | BG_TILE; } sBerryTag->gfxState++; break; @@ -545,6 +548,9 @@ static void Task_HandleInput(u8 taskId) } } +#define tBerryY data[0] +#define tBgOp data[1] + static void TryChangeDisplayedBerry(u8 taskId, s8 toMove) { s16 *data = gTasks[taskId].data; @@ -553,11 +559,11 @@ static void TryChangeDisplayedBerry(u8 taskId, s8 toMove) if (newPocketPosition < ITEM_TO_BERRY(MAX_BERRY_INDEX) && BagGetItemIdByPocketPosition(POCKET_BERRIES, newPocketPosition) != ITEM_NONE) { if (toMove < 0) - data[1] = 2; + tBgOp = BG_COORD_SUB; else - data[1] = 1; + tBgOp = BG_COORD_ADD; - data[0] = 0; + tBerryY = 0; PlaySE(SE_SELECT); HandleBagCursorPositionChange(toMove); gTasks[taskId].func = Task_DisplayAnotherBerry; @@ -586,101 +592,103 @@ static void HandleBagCursorPositionChange(s8 toMove) sBerryTag->berryId = ItemIdToBerryType(BagGetItemIdByPocketPosition(POCKET_BERRIES, *scrollPos + *cursorPos)); } +#define DISPLAY_SPEED 16 + static void Task_DisplayAnotherBerry(u8 taskId) { u16 i; - s16 posY; + s16 y; s16 *data = gTasks[taskId].data; - data[0] += 0x10; - data[0] &= 0xFF; + tBerryY += DISPLAY_SPEED; + tBerryY &= 0xFF; - if (data[1] == 1) + if (tBgOp == BG_COORD_ADD) { - switch (data[0]) + switch (tBerryY) { - case 0x30: + case 3 * DISPLAY_SPEED: FillWindowPixelBuffer(WIN_BERRY_NAME, PIXEL_FILL(0)); break; - case 0x40: + case 4 * DISPLAY_SPEED: PrintBerryNumberAndName(); break; - case 0x50: + case 5 * DISPLAY_SPEED: DestroyBerrySprite(); CreateBerrySprite(); break; - case 0x60: + case 6 * DISPLAY_SPEED: FillWindowPixelBuffer(WIN_SIZE_FIRM, PIXEL_FILL(0)); break; - case 0x70: + case 7 * DISPLAY_SPEED: PrintBerrySize(); break; - case 0x80: + case 8 * DISPLAY_SPEED: PrintBerryFirmness(); break; - case 0x90: + case 9 * DISPLAY_SPEED: SetFlavorCirclesVisiblity(); break; - case 0xA0: + case 10 * DISPLAY_SPEED: FillWindowPixelBuffer(WIN_DESC, PIXEL_FILL(0)); break; - case 0xB0: + case 11 * DISPLAY_SPEED: PrintBerryDescription1(); break; - case 0xC0: + case 12 * DISPLAY_SPEED: PrintBerryDescription2(); break; } } - else + else // BG_COORD_SUB { - switch (data[0]) + switch (tBerryY) { - case 0x30: + case 3 * DISPLAY_SPEED: FillWindowPixelBuffer(WIN_DESC, PIXEL_FILL(0)); break; - case 0x40: + case 4 * DISPLAY_SPEED: PrintBerryDescription2(); break; - case 0x50: + case 5 * DISPLAY_SPEED: PrintBerryDescription1(); break; - case 0x60: + case 6 * DISPLAY_SPEED: SetFlavorCirclesVisiblity(); break; - case 0x70: + case 7 * DISPLAY_SPEED: FillWindowPixelBuffer(WIN_SIZE_FIRM, PIXEL_FILL(0)); break; - case 0x80: + case 8 * DISPLAY_SPEED: PrintBerryFirmness(); break; - case 0x90: + case 9 * DISPLAY_SPEED: PrintBerrySize(); break; - case 0xA0: + case 10 * DISPLAY_SPEED: DestroyBerrySprite(); CreateBerrySprite(); break; - case 0xB0: + case 11 * DISPLAY_SPEED: FillWindowPixelBuffer(WIN_BERRY_NAME, PIXEL_FILL(0)); break; - case 0xC0: + case 12 * DISPLAY_SPEED: PrintBerryNumberAndName(); break; } } - if (data[1] == 1) - posY = -data[0]; + if (tBgOp == BG_COORD_ADD) + y = -tBerryY; else - posY = data[0]; + y = tBerryY; - gSprites[sBerryTag->berrySpriteId].y2 = posY; + gSprites[sBerryTag->berrySpriteId].y2 = y; for (i = 0; i < FLAVOR_COUNT; i++) - gSprites[sBerryTag->flavorCircleIds[i]].y2 = posY; + gSprites[sBerryTag->flavorCircleIds[i]].y2 = y; - ChangeBgY(1, 0x1000, data[1]); - ChangeBgY(2, 0x1000, data[1]); + ChangeBgY(1, 0x1000, tBgOp); + ChangeBgY(2, 0x1000, tBgOp); - if (data[0] == 0) + if (tBerryY == 0) gTasks[taskId].func = Task_HandleInput; } diff --git a/src/cable_club.c b/src/cable_club.c index 913a1b7287..b12a50920f 100644 --- a/src/cable_club.c +++ b/src/cable_club.c @@ -725,7 +725,7 @@ void TryContestEModeLinkup(void) u8 CreateTask_ReestablishCableClubLink(void) { if (FuncIsActiveTask(Task_ReestablishLink) != FALSE) - return 0xFF; + return TASK_NONE; switch (gSpecialVar_0x8004) { diff --git a/src/contest.c b/src/contest.c index 741a0e12db..3449d25f63 100644 --- a/src/contest.c +++ b/src/contest.c @@ -1112,10 +1112,10 @@ static void InitContestResources(void) for (i = 0; i < CONTESTANT_COUNT; i++) { - eContestantStatus[i].nextTurnOrder = 0xFF; + eContestantStatus[i].nextTurnOrder = CONTESTANT_NONE; eContest.prevTurnOrder[i] = gContestantTurnOrder[i]; } - // Calling this here while all the nextTurnOrder values are 0xFF will actually + // Calling this here while all the nextTurnOrder values are CONTESTANT_NONE will actually // just reverse the turn order. ApplyNextTurnOrder(); memset(gContestResources->tv, 0, sizeof(*gContestResources->tv) * CONTESTANT_COUNT); @@ -2891,7 +2891,7 @@ void SetContestants(u8 contestType, u8 rank) opponents[opponentsCount++] = i; } } - opponents[opponentsCount] = 0xFF; + opponents[opponentsCount] = CONTESTANT_NONE; // Choose three random opponents from the list for (i = 0; i < CONTESTANT_COUNT - 1; i++) @@ -2900,7 +2900,7 @@ void SetContestants(u8 contestType, u8 rank) s32 j; gContestMons[i] = gContestOpponents[opponents[rnd]]; - for (j = rnd; opponents[j] != 0xFF; j++) + for (j = rnd; opponents[j] != CONTESTANT_NONE; j++) opponents[j] = opponents[j + 1]; opponentsCount--; } @@ -2940,7 +2940,7 @@ void SetLinkAIContestants(u8 contestType, u8 rank, bool32 isPostgame) || (contestType == CONTEST_CATEGORY_TOUGH && gContestOpponents[i].aiPool_Tough)) opponents[opponentsCount++] = i; } - opponents[opponentsCount] = 0xFF; + opponents[opponentsCount] = CONTESTANT_NONE; // Fill remaining contestant slots with random AI opponents from the list for (i = 0; i < CONTESTANT_COUNT - gNumLinkContestPlayers; i++) @@ -2950,7 +2950,7 @@ void SetLinkAIContestants(u8 contestType, u8 rank, bool32 isPostgame) gContestMons[gNumLinkContestPlayers + i] = gContestOpponents[opponents[rnd]]; StripPlayerNameForLinkContest(gContestMons[gNumLinkContestPlayers + i].trainerName); StripMonNameForLinkContest(gContestMons[gNumLinkContestPlayers + i].nickname, GAME_LANGUAGE); - for (j = rnd; opponents[j] != 0xFF; j++) + for (j = rnd; opponents[j] != CONTESTANT_NONE; j++) opponents[j] = opponents[j + 1]; opponentsCount--; } @@ -4370,7 +4370,7 @@ void SortContestants(bool8 useRanking) // Note that ranking is calculated so that shared places still take up a ranking // space. A ranking like [1, 2, 2, 3] is not possible; it would be [1, 2, 2, 4] // instead. - memset(scratch, 0xFF, sizeof(scratch)); + memset(scratch, CONTESTANT_NONE, sizeof(scratch)); for (i = 0; i < CONTESTANT_COUNT; i++) { u8 j = eContestantStatus[i].ranking; @@ -4378,7 +4378,7 @@ void SortContestants(bool8 useRanking) while (1) { u8 *ptr = &scratch[j]; - if (*ptr == 0xFF) + if (*ptr == CONTESTANT_NONE) { *ptr = i; gContestantTurnOrder[i] = j; @@ -4636,7 +4636,7 @@ static void ApplyNextTurnOrder(void) // First, look for the first unassigned contestant. for (j = 0; j < CONTESTANT_COUNT; j++) { - if (!isContestantOrdered[j] && eContestantStatus[j].nextTurnOrder == 0xFF) + if (!isContestantOrdered[j] && eContestantStatus[j].nextTurnOrder == CONTESTANT_NONE) { nextContestant = j; j++; @@ -4647,7 +4647,7 @@ static void ApplyNextTurnOrder(void) // Then, look for a better candidate, with a higher turn order. for (; j < CONTESTANT_COUNT; j++) { - if (!isContestantOrdered[j] && eContestantStatus[j].nextTurnOrder == 0xFF + if (!isContestantOrdered[j] && eContestantStatus[j].nextTurnOrder == CONTESTANT_NONE && gContestantTurnOrder[nextContestant] > gContestantTurnOrder[j]) nextContestant = j; } @@ -4661,7 +4661,7 @@ static void ApplyNextTurnOrder(void) for (i = 0; i < CONTESTANT_COUNT; i++) { eContestAppealResults.turnOrder[i] = newTurnOrder[i]; - eContestantStatus[i].nextTurnOrder = 0xFF; + eContestantStatus[i].nextTurnOrder = CONTESTANT_NONE; eContestantStatus[i].turnOrderMod = 0; gContestantTurnOrder[i] = newTurnOrder[i]; } diff --git a/src/contest_ai.c b/src/contest_ai.c index 7aeba828a6..8753ed170d 100644 --- a/src/contest_ai.c +++ b/src/contest_ai.c @@ -6,6 +6,8 @@ #include "contest_effect.h" #include "constants/moves.h" +#define AI_ACTION_DONE (1 << 0) + extern const u8 *gAIScriptPtr; extern const u8 *gContestAI_ScriptsTable[]; @@ -362,9 +364,9 @@ static void ContestAI_DoAIProcessing(void) else { eContestAI.moveScores[eContestAI.nextMoveIndex] = 0; // don't consider a move that doesn't exist. - eContestAI.aiAction |= 1; + eContestAI.aiAction |= AI_ACTION_DONE; } - if (eContestAI.aiAction & 1) + if (eContestAI.aiAction & AI_ACTION_DONE) { eContestAI.nextMoveIndex++; if (eContestAI.nextMoveIndex < MAX_MON_MOVES) @@ -372,7 +374,7 @@ static void ContestAI_DoAIProcessing(void) else // aiState = CONTESTAI_FINISHED eContestAI.aiState++; - eContestAI.aiAction &= 0xFE; // TODO: Define action flags + eContestAI.aiAction &= ~AI_ACTION_DONE; } break; } @@ -1667,7 +1669,7 @@ static void ContestAICmd_call(void) static void ContestAICmd_end(void) { if (!AIStackPop()) - eContestAI.aiAction |= 1; + eContestAI.aiAction |= AI_ACTION_DONE; } static void AIStackPushVar(const u8 *ptr) diff --git a/src/contest_effect.c b/src/contest_effect.c index 864805a54f..b927943036 100644 --- a/src/contest_effect.c +++ b/src/contest_effect.c @@ -147,7 +147,7 @@ static void ContestEffect_StartleFrontMon(void) break; } eContestAppealResults.jamQueue[0] = i; - eContestAppealResults.jamQueue[1] = 0xFF; + eContestAppealResults.jamQueue[1] = CONTESTANT_NONE; idx = WasAtLeastOneOpponentJammed(); } if (idx == 0) @@ -171,7 +171,7 @@ static void ContestEffect_StartlePrevMons(void) eContestAppealResults.jamQueue[j++] = i; } - eContestAppealResults.jamQueue[j] = 0xFF; + eContestAppealResults.jamQueue[j] = CONTESTANT_NONE; idx = WasAtLeastOneOpponentJammed(); } if (idx == 0) @@ -214,7 +214,7 @@ static void ContestEffect_StartlePrevMons2(void) u8 rval, jam; eContestAppealResults.jamQueue[0] = i; - eContestAppealResults.jamQueue[1] = 0xFF; + eContestAppealResults.jamQueue[1] = CONTESTANT_NONE; rval = Random() % 10; if (rval == 0) @@ -291,7 +291,7 @@ static void ContestEffect_StartleMonWithJudgesAttention(void) else eContestAppealResults.jam = 10; eContestAppealResults.jamQueue[0] = i; - eContestAppealResults.jamQueue[1] = 0xFF; + eContestAppealResults.jamQueue[1] = CONTESTANT_NONE; if (WasAtLeastOneOpponentJammed()) numStartled++; } @@ -396,7 +396,7 @@ static void ContestEffect_MakeFollowingMonsNervous(void) s16 oddsMod[CONTESTANT_COUNT]; s16 odds[CONTESTANT_COUNT]; - memset(contestantIds, 0xFF, ARRAY_COUNT(contestantIds)); + memset(contestantIds, CONTESTANT_NONE, ARRAY_COUNT(contestantIds)); for (i = 0, numAfter = 0; i < CONTESTANT_COUNT; i++) { if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] < eContestAppealResults.turnOrder[i] && @@ -434,7 +434,7 @@ static void ContestEffect_MakeFollowingMonsNervous(void) } if (odds[0] != 0) { - for (i = 0; contestantIds[i] != 0xFF; i++) + for (i = 0; contestantIds[i] != CONTESTANT_NONE; i++) { if (Random() % 100 < odds[i] + oddsMod[contestantIds[i]]) { @@ -507,7 +507,7 @@ static void ContestEffect_BadlyStartlesMonsInGoodCondition(void) else eContestAppealResults.jam = 10; eContestAppealResults.jamQueue[0] = i; - eContestAppealResults.jamQueue[1] = 0xFF; + eContestAppealResults.jamQueue[1] = CONTESTANT_NONE; if (WasAtLeastOneOpponentJammed()) numHit++; } @@ -758,7 +758,7 @@ static void ContestEffect_NextAppealEarlier(void) for (i = 0; i < CONTESTANT_COUNT; i++) turnOrder[i] = eContestantStatus[i].nextTurnOrder; - turnOrder[eContestAppealResults.contestant] = 0xFF; + turnOrder[eContestAppealResults.contestant] = CONTESTANT_NONE; for (i = 0; i < CONTESTANT_COUNT; i++) { @@ -800,7 +800,7 @@ static void ContestEffect_NextAppealLater(void) for (i = 0; i < CONTESTANT_COUNT; i++) turnOrder[i] = eContestantStatus[i].nextTurnOrder; - turnOrder[eContestAppealResults.contestant] = 0xFF; + turnOrder[eContestAppealResults.contestant] = CONTESTANT_NONE; for (i = CONTESTANT_COUNT - 1; i > -1; i--) { @@ -858,12 +858,12 @@ static void ContestEffect_ScrambleNextTurnOrder(void) for (j = 0; j < CONTESTANT_COUNT; j++) { - if (unselectedContestants[j] != 0xFF) + if (unselectedContestants[j] != CONTESTANT_NONE) { if (rval == 0) { turnOrder[j] = i; - unselectedContestants[j] = 0xFF; + unselectedContestants[j] = CONTESTANT_NONE; break; } else @@ -909,7 +909,7 @@ static void ContestEffect_BadlyStartleMonsWithGoodAppeals(void) else eContestAppealResults.jam = 10; eContestAppealResults.jamQueue[0] = i; - eContestAppealResults.jamQueue[1] = 0xFF; + eContestAppealResults.jamQueue[1] = CONTESTANT_NONE; if (WasAtLeastOneOpponentJammed()) numJammed++; } @@ -977,7 +977,7 @@ static void JamByMoveCategory(u8 category) else eContestAppealResults.jam = 10; eContestAppealResults.jamQueue[0] = i; - eContestAppealResults.jamQueue[1] = 0xFF; + eContestAppealResults.jamQueue[1] = CONTESTANT_NONE; if (WasAtLeastOneOpponentJammed()) numJammed++; } @@ -1016,7 +1016,7 @@ static bool8 WasAtLeastOneOpponentJammed(void) s16 jamBuffer[CONTESTANT_COUNT] = {0}; int i; - for (i = 0; eContestAppealResults.jamQueue[i] != 0xFF; i++) + for (i = 0; eContestAppealResults.jamQueue[i] != CONTESTANT_NONE; i++) { u8 contestant = eContestAppealResults.jamQueue[i]; if (CanUnnerveContestant(contestant)) diff --git a/src/contest_util.c b/src/contest_util.c index ec999be924..e0e80a7091 100644 --- a/src/contest_util.c +++ b/src/contest_util.c @@ -2011,7 +2011,7 @@ void GiveMonContestRibbon(void) { case CONTEST_CATEGORY_COOL: ribbonData = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_COOL_RIBBON); - if (ribbonData <= gSpecialVar_ContestRank && ribbonData < 4) + if (ribbonData <= gSpecialVar_ContestRank && ribbonData <= CONTEST_RANK_MASTER) { ribbonData++; SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_COOL_RIBBON, &ribbonData); @@ -2021,7 +2021,7 @@ void GiveMonContestRibbon(void) break; case CONTEST_CATEGORY_BEAUTY: ribbonData = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_BEAUTY_RIBBON); - if (ribbonData <= gSpecialVar_ContestRank && ribbonData < 4) + if (ribbonData <= gSpecialVar_ContestRank && ribbonData <= CONTEST_RANK_MASTER) { ribbonData++; SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_BEAUTY_RIBBON, &ribbonData); @@ -2031,7 +2031,7 @@ void GiveMonContestRibbon(void) break; case CONTEST_CATEGORY_CUTE: ribbonData = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_CUTE_RIBBON); - if (ribbonData <= gSpecialVar_ContestRank && ribbonData < 4) + if (ribbonData <= gSpecialVar_ContestRank && ribbonData <= CONTEST_RANK_MASTER) { ribbonData++; SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_CUTE_RIBBON, &ribbonData); @@ -2041,7 +2041,7 @@ void GiveMonContestRibbon(void) break; case CONTEST_CATEGORY_SMART: ribbonData = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SMART_RIBBON); - if (ribbonData <= gSpecialVar_ContestRank && ribbonData < 4) + if (ribbonData <= gSpecialVar_ContestRank && ribbonData <= CONTEST_RANK_MASTER) { ribbonData++; SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SMART_RIBBON, &ribbonData); @@ -2051,7 +2051,7 @@ void GiveMonContestRibbon(void) break; case CONTEST_CATEGORY_TOUGH: ribbonData = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_TOUGH_RIBBON); - if (ribbonData <= gSpecialVar_ContestRank && ribbonData < 4) + if (ribbonData <= gSpecialVar_ContestRank && ribbonData <= CONTEST_RANK_MASTER) { ribbonData++; SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_TOUGH_RIBBON, &ribbonData); diff --git a/src/data/contest_opponents.h b/src/data/contest_opponents.h index 7c3aad3151..d8241c4f0c 100644 --- a/src/data/contest_opponents.h +++ b/src/data/contest_opponents.h @@ -138,11 +138,14 @@ enum { #define CONTEST_AI_SET_20 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_12 | CONTEST_AI_DUMMY_25) #define CONTEST_AI_SET_21 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_7 | CONTEST_AI_DUMMY_25) +// All AI contestants have the same trainer ID +#define CONTEST_AI_TRAINER_ID 0xFFFF + const struct ContestWinner gDefaultContestWinners[] = { [CONTEST_WINNER_HALL_1 - 1] = { .personality = 0, - .trainerId = 0xFFFF, + .trainerId = CONTEST_AI_TRAINER_ID, .species = SPECIES_ELECTRIKE, .contestCategory = CONTEST_CATEGORY_CUTE, .monName = _("ELECTER"), @@ -151,7 +154,7 @@ const struct ContestWinner gDefaultContestWinners[] = }, [CONTEST_WINNER_HALL_2 - 1] = { .personality = 0, - .trainerId = 0xFFFF, + .trainerId = CONTEST_AI_TRAINER_ID, .species = SPECIES_TROPIUS, .contestCategory = CONTEST_CATEGORY_COOL, .monName = _("TROPO"), @@ -160,7 +163,7 @@ const struct ContestWinner gDefaultContestWinners[] = }, [CONTEST_WINNER_HALL_3 - 1] = { .personality = 0, - .trainerId = 0xFFFF, + .trainerId = CONTEST_AI_TRAINER_ID, .species = SPECIES_XATU, .contestCategory = CONTEST_CATEGORY_BEAUTY, .monName = _("TUXA"), @@ -169,7 +172,7 @@ const struct ContestWinner gDefaultContestWinners[] = }, [CONTEST_WINNER_HALL_4 - 1] = { .personality = 0, - .trainerId = 0xFFFF, + .trainerId = CONTEST_AI_TRAINER_ID, .species = SPECIES_PLUSLE, .contestCategory = CONTEST_CATEGORY_TOUGH, .monName = _("PULSE"), @@ -178,7 +181,7 @@ const struct ContestWinner gDefaultContestWinners[] = }, [CONTEST_WINNER_HALL_5 - 1] = { .personality = 0, - .trainerId = 0xFFFF, + .trainerId = CONTEST_AI_TRAINER_ID, .species = SPECIES_SHUPPET, .contestCategory = CONTEST_CATEGORY_SMART, .monName = _("SHUPUP"), @@ -187,7 +190,7 @@ const struct ContestWinner gDefaultContestWinners[] = }, [CONTEST_WINNER_HALL_6 - 1] = { .personality = 0, - .trainerId = 0xFFFF, + .trainerId = CONTEST_AI_TRAINER_ID, .species = SPECIES_ZANGOOSE, .contestCategory = CONTEST_CATEGORY_COOL, .monName = _("GOOZAN"), @@ -196,7 +199,7 @@ const struct ContestWinner gDefaultContestWinners[] = }, [CONTEST_WINNER_HALL_UNUSED_1 - 1] = { .personality = 0, - .trainerId = 0xFFFF, + .trainerId = CONTEST_AI_TRAINER_ID, .species = SPECIES_LOUDRED, .contestCategory = CONTEST_CATEGORY_BEAUTY, .monName = _("LOUDED"), @@ -205,7 +208,7 @@ const struct ContestWinner gDefaultContestWinners[] = }, [CONTEST_WINNER_HALL_UNUSED_2 - 1] = { .personality = 0, - .trainerId = 0xFFFF, + .trainerId = CONTEST_AI_TRAINER_ID, .species = SPECIES_DELCATTY, .contestCategory = CONTEST_CATEGORY_CUTE, .monName = _("KITSY"), @@ -242,7 +245,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 4, .sheen = 50, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_EDITH] = { .species = SPECIES_ILLUMISE, @@ -270,7 +273,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 2, .sheen = 60, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_EVAN] = { .species = SPECIES_DUSTOX, @@ -298,7 +301,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 4, .sheen = 70, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_KELSEY] = { .species = SPECIES_SEEDOT, @@ -326,7 +329,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 7, .sheen = 80, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_MADISON] = { .species = SPECIES_TAILLOW, @@ -354,7 +357,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 4, .sheen = 90, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_RAYMOND] = { .species = SPECIES_NINCADA, @@ -382,7 +385,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 8, .sheen = 100, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_GRANT] = { .species = SPECIES_SHROOMISH, @@ -410,7 +413,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 2, .sheen = 50, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_PAIGE] = { .species = SPECIES_SPHEAL, @@ -438,7 +441,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 10, .sheen = 60, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_ALEC] = { .species = SPECIES_SLAKOTH, @@ -466,7 +469,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 18, .sheen = 70, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_SYDNEY] = { .species = SPECIES_WHISMUR, @@ -494,7 +497,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 7, .sheen = 80, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_MORRIS] = { .species = SPECIES_MAKUHITA, @@ -522,7 +525,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 1, .sheen = 90, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_MARIAH] = { .species = SPECIES_ARON, @@ -550,7 +553,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 2, .sheen = 100, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_RUSSELL] = { .species = SPECIES_CROBAT, @@ -578,7 +581,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 10, .sheen = 50, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_MELANIE] = { .species = SPECIES_GULPIN, @@ -606,7 +609,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 5, .sheen = 60, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_CHANCE] = { .species = SPECIES_MANECTRIC, @@ -634,7 +637,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 1, .sheen = 70, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_AGATHA] = { .species = SPECIES_BULBASAUR, @@ -662,7 +665,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 4, .sheen = 50, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_BEAU] = { .species = SPECIES_BUTTERFREE, @@ -690,7 +693,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 4, .sheen = 60, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_KAY] = { .species = SPECIES_PIDGEOTTO, @@ -718,7 +721,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 3, .sheen = 70, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_CALE] = { .species = SPECIES_DIGLETT, @@ -746,7 +749,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 10, .sheen = 80, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_CAITLIN] = { .species = SPECIES_POLIWAG, @@ -774,7 +777,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 10, .sheen = 90, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_COLBY] = { .species = SPECIES_TOTODILE, @@ -802,7 +805,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 5, .sheen = 100, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_KYLIE] = { .species = SPECIES_LEDYBA, @@ -830,7 +833,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 2, .sheen = 90, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_LIAM] = { .species = SPECIES_DELIBIRD, @@ -858,7 +861,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 3, .sheen = 80, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_MILO] = { .species = SPECIES_LARVITAR, @@ -886,7 +889,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 10, .sheen = 70, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_KARINA] = { .species = SPECIES_ROSELIA, @@ -914,7 +917,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 20, .sheen = 100, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_BOBBY] = { .species = SPECIES_DODRIO, @@ -942,7 +945,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 35, .sheen = 110, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_CLAIRE] = { .species = SPECIES_TRAPINCH, @@ -970,7 +973,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 25, .sheen = 120, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_WILLIE] = { .species = SPECIES_CACNEA, @@ -998,7 +1001,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 25, .sheen = 130, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_CASSIDY] = { .species = SPECIES_SANDSLASH, @@ -1026,7 +1029,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 100, .sheen = 140, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_MORGAN] = { .species = SPECIES_BALTOY, @@ -1054,7 +1057,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 35, .sheen = 150, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_SUMMER] = { .species = SPECIES_MEDICHAM, @@ -1082,7 +1085,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 40, .sheen = 100, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_MILES] = { .species = SPECIES_SPINDA, @@ -1110,7 +1113,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 25, .sheen = 110, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_AUDREY] = { .species = SPECIES_SWABLU, @@ -1138,7 +1141,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 25, .sheen = 120, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_AVERY] = { .species = SPECIES_SPOINK, @@ -1166,7 +1169,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 30, .sheen = 130, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_ARIANA] = { .species = SPECIES_KECLEON, @@ -1194,7 +1197,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 35, .sheen = 140, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_ASHTON] = { .species = SPECIES_GOLDEEN, @@ -1222,7 +1225,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 25, .sheen = 150, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_SANDRA] = { .species = SPECIES_BARBOACH, @@ -1250,7 +1253,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 15, .sheen = 100, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_CARSON] = { .species = SPECIES_SKARMORY, @@ -1278,7 +1281,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 20, .sheen = 110, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_KATRINA] = { .species = SPECIES_LOTAD, @@ -1306,7 +1309,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 75, .sheen = 120, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_LUKE] = { .species = SPECIES_SLOWBRO, @@ -1334,7 +1337,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 20, .sheen = 100, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_RAUL] = { .species = SPECIES_FARFETCHD, @@ -1362,7 +1365,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 20, .sheen = 110, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_JADA] = { .species = SPECIES_SEEL, @@ -1390,7 +1393,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 20, .sheen = 120, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_ZEEK] = { .species = SPECIES_DROWZEE, @@ -1418,7 +1421,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 45, .sheen = 130, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_DIEGO] = { .species = SPECIES_HITMONCHAN, @@ -1446,7 +1449,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 45, .sheen = 140, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_ALIYAH] = { .species = SPECIES_BLISSEY, @@ -1474,7 +1477,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 20, .sheen = 150, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_NATALIA] = { .species = SPECIES_ELEKID, @@ -1502,7 +1505,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 25, .sheen = 140, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_DEVIN] = { .species = SPECIES_SNUBBULL, @@ -1530,7 +1533,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 20, .sheen = 130, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_TYLOR] = { .species = SPECIES_MISDREAVUS, @@ -1558,7 +1561,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 20, .sheen = 120, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_RONNIE] = { .species = SPECIES_LAIRON, @@ -1586,7 +1589,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 90, .sheen = 200, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_CLAUDIA] = { .species = SPECIES_SHIFTRY, @@ -1614,7 +1617,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 70, .sheen = 210, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_ELIAS] = { .species = SPECIES_NINJASK, @@ -1642,7 +1645,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 70, .sheen = 220, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_JADE] = { .species = SPECIES_SWELLOW, @@ -1670,7 +1673,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 40, .sheen = 230, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_FRANCIS] = { .species = SPECIES_MIGHTYENA, @@ -1698,7 +1701,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 70, .sheen = 240, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_ALISHA] = { .species = SPECIES_BEAUTIFLY, @@ -1726,7 +1729,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 100, .sheen = 250, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_SAUL] = { .species = SPECIES_SEAKING, @@ -1754,7 +1757,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 90, .sheen = 200, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_FELICIA] = { .species = SPECIES_CASTFORM, @@ -1782,7 +1785,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 65, .sheen = 210, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_EMILIO] = { .species = SPECIES_MACHOKE, @@ -1810,7 +1813,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 50, .sheen = 220, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_KARLA] = { .species = SPECIES_LOMBRE, @@ -1838,7 +1841,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 70, .sheen = 230, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_DARRYL] = { .species = SPECIES_SEVIPER, @@ -1866,7 +1869,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 100, .sheen = 240, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_SELENA] = { .species = SPECIES_WAILMER, @@ -1894,7 +1897,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 30, .sheen = 250, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_NOEL] = { .species = SPECIES_MAGIKARP, @@ -1922,7 +1925,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 160, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_LACEY] = { .species = SPECIES_LUNATONE, @@ -1950,7 +1953,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 50, .sheen = 210, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_CORBIN] = { .species = SPECIES_ABSOL, @@ -1978,7 +1981,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 35, .sheen = 220, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_GRACIE] = { .species = SPECIES_EXEGGUTOR, @@ -2006,7 +2009,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 80, .sheen = 200, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_COLTIN] = { .species = SPECIES_CUBONE, @@ -2034,7 +2037,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 100, .sheen = 210, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_ELLIE] = { .species = SPECIES_HITMONLEE, @@ -2062,7 +2065,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 100, .sheen = 220, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_MARCUS] = { .species = SPECIES_SQUIRTLE, @@ -2090,7 +2093,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 95, .sheen = 230, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_KIARA] = { .species = SPECIES_KANGASKHAN, @@ -2118,7 +2121,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 100, .sheen = 240, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_BRYCE] = { .species = SPECIES_PINECO, @@ -2146,7 +2149,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 80, .sheen = 250, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_JAMIE] = { .species = SPECIES_DUNSPARCE, @@ -2174,7 +2177,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 110, .sheen = 240, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_JORGE] = { .species = SPECIES_HOUNDOOM, @@ -2202,7 +2205,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 80, .sheen = 230, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_DEVON] = { .species = SPECIES_MILTANK, @@ -2230,7 +2233,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 40, .sheen = 220, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_JUSTINA] = { .species = SPECIES_GYARADOS, @@ -2258,7 +2261,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 160, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_RALPH] = { .species = SPECIES_LOUDRED, @@ -2286,7 +2289,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 160, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_ROSA] = { .species = SPECIES_SKITTY, @@ -2314,7 +2317,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 60, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_KEATON] = { .species = SPECIES_SLAKING, @@ -2342,7 +2345,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 150, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_MAYRA] = { .species = SPECIES_ALTARIA, @@ -2370,7 +2373,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 90, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_LAMAR] = { .species = SPECIES_KIRLIA, @@ -2398,7 +2401,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 80, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_AUBREY] = { .species = SPECIES_BELLOSSOM, @@ -2426,7 +2429,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 40, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_NIGEL] = { .species = SPECIES_SABLEYE, @@ -2454,7 +2457,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 160, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_CAMILLE] = { .species = SPECIES_NATU, @@ -2482,7 +2485,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 170, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_DEON] = { .species = SPECIES_SHARPEDO, @@ -2510,7 +2513,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 100, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_JANELLE] = { .species = SPECIES_LUVDISC, @@ -2538,7 +2541,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 190, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_HEATH] = { .species = SPECIES_HERACROSS, @@ -2566,7 +2569,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 140, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_SASHA] = { .species = SPECIES_ELECTRODE, @@ -2594,7 +2597,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 50, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_FRANKIE] = { .species = SPECIES_PICHU, @@ -2622,7 +2625,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 120, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_HELEN] = { .species = SPECIES_WOBBUFFET, @@ -2650,7 +2653,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 210, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_CAMILE] = { .species = SPECIES_GENGAR, @@ -2678,7 +2681,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 180, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_MARTIN] = { .species = SPECIES_PORYGON, @@ -2706,7 +2709,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 130, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_SERGIO] = { .species = SPECIES_DRAGONITE, @@ -2734,7 +2737,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 150, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_KAILEY] = { .species = SPECIES_MEOWTH, @@ -2762,7 +2765,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 80, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_PERLA] = { .species = SPECIES_JYNX, @@ -2790,7 +2793,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 120, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_CLARA] = { .species = SPECIES_TOGEPI, @@ -2818,7 +2821,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 80, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_JAKOB] = { .species = SPECIES_ESPEON, @@ -2846,7 +2849,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 150, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_TREY] = { .species = SPECIES_SLOWKING, @@ -2874,7 +2877,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 170, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, }, [CONTEST_OPPONENT_LANE] = { .species = SPECIES_URSARING, @@ -2902,7 +2905,7 @@ const struct ContestPokemon gContestOpponents[] = .tough = 190, .sheen = 255, .personality = 0, - .otId = 0xFFFF + .otId = CONTEST_AI_TRAINER_ID, } }; diff --git a/src/decoration.c b/src/decoration.c index b33580d2d3..688018b2db 100644 --- a/src/decoration.c +++ b/src/decoration.c @@ -422,7 +422,16 @@ static const u8 sDecorationSlideElevation[] = }; static const u16 sDecorShapeSizes[] = { - 0x04, 0x08, 0x10, 0x20, 0x10, 0x08, 0x10, 0x20, 0x40, 0x20 + [DECORSHAPE_1x1] = 4, + [DECORSHAPE_2x1] = 8, + [DECORSHAPE_3x1] = 16, + [DECORSHAPE_4x2] = 32, + [DECORSHAPE_2x2] = 16, + [DECORSHAPE_1x2] = 8, + [DECORSHAPE_1x3] = 16, + [DECORSHAPE_2x4] = 32, + [DECORSHAPE_3x3] = 64, + [DECORSHAPE_3x2] = 32, }; static const u16 sBrendanPalette[] = INCBIN_U16("graphics/decorations/brendan.gbapal"); diff --git a/src/dewford_trend.c b/src/dewford_trend.c index 08dd9afe0b..45c18f6013 100644 --- a/src/dewford_trend.c +++ b/src/dewford_trend.c @@ -224,7 +224,7 @@ static void SortTrends(struct DewfordTrend *trends, u16 numTrends, u8 mode) } #define SAVED_TRENDS_SIZE (sizeof(struct DewfordTrend) * SAVED_TRENDS_COUNT) -#define BUFFER_SIZE (SAVED_TRENDS_SIZE * MAX_LINK_PLAYERS > 0x100 ? SAVED_TRENDS_SIZE * MAX_LINK_PLAYERS : 0x100) // More space was allocated than needed +#define BUFFER_SIZE max(SAVED_TRENDS_SIZE * MAX_LINK_PLAYERS, 0x100) // More space was allocated than needed void ReceiveDewfordTrendData(struct DewfordTrend *linkedTrends, size_t size, u8 unused) { diff --git a/src/ereader_helpers.c b/src/ereader_helpers.c index 894ad00123..c5b8712b5c 100755 --- a/src/ereader_helpers.c +++ b/src/ereader_helpers.c @@ -753,11 +753,11 @@ void EReaderHelper_SerialCallback(void) switch (sSendRecvMgr.state) { case EREADER_XFR_STATE_HANDSHAKE: - REG_SIOMLT_SEND = 0xCCD0; // Handshake id + REG_SIOMLT_SEND = EREADER_HANDSHAKE; *(u64 *)recv = REG_SIOMLT_RECV; for (i = 0, cnt1 = 0, cnt2 = 0; i < 4; i++) { - if (recv[i] == 0xCCD0) + if (recv[i] == EREADER_HANDSHAKE) cnt1++; else if (recv[i] != 0xFFFF) cnt2++; diff --git a/src/field_specials.c b/src/field_specials.c index 38746c97a4..53084c8291 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -3260,6 +3260,7 @@ void ScrollableMultichoice_ClosePersistentMenu(void) #undef tTaskId #define DEOXYS_ROCK_LEVELS 11 +#define ROCK_PAL_ID 10 void DoDeoxysRockInteraction(void) { @@ -3339,7 +3340,7 @@ static void Task_DeoxysRockInteraction(u8 taskId) static void ChangeDeoxysRockLevel(u8 rockLevel) { u8 objectEventId; - LoadPalette(&sDeoxysRockPalettes[rockLevel], OBJ_PLTT_ID(10), PLTT_SIZEOF(4)); + LoadPalette(&sDeoxysRockPalettes[rockLevel], OBJ_PLTT_ID(ROCK_PAL_ID), PLTT_SIZEOF(4)); TryGetObjectEventIdByLocalIdAndMap(LOCALID_BIRTH_ISLAND_EXTERIOR_ROCK, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objectEventId); if (rockLevel == 0) @@ -3376,21 +3377,20 @@ static void WaitForDeoxysRockMovement(u8 taskId) void IncrementBirthIslandRockStepCount(void) { - u16 var = VarGet(VAR_DEOXYS_ROCK_STEP_COUNT); + u16 stepCount = VarGet(VAR_DEOXYS_ROCK_STEP_COUNT); if (gSaveBlock1Ptr->location.mapNum == MAP_NUM(BIRTH_ISLAND_EXTERIOR) && gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(BIRTH_ISLAND_EXTERIOR)) { - var++; - if (var > 99) + if (++stepCount > 99) VarSet(VAR_DEOXYS_ROCK_STEP_COUNT, 0); else - VarSet(VAR_DEOXYS_ROCK_STEP_COUNT, var); + VarSet(VAR_DEOXYS_ROCK_STEP_COUNT, stepCount); } } void SetDeoxysRockPalette(void) { - LoadPalette(&sDeoxysRockPalettes[(u8)VarGet(VAR_DEOXYS_ROCK_LEVEL)], OBJ_PLTT_ID(10), PLTT_SIZEOF(4)); - BlendPalettes(0x04000000, 16, 0); + LoadPalette(&sDeoxysRockPalettes[(u8)VarGet(VAR_DEOXYS_ROCK_LEVEL)], OBJ_PLTT_ID(ROCK_PAL_ID), PLTT_SIZEOF(4)); + BlendPalettes(1 << (ROCK_PAL_ID + 16), 16, 0); } void SetPCBoxToSendMon(u8 boxId) @@ -3957,16 +3957,15 @@ bool8 InPokemonCenter(void) #define FANCLUB_BITFIELD (gSaveBlock1Ptr->vars[VAR_FANCLUB_FAN_COUNTER - VARS_START]) #define FANCLUB_COUNTER 0x007F -#define FANCLUB_FAN_FLAGS 0xFF80 #define GET_TRAINER_FAN_CLUB_FLAG(flag) (FANCLUB_BITFIELD >> (flag) & 1) #define SET_TRAINER_FAN_CLUB_FLAG(flag) (FANCLUB_BITFIELD |= 1 << (flag)) #define FLIP_TRAINER_FAN_CLUB_FLAG(flag)(FANCLUB_BITFIELD ^= 1 << (flag)) #define GET_TRAINER_FAN_CLUB_COUNTER (FANCLUB_BITFIELD & FANCLUB_COUNTER) -#define SET_TRAINER_FAN_CLUB_COUNTER(count) (FANCLUB_BITFIELD = (FANCLUB_BITFIELD & FANCLUB_FAN_FLAGS) | (count)) +#define SET_TRAINER_FAN_CLUB_COUNTER(count) (FANCLUB_BITFIELD = (FANCLUB_BITFIELD & ~FANCLUB_COUNTER) | (count)) #define INCR_TRAINER_FAN_CLUB_COUNTER(count)(FANCLUB_BITFIELD += (count)) -#define CLEAR_TRAINER_FAN_CLUB_COUNTER (FANCLUB_BITFIELD &= ~(FANCLUB_COUNTER)) +#define CLEAR_TRAINER_FAN_CLUB_COUNTER (FANCLUB_BITFIELD &= ~FANCLUB_COUNTER) void ResetFanClub(void) { diff --git a/src/librfu_rfu.c b/src/librfu_rfu.c index 319743d0d2..da37b8fc11 100644 --- a/src/librfu_rfu.c +++ b/src/librfu_rfu.c @@ -139,7 +139,7 @@ u16 rfu_initializeAPI(u32 *APIBuffer, u16 buffByteSize, IntrFunc *sioIntrTable_p u16 buffByteSizeMax; // is in EWRAM? - if (((uintptr_t)APIBuffer & 0xF000000) == 0x2000000 && copyInterruptToRam) + if (((uintptr_t)APIBuffer & 0xF000000) == EWRAM_START && copyInterruptToRam) return ERR_RFU_API_BUFF_ADR; // is not 4-byte aligned? if ((u32)APIBuffer & 3) @@ -338,7 +338,7 @@ u16 rfu_getRFUStatus(u8 *rfuState) u16 rfu_MBOOT_CHILD_inheritanceLinkStatus(void) { const char *s1 = str_checkMbootLL; - char *s2 = (char *)0x30000F0; + char *s2 = (char *)(IWRAM_START + 0xF0); u16 checksum; u16 *mb_buff_iwram_p; u8 i; @@ -347,15 +347,15 @@ u16 rfu_MBOOT_CHILD_inheritanceLinkStatus(void) while (*s1 != '\0') if (*s1++ != *s2++) return 1; - mb_buff_iwram_p = (u16 *)0x3000000; + mb_buff_iwram_p = (u16 *)IWRAM_START; // The size of struct RfuLinkStatus is 180 checksum = 0; for (i = 0; i < 180/2; ++i) checksum += *mb_buff_iwram_p++; - if (checksum != *(u16 *)0x30000FA) + if (checksum != *(u16 *)(IWRAM_START + 0xFA)) return 1; - CpuCopy16((u16 *)0x3000000, gRfuLinkStatus, sizeof(struct RfuLinkStatus)); + CpuCopy16((u16 *)IWRAM_START, gRfuLinkStatus, sizeof(struct RfuLinkStatus)); gRfuStatic->flags |= 0x80; // mboot return 0; } diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c index 9d66a18378..6c84ffefe0 100644 --- a/src/link_rfu_2.c +++ b/src/link_rfu_2.c @@ -1918,7 +1918,8 @@ static void Task_PlayerExchangeUpdate(u8 taskId) for (i = 0; i < RFU_CHILD_MAX; i++) sio->linkPlayerIdx[i] = gRfu.linkPlayerIdx[i]; memcpy(sio->linkPlayers, gLinkPlayers, sizeof(gLinkPlayers)); - if (SendBlock(0, gBlockSendBuffer, 0xa0)) + // Send SioInfo but exclude the 92 unused bytes at the end + if (SendBlock(0, gBlockSendBuffer, offsetof(struct SioInfo, filler))) gTasks[taskId].tState++; break; case 5: diff --git a/src/main_menu.c b/src/main_menu.c index ef4bbd636d..ddbcda5fd2 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -4,6 +4,7 @@ #include "constants/rgb.h" #include "constants/songs.h" #include "constants/trainers.h" +#include "data.h" #include "decompress.h" #include "event_data.h" #include "field_effect.h" @@ -1900,7 +1901,7 @@ static void AddBirchSpeechObjects(u8 taskId) gSprites[brendanSpriteId].invisible = TRUE; gSprites[brendanSpriteId].oam.priority = 0; gTasks[taskId].tBrendanSpriteId = brendanSpriteId; - maySpriteId = CreateTrainerSprite(FacilityClassToPicIndex(FACILITY_CLASS_MAY), 120, 60, 0, &gDecompressionBuffer[0x800]); + maySpriteId = CreateTrainerSprite(FacilityClassToPicIndex(FACILITY_CLASS_MAY), 120, 60, 0, &gDecompressionBuffer[TRAINER_PIC_SIZE]); gSprites[maySpriteId].callback = SpriteCB_Null; gSprites[maySpriteId].invisible = TRUE; gSprites[maySpriteId].oam.priority = 0; diff --git a/src/palette.c b/src/palette.c index 43a4c213c7..e360664627 100644 --- a/src/palette.c +++ b/src/palette.c @@ -440,7 +440,7 @@ static u8 UpdateNormalPaletteFade(void) else { selectedPalettes = gPaletteFade_selectedPalettes >> 16; - paletteOffset = 256; + paletteOffset = OBJ_PLTT_OFFSET; } while (selectedPalettes) diff --git a/src/region_map.c b/src/region_map.c index f6123359be..7d5fe93654 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -1419,7 +1419,7 @@ void CreateRegionMapCursor(u16 tileTag, u16 paletteTag) sRegionMap->cursorSprite->y = 8 * sRegionMap->cursorPosY + 4; } sRegionMap->cursorSprite->data[1] = 2; - sRegionMap->cursorSprite->data[2] = (IndexOfSpritePaletteTag(paletteTag) << 4) + 0x101; + sRegionMap->cursorSprite->data[2] = OBJ_PLTT_ID(IndexOfSpritePaletteTag(paletteTag)) + 1; sRegionMap->cursorSprite->data[3] = TRUE; } } diff --git a/src/secret_base.c b/src/secret_base.c index 1a4a0ac9cd..9509cd0fc5 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -47,6 +47,8 @@ #include "constants/songs.h" #include "constants/trainers.h" +#define TAG_SCROLL_ARROW 5112 + // Values for registryStatus enum { UNREGISTERED, @@ -985,7 +987,7 @@ static void FinalizeRegistryMenu(u8 taskId) static void AddRegistryMenuScrollArrows(u8 taskId) { s16 *data = gTasks[taskId].data; - tArrowTaskId = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 188, 12, 148, tNumBases - tMaxShownItems, 0x13f8, 0x13f8, &tScrollOffset); + tArrowTaskId = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 188, 12, 148, tNumBases - tMaxShownItems, TAG_SCROLL_ARROW, TAG_SCROLL_ARROW, &tScrollOffset); } static void HandleRegistryMenuInput(u8 taskId) From d5d46bb4382174e60f730c385c7a4010a6740fbc Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 10 Aug 2023 01:42:38 -0400 Subject: [PATCH 32/43] More DISPLAY_WIDTH/HEIGHT constant usage --- src/battle_anim_effects_1.c | 6 +++--- src/battle_anim_effects_3.c | 6 +++--- src/battle_anim_ground.c | 6 +++--- src/battle_anim_ice.c | 6 +++--- src/battle_anim_throw.c | 2 +- src/battle_intro.c | 36 ++++++++++++++++++------------------ src/battle_main.c | 7 ++----- src/berry_blender.c | 8 ++++---- src/credits.c | 2 +- src/field_effect.c | 2 +- src/intro.c | 10 +++++----- src/pokedex.c | 14 +++++++------- src/slot_machine.c | 18 +++++++++--------- src/title_screen.c | 2 +- src/util.c | 2 +- 15 files changed, 62 insertions(+), 65 deletions(-) diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index e328849407..c0ad548f17 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -3578,13 +3578,13 @@ static void AnimFlyingParticle(struct Sprite *sprite) { sprite->data[4] = 0; sprite->data[2] = gBattleAnimArgs[3]; - sprite->x = 0xFFF0; + sprite->x = -16; } else { sprite->data[4] = 1; sprite->data[2] = -gBattleAnimArgs[3]; - sprite->x = 0x100; + sprite->x = DISPLAY_WIDTH + 16; } sprite->data[1] = gBattleAnimArgs[1]; @@ -3623,7 +3623,7 @@ static void AnimFlyingParticle_Step(struct Sprite *sprite) sprite->data[0] = (sprite->data[3] * a) & 0xFF; if (!sprite->data[4]) { - if (sprite->x2 + sprite->x <= 0xF7) + if (sprite->x2 + sprite->x < DISPLAY_WIDTH + 8) return; } else diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c index 6c5fd59c86..5168641c6a 100755 --- a/src/battle_anim_effects_3.c +++ b/src/battle_anim_effects_3.c @@ -3056,7 +3056,7 @@ static void AnimFlatterConfetti(struct Sprite *sprite) if (sprite->data[2] == ANIM_ATTACKER) sprite->x = -8; else - sprite->x = 248; + sprite->x = DISPLAY_WIDTH + 8; sprite->y = 104; sprite->callback = AnimFlatterConfetti_Step; @@ -3414,8 +3414,8 @@ static void AnimTask_AcidArmor_Step(u8 taskId) var0 *= 2; while (var0 >= 0) { - gScanlineEffectRegBuffers[0][var0] = bgX + 240; - gScanlineEffectRegBuffers[1][var0] = bgX + 240; + gScanlineEffectRegBuffers[0][var0] = bgX + DISPLAY_WIDTH; + gScanlineEffectRegBuffers[1][var0] = bgX + DISPLAY_WIDTH; var0 -= 2; } diff --git a/src/battle_anim_ground.c b/src/battle_anim_ground.c index 7b810b56c2..d6d8137bcd 100644 --- a/src/battle_anim_ground.c +++ b/src/battle_anim_ground.c @@ -481,10 +481,10 @@ static void SetDigScanlineEffect(u8 useBG1, s16 y, s16 endY) y++; } - while (y < 160) + while (y < DISPLAY_HEIGHT) { - gScanlineEffectRegBuffers[0][y] = bgX + 240; - gScanlineEffectRegBuffers[1][y] = bgX + 240; + gScanlineEffectRegBuffers[0][y] = bgX + DISPLAY_WIDTH; + gScanlineEffectRegBuffers[1][y] = bgX + DISPLAY_WIDTH; y++; } diff --git a/src/battle_anim_ice.c b/src/battle_anim_ice.c index f870ff4f87..273721e162 100644 --- a/src/battle_anim_ice.c +++ b/src/battle_anim_ice.c @@ -1305,11 +1305,11 @@ static void MovePoisonGasCloud(struct Sprite *sprite) sprite->data[3] = sprite->y += sprite->y2; sprite->data[4] = sprite->y + 4; if (IsContest()) - sprite->data[2] = -0x10; + sprite->data[2] = -16; else if (GET_BATTLER_SIDE2(gBattleAnimTarget) != B_SIDE_PLAYER) - sprite->data[2] = 0x100; + sprite->data[2] = DISPLAY_WIDTH + 16; else - sprite->data[2] = -0x10; + sprite->data[2] = -16; sprite->data[7]++; sprite->x2 = sprite->y2 = 0; diff --git a/src/battle_anim_throw.c b/src/battle_anim_throw.c index e7c7a560b2..fea67a6e3c 100755 --- a/src/battle_anim_throw.c +++ b/src/battle_anim_throw.c @@ -2117,7 +2117,7 @@ void AnimTask_SwapMonSpriteToFromSubstitute(u8 taskId) gTasks[taskId].data[0] &= 0xFF; x = gSprites[spriteId].x + gSprites[spriteId].x2 + 32; - if (x > 304) + if (x > DISPLAY_WIDTH + 64) gTasks[taskId].data[10]++; break; case 1: diff --git a/src/battle_intro.c b/src/battle_intro.c index 42fe659746..3cdc879a86 100644 --- a/src/battle_intro.c +++ b/src/battle_intro.c @@ -182,7 +182,7 @@ static void BattleIntroSlide1(u8 taskId) if ((gBattle_WIN0V & 0xFF00) == 0x3000) { gTasks[taskId].tState++; - gTasks[taskId].data[2] = 240; + gTasks[taskId].data[2] = DISPLAY_WIDTH; gTasks[taskId].data[3] = 32; gIntroSlideFlags &= ~1; } @@ -213,13 +213,13 @@ static void BattleIntroSlide1(u8 taskId) gTasks[taskId].data[2] -= 2; // Scanline settings have already been set in CB2_InitBattleInternal() - for (i = 0; i < 80; i++) + for (i = 0; i < DISPLAY_HEIGHT / 2; i++) gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gTasks[taskId].data[2]; - for (; i < 160; i++) + for (; i < DISPLAY_HEIGHT; i++) gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = -gTasks[taskId].data[2]; - if (!gTasks[taskId].data[2]) + if (gTasks[taskId].data[2] == 0) { gScanlineEffect.state = 3; gTasks[taskId].tState++; @@ -290,7 +290,7 @@ static void BattleIntroSlide2(u8 taskId) if ((gBattle_WIN0V & 0xFF00) == 0x3000) { gTasks[taskId].tState++; - gTasks[taskId].data[2] = 240; + gTasks[taskId].data[2] = DISPLAY_WIDTH; gTasks[taskId].data[3] = 32; gTasks[taskId].data[5] = 1; gIntroSlideFlags &= ~1; @@ -322,13 +322,13 @@ static void BattleIntroSlide2(u8 taskId) gTasks[taskId].data[2] -= 2; // Scanline settings have already been set in CB2_InitBattleInternal() - for (i = 0; i < 80; i++) + for (i = 0; i < DISPLAY_HEIGHT / 2; i++) gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gTasks[taskId].data[2]; - for (; i < 160; i++) + for (; i < DISPLAY_HEIGHT; i++) gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = -gTasks[taskId].data[2]; - if (!gTasks[taskId].data[2]) + if (gTasks[taskId].data[2] == 0) { gScanlineEffect.state = 3; gTasks[taskId].tState++; @@ -383,7 +383,7 @@ static void BattleIntroSlide3(u8 taskId) if ((gBattle_WIN0V & 0xFF00) == 0x3000) { gTasks[taskId].tState++; - gTasks[taskId].data[2] = 240; + gTasks[taskId].data[2] = DISPLAY_WIDTH; gTasks[taskId].data[3] = 32; gTasks[taskId].data[5] = 1; gIntroSlideFlags &= ~1; @@ -410,13 +410,13 @@ static void BattleIntroSlide3(u8 taskId) gTasks[taskId].data[2] -= 2; // Scanline settings have already been set in CB2_InitBattleInternal() - for (i = 0; i < 80; i++) + for (i = 0; i < DISPLAY_HEIGHT / 2; i++) gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gTasks[taskId].data[2]; - for (; i < 160; i++) + for (; i < DISPLAY_HEIGHT; i++) gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = -gTasks[taskId].data[2]; - if (!gTasks[taskId].data[2]) + if (gTasks[taskId].data[2] == 0) { gScanlineEffect.state = 3; gTasks[taskId].tState++; @@ -479,7 +479,7 @@ static void BattleIntroSlideLink(u8 taskId) if ((gBattle_WIN0V & 0xFF00) == 0x3000) { gTasks[taskId].tState++; - gTasks[taskId].data[2] = 240; + gTasks[taskId].data[2] = DISPLAY_WIDTH; gTasks[taskId].data[3] = 32; gIntroSlideFlags &= ~1; } @@ -492,13 +492,13 @@ static void BattleIntroSlideLink(u8 taskId) gTasks[taskId].data[2] -= 2; // Scanline settings have already been set in CB2_InitBattleInternal() - for (i = 0; i < 80; i++) + for (i = 0; i < DISPLAY_HEIGHT / 2; i++) gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gTasks[taskId].data[2]; - for (; i < 160; i++) + for (; i < DISPLAY_HEIGHT; i++) gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = -gTasks[taskId].data[2]; - if (!gTasks[taskId].data[2]) + if (gTasks[taskId].data[2] == 0) { gScanlineEffect.state = 3; gTasks[taskId].tState++; @@ -544,7 +544,7 @@ static void BattleIntroSlidePartner(u8 taskId) if ((gBattle_WIN0V & 0xFF00) == 0x2000) { gTasks[taskId].tState++; - gTasks[taskId].data[2] = 240; + gTasks[taskId].data[2] = DISPLAY_WIDTH; gIntroSlideFlags &= ~1; } break; @@ -557,7 +557,7 @@ static void BattleIntroSlidePartner(u8 taskId) gBattle_BG1_X = gTasks[taskId].data[2]; gBattle_BG2_X = -gTasks[taskId].data[2]; - if (!gTasks[taskId].data[2]) + if (gTasks[taskId].data[2] == 0) gTasks[taskId].tState++; break; case 4: diff --git a/src/battle_main.c b/src/battle_main.c index b8fea024ee..e1c6a514a7 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -644,19 +644,16 @@ static void CB2_InitBattleInternal(void) gBattle_WIN0V = WIN_RANGE(DISPLAY_HEIGHT / 2, DISPLAY_HEIGHT / 2 + 1); ScanlineEffect_Clear(); - i = 0; - while (i < 80) + for (i = 0; i < DISPLAY_HEIGHT / 2; i++) { gScanlineEffectRegBuffers[0][i] = 0xF0; gScanlineEffectRegBuffers[1][i] = 0xF0; - i++; } - while (i < 160) + for (; i < DISPLAY_HEIGHT; i++) { gScanlineEffectRegBuffers[0][i] = 0xFF10; gScanlineEffectRegBuffers[1][i] = 0xFF10; - i++; } ScanlineEffect_SetParams(sIntroScanlineParams16Bit); diff --git a/src/berry_blender.c b/src/berry_blender.c index 10b02c86b7..b882fc12d9 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -3109,10 +3109,10 @@ static void DrawBlenderCenter(struct BgAffineSrcData *dest) { struct BgAffineSrcData affineSrc; - affineSrc.texX = 0x7800; - affineSrc.texY = 0x5000; - affineSrc.scrX = 0x78 - sBerryBlender->bg_X; - affineSrc.scrY = 0x50 - sBerryBlender->bg_Y; + affineSrc.texX = (DISPLAY_WIDTH / 2) << 8; + affineSrc.texY = (DISPLAY_HEIGHT / 2) << 8; + affineSrc.scrX = DISPLAY_WIDTH / 2 - sBerryBlender->bg_X; + affineSrc.scrY = DISPLAY_HEIGHT / 2 - sBerryBlender->bg_Y; affineSrc.sx = sBerryBlender->centerScale; affineSrc.sy = sBerryBlender->centerScale; affineSrc.alpha = sBerryBlender->arrowPos; diff --git a/src/credits.c b/src/credits.c index bf636f74f6..b412b29e27 100644 --- a/src/credits.c +++ b/src/credits.c @@ -1370,7 +1370,7 @@ static void SpriteCB_Player(struct Sprite *sprite) break; case 4: StartSpriteAnimIfDifferent(sprite, 0); - if (sprite->x > 120) + if (sprite->x > DISPLAY_WIDTH / 2) sprite->x--; break; case 5: diff --git a/src/field_effect.c b/src/field_effect.c index d51c6ab88a..8d6b6342d1 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -2416,7 +2416,7 @@ static void TeleportWarpOutFieldEffect_SpinExit(struct Task *task) { sprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY; } - if (task->data[4] >= 0xa8) + if (task->data[4] >= DISPLAY_HEIGHT + 8) { task->tState++; TryFadeOutOldMapMusic(); diff --git a/src/intro.c b/src/intro.c index ed50208e7d..e5e6a23dd2 100644 --- a/src/intro.c +++ b/src/intro.c @@ -1195,7 +1195,7 @@ static void Task_Scene1_Load(u8 taskId) CpuCopy16(&gPlttBufferUnfaded[OBJ_PLTT_ID(0)], &gPlttBufferUnfaded[OBJ_PLTT_ID(11) + 4], PLTT_SIZEOF(16 - 4)); CpuCopy16(&gPlttBufferUnfaded[OBJ_PLTT_ID(0)], &gPlttBufferUnfaded[OBJ_PLTT_ID(10) + 5], PLTT_SIZEOF(16 - 5)); CpuCopy16(&gPlttBufferUnfaded[OBJ_PLTT_ID(0)], &gPlttBufferUnfaded[OBJ_PLTT_ID( 9) + 6], PLTT_SIZEOF(16 - 6)); - CreateGameFreakLogoSprites(120, 80, 0); + CreateGameFreakLogoSprites(DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, 0); gTasks[taskId].sBigDropSpriteId = CreateWaterDrop(236, -14, 0x200, 1, 0x78, FALSE); gTasks[taskId].func = Task_Scene1_FadeIn; } @@ -1722,7 +1722,7 @@ static void Task_Scene3_Load(u8 taskId) gTasks[taskId].tZoomDiv = 0; gTasks[taskId].tZoomDivSpeed = 0; gTasks[taskId].data[3] = 0; - PanFadeAndZoomScreen(0x78, 0x50, 0, 0); + PanFadeAndZoomScreen(DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, 0, 0); ResetSpriteData(); FreeAllSpritePalettes(); BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_WHITEALPHA); @@ -1746,7 +1746,7 @@ static void Task_Scene3_SpinPokeball(u8 taskId) gTasks[taskId].func = Task_Scene3_WaitGroudon; } - PanFadeAndZoomScreen(0x78, 0x50, SAFE_DIV(0x10000, gTasks[taskId].tZoomDiv), gTasks[taskId].tAlpha); + PanFadeAndZoomScreen(DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, SAFE_DIV(0x10000, gTasks[taskId].tZoomDiv), gTasks[taskId].tAlpha); if (gIntroFrameCounter == TIMER_POKEBALL_FADE) BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_WHITEALPHA); @@ -1848,7 +1848,7 @@ static void Task_Scene3_StartGroudon(u8 taskId) { gTasks[taskId].tState = 0; gTasks[taskId].func = Task_Scene3_Groudon; - ScanlineEffect_InitWave(0, 160, 4, 4, 1, SCANLINE_EFFECT_REG_BG1HOFS, FALSE); + ScanlineEffect_InitWave(0, DISPLAY_HEIGHT, 4, 4, 1, SCANLINE_EFFECT_REG_BG1HOFS, FALSE); } #define tScreenX data[1] @@ -2058,7 +2058,7 @@ static void Task_Scene3_LoadKyogre(u8 taskId) gTasks[taskId].tDelay = 16; gTasks[taskId].tZoom = 256; PanFadeAndZoomScreen(gTasks[taskId].tScreenX, gTasks[taskId].tScreenY, gTasks[taskId].tZoom, 0); - ScanlineEffect_InitWave(0, 0xA0, 4, 4, 1, SCANLINE_EFFECT_REG_BG1VOFS, FALSE); + ScanlineEffect_InitWave(0, DISPLAY_HEIGHT, 4, 4, 1, SCANLINE_EFFECT_REG_BG1VOFS, FALSE); } static void Task_Scene3_Kyogre(u8 taskId) diff --git a/src/pokedex.c b/src/pokedex.c index 7bb8e1c17f..3f5ab22431 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -3755,7 +3755,7 @@ static void Task_LoadSizeScreen(u8 taskId) StringCopy(string, gText_SizeComparedTo); StringAppend(string, gSaveBlock2Ptr->playerName); - PrintInfoScreenText(string, GetStringCenterAlignXOffset(FONT_NORMAL, string, 0xF0), 0x79); + PrintInfoScreenText(string, GetStringCenterAlignXOffset(FONT_NORMAL, string, DISPLAY_WIDTH), 121); gMain.state++; } break; @@ -4072,14 +4072,14 @@ static void Task_ExitCaughtMonPage(u8 taskId) static void SpriteCB_SlideCaughtMonToCenter(struct Sprite *sprite) { - if (sprite->x < 0x78) + if (sprite->x < DISPLAY_WIDTH / 2) sprite->x += 2; - if (sprite->x > 0x78) + if (sprite->x > DISPLAY_WIDTH / 2) sprite->x -= 2; - if (sprite->y < 0x50) + if (sprite->y < DISPLAY_HEIGHT / 2) sprite->y += 1; - if (sprite->y > 0x50) + if (sprite->y > DISPLAY_HEIGHT / 2) sprite->y -= 1; } @@ -4103,7 +4103,7 @@ static void PrintMonInfo(u32 num, u32 value, u32 owned, u32 newEntry) const u8 *description; if (newEntry) - PrintInfoScreenText(gText_PokedexRegistration, GetStringCenterAlignXOffset(FONT_NORMAL, gText_PokedexRegistration, 0xF0), 0); + PrintInfoScreenText(gText_PokedexRegistration, GetStringCenterAlignXOffset(FONT_NORMAL, gText_PokedexRegistration, DISPLAY_WIDTH), 0); if (value == 0) value = NationalToHoennOrder(num); else @@ -4142,7 +4142,7 @@ static void PrintMonInfo(u32 num, u32 value, u32 owned, u32 newEntry) description = gPokedexEntries[num].description; else description = sExpandedPlaceholder_PokedexDescription; - PrintInfoScreenText(description, GetStringCenterAlignXOffset(FONT_NORMAL, description, 0xF0), 0x5F); + PrintInfoScreenText(description, GetStringCenterAlignXOffset(FONT_NORMAL, description, DISPLAY_WIDTH), 95); } static void PrintMonHeight(u16 height, u8 left, u8 top) diff --git a/src/slot_machine.c b/src/slot_machine.c index 5b058b9702..20386a2528 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -4672,9 +4672,9 @@ static void SpriteCB_DigitalDisplay_Reel(struct Sprite *sprite) { case 0: sprite->x += 4; - if (sprite->x >= 0xd0) + if (sprite->x >= DISPLAY_WIDTH - 32) { - sprite->x = 0xd0; + sprite->x = DISPLAY_WIDTH - 32; sprite->sState++; } break; @@ -4684,7 +4684,7 @@ static void SpriteCB_DigitalDisplay_Reel(struct Sprite *sprite) break; case 2: sprite->x += 4; - if (sprite->x >= 0x110) + if (sprite->x >= DISPLAY_WIDTH + 32) sprite->sState++; break; case 3: @@ -4700,9 +4700,9 @@ static void SpriteCB_DigitalDisplay_Time(struct Sprite *sprite) { case 0: sprite->x -= 4; - if (sprite->x <= 0xd0) + if (sprite->x <= DISPLAY_WIDTH - 32) { - sprite->x = 0xd0; + sprite->x = DISPLAY_WIDTH - 32; sprite->sState++; } break; @@ -4712,7 +4712,7 @@ static void SpriteCB_DigitalDisplay_Time(struct Sprite *sprite) break; case 2: sprite->x -= 4; - if (sprite->x <= 0x90) + if (sprite->x <= 144) sprite->sState++; break; case 3: @@ -4738,9 +4738,9 @@ static void SpriteCB_DigitalDisplay_ReelTimeNumber(struct Sprite *sprite) break; case 2: sprite->x += 4; - if (sprite->x >= 0xd0) + if (sprite->x >= DISPLAY_WIDTH - 32) { - sprite->x = 0xd0; + sprite->x = DISPLAY_WIDTH - 32; sprite->sState++; } break; @@ -4750,7 +4750,7 @@ static void SpriteCB_DigitalDisplay_ReelTimeNumber(struct Sprite *sprite) break; case 4: sprite->x += 4; - if (sprite->x >= 0xf8) + if (sprite->x >= DISPLAY_WIDTH + 8) sprite->sState++; break; case 5: diff --git a/src/title_screen.c b/src/title_screen.c index bb73df5bc5..87bf0d970e 100644 --- a/src/title_screen.c +++ b/src/title_screen.c @@ -584,7 +584,7 @@ void CB2_InitTitleScreen(void) gMain.state = 4; break; case 4: - PanFadeAndZoomScreen(0x78, 0x50, 0x100, 0); + PanFadeAndZoomScreen(DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, 0x100, 0); SetGpuReg(REG_OFFSET_BG2X_L, -29 * 256); SetGpuReg(REG_OFFSET_BG2X_H, -1); SetGpuReg(REG_OFFSET_BG2Y_L, -32 * 256); diff --git a/src/util.c b/src/util.c index ab5603b867..09381fcaf3 100644 --- a/src/util.c +++ b/src/util.c @@ -118,7 +118,7 @@ const u8 gMiscBlank_Gfx[] = INCBIN_U8("graphics/interface/blank.4bpp"); u8 CreateInvisibleSpriteWithCallback(void (*callback)(struct Sprite *)) { - u8 sprite = CreateSprite(&sInvisibleSpriteTemplate, 248, 168, 14); + u8 sprite = CreateSprite(&sInvisibleSpriteTemplate, DISPLAY_WIDTH + 8, DISPLAY_HEIGHT + 8, 14); gSprites[sprite].invisible = TRUE; gSprites[sprite].callback = callback; return sprite; From 9226b23fb82de242c26dd9e45dcc69fe112e86db Mon Sep 17 00:00:00 2001 From: Kermalis <29823718+Kermalis@users.noreply.github.com> Date: Thu, 10 Aug 2023 20:11:07 -0400 Subject: [PATCH 33/43] Remove ewram in headers --- include/credits.h | 2 +- include/decoration.h | 4 ++-- include/shop.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/include/credits.h b/include/credits.h index 2e8c7e0c3c..43f26c3744 100644 --- a/include/credits.h +++ b/include/credits.h @@ -1,7 +1,7 @@ #ifndef GUARD_CREDITS_H #define GUARD_CREDITS_H -extern EWRAM_DATA bool8 gHasHallOfFameRecords; +extern bool8 gHasHallOfFameRecords; void CB2_StartCreditsSequence(void); diff --git a/include/decoration.h b/include/decoration.h index b00dd42f12..db0f337f4d 100644 --- a/include/decoration.h +++ b/include/decoration.h @@ -53,8 +53,8 @@ struct Decoration }; extern const struct Decoration gDecorations[]; -extern EWRAM_DATA u8 *gCurDecorationItems; -extern EWRAM_DATA u8 gCurDecorationIndex; +extern u8 *gCurDecorationItems; +extern u8 gCurDecorationIndex; void InitDecorationContextItems(void); void DoSecretBaseDecorationMenu(u8 taskId); diff --git a/include/shop.h b/include/shop.h index 7fd7669ea5..6644ba0aa0 100644 --- a/include/shop.h +++ b/include/shop.h @@ -1,7 +1,7 @@ #ifndef GUARD_SHOP_H #define GUARD_SHOP_H -extern EWRAM_DATA struct ItemSlot gMartPurchaseHistory[3]; +extern struct ItemSlot gMartPurchaseHistory[3]; void CreatePokemartMenu(const u16 *); void CreateDecorationShop1Menu(const u16 *); From 33b16cb82d0852e66afa4df56245467beb4185e7 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Fri, 11 Aug 2023 16:55:27 -0400 Subject: [PATCH 34/43] 2nd pass --- data/battle_scripts_1.s | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 7aead3a6cc..e7f592aacb 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -533,7 +533,7 @@ BattleScript_EffectEvasionDown:: setstatchanger STAT_EVASION, 1, TRUE BattleScript_EffectStatDown:: attackcanceler - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailedPpReduceAtkString + jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_FailedFromAtkString accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE attackstring ppreduce @@ -1216,7 +1216,7 @@ BattleScript_EffectPsywave:: BattleScript_EffectCounter:: attackcanceler - counterdamagecalculator BattleScript_ButItFailedPpReduceAtkString + counterdamagecalculator BattleScript_FailedFromAtkString accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE attackstring ppreduce @@ -1543,7 +1543,7 @@ BattleScript_EffectEndure:: BattleScript_EffectSpikes:: attackcanceler - trysetspikes BattleScript_ButItFailedPpReduceAtkString + trysetspikes BattleScript_FailedFromAtkString attackstring ppreduce attackanimation @@ -1800,7 +1800,7 @@ BattleScript_EffectPsychUp:: BattleScript_EffectMirrorCoat:: attackcanceler - mirrorcoatdamagecalculator BattleScript_ButItFailedPpReduceAtkString + mirrorcoatdamagecalculator BattleScript_FailedFromAtkString accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE attackstring ppreduce @@ -2047,13 +2047,13 @@ BattleScript_AlreadyAtFullHp:: BattleScript_EffectFakeOut:: attackcanceler - jumpifnotfirstturn BattleScript_ButItFailedPpReduceAtkString + jumpifnotfirstturn BattleScript_FailedFromAtkString setmoveeffect MOVE_EFFECT_FLINCH | MOVE_EFFECT_CERTAIN goto BattleScript_EffectHit -BattleScript_ButItFailedPpReduceAtkString:: +BattleScript_FailedFromAtkString:: attackstring -BattleScript_ButItFailedPpReduce:: +BattleScript_FailedFromPpReduce:: ppreduce BattleScript_ButItFailed:: pause B_WAIT_TIME_SHORT @@ -2367,7 +2367,7 @@ BattleScript_EffectWish:: BattleScript_EffectAssist:: attackcanceler attackstring - assistattackselect BattleScript_ButItFailedPpReduce + assistattackselect BattleScript_FailedFromPpReduce attackanimation waitanimation setbyte sB_ANIM_TURN, 0 @@ -2391,7 +2391,7 @@ BattleScript_EffectSuperpower:: BattleScript_EffectMagicCoat:: attackcanceler - trysetmagiccoat BattleScript_ButItFailedPpReduceAtkString + trysetmagiccoat BattleScript_FailedFromAtkString attackstring ppreduce attackanimation @@ -2542,7 +2542,7 @@ BattleScript_EffectGrudge:: BattleScript_EffectSnatch:: attackcanceler - trysetsnatch BattleScript_ButItFailedPpReduceAtkString + trysetsnatch BattleScript_FailedFromAtkString attackstring ppreduce attackanimation From 344fe4dd650872864ace80d8db4cf23306e9a967 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sat, 12 Aug 2023 23:13:11 -0400 Subject: [PATCH 35/43] Stop double-counting EOS in assert --- src/battle_message.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_message.c b/src/battle_message.c index 6ae16164d9..f005404ead 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -2307,7 +2307,7 @@ static const u8 *TryGetStatusString(u8 *src) // Ensure the defined length for an item name can contain the full defined length of a berry name. // This ensures that custom Enigma Berry names will fit in the text buffer at the top of BattleStringExpandPlaceholders. -STATIC_ASSERT(BERRY_NAME_LENGTH + 1 + ARRAY_COUNT(sText_BerrySuffix) <= ITEM_NAME_LENGTH, BerryNameTooLong); +STATIC_ASSERT(BERRY_NAME_LENGTH + ARRAY_COUNT(sText_BerrySuffix) <= ITEM_NAME_LENGTH, BerryNameTooLong); u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst) { From aca7998b9338e8033c57672afe571854b44e6402 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 23 May 2023 13:07:52 -0400 Subject: [PATCH 36/43] Add missing use of ALL_MOVES_MASK --- include/constants/global.h | 1 + src/battle_ai_script_commands.c | 4 ++-- src/battle_controller_opponent.c | 2 +- src/battle_controller_player_partner.c | 2 +- src/battle_gfx_sfx_util.c | 8 +++++--- src/battle_script_commands.c | 2 +- src/battle_util.c | 4 +--- 7 files changed, 12 insertions(+), 11 deletions(-) diff --git a/include/constants/global.h b/include/constants/global.h index 199acfe6c6..2b70378ff5 100644 --- a/include/constants/global.h +++ b/include/constants/global.h @@ -80,6 +80,7 @@ #define TRAINER_ID_LENGTH 4 #define MAX_MON_MOVES 4 +#define ALL_MOVES_MASK ((1 << MAX_MON_MOVES) - 1) #define CONTESTANT_COUNT 4 #define CONTEST_CATEGORY_COOL 0 diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c index b2c900b422..aa34f46ec7 100644 --- a/src/battle_ai_script_commands.c +++ b/src/battle_ai_script_commands.c @@ -478,9 +478,9 @@ static u8 ChooseMoveOrAction_Doubles(void) else { if (gBattleTypeFlags & BATTLE_TYPE_PALACE) - BattleAI_SetupAIData(gBattleStruct->palaceFlags >> 4); + BattleAI_SetupAIData(gBattleStruct->palaceFlags >> MAX_BATTLERS_COUNT); else - BattleAI_SetupAIData((1 << MAX_MON_MOVES) - 1); + BattleAI_SetupAIData(ALL_MOVES_MASK); gBattlerTarget = i; diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index 12402f91ea..41afa9505f 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -1555,7 +1555,7 @@ static void OpponentHandleChooseMove(void) if (gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_FIRST_BATTLE | BATTLE_TYPE_SAFARI | BATTLE_TYPE_ROAMER)) { - BattleAI_SetupAIData(0xF); + BattleAI_SetupAIData(ALL_MOVES_MASK); chosenMoveId = BattleAI_ChooseMoveOrAction(); switch (chosenMoveId) diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c index 6127e2d655..236a66ce83 100644 --- a/src/battle_controller_player_partner.c +++ b/src/battle_controller_player_partner.c @@ -1515,7 +1515,7 @@ static void PlayerPartnerHandleChooseMove(void) u8 chosenMoveId; struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleBufferA[gActiveBattler][4]); - BattleAI_SetupAIData(0xF); + BattleAI_SetupAIData(ALL_MOVES_MASK); chosenMoveId = BattleAI_ChooseMoveOrAction(); if (gBattleMoves[moveInfo->moves[chosenMoveId]].target & (MOVE_TARGET_USER | MOVE_TARGET_USER_OR_SELECTED)) diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index 55ed328b89..b610654cef 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -157,8 +157,10 @@ u16 ChooseMoveAndTargetInBattlePalace(void) // Pass selected moves to AI, pick one if (selectedMoves != 0) { - gBattleStruct->palaceFlags &= 0xF; - gBattleStruct->palaceFlags |= (selectedMoves << 4); + // Lower 4 bits of palaceFlags are flags for each battler. + // Clear the rest of palaceFlags, then set the selected moves in the upper 4 bits. + gBattleStruct->palaceFlags &= (1 << MAX_BATTLERS_COUNT) - 1; + gBattleStruct->palaceFlags |= (selectedMoves << MAX_BATTLERS_COUNT); BattleAI_SetupAIData(selectedMoves); chosenMoveId = BattleAI_ChooseMoveOrAction(); } @@ -168,7 +170,7 @@ u16 ChooseMoveAndTargetInBattlePalace(void) // If a move is chosen this way, there's a 50% chance that it will be unable to use it anyway if (chosenMoveId == -1) { - if (unusableMovesBits != 0xF) + if (unusableMovesBits != ALL_MOVES_MASK) { validMoveFlags = 0, numValidMoveGroups = 0; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 277b70d7b1..ab8e6ad8ed 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -8179,7 +8179,7 @@ static void Cmd_trychoosesleeptalkmove(void) } unusableMovesBits = CheckMoveLimitations(gBattlerAttacker, unusableMovesBits, ~MOVE_LIMITATION_PP); - if (unusableMovesBits == (1 << MAX_MON_MOVES) - 1) // all 4 moves cannot be chosen + if (unusableMovesBits == ALL_MOVES_MASK) // all 4 moves cannot be chosen { gBattlescriptCurrInstr += 5; } diff --git a/src/battle_util.c b/src/battle_util.c index 51fbaa3cfb..6a0137a938 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -1110,7 +1110,6 @@ u8 CheckMoveLimitations(u8 battlerId, u8 unusableMoves, u8 check) return unusableMoves; } -#define ALL_MOVES_MASK ((1 << MAX_MON_MOVES) - 1) bool8 AreAllMovesUnusable(void) { u8 unusable = CheckMoveLimitations(gActiveBattler, 0, MOVE_LIMITATIONS_ALL); @@ -1127,7 +1126,6 @@ bool8 AreAllMovesUnusable(void) return (unusable == ALL_MOVES_MASK); } -#undef ALL_MOVES_MASK u8 GetImprisonedMovesCount(u8 battlerId, u16 move) { @@ -3954,7 +3952,7 @@ u8 IsMonDisobedient(void) if (calc < obedienceLevel) { calc = CheckMoveLimitations(gBattlerAttacker, gBitTable[gCurrMovePos], MOVE_LIMITATIONS_ALL); - if (calc == 0xF) // all moves cannot be used + if (calc == ALL_MOVES_MASK) // all moves cannot be used { // Randomly select, then print a disobedient string // B_MSG_LOAFING, B_MSG_WONT_OBEY, B_MSG_TURNED_AWAY, or B_MSG_PRETEND_NOT_NOTICE From 057928438a824705bd306b52bc3dd43d72989ac0 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 16 Aug 2023 16:41:29 -0400 Subject: [PATCH 37/43] Document ChooseMoveAndTargetInBattlePalace --- include/battle.h | 7 ++- src/battle_gfx_sfx_util.c | 89 +++++++++++++++++++++++------------- src/battle_script_commands.c | 2 +- 3 files changed, 63 insertions(+), 35 deletions(-) diff --git a/include/battle.h b/include/battle.h index 118d560984..bb0e42fb83 100644 --- a/include/battle.h +++ b/include/battle.h @@ -392,7 +392,7 @@ struct BattleStruct u8 expGetterBattlerId; u8 unused_5; u8 absentBattlerFlags; - u8 palaceFlags; // First 4 bits are "is < 50% HP and not asleep" for each battler, last 4 bits are selected moves to pass to AI + u8 palaceFlags; // First 4 bits are "is <= 50% HP and not asleep" for each battler, last 4 bits are selected moves to pass to AI u8 field_93; // related to choosing pokemon? u8 wallyBattleState; u8 wallyMovesState; @@ -440,6 +440,11 @@ struct BattleStruct u8 alreadyStatusedMoveAttempt; // As bits for battlers; For example when using Thunder Wave on an already paralyzed pokemon. }; +// The palaceFlags member of struct BattleStruct contains 1 flag per move to indicate which moves the AI should consider, +// and 1 flag per battler to indicate whether the battler is awake and at <= 50% HP (which affects move choice). +// The assert below is to ensure palaceFlags is large enough to store these flags without overlap. +STATIC_ASSERT(sizeof(((struct BattleStruct *)0)->palaceFlags) * 8 >= MAX_BATTLERS_COUNT + MAX_MON_MOVES, PalaceFlagsTooSmall) + #define F_DYNAMIC_TYPE_1 (1 << 6) #define F_DYNAMIC_TYPE_2 (1 << 7) #define DYNAMIC_TYPE_MASK (F_DYNAMIC_TYPE_1 - 1) diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index b610654cef..d98809be46 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -121,9 +121,9 @@ u16 ChooseMoveAndTargetInBattlePalace(void) #define selectedGroup percent #define selectedMoves var2 #define moveTarget var1 - #define validMoveFlags var1 - #define numValidMoveGroups var2 - #define validMoveGroup var2 + #define numMovesPerGroup var1 + #define numMultipleMoveGroups var2 + #define randSelectGroup var2 // If battler is < 50% HP and not asleep, use second set of move group likelihoods // otherwise use first set @@ -172,32 +172,45 @@ u16 ChooseMoveAndTargetInBattlePalace(void) { if (unusableMovesBits != ALL_MOVES_MASK) { - validMoveFlags = 0, numValidMoveGroups = 0; + numMovesPerGroup = 0, numMultipleMoveGroups = 0; for (i = 0; i < MAX_MON_MOVES; i++) { - // validMoveFlags is used here as a bitfield for which moves can be used for each move group type - // first 4 bits are for attack (1 for each move), then 4 bits for defense, and 4 for support + // Count the number of usable moves the battler has in each move group. + // The totals will be stored separately in 3 groups of 4 bits each in numMovesPerGroup. if (GetBattlePalaceMoveGroup(moveInfo->moves[i]) == PALACE_MOVE_GROUP_ATTACK && !(gBitTable[i] & unusableMovesBits)) - validMoveFlags += (1 << 0); + numMovesPerGroup += (1 << 0); if (GetBattlePalaceMoveGroup(moveInfo->moves[i]) == PALACE_MOVE_GROUP_DEFENSE && !(gBitTable[i] & unusableMovesBits)) - validMoveFlags += (1 << 4); + numMovesPerGroup += (1 << 4); if (GetBattlePalaceMoveGroup(moveInfo->moves[i]) == PALACE_MOVE_GROUP_SUPPORT && !(gBitTable[i] & unusableMovesBits)) - validMoveFlags += (1 << 8); + numMovesPerGroup += (1 << 8); } - // Count the move groups the pokemon has - if ((validMoveFlags & 0xF) > 1) - numValidMoveGroups++; - if ((validMoveFlags & 0xF0) > 0x1F) - numValidMoveGroups++; - if ((validMoveFlags & 0xF0) > 0x1FF) - numValidMoveGroups++; + // Count the number of move groups for which the battler has at least 2 usable moves. + // This is a roundabout way to determine if there is a move group that should be + // preferred, because it has multiple move options and the others do not. + // The condition intended to check the total for the Support group is accidentally + // checking the Defense total, and is never true. As a result the preferences for + // random move selection here will skew away from the Support move group. + if ((numMovesPerGroup & 0xF) >= 2) + numMultipleMoveGroups++; + if ((numMovesPerGroup & (0xF << 4)) >= (2 << 4)) + numMultipleMoveGroups++; +#ifdef BUGFIX + if ((numMovesPerGroup & (0xF << 8)) >= (2 << 8)) +#else + if ((numMovesPerGroup & (0xF << 4)) >= (2 << 8)) +#endif + numMultipleMoveGroups++; - // If more than 1 possible move group, or no possible move groups - // then choose move randomly - if (numValidMoveGroups > 1 || numValidMoveGroups == 0) + // By this point we already know the battler only has usable moves from at most 2 of the 3 move groups, + // because they had no usable moves from the move group that was selected based on Nature. + // + // The below condition is effectively 'numMultipleMoveGroups != 1'. + // There is no stand-out group with multiple moves to choose from, so we pick randomly. + // Note that because of the bug above the battler may actually have any number of Support moves. + if (numMultipleMoveGroups > 1 || numMultipleMoveGroups == 0) { do { @@ -206,27 +219,36 @@ u16 ChooseMoveAndTargetInBattlePalace(void) chosenMoveId = i; } while (chosenMoveId == -1); } - // Otherwise randomly choose move of only available move group else { - if ((validMoveFlags & 0xF) > 1) - validMoveGroup = PALACE_MOVE_GROUP_ATTACK; - if ((validMoveFlags & 0xF0) > 0x1F) - validMoveGroup = PALACE_MOVE_GROUP_DEFENSE; - if ((validMoveFlags & 0xF0) > 0x1FF) - validMoveGroup = PALACE_MOVE_GROUP_SUPPORT; + // The battler has just 1 move group with multiple move options to choose from. + // Choose a move randomly from this group. + + // Same bug as the previous set of conditions (the condition for Support is never true). + // This bug won't cause a softlock below, because if Support is the only group with multiple + // moves then it won't have been counted, and the 'numMultipleMoveGroups == 0' above will be true. + if ((numMovesPerGroup & 0xF) >= 2) + randSelectGroup = PALACE_MOVE_GROUP_ATTACK; + if ((numMovesPerGroup & (0xF << 4)) >= (2 << 4)) + randSelectGroup = PALACE_MOVE_GROUP_DEFENSE; +#ifdef BUGFIX + if ((numMovesPerGroup & (0xF << 8)) >= (2 << 8)) +#else + if ((numMovesPerGroup & (0xF << 4)) >= (2 << 8)) +#endif + randSelectGroup = PALACE_MOVE_GROUP_SUPPORT; do { i = Random() % MAX_MON_MOVES; - if (!(gBitTable[i] & unusableMovesBits) && validMoveGroup == GetBattlePalaceMoveGroup(moveInfo->moves[i])) + if (!(gBitTable[i] & unusableMovesBits) && randSelectGroup == GetBattlePalaceMoveGroup(moveInfo->moves[i])) chosenMoveId = i; } while (chosenMoveId == -1); } - // If a move was selected (and in this case was not from the Nature-chosen group) - // then there's a 50% chance it won't be used anyway - if (Random() % 100 > 49) + // Because the selected move was not from the Nature-chosen move group there's a 50% chance + // that it will be unable to use it. This could have been checked earlier to avoid the above work. + if (Random() % 100 >= 50) { gProtectStructs[gActiveBattler].palaceUnableToUseMove = TRUE; return 0; @@ -234,6 +256,7 @@ u16 ChooseMoveAndTargetInBattlePalace(void) } else { + // All the battler's moves were flagged as unusable. gProtectStructs[gActiveBattler].palaceUnableToUseMove = TRUE; return 0; } @@ -266,9 +289,9 @@ u16 ChooseMoveAndTargetInBattlePalace(void) #undef selectedGroup #undef selectedMoves #undef moveTarget -#undef validMoveFlags -#undef numValidMoveGroups -#undef validMoveGroup +#undef numMovesPerGroup +#undef numMultipleMoveGroups +#undef randSelectGroup static u8 GetBattlePalaceMoveGroup(u16 move) { diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index ab8e6ad8ed..63569d60c4 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -849,7 +849,7 @@ static const u8 sBallCatchBonuses[] = // In Battle Palace, moves are chosen based on the pokemons nature rather than by the player // Moves are grouped into "Attack", "Defense", or "Support" (see PALACE_MOVE_GROUP_*) // Each nature has a certain percent chance of selecting a move from a particular group -// and a separate percent chance for each group when below 50% HP +// and a separate percent chance for each group when at or below 50% HP // The table below doesn't list percentages for Support because you can subtract the other two // Support percentages are listed in comments off to the side instead #define PALACE_STYLE(atk, def, atkLow, defLow) {atk, atk + def, atkLow, atkLow + defLow} From bdc0ea1037ddeb5b9909078c11e9964aeadf4a55 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 16 Aug 2023 16:44:45 -0400 Subject: [PATCH 38/43] Add MOD to match mod with powers of 2 --- include/global.h | 6 ++++++ src/battle_controller_opponent.c | 2 +- src/battle_pyramid.c | 4 ++-- src/battle_script_commands.c | 4 ++-- src/battle_util.c | 11 ++++++----- src/contest_ai.c | 2 +- src/intro.c | 2 +- src/naming_screen.c | 4 ++-- 8 files changed, 21 insertions(+), 14 deletions(-) diff --git a/include/global.h b/include/global.h index e0cecafd07..e6d58f36e0 100644 --- a/include/global.h +++ b/include/global.h @@ -85,6 +85,12 @@ #define SAFE_DIV(a, b) ((a) / (b)) #endif +// The below macro does a%n, but (to match) will switch to a&(n-1) if n is a power of 2. +// There are cases where GF does a&(n-1) where we would really like to have a%n, because +// if n is changed to a value that isn't a power of 2 then a&(n-1) is unlikely to work as +// intended, and a%n for powers of 2 isn't always optimized to use &. +#define MOD(a, n)(((n) & ((n)-1)) ? ((a) % (n)) : ((a) & ((n)-1))) + // Extracts the upper 16 bits of a 32-bit number #define HIHALF(n) (((n) & 0xFFFF0000) >> 16) diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index 41afa9505f..e434e3ee62 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -1588,7 +1588,7 @@ static void OpponentHandleChooseMove(void) u16 move; do { - chosenMoveId = Random() & 3; + chosenMoveId = MOD(Random(), MAX_MON_MOVES); move = moveInfo->moves[chosenMoveId]; } while (move == MOVE_NONE); diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c index a1f1ee542c..e51f804981 100644 --- a/src/battle_pyramid.c +++ b/src/battle_pyramid.c @@ -38,7 +38,7 @@ #include "constants/moves.h" #include "constants/trainers.h" -#define NUM_LAYOUT_OFFSETS 8 // Assumed to be a power of 2 +#define NUM_LAYOUT_OFFSETS 8 extern const struct MapLayout *const gMapLayouts[]; @@ -1904,7 +1904,7 @@ static void GetPyramidFloorLayoutOffsets(u8 *layoutOffsets) for (i = 0; i < NUM_PYRAMID_FLOOR_SQUARES; i++) { - layoutOffsets[i] = sPyramidFloorTemplates[id].layoutOffsets[rand & (NUM_LAYOUT_OFFSETS - 1)]; + layoutOffsets[i] = sPyramidFloorTemplates[id].layoutOffsets[MOD(rand, NUM_LAYOUT_OFFSETS)]; rand >>= 3; if (i == 7) { diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 63569d60c4..60a91e2b48 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -7350,7 +7350,7 @@ static void Cmd_tryconversiontypechange(void) { do { - while ((moveChecked = Random() & (MAX_MON_MOVES - 1)) >= validMoves); + while ((moveChecked = MOD(Random(), MAX_MON_MOVES)) >= validMoves); moveType = gBattleMoves[gBattleMons[gBattlerAttacker].moves[moveChecked]].type; @@ -8189,7 +8189,7 @@ static void Cmd_trychoosesleeptalkmove(void) do { - movePosition = Random() & (MAX_MON_MOVES - 1); + movePosition = MOD(Random(), MAX_MON_MOVES); } while ((gBitTable[movePosition] & unusableMovesBits)); gCalledMove = gBattleMons[gBattlerAttacker].moves[movePosition]; diff --git a/src/battle_util.c b/src/battle_util.c index 6a0137a938..0856b6d856 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -2773,11 +2773,12 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA { do { + // Pick either MOVE_EFFECT_SLEEP, MOVE_EFFECT_POISON or MOVE_EFFECT_BURN gBattleCommunication[MOVE_EFFECT_BYTE] = Random() & 3; } while (gBattleCommunication[MOVE_EFFECT_BYTE] == 0); - + // Replace MOVE_EFFECT_BURN with MOVE_EFFECT_PARALYSIS if (gBattleCommunication[MOVE_EFFECT_BYTE] == MOVE_EFFECT_BURN) - gBattleCommunication[MOVE_EFFECT_BYTE] += 2; // 5 MOVE_EFFECT_PARALYSIS + gBattleCommunication[MOVE_EFFECT_BYTE] += (MOVE_EFFECT_PARALYSIS - MOVE_EFFECT_BURN); gBattleCommunication[MOVE_EFFECT_BYTE] += MOVE_EFFECT_AFFECTS_USER; BattleScriptPushCursor(); @@ -3956,7 +3957,7 @@ u8 IsMonDisobedient(void) { // Randomly select, then print a disobedient string // B_MSG_LOAFING, B_MSG_WONT_OBEY, B_MSG_TURNED_AWAY, or B_MSG_PRETEND_NOT_NOTICE - gBattleCommunication[MULTISTRING_CHOOSER] = Random() & (NUM_LOAF_STRINGS - 1); + gBattleCommunication[MULTISTRING_CHOOSER] = MOD(Random(), NUM_LOAF_STRINGS); gBattlescriptCurrInstr = BattleScript_MoveUsedLoafingAround; return 1; } @@ -3964,7 +3965,7 @@ u8 IsMonDisobedient(void) { do { - gCurrMovePos = gChosenMovePos = Random() & (MAX_MON_MOVES - 1); + gCurrMovePos = gChosenMovePos = MOD(Random(), MAX_MON_MOVES); } while (gBitTable[gCurrMovePos] & calc); gCalledMove = gBattleMons[gBattlerAttacker].moves[gCurrMovePos]; @@ -4007,7 +4008,7 @@ u8 IsMonDisobedient(void) { // Randomly select, then print a disobedient string // B_MSG_LOAFING, B_MSG_WONT_OBEY, B_MSG_TURNED_AWAY, or B_MSG_PRETEND_NOT_NOTICE - gBattleCommunication[MULTISTRING_CHOOSER] = Random() & (NUM_LOAF_STRINGS - 1); + gBattleCommunication[MULTISTRING_CHOOSER] = MOD(Random(), NUM_LOAF_STRINGS); gBattlescriptCurrInstr = BattleScript_MoveUsedLoafingAround; return 1; } diff --git a/src/contest_ai.c b/src/contest_ai.c index 8753ed170d..a4bb5b4549 100644 --- a/src/contest_ai.c +++ b/src/contest_ai.c @@ -326,7 +326,7 @@ u8 ContestAI_GetActionToUse(void) { // Randomly choose a move index. If it's the move // with the highest (or tied highest) score, return - u8 moveIdx = Random() & (MAX_MON_MOVES - 1); // % MAX_MON_MOVES doesn't match + u8 moveIdx = MOD(Random(), MAX_MON_MOVES); u8 score = eContestAI.moveScores[moveIdx]; int i; for (i = 0; i < MAX_MON_MOVES; i++) diff --git a/src/intro.c b/src/intro.c index e5e6a23dd2..6a6a58ddd5 100644 --- a/src/intro.c +++ b/src/intro.c @@ -1163,7 +1163,7 @@ void CB2_InitCopyrightScreenAfterTitleScreen(void) static void Task_Scene1_Load(u8 taskId) { SetVBlankCallback(NULL); - sIntroCharacterGender = Random() & 1; + sIntroCharacterGender = MOD(Random(), GENDER_COUNT); IntroResetGpuRegs(); SetGpuReg(REG_OFFSET_BG3VOFS, 0); SetGpuReg(REG_OFFSET_BG2VOFS, 80); diff --git a/src/naming_screen.c b/src/naming_screen.c index 6dd45aa7e1..6acb29ffbf 100644 --- a/src/naming_screen.c +++ b/src/naming_screen.c @@ -1067,7 +1067,7 @@ static void SpriteCB_InputArrow(struct Sprite *sprite) if (sprite->sDelay == 0 || --sprite->sDelay == 0) { sprite->sDelay = 8; - sprite->sXPosId = (sprite->sXPosId + 1) & (ARRAY_COUNT(x) - 1); + sprite->sXPosId = MOD(sprite->sXPosId + 1, ARRAY_COUNT(x)); } sprite->x2 = x[sprite->sXPosId]; } @@ -1097,7 +1097,7 @@ static void SpriteCB_Underscore(struct Sprite *sprite) sprite->sDelay++; if (sprite->sDelay > 8) { - sprite->sYPosId = (sprite->sYPosId + 1) & (ARRAY_COUNT(y) - 1); + sprite->sYPosId = MOD(sprite->sYPosId + 1, ARRAY_COUNT(y)); sprite->sDelay = 0; } } From 63f39133ab9cfb2293f8a91272ea2fbaebe58b5a Mon Sep 17 00:00:00 2001 From: AnonymousRandomPerson Date: Fri, 18 Aug 2023 22:16:04 -0400 Subject: [PATCH 39/43] Added newer decomp projects to readme --- README.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c23965485f..bca4fd1041 100644 --- a/README.md +++ b/README.md @@ -24,8 +24,14 @@ Other disassembly and/or decompilation projects: * [**Pokémon Pinball: Ruby & Sapphire**](https://github.com/pret/pokepinballrs) * [**Pokémon FireRed and LeafGreen**](https://github.com/pret/pokefirered) * [**Pokémon Mystery Dungeon: Red Rescue Team**](https://github.com/pret/pmd-red) - +* [**Pokémon Diamond and Pearl**](https://github.com/pret/pokediamond) +* [**Pokémon Platinum**](https://github.com/pret/pokeplatinum) +* [**Pokémon HeartGold and SoulSilver**](https://github.com/pret/pokeheartgold) +* [**Pokémon Mystery Dungeon: Explorers of Sky**](https://github.com/pret/pmd-sky) ## Contacts -You can find us on [Discord](https://discord.gg/d5dubZ3) and [IRC](https://web.libera.chat/?#pret). +You can find us on: + +* [Discord (PRET, #pokeemerald)](https://discord.gg/d5dubZ3) +* [IRC](https://web.libera.chat/?#pret) From e70577d59badd1257571123d2faf51d9b84d75f5 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sun, 20 Aug 2023 17:22:29 -0400 Subject: [PATCH 40/43] Add missing sizeof in trainer_see --- src/trainer_see.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/trainer_see.c b/src/trainer_see.c index 97c2bc95e7..dd4acc7f36 100644 --- a/src/trainer_see.c +++ b/src/trainer_see.c @@ -131,11 +131,11 @@ static const struct SpriteFrameImage sSpriteImageTable_ExclamationQuestionMark[] { { .data = sEmotion_ExclamationMarkGfx, - .size = 0x80 + .size = sizeof(sEmotion_ExclamationMarkGfx) }, { .data = sEmotion_QuestionMarkGfx, - .size = 0x80 + .size = sizeof(sEmotion_QuestionMarkGfx) } }; @@ -143,7 +143,7 @@ static const struct SpriteFrameImage sSpriteImageTable_HeartIcon[] = { { .data = sEmotion_HeartGfx, - .size = 0x80 + .size = sizeof(sEmotion_HeartGfx) } }; From 9d170c7e3532cec8e7869ea1ad1bd0d9aede91ce Mon Sep 17 00:00:00 2001 From: grunt-lucas Date: Tue, 22 Aug 2023 07:37:48 -0700 Subject: [PATCH 41/43] gbagfx to respect user CC setting --- tools/gbagfx/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/gbagfx/Makefile b/tools/gbagfx/Makefile index 8728fa8d09..8a52d52d37 100644 --- a/tools/gbagfx/Makefile +++ b/tools/gbagfx/Makefile @@ -1,4 +1,4 @@ -CC = gcc +CC ?= gcc CFLAGS = -Wall -Wextra -Werror -Wno-sign-compare -std=c11 -O2 -DPNG_SKIP_SETJMP_CHECK CFLAGS += $(shell pkg-config --cflags libpng) From 5abeb6718dbbd7c2e38667f7115025c34bbce0c5 Mon Sep 17 00:00:00 2001 From: WhenGryphonsFly <84215159+WhenGryphonsFly@users.noreply.github.com> Date: Sun, 27 Aug 2023 14:30:57 -0500 Subject: [PATCH 42/43] Correct KEY_INTR_ENABLE --- include/gba/io_reg.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/gba/io_reg.h b/include/gba/io_reg.h index 148ce31db4..53021185e3 100644 --- a/include/gba/io_reg.h +++ b/include/gba/io_reg.h @@ -707,7 +707,7 @@ #define R_BUTTON 0x0100 #define L_BUTTON 0x0200 #define KEYS_MASK 0x03FF -#define KEY_INTR_ENABLE 0x0400 +#define KEY_INTR_ENABLE 0x4000 #define KEY_OR_INTR 0x0000 #define KEY_AND_INTR 0x8000 #define DPAD_ANY ((DPAD_RIGHT | DPAD_LEFT | DPAD_UP | DPAD_DOWN)) From d929aa60ed9a1ff1ddaa463928098b66a9cffccd Mon Sep 17 00:00:00 2001 From: Ariel A <24759293+aarant@users.noreply.github.com> Date: Sun, 3 Sep 2023 13:50:53 -0400 Subject: [PATCH 43/43] Added support for 48x48 and 64x64 followers. See event_objects.h --- gflib/sprite.c | 2 +- include/constants/event_objects.h | 5 + include/event_object_movement.h | 2 +- .../object_events/object_event_subsprites.h | 665 +++++++++++++++++- src/event_object_movement.c | 30 +- src/field_effect_helpers.c | 9 + src/overworld.c | 4 +- 7 files changed, 702 insertions(+), 15 deletions(-) diff --git a/gflib/sprite.c b/gflib/sprite.c index 637e15a22d..4e83a71752 100644 --- a/gflib/sprite.c +++ b/gflib/sprite.c @@ -1757,7 +1757,7 @@ bool8 AddSubspritesToOamBuffer(struct Sprite *sprite, struct OamData *destOam, u destOam[i].y = baseY + y; destOam[i].tileNum = tileNum + subspriteTable->subsprites[i].tileOffset; - if (sprite->subspriteMode != SUBSPRITES_IGNORE_PRIORITY) + if (sprite->subspriteMode < SUBSPRITES_IGNORE_PRIORITY) destOam[i].priority = subspriteTable->subsprites[i].priority; } } diff --git a/include/constants/event_objects.h b/include/constants/event_objects.h index b9f1aad78d..0397e2409a 100644 --- a/include/constants/event_objects.h +++ b/include/constants/event_objects.h @@ -280,6 +280,11 @@ // during their idle & walking animations #define OW_MON_BOBBING TRUE +// If true, adds a small amount of overhead +// to OW code so that large (48x48, 64x64) OWs +// will display correctly under bridges, etc. +#define LARGE_OW_SUPPORT TRUE + #define SHADOW_SIZE_S 0 #define SHADOW_SIZE_M 1 #define SHADOW_SIZE_L 2 diff --git a/include/event_object_movement.h b/include/event_object_movement.h index f2383272fc..1b4f1e1d9f 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -205,7 +205,7 @@ void UpdateObjectEventsForCameraUpdate(s16 x, s16 y); u8 GetWalkSlowMovementAction(u32); u8 GetJumpMovementAction(u32); u8 ElevationToPriority(u8 elevation); -void ObjectEventUpdateElevation(struct ObjectEvent *objEvent); +void ObjectEventUpdateElevation(struct ObjectEvent *objEvent, struct Sprite *); void SetObjectSubpriorityByElevation(u8 elevation, struct Sprite *, u8 subpriority); void UnfreezeObjectEvent(struct ObjectEvent *); u8 FindLockedObjectEventIndex(struct ObjectEvent *); diff --git a/src/data/object_events/object_event_subsprites.h b/src/data/object_events/object_event_subsprites.h index 8084919927..7a3c90dc4d 100755 --- a/src/data/object_events/object_event_subsprites.h +++ b/src/data/object_events/object_event_subsprites.h @@ -279,6 +279,204 @@ static const struct SubspriteTable sOamTables_32x32[] = { }; static const struct Subsprite sOamTable_48x48[] = { + { + .x = -24, + .y = -24, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 0, + .priority = 1 + }, + { + .x = 8, + .y = -24, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 4, + .priority = 1 + }, + { + .x = -24, + .y = -16, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 6, + .priority = 1 + }, + { + .x = 8, + .y = -16, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 10, + .priority = 1 + }, + { + .x = -24, + .y = -8, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 12, + .priority = 2 + }, + { + .x = 8, + .y = -8, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 16, + .priority = 2 + }, + { + .x = -24, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 18, + .priority = 2 + }, + { + .x = 8, + .y = 0, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 22, + .priority = 2 + }, + { + .x = -24, + .y = 8, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 24, + .priority = 2 + }, + { + .x = 8, + .y = 8, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 28, + .priority = 2 + }, + { + .x = -24, + .y = 16, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 30, + .priority = 2 + }, + { + .x = 8, + .y = 16, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 34, + .priority = 2 + } +}; + +static const struct Subsprite sOamTable_48x48_4[] = { + { + .x = -24, + .y = -24, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 0, + .priority = 1 + }, + { + .x = 8, + .y = -24, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 4, + .priority = 1 + }, + { + .x = -24, + .y = -16, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 6, + .priority = 1 + }, + { + .x = 8, + .y = -16, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 10, + .priority = 1 + }, + { + .x = -24, + .y = -8, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 12, + .priority = 1 + }, + { + .x = 8, + .y = -8, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 16, + .priority = 1 + }, + { + .x = -24, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 18, + .priority = 1 + }, + { + .x = 8, + .y = 0, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 22, + .priority = 1 + }, + { + .x = -24, + .y = 8, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 24, + .priority = 1 + }, + { + .x = 8, + .y = 8, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 28, + .priority = 1 + }, + { + .x = -24, + .y = 16, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 30, + .priority = 1 + }, + { + .x = 8, + .y = 16, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 34, + .priority = 1 + } +}; + +static const struct Subsprite sOamTable_48x48_HotSprings[] = { { .x = -24, .y = -24, @@ -365,7 +563,7 @@ static const struct Subsprite sOamTable_48x48[] = { .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), .tileOffset = 30, - .priority = 2 + .priority = 3 }, { .x = 8, @@ -373,17 +571,215 @@ static const struct Subsprite sOamTable_48x48[] = { .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), .tileOffset = 34, + .priority = 3 + } +}; + +static const struct Subsprite sOamTable_48x48_Grass2[] = { + { + .x = -24, + .y = -24, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 0, .priority = 2 + }, + { + .x = 8, + .y = -24, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 4, + .priority = 2 + }, + { + .x = -24, + .y = -16, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 6, + .priority = 2 + }, + { + .x = 8, + .y = -16, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 10, + .priority = 2 + }, + { + .x = -24, + .y = -8, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 12, + .priority = 2 + }, + { + .x = 8, + .y = -8, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 16, + .priority = 2 + }, + { + .x = -24, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 18, + .priority = 2 + }, + { + .x = 8, + .y = 0, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 22, + .priority = 2 + }, + { + .x = -24, + .y = 8, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 24, + .priority = 3 + }, + { + .x = 8, + .y = 8, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 28, + .priority = 3 + }, + { + .x = -24, + .y = 16, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 30, + .priority = 3 + }, + { + .x = 8, + .y = 16, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 34, + .priority = 3 + } +}; + +static const struct Subsprite sOamTable_48x48_Grass1[] = { + { + .x = -24, + .y = -24, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 0, + .priority = 1 + }, + { + .x = 8, + .y = -24, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 4, + .priority = 1 + }, + { + .x = -24, + .y = -16, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 6, + .priority = 1 + }, + { + .x = 8, + .y = -16, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 10, + .priority = 1 + }, + { + .x = -24, + .y = -8, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 12, + .priority = 1 + }, + { + .x = 8, + .y = -8, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 16, + .priority = 1 + }, + { + .x = -24, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 18, + .priority = 1 + }, + { + .x = 8, + .y = 0, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 22, + .priority = 1 + }, + { + .x = -24, + .y = 8, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 24, + .priority = 3 + }, + { + .x = 8, + .y = 8, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 28, + .priority = 3 + }, + { + .x = -24, + .y = 16, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 30, + .priority = 3 + }, + { + .x = 8, + .y = 16, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 34, + .priority = 3 } }; static const struct SubspriteTable sOamTables_48x48[] = { {ARRAY_COUNT(sOamTable_48x48), sOamTable_48x48}, - {ARRAY_COUNT(sOamTable_48x48), sOamTable_48x48}, - {ARRAY_COUNT(sOamTable_48x48), sOamTable_48x48}, - {ARRAY_COUNT(sOamTable_48x48), sOamTable_48x48}, - {ARRAY_COUNT(sOamTable_48x48), sOamTable_48x48}, - {ARRAY_COUNT(sOamTable_48x48), sOamTable_48x48} + {ARRAY_COUNT(sOamTable_48x48), sOamTable_48x48}, // elevation 3 + {ARRAY_COUNT(sOamTable_48x48_4), sOamTable_48x48_4}, // elevation 4 + {ARRAY_COUNT(sOamTable_48x48_HotSprings), sOamTable_48x48_HotSprings}, // hot springs + {ARRAY_COUNT(sOamTable_48x48_Grass2), sOamTable_48x48_Grass2}, // long grass + {ARRAY_COUNT(sOamTable_48x48_Grass1), sOamTable_48x48_Grass1} // long grass priority 1 }; static const struct Subsprite sOamTable_64x32_0[] = { @@ -493,6 +889,263 @@ static const struct SubspriteTable sOamTables_64x64[] = { {ARRAY_COUNT(sOamTable_64x64_3), sOamTable_64x64_3} }; +static const struct Subsprite sOamTable_64x64_Follower[] = { + { + .x = -32, + .y = -32, + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .tileOffset = 0, + .priority = 1 + }, + { + .x = -32, + .y = 0, + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .tileOffset = 32, + .priority = 2 + } +}; + +static const struct Subsprite sOamTable_64x64_HotSprings[] = { + { + .x = -32, + .y = -32, + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .tileOffset = 0, + .priority = 2 + }, + { + .x = -32, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 32, + .priority = 2 + }, + { + .x = 0, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 36, + .priority = 2 + }, + { + .x = -32, + .y = 8, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 40, + .priority = 2 + }, + { + .x = 0, + .y = 8, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 44, + .priority = 2 + }, + { + .x = -32, + .y = 16, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 48, + .priority = 2 + }, + { + .x = 0, + .y = 16, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 52, + .priority = 2 + }, + { + .x = -32, + .y = 24, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 56, + .priority = 3 + }, + { + .x = 0, + .y = 24, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 60, + .priority = 3 + }, +}; + +static const struct Subsprite sOamTable_64x64_Grass2[] = { + { + .x = -32, + .y = -32, + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .tileOffset = 0, + .priority = 2 + }, + { + .x = -32, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 32, + .priority = 2 + }, + { + .x = 0, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 36, + .priority = 2 + }, + { + .x = -32, + .y = 8, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 40, + .priority = 2 + }, + { + .x = 0, + .y = 8, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 44, + .priority = 2 + }, + { + .x = -32, + .y = 16, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 48, + .priority = 3 + }, + { + .x = 0, + .y = 16, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 52, + .priority = 3 + }, + { + .x = -32, + .y = 24, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 56, + .priority = 3 + }, + { + .x = 0, + .y = 24, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 60, + .priority = 3 + }, +}; + +static const struct Subsprite sOamTable_64x64_Grass1[] = { + { + .x = -32, + .y = -32, + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .tileOffset = 0, + .priority = 1 + }, + { + .x = -32, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 32, + .priority = 1 + }, + { + .x = 0, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 36, + .priority = 1 + }, + { + .x = -32, + .y = 8, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 40, + .priority = 1 + }, + { + .x = 0, + .y = 8, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 44, + .priority = 1 + }, + { + .x = -32, + .y = 16, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 48, + .priority = 3 + }, + { + .x = 0, + .y = 16, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 52, + .priority = 3 + }, + { + .x = -32, + .y = 24, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 56, + .priority = 3 + }, + { + .x = 0, + .y = 24, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 60, + .priority = 3 + }, +}; + +// For following pokemon +// Makes the top 32 pixels priority 1, +// so that very tall pokemon's heads +// will appear on top of buildings, etc. +static const struct SubspriteTable sOamTables_64x64_Follower[] = { + {}, // unused + {ARRAY_COUNT(sOamTable_64x64_Follower), sOamTable_64x64_Follower}, // elevation 3 + {ARRAY_COUNT(sOamTable_64x64_1), sOamTable_64x64_1}, // elevation 4 + {ARRAY_COUNT(sOamTable_64x64_HotSprings), sOamTable_64x64_HotSprings}, // hot springs + {ARRAY_COUNT(sOamTable_64x64_Grass2), sOamTable_64x64_Grass2}, // long grass + {ARRAY_COUNT(sOamTable_64x64_Grass1), sOamTable_64x64_Grass1} // long grass priority 1 +}; + static const struct Subsprite sOamTable_96x40_0[] = { { .x = -48, diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 4a0f4f3e58..d96e4ad4e5 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -1845,8 +1845,8 @@ void UpdateFollowingPokemon(void) { // Update following pokemon if any u16 species; bool8 shiny; u8 form; - // Avoid spawning large (64x64) follower pokemon inside buildings - if (GetFollowerInfo(&species, &form, &shiny) && !(gMapHeader.mapType == MAP_TYPE_INDOOR && SpeciesToGraphicsInfo(species, 0)->height == 64) && !FlagGet(FLAG_TEMP_HIDE_FOLLOWER)) { + // Avoid spawning large (>32x32) follower pokemon inside buildings + if (GetFollowerInfo(&species, &form, &shiny) && !(gMapHeader.mapType == MAP_TYPE_INDOOR && SpeciesToGraphicsInfo(species, 0)->height > 32) && !FlagGet(FLAG_TEMP_HIDE_FOLLOWER)) { if (objEvent == NULL) { // Spawn follower struct ObjectEventTemplate template = { .localId = OBJ_EVENT_ID_FOLLOWER, @@ -6785,6 +6785,9 @@ bool8 MovementAction_EnterPokeball_Step1(struct ObjectEvent *objectEvent, struct LoadFillColorPalette(RGB_WHITE, OBJ_EVENT_PAL_TAG_WHITE, sprite); sprite->affineAnims = sAffineAnims_PokeballFollower; sprite->oam.affineMode = ST_OAM_AFFINE_NORMAL; + #if LARGE_OW_SUPPORT + sprite->subspriteTableNum = 1; + #endif InitSpriteAffineAnim(sprite); StartSpriteAffineAnim(sprite, sprite->data[6]); } else if (sprite->data[3] == 7) { // Free white palette and change to pokeball, disable affine @@ -8812,7 +8815,14 @@ static void UpdateObjectEventElevationAndPriority(struct ObjectEvent *objEvent, if (objEvent->fixedPriority) return; - ObjectEventUpdateElevation(objEvent); + ObjectEventUpdateElevation(objEvent, sprite); + #if LARGE_OW_SUPPORT + if (objEvent->localId == OBJ_EVENT_ID_FOLLOWER) { + // keep subspriteMode synced with player's + // so that it disappears under bridges when they do + sprite->subspriteMode |= gSprites[gPlayerAvatar.spriteId].subspriteMode & SUBSPRITES_IGNORE_PRIORITY; + } + #endif sprite->subspriteTableNum = sElevationToSubspriteTableNum[objEvent->previousElevation]; sprite->oam.priority = sElevationToPriority[objEvent->previousElevation]; @@ -8829,13 +8839,23 @@ u8 ElevationToPriority(u8 elevation) return sElevationToPriority[elevation]; } -void ObjectEventUpdateElevation(struct ObjectEvent *objEvent) +// Returns current elevation, or 15 for bridges +void ObjectEventUpdateElevation(struct ObjectEvent *objEvent, struct Sprite *sprite) { u8 curElevation = MapGridGetElevationAt(objEvent->currentCoords.x, objEvent->currentCoords.y); u8 prevElevation = MapGridGetElevationAt(objEvent->previousCoords.x, objEvent->previousCoords.y); - if (curElevation == 15 || prevElevation == 15) + if (curElevation == 15 || prevElevation == 15) { + #if LARGE_OW_SUPPORT + // Ignore subsprite priorities under bridges + // so all subsprites will display below it + sprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY; + #endif return; + } + #if LARGE_OW_SUPPORT + sprite->subspriteMode = SUBSPRITES_ON; + #endif objEvent->currentElevation = curElevation; diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 968cc3c789..3d4f0ce6bd 100755 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -331,7 +331,11 @@ u32 FldEff_Shadow(void) gSprites[spriteId].data[0] = gFieldEffectArguments[0]; gSprites[spriteId].data[1] = gFieldEffectArguments[1]; gSprites[spriteId].data[2] = gFieldEffectArguments[2]; + #if LARGE_OW_SUPPORT + gSprites[spriteId].data[3] = gShadowVerticalOffsets[graphicsInfo->shadowSize]; + #else gSprites[spriteId].data[3] = (graphicsInfo->height >> 1) - gShadowVerticalOffsets[graphicsInfo->shadowSize]; + #endif } return 0; } @@ -352,7 +356,12 @@ void UpdateShadowFieldEffect(struct Sprite *sprite) linkedSprite = &gSprites[objectEvent->spriteId]; sprite->oam.priority = linkedSprite->oam.priority; sprite->x = linkedSprite->x; + #if LARGE_OW_SUPPORT + // Read 'live' size from linked sprite + sprite->y = linkedSprite->y - linkedSprite->centerToCornerVecY - sprite->data[3]; + #else sprite->y = linkedSprite->y + sprite->data[3]; + #endif sprite->invisible = linkedSprite->invisible; if (!objectEvent->active || !objectEvent->hasShadow || MetatileBehavior_IsPokeGrass(objectEvent->currentMetatileBehavior) diff --git a/src/overworld.c b/src/overworld.c index 61cc0ce1be..937643c5e1 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -2974,7 +2974,7 @@ static void InitLinkPlayerObjectEventPos(struct ObjectEvent *objEvent, s16 x, s1 objEvent->previousCoords.y = y; SetSpritePosToMapCoords(x, y, &objEvent->initialCoords.x, &objEvent->initialCoords.y); objEvent->initialCoords.x += 8; - ObjectEventUpdateElevation(objEvent); + ObjectEventUpdateElevation(objEvent, NULL); } static void SetLinkPlayerObjectRange(u8 linkPlayerId, u8 dir) @@ -3114,7 +3114,7 @@ static bool8 FacingHandler_DpadMovement(struct LinkPlayerObjectEvent *linkPlayer { objEvent->directionSequenceIndex = 16; ShiftObjectEventCoords(objEvent, x, y); - ObjectEventUpdateElevation(objEvent); + ObjectEventUpdateElevation(objEvent, NULL); return TRUE; } }