From 8b37b4292a17c67a4711b90aa0e83d63acf26af6 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 9 May 2023 22:04:26 -0400 Subject: [PATCH 001/120] 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 002/120] 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 003/120] 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 004/120] 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 005/120] 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 006/120] 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 007/120] 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 008/120] 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 009/120] 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 010/120] 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 011/120] 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 012/120] 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 013/120] 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 014/120] 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 015/120] 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 016/120] 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 017/120] 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 018/120] 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 019/120] 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 020/120] 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 021/120] 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 022/120] 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 023/120] 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 024/120] 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 025/120] 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 026/120] 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 027/120] Document stat change animation --- .../stat3.pal => stat_change/accuracy.pal} | 0 .../stat2.pal => stat_change/attack.pal} | 0 .../decrease.bin} | 0 .../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 028/120] 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 029/120] 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 030/120] 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 031/120] 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 032/120] 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 033/120] 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 034/120] 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 035/120] 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 036/120] 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 037/120] 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 038/120] 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 039/120] 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 5beec06d9d0056e0168a10bd6a8252e9259a1399 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sat, 19 Aug 2023 17:20:53 -0400 Subject: [PATCH 040/120] Document Task_MapNamePopUpWindow --- src/map_name_popup.c | 97 ++++++++++++++++++++++++++++---------------- 1 file changed, 62 insertions(+), 35 deletions(-) diff --git a/src/map_name_popup.c b/src/map_name_popup.c index 93a2825833..7e5fbc9095 100644 --- a/src/map_name_popup.c +++ b/src/map_name_popup.c @@ -206,22 +206,45 @@ static bool8 StartMenu_ShowMapNamePopup(void) return TRUE; } +// States and data defines for Task_MapNamePopUpWindow +enum { + STATE_SLIDE_IN, + STATE_WAIT, + STATE_SLIDE_OUT, + STATE_UNUSED, + STATE_ERASE, + STATE_END, + STATE_PRINT, // For some reason the first state is numerically last. +}; + +#define POPUP_OFFSCREEN_Y 40 +#define POPUP_SLIDE_SPEED 2 + +#define tState data[0] +#define tOnscreenTimer data[1] +#define tYOffset data[2] +#define tIncomingPopUp data[3] +#define tPrintTimer data[4] + void ShowMapNamePopup(void) { if (FlagGet(FLAG_HIDE_MAP_NAME_POPUP) != TRUE) { if (!FuncIsActiveTask(Task_MapNamePopUpWindow)) { + // New pop up window sPopupTaskId = CreateTask(Task_MapNamePopUpWindow, 90); - SetGpuReg(REG_OFFSET_BG0VOFS, 40); - gTasks[sPopupTaskId].data[0] = 6; - gTasks[sPopupTaskId].data[2] = 40; + SetGpuReg(REG_OFFSET_BG0VOFS, POPUP_OFFSCREEN_Y); + gTasks[sPopupTaskId].tState = STATE_PRINT; + gTasks[sPopupTaskId].tYOffset = POPUP_OFFSCREEN_Y; } else { - if (gTasks[sPopupTaskId].data[0] != 2) - gTasks[sPopupTaskId].data[0] = 2; - gTasks[sPopupTaskId].data[3] = 1; + // There's already a pop up window running. + // Hurry the old pop up offscreen so the new one can appear. + if (gTasks[sPopupTaskId].tState != STATE_SLIDE_OUT) + gTasks[sPopupTaskId].tState = STATE_SLIDE_OUT; + gTasks[sPopupTaskId].tIncomingPopUp = TRUE; } } } @@ -230,61 +253,65 @@ static void Task_MapNamePopUpWindow(u8 taskId) { struct Task *task = &gTasks[taskId]; - switch (task->data[0]) + switch (task->tState) { - case 6: - task->data[4]++; - if (task->data[4] > 30) + case STATE_PRINT: + // Wait, then create and print the pop up window + if (++task->tPrintTimer > 30) { - task->data[0] = 0; - task->data[4] = 0; + task->tState = STATE_SLIDE_IN; + task->tPrintTimer = 0; ShowMapNamePopUpWindow(); } break; - case 0: - task->data[2] -= 2; - if (task->data[2] <= 0 ) + case STATE_SLIDE_IN: + // Slide the window onscreen. + task->tYOffset -= POPUP_SLIDE_SPEED; + if (task->tYOffset <= 0 ) { - task->data[2] = 0; - task->data[0] = 1; + task->tYOffset = 0; + task->tState = STATE_WAIT; gTasks[sPopupTaskId].data[1] = 0; } break; - case 1: - task->data[1]++; - if (task->data[1] > 120 ) + case STATE_WAIT: + // Wait while the window is fully onscreen. + if (++task->tOnscreenTimer > 120) { - task->data[1] = 0; - task->data[0] = 2; + task->tOnscreenTimer = 0; + task->tState = STATE_SLIDE_OUT; } break; - case 2: - task->data[2] += 2; - if (task->data[2] > 39) + case STATE_SLIDE_OUT: + // Slide the window offscreen. + task->tYOffset += POPUP_SLIDE_SPEED; + if (task->tYOffset >= POPUP_OFFSCREEN_Y) { - task->data[2] = 40; - if (task->data[3]) + task->tYOffset = POPUP_OFFSCREEN_Y; + if (task->tIncomingPopUp) { - task->data[0] = 6; - task->data[4] = 0; - task->data[3] = 0; + // A new pop up window is incoming, + // return to the first state to show it. + task->tState = STATE_PRINT; + task->tPrintTimer = 0; + task->tIncomingPopUp = FALSE; } else { - task->data[0] = 4; + task->tState = STATE_ERASE; return; } } break; - case 4: + case STATE_ERASE: ClearStdWindowAndFrame(GetMapNamePopUpWindowId(), TRUE); - task->data[0] = 5; + task->tState = STATE_END; break; - case 5: + case STATE_END: HideMapNamePopUpWindow(); return; } - SetGpuReg(REG_OFFSET_BG0VOFS, task->data[2]); + SetGpuReg(REG_OFFSET_BG0VOFS, task->tYOffset); } void HideMapNamePopUpWindow(void) From 6792028254dfb39111ea30f499ee27cefbc77d29 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sun, 20 Aug 2023 01:18:44 -0400 Subject: [PATCH 041/120] Document title screen task data --- src/title_screen.c | 256 +++++++++++++++++++++++++++------------------ 1 file changed, 154 insertions(+), 102 deletions(-) diff --git a/src/title_screen.c b/src/title_screen.c index 87bf0d970e..12015b8bd8 100644 --- a/src/title_screen.c +++ b/src/title_screen.c @@ -23,6 +23,12 @@ #include "constants/rgb.h" #include "constants/songs.h" +enum { + TAG_VERSION = 1000, + TAG_PRESS_START_COPYRIGHT, + TAG_LOGO_SHINE, +}; + #define VERSION_BANNER_RIGHT_TILEOFFSET 64 #define VERSION_BANNER_LEFT_X 98 #define VERSION_BANNER_RIGHT_X 162 @@ -158,8 +164,8 @@ static const union AnimCmd *const sVersionBannerRightAnimTable[] = static const struct SpriteTemplate sVersionBannerLeftSpriteTemplate = { - .tileTag = 1000, - .paletteTag = 1000, + .tileTag = TAG_VERSION, + .paletteTag = TAG_VERSION, .oam = &sVersionBannerLeftOamData, .anims = sVersionBannerLeftAnimTable, .images = NULL, @@ -169,8 +175,8 @@ static const struct SpriteTemplate sVersionBannerLeftSpriteTemplate = static const struct SpriteTemplate sVersionBannerRightSpriteTemplate = { - .tileTag = 1000, - .paletteTag = 1000, + .tileTag = TAG_VERSION, + .paletteTag = TAG_VERSION, .oam = &sVersionBannerRightOamData, .anims = sVersionBannerRightAnimTable, .images = NULL, @@ -183,7 +189,7 @@ static const struct CompressedSpriteSheet sSpriteSheet_EmeraldVersion[] = { .data = gTitleScreenEmeraldVersionGfx, .size = 0x1000, - .tag = 1000 + .tag = TAG_VERSION }, {}, }; @@ -205,75 +211,80 @@ static const struct OamData sOamData_CopyrightBanner = .affineParam = 0, }; -static const union AnimCmd sCopyrightBannerAnim0[] = +static const union AnimCmd sAnim_PressStart_0[] = { ANIMCMD_FRAME(1, 4), ANIMCMD_END, }; -static const union AnimCmd sCopyrightBannerAnim1[] = +static const union AnimCmd sAnim_PressStart_1[] = { ANIMCMD_FRAME(5, 4), ANIMCMD_END, }; -static const union AnimCmd sCopyrightBannerAnim2[] = +static const union AnimCmd sAnim_PressStart_2[] = { ANIMCMD_FRAME(9, 4), ANIMCMD_END, }; -static const union AnimCmd sCopyrightBannerAnim3[] = +static const union AnimCmd sAnim_PressStart_3[] = { ANIMCMD_FRAME(13, 4), ANIMCMD_END, }; -static const union AnimCmd sCopyrightBannerAnim4[] = +static const union AnimCmd sAnim_PressStart_4[] = { ANIMCMD_FRAME(17, 4), ANIMCMD_END, }; -static const union AnimCmd sCopyrightBannerAnim5[] = +static const union AnimCmd sAnim_Copyright_0[] = { ANIMCMD_FRAME(21, 4), ANIMCMD_END, }; -static const union AnimCmd sCopyrightBannerAnim6[] = +static const union AnimCmd sAnim_Copyright_1[] = { ANIMCMD_FRAME(25, 4), ANIMCMD_END, }; -static const union AnimCmd sCopyrightBannerAnim7[] = +static const union AnimCmd sAnim_Copyright_2[] = { ANIMCMD_FRAME(29, 4), ANIMCMD_END, }; -static const union AnimCmd sCopyrightBannerAnim8[] = +static const union AnimCmd sAnim_Copyright_3[] = { ANIMCMD_FRAME(33, 4), ANIMCMD_END, }; -static const union AnimCmd sCopyrightBannerAnim9[] = +static const union AnimCmd sAnim_Copyright_4[] = { ANIMCMD_FRAME(37, 4), ANIMCMD_END, }; -static const union AnimCmd *const sStartCopyrightBannerAnimTable[] = +// The "Press Start" and copyright graphics are each 5 32x8 segments long +#define NUM_PRESS_START_FRAMES 5 +#define NUM_COPYRIGHT_FRAMES 5 + +static const union AnimCmd *const sStartCopyrightBannerAnimTable[NUM_PRESS_START_FRAMES + NUM_COPYRIGHT_FRAMES] = { - sCopyrightBannerAnim0, - sCopyrightBannerAnim1, - sCopyrightBannerAnim2, - sCopyrightBannerAnim3, - sCopyrightBannerAnim4, - sCopyrightBannerAnim5, - sCopyrightBannerAnim6, - sCopyrightBannerAnim7, - sCopyrightBannerAnim8, - sCopyrightBannerAnim9, + sAnim_PressStart_0, + sAnim_PressStart_1, + sAnim_PressStart_2, + sAnim_PressStart_3, + sAnim_PressStart_4, + [NUM_PRESS_START_FRAMES] = + sAnim_Copyright_0, + sAnim_Copyright_1, + sAnim_Copyright_2, + sAnim_Copyright_3, + sAnim_Copyright_4, }; static const struct SpriteTemplate sStartCopyrightBannerSpriteTemplate = { - .tileTag = 1001, - .paletteTag = 1001, + .tileTag = TAG_PRESS_START_COPYRIGHT, + .paletteTag = TAG_PRESS_START_COPYRIGHT, .oam = &sOamData_CopyrightBanner, .anims = sStartCopyrightBannerAnimTable, .images = NULL, @@ -286,7 +297,7 @@ static const struct CompressedSpriteSheet sSpriteSheet_PressStart[] = { .data = gTitleScreenPressStartGfx, .size = 0x520, - .tag = 1001 + .tag = TAG_PRESS_START_COPYRIGHT }, {}, }; @@ -295,7 +306,7 @@ static const struct SpritePalette sSpritePalette_PressStart[] = { { .data = gTitleScreenPressStartPal, - .tag = 1001 + .tag = TAG_PRESS_START_COPYRIGHT }, {}, }; @@ -330,8 +341,8 @@ static const union AnimCmd *const sPokemonLogoShineAnimTable[] = static const struct SpriteTemplate sPokemonLogoShineSpriteTemplate = { - .tileTag = 1002, - .paletteTag = 1001, + .tileTag = TAG_LOGO_SHINE, + .paletteTag = TAG_PRESS_START_COPYRIGHT, .oam = &sPokemonLogoShineOamData, .anims = sPokemonLogoShineAnimTable, .images = NULL, @@ -344,15 +355,25 @@ static const struct CompressedSpriteSheet sPokemonLogoShineSpriteSheet[] = { .data = sTitleScreenLogoShineGfx, .size = 0x800, - .tag = 1002 + .tag = TAG_LOGO_SHINE }, {}, }; -// code +// Task data for the main title screen tasks (Task_TitleScreenPhase#) +#define tCounter data[0] +#define tSkipToNext data[1] +#define tPointless data[2] // Incremented but never used to do anything. +#define tBg2Y data[3] +#define tBg1Y data[4] + +// Sprite data for sVersionBannerLeftSpriteTemplate / sVersionBannerRightSpriteTemplate +#define sAlphaBlendIdx data[0] +#define sParentTaskId data[1] + static void SpriteCB_VersionBannerLeft(struct Sprite *sprite) { - if (gTasks[sprite->data[1]].data[1] != 0) + if (gTasks[sprite->sParentTaskId].tSkipToNext) { sprite->oam.objMode = ST_OAM_OBJ_NORMAL; sprite->y = VERSION_BANNER_Y_GOAL; @@ -361,15 +382,15 @@ static void SpriteCB_VersionBannerLeft(struct Sprite *sprite) { if (sprite->y != VERSION_BANNER_Y_GOAL) sprite->y++; - if (sprite->data[0] != 0) - sprite->data[0]--; - SetGpuReg(REG_OFFSET_BLDALPHA, gTitleScreenAlphaBlend[sprite->data[0]]); + if (sprite->sAlphaBlendIdx != 0) + sprite->sAlphaBlendIdx--; + SetGpuReg(REG_OFFSET_BLDALPHA, gTitleScreenAlphaBlend[sprite->sAlphaBlendIdx]); } } static void SpriteCB_VersionBannerRight(struct Sprite *sprite) { - if (gTasks[sprite->data[1]].data[1] != 0) + if (gTasks[sprite->sParentTaskId].tSkipToNext) { sprite->oam.objMode = ST_OAM_OBJ_NORMAL; sprite->y = VERSION_BANNER_Y_GOAL; @@ -381,13 +402,16 @@ static void SpriteCB_VersionBannerRight(struct Sprite *sprite) } } +// Sprite data for SpriteCB_PressStartCopyrightBanner +#define sAnimate data[0] +#define sTimer data[1] + static void SpriteCB_PressStartCopyrightBanner(struct Sprite *sprite) { - if (sprite->data[0] == 1) + if (sprite->sAnimate == TRUE) { - sprite->data[1]++; // Alternate between hidden and shown every 16th frame - if (sprite->data[1] & 16) + if (++sprite->sTimer & 16) sprite->invisible = FALSE; else sprite->invisible = TRUE; @@ -404,11 +428,11 @@ static void CreatePressStartBanner(s16 x, s16 y) u8 spriteId; x -= 64; - for (i = 0; i < 5; i++, x += 32) + for (i = 0; i < NUM_PRESS_START_FRAMES; i++, x += 32) { spriteId = CreateSprite(&sStartCopyrightBannerSpriteTemplate, x, y, 0); StartSpriteAnim(&gSprites[spriteId], i); - gSprites[spriteId].data[0] = 1; + gSprites[spriteId].sAnimate = TRUE; } } @@ -418,93 +442,122 @@ static void CreateCopyrightBanner(s16 x, s16 y) u8 spriteId; x -= 64; - for (i = 0; i < 5; i++, x += 32) + for (i = 0; i < NUM_COPYRIGHT_FRAMES; i++, x += 32) { spriteId = CreateSprite(&sStartCopyrightBannerSpriteTemplate, x, y, 0); - StartSpriteAnim(&gSprites[spriteId], i + 5); + StartSpriteAnim(&gSprites[spriteId], i + NUM_PRESS_START_FRAMES); } } +#undef sAnimate +#undef sTimer + +// Defines for SpriteCB_PokemonLogoShine +enum { + SHINE_MODE_SINGLE_NO_BG_COLOR, + SHINE_MODE_DOUBLE, + SHINE_MODE_SINGLE, +}; + +#define SHINE_SPEED 4 + +#define sMode data[0] +#define sBgColor data[1] + static void SpriteCB_PokemonLogoShine(struct Sprite *sprite) { if (sprite->x < DISPLAY_WIDTH + 32) { - if (sprite->data[0]) // Flash background + // In any mode except SHINE_MODE_SINGLE_NO_BG_COLOR the background + // color will change, in addition to the shine sprite moving. + if (sprite->sMode != SHINE_MODE_SINGLE_NO_BG_COLOR) { u16 backgroundColor; if (sprite->x < DISPLAY_WIDTH / 2) { // Brighten background color - if (sprite->data[1] < 31) - sprite->data[1]++; - if (sprite->data[1] < 31) - sprite->data[1]++; + if (sprite->sBgColor < 31) + sprite->sBgColor++; + if (sprite->sBgColor < 31) + sprite->sBgColor++; } else { // Darken background color - if (sprite->data[1] != 0) - sprite->data[1]--; - if (sprite->data[1] != 0) - sprite->data[1]--; + if (sprite->sBgColor != 0) + sprite->sBgColor--; + if (sprite->sBgColor != 0) + sprite->sBgColor--; } - backgroundColor = _RGB(sprite->data[1], sprite->data[1], sprite->data[1]); - if (sprite->x == DISPLAY_WIDTH / 2 + 12 - || sprite->x == DISPLAY_WIDTH / 2 + 16 - || sprite->x == DISPLAY_WIDTH / 2 + 20 - || sprite->x == DISPLAY_WIDTH / 2 + 24) + backgroundColor = _RGB(sprite->sBgColor, sprite->sBgColor, sprite->sBgColor); + + // Flash the background green for 4 frames of movement. + // Otherwise use the updating color. + if (sprite->x == DISPLAY_WIDTH / 2 + (3 * SHINE_SPEED) + || sprite->x == DISPLAY_WIDTH / 2 + (4 * SHINE_SPEED) + || sprite->x == DISPLAY_WIDTH / 2 + (5 * SHINE_SPEED) + || sprite->x == DISPLAY_WIDTH / 2 + (6 * SHINE_SPEED)) gPlttBufferFaded[0] = RGB(24, 31, 12); else gPlttBufferFaded[0] = backgroundColor; } - sprite->x += 4; + + sprite->x += SHINE_SPEED; } else { + // Sprite has moved fully offscreen gPlttBufferFaded[0] = RGB_BLACK; DestroySprite(sprite); } } -static void SpriteCB_PokemonLogoShine2(struct Sprite *sprite) +static void SpriteCB_PokemonLogoShine_Fast(struct Sprite *sprite) { if (sprite->x < DISPLAY_WIDTH + 32) - sprite->x += 8; + sprite->x += SHINE_SPEED * 2; else DestroySprite(sprite); } -static void StartPokemonLogoShine(u8 flashBg) +static void StartPokemonLogoShine(u8 mode) { u8 spriteId; - switch (flashBg) + switch (mode) { - case 0: - case 2: + case SHINE_MODE_SINGLE_NO_BG_COLOR: + case SHINE_MODE_SINGLE: + // Create one regular shine sprite. + // If mode is SHINE_MODE_SINGLE it will also change the background color. spriteId = CreateSprite(&sPokemonLogoShineSpriteTemplate, 0, 68, 0); gSprites[spriteId].oam.objMode = ST_OAM_OBJ_WINDOW; - gSprites[spriteId].data[0] = flashBg; + gSprites[spriteId].sMode = mode; break; - case 1: + case SHINE_MODE_DOUBLE: + // Create an invisible sprite with mode set to update the background color spriteId = CreateSprite(&sPokemonLogoShineSpriteTemplate, 0, 68, 0); gSprites[spriteId].oam.objMode = ST_OAM_OBJ_WINDOW; - gSprites[spriteId].data[0] = flashBg; + gSprites[spriteId].sMode = mode; gSprites[spriteId].invisible = TRUE; + // Create two faster shine sprites spriteId = CreateSprite(&sPokemonLogoShineSpriteTemplate, 0, 68, 0); - gSprites[spriteId].callback = SpriteCB_PokemonLogoShine2; + gSprites[spriteId].callback = SpriteCB_PokemonLogoShine_Fast; gSprites[spriteId].oam.objMode = ST_OAM_OBJ_WINDOW; spriteId = CreateSprite(&sPokemonLogoShineSpriteTemplate, -80, 68, 0); - gSprites[spriteId].callback = SpriteCB_PokemonLogoShine2; + gSprites[spriteId].callback = SpriteCB_PokemonLogoShine_Fast; gSprites[spriteId].oam.objMode = ST_OAM_OBJ_WINDOW; break; } } +#undef sMode +#undef sBgColor + static void VBlankCB(void) { ScanlineEffect_InitHBlankDmaTransfer(); @@ -514,9 +567,6 @@ static void VBlankCB(void) SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y); } -#define tCounter data[0] -#define tSkipToNext data[1] - void CB2_InitTitleScreen(void) { switch (gMain.state) @@ -573,13 +623,13 @@ void CB2_InitTitleScreen(void) gTasks[taskId].tCounter = 256; gTasks[taskId].tSkipToNext = FALSE; - gTasks[taskId].data[2] = -16; - gTasks[taskId].data[3] = -32; + gTasks[taskId].tPointless = -16; + gTasks[taskId].tBg2Y = -32; gMain.state = 3; break; } case 3: - BeginNormalPaletteFade(PALETTES_ALL, 1, 0x10, 0, RGB_WHITEALPHA); + BeginNormalPaletteFade(PALETTES_ALL, 1, 16, 0, RGB_WHITEALPHA); SetVBlankCallback(VBlankCB); gMain.state = 4; break; @@ -614,7 +664,7 @@ void CB2_InitTitleScreen(void) case 5: if (!UpdatePaletteFade()) { - StartPokemonLogoShine(0); + StartPokemonLogoShine(SHINE_MODE_SINGLE_NO_BG_COLOR); ScanlineEffect_InitWave(0, DISPLAY_HEIGHT, 4, 4, 0, SCANLINE_EFFECT_REG_BG1HOFS, TRUE); SetMainCallback2(MainCB2); } @@ -634,7 +684,7 @@ static void MainCB2(void) static void Task_TitleScreenPhase1(u8 taskId) { // Skip to next phase when A, B, Start, or Select is pressed - if (JOY_NEW(A_B_START_SELECT) || gTasks[taskId].data[1] != 0) + if (JOY_NEW(A_B_START_SELECT) || gTasks[taskId].tSkipToNext) { gTasks[taskId].tSkipToNext = TRUE; gTasks[taskId].tCounter = 0; @@ -644,9 +694,9 @@ static void Task_TitleScreenPhase1(u8 taskId) { u16 frameNum = gTasks[taskId].tCounter; if (frameNum == 176) - StartPokemonLogoShine(1); + StartPokemonLogoShine(SHINE_MODE_DOUBLE); else if (frameNum == 64) - StartPokemonLogoShine(2); + StartPokemonLogoShine(SHINE_MODE_SINGLE); gTasks[taskId].tCounter--; } @@ -663,18 +713,21 @@ static void Task_TitleScreenPhase1(u8 taskId) // Create left side of version banner spriteId = CreateSprite(&sVersionBannerLeftSpriteTemplate, VERSION_BANNER_LEFT_X, VERSION_BANNER_Y, 0); - gSprites[spriteId].data[0] = 64; - gSprites[spriteId].data[1] = taskId; + gSprites[spriteId].sAlphaBlendIdx = ARRAY_COUNT(gTitleScreenAlphaBlend); + gSprites[spriteId].sParentTaskId = taskId; // Create right side of version banner spriteId = CreateSprite(&sVersionBannerRightSpriteTemplate, VERSION_BANNER_RIGHT_X, VERSION_BANNER_Y, 0); - gSprites[spriteId].data[1] = taskId; + gSprites[spriteId].sParentTaskId = taskId; gTasks[taskId].tCounter = 144; gTasks[taskId].func = Task_TitleScreenPhase2; } } +#undef sParentTaskId +#undef sAlphaBlendIdx + // Create "Press Start" and copyright banners, and slide Pokemon logo up static void Task_TitleScreenPhase2(u8 taskId) { @@ -705,31 +758,31 @@ static void Task_TitleScreenPhase2(u8 taskId) | DISPCNT_OBJ_ON); CreatePressStartBanner(START_BANNER_X, 108); CreateCopyrightBanner(START_BANNER_X, 148); - gTasks[taskId].data[4] = 0; + gTasks[taskId].tBg1Y = 0; gTasks[taskId].func = Task_TitleScreenPhase3; } - if (!(gTasks[taskId].tCounter & 3) && gTasks[taskId].data[2] != 0) - gTasks[taskId].data[2]++; - if (!(gTasks[taskId].tCounter & 1) && gTasks[taskId].data[3] != 0) - gTasks[taskId].data[3]++; + if (!(gTasks[taskId].tCounter & 3) && gTasks[taskId].tPointless != 0) + gTasks[taskId].tPointless++; + if (!(gTasks[taskId].tCounter & 1) && gTasks[taskId].tBg2Y != 0) + gTasks[taskId].tBg2Y++; // Slide Pokemon logo up - yPos = gTasks[taskId].data[3] * 256; + yPos = gTasks[taskId].tBg2Y * 256; SetGpuReg(REG_OFFSET_BG2Y_L, yPos); SetGpuReg(REG_OFFSET_BG2Y_H, yPos / 0x10000); - gTasks[taskId].data[5] = 15; - gTasks[taskId].data[6] = 6; + gTasks[taskId].data[5] = 15; // Unused + gTasks[taskId].data[6] = 6; // Unused } // Show Rayquaza silhouette and process main title screen input static void Task_TitleScreenPhase3(u8 taskId) { - if ((JOY_NEW(A_BUTTON)) || (JOY_NEW(START_BUTTON))) + if (JOY_NEW(A_BUTTON) || JOY_NEW(START_BUTTON)) { FadeOutBGM(4); - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_WHITEALPHA); + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_WHITEALPHA); SetMainCallback2(CB2_GoToMainMenu); } else if (JOY_HELD(CLEAR_SAVE_BUTTON_COMBO) == CLEAR_SAVE_BUTTON_COMBO) @@ -740,30 +793,29 @@ static void Task_TitleScreenPhase3(u8 taskId) && CanResetRTC() == TRUE) { FadeOutBGM(4); - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK); + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); SetMainCallback2(CB2_GoToResetRtcScreen); } else if (JOY_HELD(BERRY_UPDATE_BUTTON_COMBO) == BERRY_UPDATE_BUTTON_COMBO) { FadeOutBGM(4); - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK); + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); SetMainCallback2(CB2_GoToBerryFixScreen); } else { SetGpuReg(REG_OFFSET_BG2Y_L, 0); SetGpuReg(REG_OFFSET_BG2Y_H, 0); - gTasks[taskId].tCounter++; - if (gTasks[taskId].tCounter & 1) + if (++gTasks[taskId].tCounter & 1) { - gTasks[taskId].data[4]++; - gBattle_BG1_Y = gTasks[taskId].data[4] / 2; + gTasks[taskId].tBg1Y++; + gBattle_BG1_Y = gTasks[taskId].tBg1Y / 2; gBattle_BG1_X = 0; } UpdateLegendaryMarkingColor(gTasks[taskId].tCounter); if ((gMPlayInfo_BGM.status & 0xFFFF) == 0) { - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_WHITEALPHA); + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_WHITEALPHA); SetMainCallback2(CB2_GoToCopyrightScreen); } } From e70577d59badd1257571123d2faf51d9b84d75f5 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sun, 20 Aug 2023 17:22:29 -0400 Subject: [PATCH 042/120] 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 56ff4ce998225b7ff0f99db466022e29f8097aba Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sun, 20 Aug 2023 01:35:51 -0400 Subject: [PATCH 043/120] Add defines for field effect sprite data, misc task data --- src/field_effect_helpers.c | 686 +++++++++++++++++++------------------ src/use_pokeblock.c | 37 +- 2 files changed, 369 insertions(+), 354 deletions(-) diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 9421aaf27a..237e543dee 100755 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -32,8 +32,12 @@ static void UpdateBobbingEffect(struct ObjectEvent *, struct Sprite *, struct Sp static void SpriteCB_UnderwaterSurfBlob(struct Sprite *); static u32 ShowDisguiseFieldEffect(u8, u8, u8); -// Used by several field effects to determine which of a group it is -#define sFldEff data[1] +// Data used by all the field effects that share UpdateJumpImpactEffect +#define sJumpElevation data[0] +#define sJumpFldEff data[1] + +// Data used by all the field effects that share WaitFieldEffectSpriteAnim +#define sWaitFldEff data[0] #define sReflectionObjEventId data[0] #define sReflectionObjEventLocalId data[1] @@ -44,7 +48,7 @@ void SetUpReflection(struct ObjectEvent *objectEvent, struct Sprite *sprite, boo { struct Sprite *reflectionSprite; - reflectionSprite = &gSprites[CreateCopySpriteAt(sprite, sprite->x, sprite->y, 0x98)]; + reflectionSprite = &gSprites[CreateCopySpriteAt(sprite, sprite->x, sprite->y, 152)]; reflectionSprite->callback = UpdateObjectReflectionSprite; reflectionSprite->oam.priority = 3; reflectionSprite->oam.paletteNum = gReflectionEffectPaletteMap[reflectionSprite->oam.paletteNum]; @@ -92,9 +96,7 @@ static void LoadObjectReflectionPalette(struct ObjectEvent *objectEvent, struct static void LoadObjectRegularReflectionPalette(struct ObjectEvent *objectEvent, u8 paletteIndex) { - const struct ObjectEventGraphicsInfo *graphicsInfo; - - graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); + const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); if (graphicsInfo->reflectionPaletteTag != OBJ_EVENT_PAL_TAG_NONE) { if (graphicsInfo->paletteSlot == PALSLOT_PLAYER) @@ -111,9 +113,7 @@ static void LoadObjectRegularReflectionPalette(struct ObjectEvent *objectEvent, // This is so the sprite blends in with the dark water metatile underneath the bridge. static void LoadObjectHighBridgeReflectionPalette(struct ObjectEvent *objectEvent, u8 paletteNum) { - const struct ObjectEventGraphicsInfo *graphicsInfo; - - graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); + const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); if (graphicsInfo->reflectionPaletteTag != OBJ_EVENT_PAL_TAG_NONE) { PatchObjectPalette(graphicsInfo->reflectionPaletteTag, paletteNum); @@ -123,11 +123,8 @@ static void LoadObjectHighBridgeReflectionPalette(struct ObjectEvent *objectEven static void UpdateObjectReflectionSprite(struct Sprite *reflectionSprite) { - struct ObjectEvent *objectEvent; - struct Sprite *mainSprite; - - objectEvent = &gObjectEvents[reflectionSprite->sReflectionObjEventId]; - mainSprite = &gSprites[objectEvent->spriteId]; + struct ObjectEvent *objectEvent = &gObjectEvents[reflectionSprite->sReflectionObjEventId]; + struct Sprite *mainSprite = &gSprites[objectEvent->spriteId]; if (!objectEvent->active || !objectEvent->hasReflection || objectEvent->localId != reflectionSprite->sReflectionObjEventLocalId) { reflectionSprite->inUse = FALSE; @@ -172,15 +169,15 @@ static void UpdateObjectReflectionSprite(struct Sprite *reflectionSprite) extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[]; +#define sPrevX data[0] +#define sPrevY data[1] + u8 CreateWarpArrowSprite(void) { - u8 spriteId; - struct Sprite *sprite; - - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_ARROW], 0, 0, 0x52); + u8 spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_ARROW], 0, 0, 82); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->oam.priority = 1; sprite->coordOffsetEnabled = TRUE; sprite->invisible = TRUE; @@ -195,24 +192,24 @@ void SetSpriteInvisible(u8 spriteId) void ShowWarpArrowSprite(u8 spriteId, u8 direction, s16 x, s16 y) { - s16 x2; - s16 y2; - struct Sprite *sprite; - - sprite = &gSprites[spriteId]; - if (sprite->invisible || sprite->data[0] != x || sprite->data[1] != y) + struct Sprite *sprite = &gSprites[spriteId]; + if (sprite->invisible || sprite->sPrevX != x || sprite->sPrevY != y) { + s16 x2, y2; SetSpritePosToMapCoords(x, y, &x2, &y2); sprite = &gSprites[spriteId]; sprite->x = x2 + 8; sprite->y = y2 + 8; sprite->invisible = FALSE; - sprite->data[0] = x; - sprite->data[1] = y; + sprite->sPrevX = x; + sprite->sPrevY = y; StartSpriteAnim(sprite, direction - 1); } } +#undef sPrevX +#undef sPrevY + static const u8 sShadowEffectTemplateIds[] = { FLDEFFOBJ_SHADOW_S, FLDEFFOBJ_SHADOW_M, @@ -227,22 +224,24 @@ const u16 gShadowVerticalOffsets[] = { 16 }; +// Sprite data for FLDEFF_SHADOW +#define sLocalId data[0] +#define sMapNum data[1] +#define sMapGroup data[2] +#define sYOffset data[3] + u32 FldEff_Shadow(void) { - u8 objectEventId; - const struct ObjectEventGraphicsInfo *graphicsInfo; - u8 spriteId; - - objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); - graphicsInfo = GetObjectEventGraphicsInfo(gObjectEvents[objectEventId].graphicsId); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[sShadowEffectTemplateIds[graphicsInfo->shadowSize]], 0, 0, 0x94); + u8 objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(gObjectEvents[objectEventId].graphicsId); + u8 spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[sShadowEffectTemplateIds[graphicsInfo->shadowSize]], 0, 0, 148); if (spriteId != MAX_SPRITES) { gSprites[spriteId].coordOffsetEnabled = TRUE; - gSprites[spriteId].data[0] = gFieldEffectArguments[0]; - gSprites[spriteId].data[1] = gFieldEffectArguments[1]; - gSprites[spriteId].data[2] = gFieldEffectArguments[2]; - gSprites[spriteId].data[3] = (graphicsInfo->height >> 1) - gShadowVerticalOffsets[graphicsInfo->shadowSize]; + gSprites[spriteId].sLocalId = gFieldEffectArguments[0]; + gSprites[spriteId].sMapNum = gFieldEffectArguments[1]; + gSprites[spriteId].sMapGroup = gFieldEffectArguments[2]; + gSprites[spriteId].sYOffset = (graphicsInfo->height >> 1) - gShadowVerticalOffsets[graphicsInfo->shadowSize]; } return 0; } @@ -250,20 +249,18 @@ u32 FldEff_Shadow(void) void UpdateShadowFieldEffect(struct Sprite *sprite) { u8 objectEventId; - struct ObjectEvent *objectEvent; - struct Sprite *linkedSprite; - if (TryGetObjectEventIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &objectEventId)) + if (TryGetObjectEventIdByLocalIdAndMap(sprite->sLocalId, sprite->sMapNum, sprite->sMapGroup, &objectEventId)) { FieldEffectStop(sprite, FLDEFF_SHADOW); } else { - objectEvent = &gObjectEvents[objectEventId]; - linkedSprite = &gSprites[objectEvent->spriteId]; + struct ObjectEvent *objectEvent = &gObjectEvents[objectEventId]; + struct Sprite *linkedSprite = &gSprites[objectEvent->spriteId]; sprite->oam.priority = linkedSprite->oam.priority; sprite->x = linkedSprite->x; - sprite->y = linkedSprite->y + sprite->data[3]; + sprite->y = linkedSprite->y + sprite->sYOffset; if (!objectEvent->active || !objectEvent->hasShadow || MetatileBehavior_IsPokeGrass(objectEvent->currentMetatileBehavior) || MetatileBehavior_IsSurfableWaterOrUnderwater(objectEvent->currentMetatileBehavior) @@ -276,6 +273,11 @@ void UpdateShadowFieldEffect(struct Sprite *sprite) } } +#undef sLocalId +#undef sMapNum +#undef sMapGroup +#undef sYOffset + // Sprite data for FLDEFF_TALL_GRASS and FLDEFF_LONG_GRASS #define sElevation data[0] #define sX data[1] @@ -288,18 +290,14 @@ void UpdateShadowFieldEffect(struct Sprite *sprite) u32 FldEff_TallGrass(void) { - s16 x; - s16 y; u8 spriteId; - struct Sprite *sprite; - - x = gFieldEffectArguments[0]; - y = gFieldEffectArguments[1]; + s16 x = gFieldEffectArguments[0]; + s16 y = gFieldEffectArguments[1]; SetSpritePosToOffsetMapCoords(&x, &y, 8, 8); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_TALL_GRASS], x, y, 0); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; sprite->sElevation = gFieldEffectArguments[2]; @@ -317,15 +315,12 @@ u32 FldEff_TallGrass(void) void UpdateTallGrassFieldEffect(struct Sprite *sprite) { - u8 mapNum; - u8 mapGroup; u8 metatileBehavior; u8 localId; u8 objectEventId; - struct ObjectEvent *objectEvent; + u8 mapNum = sprite->sCurrentMap >> 8; + u8 mapGroup = sprite->sCurrentMap; - mapNum = sprite->sCurrentMap >> 8; - mapGroup = sprite->sCurrentMap; if (gCamera.active && (gSaveBlock1Ptr->location.mapNum != mapNum || gSaveBlock1Ptr->location.mapGroup != mapGroup)) { sprite->sX -= gCamera.x; @@ -346,11 +341,9 @@ void UpdateTallGrassFieldEffect(struct Sprite *sprite) else { // Check if the object that triggered the effect has moved away - objectEvent = &gObjectEvents[objectEventId]; - if ((objectEvent->currentCoords.x != sprite->sX - || objectEvent->currentCoords.y != sprite->sY) - && (objectEvent->previousCoords.x != sprite->sX - || objectEvent->previousCoords.y != sprite->sY)) + struct ObjectEvent *objectEvent = &gObjectEvents[objectEventId]; + if ((objectEvent->currentCoords.x != sprite->sX || objectEvent->currentCoords.y != sprite->sY) + && (objectEvent->previousCoords.x != sprite->sX || objectEvent->previousCoords.y != sprite->sY)) sprite->sObjectMoved = TRUE; // Metatile behavior var re-used as subpriority @@ -366,31 +359,28 @@ void UpdateTallGrassFieldEffect(struct Sprite *sprite) u32 FldEff_JumpTallGrass(void) { u8 spriteId; - struct Sprite *sprite; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_JUMP_TALL_GRASS], gFieldEffectArguments[0], gFieldEffectArguments[1], 0); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->sElevation = gFieldEffectArguments[2]; - sprite->sFldEff = FLDEFF_JUMP_TALL_GRASS; + sprite->sJumpElevation = gFieldEffectArguments[2]; + sprite->sJumpFldEff = FLDEFF_JUMP_TALL_GRASS; } return 0; } u8 FindTallGrassFieldEffectSpriteId(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y) { - struct Sprite *sprite; u8 i; - for (i = 0; i < MAX_SPRITES; i ++) { if (gSprites[i].inUse) { - sprite = &gSprites[i]; + struct Sprite *sprite = &gSprites[i]; if (sprite->callback == UpdateTallGrassFieldEffect && (x == sprite->sX && y == sprite->sY) && localId == (u8)(sprite->sLocalId) @@ -404,18 +394,14 @@ u8 FindTallGrassFieldEffectSpriteId(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s u32 FldEff_LongGrass(void) { - s16 x; - s16 y; u8 spriteId; - struct Sprite *sprite; - - x = gFieldEffectArguments[0]; - y = gFieldEffectArguments[1]; + s16 x = gFieldEffectArguments[0]; + s16 y = gFieldEffectArguments[1]; SetSpritePosToOffsetMapCoords(&x, &y, 8, 8); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_LONG_GRASS], x, y, 0); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = ElevationToPriority(gFieldEffectArguments[2]); sprite->sElevation = gFieldEffectArguments[2]; @@ -433,15 +419,12 @@ u32 FldEff_LongGrass(void) void UpdateLongGrassFieldEffect(struct Sprite *sprite) { - u8 mapNum; - u8 mapGroup; u8 metatileBehavior; u8 localId; u8 objectEventId; - struct ObjectEvent *objectEvent; + u8 mapNum = sprite->sCurrentMap >> 8; + u8 mapGroup = sprite->sCurrentMap; - mapNum = sprite->sCurrentMap >> 8; - mapGroup = sprite->sCurrentMap; if (gCamera.active && (gSaveBlock1Ptr->location.mapNum != mapNum || gSaveBlock1Ptr->location.mapGroup != mapGroup)) { sprite->sX -= gCamera.x; @@ -451,7 +434,7 @@ void UpdateLongGrassFieldEffect(struct Sprite *sprite) localId = sprite->sLocalId; mapNum = sprite->sMapNum; mapGroup = sprite->sMapGroup; - metatileBehavior = MapGridGetMetatileBehaviorAt(sprite->data[1], sprite->data[2]); + metatileBehavior = MapGridGetMetatileBehaviorAt(sprite->sX, sprite->sY); if (TryGetObjectEventIdByLocalIdAndMap(localId, mapNum, mapGroup, &objectEventId) || !MetatileBehavior_IsLongGrass(metatileBehavior) || (sprite->sObjectMoved && sprite->animEnded)) @@ -461,11 +444,9 @@ void UpdateLongGrassFieldEffect(struct Sprite *sprite) else { // Check if the object that triggered the effect has moved away - objectEvent = &gObjectEvents[objectEventId]; - if ((objectEvent->currentCoords.x != sprite->data[1] - || objectEvent->currentCoords.y != sprite->data[2]) - && (objectEvent->previousCoords.x != sprite->data[1] - || objectEvent->previousCoords.y != sprite->data[2])) + struct ObjectEvent *objectEvent = &gObjectEvents[objectEventId]; + if ((objectEvent->currentCoords.x != sprite->sX || objectEvent->currentCoords.y != sprite->sY) + && (objectEvent->previousCoords.x != sprite->sX || objectEvent->previousCoords.y != sprite->sY)) sprite->sObjectMoved = TRUE; UpdateObjectEventSpriteInvisibility(sprite, FALSE); @@ -473,6 +454,7 @@ void UpdateLongGrassFieldEffect(struct Sprite *sprite) } } +#undef sElevation #undef sX #undef sY #undef sMapNum @@ -486,41 +468,42 @@ void UpdateLongGrassFieldEffect(struct Sprite *sprite) u32 FldEff_JumpLongGrass(void) { u8 spriteId; - struct Sprite *sprite; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_JUMP_LONG_GRASS], gFieldEffectArguments[0], gFieldEffectArguments[1], 0); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->sElevation = gFieldEffectArguments[2]; - sprite->sFldEff = FLDEFF_JUMP_LONG_GRASS; + sprite->sJumpElevation = gFieldEffectArguments[2]; + sprite->sJumpFldEff = FLDEFF_JUMP_LONG_GRASS; } return 0; } +// Sprite data for FLDEFF_SHORT_GRASS +#define sLocalId data[0] +#define sMapNum data[1] +#define sMapGroup data[2] +#define sPrevX data[3] +#define sPrevY data[4] + u32 FldEff_ShortGrass(void) { - u8 objectEventId; - struct ObjectEvent *objectEvent; - u8 spriteId; - struct Sprite *sprite; - - objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); - objectEvent = &gObjectEvents[objectEventId]; - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SHORT_GRASS], 0, 0, 0); + u8 objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + struct ObjectEvent *objectEvent = &gObjectEvents[objectEventId]; + u8 spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SHORT_GRASS], 0, 0, 0); if (spriteId != MAX_SPRITES) { - sprite = &(gSprites[spriteId]); + struct Sprite *sprite = &(gSprites[spriteId]); sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gSprites[objectEvent->spriteId].oam.priority; - sprite->data[0] = gFieldEffectArguments[0]; - sprite->data[1] = gFieldEffectArguments[1]; - sprite->data[2] = gFieldEffectArguments[2]; - sprite->data[3] = gSprites[objectEvent->spriteId].x; - sprite->data[4] = gSprites[objectEvent->spriteId].y; + sprite->sLocalId = gFieldEffectArguments[0]; + sprite->sMapNum = gFieldEffectArguments[1]; + sprite->sMapGroup = gFieldEffectArguments[2]; + sprite->sPrevX = gSprites[objectEvent->spriteId].x; + sprite->sPrevY = gSprites[objectEvent->spriteId].y; } return 0; } @@ -528,32 +511,28 @@ u32 FldEff_ShortGrass(void) void UpdateShortGrassFieldEffect(struct Sprite *sprite) { u8 objectEventId; - s16 x; - s16 y; - const struct ObjectEventGraphicsInfo *graphicsInfo; - struct Sprite *linkedSprite; - if (TryGetObjectEventIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &objectEventId) || !gObjectEvents[objectEventId].inShortGrass) + if (TryGetObjectEventIdByLocalIdAndMap(sprite->sLocalId, sprite->sMapNum, sprite->sMapGroup, &objectEventId) || !gObjectEvents[objectEventId].inShortGrass) { FieldEffectStop(sprite, FLDEFF_SHORT_GRASS); } else { - graphicsInfo = GetObjectEventGraphicsInfo(gObjectEvents[objectEventId].graphicsId); - linkedSprite = &gSprites[gObjectEvents[objectEventId].spriteId]; - y = linkedSprite->y; - x = linkedSprite->x; - if (x != sprite->data[3] || y != sprite->data[4]) + const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(gObjectEvents[objectEventId].graphicsId); + struct Sprite *linkedSprite = &gSprites[gObjectEvents[objectEventId].spriteId]; + s16 parentY = linkedSprite->y; + s16 parentX = linkedSprite->x; + if (parentX != sprite->sPrevX || parentY != sprite->sPrevY) { - sprite->data[3] = x; - sprite->data[4] = y; + // Parent sprite moved, try to restart the animation + sprite->sPrevX = parentX; + sprite->sPrevY = parentY; if (sprite->animEnded) - { StartSpriteAnim(sprite, 0); - } } - sprite->x = x; - sprite->y = y; + sprite->x = parentX; + sprite->y = parentY; + // Offset the grass sprite halfway down the parent sprite. sprite->y2 = (graphicsInfo->height >> 1) - 8; sprite->subpriority = linkedSprite->subpriority - 1; sprite->oam.priority = linkedSprite->oam.priority; @@ -561,19 +540,29 @@ void UpdateShortGrassFieldEffect(struct Sprite *sprite) } } +#undef sLocalId +#undef sMapNum +#undef sMapGroup +#undef sPrevX +#undef sPrevY + +// Sprite data for FLDEFF_SAND_FOOTPRINTS, FLDEFF_DEEP_SAND_FOOTPRINTS, and FLDEFF_BIKE_TIRE_TRACKS +#define sState data[0] +#define sTimer data[1] +#define sFldEff data[7] + u32 FldEff_SandFootprints(void) { u8 spriteId; - struct Sprite *sprite; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SAND_FOOTPRINTS], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data[7] = FLDEFF_SAND_FOOTPRINTS; + sprite->sFldEff = FLDEFF_SAND_FOOTPRINTS; StartSpriteAnim(sprite, gFieldEffectArguments[4]); } return 0; @@ -582,16 +571,15 @@ u32 FldEff_SandFootprints(void) u32 FldEff_DeepSandFootprints(void) { u8 spriteId; - struct Sprite *sprite; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_DEEP_SAND_FOOTPRINTS], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data[7] = FLDEFF_DEEP_SAND_FOOTPRINTS; + sprite->sFldEff = FLDEFF_DEEP_SAND_FOOTPRINTS; StartSpriteAnim(sprite, gFieldEffectArguments[4]); } return spriteId; @@ -600,16 +588,15 @@ u32 FldEff_DeepSandFootprints(void) u32 FldEff_BikeTireTracks(void) { u8 spriteId; - struct Sprite *sprite; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_BIKE_TIRE_TRACKS], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data[7] = FLDEFF_BIKE_TIRE_TRACKS; + sprite->sFldEff = FLDEFF_BIKE_TIRE_TRACKS; StartSpriteAnim(sprite, gFieldEffectArguments[4]); } return spriteId; @@ -622,14 +609,14 @@ void (*const gFadeFootprintsTireTracksFuncs[])(struct Sprite *) = { void UpdateFootprintsTireTracksFieldEffect(struct Sprite *sprite) { - gFadeFootprintsTireTracksFuncs[sprite->data[0]](sprite); + gFadeFootprintsTireTracksFuncs[sprite->sState](sprite); } static void FadeFootprintsTireTracks_Step0(struct Sprite *sprite) { // Wait 40 frames before the flickering starts. - if (++sprite->data[1] > 40) - sprite->data[0] = 1; + if (++sprite->sTimer > 40) + sprite->sState = 1; UpdateObjectEventSpriteInvisibility(sprite, FALSE); } @@ -637,36 +624,37 @@ static void FadeFootprintsTireTracks_Step0(struct Sprite *sprite) static void FadeFootprintsTireTracks_Step1(struct Sprite *sprite) { sprite->invisible ^= 1; - sprite->data[1]++; + sprite->sTimer++; UpdateObjectEventSpriteInvisibility(sprite, sprite->invisible); - if (sprite->data[1] > 56) - { - FieldEffectStop(sprite, sprite->data[7]); - } + if (sprite->sTimer > 56) + FieldEffectStop(sprite, sprite->sFldEff); } +#undef sState +#undef sTimer +#undef sFldEff + +// Sprite data for FLDEFF_SPLASH +#define sLocalId data[0] +#define sMapNum data[1] +#define sMapGroup data[2] + u32 FldEff_Splash(void) { - u8 objectEventId; - struct ObjectEvent *objectEvent; - u8 spriteId; - struct Sprite *sprite; - const struct ObjectEventGraphicsInfo *graphicsInfo; - struct Sprite *linkedSprite; - - objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); - objectEvent = &gObjectEvents[objectEventId]; - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SPLASH], 0, 0, 0); + u8 objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + struct ObjectEvent *objectEvent = &gObjectEvents[objectEventId]; + u8 spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SPLASH], 0, 0, 0); if (spriteId != MAX_SPRITES) { - graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); - sprite = &gSprites[spriteId]; + struct Sprite *linkedSprite; + const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; linkedSprite = &gSprites[objectEvent->spriteId]; sprite->oam.priority = linkedSprite->oam.priority; - sprite->data[0] = gFieldEffectArguments[0]; - sprite->data[1] = gFieldEffectArguments[1]; - sprite->data[2] = gFieldEffectArguments[2]; + sprite->sLocalId = gFieldEffectArguments[0]; + sprite->sMapNum = gFieldEffectArguments[1]; + sprite->sMapGroup = gFieldEffectArguments[2]; sprite->y2 = (graphicsInfo->height >> 1) - 4; PlaySE(SE_PUDDLE); } @@ -677,7 +665,7 @@ void UpdateSplashFieldEffect(struct Sprite *sprite) { u8 objectEventId; - if (sprite->animEnded || TryGetObjectEventIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &objectEventId)) + if (sprite->animEnded || TryGetObjectEventIdByLocalIdAndMap(sprite->sLocalId, sprite->sMapNum, sprite->sMapGroup, &objectEventId)) { FieldEffectStop(sprite, FLDEFF_SPLASH); } @@ -689,20 +677,23 @@ void UpdateSplashFieldEffect(struct Sprite *sprite) } } +#undef sLocalId +#undef sMapNum +#undef sMapGroup + u32 FldEff_JumpSmallSplash(void) { u8 spriteId; - struct Sprite *sprite; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_JUMP_SMALL_SPLASH], gFieldEffectArguments[0], gFieldEffectArguments[1], 0); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data[0] = gFieldEffectArguments[2]; - sprite->data[1] = FLDEFF_JUMP_SMALL_SPLASH; + sprite->sJumpElevation = gFieldEffectArguments[2]; + sprite->sJumpFldEff = FLDEFF_JUMP_SMALL_SPLASH; } return 0; } @@ -710,44 +701,44 @@ u32 FldEff_JumpSmallSplash(void) u32 FldEff_JumpBigSplash(void) { u8 spriteId; - struct Sprite *sprite; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_JUMP_BIG_SPLASH], gFieldEffectArguments[0], gFieldEffectArguments[1], 0); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data[0] = gFieldEffectArguments[2]; - sprite->data[1] = FLDEFF_JUMP_BIG_SPLASH; + sprite->sJumpElevation = gFieldEffectArguments[2]; + sprite->sJumpFldEff = FLDEFF_JUMP_BIG_SPLASH; } return 0; } +// Sprite data for FLDEFF_FEET_IN_FLOWING_WATER +#define sLocalId data[0] +#define sMapNum data[1] +#define sMapGroup data[2] +#define sPrevX data[3] +#define sPrevY data[4] + u32 FldEff_FeetInFlowingWater(void) { - u8 objectEventId; - struct ObjectEvent *objectEvent; - u8 spriteId; - struct Sprite *sprite; - const struct ObjectEventGraphicsInfo *graphicsInfo; - - objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); - objectEvent = &gObjectEvents[objectEventId]; - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SPLASH], 0, 0, 0); + u8 objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + struct ObjectEvent *objectEvent = &gObjectEvents[objectEventId]; + u8 spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SPLASH], 0, 0, 0); if (spriteId != MAX_SPRITES) { - graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); - sprite = &gSprites[spriteId]; + const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); + struct Sprite *sprite = &gSprites[spriteId]; sprite->callback = UpdateFeetInFlowingWaterFieldEffect; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gSprites[objectEvent->spriteId].oam.priority; - sprite->data[0] = gFieldEffectArguments[0]; - sprite->data[1] = gFieldEffectArguments[1]; - sprite->data[2] = gFieldEffectArguments[2]; - sprite->data[3] = -1; - sprite->data[4] = -1; + sprite->sLocalId = gFieldEffectArguments[0]; + sprite->sMapNum = gFieldEffectArguments[1]; + sprite->sMapGroup = gFieldEffectArguments[2]; + sprite->sPrevX = -1; + sprite->sPrevY = -1; sprite->y2 = (graphicsInfo->height >> 1) - 4; StartSpriteAnim(sprite, 1); } @@ -757,69 +748,70 @@ u32 FldEff_FeetInFlowingWater(void) static void UpdateFeetInFlowingWaterFieldEffect(struct Sprite *sprite) { u8 objectEventId; - struct Sprite *linkedSprite; - struct ObjectEvent *objectEvent; - if (TryGetObjectEventIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &objectEventId) || !gObjectEvents[objectEventId].inShallowFlowingWater) + if (TryGetObjectEventIdByLocalIdAndMap(sprite->sLocalId, sprite->sMapNum, sprite->sMapGroup, &objectEventId) || !gObjectEvents[objectEventId].inShallowFlowingWater) { FieldEffectStop(sprite, FLDEFF_FEET_IN_FLOWING_WATER); } else { - objectEvent = &gObjectEvents[objectEventId]; - linkedSprite = &gSprites[objectEvent->spriteId]; + struct ObjectEvent *objectEvent = &gObjectEvents[objectEventId]; + struct Sprite *linkedSprite = &gSprites[objectEvent->spriteId]; sprite->x = linkedSprite->x; sprite->y = linkedSprite->y; sprite->subpriority = linkedSprite->subpriority; UpdateObjectEventSpriteInvisibility(sprite, FALSE); - if (objectEvent->currentCoords.x != sprite->data[3] || objectEvent->currentCoords.y != sprite->data[4]) + if (objectEvent->currentCoords.x != sprite->sPrevX || objectEvent->currentCoords.y != sprite->sPrevY) { - sprite->data[3] = objectEvent->currentCoords.x; - sprite->data[4] = objectEvent->currentCoords.y; + sprite->sPrevX = objectEvent->currentCoords.x; + sprite->sPrevY = objectEvent->currentCoords.y; if (!sprite->invisible) - { PlaySE(SE_PUDDLE); - } } } } +#undef sLocalId +#undef sMapNum +#undef sMapGroup +#undef sPrevX +#undef sPrevY + u32 FldEff_Ripple(void) { - u8 spriteId; - struct Sprite *sprite; - - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_RIPPLE], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + u8 spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_RIPPLE], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data[0] = FLDEFF_RIPPLE; + sprite->sWaitFldEff = FLDEFF_RIPPLE; } return 0; } +// Sprite data for FLDEFF_HOT_SPRINGS_WATER +#define sLocalId data[0] +#define sMapNum data[1] +#define sMapGroup data[2] +#define sPrevX data[3] +#define sPrevY data[4] + u32 FldEff_HotSpringsWater(void) { - u8 objectEventId; - struct ObjectEvent *objectEvent; - u8 spriteId; - struct Sprite *sprite; - - objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); - objectEvent = &gObjectEvents[objectEventId]; - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_HOT_SPRINGS_WATER], 0, 0, 0); + u8 objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + struct ObjectEvent *objectEvent = &gObjectEvents[objectEventId]; + u8 spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_HOT_SPRINGS_WATER], 0, 0, 0); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gSprites[objectEvent->spriteId].oam.priority; - sprite->data[0] = gFieldEffectArguments[0]; - sprite->data[1] = gFieldEffectArguments[1]; - sprite->data[2] = gFieldEffectArguments[2]; - sprite->data[3] = gSprites[objectEvent->spriteId].x; - sprite->data[4] = gSprites[objectEvent->spriteId].y; + sprite->sLocalId = gFieldEffectArguments[0]; + sprite->sMapNum = gFieldEffectArguments[1]; + sprite->sMapGroup = gFieldEffectArguments[2]; + sprite->sPrevX = gSprites[objectEvent->spriteId].x; // Unused + sprite->sPrevY = gSprites[objectEvent->spriteId].y; // Unused } return 0; } @@ -827,17 +819,15 @@ u32 FldEff_HotSpringsWater(void) void UpdateHotSpringsWaterFieldEffect(struct Sprite *sprite) { u8 objectEventId; - const struct ObjectEventGraphicsInfo *graphicsInfo; - struct Sprite *linkedSprite; - if (TryGetObjectEventIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &objectEventId) || !gObjectEvents[objectEventId].inHotSprings) + if (TryGetObjectEventIdByLocalIdAndMap(sprite->sLocalId, sprite->sMapNum, sprite->sMapGroup, &objectEventId) || !gObjectEvents[objectEventId].inHotSprings) { FieldEffectStop(sprite, FLDEFF_HOT_SPRINGS_WATER); } else { - graphicsInfo = GetObjectEventGraphicsInfo(gObjectEvents[objectEventId].graphicsId); - linkedSprite = &gSprites[gObjectEvents[objectEventId].spriteId]; + const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(gObjectEvents[objectEventId].graphicsId); + struct Sprite *linkedSprite = &gSprites[gObjectEvents[objectEventId].spriteId]; sprite->x = linkedSprite->x; sprite->y = (graphicsInfo->height >> 1) + linkedSprite->y - 8; sprite->subpriority = linkedSprite->subpriority - 1; @@ -845,19 +835,24 @@ void UpdateHotSpringsWaterFieldEffect(struct Sprite *sprite) } } +#undef sLocalId +#undef sMapNum +#undef sMapGroup +#undef sPrevX +#undef sPrevY + u32 FldEff_UnusedGrass(void) { u8 spriteId; - struct Sprite *sprite; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_UNUSED_GRASS], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data[0] = FLDEFF_UNUSED_GRASS; + sprite->sWaitFldEff = FLDEFF_UNUSED_GRASS; } return 0; } @@ -865,16 +860,15 @@ u32 FldEff_UnusedGrass(void) u32 FldEff_UnusedGrass2(void) { u8 spriteId; - struct Sprite *sprite; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_UNUSED_GRASS_2], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data[0] = FLDEFF_UNUSED_GRASS_2; + sprite->sWaitFldEff = FLDEFF_UNUSED_GRASS_2; } return 0; } @@ -882,16 +876,15 @@ u32 FldEff_UnusedGrass2(void) u32 FldEff_UnusedSand(void) { u8 spriteId; - struct Sprite *sprite; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_UNUSED_SAND], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data[0] = FLDEFF_UNUSED_SAND; + sprite->sWaitFldEff = FLDEFF_UNUSED_SAND; } return 0; } @@ -899,16 +892,15 @@ u32 FldEff_UnusedSand(void) u32 FldEff_WaterSurfacing(void) { u8 spriteId; - struct Sprite *sprite; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_WATER_SURFACING], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data[0] = FLDEFF_WATER_SURFACING; + sprite->sWaitFldEff = FLDEFF_WATER_SURFACING; } return 0; } @@ -933,18 +925,15 @@ void StartAshFieldEffect(s16 x, s16 y, u16 metatileId, s16 delay) u32 FldEff_Ash(void) { - s16 x; - s16 y; u8 spriteId; - struct Sprite *sprite; - x = gFieldEffectArguments[0]; - y = gFieldEffectArguments[1]; + s16 x = gFieldEffectArguments[0]; + s16 y = gFieldEffectArguments[1]; SetSpritePosToOffsetMapCoords(&x, &y, 8, 8); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_ASH], x, y, gFieldEffectArguments[2]); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; sprite->sX = gFieldEffectArguments[0]; @@ -998,27 +987,30 @@ static void UpdateAshFieldEffect_End(struct Sprite *sprite) #undef sDelay // Sprite data for FLDEFF_SURF_BLOB -#define tBitfield data[0] -#define tPlayerOffset data[1] -#define tPlayerObjId data[2] - +#define sBitfield data[0] +#define sPlayerOffset data[1] +#define sPlayerObjId data[2] +#define sVelocity data[3] +#define sTimer data[4] +#define sIntervalIdx data[5] +#define sPrevX data[6] +#define sPrevY data[7] u32 FldEff_SurfBlob(void) { u8 spriteId; - struct Sprite *sprite; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SURF_BLOB], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x96); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SURF_BLOB], gFieldEffectArguments[0], gFieldEffectArguments[1], 150); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.paletteNum = 0; - sprite->tPlayerObjId = gFieldEffectArguments[2]; - sprite->data[3] = -1; - sprite->data[6] = -1; - sprite->data[7] = -1; + sprite->sPlayerObjId = gFieldEffectArguments[2]; + sprite->sVelocity = -1; + sprite->sPrevX = -1; + sprite->sPrevY = -1; } FieldEffectActiveListRemove(FLDEFF_SURF_BLOB); return spriteId; @@ -1027,43 +1019,40 @@ u32 FldEff_SurfBlob(void) void SetSurfBlob_BobState(u8 spriteId, u8 state) { - gSprites[spriteId].data[0] = (gSprites[spriteId].data[0] & ~0xF) | (state & 0xF); + gSprites[spriteId].sBitfield = (gSprites[spriteId].sBitfield & ~0xF) | (state & 0xF); } void SetSurfBlob_DontSyncAnim(u8 spriteId, bool8 dontSync) { - gSprites[spriteId].data[0] = (gSprites[spriteId].data[0] & ~0xF0) | ((dontSync & 0xF) << 4); + gSprites[spriteId].sBitfield = (gSprites[spriteId].sBitfield & ~0xF0) | ((dontSync & 0xF) << 4); } void SetSurfBlob_PlayerOffset(u8 spriteId, bool8 hasOffset, s16 offset) { - gSprites[spriteId].data[0] = (gSprites[spriteId].data[0] & ~0xF00) | ((hasOffset & 0xF) << 8); - gSprites[spriteId].tPlayerOffset = offset; + gSprites[spriteId].sBitfield = (gSprites[spriteId].sBitfield & ~0xF00) | ((hasOffset & 0xF) << 8); + gSprites[spriteId].sPlayerOffset = offset; } static u8 GetSurfBlob_BobState(struct Sprite *sprite) { - return sprite->data[0] & 0xF; + return sprite->sBitfield & 0xF; } // Never TRUE static u8 GetSurfBlob_DontSyncAnim(struct Sprite *sprite) { - return (sprite->data[0] & 0xF0) >> 4; + return (sprite->sBitfield & 0xF0) >> 4; } static u8 GetSurfBlob_HasPlayerOffset(struct Sprite *sprite) { - return (sprite->data[0] & 0xF00) >> 8; + return (sprite->sBitfield & 0xF00) >> 8; } void UpdateSurfBlobFieldEffect(struct Sprite *sprite) { - struct ObjectEvent *playerObj; - struct Sprite *playerSprite; - - playerObj = &gObjectEvents[sprite->tPlayerObjId]; - playerSprite = &gSprites[playerObj->spriteId]; + struct ObjectEvent *playerObj = &gObjectEvents[sprite->sPlayerObjId]; + struct Sprite *playerSprite = &gSprites[playerObj->spriteId]; SynchroniseSurfAnim(playerObj, sprite); SynchroniseSurfPosition(playerObj, sprite); UpdateBobbingEffect(playerObj, playerSprite, sprite); @@ -1096,17 +1085,19 @@ void SynchroniseSurfPosition(struct ObjectEvent *playerObj, struct Sprite *sprit s16 y = playerObj->currentCoords.y; s32 spriteY = sprite->y2; - if (spriteY == 0 && (x != sprite->data[6] || y != sprite->data[7])) + if (spriteY == 0 && (x != sprite->sPrevX || y != sprite->sPrevY)) { - sprite->data[5] = spriteY; - sprite->data[6] = x; - sprite->data[7] = y; - for (i = DIR_SOUTH; i <= DIR_EAST; i++, x = sprite->data[6], y = sprite->data[7]) + // Player is moving while surfing, update position. + sprite->sIntervalIdx = 0; + sprite->sPrevX = x; + sprite->sPrevY = y; + for (i = DIR_SOUTH; i <= DIR_EAST; i++, x = sprite->sPrevX, y = sprite->sPrevY) { MoveCoords(i, &x, &y); if (MapGridGetElevationAt(x, y) == 3) { - sprite->data[5]++; + // While dismounting the surf blob bobs at a slower rate + sprite->sIntervalIdx++; break; } } @@ -1115,46 +1106,54 @@ void SynchroniseSurfPosition(struct ObjectEvent *playerObj, struct Sprite *sprit static void UpdateBobbingEffect(struct ObjectEvent *playerObj, struct Sprite *playerSprite, struct Sprite *sprite) { - u16 intervals[] = {3, 7}; + // The frame interval at which to update the blob's y movement. + // Normally every 4th frame, but every 8th frame while dismounting. + u16 intervals[] = {0x3, 0x7}; + u8 bobState = GetSurfBlob_BobState(sprite); if (bobState != BOB_NONE) { - // Update bobbing position of surf blob - if (((u16)(++sprite->data[4]) & intervals[sprite->data[5]]) == 0) - { - sprite->y2 += sprite->data[3]; - } - if ((sprite->data[4] & 15) == 0) - { - sprite->data[3] = -sprite->data[3]; - } + // Update vertical position of surf blob + if (((u16)(++sprite->sTimer) & intervals[sprite->sIntervalIdx]) == 0) + sprite->y2 += sprite->sVelocity; + + // Reverse bob direction + if ((sprite->sTimer & 15) == 0) + sprite->sVelocity = -sprite->sVelocity; + if (bobState != BOB_JUST_MON) { - // Update bobbing position of player + // Update vertical position of player if (!GetSurfBlob_HasPlayerOffset(sprite)) playerSprite->y2 = sprite->y2; else - playerSprite->y2 = sprite->tPlayerOffset + sprite->y2; + playerSprite->y2 = sprite->sPlayerOffset + sprite->y2; sprite->x = playerSprite->x; sprite->y = playerSprite->y + 8; } } } +#undef sBitfield +#undef sPlayerOffset +#undef sPlayerObjId +#undef sVelocity +#undef sTimer +#undef sIntervalIdx +#undef sPrevX +#undef sPrevY + #define sSpriteId data[0] #define sBobY data[1] #define sTimer data[2] u8 StartUnderwaterSurfBlobBobbing(u8 blobSpriteId) { - u8 spriteId; - struct Sprite *sprite; - // Create a dummy sprite with its own callback // that tracks the actual surf blob sprite and // makes it bob up and down underwater - spriteId = CreateSpriteAtEnd(&gDummySpriteTemplate, 0, 0, -1); - sprite = &gSprites[spriteId]; + u8 spriteId = CreateSpriteAtEnd(&gDummySpriteTemplate, 0, 0, -1); + struct Sprite *sprite = &gSprites[spriteId]; sprite->callback = SpriteCB_UnderwaterSurfBlob; sprite->invisible = TRUE; sprite->sSpriteId = blobSpriteId; @@ -1164,17 +1163,14 @@ u8 StartUnderwaterSurfBlobBobbing(u8 blobSpriteId) static void SpriteCB_UnderwaterSurfBlob(struct Sprite *sprite) { - struct Sprite *blobSprite; + struct Sprite *blobSprite = &gSprites[sprite->sSpriteId]; - blobSprite = &gSprites[sprite->sSpriteId]; + // Update vertical position of surf blob if (((sprite->sTimer++) & 3) == 0) - { blobSprite->y2 += sprite->sBobY; - } + // Reverse direction if ((sprite->sTimer & 15) == 0) - { sprite->sBobY = -sprite->sBobY; - } } #undef sSpriteId @@ -1184,43 +1180,43 @@ static void SpriteCB_UnderwaterSurfBlob(struct Sprite *sprite) u32 FldEff_Dust(void) { u8 spriteId; - struct Sprite *sprite; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_GROUND_IMPACT_DUST], gFieldEffectArguments[0], gFieldEffectArguments[1], 0); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data[0] = gFieldEffectArguments[2]; - sprite->data[1] = FLDEFF_DUST; + sprite->sJumpElevation = gFieldEffectArguments[2]; + sprite->sJumpFldEff = FLDEFF_DUST; } return 0; } +// Sprite data for FLDEFF_SAND_PILE +#define sLocalId data[0] +#define sMapNum data[1] +#define sMapGroup data[2] +#define sPrevX data[3] +#define sPrevY data[4] + u32 FldEff_SandPile(void) { - u8 objectEventId; - struct ObjectEvent *objectEvent; - u8 spriteId; - struct Sprite *sprite; - const struct ObjectEventGraphicsInfo *graphicsInfo; - - objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); - objectEvent = &gObjectEvents[objectEventId]; - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SAND_PILE], 0, 0, 0); + u8 objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + struct ObjectEvent *objectEvent = &gObjectEvents[objectEventId]; + u8 spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SAND_PILE], 0, 0, 0); if (spriteId != MAX_SPRITES) { - graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); - sprite = &gSprites[spriteId]; + const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gSprites[objectEvent->spriteId].oam.priority; - sprite->data[0] = gFieldEffectArguments[0]; - sprite->data[1] = gFieldEffectArguments[1]; - sprite->data[2] = gFieldEffectArguments[2]; - sprite->data[3] = gSprites[objectEvent->spriteId].x; - sprite->data[4] = gSprites[objectEvent->spriteId].y; + sprite->sLocalId = gFieldEffectArguments[0]; + sprite->sMapNum = gFieldEffectArguments[1]; + sprite->sMapGroup = gFieldEffectArguments[2]; + sprite->sPrevX = gSprites[objectEvent->spriteId].x; + sprite->sPrevY = gSprites[objectEvent->spriteId].y; sprite->y2 = (graphicsInfo->height >> 1) - 2; SeekSpriteAnim(sprite, 2); } @@ -1230,81 +1226,85 @@ u32 FldEff_SandPile(void) void UpdateSandPileFieldEffect(struct Sprite *sprite) { u8 objectEventId; - s16 x; - s16 y; - if (TryGetObjectEventIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &objectEventId) || !gObjectEvents[objectEventId].inSandPile) + if (TryGetObjectEventIdByLocalIdAndMap(sprite->sLocalId, sprite->sMapNum, sprite->sMapGroup, &objectEventId) || !gObjectEvents[objectEventId].inSandPile) { FieldEffectStop(sprite, FLDEFF_SAND_PILE); } else { - y = gSprites[gObjectEvents[objectEventId].spriteId].y; - x = gSprites[gObjectEvents[objectEventId].spriteId].x; - if (x != sprite->data[3] || y != sprite->data[4]) + s16 parentY = gSprites[gObjectEvents[objectEventId].spriteId].y; + s16 parentX = gSprites[gObjectEvents[objectEventId].spriteId].x; + if (parentX != sprite->sPrevX || parentY != sprite->sPrevY) { - sprite->data[3] = x; - sprite->data[4] = y; + sprite->sPrevX = parentX; + sprite->sPrevY = parentY; if (sprite->animEnded) - { StartSpriteAnim(sprite, 0); - } } - sprite->x = x; - sprite->y = y; + sprite->x = parentX; + sprite->y = parentY; sprite->subpriority = gSprites[gObjectEvents[objectEventId].spriteId].subpriority; UpdateObjectEventSpriteInvisibility(sprite, FALSE); } } +#undef sLocalId +#undef sMapNum +#undef sMapGroup +#undef sPrevX +#undef sPrevY + u32 FldEff_Bubbles(void) { u8 spriteId; - struct Sprite *sprite; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 0); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_BUBBLES], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x52); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_BUBBLES], gFieldEffectArguments[0], gFieldEffectArguments[1], 82); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = 1; } return 0; } +#define sY data[0] + void UpdateBubblesFieldEffect(struct Sprite *sprite) { - sprite->data[0] += 0x80; - sprite->data[0] &= 0x100; - sprite->y -= sprite->data[0] >> 8; + // Move up 1 every other frame. + sprite->sY += ((1 << 8) / 2); + sprite->sY &= (1 << 8); + sprite->y -= sprite->sY >> 8; UpdateObjectEventSpriteInvisibility(sprite, FALSE); if (sprite->invisible || sprite->animEnded) - { FieldEffectStop(sprite, FLDEFF_BUBBLES); - } } +#undef sY + u32 FldEff_BerryTreeGrowthSparkle(void) { u8 spriteId; - struct Sprite *sprite; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 4); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SPARKLE], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; sprite->oam.paletteNum = 5; - sprite->data[0] = FLDEFF_BERRY_TREE_GROWTH_SPARKLE; + sprite->sWaitFldEff = FLDEFF_BERRY_TREE_GROWTH_SPARKLE; } return 0; } // Sprite data for FLDEFF_TREE_DISGUISE / FLDEFF_MOUNTAIN_DISGUISE / FLDEFF_SAND_DISGUISE #define sState data[0] +#define sFldEff data[1] #define sLocalId data[2] #define sMapNum data[3] #define sMapGroup data[4] @@ -1328,7 +1328,6 @@ u32 ShowSandDisguiseFieldEffect(void) static u32 ShowDisguiseFieldEffect(u8 fldEff, u8 fldEffObj, u8 paletteNum) { u8 spriteId; - struct Sprite *sprite; if (TryGetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2], &spriteId)) { @@ -1338,7 +1337,7 @@ static u32 ShowDisguiseFieldEffect(u8 fldEff, u8 fldEffObj, u8 paletteNum) spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[fldEffObj], 0, 0, 0); if (spriteId != MAX_SPRITES) { - sprite = &gSprites[spriteId]; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled ++; sprite->oam.paletteNum = paletteNum; sprite->sFldEff = fldEff; @@ -1405,6 +1404,7 @@ bool8 UpdateRevealDisguise(struct ObjectEvent *objectEvent) } #undef sState +#undef sFldEff #undef sLocalId #undef sMapNum #undef sMapGroup @@ -1421,7 +1421,7 @@ u32 FldEff_Sparkle(void) gFieldEffectArguments[0] += MAP_OFFSET; gFieldEffectArguments[1] += MAP_OFFSET; SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SMALL_SPARKLE], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x52); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SMALL_SPARKLE], gFieldEffectArguments[0], gFieldEffectArguments[1], 82); if (spriteId != MAX_SPRITES) { gSprites[spriteId].oam.priority = gFieldEffectArguments[2]; @@ -1449,7 +1449,9 @@ void UpdateSparkleFieldEffect(struct Sprite *sprite) #undef sEndTimer #define sTimer data[0] +#define sMoveTimer data[1] #define sState data[2] +#define sVelocity data[3] #define sStartY data[4] #define sCounter data[5] #define sAnimCounter data[6] @@ -1615,41 +1617,44 @@ void UpdateRayquazaSpotlightEffect(struct Sprite *sprite) if (sprite->sState == 1) { - if ((sprite->data[1] & 7) == 0) - sprite->y2 += sprite->data[3]; - if ((sprite->data[1] & 15) == 0) - sprite->data[3] = -sprite->data[3]; - sprite->data[1]++; + // Update movement + if ((sprite->sMoveTimer & 7) == 0) + sprite->y2 += sprite->sVelocity; + // Reverse direction + if ((sprite->sMoveTimer & 15) == 0) + sprite->sVelocity = -sprite->sVelocity; + sprite->sMoveTimer++; } sprite->sTimer++; } #undef sTimer +#undef sMoveTimer #undef sState #undef sStartY +#undef sVelocity #undef sCounter #undef sAnimCounter #undef sAnimState -// Used by FLDEFF_JUMP_TALL_GRASS and FLDEFF_JUMP_LONG_GRASS void UpdateJumpImpactEffect(struct Sprite *sprite) { if (sprite->animEnded) { - FieldEffectStop(sprite, sprite->sFldEff); + FieldEffectStop(sprite, sprite->sJumpFldEff); } else { UpdateObjectEventSpriteInvisibility(sprite, FALSE); - SetObjectSubpriorityByElevation(sprite->sElevation, sprite, 0); + SetObjectSubpriorityByElevation(sprite->sJumpElevation, sprite, 0); } } void WaitFieldEffectSpriteAnim(struct Sprite *sprite) { if (sprite->animEnded) - FieldEffectStop(sprite, sprite->data[0]); + FieldEffectStop(sprite, sprite->sWaitFldEff); else UpdateObjectEventSpriteInvisibility(sprite, FALSE); } @@ -1658,8 +1663,6 @@ static void UpdateGrassFieldEffectSubpriority(struct Sprite *sprite, u8 elevatio { u8 i; s16 var, xhi, lyhi, yhi, ylo; - const struct ObjectEventGraphicsInfo *graphicsInfo; // Unused Variable - struct Sprite *linkedSprite; SetObjectSubpriorityByElevation(elevation, sprite, subpriority); for (i = 0; i < OBJECT_EVENTS_COUNT; i ++) @@ -1667,8 +1670,9 @@ static void UpdateGrassFieldEffectSubpriority(struct Sprite *sprite, u8 elevatio struct ObjectEvent *objectEvent = &gObjectEvents[i]; if (objectEvent->active) { - graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); - linkedSprite = &gSprites[objectEvent->spriteId]; + const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); // Unused + struct Sprite *linkedSprite = &gSprites[objectEvent->spriteId]; + xhi = sprite->x + sprite->centerToCornerVecX; var = sprite->x - sprite->centerToCornerVecX; if (xhi < linkedSprite->x && var > linkedSprite->x) diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index 06df5d0a33..b01427ebdf 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -1116,7 +1116,7 @@ static u8 GetPartyIdFromSelectionId_(u8 selectionId) static void LoadAndCreateUpDownSprites(void) { - u16 i, spriteId; + u16 i; LoadSpriteSheet(&sSpriteSheet_UpDown); LoadSpritePalette(&sSpritePalette_UpDown); @@ -1126,7 +1126,7 @@ static void LoadAndCreateUpDownSprites(void) { if (sInfo->enhancements[i] != 0) { - spriteId = CreateSprite(&sSpriteTemplate_UpDown, sUpDownCoordsOnGraph[i][0], sUpDownCoordsOnGraph[i][1], 0); + u16 spriteId = CreateSprite(&sSpriteTemplate_UpDown, sUpDownCoordsOnGraph[i][0], sUpDownCoordsOnGraph[i][1], 0); if (spriteId != MAX_SPRITES) { if (sInfo->enhancements[i] != 0) // Always true here @@ -1137,20 +1137,24 @@ static void LoadAndCreateUpDownSprites(void) } } +#define tTimer data[0] + static void SpriteCB_UpDown(struct Sprite *sprite) { - if (sprite->data[0] < 6) + if (sprite->tTimer < 6) sprite->y2 -= 2; - else if (sprite->data[0] < 12) + else if (sprite->tTimer < 12) sprite->y2 += 2; - if (++sprite->data[0] > 60) + if (++sprite->tTimer > 60) { DestroySprite(sprite); sInfo->numEnhancements--; } } +#undef tTimer + static void LoadPartyInfo(void) { u16 i; @@ -1612,12 +1616,15 @@ static void LoadConditionGfx(void) LoadSpritePalette(&spritePalette); } +#define sSpeed data[0] +#define sTargetX data[1] + static void CreateConditionSprite(void) { u16 i; s16 xDiff, xStart; int yStart = 17; - int var = 8; + int speed = 8; struct Sprite **sprites = sMenu->condition; const struct SpriteTemplate *template = &sSpriteTemplate_Condition; @@ -1626,9 +1633,9 @@ static void CreateConditionSprite(void) u8 spriteId = CreateSprite(template, i * xDiff + xStart, yStart, 0); if (spriteId != MAX_SPRITES) { - gSprites[spriteId].data[0] = var; - gSprites[spriteId].data[1] = (i * xDiff) | 0x20; - gSprites[spriteId].data[2] = i; + gSprites[spriteId].sSpeed = speed; + gSprites[spriteId].sTargetX = (i * xDiff) | 0x20; + gSprites[spriteId].data[2] = i; // Unused StartSpriteAnim(&gSprites[spriteId], i); sprites[i] = &gSprites[spriteId]; } @@ -1657,11 +1664,15 @@ static void SpriteCB_Condition(struct Sprite *sprite) { s16 prevX = sprite->x; - sprite->x += sprite->data[0]; - if ((prevX <= sprite->data[1] && sprite->x >= sprite->data[1]) - || (prevX >= sprite->data[1] && sprite->x <= sprite->data[1])) + // Slide onscreen + sprite->x += sprite->sSpeed; + + // Check if target position has been reached/surpassed + if ((prevX <= sprite->sTargetX && sprite->x >= sprite->sTargetX) + || (prevX >= sprite->sTargetX && sprite->x <= sprite->sTargetX)) { - sprite->x = sprite->data[1]; + // End slide onscreen, become static sprite. + sprite->x = sprite->sTargetX; sprite->callback = SpriteCallbackDummy; } } From 9d170c7e3532cec8e7869ea1ad1bd0d9aede91ce Mon Sep 17 00:00:00 2001 From: grunt-lucas Date: Tue, 22 Aug 2023 07:37:48 -0700 Subject: [PATCH 044/120] 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 045/120] 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 a8d0a0d709282e9580ad6d96b5af9e99b6173dbc Mon Sep 17 00:00:00 2001 From: AnonymousRandomPerson Date: Wed, 30 Aug 2023 00:08:19 -0400 Subject: [PATCH 046/120] Replaced decomp list with pret.github.io link --- README.md | 28 +--------------------------- 1 file changed, 1 insertion(+), 27 deletions(-) diff --git a/README.md b/README.md index bca4fd1041..d9148b32ec 100644 --- a/README.md +++ b/README.md @@ -8,30 +8,4 @@ It builds the following ROM: To set up the repository, see [INSTALL.md](INSTALL.md). - -## See also - -Other disassembly and/or decompilation projects: -* [**Pokémon Red and Blue**](https://github.com/pret/pokered) -* [**Pokémon Gold and Silver (Space World '97 demo)**](https://github.com/pret/pokegold-spaceworld) -* [**Pokémon Yellow**](https://github.com/pret/pokeyellow) -* [**Pokémon Trading Card Game**](https://github.com/pret/poketcg) -* [**Pokémon Pinball**](https://github.com/pret/pokepinball) -* [**Pokémon Stadium**](https://github.com/pret/pokestadium) -* [**Pokémon Gold and Silver**](https://github.com/pret/pokegold) -* [**Pokémon Crystal**](https://github.com/pret/pokecrystal) -* [**Pokémon Ruby and Sapphire**](https://github.com/pret/pokeruby) -* [**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 (PRET, #pokeemerald)](https://discord.gg/d5dubZ3) -* [IRC](https://web.libera.chat/?#pret) +For contacts and other pret projects, see [pret.github.io](https://pret.github.io/). From 4439253f3970d6402ee087d91886401a003c7bb7 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sun, 3 Sep 2023 20:57:54 -0400 Subject: [PATCH 047/120] Add include guards for assembly constants files --- constants/gba_constants.inc | 5 +++++ constants/global.inc | 5 +++++ constants/m4a_constants.inc | 5 +++++ constants/tms_hms.inc | 5 +++++ 4 files changed, 20 insertions(+) diff --git a/constants/gba_constants.inc b/constants/gba_constants.inc index 3ff857ee8d..9f51b0f02b 100644 --- a/constants/gba_constants.inc +++ b/constants/gba_constants.inc @@ -1,3 +1,6 @@ +#ifndef GUARD_CONSTANTS_GBA_CONSTANTS_INC +#define GUARD_CONSTANTS_GBA_CONSTANTS_INC + .set PSR_USR_MODE, 0x00000010 .set PSR_FIQ_MODE, 0x00000011 .set PSR_IRQ_MODE, 0x00000012 @@ -511,3 +514,5 @@ .set BLDCNT_TGT2_OBJ, 1 << 12 .set BLDCNT_TGT2_BD, 1 << 13 .set BLDCNT_TGT2_ALL, BLDCNT_TGT2_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BD + +#endif @ GUARD_CONSTANTS_GBA_CONSTANTS_INC diff --git a/constants/global.inc b/constants/global.inc index 621ba2af89..b9462fa26b 100644 --- a/constants/global.inc +++ b/constants/global.inc @@ -1,3 +1,6 @@ +#ifndef GUARD_CONSTANTS_GLOBAL_INC +#define GUARD_CONSTANTS_GLOBAL_INC + .set TRUE, 1 .set FALSE, 0 @@ -20,3 +23,5 @@ .set OBJ_IMAGE_ANIM_H_FLIP, 1 << 6 .set OBJ_IMAGE_ANIM_V_FLIP, 1 << 7 + +#endif @ GUARD_CONSTANTS_GLOBAL_INC diff --git a/constants/m4a_constants.inc b/constants/m4a_constants.inc index 1a744dc7fb..2599b6c4aa 100644 --- a/constants/m4a_constants.inc +++ b/constants/m4a_constants.inc @@ -1,3 +1,6 @@ +#ifndef GUARD_CONSTANTS_M4A_CONSTANTS_INC +#define GUARD_CONSTANTS_M4A_CONSTANTS_INC + .equiv ID_NUMBER, 0x68736d53 .equiv PCM_DMA_BUF_SIZE, 1584 @@ -250,3 +253,5 @@ struct_field o_CgbChannel_nextChannelPointer, 4 struct_field o_CgbChannel_dummy4, 8 struct_field CgbChannel_size, 0 + +#endif @ GUARD_CONSTANTS_M4A_CONSTANTS_INC diff --git a/constants/tms_hms.inc b/constants/tms_hms.inc index 3450aa73ba..4ce6d90328 100644 --- a/constants/tms_hms.inc +++ b/constants/tms_hms.inc @@ -1,3 +1,6 @@ +#ifndef GUARD_CONSTANTS_TMS_HMS_INC +#define GUARD_CONSTANTS_TMS_HMS_INC + #include "constants/tms_hms.h" /* Expands to: @@ -15,3 +18,5 @@ FOREACH_TM(EQUIV_TM) FOREACH_HM(EQUIV_HM) #undef EQUIV_TM #undef EQUIV_HM + +#endif @ GUARD_CONSTANTS_TMS_HMS_INC From d31b168522afe0151378b5fc9a0a433ed8315f5c Mon Sep 17 00:00:00 2001 From: citrusbolt Date: Tue, 5 Sep 2023 06:17:10 -0600 Subject: [PATCH 048/120] Add `blockBoxRS` field to `struct BoxPokemon` --- include/pokemon.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/include/pokemon.h b/include/pokemon.h index f4f6d6989e..6d08f48746 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -202,7 +202,8 @@ struct BoxPokemon u8 isBadEgg:1; u8 hasSpecies:1; u8 isEgg:1; - u8 unused:5; + u8 blockBoxRS:1; // Unused, but Pokémon Box Ruby & Sapphire will refuse to deposit a Pokémon with this flag set + u8 unused:4; u8 otName[PLAYER_NAME_LENGTH]; u8 markings; u16 checksum; From b89722500f776781c30c8b18fbc81986d5089a68 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Tue, 12 Sep 2023 13:09:56 -0300 Subject: [PATCH 049/120] Fixed Mr. Mime capitalization --- include/graphics.h | 14 +++++++------- src/anim_mon_front_pics.c | 2 +- src/data/graphics/pokemon.h | 12 ++++++------ src/data/pokemon/level_up_learnset_pointers.h | 2 +- src/data/pokemon/level_up_learnsets.h | 2 +- src/data/pokemon/pokedex_entries.h | 2 +- src/data/pokemon/pokedex_text.h | 2 +- src/data/pokemon_graphics/back_pic_table.h | 2 +- src/data/pokemon_graphics/footprint_table.h | 2 +- src/data/pokemon_graphics/front_pic_table.h | 2 +- src/data/pokemon_graphics/palette_table.h | 2 +- src/data/pokemon_graphics/shiny_palette_table.h | 2 +- src/data/pokemon_graphics/still_front_pic_table.h | 2 +- src/pokemon_icon.c | 2 +- 14 files changed, 25 insertions(+), 25 deletions(-) diff --git a/include/graphics.h b/include/graphics.h index 9fab084f27..5b13ab562f 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -881,13 +881,13 @@ extern const u32 gMonShinyPalette_Starmie[]; extern const u32 gMonStillFrontPic_Starmie[]; extern const u8 gMonIcon_Starmie[]; extern const u8 gMonFootprint_Starmie[]; -extern const u32 gMonFrontPic_Mrmime[]; -extern const u32 gMonPalette_Mrmime[]; -extern const u32 gMonBackPic_Mrmime[]; -extern const u32 gMonShinyPalette_Mrmime[]; -extern const u32 gMonStillFrontPic_Mrmime[]; -extern const u8 gMonIcon_Mrmime[]; -extern const u8 gMonFootprint_Mrmime[]; +extern const u32 gMonFrontPic_MrMime[]; +extern const u32 gMonPalette_MrMime[]; +extern const u32 gMonBackPic_MrMime[]; +extern const u32 gMonShinyPalette_MrMime[]; +extern const u32 gMonStillFrontPic_MrMime[]; +extern const u8 gMonIcon_MrMime[]; +extern const u8 gMonFootprint_MrMime[]; extern const u32 gMonFrontPic_Scyther[]; extern const u32 gMonPalette_Scyther[]; extern const u32 gMonBackPic_Scyther[]; diff --git a/src/anim_mon_front_pics.c b/src/anim_mon_front_pics.c index e36cf3492d..de70146078 100644 --- a/src/anim_mon_front_pics.c +++ b/src/anim_mon_front_pics.c @@ -123,7 +123,7 @@ const u32 gMonFrontPic_Goldeen[] = INCBIN_U32("graphics/pokemon/goldeen/anim_fro const u32 gMonFrontPic_Seaking[] = INCBIN_U32("graphics/pokemon/seaking/anim_front.4bpp.lz"); const u32 gMonFrontPic_Staryu[] = INCBIN_U32("graphics/pokemon/staryu/anim_front.4bpp.lz"); const u32 gMonFrontPic_Starmie[] = INCBIN_U32("graphics/pokemon/starmie/anim_front.4bpp.lz"); -const u32 gMonFrontPic_Mrmime[] = INCBIN_U32("graphics/pokemon/mr_mime/anim_front.4bpp.lz"); +const u32 gMonFrontPic_MrMime[] = INCBIN_U32("graphics/pokemon/mr_mime/anim_front.4bpp.lz"); const u32 gMonFrontPic_Scyther[] = INCBIN_U32("graphics/pokemon/scyther/anim_front.4bpp.lz"); const u32 gMonFrontPic_Jynx[] = INCBIN_U32("graphics/pokemon/jynx/anim_front.4bpp.lz"); const u32 gMonFrontPic_Electabuzz[] = INCBIN_U32("graphics/pokemon/electabuzz/anim_front.4bpp.lz"); diff --git a/src/data/graphics/pokemon.h b/src/data/graphics/pokemon.h index f69fafec84..fdd9fd87cc 100644 --- a/src/data/graphics/pokemon.h +++ b/src/data/graphics/pokemon.h @@ -845,12 +845,12 @@ const u32 gMonShinyPalette_Starmie[] = INCBIN_U32("graphics/pokemon/starmie/shin const u8 gMonIcon_Starmie[] = INCBIN_U8("graphics/pokemon/starmie/icon.4bpp"); const u8 gMonFootprint_Starmie[] = INCBIN_U8("graphics/pokemon/starmie/footprint.1bpp"); -const u32 gMonStillFrontPic_Mrmime[] = INCBIN_U32("graphics/pokemon/mr_mime/front.4bpp.lz"); -const u32 gMonPalette_Mrmime[] = INCBIN_U32("graphics/pokemon/mr_mime/normal.gbapal.lz"); -const u32 gMonBackPic_Mrmime[] = INCBIN_U32("graphics/pokemon/mr_mime/back.4bpp.lz"); -const u32 gMonShinyPalette_Mrmime[] = INCBIN_U32("graphics/pokemon/mr_mime/shiny.gbapal.lz"); -const u8 gMonIcon_Mrmime[] = INCBIN_U8("graphics/pokemon/mr_mime/icon.4bpp"); -const u8 gMonFootprint_Mrmime[] = INCBIN_U8("graphics/pokemon/mr_mime/footprint.1bpp"); +const u32 gMonStillFrontPic_MrMime[] = INCBIN_U32("graphics/pokemon/mr_mime/front.4bpp.lz"); +const u32 gMonPalette_MrMime[] = INCBIN_U32("graphics/pokemon/mr_mime/normal.gbapal.lz"); +const u32 gMonBackPic_MrMime[] = INCBIN_U32("graphics/pokemon/mr_mime/back.4bpp.lz"); +const u32 gMonShinyPalette_MrMime[] = INCBIN_U32("graphics/pokemon/mr_mime/shiny.gbapal.lz"); +const u8 gMonIcon_MrMime[] = INCBIN_U8("graphics/pokemon/mr_mime/icon.4bpp"); +const u8 gMonFootprint_MrMime[] = INCBIN_U8("graphics/pokemon/mr_mime/footprint.1bpp"); const u32 gMonStillFrontPic_Scyther[] = INCBIN_U32("graphics/pokemon/scyther/front.4bpp.lz"); const u32 gMonPalette_Scyther[] = INCBIN_U32("graphics/pokemon/scyther/normal.gbapal.lz"); diff --git a/src/data/pokemon/level_up_learnset_pointers.h b/src/data/pokemon/level_up_learnset_pointers.h index 5ac7b3bd74..661458ce38 100644 --- a/src/data/pokemon/level_up_learnset_pointers.h +++ b/src/data/pokemon/level_up_learnset_pointers.h @@ -122,7 +122,7 @@ const u16 *const gLevelUpLearnsets[NUM_SPECIES] = [SPECIES_SEAKING] = sSeakingLevelUpLearnset, [SPECIES_STARYU] = sStaryuLevelUpLearnset, [SPECIES_STARMIE] = sStarmieLevelUpLearnset, - [SPECIES_MR_MIME] = sMrmimeLevelUpLearnset, + [SPECIES_MR_MIME] = sMrMimeLevelUpLearnset, [SPECIES_SCYTHER] = sScytherLevelUpLearnset, [SPECIES_JYNX] = sJynxLevelUpLearnset, [SPECIES_ELECTABUZZ] = sElectabuzzLevelUpLearnset, diff --git a/src/data/pokemon/level_up_learnsets.h b/src/data/pokemon/level_up_learnsets.h index c78b9ef0a7..212b969a70 100644 --- a/src/data/pokemon/level_up_learnsets.h +++ b/src/data/pokemon/level_up_learnsets.h @@ -1681,7 +1681,7 @@ static const u16 sStarmieLevelUpLearnset[] = { LEVEL_UP_END }; -static const u16 sMrmimeLevelUpLearnset[] = { +static const u16 sMrMimeLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_BARRIER), LEVEL_UP_MOVE( 5, MOVE_CONFUSION), LEVEL_UP_MOVE( 9, MOVE_SUBSTITUTE), diff --git a/src/data/pokemon/pokedex_entries.h b/src/data/pokemon/pokedex_entries.h index 007c73248e..8a15a18567 100644 --- a/src/data/pokemon/pokedex_entries.h +++ b/src/data/pokemon/pokedex_entries.h @@ -1469,7 +1469,7 @@ const struct PokedexEntry gPokedexEntries[] = .categoryName = _("BARRIER"), .height = 13, .weight = 545, - .description = gMrmimePokedexText, + .description = gMrMimePokedexText, .pokemonScale = 258, .pokemonOffset = 6, .trainerScale = 256, diff --git a/src/data/pokemon/pokedex_text.h b/src/data/pokemon/pokedex_text.h index 0daf7fc86c..ec4a831f86 100644 --- a/src/data/pokemon/pokedex_text.h +++ b/src/data/pokemon/pokedex_text.h @@ -730,7 +730,7 @@ const u8 gStarmiePokedexText[] = _( "reflections of stars that twinkled on\n" "gentle waves at night."); -const u8 gMrmimePokedexText[] = _( +const u8 gMrMimePokedexText[] = _( "A MR. MIME is a master of pantomime. It can\n" "convince others that something unseeable\n" "actually exists. Once believed, the\n" diff --git a/src/data/pokemon_graphics/back_pic_table.h b/src/data/pokemon_graphics/back_pic_table.h index 9a98927aac..1a51f9ccdd 100644 --- a/src/data/pokemon_graphics/back_pic_table.h +++ b/src/data/pokemon_graphics/back_pic_table.h @@ -122,7 +122,7 @@ const struct CompressedSpriteSheet gMonBackPicTable[] = SPECIES_SPRITE(SEAKING, gMonBackPic_Seaking), SPECIES_SPRITE(STARYU, gMonBackPic_Staryu), SPECIES_SPRITE(STARMIE, gMonBackPic_Starmie), - SPECIES_SPRITE(MR_MIME, gMonBackPic_Mrmime), + SPECIES_SPRITE(MR_MIME, gMonBackPic_MrMime), SPECIES_SPRITE(SCYTHER, gMonBackPic_Scyther), SPECIES_SPRITE(JYNX, gMonBackPic_Jynx), SPECIES_SPRITE(ELECTABUZZ, gMonBackPic_Electabuzz), diff --git a/src/data/pokemon_graphics/footprint_table.h b/src/data/pokemon_graphics/footprint_table.h index 86ca067901..d63e33e5b7 100644 --- a/src/data/pokemon_graphics/footprint_table.h +++ b/src/data/pokemon_graphics/footprint_table.h @@ -122,7 +122,7 @@ const u8 *const gMonFootprintTable[] = [SPECIES_SEAKING] = gMonFootprint_Seaking, [SPECIES_STARYU] = gMonFootprint_Staryu, [SPECIES_STARMIE] = gMonFootprint_Starmie, - [SPECIES_MR_MIME] = gMonFootprint_Mrmime, + [SPECIES_MR_MIME] = gMonFootprint_MrMime, [SPECIES_SCYTHER] = gMonFootprint_Scyther, [SPECIES_JYNX] = gMonFootprint_Jynx, [SPECIES_ELECTABUZZ] = gMonFootprint_Electabuzz, diff --git a/src/data/pokemon_graphics/front_pic_table.h b/src/data/pokemon_graphics/front_pic_table.h index 82af860d30..acb0bba252 100644 --- a/src/data/pokemon_graphics/front_pic_table.h +++ b/src/data/pokemon_graphics/front_pic_table.h @@ -122,7 +122,7 @@ const struct CompressedSpriteSheet gMonFrontPicTable[] = SPECIES_SPRITE(SEAKING, gMonFrontPic_Seaking), SPECIES_SPRITE(STARYU, gMonFrontPic_Staryu), SPECIES_SPRITE(STARMIE, gMonFrontPic_Starmie), - SPECIES_SPRITE(MR_MIME, gMonFrontPic_Mrmime), + SPECIES_SPRITE(MR_MIME, gMonFrontPic_MrMime), SPECIES_SPRITE(SCYTHER, gMonFrontPic_Scyther), SPECIES_SPRITE(JYNX, gMonFrontPic_Jynx), SPECIES_SPRITE(ELECTABUZZ, gMonFrontPic_Electabuzz), diff --git a/src/data/pokemon_graphics/palette_table.h b/src/data/pokemon_graphics/palette_table.h index 35edcc76c1..8bdfd2dbd9 100644 --- a/src/data/pokemon_graphics/palette_table.h +++ b/src/data/pokemon_graphics/palette_table.h @@ -122,7 +122,7 @@ const struct CompressedSpritePalette gMonPaletteTable[] = SPECIES_PAL(SEAKING, gMonPalette_Seaking), SPECIES_PAL(STARYU, gMonPalette_Staryu), SPECIES_PAL(STARMIE, gMonPalette_Starmie), - SPECIES_PAL(MR_MIME, gMonPalette_Mrmime), + SPECIES_PAL(MR_MIME, gMonPalette_MrMime), SPECIES_PAL(SCYTHER, gMonPalette_Scyther), SPECIES_PAL(JYNX, gMonPalette_Jynx), SPECIES_PAL(ELECTABUZZ, gMonPalette_Electabuzz), diff --git a/src/data/pokemon_graphics/shiny_palette_table.h b/src/data/pokemon_graphics/shiny_palette_table.h index 8b1cfcaaca..1db14d864a 100644 --- a/src/data/pokemon_graphics/shiny_palette_table.h +++ b/src/data/pokemon_graphics/shiny_palette_table.h @@ -122,7 +122,7 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[] = SPECIES_SHINY_PAL(SEAKING, gMonShinyPalette_Seaking), SPECIES_SHINY_PAL(STARYU, gMonShinyPalette_Staryu), SPECIES_SHINY_PAL(STARMIE, gMonShinyPalette_Starmie), - SPECIES_SHINY_PAL(MR_MIME, gMonShinyPalette_Mrmime), + SPECIES_SHINY_PAL(MR_MIME, gMonShinyPalette_MrMime), SPECIES_SHINY_PAL(SCYTHER, gMonShinyPalette_Scyther), SPECIES_SHINY_PAL(JYNX, gMonShinyPalette_Jynx), SPECIES_SHINY_PAL(ELECTABUZZ, gMonShinyPalette_Electabuzz), diff --git a/src/data/pokemon_graphics/still_front_pic_table.h b/src/data/pokemon_graphics/still_front_pic_table.h index 985a3aa2fd..9a77855ab4 100644 --- a/src/data/pokemon_graphics/still_front_pic_table.h +++ b/src/data/pokemon_graphics/still_front_pic_table.h @@ -122,7 +122,7 @@ const struct CompressedSpriteSheet gMonStillFrontPicTable[] = SPECIES_SPRITE(SEAKING, gMonStillFrontPic_Seaking), SPECIES_SPRITE(STARYU, gMonStillFrontPic_Staryu), SPECIES_SPRITE(STARMIE, gMonStillFrontPic_Starmie), - SPECIES_SPRITE(MR_MIME, gMonStillFrontPic_Mrmime), + SPECIES_SPRITE(MR_MIME, gMonStillFrontPic_MrMime), SPECIES_SPRITE(SCYTHER, gMonStillFrontPic_Scyther), SPECIES_SPRITE(JYNX, gMonStillFrontPic_Jynx), SPECIES_SPRITE(ELECTABUZZ, gMonStillFrontPic_Electabuzz), diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c index 8e37018cba..e659eebe21 100644 --- a/src/pokemon_icon.c +++ b/src/pokemon_icon.c @@ -146,7 +146,7 @@ const u8 *const gMonIconTable[] = [SPECIES_SEAKING] = gMonIcon_Seaking, [SPECIES_STARYU] = gMonIcon_Staryu, [SPECIES_STARMIE] = gMonIcon_Starmie, - [SPECIES_MR_MIME] = gMonIcon_Mrmime, + [SPECIES_MR_MIME] = gMonIcon_MrMime, [SPECIES_SCYTHER] = gMonIcon_Scyther, [SPECIES_JYNX] = gMonIcon_Jynx, [SPECIES_ELECTABUZZ] = gMonIcon_Electabuzz, From 4ed4b690198357a5bd68759b977c57e7d3f07f39 Mon Sep 17 00:00:00 2001 From: sbird Date: Fri, 15 Sep 2023 19:11:25 +0200 Subject: [PATCH 050/120] [BUGFIX] for abilities affecting wild encounter tables fixes a potential buffer overread in TryGetAbilityInfluencedWildMonIndex. The bug can occur if an electric type mon is in the first slots of a fishing encounter table and the player carries a mon with the `ABILITY_STATIC` ability. This never happens in the vanilla codebase. --- src/wild_encounter.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/wild_encounter.c b/src/wild_encounter.c index 87d7d866bb..3a7f6cab23 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -52,7 +52,11 @@ static void FeebasSeedRng(u16 seed); static bool8 IsWildLevelAllowedByRepel(u8 level); static void ApplyFluteEncounterRateMod(u32 *encRate); static void ApplyCleanseTagEncounterRateMod(u32 *encRate); +#ifdef BUGFIX +static bool8 TryGetAbilityInfluencedWildMonIndex(const struct WildPokemon *wildMon, u8 type, u8 ability, u8 *monIndex, u32 size); +#else static bool8 TryGetAbilityInfluencedWildMonIndex(const struct WildPokemon *wildMon, u8 type, u8 ability, u8 *monIndex); +#endif static bool8 IsAbilityAllowingEncounter(u8 level); EWRAM_DATA static u8 sWildEncountersDisabled = 0; @@ -409,6 +413,11 @@ static void CreateWildMon(u16 species, u8 level) CreateMonWithNature(&gEnemyParty[0], species, level, USE_RANDOM_IVS, PickWildMonNature()); } +#ifdef BUGFIX +#define TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildPokemon, type, ability, ptr, count) TryGetAbilityInfluencedWildMonIndex(wildPokemon, type, ability, ptr, count) +#else +#define TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildPokemon, type, ability, ptr, count) TryGetAbilityInfluencedWildMonIndex(wildPokemon, type, ability, ptr) +#endif static bool8 TryGenerateWildMon(const struct WildPokemonInfo *wildMonInfo, u8 area, u8 flags) { @@ -418,15 +427,15 @@ static bool8 TryGenerateWildMon(const struct WildPokemonInfo *wildMonInfo, u8 ar switch (area) { case WILD_AREA_LAND: - if (TryGetAbilityInfluencedWildMonIndex(wildMonInfo->wildPokemon, TYPE_STEEL, ABILITY_MAGNET_PULL, &wildMonIndex)) + if (TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_STEEL, ABILITY_MAGNET_PULL, &wildMonIndex, LAND_WILD_COUNT)) break; - if (TryGetAbilityInfluencedWildMonIndex(wildMonInfo->wildPokemon, TYPE_ELECTRIC, ABILITY_STATIC, &wildMonIndex)) + if (TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_ELECTRIC, ABILITY_STATIC, &wildMonIndex, LAND_WILD_COUNT)) break; wildMonIndex = ChooseWildMonIndex_Land(); break; case WILD_AREA_WATER: - if (TryGetAbilityInfluencedWildMonIndex(wildMonInfo->wildPokemon, TYPE_ELECTRIC, ABILITY_STATIC, &wildMonIndex)) + if (TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_ELECTRIC, ABILITY_STATIC, &wildMonIndex, WATER_WILD_COUNT)) break; wildMonIndex = ChooseWildMonIndex_WaterRock(); @@ -923,8 +932,11 @@ static bool8 TryGetRandomWildMonIndexByType(const struct WildPokemon *wildMon, u *monIndex = validIndexes[Random() % validMonCount]; return TRUE; } - +#ifdef BUGFIX +static bool8 TryGetAbilityInfluencedWildMonIndex(const struct WildPokemon *wildMon, u8 type, u8 ability, u8 *monIndex, u32 size) +#else static bool8 TryGetAbilityInfluencedWildMonIndex(const struct WildPokemon *wildMon, u8 type, u8 ability, u8 *monIndex) +#endif { if (GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG)) return FALSE; @@ -933,7 +945,11 @@ static bool8 TryGetAbilityInfluencedWildMonIndex(const struct WildPokemon *wildM else if (Random() % 2 != 0) return FALSE; +#ifdef BUGFIX + return TryGetRandomWildMonIndexByType(wildMon, type, size, monIndex); +#else return TryGetRandomWildMonIndexByType(wildMon, type, LAND_WILD_COUNT, monIndex); +#endif } static void ApplyFluteEncounterRateMod(u32 *encRate) From fb6f45b2c325b22f43d939b11fcba751b390c2f0 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 17 Sep 2023 13:45:06 -0300 Subject: [PATCH 051/120] Slight RTC documentation + Evolution times constants --- include/siirtc.h | 7 ++++++- src/pokemon.c | 10 ++++++++-- src/rtc.c | 48 ++++++++++++++++++++++++------------------------ 3 files changed, 38 insertions(+), 27 deletions(-) diff --git a/include/siirtc.h b/include/siirtc.h index de4fd634df..24573e4429 100644 --- a/include/siirtc.h +++ b/include/siirtc.h @@ -9,6 +9,10 @@ #define SIIRTCINFO_24HOUR 0x40 // 0: 12-hour mode, 1: 24-hour mode #define SIIRTCINFO_POWER 0x80 // power on or power failure occurred +#define DAY_HOURS 24 +#define HOUR_MINUTES 60 +#define MINUTE_SECONDS 60 + enum { MONTH_JAN = 1, @@ -22,7 +26,8 @@ enum MONTH_SEP, MONTH_OCT, MONTH_NOV, - MONTH_DEC + MONTH_DEC, + MONTH_COUNT = MONTH_DEC }; struct SiiRtcInfo diff --git a/src/pokemon.c b/src/pokemon.c index 7bc9f3bee3..fe93c14c19 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -48,6 +48,12 @@ #include "constants/trainers.h" #include "constants/union_room.h" +#define DAY_EVO_HOUR_BEGIN 12 +#define DAY_EVO_HOUR_END DAY_HOURS + +#define NIGHT_EVO_HOUR_BEGIN 0 +#define NIGHT_EVO_HOUR_END 12 + struct SpeciesItem { u16 species; @@ -5498,12 +5504,12 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 mode, u16 evolutionItem) break; case EVO_FRIENDSHIP_DAY: RtcCalcLocalTime(); - if (gLocalTime.hours >= 12 && gLocalTime.hours < 24 && friendship >= 220) + if (gLocalTime.hours >= DAY_EVO_HOUR_BEGIN && gLocalTime.hours < DAY_EVO_HOUR_END && friendship >= 220) targetSpecies = gEvolutionTable[species][i].targetSpecies; break; case EVO_FRIENDSHIP_NIGHT: RtcCalcLocalTime(); - if (gLocalTime.hours >= 0 && gLocalTime.hours < 12 && friendship >= 220) + if (gLocalTime.hours >= NIGHT_EVO_HOUR_BEGIN && gLocalTime.hours < NIGHT_EVO_HOUR_END && friendship >= 220) targetSpecies = gEvolutionTable[species][i].targetSpecies; break; case EVO_LEVEL: diff --git a/src/rtc.c b/src/rtc.c index b135a675a8..a4920025cf 100644 --- a/src/rtc.c +++ b/src/rtc.c @@ -16,20 +16,20 @@ struct Time gLocalTime; static const struct SiiRtcInfo sRtcDummy = {0, MONTH_JAN, 1}; // 2000 Jan 1 -static const s32 sNumDaysInMonths[12] = +static const s32 sNumDaysInMonths[MONTH_COUNT] = { - 31, - 28, - 31, - 30, - 31, - 30, - 31, - 31, - 30, - 31, - 30, - 31, + [MONTH_JAN - 1] = 31, + [MONTH_FEB - 1] = 28, + [MONTH_MAR - 1] = 31, + [MONTH_APR - 1] = 30, + [MONTH_MAY - 1] = 31, + [MONTH_JUN - 1] = 30, + [MONTH_JUL - 1] = 31, + [MONTH_AUG - 1] = 31, + [MONTH_SEP - 1] = 30, + [MONTH_OCT - 1] = 31, + [MONTH_NOV - 1] = 30, + [MONTH_DEC - 1] = 31, }; void RtcDisableInterrupts(void) @@ -171,7 +171,7 @@ u16 RtcCheckInfo(struct SiiRtcInfo *rtc) month = ConvertBcdToBinary(rtc->month); - if (month == 0xFF || month == 0 || month > 12) + if (month == 0xFF || month == 0 || month > MONTH_COUNT) errorFlags |= RTC_ERR_INVALID_MONTH; value = ConvertBcdToBinary(rtc->day); @@ -192,17 +192,17 @@ u16 RtcCheckInfo(struct SiiRtcInfo *rtc) value = ConvertBcdToBinary(rtc->hour); - if (value > 24) + if (value > DAY_HOURS) errorFlags |= RTC_ERR_INVALID_HOUR; value = ConvertBcdToBinary(rtc->minute); - if (value > 60) + if (value > HOUR_MINUTES) errorFlags |= RTC_ERR_INVALID_MINUTE; value = ConvertBcdToBinary(rtc->second); - if (value > 60) + if (value > MINUTE_SECONDS) errorFlags |= RTC_ERR_INVALID_SECOND; return errorFlags; @@ -270,19 +270,19 @@ void RtcCalcTimeDifference(struct SiiRtcInfo *rtc, struct Time *result, struct T if (result->seconds < 0) { - result->seconds += 60; + result->seconds += MINUTE_SECONDS; --result->minutes; } if (result->minutes < 0) { - result->minutes += 60; + result->minutes += HOUR_MINUTES; --result->hours; } if (result->hours < 0) { - result->hours += 24; + result->hours += DAY_HOURS; --result->days; } } @@ -317,19 +317,19 @@ void CalcTimeDifference(struct Time *result, struct Time *t1, struct Time *t2) if (result->seconds < 0) { - result->seconds += 60; + result->seconds += MINUTE_SECONDS; --result->minutes; } if (result->minutes < 0) { - result->minutes += 60; + result->minutes += HOUR_MINUTES; --result->hours; } if (result->hours < 0) { - result->hours += 24; + result->hours += DAY_HOURS; --result->days; } } @@ -337,7 +337,7 @@ void CalcTimeDifference(struct Time *result, struct Time *t1, struct Time *t2) u32 RtcGetMinuteCount(void) { RtcGetInfo(&sRtc); - return (24 * 60) * RtcGetDayCount(&sRtc) + 60 * sRtc.hour + sRtc.minute; + return (DAY_HOURS * HOUR_MINUTES) * RtcGetDayCount(&sRtc) + HOUR_MINUTES * sRtc.hour + sRtc.minute; } u32 RtcGetLocalDayCount(void) From af210da97214ed916f2736dc20699b9043b98a0e Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 20 Sep 2023 19:01:08 -0300 Subject: [PATCH 052/120] Solved a bunch of -Wall errors on modern --- gflib/string_util.c | 4 +- gflib/text.c | 6 +- gflib/window.c | 2 +- src/AgbRfu_LinkManager.c | 8 +- src/apprentice.c | 9 +- src/battle_ai_script_commands.c | 2 +- src/battle_anim_bug.c | 2 +- src/battle_anim_effects_1.c | 14 +- src/battle_anim_effects_2.c | 10 +- src/battle_anim_effects_3.c | 7 +- src/battle_anim_flying.c | 3 +- src/battle_anim_mons.c | 21 +- src/battle_anim_status_effects.c | 3 +- src/battle_anim_throw.c | 4 +- src/battle_anim_utility_funcs.c | 5 +- src/battle_arena.c | 3 +- src/battle_bg.c | 6 +- src/battle_controller_player.c | 4 +- src/battle_controller_recorded_opponent.c | 2 +- src/battle_controller_safari.c | 4 +- src/battle_controller_wally.c | 4 +- src/battle_controllers.c | 42 +- src/battle_dome.c | 4 +- src/battle_gfx_sfx_util.c | 5 +- src/battle_interface.c | 6 +- src/battle_intro.c | 2 +- src/battle_main.c | 15 +- src/battle_pike.c | 3 +- src/battle_pyramid.c | 3 +- src/battle_pyramid_bag.c | 19 +- src/battle_script_commands.c | 2 +- src/battle_setup.c | 2 +- src/battle_tent.c | 1 - src/battle_tower.c | 17 +- src/battle_transition.c | 9 +- src/battle_util.c | 7 +- src/berry_blender.c | 14 +- src/berry_crush.c | 2 +- src/berry_fix_graphics.c | 4 +- src/berry_powder.c | 10 +- src/braille_puzzles.c | 2 +- src/cable_club.c | 18 +- src/contest.c | 12 +- src/credits.c | 2 +- src/data.c | 100 +-- src/data/credits.h | 730 +++++++++++----------- src/data/pointillism_points.h | 2 +- src/data/trade.h | 4 +- src/daycare.c | 13 +- src/decompress.c | 2 +- src/decoration.c | 2 +- src/dodrio_berry_picking.c | 13 +- src/easy_chat.c | 14 +- src/egg_hatch.c | 2 +- src/event_object_movement.c | 29 +- src/evolution_scene.c | 3 +- src/field_control_avatar.c | 3 +- src/field_door.c | 6 +- src/field_effect.c | 5 +- src/field_effect_helpers.c | 2 +- src/field_message_box.c | 6 +- src/field_specials.c | 4 +- src/field_tasks.c | 2 +- src/field_weather.c | 7 +- src/field_weather_effect.c | 3 +- src/fieldmap.c | 8 +- src/fldeff_escalator.c | 14 +- src/graphics.c | 2 +- src/intro.c | 4 +- src/intro_credits_graphics.c | 2 +- src/item_menu.c | 39 +- src/item_use.c | 2 +- src/librfu_rfu.c | 4 + src/link.c | 25 +- src/link_rfu_2.c | 12 +- src/link_rfu_3.c | 13 +- src/m4a_tables.c | 7 +- src/mail_data.c | 2 +- src/main.c | 2 + src/main_menu.c | 4 +- src/map_name_popup.c | 3 +- src/mauville_old_man.c | 3 +- src/menu.c | 64 +- src/menu_specialized.c | 3 +- src/mini_printf.c | 4 +- src/minigame_countdown.c | 7 +- src/mirage_tower.c | 2 +- src/mystery_gift_menu.c | 5 +- src/naming_screen.c | 10 +- src/overworld.c | 18 +- src/palette.c | 16 +- src/palette_util.c | 7 +- src/party_menu.c | 12 +- src/player_pc.c | 24 +- src/pokeball.c | 2 +- src/pokeblock.c | 12 +- src/pokedex.c | 10 +- src/pokemon.c | 6 +- src/pokemon_animation.c | 4 +- src/pokemon_jump.c | 2 +- src/pokemon_storage_system.c | 35 +- src/pokemon_summary_screen.c | 18 +- src/pokenav_conditions_gfx.c | 2 +- src/pokenav_match_call_list.c | 12 +- src/pokenav_ribbons_list.c | 6 +- src/rayquaza_scene.c | 2 +- src/recorded_battle.c | 3 +- src/region_map.c | 6 +- src/roulette.c | 5 +- src/scrcmd.c | 12 +- src/script_menu.c | 3 +- src/slot_machine.c | 72 +-- src/sound.c | 3 +- src/start_menu.c | 2 +- src/trade.c | 4 +- src/trainer_hill.c | 5 +- src/trainer_pokemon_sprites.c | 6 +- src/trainer_see.c | 4 +- src/tv.c | 3 +- src/union_room.c | 8 +- src/union_room_chat.c | 10 +- src/use_pokeblock.c | 3 +- 122 files changed, 862 insertions(+), 992 deletions(-) diff --git a/gflib/string_util.c b/gflib/string_util.c index 8d969d1bf5..d515c14cda 100644 --- a/gflib/string_util.c +++ b/gflib/string_util.c @@ -298,7 +298,7 @@ u8 *ConvertIntToHexStringN(u8 *dest, s32 value, enum StringConvertMode mode, u8 if (state == WRITING_DIGITS) { - char *out = dest++; + u8 *out = dest++; if (digit <= 0xF) c = sDigits[digit]; @@ -309,7 +309,7 @@ u8 *ConvertIntToHexStringN(u8 *dest, s32 value, enum StringConvertMode mode, u8 } else if (digit != 0 || powerOfSixteen == 1) { - char *out; + u8 *out; state = WRITING_DIGITS; out = dest++; diff --git a/gflib/text.c b/gflib/text.c index 1bded26b5a..bc917c7ced 100644 --- a/gflib/text.c +++ b/gflib/text.c @@ -554,8 +554,7 @@ void DecompressGlyphTile(const void *src_, void *dest_) *(dest++) = ((sFontHalfRowLookupTable[sFontHalfRowOffsets[temp & 0xFF]]) << 16) | (sFontHalfRowLookupTable[sFontHalfRowOffsets[temp >> 8]]); } -// Unused -static u8 GetLastTextColor(u8 colorType) +static u8 UNUSED GetLastTextColor(u8 colorType) { switch (colorType) { @@ -1224,8 +1223,7 @@ static u16 RenderText(struct TextPrinter *textPrinter) return RENDER_FINISH; } -// Unused -static u32 GetStringWidthFixedWidthFont(const u8 *str, u8 fontId, u8 letterSpacing) +static u32 UNUSED GetStringWidthFixedWidthFont(const u8 *str, u8 fontId, u8 letterSpacing) { int i; u8 width; diff --git a/gflib/window.c b/gflib/window.c index 76e863f10e..6f7af457d3 100644 --- a/gflib/window.c +++ b/gflib/window.c @@ -411,7 +411,7 @@ void BlitBitmapRectToWindow(u8 windowId, const u8 *pixels, u16 srcX, u16 srcY, u BlitBitmapRect4Bit(&sourceRect, &destRect, srcX, srcY, destX, destY, rectWidth, rectHeight, 0); } -static void BlitBitmapRectToWindowWithColorKey(u8 windowId, const u8 *pixels, u16 srcX, u16 srcY, u16 srcWidth, int srcHeight, u16 destX, u16 destY, u16 rectWidth, u16 rectHeight, u8 colorKey) +static void UNUSED BlitBitmapRectToWindowWithColorKey(u8 windowId, const u8 *pixels, u16 srcX, u16 srcY, u16 srcWidth, int srcHeight, u16 destX, u16 destY, u16 rectWidth, u16 rectHeight, u8 colorKey) { struct Bitmap sourceRect; struct Bitmap destRect; diff --git a/src/AgbRfu_LinkManager.c b/src/AgbRfu_LinkManager.c index 747a6c7849..e4ee377f7b 100644 --- a/src/AgbRfu_LinkManager.c +++ b/src/AgbRfu_LinkManager.c @@ -229,7 +229,7 @@ u8 rfu_LMAN_CHILD_connectParent(u16 parentId, u16 connect_period) return 0; } -static void rfu_LMAN_PARENT_stopWaitLinkRecoveryAndDisconnect(u8 bm_targetSlot) +static void UNUSED rfu_LMAN_PARENT_stopWaitLinkRecoveryAndDisconnect(u8 bm_targetSlot) { u8 i; @@ -1295,7 +1295,7 @@ void rfu_LMAN_setMSCCallback(void (*MSC_callback_p)(u16)) rfu_setMSCCallback(rfu_LMAN_MSC_callback); } -static void rfu_LMAN_setLMANCallback(void (*func)(u8, u8)) +static void UNUSED rfu_LMAN_setLMANCallback(void (*func)(u8, u8)) { lman.LMAN_callback = func; } @@ -1315,7 +1315,7 @@ u8 rfu_LMAN_setLinkRecovery(u8 enable_flag, u16 recovery_period) return 0; } -static u8 rfu_LMAN_setNIFailCounterLimit(u16 NI_failCounter_limit) +static u8 UNUSED rfu_LMAN_setNIFailCounterLimit(u16 NI_failCounter_limit) { if (gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag) { @@ -1327,7 +1327,7 @@ static u8 rfu_LMAN_setNIFailCounterLimit(u16 NI_failCounter_limit) return 0; } -static u8 rfu_LMAN_setFastSearchParent(u8 enable_flag) +static u8 UNUSED rfu_LMAN_setFastSearchParent(u8 enable_flag) { if (lman.state == LMAN_STATE_START_SEARCH_PARENT || lman.state == LMAN_STATE_POLL_SEARCH_PARENT || lman.state == LMAN_STATE_END_SEARCH_PARENT) { diff --git a/src/apprentice.c b/src/apprentice.c index 9ce5ec0dc2..2280412fe7 100644 --- a/src/apprentice.c +++ b/src/apprentice.c @@ -623,6 +623,9 @@ static void CreateApprenticeMenu(u8 menu) default: left = 0; top = 0; +#ifdef UBFIX + return; +#endif break; } @@ -1278,8 +1281,7 @@ const u8 *GetApprenticeNameInLanguage(u32 apprenticeId, s32 language) } } -// Functionally unused -static void Task_SwitchToFollowupFuncAfterButtonPress(u8 taskId) +static void UNUSED Task_SwitchToFollowupFuncAfterButtonPress(u8 taskId) { if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) SwitchTaskToFollowupFunc(taskId); @@ -1302,8 +1304,7 @@ static void ExecuteFuncAfterButtonPress(void (*func)(void)) gTasks[taskId].data[1] = (u32)(func) >> 16; } -// Unused -static void ExecuteFollowupFuncAfterButtonPress(TaskFunc task) +static void UNUSED ExecuteFollowupFuncAfterButtonPress(TaskFunc task) { u8 taskId = CreateTask(Task_SwitchToFollowupFuncAfterButtonPress, 1); SetTaskFuncWithFollowupFunc(taskId, Task_SwitchToFollowupFuncAfterButtonPress, task); diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c index aa34f46ec7..9a63031dd2 100644 --- a/src/battle_ai_script_commands.c +++ b/src/battle_ai_script_commands.c @@ -2252,7 +2252,7 @@ static void AIStackPushVar(const u8 *var) gBattleResources->AI_ScriptsStack->ptr[gBattleResources->AI_ScriptsStack->size++] = var; } -static void AIStackPushVar_cursor(void) +static void UNUSED AIStackPushVar_cursor(void) { gBattleResources->AI_ScriptsStack->ptr[gBattleResources->AI_ScriptsStack->size++] = gAIScriptPtr; } diff --git a/src/battle_anim_bug.c b/src/battle_anim_bug.c index 377665684a..a5875a376f 100644 --- a/src/battle_anim_bug.c +++ b/src/battle_anim_bug.c @@ -443,7 +443,7 @@ static void AnimMissileArc_Step(struct Sprite *sprite) else { s16 tempData[8]; - u16 *data = sprite->data; + s16 *data = sprite->data; u16 x1 = sprite->x; s16 x2 = sprite->x2; u16 y1 = sprite->y; diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index c0ad548f17..0368adcf80 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -2765,7 +2765,7 @@ static void AnimConstrictBinding(struct Sprite *sprite) static void AnimConstrictBinding_Step1(struct Sprite *sprite) { - u8 spriteId; + u8 UNUSED spriteId; if ((u16)gBattleAnimArgs[7] == 0xFFFF) { @@ -2778,7 +2778,7 @@ static void AnimConstrictBinding_Step1(struct Sprite *sprite) static void AnimConstrictBinding_Step2(struct Sprite *sprite) { - u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET); + u8 UNUSED spriteId = GetAnimBattlerSpriteId(ANIM_TARGET); if (!sprite->data[2]) sprite->data[0] += 11; else @@ -3884,7 +3884,7 @@ static void AnimSlice_Step(struct Sprite *sprite) } } -static void UnusedFlickerAnim(struct Sprite *sprite) +static void UNUSED UnusedFlickerAnim(struct Sprite *sprite) { if (sprite->data[2] > 1) { @@ -4734,7 +4734,7 @@ static void AnimFalseSwipeSlice(struct Sprite *sprite) static void AnimFalseSwipePositionedSlice(struct Sprite *sprite) { - sprite->x = sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + 0xFFD0 + gBattleAnimArgs[0]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + 0xFFD0 + gBattleAnimArgs[0]; sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); StartSpriteAnim(sprite, 1); sprite->data[0] = 0; @@ -4917,8 +4917,7 @@ void AnimTask_Conversion2AlphaBlend(u8 taskId) } } -// Unused -static void AnimTask_HideBattlersHealthbox(u8 taskId) +static void UNUSED AnimTask_HideBattlersHealthbox(u8 taskId) { u8 i; for (i = 0; i < gBattlersCount; i++) @@ -4933,8 +4932,7 @@ static void AnimTask_HideBattlersHealthbox(u8 taskId) DestroyAnimVisualTask(taskId); } -// Unused -static void AnimTask_ShowBattlersHealthbox(u8 taskId) +static void UNUSED AnimTask_ShowBattlersHealthbox(u8 taskId) { u8 i; for (i = 0; i < gBattlersCount; i++) diff --git a/src/battle_anim_effects_2.c b/src/battle_anim_effects_2.c index c10bc02b8e..d26e0ba4c7 100755 --- a/src/battle_anim_effects_2.c +++ b/src/battle_anim_effects_2.c @@ -2551,8 +2551,8 @@ static void AnimPencil_Step(struct Sprite *sprite) static void AnimBlendThinRing(struct Sprite *sprite) { u8 battler = 0; - u16 sp0 = 0; - u16 sp1 = 0; + s16 x = 0; + s16 y = 0; u8 r4; if (gBattleAnimArgs[2] == 0) @@ -2563,16 +2563,16 @@ static void AnimBlendThinRing(struct Sprite *sprite) r4 = gBattleAnimArgs[3] ^ 1; if (IsDoubleBattle() && IsBattlerSpriteVisible(BATTLE_PARTNER(battler))) { - SetAverageBattlerPositions(battler, r4, &sp0, &sp1); + SetAverageBattlerPositions(battler, r4, &x, &y); if (r4 == 0) r4 = GetBattlerSpriteCoord(battler, BATTLER_COORD_X); else r4 = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2); if (GetBattlerSide(battler) != B_SIDE_PLAYER) - gBattleAnimArgs[0] -= (sp0 - r4) - gBattleAnimArgs[0]; // This is weird. + gBattleAnimArgs[0] -= (x - r4) - gBattleAnimArgs[0]; // This is weird. else - gBattleAnimArgs[0] = sp0 - r4; + gBattleAnimArgs[0] = x - r4; } sprite->callback = AnimSpriteOnMonPos; diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c index 5168641c6a..6b169c5430 100755 --- a/src/battle_anim_effects_3.c +++ b/src/battle_anim_effects_3.c @@ -1428,8 +1428,7 @@ static void FadeScreenToWhite_Step(u8 taskId) static void AnimSpikes(struct Sprite *sprite) { - u16 x; - u16 y; + s16 x, y; InitSpritePosToAnimAttacker(sprite, TRUE); SetAverageBattlerPositions(gBattleAnimTarget, FALSE, &x, &y); @@ -4758,8 +4757,8 @@ static void AnimMeteorMashStar_Step(struct Sprite *sprite) // arg 4: duration static void AnimMeteorMashStar(struct Sprite *sprite) { - s16 y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); // unused local variable - s16 x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); // unused local variable + s16 UNUSED y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + s16 UNUSED x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER || IsContest()) { diff --git a/src/battle_anim_flying.c b/src/battle_anim_flying.c index 7e5c5e9393..c5e59a65af 100644 --- a/src/battle_anim_flying.c +++ b/src/battle_anim_flying.c @@ -1220,8 +1220,7 @@ void AnimSkyAttackBird_Step(struct Sprite *sprite) DestroySpriteAndMatrix(sprite); } -// Unused -static void AnimTask_SetAttackerVisibility(u8 taskId) +static void UNUSED AnimTask_SetAttackerVisibility(u8 taskId) { if (gBattleAnimArgs[0] == 0) { diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c index d9fd652311..6dd0d20852 100644 --- a/src/battle_anim_mons.c +++ b/src/battle_anim_mons.c @@ -485,9 +485,8 @@ void TranslateSpriteInGrowingCircle(struct Sprite *sprite) } } -// Unused // Exact shape depends on arguments. Can move in a figure-8-like pattern, or circular, etc. -static void TranslateSpriteInLissajousCurve(struct Sprite *sprite) +static void UNUSED TranslateSpriteInLissajousCurve(struct Sprite *sprite) { if (sprite->sDuration) { @@ -639,8 +638,7 @@ static void TranslateSpriteLinearFixedPointIconFrame(struct Sprite *sprite) UpdateMonIconFrame(sprite); } -// Unused -static void TranslateSpriteToBattleTargetPos(struct Sprite *sprite) +static void UNUSED TranslateSpriteToBattleTargetPos(struct Sprite *sprite) { sprite->sStartX = sprite->x + sprite->x2; sprite->sStartY = sprite->y + sprite->y2; @@ -707,8 +705,7 @@ void DestroySpriteAndMatrix(struct Sprite *sprite) DestroyAnimSprite(sprite); } -// Unused -static void TranslateSpriteToBattleAttackerPos(struct Sprite *sprite) +static void UNUSED TranslateSpriteToBattleAttackerPos(struct Sprite *sprite) { sprite->sStartX = sprite->x + sprite->x2; sprite->sStartY = sprite->y + sprite->y2; @@ -723,8 +720,7 @@ static void TranslateSpriteToBattleAttackerPos(struct Sprite *sprite) #undef sStartY #undef sTargetY -// Unused -static void EndUnkPaletteAnim(struct Sprite *sprite) +static void UNUSED EndUnkPaletteAnim(struct Sprite *sprite) { PaletteStruct_ResetById(sprite->data[5]); DestroySpriteAndMatrix(sprite); @@ -1103,8 +1099,7 @@ void StartAnimLinearTranslation(struct Sprite *sprite) sprite->callback(sprite); } -// Unused -static void StartAnimLinearTranslation_SetCornerVecX(struct Sprite *sprite) +static void UNUSED StartAnimLinearTranslation_SetCornerVecX(struct Sprite *sprite) { sprite->data[1] = sprite->x; sprite->data[3] = sprite->y; @@ -1512,8 +1507,7 @@ u8 GetSpritePalIdxByBattler(u8 battler) return battler; } -// Unused -static u8 GetSpritePalIdxByPosition(u8 position) +static u8 UNUSED GetSpritePalIdxByPosition(u8 position) { return GetBattlerAtPosition(position); } @@ -2012,8 +2006,7 @@ void AnimTask_GetFrustrationPowerLevel(u8 taskId) DestroyAnimVisualTask(taskId); } -// Unused -static void SetPriorityForVisibleBattlers(u8 priority) +static void UNUSED SetPriorityForVisibleBattlers(u8 priority) { if (IsBattlerSpriteVisible(gBattleAnimTarget)) gSprites[gBattlerSpriteIds[gBattleAnimTarget]].oam.priority = priority; diff --git a/src/battle_anim_status_effects.c b/src/battle_anim_status_effects.c index b987ad33a3..cc04843b7f 100644 --- a/src/battle_anim_status_effects.c +++ b/src/battle_anim_status_effects.c @@ -270,8 +270,7 @@ static const struct SpriteTemplate sFlashingCircleImpactSpriteTemplate = .callback = AnimFlashingCircleImpact, }; -// Unused -static u8 Task_FlashingCircleImpacts(u8 battlerId, bool8 red) +static u8 UNUSED Task_FlashingCircleImpacts(u8 battlerId, bool8 red) { u8 battlerSpriteId = gBattlerSpriteIds[battlerId]; u8 taskId = CreateTask(Task_UpdateFlashingCircleImpacts, 10); diff --git a/src/battle_anim_throw.c b/src/battle_anim_throw.c index fea67a6e3c..8296126f14 100755 --- a/src/battle_anim_throw.c +++ b/src/battle_anim_throw.c @@ -2386,11 +2386,11 @@ static void SpriteCB_ShinyStars_Diagonal(struct Sprite *sprite) void AnimTask_LoadPokeblockGfx(u8 taskId) { - u8 paletteIndex; + u8 UNUSED paletteIndex; LoadCompressedSpriteSheetUsingHeap(&gBattleAnimPicTable[ANIM_TAG_POKEBLOCK - ANIM_SPRITES_START]); LoadCompressedSpritePaletteUsingHeap(&gBattleAnimPaletteTable[ANIM_TAG_POKEBLOCK - ANIM_SPRITES_START]); - paletteIndex = IndexOfSpritePaletteTag(ANIM_TAG_POKEBLOCK); // unused + paletteIndex = IndexOfSpritePaletteTag(ANIM_TAG_POKEBLOCK); DestroyAnimVisualTask(taskId); } diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c index ccbc7f902b..18a599a4c1 100644 --- a/src/battle_anim_utility_funcs.c +++ b/src/battle_anim_utility_funcs.c @@ -69,6 +69,9 @@ void AnimTask_BlendBattleAnimPalExclude(u8 taskId) selectedPalettes = 0; // fall through case ANIM_ATTACKER: +#ifdef UBFIX + default: +#endif animBattlers[0] = gBattleAnimAttacker; break; case 3: @@ -806,7 +809,7 @@ void AnimTask_SetAllNonAttackersInvisiblity(u8 taskId) DestroyAnimVisualTask(taskId); } -void StartMonScrollingBgMask(u8 taskId, int unused, u16 scrollSpeed, u8 battler, bool8 includePartner, u8 numFadeSteps, u8 fadeStepDelay, u8 duration, const u32 *gfx, const u32 *tilemap, const u32 *palette) +void StartMonScrollingBgMask(u8 taskId, int UNUSED unused, u16 scrollSpeed, u8 battler, bool8 includePartner, u8 numFadeSteps, u8 fadeStepDelay, u8 duration, const u32 *gfx, const u32 *tilemap, const u32 *palette) { u16 species; u8 spriteId, spriteId2; diff --git a/src/battle_arena.c b/src/battle_arena.c index 98ec43fc1d..ed3cf16dfd 100644 --- a/src/battle_arena.c +++ b/src/battle_arena.c @@ -651,8 +651,7 @@ void BattleArena_DeductSkillPoints(u8 battler, u16 stringId) } } -// Unused -static void UpdateHPAtStart(u8 battler) +static void UNUSED UpdateHPAtStart(u8 battler) { u16 *hpAtStart = gBattleStruct->arenaStartHp; diff --git a/src/battle_bg.c b/src/battle_bg.c index b3091d965e..05073db96d 100644 --- a/src/battle_bg.c +++ b/src/battle_bg.c @@ -692,9 +692,9 @@ static const struct BattleBackground sBattleTerrainTable[] = }, }; -static void CB2_UnusedBattleInit(void); +static void UNUSED CB2_UnusedBattleInit(void); -static void UnusedBattleInit(void) +static void UNUSED UnusedBattleInit(void) { u8 spriteId; @@ -704,7 +704,7 @@ static void UnusedBattleInit(void) SetMainCallback2(CB2_UnusedBattleInit); } -static void CB2_UnusedBattleInit(void) +static void UNUSED CB2_UnusedBattleInit(void) { AnimateSprites(); BuildOamBuffer(); diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index cdc5fe8429..357912d4b6 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -329,7 +329,7 @@ static void HandleInputChooseAction(void) } } -static void UnusedEndBounceEffect(void) +static void UNUSED UnusedEndBounceEffect(void) { EndBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX); EndBounceEffect(gActiveBattler, BOUNCE_MON); @@ -614,7 +614,7 @@ static void HandleInputChooseMove(void) } } -static u32 HandleMoveInputUnused(void) +static u32 UNUSED HandleMoveInputUnused(void) { u32 var = 0; diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c index b2db595f8a..9c37cd0a92 100644 --- a/src/battle_controller_recorded_opponent.c +++ b/src/battle_controller_recorded_opponent.c @@ -186,7 +186,7 @@ static void CompleteOnBattlerSpriteCallbackDummy(void) RecordedOpponentBufferExecCompleted(); } -static void CompleteOnBankSpriteCallbackDummy2(void) +static void UNUSED CompleteOnBankSpriteCallbackDummy2(void) { if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) RecordedOpponentBufferExecCompleted(); diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c index 5e8ef2d286..157bb6954c 100644 --- a/src/battle_controller_safari.c +++ b/src/battle_controller_safari.c @@ -147,7 +147,7 @@ static void (*const sSafariBufferCommands[CONTROLLER_CMDS_COUNT])(void) = [CONTROLLER_TERMINATOR_NOP] = SafariCmdEnd }; -static void SpriteCB_Null4(void) +static void UNUSED SpriteCB_Null4(void) { } @@ -307,7 +307,7 @@ static void SafariBufferExecCompleted(void) } } -static void CompleteOnFinishedStatusAnimation(void) +static void UNUSED CompleteOnFinishedStatusAnimation(void) { if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].statusAnimActive) SafariBufferExecCompleted(); diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c index 5b94f2dd26..ce357319a5 100644 --- a/src/battle_controller_wally.c +++ b/src/battle_controller_wally.c @@ -161,7 +161,7 @@ static void (*const sWallyBufferCommands[CONTROLLER_CMDS_COUNT])(void) = [CONTROLLER_TERMINATOR_NOP] = WallyCmdEnd }; -static void SpriteCB_Null7(void) +static void UNUSED SpriteCB_Null7(void) { } @@ -417,7 +417,7 @@ static void WallyBufferExecCompleted(void) } } -static void CompleteOnFinishedStatusAnimation(void) +static void UNUSED CompleteOnFinishedStatusAnimation(void) { if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].statusAnimActive) WallyBufferExecCompleted(); diff --git a/src/battle_controllers.c b/src/battle_controllers.c index b93e65fdc0..2ba5d4329d 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -905,8 +905,7 @@ void BtlController_EmitGetMonData(u8 bufferId, u8 requestId, u8 monToCheck) PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } -// Unused -static void BtlController_EmitGetRawMonData(u8 bufferId, u8 monId, u8 bytes) +static void UNUSED BtlController_EmitGetRawMonData(u8 bufferId, u8 monId, u8 bytes) { sBattleBuffersTransferData[0] = CONTROLLER_GETRAWMONDATA; sBattleBuffersTransferData[1] = monId; @@ -927,8 +926,7 @@ void BtlController_EmitSetMonData(u8 bufferId, u8 requestId, u8 monToCheck, u8 b PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 3 + bytes); } -// Unused -static void BtlController_EmitSetRawMonData(u8 bufferId, u8 monId, u8 bytes, void *data) +static void UNUSED BtlController_EmitSetRawMonData(u8 bufferId, u8 monId, u8 bytes, void *data) { s32 i; @@ -1001,8 +999,7 @@ void BtlController_EmitFaintAnimation(u8 bufferId) PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } -// Unused -static void BtlController_EmitPaletteFade(u8 bufferId) +static void UNUSED BtlController_EmitPaletteFade(u8 bufferId) { sBattleBuffersTransferData[0] = CONTROLLER_PALETTEFADE; sBattleBuffersTransferData[1] = CONTROLLER_PALETTEFADE; @@ -1011,8 +1008,7 @@ static void BtlController_EmitPaletteFade(u8 bufferId) PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } -// Unused -static void BtlController_EmitSuccessBallThrowAnim(u8 bufferId) +static void UNUSED BtlController_EmitSuccessBallThrowAnim(u8 bufferId) { sBattleBuffersTransferData[0] = CONTROLLER_SUCCESSBALLTHROWANIM; sBattleBuffersTransferData[1] = CONTROLLER_SUCCESSBALLTHROWANIM; @@ -1028,8 +1024,7 @@ void BtlController_EmitBallThrowAnim(u8 bufferId, u8 caseId) PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 2); } -// Unused -static void BtlController_EmitPause(u8 bufferId, u8 toWait, void *data) +static void UNUSED BtlController_EmitPause(u8 bufferId, u8 toWait, void *data) { s32 i; @@ -1188,8 +1183,7 @@ void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 slotId, u8 abili PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 8); // Only 7 bytes were written. } -// Unused -static void BtlController_EmitCmd23(u8 bufferId) +static void UNUSED BtlController_EmitCmd23(u8 bufferId) { sBattleBuffersTransferData[0] = CONTROLLER_23; sBattleBuffersTransferData[1] = CONTROLLER_23; @@ -1243,8 +1237,7 @@ void BtlController_EmitStatusAnimation(u8 bufferId, bool8 status2, u32 status) PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 6); } -// Unused -static void BtlController_EmitStatusXor(u8 bufferId, u8 b) +static void UNUSED BtlController_EmitStatusXor(u8 bufferId, u8 b) { sBattleBuffersTransferData[0] = CONTROLLER_STATUSXOR; sBattleBuffersTransferData[1] = b; @@ -1264,8 +1257,7 @@ void BtlController_EmitDataTransfer(u8 bufferId, u16 size, void *data) PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, size + 4); } -// Unused -static void BtlController_EmitDMA3Transfer(u8 bufferId, void *dst, u16 size, void *data) +static void UNUSED BtlController_EmitDMA3Transfer(u8 bufferId, void *dst, u16 size, void *data) { s32 i; @@ -1281,8 +1273,7 @@ static void BtlController_EmitDMA3Transfer(u8 bufferId, void *dst, u16 size, voi PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, size + 7); } -// Unused -static void BtlController_EmitPlayBGM(u8 bufferId, u16 songId, void *data) +static void UNUSED BtlController_EmitPlayBGM(u8 bufferId, u16 songId, void *data) { s32 i; @@ -1297,8 +1288,7 @@ static void BtlController_EmitPlayBGM(u8 bufferId, u16 songId, void *data) PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, songId + 3); } -// Unused -static void BtlController_EmitCmd32(u8 bufferId, u16 size, void *data) +static void UNUSED BtlController_EmitCmd32(u8 bufferId, u16 size, void *data) { s32 i; @@ -1348,8 +1338,7 @@ void BtlController_EmitOneReturnValue_Duplicate(u8 bufferId, u16 ret) PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } -// Unused -static void BtlController_EmitClearUnkVar(u8 bufferId) +static void UNUSED BtlController_EmitClearUnkVar(u8 bufferId) { sBattleBuffersTransferData[0] = CONTROLLER_CLEARUNKVAR; sBattleBuffersTransferData[1] = CONTROLLER_CLEARUNKVAR; @@ -1358,16 +1347,14 @@ static void BtlController_EmitClearUnkVar(u8 bufferId) PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } -// Unused -static void BtlController_EmitSetUnkVar(u8 bufferId, u8 b) +static void UNUSED BtlController_EmitSetUnkVar(u8 bufferId, u8 b) { sBattleBuffersTransferData[0] = CONTROLLER_SETUNKVAR; sBattleBuffersTransferData[1] = b; PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 2); } -// Unused -static void BtlController_EmitClearUnkFlag(u8 bufferId) +static void UNUSED BtlController_EmitClearUnkFlag(u8 bufferId) { sBattleBuffersTransferData[0] = CONTROLLER_CLEARUNKFLAG; sBattleBuffersTransferData[1] = CONTROLLER_CLEARUNKFLAG; @@ -1376,8 +1363,7 @@ static void BtlController_EmitClearUnkFlag(u8 bufferId) PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } -// Unused -static void BtlController_EmitToggleUnkFlag(u8 bufferId) +static void UNUSED BtlController_EmitToggleUnkFlag(u8 bufferId) { sBattleBuffersTransferData[0] = CONTROLLER_TOGGLEUNKFLAG; sBattleBuffersTransferData[1] = CONTROLLER_TOGGLEUNKFLAG; diff --git a/src/battle_dome.c b/src/battle_dome.c index 6ecb254baa..8364515e59 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -1667,13 +1667,13 @@ static const u8 sTourneyTreePokeballCoords[DOME_TOURNAMENT_TRAINERS_COUNT + DOME {.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 \ {.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}, diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index d98809be46..d4326860a9 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -378,7 +378,7 @@ void SpriteCB_WaitForBattlerBallReleaseAnim(struct Sprite *sprite) } } -static void UnusedDoBattleSpriteAffineAnim(struct Sprite *sprite, bool8 pointless) +static void UNUSED UnusedDoBattleSpriteAffineAnim(struct Sprite *sprite, bool8 pointless) { sprite->animPaused = TRUE; sprite->callback = SpriteCallbackDummy; @@ -690,8 +690,7 @@ void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 battlerId) } } -// Unused -static void BattleGfxSfxDummy1(void) +static void UNUSED BattleGfxSfxDummy1(void) { } diff --git a/src/battle_interface.c b/src/battle_interface.c index f9a7be58ea..a417be4a72 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -841,8 +841,7 @@ static void Debug_DrawNumber(s16 number, u16 *dest, bool8 unk) } } -// Unused -static void Debug_DrawNumberPair(s16 number1, s16 number2, u16 *dest) +static void UNUSED Debug_DrawNumberPair(s16 number1, s16 number2, u16 *dest) { dest[4] = 0x1E; Debug_DrawNumber(number2, dest, FALSE); @@ -2459,9 +2458,8 @@ static u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32 return filledPixels; } -// Unused // These two functions seem as if they were made for testing the health bar. -static s16 Debug_TestHealthBar(struct TestingBar *barInfo, s32 *currValue, u16 *dest, s32 unused) +static s16 UNUSED Debug_TestHealthBar(struct TestingBar *barInfo, s32 *currValue, u16 *dest, s32 unused) { s16 ret, var; diff --git a/src/battle_intro.c b/src/battle_intro.c index 3cdc879a86..5df697e3ae 100644 --- a/src/battle_intro.c +++ b/src/battle_intro.c @@ -602,7 +602,7 @@ void DrawBattlerOnBg(int bgId, u8 x, u8 y, u8 battlerPosition, u8 paletteId, u8 LoadBgTilemap(bgId, tilemap, BG_SCREEN_SIZE, 0); } -static void DrawBattlerOnBgDMA(u8 x, u8 y, u8 battlerPosition, u8 arg3, u8 paletteId, u16 arg5, u8 arg6, u8 arg7) +static void UNUSED DrawBattlerOnBgDMA(u8 x, u8 y, u8 battlerPosition, u8 arg3, u8 paletteId, u16 arg5, u8 arg6, u8 arg7) { int i, j, offset; diff --git a/src/battle_main.c b/src/battle_main.c index e1c6a514a7..b5c6cbbf07 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -2073,8 +2073,7 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir return gTrainers[trainerNum].partySize; } -// Unused -static void HBlankCB_Battle(void) +static void UNUSED HBlankCB_Battle(void) { if (REG_VCOUNT < DISPLAY_HEIGHT && REG_VCOUNT >= 111) SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_SCREENBASE(24) | BGCNT_TXT256x512); @@ -2710,8 +2709,7 @@ void SpriteCallbackDummy_2(struct Sprite *sprite) #define sNumFlickers data[3] #define sDelay data[4] -// Unused -static void SpriteCB_InitFlicker(struct Sprite *sprite) +static void UNUSED SpriteCB_InitFlicker(struct Sprite *sprite) { sprite->sNumFlickers = 6; sprite->sDelay = 1; @@ -2866,8 +2864,7 @@ static void SpriteCB_BattleSpriteSlideLeft(struct Sprite *sprite) } } -// Unused -static void SetIdleSpriteCallback(struct Sprite *sprite) +static void UNUSED SetIdleSpriteCallback(struct Sprite *sprite) { sprite->callback = SpriteCB_Idle; } @@ -3689,8 +3686,7 @@ static void BattleIntroRecordMonsToDex(void) } } -// Unused -static void BattleIntroSkipRecordMonsToDex(void) +static void UNUSED BattleIntroSkipRecordMonsToDex(void) { if (gBattleControllerExecFlags == 0) gBattleMainFunc = BattleIntroPrintPlayerSendsOut; @@ -3793,8 +3789,7 @@ static void BattleIntroPlayer1SendsOutMonAnimation(void) gBattleMainFunc = TryDoEventsBeforeFirstTurn; } -// Unused -static void BattleIntroSwitchInPlayerMons(void) +static void UNUSED BattleIntroSwitchInPlayerMons(void) { if (gBattleControllerExecFlags == 0) { diff --git a/src/battle_pike.c b/src/battle_pike.c index acc9eaee4e..7505621201 100644 --- a/src/battle_pike.c +++ b/src/battle_pike.c @@ -1097,8 +1097,7 @@ static u16 GetNPCRoomGraphicsId(void) return sNPCTable[sNpcId].graphicsId; } -// Unused -static u8 GetInWildMonRoom(void) +static bool8 UNUSED GetInWildMonRoom(void) { return sInWildMonRoom; } diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c index e51f804981..b4bb3cacca 100644 --- a/src/battle_pyramid.c +++ b/src/battle_pyramid.c @@ -1479,8 +1479,7 @@ u8 GetTrainerEncounterMusicIdInBattlePyramid(u16 trainerId) return TRAINER_ENCOUNTER_MUSIC_MALE; } -// Unused -static void BattlePyramidRetireChallenge(void) +static void UNUSED BattlePyramidRetireChallenge(void) { ScriptContext_SetupScript(BattlePyramid_Retire); } diff --git a/src/battle_pyramid_bag.c b/src/battle_pyramid_bag.c index d580cf6800..bf9a7704b1 100644 --- a/src/battle_pyramid_bag.c +++ b/src/battle_pyramid_bag.c @@ -174,12 +174,12 @@ enum { static const struct MenuAction sMenuActions[] = { - [ACTION_USE_FIELD] = { gMenuText_Use, BagAction_UseOnField }, - [ACTION_TOSS] = { gMenuText_Toss, BagAction_Toss }, - [ACTION_GIVE] = { gMenuText_Give, BagAction_Give }, - [ACTION_CANCEL] = { gText_Cancel2, BagAction_Cancel }, - [ACTION_USE_BATTLE] = { gMenuText_Use, BagAction_UseInBattle }, - [ACTION_DUMMY] = { gText_EmptyString2, NULL }, + [ACTION_USE_FIELD] = { gMenuText_Use, {BagAction_UseOnField} }, + [ACTION_TOSS] = { gMenuText_Toss, {BagAction_Toss} }, + [ACTION_GIVE] = { gMenuText_Give, {BagAction_Give} }, + [ACTION_CANCEL] = { gText_Cancel2, {BagAction_Cancel} }, + [ACTION_USE_BATTLE] = { gMenuText_Use, {BagAction_UseInBattle} }, + [ACTION_DUMMY] = { gText_EmptyString2, {NULL} }, }; static const u8 sMenuActionIds_Field[] = {ACTION_USE_FIELD, ACTION_GIVE, ACTION_TOSS, ACTION_CANCEL}; @@ -382,8 +382,8 @@ void CB2_PyramidBagMenuFromStartMenu(void) GoToBattlePyramidBagMenu(PYRAMIDBAG_LOC_FIELD, CB2_ReturnToFieldWithOpenMenu); } -// Unused, CB2_BagMenuFromBattle is used instead -static void OpenBattlePyramidBagInBattle(void) +// CB2_BagMenuFromBattle is used instead +static void UNUSED OpenBattlePyramidBagInBattle(void) { GoToBattlePyramidBagMenu(PYRAMIDBAG_LOC_BATTLE, CB2_SetUpReshowBattleScreenAfterMenu2); } @@ -1468,8 +1468,7 @@ static void DrawTossNumberWindow(u8 windowId) ScheduleBgCopyTilemapToVram(1); } -// Unused -static u8 GetMenuActionWindowId(u8 windowArrayId) +static u8 UNUSED GetMenuActionWindowId(u8 windowArrayId) { return gPyramidBagMenu->windowIds[windowArrayId]; } diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 7246a11d16..9d2c2cb715 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1650,7 +1650,7 @@ static inline void ApplyRandomDmgMultiplier(void) } } -static void Unused_ApplyRandomDmgMultiplier(void) +static void UNUSED Unused_ApplyRandomDmgMultiplier(void) { ApplyRandomDmgMultiplier(); } diff --git a/src/battle_setup.c b/src/battle_setup.c index fc1586a5f2..a9cfc48ffb 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -1248,7 +1248,7 @@ static void SetBattledTrainersFlags(void) FlagSet(GetTrainerAFlag()); } -static void SetBattledTrainerFlag(void) +static void UNUSED SetBattledTrainerFlag(void) { FlagSet(GetTrainerAFlag()); } diff --git a/src/battle_tent.c b/src/battle_tent.c index f0f7363f31..b7a9daecba 100644 --- a/src/battle_tent.c +++ b/src/battle_tent.c @@ -313,7 +313,6 @@ static void GenerateInitialRentalMons(void) monSetId = Random() % NUM_SLATEPORT_TENT_MONS; for (j = firstMonId; j < firstMonId + i; j++) { - u16 monId = monIds[j]; if (monIds[j] == monSetId) break; if (species[j] == gFacilityTrainerMons[monSetId].species) diff --git a/src/battle_tower.c b/src/battle_tower.c index 3cf7ea0a8e..15509a7dcf 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -1129,8 +1129,7 @@ u16 GetRandomScaledFrontierTrainerId(u8 challengeNum, u8 battleNum) return trainerId; } -// Unused -static void GetRandomScaledFrontierTrainerIdRange(u8 challengeNum, u8 battleNum, u16 *trainerIdPtr, u8 *rangePtr) +static void UNUSED GetRandomScaledFrontierTrainerIdRange(u8 challengeNum, u8 battleNum, u16 *trainerIdPtr, u8 *rangePtr) { u16 trainerId, range; @@ -1756,7 +1755,7 @@ static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount) } // Probably an early draft before the 'CreateApprenticeMon' was written. -static void Unused_CreateApprenticeMons(u16 trainerId, u8 firstMonId) +static void UNUSED Unused_CreateApprenticeMons(u16 trainerId, u8 firstMonId) { s32 i, j; u8 friendship = MAX_FRIENDSHIP; @@ -1832,12 +1831,14 @@ static void FillFactoryFrontierTrainerParty(u16 trainerId, u8 firstMonId) if (trainerId < FRONTIER_TRAINERS_COUNT) { - u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; - u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); // By mistake Battle Tower's Level 50 challenge number is used to determine the IVs for Battle Factory. #ifdef BUGFIX + u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); u8 challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / FRONTIER_STAGES_PER_CHALLENGE; #else + u8 UNUSED lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); u8 challengeNum = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][FRONTIER_LVL_50] / FRONTIER_STAGES_PER_CHALLENGE; #endif if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < FRONTIER_STAGES_PER_CHALLENGE - 1) @@ -2278,7 +2279,7 @@ static void LoadMultiPartnerCandidatesData(void) u32 lvlMode, battleMode; s32 challengeNum; u32 species1, species2; - u32 level; + u32 UNUSED level; struct ObjectEventTemplate *objEventTemplates; objEventTemplates = gSaveBlock1Ptr->objectEventTemplates; @@ -2461,7 +2462,7 @@ static void ShowPartnerCandidateMessage(void) { s32 i, j, partnerId; s32 monId; - s32 level = SetFacilityPtrsGetLevel(); + s32 UNUSED level = SetFacilityPtrsGetLevel(); u16 winStreak = GetCurrentFacilityWinStreak(); s32 challengeNum = winStreak / FRONTIER_STAGES_PER_CHALLENGE; s32 k = gSpecialVar_LastTalked - 2; @@ -2823,7 +2824,7 @@ static void AwardBattleTowerRibbons(void) // This is a leftover debugging function that is used to populate the E-Reader // trainer with the player's current data. -static void FillEReaderTrainerWithPlayerData(void) +static void UNUSED FillEReaderTrainerWithPlayerData(void) { struct BattleTowerEReaderTrainer *ereaderTrainer = &gSaveBlock2Ptr->frontier.ereaderTrainer; s32 i, j; diff --git a/src/battle_transition.c b/src/battle_transition.c index 2e87b9c1d7..11f9cddf4b 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -779,7 +779,7 @@ static const TransitionStateFunc sTransitionIntroFuncs[] = static const struct SpriteFrameImage sSpriteImage_Pokeball[] = { - sPokeball_Gfx, sizeof(sPokeball_Gfx) + {sPokeball_Gfx, sizeof(sPokeball_Gfx)} }; static const union AnimCmd sSpriteAnim_Pokeball[] = @@ -841,12 +841,12 @@ static const struct OamData sOam_UnusedBrendanLass = static const struct SpriteFrameImage sImageTable_UnusedBrendan[] = { - sUnusedBrendan_Gfx, sizeof(sUnusedBrendan_Gfx) + {sUnusedBrendan_Gfx, sizeof(sUnusedBrendan_Gfx)} }; static const struct SpriteFrameImage sImageTable_UnusedLass[] = { - sUnusedLass_Gfx, sizeof(sUnusedLass_Gfx) + {sUnusedLass_Gfx, sizeof(sUnusedLass_Gfx)} }; static const union AnimCmd sSpriteAnim_UnusedBrendanLass[] = @@ -1017,8 +1017,7 @@ static void CB2_TestBattleTransition(void) UpdatePaletteFade(); } -// Unused -static void TestBattleTransition(u8 transitionId) +static void UNUSED TestBattleTransition(u8 transitionId) { sTestingTransitionId = transitionId; SetMainCallback2(CB2_TestBattleTransition); diff --git a/src/battle_util.c b/src/battle_util.c index f71c825c1b..50c560bccf 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -827,8 +827,7 @@ void PressurePPLoseOnUsingPerishSong(u8 attacker) } } -// Unused -static void MarkAllBattlersForControllerExec(void) +static void UNUSED MarkAllBattlersForControllerExec(void) { int i; @@ -3243,8 +3242,8 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) int i = 0; u8 effect = ITEM_NO_EFFECT; u8 changedPP = 0; - u8 battlerHoldEffect, atkHoldEffect, defHoldEffect; - u8 battlerHoldEffectParam, atkHoldEffectParam, defHoldEffectParam; + u8 battlerHoldEffect, atkHoldEffect, UNUSED defHoldEffect; + u8 battlerHoldEffectParam, atkHoldEffectParam, UNUSED defHoldEffectParam; u16 atkItem, defItem; gLastUsedItem = gBattleMons[battlerId].item; diff --git a/src/berry_blender.c b/src/berry_blender.c index b882fc12d9..97262a4e2f 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -2377,8 +2377,7 @@ static void Debug_SetMaxRPMStage(s16 value) sDebug_MaxRPMStage = value; } -// Unused -static s16 Debug_GetMaxRPMStage(void) +static s16 UNUSED Debug_GetMaxRPMStage(void) { return sDebug_MaxRPMStage; } @@ -2388,8 +2387,7 @@ static void Debug_SetGameTimeStage(s16 value) sDebug_GameTimeStage = value; } -// Unued -static s16 Debug_GetGameTimeStage(void) +static s16 UNUSED Debug_GetGameTimeStage(void) { return sDebug_GameTimeStage; } @@ -2501,8 +2499,7 @@ static void CalculatePokeblock(struct BlenderBerry *berries, struct Pokeblock *p flavors[i] = sPokeblockFlavors[i]; } -// Unused -static void Debug_CalculatePokeblock(struct BlenderBerry* berries, struct Pokeblock* pokeblock, u8 numPlayers, u8 *flavors, u16 maxRPM) +static void UNUSED Debug_CalculatePokeblock(struct BlenderBerry* berries, struct Pokeblock* pokeblock, u8 numPlayers, u8 *flavors, u16 maxRPM) { CalculatePokeblock(berries, pokeblock, numPlayers, flavors, maxRPM); } @@ -3471,7 +3468,7 @@ static bool8 PrintBlendingResults(void) struct Pokeblock pokeblock; u8 flavors[FLAVOR_COUNT + 1]; u8 text[40]; - u16 berryIds[4]; // unused + u16 UNUSED berryIds[4]; switch (sBerryBlender->mainState) { @@ -3866,6 +3863,9 @@ static void Blender_AddTextPrinter(u8 windowId, const u8 *string, u8 x, u8 y, s3 { case 0: case 3: +#ifdef UBFIX + default: +#endif txtColor[0] = TEXT_COLOR_WHITE; txtColor[1] = TEXT_COLOR_DARK_GRAY; txtColor[2] = TEXT_COLOR_LIGHT_GRAY; diff --git a/src/berry_crush.c b/src/berry_crush.c index c0a75b1994..4e789f27a4 100755 --- a/src/berry_crush.c +++ b/src/berry_crush.c @@ -1062,7 +1062,7 @@ static void BerryCrush_SetVBlankCB(void) SetVBlankCallback(VBlankCB); } -static void BerryCrush_InitVBlankCB(void) +static void UNUSED BerryCrush_InitVBlankCB(void) { SetVBlankCallback(NULL); } diff --git a/src/berry_fix_graphics.c b/src/berry_fix_graphics.c index d766c39662..80510a4ce1 100644 --- a/src/berry_fix_graphics.c +++ b/src/berry_fix_graphics.c @@ -34,8 +34,8 @@ static const struct { } }; -// Unused. See berry_fix_program.c -static void LoadBerryFixGraphics(u32 idx) +// See berry_fix_program.c +static void UNUSED LoadBerryFixGraphics(u32 idx) { REG_DISPCNT = 0; REG_BG0HOFS = 0; diff --git a/src/berry_powder.c b/src/berry_powder.c index 7066f9d95c..4a9fa421d3 100755 --- a/src/berry_powder.c +++ b/src/berry_powder.c @@ -15,8 +15,7 @@ static EWRAM_DATA u8 sBerryPowderVendorWindowId = 0; -// Unused -static const struct BgTemplate sBerryPowderBgTemplates[] = +static const struct BgTemplate UNUSED sBerryPowderBgTemplates[] = { { .bg = 0, @@ -57,10 +56,9 @@ static const struct BgTemplate sBerryPowderBgTemplates[] = }; // ? Part of the BG templates? -static const u32 sUnknown[] = {0xFF, 0x00}; +static const u32 UNUSED sUnknown[] = {0xFF, 0x00}; -// Unused -static const struct WindowTemplate sBerryPowderWindowTemplates[] = +static const struct WindowTemplate UNUSED sBerryPowderWindowTemplates[] = { { .bg = 0, @@ -177,7 +175,7 @@ bool8 GiveBerryPowder(u32 amountToAdd) } } -static bool8 TakeBerryPowder_(u32 cost) +static bool8 UNUSED TakeBerryPowder_(u32 cost) { u32 *powder = &gSaveBlock2Ptr->berryCrush.berryPowderAmount; if (!HasEnoughBerryPowder_(cost)) diff --git a/src/braille_puzzles.c b/src/braille_puzzles.c index 49f73dd6b7..7863f3cc11 100644 --- a/src/braille_puzzles.c +++ b/src/braille_puzzles.c @@ -256,7 +256,7 @@ static void DoBrailleRegisteelEffect(void) } // theory: another commented out DoBrailleWait and Task_BrailleWait. -static void DoBrailleWait(void) +static void UNUSED DoBrailleWait(void) { } diff --git a/src/cable_club.c b/src/cable_club.c index b12a50920f..5305326589 100644 --- a/src/cable_club.c +++ b/src/cable_club.c @@ -195,8 +195,7 @@ static bool32 CheckSioErrored(u8 taskId) return FALSE; } -// Unused -static void Task_DelayedBlockRequest(u8 taskId) +static void UNUSED Task_DelayedBlockRequest(u8 taskId) { gTasks[taskId].data[0]++; if (gTasks[taskId].data[0] == 10) @@ -1166,14 +1165,13 @@ void PlayerEnteredTradeSeat(void) CreateTask_EnterCableClubSeat(Task_StartWiredTrade); } -// Unused -static void CreateTask_StartWiredTrade(void) +static void UNUSED CreateTask_StartWiredTrade(void) { CreateTask(Task_StartWiredTrade, 80); } -// Unused, implemented in Ruby/Sapphire -void Script_StartWiredTrade(void) +// Implemented in Ruby/Sapphire +void UNUSED Script_StartWiredTrade(void) { // CreateTask_StartWiredTrade(); // ScriptContext_Stop(); @@ -1189,10 +1187,9 @@ void ColosseumPlayerSpotTriggered(void) CreateTask_EnterCableClubSeat(Task_StartWiredCableClubBattle); } -// Unused -static void CreateTask_EnterCableClubSeatNoFollowup(void) +static UNUSED void CreateTask_EnterCableClubSeatNoFollowup(void) { - u8 taskId = CreateTask(Task_EnterCableClubSeat, 80); + u8 UNUSED taskId = CreateTask(Task_EnterCableClubSeat, 80); ScriptContext_Stop(); } @@ -1262,8 +1259,7 @@ static void Task_WaitExitToScript(u8 taskId) } } -// Unused -static void ExitLinkToScript(u8 taskId) +static void UNUSED ExitLinkToScript(u8 taskId) { SetCloseLinkCallback(); gTasks[taskId].func = Task_WaitExitToScript; diff --git a/src/contest.c b/src/contest.c index 09c07536f1..e183c2bd74 100644 --- a/src/contest.c +++ b/src/contest.c @@ -3251,8 +3251,7 @@ static void DrawMoveEffectSymbol(u16 move, u8 contestant) } } -// Unused -static void DrawMoveEffectSymbols(void) +static void UNUSED DrawMoveEffectSymbols(void) { s32 i; @@ -4221,8 +4220,7 @@ static void SpriteCB_EndBlinkContestantBox(struct Sprite *sprite) ResetBlendForContestantBoxBlink(); } -// Unused. -static void ContestDebugTogglePointTotal(void) +static void UNUSED ContestDebugTogglePointTotal(void) { if(eContestDebugMode == CONTEST_DEBUG_MODE_PRINT_POINT_TOTAL) eContestDebugMode = CONTEST_DEBUG_MODE_OFF; @@ -4876,15 +4874,13 @@ static void Task_ShowAndUpdateApplauseMeter(u8 taskId) } } -// Unused. -static void HideApplauseMeterNoAnim(void) +static void UNUSED HideApplauseMeterNoAnim(void) { gSprites[eContest.applauseMeterSpriteId].x2 = 0; gSprites[eContest.applauseMeterSpriteId].invisible = FALSE; } -// Unused. -static void ShowApplauseMeterNoAnim(void) +static void UNUSED ShowApplauseMeterNoAnim(void) { gSprites[eContest.applauseMeterSpriteId].invisible = TRUE; } diff --git a/src/credits.c b/src/credits.c index b412b29e27..69a4ebbbf3 100644 --- a/src/credits.c +++ b/src/credits.c @@ -80,7 +80,7 @@ struct CreditsEntry const u8 *text; }; -static EWRAM_DATA s16 sUnkVar = 0; // Never read, only set to 0 +static EWRAM_DATA s16 UNUSED sUnkVar = 0; // Never read, only set to 0 static EWRAM_DATA u16 sSavedTaskId = 0; EWRAM_DATA bool8 gHasHallOfFameRecords = 0; static EWRAM_DATA bool8 sUsedSpeedUp = 0; // Never read diff --git a/src/data.c b/src/data.c index 350927f86d..bde609be1d 100644 --- a/src/data.c +++ b/src/data.c @@ -16,100 +16,100 @@ static const u32 sMinigameDigitsThin_Gfx[] = INCBIN_U32("graphics/link/minigame_ const struct SpriteFrameImage gBattlerPicTable_PlayerLeft[] = { - BATTLER_OFFSET(0), MON_PIC_SIZE, - BATTLER_OFFSET(1), MON_PIC_SIZE, - BATTLER_OFFSET(2), MON_PIC_SIZE, - BATTLER_OFFSET(3), MON_PIC_SIZE, + {BATTLER_OFFSET(0), MON_PIC_SIZE}, + {BATTLER_OFFSET(1), MON_PIC_SIZE}, + {BATTLER_OFFSET(2), MON_PIC_SIZE}, + {BATTLER_OFFSET(3), MON_PIC_SIZE}, }; const struct SpriteFrameImage gBattlerPicTable_OpponentLeft[] = { - BATTLER_OFFSET(4), MON_PIC_SIZE, - BATTLER_OFFSET(5), MON_PIC_SIZE, - BATTLER_OFFSET(6), MON_PIC_SIZE, - BATTLER_OFFSET(7), MON_PIC_SIZE, + {BATTLER_OFFSET(4), MON_PIC_SIZE}, + {BATTLER_OFFSET(5), MON_PIC_SIZE}, + {BATTLER_OFFSET(6), MON_PIC_SIZE}, + {BATTLER_OFFSET(7), MON_PIC_SIZE}, }; const struct SpriteFrameImage gBattlerPicTable_PlayerRight[] = { - BATTLER_OFFSET(8), MON_PIC_SIZE, - BATTLER_OFFSET(9), MON_PIC_SIZE, - BATTLER_OFFSET(10), MON_PIC_SIZE, - BATTLER_OFFSET(11), MON_PIC_SIZE, + {BATTLER_OFFSET(8), MON_PIC_SIZE}, + {BATTLER_OFFSET(9), MON_PIC_SIZE}, + {BATTLER_OFFSET(10), MON_PIC_SIZE}, + {BATTLER_OFFSET(11), MON_PIC_SIZE}, }; const struct SpriteFrameImage gBattlerPicTable_OpponentRight[] = { - BATTLER_OFFSET(12), MON_PIC_SIZE, - BATTLER_OFFSET(13), MON_PIC_SIZE, - BATTLER_OFFSET(14), MON_PIC_SIZE, - BATTLER_OFFSET(15), MON_PIC_SIZE, + {BATTLER_OFFSET(12), MON_PIC_SIZE}, + {BATTLER_OFFSET(13), MON_PIC_SIZE}, + {BATTLER_OFFSET(14), MON_PIC_SIZE}, + {BATTLER_OFFSET(15), MON_PIC_SIZE}, }; const struct SpriteFrameImage gTrainerBackPicTable_Brendan[] = { - gTrainerBackPic_Brendan + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE, - gTrainerBackPic_Brendan + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE, - gTrainerBackPic_Brendan + TRAINER_PIC_SIZE * 2, TRAINER_PIC_SIZE, - gTrainerBackPic_Brendan + TRAINER_PIC_SIZE * 3, TRAINER_PIC_SIZE, + {gTrainerBackPic_Brendan + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE}, + {gTrainerBackPic_Brendan + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE}, + {gTrainerBackPic_Brendan + TRAINER_PIC_SIZE * 2, TRAINER_PIC_SIZE}, + {gTrainerBackPic_Brendan + TRAINER_PIC_SIZE * 3, TRAINER_PIC_SIZE}, }; const struct SpriteFrameImage gTrainerBackPicTable_May[] = { - gTrainerBackPic_May + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE, - gTrainerBackPic_May + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE, - gTrainerBackPic_May + TRAINER_PIC_SIZE * 2, TRAINER_PIC_SIZE, - gTrainerBackPic_May + TRAINER_PIC_SIZE * 3, TRAINER_PIC_SIZE, + {gTrainerBackPic_May + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE}, + {gTrainerBackPic_May + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE}, + {gTrainerBackPic_May + TRAINER_PIC_SIZE * 2, TRAINER_PIC_SIZE}, + {gTrainerBackPic_May + TRAINER_PIC_SIZE * 3, TRAINER_PIC_SIZE}, }; const struct SpriteFrameImage gTrainerBackPicTable_Red[] = { - gTrainerBackPic_Red + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE, - gTrainerBackPic_Red + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE, - gTrainerBackPic_Red + TRAINER_PIC_SIZE * 2, TRAINER_PIC_SIZE, - gTrainerBackPic_Red + TRAINER_PIC_SIZE * 3, TRAINER_PIC_SIZE, - gTrainerBackPic_Red + TRAINER_PIC_SIZE * 4, TRAINER_PIC_SIZE, + {gTrainerBackPic_Red + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE}, + {gTrainerBackPic_Red + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE}, + {gTrainerBackPic_Red + TRAINER_PIC_SIZE * 2, TRAINER_PIC_SIZE}, + {gTrainerBackPic_Red + TRAINER_PIC_SIZE * 3, TRAINER_PIC_SIZE}, + {gTrainerBackPic_Red + TRAINER_PIC_SIZE * 4, TRAINER_PIC_SIZE}, }; const struct SpriteFrameImage gTrainerBackPicTable_Leaf[] = { - gTrainerBackPic_Leaf + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE, - gTrainerBackPic_Leaf + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE, - gTrainerBackPic_Leaf + TRAINER_PIC_SIZE * 2, TRAINER_PIC_SIZE, - gTrainerBackPic_Leaf + TRAINER_PIC_SIZE * 3, TRAINER_PIC_SIZE, - gTrainerBackPic_Leaf + TRAINER_PIC_SIZE * 4, TRAINER_PIC_SIZE, + {gTrainerBackPic_Leaf + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE}, + {gTrainerBackPic_Leaf + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE}, + {gTrainerBackPic_Leaf + TRAINER_PIC_SIZE * 2, TRAINER_PIC_SIZE}, + {gTrainerBackPic_Leaf + TRAINER_PIC_SIZE * 3, TRAINER_PIC_SIZE}, + {gTrainerBackPic_Leaf + TRAINER_PIC_SIZE * 4, TRAINER_PIC_SIZE}, }; const struct SpriteFrameImage gTrainerBackPicTable_RubySapphireBrendan[] = { - gTrainerBackPic_RubySapphireBrendan + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE, - gTrainerBackPic_RubySapphireBrendan + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE, - gTrainerBackPic_RubySapphireBrendan + TRAINER_PIC_SIZE * 2, TRAINER_PIC_SIZE, - gTrainerBackPic_RubySapphireBrendan + TRAINER_PIC_SIZE * 3, TRAINER_PIC_SIZE, + {gTrainerBackPic_RubySapphireBrendan + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE}, + {gTrainerBackPic_RubySapphireBrendan + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE}, + {gTrainerBackPic_RubySapphireBrendan + TRAINER_PIC_SIZE * 2, TRAINER_PIC_SIZE}, + {gTrainerBackPic_RubySapphireBrendan + TRAINER_PIC_SIZE * 3, TRAINER_PIC_SIZE}, }; const struct SpriteFrameImage gTrainerBackPicTable_RubySapphireMay[] = { - gTrainerBackPic_RubySapphireMay + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE, - gTrainerBackPic_RubySapphireMay + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE, - gTrainerBackPic_RubySapphireMay + TRAINER_PIC_SIZE * 2, TRAINER_PIC_SIZE, - gTrainerBackPic_RubySapphireMay + TRAINER_PIC_SIZE * 3, TRAINER_PIC_SIZE, + {gTrainerBackPic_RubySapphireMay + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE}, + {gTrainerBackPic_RubySapphireMay + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE}, + {gTrainerBackPic_RubySapphireMay + TRAINER_PIC_SIZE * 2, TRAINER_PIC_SIZE}, + {gTrainerBackPic_RubySapphireMay + TRAINER_PIC_SIZE * 3, TRAINER_PIC_SIZE}, }; const struct SpriteFrameImage gTrainerBackPicTable_Wally[] = { - gTrainerBackPic_Wally + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE, - gTrainerBackPic_Wally + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE, - gTrainerBackPic_Wally + TRAINER_PIC_SIZE * 2, TRAINER_PIC_SIZE, - gTrainerBackPic_Wally + TRAINER_PIC_SIZE * 3, TRAINER_PIC_SIZE, + {gTrainerBackPic_Wally + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE}, + {gTrainerBackPic_Wally + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE}, + {gTrainerBackPic_Wally + TRAINER_PIC_SIZE * 2, TRAINER_PIC_SIZE}, + {gTrainerBackPic_Wally + TRAINER_PIC_SIZE * 3, TRAINER_PIC_SIZE}, }; const struct SpriteFrameImage gTrainerBackPicTable_Steven[] = { - gTrainerBackPic_Steven + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE, - gTrainerBackPic_Steven + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE, - gTrainerBackPic_Steven + TRAINER_PIC_SIZE * 2, TRAINER_PIC_SIZE, - gTrainerBackPic_Steven + TRAINER_PIC_SIZE * 3, TRAINER_PIC_SIZE, + {gTrainerBackPic_Steven + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE}, + {gTrainerBackPic_Steven + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE}, + {gTrainerBackPic_Steven + TRAINER_PIC_SIZE * 2, TRAINER_PIC_SIZE}, + {gTrainerBackPic_Steven + TRAINER_PIC_SIZE * 3, TRAINER_PIC_SIZE}, }; static const union AnimCmd sAnim_GeneralFrame0[] = diff --git a/src/data/credits.h b/src/data/credits.h index 3ae2b1d3be..3b92ae26f7 100644 --- a/src/data/credits.h +++ b/src/data/credits.h @@ -221,565 +221,565 @@ static const u8 sCreditsText_MotoyasuTojima[] = _("Motoyasu Toji static const u8 sCreditsText_NicolaPrattBarlow[] = _("Nicola Pratt-Barlow"); static const u8 sCreditsText_ShellieDow[] = _("Shellie Dow"); static const u8 sCreditsText_ErikJohnson[] = _("Erik Johnson"); -static const struct CreditsEntry sCreditsEntry_EmptyString[] = { 0, FALSE, sCreditsText_EmptyString}; -static const struct CreditsEntry sCreditsEntry_PkmnEmeraldVersion[] = { 7, TRUE, sCreditsText_PkmnEmeraldVersion}; -static const struct CreditsEntry sCreditsEntry_Credits[] = {11, TRUE, sCreditsText_Credits}; -static const struct CreditsEntry sCreditsEntry_ExecutiveDirector[] = { 8, TRUE, sCreditsText_ExecutiveDirector}; -static const struct CreditsEntry sCreditsEntry_Director[] = {12, TRUE, sCreditsText_Director}; -static const struct CreditsEntry sCreditsEntry_ArtDirector[] = {10, TRUE, sCreditsText_ArtDirector}; -static const struct CreditsEntry sCreditsEntry_BattleDirector[] = {10, TRUE, sCreditsText_BattleDirector}; -static const struct CreditsEntry sCreditsEntry_MainProgrammer[] = {10, TRUE, sCreditsText_MainProgrammer}; -static const struct CreditsEntry sCreditsEntry_BattleSystemPgrms[] = { 8, TRUE, sCreditsText_BattleSystemPgrms}; -static const struct CreditsEntry sCreditsEntry_FieldSystemPgrms[] = { 7, TRUE, sCreditsText_FieldSystemPgrms}; -static const struct CreditsEntry sCreditsEntry_Programmers[] = {12, TRUE, sCreditsText_Programmers}; -static const struct CreditsEntry sCreditsEntry_MainGraphicDesigner[] = { 7, TRUE, sCreditsText_MainGraphicDesigner}; -static const struct CreditsEntry sCreditsEntry_GraphicDesigners[] = { 9, TRUE, sCreditsText_GraphicDesigners}; -static const struct CreditsEntry sCreditsEntry_PkmnDesigners[] = {10, TRUE, sCreditsText_PkmnDesigners}; -static const struct CreditsEntry sCreditsEntry_MusicComposition[] = {13, TRUE, sCreditsText_MusicComposition}; -static const struct CreditsEntry sCreditsEntry_SoundEffectsAndPkmnVoices[] = { 4, TRUE, sCreditsText_SoundEffectsAndPkmnVoices}; -static const struct CreditsEntry sCreditsEntry_GameDesigners[] = {11, TRUE, sCreditsText_GameDesigners}; -static const struct CreditsEntry sCreditsEntry_ScenarioPlot[] = {11, TRUE, sCreditsText_ScenarioPlot}; -static const struct CreditsEntry sCreditsEntry_Scenario[] = {13, TRUE, sCreditsText_Scenario}; -static const struct CreditsEntry sCreditsEntry_ScriptDesigners[] = {10, TRUE, sCreditsText_ScriptDesigners}; -static const struct CreditsEntry sCreditsEntry_MapDesigners[] = {11, TRUE, sCreditsText_MapDesigners}; -static const struct CreditsEntry sCreditsEntry_MapDataDesigners[] = { 9, TRUE, sCreditsText_MapDataDesigners}; -static const struct CreditsEntry sCreditsEntry_ParametricDesigners[] = { 9, TRUE, sCreditsText_ParametricDesigners}; -static const struct CreditsEntry sCreditsEntry_PokedexText[] = {11, TRUE, sCreditsText_PokedexText}; -static const struct CreditsEntry sCreditsEntry_EnvAndToolPgrms[] = { 6, TRUE, sCreditsText_EnvAndToolPgrms}; -static const struct CreditsEntry sCreditsEntry_NCLProductTesting[] = {11, TRUE, sCreditsText_NCLProductTesting}; -static const struct CreditsEntry sCreditsEntry_SpecialThanks[] = {10, TRUE, sCreditsText_SpecialThanks}; -static const struct CreditsEntry sCreditsEntry_Coordinators[] = {11, TRUE, sCreditsText_Coordinators}; -static const struct CreditsEntry sCreditsEntry_Producers[] = {11, TRUE, sCreditsText_Producers}; -static const struct CreditsEntry sCreditsEntry_ExecProducers[] = { 7, TRUE, sCreditsText_ExecProducers}; -static const struct CreditsEntry sCreditsEntry_InfoSupervisors[] = {10, TRUE, sCreditsText_InfoSupervisors}; -static const struct CreditsEntry sCreditsEntry_TaskManagers[] = { 8, TRUE, sCreditsText_TaskManagers}; -static const struct CreditsEntry sCreditsEntry_BrailleCodeCheck[] = {10, TRUE, sCreditsText_BrailleCodeCheck}; -static const struct CreditsEntry sCreditsEntry_WorldDirector[] = {10, TRUE, sCreditsText_WorldDirector}; -static const struct CreditsEntry sCreditsEntry_BattleFrontierData[] = { 8, TRUE, sCreditsText_BattleFrontierData}; -static const struct CreditsEntry sCreditsEntry_SupportProgrammers[] = {10, TRUE, sCreditsText_SupportProgrammers}; -static const struct CreditsEntry sCreditsEntry_Artwork[] = {12, TRUE, sCreditsText_Artwork}; -static const struct CreditsEntry sCreditsEntry_LeadProgrammer[] = {10, TRUE, sCreditsText_LeadProgrammer}; -static const struct CreditsEntry sCreditsEntry_LeadGraphicArtist[] = { 9, TRUE, sCreditsText_LeadGraphicArtist}; -static const struct CreditsEntry sCreditsEntry_SatoshiTajiri[] = {11, FALSE, sCreditsText_SatoshiTajiri}; -static const struct CreditsEntry sCreditsEntry_JunichiMasuda[] = {11, FALSE, sCreditsText_JunichiMasuda}; -static const struct CreditsEntry sCreditsEntry_KenSugimori[] = {11, FALSE, sCreditsText_KenSugimori}; -static const struct CreditsEntry sCreditsEntry_ShigekiMorimoto[] = {11, FALSE, sCreditsText_ShigekiMorimoto}; -static const struct CreditsEntry sCreditsEntry_TetsuyaWatanabe[] = {11, FALSE, sCreditsText_TetsuyaWatanabe}; -static const struct CreditsEntry sCreditsEntry_HisashiSogabe[] = {11, FALSE, sCreditsText_HisashiSogabe}; -static const struct CreditsEntry sCreditsEntry_SosukeTamada[] = {11, FALSE, sCreditsText_SosukeTamada}; -static const struct CreditsEntry sCreditsEntry_AkitoMori[] = {11, FALSE, sCreditsText_AkitoMori}; -static const struct CreditsEntry sCreditsEntry_KeitaKagaya[] = {11, FALSE, sCreditsText_KeitaKagaya}; -static const struct CreditsEntry sCreditsEntry_YoshinoriMatsuda[] = {11, FALSE, sCreditsText_YoshinoriMatsuda}; -static const struct CreditsEntry sCreditsEntry_HiroyukiNakamura[] = {11, FALSE, sCreditsText_HiroyukiNakamura}; -static const struct CreditsEntry sCreditsEntry_MasaoTaya[] = {11, FALSE, sCreditsText_MasaoTaya}; -static const struct CreditsEntry sCreditsEntry_SatoshiNohara[] = {11, FALSE, sCreditsText_SatoshiNohara}; -static const struct CreditsEntry sCreditsEntry_TomomichiOhta[] = {11, FALSE, sCreditsText_TomomichiOhta}; -static const struct CreditsEntry sCreditsEntry_MiyukiIwasawa[] = {11, FALSE, sCreditsText_MiyukiIwasawa}; -static const struct CreditsEntry sCreditsEntry_TakenoriOhta[] = {11, FALSE, sCreditsText_TakenoriOhta}; -static const struct CreditsEntry sCreditsEntry_HironobuYoshida[] = {11, FALSE, sCreditsText_HironobuYoshida}; -static const struct CreditsEntry sCreditsEntry_MotofumiFujiwara[] = {11, FALSE, sCreditsText_MotofumiFujiwara}; -static const struct CreditsEntry sCreditsEntry_SatoshiOhta[] = {11, FALSE, sCreditsText_SatoshiOhta}; -static const struct CreditsEntry sCreditsEntry_AsukaIwashita[] = {11, FALSE, sCreditsText_AsukaIwashita}; -static const struct CreditsEntry sCreditsEntry_AimiTomita[] = {11, FALSE, sCreditsText_AimiTomita}; -static const struct CreditsEntry sCreditsEntry_TakaoUnno[] = {11, FALSE, sCreditsText_TakaoUnno}; -static const struct CreditsEntry sCreditsEntry_KanakoEo[] = {11, FALSE, sCreditsText_KanakoEo}; -static const struct CreditsEntry sCreditsEntry_JunOkutani[] = {11, FALSE, sCreditsText_JunOkutani}; -static const struct CreditsEntry sCreditsEntry_AtsukoNishida[] = {11, FALSE, sCreditsText_AtsukoNishida}; -static const struct CreditsEntry sCreditsEntry_MuneoSaito[] = {11, FALSE, sCreditsText_MuneoSaito}; -static const struct CreditsEntry sCreditsEntry_RenaYoshikawa[] = {11, FALSE, sCreditsText_RenaYoshikawa}; -static const struct CreditsEntry sCreditsEntry_GoIchinose[] = {11, FALSE, sCreditsText_GoIchinose}; -static const struct CreditsEntry sCreditsEntry_MorikazuAoki[] = {11, FALSE, sCreditsText_MorikazuAoki}; -static const struct CreditsEntry sCreditsEntry_KojiNishino[] = {11, FALSE, sCreditsText_KojiNishino}; -static const struct CreditsEntry sCreditsEntry_KenjiMatsushima[] = {11, FALSE, sCreditsText_KenjiMatsushima}; -static const struct CreditsEntry sCreditsEntry_TetsujiOhta[] = {11, FALSE, sCreditsText_TetsujiOhta}; -static const struct CreditsEntry sCreditsEntry_HitomiSato[] = {11, FALSE, sCreditsText_HitomiSato}; -static const struct CreditsEntry sCreditsEntry_TakeshiKawachimaru[] = {11, FALSE, sCreditsText_TakeshiKawachimaru}; -static const struct CreditsEntry sCreditsEntry_TeruyukiShimoyamada[] = {11, FALSE, sCreditsText_TeruyukiShimoyamada}; -static const struct CreditsEntry sCreditsEntry_ShigeruOhmori[] = {11, FALSE, sCreditsText_ShigeruOhmori}; -static const struct CreditsEntry sCreditsEntry_TadashiTakahashi[] = {11, FALSE, sCreditsText_TadashiTakahashi}; -static const struct CreditsEntry sCreditsEntry_ToshinobuMatsumiya[] = {11, FALSE, sCreditsText_ToshinobuMatsumiya}; -static const struct CreditsEntry sCreditsEntry_AkihitoTomisawa[] = {11, FALSE, sCreditsText_AkihitoTomisawa}; -static const struct CreditsEntry sCreditsEntry_HirokiEnomoto[] = {11, FALSE, sCreditsText_HirokiEnomoto}; -static const struct CreditsEntry sCreditsEntry_KazuyukiTerada[] = {11, FALSE, sCreditsText_KazuyukiTerada}; -static const struct CreditsEntry sCreditsEntry_YuriSakurai[] = {11, FALSE, sCreditsText_YuriSakurai}; -static const struct CreditsEntry sCreditsEntry_HiromiSagawa[] = {11, FALSE, sCreditsText_HiromiSagawa}; -static const struct CreditsEntry sCreditsEntry_KenjiTominaga[] = {11, FALSE, sCreditsText_KenjiTominaga}; -static const struct CreditsEntry sCreditsEntry_YoshioTajiri[] = {11, FALSE, sCreditsText_YoshioTajiri}; -static const struct CreditsEntry sCreditsEntry_TeikoSasaki[] = {11, FALSE, sCreditsText_TeikoSasaki}; -static const struct CreditsEntry sCreditsEntry_SachikoHamano[] = {11, FALSE, sCreditsText_SachikoHamano}; -static const struct CreditsEntry sCreditsEntry_ChieMatsumiya[] = {11, FALSE, sCreditsText_ChieMatsumiya}; -static const struct CreditsEntry sCreditsEntry_AkikoShinozaki[] = {11, FALSE, sCreditsText_AkikoShinozaki}; -static const struct CreditsEntry sCreditsEntry_AstukoFujii[] = {11, FALSE, sCreditsText_AstukoFujii}; -static const struct CreditsEntry sCreditsEntry_NozomuSaito[] = {11, FALSE, sCreditsText_NozomuSaito}; -static const struct CreditsEntry sCreditsEntry_KenkichiToyama[] = {11, FALSE, sCreditsText_KenkichiToyama}; -static const struct CreditsEntry sCreditsEntry_SuguruNakatsui[] = {11, FALSE, sCreditsText_SuguruNakatsui}; -static const struct CreditsEntry sCreditsEntry_YumiFunasaka[] = {11, FALSE, sCreditsText_YumiFunasaka}; -static const struct CreditsEntry sCreditsEntry_NaokoYanase[] = {11, FALSE, sCreditsText_NaokoYanase}; -static const struct CreditsEntry sCreditsEntry_NCLSuperMarioClub[] = {11, FALSE, sCreditsText_NCLSuperMarioClub}; -static const struct CreditsEntry sCreditsEntry_AtsushiTada[] = {11, FALSE, sCreditsText_AtsushiTada}; -static const struct CreditsEntry sCreditsEntry_TakahiroOhnishi[] = {11, FALSE, sCreditsText_TakahiroOhnishi}; -static const struct CreditsEntry sCreditsEntry_NorihideOkamura[] = {11, FALSE, sCreditsText_NorihideOkamura}; -static const struct CreditsEntry sCreditsEntry_HiroNakamura[] = {11, FALSE, sCreditsText_HiroNakamura}; -static const struct CreditsEntry sCreditsEntry_HiroyukiUesugi[] = {11, FALSE, sCreditsText_HiroyukiUesugi}; -static const struct CreditsEntry sCreditsEntry_TerukiMurakawa[] = {11, FALSE, sCreditsText_TerukiMurakawa}; -static const struct CreditsEntry sCreditsEntry_AkiraKinashi[] = {11, FALSE, sCreditsText_AkiraKinashi}; -static const struct CreditsEntry sCreditsEntry_MichikoTakizawa[] = {11, FALSE, sCreditsText_MichikoTakizawa}; -static const struct CreditsEntry sCreditsEntry_MakikoTakada[] = {11, FALSE, sCreditsText_MakikoTakada}; -static const struct CreditsEntry sCreditsEntry_TakanaoKondo[] = {11, FALSE, sCreditsText_TakanaoKondo}; -static const struct CreditsEntry sCreditsEntry_AiMashima[] = {11, FALSE, sCreditsText_AiMashima}; -static const struct CreditsEntry sCreditsEntry_GakujiNomoto[] = {11, FALSE, sCreditsText_GakujiNomoto}; -static const struct CreditsEntry sCreditsEntry_TakehiroIzushi[] = {11, FALSE, sCreditsText_TakehiroIzushi}; -static const struct CreditsEntry sCreditsEntry_HitoshiYamagami[] = {11, FALSE, sCreditsText_HitoshiYamagami}; -static const struct CreditsEntry sCreditsEntry_KyokoWatanabe[] = {11, FALSE, sCreditsText_KyokoWatanabe}; -static const struct CreditsEntry sCreditsEntry_TakaoNakano[] = {11, FALSE, sCreditsText_TakaoNakano}; -static const struct CreditsEntry sCreditsEntry_HiroyukiJinnai[] = {11, FALSE, sCreditsText_HiroyukiJinnai}; -static const struct CreditsEntry sCreditsEntry_HiroakiTsuru[] = {11, FALSE, sCreditsText_HiroakiTsuru}; -static const struct CreditsEntry sCreditsEntry_TsunekazIshihara[] = {11, FALSE, sCreditsText_TsunekazIshihara}; -static const struct CreditsEntry sCreditsEntry_SatoruIwata[] = {11, FALSE, sCreditsText_SatoruIwata}; -static const struct CreditsEntry sCreditsEntry_KazuyaSuyama[] = {11, FALSE, sCreditsText_KazuyaSuyama}; -static const struct CreditsEntry sCreditsEntry_SatoshiMitsuhara[] = {11, FALSE, sCreditsText_SatoshiMitsuhara}; -static const struct CreditsEntry sCreditsEntry_JapanBrailleLibrary[] = { 9, FALSE, sCreditsText_JapanBrailleLibrary}; -static const struct CreditsEntry sCreditsEntry_TomotakaKomura[] = {11, FALSE, sCreditsText_TomotakaKomura}; -static const struct CreditsEntry sCreditsEntry_MikikoOhhashi[] = {11, FALSE, sCreditsText_MikikoOhhashi}; -static const struct CreditsEntry sCreditsEntry_DaisukeHoshino[] = {11, FALSE, sCreditsText_DaisukeHoshino}; -static const struct CreditsEntry sCreditsEntry_KenjiroIto[] = {11, FALSE, sCreditsText_KenjiroIto}; -static const struct CreditsEntry sCreditsEntry_RuiKawaguchi[] = {11, FALSE, sCreditsText_RuiKawaguchi}; -static const struct CreditsEntry sCreditsEntry_ShunsukeKohori[] = {11, FALSE, sCreditsText_ShunsukeKohori}; -static const struct CreditsEntry sCreditsEntry_SachikoNakamichi[] = {11, FALSE, sCreditsText_SachikoNakamichi}; -static const struct CreditsEntry sCreditsEntry_FujikoNomura[] = {11, FALSE, sCreditsText_FujikoNomura}; -static const struct CreditsEntry sCreditsEntry_KazukiYoshihara[] = {11, FALSE, sCreditsText_KazukiYoshihara}; -static const struct CreditsEntry sCreditsEntry_RetsujiNomoto[] = {11, FALSE, sCreditsText_RetsujiNomoto}; -static const struct CreditsEntry sCreditsEntry_AzusaTajima[] = {11, FALSE, sCreditsText_AzusaTajima}; -static const struct CreditsEntry sCreditsEntry_ShusakuEgami[] = {11, FALSE, sCreditsText_ShusakuEgami}; -static const struct CreditsEntry sCreditsEntry_PackageAndManual[] = { 0, TRUE, sCreditsText_PackageAndManual}; -static const struct CreditsEntry sCreditsEntry_EnglishVersion[] = { 0, TRUE, sCreditsText_EnglishVersion}; -static const struct CreditsEntry sCreditsEntry_Translator[] = { 0, TRUE, sCreditsText_Translator}; -static const struct CreditsEntry sCreditsEntry_TextEditor[] = { 0, TRUE, sCreditsText_TextEditor}; -static const struct CreditsEntry sCreditsEntry_NCLCoordinator[] = { 0, TRUE, sCreditsText_NCLCoordinator}; -static const struct CreditsEntry sCreditsEntry_GraphicDesigner[] = { 0, TRUE, sCreditsText_GraphicDesigner}; -static const struct CreditsEntry sCreditsEntry_NOAProductTesting[] = { 0, TRUE, sCreditsText_NOAProductTesting}; -static const struct CreditsEntry sCreditsEntry_HideyukiNakajima[] = { 0, FALSE, sCreditsText_HideyukiNakajima}; -static const struct CreditsEntry sCreditsEntry_HidenoriSaeki[] = { 0, FALSE, sCreditsText_HidenoriSaeki}; -static const struct CreditsEntry sCreditsEntry_YokoWatanabe[] = { 0, FALSE, sCreditsText_YokoWatanabe}; -static const struct CreditsEntry sCreditsEntry_SakaeKimura[] = { 0, FALSE, sCreditsText_SakaeKimura}; -static const struct CreditsEntry sCreditsEntry_ChiakiShinkai[] = { 0, FALSE, sCreditsText_ChiakiShinkai}; -static const struct CreditsEntry sCreditsEntry_SethMcMahill[] = { 0, FALSE, sCreditsText_SethMcMahill}; -static const struct CreditsEntry sCreditsEntry_NobOgasawara[] = { 0, FALSE, sCreditsText_NobOgasawara}; -static const struct CreditsEntry sCreditsEntry_TeresaLillygren[] = { 0, FALSE, sCreditsText_TeresaLillygren}; -static const struct CreditsEntry sCreditsEntry_KimikoNakamichi[] = { 0, FALSE, sCreditsText_KimikoNakamichi}; -static const struct CreditsEntry sCreditsEntry_SouichiYamamoto[] = { 0, FALSE, sCreditsText_SouichiYamamoto}; -static const struct CreditsEntry sCreditsEntry_YuichiroIto[] = { 0, FALSE, sCreditsText_YuichiroIto}; -static const struct CreditsEntry sCreditsEntry_ThomasHertzog[] = { 0, FALSE, sCreditsText_ThomasHertzog}; -static const struct CreditsEntry sCreditsEntry_MikaKurosawa[] = { 0, FALSE, sCreditsText_MikaKurosawa}; -static const struct CreditsEntry sCreditsEntry_NationalFederationBlind[] = { 0, FALSE, sCreditsText_NationalFederationBlind}; -static const struct CreditsEntry sCreditsEntry_PatriciaAMaurer[] = { 0, FALSE, sCreditsText_PatriciaAMaurer}; -static const struct CreditsEntry sCreditsEntry_EuropeanBlindUnion[] = { 0, FALSE, sCreditsText_EuropeanBlindUnion}; -static const struct CreditsEntry sCreditsEntry_AustralianBrailleAuthority[] = { 0, FALSE, sCreditsText_AustralianBrailleAuthority}; -static const struct CreditsEntry sCreditsEntry_RoyalNewZealandFederationBlind[] = { 0, FALSE, sCreditsText_RoyalNewZealandFederationBlind}; -static const struct CreditsEntry sCreditsEntry_MotoyasuTojima[] = { 0, FALSE, sCreditsText_MotoyasuTojima}; -static const struct CreditsEntry sCreditsEntry_NicolaPrattBarlow[] = { 0, FALSE, sCreditsText_NicolaPrattBarlow}; -static const struct CreditsEntry sCreditsEntry_ShellieDow[] = { 0, FALSE, sCreditsText_ShellieDow}; -static const struct CreditsEntry sCreditsEntry_ErikJohnson[] = { 0, FALSE, sCreditsText_ErikJohnson}; +static const struct CreditsEntry sCreditsEntry_EmptyString = { 0, FALSE, sCreditsText_EmptyString}; +static const struct CreditsEntry sCreditsEntry_PkmnEmeraldVersion = { 7, TRUE, sCreditsText_PkmnEmeraldVersion}; +static const struct CreditsEntry sCreditsEntry_Credits = {11, TRUE, sCreditsText_Credits}; +static const struct CreditsEntry sCreditsEntry_ExecutiveDirector = { 8, TRUE, sCreditsText_ExecutiveDirector}; +static const struct CreditsEntry sCreditsEntry_Director = {12, TRUE, sCreditsText_Director}; +static const struct CreditsEntry sCreditsEntry_ArtDirector = {10, TRUE, sCreditsText_ArtDirector}; +static const struct CreditsEntry sCreditsEntry_BattleDirector = {10, TRUE, sCreditsText_BattleDirector}; +static const struct CreditsEntry sCreditsEntry_MainProgrammer = {10, TRUE, sCreditsText_MainProgrammer}; +static const struct CreditsEntry sCreditsEntry_BattleSystemPgrms = { 8, TRUE, sCreditsText_BattleSystemPgrms}; +static const struct CreditsEntry sCreditsEntry_FieldSystemPgrms = { 7, TRUE, sCreditsText_FieldSystemPgrms}; +static const struct CreditsEntry sCreditsEntry_Programmers = {12, TRUE, sCreditsText_Programmers}; +static const struct CreditsEntry sCreditsEntry_MainGraphicDesigner = { 7, TRUE, sCreditsText_MainGraphicDesigner}; +static const struct CreditsEntry sCreditsEntry_GraphicDesigners = { 9, TRUE, sCreditsText_GraphicDesigners}; +static const struct CreditsEntry sCreditsEntry_PkmnDesigners = {10, TRUE, sCreditsText_PkmnDesigners}; +static const struct CreditsEntry sCreditsEntry_MusicComposition = {13, TRUE, sCreditsText_MusicComposition}; +static const struct CreditsEntry sCreditsEntry_SoundEffectsAndPkmnVoices = { 4, TRUE, sCreditsText_SoundEffectsAndPkmnVoices}; +static const struct CreditsEntry sCreditsEntry_GameDesigners = {11, TRUE, sCreditsText_GameDesigners}; +static const struct CreditsEntry sCreditsEntry_ScenarioPlot = {11, TRUE, sCreditsText_ScenarioPlot}; +static const struct CreditsEntry sCreditsEntry_Scenario = {13, TRUE, sCreditsText_Scenario}; +static const struct CreditsEntry sCreditsEntry_ScriptDesigners = {10, TRUE, sCreditsText_ScriptDesigners}; +static const struct CreditsEntry sCreditsEntry_MapDesigners = {11, TRUE, sCreditsText_MapDesigners}; +static const struct CreditsEntry sCreditsEntry_MapDataDesigners = { 9, TRUE, sCreditsText_MapDataDesigners}; +static const struct CreditsEntry sCreditsEntry_ParametricDesigners = { 9, TRUE, sCreditsText_ParametricDesigners}; +static const struct CreditsEntry sCreditsEntry_PokedexText = {11, TRUE, sCreditsText_PokedexText}; +static const struct CreditsEntry sCreditsEntry_EnvAndToolPgrms = { 6, TRUE, sCreditsText_EnvAndToolPgrms}; +static const struct CreditsEntry sCreditsEntry_NCLProductTesting = {11, TRUE, sCreditsText_NCLProductTesting}; +static const struct CreditsEntry sCreditsEntry_SpecialThanks = {10, TRUE, sCreditsText_SpecialThanks}; +static const struct CreditsEntry sCreditsEntry_Coordinators = {11, TRUE, sCreditsText_Coordinators}; +static const struct CreditsEntry sCreditsEntry_Producers = {11, TRUE, sCreditsText_Producers}; +static const struct CreditsEntry sCreditsEntry_ExecProducers = { 7, TRUE, sCreditsText_ExecProducers}; +static const struct CreditsEntry sCreditsEntry_InfoSupervisors = {10, TRUE, sCreditsText_InfoSupervisors}; +static const struct CreditsEntry sCreditsEntry_TaskManagers = { 8, TRUE, sCreditsText_TaskManagers}; +static const struct CreditsEntry sCreditsEntry_BrailleCodeCheck = {10, TRUE, sCreditsText_BrailleCodeCheck}; +static const struct CreditsEntry sCreditsEntry_WorldDirector = {10, TRUE, sCreditsText_WorldDirector}; +static const struct CreditsEntry sCreditsEntry_BattleFrontierData = { 8, TRUE, sCreditsText_BattleFrontierData}; +static const struct CreditsEntry sCreditsEntry_SupportProgrammers = {10, TRUE, sCreditsText_SupportProgrammers}; +static const struct CreditsEntry sCreditsEntry_Artwork = {12, TRUE, sCreditsText_Artwork}; +static const struct CreditsEntry sCreditsEntry_LeadProgrammer = {10, TRUE, sCreditsText_LeadProgrammer}; +static const struct CreditsEntry sCreditsEntry_LeadGraphicArtist = { 9, TRUE, sCreditsText_LeadGraphicArtist}; +static const struct CreditsEntry sCreditsEntry_SatoshiTajiri = {11, FALSE, sCreditsText_SatoshiTajiri}; +static const struct CreditsEntry sCreditsEntry_JunichiMasuda = {11, FALSE, sCreditsText_JunichiMasuda}; +static const struct CreditsEntry sCreditsEntry_KenSugimori = {11, FALSE, sCreditsText_KenSugimori}; +static const struct CreditsEntry sCreditsEntry_ShigekiMorimoto = {11, FALSE, sCreditsText_ShigekiMorimoto}; +static const struct CreditsEntry sCreditsEntry_TetsuyaWatanabe = {11, FALSE, sCreditsText_TetsuyaWatanabe}; +static const struct CreditsEntry sCreditsEntry_HisashiSogabe = {11, FALSE, sCreditsText_HisashiSogabe}; +static const struct CreditsEntry sCreditsEntry_SosukeTamada = {11, FALSE, sCreditsText_SosukeTamada}; +static const struct CreditsEntry sCreditsEntry_AkitoMori = {11, FALSE, sCreditsText_AkitoMori}; +static const struct CreditsEntry sCreditsEntry_KeitaKagaya = {11, FALSE, sCreditsText_KeitaKagaya}; +static const struct CreditsEntry sCreditsEntry_YoshinoriMatsuda = {11, FALSE, sCreditsText_YoshinoriMatsuda}; +static const struct CreditsEntry sCreditsEntry_HiroyukiNakamura = {11, FALSE, sCreditsText_HiroyukiNakamura}; +static const struct CreditsEntry sCreditsEntry_MasaoTaya = {11, FALSE, sCreditsText_MasaoTaya}; +static const struct CreditsEntry sCreditsEntry_SatoshiNohara = {11, FALSE, sCreditsText_SatoshiNohara}; +static const struct CreditsEntry sCreditsEntry_TomomichiOhta = {11, FALSE, sCreditsText_TomomichiOhta}; +static const struct CreditsEntry sCreditsEntry_MiyukiIwasawa = {11, FALSE, sCreditsText_MiyukiIwasawa}; +static const struct CreditsEntry sCreditsEntry_TakenoriOhta = {11, FALSE, sCreditsText_TakenoriOhta}; +static const struct CreditsEntry sCreditsEntry_HironobuYoshida = {11, FALSE, sCreditsText_HironobuYoshida}; +static const struct CreditsEntry sCreditsEntry_MotofumiFujiwara = {11, FALSE, sCreditsText_MotofumiFujiwara}; +static const struct CreditsEntry sCreditsEntry_SatoshiOhta = {11, FALSE, sCreditsText_SatoshiOhta}; +static const struct CreditsEntry sCreditsEntry_AsukaIwashita = {11, FALSE, sCreditsText_AsukaIwashita}; +static const struct CreditsEntry sCreditsEntry_AimiTomita = {11, FALSE, sCreditsText_AimiTomita}; +static const struct CreditsEntry sCreditsEntry_TakaoUnno = {11, FALSE, sCreditsText_TakaoUnno}; +static const struct CreditsEntry sCreditsEntry_KanakoEo = {11, FALSE, sCreditsText_KanakoEo}; +static const struct CreditsEntry sCreditsEntry_JunOkutani = {11, FALSE, sCreditsText_JunOkutani}; +static const struct CreditsEntry sCreditsEntry_AtsukoNishida = {11, FALSE, sCreditsText_AtsukoNishida}; +static const struct CreditsEntry sCreditsEntry_MuneoSaito = {11, FALSE, sCreditsText_MuneoSaito}; +static const struct CreditsEntry sCreditsEntry_RenaYoshikawa = {11, FALSE, sCreditsText_RenaYoshikawa}; +static const struct CreditsEntry sCreditsEntry_GoIchinose = {11, FALSE, sCreditsText_GoIchinose}; +static const struct CreditsEntry sCreditsEntry_MorikazuAoki = {11, FALSE, sCreditsText_MorikazuAoki}; +static const struct CreditsEntry sCreditsEntry_KojiNishino = {11, FALSE, sCreditsText_KojiNishino}; +static const struct CreditsEntry sCreditsEntry_KenjiMatsushima = {11, FALSE, sCreditsText_KenjiMatsushima}; +static const struct CreditsEntry sCreditsEntry_TetsujiOhta = {11, FALSE, sCreditsText_TetsujiOhta}; +static const struct CreditsEntry sCreditsEntry_HitomiSato = {11, FALSE, sCreditsText_HitomiSato}; +static const struct CreditsEntry sCreditsEntry_TakeshiKawachimaru = {11, FALSE, sCreditsText_TakeshiKawachimaru}; +static const struct CreditsEntry sCreditsEntry_TeruyukiShimoyamada = {11, FALSE, sCreditsText_TeruyukiShimoyamada}; +static const struct CreditsEntry sCreditsEntry_ShigeruOhmori = {11, FALSE, sCreditsText_ShigeruOhmori}; +static const struct CreditsEntry sCreditsEntry_TadashiTakahashi = {11, FALSE, sCreditsText_TadashiTakahashi}; +static const struct CreditsEntry sCreditsEntry_ToshinobuMatsumiya = {11, FALSE, sCreditsText_ToshinobuMatsumiya}; +static const struct CreditsEntry sCreditsEntry_AkihitoTomisawa = {11, FALSE, sCreditsText_AkihitoTomisawa}; +static const struct CreditsEntry sCreditsEntry_HirokiEnomoto = {11, FALSE, sCreditsText_HirokiEnomoto}; +static const struct CreditsEntry sCreditsEntry_KazuyukiTerada = {11, FALSE, sCreditsText_KazuyukiTerada}; +static const struct CreditsEntry sCreditsEntry_YuriSakurai = {11, FALSE, sCreditsText_YuriSakurai}; +static const struct CreditsEntry sCreditsEntry_HiromiSagawa = {11, FALSE, sCreditsText_HiromiSagawa}; +static const struct CreditsEntry sCreditsEntry_KenjiTominaga = {11, FALSE, sCreditsText_KenjiTominaga}; +static const struct CreditsEntry sCreditsEntry_YoshioTajiri = {11, FALSE, sCreditsText_YoshioTajiri}; +static const struct CreditsEntry sCreditsEntry_TeikoSasaki = {11, FALSE, sCreditsText_TeikoSasaki}; +static const struct CreditsEntry sCreditsEntry_SachikoHamano = {11, FALSE, sCreditsText_SachikoHamano}; +static const struct CreditsEntry sCreditsEntry_ChieMatsumiya = {11, FALSE, sCreditsText_ChieMatsumiya}; +static const struct CreditsEntry sCreditsEntry_AkikoShinozaki = {11, FALSE, sCreditsText_AkikoShinozaki}; +static const struct CreditsEntry sCreditsEntry_AstukoFujii = {11, FALSE, sCreditsText_AstukoFujii}; +static const struct CreditsEntry sCreditsEntry_NozomuSaito = {11, FALSE, sCreditsText_NozomuSaito}; +static const struct CreditsEntry sCreditsEntry_KenkichiToyama = {11, FALSE, sCreditsText_KenkichiToyama}; +static const struct CreditsEntry sCreditsEntry_SuguruNakatsui = {11, FALSE, sCreditsText_SuguruNakatsui}; +static const struct CreditsEntry sCreditsEntry_YumiFunasaka = {11, FALSE, sCreditsText_YumiFunasaka}; +static const struct CreditsEntry sCreditsEntry_NaokoYanase = {11, FALSE, sCreditsText_NaokoYanase}; +static const struct CreditsEntry sCreditsEntry_NCLSuperMarioClub = {11, FALSE, sCreditsText_NCLSuperMarioClub}; +static const struct CreditsEntry sCreditsEntry_AtsushiTada = {11, FALSE, sCreditsText_AtsushiTada}; +static const struct CreditsEntry sCreditsEntry_TakahiroOhnishi = {11, FALSE, sCreditsText_TakahiroOhnishi}; +static const struct CreditsEntry sCreditsEntry_NorihideOkamura = {11, FALSE, sCreditsText_NorihideOkamura}; +static const struct CreditsEntry sCreditsEntry_HiroNakamura = {11, FALSE, sCreditsText_HiroNakamura}; +static const struct CreditsEntry sCreditsEntry_HiroyukiUesugi = {11, FALSE, sCreditsText_HiroyukiUesugi}; +static const struct CreditsEntry sCreditsEntry_TerukiMurakawa = {11, FALSE, sCreditsText_TerukiMurakawa}; +static const struct CreditsEntry sCreditsEntry_AkiraKinashi = {11, FALSE, sCreditsText_AkiraKinashi}; +static const struct CreditsEntry sCreditsEntry_MichikoTakizawa = {11, FALSE, sCreditsText_MichikoTakizawa}; +static const struct CreditsEntry sCreditsEntry_MakikoTakada = {11, FALSE, sCreditsText_MakikoTakada}; +static const struct CreditsEntry sCreditsEntry_TakanaoKondo = {11, FALSE, sCreditsText_TakanaoKondo}; +static const struct CreditsEntry sCreditsEntry_AiMashima = {11, FALSE, sCreditsText_AiMashima}; +static const struct CreditsEntry sCreditsEntry_GakujiNomoto = {11, FALSE, sCreditsText_GakujiNomoto}; +static const struct CreditsEntry sCreditsEntry_TakehiroIzushi = {11, FALSE, sCreditsText_TakehiroIzushi}; +static const struct CreditsEntry sCreditsEntry_HitoshiYamagami = {11, FALSE, sCreditsText_HitoshiYamagami}; +static const struct CreditsEntry sCreditsEntry_KyokoWatanabe = {11, FALSE, sCreditsText_KyokoWatanabe}; +static const struct CreditsEntry sCreditsEntry_TakaoNakano = {11, FALSE, sCreditsText_TakaoNakano}; +static const struct CreditsEntry sCreditsEntry_HiroyukiJinnai = {11, FALSE, sCreditsText_HiroyukiJinnai}; +static const struct CreditsEntry sCreditsEntry_HiroakiTsuru = {11, FALSE, sCreditsText_HiroakiTsuru}; +static const struct CreditsEntry sCreditsEntry_TsunekazIshihara = {11, FALSE, sCreditsText_TsunekazIshihara}; +static const struct CreditsEntry sCreditsEntry_SatoruIwata = {11, FALSE, sCreditsText_SatoruIwata}; +static const struct CreditsEntry sCreditsEntry_KazuyaSuyama = {11, FALSE, sCreditsText_KazuyaSuyama}; +static const struct CreditsEntry sCreditsEntry_SatoshiMitsuhara = {11, FALSE, sCreditsText_SatoshiMitsuhara}; +static const struct CreditsEntry sCreditsEntry_JapanBrailleLibrary = { 9, FALSE, sCreditsText_JapanBrailleLibrary}; +static const struct CreditsEntry sCreditsEntry_TomotakaKomura = {11, FALSE, sCreditsText_TomotakaKomura}; +static const struct CreditsEntry sCreditsEntry_MikikoOhhashi = {11, FALSE, sCreditsText_MikikoOhhashi}; +static const struct CreditsEntry sCreditsEntry_DaisukeHoshino = {11, FALSE, sCreditsText_DaisukeHoshino}; +static const struct CreditsEntry sCreditsEntry_KenjiroIto = {11, FALSE, sCreditsText_KenjiroIto}; +static const struct CreditsEntry sCreditsEntry_RuiKawaguchi = {11, FALSE, sCreditsText_RuiKawaguchi}; +static const struct CreditsEntry sCreditsEntry_ShunsukeKohori = {11, FALSE, sCreditsText_ShunsukeKohori}; +static const struct CreditsEntry sCreditsEntry_SachikoNakamichi = {11, FALSE, sCreditsText_SachikoNakamichi}; +static const struct CreditsEntry sCreditsEntry_FujikoNomura = {11, FALSE, sCreditsText_FujikoNomura}; +static const struct CreditsEntry sCreditsEntry_KazukiYoshihara = {11, FALSE, sCreditsText_KazukiYoshihara}; +static const struct CreditsEntry sCreditsEntry_RetsujiNomoto = {11, FALSE, sCreditsText_RetsujiNomoto}; +static const struct CreditsEntry sCreditsEntry_AzusaTajima = {11, FALSE, sCreditsText_AzusaTajima}; +static const struct CreditsEntry sCreditsEntry_ShusakuEgami = {11, FALSE, sCreditsText_ShusakuEgami}; +static const struct CreditsEntry sCreditsEntry_PackageAndManual = { 0, TRUE, sCreditsText_PackageAndManual}; +static const struct CreditsEntry sCreditsEntry_EnglishVersion = { 0, TRUE, sCreditsText_EnglishVersion}; +static const struct CreditsEntry sCreditsEntry_Translator = { 0, TRUE, sCreditsText_Translator}; +static const struct CreditsEntry sCreditsEntry_TextEditor = { 0, TRUE, sCreditsText_TextEditor}; +static const struct CreditsEntry sCreditsEntry_NCLCoordinator = { 0, TRUE, sCreditsText_NCLCoordinator}; +static const struct CreditsEntry sCreditsEntry_GraphicDesigner = { 0, TRUE, sCreditsText_GraphicDesigner}; +static const struct CreditsEntry sCreditsEntry_NOAProductTesting = { 0, TRUE, sCreditsText_NOAProductTesting}; +static const struct CreditsEntry sCreditsEntry_HideyukiNakajima = { 0, FALSE, sCreditsText_HideyukiNakajima}; +static const struct CreditsEntry sCreditsEntry_HidenoriSaeki = { 0, FALSE, sCreditsText_HidenoriSaeki}; +static const struct CreditsEntry sCreditsEntry_YokoWatanabe = { 0, FALSE, sCreditsText_YokoWatanabe}; +static const struct CreditsEntry sCreditsEntry_SakaeKimura = { 0, FALSE, sCreditsText_SakaeKimura}; +static const struct CreditsEntry sCreditsEntry_ChiakiShinkai = { 0, FALSE, sCreditsText_ChiakiShinkai}; +static const struct CreditsEntry sCreditsEntry_SethMcMahill = { 0, FALSE, sCreditsText_SethMcMahill}; +static const struct CreditsEntry sCreditsEntry_NobOgasawara = { 0, FALSE, sCreditsText_NobOgasawara}; +static const struct CreditsEntry sCreditsEntry_TeresaLillygren = { 0, FALSE, sCreditsText_TeresaLillygren}; +static const struct CreditsEntry sCreditsEntry_KimikoNakamichi = { 0, FALSE, sCreditsText_KimikoNakamichi}; +static const struct CreditsEntry sCreditsEntry_SouichiYamamoto = { 0, FALSE, sCreditsText_SouichiYamamoto}; +static const struct CreditsEntry sCreditsEntry_YuichiroIto = { 0, FALSE, sCreditsText_YuichiroIto}; +static const struct CreditsEntry sCreditsEntry_ThomasHertzog = { 0, FALSE, sCreditsText_ThomasHertzog}; +static const struct CreditsEntry sCreditsEntry_MikaKurosawa = { 0, FALSE, sCreditsText_MikaKurosawa}; +static const struct CreditsEntry sCreditsEntry_NationalFederationBlind = { 0, FALSE, sCreditsText_NationalFederationBlind}; +static const struct CreditsEntry sCreditsEntry_PatriciaAMaurer = { 0, FALSE, sCreditsText_PatriciaAMaurer}; +static const struct CreditsEntry sCreditsEntry_EuropeanBlindUnion = { 0, FALSE, sCreditsText_EuropeanBlindUnion}; +static const struct CreditsEntry sCreditsEntry_AustralianBrailleAuthority = { 0, FALSE, sCreditsText_AustralianBrailleAuthority}; +static const struct CreditsEntry sCreditsEntry_RoyalNewZealandFederationBlind = { 0, FALSE, sCreditsText_RoyalNewZealandFederationBlind}; +static const struct CreditsEntry sCreditsEntry_MotoyasuTojima = { 0, FALSE, sCreditsText_MotoyasuTojima}; +static const struct CreditsEntry sCreditsEntry_NicolaPrattBarlow = { 0, FALSE, sCreditsText_NicolaPrattBarlow}; +static const struct CreditsEntry sCreditsEntry_ShellieDow = { 0, FALSE, sCreditsText_ShellieDow}; +static const struct CreditsEntry sCreditsEntry_ErikJohnson = { 0, FALSE, sCreditsText_ErikJohnson}; -#define _ sCreditsEntry_EmptyString +#define _ &sCreditsEntry_EmptyString static const struct CreditsEntry *const sCreditsEntryPointerTable[PAGE_COUNT][ENTRIES_PER_PAGE] = { [PAGE_TITLE] = { _, - sCreditsEntry_PkmnEmeraldVersion, - sCreditsEntry_Credits, + &sCreditsEntry_PkmnEmeraldVersion, + &sCreditsEntry_Credits, _, _ }, [PAGE_DIRECTOR] = { _, - sCreditsEntry_Director, - sCreditsEntry_ShigekiMorimoto, + &sCreditsEntry_Director, + &sCreditsEntry_ShigekiMorimoto, _, _, }, [PAGE_ART_DIRECTOR] = { _, - sCreditsEntry_ArtDirector, - sCreditsEntry_KenSugimori, + &sCreditsEntry_ArtDirector, + &sCreditsEntry_KenSugimori, _, _, }, [PAGE_WORLD_DIRECTOR] = { _, - sCreditsEntry_WorldDirector, - sCreditsEntry_JunichiMasuda, + &sCreditsEntry_WorldDirector, + &sCreditsEntry_JunichiMasuda, _, _, }, [PAGE_LEAD_PROGRAMMER] = { - sCreditsEntry_LeadProgrammer, - sCreditsEntry_HisashiSogabe, - sCreditsEntry_LeadGraphicArtist, - sCreditsEntry_MotofumiFujiwara, + &sCreditsEntry_LeadProgrammer, + &sCreditsEntry_HisashiSogabe, + &sCreditsEntry_LeadGraphicArtist, + &sCreditsEntry_MotofumiFujiwara, _, }, [PAGE_PROGRAMMERS_1] = { - sCreditsEntry_Programmers, - sCreditsEntry_HisashiSogabe, - sCreditsEntry_TomomichiOhta, - sCreditsEntry_NozomuSaito, - sCreditsEntry_EmptyString, + &sCreditsEntry_Programmers, + &sCreditsEntry_HisashiSogabe, + &sCreditsEntry_TomomichiOhta, + &sCreditsEntry_NozomuSaito, + _, }, [PAGE_PROGRAMMERS_2] = { - sCreditsEntry_Programmers, - sCreditsEntry_AkitoMori, - sCreditsEntry_HiroyukiNakamura, - sCreditsEntry_MasaoTaya, + &sCreditsEntry_Programmers, + &sCreditsEntry_AkitoMori, + &sCreditsEntry_HiroyukiNakamura, + &sCreditsEntry_MasaoTaya, _, }, [PAGE_PROGRAMMERS_3] = { - sCreditsEntry_Programmers, - sCreditsEntry_SatoshiNohara, - sCreditsEntry_MiyukiIwasawa, - sCreditsEntry_YoshinoriMatsuda, - sCreditsEntry_KeitaKagaya, + &sCreditsEntry_Programmers, + &sCreditsEntry_SatoshiNohara, + &sCreditsEntry_MiyukiIwasawa, + &sCreditsEntry_YoshinoriMatsuda, + &sCreditsEntry_KeitaKagaya, }, [PAGE_PROGRAMMERS_4] = { - sCreditsEntry_Programmers, - sCreditsEntry_TetsuyaWatanabe, - sCreditsEntry_SosukeTamada, - sCreditsEntry_TakenoriOhta, + &sCreditsEntry_Programmers, + &sCreditsEntry_TetsuyaWatanabe, + &sCreditsEntry_SosukeTamada, + &sCreditsEntry_TakenoriOhta, _, }, [PAGE_GRAPHIC_DESIGNERS_1] = { _, - sCreditsEntry_GraphicDesigners, - sCreditsEntry_MotofumiFujiwara, - sCreditsEntry_SatoshiOhta, + &sCreditsEntry_GraphicDesigners, + &sCreditsEntry_MotofumiFujiwara, + &sCreditsEntry_SatoshiOhta, _, }, [PAGE_GRAPHIC_DESIGNERS_2] = { - sCreditsEntry_GraphicDesigners, - sCreditsEntry_KenkichiToyama, - sCreditsEntry_AsukaIwashita, - sCreditsEntry_TakaoUnno, + &sCreditsEntry_GraphicDesigners, + &sCreditsEntry_KenkichiToyama, + &sCreditsEntry_AsukaIwashita, + &sCreditsEntry_TakaoUnno, _, }, [PAGE_GRAPHIC_DESIGNERS_3] = { - sCreditsEntry_GraphicDesigners, - sCreditsEntry_KenSugimori, - sCreditsEntry_HironobuYoshida, - sCreditsEntry_AimiTomita, - sCreditsEntry_KanakoEo, + &sCreditsEntry_GraphicDesigners, + &sCreditsEntry_KenSugimori, + &sCreditsEntry_HironobuYoshida, + &sCreditsEntry_AimiTomita, + &sCreditsEntry_KanakoEo, }, [PAGE_MUSIC_COMPOSITION] = { - sCreditsEntry_MusicComposition, - sCreditsEntry_GoIchinose, - sCreditsEntry_JunichiMasuda, - sCreditsEntry_MorikazuAoki, - sCreditsEntry_HitomiSato, + &sCreditsEntry_MusicComposition, + &sCreditsEntry_GoIchinose, + &sCreditsEntry_JunichiMasuda, + &sCreditsEntry_MorikazuAoki, + &sCreditsEntry_HitomiSato, }, [PAGE_SOUND_EFFECTS] = { _, - sCreditsEntry_SoundEffectsAndPkmnVoices, - sCreditsEntry_GoIchinose, - sCreditsEntry_MorikazuAoki, + &sCreditsEntry_SoundEffectsAndPkmnVoices, + &sCreditsEntry_GoIchinose, + &sCreditsEntry_MorikazuAoki, _, }, [PAGE_GAME_DESIGNERS_1] = { - sCreditsEntry_GameDesigners, - sCreditsEntry_ShigekiMorimoto, - sCreditsEntry_TeruyukiShimoyamada, - sCreditsEntry_TakeshiKawachimaru, - sCreditsEntry_AkihitoTomisawa, + &sCreditsEntry_GameDesigners, + &sCreditsEntry_ShigekiMorimoto, + &sCreditsEntry_TeruyukiShimoyamada, + &sCreditsEntry_TakeshiKawachimaru, + &sCreditsEntry_AkihitoTomisawa, }, [PAGE_GAME_DESIGNERS_2] = { - sCreditsEntry_GameDesigners, - sCreditsEntry_SuguruNakatsui, - sCreditsEntry_TetsujiOhta, - sCreditsEntry_HitomiSato, - sCreditsEntry_KenjiMatsushima, + &sCreditsEntry_GameDesigners, + &sCreditsEntry_SuguruNakatsui, + &sCreditsEntry_TetsujiOhta, + &sCreditsEntry_HitomiSato, + &sCreditsEntry_KenjiMatsushima, }, [PAGE_GAME_DESIGNERS_3] = { - sCreditsEntry_GameDesigners, - sCreditsEntry_JunichiMasuda, - sCreditsEntry_KojiNishino, - sCreditsEntry_ShigeruOhmori, - sCreditsEntry_TadashiTakahashi, + &sCreditsEntry_GameDesigners, + &sCreditsEntry_JunichiMasuda, + &sCreditsEntry_KojiNishino, + &sCreditsEntry_ShigeruOhmori, + &sCreditsEntry_TadashiTakahashi, }, [PAGE_SCENARIO_PLOT] = { - sCreditsEntry_ScenarioPlot, - sCreditsEntry_AkihitoTomisawa, - sCreditsEntry_JunichiMasuda, - sCreditsEntry_KojiNishino, + &sCreditsEntry_ScenarioPlot, + &sCreditsEntry_AkihitoTomisawa, + &sCreditsEntry_JunichiMasuda, + &sCreditsEntry_KojiNishino, _, }, [PAGE_SCENARIO] = { - sCreditsEntry_Scenario, - sCreditsEntry_AkihitoTomisawa, - sCreditsEntry_HitomiSato, - sCreditsEntry_ToshinobuMatsumiya, + &sCreditsEntry_Scenario, + &sCreditsEntry_AkihitoTomisawa, + &sCreditsEntry_HitomiSato, + &sCreditsEntry_ToshinobuMatsumiya, _, }, [PAGE_SCRIPT_DESIGNERS] = { - sCreditsEntry_ScriptDesigners, - sCreditsEntry_TomomichiOhta, - sCreditsEntry_SatoshiNohara, + &sCreditsEntry_ScriptDesigners, + &sCreditsEntry_TomomichiOhta, + &sCreditsEntry_SatoshiNohara, _, _, }, [PAGE_MAP_DESIGNERS] = { - sCreditsEntry_MapDesigners, - sCreditsEntry_SuguruNakatsui, - sCreditsEntry_TeruyukiShimoyamada, - sCreditsEntry_ShigeruOhmori, - sCreditsEntry_TetsujiOhta, + &sCreditsEntry_MapDesigners, + &sCreditsEntry_SuguruNakatsui, + &sCreditsEntry_TeruyukiShimoyamada, + &sCreditsEntry_ShigeruOhmori, + &sCreditsEntry_TetsujiOhta, }, [PAGE_BATTLE_FRONTIER_DATA] = { _, - sCreditsEntry_BattleFrontierData, - sCreditsEntry_TetsujiOhta, + &sCreditsEntry_BattleFrontierData, + &sCreditsEntry_TetsujiOhta, _, _, }, [PAGE_PARAMETRIC_DESIGNERS] = { - sCreditsEntry_ParametricDesigners, - sCreditsEntry_TeruyukiShimoyamada, - sCreditsEntry_ShigekiMorimoto, - sCreditsEntry_TetsujiOhta, - sCreditsEntry_KojiNishino, + &sCreditsEntry_ParametricDesigners, + &sCreditsEntry_TeruyukiShimoyamada, + &sCreditsEntry_ShigekiMorimoto, + &sCreditsEntry_TetsujiOhta, + &sCreditsEntry_KojiNishino, }, [PAGE_POKEDEX_TEXT] = { _, - sCreditsEntry_PokedexText, - sCreditsEntry_KenjiMatsushima, + &sCreditsEntry_PokedexText, + &sCreditsEntry_KenjiMatsushima, _, _, }, [PAGE_ENVIRONMENT_AND_TOOL_PROGRAMS_1] = { - sCreditsEntry_EnvAndToolPgrms, - sCreditsEntry_HisashiSogabe, - sCreditsEntry_SosukeTamada, - sCreditsEntry_HiroyukiNakamura, - sCreditsEntry_AkitoMori, + &sCreditsEntry_EnvAndToolPgrms, + &sCreditsEntry_HisashiSogabe, + &sCreditsEntry_SosukeTamada, + &sCreditsEntry_HiroyukiNakamura, + &sCreditsEntry_AkitoMori, }, [PAGE_PKMN_DESIGNERS_1] = { - sCreditsEntry_PkmnDesigners, - sCreditsEntry_KenSugimori, - sCreditsEntry_MotofumiFujiwara, - sCreditsEntry_ShigekiMorimoto, + &sCreditsEntry_PkmnDesigners, + &sCreditsEntry_KenSugimori, + &sCreditsEntry_MotofumiFujiwara, + &sCreditsEntry_ShigekiMorimoto, _, }, [PAGE_PKMN_DESIGNERS_2] = { - sCreditsEntry_PkmnDesigners, - sCreditsEntry_HironobuYoshida, - sCreditsEntry_SatoshiOhta, - sCreditsEntry_AsukaIwashita, + &sCreditsEntry_PkmnDesigners, + &sCreditsEntry_HironobuYoshida, + &sCreditsEntry_SatoshiOhta, + &sCreditsEntry_AsukaIwashita, _, }, [PAGE_PKMN_DESIGNERS_3] = { - sCreditsEntry_PkmnDesigners, - sCreditsEntry_TakaoUnno, - sCreditsEntry_KanakoEo, - sCreditsEntry_AimiTomita, + &sCreditsEntry_PkmnDesigners, + &sCreditsEntry_TakaoUnno, + &sCreditsEntry_KanakoEo, + &sCreditsEntry_AimiTomita, _, }, [PAGE_PKMN_DESIGNERS_4] = { - sCreditsEntry_PkmnDesigners, - sCreditsEntry_AtsukoNishida, - sCreditsEntry_MuneoSaito, - sCreditsEntry_RenaYoshikawa, - sCreditsEntry_JunOkutani, + &sCreditsEntry_PkmnDesigners, + &sCreditsEntry_AtsukoNishida, + &sCreditsEntry_MuneoSaito, + &sCreditsEntry_RenaYoshikawa, + &sCreditsEntry_JunOkutani, }, [PAGE_SUPPORT_PROGRAMMERS] = { _, - sCreditsEntry_SupportProgrammers, - sCreditsEntry_SatoshiMitsuhara, - sCreditsEntry_DaisukeHoshino, + &sCreditsEntry_SupportProgrammers, + &sCreditsEntry_SatoshiMitsuhara, + &sCreditsEntry_DaisukeHoshino, _, }, [PAGE_NCL_PRODUCT_TESTING] = { _, - sCreditsEntry_NCLProductTesting, - sCreditsEntry_NCLSuperMarioClub, + &sCreditsEntry_NCLProductTesting, + &sCreditsEntry_NCLSuperMarioClub, _, _, }, [PAGE_PACKAGE_AND_MANUAL] = { _, - sCreditsEntry_PackageAndManual, - sCreditsEntry_KenSugimori, + &sCreditsEntry_PackageAndManual, + &sCreditsEntry_KenSugimori, _, _, }, [PAGE_SPECIAL_THANKS_1] = { _, - sCreditsEntry_SpecialThanks, - sCreditsEntry_KenjiTominaga, - sCreditsEntry_HirokiEnomoto, + &sCreditsEntry_SpecialThanks, + &sCreditsEntry_KenjiTominaga, + &sCreditsEntry_HirokiEnomoto, _, }, [PAGE_SPECIAL_THANKS_2] = { - sCreditsEntry_SpecialThanks, - sCreditsEntry_KazuyaSuyama, - sCreditsEntry_KenjiroIto, - sCreditsEntry_MichikoTakizawa, - sCreditsEntry_MakikoTakada, + &sCreditsEntry_SpecialThanks, + &sCreditsEntry_KazuyaSuyama, + &sCreditsEntry_KenjiroIto, + &sCreditsEntry_MichikoTakizawa, + &sCreditsEntry_MakikoTakada, }, [PAGE_SPECIAL_THANKS_3] = { - sCreditsEntry_SpecialThanks, - sCreditsEntry_MikikoOhhashi, - sCreditsEntry_TakanaoKondo, - sCreditsEntry_RuiKawaguchi, + &sCreditsEntry_SpecialThanks, + &sCreditsEntry_MikikoOhhashi, + &sCreditsEntry_TakanaoKondo, + &sCreditsEntry_RuiKawaguchi, _, }, [PAGE_SPECIAL_THANKS_4] = { - sCreditsEntry_SpecialThanks, - sCreditsEntry_TakahiroOhnishi, - sCreditsEntry_NorihideOkamura, - sCreditsEntry_ShunsukeKohori, + &sCreditsEntry_SpecialThanks, + &sCreditsEntry_TakahiroOhnishi, + &sCreditsEntry_NorihideOkamura, + &sCreditsEntry_ShunsukeKohori, _, }, [PAGE_INFORMATION_SUPERVISORS] = { - sCreditsEntry_InfoSupervisors, - sCreditsEntry_KazuyukiTerada, - sCreditsEntry_YuriSakurai, - sCreditsEntry_YumiFunasaka, - sCreditsEntry_NaokoYanase, + &sCreditsEntry_InfoSupervisors, + &sCreditsEntry_KazuyukiTerada, + &sCreditsEntry_YuriSakurai, + &sCreditsEntry_YumiFunasaka, + &sCreditsEntry_NaokoYanase, }, [PAGE_ARTWORK_1] = { _, - sCreditsEntry_Artwork, - sCreditsEntry_SachikoNakamichi, - sCreditsEntry_FujikoNomura, + &sCreditsEntry_Artwork, + &sCreditsEntry_SachikoNakamichi, + &sCreditsEntry_FujikoNomura, _, }, [PAGE_ARTWORK_2] = { _, - sCreditsEntry_Artwork, - sCreditsEntry_HideyukiNakajima, - sCreditsEntry_HidenoriSaeki, + &sCreditsEntry_Artwork, + &sCreditsEntry_HideyukiNakajima, + &sCreditsEntry_HidenoriSaeki, _, }, [PAGE_ARTWORK_3] = { - sCreditsEntry_Artwork, - sCreditsEntry_YokoWatanabe, - sCreditsEntry_SakaeKimura, - sCreditsEntry_ChiakiShinkai, + &sCreditsEntry_Artwork, + &sCreditsEntry_YokoWatanabe, + &sCreditsEntry_SakaeKimura, + &sCreditsEntry_ChiakiShinkai, _, }, [PAGE_COORDINATORS] = { - sCreditsEntry_Coordinators, - sCreditsEntry_KazukiYoshihara, - sCreditsEntry_AkiraKinashi, - sCreditsEntry_RetsujiNomoto, + &sCreditsEntry_Coordinators, + &sCreditsEntry_KazukiYoshihara, + &sCreditsEntry_AkiraKinashi, + &sCreditsEntry_RetsujiNomoto, _, }, [PAGE_ENGLISH_VERSION] = { _, - sCreditsEntry_EnglishVersion, - sCreditsEntry_HiroNakamura, - sCreditsEntry_SethMcMahill, + &sCreditsEntry_EnglishVersion, + &sCreditsEntry_HiroNakamura, + &sCreditsEntry_SethMcMahill, _, }, [PAGE_TRANSLATOR] = { _, - sCreditsEntry_Translator, - sCreditsEntry_NobOgasawara, + &sCreditsEntry_Translator, + &sCreditsEntry_NobOgasawara, _, _, }, [PAGE_TEXT_EDITOR] = { _, - sCreditsEntry_TextEditor, - sCreditsEntry_TeresaLillygren, + &sCreditsEntry_TextEditor, + &sCreditsEntry_TeresaLillygren, _, _, }, [PAGE_NCL_COORDINATOR] = { _, - sCreditsEntry_NCLCoordinator, - sCreditsEntry_KimikoNakamichi, + &sCreditsEntry_NCLCoordinator, + &sCreditsEntry_KimikoNakamichi, _, _, }, [PAGE_PROGRAMMERS_5] = { - sCreditsEntry_Programmers, - sCreditsEntry_TerukiMurakawa, - sCreditsEntry_SouichiYamamoto, - sCreditsEntry_YuichiroIto, - sCreditsEntry_AkiraKinashi, + &sCreditsEntry_Programmers, + &sCreditsEntry_TerukiMurakawa, + &sCreditsEntry_SouichiYamamoto, + &sCreditsEntry_YuichiroIto, + &sCreditsEntry_AkiraKinashi, }, [PAGE_GRAPHIC_DESIGNER] = { _, - sCreditsEntry_GraphicDesigner, - sCreditsEntry_AkiraKinashi, + &sCreditsEntry_GraphicDesigner, + &sCreditsEntry_AkiraKinashi, _, _, }, [PAGE_ENVIRONMENT_AND_TOOL_PROGRAMS_2] = { - sCreditsEntry_EnvAndToolPgrms, - sCreditsEntry_TerukiMurakawa, - sCreditsEntry_SouichiYamamoto, - sCreditsEntry_KimikoNakamichi, + &sCreditsEntry_EnvAndToolPgrms, + &sCreditsEntry_TerukiMurakawa, + &sCreditsEntry_SouichiYamamoto, + &sCreditsEntry_KimikoNakamichi, _, }, [PAGE_NOA_TESTING] = { - sCreditsEntry_NOAProductTesting, - sCreditsEntry_ThomasHertzog, - sCreditsEntry_ErikJohnson, - sCreditsEntry_MikaKurosawa, + &sCreditsEntry_NOAProductTesting, + &sCreditsEntry_ThomasHertzog, + &sCreditsEntry_ErikJohnson, + &sCreditsEntry_MikaKurosawa, _, }, [PAGE_BRAILLE_CODE_CHECK_1] = { - sCreditsEntry_BrailleCodeCheck, - sCreditsEntry_NationalFederationBlind, - sCreditsEntry_PatriciaAMaurer, - sCreditsEntry_JapanBrailleLibrary, - sCreditsEntry_EuropeanBlindUnion, + &sCreditsEntry_BrailleCodeCheck, + &sCreditsEntry_NationalFederationBlind, + &sCreditsEntry_PatriciaAMaurer, + &sCreditsEntry_JapanBrailleLibrary, + &sCreditsEntry_EuropeanBlindUnion, }, [PAGE_BRAILLE_CODE_CHECK_2] = { _, - sCreditsEntry_BrailleCodeCheck, - sCreditsEntry_AustralianBrailleAuthority, - sCreditsEntry_RoyalNewZealandFederationBlind, + &sCreditsEntry_BrailleCodeCheck, + &sCreditsEntry_AustralianBrailleAuthority, + &sCreditsEntry_RoyalNewZealandFederationBlind, _, }, [PAGE_SPECIAL_THANKS_5] = { - sCreditsEntry_SpecialThanks, - sCreditsEntry_HiroyukiUesugi, - sCreditsEntry_MotoyasuTojima, - sCreditsEntry_NicolaPrattBarlow, - sCreditsEntry_ShellieDow, + &sCreditsEntry_SpecialThanks, + &sCreditsEntry_HiroyukiUesugi, + &sCreditsEntry_MotoyasuTojima, + &sCreditsEntry_NicolaPrattBarlow, + &sCreditsEntry_ShellieDow, }, [PAGE_TASK_MANAGERS] = { _, - sCreditsEntry_TaskManagers, - sCreditsEntry_AzusaTajima, - sCreditsEntry_ShusakuEgami, + &sCreditsEntry_TaskManagers, + &sCreditsEntry_AzusaTajima, + &sCreditsEntry_ShusakuEgami, _, }, [PAGE_PRODUCERS] = { - sCreditsEntry_Producers, - sCreditsEntry_HiroyukiJinnai, - sCreditsEntry_HitoshiYamagami, - sCreditsEntry_GakujiNomoto, - sCreditsEntry_HiroakiTsuru, + &sCreditsEntry_Producers, + &sCreditsEntry_HiroyukiJinnai, + &sCreditsEntry_HitoshiYamagami, + &sCreditsEntry_GakujiNomoto, + &sCreditsEntry_HiroakiTsuru, }, [PAGE_EXECUTIVE_DIRECTOR] = { _, - sCreditsEntry_ExecutiveDirector, - sCreditsEntry_SatoshiTajiri, + &sCreditsEntry_ExecutiveDirector, + &sCreditsEntry_SatoshiTajiri, _, _, }, [PAGE_EXECUTIVE_PRODUCERS_1] = { _, - sCreditsEntry_ExecProducers, - sCreditsEntry_SatoruIwata, + &sCreditsEntry_ExecProducers, + &sCreditsEntry_SatoruIwata, _, _, }, [PAGE_EXECUTIVE_PRODUCERS_2] = { _, - sCreditsEntry_ExecProducers, - sCreditsEntry_TsunekazIshihara, + &sCreditsEntry_ExecProducers, + &sCreditsEntry_TsunekazIshihara, _, _, }, diff --git a/src/data/pointillism_points.h b/src/data/pointillism_points.h index 708f5c02e6..9d19d13140 100644 --- a/src/data/pointillism_points.h +++ b/src/data/pointillism_points.h @@ -2,7 +2,7 @@ #define GET_POINT_COLOR_TYPE(bits) (((bits) >> 1) & 3) #define GET_POINT_DELTA(bits) (((bits) >> 3) & 7) -#define PT(x, y, delta, colorType, offsetDownLeft) x, y, (delta << 3) | (colorType << 1) | offsetDownLeft +#define PT(x, y, delta, colorType, offsetDownLeft) {x, y, (delta << 3) | (colorType << 1) | offsetDownLeft} static const u8 sPointillismPoints[][3] = { PT( 0, 29, 3, 2, FALSE), diff --git a/src/data/trade.h b/src/data/trade.h index ef7e9231de..ba49f4b874 100644 --- a/src/data/trade.h +++ b/src/data/trade.h @@ -372,8 +372,8 @@ static const u8 *const sActionTexts[] = static const struct MenuAction sSelectTradeMonActions[] = { - {sText_Summary2, Task_DrawSelectionSummary}, - {sText_Trade2, Task_DrawSelectionTrade} + {sText_Summary2, {Task_DrawSelectionSummary}}, + {sText_Trade2, {Task_DrawSelectionTrade}} }; static const u8 *const sMessages[] = diff --git a/src/daycare.c b/src/daycare.c index 48f642baa4..d618db78ec 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -331,7 +331,7 @@ void GetDaycareCost(void) gSpecialVar_0x8005 = GetDaycareCostForMon(&gSaveBlock1Ptr->daycare, gSpecialVar_0x8004); } -static void Debug_AddDaycareSteps(u16 numSteps) +static void UNUSED Debug_AddDaycareSteps(u16 numSteps) { gSaveBlock1Ptr->daycare.mons[0].steps += numSteps; gSaveBlock1Ptr->daycare.mons[1].steps += numSteps; @@ -364,7 +364,7 @@ static void ClearDaycareMon(struct DaycareMon *daycareMon) ClearDaycareMonMail(&daycareMon->mail); } -static void ClearAllDaycareData(struct DayCare *daycare) +static void UNUSED ClearAllDaycareData(struct DayCare *daycare) { u8 i; @@ -498,8 +498,7 @@ void TriggerPendingDaycareEgg(void) _TriggerPendingDaycareEgg(&gSaveBlock1Ptr->daycare); } -// Unused -static void TriggerPendingDaycareMaleEgg(void) +static void UNUSED TriggerPendingDaycareMaleEgg(void) { _TriggerPendingDaycareMaleEgg(&gSaveBlock1Ptr->daycare); } @@ -986,7 +985,7 @@ u8 GetDaycareState(void) return DAYCARE_NO_MONS; } -static u8 GetDaycarePokemonCount(void) +static u8 UNUSED GetDaycarePokemonCount(void) { u8 ret = CountPokemonInDaycare(&gSaveBlock1Ptr->daycare); if (ret) @@ -1142,7 +1141,7 @@ static u8 *AppendMonGenderSymbol(u8 *name, struct BoxPokemon *boxMon) return AppendGenderSymbol(name, GetBoxMonGender(boxMon)); } -static void GetDaycareLevelMenuText(struct DayCare *daycare, u8 *dest) +static void UNUSED GetDaycareLevelMenuText(struct DayCare *daycare, u8 *dest) { u8 monNames[DAYCARE_MON_COUNT][POKEMON_NAME_BUFFER_SIZE]; u8 i; @@ -1161,7 +1160,7 @@ static void GetDaycareLevelMenuText(struct DayCare *daycare, u8 *dest) StringAppend(dest, gText_Exit4); } -static void GetDaycareLevelMenuLevelText(struct DayCare *daycare, u8 *dest) +static void UNUSED GetDaycareLevelMenuLevelText(struct DayCare *daycare, u8 *dest) { u8 i; u8 level; diff --git a/src/decompress.c b/src/decompress.c index c16c2cdb31..8452f340ed 100644 --- a/src/decompress.c +++ b/src/decompress.c @@ -113,7 +113,7 @@ void Unused_LZDecompressWramIndirect(const void **src, void *dest) LZ77UnCompWram(*src, dest); } -static void StitchObjectsOn8x8Canvas(s32 object_size, s32 object_count, u8 *src_tiles, u8 *dest_tiles) +static void UNUSED StitchObjectsOn8x8Canvas(s32 object_size, s32 object_count, u8 *src_tiles, u8 *dest_tiles) { /* This function appears to emulate behaviour found in the GB(C) versions regarding how the Pokemon images diff --git a/src/decoration.c b/src/decoration.c index 688018b2db..f4fae6cc5e 100644 --- a/src/decoration.c +++ b/src/decoration.c @@ -113,7 +113,7 @@ EWRAM_DATA static u16 sDecorationsCursorPos = 0; EWRAM_DATA static u16 sDecorationsScrollOffset = 0; EWRAM_DATA u8 gCurDecorationIndex = 0; EWRAM_DATA static u8 sCurDecorationCategory = DECORCAT_DESK; -EWRAM_DATA static u32 sFiller[2] = {}; +EWRAM_DATA static u32 UNUSED sFiller[2] = {}; EWRAM_DATA static struct DecorationPCContext sDecorationContext = {}; EWRAM_DATA static u8 sDecorMenuWindowIds[WINDOW_COUNT] = {}; EWRAM_DATA static struct DecorationItemsMenu *sDecorationItemsMenu = NULL; diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c index 1ba82c6d21..1b4500002c 100644 --- a/src/dodrio_berry_picking.c +++ b/src/dodrio_berry_picking.c @@ -2834,9 +2834,8 @@ static void GetScoreResults(struct DodrioGame_ScoreResults *dst, u8 playerId) *dst = sGame->scoreResults[playerId]; } -// Unused // Returns where the specified player's score ranks, 0 being first (highest score) -static u8 GetScoreRanking(u8 playerId) +static u8 UNUSED GetScoreRanking(u8 playerId) { u8 i, ranking = 0; u8 numPlayers = sGame->numPlayers; @@ -3068,12 +3067,12 @@ static const u8 *const sDebug_PlayerNames[] = sText_Digits }; -static void Debug_UpdateNumPlayers(void) +static void UNUSED Debug_UpdateNumPlayers(void) { sGame->numPlayers = GetLinkPlayerCount(); } -static void Debug_SetPlayerNamesAndResults(void) +static void UNUSED Debug_SetPlayerNamesAndResults(void) { u8 i, playerId; @@ -4253,8 +4252,7 @@ static void SetBerryAnim(u16 id, u8 animNum) StartSpriteAnim(&gSprites[*sBerrySpriteIds[id]], animNum); } -// Unused -static void UnusedSetSpritePos(u8 spriteId) +static void UNUSED UnusedSetSpritePos(u8 spriteId) { gSprites[spriteId].x = 20 * spriteId + 50; gSprites[spriteId].y = 50; @@ -4486,8 +4484,7 @@ static void InitGameGfx(struct DodrioGame_Gfx *ptr) SetGfxFunc(LoadGfx); } -// Unused -static void FreeAllWindowBuffers_(void) +static void UNUSED FreeAllWindowBuffers_(void) { FreeAllWindowBuffers(); } diff --git a/src/easy_chat.c b/src/easy_chat.c index 5c910dced1..93fdafd80b 100644 --- a/src/easy_chat.c +++ b/src/easy_chat.c @@ -2758,7 +2758,7 @@ static void GetEasyChatConfirmDeletionText(const u8 **str1, const u8 **str2) *str2 = gText_BeDeletedThatOkay; } -static void GetKeyboardCursorColAndRow(u8 *column, u8 *row) +static void GetKeyboardCursorColAndRow(s8 *column, s8 *row) { *column = sEasyChatScreen->keyboardColumn; *row = sEasyChatScreen->keyboardRow; @@ -2774,7 +2774,7 @@ static u8 GetKeyboardScrollOffset(void) return sEasyChatScreen->keyboardScrollOffset; } -static void GetWordSelectColAndRow(u8 *column, u8 *row) +static void GetWordSelectColAndRow(s8 *column, s8 *row) { *column = sEasyChatScreen->wordSelectColumn; *row = sEasyChatScreen->wordSelectRow; @@ -2790,7 +2790,7 @@ static u8 GetWordSelectLastRow(void) return sEasyChatScreen->wordSelectLastRow; } -static u8 UnusedDummy(void) +static u8 UNUSED UnusedDummy(void) { return FALSE; } @@ -5264,7 +5264,7 @@ u8 *ConvertEasyChatWordsToString(u8 *dest, const u16 *src, u16 columns, u16 rows return dest; } -static u8 *UnusedConvertEasyChatWordsToString(u8 *dest, const u16 *src, u16 columns, u16 rows) +static u8 UNUSED *UnusedConvertEasyChatWordsToString(u8 *dest, const u16 *src, u16 columns, u16 rows) { u16 i, j, k; u16 numColumns; @@ -5503,8 +5503,7 @@ u16 UnlockRandomTrendySaying(void) return EC_EMPTY_WORD; } -// Unused -static u16 GetRandomUnlockedTrendySaying(void) +static u16 UNUSED GetRandomUnlockedTrendySaying(void) { u16 i; u16 n = GetNumTrendySayingsUnlocked(); @@ -5650,8 +5649,7 @@ static u8 GetUnlockedEasyChatGroupId(u8 index) return sWordData->unlockedGroupIds[index]; } -// Unused -static u8 *BufferEasyChatWordGroupName(u8 *dest, u8 groupId, u16 totalChars) +static u8 UNUSED *BufferEasyChatWordGroupName(u8 *dest, u8 groupId, u16 totalChars) { u16 i; u8 *str = StringCopy(dest, sEasyChatGroupNamePointers[groupId]); diff --git a/src/egg_hatch.c b/src/egg_hatch.c index e9d287cf72..abf1aff841 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -781,7 +781,7 @@ static void SpriteCB_Egg_Shake3(struct Sprite *sprite) { if (++sprite->sTimer > 38) { - u16 species; + u16 UNUSED species; sprite->callback = SpriteCB_Egg_WaitHatch; sprite->sTimer = 0; species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyId], MON_DATA_SPECIES); diff --git a/src/event_object_movement.c b/src/event_object_movement.c index d4b89fbae1..411b826a53 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -2007,8 +2007,7 @@ static void LoadObjectEventPalette(u16 paletteTag) LoadSpritePaletteIfTagExists(&sObjectEventSpritePalettes[i]); } -// Unused -static void LoadObjectEventPaletteSet(u16 *paletteTags) +static void UNUSED LoadObjectEventPaletteSet(u16 *paletteTags) { u8 i; @@ -2090,8 +2089,7 @@ static void _PatchObjectPalette(u16 tag, u8 slot) PatchObjectPalette(tag, slot); } -// Unused -static void IncrementObjectEventCoords(struct ObjectEvent *objectEvent, s16 x, s16 y) +static void UNUSED IncrementObjectEventCoords(struct ObjectEvent *objectEvent, s16 x, s16 y) { objectEvent->previousCoords.x = objectEvent->currentCoords.x; objectEvent->previousCoords.y = objectEvent->currentCoords.y; @@ -2290,8 +2288,7 @@ void CameraObjectSetFollowedSpriteId(u8 spriteId) } } -// Unused -static u8 CameraObjectGetFollowedSpriteId(void) +static u8 UNUSED CameraObjectGetFollowedSpriteId(void) { struct Sprite *camera; @@ -2388,8 +2385,7 @@ static u16 GetObjectEventFlagIdByObjectEventId(u8 objectEventId) return GetObjectEventFlagIdByLocalIdAndMap(gObjectEvents[objectEventId].localId, gObjectEvents[objectEventId].mapNum, gObjectEvents[objectEventId].mapGroup); } -// Unused -static u8 GetObjectTrainerTypeByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) +static u8 UNUSED GetObjectTrainerTypeByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) { u8 objectEventId; @@ -2399,8 +2395,7 @@ static u8 GetObjectTrainerTypeByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup return gObjectEvents[objectEventId].trainerType; } -// Unused -static u8 GetObjectTrainerTypeByObjectEventId(u8 objectEventId) +static u8 UNUSED GetObjectTrainerTypeByObjectEventId(u8 objectEventId) { return gObjectEvents[objectEventId].trainerType; } @@ -4763,8 +4758,7 @@ void MoveCoords(u8 direction, s16 *x, s16 *y) *y += sDirectionToVectors[direction].y; } -// Unused -static void MoveCoordsInMapCoordIncrement(u8 direction, s16 *x, s16 *y) +static void UNUSED MoveCoordsInMapCoordIncrement(u8 direction, s16 *x, s16 *y) { *x += sDirectionToVectors[direction].x << 4; *y += sDirectionToVectors[direction].y << 4; @@ -7908,10 +7902,10 @@ static void DoTracksGroundEffect_BikeTireTracks(struct ObjectEvent *objEvent, st // each byte in that row is for the next direction of the bike in the order // of down, up, left, right. static const u8 bikeTireTracks_Transitions[4][4] = { - 1, 2, 7, 8, - 1, 2, 6, 5, - 5, 8, 3, 4, - 6, 7, 3, 4, + {1, 2, 7, 8}, + {1, 2, 6, 5}, + {5, 8, 3, 4}, + {6, 7, 3, 4}, }; if (objEvent->currentCoords.x != objEvent->previousCoords.x || objEvent->currentCoords.y != objEvent->previousCoords.y) @@ -8580,8 +8574,7 @@ static void SpriteCB_VirtualObject(struct Sprite *sprite) UpdateObjectEventSpriteInvisibility(sprite, sprite->sInvisible); } -// Unused -static void DestroyVirtualObjects(void) +static void UNUSED DestroyVirtualObjects(void) { int i; diff --git a/src/evolution_scene.c b/src/evolution_scene.c index dc19862616..133afe3b0d 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -1634,8 +1634,7 @@ static void StartBgAnimation(bool8 isLink) CreateBgAnimTask(isLink); } -// Unused -static void PauseBgPaletteAnim(void) +static void UNUSED PauseBgPaletteAnim(void) { u8 taskId = FindTaskIdByFunc(Task_UpdateBgPalette); diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 3a0c97e8cf..09d6ae7838 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -606,8 +606,7 @@ static bool8 TryStartStepCountScript(u16 metatileBehavior) return FALSE; } -// Unused -static void ClearFriendshipStepCounter(void) +static void UNUSED ClearFriendshipStepCounter(void) { VarSet(VAR_FRIENDSHIP_STEP_COUNTER, 0); } diff --git a/src/field_door.c b/src/field_door.c index 756d0dabf1..255233ec23 100644 --- a/src/field_door.c +++ b/src/field_door.c @@ -408,7 +408,7 @@ static bool32 AnimateDoorFrame(struct DoorGraphics *gfx, struct DoorAnimFrame *f static void Task_AnimateDoor(u8 taskId) { - u16 *data = gTasks[taskId].data; + u16 *data = (u16*) gTasks[taskId].data; struct DoorAnimFrame *frames = (struct DoorAnimFrame *)(tFramesHi << 16 | tFramesLo); struct DoorGraphics *gfx = (struct DoorGraphics *)(tGfxHi << 16 | tGfxLo); @@ -502,8 +502,8 @@ static s8 GetDoorSoundType(const struct DoorGraphics *gfx, u32 x, u32 y) return gfx->sound; } -// Unused. Debug? Same as FieldAnimateDoorOpen but doesnt return or check if metatile is actually a door -static void Debug_FieldAnimateDoorOpen(u32 x, u32 y) +// Debug? Same as FieldAnimateDoorOpen but doesnt return or check if metatile is actually a door +static void UNUSED Debug_FieldAnimateDoorOpen(u32 x, u32 y) { StartDoorOpenAnimation(sDoorAnimGraphicsTable, x, y); } diff --git a/src/field_effect.c b/src/field_effect.c index 8d6b6342d1..86f1ca97d2 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -900,8 +900,7 @@ u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buf return CreateSprite(&spriteTemplate, x, y, subpriority); } -// Unused -static void LoadTrainerGfx_TrainerCard(u8 gender, u16 palOffset, u8 *dest) +static void UNUSED LoadTrainerGfx_TrainerCard(u8 gender, u16 palOffset, u8 *dest) { LZDecompressVram(gTrainerFrontPicTable[gender].data, dest); LoadCompressedPalette(gTrainerFrontPicPaletteTable[gender].data, palOffset, PLTT_SIZE_4BPP); @@ -2610,7 +2609,7 @@ static void FieldMoveShowMonOutdoorsEffect_Init(struct Task *task) { task->data[11] = REG_WININ; task->data[12] = REG_WINOUT; - StoreWordInTwoHalfwords(&task->data[13], (u32)gMain.vblankCallback); + StoreWordInTwoHalfwords((u16*) &task->data[13], (u32)gMain.vblankCallback); task->tWinHoriz = WIN_RANGE(DISPLAY_WIDTH, DISPLAY_WIDTH + 1); task->tWinVert = WIN_RANGE(DISPLAY_HEIGHT / 2, DISPLAY_HEIGHT / 2 + 1); task->tWinIn = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR; diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 9421aaf27a..386c3c76b2 100755 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -1658,7 +1658,7 @@ static void UpdateGrassFieldEffectSubpriority(struct Sprite *sprite, u8 elevatio { u8 i; s16 var, xhi, lyhi, yhi, ylo; - const struct ObjectEventGraphicsInfo *graphicsInfo; // Unused Variable + const struct ObjectEventGraphicsInfo UNUSED *graphicsInfo; struct Sprite *linkedSprite; SetObjectSubpriorityByElevation(elevation, sprite, subpriority); diff --git a/src/field_message_box.c b/src/field_message_box.c index 64734cc209..55124e7dfc 100755 --- a/src/field_message_box.c +++ b/src/field_message_box.c @@ -97,8 +97,7 @@ bool8 ShowFieldAutoScrollMessage(const u8 *str) return TRUE; } -// Unused -static bool8 ForceShowFieldAutoScrollMessage(const u8 *str) +static bool8 UNUSED ForceShowFieldAutoScrollMessage(const u8 *str) { sFieldMessageBoxMode = FIELD_MESSAGE_BOX_AUTO_SCROLL; ExpandStringAndStartDrawFieldMessage(str, TRUE); @@ -148,8 +147,7 @@ bool8 IsFieldMessageBoxHidden(void) return FALSE; } -// Unused -static void ReplaceFieldMessageWithFrame(void) +static void UNUSED ReplaceFieldMessageWithFrame(void) { DestroyTask_DrawFieldMessage(); DrawStdWindowFrame(0, TRUE); diff --git a/src/field_specials.c b/src/field_specials.c index fc4d23bef1..7d20d3571d 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -1011,7 +1011,7 @@ static void PCTurnOnEffect(struct Task *task) if (task->tTimer == 6) { task->tTimer = 0; - + // Get where the PC should be, depending on where the player is looking. playerDirection = GetPlayerFacingDirection(); switch (playerDirection) @@ -1033,7 +1033,7 @@ static void PCTurnOnEffect(struct Task *task) // Update map PCTurnOnEffect_SetMetatile(task->tIsScreenOn, dx, dy); DrawWholeMapView(); - + // Screen flickers 5 times. Odd number and starting with the // screen off means the animation ends with the screen on. task->tIsScreenOn ^= 1; diff --git a/src/field_tasks.c b/src/field_tasks.c index 8683301f26..a9d11b2d70 100644 --- a/src/field_tasks.c +++ b/src/field_tasks.c @@ -172,7 +172,7 @@ static void Task_RunTimeBasedEvents(u8 taskId) if (!ArePlayerFieldControlsLocked()) { RunTimeBasedEvents(data); - UpdateAmbientCry(&tAmbientCryState, &tAmbientCryDelay); + UpdateAmbientCry(&tAmbientCryState, (u16*) &tAmbientCryDelay); } } diff --git a/src/field_weather.c b/src/field_weather.c index bcc6a1c440..5ca9075250 100644 --- a/src/field_weather.c +++ b/src/field_weather.c @@ -855,8 +855,7 @@ void ApplyWeatherColorMapToPal(u8 paletteIndex) ApplyColorMap(paletteIndex, 1, gWeatherPtr->colorMapIndex); } -// Unused -static bool8 IsFirstFrameOfWeatherFadeIn(void) +static bool8 UNUSED IsFirstFrameOfWeatherFadeIn(void) { if (gWeatherPtr->palProcessingState == WEATHER_PAL_STATE_SCREEN_FADING_IN) return gWeatherPtr->fadeInFirstFrame; @@ -997,8 +996,8 @@ bool8 Weather_UpdateBlend(void) return FALSE; } -// Unused. Uses the same numbering scheme as the coord events -static void SetFieldWeather(u8 weather) +// Uses the same numbering scheme as the coord events +static void UNUSED SetFieldWeather(u8 weather) { switch (weather) { diff --git a/src/field_weather_effect.c b/src/field_weather_effect.c index 05eae421e0..de0b90c480 100644 --- a/src/field_weather_effect.c +++ b/src/field_weather_effect.c @@ -2434,8 +2434,7 @@ static void UpdateBubbleSprite(struct Sprite *sprite) //------------------------------------------------------------------------------ -// Unused function. -static void UnusedSetCurrentAbnormalWeather(u32 weather, u32 unknown) +static void UNUSED UnusedSetCurrentAbnormalWeather(u32 weather, u32 unknown) { sCurrentAbnormalWeather = weather; sUnusedWeatherRelated = unknown; diff --git a/src/fieldmap.c b/src/fieldmap.c index 9534255c78..97b5b78113 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -29,7 +29,7 @@ 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}; -EWRAM_DATA static u32 sFiller = 0; // without this, the next file won't align properly +EWRAM_DATA static u32 UNUSED sFiller = 0; // without this, the next file won't align properly struct BackupMapLayout gBackupMapLayout; @@ -48,6 +48,7 @@ static const struct MapConnection *GetIncomingConnection(u8 direction, int x, in static bool8 IsPosInIncomingConnectingMap(u8 direction, int x, int y, const struct MapConnection *connection); static bool8 IsCoordInIncomingConnectingMap(int coord, int srcMax, int destMax, int offset); + #define GetBorderBlockAt(x, y)({ \ u16 block; \ int i; \ @@ -799,8 +800,7 @@ void GetCameraFocusCoords(u16 *x, u16 *y) *y = gSaveBlock1Ptr->pos.y + MAP_OFFSET; } -// Unused -static void SetCameraCoords(u16 x, u16 y) +static void UNUSED SetCameraCoords(u16 x, u16 y) { gSaveBlock1Ptr->pos.x = x; gSaveBlock1Ptr->pos.y = y; @@ -866,7 +866,7 @@ static void ApplyGlobalTintToPaletteEntries(u16 offset, u16 size) } -static void ApplyGlobalTintToPaletteSlot(u8 slot, u8 count) +static void UNUSED ApplyGlobalTintToPaletteSlot(u8 slot, u8 count) { } diff --git a/src/fldeff_escalator.c b/src/fldeff_escalator.c index 0dc98c319c..eabbd53549 100644 --- a/src/fldeff_escalator.c +++ b/src/fldeff_escalator.c @@ -14,43 +14,43 @@ static void Task_DrawEscalator(u8 taskId); #define ESCALATOR_STAGES 3 #define LAST_ESCALATOR_STAGE (ESCALATOR_STAGES - 1) -static const u16 sEscalatorMetatiles_1F_0[ESCALATOR_STAGES] = { +static const s16 sEscalatorMetatiles_1F_0[ESCALATOR_STAGES] = { METATILE_PokemonCenter_Escalator1F_Tile0_Frame2, METATILE_PokemonCenter_Escalator1F_Tile0_Frame1, METATILE_PokemonCenter_Escalator1F_Tile0_Frame0 }; -static const u16 sEscalatorMetatiles_1F_1[ESCALATOR_STAGES] = { +static const s16 sEscalatorMetatiles_1F_1[ESCALATOR_STAGES] = { METATILE_PokemonCenter_Escalator1F_Tile1_Frame2, METATILE_PokemonCenter_Escalator1F_Tile1_Frame1, METATILE_PokemonCenter_Escalator1F_Tile1_Frame0 }; -static const u16 sEscalatorMetatiles_1F_2[ESCALATOR_STAGES] = { +static const s16 sEscalatorMetatiles_1F_2[ESCALATOR_STAGES] = { METATILE_PokemonCenter_Escalator1F_Tile2_Frame2, METATILE_PokemonCenter_Escalator1F_Tile2_Frame1, METATILE_PokemonCenter_Escalator1F_Tile2_Frame0 }; -static const u16 sEscalatorMetatiles_1F_3[ESCALATOR_STAGES] = { +static const s16 sEscalatorMetatiles_1F_3[ESCALATOR_STAGES] = { METATILE_PokemonCenter_Escalator1F_Tile3_Frame2, METATILE_PokemonCenter_Escalator1F_Tile3_Frame1, METATILE_PokemonCenter_Escalator1F_Tile3_Frame0 }; -static const u16 sEscalatorMetatiles_2F_0[ESCALATOR_STAGES] = { +static const s16 sEscalatorMetatiles_2F_0[ESCALATOR_STAGES] = { METATILE_PokemonCenter_Escalator2F_Tile0_Frame0, METATILE_PokemonCenter_Escalator2F_Tile0_Frame1, METATILE_PokemonCenter_Escalator2F_Tile0_Frame2 }; -static const u16 sEscalatorMetatiles_2F_1[ESCALATOR_STAGES] = { +static const s16 sEscalatorMetatiles_2F_1[ESCALATOR_STAGES] = { METATILE_PokemonCenter_Escalator2F_Tile1_Frame0, METATILE_PokemonCenter_Escalator2F_Tile1_Frame1, METATILE_PokemonCenter_Escalator2F_Tile1_Frame2 }; -static const u16 sEscalatorMetatiles_2F_2[ESCALATOR_STAGES] = { +static const s16 sEscalatorMetatiles_2F_2[ESCALATOR_STAGES] = { METATILE_PokemonCenter_Escalator2F_Tile2_Frame0, METATILE_PokemonCenter_Escalator2F_Tile2_Frame1, METATILE_PokemonCenter_Escalator2F_Tile2_Frame2 diff --git a/src/graphics.c b/src/graphics.c index 7c327c4451..17ea237df2 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1515,7 +1515,7 @@ const u16 gTitleScreenPressStartPal[] = INCBIN_U16("graphics/title_screen/p const u32 gTitleScreenPressStartGfx[] = INCBIN_U32("graphics/title_screen/press_start.4bpp.lz"); const u32 gTitleScreenPokemonLogoTilemap[] = INCBIN_U32("graphics/title_screen/pokemon_logo.bin.lz"); -const u16 gFrontierPassBg_Pal[][16] = INCBIN_U16("graphics/frontier_pass/bg.gbapal"); +const u16 gFrontierPassBg_Pal[] = INCBIN_U16("graphics/frontier_pass/bg.gbapal"); // 8 x 16 const u32 gFrontierPassBg_Gfx[] = INCBIN_U32("graphics/frontier_pass/bg.4bpp.lz"); const u32 gFrontierPassMapAndCard_Gfx[] = INCBIN_U32("graphics/frontier_pass/map_and_card.8bpp.lz"); const u32 gFrontierPassBg_Tilemap[] = INCBIN_U32("graphics/frontier_pass/bg.bin.lz"); diff --git a/src/intro.c b/src/intro.c index 6a6a58ddd5..195374bba0 100644 --- a/src/intro.c +++ b/src/intro.c @@ -169,7 +169,7 @@ extern const struct SpriteTemplate gAncientPowerRockSpriteTemplate[]; #define TIMER_START_LEGENDARIES 43 static EWRAM_DATA u16 sIntroCharacterGender = 0; -static EWRAM_DATA u16 sUnusedVar = 0; +static EWRAM_DATA u16 UNUSED sUnusedVar = 0; static EWRAM_DATA u16 sFlygonYOffset = 0; u32 gIntroFrameCounter; @@ -178,7 +178,7 @@ struct GcmbStruct gMultibootProgramStruct; static const u16 sIntroDrops_Pal[] = INCBIN_U16("graphics/intro/scene_1/drops.gbapal"); static const u16 sIntroLogo_Pal[] = INCBIN_U16("graphics/intro/scene_1/logo.gbapal"); static const u32 sIntroDropsLogo_Gfx[] = INCBIN_U32("graphics/intro/scene_1/drops_logo.4bpp.lz"); -static const u16 sIntro1Bg_Pal[16][16] = INCBIN_U16("graphics/intro/scene_1/bg.gbapal"); +static const u16 sIntro1Bg_Pal[] = INCBIN_U16("graphics/intro/scene_1/bg.gbapal"); // 16 x 16 static const u32 sIntro1Bg0_Tilemap[] = INCBIN_U32("graphics/intro/scene_1/bg0_map.bin.lz"); static const u32 sIntro1Bg1_Tilemap[] = INCBIN_U32("graphics/intro/scene_1/bg1_map.bin.lz"); static const u32 sIntro1Bg2_Tilemap[] = INCBIN_U32("graphics/intro/scene_1/bg2_map.bin.lz"); diff --git a/src/intro_credits_graphics.c b/src/intro_credits_graphics.c index 05b5a3a050..c4b059fdd7 100644 --- a/src/intro_credits_graphics.c +++ b/src/intro_credits_graphics.c @@ -1148,7 +1148,7 @@ static void SpriteCB_FlygonRightHalf(struct Sprite *sprite) } // In RS these were for Latios/Latias. In Emerald both are replaced with Flygon and now only 1 is used -static u8 CreateIntroFlygonSprite_Unused(s16 x, s16 y) +static u8 UNUSED CreateIntroFlygonSprite_Unused(s16 x, s16 y) { u8 leftSpriteId = CreateSprite(&sSpriteTemplate_FlygonLatios, x - 32, y, 5); u8 rightSpriteId = CreateSprite(&sSpriteTemplate_FlygonLatios, x + 32, y, 6); diff --git a/src/item_menu.c b/src/item_menu.c index 223f028d02..f0abfcf62a 100755 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -109,7 +109,7 @@ struct ListBuffer1 { }; struct ListBuffer2 { - s8 name[MAX_POCKET_ITEMS][ITEM_NAME_LENGTH + 10]; + u8 name[MAX_POCKET_ITEMS][ITEM_NAME_LENGTH + 10]; }; struct TempWallyBag { @@ -138,7 +138,7 @@ static void PrepareTMHMMoveWindow(void); static bool8 IsWallysBag(void); static void Task_WallyTutorialBagMenu(u8); static void Task_BagMenu_HandleInput(u8); -static void GetItemName(s8 *, u16); +static void GetItemName(u8 *, u16); static void PrintItemDescription(int); static void BagMenu_PrintCursorAtPos(u8, u8); static void BagMenu_Print(u8, u8, const u8 *, u8, u8, u8, u8, u8, u8); @@ -265,21 +265,21 @@ static const struct ListMenuTemplate sItemListMenu = }; static const struct MenuAction sItemMenuActions[] = { - [ACTION_USE] = {gMenuText_Use, ItemMenu_UseOutOfBattle}, - [ACTION_TOSS] = {gMenuText_Toss, ItemMenu_Toss}, - [ACTION_REGISTER] = {gMenuText_Register, ItemMenu_Register}, - [ACTION_GIVE] = {gMenuText_Give, ItemMenu_Give}, - [ACTION_CANCEL] = {gText_Cancel2, ItemMenu_Cancel}, - [ACTION_BATTLE_USE] = {gMenuText_Use, ItemMenu_UseInBattle}, - [ACTION_CHECK] = {gMenuText_Check, ItemMenu_UseOutOfBattle}, - [ACTION_WALK] = {gMenuText_Walk, ItemMenu_UseOutOfBattle}, - [ACTION_DESELECT] = {gMenuText_Deselect, ItemMenu_Register}, - [ACTION_CHECK_TAG] = {gMenuText_CheckTag, ItemMenu_CheckTag}, - [ACTION_CONFIRM] = {gMenuText_Confirm, Task_FadeAndCloseBagMenu}, - [ACTION_SHOW] = {gMenuText_Show, ItemMenu_Show}, - [ACTION_GIVE_FAVOR_LADY] = {gMenuText_Give2, ItemMenu_GiveFavorLady}, - [ACTION_CONFIRM_QUIZ_LADY] = {gMenuText_Confirm, ItemMenu_ConfirmQuizLady}, - [ACTION_DUMMY] = {gText_EmptyString2, NULL} + [ACTION_USE] = {gMenuText_Use, {ItemMenu_UseOutOfBattle}}, + [ACTION_TOSS] = {gMenuText_Toss, {ItemMenu_Toss}}, + [ACTION_REGISTER] = {gMenuText_Register, {ItemMenu_Register}}, + [ACTION_GIVE] = {gMenuText_Give, {ItemMenu_Give}}, + [ACTION_CANCEL] = {gText_Cancel2, {ItemMenu_Cancel}}, + [ACTION_BATTLE_USE] = {gMenuText_Use, {ItemMenu_UseInBattle}}, + [ACTION_CHECK] = {gMenuText_Check, {ItemMenu_UseOutOfBattle}}, + [ACTION_WALK] = {gMenuText_Walk, {ItemMenu_UseOutOfBattle}}, + [ACTION_DESELECT] = {gMenuText_Deselect, {ItemMenu_Register}}, + [ACTION_CHECK_TAG] = {gMenuText_CheckTag, {ItemMenu_CheckTag}}, + [ACTION_CONFIRM] = {gMenuText_Confirm, {Task_FadeAndCloseBagMenu}}, + [ACTION_SHOW] = {gMenuText_Show, {ItemMenu_Show}}, + [ACTION_GIVE_FAVOR_LADY] = {gMenuText_Give2, {ItemMenu_GiveFavorLady}}, + [ACTION_CONFIRM_QUIZ_LADY] = {gMenuText_Confirm, {ItemMenu_ConfirmQuizLady}}, + [ACTION_DUMMY] = {gText_EmptyString2, {NULL}} }; // these are all 2D arrays with a width of 2 but are represented as 1D arrays @@ -894,7 +894,7 @@ static void LoadBagItemListBuffers(u8 pocketId) gMultiuseListMenuTemplate.maxShowed = gBagMenu->numShownItems[pocketId]; } -static void GetItemName(s8 *dest, u16 itemId) +static void GetItemName(u8 *dest, u16 itemId) { switch (gBagPosition.pocket) { @@ -2466,8 +2466,7 @@ static void BagMenu_Print(u8 windowId, u8 fontId, const u8 *str, u8 left, u8 top AddTextPrinterParameterized4(windowId, fontId, left, top, letterSpacing, lineSpacing, sFontColorTable[colorIndex], speed, str); } -// Unused -static u8 BagMenu_GetWindowId(u8 windowType) +static u8 UNUSED BagMenu_GetWindowId(u8 windowType) { return gBagMenu->windowIds[windowType]; } diff --git a/src/item_use.c b/src/item_use.c index 9737ca7d87..60338e437a 100755 --- a/src/item_use.c +++ b/src/item_use.c @@ -724,7 +724,7 @@ static void ItemUseOnFieldCB_WailmerPailBerry(u8 taskId) static bool8 TryToWaterSudowoodo(void) { - u16 x, y; + s16 x, y; u8 elevation; u8 objId; GetXYCoordsOneStepInFrontOfPlayer(&x, &y); diff --git a/src/librfu_rfu.c b/src/librfu_rfu.c index da37b8fc11..20d11352a1 100644 --- a/src/librfu_rfu.c +++ b/src/librfu_rfu.c @@ -1400,7 +1400,11 @@ static u16 rfu_STC_setSendData_org(u8 ni_or_uni, u8 bmSendSlot, u8 subFrameSize, { u8 bm_slot_id, sendSlotFlag; u8 frameSize; +#ifdef UBFIX + u8 *llFrameSize_p = NULL; +#else u8 *llFrameSize_p; +#endif u8 sending; u8 i; u16 imeBak; diff --git a/src/link.c b/src/link.c index c51abc9526..f784a36c67 100644 --- a/src/link.c +++ b/src/link.c @@ -278,8 +278,7 @@ static void InitLinkTestBG(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charB SetGpuReg(REG_OFFSET_BG0VOFS + bgNum * 4, 0); } -// Unused -static void LoadLinkTestBgGfx(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charBaseBlock) +static void UNUSED LoadLinkTestBgGfx(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charBaseBlock) { LoadPalette(sLinkTestDigitsPal, BG_PLTT_ID(paletteNum), PLTT_SIZE_4BPP); DmaCopy16(3, sLinkTestDigitsGfx, (u16 *)BG_CHAR_ADDR(charBaseBlock), sizeof sLinkTestDigitsGfx); @@ -289,8 +288,7 @@ static void LoadLinkTestBgGfx(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 ch SetGpuReg(sBGControlRegs[bgNum], BGCNT_SCREENBASE(screenBaseBlock) | BGCNT_CHARBASE(charBaseBlock)); } -// Unused -static void LinkTestScreen(void) +static void UNUSED LinkTestScreen(void) { int i; @@ -779,8 +777,7 @@ u32 LinkDummy_Return2(void) return 2; } -// Unused -static bool32 IsFullLinkGroupWithNoRS(void) +static bool32 UNUSED IsFullLinkGroupWithNoRS(void) { if (GetLinkPlayerCount() != MAX_LINK_PLAYERS || AreAnyLinkPlayersUsingVersions(VERSION_RUBY, VERSION_SAPPHIRE) < 0) { @@ -1012,14 +1009,12 @@ void SetBerryBlenderLinkCallback(void) gLinkCallback = LinkCB_BerryBlenderSendHeldKeys; } -// Unused -static u32 GetBerryBlenderKeySendAttempts(void) +static u32 UNUSED GetBerryBlenderKeySendAttempts(void) { return gBerryBlenderKeySendAttempts; } -// Unused -static void SendBerryBlenderNoSpaceForPokeblocks(void) +static void UNUSED SendBerryBlenderNoSpaceForPokeblocks(void) { BuildSendCmd(LINKCMD_BLENDER_NO_PBLOCK_SPACE); } @@ -1165,7 +1160,7 @@ static void LinkTest_PrintHex(u32 num, u8 x, u8 y, u8 length) } } -static void LinkTest_PrintInt(int num, u8 x, u8 y, u8 length) +static void UNUSED LinkTest_PrintInt(int num, u8 x, u8 y, u8 length) { char buff[16]; int negX; @@ -1297,8 +1292,7 @@ u8 GetSavedPlayerCount(void) return gSavedLinkPlayerCount; } -// Unused -static u8 GetSavedMultiplayerId(void) +static u8 UNUSED GetSavedMultiplayerId(void) { return gSavedMultiplayerId; } @@ -1335,13 +1329,13 @@ bool8 DoesLinkPlayerCountMatchSaved(void) void ClearSavedLinkPlayers(void) { - int i; // The CpuSet loop below is incorrectly writing to NULL // instead of sSavedLinkPlayers. // Additionally it's using the wrong array size. #ifdef UBFIX memset(sSavedLinkPlayers, 0, sizeof(sSavedLinkPlayers)); #else + int i; for (i = 0; i < MAX_LINK_PLAYERS; i++) CpuSet(&sSavedLinkPlayers[i], NULL, sizeof(struct LinkPlayer)); #endif @@ -1382,8 +1376,7 @@ bool8 IsLinkMaster(void) return EXTRACT_MASTER(gLinkStatus); } -// Unused -static u8 GetDummy2(void) +static u8 UNUSED GetDummy2(void) { return sDummy2; } diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c index 6c84ffefe0..9979097a49 100644 --- a/src/link_rfu_2.c +++ b/src/link_rfu_2.c @@ -699,8 +699,7 @@ void StopUnionRoomLinkManager(void) gRfu.state = RFUSTATE_UR_STOP_MANAGER; } -// Unused -static void ReadySendDataForSlots(u8 slots) +static void UNUSED ReadySendDataForSlots(u8 slots) { u8 i; @@ -2146,7 +2145,7 @@ void RfuSetErrorParams(u32 errorInfo) } } -static void ResetErrorState(void) +static void UNUSED ResetErrorState(void) { gRfu.errorState = RFU_ERROR_STATE_NONE; } @@ -2560,8 +2559,7 @@ static void VBlank_RfuIdle(void) TransferPlttBuffer(); } -// Unused -static void Debug_RfuIdle(void) +static void UNUSED Debug_RfuIdle(void) { s32 i; @@ -2934,7 +2932,7 @@ static void Debug_PrintEmpty(void) Debug_PrintString(sASCII_30Spaces, 0, i); } -static void Debug_PrintStatus(void) +static void UNUSED Debug_PrintStatus(void) { s32 i, j; Debug_PrintNum(GetBlockReceivedStatus(), 28, 19, 2); @@ -2990,7 +2988,7 @@ static void Debug_PrintStatus(void) } } -static u32 GetRfuSendQueueLength(void) +static u32 UNUSED GetRfuSendQueueLength(void) { return gRfu.sendQueue.count; } diff --git a/src/link_rfu_3.c b/src/link_rfu_3.c index 6eee8435c9..8a9c28f1b0 100644 --- a/src/link_rfu_3.c +++ b/src/link_rfu_3.c @@ -342,7 +342,7 @@ void RfuSendQueue_Reset(struct RfuSendQueue *queue) queue->full = FALSE; } -static void RfuUnusedQueue_Reset(struct RfuUnusedQueue *queue) +static void UNUSED RfuUnusedQueue_Reset(struct RfuUnusedQueue *queue) { s32 i; s32 j; @@ -514,7 +514,7 @@ bool8 RfuBackupQueue_Dequeue(struct RfuBackupQueue *queue, u8 *src) return TRUE; } -static void RfuUnusedQueue_Enqueue(struct RfuUnusedQueue *queue, u8 *data) +static void UNUSED RfuUnusedQueue_Enqueue(struct RfuUnusedQueue *queue, u8 *data) { s32 i; @@ -533,7 +533,7 @@ static void RfuUnusedQueue_Enqueue(struct RfuUnusedQueue *queue, u8 *data) } } -static bool8 RfuUnusedQueue_Dequeue(struct RfuUnusedQueue *queue, u8 *dest) +static bool8 UNUSED RfuUnusedQueue_Dequeue(struct RfuUnusedQueue *queue, u8 *dest) { s32 i; @@ -549,11 +549,10 @@ static bool8 RfuUnusedQueue_Dequeue(struct RfuUnusedQueue *queue, u8 *dest) return TRUE; } -// Unused // Populates an array with a sequence of numbers (which numbers depends on the mode) // and sets the final element to the total of the other elements #define SEQ_ARRAY_MAX_SIZE 200 -static void PopulateArrayWithSequence(u8 *arr, u8 mode) +static void UNUSED PopulateArrayWithSequence(u8 *arr, u8 mode) { s32 i; u8 rval; @@ -607,7 +606,7 @@ static void PopulateArrayWithSequence(u8 *arr, u8 mode) // File boundary here maybe? -static void PkmnStrToASCII(u8 *asciiStr, const u8 *pkmnStr) +static void UNUSED PkmnStrToASCII(u8 *asciiStr, const u8 *pkmnStr) { s32 i; @@ -616,7 +615,7 @@ static void PkmnStrToASCII(u8 *asciiStr, const u8 *pkmnStr) asciiStr[i] = 0; } -static void ASCIIToPkmnStr(u8 *pkmnStr, const u8 *asciiStr) +static void UNUSED ASCIIToPkmnStr(u8 *pkmnStr, const u8 *asciiStr) { s32 i; diff --git a/src/m4a_tables.c b/src/m4a_tables.c index 9a4ea32e69..12e6893902 100644 --- a/src/m4a_tables.c +++ b/src/m4a_tables.c @@ -261,10 +261,9 @@ const struct PokemonCrySong gPokemonCrySongTemplate = 0, // block count 255, // priority 0, // reverb - (struct ToneData *)&voicegroup000, - NULL, - NULL, - 0, + (struct ToneData *)&voicegroup000, // tone + {NULL, NULL}, // part + 0, // gap TUNE, // part 0 C_V, // TUNE value GOTO, diff --git a/src/mail_data.c b/src/mail_data.c index 99cf1f9edd..ed152faf2c 100644 --- a/src/mail_data.c +++ b/src/mail_data.c @@ -129,7 +129,7 @@ u8 GiveMailToMon(struct Pokemon *mon, struct Mail *mail) return mailId; } -static bool32 DummyMailFunc(void) +static bool32 UNUSED DummyMailFunc(void) { return FALSE; } diff --git a/src/main.c b/src/main.c index 99d2610bb3..5f12a2996e 100644 --- a/src/main.c +++ b/src/main.c @@ -76,7 +76,9 @@ static EWRAM_DATA u16 sTrainerId = 0; static void UpdateLinkAndCallCallbacks(void); static void InitMainCallbacks(void); static void CallCallbacks(void); +#ifdef BUGFIX static void SeedRngWithRtc(void); +#endif static void ReadKeys(void); void InitIntrHandlers(void); static void WaitForVBlank(void); diff --git a/src/main_menu.c b/src/main_menu.c index ddbcda5fd2..6a6ee99557 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -454,8 +454,8 @@ static const union AffineAnimCmd *const sSpriteAffineAnimTable_PlayerShrink[] = }; static const struct MenuAction sMenuActions_Gender[] = { - {gText_BirchBoy, NULL}, - {gText_BirchGirl, NULL} + {gText_BirchBoy, {NULL}}, + {gText_BirchGirl, {NULL}} }; static const u8 *const sMalePresetNames[] = { diff --git a/src/map_name_popup.c b/src/map_name_popup.c index 93a2825833..796eb28afa 100644 --- a/src/map_name_popup.c +++ b/src/map_name_popup.c @@ -198,8 +198,7 @@ static const u8 * const sBattlePyramid_MapHeaderStrings[FRONTIER_STAGES_PER_CHAL sText_Pyramid, }; -// Unused -static bool8 StartMenu_ShowMapNamePopup(void) +static bool8 UNUSED StartMenu_ShowMapNamePopup(void) { HideStartMenu(); ShowMapNamePopup(); diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index 36b29ed73b..287419f901 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -740,8 +740,7 @@ void SanitizeMauvilleOldManForRuby(union OldMan * oldMan) } } -// Unused -static void SetMauvilleOldManLanguage(union OldMan * oldMan, u32 language1, u32 language2, u32 language3) +static void UNUSED SetMauvilleOldManLanguage(union OldMan * oldMan, u32 language1, u32 language2, u32 language3) { s32 i; diff --git a/src/menu.c b/src/menu.c index ad3381de9b..dd43e310dc 100644 --- a/src/menu.c +++ b/src/menu.c @@ -442,14 +442,12 @@ void Menu_LoadStdPalAt(u16 offset) LoadPalette(gStandardMenuPalette, offset, STD_WINDOW_PALETTE_SIZE); } -// Unused -static const u16 *Menu_GetStdPal(void) +static UNUSED const u16* Menu_GetStdPal(void) { return gStandardMenuPalette; } -// Unused -static u16 Menu_GetStdPalColor(u8 colorNum) +static u16 UNUSED Menu_GetStdPalColor(u8 colorNum) { if (colorNum > 15) colorNum = 0; @@ -510,14 +508,12 @@ void RemoveStartMenuWindow(void) } } -// Unused -static u16 GetDialogFrameBaseTileNum(void) +static u16 UNUSED GetDialogFrameBaseTileNum(void) { return DLG_WINDOW_BASE_TILE_NUM; } -// Unused -static u16 GetStandardFrameBaseTileNum(void) +static u16 UNUSED GetStandardFrameBaseTileNum(void) { return STD_WINDOW_BASE_TILE_NUM; } @@ -567,8 +563,7 @@ void DrawDialogFrameWithCustomTileAndPalette(u8 windowId, bool8 copyToVram, u16 CopyWindowToVram(windowId, COPYWIN_FULL); } -// Never used. -static void DrawDialogFrameWithCustomTile(u8 windowId, bool8 copyToVram, u16 tileNum) +static void UNUSED DrawDialogFrameWithCustomTile(u8 windowId, bool8 copyToVram, u16 tileNum) { sTileNum = tileNum; sPaletteNum = GetWindowAttribute(windowId, WINDOW_PALETTE_NUM); @@ -877,15 +872,13 @@ void HofPCTopBar_PrintPair(const u8 *string, const u8 *string2, bool8 noBg, u8 l } } -// Unused -static void HofPCTopBar_CopyToVram(void) +static void UNUSED HofPCTopBar_CopyToVram(void) { if (sHofPCTopBarWindowId != WINDOW_NONE) CopyWindowToVram(sHofPCTopBarWindowId, COPYWIN_FULL); } -// Unused -static void HofPCTopBar_Clear(void) +static void UNUSED HofPCTopBar_Clear(void) { if (sHofPCTopBarWindowId != WINDOW_NONE) { @@ -936,8 +929,7 @@ u8 InitMenuNormal(u8 windowId, u8 fontId, u8 left, u8 top, u8 cursorHeight, u8 n return InitMenu(windowId, fontId, left, top, cursorHeight, numChoices, initialCursorPos, FALSE); } -// Unused -static u8 InitMenuDefaultCursorHeight(u8 windowId, u8 fontId, u8 left, u8 top, u8 numChoices, u8 initialCursorPos) +static u8 UNUSED InitMenuDefaultCursorHeight(u8 windowId, u8 fontId, u8 left, u8 top, u8 numChoices, u8 initialCursorPos) { u8 cursorHeight = GetMenuCursorDimensionByFont(fontId, 1); return InitMenuNormal(windowId, fontId, left, top, cursorHeight, numChoices, initialCursorPos); @@ -1114,8 +1106,7 @@ void PrintMenuActionTextsAtPos(u8 windowId, u8 fontId, u8 left, u8 top, u8 lineH CopyWindowToVram(windowId, COPYWIN_GFX); } -// Unused -static void PrintMenuActionTextsWithSpacing(u8 windowId, u8 fontId, u8 left, u8 top, u8 lineHeight, u8 itemCount, const struct MenuAction *menuActions, u8 letterSpacing, u8 lineSpacing) +static void UNUSED PrintMenuActionTextsWithSpacing(u8 windowId, u8 fontId, u8 left, u8 top, u8 lineHeight, u8 itemCount, const struct MenuAction *menuActions, u8 letterSpacing, u8 lineSpacing) { u8 i; for (i = 0; i < itemCount; i++) @@ -1123,8 +1114,7 @@ static void PrintMenuActionTextsWithSpacing(u8 windowId, u8 fontId, u8 left, u8 CopyWindowToVram(windowId, COPYWIN_GFX); } -// Unused -static void PrintMenuActionTextsAtTop(u8 windowId, u8 fontId, u8 lineHeight, u8 itemCount, const struct MenuAction *menuActions) +static void UNUSED PrintMenuActionTextsAtTop(u8 windowId, u8 fontId, u8 lineHeight, u8 itemCount, const struct MenuAction *menuActions) { PrintMenuActionTextsAtPos(windowId, fontId, GetFontAttribute(fontId, FONTATTR_MAX_LETTER_WIDTH), 1, lineHeight, itemCount, menuActions); } @@ -1156,8 +1146,7 @@ void PrintMenuActionTexts(u8 windowId, u8 fontId, u8 left, u8 top, u8 letterSpac CopyWindowToVram(windowId, COPYWIN_GFX); } -// Unused -static void PrintMenuActionTextsAtTopById(u8 windowId, u8 fontId, u8 lineHeight, u8 itemCount, const struct MenuAction *menuActions, const u8 *actionIds) +static void UNUSED PrintMenuActionTextsAtTopById(u8 windowId, u8 fontId, u8 lineHeight, u8 itemCount, const struct MenuAction *menuActions, const u8 *actionIds) { PrintMenuActionTexts(windowId, fontId, GetFontAttribute(fontId, FONTATTR_MAX_LETTER_WIDTH), 1, GetFontAttribute(fontId, FONTATTR_LETTER_SPACING), lineHeight, itemCount, menuActions, actionIds); } @@ -1214,7 +1203,7 @@ static void CreateYesNoMenuAtPos(const struct WindowTemplate *window, u8 fontId, InitMenuNormal(sYesNoWindowId, fontId, left, top, GetFontAttribute(fontId, FONTATTR_MAX_LETTER_HEIGHT), 2, initialCursorPos); } -static void CreateYesNoMenuInTopLeft(const struct WindowTemplate *window, u8 fontId, u16 baseTileNum, u8 paletteNum) +static void UNUSED CreateYesNoMenuInTopLeft(const struct WindowTemplate *window, u8 fontId, u16 baseTileNum, u8 paletteNum) { CreateYesNoMenuAtPos(window, fontId, 0, 1, baseTileNum, paletteNum, 0); } @@ -1245,8 +1234,7 @@ static void PrintMenuActionGridText(u8 windowId, u8 fontId, u8 left, u8 top, u8 CopyWindowToVram(windowId, COPYWIN_GFX); } -// Unused -static void PrintMenuActionGridTextAtTop(u8 windowId, u8 fontId, u8 width, u8 height, u8 columns, u8 rows, const struct MenuAction *menuActions) +static void UNUSED PrintMenuActionGridTextAtTop(u8 windowId, u8 fontId, u8 width, u8 height, u8 columns, u8 rows, const struct MenuAction *menuActions) { PrintMenuActionGridText(windowId, fontId, GetFontAttribute(fontId, FONTATTR_MAX_LETTER_WIDTH), 0, width, height, columns, rows, menuActions); } @@ -1282,8 +1270,7 @@ void PrintMenuActionGrid(u8 windowId, u8 fontId, u8 left, u8 top, u8 optionWidth CopyWindowToVram(windowId, COPYWIN_GFX); } -// Unused -static void PrintMenuActionGrid_TopLeft(u8 windowId, u8 fontId, u8 optionWidth, u8 unused, u8 horizontalCount, u8 verticalCount, const struct MenuAction *menuActions, const u8 *actionIds) +static void UNUSED PrintMenuActionGrid_TopLeft(u8 windowId, u8 fontId, u8 optionWidth, u8 unused, u8 horizontalCount, u8 verticalCount, const struct MenuAction *menuActions, const u8 *actionIds) { PrintMenuActionGrid(windowId, fontId, GetFontAttribute(fontId, FONTATTR_MAX_LETTER_WIDTH), 0, optionWidth, horizontalCount, verticalCount, menuActions, actionIds); } @@ -1315,8 +1302,7 @@ static u8 InitMenuGrid(u8 windowId, u8 fontId, u8 left, u8 top, u8 optionWidth, return sMenu.cursorPos; } -// Unused -static u8 InitMenuGridDefaultCursorHeight(u8 windowId, u8 fontId, u8 left, u8 top, u8 width, u8 columns, u8 rows, u8 cursorPos) +static u8 UNUSED InitMenuGridDefaultCursorHeight(u8 windowId, u8 fontId, u8 left, u8 top, u8 width, u8 columns, u8 rows, u8 cursorPos) { u8 cursorHeight = GetMenuCursorDimensionByFont(fontId, 1); u8 numChoices = columns * rows; @@ -1408,8 +1394,7 @@ u8 ChangeGridMenuCursorPosition(s8 deltaX, s8 deltaY) } } -// Unused -static s8 Menu_ProcessGridInput_NoSoundLimit(void) +static s8 UNUSED Menu_ProcessGridInput_NoSoundLimit(void) { if (JOY_NEW(A_BUTTON)) { @@ -1489,8 +1474,7 @@ s8 Menu_ProcessGridInput(void) return MENU_NOTHING_CHOSEN; } -// Unused -static s8 Menu_ProcessGridInputRepeat_NoSoundLimit(void) +static s8 UNUSED Menu_ProcessGridInputRepeat_NoSoundLimit(void) { if (JOY_NEW(A_BUTTON)) { @@ -1529,8 +1513,7 @@ static s8 Menu_ProcessGridInputRepeat_NoSoundLimit(void) return MENU_NOTHING_CHOSEN; } -// Unused -static s8 Menu_ProcessGridInputRepeat(void) +static s8 UNUSED Menu_ProcessGridInputRepeat(void) { u8 oldPos = sMenu.cursorPos; @@ -1674,8 +1657,7 @@ void PrintMenuGridTable(u8 windowId, u8 optionWidth, u8 columns, u8 rows, const CopyWindowToVram(windowId, COPYWIN_GFX); } -// Unused -static void PrintMenuActionGridTextNoSpacing(u8 windowId, u8 optionWidth, u8 columns, u8 rows, const struct MenuAction *menuActions, const u8 *actionIds) +static void UNUSED PrintMenuActionGridTextNoSpacing(u8 windowId, u8 optionWidth, u8 columns, u8 rows, const struct MenuAction *menuActions, const u8 *actionIds) { u8 i; u8 j; @@ -2007,7 +1989,7 @@ void PrintPlayerNameOnWindow(u8 windowId, const u8 *src, u16 x, u16 y) AddTextPrinterParameterized(windowId, 1, gStringVar4, x, y, TEXT_SKIP_DRAW, 0); } -static void UnusedBlitBitmapRect(const struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height) +static void UNUSED UnusedBlitBitmapRect(const struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height) { int loopSrcY, loopDstY, loopSrcX, loopDstX, xEnd, yEnd, multiplierSrcY, multiplierDstY; const u8 *pixelsSrc; @@ -2082,14 +2064,12 @@ static void UnusedBlitBitmapRect(const struct Bitmap *src, struct Bitmap *dst, u } } -// Unused -static void LoadMonIconPalAtOffset(u8 palOffset, u16 speciesId) +static void UNUSED LoadMonIconPalAtOffset(u8 palOffset, u16 speciesId) { LoadPalette(GetValidMonIconPalettePtr(speciesId), palOffset, PLTT_SIZE_4BPP); } -// Unused -static void DrawMonIconAtPos(u8 windowId, u16 speciesId, u32 personality, u16 x, u16 y) +static void UNUSED DrawMonIconAtPos(u8 windowId, u16 speciesId, u32 personality, u16 x, u16 y) { BlitBitmapToWindow(windowId, GetMonIconPtr(speciesId, personality, 1), x, y, 32, 32); } diff --git a/src/menu_specialized.c b/src/menu_specialized.c index 15fdafbeb2..e749f599de 100644 --- a/src/menu_specialized.c +++ b/src/menu_specialized.c @@ -236,8 +236,7 @@ void MailboxMenu_RemoveWindow(u8 windowIdx) sMailboxWindowIds[windowIdx] = WINDOW_NONE; } -// Unused -static u8 MailboxMenu_GetWindowId(u8 windowIdx) +static u8 UNUSED MailboxMenu_GetWindowId(u8 windowIdx) { return sMailboxWindowIds[windowIdx]; } diff --git a/src/mini_printf.c b/src/mini_printf.c index d96a9379a1..69500157c6 100644 --- a/src/mini_printf.c +++ b/src/mini_printf.c @@ -97,7 +97,7 @@ static s32 _putsAscii(char *s, s32 len, void *buf) if (!buf) return len; - + b = buf; p0 = b->buffer; @@ -120,7 +120,7 @@ static s32 _putsEncoded(char *s, s32 len, void *buf) if (!buf) return len; - + b = buf; p0 = b->buffer; diff --git a/src/minigame_countdown.c b/src/minigame_countdown.c index b4d3b6558b..617922e5aa 100644 --- a/src/minigame_countdown.c +++ b/src/minigame_countdown.c @@ -158,8 +158,7 @@ static const TaskFunc sStaticCountdownFuncs[][4] = #define sId data[4] // Never read #define sNumberSpriteId data[5] // Never read -// Unused -static u32 CreateStaticCountdownTask(u8 funcSetId, u8 taskPriority) +static u32 UNUSED CreateStaticCountdownTask(u8 funcSetId, u8 taskPriority) { u8 taskId = CreateTask(Task_StaticCountdown, taskPriority); struct Task *task = &gTasks[taskId]; @@ -170,7 +169,7 @@ static u32 CreateStaticCountdownTask(u8 funcSetId, u8 taskPriority) return taskId; } -static bool32 StartStaticCountdown(void) +static bool32 UNUSED StartStaticCountdown(void) { u8 taskId = FindTaskIdByFunc(Task_StaticCountdown); if (taskId == TASK_NONE) @@ -180,7 +179,7 @@ static bool32 StartStaticCountdown(void) return TRUE; } -static bool32 IsStaticCountdownRunning(void) +static bool32 UNUSED IsStaticCountdownRunning(void) { return FuncIsActiveTask(Task_StaticCountdown); } diff --git a/src/mirage_tower.c b/src/mirage_tower.c index 9b48ee24b7..b1e2e5003b 100644 --- a/src/mirage_tower.c +++ b/src/mirage_tower.c @@ -431,7 +431,7 @@ void DoMirageTowerCeilingCrumble(void) static void WaitCeilingCrumble(u8 taskId) { - u16 *data = gTasks[taskId].data; + u16 *data = (u16*)gTasks[taskId].data; data[1]++; // Either wait 1000 frames, or until all 16 crumble sprites and the one screen-shake task are completed. if (data[1] == 1000 || data[0] == 17) diff --git a/src/mystery_gift_menu.c b/src/mystery_gift_menu.c index c44b7a2620..78e4a45715 100644 --- a/src/mystery_gift_menu.c +++ b/src/mystery_gift_menu.c @@ -597,8 +597,7 @@ static void ShowDownArrow(void) DrawDownArrow(WIN_MSG, DOWN_ARROW_X, DOWN_ARROW_Y, 1, TRUE, &sDownArrowCounterAndYCoordIdx[0], &sDownArrowCounterAndYCoordIdx[1]); } -// Unused -static bool32 HideDownArrowAndWaitButton(u8 * textState) +static bool32 UNUSED HideDownArrowAndWaitButton(u8 * textState) { switch (*textState) { @@ -722,7 +721,7 @@ s8 DoMysteryGiftYesNo(u8 * textState, u16 * windowId, bool8 yesNoBoxPlacement, c // Handle the "Receive/Send/Toss" menu that appears when selecting Wonder Card/News static s32 HandleGiftSelectMenu(u8 * textState, u16 * windowId, bool32 cannotToss, bool32 cannotSend) { - struct WindowTemplate windowTemplate; + struct WindowTemplate UNUSED windowTemplate; s32 input; switch (*textState) diff --git a/src/naming_screen.c b/src/naming_screen.c index 6acb29ffbf..d8ae7ccd4d 100644 --- a/src/naming_screen.c +++ b/src/naming_screen.c @@ -2058,23 +2058,23 @@ static bool8 IsWideLetter(u8 character) return FALSE; } -// Debug? Unused, and arguments aren't sensible for non-player screens. -static void Debug_NamingScreenPlayer(void) +// Debug? Arguments aren't sensible for non-player screens. +static void UNUSED Debug_NamingScreenPlayer(void) { DoNamingScreen(NAMING_SCREEN_PLAYER, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_ReturnToFieldWithOpenMenu); } -static void Debug_NamingScreenBox(void) +static void UNUSED Debug_NamingScreenBox(void) { DoNamingScreen(NAMING_SCREEN_BOX, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_ReturnToFieldWithOpenMenu); } -static void Debug_NamingScreenCaughtMon(void) +static void UNUSED Debug_NamingScreenCaughtMon(void) { DoNamingScreen(NAMING_SCREEN_CAUGHT_MON, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_ReturnToFieldWithOpenMenu); } -static void Debug_NamingScreenNickname(void) +static void UNUSED Debug_NamingScreenNickname(void) { DoNamingScreen(NAMING_SCREEN_NICKNAME, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_ReturnToFieldWithOpenMenu); } diff --git a/src/overworld.c b/src/overworld.c index 3d46fc5005..e9245ce0a0 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -134,14 +134,11 @@ static void CreateLinkPlayerSprite(u8, u8); static void GetLinkPlayerCoords(u8, u16 *, u16 *); static u8 GetLinkPlayerFacingDirection(u8); static u8 GetLinkPlayerElevation(u8); -static s32 GetLinkPlayerObjectStepTimer(u8); static u8 GetLinkPlayerIdAt(s16, s16); static void SetPlayerFacingDirection(u8, u8); static void ZeroObjectEvent(struct ObjectEvent *); static void SpawnLinkPlayerObjectEvent(u8, s16, s16, u8); static void InitLinkPlayerObjectEventPos(struct ObjectEvent *, s16, s16); -static void SetLinkPlayerObjectRange(u8, u8); -static void DestroyLinkPlayerObject(u8); static u8 GetSpriteForLinkedPlayer(u8); static void RunTerminateLinkScript(void); static u32 GetLinkSendQueueLength(void); @@ -1004,8 +1001,8 @@ void SetObjectEventLoadFlag(u8 flag) sObjectEventLoadFlag = flag; } -// Unused, sObjectEventLoadFlag is read directly -static u8 GetObjectEventLoadFlag(void) +// sObjectEventLoadFlag is read directly +static u8 UNUSED GetObjectEventLoadFlag(void) { return sObjectEventLoadFlag; } @@ -2165,7 +2162,7 @@ static void InitObjectEventsLink(void) static void InitObjectEventsLocal(void) { - s16 x, y; + u16 x, y; struct InitialPlayerAvatarState *player; gTotalCameraPixelOffsetX = 0; @@ -2661,8 +2658,7 @@ u32 GetCableClubPartnersReady(void) return CABLE_SEAT_WAITING; } -// Unused -static bool32 IsAnyPlayerExitingCableClub(void) +static bool32 UNUSED IsAnyPlayerExitingCableClub(void) { return IsAnyPlayerInLinkState(PLAYER_LINK_STATE_EXITING_ROOM); } @@ -2970,7 +2966,7 @@ static void InitLinkPlayerObjectEventPos(struct ObjectEvent *objEvent, s16 x, s1 ObjectEventUpdateElevation(objEvent); } -static void SetLinkPlayerObjectRange(u8 linkPlayerId, u8 dir) +static void UNUSED SetLinkPlayerObjectRange(u8 linkPlayerId, u8 dir) { if (gLinkPlayerObjectEvents[linkPlayerId].active) { @@ -2980,7 +2976,7 @@ static void SetLinkPlayerObjectRange(u8 linkPlayerId, u8 dir) } } -static void DestroyLinkPlayerObject(u8 linkPlayerId) +static void UNUSED DestroyLinkPlayerObject(u8 linkPlayerId) { struct LinkPlayerObjectEvent *linkPlayerObjEvent = &gLinkPlayerObjectEvents[linkPlayerId]; u8 objEventId = linkPlayerObjEvent->objEventId; @@ -3021,7 +3017,7 @@ static u8 GetLinkPlayerElevation(u8 linkPlayerId) return objEvent->currentElevation; } -static s32 GetLinkPlayerObjectStepTimer(u8 linkPlayerId) +static s32 UNUSED GetLinkPlayerObjectStepTimer(u8 linkPlayerId) { u8 objEventId = gLinkPlayerObjectEvents[linkPlayerId].objEventId; struct ObjectEvent *objEvent = &gObjectEvents[objEventId]; diff --git a/src/palette.c b/src/palette.c index e360664627..f19ac07cf6 100644 --- a/src/palette.c +++ b/src/palette.c @@ -201,15 +201,13 @@ bool8 BeginNormalPaletteFade(u32 selectedPalettes, s8 delay, u8 startY, u8 targe } } -// Unused -static bool8 BeginPlttFade(u32 selectedPalettes, u8 delay, u8 startY, u8 targetY, u16 blendColor) +static bool8 UNUSED BeginPlttFade(u32 selectedPalettes, u8 delay, u8 startY, u8 targetY, u16 blendColor) { ReadPlttIntoBuffers(); return BeginNormalPaletteFade(selectedPalettes, delay, startY, targetY, blendColor); } -// Unused -static void PaletteStruct_Run(u8 a1, u32 *unkFlags) +static void UNUSED PaletteStruct_Run(u8 a1, u32 *unkFlags) { u8 i; @@ -382,14 +380,14 @@ void ResetPaletteFadeControl(void) gPaletteFade.deltaY = 2; } -static void PaletteStruct_SetUnusedFlag(u16 id) +static void UNUSED PaletteStruct_SetUnusedFlag(u16 id) { u8 paletteNum = PaletteStruct_GetPalNum(id); if (paletteNum != NUM_PALETTE_STRUCTS) sPaletteStructs[paletteNum].flag = TRUE; } -static void PaletteStruct_ClearUnusedFlag(u16 id) +static void UNUSED PaletteStruct_ClearUnusedFlag(u16 id) { u8 paletteNum = PaletteStruct_GetPalNum(id); if (paletteNum != NUM_PALETTE_STRUCTS) @@ -982,8 +980,7 @@ void BlendPalettesGradually(u32 selectedPalettes, s8 delay, u8 coeff, u8 coeffTa gTasks[taskId].func(taskId); } -// Unused -static bool32 IsBlendPalettesGraduallyTaskActive(u8 id) +static bool32 UNUSED IsBlendPalettesGraduallyTaskActive(u8 id) { int i; @@ -996,8 +993,7 @@ static bool32 IsBlendPalettesGraduallyTaskActive(u8 id) return FALSE; } -// Unused -static void DestroyBlendPalettesGraduallyTask(void) +static void UNUSED DestroyBlendPalettesGraduallyTask(void) { u8 taskId; diff --git a/src/palette_util.c b/src/palette_util.c index 08239c3363..d24321d580 100755 --- a/src/palette_util.c +++ b/src/palette_util.c @@ -39,8 +39,7 @@ u8 RouletteFlash_Add(struct RouletteFlashUtil *flash, u8 id, const struct Roulet return id; } -// Unused -static u8 RouletteFlash_Remove(struct RouletteFlashUtil *flash, u8 id) +static u8 UNUSED RouletteFlash_Remove(struct RouletteFlashUtil *flash, u8 id) { if (id >= ARRAY_COUNT(flash->palettes)) return 0xFF; @@ -470,7 +469,7 @@ void SetTilemapRect(u16 *dest, u16 *src, u8 left, u8 top, u8 width, u8 height) } } -static void FillTilemapRect_Unused(void *dest, u16 value, u8 left, u8 top, u8 width, u8 height) +static void UNUSED FillTilemapRect_Unused(void *dest, u16 value, u8 left, u8 top, u8 width, u8 height) { u8 i, j; u8 x, y; @@ -486,7 +485,7 @@ static void FillTilemapRect_Unused(void *dest, u16 value, u8 left, u8 top, u8 wi } } -static void SetTilemapRect_Unused(void *dest, const u16 *src, u8 left, u8 top, u8 width, u8 height) +static void UNUSED SetTilemapRect_Unused(void *dest, const u16 *src, u8 left, u8 top, u8 width, u8 height) { u8 i, j; u8 x, y; diff --git a/src/party_menu.c b/src/party_menu.c index f72814cbbf..9b076755c8 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -1937,7 +1937,7 @@ u8 GetMonAilment(struct Pokemon *mon) static void SetPartyMonsAllowedInMinigame(void) { - u16 *ptr; + s16 *ptr; if (gPartyMenu.menuType == PARTY_MENU_TYPE_MINIGAME) { @@ -4154,9 +4154,9 @@ static void PartyMenuStartSpriteAnim(u8 spriteId, u8 animNum) StartSpriteAnim(&gSprites[spriteId], animNum); } -// Unused. Might explain the large blank section in gPartyMenuPokeballSmall_Gfx +// Might explain the large blank section in gPartyMenuPokeballSmall_Gfx // At the very least this is how the unused anim cmds for sSpriteAnimTable_MenuPokeballSmall were meant to be accessed -static void SpriteCB_BounceConfirmCancelButton(u8 spriteId, u8 spriteId2, u8 animNum) +static void UNUSED SpriteCB_BounceConfirmCancelButton(u8 spriteId, u8 spriteId2, u8 animNum) { if (animNum == 0) { @@ -6095,8 +6095,7 @@ static void UpdatePartyToFieldOrder(void) Free(partyBuffer); } -// Unused -static void SwitchAliveMonIntoLeadSlot(void) +static void UNUSED SwitchAliveMonIntoLeadSlot(void) { u8 i; struct Pokemon *mon; @@ -6198,8 +6197,7 @@ void ChooseMonForDaycare(void) InitPartyMenu(PARTY_MENU_TYPE_DAYCARE, PARTY_LAYOUT_SINGLE, PARTY_ACTION_CHOOSE_MON, FALSE, PARTY_MSG_CHOOSE_MON_2, Task_HandleChooseMonInput, BufferMonSelection); } -// Unused -static void ChoosePartyMonByMenuType(u8 menuType) +static void UNUSED ChoosePartyMonByMenuType(u8 menuType) { gFieldCallback2 = CB2_FadeFromPartyMenu; InitPartyMenu(menuType, PARTY_LAYOUT_SINGLE, PARTY_ACTION_CHOOSE_AND_CLOSE, FALSE, PARTY_MSG_CHOOSE_MON, Task_HandleChooseMonInput, CB2_ReturnToField); diff --git a/src/player_pc.c b/src/player_pc.c index f53e08f532..7dc2616e71 100644 --- a/src/player_pc.c +++ b/src/player_pc.c @@ -191,10 +191,10 @@ static const u8 *const sItemStorage_OptionDescriptions[] = static const struct MenuAction sPlayerPCMenuActions[] = { - [MENU_ITEMSTORAGE] = { gText_ItemStorage, PlayerPC_ItemStorage }, - [MENU_MAILBOX] = { gText_Mailbox, PlayerPC_Mailbox }, - [MENU_DECORATION] = { gText_Decoration, PlayerPC_Decoration }, - [MENU_TURNOFF] = { gText_TurnOff, PlayerPC_TurnOff } + [MENU_ITEMSTORAGE] = { gText_ItemStorage, {PlayerPC_ItemStorage} }, + [MENU_MAILBOX] = { gText_Mailbox, {PlayerPC_Mailbox} }, + [MENU_DECORATION] = { gText_Decoration, {PlayerPC_Decoration} }, + [MENU_TURNOFF] = { gText_TurnOff, {PlayerPC_TurnOff} } }; static const u8 sBedroomPC_OptionOrder[] = @@ -216,10 +216,10 @@ static const u8 sPlayerPC_OptionOrder[] = static const struct MenuAction sItemStorage_MenuActions[] = { - [MENU_WITHDRAW] = { gText_WithdrawItem, ItemStorage_Withdraw }, - [MENU_DEPOSIT] = { gText_DepositItem, ItemStorage_Deposit }, - [MENU_TOSS] = { gText_TossItem, ItemStorage_Toss }, - [MENU_EXIT] = { gText_Cancel, ItemStorage_Exit } + [MENU_WITHDRAW] = { gText_WithdrawItem, {ItemStorage_Withdraw} }, + [MENU_DEPOSIT] = { gText_DepositItem, {ItemStorage_Deposit} }, + [MENU_TOSS] = { gText_TossItem, {ItemStorage_Toss} }, + [MENU_EXIT] = { gText_Cancel, {ItemStorage_Exit} } }; static const struct ItemSlot sNewGamePCItems[] = @@ -230,10 +230,10 @@ static const struct ItemSlot sNewGamePCItems[] = const struct MenuAction gMailboxMailOptions[] = { - { gText_Read, Mailbox_DoMailRead }, - { gText_MoveToBag, Mailbox_MoveToBag }, - { gText_Give2, Mailbox_Give }, - { gText_Cancel2, Mailbox_Cancel } + { gText_Read, {Mailbox_DoMailRead} }, + { gText_MoveToBag, {Mailbox_MoveToBag} }, + { gText_Give2, {Mailbox_Give} }, + { gText_Cancel2, {Mailbox_Cancel} } }; static const struct WindowTemplate sWindowTemplates_MainMenus[] = diff --git a/src/pokeball.c b/src/pokeball.c index 22d973381e..bdc2b70369 100644 --- a/src/pokeball.c +++ b/src/pokeball.c @@ -1228,7 +1228,7 @@ static void SpriteCB_TradePokeballEnd(struct Sprite *sprite) #undef sTimer // Unreferenced here and in RS, but used in FRLG, possibly by mistake. -static void DestroySpriteAndFreeResources_Ball(struct Sprite *sprite) +static void UNUSED DestroySpriteAndFreeResources_Ball(struct Sprite *sprite) { DestroySpriteAndFreeResources(sprite); } diff --git a/src/pokeblock.c b/src/pokeblock.c index e490f372c4..e01e821f7e 100644 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -215,12 +215,12 @@ const u8 *const gPokeblockNames[] = static const struct MenuAction sPokeblockMenuActions[] = { - [PKBL_USE_ON_FIELD] = {gMenuText_Use, PokeblockAction_UseOnField}, - [PKBL_TOSS] = {gMenuText_Toss, PokeblockAction_Toss}, - [PKBL_CANCEL] = {gText_Cancel2, PokeblockAction_Cancel}, - [PKBL_USE_IN_BATTLE] = {gMenuText_Use, PokeblockAction_UseInBattle}, - [PKBL_USE_ON_FEEDER] = {gMenuText_Use, PokeblockAction_UseOnPokeblockFeeder}, - [PKBL_GIVE_TO_LADY] = {gMenuText_Give2, PokeblockAction_GiveToContestLady}, + [PKBL_USE_ON_FIELD] = {gMenuText_Use, {PokeblockAction_UseOnField}}, + [PKBL_TOSS] = {gMenuText_Toss, {PokeblockAction_Toss}}, + [PKBL_CANCEL] = {gText_Cancel2, {PokeblockAction_Cancel}}, + [PKBL_USE_IN_BATTLE] = {gMenuText_Use, {PokeblockAction_UseInBattle}}, + [PKBL_USE_ON_FEEDER] = {gMenuText_Use, {PokeblockAction_UseOnPokeblockFeeder}}, + [PKBL_GIVE_TO_LADY] = {gMenuText_Give2, {PokeblockAction_GiveToContestLady}}, }; static const u8 sActionsOnField[] = {PKBL_USE_ON_FIELD, PKBL_TOSS, PKBL_CANCEL}; diff --git a/src/pokedex.c b/src/pokedex.c index 3f5ab22431..bd824aa567 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -4480,7 +4480,7 @@ static void PrintInfoSubMenuText(u8 windowId, const u8 *str, u8 left, u8 top) AddTextPrinterParameterized4(windowId, FONT_NORMAL, left, top, 0, 0, color, TEXT_SKIP_DRAW, str); } -static void UnusedPrintNum(u8 windowId, u16 num, u8 left, u8 top) +static void UNUSED UnusedPrintNum(u8 windowId, u16 num, u8 left, u8 top) { u8 str[4]; @@ -4514,7 +4514,7 @@ static u8 PrintCryScreenSpeciesName(u8 windowId, u16 num, u8 left, u8 top) return i; } -static void UnusedPrintMonName(u8 windowId, const u8 *name, u8 left, u8 top) +static void UNUSED UnusedPrintMonName(u8 windowId, const u8 *name, u8 left, u8 top) { u8 str[POKEMON_NAME_LENGTH + 1]; u8 i; @@ -4535,7 +4535,7 @@ static void UnusedPrintMonName(u8 windowId, const u8 *name, u8 left, u8 top) } // Unused in the English version, used to print height/weight in versions which use metric system. -static void PrintDecimalNum(u8 windowId, u16 num, u8 left, u8 top) +static void UNUSED PrintDecimalNum(u8 windowId, u16 num, u8 left, u8 top) { u8 str[6]; bool8 outputted = FALSE; @@ -4606,8 +4606,8 @@ static void DrawFootprint(u8 windowId, u16 dexNum) CopyToWindowPixelBuffer(windowId, footprint4bpp, sizeof(footprint4bpp), 0); } -// Unused Ruby/Sapphire function. -static void RS_DrawFootprint(u16 offset, u16 tileNum) +// Ruby/Sapphire function. +static void UNUSED RS_DrawFootprint(u16 offset, u16 tileNum) { *(u16 *)(VRAM + offset * 0x800 + 0x232) = 0xF000 + tileNum + 0; *(u16 *)(VRAM + offset * 0x800 + 0x234) = 0xF000 + tileNum + 1; diff --git a/src/pokemon.c b/src/pokemon.c index 7bc9f3bee3..ba0f77a2dd 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -5755,7 +5755,7 @@ u16 SpeciesToCryId(u16 species) // Same as DrawSpindaSpots but attempts to discern for itself whether or // not it's the front pic. -static void DrawSpindaSpotsUnused(u16 species, u32 personality, u8 *dest) +static void UNUSED DrawSpindaSpotsUnused(u16 species, u32 personality, u8 *dest) { if (species == SPECIES_SPINDA && dest != gMonSpritesGfxPtr->sprites.ptr[B_POSITION_PLAYER_LEFT] @@ -6838,9 +6838,9 @@ void BattleAnimateBackSprite(struct Sprite *sprite, u16 species) } } -// Unused, identical to GetOpposingLinkMultiBattlerId but for the player +// Identical to GetOpposingLinkMultiBattlerId but for the player // "rightSide" from that team's perspective, i.e. B_POSITION_*_RIGHT -static u8 GetOwnOpposingLinkMultiBattlerId(bool8 rightSide) +static u8 UNUSED GetOwnOpposingLinkMultiBattlerId(bool8 rightSide) { s32 i; s32 battlerId = 0; diff --git a/src/pokemon_animation.c b/src/pokemon_animation.c index 6afbd20b7d..25c7778f8b 100644 --- a/src/pokemon_animation.c +++ b/src/pokemon_animation.c @@ -846,13 +846,13 @@ static const u8 sBackAnimNatureModTable[NUM_NATURES] = static const union AffineAnimCmd sMonAffineAnim_0[] = { AFFINEANIMCMD_FRAME(256, 256, 0, 0), - AFFINEANIMCMDTYPE_END + {AFFINEANIMCMDTYPE_END} }; static const union AffineAnimCmd sMonAffineAnim_1[] = { AFFINEANIMCMD_FRAME(-256, 256, 0, 0), - AFFINEANIMCMDTYPE_END + {AFFINEANIMCMDTYPE_END} }; static const union AffineAnimCmd *const sMonAffineAnims[] = diff --git a/src/pokemon_jump.c b/src/pokemon_jump.c index 4461d8ad2a..d744ff6650 100755 --- a/src/pokemon_jump.c +++ b/src/pokemon_jump.c @@ -3968,7 +3968,7 @@ struct UnusedPacket // Data packet that's never sent // No function to read it either -static void SendPacket_Unused(u32 data) +static void UNUSED SendPacket_Unused(u32 data) { struct UnusedPacket packet; packet.id = PACKET_UNUSED; diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 9db0d77c6c..574e6ba51e 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -1370,8 +1370,7 @@ void DrawTextWindowAndBufferTiles(const u8 *string, void *dst, u8 zero1, u8 zero RemoveWindow(windowId); } -// Unused -static void UnusedDrawTextWindow(const u8 *string, void *dst, u16 offset, u8 bgColor, u8 fgColor, u8 shadowColor) +static void UNUSED UnusedDrawTextWindow(const u8 *string, void *dst, u16 offset, u8 bgColor, u8 fgColor, u8 shadowColor) { u32 tilesSize; u8 windowId; @@ -1486,8 +1485,7 @@ u8 *StringCopyAndFillWithSpaces(u8 *dst, const u8 *src, u16 n) return str; } -// Unused -static void UnusedWriteRectCpu(u16 *dest, u16 dest_left, u16 dest_top, const u16 *src, u16 src_left, u16 src_top, u16 dest_width, u16 dest_height, u16 src_width) +static void UNUSED UnusedWriteRectCpu(u16 *dest, u16 dest_left, u16 dest_top, const u16 *src, u16 src_left, u16 src_top, u16 dest_width, u16 dest_height, u16 src_width) { u16 i; @@ -1502,8 +1500,7 @@ static void UnusedWriteRectCpu(u16 *dest, u16 dest_left, u16 dest_top, const u16 } } -// Unused -static void UnusedWriteRectDma(u16 *dest, u16 dest_left, u16 dest_top, u16 width, u16 height) +static void UNUSED UnusedWriteRectDma(u16 *dest, u16 dest_left, u16 dest_top, u16 width, u16 height) { u16 i; @@ -1697,8 +1694,7 @@ static void CB2_ExitPokeStorage(void) SetMainCallback2(CB2_ReturnToField); } -// Unused -static s16 StorageSystemGetNextMonIndex(struct BoxPokemon *box, s8 startIdx, u8 stopIdx, u8 mode) +static s16 UNUSED StorageSystemGetNextMonIndex(struct BoxPokemon *box, s8 startIdx, u8 stopIdx, u8 mode) { s16 i; s16 direction; @@ -7893,8 +7889,7 @@ static void StartCursorAnim(u8 animNum) StartSpriteAnim(sStorage->cursorSprite, animNum); } -// Unused -static u8 GetMovingMonOriginalBoxId(void) +static u8 UNUSED GetMovingMonOriginalBoxId(void) { return sMovingMonOrigBoxId; } @@ -9392,14 +9387,14 @@ static void SpriteCB_ItemIcon_HideParty(struct Sprite *sprite) //------------------------------------------------------------------------------ -// Unused, leftover from FRLG -static void BackupPokemonStorage(void/*struct PokemonStorage * dest*/) +// Leftover from FRLG +static void UNUSED BackupPokemonStorage(void/*struct PokemonStorage * dest*/) { //*dest = *gPokemonStoragePtr; } -// Unused, leftover from FRLG -static void RestorePokemonStorage(void/*struct PokemonStorage * src*/) +// Leftover from FRLG +static void UNUSED RestorePokemonStorage(void/*struct PokemonStorage * src*/) { //*gPokemonStoragePtr = *src; } @@ -9791,8 +9786,7 @@ static void TilemapUtil_Free(void) Free(sTilemapUtil); } -// Unused -static void TilemapUtil_UpdateAll(void) +static void UNUSED TilemapUtil_UpdateAll(void) { s32 i; @@ -9856,8 +9850,7 @@ static void TilemapUtil_SetMap(u8 id, u8 bg, const void *tilemap, u16 width, u16 sTilemapUtil[id].active = TRUE; } -// Unused -static void TilemapUtil_SetSavedMap(u8 id, const void *tilemap) +static void UNUSED TilemapUtil_SetSavedMap(u8 id, const void *tilemap) { if (id >= sNumTilemapUtilIds) return; @@ -10007,8 +10000,7 @@ static void UnkUtil_Run(void) } } -// Unused -static bool8 UnkUtil_CpuAdd(u8 *dest, u16 dLeft, u16 dTop, const u8 *src, u16 sLeft, u16 sTop, u16 width, u16 height, u16 unkArg) +static bool8 UNUSED UnkUtil_CpuAdd(u8 *dest, u16 dLeft, u16 dTop, const u8 *src, u16 sLeft, u16 sTop, u16 width, u16 height, u16 unkArg) { struct UnkUtilData *data; @@ -10038,8 +10030,7 @@ static void UnkUtil_CpuRun(struct UnkUtilData *data) } } -// Unused -static bool8 UnkUtil_DmaAdd(void *dest, u16 dLeft, u16 dTop, u16 width, u16 height) +static bool8 UNUSED UnkUtil_DmaAdd(void *dest, u16 dLeft, u16 dTop, u16 width, u16 height) { struct UnkUtilData *data; diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index 7b306016ce..4545411124 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -702,8 +702,10 @@ static const u8 sTextColors[][3] = {0, 7, 8} }; -static const u8 sAButton_Gfx[] = INCBIN_U8("graphics/summary_screen/a_button.4bpp"); -static const u8 sBButton_Gfx[] = INCBIN_U8("graphics/summary_screen/b_button.4bpp"); +static const u8 sButtons_Gfx[][4 * TILE_SIZE_4BPP] = { + INCBIN_U8("graphics/summary_screen/a_button.4bpp"), + INCBIN_U8("graphics/summary_screen/b_button.4bpp"), +}; static void (*const sTextPrinterFunctions[])(void) = { @@ -2790,8 +2792,13 @@ static void PrintGenderSymbol(struct Pokemon *mon, u16 species) static void PrintAOrBButtonIcon(u8 windowId, bool8 bButton, u32 x) { - // sBButton_Gfx - sizeof(sBButton_Gfx) = sAButton_Gfx - BlitBitmapToWindow(windowId, (bButton) ? sBButton_Gfx : sBButton_Gfx - sizeof(sBButton_Gfx), x, 0, 16, 16); + const u8 *button; + if (!bButton) + button = sButtons_Gfx[0]; + else + button = sButtons_Gfx[1]; + + BlitBitmapToWindow(windowId, button, x, 0, 16, 16); } static void PrintPageNamesAndStats(void) @@ -3984,8 +3991,7 @@ static void SummaryScreen_DestroyAnimDelayTask(void) } } -// unused -static bool32 IsMonAnimationFinished(void) +static bool32 UNUSED IsMonAnimationFinished(void) { if (gSprites[sMonSummaryScreen->spriteIds[SPRITE_ARR_ID_MON]].callback == SpriteCallbackDummy) return FALSE; diff --git a/src/pokenav_conditions_gfx.c b/src/pokenav_conditions_gfx.c index 9f4b2db612..26d8e99e06 100644 --- a/src/pokenav_conditions_gfx.c +++ b/src/pokenav_conditions_gfx.c @@ -548,7 +548,7 @@ static u32 LoopedTask_CloseMonMarkingsWindow(s32 state) return LT_FINISH; } -static u8 *UnusedPrintNumberString(u8 *dst, u16 num) +static u8 UNUSED *UnusedPrintNumberString(u8 *dst, u16 num) { u8 *txtPtr = ConvertIntToDecimalStringN(dst, num, STR_CONV_MODE_RIGHT_ALIGN, 4); txtPtr = StringCopy(txtPtr, gText_Number2); diff --git a/src/pokenav_match_call_list.c b/src/pokenav_match_call_list.c index b00c76b48a..8d1a73f557 100755 --- a/src/pokenav_match_call_list.c +++ b/src/pokenav_match_call_list.c @@ -278,22 +278,19 @@ int GetNumberRegistered(void) return state->numRegistered; } -// Unused -static int GetNumSpecialTrainers(void) +static int UNUSED GetNumSpecialTrainers(void) { struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); return state->numSpecialTrainers; } -// Unused -static int GetNumNormalTrainers(void) +static int UNUSED GetNumNormalTrainers(void) { struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); return state->numRegistered - state->numSpecialTrainers; } -// Unused -static int GetNormalTrainerHeaderId(int index) +static int UNUSED GetNormalTrainerHeaderId(int index) { struct Pokenav_MatchCallMenu *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); index += state->numSpecialTrainers; @@ -468,8 +465,7 @@ int GetIndexDeltaOfNextCheckPageUp(int index) return 0; } -// Unused -static bool32 HasRematchEntry(void) +static bool32 UNUSED HasRematchEntry(void) { int i; diff --git a/src/pokenav_ribbons_list.c b/src/pokenav_ribbons_list.c index 344b44f009..05eded6240 100644 --- a/src/pokenav_ribbons_list.c +++ b/src/pokenav_ribbons_list.c @@ -227,8 +227,7 @@ static s32 GetRibbonsMonListCount(void) return list->monList->listCount; } -//unused -static s32 GetMonRibbonSelectedMonData(void) +static s32 UNUSED GetMonRibbonSelectedMonData(void) { struct Pokenav_RibbonsMonList * list = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); s32 idx = PokenavList_GetSelectedIndex(); @@ -343,8 +342,7 @@ static void InsertMonListItem(struct Pokenav_RibbonsMonList *list, struct Pokena list->monList->listCount++; } -// Unused -static bool32 PlayerHasRibbonsMon(void) +static bool32 UNUSED PlayerHasRibbonsMon(void) { s32 i, j; diff --git a/src/rayquaza_scene.c b/src/rayquaza_scene.c index cacadf5280..3264b22bdf 100644 --- a/src/rayquaza_scene.c +++ b/src/rayquaza_scene.c @@ -1638,7 +1638,7 @@ static void Task_DuoFightAnim(u8 taskId) static void Task_DuoFight_AnimateClouds(u8 taskId) { s16 i; - u16 *data = gTasks[taskId].data; + u16 *data = (u16*)gTasks[taskId].data; for (i = 24; i < 92; i++) { diff --git a/src/recorded_battle.c b/src/recorded_battle.c index 33228255d2..42866c723b 100644 --- a/src/recorded_battle.c +++ b/src/recorded_battle.c @@ -222,8 +222,7 @@ u8 RecordedBattle_GetBattlerAction(u8 battlerId) } } -// Unused -static u8 GetRecordedBattleMode(void) +static u8 UNUSED GetRecordedBattleMode(void) { return sRecordMode; } diff --git a/src/region_map.c b/src/region_map.c index 7d5fe93654..21c6314d30 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -1434,14 +1434,12 @@ static void FreeRegionMapCursorSprite(void) } } -// Unused -static void SetUnkCursorSpriteData(void) +static void UNUSED SetUnkCursorSpriteData(void) { sRegionMap->cursorSprite->data[3] = TRUE; } -// Unused -static void ClearUnkCursorSpriteData(void) +static void UNUSED ClearUnkCursorSpriteData(void) { sRegionMap->cursorSprite->data[3] = FALSE; } diff --git a/src/roulette.c b/src/roulette.c index d311ad0940..44dac2db6c 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -3556,8 +3556,7 @@ static void CreateGridSprites(void) } } -// Unused -static void DestroyGridSprites(void) +static void UNUSED DestroyGridSprites(void) { u8 i; for (i = 0; i < NUM_ROULETTE_SLOTS; i++) @@ -4353,7 +4352,7 @@ static void CreateShroomishSprite(struct Sprite *ball) {116, 44}, {116, 112} }; - struct Roulette *roulette; + struct Roulette UNUSED *roulette; t = ball->data[7] - 2; roulette = sRoulette; // Unnecessary, needed to match diff --git a/src/scrcmd.c b/src/scrcmd.c index bf4ec38f44..147a11b869 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -76,12 +76,12 @@ void * const gNullScriptPtr = NULL; static const u8 sScriptConditionTable[6][3] = { // < = > - 1, 0, 0, // < - 0, 1, 0, // = - 0, 0, 1, // > - 1, 1, 0, // <= - 0, 1, 1, // >= - 1, 0, 1, // != + {1, 0, 0}, // < + {0, 1, 0}, // = + {0, 0, 1}, // > + {1, 1, 0}, // <= + {0, 1, 1}, // >= + {1, 0, 1}, // != }; static u8 * const sScriptStringVars[] = diff --git a/src/script_menu.c b/src/script_menu.c index 6633332f3f..e923f4031a 100644 --- a/src/script_menu.c +++ b/src/script_menu.c @@ -64,8 +64,7 @@ bool8 ScriptMenu_MultichoiceWithDefault(u8 left, u8 top, u8 multichoiceId, bool8 } } -// Unused -static u16 GetLengthWithExpandedPlayerName(const u8 *str) +static u16 UNUSED GetLengthWithExpandedPlayerName(const u8 *str) { u16 length = 0; diff --git a/src/slot_machine.c b/src/slot_machine.c index 20386a2528..5ae0f9f1d5 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -5813,8 +5813,8 @@ static const struct SpriteFrameImage sImageTable_ReelTimeNumbers[] = { gSlotMachineReelTimeNumber5, 0x80 }, }; -static const struct SpriteFrameImage sImageTable_ReelTimeShadow[] = { gSlotMachineReelTimeShadow, 0x200 }; -static const struct SpriteFrameImage sImageTable_ReelTimeNumberGap[] = { gSlotMachineReelTimeNumberGap_Gfx, 0x40 }; +static const struct SpriteFrameImage sImageTable_ReelTimeShadow[] = { {gSlotMachineReelTimeShadow, 0x200} }; +static const struct SpriteFrameImage sImageTable_ReelTimeNumberGap[] = { {gSlotMachineReelTimeNumberGap_Gfx, 0x40} }; static const struct SpriteFrameImage sImageTable_ReelTimeBolt[] = { @@ -5822,7 +5822,7 @@ static const struct SpriteFrameImage sImageTable_ReelTimeBolt[] = { gSlotMachineReelTimeBolt1, 0x100 }, }; -static const struct SpriteFrameImage sImageTable_ReelTimePikachuAura[] = { gSlotMachineReelTimePikaAura, 0x400 }; +static const struct SpriteFrameImage sImageTable_ReelTimePikachuAura[] = { {gSlotMachineReelTimePikaAura, 0x400} }; static const struct SpriteFrameImage sImageTable_ReelTimeExplosion[] = { @@ -5830,9 +5830,9 @@ static const struct SpriteFrameImage sImageTable_ReelTimeExplosion[] = { gSlotMachineReelTimeExplosion1, 0x200 }, }; -static const struct SpriteFrameImage sImageTable_ReelTimeDuck[] = { gSlotMachineReelTimeDuck, 0x20}; -static const struct SpriteFrameImage sImageTable_ReelTimeSmoke[] = { gSlotMachineReelTimeSmoke, 0x80}; -static const struct SpriteFrameImage sImageTable_PikaPowerBolt[] = { gSlotMachinePikaPowerBolt, 0x20}; +static const struct SpriteFrameImage sImageTable_ReelTimeDuck[] = { {gSlotMachineReelTimeDuck, 0x20} }; +static const struct SpriteFrameImage sImageTable_ReelTimeSmoke[] = { {gSlotMachineReelTimeSmoke, 0x80} }; +static const struct SpriteFrameImage sImageTable_PikaPowerBolt[] = { {gSlotMachinePikaPowerBolt, 0x20} }; static const union AnimCmd sAnim_SingleFrame[] = { @@ -6485,7 +6485,7 @@ static const struct Subsprite sSubsprites_ReelBackground[] = static const struct SubspriteTable sSubspriteTable_ReelBackground[] = { - ARRAY_COUNT(sSubsprites_ReelBackground), sSubsprites_ReelBackground + {ARRAY_COUNT(sSubsprites_ReelBackground), sSubsprites_ReelBackground} }; /* v-- Origin on 3 @@ -6547,7 +6547,7 @@ static const struct Subsprite sSubsprites_ReelTimeMachineAntennae[] = static const struct SubspriteTable sSubspriteTable_ReelTimeMachineAntennae[] = { - ARRAY_COUNT(sSubsprites_ReelTimeMachineAntennae), sSubsprites_ReelTimeMachineAntennae + {ARRAY_COUNT(sSubsprites_ReelTimeMachineAntennae), sSubsprites_ReelTimeMachineAntennae} }; /* @@ -6587,7 +6587,7 @@ static const struct Subsprite sSubsprites_ReelTimeMachine[] = static const struct SubspriteTable sSubspriteTable_ReelTimeMachine[] = { - ARRAY_COUNT(sSubsprites_ReelTimeMachine), sSubsprites_ReelTimeMachine + {ARRAY_COUNT(sSubsprites_ReelTimeMachine), sSubsprites_ReelTimeMachine} }; /* @@ -6644,7 +6644,7 @@ static const struct Subsprite sSubsprites_BrokenReelTimeMachine[] = static const struct SubspriteTable sSubspriteTable_BrokenReelTimeMachine[] = { - ARRAY_COUNT(sSubsprites_BrokenReelTimeMachine), sSubsprites_BrokenReelTimeMachine + {ARRAY_COUNT(sSubsprites_BrokenReelTimeMachine), sSubsprites_BrokenReelTimeMachine} }; /* v-- Origin on 3 @@ -6689,7 +6689,7 @@ static const struct Subsprite sSubsprites_ReelTimeShadow[] = static const struct SubspriteTable sSubspriteTable_ReelTimeShadow[] = { - ARRAY_COUNT(sSubsprites_ReelTimeShadow), sSubsprites_ReelTimeShadow + {ARRAY_COUNT(sSubsprites_ReelTimeShadow), sSubsprites_ReelTimeShadow} }; /* @@ -6727,7 +6727,7 @@ static const struct Subsprite sSubsprites_ReelTimeNumberGap[] = static const struct SubspriteTable sSubspriteTable_ReelTimeNumberGap[] = { - ARRAY_COUNT(sSubsprites_ReelTimeNumberGap), sSubsprites_ReelTimeNumberGap + {ARRAY_COUNT(sSubsprites_ReelTimeNumberGap), sSubsprites_ReelTimeNumberGap} }; /* @@ -6784,7 +6784,7 @@ static const struct Subsprite sSubsprites_DigitalDisplay_Reel[] = static const struct SubspriteTable sSubspriteTable_DigitalDisplay_Reel[] = { - ARRAY_COUNT(sSubsprites_DigitalDisplay_Reel), sSubsprites_DigitalDisplay_Reel + {ARRAY_COUNT(sSubsprites_DigitalDisplay_Reel), sSubsprites_DigitalDisplay_Reel} }; /* v-- Origin on 3 @@ -6829,7 +6829,7 @@ static const struct Subsprite sSubsprites_DigitalDisplay_Time[] = static const struct SubspriteTable sSubspriteTable_DigitalDisplay_Time[] = { - ARRAY_COUNT(sSubsprites_DigitalDisplay_Time), sSubsprites_DigitalDisplay_Time + {ARRAY_COUNT(sSubsprites_DigitalDisplay_Time), sSubsprites_DigitalDisplay_Time} }; /* v-- Origin on 3 @@ -6874,7 +6874,7 @@ static const struct Subsprite sSubsprites_DigitalDisplay_Insert[] = static const struct SubspriteTable sSubspriteTable_DigitalDisplay_Insert[] = { - ARRAY_COUNT(sSubsprites_DigitalDisplay_Insert), sSubsprites_DigitalDisplay_Insert + {ARRAY_COUNT(sSubsprites_DigitalDisplay_Insert), sSubsprites_DigitalDisplay_Insert} }; /* v-- Origin on 3 @@ -6919,7 +6919,7 @@ static const struct Subsprite sSubsprites_DigitalDisplay_Unused1[] = static const struct SubspriteTable sSubspriteTable_DigitalDisplay_Unused1[] = { - ARRAY_COUNT(sSubsprites_DigitalDisplay_Unused1), sSubsprites_DigitalDisplay_Unused1 + {ARRAY_COUNT(sSubsprites_DigitalDisplay_Unused1), sSubsprites_DigitalDisplay_Unused1} }; /* v-- Origin on 3 @@ -6981,7 +6981,7 @@ static const struct Subsprite sSubsprites_DigitalDisplay_Win[] = static const struct SubspriteTable sSubspriteTable_DigitalDisplay_Win[] = { - ARRAY_COUNT(sSubsprites_DigitalDisplay_Win), sSubsprites_DigitalDisplay_Win + {ARRAY_COUNT(sSubsprites_DigitalDisplay_Win), sSubsprites_DigitalDisplay_Win} }; static const struct Subsprite sSubsprites_DigitalDisplay_Smoke[] = @@ -7010,12 +7010,12 @@ static const struct Subsprite sSubsprites_DigitalDisplay_Unused2[] = static const struct SubspriteTable sSubspriteTable_DigitalDisplay_Smoke[] = { - ARRAY_COUNT(sSubsprites_DigitalDisplay_Smoke), sSubsprites_DigitalDisplay_Smoke + {ARRAY_COUNT(sSubsprites_DigitalDisplay_Smoke), sSubsprites_DigitalDisplay_Smoke} }; static const struct SubspriteTable sSubspriteTable_DigitalDisplay_Unused2[] = { - ARRAY_COUNT(sSubsprites_DigitalDisplay_Unused2), sSubsprites_DigitalDisplay_Unused2 + {ARRAY_COUNT(sSubsprites_DigitalDisplay_Unused2), sSubsprites_DigitalDisplay_Unused2} }; /* @@ -7128,7 +7128,7 @@ static const struct Subsprite sSubsprites_DigitalDisplay_Pokeball[] = static const struct SubspriteTable sSubspriteTable_DigitalDisplay_Pokeball[] = { - ARRAY_COUNT(sSubsprites_DigitalDisplay_Pokeball), sSubsprites_DigitalDisplay_Pokeball + {ARRAY_COUNT(sSubsprites_DigitalDisplay_Pokeball), sSubsprites_DigitalDisplay_Pokeball} }; /* @@ -7166,7 +7166,7 @@ static const struct Subsprite sSubsprites_DigitalDisplay_DPad[] = static const struct SubspriteTable sSubspriteTable_DigitalDisplay_DPad[] = { - ARRAY_COUNT(sSubsprites_DigitalDisplay_DPad), sSubsprites_DigitalDisplay_DPad + {ARRAY_COUNT(sSubsprites_DigitalDisplay_DPad), sSubsprites_DigitalDisplay_DPad} }; /* @@ -7195,7 +7195,7 @@ static const struct Subsprite sSubsprites_DigitalDisplay_StopS[] = static const struct SubspriteTable sSubspriteTable_DigitalDisplay_StopS[] = { - ARRAY_COUNT(sSubsprites_DigitalDisplay_StopS), sSubsprites_DigitalDisplay_StopS + {ARRAY_COUNT(sSubsprites_DigitalDisplay_StopS), sSubsprites_DigitalDisplay_StopS} }; /* @@ -7224,7 +7224,7 @@ static const struct Subsprite sSubsprites_DigitalDisplay_StopT[] = static const struct SubspriteTable sSubspriteTable_DigitalDisplay_StopT[] = { - ARRAY_COUNT(sSubsprites_DigitalDisplay_StopT), sSubsprites_DigitalDisplay_StopT + {ARRAY_COUNT(sSubsprites_DigitalDisplay_StopT), sSubsprites_DigitalDisplay_StopT} }; /* @@ -7253,7 +7253,7 @@ static const struct Subsprite sSubsprites_DigitalDisplay_StopO[] = static const struct SubspriteTable sSubspriteTable_DigitalDisplay_StopO[] = { - ARRAY_COUNT(sSubsprites_DigitalDisplay_StopO), sSubsprites_DigitalDisplay_StopO + {ARRAY_COUNT(sSubsprites_DigitalDisplay_StopO), sSubsprites_DigitalDisplay_StopO} }; /* @@ -7282,7 +7282,7 @@ static const struct Subsprite sSubsprites_DigitalDisplay_StopP[] = static const struct SubspriteTable sSubspriteTable_DigitalDisplay_StopP[] = { - ARRAY_COUNT(sSubsprites_DigitalDisplay_StopP), sSubsprites_DigitalDisplay_StopP + {ARRAY_COUNT(sSubsprites_DigitalDisplay_StopP), sSubsprites_DigitalDisplay_StopP} }; /* @@ -7311,7 +7311,7 @@ static const struct Subsprite sSubsprites_DigitalDisplay_BonusB[] = static const struct SubspriteTable sSubspriteTable_DigitalDisplay_BonusB[] = { - ARRAY_COUNT(sSubsprites_DigitalDisplay_BonusB), sSubsprites_DigitalDisplay_BonusB + {ARRAY_COUNT(sSubsprites_DigitalDisplay_BonusB), sSubsprites_DigitalDisplay_BonusB} }; /* @@ -7340,7 +7340,7 @@ static const struct Subsprite sSubsprites_DigitalDisplay_BonusO[] = static const struct SubspriteTable sSubspriteTable_DigitalDisplay_BonusO[] = { - ARRAY_COUNT(sSubsprites_DigitalDisplay_BonusO), sSubsprites_DigitalDisplay_BonusO + {ARRAY_COUNT(sSubsprites_DigitalDisplay_BonusO), sSubsprites_DigitalDisplay_BonusO} }; /* @@ -7369,7 +7369,7 @@ static const struct Subsprite sSubsprites_DigitalDisplay_BonusN[] = static const struct SubspriteTable sSubspriteTable_DigitalDisplay_BonusN[] = { - ARRAY_COUNT(sSubsprites_DigitalDisplay_BonusN), sSubsprites_DigitalDisplay_BonusN + {ARRAY_COUNT(sSubsprites_DigitalDisplay_BonusN), sSubsprites_DigitalDisplay_BonusN} }; /* @@ -7398,7 +7398,7 @@ static const struct Subsprite sSubsprites_DigitalDisplay_BonusU[] = static const struct SubspriteTable sSubspriteTable_DigitalDisplay_BonusU[] = { - ARRAY_COUNT(sSubsprites_DigitalDisplay_BonusU), sSubsprites_DigitalDisplay_BonusU + {ARRAY_COUNT(sSubsprites_DigitalDisplay_BonusU), sSubsprites_DigitalDisplay_BonusU} }; /* @@ -7427,7 +7427,7 @@ static const struct Subsprite sSubsprites_DigitalDisplay_BonusS[] = static const struct SubspriteTable sSubspriteTable_DigitalDisplay_BonusS[] = { - ARRAY_COUNT(sSubsprites_DigitalDisplay_BonusS), sSubsprites_DigitalDisplay_BonusS + {ARRAY_COUNT(sSubsprites_DigitalDisplay_BonusS), sSubsprites_DigitalDisplay_BonusS} }; /* @@ -7490,7 +7490,7 @@ static const struct Subsprite sSubsprites_DigitalDisplay_BigB[] = static const struct SubspriteTable sSubspriteTable_DigitalDisplay_BigB[] = { - ARRAY_COUNT(sSubsprites_DigitalDisplay_BigB), sSubsprites_DigitalDisplay_BigB + {ARRAY_COUNT(sSubsprites_DigitalDisplay_BigB), sSubsprites_DigitalDisplay_BigB} }; /* @@ -7528,7 +7528,7 @@ static const struct Subsprite sSubsprites_DigitalDisplay_BigI[] = static const struct SubspriteTable sSubspriteTable_DigitalDisplay_BigI[] = { - ARRAY_COUNT(sSubsprites_DigitalDisplay_BigI), sSubsprites_DigitalDisplay_BigI + {ARRAY_COUNT(sSubsprites_DigitalDisplay_BigI), sSubsprites_DigitalDisplay_BigI} }; /* @@ -7591,7 +7591,7 @@ static const struct Subsprite sSubsprites_DigitalDisplay_BigG[] = static const struct SubspriteTable sSubspriteTable_DigitalDisplay_BigG[] = { - ARRAY_COUNT(sSubsprites_DigitalDisplay_BigG), sSubsprites_DigitalDisplay_BigG + {ARRAY_COUNT(sSubsprites_DigitalDisplay_BigG), sSubsprites_DigitalDisplay_BigG} }; /* @@ -7654,7 +7654,7 @@ static const struct Subsprite sSubsprites_DigitalDisplay_RegR[] = static const struct SubspriteTable sSubspriteTable_DigitalDisplay_RegR[] = { - ARRAY_COUNT(sSubsprites_DigitalDisplay_RegR), sSubsprites_DigitalDisplay_RegR + {ARRAY_COUNT(sSubsprites_DigitalDisplay_RegR), sSubsprites_DigitalDisplay_RegR} }; /* @@ -7692,7 +7692,7 @@ static const struct Subsprite sSubsprites_DigitalDisplay_RegE[] = static const struct SubspriteTable sSubspriteTable_DigitalDisplay_RegE[] = { - ARRAY_COUNT(sSubsprites_DigitalDisplay_RegE), sSubsprites_DigitalDisplay_RegE + {ARRAY_COUNT(sSubsprites_DigitalDisplay_RegE), sSubsprites_DigitalDisplay_RegE} }; /* @@ -7755,7 +7755,7 @@ static const struct Subsprite sSubsprites_DigitalDisplay_RegG[] = static const struct SubspriteTable sSubspriteTable_DigitalDisplay_RegG[] = { - ARRAY_COUNT(sSubsprites_DigitalDisplay_RegG), sSubsprites_DigitalDisplay_RegG + {ARRAY_COUNT(sSubsprites_DigitalDisplay_RegG), sSubsprites_DigitalDisplay_RegG} }; static const struct SpriteTemplate *const sSpriteTemplates_DigitalDisplay[NUM_DIG_DISPLAY_SPRITES] = diff --git a/src/sound.c b/src/sound.c index 15ebee8312..bef3658ecd 100644 --- a/src/sound.c +++ b/src/sound.c @@ -156,8 +156,7 @@ void FadeOutAndFadeInNewMapMusic(u16 songNum, u8 fadeOutSpeed, u8 fadeInSpeed) sMapMusicFadeInSpeed = fadeInSpeed; } -// Unused -static void FadeInNewMapMusic(u16 songNum, u8 speed) +static void UNUSED FadeInNewMapMusic(u16 songNum, u8 speed) { FadeInNewBGM(songNum, speed); sCurrentMapMusic = songNum; diff --git a/src/start_menu.c b/src/start_menu.c index e39a5438ee..2faff8c63d 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -83,7 +83,7 @@ EWRAM_DATA static u8 sBattlePyramidFloorWindowId = 0; EWRAM_DATA static u8 sStartMenuCursorPos = 0; EWRAM_DATA static u8 sNumStartMenuActions = 0; EWRAM_DATA static u8 sCurrentStartMenuActions[9] = {0}; -EWRAM_DATA static u8 sInitStartMenuData[2] = {0}; +EWRAM_DATA static s8 sInitStartMenuData[2] = {0}; EWRAM_DATA static u8 (*sSaveDialogCallback)(void) = NULL; EWRAM_DATA static u8 sSaveDialogTimer = 0; diff --git a/src/trade.c b/src/trade.c index 28e8f89d1c..037ea4101a 100644 --- a/src/trade.c +++ b/src/trade.c @@ -1900,7 +1900,7 @@ static void DrawSelectedMonScreen(u8 whichParty) StoreSpriteCallbackInData6(&gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]], SpriteCB_MonIcon); sTradeMenu->drawSelectedMonState[whichParty]++; Trade_MoveSelectedMonToTarget(&gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]]); - + CopyToBgTilemapBufferRect_ChangePalette(1, sTradePartyBoxTilemap, whichParty * 15, 0, 15, 17, 0); CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(0); @@ -3093,7 +3093,7 @@ static void UpdatePokedexForReceivedMon(u8 partyIdx) // Functionally nop after commented code static void TryEnableNationalDexFromLinkPartner(void) { - u8 mpId = GetMultiplayerId(); + u8 UNUSED mpId = GetMultiplayerId(); // Originally in Ruby but commented out /*if (gLinkPlayers[mpId ^ 1].lp_field_2 == 0x8000) EnableNationalPokedex();*/ diff --git a/src/trainer_hill.c b/src/trainer_hill.c index 3fbec613ad..cca1a3e984 100644 --- a/src/trainer_hill.c +++ b/src/trainer_hill.c @@ -571,7 +571,7 @@ static void IsTrainerHillChallengeActive(void) gSpecialVar_Result = TRUE; } -static void TrainerHillDummy_Unused(void) +static void UNUSED TrainerHillDummy_Unused(void) { } @@ -769,8 +769,7 @@ u8 GetCurrentTrainerHillMapId(void) return mapId; } -// Unused -static bool32 OnTrainerHillRoof(void) +static bool32 UNUSED OnTrainerHillRoof(void) { bool32 onRoof; diff --git a/src/trainer_pokemon_sprites.c b/src/trainer_pokemon_sprites.c index 3d7823cf3e..b6e2b63c35 100644 --- a/src/trainer_pokemon_sprites.c +++ b/src/trainer_pokemon_sprites.c @@ -337,8 +337,7 @@ u16 FreeAndDestroyMonPicSprite(u16 spriteId) return FreeAndDestroyPicSpriteInternal(spriteId); } -// Unused -static u16 LoadMonPicInWindow(u16 species, u32 otId, u32 personality, bool8 isFrontPic, u8 paletteSlot, u8 windowId) +static u16 UNUSED LoadMonPicInWindow(u16 species, u32 otId, u32 personality, bool8 isFrontPic, u8 paletteSlot, u8 windowId) { return LoadPicSpriteInWindow(species, otId, personality, isFrontPic, paletteSlot, windowId, FALSE); } @@ -359,8 +358,7 @@ u16 FreeAndDestroyTrainerPicSprite(u16 spriteId) return FreeAndDestroyPicSpriteInternal(spriteId); } -// Unused -static u16 LoadTrainerPicInWindow(u16 species, bool8 isFrontPic, u8 paletteSlot, u8 windowId) +static u16 UNUSED LoadTrainerPicInWindow(u16 species, bool8 isFrontPic, u8 paletteSlot, u8 windowId) { return LoadPicSpriteInWindow(species, 0, 0, isFrontPic, paletteSlot, windowId, TRUE); } diff --git a/src/trainer_see.c b/src/trainer_see.c index dd4acc7f36..88f9215f77 100644 --- a/src/trainer_see.c +++ b/src/trainer_see.c @@ -627,7 +627,7 @@ static void Task_SetBuriedTrainerMovement(u8 taskId) struct Task *task = &gTasks[taskId]; struct ObjectEvent *objEvent; - LoadWordFromTwoHalfwords(&task->tObjEvent, (u32 *)&objEvent); + LoadWordFromTwoHalfwords((u16*) &task->tObjEvent, (u32 *)&objEvent); if (!task->data[7]) { ObjectEventClearHeldMovement(objEvent); @@ -649,7 +649,7 @@ static void Task_SetBuriedTrainerMovement(u8 taskId) // Called when a buried Trainer has the reveal_trainer movement applied, from direct interaction void SetBuriedTrainerMovement(struct ObjectEvent *objEvent) { - StoreWordInTwoHalfwords(&gTasks[CreateTask(Task_SetBuriedTrainerMovement, 0)].tObjEvent, (u32)objEvent); + StoreWordInTwoHalfwords((u16*) &gTasks[CreateTask(Task_SetBuriedTrainerMovement, 0)].tObjEvent, (u32)objEvent); } void DoTrainerApproach(void) diff --git a/src/tv.c b/src/tv.c index 1246faff25..ef493c10ce 100644 --- a/src/tv.c +++ b/src/tv.c @@ -3961,8 +3961,7 @@ else \ (langptr) = langfix; \ } -// Unused -static void TranslateShowNames(TVShow *show, u32 language) +static void UNUSED TranslateShowNames(TVShow *show, u32 language) { int i; TVShow **shows; diff --git a/src/union_room.c b/src/union_room.c index 9160fc16ae..1b29863183 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -1043,8 +1043,8 @@ static void Task_TryJoinLinkGroup(u8 taskId) id = ListMenu_ProcessInput(data->listTaskId); if (JOY_NEW(A_BUTTON) && id != LIST_NOTHING_CHOSEN) { - // this unused variable along with the assignment is needed to match - u32 activity = data->playerList->players[id].rfu.data.activity; + // Needed to match + u32 UNUSED activity = data->playerList->players[id].rfu.data.activity; if (data->playerList->players[id].groupScheduledAnim == UNION_ROOM_SPAWN_IN && !data->playerList->players[id].rfu.data.startedActivity) { @@ -2149,8 +2149,8 @@ static void Task_CardOrNewsWithFriend(u8 taskId) id = ListMenu_ProcessInput(data->listTaskId); if (JOY_NEW(A_BUTTON) && id != LIST_NOTHING_CHOSEN) { - // this unused variable along with the assignment is needed to match - u32 activity = data->playerList->players[id].rfu.data.activity; + // Needed to match + u32 UNUSED activity = data->playerList->players[id].rfu.data.activity; if (data->playerList->players[id].groupScheduledAnim == UNION_ROOM_SPAWN_IN && !data->playerList->players[id].rfu.data.startedActivity) { diff --git a/src/union_room_chat.c b/src/union_room_chat.c index 253e025689..993e36de52 100644 --- a/src/union_room_chat.c +++ b/src/union_room_chat.c @@ -744,11 +744,11 @@ static const struct MessageWindowInfo sDisplayStdMessages[] = { static const u8 sText_Ellipsis[] = _("…"); static const struct MenuAction sKeyboardPageTitleTexts[UNION_ROOM_KB_PAGE_COUNT + 1] = { - [UNION_ROOM_KB_PAGE_UPPER] = {gText_Upper, NULL}, - [UNION_ROOM_KB_PAGE_LOWER] = {gText_Lower, NULL}, - [UNION_ROOM_KB_PAGE_EMOJI] = {gText_Symbols, NULL}, - [UNION_ROOM_KB_PAGE_REGISTER] = {gText_Register2, NULL}, - [UNION_ROOM_KB_PAGE_COUNT] = {gText_Exit2, NULL}, + [UNION_ROOM_KB_PAGE_UPPER] = {gText_Upper, {NULL}}, + [UNION_ROOM_KB_PAGE_LOWER] = {gText_Lower, {NULL}}, + [UNION_ROOM_KB_PAGE_EMOJI] = {gText_Symbols, {NULL}}, + [UNION_ROOM_KB_PAGE_REGISTER] = {gText_Register2, {NULL}}, + [UNION_ROOM_KB_PAGE_COUNT] = {gText_Exit2, {NULL}}, }; static const u16 sUnionRoomChatInterfacePal[] = INCBIN_U16("graphics/union_room_chat/interface.gbapal"); diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index 06df5d0a33..1defb73ea9 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -1108,8 +1108,7 @@ static u8 GetSelectionIdFromPartyId(u8 partyId) return partyId - numEggs; } -// Unused -static u8 GetPartyIdFromSelectionId_(u8 selectionId) +static u8 UNUSED GetPartyIdFromSelectionId_(u8 selectionId) { return GetPartyIdFromSelectionId(selectionId); } From 927e4b60719f8f5ef5a85218316d1abeb38fced3 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 20 Sep 2023 19:04:50 -0300 Subject: [PATCH 053/120] Renamed time amounts --- include/siirtc.h | 6 +++--- src/pokemon.c | 2 +- src/rtc.c | 20 ++++++++++---------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/include/siirtc.h b/include/siirtc.h index 24573e4429..ad13fc62f3 100644 --- a/include/siirtc.h +++ b/include/siirtc.h @@ -9,9 +9,9 @@ #define SIIRTCINFO_24HOUR 0x40 // 0: 12-hour mode, 1: 24-hour mode #define SIIRTCINFO_POWER 0x80 // power on or power failure occurred -#define DAY_HOURS 24 -#define HOUR_MINUTES 60 -#define MINUTE_SECONDS 60 +#define HOURS_PER_DAY 24 +#define MINUTES_PER_HOUR 60 +#define SECONDS_PER_MINUTE 60 enum { diff --git a/src/pokemon.c b/src/pokemon.c index fe93c14c19..7eab3ccf68 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -49,7 +49,7 @@ #include "constants/union_room.h" #define DAY_EVO_HOUR_BEGIN 12 -#define DAY_EVO_HOUR_END DAY_HOURS +#define DAY_EVO_HOUR_END HOURS_PER_DAY #define NIGHT_EVO_HOUR_BEGIN 0 #define NIGHT_EVO_HOUR_END 12 diff --git a/src/rtc.c b/src/rtc.c index a4920025cf..b79f62a3c4 100644 --- a/src/rtc.c +++ b/src/rtc.c @@ -192,17 +192,17 @@ u16 RtcCheckInfo(struct SiiRtcInfo *rtc) value = ConvertBcdToBinary(rtc->hour); - if (value > DAY_HOURS) + if (value > HOURS_PER_DAY) errorFlags |= RTC_ERR_INVALID_HOUR; value = ConvertBcdToBinary(rtc->minute); - if (value > HOUR_MINUTES) + if (value > MINUTES_PER_HOUR) errorFlags |= RTC_ERR_INVALID_MINUTE; value = ConvertBcdToBinary(rtc->second); - if (value > MINUTE_SECONDS) + if (value > SECONDS_PER_MINUTE) errorFlags |= RTC_ERR_INVALID_SECOND; return errorFlags; @@ -270,19 +270,19 @@ void RtcCalcTimeDifference(struct SiiRtcInfo *rtc, struct Time *result, struct T if (result->seconds < 0) { - result->seconds += MINUTE_SECONDS; + result->seconds += SECONDS_PER_MINUTE; --result->minutes; } if (result->minutes < 0) { - result->minutes += HOUR_MINUTES; + result->minutes += MINUTES_PER_HOUR; --result->hours; } if (result->hours < 0) { - result->hours += DAY_HOURS; + result->hours += HOURS_PER_DAY; --result->days; } } @@ -317,19 +317,19 @@ void CalcTimeDifference(struct Time *result, struct Time *t1, struct Time *t2) if (result->seconds < 0) { - result->seconds += MINUTE_SECONDS; + result->seconds += SECONDS_PER_MINUTE; --result->minutes; } if (result->minutes < 0) { - result->minutes += HOUR_MINUTES; + result->minutes += MINUTES_PER_HOUR; --result->hours; } if (result->hours < 0) { - result->hours += DAY_HOURS; + result->hours += HOURS_PER_DAY; --result->days; } } @@ -337,7 +337,7 @@ void CalcTimeDifference(struct Time *result, struct Time *t1, struct Time *t2) u32 RtcGetMinuteCount(void) { RtcGetInfo(&sRtc); - return (DAY_HOURS * HOUR_MINUTES) * RtcGetDayCount(&sRtc) + HOUR_MINUTES * sRtc.hour + sRtc.minute; + return (HOURS_PER_DAY * MINUTES_PER_HOUR) * RtcGetDayCount(&sRtc) + MINUTES_PER_HOUR * sRtc.hour + sRtc.minute; } u32 RtcGetLocalDayCount(void) From a56eb4f53fe1ee1021f762af8b199988ed2b00b2 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Fri, 22 Sep 2023 11:19:00 -0300 Subject: [PATCH 054/120] Review changes. --- src/battle_anim_effects_1.c | 2 +- src/fieldmap.c | 1 - src/m4a_tables.c | 56 ++++++++++++++++++------------------- 3 files changed, 29 insertions(+), 30 deletions(-) diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index 0368adcf80..3a558969b5 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -4734,7 +4734,7 @@ static void AnimFalseSwipeSlice(struct Sprite *sprite) static void AnimFalseSwipePositionedSlice(struct Sprite *sprite) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + 0xFFD0 + gBattleAnimArgs[0]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) - 48 + gBattleAnimArgs[0]; sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); StartSpriteAnim(sprite, 1); sprite->data[0] = 0; diff --git a/src/fieldmap.c b/src/fieldmap.c index 97b5b78113..d9c4fa371a 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -48,7 +48,6 @@ static const struct MapConnection *GetIncomingConnection(u8 direction, int x, in static bool8 IsPosInIncomingConnectingMap(u8 direction, int x, int y, const struct MapConnection *connection); static bool8 IsCoordInIncomingConnectingMap(int coord, int srcMax, int destMax, int offset); - #define GetBorderBlockAt(x, y)({ \ u16 block; \ int i; \ diff --git a/src/m4a_tables.c b/src/m4a_tables.c index 12e6893902..4d012cea28 100644 --- a/src/m4a_tables.c +++ b/src/m4a_tables.c @@ -257,34 +257,34 @@ const u8 gClockTable[] = const struct PokemonCrySong gPokemonCrySongTemplate = { - 1, // track count - 0, // block count - 255, // priority - 0, // reverb - (struct ToneData *)&voicegroup000, // tone - {NULL, NULL}, // part - 0, // gap - TUNE, // part 0 - C_V, // TUNE value - GOTO, - 0, // GOTO target address - TUNE, // part 1 - C_V + 16, // TUNE value - {VOICE, 0}, // part 0 jumps here with GOTO - VOL, - 127, // volume - {XCMD, 0x0D}, - 0, // unk value - {XCMD, xRELE}, - 0, // release - PAN, - C_V, // PAN value - TIE, - 60, // TIE key (default is Cn3) - 127, // TIE velocity - {XCMD, 0x0C}, - 60, // unk value - {EOT, FINE} // end + .trackCount = 1, + .blockCount = 0, + .priority = 255, + .reverb = 0, + .tone = (struct ToneData *)&voicegroup000, + .part = {NULL, NULL}, + .gap = 0, + .part0 = TUNE, + .tuneValue = C_V, + .gotoCmd = GOTO, + .gotoTarget = 0, + .part1 = TUNE, + .tuneValue2 = C_V + 16, + .cont = {VOICE, 0}, // part0 jumps here with gotoCmd + .volCmd = VOL, + .volumeValue = 127, + .unkCmd0D = {XCMD, 0x0D}, + .unkCmd0DParam = 0, + .xreleCmd = {XCMD, xRELE}, + .releaseValue = 0, + .panCmd = PAN, + .panValue = C_V, + .tieCmd = TIE, + .tieKeyValue = 60, // default is Cn3 + .tieVelocityValue = 127, + .unkCmd0C = {XCMD, 0x0C}, + .unkCmd0CParam = 60, + .end = {EOT, FINE} }; const XcmdFunc gXcmdTable[] = From 03a1e7779b9fe10784f9e14b56abdf4f99789458 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Fri, 22 Sep 2023 11:23:27 -0300 Subject: [PATCH 055/120] Null dereferencing fix --- src/librfu_rfu.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/librfu_rfu.c b/src/librfu_rfu.c index 20d11352a1..fa8137f408 100644 --- a/src/librfu_rfu.c +++ b/src/librfu_rfu.c @@ -1430,7 +1430,11 @@ static u16 rfu_STC_setSendData_org(u8 ni_or_uni, u8 bmSendSlot, u8 subFrameSize, else if (gRfuLinkStatus->parentChild == MODE_CHILD) llFrameSize_p = &gRfuLinkStatus->remainLLFrameSizeChild[bm_slot_id]; frameSize = llsf_struct[gRfuLinkStatus->parentChild].frameSize; +#if UBFIX + if (llFrameSize_p && (subFrameSize > *llFrameSize_p || subFrameSize <= frameSize)) +#else if (subFrameSize > *llFrameSize_p || subFrameSize <= frameSize) +#endif return ERR_SUBFRAME_SIZE; imeBak = REG_IME; REG_IME = 0; @@ -1468,7 +1472,10 @@ static u16 rfu_STC_setSendData_org(u8 ni_or_uni, u8 bmSendSlot, u8 subFrameSize, } while (0); } gRfuLinkStatus->sendSlotNIFlag |= bmSendSlot; - *llFrameSize_p -= subFrameSize; +#if UBFIX + if (llFrameSize_p) +#endif + *llFrameSize_p -= subFrameSize; slotStatus_NI->send.state = SLOT_STATE_SEND_START; } else if (ni_or_uni & 0x10) @@ -1477,7 +1484,10 @@ static u16 rfu_STC_setSendData_org(u8 ni_or_uni, u8 bmSendSlot, u8 subFrameSize, slotStatus_UNI->send.bmSlot = bmSendSlot; slotStatus_UNI->send.src = src; slotStatus_UNI->send.payloadSize = subFrameSize - frameSize; - *llFrameSize_p -= subFrameSize; +#if UBFIX + if (llFrameSize_p) +#endif + *llFrameSize_p -= subFrameSize; slotStatus_UNI->send.state = SLOT_STATE_SEND_UNI; gRfuLinkStatus->sendSlotUNIFlag |= bmSendSlot; } From aff709a3cb847b31bcbd26b3b7ad8bbb8152d00d Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Fri, 22 Sep 2023 14:17:23 -0300 Subject: [PATCH 056/120] Fixed dumb mistake --- src/librfu_rfu.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/librfu_rfu.c b/src/librfu_rfu.c index fa8137f408..37d99c4b46 100644 --- a/src/librfu_rfu.c +++ b/src/librfu_rfu.c @@ -1430,7 +1430,7 @@ static u16 rfu_STC_setSendData_org(u8 ni_or_uni, u8 bmSendSlot, u8 subFrameSize, else if (gRfuLinkStatus->parentChild == MODE_CHILD) llFrameSize_p = &gRfuLinkStatus->remainLLFrameSizeChild[bm_slot_id]; frameSize = llsf_struct[gRfuLinkStatus->parentChild].frameSize; -#if UBFIX +#ifdef UBFIX if (llFrameSize_p && (subFrameSize > *llFrameSize_p || subFrameSize <= frameSize)) #else if (subFrameSize > *llFrameSize_p || subFrameSize <= frameSize) @@ -1472,7 +1472,7 @@ static u16 rfu_STC_setSendData_org(u8 ni_or_uni, u8 bmSendSlot, u8 subFrameSize, } while (0); } gRfuLinkStatus->sendSlotNIFlag |= bmSendSlot; -#if UBFIX +#ifdef UBFIX if (llFrameSize_p) #endif *llFrameSize_p -= subFrameSize; @@ -1484,7 +1484,7 @@ static u16 rfu_STC_setSendData_org(u8 ni_or_uni, u8 bmSendSlot, u8 subFrameSize, slotStatus_UNI->send.bmSlot = bmSendSlot; slotStatus_UNI->send.src = src; slotStatus_UNI->send.payloadSize = subFrameSize - frameSize; -#if UBFIX +#ifdef UBFIX if (llFrameSize_p) #endif *llFrameSize_p -= subFrameSize; From 6eb6282c89387f4636fd7725f555623d3f3c5ec7 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Sat, 23 Sep 2023 17:06:12 -0400 Subject: [PATCH 057/120] add missing constant usage in m4a_1 --- src/m4a_1.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/m4a_1.s b/src/m4a_1.s index 3f15788061..20f9197a8d 100644 --- a/src/m4a_1.s +++ b/src/m4a_1.s @@ -1395,7 +1395,7 @@ _081DD9F6: cmp r6, 0 beq _081DDA14 ldrb r0, [r4, o_CgbChannel_modify] - movs r1, 0x1 + movs r1, CGB_CHANNEL_MO_VOL orrs r0, r1 strb r0, [r4, o_CgbChannel_modify] _081DDA14: From cc30dc06d520314e87e5c6d9392f3a88628e4f65 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Tue, 26 Sep 2023 16:25:15 -0500 Subject: [PATCH 058/120] Add friendship evo threshold constant --- src/pokemon.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/pokemon.c b/src/pokemon.c index 7eab3ccf68..be8a08341c 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -48,11 +48,13 @@ #include "constants/trainers.h" #include "constants/union_room.h" -#define DAY_EVO_HOUR_BEGIN 12 -#define DAY_EVO_HOUR_END HOURS_PER_DAY +#define DAY_EVO_HOUR_BEGIN 12 +#define DAY_EVO_HOUR_END HOURS_PER_DAY -#define NIGHT_EVO_HOUR_BEGIN 0 -#define NIGHT_EVO_HOUR_END 12 +#define NIGHT_EVO_HOUR_BEGIN 0 +#define NIGHT_EVO_HOUR_END 12 + +#define FRIENDSHIP_EVO_THRESHOLD 220 struct SpeciesItem { @@ -5499,17 +5501,17 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 mode, u16 evolutionItem) switch (gEvolutionTable[species][i].method) { case EVO_FRIENDSHIP: - if (friendship >= 220) + if (friendship >= FRIENDSHIP_EVO_THRESHOLD) targetSpecies = gEvolutionTable[species][i].targetSpecies; break; case EVO_FRIENDSHIP_DAY: RtcCalcLocalTime(); - if (gLocalTime.hours >= DAY_EVO_HOUR_BEGIN && gLocalTime.hours < DAY_EVO_HOUR_END && friendship >= 220) + if (gLocalTime.hours >= DAY_EVO_HOUR_BEGIN && gLocalTime.hours < DAY_EVO_HOUR_END && friendship >= FRIENDSHIP_EVO_THRESHOLD) targetSpecies = gEvolutionTable[species][i].targetSpecies; break; case EVO_FRIENDSHIP_NIGHT: RtcCalcLocalTime(); - if (gLocalTime.hours >= NIGHT_EVO_HOUR_BEGIN && gLocalTime.hours < NIGHT_EVO_HOUR_END && friendship >= 220) + if (gLocalTime.hours >= NIGHT_EVO_HOUR_BEGIN && gLocalTime.hours < NIGHT_EVO_HOUR_END && friendship >= FRIENDSHIP_EVO_THRESHOLD) targetSpecies = gEvolutionTable[species][i].targetSpecies; break; case EVO_LEVEL: From b724cfc578757c08fe0cde8bf9dcadd2fa141827 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sat, 30 Sep 2023 18:22:38 -0300 Subject: [PATCH 059/120] Review comment --- src/librfu_rfu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/librfu_rfu.c b/src/librfu_rfu.c index 37d99c4b46..828d6450bc 100644 --- a/src/librfu_rfu.c +++ b/src/librfu_rfu.c @@ -1431,7 +1431,7 @@ static u16 rfu_STC_setSendData_org(u8 ni_or_uni, u8 bmSendSlot, u8 subFrameSize, llFrameSize_p = &gRfuLinkStatus->remainLLFrameSizeChild[bm_slot_id]; frameSize = llsf_struct[gRfuLinkStatus->parentChild].frameSize; #ifdef UBFIX - if (llFrameSize_p && (subFrameSize > *llFrameSize_p || subFrameSize <= frameSize)) + if ((llFrameSize_p && subFrameSize > *llFrameSize_p) || subFrameSize <= frameSize) #else if (subFrameSize > *llFrameSize_p || subFrameSize <= frameSize) #endif From 3a8a82d385daf325341fb350075d2604b4814385 Mon Sep 17 00:00:00 2001 From: kaboissonneault Date: Wed, 4 Oct 2023 09:18:02 -0400 Subject: [PATCH 060/120] Fixed out-of-bounds access in GetFactoryMonFixedIV when generating player rentals in round 8 (if player has 15+ swaps) and in round 9 --- src/battle_factory.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/battle_factory.c b/src/battle_factory.c index 5905b41917..46d34efd7d 100644 --- a/src/battle_factory.c +++ b/src/battle_factory.c @@ -741,7 +741,14 @@ u8 GetFactoryMonFixedIV(u8 challengeNum, bool8 isLastBattle) u8 ivSet; bool8 useHigherIV = isLastBattle ? TRUE : FALSE; +// The Factory has an out-of-bounds access when generating the rental draft for round 9 (challengeNum==8), +// or the "elevated" rentals from round 8 (challengeNum+1==8) +// This happens to land on a number higher than 31, which is interpreted as "random IVs" +#ifdef BUGFIX + if (challengeNum > 7) +#else if (challengeNum > 8) +#endif ivSet = 7; else ivSet = challengeNum; From 0a183c2027649e0042e066b0890f68088d1e0546 Mon Sep 17 00:00:00 2001 From: kaboissonneault Date: Thu, 5 Oct 2023 08:26:34 -0400 Subject: [PATCH 061/120] Changed sFixedIVTable access from hardcoded index limits to ARRAY_COUNT --- src/battle_factory.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/battle_factory.c b/src/battle_factory.c index 46d34efd7d..3606d88e6a 100644 --- a/src/battle_factory.c +++ b/src/battle_factory.c @@ -745,11 +745,11 @@ u8 GetFactoryMonFixedIV(u8 challengeNum, bool8 isLastBattle) // or the "elevated" rentals from round 8 (challengeNum+1==8) // This happens to land on a number higher than 31, which is interpreted as "random IVs" #ifdef BUGFIX - if (challengeNum > 7) + if (challengeNum >= ARRAY_COUNT(sFixedIVTable)) #else - if (challengeNum > 8) + if (challengeNum > ARRAY_COUNT(sFixedIVTable)) #endif - ivSet = 7; + ivSet = ARRAY_COUNT(sFixedIVTable) - 1; else ivSet = challengeNum; From 6f71fbe521ebe7ff1d3490ec3851ad28e9284ec0 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sun, 17 Sep 2023 17:11:55 -0400 Subject: [PATCH 062/120] Add some missing trainer hill constant usage --- src/event_object_movement.c | 4 ++-- src/trainer_hill.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 411b826a53..29dcf4d27c 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -1324,7 +1324,7 @@ u8 Unref_TryInitLocalObjectEvent(u8 localId) if (InBattlePyramid()) objectEventCount = GetNumBattlePyramidObjectEvents(); else if (InTrainerHill()) - objectEventCount = 2; + objectEventCount = HILL_TRAINERS_PER_FLOOR; else objectEventCount = gMapHeader.events->objectEventCount; @@ -1640,7 +1640,7 @@ void TrySpawnObjectEvents(s16 cameraX, s16 cameraY) if (InBattlePyramid()) objectCount = GetNumBattlePyramidObjectEvents(); else if (InTrainerHill()) - objectCount = 2; + objectCount = HILL_TRAINERS_PER_FLOOR; else objectCount = gMapHeader.events->objectEventCount; diff --git a/src/trainer_hill.c b/src/trainer_hill.c index cca1a3e984..018b9f14ba 100644 --- a/src/trainer_hill.c +++ b/src/trainer_hill.c @@ -650,7 +650,7 @@ void LoadTrainerHillObjectEventTemplates(void) eventTemplates[i].localId = i + 1; eventTemplates[i].graphicsId = FacilityClassToGraphicsId(sHillData->floors[floorId].trainers[i].facilityClass); eventTemplates[i].x = sHillData->floors[floorId].map.trainerCoords[i] & 0xF; - eventTemplates[i].y = ((sHillData->floors[floorId].map.trainerCoords[i] >> 4) & 0xF) + 5; + eventTemplates[i].y = ((sHillData->floors[floorId].map.trainerCoords[i] >> 4) & 0xF) + HILL_FLOOR_HEIGHT_MARGIN; bits = i << 2; eventTemplates[i].movementType = ((sHillData->floors[floorId].map.trainerDirections >> bits) & 0xF) + MOVEMENT_TYPE_FACE_UP; eventTemplates[i].trainerRange_berryTreeId = (sHillData->floors[floorId].map.trainerRanges >> bits) & 0xF; From 054d0f98526e97d644062af3f26557cf32a62f05 Mon Sep 17 00:00:00 2001 From: Thomas Winwood Date: Sat, 7 Oct 2023 17:52:57 +0100 Subject: [PATCH 063/120] Remove fakematch in NewGameInitPCItems --- src/player_pc.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/player_pc.c b/src/player_pc.c index 7dc2616e71..009aa7810f 100644 --- a/src/player_pc.c +++ b/src/player_pc.c @@ -222,7 +222,7 @@ static const struct MenuAction sItemStorage_MenuActions[] = [MENU_EXIT] = { gText_Cancel, {ItemStorage_Exit} } }; -static const struct ItemSlot sNewGamePCItems[] = +static const u16 sNewGamePCItems[][2] = { { ITEM_POTION, 1 }, { ITEM_NONE, 0 } @@ -355,16 +355,20 @@ static const struct WindowTemplate sWindowTemplates_ItemStorage[ITEMPC_WIN_COUNT static const u8 sSwapArrowTextColors[] = {TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY, TEXT_COLOR_DARK_GRAY}; -// Macro below is likely a fakematch, equivalent to sNewGamePCItems[i].quantity -#define GET_QUANTITY(i) ((u16)((u16 *)sNewGamePCItems + 1)[i * 2]) void NewGameInitPCItems(void) { u8 i = 0; ClearItemSlots(gSaveBlock1Ptr->pcItems, PC_ITEMS_COUNT); - for(; sNewGamePCItems[i].itemId != ITEM_NONE && GET_QUANTITY(i) && - AddPCItem(sNewGamePCItems[i].itemId, GET_QUANTITY(i)) == TRUE; i++); + + while (TRUE) + { + if (sNewGamePCItems[i][0] == ITEM_NONE || sNewGamePCItems[i][1] == 0) + break; + if (AddPCItem(sNewGamePCItems[i][0], sNewGamePCItems[i][1]) != TRUE) + break; + i++; + } } -#undef GET_QUANTITY void BedroomPC(void) { From 0e84c7deb302560913decb24673e1e991d52b5a9 Mon Sep 17 00:00:00 2001 From: marlux895 <141656905+marlux895@users.noreply.github.com> Date: Sat, 7 Oct 2023 23:23:52 +0200 Subject: [PATCH 064/120] corrected comment, tough to smart --- src/menu_specialized.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/menu_specialized.c b/src/menu_specialized.c index e749f599de..20ddce1f44 100644 --- a/src/menu_specialized.c +++ b/src/menu_specialized.c @@ -587,7 +587,7 @@ static void ConditionGraph_CalcRightHalf(struct ConditionGraph *graph) // No need for conditional, positions on the Beauty line are always above the Cute line ConditionGraph_CalcLine(graph, graph->scanlineRight[0], &graph->curPositions[GRAPH_BEAUTY], &graph->curPositions[GRAPH_CUTE], TRUE, NULL); - // Calculate Cute -> Tough line (includes left scanline because this crosses the halfway point) + // Calculate Cute -> Smart line (includes left scanline because this crosses the halfway point) i = (graph->curPositions[GRAPH_CUTE].y <= graph->curPositions[GRAPH_SMART].y); ConditionGraph_CalcLine(graph, graph->scanlineRight[0], &graph->curPositions[GRAPH_CUTE], &graph->curPositions[GRAPH_SMART], i, graph->scanlineLeft[0]); From a5c2ac5e49207fea321dff74003bca81ee1a55f0 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 19 Oct 2023 23:37:04 -0400 Subject: [PATCH 065/120] Use BUGFIX in assembly files --- data/battle_ai_scripts.s | 23 +++++++++-------- data/contest_ai_scripts.s | 25 ++++++++++--------- data/event_scripts.s | 1 + .../scripts.inc | 10 ++++---- .../MossdeepCity_SpaceCenter_1F/scripts.inc | 6 ++--- data/scripts/trainer_hill.inc | 4 +-- 6 files changed, 36 insertions(+), 33 deletions(-) diff --git a/data/battle_ai_scripts.s b/data/battle_ai_scripts.s index c296702a64..a43c889502 100644 --- a/data/battle_ai_scripts.s +++ b/data/battle_ai_scripts.s @@ -1,3 +1,4 @@ +#include "config.h" #include "constants/battle.h" #include "constants/battle_ai.h" #include "constants/abilities.h" @@ -1926,19 +1927,19 @@ AI_CV_Protect_End: @ BUG: Foresight is only encouraged if the user is Ghost type or @ has high evasion, but should check target instead AI_CV_Foresight: -.ifdef BUGFIX +#ifdef BUGFIX get_target_type1 if_equal TYPE_GHOST, AI_CV_Foresight2 get_target_type2 if_equal TYPE_GHOST, AI_CV_Foresight2 if_stat_level_more_than AI_TARGET, STAT_EVASION, 8, AI_CV_Foresight3 -.else +#else get_user_type1 if_equal TYPE_GHOST, AI_CV_Foresight2 get_user_type2 if_equal TYPE_GHOST, AI_CV_Foresight2 if_stat_level_more_than AI_USER, STAT_EVASION, 8, AI_CV_Foresight3 -.endif +#endif score -2 goto AI_CV_Foresight_End @@ -2183,13 +2184,13 @@ AI_CV_SemiInvulnerable2: if_status2 AI_TARGET, STATUS2_CURSED, AI_CV_SemiInvulnerable_TryEncourage if_status3 AI_TARGET, STATUS3_LEECHSEED, AI_CV_SemiInvulnerable_TryEncourage get_weather -.ifdef BUGFIX +#ifdef BUGFIX if_equal AI_WEATHER_HAIL, AI_CV_SemiInvulnerable_CheckIceType if_equal AI_WEATHER_SANDSTORM, AI_CV_SemiInvulnerable_CheckSandstormTypes -.else +#else if_equal AI_WEATHER_HAIL, AI_CV_SemiInvulnerable_CheckSandstormTypes if_equal AI_WEATHER_SANDSTORM, AI_CV_SemiInvulnerable_CheckIceType -.endif +#endif goto AI_CV_SemiInvulnerable5 AI_CV_SemiInvulnerable_CheckSandstormTypes: @@ -2254,11 +2255,11 @@ AI_CV_Hail_End: @ BUG: Facade score is increased if the target is statused, but should be if the user is AI_CV_Facade: -.ifdef BUGFIX +#ifdef BUGFIX if_not_status AI_USER, STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON, AI_CV_Facade_End -.else +#else if_not_status AI_TARGET, STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON, AI_CV_Facade_End -.endif +#endif score +1 AI_CV_Facade_End: end @@ -3176,9 +3177,9 @@ AI_HPAware_DiscouragedEffectsWhenTargetLowHP: AI_TrySunnyDayStart: if_target_is_ally AI_TryOnAlly if_not_effect EFFECT_SUNNY_DAY, AI_TrySunnyDayStart_End -.ifndef BUGFIX @ funcResult has not been set in this script yet, below call is nonsense +#ifndef BUGFIX @ funcResult has not been set in this script yet, below call is nonsense if_equal FALSE, AI_TrySunnyDayStart_End -.endif +#endif is_first_turn_for AI_USER if_equal FALSE, AI_TrySunnyDayStart_End score +5 diff --git a/data/contest_ai_scripts.s b/data/contest_ai_scripts.s index ecd3103ae2..affaf31d6d 100644 --- a/data/contest_ai_scripts.s +++ b/data/contest_ai_scripts.s @@ -1,3 +1,4 @@ +#include "config.h" #include "constants/global.h" #include "constants/contest.h" .include "asm/macros.inc" @@ -435,11 +436,11 @@ AI_CGM_BetterWhenAudienceExcited: AI_CGM_BetterWhenAudienceExcited_1stUp: @ BUG: Should be if_appeal_num_eq 0 @ 1st up on 1st appeal excitement will always be 0 -.ifdef BUGFIX +#ifdef BUGFIX if_appeal_num_eq 0, AI_CGM_BetterWhenAudienceExcited_1stAppeal -.else +#else if_appeal_num_not_eq 0, AI_CGM_BetterWhenAudienceExcited_1stAppeal -.endif +#endif if_excitement_eq 4, AI_CGM_BetterWhenAudienceExcited_1AwayFromMax if_excitement_eq 3, AI_CGM_BetterWhenAudienceExcited_2AwayFromMax end @@ -546,11 +547,11 @@ AI_CGM_TargetMonWithJudgesAttention: end AI_CGM_TargetMonWithJudgesAttention_CheckMon1: if_cannot_participate MON_1, AI_CGM_TargetMonWithJudgesAttention_CheckMon2 -.ifdef BUGFIX +#ifdef BUGFIX if_not_used_combo_starter MON_1, AI_CGM_TargetMonWithJudgesAttention_CheckMon2 -.else +#else if_used_combo_starter MON_1, AI_CGM_TargetMonWithJudgesAttention_CheckMon2 -.endif +#endif if_random_less_than 125, AI_CGM_TargetMonWithJudgesAttention_CheckMon2 score +2 if_not_completed_combo MON_1, AI_CGM_TargetMonWithJudgesAttention_CheckMon2 @@ -559,11 +560,11 @@ AI_CGM_TargetMonWithJudgesAttention_CheckMon1: AI_CGM_TargetMonWithJudgesAttention_CheckMon2: if_user_order_eq MON_2, AI_CGM_End if_cannot_participate MON_2, AI_CGM_TargetMonWithJudgesAttention_CheckMon3 -.ifdef BUGFIX +#ifdef BUGFIX if_not_used_combo_starter MON_2, AI_CGM_TargetMonWithJudgesAttention_CheckMon3 -.else +#else if_used_combo_starter MON_2, AI_CGM_TargetMonWithJudgesAttention_CheckMon3 -.endif +#endif if_random_less_than 125, AI_CGM_TargetMonWithJudgesAttention_CheckMon3 score +2 if_not_completed_combo MON_2, AI_CGM_TargetMonWithJudgesAttention_CheckMon3 @@ -572,11 +573,11 @@ AI_CGM_TargetMonWithJudgesAttention_CheckMon2: AI_CGM_TargetMonWithJudgesAttention_CheckMon3: if_user_order_eq MON_3, AI_CGM_End if_cannot_participate MON_3, AI_CGM_End -.ifdef BUGFIX +#ifdef BUGFIX if_not_used_combo_starter MON_3, AI_CGM_End -.else +#else if_used_combo_starter MON_3, AI_CGM_End -.endif +#endif if_random_less_than 125, AI_CGM_End score +2 if_not_completed_combo MON_3, AI_CGM_End diff --git a/data/event_scripts.s b/data/event_scripts.s index 1f3db6aa2b..e8fb9dcbd1 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -1,3 +1,4 @@ +#include "config.h" #include "constants/global.h" #include "constants/apprentice.h" #include "constants/battle.h" diff --git a/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc b/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc index 6162d0ada6..a216055b5b 100644 --- a/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc @@ -415,18 +415,18 @@ BattleFrontier_BattleTowerLobby_EventScript_SaveBeforeLinkMultisChallenge:: @ to the flash, but not data in PokemonStorage. The SaveGame script that follows asks the player to do a full save, @ which they can opt out of. As a result the player can save their party and quit without having saved the PC. @ This allows players to clone pokemon and their held items by withdrawing them (or erase them by despositing). -.ifndef BUGFIX +#ifndef BUGFIX tower_save 0 -.endif +#endif call Common_EventScript_SaveGame 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 -@ 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 +@ 2. If the player tries to connect, 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 +#endif specialvar VAR_RESULT, IsWirelessAdapterConnected goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattleTowerLobby_EventScript_TryWirelessLink goto BattleFrontier_BattleTowerLobby_EventScript_TryCableLink diff --git a/data/maps/MossdeepCity_SpaceCenter_1F/scripts.inc b/data/maps/MossdeepCity_SpaceCenter_1F/scripts.inc index 263b071056..e17af35724 100644 --- a/data/maps/MossdeepCity_SpaceCenter_1F/scripts.inc +++ b/data/maps/MossdeepCity_SpaceCenter_1F/scripts.inc @@ -229,11 +229,11 @@ MossdeepCity_SpaceCenter_1F_EventScript_Grunt2:: copyobjectxytoperm LOCALID_STAIR_GRUNT switch VAR_FACING case DIR_WEST, MossdeepCity_SpaceCenter_1F_EventScript_MoveGruntFromStairsWest - #ifdef BUGFIX +#ifdef BUGFIX case DIR_EAST, MossdeepCity_SpaceCenter_1F_EventScript_MoveGruntFromStairsEast - #else +#else case DIR_WEST, MossdeepCity_SpaceCenter_1F_EventScript_MoveGruntFromStairsEast - #endif +#endif applymovement LOCALID_STAIR_GRUNT, MossdeepCity_SpaceCenter_1F_Movement_MoveGruntFromStairs waitmovement 0 setvar VAR_MOSSDEEP_SPACE_CENTER_STAIR_GUARD_STATE, 2 diff --git a/data/scripts/trainer_hill.inc b/data/scripts/trainer_hill.inc index b7f8153514..04bbe05e5a 100644 --- a/data/scripts/trainer_hill.inc +++ b/data/scripts/trainer_hill.inc @@ -13,9 +13,9 @@ TrainerHill_OnWarp: TrainerHill_1F_EventScript_DummyOnWarp:: setvar VAR_TEMP_3, 1 -.ifdef BUGFIX +#ifdef BUGFIX end @ Missing end. By chance, the next byte (0x02 of VAR_TEMP_2) is also the id for the end cmd -.endif +#endif TrainerHill_OnFrame: map_script_2 VAR_TEMP_2, 0, TrainerHill_1F_EventScript_DummyWarpToEntranceCounter From ffdc2456cbf00954c965d4d9a256cd452226b0d8 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 20 Oct 2023 12:46:28 -0400 Subject: [PATCH 066/120] Document datahpupdate --- data/battle_scripts_1.s | 4 +- include/battle.h | 15 +++++--- include/constants/battle.h | 2 +- src/battle_main.c | 4 +- src/battle_script_commands.c | 73 +++++++++++++++++++++++------------- src/battle_util.c | 24 ++++++------ 6 files changed, 72 insertions(+), 50 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index e7f592aacb..0c0dc72831 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -3208,7 +3208,7 @@ BattleScript_DamagingWeatherLoop:: jumpifword CMP_EQUAL, gBattleMoveDamage, 0, BattleScript_DamagingWeatherLoopIncrement printfromtable gSandStormHailDmgStringIds waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_SKIP_DMG_TRACK | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_GRUDGE + orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_GRUDGE effectivenesssound hitanimation BS_ATTACKER healthbarupdate BS_ATTACKER @@ -3220,7 +3220,7 @@ BattleScript_DamagingWeatherLoopIncrement:: addbyte gBattleCommunication, 1 jumpifbytenotequal gBattleCommunication, gBattlersCount, BattleScript_DamagingWeatherLoop BattleScript_DamagingWeatherContinuesEnd:: - bicword gHitMarker, HITMARKER_SKIP_DMG_TRACK | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_GRUDGE + bicword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_GRUDGE end2 BattleScript_SandStormHailEnds:: diff --git a/include/battle.h b/include/battle.h index bb0e42fb83..f4c5bd997e 100644 --- a/include/battle.h +++ b/include/battle.h @@ -54,6 +54,9 @@ #define BATTLE_BUFFER_LINK_SIZE 0x1000 +// Special indicator value for shellBellDmg in SpecialStatus +#define IGNORE_SHELL_BELL 0xFFFF + struct ResourceFlags { u32 flags[MAX_BATTLERS_COUNT]; @@ -133,7 +136,7 @@ struct SpecialStatus u32 ppNotAffectedByPressure:1; u32 faintedHasReplacement:1; u32 focusBanded:1; - s32 dmg; + s32 shellBellDmg; s32 physicalDmg; s32 specialDmg; u8 physicalBattlerId; @@ -445,9 +448,9 @@ struct BattleStruct // 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) +#define DYNAMIC_TYPE_MASK ((1 << 6) - 1) +#define F_DYNAMIC_TYPE_IGNORE_PHYSICALITY (1 << 6) // If set, the dynamic type's physicality won't be used for certain move effects. +#define F_DYNAMIC_TYPE_UNREAD (1 << 7) // Set for Hidden Power and Weather Ball but never apparently checked. #define GET_MOVE_TYPE(move, typeArg) \ { \ @@ -647,7 +650,7 @@ extern u16 gChosenMove; extern u16 gCalledMove; extern s32 gBattleMoveDamage; extern s32 gHpDealt; -extern s32 gTakenDmg[MAX_BATTLERS_COUNT]; +extern s32 gBideDmg[MAX_BATTLERS_COUNT]; extern u16 gLastUsedItem; extern u8 gLastUsedAbility; extern u8 gBattlerAttacker; @@ -673,7 +676,7 @@ extern u8 gLastHitBy[MAX_BATTLERS_COUNT]; extern u16 gChosenMoveByBattler[MAX_BATTLERS_COUNT]; extern u8 gMoveResultFlags; extern u32 gHitMarker; -extern u8 gTakenDmgByBattler[MAX_BATTLERS_COUNT]; +extern u8 gBideTarget[MAX_BATTLERS_COUNT]; extern u8 gUnusedFirstBattleVar2; extern u16 gSideStatuses[NUM_BATTLE_SIDES]; extern struct SideTimer gSideTimers[NUM_BATTLE_SIDES]; diff --git a/include/constants/battle.h b/include/constants/battle.h index ac83feb3a0..c4c1bc5e68 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -168,7 +168,7 @@ // Not really sure what a "hitmarker" is. #define HITMARKER_WAKE_UP_CLEAR (1 << 4) // Cleared when waking up. Never set or checked. -#define HITMARKER_SKIP_DMG_TRACK (1 << 5) +#define HITMARKER_IGNORE_BIDE (1 << 5) #define HITMARKER_DESTINYBOND (1 << 6) #define HITMARKER_NO_ANIMATIONS (1 << 7) #define HITMARKER_IGNORE_SUBSTITUTE (1 << 8) diff --git a/src/battle_main.c b/src/battle_main.c index b5c6cbbf07..c19089deb0 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -170,7 +170,7 @@ EWRAM_DATA u16 gChosenMove = 0; EWRAM_DATA u16 gCalledMove = 0; EWRAM_DATA s32 gBattleMoveDamage = 0; EWRAM_DATA s32 gHpDealt = 0; -EWRAM_DATA s32 gTakenDmg[MAX_BATTLERS_COUNT] = {0}; +EWRAM_DATA s32 gBideDmg[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA u16 gLastUsedItem = 0; EWRAM_DATA u8 gLastUsedAbility = 0; EWRAM_DATA u8 gBattlerAttacker = 0; @@ -197,7 +197,7 @@ EWRAM_DATA u16 gChosenMoveByBattler[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA u8 gMoveResultFlags = 0; EWRAM_DATA u32 gHitMarker = 0; EWRAM_DATA static u8 sUnusedBattlersArray[MAX_BATTLERS_COUNT] = {0}; -EWRAM_DATA u8 gTakenDmgByBattler[MAX_BATTLERS_COUNT] = {0}; +EWRAM_DATA u8 gBideTarget[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA u8 gUnusedFirstBattleVar2 = 0; // Never read EWRAM_DATA u16 gSideStatuses[NUM_BATTLE_SIDES] = {0}; EWRAM_DATA struct SideTimer gSideTimers[NUM_BATTLE_SIDES] = {0}; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 9d2c2cb715..fd87e94e2a 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1836,6 +1836,7 @@ static void Cmd_healthbarupdate(void) gBattlescriptCurrInstr += 2; } +// Update the active battler's HP and various HP trackers (Substitute, Bide, etc.) static void Cmd_datahpupdate(void) { u32 moveType; @@ -1843,9 +1844,13 @@ static void Cmd_datahpupdate(void) if (gBattleControllerExecFlags) return; + // moveType will be used later to record for Counter/Mirror Coat whether this was physical or special damage. + // For moves with a dynamic type that have F_DYNAMIC_TYPE_IGNORE_PHYSICALITY set (in vanilla, just Hidden Power) this will ignore + // the dynamic type and use the move's base type instead, meaning (as a Normal type) Hidden Power will only ever trigger Counter. + // It also means that Hidden Power Fire is unable to defrost targets. if (gBattleStruct->dynamicMoveType == 0) moveType = gBattleMoves[gCurrentMove].type; - else if (!(gBattleStruct->dynamicMoveType & F_DYNAMIC_TYPE_1)) + else if (!(gBattleStruct->dynamicMoveType & F_DYNAMIC_TYPE_IGNORE_PHYSICALITY)) moveType = gBattleStruct->dynamicMoveType & DYNAMIC_TYPE_MASK; else moveType = gBattleMoves[gCurrentMove].type; @@ -1855,23 +1860,26 @@ static void Cmd_datahpupdate(void) gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); if (gBattleMons[gActiveBattler].status2 & STATUS2_SUBSTITUTE && gDisableStructs[gActiveBattler].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE)) { + // Target has an active Substitute, deal damage to that instead. if (gDisableStructs[gActiveBattler].substituteHP >= gBattleMoveDamage) { - if (gSpecialStatuses[gActiveBattler].dmg == 0) - gSpecialStatuses[gActiveBattler].dmg = gBattleMoveDamage; + if (gSpecialStatuses[gActiveBattler].shellBellDmg == 0) + gSpecialStatuses[gActiveBattler].shellBellDmg = gBattleMoveDamage; gDisableStructs[gActiveBattler].substituteHP -= gBattleMoveDamage; gHpDealt = gBattleMoveDamage; } else { - if (gSpecialStatuses[gActiveBattler].dmg == 0) - gSpecialStatuses[gActiveBattler].dmg = gDisableStructs[gActiveBattler].substituteHP; + // Substitute has less HP than the damage dealt, set its HP to 0. + if (gSpecialStatuses[gActiveBattler].shellBellDmg == 0) + gSpecialStatuses[gActiveBattler].shellBellDmg = gDisableStructs[gActiveBattler].substituteHP; gHpDealt = gDisableStructs[gActiveBattler].substituteHP; gDisableStructs[gActiveBattler].substituteHP = 0; } - // check substitute fading + if (gDisableStructs[gActiveBattler].substituteHP == 0) { + // Substitute fades gBattlescriptCurrInstr += 2; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_SubstituteFade; @@ -1881,28 +1889,30 @@ static void Cmd_datahpupdate(void) else { gHitMarker &= ~HITMARKER_IGNORE_SUBSTITUTE; - if (gBattleMoveDamage < 0) // hp goes up + if (gBattleMoveDamage < 0) { - gBattleMons[gActiveBattler].hp -= gBattleMoveDamage; + // Negative damage is HP gain + gBattleMons[gActiveBattler].hp += -gBattleMoveDamage; if (gBattleMons[gActiveBattler].hp > gBattleMons[gActiveBattler].maxHP) gBattleMons[gActiveBattler].hp = gBattleMons[gActiveBattler].maxHP; - } - else // hp goes down + else { - if (gHitMarker & HITMARKER_SKIP_DMG_TRACK) + if (gHitMarker & HITMARKER_IGNORE_BIDE) { - gHitMarker &= ~HITMARKER_SKIP_DMG_TRACK; + gHitMarker &= ~HITMARKER_IGNORE_BIDE; } else { - gTakenDmg[gActiveBattler] += gBattleMoveDamage; + // Record damage/attacker for Bide + gBideDmg[gActiveBattler] += gBattleMoveDamage; if (gBattlescriptCurrInstr[1] == BS_TARGET) - gTakenDmgByBattler[gActiveBattler] = gBattlerAttacker; + gBideTarget[gActiveBattler] = gBattlerAttacker; else - gTakenDmgByBattler[gActiveBattler] = gBattlerTarget; + gBideTarget[gActiveBattler] = gBattlerTarget; } + // Deal damage to the battler if (gBattleMons[gActiveBattler].hp > gBattleMoveDamage) { gBattleMons[gActiveBattler].hp -= gBattleMoveDamage; @@ -1914,11 +1924,16 @@ static void Cmd_datahpupdate(void) gBattleMons[gActiveBattler].hp = 0; } - if (!gSpecialStatuses[gActiveBattler].dmg && !(gHitMarker & HITMARKER_PASSIVE_DAMAGE)) - gSpecialStatuses[gActiveBattler].dmg = gHpDealt; + // Record damage for Shell Bell + if (gSpecialStatuses[gActiveBattler].shellBellDmg == 0 && !(gHitMarker & HITMARKER_PASSIVE_DAMAGE)) + gSpecialStatuses[gActiveBattler].shellBellDmg = gHpDealt; + // Note: While physicalDmg/specialDmg below are only distinguished between for Counter/Mirror Coat, they are + // used in combination as general damage trackers for other purposes. specialDmg is additionally used + // to help determine if a fire move should defrost the target. if (IS_TYPE_PHYSICAL(moveType) && !(gHitMarker & HITMARKER_PASSIVE_DAMAGE) && gCurrentMove != MOVE_PAIN_SPLIT) { + // Record physical damage/attacker for Counter gProtectStructs[gActiveBattler].physicalDmg = gHpDealt; gSpecialStatuses[gActiveBattler].physicalDmg = gHpDealt; if (gBattlescriptCurrInstr[1] == BS_TARGET) @@ -1934,6 +1949,7 @@ static void Cmd_datahpupdate(void) } else if (!IS_TYPE_PHYSICAL(moveType) && !(gHitMarker & HITMARKER_PASSIVE_DAMAGE)) { + // Record special damage/attacker for Mirror Coat gProtectStructs[gActiveBattler].specialDmg = gHpDealt; gSpecialStatuses[gActiveBattler].specialDmg = gHpDealt; if (gBattlescriptCurrInstr[1] == BS_TARGET) @@ -1949,15 +1965,18 @@ static void Cmd_datahpupdate(void) } } gHitMarker &= ~HITMARKER_PASSIVE_DAMAGE; + + // Send updated HP BtlController_EmitSetMonData(BUFFER_A, REQUEST_HP_BATTLE, 0, sizeof(gBattleMons[gActiveBattler].hp), &gBattleMons[gActiveBattler].hp); MarkBattlerForControllerExec(gActiveBattler); } } else { + // MOVE_RESULT_NO_EFFECT was set gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - if (gSpecialStatuses[gActiveBattler].dmg == 0) - gSpecialStatuses[gActiveBattler].dmg = 0xFFFF; + if (gSpecialStatuses[gActiveBattler].shellBellDmg == 0) + gSpecialStatuses[gActiveBattler].shellBellDmg = IGNORE_SHELL_BELL; } gBattlescriptCurrInstr += 2; } @@ -7092,7 +7111,7 @@ static void Cmd_setbide(void) { gBattleMons[gBattlerAttacker].status2 |= STATUS2_MULTIPLETURNS; gLockedMoves[gBattlerAttacker] = gCurrentMove; - gTakenDmg[gBattlerAttacker] = 0; + gBideDmg[gBattlerAttacker] = 0; gBattleMons[gBattlerAttacker].status2 |= STATUS2_BIDE_TURN(2); gBattlescriptCurrInstr++; @@ -7984,7 +8003,7 @@ static void Cmd_painsplitdmgcalc(void) storeLoc[3] = (painSplitHp & 0xFF000000) >> 24; gBattleMoveDamage = gBattleMons[gBattlerAttacker].hp - hpDiff; - gSpecialStatuses[gBattlerTarget].dmg = 0xFFFF; + gSpecialStatuses[gBattlerTarget].shellBellDmg = IGNORE_SHELL_BELL; gBattlescriptCurrInstr += 5; } @@ -8822,7 +8841,7 @@ static void Cmd_hiddenpowercalc(void) gBattleStruct->dynamicMoveType = ((NUMBER_OF_MON_TYPES - 3) * typeBits) / 63 + 1; if (gBattleStruct->dynamicMoveType >= TYPE_MYSTERY) gBattleStruct->dynamicMoveType++; - gBattleStruct->dynamicMoveType |= F_DYNAMIC_TYPE_1 | F_DYNAMIC_TYPE_2; + gBattleStruct->dynamicMoveType |= F_DYNAMIC_TYPE_IGNORE_PHYSICALITY | F_DYNAMIC_TYPE_UNREAD; gBattlescriptCurrInstr++; } @@ -9699,15 +9718,15 @@ static void Cmd_setweatherballtype(void) if (gBattleWeather & B_WEATHER_ANY) gBattleScripting.dmgMultiplier = 2; if (gBattleWeather & B_WEATHER_RAIN) - *(&gBattleStruct->dynamicMoveType) = TYPE_WATER | F_DYNAMIC_TYPE_2; + *(&gBattleStruct->dynamicMoveType) = TYPE_WATER | F_DYNAMIC_TYPE_UNREAD; else if (gBattleWeather & B_WEATHER_SANDSTORM) - *(&gBattleStruct->dynamicMoveType) = TYPE_ROCK | F_DYNAMIC_TYPE_2; + *(&gBattleStruct->dynamicMoveType) = TYPE_ROCK | F_DYNAMIC_TYPE_UNREAD; else if (gBattleWeather & B_WEATHER_SUN) - *(&gBattleStruct->dynamicMoveType) = TYPE_FIRE | F_DYNAMIC_TYPE_2; + *(&gBattleStruct->dynamicMoveType) = TYPE_FIRE | F_DYNAMIC_TYPE_UNREAD; else if (gBattleWeather & B_WEATHER_HAIL) - *(&gBattleStruct->dynamicMoveType) = TYPE_ICE | F_DYNAMIC_TYPE_2; + *(&gBattleStruct->dynamicMoveType) = TYPE_ICE | F_DYNAMIC_TYPE_UNREAD; else - *(&gBattleStruct->dynamicMoveType) = TYPE_NORMAL | F_DYNAMIC_TYPE_2; + *(&gBattleStruct->dynamicMoveType) = TYPE_NORMAL | F_DYNAMIC_TYPE_UNREAD; } gBattlescriptCurrInstr++; diff --git a/src/battle_util.c b/src/battle_util.c index 50c560bccf..5a2b6392f0 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -1448,7 +1448,7 @@ u8 DoBattlerEndTurnEffects(void) { u8 effect = 0; - gHitMarker |= (HITMARKER_GRUDGE | HITMARKER_SKIP_DMG_TRACK); + gHitMarker |= (HITMARKER_GRUDGE | HITMARKER_IGNORE_BIDE); while (gBattleStruct->turnEffectsBattlerId < gBattlersCount && gBattleStruct->turnEffectsTracker <= ENDTURN_BATTLER_COUNT) { gActiveBattler = gBattlerAttacker = gBattlerByTurnOrder[gBattleStruct->turnEffectsBattlerId]; @@ -1761,13 +1761,13 @@ u8 DoBattlerEndTurnEffects(void) return effect; } } - gHitMarker &= ~(HITMARKER_GRUDGE | HITMARKER_SKIP_DMG_TRACK); + gHitMarker &= ~(HITMARKER_GRUDGE | HITMARKER_IGNORE_BIDE); return 0; } bool8 HandleWishPerishSongOnTurnEnd(void) { - gHitMarker |= (HITMARKER_GRUDGE | HITMARKER_SKIP_DMG_TRACK); + gHitMarker |= (HITMARKER_GRUDGE | HITMARKER_IGNORE_BIDE); switch (gBattleStruct->wishPerishSongState) { @@ -1796,7 +1796,7 @@ bool8 HandleWishPerishSongOnTurnEnd(void) gBattlerTarget = gActiveBattler; gBattlerAttacker = gWishFutureKnock.futureSightAttacker[gActiveBattler]; gBattleMoveDamage = gWishFutureKnock.futureSightDmg[gActiveBattler]; - gSpecialStatuses[gBattlerTarget].dmg = 0xFFFF; + gSpecialStatuses[gBattlerTarget].shellBellDmg = IGNORE_SHELL_BELL; BattleScriptExecute(BattleScript_MonTookFutureAttack); if (gWishFutureKnock.futureSightCounter[gActiveBattler] == 0 @@ -1867,7 +1867,7 @@ bool8 HandleWishPerishSongOnTurnEnd(void) break; } - gHitMarker &= ~(HITMARKER_GRUDGE | HITMARKER_SKIP_DMG_TRACK); + gHitMarker &= ~(HITMARKER_GRUDGE | HITMARKER_IGNORE_BIDE); return FALSE; } @@ -2212,11 +2212,11 @@ u8 AtkCanceller_UnableToUseMove(void) { // This is removed in FRLG and Emerald for some reason //gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_MULTIPLETURNS; - if (gTakenDmg[gBattlerAttacker]) + if (gBideDmg[gBattlerAttacker]) { gCurrentMove = MOVE_BIDE; - *bideDmg = gTakenDmg[gBattlerAttacker] * 2; - gBattlerTarget = gTakenDmgByBattler[gBattlerAttacker]; + *bideDmg = gBideDmg[gBattlerAttacker] * 2; + gBattlerTarget = gBideTarget[gBattlerAttacker]; if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) gBattlerTarget = GetMoveTarget(MOVE_BIDE, MOVE_TARGET_SELECTED + 1); gBattlescriptCurrInstr = BattleScript_BideAttack; @@ -3769,8 +3769,8 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) break; case HOLD_EFFECT_SHELL_BELL: if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) - && gSpecialStatuses[gBattlerTarget].dmg != 0 - && gSpecialStatuses[gBattlerTarget].dmg != 0xFFFF + && gSpecialStatuses[gBattlerTarget].shellBellDmg != 0 + && gSpecialStatuses[gBattlerTarget].shellBellDmg != IGNORE_SHELL_BELL && gBattlerAttacker != gBattlerTarget && gBattleMons[gBattlerAttacker].hp != gBattleMons[gBattlerAttacker].maxHP && gBattleMons[gBattlerAttacker].hp != 0) @@ -3778,10 +3778,10 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) gLastUsedItem = atkItem; gPotentialItemEffectBattler = gBattlerAttacker; gBattleScripting.battler = gBattlerAttacker; - gBattleMoveDamage = (gSpecialStatuses[gBattlerTarget].dmg / atkHoldEffectParam) * -1; + gBattleMoveDamage = (gSpecialStatuses[gBattlerTarget].shellBellDmg / atkHoldEffectParam) * -1; if (gBattleMoveDamage == 0) gBattleMoveDamage = -1; - gSpecialStatuses[gBattlerTarget].dmg = 0; + gSpecialStatuses[gBattlerTarget].shellBellDmg = 0; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_ItemHealHP_Ret; effect++; From 5712777dc23aa9b64e9b246b2b1a946de38fb639 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 20 Oct 2023 12:57:36 -0400 Subject: [PATCH 067/120] Correct dynamic type flag name --- include/battle.h | 2 +- src/battle_script_commands.c | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/include/battle.h b/include/battle.h index f4c5bd997e..68beaf219f 100644 --- a/include/battle.h +++ b/include/battle.h @@ -450,7 +450,7 @@ STATIC_ASSERT(sizeof(((struct BattleStruct *)0)->palaceFlags) * 8 >= MAX_BATTLER #define DYNAMIC_TYPE_MASK ((1 << 6) - 1) #define F_DYNAMIC_TYPE_IGNORE_PHYSICALITY (1 << 6) // If set, the dynamic type's physicality won't be used for certain move effects. -#define F_DYNAMIC_TYPE_UNREAD (1 << 7) // Set for Hidden Power and Weather Ball but never apparently checked. +#define F_DYNAMIC_TYPE_SET (1 << 7) // Set for all dynamic types to distinguish a dynamic type of Normal (0) from no dynamic type. #define GET_MOVE_TYPE(move, typeArg) \ { \ diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index fd87e94e2a..96ae0e68a3 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -8841,7 +8841,7 @@ static void Cmd_hiddenpowercalc(void) gBattleStruct->dynamicMoveType = ((NUMBER_OF_MON_TYPES - 3) * typeBits) / 63 + 1; if (gBattleStruct->dynamicMoveType >= TYPE_MYSTERY) gBattleStruct->dynamicMoveType++; - gBattleStruct->dynamicMoveType |= F_DYNAMIC_TYPE_IGNORE_PHYSICALITY | F_DYNAMIC_TYPE_UNREAD; + gBattleStruct->dynamicMoveType |= F_DYNAMIC_TYPE_IGNORE_PHYSICALITY | F_DYNAMIC_TYPE_SET; gBattlescriptCurrInstr++; } @@ -9718,15 +9718,15 @@ static void Cmd_setweatherballtype(void) if (gBattleWeather & B_WEATHER_ANY) gBattleScripting.dmgMultiplier = 2; if (gBattleWeather & B_WEATHER_RAIN) - *(&gBattleStruct->dynamicMoveType) = TYPE_WATER | F_DYNAMIC_TYPE_UNREAD; + *(&gBattleStruct->dynamicMoveType) = TYPE_WATER | F_DYNAMIC_TYPE_SET; else if (gBattleWeather & B_WEATHER_SANDSTORM) - *(&gBattleStruct->dynamicMoveType) = TYPE_ROCK | F_DYNAMIC_TYPE_UNREAD; + *(&gBattleStruct->dynamicMoveType) = TYPE_ROCK | F_DYNAMIC_TYPE_SET; else if (gBattleWeather & B_WEATHER_SUN) - *(&gBattleStruct->dynamicMoveType) = TYPE_FIRE | F_DYNAMIC_TYPE_UNREAD; + *(&gBattleStruct->dynamicMoveType) = TYPE_FIRE | F_DYNAMIC_TYPE_SET; else if (gBattleWeather & B_WEATHER_HAIL) - *(&gBattleStruct->dynamicMoveType) = TYPE_ICE | F_DYNAMIC_TYPE_UNREAD; + *(&gBattleStruct->dynamicMoveType) = TYPE_ICE | F_DYNAMIC_TYPE_SET; else - *(&gBattleStruct->dynamicMoveType) = TYPE_NORMAL | F_DYNAMIC_TYPE_UNREAD; + *(&gBattleStruct->dynamicMoveType) = TYPE_NORMAL | F_DYNAMIC_TYPE_SET; } gBattlescriptCurrInstr++; From 333523e5f7b0a8c3c40ffedc8d7234a0eb14eb88 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Mon, 23 Oct 2023 13:24:38 -0500 Subject: [PATCH 068/120] Remove all leading whitespace --- INSTALL.md | 6 +++--- src/battle_factory.c | 2 +- src/easy_chat.c | 4 ++-- src/event_object_movement.c | 2 +- src/mini_printf.c | 12 ++++++------ src/rom_header_gf.c | 4 ++-- src/trade.c | 2 +- tools/aif2pcm/main.c | 14 +++++++------- tools/gbagfx/font.c | 6 +++--- tools/preproc/c_file.cpp | 4 ++-- tools/preproc/charmap.cpp | 2 +- tools/scaninc/source_file.cpp | 4 ++-- 12 files changed, 31 insertions(+), 31 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index a76d0acc75..920e03c713 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -150,9 +150,9 @@ Note that in msys2, Copy is Ctrl+Insert and Paste is Shift+Insert.
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 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.
diff --git a/src/battle_factory.c b/src/battle_factory.c index 3606d88e6a..0f4ed9816d 100644 --- a/src/battle_factory.c +++ b/src/battle_factory.c @@ -741,7 +741,7 @@ u8 GetFactoryMonFixedIV(u8 challengeNum, bool8 isLastBattle) u8 ivSet; bool8 useHigherIV = isLastBattle ? TRUE : FALSE; -// The Factory has an out-of-bounds access when generating the rental draft for round 9 (challengeNum==8), +// The Factory has an out-of-bounds access when generating the rental draft for round 9 (challengeNum==8), // or the "elevated" rentals from round 8 (challengeNum+1==8) // This happens to land on a number higher than 31, which is interpreted as "random IVs" #ifdef BUGFIX diff --git a/src/easy_chat.c b/src/easy_chat.c index 93fdafd80b..8e93ca310e 100644 --- a/src/easy_chat.c +++ b/src/easy_chat.c @@ -230,7 +230,7 @@ enum { PALTAG_TRIANGLE_CURSOR, PALTAG_RECTANGLE_CURSOR, PALTAG_MISC_UI, - PALTAG_RS_INTERVIEW_FRAME, + PALTAG_RS_INTERVIEW_FRAME, }; enum { @@ -240,7 +240,7 @@ enum { GFXTAG_START_SELECT_BUTTONS, GFXTAG_MODE_WINDOW, GFXTAG_RS_INTERVIEW_FRAME, - GFXTAG_BUTTON_WINDOW, + GFXTAG_BUTTON_WINDOW, }; diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 29dcf4d27c..a181ea9f21 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -498,7 +498,7 @@ static const struct SpritePalette sObjectEventSpritePalettes[] = { {gObjectEventPal_RubySapphireBrendan, OBJ_EVENT_PAL_TAG_RS_BRENDAN}, {gObjectEventPal_RubySapphireMay, OBJ_EVENT_PAL_TAG_RS_MAY}, #ifdef BUGFIX - {NULL, OBJ_EVENT_PAL_TAG_NONE}, + {NULL, OBJ_EVENT_PAL_TAG_NONE}, #else {}, // BUG: FindObjectEventPaletteIndexByTag looks for OBJ_EVENT_PAL_TAG_NONE and not 0x0. // If it's looking for a tag that isn't in this table, the game locks in an infinite loop. diff --git a/src/mini_printf.c b/src/mini_printf.c index 69500157c6..9fb4ecfac9 100644 --- a/src/mini_printf.c +++ b/src/mini_printf.c @@ -41,7 +41,7 @@ #ifndef NDEBUG -struct mini_buff +struct mini_buff { char *buffer, *pbuffer; u32 buffer_len; @@ -95,7 +95,7 @@ static s32 _putsAscii(char *s, s32 len, void *buf) s32 i; struct mini_buff *b; - if (!buf) + if (!buf) return len; b = buf; @@ -118,7 +118,7 @@ static s32 _putsEncoded(char *s, s32 len, void *buf) s32 i; struct mini_buff *b; - if (!buf) + if (!buf) return len; b = buf; @@ -159,7 +159,7 @@ static s32 mini_itoa(s32 value, u32 radix, s32 uppercase, bool32 unsig, char *bu } /* This builds the string back to front ... */ - do + do { s32 digit = value % radix; *(pbuffer++) = (digit < 10 ? '0' + digit : (uppercase ? 'A' : 'a') + digit - 10); @@ -243,7 +243,7 @@ s32 mini_vpprintf(void* buf, const char *fmt, va_list va) { len = 1; len = _putsAscii(&ch, len, buf); - } else + } else { char pad_char = ' '; s32 pad_to = 0; @@ -270,7 +270,7 @@ s32 mini_vpprintf(void* buf, const char *fmt, va_list va) ch=*(fmt++); } - switch (ch) + switch (ch) { case 0: goto end; diff --git a/src/rom_header_gf.c b/src/rom_header_gf.c index 465c0cf410..36ff3401d3 100644 --- a/src/rom_header_gf.c +++ b/src/rom_header_gf.c @@ -9,8 +9,8 @@ // The purpose of this struct is for outside applications to be // able to access parts of the ROM or its save file, like a public API. // In vanilla, it was used by Colosseum and XD to access pokemon graphics. -// -// If this struct is rearranged in any way, it defeats the purpose of +// +// If this struct is rearranged in any way, it defeats the purpose of // having it at all. Applications like PKHex or streaming HUDs may find // these values useful, so there's some potential benefit to keeping it. // If there's a compilation problem below, just comment out the assignment diff --git a/src/trade.c b/src/trade.c index 037ea4101a..5728a6ee51 100644 --- a/src/trade.c +++ b/src/trade.c @@ -1285,7 +1285,7 @@ static void Leader_HandleCommunication(void) if (sTradeMenu->playerSelectStatus == STATUS_READY && sTradeMenu->partnerSelectStatus == STATUS_READY) { - // Both players have selected a pokemon to trade + // Both players have selected a pokemon to trade sTradeMenu->callbackId = CB_SET_SELECTED_MONS; sTradeMenu->linkData[0] = LINKCMD_SET_MONS_TO_TRADE; sTradeMenu->linkData[1] = sTradeMenu->cursorPosition; diff --git a/tools/aif2pcm/main.c b/tools/aif2pcm/main.c index 720db1acae..0824b92da8 100644 --- a/tools/aif2pcm/main.c +++ b/tools/aif2pcm/main.c @@ -238,7 +238,7 @@ void read_aif(struct Bytes *aif, AifData *aif_data) { FATAL_ERROR("More than one MARK Chunk in file!\n"); } - + markers = calloc(num_markers, sizeof(struct Marker)); // Read each marker. @@ -289,7 +289,7 @@ void read_aif(struct Bytes *aif, AifData *aif_data) // Skip NoLooping sustain loop. pos += 4; } - + // Skip release loop, we don't need it. pos += 6; } @@ -303,7 +303,7 @@ void read_aif(struct Bytes *aif, AifData *aif_data) { uint8_t *sample_data = (uint8_t *)malloc(num_samples * sizeof(uint8_t)); memcpy(sample_data, &aif->data[pos], num_samples); - + aif_data->samples8 = sample_data; aif_data->real_num_samples = num_samples; } @@ -316,7 +316,7 @@ void read_aif(struct Bytes *aif, AifData *aif_data) { sample_data_swapped[i] = __builtin_bswap16(sample_data[i]); } - + aif_data->samples16 = sample_data_swapped; aif_data->real_num_samples = num_samples; free(sample_data); @@ -329,12 +329,12 @@ void read_aif(struct Bytes *aif, AifData *aif_data) pos += chunk_size; } } - + if (markers) { // Resolve loop points. struct Marker *cur_marker = markers; - + // Grab loop start point. for (int i = 0; i < num_markers; i++, cur_marker++) { @@ -573,7 +573,7 @@ void aif2pcm(const char *aif_filename, const char *pcm_filename, bool compress) struct Bytes *aif = read_bytearray(aif_filename); AifData aif_data = {0}; read_aif(aif, &aif_data); - + // Convert 16-bit to 8-bit if necessary if (aif_data.sample_size == 16) { diff --git a/tools/gbagfx/font.c b/tools/gbagfx/font.c index 0dd6fbc3ee..1251b5c647 100644 --- a/tools/gbagfx/font.c +++ b/tools/gbagfx/font.c @@ -26,7 +26,7 @@ static void ConvertFromLatinFont(unsigned char *src, unsigned char *dest, unsign unsigned int pixelsX = (column * 16) + ((glyphTile & 1) * 8); for (unsigned int i = 0; i < 8; i++) { - unsigned int pixelsY = (row * 16) + ((glyphTile >> 1) * 8) + i; + unsigned int pixelsY = (row * 16) + ((glyphTile >> 1) * 8) + i; unsigned int destPixelsOffset = (pixelsY * 64) + (pixelsX / 4); dest[destPixelsOffset] = src[srcPixelsOffset + 1]; @@ -75,7 +75,7 @@ static void ConvertFromHalfwidthJapaneseFont(unsigned char *src, unsigned char * for (unsigned int i = 0; i < 8; i++) { unsigned int pixelsY = (row * 16) + (glyphTile * 8) + i; unsigned int destPixelsOffset = (pixelsY * 32) + (pixelsX / 4); - + dest[destPixelsOffset] = src[srcPixelsOffset + 1]; dest[destPixelsOffset + 1] = src[srcPixelsOffset]; @@ -233,7 +233,7 @@ void ReadHalfwidthJapaneseFont(char *path, struct Image *image) FATAL_ERROR("The file size (%d) is not a multiple of %d.\n", fileSize, glyphSize); int numGlyphs = fileSize / glyphSize; - + if (numGlyphs % 16 != 0) FATAL_ERROR("The number of glyphs (%d) is not a multiple of 16.\n", numGlyphs); diff --git a/tools/preproc/c_file.cpp b/tools/preproc/c_file.cpp index 17a08cc9f7..508c628731 100644 --- a/tools/preproc/c_file.cpp +++ b/tools/preproc/c_file.cpp @@ -383,7 +383,7 @@ void CFile::TryConvertIncbin() if (m_buffer[m_pos] == '\\') RaiseError("unexpected escape in path string"); - + m_pos++; } @@ -418,7 +418,7 @@ void CFile::TryConvertIncbin() m_pos++; } - + if (m_buffer[m_pos] != ')') RaiseError("expected ')'"); diff --git a/tools/preproc/charmap.cpp b/tools/preproc/charmap.cpp index a7bedfe26f..a0c631026c 100644 --- a/tools/preproc/charmap.cpp +++ b/tools/preproc/charmap.cpp @@ -119,7 +119,7 @@ Lhs CharmapReader::ReadLhs() break; } } - + if (m_buffer[m_pos] == '\'') { m_pos++; diff --git a/tools/scaninc/source_file.cpp b/tools/scaninc/source_file.cpp index df31282f80..9d188eb738 100644 --- a/tools/scaninc/source_file.cpp +++ b/tools/scaninc/source_file.cpp @@ -41,7 +41,7 @@ SourceFileType GetFileType(std::string& path) return SourceFileType::Inc; else FATAL_ERROR("Unrecognized extension \"%s\"\n", extension.c_str()); - + // Unreachable return SourceFileType::Cpp; } @@ -84,7 +84,7 @@ SourceFile::SourceFile(std::string path) else incbins.insert(outputPath); } - + new (&m_source_file.asm_wrapper) SourceFile::InnerUnion::AsmWrapper{incbins, includes}; } } From 25d6f8ba74997a8694a7dbf150a86a402934702d Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Thu, 26 Oct 2023 09:25:50 -0300 Subject: [PATCH 069/120] Fix mini_printf encoded string -Werror=pointer-sign warning --- src/mini_printf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mini_printf.c b/src/mini_printf.c index 69500157c6..65b350e08b 100644 --- a/src/mini_printf.c +++ b/src/mini_printf.c @@ -328,7 +328,7 @@ s32 mini_vpprintf(void* buf, const char *fmt, va_list va) break; case 'S' : // preproc encoded string handler ptr = va_arg(va, char*); - len = StringLength(ptr); + len = StringLength((u8*)ptr); if (pad_to > 0) { len = mini_pad(ptr, len, pad_char, pad_to, bf); From f472d768ddddb46cfcf94e5b1efd7d840bef37e0 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sat, 28 Oct 2023 16:32:55 +0200 Subject: [PATCH 070/120] Rename Undiscovered to No Eggs Discovered --- include/constants/pokemon.h | 34 ++++++++-------- src/data/pokemon/species_info.h | 70 ++++++++++++++++----------------- src/daycare.c | 2 +- 3 files changed, 53 insertions(+), 53 deletions(-) diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index e515378d4c..6265c027aa 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -24,24 +24,24 @@ #define NUMBER_OF_MON_TYPES 18 // Pokemon egg groups -#define EGG_GROUP_NONE 0 -#define EGG_GROUP_MONSTER 1 -#define EGG_GROUP_WATER_1 2 -#define EGG_GROUP_BUG 3 -#define EGG_GROUP_FLYING 4 -#define EGG_GROUP_FIELD 5 -#define EGG_GROUP_FAIRY 6 -#define EGG_GROUP_GRASS 7 -#define EGG_GROUP_HUMAN_LIKE 8 -#define EGG_GROUP_WATER_3 9 -#define EGG_GROUP_MINERAL 10 -#define EGG_GROUP_AMORPHOUS 11 -#define EGG_GROUP_WATER_2 12 -#define EGG_GROUP_DITTO 13 -#define EGG_GROUP_DRAGON 14 -#define EGG_GROUP_UNDISCOVERED 15 +#define EGG_GROUP_NONE 0 +#define EGG_GROUP_MONSTER 1 +#define EGG_GROUP_WATER_1 2 +#define EGG_GROUP_BUG 3 +#define EGG_GROUP_FLYING 4 +#define EGG_GROUP_FIELD 5 +#define EGG_GROUP_FAIRY 6 +#define EGG_GROUP_GRASS 7 +#define EGG_GROUP_HUMAN_LIKE 8 +#define EGG_GROUP_WATER_3 9 +#define EGG_GROUP_MINERAL 10 +#define EGG_GROUP_AMORPHOUS 11 +#define EGG_GROUP_WATER_2 12 +#define EGG_GROUP_DITTO 13 +#define EGG_GROUP_DRAGON 14 +#define EGG_GROUP_NO_EGGS_DISCOVERED 15 -#define EGG_GROUPS_PER_MON 2 +#define EGG_GROUPS_PER_MON 2 // Pokemon natures #define NATURE_HARDY 0 diff --git a/src/data/pokemon/species_info.h b/src/data/pokemon/species_info.h index 2ef0629b52..afd671a4c0 100644 --- a/src/data/pokemon/species_info.h +++ b/src/data/pokemon/species_info.h @@ -25,7 +25,7 @@ .eggCycles = 120, \ .friendship = 0, \ .growthRate = GROWTH_MEDIUM_FAST, \ - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED, }, \ + .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED, }, \ .abilities = {ABILITY_NONE, ABILITY_NONE}, \ .safariZoneFleeRate = 0, \ .bodyColor = BODY_COLOR_BLACK, \ @@ -929,7 +929,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .eggCycles = 20, .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, + .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, @@ -959,7 +959,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .eggCycles = 20, .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, + .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, @@ -4349,7 +4349,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .eggCycles = 80, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, + .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, @@ -4379,7 +4379,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .eggCycles = 80, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, + .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, @@ -4409,7 +4409,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .eggCycles = 80, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, + .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, @@ -4529,7 +4529,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, + .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, @@ -4559,7 +4559,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .eggCycles = 120, .friendship = 100, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, + .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, .abilities = {ABILITY_SYNCHRONIZE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, @@ -5189,7 +5189,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .eggCycles = 10, .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, + .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, .abilities = {ABILITY_STATIC, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, @@ -5219,7 +5219,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .eggCycles = 10, .friendship = 140, .growthRate = GROWTH_FAST, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, + .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, @@ -5249,7 +5249,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .eggCycles = 10, .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, + .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, @@ -5279,7 +5279,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .eggCycles = 10, .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, + .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, .abilities = {ABILITY_HUSTLE, ABILITY_SERENE_GRACE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, @@ -6059,7 +6059,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .eggCycles = 40, .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, + .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLACK, @@ -7109,7 +7109,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .eggCycles = 25, .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, + .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, .abilities = {ABILITY_GUTS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, @@ -7169,7 +7169,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .eggCycles = 25, .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, + .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, @@ -7199,7 +7199,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .eggCycles = 25, .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, + .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, .abilities = {ABILITY_STATIC, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, @@ -7229,7 +7229,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .eggCycles = 25, .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, + .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, .abilities = {ABILITY_FLAME_BODY, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, @@ -7319,7 +7319,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .eggCycles = 80, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, + .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, @@ -7349,7 +7349,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .eggCycles = 80, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, + .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, @@ -7379,7 +7379,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .eggCycles = 80, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, + .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, @@ -7499,7 +7499,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, + .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, @@ -7529,7 +7529,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, + .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, @@ -7559,7 +7559,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .eggCycles = 120, .friendship = 100, .growthRate = GROWTH_MEDIUM_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, + .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, .abilities = {ABILITY_NATURAL_CURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, @@ -9829,7 +9829,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .eggCycles = 10, .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, + .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, .abilities = {ABILITY_THICK_FAT, ABILITY_HUGE_POWER}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, @@ -10129,7 +10129,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .eggCycles = 20, .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, + .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, .abilities = {ABILITY_SHADOW_TAG, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, @@ -11359,7 +11359,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .eggCycles = 80, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, + .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, @@ -11389,7 +11389,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .eggCycles = 80, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, + .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, @@ -11419,7 +11419,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .eggCycles = 80, .friendship = 35, .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, + .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, @@ -11449,7 +11449,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, + .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, .abilities = {ABILITY_DRIZZLE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, @@ -11479,7 +11479,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, + .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, .abilities = {ABILITY_DROUGHT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, @@ -11509,7 +11509,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, + .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, .abilities = {ABILITY_AIR_LOCK, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, @@ -11539,7 +11539,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .eggCycles = 120, .friendship = 90, .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, + .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, @@ -11569,7 +11569,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .eggCycles = 120, .friendship = 90, .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, + .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, @@ -11599,7 +11599,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .eggCycles = 120, .friendship = 100, .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, + .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, .abilities = {ABILITY_SERENE_GRACE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, @@ -11629,7 +11629,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .eggCycles = 120, .friendship = 0, .growthRate = GROWTH_SLOW, - .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, + .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, diff --git a/src/daycare.c b/src/daycare.c index d618db78ec..d62bd589d0 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -1033,7 +1033,7 @@ static u8 GetDaycareCompatibilityScore(struct DayCare *daycare) } // check unbreedable egg group - if (eggGroups[0][0] == EGG_GROUP_UNDISCOVERED || eggGroups[1][0] == EGG_GROUP_UNDISCOVERED) + if (eggGroups[0][0] == EGG_GROUP_NO_EGGS_DISCOVERED || eggGroups[1][0] == EGG_GROUP_NO_EGGS_DISCOVERED) return PARENTS_INCOMPATIBLE; // two Ditto can't breed if (eggGroups[0][0] == EGG_GROUP_DITTO && eggGroups[1][0] == EGG_GROUP_DITTO) From cd9ef3a5662a1d6800e44ff09b5e1f059a27add7 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sat, 28 Oct 2023 16:34:11 +0200 Subject: [PATCH 071/120] Formatting fix --- src/data/pokemon/species_info.h | 54 ++++++++++++++++----------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/src/data/pokemon/species_info.h b/src/data/pokemon/species_info.h index afd671a4c0..fbd3bcba2a 100644 --- a/src/data/pokemon/species_info.h +++ b/src/data/pokemon/species_info.h @@ -2,34 +2,34 @@ // 255 (MON_GENDERLESS) is reserved for genderless Pokémon. #define PERCENT_FEMALE(percent) min(254, ((percent * 255) / 100)) -#define OLD_UNOWN_SPECIES_INFO \ - { \ - .baseHP = 50, \ - .baseAttack = 150, \ - .baseDefense = 50, \ - .baseSpeed = 150, \ - .baseSpAttack = 150, \ - .baseSpDefense = 50, \ - .types = { TYPE_NORMAL, TYPE_NORMAL}, \ - .catchRate = 3, \ - .expYield = 1, \ - .evYield_HP = 2, \ - .evYield_Attack = 2, \ - .evYield_Defense = 2, \ - .evYield_Speed = 2, \ - .evYield_SpAttack = 2, \ - .evYield_SpDefense = 2, \ - .itemCommon = ITEM_NONE, \ - .itemRare = ITEM_NONE, \ - .genderRatio = MON_GENDERLESS, \ - .eggCycles = 120, \ - .friendship = 0, \ - .growthRate = GROWTH_MEDIUM_FAST, \ +#define OLD_UNOWN_SPECIES_INFO \ + { \ + .baseHP = 50, \ + .baseAttack = 150, \ + .baseDefense = 50, \ + .baseSpeed = 150, \ + .baseSpAttack = 150, \ + .baseSpDefense = 50, \ + .types = { TYPE_NORMAL, TYPE_NORMAL}, \ + .catchRate = 3, \ + .expYield = 1, \ + .evYield_HP = 2, \ + .evYield_Attack = 2, \ + .evYield_Defense = 2, \ + .evYield_Speed = 2, \ + .evYield_SpAttack = 2, \ + .evYield_SpDefense = 2, \ + .itemCommon = ITEM_NONE, \ + .itemRare = ITEM_NONE, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_MEDIUM_FAST, \ .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED, }, \ - .abilities = {ABILITY_NONE, ABILITY_NONE}, \ - .safariZoneFleeRate = 0, \ - .bodyColor = BODY_COLOR_BLACK, \ - .noFlip = FALSE, \ + .abilities = {ABILITY_NONE, ABILITY_NONE}, \ + .safariZoneFleeRate = 0, \ + .bodyColor = BODY_COLOR_BLACK, \ + .noFlip = FALSE, \ } const struct SpeciesInfo gSpeciesInfo[] = From d44b2a972d2b9fd1da64dacc4fd2b2224fb294a4 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Tue, 31 Oct 2023 04:36:46 -0300 Subject: [PATCH 072/120] =?UTF-8?q?Renamed=20SendMonToPC=20to=20CopyMonToP?= =?UTF-8?q?C=20instead=20"SendMonToPC"=20implies=20that=20the=20Pok=C3=A9m?= =?UTF-8?q?on=20affected=20is=20actually=20sent=20over=20to=20the=20PC,=20?= =?UTF-8?q?but=20in=20reality=20the=20function=20simply=20copies=20the=20d?= =?UTF-8?q?ata=20of=20the=20Pok=C3=A9mon=20and=20then=20pastes=20it=20in?= =?UTF-8?q?=20the=20first=20available=20slot=20of=20the=20Pok=C3=A9mon=20S?= =?UTF-8?q?torage=20System.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pokemon.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pokemon.c b/src/pokemon.c index 3925d77fe3..d3a570e72f 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -70,7 +70,7 @@ static void Task_PlayMapChosenOrBattleBGM(u8 taskId); static bool8 ShouldGetStatBadgeBoost(u16 flagId, u8 battlerId); static u16 GiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move); static bool8 ShouldSkipFriendshipChange(void); -static u8 SendMonToPC(struct Pokemon *mon); +static u8 CopyMonToPC(struct Pokemon *mon); EWRAM_DATA static u8 sLearningMoveTableID = 0; EWRAM_DATA u8 gPlayerPartyCount = 0; @@ -4405,14 +4405,14 @@ u8 GiveMonToPlayer(struct Pokemon *mon) } if (i >= PARTY_SIZE) - return SendMonToPC(mon); + return CopyMonToPC(mon); CopyMon(&gPlayerParty[i], mon, sizeof(*mon)); gPlayerPartyCount = i + 1; return MON_GIVEN_TO_PARTY; } -static u8 SendMonToPC(struct Pokemon *mon) +static u8 CopyMonToPC(struct Pokemon *mon) { s32 boxNo, boxPos; From 3122d744f535194e4e9747a6c0be8e457764f98b Mon Sep 17 00:00:00 2001 From: kaboissonneault Date: Thu, 2 Nov 2023 09:48:13 -0400 Subject: [PATCH 073/120] Added BUGFIX for "dual non-immunity" glitch. In certain AI script commands, the call to TypeCalc does not assign effectiveness flags properly, resulting in the check for immunity always failing --- src/battle_ai_script_commands.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c index 9a63031dd2..8bb76705ec 100644 --- a/src/battle_ai_script_commands.c +++ b/src/battle_ai_script_commands.c @@ -1484,7 +1484,13 @@ static void Cmd_get_highest_type_effectiveness(void) if (gCurrentMove != MOVE_NONE) { + // TypeCalc does not assign to gMoveResultFlags, Cmd_TypeCalc does + // This makes the check for gMoveResultFlags below always fail +#ifdef BUGFIX + gMoveResultFlags = TypeCalc(gCurrentMove, sBattler_AI, gBattlerTarget); +#else TypeCalc(gCurrentMove, sBattler_AI, gBattlerTarget); +#endif if (gBattleMoveDamage == 120) // Super effective STAB. gBattleMoveDamage = AI_EFFECTIVENESS_x2; @@ -1519,7 +1525,16 @@ static void Cmd_if_type_effectiveness(void) gBattleMoveDamage = AI_EFFECTIVENESS_x1; gCurrentMove = AI_THINKING_STRUCT->moveConsidered; + // TypeCalc does not assign to gMoveResultFlags, Cmd_TypeCalc does + // This makes the check for gMoveResultFlags below always fail + // This is how you get the "dual non-immunity" glitch, where AI + // will use ineffective moves on immune pokémon if the second type + // has a non-neutral, non-immune effectiveness +#ifdef BUGFIX + gMoveResultFlags = TypeCalc(gCurrentMove, sBattler_AI, gBattlerTarget); +#else TypeCalc(gCurrentMove, sBattler_AI, gBattlerTarget); +#endif if (gBattleMoveDamage == 120) // Super effective STAB. gBattleMoveDamage = AI_EFFECTIVENESS_x2; From 5ddf3e2ee514cfd9250e68772c8a19ee2e8fb21d Mon Sep 17 00:00:00 2001 From: kaboissonneault Date: Thu, 2 Nov 2023 11:17:57 -0400 Subject: [PATCH 074/120] Fixed casing in comment on "dual non-immunity" glitch --- src/battle_ai_script_commands.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c index 8bb76705ec..d8a9760ff2 100644 --- a/src/battle_ai_script_commands.c +++ b/src/battle_ai_script_commands.c @@ -1484,7 +1484,7 @@ static void Cmd_get_highest_type_effectiveness(void) if (gCurrentMove != MOVE_NONE) { - // TypeCalc does not assign to gMoveResultFlags, Cmd_TypeCalc does + // TypeCalc does not assign to gMoveResultFlags, Cmd_typecalc does // This makes the check for gMoveResultFlags below always fail #ifdef BUGFIX gMoveResultFlags = TypeCalc(gCurrentMove, sBattler_AI, gBattlerTarget); @@ -1525,7 +1525,7 @@ static void Cmd_if_type_effectiveness(void) gBattleMoveDamage = AI_EFFECTIVENESS_x1; gCurrentMove = AI_THINKING_STRUCT->moveConsidered; - // TypeCalc does not assign to gMoveResultFlags, Cmd_TypeCalc does + // TypeCalc does not assign to gMoveResultFlags, Cmd_typecalc does // This makes the check for gMoveResultFlags below always fail // This is how you get the "dual non-immunity" glitch, where AI // will use ineffective moves on immune pokémon if the second type From a093e402d554816595d606eb8a575a0f701a69fd Mon Sep 17 00:00:00 2001 From: quocmanh94 Date: Fri, 3 Nov 2023 12:50:47 +0700 Subject: [PATCH 075/120] Delete the redundant files generated after running build --- Makefile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 7476a9dc31..5c073b36ca 100644 --- a/Makefile +++ b/Makefile @@ -236,8 +236,7 @@ clean-tools: @$(foreach tooldir,$(TOOLDIRS),$(MAKE) clean -C $(tooldir);) mostlyclean: tidynonmodern tidymodern - rm -f $(SAMPLE_SUBDIR)/*.bin - rm -f $(CRY_SUBDIR)/*.bin + find sound -iname '*.bin' -exec rm {} + rm -f $(MID_SUBDIR)/*.s find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' -o -iname '*.rl' -o -iname '*.latfont' -o -iname '*.hwjpnfont' -o -iname '*.fwjpnfont' \) -exec rm {} + rm -f $(DATA_ASM_SUBDIR)/layouts/layouts.inc $(DATA_ASM_SUBDIR)/layouts/layouts_table.inc From 81f397360e391507534b154e4f976c2b99c09731 Mon Sep 17 00:00:00 2001 From: Icedude907 <34080011+Icedude907@users.noreply.github.com> Date: Sun, 12 Nov 2023 14:28:11 +1300 Subject: [PATCH 076/120] Moved files - spinda spots, jp fonts, redyellowgreen_frame.bin --- ..._female_font.png => japanese_frlg_female.png} | Bin ...frlg_male_font.png => japanese_frlg_male.png} | Bin .../spinda/spots}/spot_0.png | Bin .../spinda/spots}/spot_1.png | Bin .../spinda/spots}/spot_2.png | Bin .../spinda/spots}/spot_3.png | Bin graphics/unused/.gitignore | 1 + graphics/unused/redyellowgreen_frame.bin | Bin 8192 -> 0 bytes graphics_file_rules.mk | 6 +++--- src/pokemon.c | 8 ++++---- 10 files changed, 8 insertions(+), 7 deletions(-) rename graphics/fonts/{japanese_frlg_female_font.png => japanese_frlg_female.png} (100%) rename graphics/fonts/{japanese_frlg_male_font.png => japanese_frlg_male.png} (100%) rename graphics/{spinda_spots => pokemon/spinda/spots}/spot_0.png (100%) rename graphics/{spinda_spots => pokemon/spinda/spots}/spot_1.png (100%) rename graphics/{spinda_spots => pokemon/spinda/spots}/spot_2.png (100%) rename graphics/{spinda_spots => pokemon/spinda/spots}/spot_3.png (100%) create mode 100644 graphics/unused/.gitignore delete mode 100644 graphics/unused/redyellowgreen_frame.bin diff --git a/graphics/fonts/japanese_frlg_female_font.png b/graphics/fonts/japanese_frlg_female.png similarity index 100% rename from graphics/fonts/japanese_frlg_female_font.png rename to graphics/fonts/japanese_frlg_female.png diff --git a/graphics/fonts/japanese_frlg_male_font.png b/graphics/fonts/japanese_frlg_male.png similarity index 100% rename from graphics/fonts/japanese_frlg_male_font.png rename to graphics/fonts/japanese_frlg_male.png diff --git a/graphics/spinda_spots/spot_0.png b/graphics/pokemon/spinda/spots/spot_0.png similarity index 100% rename from graphics/spinda_spots/spot_0.png rename to graphics/pokemon/spinda/spots/spot_0.png diff --git a/graphics/spinda_spots/spot_1.png b/graphics/pokemon/spinda/spots/spot_1.png similarity index 100% rename from graphics/spinda_spots/spot_1.png rename to graphics/pokemon/spinda/spots/spot_1.png diff --git a/graphics/spinda_spots/spot_2.png b/graphics/pokemon/spinda/spots/spot_2.png similarity index 100% rename from graphics/spinda_spots/spot_2.png rename to graphics/pokemon/spinda/spots/spot_2.png diff --git a/graphics/spinda_spots/spot_3.png b/graphics/pokemon/spinda/spots/spot_3.png similarity index 100% rename from graphics/spinda_spots/spot_3.png rename to graphics/pokemon/spinda/spots/spot_3.png diff --git a/graphics/unused/.gitignore b/graphics/unused/.gitignore new file mode 100644 index 0000000000..b929a6cae7 --- /dev/null +++ b/graphics/unused/.gitignore @@ -0,0 +1 @@ +redyellowgreen_frame.bin \ No newline at end of file diff --git a/graphics/unused/redyellowgreen_frame.bin b/graphics/unused/redyellowgreen_frame.bin deleted file mode 100644 index 6852998fb85d057fa16a892b867f0343b6764ec7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8192 zcmeI!+X{m)5CqV9D7fD5|NpC{Hc%{3u4D}*?zg_@9F)gu3!3ct5E`l3oKZj+Ni*e z*{PlGf6B{`3;g%`S!{J`qyJBO|M=|B;PapAPd{#Ilz;>zAOQ(TKmrnwz)c0-iL^Nf diff --git a/graphics_file_rules.mk b/graphics_file_rules.mk index 090620ebe8..92cc3338dc 100644 --- a/graphics_file_rules.mk +++ b/graphics_file_rules.mk @@ -21,7 +21,7 @@ JPCONTESTGFXDIR := graphics/contest/japanese POKEDEXGFXDIR := graphics/pokedex STARTERGFXDIR := graphics/starter_choose NAMINGGFXDIR := graphics/naming_screen -SPINDAGFXDIR := graphics/spinda_spots +SPINDAGFXDIR := graphics/pokemon/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 @@ -290,10 +290,10 @@ $(FONTGFXDIR)/short.fwjpnfont: $(FONTGFXDIR)/japanese_short.png $(FONTGFXDIR)/braille.fwjpnfont: $(FONTGFXDIR)/braille.png $(GFX) $< $@ -$(FONTGFXDIR)/frlg_male.fwjpnfont: $(FONTGFXDIR)/japanese_frlg_male_font.png +$(FONTGFXDIR)/frlg_male.fwjpnfont: $(FONTGFXDIR)/japanese_frlg_male.png $(GFX) $< $@ -$(FONTGFXDIR)/frlg_female.fwjpnfont: $(FONTGFXDIR)/japanese_frlg_female_font.png +$(FONTGFXDIR)/frlg_female.fwjpnfont: $(FONTGFXDIR)/japanese_frlg_female.png $(GFX) $< $@ diff --git a/src/pokemon.c b/src/pokemon.c index d3a570e72f..6ee052fda5 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -1354,10 +1354,10 @@ static const u16 sHoennToNationalOrder[NUM_SPECIES - 1] = const struct SpindaSpot gSpindaSpotGraphics[] = { - {.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")} + {.x = 16, .y = 7, .image = INCBIN_U16("graphics/pokemon/spinda/spots/spot_0.1bpp")}, + {.x = 40, .y = 8, .image = INCBIN_U16("graphics/pokemon/spinda/spots/spot_1.1bpp")}, + {.x = 22, .y = 25, .image = INCBIN_U16("graphics/pokemon/spinda/spots/spot_2.1bpp")}, + {.x = 34, .y = 26, .image = INCBIN_U16("graphics/pokemon/spinda/spots/spot_3.1bpp")} }; #include "data/pokemon/item_effects.h" From a0bf504bc1364e15d7c60e1d8a043e6044376770 Mon Sep 17 00:00:00 2001 From: Icedude907 <34080011+Icedude907@users.noreply.github.com> Date: Sun, 12 Nov 2023 15:19:50 +1300 Subject: [PATCH 077/120] Linkerscript now tracks RAM/ROM usage --- .gitignore | 1 - Makefile | 9 ++- gflib/malloc.c | 3 + gflib/malloc.h | 3 +- ld_script.txt => ld_script.ld | 50 ++++++++--------- ld_script_modern.txt => ld_script_modern.ld | 61 ++++++++++----------- 6 files changed, 64 insertions(+), 63 deletions(-) rename ld_script.txt => ld_script.ld (99%) rename ld_script_modern.txt => ld_script_modern.ld (83%) diff --git a/.gitignore b/.gitignore index 082430d794..9fa431e143 100644 --- a/.gitignore +++ b/.gitignore @@ -21,7 +21,6 @@ sound/**/*.bin sound/songs/midi/*.s tools/agbcc *.map -*.ld *.bat *.dump *.sa* diff --git a/Makefile b/Makefile index 5c073b36ca..50953be79c 100644 --- a/Makefile +++ b/Makefile @@ -119,8 +119,6 @@ ifneq ($(MODERN),1) CPPFLAGS += -I tools/agbcc/include -I tools/agbcc -nostdinc -undef endif -LDFLAGS = -Map ../../$(MAP) - SHA1 := $(shell { command -v sha1sum || command -v shasum; } 2>/dev/null) -c GFX := tools/gbagfx/gbagfx$(EXE) AIF := tools/aif2pcm/aif2pcm$(EXE) @@ -406,19 +404,20 @@ $(OBJ_DIR)/sym_ewram.ld: sym_ewram.txt $(RAMSCRGEN) ewram_data $< ENGLISH > $@ ifeq ($(MODERN),0) -LD_SCRIPT := ld_script.txt +LD_SCRIPT := ld_script.ld LD_SCRIPT_DEPS := $(OBJ_DIR)/sym_bss.ld $(OBJ_DIR)/sym_common.ld $(OBJ_DIR)/sym_ewram.ld else -LD_SCRIPT := ld_script_modern.txt +LD_SCRIPT := ld_script_modern.ld LD_SCRIPT_DEPS := endif $(OBJ_DIR)/ld_script.ld: $(LD_SCRIPT) $(LD_SCRIPT_DEPS) cd $(OBJ_DIR) && sed "s#tools/#../../tools/#g" ../../$(LD_SCRIPT) > ld_script.ld +LDFLAGS = -Map ../../$(MAP) $(ELF): $(OBJ_DIR)/ld_script.ld $(OBJS) libagbsyscall @echo "cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ " - @cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ $(OBJS_REL) $(LIB) + @cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld --print-memory-usage -o ../../$@ $(OBJS_REL) $(LIB) | cat $(FIX) $@ -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) --silent $(ROM): $(ELF) diff --git a/gflib/malloc.c b/gflib/malloc.c index d0b9497635..7229c20e8b 100644 --- a/gflib/malloc.c +++ b/gflib/malloc.c @@ -1,8 +1,11 @@ #include "global.h" +#include "malloc.h" static void *sHeapStart; static u32 sHeapSize; +__attribute__((section("__EWRAM_HEAP"))) u8 gHeap[HEAP_SIZE] = {0}; + #define MALLOC_SYSTEM_ID 0xA3A3 struct MemBlock { diff --git a/gflib/malloc.h b/gflib/malloc.h index 851db83a62..2792ff1cb7 100644 --- a/gflib/malloc.h +++ b/gflib/malloc.h @@ -1,7 +1,6 @@ #ifndef GUARD_ALLOC_H #define GUARD_ALLOC_H -#define HEAP_SIZE 0x1C000 #define FREE_AND_SET_NULL(ptr) \ { \ @@ -11,6 +10,8 @@ #define TRY_FREE_AND_SET_NULL(ptr) if (ptr != NULL) FREE_AND_SET_NULL(ptr) +// 122 KB. Max size of the heap without running into other data +#define HEAP_SIZE 0x1C000 extern u8 gHeap[]; void *Alloc(u32 size); diff --git a/ld_script.txt b/ld_script.ld similarity index 99% rename from ld_script.txt rename to ld_script.ld index 4be5965240..ee0556d5a0 100644 --- a/ld_script.txt +++ b/ld_script.ld @@ -3,6 +3,13 @@ ENTRY(Start) gNumMusicPlayers = 4; gMaxLines = 0; +MEMORY +{ + EWRAM (rwx) : ORIGIN = 0x2000000, LENGTH = 256K + IWRAM (rwx) : ORIGIN = 0x3000000, LENGTH = 32K + ROM (rx) : ORIGIN = 0x8000000, LENGTH = 16M +} + /* Modify the following load addresses as needed to make more room. Alternately, delete both the declarations below and their references further down to get rid of the gaps. */ @@ -10,28 +17,22 @@ __anim_mon_load_address = 0x8b00000; __gfx_load_address = 0x8c00000; SECTIONS { - . = 0x2000000; - ewram (NOLOAD) : + ewram 0x2000000 (NOLOAD) : ALIGN(4) { - gHeap = .; - - . = 0x1C000; + *(__EWRAM_HEAP); 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); *libc.a:mallocr.o(.data); - . = 0x40000; - } + } > EWRAM - . = 0x3000000; - - iwram (NOLOAD) : + iwram 0x3000000 (NOLOAD) : ALIGN(4) { /* .bss starts at 0x3000000 */ @@ -46,10 +47,9 @@ SECTIONS { /* COMMON starts at 0x30022A8 */ INCLUDE "sym_common.ld" *libc.a:sbrkr.o(COMMON); - end = .; - . = 0x8000; - } + } > IWRAM + /* BEGIN ROM DATA */ . = 0x8000000; .text : @@ -343,7 +343,7 @@ SECTIONS { src/gym_leader_rematch.o(.text); src/battle_transition_frontier.o(.text); src/international_string_util.o(.text); - } =0 + } > ROM =0 script_data : ALIGN(4) @@ -356,7 +356,7 @@ SECTIONS { data/battle_ai_scripts.o(script_data); data/contest_ai_scripts.o(script_data); data/mystery_event_script_cmd_table.o(script_data); - } =0 + } > ROM =0 lib_text : ALIGN(4) @@ -440,7 +440,7 @@ SECTIONS { *libc.a:libcfunc.o(.text); *libc.a:lseekr.o(.text); *libc.a:readr.o(.text); - } =0 + } > ROM =0 .rodata : ALIGN(4) @@ -705,7 +705,7 @@ SECTIONS { data/mystery_gift.o(.rodata); src/m4a_tables.o(.rodata); data/sound_data.o(.rodata); - } =0 + } > ROM =0 song_data : ALIGN(4) @@ -1240,7 +1240,7 @@ SECTIONS { sound/songs/midi/ph_nurse_blend.o(.rodata); sound/songs/midi/ph_nurse_held.o(.rodata); sound/songs/midi/ph_nurse_solo.o(.rodata); - } =0 + } > ROM =0 lib_rodata : SUBALIGN(4) @@ -1293,7 +1293,7 @@ SECTIONS { *libc.a:lseekr.o(.rodata); *libc.a:readr.o(.rodata); src/libisagbprn.o(.rodata); - } =0 + } > ROM =0 multiboot_data : ALIGN(4) @@ -1301,19 +1301,19 @@ SECTIONS { data/multiboot_ereader.o(.rodata); data/multiboot_berry_glitch_fix.o(.rodata); data/multiboot_pokemon_colosseum.o(.rodata); - } =0 + } > ROM =0 anim_mon_front_pic_data __anim_mon_load_address : ALIGN(4) { src/anim_mon_front_pics.o(.rodata); - } =0 + } > ROM =0 gfx_data __gfx_load_address : ALIGN(4) { src/graphics.o(.rodata); - } =0 + } > ROM =0 extra : ALIGN(4) @@ -1323,7 +1323,7 @@ SECTIONS { src/*.o(.rodata); gflib/*.o(.rodata); data/*.o(.rodata); - } = 0 + } > ROM = 0 /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning diff --git a/ld_script_modern.txt b/ld_script_modern.ld similarity index 83% rename from ld_script_modern.txt rename to ld_script_modern.ld index 549d040e1e..05b2b815ff 100644 --- a/ld_script_modern.txt +++ b/ld_script_modern.ld @@ -3,28 +3,28 @@ ENTRY(Start) gNumMusicPlayers = 4; gMaxLines = 0; -SECTIONS { - . = 0x2000000; - - ewram (NOLOAD) : - ALIGN(4) - { - gHeap = .; - - . = 0x1C000; - - src/*.o(ewram_data); - gflib/*.o(ewram_data); - - . = 0x40000; +/* Memory Spaces */ +MEMORY +{ + EWRAM (rwx) : ORIGIN = 0x2000000, LENGTH = 256K + IWRAM (rwx) : ORIGIN = 0x3000000, LENGTH = 32K + ROM (rx) : ORIGIN = 0x8000000, LENGTH = 16M } - . = 0x3000000; +SECTIONS { - iwram (NOLOAD) : + ewram 0x2000000 (NOLOAD) : + ALIGN(4) + { + *(__EWRAM_HEAP); + + src/*.o(ewram_data); /**/ + gflib/*.o(ewram_data); /**/ + } > EWRAM + + iwram 0x3000000 (NOLOAD) : ALIGN(4) { - /* .bss starts at 0x3000000 */ src/*.o(.bss); gflib/*.o(.bss); data/*.o(.bss); @@ -35,14 +35,13 @@ SECTIONS { src/m4a.o(.bss.code); /* COMMON starts at 0x30022A8 */ - src/*.o(COMMON); - gflib/*.o(COMMON); - *libc.a:*.o(COMMON); + src/*.o(COMMON); /**/ + gflib/*.o(COMMON); /**/ + *libc.a:*.o(COMMON); *libnosys.a:*.o(COMMON); - end = .; - . = 0x8000; - } + } > IWRAM + /* BEGIN ROM DATA */ . = 0x8000000; .text : @@ -55,13 +54,13 @@ SECTIONS { gflib/*.o(.text*); src/*.o(.text*); asm/*.o(.text*); - } =0 + } > ROM =0 script_data : ALIGN(4) { data/*.o(script_data); - } =0 + } > ROM =0 lib_text : ALIGN(4) @@ -82,7 +81,7 @@ SECTIONS { *libc.a:*.o(.text*); *libnosys.a:*.o(.text*); src/libisagbprn.o(.text); - } =0 + } > ROM =0 .rodata : ALIGN(4) @@ -90,13 +89,13 @@ SECTIONS { src/*.o(.rodata*); gflib/*.o(.rodata*); data/*.o(.rodata*); - } =0 + } > ROM =0 song_data : ALIGN(4) { sound/songs/*.o(.rodata); - } =0 + } > ROM =0 lib_rodata : SUBALIGN(4) @@ -121,19 +120,19 @@ SECTIONS { data/multiboot_ereader.o(.rodata); data/multiboot_berry_glitch_fix.o(.rodata); data/multiboot_pokemon_colosseum.o(.rodata); - } =0 + } > ROM =0 anim_mon_front_pic_data : ALIGN(4) { src/anim_mon_front_pics.o(.rodata); - } =0 + } > ROM =0 gfx_data : ALIGN(4) { src/graphics.o(.rodata); - } =0 + } > ROM =0 /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning From 190e77e9c886174e0edaecbe8bb44365e55bfebd Mon Sep 17 00:00:00 2001 From: SnorlaxMonster Date: Sat, 18 Nov 2023 12:53:00 +1100 Subject: [PATCH 078/120] Rename HITMARKER_IGNORE_SAFEGUARD Rename HITMARKER_IGNORE_SAFEGUARD to HITMARKER_STATUS_ABILITY_EFFECT. This flag is used exclusively by status-inflicting Abilities, and has 3 main functions: - Whether the effect bypasses Shield Dust - Whether the effect bypasses Safeguard - Which text string to display when the status condition is inflicted (i.e. whether it was inflicted by a move or Ability) I believe this new name better represents what the flag actually does. This name was structured to parallel HITMARKER_SYNCHRONISE_EFFECT. --- include/constants/battle.h | 2 +- src/battle_script_commands.c | 30 +++++++++++++++--------------- src/battle_util.c | 16 ++++++++-------- 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/include/constants/battle.h b/include/constants/battle.h index c4c1bc5e68..50c93083f8 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -176,7 +176,7 @@ #define HITMARKER_ATTACKSTRING_PRINTED (1 << 10) #define HITMARKER_NO_PPDEDUCT (1 << 11) #define HITMARKER_SWAP_ATTACKER_TARGET (1 << 12) -#define HITMARKER_IGNORE_SAFEGUARD (1 << 13) +#define HITMARKER_STATUS_ABILITY_EFFECT (1 << 13) #define HITMARKER_SYNCHRONISE_EFFECT (1 << 14) #define HITMARKER_RUN (1 << 15) #define HITMARKER_IGNORE_ON_AIR (1 << 16) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 96ae0e68a3..2bc8e73f43 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -2246,11 +2246,11 @@ void SetMoveEffect(bool8 primary, u8 certain) gBattleScripting.battler = gBattlerAttacker; } - if (gBattleMons[gEffectBattler].ability == ABILITY_SHIELD_DUST && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) + if (gBattleMons[gEffectBattler].ability == ABILITY_SHIELD_DUST && !(gHitMarker & HITMARKER_STATUS_ABILITY_EFFECT) && !primary && gBattleCommunication[MOVE_EFFECT_BYTE] <= 9) INCREMENT_RESET_RETURN - if (gSideStatuses[GET_BATTLER_SIDE(gEffectBattler)] & SIDE_STATUS_SAFEGUARD && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) + if (gSideStatuses[GET_BATTLER_SIDE(gEffectBattler)] & SIDE_STATUS_SAFEGUARD && !(gHitMarker & HITMARKER_STATUS_ABILITY_EFFECT) && !primary && gBattleCommunication[MOVE_EFFECT_BYTE] <= 7) INCREMENT_RESET_RETURN @@ -2300,10 +2300,10 @@ void SetMoveEffect(bool8 primary, u8 certain) BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_PSNPrevention; - if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) + if (gHitMarker & HITMARKER_STATUS_ABILITY_EFFECT) { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ABILITY_PREVENTS_ABILITY_STATUS; - gHitMarker &= ~HITMARKER_IGNORE_SAFEGUARD; + gHitMarker &= ~HITMARKER_STATUS_ABILITY_EFFECT; } else { @@ -2312,7 +2312,7 @@ void SetMoveEffect(bool8 primary, u8 certain) RESET_RETURN } if ((IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_POISON) || IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_STEEL)) - && (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) + && (gHitMarker & HITMARKER_STATUS_ABILITY_EFFECT) && (primary == TRUE || certain == MOVE_EFFECT_CERTAIN)) { BattleScriptPush(gBattlescriptCurrInstr + 1); @@ -2341,10 +2341,10 @@ void SetMoveEffect(bool8 primary, u8 certain) BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_BRNPrevention; - if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) + if (gHitMarker & HITMARKER_STATUS_ABILITY_EFFECT) { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ABILITY_PREVENTS_ABILITY_STATUS; - gHitMarker &= ~HITMARKER_IGNORE_SAFEGUARD; + gHitMarker &= ~HITMARKER_STATUS_ABILITY_EFFECT; } else { @@ -2353,7 +2353,7 @@ void SetMoveEffect(bool8 primary, u8 certain) RESET_RETURN } if (IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_FIRE) - && (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) + && (gHitMarker & HITMARKER_STATUS_ABILITY_EFFECT) && (primary == TRUE || certain == MOVE_EFFECT_CERTAIN)) { BattleScriptPush(gBattlescriptCurrInstr + 1); @@ -2397,10 +2397,10 @@ void SetMoveEffect(bool8 primary, u8 certain) BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_PRLZPrevention; - if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) + if (gHitMarker & HITMARKER_STATUS_ABILITY_EFFECT) { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ABILITY_PREVENTS_ABILITY_STATUS; - gHitMarker &= ~HITMARKER_IGNORE_SAFEGUARD; + gHitMarker &= ~HITMARKER_STATUS_ABILITY_EFFECT; } else { @@ -2425,10 +2425,10 @@ void SetMoveEffect(bool8 primary, u8 certain) BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_PSNPrevention; - if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) + if (gHitMarker & HITMARKER_STATUS_ABILITY_EFFECT) { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ABILITY_PREVENTS_ABILITY_STATUS; - gHitMarker &= ~HITMARKER_IGNORE_SAFEGUARD; + gHitMarker &= ~HITMARKER_STATUS_ABILITY_EFFECT; } else { @@ -2437,7 +2437,7 @@ void SetMoveEffect(bool8 primary, u8 certain) RESET_RETURN } if ((IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_POISON) || IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_STEEL)) - && (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) + && (gHitMarker & HITMARKER_STATUS_ABILITY_EFFECT) && (primary == TRUE || certain == MOVE_EFFECT_CERTAIN)) { BattleScriptPush(gBattlescriptCurrInstr + 1); @@ -2480,10 +2480,10 @@ void SetMoveEffect(bool8 primary, u8 certain) BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gEffectBattler].status1), &gBattleMons[gEffectBattler].status1); MarkBattlerForControllerExec(gActiveBattler); - if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) + if (gHitMarker & HITMARKER_STATUS_ABILITY_EFFECT) { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STATUSED_BY_ABILITY; - gHitMarker &= ~HITMARKER_IGNORE_SAFEGUARD; + gHitMarker &= ~HITMARKER_STATUS_ABILITY_EFFECT; } else { diff --git a/src/battle_util.c b/src/battle_util.c index 5a2b6392f0..735d1ba810 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -649,7 +649,7 @@ void HandleAction_NothingIsFainted(void) gCurrentTurnActionNumber++; gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber]; gHitMarker &= ~(HITMARKER_DESTINYBOND | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_ATTACKSTRING_PRINTED - | HITMARKER_NO_PPDEDUCT | HITMARKER_IGNORE_SAFEGUARD | HITMARKER_IGNORE_ON_AIR + | HITMARKER_NO_PPDEDUCT | HITMARKER_STATUS_ABILITY_EFFECT | HITMARKER_IGNORE_ON_AIR | HITMARKER_IGNORE_UNDERGROUND | HITMARKER_IGNORE_UNDERWATER | HITMARKER_PASSIVE_DAMAGE | HITMARKER_OBEYS | HITMARKER_WAKE_UP_CLEAR | HITMARKER_SYNCHRONISE_EFFECT | HITMARKER_CHARGING | HITMARKER_NEVER_SET); @@ -662,7 +662,7 @@ void HandleAction_ActionFinished(void) gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber]; SpecialStatusesClear(); gHitMarker &= ~(HITMARKER_DESTINYBOND | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_ATTACKSTRING_PRINTED - | HITMARKER_NO_PPDEDUCT | HITMARKER_IGNORE_SAFEGUARD | HITMARKER_IGNORE_ON_AIR + | HITMARKER_NO_PPDEDUCT | HITMARKER_STATUS_ABILITY_EFFECT | HITMARKER_IGNORE_ON_AIR | HITMARKER_IGNORE_UNDERGROUND | HITMARKER_IGNORE_UNDERWATER | HITMARKER_PASSIVE_DAMAGE | HITMARKER_OBEYS | HITMARKER_WAKE_UP_CLEAR | HITMARKER_SYNCHRONISE_EFFECT | HITMARKER_CHARGING | HITMARKER_NEVER_SET); @@ -2782,7 +2782,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA gBattleCommunication[MOVE_EFFECT_BYTE] += MOVE_EFFECT_AFFECTS_USER; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; - gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; + gHitMarker |= HITMARKER_STATUS_ABILITY_EFFECT; effect++; } break; @@ -2797,7 +2797,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_POISON; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; - gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; + gHitMarker |= HITMARKER_STATUS_ABILITY_EFFECT; effect++; } break; @@ -2812,7 +2812,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_PARALYSIS; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; - gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; + gHitMarker |= HITMARKER_STATUS_ABILITY_EFFECT; effect++; } break; @@ -2827,7 +2827,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_BURN; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; - gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; + gHitMarker |= HITMARKER_STATUS_ABILITY_EFFECT; effect++; } break; @@ -2963,7 +2963,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA gBattleScripting.battler = gBattlerTarget; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_SynchronizeActivates; - gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; + gHitMarker |= HITMARKER_STATUS_ABILITY_EFFECT; effect++; } break; @@ -2979,7 +2979,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA gBattleScripting.battler = gBattlerAttacker; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_SynchronizeActivates; - gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; + gHitMarker |= HITMARKER_STATUS_ABILITY_EFFECT; effect++; } break; From 2db9ab2a2f68f66383edde08b9d731002f9a9b33 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 16 Nov 2023 13:08:47 -0500 Subject: [PATCH 079/120] Document camera sprite functions --- include/event_object_movement.h | 10 +++- src/event_object_movement.c | 102 ++++++++++++++++---------------- src/field_camera.c | 4 +- src/field_effect.c | 28 ++++----- src/field_player_avatar.c | 6 +- 5 files changed, 78 insertions(+), 72 deletions(-) diff --git a/include/event_object_movement.h b/include/event_object_movement.h index 01269cdb5e..2a273b7991 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -71,6 +71,12 @@ enum ReflectionTypes #define GROUND_EFFECT_FLAG_HOT_SPRINGS (1 << 18) #define GROUND_EFFECT_FLAG_SEAWEED (1 << 19) +// Sprite data for the CameraObject functions +#define sCamera_FollowSpriteId data[0] +#define sCamera_State data[1] +#define sCamera_MoveX data[2] +#define sCamera_MoveY data[3] + struct StepAnimTable { const union AnimCmd *const *anims; @@ -123,7 +129,7 @@ u8 TrySpawnObjectEvent(u8 localId, u8 mapNum, u8 mapGroup); u8 SpawnSpecialObjectEventParameterized(u8 graphicsId, u8 movementBehavior, u8 localId, s16 x, s16 y, u8 elevation); u8 SpawnSpecialObjectEvent(struct ObjectEventTemplate *); void SetSpritePosToMapCoords(s16 mapX, s16 mapY, s16 *destX, s16 *destY); -void CameraObjectReset1(void); +void CameraObjectReset(void); void ObjectEventSetGraphicsId(struct ObjectEvent *, u8 graphicsId); void ObjectEventTurn(struct ObjectEvent *, u8 direction); void ObjectEventTurnByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup, u8 direction); @@ -211,7 +217,7 @@ u16 GetObjectPaletteTag(u8 palSlot); void UpdateObjectEventSpriteInvisibility(struct Sprite *sprite, bool8 invisible); s16 GetFigure8XOffset(s16 idx); s16 GetFigure8YOffset(s16 idx); -void CameraObjectReset2(void); +void CameraObjectFreeze(void); u8 GetObjectEventBerryTreeId(u8 objectEventId); void SetBerryTreeJustPicked(u8 mapId, u8 mapNumber, u8 mapGroup); bool8 IsBerryTreeSparkling(u8 localId, u8 mapNum, u8 mapGroup); diff --git a/src/event_object_movement.c b/src/event_object_movement.c index a181ea9f21..5a746579d4 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -144,9 +144,9 @@ static u8 FindObjectEventPaletteIndexByTag(u16); static void _PatchObjectPalette(u16, u8); static bool8 ObjectEventDoesElevationMatch(struct ObjectEvent *, u8); static void SpriteCB_CameraObject(struct Sprite *); -static void CameraObject_0(struct Sprite *); -static void CameraObject_1(struct Sprite *); -static void CameraObject_2(struct Sprite *); +static void CameraObject_Init(struct Sprite *); +static void CameraObject_UpdateMove(struct Sprite *); +static void CameraObject_UpdateFrozen(struct Sprite *); static const struct ObjectEventTemplate *FindObjectEventTemplateByLocalId(u8, const struct ObjectEventTemplate *, u8); static void ClearObjectEventMovement(struct ObjectEvent *, struct Sprite *); static void ObjectEventSetSingleMovement(struct ObjectEvent *, struct Sprite *, u8); @@ -193,10 +193,16 @@ static const struct SpriteTemplate sCameraSpriteTemplate = { .callback = SpriteCB_CameraObject }; +enum { + CAMERA_STATE_INIT, + CAMERA_STATE_MOVE, + CAMERA_STATE_FROZEN, +}; + static void (*const sCameraObjectFuncs[])(struct Sprite *) = { - CameraObject_0, - CameraObject_1, - CameraObject_2, + [CAMERA_STATE_INIT] = CameraObject_Init, + [CAMERA_STATE_MOVE] = CameraObject_UpdateMove, + [CAMERA_STATE_FROZEN] = CameraObject_UpdateFrozen, }; #include "data/object_events/object_event_graphics.h" @@ -1836,7 +1842,7 @@ void ObjectEventSetGraphicsId(struct ObjectEvent *objectEvent, u8 graphicsId) sprite->x += 8; sprite->y += 16 + sprite->centerToCornerVecY; if (objectEvent->trackedByCamera) - CameraObjectReset1(); + CameraObjectReset(); } void ObjectEventSetGraphicsIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup, u8 graphicsId) @@ -2128,7 +2134,7 @@ void MoveObjectEventToMapCoords(struct ObjectEvent *objectEvent, s16 x, s16 y) sprite->y += 16 + sprite->centerToCornerVecY; ResetObjectEventFldEffData(objectEvent); if (objectEvent->trackedByCamera) - CameraObjectReset1(); + CameraObjectReset(); } void TryMoveObjectEventToMapCoords(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y) @@ -2204,15 +2210,15 @@ void UpdateObjectEventsForCameraUpdate(s16 x, s16 y) RemoveObjectEventsOutsideView(); } -#define sLinkedSpriteId data[0] -#define sState data[1] - -u8 AddCameraObject(u8 linkedSpriteId) +// The "CameraObject" functions below are responsible for an invisible sprite +// that follows the movements of a different sprite (normally the player's sprite) +// and tracks x/y movement distances for the camera so it knows where to move. +u8 AddCameraObject(u8 followSpriteId) { u8 spriteId = CreateSprite(&sCameraSpriteTemplate, 0, 0, 4); gSprites[spriteId].invisible = TRUE; - gSprites[spriteId].sLinkedSpriteId = linkedSpriteId; + gSprites[spriteId].sCamera_FollowSpriteId = followSpriteId; return spriteId; } @@ -2221,35 +2227,37 @@ static void SpriteCB_CameraObject(struct Sprite *sprite) void (*callbacks[ARRAY_COUNT(sCameraObjectFuncs)])(struct Sprite *); memcpy(callbacks, sCameraObjectFuncs, sizeof sCameraObjectFuncs); - callbacks[sprite->sState](sprite); + callbacks[sprite->sCamera_State](sprite); } -static void CameraObject_0(struct Sprite *sprite) +static void CameraObject_Init(struct Sprite *sprite) { - sprite->x = gSprites[sprite->sLinkedSpriteId].x; - sprite->y = gSprites[sprite->sLinkedSpriteId].y; + sprite->x = gSprites[sprite->sCamera_FollowSpriteId].x; + sprite->y = gSprites[sprite->sCamera_FollowSpriteId].y; sprite->invisible = TRUE; - sprite->sState = 1; - CameraObject_1(sprite); + sprite->sCamera_State = CAMERA_STATE_MOVE; + CameraObject_UpdateMove(sprite); } -static void CameraObject_1(struct Sprite *sprite) +static void CameraObject_UpdateMove(struct Sprite *sprite) { - s16 x = gSprites[sprite->sLinkedSpriteId].x; - s16 y = gSprites[sprite->sLinkedSpriteId].y; + s16 x = gSprites[sprite->sCamera_FollowSpriteId].x; + s16 y = gSprites[sprite->sCamera_FollowSpriteId].y; - sprite->data[2] = x - sprite->x; - sprite->data[3] = y - sprite->y; + sprite->sCamera_MoveX = x - sprite->x; + sprite->sCamera_MoveY = y - sprite->y; sprite->x = x; sprite->y = y; } -static void CameraObject_2(struct Sprite *sprite) +// Invisible sprite will continue to follow the parent sprite, +// but no corresponding camera movement will be shown. +static void CameraObject_UpdateFrozen(struct Sprite *sprite) { - sprite->x = gSprites[sprite->sLinkedSpriteId].x; - sprite->y = gSprites[sprite->sLinkedSpriteId].y; - sprite->data[2] = 0; - sprite->data[3] = 0; + sprite->x = gSprites[sprite->sCamera_FollowSpriteId].x; + sprite->y = gSprites[sprite->sCamera_FollowSpriteId].y; + sprite->sCamera_MoveX = 0; + sprite->sCamera_MoveY = 0; } static struct Sprite *FindCameraSprite(void) @@ -2264,51 +2272,43 @@ static struct Sprite *FindCameraSprite(void) return NULL; } -void CameraObjectReset1(void) +void CameraObjectReset(void) { - struct Sprite *camera; - - camera = FindCameraSprite(); + struct Sprite *camera = FindCameraSprite(); if (camera != NULL) { - camera->sState = 0; + camera->sCamera_State = CAMERA_STATE_INIT; camera->callback(camera); } } void CameraObjectSetFollowedSpriteId(u8 spriteId) { - struct Sprite *camera; - - camera = FindCameraSprite(); + struct Sprite *camera = FindCameraSprite(); if (camera != NULL) { - camera->sLinkedSpriteId = spriteId; - CameraObjectReset1(); + camera->sCamera_FollowSpriteId = spriteId; + CameraObjectReset(); } } static u8 UNUSED CameraObjectGetFollowedSpriteId(void) { - struct Sprite *camera; - - camera = FindCameraSprite(); + struct Sprite *camera = FindCameraSprite(); if (camera == NULL) return MAX_SPRITES; - return camera->sLinkedSpriteId; + return camera->sCamera_FollowSpriteId; } -void CameraObjectReset2(void) +void CameraObjectFreeze(void) { - // UB: Possible null dereference -#ifdef UBFIX struct Sprite *camera = FindCameraSprite(); - if (camera) - camera->sState = 2; -#else - FindCameraSprite()->sState = 2; -#endif // UBFIX +#ifdef UBFIX // Possible null dereference + if (camera == NULL) + return; +#endif + camera->sCamera_State = CAMERA_STATE_FROZEN; } u8 CopySprite(struct Sprite *sprite, s16 x, s16 y, u8 subpriority) diff --git a/src/field_camera.c b/src/field_camera.c index 3f7e29208c..31ebc63c05 100644 --- a/src/field_camera.c +++ b/src/field_camera.c @@ -331,8 +331,8 @@ static void CameraUpdateCallback(struct CameraObject *fieldCamera) { if (fieldCamera->spriteId != 0) { - fieldCamera->movementSpeedX = gSprites[fieldCamera->spriteId].data[2]; - fieldCamera->movementSpeedY = gSprites[fieldCamera->spriteId].data[3]; + fieldCamera->movementSpeedX = gSprites[fieldCamera->spriteId].sCamera_MoveX; + fieldCamera->movementSpeedY = gSprites[fieldCamera->spriteId].sCamera_MoveY; } } diff --git a/src/field_effect.c b/src/field_effect.c index 86f1ca97d2..4c82d0f0c4 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -1444,7 +1444,7 @@ static bool8 FallWarpEffect_Init(struct Task *task) struct Sprite *playerSprite; playerObject = &gObjectEvents[gPlayerAvatar.objectEventId]; playerSprite = &gSprites[gPlayerAvatar.spriteId]; - CameraObjectReset2(); + CameraObjectFreeze(); gObjectEvents[gPlayerAvatar.objectEventId].invisible = TRUE; gPlayerAvatar.preventStep = TRUE; ObjectEventSetHeldMovement(playerObject, GetFaceDirectionMovementAction(GetPlayerFacingDirection())); @@ -1540,7 +1540,7 @@ static bool8 FallWarpEffect_End(struct Task *task) { gPlayerAvatar.preventStep = FALSE; UnlockPlayerFieldControls(); - CameraObjectReset1(); + CameraObjectReset(); UnfreezeObjectEvents(); InstallCameraPanAheadCallback(); DestroyTask(FindTaskIdByFunc(Task_FallWarpFieldEffect)); @@ -1579,7 +1579,7 @@ static void Task_EscalatorWarpOut(u8 taskId) static bool8 EscalatorWarpOut_Init(struct Task *task) { FreezeObjectEvents(); - CameraObjectReset2(); + CameraObjectFreeze(); StartEscalator(task->tGoingUp); task->tState++; return FALSE; @@ -1711,7 +1711,7 @@ static bool8 EscalatorWarpIn_Init(struct Task *task) s16 x; s16 y; u8 behavior; - CameraObjectReset2(); + CameraObjectFreeze(); objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(DIR_EAST)); PlayerGetDestCoords(&x, &y); @@ -1811,7 +1811,7 @@ static bool8 EscalatorWarpIn_End(struct Task *task) objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; if (ObjectEventClearHeldMovementIfFinished(objectEvent)) { - CameraObjectReset1(); + CameraObjectReset(); UnlockPlayerFieldControls(); ObjectEventSetHeldMovement(objectEvent, GetWalkNormalMovementAction(DIR_EAST)); DestroyTask(FindTaskIdByFunc(Task_EscalatorWarpIn)); @@ -1957,7 +1957,7 @@ static void Task_LavaridgeGymB1FWarp(u8 taskId) static bool8 LavaridgeGymB1FWarpEffect_Init(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { FreezeObjectEvents(); - CameraObjectReset2(); + CameraObjectFreeze(); SetCameraPanningCallback(NULL); gPlayerAvatar.preventStep = TRUE; objectEvent->fixedPriority = 1; @@ -2072,7 +2072,7 @@ static void Task_LavaridgeGymB1FWarpExit(u8 taskId) static bool8 LavaridgeGymB1FWarpExitEffect_Init(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { - CameraObjectReset2(); + CameraObjectFreeze(); FreezeObjectEvents(); gPlayerAvatar.preventStep = TRUE; objectEvent->invisible = TRUE; @@ -2101,7 +2101,7 @@ static bool8 LavaridgeGymB1FWarpExitEffect_PopOut(struct Task *task, struct Obje { task->data[0]++; objectEvent->invisible = FALSE; - CameraObjectReset1(); + CameraObjectReset(); PlaySE(SE_M_DIG); ObjectEventSetHeldMovement(objectEvent, GetJumpMovementAction(DIR_EAST)); } @@ -2150,7 +2150,7 @@ static void Task_LavaridgeGym1FWarp(u8 taskId) static bool8 LavaridgeGym1FWarpEffect_Init(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) { FreezeObjectEvents(); - CameraObjectReset2(); + CameraObjectFreeze(); gPlayerAvatar.preventStep = TRUE; objectEvent->fixedPriority = 1; task->data[0]++; @@ -2370,7 +2370,7 @@ static void TeleportWarpOutFieldEffect_Init(struct Task *task) { LockPlayerFieldControls(); FreezeObjectEvents(); - CameraObjectReset2(); + CameraObjectFreeze(); task->data[15] = GetPlayerFacingDirection(); task->tState++; } @@ -2452,7 +2452,7 @@ static void FieldCallback_TeleportWarpIn(void) FreezeObjectEvents(); gFieldCallback = NULL; gObjectEvents[gPlayerAvatar.objectEventId].invisible = TRUE; - CameraObjectReset2(); + CameraObjectFreeze(); CreateTask(Task_TeleportWarpIn, 0); } @@ -2536,7 +2536,7 @@ static void TeleportWarpInFieldEffect_SpinGround(struct Task *task) if ((++task->data[2]) > 4 && task->data[14] == objectEvent->facingDirection) { UnlockPlayerFieldControls(); - CameraObjectReset1(); + CameraObjectReset(); UnfreezeObjectEvents(); DestroyTask(FindTaskIdByFunc(Task_TeleportWarpIn)); } @@ -3268,7 +3268,7 @@ static void FlyOutFieldEffect_FlyOffWithBird(struct Task *task) objectEvent->inanimate = FALSE; objectEvent->hasShadow = FALSE; SetFlyBirdPlayerSpriteId(task->tBirdSpriteId, objectEvent->spriteId); - CameraObjectReset2(); + CameraObjectFreeze(); task->tState++; } } @@ -3483,7 +3483,7 @@ static void FlyInFieldEffect_BirdSwoopDown(struct Task *task) SetSurfBlob_BobState(objectEvent->fieldEffectSpriteId, BOB_NONE); } ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_SURFING)); - CameraObjectReset2(); + CameraObjectFreeze(); ObjectEventTurn(objectEvent, DIR_WEST); StartSpriteAnim(&gSprites[objectEvent->spriteId], ANIM_GET_ON_OFF_POKEMON_WEST); objectEvent->invisible = FALSE; diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index 5f4573c533..04aa5383bd 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -2093,7 +2093,7 @@ static void Task_DoPlayerSpinExit(u8 taskId) tSpeed = 1; tCurY = (u16)(sprite->y + sprite->y2) << 4; sprite->y2 = 0; - CameraObjectReset2(); + CameraObjectFreeze(); object->fixedPriority = TRUE; sprite->oam.priority = 0; sprite->subpriority = 0; @@ -2162,7 +2162,7 @@ static void Task_DoPlayerSpinEntrance(u8 taskId) tSubpriority = sprite->subpriority; tCurY = -((u16)sprite->y2 + 32) * 16; sprite->y2 = 0; - CameraObjectReset2(); + CameraObjectFreeze(); object->fixedPriority = TRUE; sprite->oam.priority = 1; sprite->subpriority = 0; @@ -2197,7 +2197,7 @@ static void Task_DoPlayerSpinEntrance(u8 taskId) object->fixedPriority = 0; sprite->oam.priority = tPriority; sprite->subpriority = tSubpriority; - CameraObjectReset1(); + CameraObjectReset(); DestroyTask(taskId); } break; From e5ac2a103ee301bbac1db281136b047192287362 Mon Sep 17 00:00:00 2001 From: Icedude907 <34080011+Icedude907@users.noreply.github.com> Date: Fri, 24 Nov 2023 10:13:50 +1300 Subject: [PATCH 080/120] Incorporate review changes --- gflib/malloc.c | 2 +- gflib/malloc.h | 3 +-- ld_script.ld | 8 +++----- ld_script_modern.ld | 17 ++++++----------- sym_ewram.txt | 1 + 5 files changed, 12 insertions(+), 19 deletions(-) diff --git a/gflib/malloc.c b/gflib/malloc.c index 7229c20e8b..f54c751a4c 100644 --- a/gflib/malloc.c +++ b/gflib/malloc.c @@ -4,7 +4,7 @@ static void *sHeapStart; static u32 sHeapSize; -__attribute__((section("__EWRAM_HEAP"))) u8 gHeap[HEAP_SIZE] = {0}; +EWRAM_DATA u8 gHeap[HEAP_SIZE] = {0}; #define MALLOC_SYSTEM_ID 0xA3A3 diff --git a/gflib/malloc.h b/gflib/malloc.h index 2792ff1cb7..72e1a5e1d3 100644 --- a/gflib/malloc.h +++ b/gflib/malloc.h @@ -10,9 +10,8 @@ #define TRY_FREE_AND_SET_NULL(ptr) if (ptr != NULL) FREE_AND_SET_NULL(ptr) -// 122 KB. Max size of the heap without running into other data #define HEAP_SIZE 0x1C000 -extern u8 gHeap[]; +extern u8 gHeap[HEAP_SIZE]; void *Alloc(u32 size); void *AllocZeroed(u32 size); diff --git a/ld_script.ld b/ld_script.ld index ee0556d5a0..c4abf075f8 100644 --- a/ld_script.ld +++ b/ld_script.ld @@ -7,7 +7,7 @@ MEMORY { EWRAM (rwx) : ORIGIN = 0x2000000, LENGTH = 256K IWRAM (rwx) : ORIGIN = 0x3000000, LENGTH = 32K - ROM (rx) : ORIGIN = 0x8000000, LENGTH = 16M + ROM (rx) : ORIGIN = 0x8000000, LENGTH = 32M } /* Modify the following load addresses as needed to make more room. Alternately, delete both the @@ -21,11 +21,9 @@ SECTIONS { ewram 0x2000000 (NOLOAD) : ALIGN(4) { - *(__EWRAM_HEAP); - 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); diff --git a/ld_script_modern.ld b/ld_script_modern.ld index 05b2b815ff..4ccbfbaa0f 100644 --- a/ld_script_modern.ld +++ b/ld_script_modern.ld @@ -3,12 +3,11 @@ ENTRY(Start) gNumMusicPlayers = 4; gMaxLines = 0; -/* Memory Spaces */ MEMORY { EWRAM (rwx) : ORIGIN = 0x2000000, LENGTH = 256K IWRAM (rwx) : ORIGIN = 0x3000000, LENGTH = 32K - ROM (rx) : ORIGIN = 0x8000000, LENGTH = 16M + ROM (rx) : ORIGIN = 0x8000000, LENGTH = 32M } SECTIONS { @@ -16,10 +15,8 @@ SECTIONS { ewram 0x2000000 (NOLOAD) : ALIGN(4) { - *(__EWRAM_HEAP); - - src/*.o(ewram_data); /**/ - gflib/*.o(ewram_data); /**/ + src/*.o(ewram_data); + gflib/*.o(ewram_data); } > EWRAM iwram 0x3000000 (NOLOAD) : @@ -31,13 +28,11 @@ SECTIONS { *libc.a:*.o(.bss*); *libnosys.a:*.o(.bss*); - /* .bss.code starts at 0x3001AA8 */ src/m4a.o(.bss.code); - /* COMMON starts at 0x30022A8 */ - src/*.o(COMMON); /**/ - gflib/*.o(COMMON); /**/ - *libc.a:*.o(COMMON); + src/*.o(COMMON); + gflib/*.o(COMMON); + *libc.a:*.o(COMMON); *libnosys.a:*.o(COMMON); } > IWRAM diff --git a/sym_ewram.txt b/sym_ewram.txt index 414b7a3b23..31c507ee9b 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -1,3 +1,4 @@ + .include "gflib/malloc.o" .include "src/decompress.o" .include "src/main.o" .include "gflib/window.o" From 05708ace88b4c5cf3e57b4b4aa4bcb6a7a11abe3 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Sat, 2 Dec 2023 12:11:22 -0300 Subject: [PATCH 081/120] Updated the size of the struct InGameTrade's otName variable --- src/trade.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/trade.c b/src/trade.c index 5728a6ee51..ec9486afa1 100644 --- a/src/trade.c +++ b/src/trade.c @@ -157,7 +157,7 @@ struct InGameTrade { u32 personality; u16 heldItem; u8 mailNum; - u8 otName[11]; + u8 otName[TRAINER_NAME_LENGTH + 1]; u8 otGender; u8 sheen; u16 requestedSpecies; From e5ac2fe0b152cb3b51b07ef36d562f1300936802 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Tue, 12 Dec 2023 19:02:36 +0100 Subject: [PATCH 082/120] Clean up pokemon/ball/dex mentions in comments --- include/battle.h | 6 ++-- include/constants/battle_palace.h | 4 +-- include/constants/field_specials.h | 2 +- include/constants/global.h | 4 +-- include/constants/items.h | 4 +-- include/constants/pokedex.h | 6 ++-- include/constants/pokemon.h | 12 +++---- include/constants/tv.h | 2 +- include/contest.h | 2 +- include/global.h | 4 +-- include/graphics.h | 8 ++--- include/pokemon_summary_screen.h | 2 +- include/strings.h | 6 ++-- src/battle_ai_script_commands.c | 8 ++--- src/battle_ai_switch_items.c | 6 ++-- src/battle_anim_mon_movement.c | 2 +- src/battle_anim_mons.c | 4 +-- 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 | 6 ++-- 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_dome.c | 16 ++++----- src/battle_factory.c | 8 ++--- src/battle_factory_screen.c | 34 +++++++++--------- src/battle_gfx_sfx_util.c | 6 ++-- src/battle_message.c | 4 +-- src/battle_pike.c | 2 +- src/battle_script_commands.c | 10 +++--- src/battle_setup.c | 4 +-- src/battle_tent.c | 4 +-- src/battle_tower.c | 36 +++++++++---------- src/battle_transition.c | 2 +- src/battle_tv.c | 2 +- src/battle_util.c | 10 +++--- src/birch_pc.c | 2 +- src/contest.c | 10 +++--- src/credits.c | 22 ++++++------ src/data/bard_music/bard_sounds.h | 4 +-- .../battle_frontier_trainer_mons.h | 2 +- src/data/party_menu.h | 6 ++-- src/data/pokemon/pokedex_orders.h | 2 +- src/daycare.c | 6 ++-- src/field_effect.c | 2 +- src/fldeff_misc.c | 2 +- src/frontier_util.c | 4 +-- src/graphics.c | 8 ++--- src/hall_of_fame.c | 2 +- src/lottery_corner.c | 2 +- src/move_relearner.c | 2 +- src/overworld.c | 6 ++-- src/party_menu.c | 6 ++-- src/pokeball.c | 6 ++-- src/pokedex.c | 8 ++--- src/pokemon.c | 2 +- src/pokemon_storage_system.c | 6 ++-- src/pokemon_summary_screen.c | 12 +++---- src/rom_header_gf.c | 2 +- src/roulette.c | 8 ++--- src/save_location.c | 4 +-- src/script_pokemon_util.c | 2 +- src/sound.c | 4 +-- src/start_menu.c | 2 +- src/starter_choose.c | 12 +++---- src/title_screen.c | 6 ++-- src/trade.c | 30 ++++++++-------- src/trainer_pokemon_sprites.c | 2 +- src/tv.c | 2 +- src/use_pokeblock.c | 12 +++---- src/wild_encounter.c | 8 ++--- 73 files changed, 228 insertions(+), 228 deletions(-) diff --git a/include/battle.h b/include/battle.h index 68beaf219f..6c4d780186 100644 --- a/include/battle.h +++ b/include/battle.h @@ -420,7 +420,7 @@ struct BattleStruct u8 arenaTurnCounter; u8 turnSideTracker; u8 unused_6[3]; - u8 givenExpMons; // Bits for enemy party's pokemon that gave exp to player's party. + u8 givenExpMons; // Bits for enemy party's Pokémon that gave exp to player's party. u8 lastTakenMoveFrom[MAX_BATTLERS_COUNT * MAX_BATTLERS_COUNT * 2]; // a 3-D array [target][attacker][byte] u16 castformPalette[NUM_CASTFORM_FORMS][16]; union { @@ -440,7 +440,7 @@ struct BattleStruct u16 arenaStartHp[2]; u8 arenaLostPlayerMons; // Bits for party member, lost as in referee's decision, not by fainting. u8 arenaLostOpponentMons; - u8 alreadyStatusedMoveAttempt; // As bits for battlers; For example when using Thunder Wave on an already paralyzed pokemon. + u8 alreadyStatusedMoveAttempt; // As bits for battlers; For example when using Thunder Wave on an already paralyzed Pokémon. }; // The palaceFlags member of struct BattleStruct contains 1 flag per move to indicate which moves the AI should consider, @@ -595,7 +595,7 @@ struct BattleSpriteData struct MonSpritesGfx { - void *firstDecompressed; // ptr to the decompressed sprite of the first pokemon + void *firstDecompressed; // ptr to the decompressed sprite of the first Pokémon union { void *ptr[MAX_BATTLERS_COUNT]; u8 *byte[MAX_BATTLERS_COUNT]; diff --git a/include/constants/battle_palace.h b/include/constants/battle_palace.h index 8516550892..1d8c2f2dda 100644 --- a/include/constants/battle_palace.h +++ b/include/constants/battle_palace.h @@ -16,12 +16,12 @@ #define PALACE_DATA_WIN_STREAK 1 #define PALACE_DATA_WIN_STREAK_ACTIVE 2 -// Pokemon in Battle Palace have a move "group" type preference depending on nature +// Pokémon in Battle Palace have a move "group" type preference depending on nature #define PALACE_MOVE_GROUP_ATTACK 0 #define PALACE_MOVE_GROUP_DEFENSE 1 #define PALACE_MOVE_GROUP_SUPPORT 2 -// In palace doubles battles pokemon have a target preference depending on nature +// In palace doubles battles Pokémon have a target preference depending on nature #define PALACE_TARGET_STRONGER 0 #define PALACE_TARGET_WEAKER 1 #define PALACE_TARGET_RANDOM 2 diff --git a/include/constants/field_specials.h b/include/constants/field_specials.h index 6659403313..1e08a47f95 100644 --- a/include/constants/field_specials.h +++ b/include/constants/field_specials.h @@ -62,7 +62,7 @@ #define DEPT_STORE_FLOORNUM_11F 14 #define DEPT_STORE_FLOORNUM_ROOFTOP 15 -// Lilycove Pokemon Trainer Fan Club +// Lilycove Pokémon Trainer Fan Club #define NUM_TRAINER_FAN_CLUB_MEMBERS 8 #define FANCLUB_GOT_FIRST_FANS 7 diff --git a/include/constants/global.h b/include/constants/global.h index 2b70378ff5..b409e80eb1 100644 --- a/include/constants/global.h +++ b/include/constants/global.h @@ -2,9 +2,9 @@ #define GUARD_CONSTANTS_GLOBAL_H // Invalid Versions show as "----------" in Gen 4 and Gen 5's summary screen. // In Gens 6 and 7, invalid versions instead show "a distant land" in the summary screen. -// In Gen 4 only, migrated Pokemon with Diamond, Pearl, or Platinum's ID show as "----------". +// In Gen 4 only, migrated Pokémon with Diamond, Pearl, or Platinum's ID show as "----------". // Gen 5 and up read Diamond, Pearl, or Platinum's ID as "Sinnoh". -// In Gen 4 and up, migrated Pokemon with HeartGold or SoulSilver's ID show the otherwise unused "Johto" string. +// In Gen 4 and up, migrated Pokémon with HeartGold or SoulSilver's ID show the otherwise unused "Johto" string. #define VERSION_SAPPHIRE 1 #define VERSION_RUBY 2 #define VERSION_EMERALD 3 diff --git a/include/constants/items.h b/include/constants/items.h index 63cbfe6b97..ed9bfb5ec8 100644 --- a/include/constants/items.h +++ b/include/constants/items.h @@ -23,7 +23,7 @@ #define FIRST_BALL ITEM_MASTER_BALL #define LAST_BALL ITEM_PREMIER_BALL -// Pokemon Items +// Pokémon Items #define ITEM_POTION 13 #define ITEM_ANTIDOTE 14 #define ITEM_BURN_HEAL 15 @@ -476,7 +476,7 @@ #define ITEM_B_USE_MEDICINE 1 #define ITEM_B_USE_OTHER 2 -// Check if the item is one that can be used on a Pokemon. +// Check if the item is one that can be used on a Pokémon. #define ITEM_HAS_EFFECT(item) ((item) >= ITEM_POTION && (item) <= MAX_BERRY_INDEX) #endif // GUARD_CONSTANTS_ITEMS_H diff --git a/include/constants/pokedex.h b/include/constants/pokedex.h index 7ee1b3760e..c9c51623e5 100644 --- a/include/constants/pokedex.h +++ b/include/constants/pokedex.h @@ -1,7 +1,7 @@ #ifndef GUARD_CONSTANTS_POKEDEX_H #define GUARD_CONSTANTS_POKEDEX_H -// National Pokedex order +// National Pokédex order enum { NATIONAL_DEX_NONE, // Kanto @@ -425,7 +425,7 @@ enum { #define JOHTO_DEX_COUNT NATIONAL_DEX_CELEBI #define NATIONAL_DEX_COUNT NATIONAL_DEX_DEOXYS -// Hoenn Pokedex order +// Hoenn Pokédex order enum { HOENN_DEX_NONE, HOENN_DEX_TREECKO, @@ -631,7 +631,7 @@ enum { HOENN_DEX_JIRACHI, HOENN_DEX_DEOXYS, // End of Hoenn Dex (see HOENN_DEX_COUNT) - // Here below have values but are excluded from the Pokedex + // Here below have values but are excluded from the Pokédex HOENN_DEX_BULBASAUR, HOENN_DEX_IVYSAUR, HOENN_DEX_VENUSAUR, diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index 6265c027aa..0d6a20e2b9 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -1,7 +1,7 @@ #ifndef GUARD_CONSTANTS_POKEMON_H #define GUARD_CONSTANTS_POKEMON_H -// Pokemon types +// Pokémon types #define TYPE_NONE 255 #define TYPE_NORMAL 0 #define TYPE_FIGHTING 1 @@ -23,7 +23,7 @@ #define TYPE_DARK 17 #define NUMBER_OF_MON_TYPES 18 -// Pokemon egg groups +// Pokémon egg groups #define EGG_GROUP_NONE 0 #define EGG_GROUP_MONSTER 1 #define EGG_GROUP_WATER_1 2 @@ -43,7 +43,7 @@ #define EGG_GROUPS_PER_MON 2 -// Pokemon natures +// Pokémon natures #define NATURE_HARDY 0 #define NATURE_LONELY 1 #define NATURE_BRAVE 2 @@ -71,7 +71,7 @@ #define NATURE_QUIRKY 24 #define NUM_NATURES 25 -// Pokemon Stats +// Pokémon Stats #define STAT_HP 0 #define STAT_ATK 1 #define STAT_DEF 2 @@ -220,7 +220,7 @@ #define GROWTH_FAST 4 #define GROWTH_SLOW 5 -// Body colors for pokedex search +// Body colors for Pokédex search #define BODY_COLOR_RED 0 #define BODY_COLOR_BLUE 1 #define BODY_COLOR_YELLOW 2 @@ -263,7 +263,7 @@ #define MON_PIC_HEIGHT 64 #define MON_PIC_SIZE (MON_PIC_WIDTH * MON_PIC_HEIGHT / 2) -// Most pokemon have 2 frames (a default and an alternate for their animation). +// Most Pokémon have 2 frames (a default and an alternate for their animation). // There are 4 exceptions: // - Castform has 4 frames, 1 for each form // - Deoxys has 2 frames, 1 for each form diff --git a/include/constants/tv.h b/include/constants/tv.h index 13ec88ecdc..1b629fb039 100644 --- a/include/constants/tv.h +++ b/include/constants/tv.h @@ -170,7 +170,7 @@ #define NUM_SECRET_BASE_FLAGS 32 // by definition, bitfield of 2 u16s -// TV Show states for Pokemon Contest Live Updates +// TV Show states for Pokémon Contest Live Updates #define CONTESTLIVE_STATE_INTRO 0 #define CONTESTLIVE_STATE_WON_BOTH_ROUNDS 1 #define CONTESTLIVE_STATE_BETTER_ROUND2 2 diff --git a/include/contest.h b/include/contest.h index d0630a8011..9328188b97 100644 --- a/include/contest.h +++ b/include/contest.h @@ -209,7 +209,7 @@ struct ContestantStatus u8 comboAppealBonus; u8 repeatJam; u8 nextTurnOrder; // turn position - u8 attentionLevel; // How much the Pokemon "stood out" + u8 attentionLevel; // How much the Pokémon "stood out" u8 contestantAnimTarget; }; diff --git a/include/global.h b/include/global.h index e6d58f36e0..1ea3b65d64 100644 --- a/include/global.h +++ b/include/global.h @@ -135,7 +135,7 @@ #define ROUND_BITS_TO_BYTES(numBits) DIV_ROUND_UP(numBits, 8) // NUM_DEX_FLAG_BYTES allocates more flags than it needs to, as NUM_SPECIES includes the "old unown" -// values that don't appear in the Pokedex. NATIONAL_DEX_COUNT does not include these values. +// values that don't appear in the Pokédex. NATIONAL_DEX_COUNT does not include these values. #define NUM_DEX_FLAG_BYTES ROUND_BITS_TO_BYTES(NUM_SPECIES) #define NUM_FLAG_BYTES ROUND_BITS_TO_BYTES(FLAGS_COUNT) #define NUM_TRENDY_SAYING_BYTES ROUND_BITS_TO_BYTES(NUM_TRENDY_SAYINGS) @@ -520,7 +520,7 @@ struct SaveBlock2 /*0x90*/ u8 filler_90[0x8]; /*0x98*/ struct Time localTimeOffset; /*0xA0*/ struct Time lastBerryTreeUpdate; - /*0xA8*/ u32 gcnLinkFlags; // Read by Pokemon Colosseum/XD + /*0xA8*/ u32 gcnLinkFlags; // Read by Pokémon Colosseum/XD /*0xAC*/ u32 encryptionKey; /*0xB0*/ struct PlayersApprentice playerApprentice; /*0xDC*/ struct Apprentice apprentices[APPRENTICE_COUNT]; diff --git a/include/graphics.h b/include/graphics.h index 5b13ab562f..e98b707957 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -32,7 +32,7 @@ extern const u32 gBallGfx_Premier[]; extern const u32 gBallPal_Premier[]; extern const u32 gOpenPokeballGfx[]; -// pokemon gfx +// Pokémon gfx extern const u32 gMonFrontPic_Bulbasaur[]; extern const u32 gMonPalette_Bulbasaur[]; extern const u32 gMonBackPic_Bulbasaur[]; @@ -3282,7 +3282,7 @@ extern const u32 gBattleTerrainPalette_StadiumGlacia[]; extern const u32 gBattleTerrainPalette_StadiumDrake[]; extern const u32 gBattleTerrainPalette_StadiumWallace[]; -// pokedex +// Pokédex extern const u32 gPokedexInterface_Gfx[]; extern const u16 gPokedexBgHoenn_Pal[]; extern const u32 gPokedexMenu_Gfx[]; @@ -4879,11 +4879,11 @@ extern const u16 gSlotMachineReelTimePikachu_Pal[]; extern const u32 gBattleAnimBgTilemap_Sandstorm[]; extern const u32 gBattleAnimBgImage_Sandstorm[]; -// Pokedex Area Screen +// Pokédex Area Screen extern const u32 gPokedexAreaScreenAreaUnknown_Gfx[]; extern const u16 gPokedexAreaScreenAreaUnknown_Pal[]; -// Pokemon Storage System +// Pokémon Storage System extern const u32 gStorageSystemMenu_Gfx[]; extern const u16 gStorageSystemPartyMenu_Pal[]; extern const u32 gStorageSystemPartyMenu_Tilemap[]; diff --git a/include/pokemon_summary_screen.h b/include/pokemon_summary_screen.h index b026baa533..df9e477524 100755 --- a/include/pokemon_summary_screen.h +++ b/include/pokemon_summary_screen.h @@ -14,7 +14,7 @@ void ShowPokemonSummaryScreenHandleDeoxys(u8 mode, struct BoxPokemon *mons, u8 m u8 GetMoveSlotToReplace(void); void SummaryScreen_SetAnimDelayTaskId(u8 taskId); -// The Pokemon Summary Screen can operate in different modes. Certain features, +// The Pokémon Summary Screen can operate in different modes. Certain features, // such as move re-ordering, are available in the different modes. enum PokemonSummaryScreenMode { diff --git a/include/strings.h b/include/strings.h index eeada2b943..914082779b 100644 --- a/include/strings.h +++ b/include/strings.h @@ -519,7 +519,7 @@ extern const u8 gText_Speed[]; extern const u8 gText_Dash[]; extern const u8 gText_Plus[]; -//pokedex text +//Pokédex text extern const u8 gText_CryOf[]; extern const u8 gText_SizeComparedTo[]; extern const u8 gText_PokedexRegistration[]; @@ -1121,7 +1121,7 @@ extern const u8 gTrickHouse_Mechadoll_Six2[]; extern const u8 gTrickHouse_Mechadoll_Seven2[]; extern const u8 gTrickHouse_Mechadoll_Eight2[]; -// Pokedex strings +// Pokédex strings extern const u8 gText_SearchForPkmnBasedOnParameters[]; extern const u8 gText_SwitchPokedexListings[]; extern const u8 gText_ReturnToPokedex[]; @@ -2874,7 +2874,7 @@ extern const u8 gText_WantToPlayAgain[]; extern const u8 gText_CommunicationStandby3[]; extern const u8 gText_SomeoneDroppedOut[]; -// Pokemon jump +// Pokémon jump extern const u8 gText_WantToPlayAgain2[]; extern const u8 gText_SomeoneDroppedOut2[]; extern const u8 gText_CommunicationStandby4[]; diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c index d8a9760ff2..4cb4c51654 100644 --- a/src/battle_ai_script_commands.c +++ b/src/battle_ai_script_commands.c @@ -1392,7 +1392,7 @@ static void Cmd_get_ability(void) } else { - AI_THINKING_STRUCT->funcResult = gSpeciesInfo[gBattleMons[battlerId].species].abilities[1]; // AI can't actually reach this part since no pokemon has ability 2 and no ability 1. + AI_THINKING_STRUCT->funcResult = gSpeciesInfo[gBattleMons[battlerId].species].abilities[1]; // AI can't actually reach this part since no Pokémon has ability 2 and no ability 1. } } else @@ -1445,7 +1445,7 @@ static void Cmd_check_ability(void) } else { - ability = gSpeciesInfo[gBattleMons[battlerId].species].abilities[1]; // AI can't actually reach this part since no pokemon has ability 2 and no ability 1. + ability = gSpeciesInfo[gBattleMons[battlerId].species].abilities[1]; // AI can't actually reach this part since no Pokémon has ability 2 and no ability 1. } } else @@ -1457,9 +1457,9 @@ static void Cmd_check_ability(void) if (ability == 0) AI_THINKING_STRUCT->funcResult = 2; // Unable to answer. else if (ability == gAIScriptPtr[2]) - AI_THINKING_STRUCT->funcResult = 1; // Pokemon has the ability we wanted to check. + AI_THINKING_STRUCT->funcResult = 1; // Pokémon has the ability we wanted to check. else - AI_THINKING_STRUCT->funcResult = 0; // Pokemon doesn't have the ability we wanted to check. + AI_THINKING_STRUCT->funcResult = 0; // Pokémon doesn't have the ability we wanted to check. gAIScriptPtr += 3; } diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 06cdd6c82f..5ef15b627a 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -51,7 +51,7 @@ static bool8 ShouldSwitchIfWonderGuard(void) if (gBattleMons[GetBattlerAtPosition(opposingPosition)].ability != ABILITY_WONDER_GUARD) return FALSE; - // Check if Pokemon has a super effective move. + // Check if Pokémon has a super effective move. for (opposingBattler = GetBattlerAtPosition(opposingPosition), i = 0; i < MAX_MON_MOVES; i++) { move = gBattleMons[gActiveBattler].moves[i]; @@ -81,7 +81,7 @@ static bool8 ShouldSwitchIfWonderGuard(void) else party = gEnemyParty; - // Find a Pokemon in the party that has a super effective move. + // Find a Pokémon in the party that has a super effective move. for (i = firstId; i < lastId; i++) { if (GetMonData(&party[i], MON_DATA_HP) == 0) @@ -113,7 +113,7 @@ static bool8 ShouldSwitchIfWonderGuard(void) } } - return FALSE; // There is not a single Pokemon in the party that has a super effective move against a mon with Wonder Guard. + return FALSE; // There is not a single Pokémon in the party that has a super effective move against a mon with Wonder Guard. } static bool8 FindMonThatAbsorbsOpponentsMove(void) diff --git a/src/battle_anim_mon_movement.c b/src/battle_anim_mon_movement.c index 247aba1a42..4c8e79cb9f 100644 --- a/src/battle_anim_mon_movement.c +++ b/src/battle_anim_mon_movement.c @@ -535,7 +535,7 @@ static void SlideMonToOriginalPos_Step(struct Sprite *sprite) } // Linearly translates a mon to a target offset. The horizontal offset -// is mirrored for the opponent's pokemon, and the vertical offset +// is mirrored for the opponent's Pokémon, and the vertical offset // is only mirrored if arg 3 is set to 1. // arg 0: 0 = attacker, 1 = target // arg 1: target x pixel offset diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c index 6dd0d20852..d28ec804fe 100644 --- a/src/battle_anim_mons.c +++ b/src/battle_anim_mons.c @@ -77,7 +77,7 @@ static const u8 sCastformBackSpriteYCoords[NUM_CASTFORM_FORMS] = [CASTFORM_ICE] = 0, }; -// Placeholders for pokemon sprites to be created for a move animation effect (e.g. Role Play / Snatch) +// Placeholders for Pokémon sprites to be created for a move animation effect (e.g. Role Play / Snatch) #define TAG_MOVE_EFFECT_MON_1 55125 #define TAG_MOVE_EFFECT_MON_2 55126 @@ -2085,7 +2085,7 @@ u8 GetBattlerSpriteBGPriorityRank(u8 battlerId) return 1; } -// Create pokemon sprite to be used for a move animation effect (e.g. Role Play / Snatch) +// Create Pokémon sprite to be used for a move animation effect (e.g. Role Play / Snatch) u8 CreateAdditionalMonSpriteForMoveAnim(u16 species, bool8 isBackpic, u8 id, s16 x, s16 y, u8 subpriority, u32 personality, u32 trainerId, u32 battlerId, bool32 ignoreDeoxysForm) { u8 spriteId; diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c index 2104298775..236db2a428 100644 --- a/src/battle_controller_link_opponent.c +++ b/src/battle_controller_link_opponent.c @@ -529,7 +529,7 @@ static void LinkOpponentBufferExecCompleted(void) static void LinkOpponentHandleGetMonData(void) { - u8 monData[sizeof(struct Pokemon) * 2 + 56]; // this allows to get full data of two pokemon, trying to get more will result in overwriting data + u8 monData[sizeof(struct Pokemon) * 2 + 56]; // this allows to get full data of two Pokémon, trying to get more will result in overwriting data u32 size = 0; u8 monToCheck; s32 i; diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c index 054563ad3a..7a437b958c 100644 --- a/src/battle_controller_link_partner.c +++ b/src/battle_controller_link_partner.c @@ -423,7 +423,7 @@ static void CompleteOnFinishedBattleAnimation(void) static void LinkPartnerHandleGetMonData(void) { - u8 monData[sizeof(struct Pokemon) * 2 + 56]; // this allows to get full data of two pokemon, trying to get more will result in overwriting data + u8 monData[sizeof(struct Pokemon) * 2 + 56]; // this allows to get full data of two Pokémon, trying to get more will result in overwriting data u32 size = 0; u8 monToCheck; s32 i; diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index e434e3ee62..e5284f9abc 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -534,7 +534,7 @@ static void OpponentBufferExecCompleted(void) static void OpponentHandleGetMonData(void) { - u8 monData[sizeof(struct Pokemon) * 2 + 56]; // this allows to get full data of two pokemon, trying to get more will result in overwriting data + u8 monData[sizeof(struct Pokemon) * 2 + 56]; // this allows to get full data of two Pokémon, trying to get more will result in overwriting data u32 size = 0; u8 monToCheck; s32 i; diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 357912d4b6..8e09d126c9 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -981,12 +981,12 @@ static void Intro_TryShinyAnimShowHealthbox(void) bool32 bgmRestored = FALSE; bool32 battlerAnimsDone = FALSE; - // Start shiny animation if applicable for 1st pokemon + // Start shiny animation if applicable for 1st Pokémon if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]); - // Start shiny animation if applicable for 2nd pokemon + // Start shiny animation if applicable for 2nd Pokémon if (!gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].triedShinyMonAnim && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(gActiveBattler)].ballAnimActive) TryShinyAnimation(BATTLE_PARTNER(gActiveBattler), &gPlayerParty[gBattlerPartyIndexes[BATTLE_PARTNER(gActiveBattler)]]); @@ -1581,7 +1581,7 @@ static void PrintLinkStandbyMsg(void) static void PlayerHandleGetMonData(void) { - u8 monData[sizeof(struct Pokemon) * 2 + 56]; // this allows to get full data of two pokemon, trying to get more will result in overwriting data + u8 monData[sizeof(struct Pokemon) * 2 + 56]; // this allows to get full data of two Pokémon, trying to get more will result in overwriting data u32 size = 0; u8 monToCheck; s32 i; diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c index 236a66ce83..307eeca26a 100644 --- a/src/battle_controller_player_partner.c +++ b/src/battle_controller_player_partner.c @@ -607,7 +607,7 @@ static void CompleteOnFinishedBattleAnimation(void) static void PlayerPartnerHandleGetMonData(void) { - u8 monData[sizeof(struct Pokemon) * 2 + 56]; // this allows to get full data of two pokemon, trying to get more will result in overwriting data + u8 monData[sizeof(struct Pokemon) * 2 + 56]; // this allows to get full data of two Pokémon, trying to get more will result in overwriting data u32 size = 0; u8 monToCheck; s32 i; diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c index 9c37cd0a92..7cb5839bc5 100644 --- a/src/battle_controller_recorded_opponent.c +++ b/src/battle_controller_recorded_opponent.c @@ -515,7 +515,7 @@ static void RecordedOpponentBufferExecCompleted(void) static void RecordedOpponentHandleGetMonData(void) { - u8 monData[sizeof(struct Pokemon) * 2 + 56]; // this allows to get full data of two pokemon, trying to get more will result in overwriting data + u8 monData[sizeof(struct Pokemon) * 2 + 56]; // this allows to get full data of two Pokémon, trying to get more will result in overwriting data u32 size = 0; u8 monToCheck; s32 i; diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c index 591ddb67e3..5a7be7f347 100644 --- a/src/battle_controller_recorded_player.c +++ b/src/battle_controller_recorded_player.c @@ -498,7 +498,7 @@ static void CompleteOnFinishedBattleAnimation(void) static void RecordedPlayerHandleGetMonData(void) { - u8 monData[sizeof(struct Pokemon) * 2 + 56]; // this allows to get full data of two pokemon, trying to get more will result in overwriting data + u8 monData[sizeof(struct Pokemon) * 2 + 56]; // this allows to get full data of two Pokémon, trying to get more will result in overwriting data u32 size = 0; u8 monToCheck; s32 i; diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c index ce357319a5..67950b8965 100644 --- a/src/battle_controller_wally.c +++ b/src/battle_controller_wally.c @@ -425,7 +425,7 @@ static void UNUSED CompleteOnFinishedStatusAnimation(void) static void WallyHandleGetMonData(void) { - u8 monData[sizeof(struct Pokemon) * 2 + 56]; // this allows to get full data of two pokemon, trying to get more will result in overwriting data + u8 monData[sizeof(struct Pokemon) * 2 + 56]; // this allows to get full data of two Pokémon, trying to get more will result in overwriting data u32 size = 0; u8 monToCheck; s32 i; diff --git a/src/battle_dome.c b/src/battle_dome.c index 8364515e59..68cae14a6e 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -2588,7 +2588,7 @@ static void CreateDomeOpponentMon(u8 monPartyId, u16 tournamentTrainerId, u8 tou #ifdef BUGFIX u8 fixedIv = GetDomeTrainerMonIvs(DOME_TRAINERS[tournamentTrainerId].trainerId); #else - u8 fixedIv = GetDomeTrainerMonIvs(tournamentTrainerId); // BUG: Using the wrong ID. As a result, all Pokemon have ivs of 3. + u8 fixedIv = GetDomeTrainerMonIvs(tournamentTrainerId); // BUG: Using the wrong ID. As a result, all Pokémon have ivs of 3. #endif u8 level = SetFacilityPtrsGetLevel(); CreateMonWithEVSpreadNatureOTID(&gEnemyParty[monPartyId], @@ -2650,13 +2650,13 @@ static void CreateDomeOpponentMons(u16 tournamentTrainerId) } } -// Returns a bitmask representing which 2 of the trainer's 3 pokemon to select. +// Returns a bitmask representing which 2 of the trainer's 3 Pokémon to select. // The choice is calculated solely depending on the type effectiveness of their -// movesets against the player's pokemon. +// movesets against the player's Pokémon. // There is a 50% chance of either a "good" or "bad" selection mode being used. // In the good mode movesets are preferred which are more effective against the -// player, and in the bad mode the opposite is true. If all 3 pokemon tie, the -// other mode will be tried. If they tie again, the pokemon selection is random. +// player, and in the bad mode the opposite is true. If all 3 Pokémon tie, the +// other mode will be tried. If they tie again, the Pokémon selection is random. int GetDomeTrainerSelectedMons(u16 tournamentTrainerId) { int selectedMonBits; @@ -4837,7 +4837,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) if (lost[1]) gSprites[sInfoCard->spriteIds[1 + arrId]].oam.paletteNum = 3; - // Draw left trainer's pokemon icons. + // Draw left trainer's Pokémon icons. for (i = 0; i < FRONTIER_PARTY_SIZE; i++) { if (trainerIds[0] == TRAINER_PLAYER) @@ -4877,7 +4877,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) } } - // Draw right trainer's pokemon icons. + // Draw right trainer's Pokémon icons. for (i = 0; i < FRONTIER_PARTY_SIZE; i++) { if (trainerIds[1] == TRAINER_PLAYER) @@ -5228,7 +5228,7 @@ static u16 GetWinningMove(int winnerTournamentId, int loserTournamentId, u8 roun int movePower = 0; SetFacilityPtrsGetLevel(); - // Calc move points of all 4 moves for all 3 pokemon hitting all 3 target mons. + // Calc move points of all 4 moves for all 3 Pokémon hitting all 3 target mons. for (i = 0; i < FRONTIER_PARTY_SIZE; i++) { for (j = 0; j < MAX_MON_MOVES; j++) diff --git a/src/battle_factory.c b/src/battle_factory.c index 0f4ed9816d..faed16ebb0 100644 --- a/src/battle_factory.c +++ b/src/battle_factory.c @@ -337,7 +337,7 @@ static void GenerateOpponentMons(void) if (gFacilityTrainerMons[monId].species == SPECIES_UNOWN) continue; - // Ensure none of the opponent's pokemon are the same as the potential rental pokemon for the player + // Ensure none of the opponent's Pokémon are the same as the potential rental Pokémon for the player for (j = 0; j < (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.rentalMons); j++) { if (gFacilityTrainerMons[monId].species == gFacilityTrainerMons[gSaveBlock2Ptr->frontier.rentalMons[j].monId].species) @@ -346,7 +346,7 @@ static void GenerateOpponentMons(void) if (j != (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.rentalMons)) continue; - // "High tier" pokemon are only allowed on open level mode + // "High tier" Pokémon are only allowed on open level mode if (lvlMode == FRONTIER_LVL_50 && monId > FRONTIER_MONS_HIGH_TIER) continue; @@ -554,7 +554,7 @@ static void GenerateInitialRentalMons(void) i = 0; while (i != PARTY_SIZE) { - if (i < rentalRank) // The more times the player has rented, the more initial rentals are generated from a better set of pokemon + if (i < rentalRank) // The more times the player has rented, the more initial rentals are generated from a better set of Pokémon monId = GetFactoryMonId(factoryLvlMode, challengeNum, TRUE); else monId = GetFactoryMonId(factoryLvlMode, challengeNum, FALSE); @@ -562,7 +562,7 @@ static void GenerateInitialRentalMons(void) if (gFacilityTrainerMons[monId].species == SPECIES_UNOWN) continue; - // Cannot have two pokemon of the same species. + // Cannot have two Pokémon of the same species. for (j = firstMonId; j < firstMonId + i; j++) { u16 existingMonId = monIds[j]; diff --git a/src/battle_factory_screen.c b/src/battle_factory_screen.c index a543e64c93..0533d1e2a3 100644 --- a/src/battle_factory_screen.c +++ b/src/battle_factory_screen.c @@ -32,15 +32,15 @@ #include "constants/songs.h" #include "constants/rgb.h" -// Select_ refers to the first Pokemon selection screen where you choose your initial 3 rental Pokemon. -// Swap_ refers to the subsequent selection screens where you can swap a Pokemon with one from the beaten trainer +// Select_ refers to the first Pokémon selection screen where you choose your initial 3 rental Pokémon. +// Swap_ refers to the subsequent selection screens where you can swap a Pokémon with one from the beaten trainer // Note that, generally, "Action" will refer to the immediate actions that can be taken on each screen, -// i.e. selecting a pokemon or selecting the Cancel button +// i.e. selecting a Pokémon or selecting the Cancel button // The "Options menu" will refer to the popup menu that shows when some actions have been selected -#define SWAP_PLAYER_SCREEN 0 // The screen where the player selects which of their pokemon to swap away -#define SWAP_ENEMY_SCREEN 1 // The screen where the player selects which new pokemon from the defeated party to swap for +#define SWAP_PLAYER_SCREEN 0 // The screen where the player selects which of their Pokémon to swap away +#define SWAP_ENEMY_SCREEN 1 // The screen where the player selects which new Pokémon from the defeated party to swap for #define SELECTABLE_MONS_COUNT 6 @@ -89,7 +89,7 @@ struct FactorySelectableMon { u16 monId; u16 ballSpriteId; - u8 selectedId; // 0 - not selected, 1 - first pokemon, 2 - second pokemon, 3 - third pokemon + u8 selectedId; // 0 - not selected, 1 - first Pokémon, 2 - second Pokémon, 3 - third Pokémon struct Pokemon monData; }; @@ -1060,7 +1060,7 @@ static void SpriteCB_Pokeball(struct Sprite *sprite) { if (sprite->oam.paletteNum == IndexOfSpritePaletteTag(PALTAG_BALL_SELECTED)) { - // Pokeball selected, do rocking animation + // Poké Ball selected, do rocking animation if (sprite->animEnded) { if (sprite->data[0] != 0) @@ -1084,7 +1084,7 @@ static void SpriteCB_Pokeball(struct Sprite *sprite) } else { - // Pokeball not selected, remain still + // Poké Ball not selected, remain still StartSpriteAnimIfDifferent(sprite, 0); } } @@ -1521,7 +1521,7 @@ static void Select_Task_Exit(u8 taskId) } } -// Handles the Yes/No prompt when confirming the 3 selected rental pokemon +// Handles the Yes/No prompt when confirming the 3 selected rental Pokémon static void Select_Task_HandleYesNo(u8 taskId) { if (sFactorySelectScreen->monPicAnimating == TRUE) @@ -1543,14 +1543,14 @@ static void Select_Task_HandleYesNo(u8 taskId) PlaySE(SE_SELECT); if (sFactorySelectScreen->yesNoCursorPos == 0) { - // Selected Yes, confirmed selected pokemon + // Selected Yes, confirmed selected Pokémon Select_HideChosenMons(); gTasks[taskId].tState = 0; gTasks[taskId].func = Select_Task_Exit; } else { - // Selected No, continue choosing pokemon + // Selected No, continue choosing Pokémon Select_ErasePopupMenu(SELECT_WIN_YES_NO); Select_DeclineChosenMons(); sFactorySelectScreen->fadeSpeciesNameActive = TRUE; @@ -1560,7 +1560,7 @@ static void Select_Task_HandleYesNo(u8 taskId) } else if (JOY_NEW(B_BUTTON)) { - // Pressed B, Continue choosing pokemon + // Pressed B, Continue choosing Pokémon PlaySE(SE_SELECT); Select_ErasePopupMenu(SELECT_WIN_YES_NO); Select_DeclineChosenMons(); @@ -1582,7 +1582,7 @@ static void Select_Task_HandleYesNo(u8 taskId) } } -// Handles the popup menu that shows when a pokemon is selected +// Handles the popup menu that shows when a Pokémon is selected static void Select_Task_HandleMenu(u8 taskId) { switch (gTasks[taskId].tState) @@ -2415,7 +2415,7 @@ static void Swap_Task_Exit(u8 taskId) { case 0: // Set return value for script - // TRUE if player kept their current pokemon + // TRUE if player kept their current Pokémon if (sFactorySwapScreen->monSwapped == TRUE) { gTasks[taskId].tState++; @@ -2630,7 +2630,7 @@ static void Swap_Task_HandleMenu(u8 taskId) } } -// Handles input on the two main swap screens (choosing a current pokeon to get rid of, and choosing a new pokemon to receive) +// Handles input on the two main swap screens (choosing a current pokeon to get rid of, and choosing a new Pokémon to receive) static void Swap_Task_HandleChooseMons(u8 taskId) { switch (gTasks[taskId].tState) @@ -2645,7 +2645,7 @@ static void Swap_Task_HandleChooseMons(u8 taskId) case STATE_CHOOSE_MONS_HANDLE_INPUT: if (JOY_NEW(A_BUTTON)) { - // Run whatever action is currently selected (a pokeball, the Cancel button, etc.) + // Run whatever action is currently selected (a Poké Ball, the Cancel button, etc.) PlaySE(SE_SELECT); sFactorySwapScreen->fadeSpeciesNameActive = FALSE; Swap_PrintMonSpeciesAtFade(); @@ -3553,7 +3553,7 @@ static void Swap_HandleActionCursorChange(u8 cursorId) { if (cursorId < FRONTIER_PARTY_SIZE) { - // Cursor is on one of the pokemon + // Cursor is on one of the Pokémon gSprites[sFactorySwapScreen->cursorSpriteId].invisible = FALSE; Swap_HideActionButtonHighlights(); gSprites[sFactorySwapScreen->cursorSpriteId].x = gSprites[sFactorySwapScreen->ballSpriteIds[cursorId]].x; diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index d4326860a9..a17ebcb5ab 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -105,7 +105,7 @@ void FreeBattleSpritesData(void) FREE_AND_SET_NULL(gBattleSpritesDataPtr); } -// Pokemon chooses move to use in Battle Palace rather than player +// Pokémon chooses move to use in Battle Palace rather than player u16 ChooseMoveAndTargetInBattlePalace(void) { s32 i, var1, var2; @@ -165,7 +165,7 @@ u16 ChooseMoveAndTargetInBattlePalace(void) chosenMoveId = BattleAI_ChooseMoveOrAction(); } - // If no moves matched the selected group, pick a new move from groups the pokemon has + // If no moves matched the selected group, pick a new move from groups the Pokémon has // In this case the AI is not checked again, so the choice may be worse // If a move is chosen this way, there's a 50% chance that it will be unable to use it anyway if (chosenMoveId == -1) @@ -357,7 +357,7 @@ static u16 GetBattlePalaceTarget(void) return BATTLE_OPPOSITE(gActiveBattler) << 8; } -// Wait for the pokemon to finish appearing out from the pokeball on send out +// Wait for the Pokémon to finish appearing out from the Poké Ball on send out void SpriteCB_WaitForBattlerBallReleaseAnim(struct Sprite *sprite) { u8 spriteId = sprite->data[1]; diff --git a/src/battle_message.c b/src/battle_message.c index f005404ead..e50fcff3de 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -2152,7 +2152,7 @@ void BufferStringBattle(u16 stringID) } } break; - case STRINGID_USEDMOVE: // pokemon used a move msg + case STRINGID_USEDMOVE: // Pokémon used a move msg ChooseMoveUsedParticle(gBattleTextBuff1); // buff1 doesn't appear in the string, leftover from japanese move names if (gBattleMsgDataPtr->currentMove >= MOVES_COUNT) @@ -2313,7 +2313,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst) { u32 dstID = 0; // if they used dstID, why not use srcID as well? const u8 *toCpy = NULL; - // This buffer may hold either the name of a trainer, pokemon, or item. + // This buffer may hold either the name of a trainer, Pokémon, or item. u8 text[max(max(max(32, TRAINER_NAME_LENGTH + 1), POKEMON_NAME_LENGTH + 1), ITEM_NAME_LENGTH)]; u8 multiplayerId; s32 i; diff --git a/src/battle_pike.c b/src/battle_pike.c index 7505621201..ba24e58ae7 100644 --- a/src/battle_pike.c +++ b/src/battle_pike.c @@ -1267,7 +1267,7 @@ static void TryHealMons(u8 healCount) for (i = 0; i < FRONTIER_PARTY_SIZE; i++) indices[i] = i; - // Only 'healCount' number of pokemon will be healed. + // Only 'healCount' number of Pokémon 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++) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 2bc8e73f43..49279bdb9c 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3366,7 +3366,7 @@ static void Cmd_getexp(void) if (IsTradedMon(&gPlayerParty[gBattleStruct->expGetterMonId])) { - // check if the pokemon doesn't belong to the player + // check if the Pokémon doesn't belong to the player if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gBattleStruct->expGetterMonId >= 3) { i = STRINGID_EMPTYSTRING4; @@ -4448,7 +4448,7 @@ static void Cmd_moveend(void) } gBattleScripting.moveendState++; break; - case MOVEEND_NEXT_TARGET: // For moves hitting two opposing Pokemon. + case MOVEEND_NEXT_TARGET: // For moves hitting two opposing Pokémon. if (!(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) && gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !gProtectStructs[gBattlerAttacker].chargingTurn && gBattleMoves[gCurrentMove].target == MOVE_TARGET_BOTH && !(gHitMarker & HITMARKER_NO_ATTACKSTRING)) @@ -7270,7 +7270,7 @@ static void Cmd_forcerandomswitch(void) lastMonId = PARTY_SIZE; monsCount = PARTY_SIZE; minNeeded = 1; - battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; // there is only one pokemon out in single battles + battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; // there is only one Pokémon out in single battles battler1PartyId = gBattlerPartyIndexes[gBattlerTarget]; } @@ -7761,7 +7761,7 @@ static void Cmd_setsubstitute(void) } else { - gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 4; // one bit value will only work for pokemon which max hp can go to 1020(which is more than possible in games) + gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 4; // one bit value will only work for Pokémon which max hp can go to 1020(which is more than possible in games) if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; @@ -9142,7 +9142,7 @@ static void Cmd_tryswapitems(void) { gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } - // can't swap if two pokemon don't have an item + // can't swap if two Pokémon don't have an item // or if either of them is an enigma berry or a mail else if ((gBattleMons[gBattlerAttacker].item == ITEM_NONE && gBattleMons[gBattlerTarget].item == ITEM_NONE) || gBattleMons[gBattlerAttacker].item == ITEM_ENIGMA_BERRY diff --git a/src/battle_setup.c b/src/battle_setup.c index a9cfc48ffb..e87ce6dd27 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -108,7 +108,7 @@ EWRAM_DATA static u8 *sTrainerBBattleScriptRetAddr = NULL; EWRAM_DATA static bool8 sShouldCheckTrainerBScript = FALSE; EWRAM_DATA static u8 sNoOfPossibleTrainerRetScripts = 0; -// The first transition is used if the enemy pokemon are lower level than our pokemon. +// The first transition is used if the enemy Pokémon are lower level than our Pokémon. // Otherwise, the second transition is used. static const u8 sBattleTransitionTable_Wild[][2] = { @@ -845,7 +845,7 @@ static u8 GetTrainerBattleTransition(void) return B_TRANSITION_AQUA; if (gTrainers[gTrainerBattleOpponent_A].doubleBattle == TRUE) - minPartyCount = 2; // double battles always at least have 2 pokemon. + minPartyCount = 2; // double battles always at least have 2 Pokémon. else minPartyCount = 1; diff --git a/src/battle_tent.c b/src/battle_tent.c index b7a9daecba..c003affebe 100644 --- a/src/battle_tent.c +++ b/src/battle_tent.c @@ -309,7 +309,7 @@ static void GenerateInitialRentalMons(void) i = 0; while (i != PARTY_SIZE) { - // Cannot have two pokemon of the same species. + // Cannot have two Pokémon of the same species. monSetId = Random() % NUM_SLATEPORT_TENT_MONS; for (j = firstMonId; j < firstMonId + i; j++) { @@ -390,7 +390,7 @@ static void GenerateOpponentMons(void) { sRandMonId = monSet[Random() % numMons]; - // Ensure none of the opponent's pokemon are the same as the potential rental pokemon for the player + // Ensure none of the opponent's Pokémon are the same as the potential rental Pokémon for the player for (j = 0; j < (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.rentalMons); j++) { if (gFacilityTrainerMons[sRandMonId].species == gFacilityTrainerMons[gSaveBlock2Ptr->frontier.rentalMons[j].monId].species) diff --git a/src/battle_tower.c b/src/battle_tower.c index 15509a7dcf..ec6019afb0 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -1680,8 +1680,8 @@ static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount) } // Regular battle frontier trainer. - // Attempt to fill the trainer's party with random Pokemon until 3 have been - // successfully chosen. The trainer's party may not have duplicate pokemon species + // Attempt to fill the trainer's party with random Pokémon until 3 have been + // successfully chosen. The trainer's party may not have duplicate Pokémon species // or duplicate held items. for (bfMonCount = 0; monSet[bfMonCount] != 0xFFFF; bfMonCount++) ; @@ -1691,12 +1691,12 @@ static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount) { u16 monId = monSet[Random() % bfMonCount]; - // "High tier" pokemon are only allowed on open level mode + // "High tier" Pokémon are only allowed on open level mode // 20 is not a possible value for level here if ((level == FRONTIER_MAX_LEVEL_50 || level == 20) && monId > FRONTIER_MONS_HIGH_TIER) continue; - // Ensure this pokemon species isn't a duplicate. + // Ensure this Pokémon species isn't a duplicate. for (j = 0; j < i + firstMonId; j++) { if (GetMonData(&gEnemyParty[j], MON_DATA_SPECIES, NULL) == gFacilityTrainerMons[monId].species) @@ -1715,7 +1715,7 @@ static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount) if (j != i + firstMonId) continue; - // Ensure this exact pokemon index isn't a duplicate. This check doesn't seem necessary + // Ensure this exact Pokémon index isn't a duplicate. This check doesn't seem necessary // because the species and held items were already checked directly above. for (j = 0; j < i; j++) { @@ -1727,7 +1727,7 @@ static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount) chosenMonIndices[i] = monId; - // Place the chosen pokemon into the trainer's party. + // Place the chosen Pokémon into the trainer's party. CreateMonWithEVSpreadNatureOTID(&gEnemyParty[i + firstMonId], gFacilityTrainerMons[monId].species, level, @@ -1737,7 +1737,7 @@ static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount) otID); friendship = MAX_FRIENDSHIP; - // Give the chosen pokemon its specified moves. + // Give the chosen Pokémon its specified moves. for (j = 0; j < MAX_MON_MOVES; j++) { SetMonMoveSlot(&gEnemyParty[i + firstMonId], gFacilityTrainerMons[monId].moves[j], j); @@ -1748,7 +1748,7 @@ static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount) SetMonData(&gEnemyParty[i + firstMonId], MON_DATA_FRIENDSHIP, &friendship); SetMonData(&gEnemyParty[i + firstMonId], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]); - // The pokemon was successfully added to the trainer's party, so it's safe to move on to + // The Pokémon was successfully added to the trainer's party, so it's safe to move on to // the next party slot. i++; } @@ -1804,7 +1804,7 @@ u16 GetRandomFrontierMonFromSet(u16 trainerId) do { - // "High tier" pokemon are only allowed on open level mode + // "High tier" Pokémon are only allowed on open level mode // 20 is not a possible value for level here monId = monSet[Random() % numMons]; } while((level == FRONTIER_MAX_LEVEL_50 || level == 20) && monId > FRONTIER_MONS_HIGH_TIER); @@ -2454,8 +2454,8 @@ static void GetPotentialPartnerMoveAndSpecies(u16 trainerId, u16 monId) // These partners can be an NPC or a former/record-mixed Apprentice // When talked to, their response consists of: // PARTNER_MSGID_INTRO - A greeting -// PARTNER_MSGID_MON1 - Naming one pokemon on their team, and a move it has -// PARTNER_MSGID_MON2_ASK - Naming a second pokemon on their team, a move it has, and asking if they'd like to be their partner +// PARTNER_MSGID_MON1 - Naming one Pokémon on their team, and a move it has +// PARTNER_MSGID_MON2_ASK - Naming a second Pokémon on their team, a move it has, and asking if they'd like to be their partner // PARTNER_MSGID_ACCEPT - If the player agrees to be their partner // PARTNER_MSGID_REJECT - If the player declines to be their partner static void ShowPartnerCandidateMessage(void) @@ -2773,7 +2773,7 @@ static void AwardBattleTowerRibbons(void) #ifdef BUGFIX struct RibbonCounter ribbons[MAX_FRONTIER_PARTY_SIZE]; #else - struct RibbonCounter ribbons[3]; // BUG: 4 Pokemon can receive ribbons in a double battle mode. + struct RibbonCounter ribbons[3]; // BUG: 4 Pokémon can receive ribbons in a double battle mode. #endif u8 ribbonType = 0; u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; @@ -2982,7 +2982,7 @@ static void FillPartnerParty(u16 trainerId) #ifdef BUGFIX j, #else - i, // BUG: personality was stored in the 'j' variable. As a result, Steven's pokemon do not have the intended natures. + i, // BUG: personality was stored in the 'j' variable. As a result, Steven's Pokémon do not have the intended natures. #endif OT_ID_PRESET, STEVEN_OTID); for (j = 0; j < PARTY_SIZE; j++) @@ -3409,7 +3409,7 @@ static void FillTentTrainerParty_(u16 trainerId, u8 firstMonId, u8 monCount) { u16 monId = monSet[Random() % bfMonCount]; - // Ensure this pokemon species isn't a duplicate. + // Ensure this Pokémon species isn't a duplicate. for (j = 0; j < i + firstMonId; j++) { if (GetMonData(&gEnemyParty[j], MON_DATA_SPECIES, NULL) == gFacilityTrainerMons[monId].species) @@ -3428,7 +3428,7 @@ static void FillTentTrainerParty_(u16 trainerId, u8 firstMonId, u8 monCount) if (j != i + firstMonId) continue; - // Ensure this exact pokemon index isn't a duplicate. This check doesn't seem necessary + // Ensure this exact Pokémon index isn't a duplicate. This check doesn't seem necessary // because the species and held items were already checked directly above. for (j = 0; j < i; j++) { @@ -3440,7 +3440,7 @@ static void FillTentTrainerParty_(u16 trainerId, u8 firstMonId, u8 monCount) chosenMonIndices[i] = monId; - // Place the chosen pokemon into the trainer's party. + // Place the chosen Pokémon into the trainer's party. CreateMonWithEVSpreadNatureOTID(&gEnemyParty[i + firstMonId], gFacilityTrainerMons[monId].species, level, @@ -3450,7 +3450,7 @@ static void FillTentTrainerParty_(u16 trainerId, u8 firstMonId, u8 monCount) otID); friendship = MAX_FRIENDSHIP; - // Give the chosen pokemon its specified moves. + // Give the chosen Pokémon its specified moves. for (j = 0; j < MAX_MON_MOVES; j++) { SetMonMoveSlot(&gEnemyParty[i + firstMonId], gFacilityTrainerMons[monId].moves[j], j); @@ -3461,7 +3461,7 @@ static void FillTentTrainerParty_(u16 trainerId, u8 firstMonId, u8 monCount) SetMonData(&gEnemyParty[i + firstMonId], MON_DATA_FRIENDSHIP, &friendship); SetMonData(&gEnemyParty[i + firstMonId], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]); - // The pokemon was successfully added to the trainer's party, so it's safe to move on to + // The Pokémon was successfully added to the trainer's party, so it's safe to move on to // the next party slot. i++; } diff --git a/src/battle_transition.c b/src/battle_transition.c index 11f9cddf4b..1c5b38faf8 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -1315,7 +1315,7 @@ static void HBlankCB_Shuffle(void) #undef tAmplitude //------------------------------------------------------------------------ -// B_TRANSITION_BIG_POKEBALL, B_TRANSITION_AQUA, B_TRANSITION_MAGMA, +// B_TRANSITION_BIG_Poké Ball, B_TRANSITION_AQUA, B_TRANSITION_MAGMA, // B_TRANSITION_REGICE, B_TRANSITION_REGISTEEL, B_TRANSITION_REGIROCK // and B_TRANSITION_KYOGRE. // diff --git a/src/battle_tv.c b/src/battle_tv.c index b9008b47a7..e9f518f605 100644 --- a/src/battle_tv.c +++ b/src/battle_tv.c @@ -526,7 +526,7 @@ static const u16 *const sPointsArray[] = }; // Points will always be calculated for these messages -// even if current pokemon does not have corresponding move +// even if current Pokémon does not have corresponding move static const u16 sSpecialBattleStrings[] = { STRINGID_PKMNPERISHCOUNTFELL, STRINGID_PKMNWISHCAMETRUE, STRINGID_PKMNLOSTPPGRUDGE, diff --git a/src/battle_util.c b/src/battle_util.c index 735d1ba810..d79c61b382 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -1545,7 +1545,7 @@ u8 DoBattlerEndTurnEffects(void) if ((gBattleMons[gActiveBattler].status2 & STATUS2_NIGHTMARE) && gBattleMons[gActiveBattler].hp != 0) { // R/S does not perform this sleep check, which causes the nightmare effect to - // persist even after the affected Pokemon has been awakened by Shed Skin. + // persist even after the affected Pokémon has been awakened by Shed Skin. if (gBattleMons[gActiveBattler].status1 & STATUS1_SLEEP) { gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 4; @@ -1625,7 +1625,7 @@ u8 DoBattlerEndTurnEffects(void) } if (gBattlerAttacker != gBattlersCount) { - effect = 2; // a pokemon was awaken + effect = 2; // a Pokémon was awaken break; } else @@ -1685,7 +1685,7 @@ u8 DoBattlerEndTurnEffects(void) if (gDisableStructs[gActiveBattler].disabledMove == gBattleMons[gActiveBattler].moves[i]) break; } - if (i == MAX_MON_MOVES) // pokemon does not have the disabled move anymore + if (i == MAX_MON_MOVES) // Pokémon does not have the disabled move anymore { gDisableStructs[gActiveBattler].disabledMove = MOVE_NONE; gDisableStructs[gActiveBattler].disableTimer = 0; @@ -1702,7 +1702,7 @@ u8 DoBattlerEndTurnEffects(void) case ENDTURN_ENCORE: // encore if (gDisableStructs[gActiveBattler].encoreTimer != 0) { - if (gBattleMons[gActiveBattler].moves[gDisableStructs[gActiveBattler].encoredMovePos] != gDisableStructs[gActiveBattler].encoredMove) // pokemon does not have the encored move anymore + if (gBattleMons[gActiveBattler].moves[gDisableStructs[gActiveBattler].encoredMovePos] != gDisableStructs[gActiveBattler].encoredMove) // Pokémon does not have the encored move anymore { gDisableStructs[gActiveBattler].encoredMove = MOVE_NONE; gDisableStructs[gActiveBattler].encoreTimer = 0; @@ -3003,7 +3003,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA if (gBattleMons[i].ability == ABILITY_TRACE && (gStatuses3[i] & STATUS3_TRACE)) { u8 target2; - side = BATTLE_OPPOSITE(GetBattlerPosition(i)) & BIT_SIDE; // side of the opposing pokemon + side = BATTLE_OPPOSITE(GetBattlerPosition(i)) & BIT_SIDE; // side of the opposing Pokémon target1 = GetBattlerAtPosition(side); target2 = GetBattlerAtPosition(side + BIT_FLANK); if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) diff --git a/src/birch_pc.c b/src/birch_pc.c index 1f0ab23498..8256a1378b 100644 --- a/src/birch_pc.c +++ b/src/birch_pc.c @@ -20,7 +20,7 @@ bool16 ScriptGetPokedexInfo(void) return IsNationalPokedexEnabled(); } -// This shows your Hoenn Pokedex rating and not your National Dex. +// This shows your Hoenn Pokédex rating and not your National Dex. const u8 *GetPokedexRatingText(u16 count) { if (count < 10) diff --git a/src/contest.c b/src/contest.c index e183c2bd74..8f0ad7fbfe 100644 --- a/src/contest.c +++ b/src/contest.c @@ -194,7 +194,7 @@ static void SwapMoveDescAndContestTilemaps(void); #define CONTESTANT_TEXT_COLOR_START 10 enum { -// The "{Pokemon Name} / {Trainer Name}" windows. +// The "{Pokémon Name} / {Trainer Name}" windows. WIN_CONTESTANT0_NAME, WIN_CONTESTANT1_NAME, WIN_CONTESTANT2_NAME, @@ -3434,11 +3434,11 @@ static void RankContestants(void) // For each contestant, find the best rank with their point total. // Normally, each point total is different, and this will output the - // rankings as expected. However, if two pokemon are tied, then they + // rankings as expected. However, if two Pokémon are tied, then they // both get the best rank for that point total. // // For example if the point totals are [100, 80, 80, 50], the ranks will - // be [1, 2, 2, 4]. The pokemon with a point total of 80 stop looking + // be [1, 2, 2, 4]. The Pokémon with a point total of 80 stop looking // when they see the first 80 in the array, so they both share the '2' // rank. for (i = 0; i < CONTESTANT_COUNT; i++) @@ -4590,10 +4590,10 @@ void MakeContestantNervous(u8 p) // ContestantStatus::nextTurnOrder field of each contestant. The remaining // turns are assigned such that the turn order will reverse. // -// For example, if no pokemon have a defined nextTurnOrder, then the 4th +// For example, if no Pokémon have a defined nextTurnOrder, then the 4th // will become 1st, the 3rd will become 2nd, etc. // -// Note: This function assumes that multiple pokemon cannot have the same +// Note: This function assumes that multiple Pokémon cannot have the same // nextTurnOrder value. static void ApplyNextTurnOrder(void) { diff --git a/src/credits.c b/src/credits.c index 69a4ebbbf3..c433baf1d1 100644 --- a/src/credits.c +++ b/src/credits.c @@ -63,12 +63,12 @@ enum { struct CreditsData { - u16 monToShow[NUM_MON_SLIDES]; // List of Pokemon species ids that will show during the credits + u16 monToShow[NUM_MON_SLIDES]; // List of Pokémon species ids that will show during the credits u16 imgCounter; //how many mon images have been shown u16 nextImgPos; //if the next image spawns left/center/right u16 currShownMon; //index into monToShow - u16 numMonToShow; //number of pokemon to show, always NUM_MON_SLIDES after determine function - u16 caughtMonIds[NATIONAL_DEX_COUNT]; //temporary location to hold a condensed array of all caught pokemon + u16 numMonToShow; //number of Pokémon to show, always NUM_MON_SLIDES after determine function + u16 caughtMonIds[NATIONAL_DEX_COUNT]; //temporary location to hold a condensed array of all caught Pokémon u16 numCaughtMon; //count of filled spaces in caughtMonIds u16 unused[7]; }; @@ -1555,8 +1555,8 @@ static void DeterminePokemonToShow(void) u16 dexNum; u16 j; - // Go through the Pokedex, and anything that has gotten caught we put into our massive array. - // This basically packs all of the caught pokemon into the front of the array + // Go through the Pokédex, and anything that has gotten caught we put into our massive array. + // This basically packs all of the caught Pokémon into the front of the array for (dexNum = 1, j = 0; dexNum < NATIONAL_DEX_COUNT; dexNum++) { if (GetSetPokedexFlag(dexNum, FLAG_GET_CAUGHT)) @@ -1570,14 +1570,14 @@ static void DeterminePokemonToShow(void) for (dexNum = j; dexNum < NATIONAL_DEX_COUNT; dexNum++) sCreditsData->caughtMonIds[dexNum] = NATIONAL_DEX_NONE; - // Cap the number of pokemon we care about to NUM_MON_SLIDES, the max we show in the credits scene (-1 for the starter) + // Cap the number of Pokémon we care about to NUM_MON_SLIDES, the max we show in the credits scene (-1 for the starter) sCreditsData->numCaughtMon = j; if (sCreditsData->numCaughtMon < NUM_MON_SLIDES) sCreditsData->numMonToShow = j; else sCreditsData->numMonToShow = NUM_MON_SLIDES; - // Loop through our list of caught pokemon and select randomly from it to fill the images to show + // Loop through our list of caught Pokémon and select randomly from it to fill the images to show j = 0; do { @@ -1598,7 +1598,7 @@ static void DeterminePokemonToShow(void) } while (sCreditsData->numCaughtMon != 0 && j < NUM_MON_SLIDES); - // If we don't have enough pokemon in the dex to fill everything, copy the selected mon into the end of the array, so it loops + // If we don't have enough Pokémon in the dex to fill everything, copy the selected mon into the end of the array, so it loops if (sCreditsData->numMonToShow < NUM_MON_SLIDES) { for (j = sCreditsData->numMonToShow, page = 0; j < NUM_MON_SLIDES; j++) @@ -1609,7 +1609,7 @@ static void DeterminePokemonToShow(void) if (page == sCreditsData->numMonToShow) page = 0; } - // Ensure the last pokemon is our starter + // Ensure the last Pokémon is our starter sCreditsData->monToShow[NUM_MON_SLIDES - 1] = starter; } else @@ -1617,7 +1617,7 @@ static void DeterminePokemonToShow(void) // Check to see if our starter has already appeared in this list, break if it has for (dexNum = 0; sCreditsData->monToShow[dexNum] != starter && dexNum < NUM_MON_SLIDES; dexNum++); - // If it has, swap it with the last pokemon, to ensure our starter is the last image + // If it has, swap it with the last Pokémon, to ensure our starter is the last image if (dexNum < sCreditsData->numMonToShow - 1) { sCreditsData->monToShow[dexNum] = sCreditsData->monToShow[NUM_MON_SLIDES-1]; @@ -1625,7 +1625,7 @@ static void DeterminePokemonToShow(void) } else { - // Ensure the last pokemon is our starter + // Ensure the last Pokémon is our starter sCreditsData->monToShow[NUM_MON_SLIDES - 1] = starter; } } diff --git a/src/data/bard_music/bard_sounds.h b/src/data/bard_music/bard_sounds.h index 291d22872a..bc6f88ba57 100644 --- a/src/data/bard_music/bard_sounds.h +++ b/src/data/bard_music/bard_sounds.h @@ -25,7 +25,7 @@ #include "trendysaying.h" const struct BardSound (*const gBardSoundsTable[EC_NUM_GROUPS])[6] = { - [EC_GROUP_POKEMON] = NULL, // Handled by gBardSounds_Pokemon + [EC_GROUP_POKEMON] = NULL, // Handled by gBardSounds_Pokémon [EC_GROUP_TRAINER] = gBardSounds_Trainer, [EC_GROUP_STATUS] = gBardSounds_Status, [EC_GROUP_BATTLE] = gBardSounds_Battle, @@ -46,7 +46,7 @@ const struct BardSound (*const gBardSoundsTable[EC_NUM_GROUPS])[6] = { [EC_GROUP_MOVE_1] = NULL, // Handled by gBardSounds_Moves [EC_GROUP_MOVE_2] = NULL, // Handled by gBardSounds_Moves [EC_GROUP_TRENDY_SAYING] = gBardSounds_TrendySaying, - [EC_GROUP_POKEMON_NATIONAL] = NULL // Handled by gBardSounds_Pokemon + [EC_GROUP_POKEMON_NATIONAL] = NULL // Handled by gBardSounds_Pokémon }; #endif //GUARD_BARD_SOUNDS_TABLE_H diff --git a/src/data/battle_frontier/battle_frontier_trainer_mons.h b/src/data/battle_frontier/battle_frontier_trainer_mons.h index 625a602658..f0a203d56d 100644 --- a/src/data/battle_frontier/battle_frontier_trainer_mons.h +++ b/src/data/battle_frontier/battle_frontier_trainer_mons.h @@ -4172,7 +4172,7 @@ FRONTIER_MON_##lastmon##_10,\ -1 -// The strong Psychic M/F trainers all use the below pokemon +// The strong Psychic M/F trainers all use the below Pokémon // Additionally they use 1 of 3 legendary trios, and Latios or Latias depending on gender #define FRONTIER_MONS_PSYCHIC_2(lati, legend1, legend2, legend3) \ FRONTIER_MON_WOBBUFFET_1, \ diff --git a/src/data/party_menu.h b/src/data/party_menu.h index 90faab0777..04e073df17 100644 --- a/src/data/party_menu.h +++ b/src/data/party_menu.h @@ -64,7 +64,7 @@ static const struct PartyMenuBoxInfoRects sPartyBoxInfoRects[] = // Each layout array has an array for each of the 6 party slots // The array for each slot has the sprite coords of its various sprites in the following order -// Pokemon icon (x, y), held item (x, y), status condition (x, y), menu pokeball (x, y) +// Pokémon icon (x, y), held item (x, y), status condition (x, y), menu Poké Ball (x, y) static const u8 sPartyMenuSpriteCoords[PARTY_LAYOUT_COUNT][PARTY_SIZE][4 * 2] = { [PARTY_LAYOUT_SINGLE] = @@ -902,7 +902,7 @@ static const struct CompressedSpritePalette sSpritePalette_MenuPokeball = gPartyMenuPokeball_Pal, TAG_POKEBALL }; -// Used for the pokeball sprite on each party slot / Cancel button +// Used for the Poké Ball sprite on each party slot / Cancel button static const struct SpriteTemplate sSpriteTemplate_MenuPokeball = { .tileTag = TAG_POKEBALL, @@ -983,7 +983,7 @@ static const struct CompressedSpriteSheet sSpriteSheet_MenuPokeballSmall = gPartyMenuPokeballSmall_Gfx, 0x0300, TAG_POKEBALL_SMALL }; -// Used for the pokeball sprite next to Cancel and Confirm when both are present, otherwise sSpriteTemplate_MenuPokeball is used +// Used for the pokeball sprite next to Cancel and Confirm when both are present, otherwise sSpriteTemplate_MenuPoké Ball is used static const struct SpriteTemplate sSpriteTemplate_MenuPokeballSmall = { .tileTag = TAG_POKEBALL_SMALL, diff --git a/src/data/pokemon/pokedex_orders.h b/src/data/pokemon/pokedex_orders.h index 55b0abcea8..aa09948ec0 100644 --- a/src/data/pokemon/pokedex_orders.h +++ b/src/data/pokemon/pokedex_orders.h @@ -25,7 +25,7 @@ const u16 gPokedexOrder_Alphabetical[] = NATIONAL_DEX_OLD_UNOWN_X, NATIONAL_DEX_OLD_UNOWN_Y, NATIONAL_DEX_OLD_UNOWN_Z, - // Actual pokemon start here. + // Actual Pokémon start here. NATIONAL_DEX_ABRA, NATIONAL_DEX_ABSOL, NATIONAL_DEX_AERODACTYL, diff --git a/src/daycare.c b/src/daycare.c index d62bd589d0..5ebe255b39 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -193,10 +193,10 @@ void StoreSelectedPokemonInDaycare(void) StorePokemonInEmptyDaycareSlot(&gPlayerParty[monId], &gSaveBlock1Ptr->daycare); } -// Shifts the second daycare pokemon slot into the first slot. +// Shifts the second daycare Pokémon slot into the first slot. static void ShiftDaycareSlots(struct DayCare *daycare) { - // This condition is only satisfied when the player takes out the first pokemon from the daycare. + // This condition is only satisfied when the player takes out the first Pokémon from the daycare. if (GetBoxMonData(&daycare->mons[1].mon, MON_DATA_SPECIES) != SPECIES_NONE && GetBoxMonData(&daycare->mons[0].mon, MON_DATA_SPECIES) == SPECIES_NONE) { @@ -596,7 +596,7 @@ static void InheritIVs(struct Pokemon *egg, struct DayCare *daycare) } } -// Counts the number of egg moves a pokemon learns and stores the moves in +// Counts the number of egg moves a Pokémon learns and stores the moves in // the given array. static u8 GetEggMoves(struct Pokemon *pokemon, u16 *eggMoves) { diff --git a/src/field_effect.c b/src/field_effect.c index 86f1ca97d2..a906492d13 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -254,7 +254,7 @@ static const u32 sHofMonitorBig_Gfx[] = INCBIN_U32("graphics/field_effects/pics/ static const u8 sHofMonitorSmall_Gfx[] = INCBIN_U8("graphics/field_effects/pics/hof_monitor_small.4bpp"); static const u16 sHofMonitor_Pal[16] = INCBIN_U16("graphics/field_effects/palettes/hof_monitor.gbapal"); -// Graphics for the lights streaking past your Pokemon when it uses a field move. +// Graphics for the lights streaking past your Pokémon when it uses a field move. static const u32 sFieldMoveStreaksOutdoors_Gfx[] = INCBIN_U32("graphics/field_effects/pics/field_move_streaks.4bpp"); static const u16 sFieldMoveStreaksOutdoors_Pal[16] = INCBIN_U16("graphics/field_effects/pics/field_move_streaks.gbapal"); static const u16 sFieldMoveStreaksOutdoors_Tilemap[320] = INCBIN_U16("graphics/field_effects/pics/field_move_streaks.bin"); diff --git a/src/fldeff_misc.c b/src/fldeff_misc.c index c01e88b512..513cd13e76 100644 --- a/src/fldeff_misc.c +++ b/src/fldeff_misc.c @@ -308,7 +308,7 @@ static const struct SpriteTemplate sSpriteTemplate_RecordMixLights = .callback = SpriteCallbackDummy, }; -// For accessing pokemon storage PC or the Hall of Fame PC +// For accessing Pokémon storage PC or the Hall of Fame PC void ComputerScreenOpenEffect(u16 increment, u16 unused, u8 priority) { CreateComputerScreenEffectTask(Task_ComputerScreenOpenEffect, increment, unused, priority); diff --git a/src/frontier_util.c b/src/frontier_util.c index 08b0e68d2e..1858792b4e 100644 --- a/src/frontier_util.c +++ b/src/frontier_util.c @@ -326,7 +326,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ }, [FRONTIER_FACILITY_FACTORY] = { - // Because Factory's pokemon are random, this facility's Brain also uses random pokemon. + // Because Factory's Pokémon are random, this facility's Brain also uses random Pokémon. // What is interesting, this team is actually the one Steven uses in the multi tag battle alongside the player. { { @@ -2006,7 +2006,7 @@ static void AppendIfValid(u16 species, u16 heldItem, u16 hp, u8 lvlMode, u8 monL // gSpecialVar_Result is the level mode before and after calls to this function // gSpecialVar_0x8004 is used to store the return value instead (TRUE if there are insufficient eligible mons) -// The names of ineligible pokemon that have been caught are also buffered to print +// The names of ineligible Pokémon that have been caught are also buffered to print static void CheckPartyIneligibility(void) { u16 speciesArray[PARTY_SIZE]; diff --git a/src/graphics.c b/src/graphics.c index 17ea237df2..39b6c8e680 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -362,7 +362,7 @@ const u8 gHealthboxElementsGfxTable[] = INCBIN_U8("graphics/battle_interface/hpb "graphics/battle_interface/misc_frameend.4bpp", "graphics/battle_interface/ball_display.4bpp", "graphics/battle_interface/ball_caught_indicator.4bpp", - "graphics/battle_interface/status2.4bpp", // these three duplicate sets of graphics are for the opponent/partner pokemon + "graphics/battle_interface/status2.4bpp", // these three duplicate sets of graphics are for the opponent/partner Pokémon "graphics/battle_interface/status3.4bpp", "graphics/battle_interface/status4.4bpp", "graphics/battle_interface/healthbox_doubles_frameend.4bpp", @@ -953,7 +953,7 @@ const u32 gDomeTourneyLineUp_Tilemap[] = INCBIN_U32("graphics/battle_frontier/to const u32 gDomeTourneyInfoCard_Gfx[] = INCBIN_U32("graphics/battle_frontier/tourney_info_card.4bpp.lz"); 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 gDomeTourneyTreeButtons_Gfx[] = INCBIN_U32("graphics/battle_frontier/tourney_buttons.4bpp.lz"); // exit/cancel and Poké Ball buttons 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"); @@ -1228,7 +1228,7 @@ const u16 gFrontierPassMapCursor_Pal[] = INCBIN_U16("graphics/frontier_pass/map_ const u16 gFrontierPassMedalsSilver_Pal[] = INCBIN_U16("graphics/frontier_pass/silver.gbapal"); const u16 gFrontierPassMedalsGold_Pal[] = INCBIN_U16("graphics/frontier_pass/gold.gbapal"); -// Pokedex +// Pokédex const u16 gPokedexBgHoenn_Pal[] = INCBIN_U16("graphics/pokedex/bg_hoenn.gbapal"); const u16 gPokedexCaughtScreen_Pal[] = INCBIN_U16("graphics/pokedex/caught_screen.gbapal"); const u16 gPokedexSearchResults_Pal[] = INCBIN_U16("graphics/pokedex/search_results_bg.gbapal"); @@ -1383,7 +1383,7 @@ const u32 gKantoTrainerCardFront_Tilemap[] = INCBIN_U32("graphics/trainer_card/f const u32 gKantoTrainerCardBack_Tilemap[] = INCBIN_U32("graphics/trainer_card/frlg/back.bin.lz"); const u32 gKantoTrainerCardFrontLink_Tilemap[] = INCBIN_U32("graphics/trainer_card/frlg/front_link.bin.lz"); -// pokemon storage system +// Pokémon storage system const u32 gStorageSystemMenu_Gfx[] = INCBIN_U32("graphics/pokemon_storage/menu.4bpp.lz"); const u16 gStorageSystemPartyMenu_Pal[] = INCBIN_U16("graphics/pokemon_storage/party_menu.gbapal"); diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index 63c7c30c26..91850ec72e 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -621,7 +621,7 @@ static void Task_Hof_TryDisplayAnotherMon(u8 taskId) else { sHofFadePalettes |= (0x10000 << gSprites[gTasks[taskId].tMonSpriteId(currPokeID)].oam.paletteNum); - if (gTasks[taskId].tDisplayedMonId < PARTY_SIZE - 1 && currMon[1].species != SPECIES_NONE) // there is another pokemon to display + if (gTasks[taskId].tDisplayedMonId < PARTY_SIZE - 1 && currMon[1].species != SPECIES_NONE) // there is another Pokémon to display { gTasks[taskId].tDisplayedMonId++; BeginNormalPaletteFade(sHofFadePalettes, 0, 12, 12, RGB(16, 29, 24)); diff --git a/src/lottery_corner.c b/src/lottery_corner.c index f19e9f7b7b..052e2cfc38 100644 --- a/src/lottery_corner.c +++ b/src/lottery_corner.c @@ -75,7 +75,7 @@ void PickLotteryCornerTicket(void) } } } - else // pokemon are always arranged from populated spots first to unpopulated, so the moment a NONE species is found, that's the end of the list. + else // Pokémon are always arranged from populated spots first to unpopulated, so the moment a NONE species is found, that's the end of the list. break; } diff --git a/src/move_relearner.c b/src/move_relearner.c index af4593e533..975663e4d3 100644 --- a/src/move_relearner.c +++ b/src/move_relearner.c @@ -369,7 +369,7 @@ static void VBlankCB_MoveRelearner(void) TransferPlttBuffer(); } -// Script arguments: The pokemon to teach is in VAR_0x8004 +// Script arguments: The Pokémon to teach is in VAR_0x8004 void TeachMoveRelearnerMove(void) { LockPlayerFieldControls(); diff --git a/src/overworld.c b/src/overworld.c index e9245ce0a0..2e01a2e52f 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -1297,7 +1297,7 @@ void UpdateAmbientCry(s16 *state, u16 *delayCounter) } } // Ambient cries after the first one take between 1200-2399 frames (~20-40 seconds) - // If the player has a pokemon with the ability Swarm in their party, the time is halved to 600-1199 frames (~10-20 seconds) + // If the player has a Pokémon with the ability Swarm in their party, the time is halved to 600-1199 frames (~10-20 seconds) *delayCounter = ((Random() % 1200) + 1200) / divBy; *state = AMB_CRY_WAIT; break; @@ -1309,7 +1309,7 @@ void UpdateAmbientCry(s16 *state, u16 *delayCounter) } break; case AMB_CRY_IDLE: - // No land/water pokemon on this map + // No land/water Pokémon on this map break; } } @@ -1320,7 +1320,7 @@ static void ChooseAmbientCrySpecies(void) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE130)) && !IsMirageIslandPresent()) { - // Only play water pokemon cries on this route + // Only play water Pokémon cries on this route // when Mirage Island is not present sIsAmbientCryWaterMon = TRUE; sAmbientCrySpecies = GetLocalWaterMon(); diff --git a/src/party_menu.c b/src/party_menu.c index 9b076755c8..2abceb50ae 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -169,7 +169,7 @@ enum { }; enum { - // Window ids 0-5 are implicitly assigned to each party pokemon in InitPartyMenuBoxes + // Window ids 0-5 are implicitly assigned to each party Pokémon in InitPartyMenuBoxes WIN_MSG = PARTY_SIZE, }; @@ -3512,7 +3512,7 @@ static void CursorCb_SendMon(u8 taskId) } else { - // gStringVar4 below is the error message buffered by TrySwitchInPokemon + // gStringVar4 below is the error message buffered by TrySwitchInPokémon PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); DisplayPartyMenuMessage(gStringVar4, TRUE); gTasks[taskId].func = Task_ReturnToChooseMonAfterText; @@ -5801,7 +5801,7 @@ static bool8 TrySwitchInPokemon(void) u8 newSlot; u8 i; - // In a multi battle, slots 1, 4, and 5 are the partner's pokemon + // In a multi battle, slots 1, 4, and 5 are the partner's Pokémon if (IsMultiBattle() == TRUE && (slot == 1 || slot == 4 || slot == 5)) { StringCopy(gStringVar1, GetTrainerPartnerName()); diff --git a/src/pokeball.c b/src/pokeball.c index bdc2b70369..445f048924 100644 --- a/src/pokeball.c +++ b/src/pokeball.c @@ -1014,10 +1014,10 @@ static u8 LaunchBallFadeMonTaskForPokeball(bool8 unFadeLater, u8 spritePalNum, u return LaunchBallFadeMonTask(unFadeLater, spritePalNum, selectedPalettes, BALL_POKE); } -// Sprite data for the pokemon +// Sprite data for the Pokémon #define sSpecies data[7] -// Sprite data for the pokeball +// Sprite data for the Poké Ball #define sMonSpriteId data[0] #define sDelay data[1] #define sMonPalNum data[2] @@ -1027,7 +1027,7 @@ static u8 LaunchBallFadeMonTaskForPokeball(bool8 unFadeLater, u8 spritePalNum, u #define sFinalMonY data[6] #define sTrigIdx data[7] -// Pokeball in Birch intro, and when receiving via trade +// Poké Ball in Birch intro, and when receiving via trade void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 monPalNum, u8 x, u8 y, u8 oamPriority, u8 subpriority, u8 delay, u32 fadePalettes, u16 species) { u8 spriteId; diff --git a/src/pokedex.c b/src/pokedex.c index bd824aa567..d5db9987dd 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -1758,7 +1758,7 @@ static void Task_HandlePokedexStartMenuInput(u8 taskId) CreateMonSpritesAtPos(sPokedexView->selectedPokemon, 0xE); gMain.newKeys |= START_BUTTON; //Exit menu break; - case 3: //CLOSE POKEDEX + case 3: //CLOSE Pokédex BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK); gTasks[taskId].func = Task_ClosePokedex; PlaySE(SE_PC_OFF); @@ -1958,12 +1958,12 @@ static void Task_HandleSearchResultsStartMenuInput(u8 taskId) CreateMonSpritesAtPos(sPokedexView->selectedPokemon, 0xE); gMain.newKeys |= START_BUTTON; break; - case 3: //BACK TO POKEDEX + case 3: //BACK TO Pokédex BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK); gTasks[taskId].func = Task_ReturnToPokedexFromSearchResults; PlaySE(SE_TRUCK_DOOR); break; - case 4: //CLOSE POKEDEX + case 4: //CLOSE Pokédex BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK); gTasks[taskId].func = Task_ClosePokedexFromSearchResultsStartMenu; PlaySE(SE_PC_OFF); @@ -2049,7 +2049,7 @@ static void Task_ClosePokedexFromSearchResultsStartMenu(u8 taskId) #undef tLoadScreenTaskId -// For loading main pokedex page or pokedex search results +// For loading main pokedex page or Pokédex search results static bool8 LoadPokedexListPage(u8 page) { switch (gMain.state) diff --git a/src/pokemon.c b/src/pokemon.c index 6ee052fda5..51a512445e 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -98,7 +98,7 @@ static const struct CombinedMove sCombinedMoves[2] = }; // NOTE: The order of the elements in the 3 arrays below is irrelevant. -// To reorder the pokedex, see the values in include/constants/pokedex.h. +// To reorder the pokedex, see the values in include/constants/Pokédex.h. #define SPECIES_TO_HOENN(name) [SPECIES_##name - 1] = HOENN_DEX_##name #define SPECIES_TO_NATIONAL(name) [SPECIES_##name - 1] = NATIONAL_DEX_##name diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 574e6ba51e..92afe8a4bb 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -199,7 +199,7 @@ enum { CURSOR_AREA_IN_BOX, CURSOR_AREA_IN_PARTY, CURSOR_AREA_BOX_TITLE, - CURSOR_AREA_BUTTONS, // Party Pokemon and Close Box + CURSOR_AREA_BUTTONS, // Party Pokémon and Close Box }; #define CURSOR_AREA_IN_HAND CURSOR_AREA_BOX_TITLE // Alt name for cursor area used by Move Items @@ -6687,8 +6687,8 @@ static void LoadSavedMovingMon(void) { if (sIsMonBeingMoved) { - // If it came from the party load a struct Pokemon, - // otherwise load a BoxPokemon + // If it came from the party load a struct Pokémon, + // otherwise load a BoxPokémon if (sMovingMonOrigBoxId == TOTAL_BOXES_COUNT) sStorage->movingMon = sSavedMovingMon; else diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index 4545411124..642b176d6b 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -88,13 +88,13 @@ enum { #define PSS_LABEL_WINDOW_PORTRAIT_SPECIES 19 // The lower name #define PSS_LABEL_WINDOW_END 20 -// Dynamic fields for the Pokemon Info page +// Dynamic fields for the Pokémon Info page #define PSS_DATA_WINDOW_INFO_ORIGINAL_TRAINER 0 #define PSS_DATA_WINDOW_INFO_ID 1 #define PSS_DATA_WINDOW_INFO_ABILITY 2 #define PSS_DATA_WINDOW_INFO_MEMO 3 -// Dynamic fields for the Pokemon Skills page +// Dynamic fields for the Pokémon Skills page #define PSS_DATA_WINDOW_SKILLS_HELD_ITEM 0 #define PSS_DATA_WINDOW_SKILLS_RIBBON_COUNT 1 #define PSS_DATA_WINDOW_SKILLS_STATS_LEFT 2 // HP, Attack, Defense @@ -174,7 +174,7 @@ static EWRAM_DATA struct PokemonSummaryScreenData u8 currPageIndex; u8 minPageIndex; u8 maxPageIndex; - bool8 lockMonFlag; // This is used to prevent the player from changing pokemon in the move deleter select, etc, but it is not needed because the input is handled differently there + bool8 lockMonFlag; // This is used to prevent the player from changing Pokémon in the move deleter select, etc, but it is not needed because the input is handled differently there u16 newMove; u8 firstMoveIndex; u8 secondMoveIndex; @@ -184,7 +184,7 @@ static EWRAM_DATA struct PokemonSummaryScreenData u8 windowIds[8]; u8 spriteIds[SPRITE_ARR_ID_COUNT]; bool8 handleDeoxys; - s16 switchCounter; // Used for various switch statement cases that decompress/load graphics or pokemon data + s16 switchCounter; // Used for various switch statement cases that decompress/load graphics or Pokémon data u8 unk_filler4[6]; } *sMonSummaryScreen = NULL; EWRAM_DATA u8 gLastViewedMonIndex = 0; @@ -2682,7 +2682,7 @@ static void DrawContestMoveHearts(u16 move) } } -static void LimitEggSummaryPageDisplay(void) // If the pokemon is an egg, limit the number of pages displayed to 1 +static void LimitEggSummaryPageDisplay(void) // If the Pokémon is an egg, limit the number of pages displayed to 1 { if (sMonSummaryScreen->summary.isEgg) ChangeBgX(3, 0x10000, BG_COORD_SET); @@ -3999,7 +3999,7 @@ static bool32 UNUSED IsMonAnimationFinished(void) return TRUE; } -static void StopPokemonAnimations(void) // A subtle effect, this function stops pokemon animations when leaving the PSS +static void StopPokemonAnimations(void) // A subtle effect, this function stops Pokémon animations when leaving the PSS { u16 i; u16 paletteIndex; diff --git a/src/rom_header_gf.c b/src/rom_header_gf.c index 36ff3401d3..d5f7d7eefc 100644 --- a/src/rom_header_gf.c +++ b/src/rom_header_gf.c @@ -8,7 +8,7 @@ // The purpose of this struct is for outside applications to be // able to access parts of the ROM or its save file, like a public API. -// In vanilla, it was used by Colosseum and XD to access pokemon graphics. +// In vanilla, it was used by Colosseum and XD to access Pokémon graphics. // // If this struct is rearranged in any way, it defeats the purpose of // having it at all. Applications like PKHex or streaming HUDs may find diff --git a/src/roulette.c b/src/roulette.c index 44dac2db6c..ec4c8cfcfe 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -990,8 +990,8 @@ static const struct RouletteFlashSettings sFlashData_Colors[NUM_ROULETTE_SLOTS + }, }; -// Data to flash any pokemon icon (F_FLASH_ICON) on the roulette wheel. One entry for each color row -// Each poke icon flashes with the tint of the row color it belongs to, so the pokemon itself is irrelevant +// Data to flash any Pokémon icon (F_FLASH_ICON) on the roulette wheel. One entry for each color row +// Each poke icon flashes with the tint of the row color it belongs to, so the Pokémon itself is irrelevant static const struct RouletteFlashSettings sFlashData_PokeIcons[NUM_BOARD_COLORS] = { [GET_ROW_IDX(ROW_ORANGE)] = { @@ -2702,7 +2702,7 @@ static const struct SpriteTemplate sSpriteTemplates_GridIcons[NUM_BOARD_POKES] = } }; -// Wheel icons are listed clockwise starting from 1 oclock on the roulette wheel (with pokeball upside right) +// Wheel icons are listed clockwise starting from 1 oclock on the roulette wheel (with Poké Ball upside right) // They go Wynaut -> Azurill -> Skitty -> Makuhita, and Orange -> Green -> Purple static const struct SpriteTemplate sSpriteTemplates_WheelIcons[NUM_ROULETTE_SLOTS] = { @@ -4481,7 +4481,7 @@ static void SetBallStuck(struct Sprite *sprite) // The below slot ids are relative to the slot the ball got stuck on if ((sRoulette->useTaillow + 1) & sRoulette->partySpeciesFlags) { - // If the player has the corresponding pokemon in their party (HAS_SHROOMISH or HAS_TAILLOW), + // If the player has the corresponding Pokémon in their party (HAS_SHROOMISH or HAS_TAILLOW), // there's a 75% chance that the ball will be moved to a spot they bet on // assuming it was one of the slots identified as a candidate if (betSlotId && (rand % 256) < 192) diff --git a/src/save_location.c b/src/save_location.c index 74d2f2c44d..3384200598 100644 --- a/src/save_location.c +++ b/src/save_location.c @@ -119,9 +119,9 @@ void TrySetMapSaveWarpStatus(void) TrySetUnknownWarpStatus(); } -// In FRLG, only bits 0, 4, and 5 are set when the pokedex is received. +// In FRLG, only bits 0, 4, and 5 are set when the Pokédex is received. // Bits 1, 2, 3, and 15 are instead set by SetPostgameFlags. -// These flags are read by Pokemon Colosseum/XD for linking. XD Additionally requires FLAG_SYS_GAME_CLEAR +// These flags are read by Pokémon Colosseum/XD for linking. XD Additionally requires FLAG_SYS_GAME_CLEAR void SetUnlockedPokedexFlags(void) { gSaveBlock2Ptr->gcnLinkFlags |= (1 << 15); diff --git a/src/script_pokemon_util.c b/src/script_pokemon_util.c index 6e5653884b..ed28d47c5a 100755 --- a/src/script_pokemon_util.c +++ b/src/script_pokemon_util.c @@ -213,7 +213,7 @@ void ReducePlayerPartyToSelectedMons(void) CpuFill32(0, party, sizeof party); - // copy the selected pokemon according to the order. + // copy the selected Pokémon according to the order. for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++) if (gSelectedOrderFromParty[i]) // as long as the order keeps going (did the player select 1 mon? 2? 3?), do not stop party[i] = gPlayerParty[gSelectedOrderFromParty[i] - 1]; // index is 0 based, not literal diff --git a/src/sound.c b/src/sound.c index bef3658ecd..8685383f78 100644 --- a/src/sound.c +++ b/src/sound.c @@ -463,9 +463,9 @@ void PlayCryInternal(u16 species, s8 pan, s8 volume, u8 priority, u8 mode) SetPokemonCryChorus(chorus); SetPokemonCryPriority(priority); - // This is a fancy way to get a cry of a pokemon. + // This is a fancy way to get a cry of a Pokémon. // It creates 4 sets of 128 mini cry tables. - // If you wish to expand pokemon, you need to + // If you wish to expand Pokémon, you need to // append new cases to the switch. species = SpeciesToCryId(species); index = species % 128; diff --git a/src/start_menu.c b/src/start_menu.c index 2faff8c63d..0c8fe01f0e 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -1374,7 +1374,7 @@ static void ShowSaveInfoWindow(void) if (FlagGet(FLAG_SYS_POKEDEX_GET) == TRUE) { - // Print pokedex count + // Print Pokédex count yOffset += 16; AddTextPrinterParameterized(sSaveInfoWindowId, FONT_NORMAL, gText_SavingPokedex, 0, yOffset, TEXT_SKIP_DRAW, NULL); BufferSaveMenuText(SAVE_MENU_CAUGHT, gStringVar4, color); diff --git a/src/starter_choose.c b/src/starter_choose.c index 3d5291e887..ef0b9388bf 100644 --- a/src/starter_choose.c +++ b/src/starter_choose.c @@ -26,7 +26,7 @@ #define STARTER_MON_COUNT 3 -// Position of the sprite of the selected starter Pokemon +// Position of the sprite of the selected starter Pokémon #define STARTER_PKMN_POS_X (DISPLAY_WIDTH / 2) #define STARTER_PKMN_POS_Y 64 @@ -367,7 +367,7 @@ static void VblankCB_StarterChoose(void) #define tPkmnSpriteId data[1] #define tCircleSpriteId data[2] -// Data for sSpriteTemplate_Pokeball +// Data for sSpriteTemplate_Poké Ball #define sTaskId data[0] #define sBallId data[1] @@ -446,7 +446,7 @@ void CB2_ChooseStarter(void) spriteId = CreateSprite(&sSpriteTemplate_Hand, 120, 56, 2); gSprites[spriteId].data[0] = taskId; - // Create three Pokeball sprites + // Create three Poké Ball sprites spriteId = CreateSprite(&sSpriteTemplate_Pokeball, sPokeballCoords[0][0], sPokeballCoords[0][1], 2); gSprites[spriteId].sTaskId = taskId; gSprites[spriteId].sBallId = 0; @@ -495,7 +495,7 @@ static void Task_HandleStarterChooseInput(u8 taskId) spriteId = CreateSprite(&sSpriteTemplate_StarterCircle, sPokeballCoords[selection][0], sPokeballCoords[selection][1], 1); gTasks[taskId].tCircleSpriteId = spriteId; - // Create Pokemon sprite + // Create Pokémon sprite spriteId = CreatePokemonFrontSprite(GetStarterPokemon(gTasks[taskId].tStarterSelection), sPokeballCoords[selection][0], sPokeballCoords[selection][1]); gSprites[spriteId].affineAnims = &sAffineAnims_StarterPokemon; gSprites[spriteId].callback = SpriteCB_StarterPokemon; @@ -637,7 +637,7 @@ static u8 CreatePokemonFrontSprite(u16 species, u8 x, u8 y) static void SpriteCB_SelectionHand(struct Sprite *sprite) { - // Float up and down above selected pokeball + // Float up and down above selected Poké Ball sprite->x = sCursorCoords[gTasks[sprite->data[0]].tStarterSelection][0]; sprite->y = sCursorCoords[gTasks[sprite->data[0]].tStarterSelection][1]; sprite->y2 = Sin(sprite->data[1], 8); @@ -646,7 +646,7 @@ static void SpriteCB_SelectionHand(struct Sprite *sprite) static void SpriteCB_Pokeball(struct Sprite *sprite) { - // Animate pokeball if currently selected + // Animate Poké Ball if currently selected if (gTasks[sprite->sTaskId].tStarterSelection == sprite->sBallId) StartSpriteAnimIfDifferent(sprite, 1); else diff --git a/src/title_screen.c b/src/title_screen.c index 12015b8bd8..1d605d1fc0 100644 --- a/src/title_screen.c +++ b/src/title_screen.c @@ -680,7 +680,7 @@ static void MainCB2(void) UpdatePaletteFade(); } -// Shine the Pokemon logo two more times, and fade in the version banner +// Shine the Pokémon logo two more times, and fade in the version banner static void Task_TitleScreenPhase1(u8 taskId) { // Skip to next phase when A, B, Start, or Select is pressed @@ -728,7 +728,7 @@ static void Task_TitleScreenPhase1(u8 taskId) #undef sParentTaskId #undef sAlphaBlendIdx -// Create "Press Start" and copyright banners, and slide Pokemon logo up +// Create "Press Start" and copyright banners, and slide Pokémon logo up static void Task_TitleScreenPhase2(u8 taskId) { u32 yPos; @@ -767,7 +767,7 @@ static void Task_TitleScreenPhase2(u8 taskId) if (!(gTasks[taskId].tCounter & 1) && gTasks[taskId].tBg2Y != 0) gTasks[taskId].tBg2Y++; - // Slide Pokemon logo up + // Slide Pokémon logo up yPos = gTasks[taskId].tBg2Y * 256; SetGpuReg(REG_OFFSET_BG2Y_L, yPos); SetGpuReg(REG_OFFSET_BG2Y_H, yPos / 0x10000); diff --git a/src/trade.c b/src/trade.c index ec9486afa1..e07e418d1a 100644 --- a/src/trade.c +++ b/src/trade.c @@ -168,7 +168,7 @@ static EWRAM_DATA u8 *sMenuTextTileBuffer = NULL; // Bytes 0-2 are used for the player's name text // Bytes 3-5 are used for the partner's name text // Bytes 6-7 are used for the Cancel text -// Bytes 8-13 are used for the Choose a Pokemon text +// Bytes 8-13 are used for the Choose a Pokémon text // See the corresponding GFXTAGs in src/data/trade.h static EWRAM_DATA u8 *sMenuTextTileBuffers[NUM_MENU_TEXT_SPRITES] = {NULL}; @@ -1010,25 +1010,25 @@ static void SetActiveMenuOptions(void) { if (i < sTradeMenu->partyCounts[TRADE_PLAYER]) { - // Present player pokemon + // Present player Pokémon gSprites[sTradeMenu->partySpriteIds[TRADE_PLAYER][i]].invisible = FALSE; sTradeMenu->optionsActive[i] = TRUE; } else { - // Absent player pokemon + // Absent player Pokémon sTradeMenu->optionsActive[i] = FALSE; } if (i < sTradeMenu->partyCounts[TRADE_PARTNER]) { - // Present partner pokemon + // Present partner Pokémon gSprites[sTradeMenu->partySpriteIds[TRADE_PARTNER][i]].invisible = FALSE; sTradeMenu->optionsActive[i + PARTY_SIZE] = TRUE; } else { - // Absent partner pokemon + // Absent partner Pokémon sTradeMenu->optionsActive[i + PARTY_SIZE] = FALSE; } } @@ -1285,7 +1285,7 @@ static void Leader_HandleCommunication(void) if (sTradeMenu->playerSelectStatus == STATUS_READY && sTradeMenu->partnerSelectStatus == STATUS_READY) { - // Both players have selected a pokemon to trade + // Both players have selected a Pokémon to trade sTradeMenu->callbackId = CB_SET_SELECTED_MONS; sTradeMenu->linkData[0] = LINKCMD_SET_MONS_TO_TRADE; sTradeMenu->linkData[1] = sTradeMenu->cursorPosition; @@ -1295,7 +1295,7 @@ static void Leader_HandleCommunication(void) else if (sTradeMenu->playerSelectStatus == STATUS_READY && sTradeMenu->partnerSelectStatus == STATUS_CANCEL) { - // The player has selected a pokemon to trade, + // The player has selected a Pokémon to trade, // but the partner has selected Cancel PrintTradeMessage(MSG_CANCELED); sTradeMenu->linkData[0] = LINKCMD_PARTNER_CANCEL_TRADE; @@ -1308,7 +1308,7 @@ static void Leader_HandleCommunication(void) else if (sTradeMenu->playerSelectStatus == STATUS_CANCEL && sTradeMenu->partnerSelectStatus == STATUS_READY) { - // The partner has selected a pokemon to trade, + // The partner has selected a Pokémon to trade, // but the player has selected cancel PrintTradeMessage(MSG_FRIEND_WANTS_TO_TRADE); sTradeMenu->linkData[0] = LINKCMD_PLAYER_CANCEL_TRADE; @@ -1465,7 +1465,7 @@ static void CB_ProcessMenuInput(void) if (sTradeMenu->cursorPosition < PARTY_SIZE) { - // Selected pokemon in player's party + // Selected Pokémon in player's party DrawTextBorderOuter(1, 1, 14); FillWindowPixelBuffer(1, PIXEL_FILL(1)); PrintMenuTable(1, ARRAY_COUNT(sSelectTradeMonActions), sSelectTradeMonActions); @@ -1476,7 +1476,7 @@ static void CB_ProcessMenuInput(void) } else if (sTradeMenu->cursorPosition < PARTY_SIZE * 2) { - // Selected pokemon in partner's party + // Selected Pokémon in partner's party BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); sTradeMenu->callbackId = CB_SHOW_MON_SUMMARY; } @@ -1855,7 +1855,7 @@ static void SetSelectedMon(u8 cursorPosition) if (sTradeMenu->drawSelectedMonState[whichParty] == 0) { // Start the animation to display just the selected - // pokemon in the middle of the screen + // Pokémon in the middle of the screen sTradeMenu->drawSelectedMonState[whichParty] = 1; sTradeMenu->selectedMonIdx[whichParty] = cursorPosition; } @@ -1889,10 +1889,10 @@ static void DrawSelectedMonScreen(u8 whichParty) for (i = 0; i < PARTY_SIZE; i++) ClearWindowTilemap(i + (whichParty * PARTY_SIZE + 2)); - // Re-display the selected pokemon + // Re-display the selected Pokémon gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]].invisible = FALSE; - // Move the selected pokemon to the center + // Move the selected Pokémon to the center gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]].data[0] = 20; gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]].data[2] = (sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE][0] + sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; @@ -3109,13 +3109,13 @@ static void TradeMons(u8 playerPartyIdx, u8 partnerPartyIdx) struct Pokemon *partnerMon = &gEnemyParty[partnerPartyIdx]; u16 partnerMail = GetMonData(partnerMon, MON_DATA_MAIL); - // The mail attached to the sent Pokemon no longer exists in your file. + // The mail attached to the sent Pokémon no longer exists in your file. if (playerMail != MAIL_NONE) ClearMail(&gSaveBlock1Ptr->mail[playerMail]); SWAP(*playerMon, *partnerMon, sTradeAnim->tempMon); - // By default, a Pokemon received from a trade will have 70 Friendship. + // By default, a Pokémon received from a trade will have 70 Friendship. // Eggs use Friendship to track egg cycles, so don't set this on Eggs. friendship = 70; if (!GetMonData(playerMon, MON_DATA_IS_EGG)) diff --git a/src/trainer_pokemon_sprites.c b/src/trainer_pokemon_sprites.c index b6e2b63c35..f36060e8d1 100644 --- a/src/trainer_pokemon_sprites.c +++ b/src/trainer_pokemon_sprites.c @@ -11,7 +11,7 @@ #define PICS_COUNT 8 -// Needs to be large enough to store either a decompressed pokemon pic or trainer pic +// Needs to be large enough to store either a decompressed Pokémon pic or trainer pic #define PIC_SPRITE_SIZE max(MON_PIC_SIZE, TRAINER_PIC_SIZE) #define MAX_PIC_FRAMES max(MAX_MON_PIC_FRAMES, MAX_TRAINER_PIC_FRAMES) diff --git a/src/tv.c b/src/tv.c index ef493c10ce..0152dffa3e 100644 --- a/src/tv.c +++ b/src/tv.c @@ -6241,7 +6241,7 @@ static void DoTVShowSpotTheCuties(void) TVShowConvertInternationalString(gStringVar1, show->cuties.playerName, show->cuties.language); TVShowConvertInternationalString(gStringVar2, show->cuties.nickname, show->cuties.pokemonNameLanguage); - // Comments following the intro depend on how many ribbons the pokemon has + // Comments following the intro depend on how many ribbons the Pokémon has if (show->cuties.nRibbons < 10) sTVShowState = SPOTCUTIES_STATE_RIBBONS_LOW; else if (show->cuties.nRibbons < 20) diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index 2aefdedf38..7a37d88f0d 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -73,7 +73,7 @@ struct UsePokeblockSession u8 natureText[34]; }; -// This struct is identical to PokenavMonListItem, the struct used for managing lists of pokemon in the pokenav +// This struct is identical to PokenavMonListItem, the struct used for managing lists of Pokémon in the pokenav // Given that this screen is essentially duplicated in the poknav, this struct was probably the same one with // a more general name/purpose // TODO: Once the pokenav conditions screens are documented, resolve the above @@ -1259,7 +1259,7 @@ static void LoadAndCreateSelectionIcons(void) LoadSpriteSheets(spriteSheets); LoadSpritePalettes(spritePals); - // Fill pokeball selection icons up to number in party + // Fill Poké Ball selection icons up to number in party for (i = 0; i < sMenu->info.numSelections - 1; i++) { spriteId = CreateSprite(&spriteTemplate, 226, (i * 20) + 8, 0); @@ -1489,7 +1489,7 @@ static bool8 LoadNewSelection_CancelToMon(void) case 2: if (!ConditionMenu_UpdateMonEnter(&sMenu->graph, &sMenu->curMonXOffset)) { - // Load the new adjacent pokemon (not the one being shown) + // Load the new adjacent Pokémon (not the one being shown) LoadMonInfo(sMenu->toLoadSelection, sMenu->toLoadId); sMenu->info.helperState++; } @@ -1552,7 +1552,7 @@ static bool8 LoadNewSelection_MonToMon(void) case 2: if (!ConditionMenu_UpdateMonEnter(&sMenu->graph, &sMenu->curMonXOffset)) { - // Load the new adjacent pokemon (not the one being shown) + // Load the new adjacent Pokémon (not the one being shown) LoadMonInfo(sMenu->toLoadSelection, sMenu->toLoadId); sMenu->info.helperState++; } @@ -1593,8 +1593,8 @@ static void SpriteCB_SelectionIconCancel(struct Sprite *sprite) sprite->oam.paletteNum = IndexOfSpritePaletteTag(TAG_CONDITION_CANCEL); } -// Calculate the max id for sparkles/stars that appear around the pokemon on the condition screen -// All pokemon start with 1 sparkle (added by CreateConditionSparkleSprites), so the number here +1 +// Calculate the max id for sparkles/stars that appear around the Pokémon on the condition screen +// All Pokémon start with 1 sparkle (added by CreateConditionSparkleSprites), so the number here +1 // is the total number of sparkles that appear static void CalculateNumAdditionalSparkles(u8 monIndex) { diff --git a/src/wild_encounter.c b/src/wild_encounter.c index 3a7f6cab23..11d01f04ea 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -364,7 +364,7 @@ static u8 PickWildMonNature(void) } } } - // check synchronize for a pokemon with the same ability + // check synchronize for a Pokémon with the same ability if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG) && GetMonAbility(&gPlayerParty[0]) == ABILITY_SYNCHRONIZE && Random() % 2 == 0) @@ -812,16 +812,16 @@ u16 GetLocalWildMon(bool8 *isWaterMon) // Neither if (landMonsInfo == NULL && waterMonsInfo == NULL) return SPECIES_NONE; - // Land Pokemon + // Land Pokémon else if (landMonsInfo != NULL && waterMonsInfo == NULL) return landMonsInfo->wildPokemon[ChooseWildMonIndex_Land()].species; - // Water Pokemon + // Water Pokémon else if (landMonsInfo == NULL && waterMonsInfo != NULL) { *isWaterMon = TRUE; return waterMonsInfo->wildPokemon[ChooseWildMonIndex_WaterRock()].species; } - // Either land or water Pokemon + // Either land or water Pokémon if ((Random() % 100) < 80) { return landMonsInfo->wildPokemon[ChooseWildMonIndex_Land()].species; From bc2a7451715a2a3dacd4c624aa763a480660a0de Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Tue, 12 Dec 2023 23:18:35 +0100 Subject: [PATCH 083/120] Fix accidental symbol replacements --- src/battle_transition.c | 2 +- src/data/bard_music/bard_sounds.h | 4 ++-- src/data/party_menu.h | 2 +- src/party_menu.c | 2 +- src/pokemon.c | 2 +- src/pokemon_storage_system.c | 4 ++-- src/starter_choose.c | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/battle_transition.c b/src/battle_transition.c index 1c5b38faf8..11f9cddf4b 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -1315,7 +1315,7 @@ static void HBlankCB_Shuffle(void) #undef tAmplitude //------------------------------------------------------------------------ -// B_TRANSITION_BIG_Poké Ball, B_TRANSITION_AQUA, B_TRANSITION_MAGMA, +// B_TRANSITION_BIG_POKEBALL, B_TRANSITION_AQUA, B_TRANSITION_MAGMA, // B_TRANSITION_REGICE, B_TRANSITION_REGISTEEL, B_TRANSITION_REGIROCK // and B_TRANSITION_KYOGRE. // diff --git a/src/data/bard_music/bard_sounds.h b/src/data/bard_music/bard_sounds.h index bc6f88ba57..291d22872a 100644 --- a/src/data/bard_music/bard_sounds.h +++ b/src/data/bard_music/bard_sounds.h @@ -25,7 +25,7 @@ #include "trendysaying.h" const struct BardSound (*const gBardSoundsTable[EC_NUM_GROUPS])[6] = { - [EC_GROUP_POKEMON] = NULL, // Handled by gBardSounds_Pokémon + [EC_GROUP_POKEMON] = NULL, // Handled by gBardSounds_Pokemon [EC_GROUP_TRAINER] = gBardSounds_Trainer, [EC_GROUP_STATUS] = gBardSounds_Status, [EC_GROUP_BATTLE] = gBardSounds_Battle, @@ -46,7 +46,7 @@ const struct BardSound (*const gBardSoundsTable[EC_NUM_GROUPS])[6] = { [EC_GROUP_MOVE_1] = NULL, // Handled by gBardSounds_Moves [EC_GROUP_MOVE_2] = NULL, // Handled by gBardSounds_Moves [EC_GROUP_TRENDY_SAYING] = gBardSounds_TrendySaying, - [EC_GROUP_POKEMON_NATIONAL] = NULL // Handled by gBardSounds_Pokémon + [EC_GROUP_POKEMON_NATIONAL] = NULL // Handled by gBardSounds_Pokemon }; #endif //GUARD_BARD_SOUNDS_TABLE_H diff --git a/src/data/party_menu.h b/src/data/party_menu.h index 04e073df17..703e8e406e 100644 --- a/src/data/party_menu.h +++ b/src/data/party_menu.h @@ -983,7 +983,7 @@ static const struct CompressedSpriteSheet sSpriteSheet_MenuPokeballSmall = gPartyMenuPokeballSmall_Gfx, 0x0300, TAG_POKEBALL_SMALL }; -// Used for the pokeball sprite next to Cancel and Confirm when both are present, otherwise sSpriteTemplate_MenuPoké Ball is used +// Used for the pokeball sprite next to Cancel and Confirm when both are present, otherwise sSpriteTemplate_MenuPokeball is used static const struct SpriteTemplate sSpriteTemplate_MenuPokeballSmall = { .tileTag = TAG_POKEBALL_SMALL, diff --git a/src/party_menu.c b/src/party_menu.c index 2abceb50ae..adf833fe89 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -3512,7 +3512,7 @@ static void CursorCb_SendMon(u8 taskId) } else { - // gStringVar4 below is the error message buffered by TrySwitchInPokémon + // gStringVar4 below is the error message buffered by TrySwitchInPokemon PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); DisplayPartyMenuMessage(gStringVar4, TRUE); gTasks[taskId].func = Task_ReturnToChooseMonAfterText; diff --git a/src/pokemon.c b/src/pokemon.c index 51a512445e..6ee052fda5 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -98,7 +98,7 @@ static const struct CombinedMove sCombinedMoves[2] = }; // NOTE: The order of the elements in the 3 arrays below is irrelevant. -// To reorder the pokedex, see the values in include/constants/Pokédex.h. +// To reorder the pokedex, see the values in include/constants/pokedex.h. #define SPECIES_TO_HOENN(name) [SPECIES_##name - 1] = HOENN_DEX_##name #define SPECIES_TO_NATIONAL(name) [SPECIES_##name - 1] = NATIONAL_DEX_##name diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 92afe8a4bb..c8c87961c8 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -6687,8 +6687,8 @@ static void LoadSavedMovingMon(void) { if (sIsMonBeingMoved) { - // If it came from the party load a struct Pokémon, - // otherwise load a BoxPokémon + // If it came from the party load a struct Pokemon, + // otherwise load a BoxPokemon if (sMovingMonOrigBoxId == TOTAL_BOXES_COUNT) sStorage->movingMon = sSavedMovingMon; else diff --git a/src/starter_choose.c b/src/starter_choose.c index ef0b9388bf..cbbd163b03 100644 --- a/src/starter_choose.c +++ b/src/starter_choose.c @@ -367,7 +367,7 @@ static void VblankCB_StarterChoose(void) #define tPkmnSpriteId data[1] #define tCircleSpriteId data[2] -// Data for sSpriteTemplate_Poké Ball +// Data for sSpriteTemplate_Pokeball #define sTaskId data[0] #define sBallId data[1] From 63654311222936cc7ce18851847ac31b2791eef9 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Tue, 12 Dec 2023 23:20:22 +0100 Subject: [PATCH 084/120] =?UTF-8?q?Add=20Pok=C3=A9Nav=20too?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/graphics.h | 4 ++-- include/pokenav.h | 8 ++++---- include/strings.h | 6 +++--- src/graphics.c | 2 +- src/pokenav_menu_handler.c | 4 ++-- src/start_menu.c | 2 +- src/use_pokeblock.c | 4 ++-- 7 files changed, 15 insertions(+), 15 deletions(-) diff --git a/include/graphics.h b/include/graphics.h index e98b707957..9e2fb79539 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4005,7 +4005,7 @@ extern const u32 gBerryPalette_Starf[]; extern const u32 gBerryPic_Enigma[]; extern const u32 gBerryPalette_Enigma[]; -//pokenav +//PokéNav extern const u16 gPokenavCondition_Pal[]; extern const u32 gPokenavCondition_Gfx[]; extern const u32 gPokenavCondition_Tilemap[]; @@ -5011,7 +5011,7 @@ extern const u32 gBerryCrush_Crusher_Gfx[]; extern const u16 gBerryCrush_Crusher_Pal[]; extern const u32 gBerryCrush_TextWindows_Tilemap[]; -// Pokenav +// PokéNav extern const u32 gPokenavMessageBox_Gfx[]; extern const u32 gPokenavMessageBox_Tilemap[]; extern const u16 gPokenavMessageBox_Pal[]; diff --git a/include/pokenav.h b/include/pokenav.h index c6a8bb253e..174c338e27 100644 --- a/include/pokenav.h +++ b/include/pokenav.h @@ -65,8 +65,8 @@ struct PokenavMonList enum { POKENAV_MODE_NORMAL, // Chosen from Start menu. - POKENAV_MODE_FORCE_CALL_READY, // Pokenav tutorial before calling Mr. Stone - POKENAV_MODE_FORCE_CALL_EXIT, // Pokenav tutorial after calling Mr. Stone + POKENAV_MODE_FORCE_CALL_READY, // PokéNav tutorial before calling Mr. Stone + POKENAV_MODE_FORCE_CALL_EXIT, // PokéNav tutorial after calling Mr. Stone }; enum @@ -232,8 +232,8 @@ enum [CHECK_PAGE_INTRO_2] = gText_MatchCall##name##_Intro2} -// Pokenav Function IDs -// Indices into the LoopedTask tables for each of the main Pokenav features +// PokéNav Function IDs +// Indices into the LoopedTask tables for each of the main PokéNav features enum RegionMapFuncIds { diff --git a/include/strings.h b/include/strings.h index 914082779b..3215f70c88 100644 --- a/include/strings.h +++ b/include/strings.h @@ -2949,7 +2949,7 @@ extern const u8 gText_CutenessContest[]; extern const u8 gText_SmartnessContest[]; extern const u8 gText_ToughnessContest[]; -// Pokenav Match Call +// PokéNav Match Call extern const u8 gText_CallCantBeMadeHere[]; extern const u8 gText_NumberRegistered[]; extern const u8 gText_NumberOfBattles[]; @@ -2959,7 +2959,7 @@ extern const u8 gText_Call[]; extern const u8 gText_Check[]; extern const u8 gText_Cancel6[]; -// Pokenav Menu Handler +// PokéNav Menu Handler extern const u8 gText_CheckMapOfHoenn[]; extern const u8 gText_CheckPokemonInDetail[]; extern const u8 gText_CallRegisteredTrainer[]; @@ -2976,7 +2976,7 @@ extern const u8 gText_FindToughPokemon[]; extern const u8 gText_ReturnToConditionMenu[]; extern const u8 gText_NoRibbonWinners[]; -// Pokenav +// PokéNav extern const u8 gText_NumberIndex[]; extern const u8 gText_RibbonsF700[]; diff --git a/src/graphics.c b/src/graphics.c index 39b6c8e680..8f1bc89ea6 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1282,7 +1282,7 @@ const u16 gContestResultsTitle_Smart_Tilemap[] = INCBIN_U16("graphics/contest/r const u16 gContestResultsTitle_Tough_Tilemap[] = INCBIN_U16("graphics/contest/results_screen/title_tough.bin"); const u16 gContestResultsTitle_Tilemap[] = INCBIN_U16("graphics/contest/results_screen/title.bin"); -// pokenav +// PokéNav const u16 gPokenavCondition_Pal[] = INCBIN_U16("graphics/pokenav/condition/graph.gbapal"); const u32 gPokenavCondition_Gfx[] = INCBIN_U32("graphics/pokenav/condition/graph.4bpp.lz"); diff --git a/src/pokenav_menu_handler.c b/src/pokenav_menu_handler.c index b81b4c892f..d67f61c1ea 100644 --- a/src/pokenav_menu_handler.c +++ b/src/pokenav_menu_handler.c @@ -257,7 +257,7 @@ static u32 HandleMainMenuInput(struct Pokenav_Menu *menu) return POKENAV_MENU_FUNC_NONE; } -// Force the player to select Match Call during the call Mr. Stone pokenav tutorial +// Force the player to select Match Call during the call Mr. Stone PokéNav tutorial static u32 HandleMainMenuInputTutorial(struct Pokenav_Menu *menu) { if (UpdateMenuCursorPos(menu)) @@ -287,7 +287,7 @@ static u32 HandleMainMenuInputTutorial(struct Pokenav_Menu *menu) return POKENAV_MENU_FUNC_NONE; } -// After calling Mr. Stone during the pokenav tutorial, force player to exit or use Match Call again +// After calling Mr. Stone during the PokéNav tutorial, force player to exit or use Match Call again static u32 HandleMainMenuInputEndTutorial(struct Pokenav_Menu *menu) { if (UpdateMenuCursorPos(menu)) diff --git a/src/start_menu.c b/src/start_menu.c index 0c8fe01f0e..63914cbb72 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -689,7 +689,7 @@ static bool8 StartMenuPokeNavCallback(void) PlayRainStoppingSoundEffect(); RemoveExtraStartMenuWindows(); CleanupOverworldWindowsAndTilemaps(); - SetMainCallback2(CB2_InitPokeNav); // Display PokeNav + SetMainCallback2(CB2_InitPokeNav); // Display PokéNav return TRUE; } diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index 7a37d88f0d..c9d5c56e5c 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -73,10 +73,10 @@ struct UsePokeblockSession u8 natureText[34]; }; -// This struct is identical to PokenavMonListItem, the struct used for managing lists of Pokémon in the pokenav +// This struct is identical to PokenavMonListItem, the struct used for managing lists of Pokémon in the PokéNav // Given that this screen is essentially duplicated in the poknav, this struct was probably the same one with // a more general name/purpose -// TODO: Once the pokenav conditions screens are documented, resolve the above +// TODO: Once the PokéNav conditions screens are documented, resolve the above struct UsePokeblockMenuPokemon { u8 boxId; // Because this screen is never used for the PC this is always set to TOTAL_BOXES_COUNT to refer to party From f8a4cf9d85a3ab02ca5d2b0a993acc2b69270119 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Wed, 13 Dec 2023 09:52:04 +0100 Subject: [PATCH 085/120] Update pokedex.c --- src/pokedex.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pokedex.c b/src/pokedex.c index d5db9987dd..0d1520a490 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -1758,7 +1758,7 @@ static void Task_HandlePokedexStartMenuInput(u8 taskId) CreateMonSpritesAtPos(sPokedexView->selectedPokemon, 0xE); gMain.newKeys |= START_BUTTON; //Exit menu break; - case 3: //CLOSE Pokédex + case 3: //CLOSE POKéDEX BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK); gTasks[taskId].func = Task_ClosePokedex; PlaySE(SE_PC_OFF); @@ -1958,12 +1958,12 @@ static void Task_HandleSearchResultsStartMenuInput(u8 taskId) CreateMonSpritesAtPos(sPokedexView->selectedPokemon, 0xE); gMain.newKeys |= START_BUTTON; break; - case 3: //BACK TO Pokédex + case 3: //BACK TO POKéDEX BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK); gTasks[taskId].func = Task_ReturnToPokedexFromSearchResults; PlaySE(SE_TRUCK_DOOR); break; - case 4: //CLOSE Pokédex + case 4: //CLOSE POKéDEX BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK); gTasks[taskId].func = Task_ClosePokedexFromSearchResultsStartMenu; PlaySE(SE_PC_OFF); From 027dccfc95ef0712d3b802c791c2589d68d6cb94 Mon Sep 17 00:00:00 2001 From: Jaizu Date: Wed, 20 Dec 2023 12:24:52 +0100 Subject: [PATCH 086/120] Missing constant --- src/field_message_box.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/field_message_box.c b/src/field_message_box.c index 55124e7dfc..b797e1d353 100755 --- a/src/field_message_box.c +++ b/src/field_message_box.c @@ -84,7 +84,7 @@ bool8 ShowPokenavFieldMessage(const u8 *str) StringExpandPlaceholders(gStringVar4, str); CreateTask(Task_HidePokenavMessageWhenDone, 0); StartMatchCallFromScript(str); - sFieldMessageBoxMode = 2; + sFieldMessageBoxMode = FIELD_MESSAGE_BOX_NORMAL; return TRUE; } From 7567b0a57ad99a9988039f2434e5ec4622f7775b Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Wed, 27 Dec 2023 17:29:35 -0500 Subject: [PATCH 087/120] safeguard SQUARE and CUBE macro arguments in parentheses --- src/data/pokemon/experience_tables.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/data/pokemon/experience_tables.h b/src/data/pokemon/experience_tables.h index 15bcadeb29..8f50e10918 100644 --- a/src/data/pokemon/experience_tables.h +++ b/src/data/pokemon/experience_tables.h @@ -1,5 +1,5 @@ -#define SQUARE(n)(n * n) -#define CUBE(n)(n * n * n) +#define SQUARE(n)((n) * (n)) +#define CUBE(n)((n) * (n) * (n)) #define EXP_SLOW(n)((5 * CUBE(n)) / 4) // (5 * (n)^3) / 4 #define EXP_FAST(n)((4 * CUBE(n)) / 5) // (4 * (n)^3) / 5 From 8e8d2f5efab9fff392326eee19a32ac936b99e5b Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 18 Jan 2024 14:31:04 -0500 Subject: [PATCH 088/120] Remove non-existent tilesets from label comments and alphabetize --- include/constants/metatile_labels.h | 142 ++++++++++++++-------------- 1 file changed, 71 insertions(+), 71 deletions(-) diff --git a/include/constants/metatile_labels.h b/include/constants/metatile_labels.h index c2c018761a..3b63d80f84 100644 --- a/include/constants/metatile_labels.h +++ b/include/constants/metatile_labels.h @@ -9,18 +9,6 @@ #define METATILE_BattleDome_Door_Lobby 0x209 #define METATILE_BattleDome_Door_PreBattleRoom 0x20A -// gTileset_BattleFrontierOutsideEast -#define METATILE_BattleFrontierOutsideEast_Door 0x3FC -#define METATILE_BattleFrontierOutsideEast_Door_BattleArena 0x291 -#define METATILE_BattleFrontierOutsideEast_Door_BattleTower 0x329 -#define METATILE_BattleFrontierOutsideEast_Door_Sliding 0x396 - -// gTileset_BattleFrontierOutsideWest -#define METATILE_BattleFrontierOutsideWest_Door 0x3FC -#define METATILE_BattleFrontierOutsideWest_Door_BattleDome 0x28A -#define METATILE_BattleFrontierOutsideWest_Door_BattleFactory 0x263 -#define METATILE_BattleFrontierOutsideWest_Door_Sliding 0x396 - // gTileset_BattleFrontier #define METATILE_BattleFrontier_CorridorOpenDoor_Bottom 0x20F #define METATILE_BattleFrontier_CorridorOpenDoor_Top 0x207 @@ -36,6 +24,18 @@ #define METATILE_BattleFrontier_Elevator_Top1 0x32A #define METATILE_BattleFrontier_Elevator_Top2 0x32B +// gTileset_BattleFrontierOutsideEast +#define METATILE_BattleFrontierOutsideEast_Door 0x3FC +#define METATILE_BattleFrontierOutsideEast_Door_BattleArena 0x291 +#define METATILE_BattleFrontierOutsideEast_Door_BattleTower 0x329 +#define METATILE_BattleFrontierOutsideEast_Door_Sliding 0x396 + +// gTileset_BattleFrontierOutsideWest +#define METATILE_BattleFrontierOutsideWest_Door 0x3FC +#define METATILE_BattleFrontierOutsideWest_Door_BattleDome 0x28A +#define METATILE_BattleFrontierOutsideWest_Door_BattleFactory 0x263 +#define METATILE_BattleFrontierOutsideWest_Door_Sliding 0x396 + // gTileset_BattlePalace #define METATILE_BattlePalace_Door 0x219 @@ -272,6 +272,18 @@ #define METATILE_Lavaridge_NormalGrass 0x206 #define METATILE_Lavaridge_RockWall 0x274 +// gTileset_Lilycove +#define METATILE_Lilycove_Door 0x246 +#define METATILE_Lilycove_Door_DeptStore 0x30C +#define METATILE_Lilycove_Door_SafariZone 0x32D +#define METATILE_Lilycove_Door_Wooden 0x28E +#define METATILE_Lilycove_Wailmer0 0x290 +#define METATILE_Lilycove_Wailmer0_Alt 0x298 +#define METATILE_Lilycove_Wailmer1 0x291 +#define METATILE_Lilycove_Wailmer1_Alt 0x299 +#define METATILE_Lilycove_Wailmer2 0x2A0 +#define METATILE_Lilycove_Wailmer3 0x2A1 + // gTileset_LilycoveMuseum #define METATILE_LilycoveMuseum_Painting0_Left 0x25A #define METATILE_LilycoveMuseum_Painting0_Right 0x25B @@ -284,17 +296,31 @@ #define METATILE_LilycoveMuseum_Painting4_Left 0x262 #define METATILE_LilycoveMuseum_Painting4_Right 0x263 -// gTileset_Lilycove -#define METATILE_Lilycove_Door 0x246 -#define METATILE_Lilycove_Door_DeptStore 0x30C -#define METATILE_Lilycove_Door_SafariZone 0x32D -#define METATILE_Lilycove_Door_Wooden 0x28E -#define METATILE_Lilycove_Wailmer0 0x290 -#define METATILE_Lilycove_Wailmer0_Alt 0x298 -#define METATILE_Lilycove_Wailmer1 0x291 -#define METATILE_Lilycove_Wailmer1_Alt 0x299 -#define METATILE_Lilycove_Wailmer2 0x2A0 -#define METATILE_Lilycove_Wailmer3 0x2A1 +// gTileset_Mauville +#define METATILE_Mauville_DeepSand_BottomMid 0x259 +#define METATILE_Mauville_DeepSand_Center 0x251 +#define METATILE_Mauville_Door 0x2AC +#define METATILE_Mauville_Door_BattleTent 0x3D4 +#define METATILE_Mauville_Door_CyclingRoad 0x289 +#define METATILE_Mauville_Door_Verdanturf 0x3A1 +#define METATILE_Mauville_MirageTower_Tile0 0x3D8 +#define METATILE_Mauville_MirageTower_Tile1 0x3D9 +#define METATILE_Mauville_MirageTower_Tile10 0x3E4 +#define METATILE_Mauville_MirageTower_Tile11 0x3E5 +#define METATILE_Mauville_MirageTower_Tile2 0x3DA +#define METATILE_Mauville_MirageTower_Tile3 0x3E0 +#define METATILE_Mauville_MirageTower_Tile4 0x3E1 +#define METATILE_Mauville_MirageTower_Tile5 0x3E2 +#define METATILE_Mauville_MirageTower_Tile6 0x3E8 +#define METATILE_Mauville_MirageTower_Tile7 0x3E9 +#define METATILE_Mauville_MirageTower_Tile8 0x3EA +#define METATILE_Mauville_MirageTower_Tile9 0x3F0 +#define METATILE_Mauville_MirageTower_TileA 0x3F1 +#define METATILE_Mauville_MirageTower_TileB 0x3F2 +#define METATILE_Mauville_MirageTower_TileC 0x3DB +#define METATILE_Mauville_MirageTower_TileD 0x3DC +#define METATILE_Mauville_MirageTower_TileE 0x3DD +#define METATILE_Mauville_MirageTower_TileF 0x3E3 // gTileset_MauvilleGym #define METATILE_MauvilleGym_FloorTile 0x21A @@ -325,38 +351,16 @@ #define METATILE_MauvilleGym_RedBeamV1_On 0x241 #define METATILE_MauvilleGym_RedBeamV2_On 0x249 -// gTileset_Mauville -#define METATILE_Mauville_DeepSand_BottomMid 0x259 -#define METATILE_Mauville_DeepSand_Center 0x251 -#define METATILE_Mauville_Door 0x2AC -#define METATILE_Mauville_Door_BattleTent 0x3D4 -#define METATILE_Mauville_Door_CyclingRoad 0x289 -#define METATILE_Mauville_Door_Verdanturf 0x3A1 -#define METATILE_Mauville_MirageTower_Tile0 0x3D8 -#define METATILE_Mauville_MirageTower_Tile1 0x3D9 -#define METATILE_Mauville_MirageTower_Tile10 0x3E4 -#define METATILE_Mauville_MirageTower_Tile11 0x3E5 -#define METATILE_Mauville_MirageTower_Tile2 0x3DA -#define METATILE_Mauville_MirageTower_Tile3 0x3E0 -#define METATILE_Mauville_MirageTower_Tile4 0x3E1 -#define METATILE_Mauville_MirageTower_Tile5 0x3E2 -#define METATILE_Mauville_MirageTower_Tile6 0x3E8 -#define METATILE_Mauville_MirageTower_Tile7 0x3E9 -#define METATILE_Mauville_MirageTower_Tile8 0x3EA -#define METATILE_Mauville_MirageTower_Tile9 0x3F0 -#define METATILE_Mauville_MirageTower_TileA 0x3F1 -#define METATILE_Mauville_MirageTower_TileB 0x3F2 -#define METATILE_Mauville_MirageTower_TileC 0x3DB -#define METATILE_Mauville_MirageTower_TileD 0x3DC -#define METATILE_Mauville_MirageTower_TileE 0x3DD -#define METATILE_Mauville_MirageTower_TileF 0x3E3 - // gTileset_MeteorFalls #define METATILE_MeteorFalls_CaveEntrance_Bottom 0x24E #define METATILE_MeteorFalls_CaveEntrance_Left 0x24D #define METATILE_MeteorFalls_CaveEntrance_Right 0x24F #define METATILE_MeteorFalls_CaveEntrance_Top 0x246 +// gTileset_Mossdeep +#define METATILE_Mossdeep_Door 0x2A1 +#define METATILE_Mossdeep_Door_SpaceCenter 0x2ED + // gTileset_MossdeepGameCorner #define METATILE_MossdeepGameCorner_CounterClosed_Bottom 0x232 #define METATILE_MossdeepGameCorner_CounterClosed_Top 0x22A @@ -366,10 +370,6 @@ // gTileset_MossdeepGym #define METATILE_MossdeepGym_YellowArrow_Right 0x250 -// gTileset_Mossdeep -#define METATILE_Mossdeep_Door 0x2A1 -#define METATILE_Mossdeep_Door_SpaceCenter 0x2ED - // gTileset_Pacifidlog #define METATILE_Pacifidlog_Door 0x21A #define METATILE_Pacifidlog_FloatingLogs_HorizontalLeft 0x250 @@ -388,6 +388,11 @@ #define METATILE_Pacifidlog_SubmergedLogs_VerticalBottom 0x262 #define METATILE_Pacifidlog_SubmergedLogs_VerticalTop 0x25A +// gTileset_Petalburg +#define METATILE_Petalburg_Door_BirchsLab 0x249 +#define METATILE_Petalburg_Door_Littleroot 0x248 +#define METATILE_Petalburg_Door_Oldale 0x287 + // gTileset_PetalburgGym #define METATILE_PetalburgGym_Door 0x224 #define METATILE_PetalburgGym_RoomEntrance_Left 0x210 @@ -398,11 +403,6 @@ #define METATILE_PetalburgGym_SlidingDoor_Frame3 0x21B #define METATILE_PetalburgGym_SlidingDoor_Frame4 0x21C -// gTileset_Petalburg -#define METATILE_Petalburg_Door_BirchsLab 0x249 -#define METATILE_Petalburg_Door_Littleroot 0x248 -#define METATILE_Petalburg_Door_Oldale 0x287 - // gTileset_PokemonCenter #define METATILE_PokemonCenter_CounterBarrier 0x25D #define METATILE_PokemonCenter_Door_CableClub 0x264 @@ -431,14 +431,6 @@ #define METATILE_PokemonCenter_Floor_ShadowTop 0x21E #define METATILE_PokemonCenter_Floor_ShadowTop_Alt 0x2DC -// gTileset_RSMossdeepGym -#define METATILE_RSMossdeepGym_RedArrow_Down 0x205 -#define METATILE_RSMossdeepGym_RedArrow_Left 0x20C -#define METATILE_RSMossdeepGym_RedArrow_Right 0x204 -#define METATILE_RSMossdeepGym_RedArrow_Up 0x20D -#define METATILE_RSMossdeepGym_Switch_Down 0x239 -#define METATILE_RSMossdeepGym_Switch_Up 0x238 - // gTileset_Rustboro #define METATILE_Rustboro_Door_Gray 0x21F #define METATILE_Rustboro_Door_Tan 0x22F @@ -726,11 +718,6 @@ #define METATILE_Slateport_Door 0x2DC #define METATILE_Slateport_Door_BattleTent 0x393 -// gTileset_SootopolisGym -#define METATILE_SootopolisGym_Ice_Broken 0x206 -#define METATILE_SootopolisGym_Ice_Cracked 0x20E -#define METATILE_SootopolisGym_Stairs 0x207 - // gTileset_Sootopolis #define METATILE_Sootopolis_Door 0x21E #define METATILE_Sootopolis_Door_Closed 0x248 @@ -738,6 +725,11 @@ #define METATILE_Sootopolis_GymDoor_Closed 0x250 #define METATILE_Sootopolis_RoughWater 0x290 +// gTileset_SootopolisGym +#define METATILE_SootopolisGym_Ice_Broken 0x206 +#define METATILE_SootopolisGym_Ice_Cracked 0x20E +#define METATILE_SootopolisGym_Stairs 0x207 + // gTileset_TrainerHill #define METATILE_TrainerHill_CounterDoor 0x334 #define METATILE_TrainerHill_Door_Elevator_Lobby 0x32C @@ -787,4 +779,12 @@ #define METATILE_Underwater_FloorShadow 0x228 #define METATILE_Underwater_RockWall 0x21E +// Other +#define METATILE_RSMossdeepGym_RedArrow_Down 0x205 +#define METATILE_RSMossdeepGym_RedArrow_Left 0x20C +#define METATILE_RSMossdeepGym_RedArrow_Right 0x204 +#define METATILE_RSMossdeepGym_RedArrow_Up 0x20D +#define METATILE_RSMossdeepGym_Switch_Down 0x239 +#define METATILE_RSMossdeepGym_Switch_Up 0x238 + #endif // GUARD_METATILE_LABELS_H From 8cab1b7094999e7b8c95fc47d23fbdc76b26b471 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Thu, 18 Jan 2024 17:07:17 -0300 Subject: [PATCH 089/120] Fixed braces style --- gflib/malloc.c | 34 +++++++++++++++++++++++----------- src/battle_anim_ghost.c | 6 ++++-- src/berry_blender.c | 3 ++- src/contest_effect.c | 3 ++- src/decompress.c | 15 ++++++++++----- src/decoration.c | 6 ++++-- src/dodrio_berry_picking.c | 21 ++++++++++++++------- src/mini_printf.c | 15 ++++++++++----- src/slot_machine.c | 3 ++- 9 files changed, 71 insertions(+), 35 deletions(-) diff --git a/gflib/malloc.c b/gflib/malloc.c index f54c751a4c..829877d892 100644 --- a/gflib/malloc.c +++ b/gflib/malloc.c @@ -55,18 +55,24 @@ void *AllocInternal(void *heapStart, u32 size) if (size & 3) size = 4 * ((size / 4) + 1); - for (;;) { + for (;;) + { // Loop through the blocks looking for unused block that's big enough. - if (!pos->flag) { + if (!pos->flag) + { foundBlockSize = pos->size; - if (foundBlockSize >= size) { - if (foundBlockSize - size < 2 * sizeof(struct MemBlock)) { + if (foundBlockSize >= size) + { + if (foundBlockSize - size < 2 * sizeof(struct MemBlock)) + { // The block isn't much bigger than the requested size, // so just use it. pos->flag = TRUE; - } else { + } + else + { // The block is significantly bigger than the requested // size, so split the rest into a separate block. foundBlockSize -= sizeof(struct MemBlock); @@ -98,15 +104,18 @@ void *AllocInternal(void *heapStart, u32 size) void FreeInternal(void *heapStart, void *pointer) { - if (pointer) { + if (pointer) + { struct MemBlock *head = (struct MemBlock *)heapStart; struct MemBlock *block = (struct MemBlock *)((u8 *)pointer - sizeof(struct MemBlock)); block->flag = FALSE; // If the freed block isn't the last one, merge with the next block // if it's not in use. - if (block->next != head) { - if (!block->next->flag) { + if (block->next != head) + { + if (!block->next->flag) + { block->size += sizeof(struct MemBlock) + block->next->size; block->next->magic = 0; block->next = block->next->next; @@ -117,8 +126,10 @@ void FreeInternal(void *heapStart, void *pointer) // If the freed block isn't the first one, merge with the previous block // if it's not in use. - if (block != head) { - if (!block->prev->flag) { + if (block != head) + { + if (!block->prev->flag) + { block->prev->next = block->next; if (block->next != head) @@ -135,7 +146,8 @@ void *AllocZeroedInternal(void *heapStart, u32 size) { void *mem = AllocInternal(heapStart, size); - if (mem != NULL) { + if (mem != NULL) + { if (size & 3) size = 4 * ((size / 4) + 1); diff --git a/src/battle_anim_ghost.c b/src/battle_anim_ghost.c index fed1325bc3..d6afd4c304 100644 --- a/src/battle_anim_ghost.c +++ b/src/battle_anim_ghost.c @@ -628,11 +628,13 @@ static void AnimTask_SpiteTargetShadow_Step1(u8 taskId) task->data[3] = 16; task->data[13] = GetAnimBattlerSpriteId(ANIM_TARGET); task->data[4] = OBJ_PLTT_ID2(gSprites[task->data[13]].oam.paletteNum); - if (position == 1) { + if (position == 1) + { u16 mask = DISPCNT_BG1_ON; mask2 = mask; } - else { + else + { u16 mask = DISPCNT_BG2_ON; mask2 = mask; } diff --git a/src/berry_blender.c b/src/berry_blender.c index 97262a4e2f..a91cafb0fb 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -2050,7 +2050,8 @@ static void UpdateSpeedFromHit(u16 cmd) switch (cmd) { case LINKCMD_BLENDER_SCORE_BEST: - if (sBerryBlender->speed < 1500) { + if (sBerryBlender->speed < 1500) + { sBerryBlender->speed += (384 / sNumPlayersToSpeedDivisor[sBerryBlender->numPlayers]); } else diff --git a/src/contest_effect.c b/src/contest_effect.c index b927943036..24de8e1692 100644 --- a/src/contest_effect.c +++ b/src/contest_effect.c @@ -138,7 +138,8 @@ static void ContestEffect_StartleFrontMon(void) u8 idx = 0; u8 a = eContestAppealResults.contestant; - if (eContestAppealResults.turnOrder[a] != 0) { + if (eContestAppealResults.turnOrder[a] != 0) + { int i; for (i = 0; i < CONTESTANT_COUNT; i++) diff --git a/src/decompress.c b/src/decompress.c index 8452f340ed..55807e89bb 100644 --- a/src/decompress.c +++ b/src/decompress.c @@ -214,7 +214,8 @@ static void UNUSED StitchObjectsOn8x8Canvas(s32 object_size, s32 object_count, u // While the remaining space will be filled with actual data if (object_size == 6) { - for (k = 0; k < 256; k++) { + for (k = 0; k < 256; k++) + { *dest = 0; dest++; } @@ -224,14 +225,16 @@ static void UNUSED StitchObjectsOn8x8Canvas(s32 object_size, s32 object_count, u { if (object_size == 6) { - for (k = 0; k < 32; k++) { + for (k = 0; k < 32; k++) + { *dest = 0; dest++; } } // Copy tile data - for (k = 0; k < 32 * object_size; k++) { + for (k = 0; k < 32 * object_size; k++) + { *dest = *src; src++; dest++; @@ -239,7 +242,8 @@ static void UNUSED StitchObjectsOn8x8Canvas(s32 object_size, s32 object_count, u if (object_size == 6) { - for (k = 0; k < 32; k++) { + for (k = 0; k < 32; k++) + { *dest = 0; dest++; } @@ -248,7 +252,8 @@ static void UNUSED StitchObjectsOn8x8Canvas(s32 object_size, s32 object_count, u if (object_size == 6) { - for (k = 0; k < 256; k++) { + for (k = 0; k < 256; k++) + { *dest = 0; dest++; } diff --git a/src/decoration.c b/src/decoration.c index f4fae6cc5e..18d6e2e680 100644 --- a/src/decoration.c +++ b/src/decoration.c @@ -1340,7 +1340,8 @@ static void DecorationItemsMenuAction_AttemptPlace(u8 taskId) else { ConvertIntToDecimalStringN(gStringVar1, sDecorationContext.size, STR_CONV_MODE_RIGHT_ALIGN, 2); - if (sDecorationContext.isPlayerRoom == FALSE) { + if (sDecorationContext.isPlayerRoom == FALSE) + { StringExpandPlaceholders(gStringVar4, gText_NoMoreDecorations); } else @@ -2254,7 +2255,8 @@ static void Task_PutAwayDecoration(u8 taskId) gTasks[taskId].tState = 1; break; case 1: - if (!gPaletteFade.active) { + if (!gPaletteFade.active) + { DrawWholeMapView(); ScriptContext_SetupScript(SecretBase_EventScript_PutAwayDecoration); ClearDialogWindowAndFrame(0, TRUE); diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c index 1b4500002c..ce1877c6cd 100644 --- a/src/dodrio_berry_picking.c +++ b/src/dodrio_berry_picking.c @@ -1091,32 +1091,39 @@ static void InitResults_Member(void) { u8 i; - switch (sGame->state) { + switch (sGame->state) + { case 0: - if (SendBlock(0, sGame->berryResults[sGame->timer], sizeof(sGame->berryResults))) { + if (SendBlock(0, sGame->berryResults[sGame->timer], sizeof(sGame->berryResults))) + { sGame->playersReceived = 0; sGame->state++; } break; case 1: - if (IsLinkTaskFinished()) { + if (IsLinkTaskFinished()) + { sGame->state++; } break; case 2: - if (AllLinkBlocksReceived()) { - for (i = 0; i < sGame->numPlayers; i++) { + if (AllLinkBlocksReceived()) + { + for (i = 0; i < sGame->numPlayers; i++) + { memcpy(sGame->berryResults, gBlockRecvBuffer, sizeof(sGame->berryResults)); sGame->playersReceived = sGame->numPlayers; } } - if (sGame->playersReceived >= sGame->numPlayers) { + if (sGame->playersReceived >= sGame->numPlayers) + { sGame->timer++; sGame->state++; } break; default: - if (WaitFanfare(TRUE)) { + if (WaitFanfare(TRUE)) + { sGame->maxBerriesPickedInRow = sGame->berryResults[sGame->multiplayerId][BERRY_IN_ROW]; SetGameFunc(FUNC_RESULTS); FadeOutAndPlayNewMapMusic(MUS_RG_VICTORY_WILD, 4); diff --git a/src/mini_printf.c b/src/mini_printf.c index 2a8c6e5cb7..cab78d7611 100644 --- a/src/mini_printf.c +++ b/src/mini_printf.c @@ -102,8 +102,10 @@ static s32 _putsAscii(char *s, s32 len, void *buf) p0 = b->buffer; /* Copy to buffer */ - for (i = 0; i < len; i++) { - if(b->pbuffer == b->buffer + b->buffer_len - 1) { + for (i = 0; i < len; i++) + { + if(b->pbuffer == b->buffer + b->buffer_len - 1) + { break; } *(b->pbuffer ++) = s[i]; @@ -125,8 +127,10 @@ static s32 _putsEncoded(char *s, s32 len, void *buf) p0 = b->buffer; /* Copy to buffer */ - for (i = 0; i < len; i++) { - if(b->pbuffer == b->buffer + b->buffer_len - 1) { + for (i = 0; i < len; i++) + { + if(b->pbuffer == b->buffer + b->buffer_len - 1) + { break; } *(b->pbuffer ++) = mini_pchar_decode(s[i]); @@ -191,7 +195,8 @@ static s32 mini_pad(char* ptr, s32 len, char pad_char, s32 pad_to, char *buffer) char * pbuffer = buffer; if(pad_to == 0) pad_to = len; - if (len > pad_to) { + if (len > pad_to) + { len = pad_to; overflow = TRUE; } diff --git a/src/slot_machine.c b/src/slot_machine.c index 5ae0f9f1d5..4941ec0c7e 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -3324,7 +3324,8 @@ static void SpriteCB_FlashMatchingLines(struct Sprite *sprite) if (sprite->sNumFullFlashes) sprite->sNumFullFlashes--; } - else if (sprite->sColor >= maxColorChange) { + else if (sprite->sColor >= maxColorChange) + { // Reached peak darkness, reverse sprite->sColorIncr = -sprite->sColorIncr; } From e85750bb55d040e829a141f9fe23732a952a4361 Mon Sep 17 00:00:00 2001 From: Sierraffinity Date: Sat, 27 Jan 2024 14:29:31 -0800 Subject: [PATCH 090/120] gbagfx bit depth upconversion fix --- tools/gbagfx/convert_png.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/gbagfx/convert_png.c b/tools/gbagfx/convert_png.c index c9c240efbb..58371229c0 100644 --- a/tools/gbagfx/convert_png.c +++ b/tools/gbagfx/convert_png.c @@ -62,7 +62,7 @@ static unsigned char *ConvertBitDepth(unsigned char *src, int srcBitDepth, int d for (j = 8 - srcBitDepth; j >= 0; j -= srcBitDepth) { - unsigned char pixel = (srcByte >> j) % (1 << destBitDepth); + unsigned char pixel = ((srcByte >> j) % (1 << srcBitDepth)) % (1 << destBitDepth); *dest |= pixel << destBit; destBit -= destBitDepth; if (destBit < 0) From b98e044ce914a9068ee5e763831179b83398b585 Mon Sep 17 00:00:00 2001 From: Sierraffinity Date: Sat, 27 Jan 2024 19:29:29 -0800 Subject: [PATCH 091/120] jsonproc: filter out every non-alphanumeric character --- tools/jsonproc/jsonproc.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tools/jsonproc/jsonproc.cpp b/tools/jsonproc/jsonproc.cpp index 23056a5ff3..9ef23cd43e 100755 --- a/tools/jsonproc/jsonproc.cpp +++ b/tools/jsonproc/jsonproc.cpp @@ -105,10 +105,13 @@ int main(int argc, char *argv[]) }); env.add_callback("cleanString", 1, [](Arguments& args) { - string badChars = ".'{} \n\t-\u00e9"; string str = args.at(0)->get(); for (unsigned int i = 0; i < str.length(); i++) { - if (badChars.find(str[i]) != std::string::npos) { + // This code is not Unicode aware, so UTF-8 is not easily parsable without introducing + // another library. Just filter out any non-alphanumeric characters for now. + // TODO: proper Unicode string normalization + if ((i == 0 && isdigit(str[i])) + || !isalnum(str[i])) { str[i] = '_'; } } From e2eca97b02c322f16e023e9e0915739640d1a74e Mon Sep 17 00:00:00 2001 From: sbird Date: Sun, 28 Jan 2024 12:36:36 +0100 Subject: [PATCH 092/120] fix(linking): link gflib/malloc.c at top of EWRAM in ld_script_modern.ld --- ld_script_modern.ld | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ld_script_modern.ld b/ld_script_modern.ld index 4ccbfbaa0f..4f4bdae492 100644 --- a/ld_script_modern.ld +++ b/ld_script_modern.ld @@ -15,6 +15,11 @@ SECTIONS { ewram 0x2000000 (NOLOAD) : ALIGN(4) { + /* + We link malloc.o here to prevent `gHeap` from landing in the middle of EWRAM. + Otherwise this causes corruption issues on some ld versions + */ + gflib/malloc.o(ewram_data); src/*.o(ewram_data); gflib/*.o(ewram_data); } > EWRAM From 5be69b2713df03e9ca991c419f193bf972809a90 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 30 Jan 2024 11:46:19 -0500 Subject: [PATCH 093/120] Merge slot machine smoke SubspriteTable arrays --- src/slot_machine.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/slot_machine.c b/src/slot_machine.c index 4941ec0c7e..34c7ef8849 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -6985,7 +6985,7 @@ static const struct SubspriteTable sSubspriteTable_DigitalDisplay_Win[] = {ARRAY_COUNT(sSubsprites_DigitalDisplay_Win), sSubsprites_DigitalDisplay_Win} }; -static const struct Subsprite sSubsprites_DigitalDisplay_Smoke[] = +static const struct Subsprite sSubsprites_DigitalDisplay_SmokeBig[] = { { .x = -16, @@ -6997,7 +6997,7 @@ static const struct Subsprite sSubsprites_DigitalDisplay_Smoke[] = } }; -static const struct Subsprite sSubsprites_DigitalDisplay_Unused2[] = +static const struct Subsprite sSubsprites_DigitalDisplay_SmokeSmall[] = { { .x = -8, @@ -7011,12 +7011,8 @@ static const struct Subsprite sSubsprites_DigitalDisplay_Unused2[] = static const struct SubspriteTable sSubspriteTable_DigitalDisplay_Smoke[] = { - {ARRAY_COUNT(sSubsprites_DigitalDisplay_Smoke), sSubsprites_DigitalDisplay_Smoke} -}; - -static const struct SubspriteTable sSubspriteTable_DigitalDisplay_Unused2[] = -{ - {ARRAY_COUNT(sSubsprites_DigitalDisplay_Unused2), sSubsprites_DigitalDisplay_Unused2} + {ARRAY_COUNT(sSubsprites_DigitalDisplay_SmokeBig), sSubsprites_DigitalDisplay_SmokeBig}, + {ARRAY_COUNT(sSubsprites_DigitalDisplay_SmokeSmall), sSubsprites_DigitalDisplay_SmokeSmall} }; /* From e87a69a5e7fd9cf2e51bcdff021de6d51d3426e6 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Fri, 2 Feb 2024 22:31:20 +0100 Subject: [PATCH 094/120] Fix HideMapNamePopUpWindow possible overflow --- ld_script_modern.ld | 5 ----- src/map_name_popup.c | 9 +++++++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/ld_script_modern.ld b/ld_script_modern.ld index 4f4bdae492..4ccbfbaa0f 100644 --- a/ld_script_modern.ld +++ b/ld_script_modern.ld @@ -15,11 +15,6 @@ SECTIONS { ewram 0x2000000 (NOLOAD) : ALIGN(4) { - /* - We link malloc.o here to prevent `gHeap` from landing in the middle of EWRAM. - Otherwise this causes corruption issues on some ld versions - */ - gflib/malloc.o(ewram_data); src/*.o(ewram_data); gflib/*.o(ewram_data); } > EWRAM diff --git a/src/map_name_popup.c b/src/map_name_popup.c index eed2f2b714..d004b18d56 100644 --- a/src/map_name_popup.c +++ b/src/map_name_popup.c @@ -317,8 +317,13 @@ void HideMapNamePopUpWindow(void) { if (FuncIsActiveTask(Task_MapNamePopUpWindow)) { - ClearStdWindowAndFrame(GetMapNamePopUpWindowId(), TRUE); - RemoveMapNamePopUpWindow(); + #ifdef UBFIX + if (GetMapNamePopUpWindowId() != WINDOW_NONE) + #endif // UBFIX + { + ClearStdWindowAndFrame(GetMapNamePopUpWindowId(), TRUE); + RemoveMapNamePopUpWindow(); + } SetGpuReg_ForcedBlank(REG_OFFSET_BG0VOFS, 0); DestroyTask(sPopupTaskId); } From 132ca1be145176893efe4ff31e7794cfa890ddc2 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Fri, 2 Feb 2024 22:57:02 +0100 Subject: [PATCH 095/120] Change Safe Div to explicitly check b != 0 --- include/global.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/global.h b/include/global.h index 1ea3b65d64..658af43da7 100644 --- a/include/global.h +++ b/include/global.h @@ -80,7 +80,7 @@ // Used in cases where division by 0 can occur in the retail version. // Avoids invalid opcodes on some emulators, and the otherwise UB. #ifdef UBFIX -#define SAFE_DIV(a, b) ((b) ? (a) / (b) : 0) +#define SAFE_DIV(a, b) (((b) != 0) ? (a) / (b) : 0) #else #define SAFE_DIV(a, b) ((a) / (b)) #endif From 3342fdafc2f51825e7b05ae48aed3663eefc5f48 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Sat, 10 Feb 2024 05:32:03 -0500 Subject: [PATCH 096/120] add missing constant --- src/pokedex_cry_screen.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pokedex_cry_screen.c b/src/pokedex_cry_screen.c index 2c352c67a0..437ef8cf5a 100644 --- a/src/pokedex_cry_screen.c +++ b/src/pokedex_cry_screen.c @@ -362,7 +362,7 @@ static void BufferCryWaveformSegment(void) else baseBuffer = gSoundInfo.pcmBuffer + (gSoundInfo.pcmDmaPeriod + 1 - gPcmDmaCounter) * gSoundInfo.pcmSamplesPerVBlank; - buffer = baseBuffer + 0x630; + buffer = baseBuffer + PCM_DMA_BUF_SIZE; for (i = 0; i < ARRAY_COUNT(sDexCryScreen->cryWaveformBuffer); i++) sDexCryScreen->cryWaveformBuffer[i] = buffer[i * 2] * 2; } From 7da5cb421ecd65d5b607158feebde53728e1171c Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 6 Mar 2024 16:13:06 +0100 Subject: [PATCH 097/120] Make sure gHeap is always aligned --- gflib/malloc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gflib/malloc.c b/gflib/malloc.c index 829877d892..8573611bb9 100644 --- a/gflib/malloc.c +++ b/gflib/malloc.c @@ -4,7 +4,7 @@ static void *sHeapStart; static u32 sHeapSize; -EWRAM_DATA u8 gHeap[HEAP_SIZE] = {0}; +ALIGNED(4) EWRAM_DATA u8 gHeap[HEAP_SIZE] = {0}; #define MALLOC_SYSTEM_ID 0xA3A3 From 9e67594dcea5f69c5dc264509a442bd43eba871e Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Fri, 8 Mar 2024 16:19:04 +0100 Subject: [PATCH 098/120] Simplify weirdly matching division/substraction code --- src/battle_anim_effects_2.c | 13 ++----------- src/battle_anim_fight.c | 2 +- src/battle_anim_rock.c | 9 +-------- src/battle_intro.c | 4 ++-- src/international_string_util.c | 5 +---- src/pokemon_animation.c | 19 +++++++------------ 6 files changed, 14 insertions(+), 38 deletions(-) mode change 100755 => 100644 src/battle_anim_effects_2.c diff --git a/src/battle_anim_effects_2.c b/src/battle_anim_effects_2.c old mode 100755 new mode 100644 index d26e0ba4c7..3d2e72cacb --- a/src/battle_anim_effects_2.c +++ b/src/battle_anim_effects_2.c @@ -3673,7 +3673,6 @@ static void AnimTask_UproarDistortion_Step(u8 taskId) static void AnimJaggedMusicNote(struct Sprite *sprite) { - int var1; u8 battler = !gBattleAnimArgs[0] ? gBattleAnimAttacker : gBattleAnimTarget; if (GetBattlerSide(battler) == B_SIDE_OPPONENT) @@ -3684,16 +3683,8 @@ static void AnimJaggedMusicNote(struct Sprite *sprite) sprite->data[0] = 0; sprite->data[1] = (u16)sprite->x << 3; sprite->data[2] = (u16)sprite->y << 3; - - var1 = gBattleAnimArgs[1] << 3; - if (var1 < 0) - var1 += 7; - sprite->data[3] = var1 >> 3; - - var1 = gBattleAnimArgs[2] << 3; - if (var1 < 0) - var1 += 7; - sprite->data[4] = var1 >> 3; + sprite->data[3] = (gBattleAnimArgs[1] << 3) / 8; + sprite->data[4] = (gBattleAnimArgs[2] << 3) / 8; sprite->oam.tileNum += gBattleAnimArgs[3] * 16; sprite->callback = AnimJaggedMusicNote_Step; diff --git a/src/battle_anim_fight.c b/src/battle_anim_fight.c index 764a951ef8..cbefb41f1e 100644 --- a/src/battle_anim_fight.c +++ b/src/battle_anim_fight.c @@ -493,7 +493,7 @@ static void AnimFistOrFootRandomPos(struct Sprite *sprite) y *= -1; if (GET_BATTLER_SIDE2(battler) == B_SIDE_PLAYER) - y += 0xFFF0; + y -= 16; sprite->x += x; sprite->y += y; diff --git a/src/battle_anim_rock.c b/src/battle_anim_rock.c index f9253675ca..bb8c3aa2f6 100644 --- a/src/battle_anim_rock.c +++ b/src/battle_anim_rock.c @@ -558,7 +558,6 @@ void AnimTask_Rollout(u8 taskId) { u16 var0, var1, var2, var3; u8 rolloutCounter; - int var5; s16 pan1, pan2; struct Task *task; @@ -582,13 +581,7 @@ void AnimTask_Rollout(u8 taskId) task->data[11] = 0; task->data[9] = 0; task->data[12] = 1; - - var5 = task->data[8]; - if (var5 < 0) - var5 += 7; - - task->data[10] = (var5 >> 3) - 1; - + task->data[10] = (task->data[8] / 8) - 1; task->data[2] = var0 * 8; task->data[3] = var1 * 8; task->data[4] = ((var2 - var0) * 8) / task->data[8]; diff --git a/src/battle_intro.c b/src/battle_intro.c index 5df697e3ae..571c5e85a2 100644 --- a/src/battle_intro.c +++ b/src/battle_intro.c @@ -196,12 +196,12 @@ static void BattleIntroSlide1(u8 taskId) { if (gTasks[taskId].tTerrain == BATTLE_TERRAIN_LONG_GRASS) { - if (gBattle_BG1_Y != 0xFFB0) + if (gBattle_BG1_Y != (u16)(-80)) gBattle_BG1_Y -= 2; } else { - if (gBattle_BG1_Y != 0xFFC8) + if (gBattle_BG1_Y != (u16)(-56)) gBattle_BG1_Y -= 1; } } diff --git a/src/international_string_util.c b/src/international_string_util.c index 457e3260be..6186bd116c 100644 --- a/src/international_string_util.c +++ b/src/international_string_util.c @@ -76,10 +76,7 @@ int Intl_GetListMenuWidth(const struct ListMenuTemplate *listMenu) } finalWidth = maxWidth + listMenu->item_X + 9; - if (finalWidth < 0) - finalWidth += 7; - - finalWidth >>= 3; + finalWidth /= 8; if (finalWidth > 28) finalWidth = 28; diff --git a/src/pokemon_animation.c b/src/pokemon_animation.c index 25c7778f8b..c5ef33878f 100644 --- a/src/pokemon_animation.c +++ b/src/pokemon_animation.c @@ -4969,29 +4969,24 @@ static void ShrinkGrowVibrate(struct Sprite *sprite) } else { - u8 posY_unsigned; - s8 posY_signed; - s32 posY; - s16 index = (u16)(sprite->data[2] % sprite->data[6] * 256) / sprite->data[6] % 256; + s8 sinY; + u16 y; + s16 index = ((u16)(sprite->data[2] % sprite->data[6] * 256) / sprite->data[6]) % 256; if (sprite->data[2] % 2 == 0) { sprite->data[4] = Sin(index, 32) + 256; sprite->data[5] = Sin(index, 32) + 256; - posY_unsigned = Sin(index, 32); - posY_signed = posY_unsigned; + sinY = Sin(index, 32); } else { sprite->data[4] = Sin(index, 8) + 256; sprite->data[5] = Sin(index, 8) + 256; - posY_unsigned = Sin(index, 8); - posY_signed = posY_unsigned; + sinY = Sin(index, 8); } - posY = posY_signed; - if (posY < 0) - posY += 7; - sprite->y2 = (u32)(posY) >> 3; + y = sinY / 8; + sprite->y2 = y; HandleSetAffineData(sprite, sprite->data[4], sprite->data[5], 0); } From 82f8636502afa4ed0960eb7457551538d38a5457 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 9 Mar 2024 20:06:58 +0100 Subject: [PATCH 099/120] Simplify division in berry_crush and field weather functions --- src/berry_crush.c | 7 +------ src/field_weather.c | 7 +------ 2 files changed, 2 insertions(+), 12 deletions(-) mode change 100755 => 100644 src/berry_crush.c diff --git a/src/berry_crush.c b/src/berry_crush.c old mode 100755 new mode 100644 index 4e789f27a4..05e708162d --- a/src/berry_crush.c +++ b/src/berry_crush.c @@ -1373,7 +1373,6 @@ static void CreateBerrySprites(struct BerryCrushGame *game, struct BerryCrushGam u8 spriteId; s16 distance, var1; s16 *data; - s32 amplitude; s16 speed; u32 var2; @@ -1395,11 +1394,7 @@ static void CreateBerrySprites(struct BerryCrushGame *game, struct BerryCrushGam sYAccel = 32; sBitfield = 112; // Setting bits in MASK_TARGET_Y distance = gfx->playerCoords[i]->berryXDest - gfx->playerCoords[i]->berryXOffset; - amplitude = distance; - if (distance < 0) - amplitude += 3; - - sAmplitude = amplitude >> 2; + sAmplitude = distance / 4; distance *= 128; var2 = speed + 32; var2 = var2 / 2; diff --git a/src/field_weather.c b/src/field_weather.c index 5ca9075250..bc86bcdc7d 100644 --- a/src/field_weather.c +++ b/src/field_weather.c @@ -277,7 +277,6 @@ static void BuildColorMaps(void) u16 brightnessDelta; u16 colorMapIndex; u16 baseBrightness; - u32 remainingBrightness; s16 diff; sPaletteColorMapTypes = sBasePaletteColorMapTypes; @@ -305,11 +304,7 @@ static void BuildColorMaps(void) } baseBrightness = curBrightness; - remainingBrightness = 0x1f00 - curBrightness; - if ((0x1f00 - curBrightness) < 0) - remainingBrightness += 0xf; - - brightnessDelta = remainingBrightness / (NUM_WEATHER_COLOR_MAPS - 3); + brightnessDelta = (0x1f00 - curBrightness) / (NUM_WEATHER_COLOR_MAPS - 3); if (colorVal < 12) { // For shadows (color values < 12), the remaining color mappings are From 927f098cf5ea42fb67ed045cd00d13e772eb7a33 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Mon, 11 Mar 2024 01:41:07 -0300 Subject: [PATCH 100/120] Renamed setmodernfatefulencounter and checkmodernfatefulencounter for consistency reasons --- data/script_cmd_table.inc | 4 ++-- src/scrcmd.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/data/script_cmd_table.inc b/data/script_cmd_table.inc index f50ce5322b..e73a39a5dd 100644 --- a/data/script_cmd_table.inc +++ b/data/script_cmd_table.inc @@ -205,8 +205,8 @@ gScriptCmdTable:: .4byte ScrCmd_nop1 @ 0xca .4byte ScrCmd_nop1 @ 0xcb .4byte ScrCmd_nop1 @ 0xcc - .4byte ScrCmd_setmonmodernfatefulencounter @ 0xcd - .4byte ScrCmd_checkmonmodernfatefulencounter @ 0xce + .4byte ScrCmd_setmodernfatefulencounter @ 0xcd + .4byte ScrCmd_checkmodernfatefulencounter @ 0xce .4byte ScrCmd_trywondercardscript @ 0xcf .4byte ScrCmd_nop1 @ 0xd0 .4byte ScrCmd_warpspinenter @ 0xd1 diff --git a/src/scrcmd.c b/src/scrcmd.c index 147a11b869..218be539f5 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -2207,7 +2207,7 @@ bool8 ScrCmd_lockfortrainer(struct ScriptContext *ctx) } // This command will set a Pokémon's modernFatefulEncounter bit; there is no similar command to clear it. -bool8 ScrCmd_setmonmodernfatefulencounter(struct ScriptContext *ctx) +bool8 ScrCmd_setmodernfatefulencounter(struct ScriptContext *ctx) { bool8 isModernFatefulEncounter = TRUE; u16 partyIndex = VarGet(ScriptReadHalfword(ctx)); @@ -2216,7 +2216,7 @@ bool8 ScrCmd_setmonmodernfatefulencounter(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_checkmonmodernfatefulencounter(struct ScriptContext *ctx) +bool8 ScrCmd_checkmodernfatefulencounter(struct ScriptContext *ctx) { u16 partyIndex = VarGet(ScriptReadHalfword(ctx)); From 7ee921e9dae948713f94c5f286855e3001f05a3f Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Thu, 4 Apr 2024 16:17:48 -0400 Subject: [PATCH 101/120] Added BUGFIX for groundEffectsOnMove when the player stops Surfing --- src/field_player_avatar.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index 04aa5383bd..1f0708af22 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -1663,6 +1663,10 @@ static void Task_WaitStopSurfing(u8 taskId) gPlayerAvatar.preventStep = FALSE; UnlockPlayerFieldControls(); DestroySprite(&gSprites[playerObjEvent->fieldEffectSpriteId]); +#ifdef BUGFIX + // If this is not defined but the player steps into grass from surfing, they will appear over the grass instead of in the grass. + playerObjEvent->triggerGroundEffectsOnMove = TRUE; +#endif DestroyTask(taskId); } } From 71b8d2039732554235cee49f765d0a0dd7f03dff Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Thu, 4 Apr 2024 16:21:34 -0400 Subject: [PATCH 102/120] Replaced magic numbers regarding triggerGroundEffectsOnMove to TRUE / FALSE --- src/event_object_movement.c | 4 ++-- src/field_effect.c | 2 +- src/overworld.c | 4 ++-- src/trainer_see.c | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 5a746579d4..ece1bfa631 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -8077,7 +8077,7 @@ static void DoGroundEffects_OnSpawn(struct ObjectEvent *objEvent, struct Sprite GetAllGroundEffectFlags_OnSpawn(objEvent, &flags); SetObjectEventSpriteOamTableForLongGrass(objEvent, sprite); DoFlaggedGroundEffects(objEvent, sprite, flags); - objEvent->triggerGroundEffectsOnMove = 0; + objEvent->triggerGroundEffectsOnMove = FALSE; objEvent->disableCoveringGroundEffects = 0; } } @@ -8094,7 +8094,7 @@ static void DoGroundEffects_OnBeginStep(struct ObjectEvent *objEvent, struct Spr SetObjectEventSpriteOamTableForLongGrass(objEvent, sprite); filters_out_some_ground_effects(objEvent, &flags); DoFlaggedGroundEffects(objEvent, sprite, flags); - objEvent->triggerGroundEffectsOnMove = 0; + objEvent->triggerGroundEffectsOnMove = FALSE; objEvent->disableCoveringGroundEffects = 0; } } diff --git a/src/field_effect.c b/src/field_effect.c index 9ef70a1655..d907c3f16d 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -2496,7 +2496,7 @@ static void TeleportWarpInFieldEffect_SpinEnter(struct Task *task) if (task->data[13] == 0) { task->data[13]++; - objectEvent->triggerGroundEffectsOnMove = 1; + objectEvent->triggerGroundEffectsOnMove = TRUE; sprite->subspriteMode = task->data[14]; } } else diff --git a/src/overworld.c b/src/overworld.c index 2e01a2e52f..e1cb0a1cad 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -3050,7 +3050,7 @@ static void SetPlayerFacingDirection(u8 linkPlayerId, u8 facing) { if (facing > FACING_FORCED_RIGHT) { - objEvent->triggerGroundEffectsOnMove = 1; + objEvent->triggerGroundEffectsOnMove = TRUE; } else { @@ -3199,7 +3199,7 @@ static void CreateLinkPlayerSprite(u8 linkPlayerId, u8 gameVersion) sprite = &gSprites[objEvent->spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->data[0] = linkPlayerId; - objEvent->triggerGroundEffectsOnMove = 0; + objEvent->triggerGroundEffectsOnMove = FALSE; } } diff --git a/src/trainer_see.c b/src/trainer_see.c index 88f9215f77..51cc64f4a0 100644 --- a/src/trainer_see.c +++ b/src/trainer_see.c @@ -595,7 +595,7 @@ static bool8 JumpInPlaceBuriedTrainer(u8 taskId, struct Task *task, struct Objec if (gSprites[task->tOutOfAshSpriteId].animCmdIndex == 2) { trainerObj->fixedPriority = 0; - trainerObj->triggerGroundEffectsOnMove = 1; + trainerObj->triggerGroundEffectsOnMove = TRUE; sprite = &gSprites[trainerObj->spriteId]; sprite->oam.priority = 2; From 3135a1fc2b1461c328c6a11e88d1df6b7a6b1455 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Fri, 5 Apr 2024 17:04:46 -0300 Subject: [PATCH 103/120] Updated value-setting of gMain.inBattle at OpponentHandleEndLinkBattle --- src/battle_controller_opponent.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index e5284f9abc..dc3652b457 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -2007,7 +2007,7 @@ static void OpponentHandleEndLinkBattle(void) { if (gBattleTypeFlags & BATTLE_TYPE_LINK && !(gBattleTypeFlags & BATTLE_TYPE_IS_MASTER)) { - gMain.inBattle = 0; + gMain.inBattle = FALSE; gMain.callback1 = gPreBattleCallback1; SetMainCallback2(gMain.savedCallback); } From f9d690bafeeea422d113ab44297704269abf2f48 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Fri, 5 Apr 2024 14:58:31 -0700 Subject: [PATCH 104/120] Added fix to Keep the Camera from Making Waves --- src/event_object_movement.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 5a746579d4..d668aa1a08 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -8070,7 +8070,11 @@ static void DoGroundEffects_OnSpawn(struct ObjectEvent *objEvent, struct Sprite { u32 flags; +#ifdef BUGFIX + if (objEvent->triggerGroundEffectsOnMove && objEvent->localId != OBJ_EVENT_ID_CAMERA) +#else if (objEvent->triggerGroundEffectsOnMove) +#endif { flags = 0; UpdateObjectEventElevationAndPriority(objEvent, sprite); @@ -8086,7 +8090,11 @@ static void DoGroundEffects_OnBeginStep(struct ObjectEvent *objEvent, struct Spr { u32 flags; +#ifdef BUGFIX + if (objEvent->triggerGroundEffectsOnMove && objEvent->localId != OBJ_EVENT_ID_CAMERA) +#else if (objEvent->triggerGroundEffectsOnMove) +#endif { flags = 0; UpdateObjectEventElevationAndPriority(objEvent, sprite); @@ -8103,7 +8111,11 @@ static void DoGroundEffects_OnFinishStep(struct ObjectEvent *objEvent, struct Sp { u32 flags; +#ifdef BUGFIX + if (objEvent->triggerGroundEffectsOnStop && objEvent->localId != OBJ_EVENT_ID_CAMERA) +#else if (objEvent->triggerGroundEffectsOnStop) +#endif { flags = 0; UpdateObjectEventElevationAndPriority(objEvent, sprite); From c64453efe50959e6286e984a2a7dda47a1d86831 Mon Sep 17 00:00:00 2001 From: NT_x86 Date: Sat, 13 Apr 2024 10:14:31 +0300 Subject: [PATCH 105/120] Fix poison projectile array being incorrectly combined into three seperate arrays --- src/battle_anim_poison.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/battle_anim_poison.c b/src/battle_anim_poison.c index d9a15c835c..bfe1fc835f 100644 --- a/src/battle_anim_poison.c +++ b/src/battle_anim_poison.c @@ -59,15 +59,7 @@ static const union AnimCmd sAnim_SludgeBombHit[] = static const union AnimCmd *const sAnims_PoisonProjectile[] = { sAnim_PoisonProjectile, -}; - -static const union AnimCmd *const sAnims_AcidPoisonDroplet[] = -{ sAnim_AcidPoisonDroplet, -}; - -static const union AnimCmd *const sAnims_SludgeBombHit[] = -{ sAnim_SludgeBombHit, }; @@ -122,7 +114,7 @@ const struct SpriteTemplate gSludgeBombHitParticleSpriteTemplate = .tileTag = ANIM_TAG_POISON_BUBBLE, .paletteTag = ANIM_TAG_POISON_BUBBLE, .oam = &gOamData_AffineNormal_ObjNormal_16x16, - .anims = sAnims_SludgeBombHit, + .anims = &sAnims_PoisonProjectile[2], .images = NULL, .affineAnims = sAffineAnims_SludgeBombHit, .callback = AnimSludgeBombHitParticle, @@ -145,7 +137,7 @@ const struct SpriteTemplate gAcidPoisonDropletSpriteTemplate = .tileTag = ANIM_TAG_POISON_BUBBLE, .paletteTag = ANIM_TAG_POISON_BUBBLE, .oam = &gOamData_AffineDouble_ObjNormal_16x16, - .anims = sAnims_AcidPoisonDroplet, + .anims = &sAnims_PoisonProjectile[1], .images = NULL, .affineAnims = gAffineAnims_Droplet, .callback = AnimAcidPoisonDroplet, From 2b78a85828eb40b68a0973615665fd22b961bfd9 Mon Sep 17 00:00:00 2001 From: NT_x86 Date: Sat, 13 Apr 2024 13:09:24 +0300 Subject: [PATCH 106/120] Fix hoenn pokedex palette being split in two --- graphics/pokedex/bg_hoenn.pal | 50 ++++++++++++++++++++++++++++- graphics/pokedex/caught_screen.pal | 51 ------------------------------ src/graphics.c | 1 - src/pokedex.c | 2 +- 4 files changed, 50 insertions(+), 54 deletions(-) delete mode 100644 graphics/pokedex/caught_screen.pal diff --git a/graphics/pokedex/bg_hoenn.pal b/graphics/pokedex/bg_hoenn.pal index 569c7821a9..01bd8a3a3d 100644 --- a/graphics/pokedex/bg_hoenn.pal +++ b/graphics/pokedex/bg_hoenn.pal @@ -1,6 +1,6 @@ JASC-PAL 0100 -48 +96 123 131 0 255 255 255 222 222 222 @@ -49,3 +49,51 @@ JASC-PAL 49 139 255 189 156 90 0 0 0 +123 131 0 +255 255 255 +255 238 0 +255 189 0 +255 115 0 +98 98 115 +41 57 65 +41 57 106 +0 0 41 +255 255 255 +238 246 57 +255 0 189 +49 213 74 +24 131 32 +189 156 90 +0 0 0 +123 131 0 +255 255 255 +197 32 32 +189 189 189 +164 164 164 +98 98 115 +41 57 65 +41 57 106 +0 0 41 +255 255 255 +238 246 57 +189 0 0 +74 148 180 +8 90 131 +189 156 90 +0 0 0 +123 131 0 +255 255 255 +197 32 32 +189 189 189 +164 164 164 +98 98 115 +41 57 65 +41 57 106 +0 0 41 +255 255 255 +238 246 57 +255 0 189 +180 205 246 +49 139 255 +189 156 90 +0 0 0 diff --git a/graphics/pokedex/caught_screen.pal b/graphics/pokedex/caught_screen.pal deleted file mode 100644 index 26da98a84c..0000000000 --- a/graphics/pokedex/caught_screen.pal +++ /dev/null @@ -1,51 +0,0 @@ -JASC-PAL -0100 -48 -123 131 0 -255 255 255 -255 238 0 -255 189 0 -255 115 0 -98 98 115 -41 57 65 -41 57 106 -0 0 41 -255 255 255 -238 246 57 -255 0 189 -49 213 74 -24 131 32 -189 156 90 -0 0 0 -123 131 0 -255 255 255 -197 32 32 -189 189 189 -164 164 164 -98 98 115 -41 57 65 -41 57 106 -0 0 41 -255 255 255 -238 246 57 -189 0 0 -74 148 180 -8 90 131 -189 156 90 -0 0 0 -123 131 0 -255 255 255 -197 32 32 -189 189 189 -164 164 164 -98 98 115 -41 57 65 -41 57 106 -0 0 41 -255 255 255 -238 246 57 -255 0 189 -180 205 246 -49 139 255 -189 156 90 -0 0 0 diff --git a/src/graphics.c b/src/graphics.c index 8f1bc89ea6..2612022695 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1230,7 +1230,6 @@ const u16 gFrontierPassMedalsGold_Pal[] = INCBIN_U16("graphics/frontier_pass/gol // Pokédex const u16 gPokedexBgHoenn_Pal[] = INCBIN_U16("graphics/pokedex/bg_hoenn.gbapal"); -const u16 gPokedexCaughtScreen_Pal[] = INCBIN_U16("graphics/pokedex/caught_screen.gbapal"); const u16 gPokedexSearchResults_Pal[] = INCBIN_U16("graphics/pokedex/search_results_bg.gbapal"); const u16 gPokedexBgNational_Pal[] = INCBIN_U16("graphics/pokedex/bg_national.gbapal"); const u32 gPokedexMenu_Gfx[] = INCBIN_U32("graphics/pokedex/menu.4bpp.lz"); diff --git a/src/pokedex.c b/src/pokedex.c index 0d1520a490..09a25b872b 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -4036,7 +4036,7 @@ static void Task_HandleCaughtMonPageInput(u8 taskId) } else { - LoadPalette(gPokedexCaughtScreen_Pal + 1, BG_PLTT_ID(3) + 1, PLTT_SIZEOF(7)); + LoadPalette(gPokedexBgHoenn_Pal + 49, BG_PLTT_ID(3) + 1, PLTT_SIZEOF(7)); } } From 5dbd90b917c2474cd89b45b2c2e33e1544c43b0e Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Fri, 19 Apr 2024 14:17:12 -0400 Subject: [PATCH 107/120] Use Only One Loop in RandomlyGivePartyPokerus (#1991) --- src/pokemon.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/pokemon.c b/src/pokemon.c index 6ee052fda5..2b8f4fc95f 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -6038,14 +6038,10 @@ void RandomlyGivePartyPokerus(struct Pokemon *party) do { - do - { - rnd = Random() % PARTY_SIZE; - mon = &party[rnd]; - } - while (!GetMonData(mon, MON_DATA_SPECIES, 0)); + rnd = Random() % PARTY_SIZE; + mon = &party[rnd]; } - while (GetMonData(mon, MON_DATA_IS_EGG, 0)); + while (!GetMonData(mon, MON_DATA_SPECIES, 0) || GetMonData(mon, MON_DATA_IS_EGG, 0)); if (!(CheckPartyHasHadPokerus(party, gBitTable[rnd]))) { From 411d7e617777a3a7e7c60fdaf5d73d39a2695599 Mon Sep 17 00:00:00 2001 From: Jaizu Date: Tue, 14 May 2024 12:48:20 +0200 Subject: [PATCH 108/120] Make AdjustFriendship more readable --- src/pokemon.c | 60 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 24 deletions(-) diff --git a/src/pokemon.c b/src/pokemon.c index 2b8f4fc95f..ef8e7e9e05 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -5877,16 +5877,11 @@ u16 ModifyStatByNature(u8 nature, u16 stat, u8 statIndex) return retVal; } -#define IS_LEAGUE_BATTLE \ - ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) \ - && (gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_ELITE_FOUR \ - || gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_LEADER \ - || gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_CHAMPION)) \ - void AdjustFriendship(struct Pokemon *mon, u8 event) { u16 species, heldItem; u8 holdEffect; + s8 mod; if (ShouldSkipFriendshipChange()) return; @@ -5916,26 +5911,43 @@ void AdjustFriendship(struct Pokemon *mon, u8 event) if (friendship > 199) friendshipLevel++; - if ((event != FRIENDSHIP_EVENT_WALKING || !(Random() & 1)) - && (event != FRIENDSHIP_EVENT_LEAGUE_BATTLE || IS_LEAGUE_BATTLE)) + if (event == FRIENDSHIP_EVENT_WALKING) { - s8 mod = sFriendshipEventModifiers[event][friendshipLevel]; - if (mod > 0 && holdEffect == HOLD_EFFECT_FRIENDSHIP_UP) - mod = (150 * mod) / 100; - friendship += mod; - if (mod > 0) - { - if (GetMonData(mon, MON_DATA_POKEBALL, 0) == ITEM_LUXURY_BALL) - friendship++; - if (GetMonData(mon, MON_DATA_MET_LOCATION, 0) == GetCurrentRegionMapSectionId()) - friendship++; - } - if (friendship < 0) - friendship = 0; - if (friendship > MAX_FRIENDSHIP) - friendship = MAX_FRIENDSHIP; - SetMonData(mon, MON_DATA_FRIENDSHIP, &friendship); + // 50% chance every 128 steps + if (Random() & 1) + return; } + if (event == FRIENDSHIP_EVENT_LEAGUE_BATTLE) + { + // Only if it's a trainer battle with league progression significance + if (!(gBattleTypeFlags & BATTLE_TYPE_TRAINER)) + return; + if (!(gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_LEADER + || gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_ELITE_FOUR + || gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_CHAMPION)) + return; + } + + mod = sFriendshipEventModifiers[event][friendshipLevel]; + if (mod > 0 && holdEffect == HOLD_EFFECT_FRIENDSHIP_UP) + // 50% increase, rounding down + mod = (150 * mod) / 100; + + friendship += mod; + if (mod > 0) + { + if (GetMonData(mon, MON_DATA_POKEBALL, NULL) == ITEM_LUXURY_BALL) + friendship++; + if (GetMonData(mon, MON_DATA_MET_LOCATION, NULL) == GetCurrentRegionMapSectionId()) + friendship++; + } + + if (friendship < 0) + friendship = 0; + if (friendship > MAX_FRIENDSHIP) + friendship = MAX_FRIENDSHIP; + + SetMonData(mon, MON_DATA_FRIENDSHIP, &friendship); } } From ef03daf6d4798e450d1bb3cfab1267738d3d0a92 Mon Sep 17 00:00:00 2001 From: Jaizu Date: Sun, 19 May 2024 12:52:04 +0200 Subject: [PATCH 109/120] Fix Pokeblock script missing a releaseall --- data/scripts/safari_zone.inc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/data/scripts/safari_zone.inc b/data/scripts/safari_zone.inc index eb6a90abdf..77e795a0eb 100644 --- a/data/scripts/safari_zone.inc +++ b/data/scripts/safari_zone.inc @@ -53,6 +53,9 @@ SafariZone_EventScript_ChoosePokeblock:: special OpenPokeblockCaseOnFeeder waitstate goto_if_ne VAR_RESULT, 0xFFFF, SafariZone_EventScript_PokeblockPlaced +#ifdef BUGFIX + releaseall @ Only gets called from EventScript_PokeBlockFeeder which uses lockall. +#endif end SafariZone_EventScript_PokeblockPlaced:: From b592c6eae5015e6b01198212444a3b852bda27d0 Mon Sep 17 00:00:00 2001 From: sneed Date: Thu, 23 May 2024 02:45:22 +0300 Subject: [PATCH 110/120] Add POKE_ICON_BASE_PAL_TAG to a header --- include/constants/pokemon_icon.h | 6 ++++++ src/pokemon_icon.c | 3 +-- src/pokemon_storage_system.c | 3 ++- 3 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 include/constants/pokemon_icon.h diff --git a/include/constants/pokemon_icon.h b/include/constants/pokemon_icon.h new file mode 100644 index 0000000000..d57d5111a9 --- /dev/null +++ b/include/constants/pokemon_icon.h @@ -0,0 +1,6 @@ +#ifndef GUARD_CONSTANTS_POKEMON_ICON_H +#define GUARD_CONSTANTS_POKEMON_ICON_H + +#define POKE_ICON_BASE_PAL_TAG 56000 + +#endif // GUARD_CONSTANTS_POKEMON_ICON_H diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c index e659eebe21..caed0bcdc3 100644 --- a/src/pokemon_icon.c +++ b/src/pokemon_icon.c @@ -4,8 +4,7 @@ #include "palette.h" #include "pokemon_icon.h" #include "sprite.h" - -#define POKE_ICON_BASE_PAL_TAG 56000 +#include "constants/pokemon_icon.h" #define INVALID_ICON_SPECIES SPECIES_OLD_UNOWN_J // Oddly specific, used when an icon should be a ?. Any of the 'old unown' would work diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index c8c87961c8..b398b88752 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -40,6 +40,7 @@ #include "constants/moves.h" #include "constants/rgb.h" #include "constants/songs.h" +#include "constants/pokemon_icon.h" /* NOTE: This file is large. Some general groups of functions have @@ -215,7 +216,7 @@ enum { #define BOXID_CANCELED 201 enum { - PALTAG_MON_ICON_0 = 56000, + PALTAG_MON_ICON_0 = POKE_ICON_BASE_PAL_TAG, PALTAG_MON_ICON_1, // Used implicitly in CreateMonIconSprite PALTAG_MON_ICON_2, // Used implicitly in CreateMonIconSprite PALTAG_3, // Unused From ef2330593c7762d20865b2442d9b3e30c1b5e6f2 Mon Sep 17 00:00:00 2001 From: leo60228 Date: Wed, 29 May 2024 19:32:17 -0400 Subject: [PATCH 111/120] Don't assume bash is at /bin/bash --- Makefile | 2 +- asmdiff.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 50953be79c..21c010003b 100644 --- a/Makefile +++ b/Makefile @@ -73,7 +73,7 @@ MODERN_ELF_NAME := $(MODERN_ROM_NAME:.gba=.elf) MODERN_MAP_NAME := $(MODERN_ROM_NAME:.gba=.map) MODERN_OBJ_DIR_NAME := build/modern -SHELL := /bin/bash -o pipefail +SHELL := bash -o pipefail ELF = $(ROM:.gba=.elf) MAP = $(ROM:.gba=.map) diff --git a/asmdiff.sh b/asmdiff.sh index f5a7010747..aca670e324 100755 --- a/asmdiff.sh +++ b/asmdiff.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash if [[ -d "$DEVKITARM/bin/" ]]; then OBJDUMP_BIN="$DEVKITARM/bin/arm-none-eabi-objdump" From d8d4885c11dbf99538b6c474cf23f77d1b7ce95b Mon Sep 17 00:00:00 2001 From: leo60228 Date: Wed, 29 May 2024 18:53:16 -0400 Subject: [PATCH 112/120] Add NixOS install instructions --- INSTALL.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/INSTALL.md b/INSTALL.md index 920e03c713..964de4b68f 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -354,6 +354,13 @@ Then proceed to [Choosing where to store pokeemerald (Linux)](#choosing-where-to > [install devkitARM on Arch Linux](#installing-devkitarm-on-arch-linux). +### NixOS +Run the following command to start an interactive shell with the necessary packages: +```bash +nix-shell -p pkgsCross.arm-embedded.stdenv.cc git pkg-config libpng +``` +Then proceed to [Choosing where to store pokeemerald Expansion (Linux)](#choosing-where-to-store-pokeemerald-expansion-linux). + ### Other distributions _(Specific instructions for other distributions would be greatly appreciated!)_ From 189d542520e57b9a09a223ba3ee99115f6726af2 Mon Sep 17 00:00:00 2001 From: Jaizu Date: Mon, 17 Jun 2024 21:44:52 +0200 Subject: [PATCH 113/120] Fix Steven partner battle post-battle script (#2001) --- data/maps/MossdeepCity_SpaceCenter_2F/scripts.inc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/data/maps/MossdeepCity_SpaceCenter_2F/scripts.inc b/data/maps/MossdeepCity_SpaceCenter_2F/scripts.inc index 4a22bf8eea..c82a33e78d 100644 --- a/data/maps/MossdeepCity_SpaceCenter_2F/scripts.inc +++ b/data/maps/MossdeepCity_SpaceCenter_2F/scripts.inc @@ -320,6 +320,9 @@ MossdeepCity_SpaceCenter_2F_EventScript_DefeatedMaxieTabitha:: setobjectmovementtype LOCALID_SCIENTIST, MOVEMENT_TYPE_WANDER_AROUND addobject LOCALID_SCIENTIST fadescreen FADE_FROM_BLACK +#ifdef BUGFIX + releaseall +#endif end MossdeepCity_SpaceCenter_2F_EventScript_StevenFacePlayer:: From c0d630ee6304df61a5304942386308a872aeb504 Mon Sep 17 00:00:00 2001 From: Alex Nash Date: Mon, 17 Jun 2024 22:45:10 -0400 Subject: [PATCH 114/120] Add support for LF line endings to gbagfx --- tools/gbagfx/jasc_pal.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tools/gbagfx/jasc_pal.c b/tools/gbagfx/jasc_pal.c index e5ba9c3c2f..8d4bb137d5 100644 --- a/tools/gbagfx/jasc_pal.c +++ b/tools/gbagfx/jasc_pal.c @@ -46,10 +46,14 @@ void ReadJascPaletteLine(FILE *fp, char *line) } if (c == '\n') - FATAL_ERROR("LF line endings aren't supported.\n"); + { + line[length] = 0; + + return; + } if (c == EOF) - FATAL_ERROR("Unexpected EOF. No CRLF at end of file.\n"); + FATAL_ERROR("Unexpected EOF. No LF or CRLF at end of file.\n"); if (c == 0) FATAL_ERROR("NUL character in file.\n"); From 5dac97aa5d7f562fa544a9e57b4e8ba78db3115b Mon Sep 17 00:00:00 2001 From: leo60228 Date: Thu, 20 Jun 2024 15:55:47 -0400 Subject: [PATCH 115/120] Fix pokeemerald-expansion reference in INSTALL.md --- INSTALL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/INSTALL.md b/INSTALL.md index 964de4b68f..30b5d0f25a 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -359,7 +359,7 @@ Run the following command to start an interactive shell with the necessary packa ```bash nix-shell -p pkgsCross.arm-embedded.stdenv.cc git pkg-config libpng ``` -Then proceed to [Choosing where to store pokeemerald Expansion (Linux)](#choosing-where-to-store-pokeemerald-expansion-linux). +Then proceed to [Choosing where to store pokeemerald (Linux)](#choosing-where-to-store-pokeemerald-linux). ### Other distributions _(Specific instructions for other distributions would be greatly appreciated!)_ From 779855ee02226cb4da16ab6d7a7822a8b0a6e3be Mon Sep 17 00:00:00 2001 From: abcboy101 <16735361+abcboy101@users.noreply.github.com> Date: Sat, 29 Jun 2024 13:59:30 -0400 Subject: [PATCH 116/120] Decode unused JP text in berry_blender.c --- src/berry_blender.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/berry_blender.c b/src/berry_blender.c index a91cafb0fb..1242a1dad9 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -916,14 +916,14 @@ static const u8 sBlackPokeblockFlavorFlags[] = { (1 << FLAVOR_SOUR) | (1 << FLAVOR_SWEET) | (1 << FLAVOR_SPICY), }; -static const u8 sUnused[] = -{ - 0xfe, 0x02, 0x02, 0xce, 0xd0, 0x37, 0x44, 0x07, 0x1f, 0x0c, 0x10, - 0x00, 0xff, 0xfe, 0x91, 0x72, 0xce, 0xd0, 0x37, 0x44, 0x07, 0x1f, - 0x0c, 0x10, 0x00, 0xff, 0x06, 0x27, 0x02, 0xff, 0x00, 0x0c, 0x48, - 0x02, 0xff, 0x00, 0x01, 0x1f, 0x02, 0xff, 0x00, 0x16, 0x37, 0x02, - 0xff, 0x00, 0x0d, 0x50, 0x4b, 0x02, 0xff, 0x06, 0x06, 0x06, 0x06, - 0x05, 0x03, 0x03, 0x03, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x02 +static const u8 sJPText_GoodTvReady[] = _("\nいいTVができました "); // Unused +static const u8 sJPText_BadTvReady[] = _("\nダメTVができました "); // Unused +static const u8 sJPText_Flavors[][5] = {_("からい"), _("しぶい"), _("あまい"), _("にがい"), _("すっぱい")}; // Unused + +static const u8 sUnused[] = { + 6, 6, 6, 6, 5, + 3, 3, 3, 2, 2, + 3, 3, 3, 3, 2 }; static const struct WindowTemplate sBlenderRecordWindowTemplate = From 47533e3a7ebd60e54b34c6ef3a367bf19b5dd96f Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 4 Jul 2024 20:56:22 +0200 Subject: [PATCH 117/120] Berry blender's Task_HandleOpponent small fixes --- src/berry_blender.c | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/src/berry_blender.c b/src/berry_blender.c index 1242a1dad9..a5102d48fb 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -1908,7 +1908,7 @@ static void Task_HandleOpponent1(u8 taskId) static void Task_HandleOpponent2(u8 taskId) { u32 var1 = (sBerryBlender->arrowPos + 0x1800) & 0xFFFF; - u32 arrowId = sBerryBlender->playerIdToArrowId[2] & 0xFF; + u8 arrowId = sBerryBlender->playerIdToArrowId[2]; if ((var1 >> 8) > sArrowHitRangeStart[arrowId] + 20 && (var1 >> 8) < sArrowHitRangeStart[arrowId] + 40) { if (!gTasks[taskId].tDidInput) @@ -1925,11 +1925,9 @@ static void Task_HandleOpponent2(u8 taskId) } else { - u8 value; if (rand > 65) gRecvCmds[2][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_BEST; - value = rand - 41; - if (value < 25) + if (rand > 40 && rand <= 65) gRecvCmds[2][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_GOOD; if (rand < 10) CreateOpponentMissTask(2, 5); @@ -1953,7 +1951,7 @@ static void Task_HandleOpponent2(u8 taskId) static void Task_HandleOpponent3(u8 taskId) { u32 var1 = (sBerryBlender->arrowPos + 0x1800) & 0xFFFF; - u32 arrowId = sBerryBlender->playerIdToArrowId[3] & 0xFF; + u8 arrowId = sBerryBlender->playerIdToArrowId[3]; if ((var1 >> 8) > sArrowHitRangeStart[arrowId] + 20 && (var1 >> 8) < sArrowHitRangeStart[arrowId] + 40) { if (gTasks[taskId].data[0] == 0) @@ -1971,16 +1969,9 @@ static void Task_HandleOpponent3(u8 taskId) else { if (rand > 60) - { gRecvCmds[3][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_BEST; - } - else - { - s8 value = rand - 56; // makes me wonder what the original code was - u8 value2 = value; - if (value2 < 5) - gRecvCmds[3][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_GOOD; - } + else if (rand > 55 && rand <= 60) + gRecvCmds[3][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_GOOD; if (rand < 5) CreateOpponentMissTask(3, 5); } From 550e6688aa3b511a9aa9ea851c49ba4d90c7708a Mon Sep 17 00:00:00 2001 From: Philipp AUER Date: Sat, 13 Jul 2024 19:26:33 +0200 Subject: [PATCH 118/120] Support C-Style `enum` in preproc (#1984) * [preproc] C-style enums - asm files parseable from stdin - 2nd preproc pass - add parser for C-style `enum` - positional arguments at end of command --------- Co-authored-by: sbird Co-authored-by: Martin Griffin --- Makefile | 14 +-- tools/preproc/Makefile | 4 +- tools/preproc/asm_file.cpp | 223 ++++++++++++++++++++++++++++++++----- tools/preproc/asm_file.h | 9 +- tools/preproc/c_file.cpp | 48 +------- tools/preproc/c_file.h | 2 - tools/preproc/io.cpp | 51 +++++++++ tools/preproc/io.h | 8 ++ tools/preproc/preproc.cpp | 83 ++++++++++---- 9 files changed, 339 insertions(+), 103 deletions(-) create mode 100644 tools/preproc/io.cpp create mode 100644 tools/preproc/io.h diff --git a/Makefile b/Makefile index 21c010003b..bf74e0331a 100644 --- a/Makefile +++ b/Makefile @@ -311,7 +311,7 @@ ifeq ($(NODEP),1) $(C_BUILDDIR)/%.o: $(C_SUBDIR)/%.c ifeq (,$(KEEP_TEMPS)) @echo "$(CC1) -o $@ $<" - @$(CPP) $(CPPFLAGS) $< | $(PREPROC) $< charmap.txt -i | $(CC1) $(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $(AS) $(ASFLAGS) -o $@ - + @$(CPP) $(CPPFLAGS) $< | $(PREPROC) -i $< charmap.txt | $(CC1) $(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $(AS) $(ASFLAGS) -o $@ - else @$(CPP) $(CPPFLAGS) $< -o $(C_BUILDDIR)/$*.i @$(PREPROC) $(C_BUILDDIR)/$*.i charmap.txt | $(CC1) $(CFLAGS) -o $(C_BUILDDIR)/$*.s @@ -323,7 +323,7 @@ define C_DEP $1: $2 $$(shell $(SCANINC) -I include -I tools/agbcc/include -I gflib $2) ifeq (,$$(KEEP_TEMPS)) @echo "$$(CC1) -o $$@ $$<" - @$$(CPP) $$(CPPFLAGS) $$< | $$(PREPROC) $$< charmap.txt -i | $$(CC1) $$(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $$(AS) $$(ASFLAGS) -o $$@ - + @$$(CPP) $$(CPPFLAGS) $$< | $$(PREPROC) -i $$< charmap.txt | $$(CC1) $$(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $$(AS) $$(ASFLAGS) -o $$@ - else @$$(CPP) $$(CPPFLAGS) $$< -o $$(C_BUILDDIR)/$3.i @$$(PREPROC) $$(C_BUILDDIR)/$3.i charmap.txt | $$(CC1) $$(CFLAGS) -o $$(C_BUILDDIR)/$3.s @@ -338,7 +338,7 @@ ifeq ($(NODEP),1) $(GFLIB_BUILDDIR)/%.o: $(GFLIB_SUBDIR)/%.c $$(c_dep) ifeq (,$(KEEP_TEMPS)) @echo "$(CC1) -o $@ $<" - @$(CPP) $(CPPFLAGS) $< | $(PREPROC) $< charmap.txt -i | $(CC1) $(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $(AS) $(ASFLAGS) -o $@ - + @$(CPP) $(CPPFLAGS) $< | $(PREPROC) -i $< charmap.txt | $(CC1) $(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $(AS) $(ASFLAGS) -o $@ - else @$(CPP) $(CPPFLAGS) $< -o $(GFLIB_BUILDDIR)/$*.i @$(PREPROC) $(GFLIB_BUILDDIR)/$*.i charmap.txt | $(CC1) $(CFLAGS) -o $(GFLIB_BUILDDIR)/$*.s @@ -350,7 +350,7 @@ define GFLIB_DEP $1: $2 $$(shell $(SCANINC) -I include -I tools/agbcc/include -I gflib $2) ifeq (,$$(KEEP_TEMPS)) @echo "$$(CC1) -o $$@ $$<" - @$$(CPP) $$(CPPFLAGS) $$< | $$(PREPROC) $$< charmap.txt -i | $$(CC1) $$(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $$(AS) $$(ASFLAGS) -o $$@ - + @$$(CPP) $$(CPPFLAGS) $$< | $$(PREPROC) -i $$< charmap.txt | $$(CC1) $$(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $$(AS) $$(ASFLAGS) -o $$@ - else @$$(CPP) $$(CPPFLAGS) $$< -o $$(GFLIB_BUILDDIR)/$3.i @$$(PREPROC) $$(GFLIB_BUILDDIR)/$3.i charmap.txt | $$(CC1) $$(CFLAGS) -o $$(GFLIB_BUILDDIR)/$3.s @@ -363,11 +363,11 @@ endif ifeq ($(NODEP),1) $(C_BUILDDIR)/%.o: $(C_SUBDIR)/%.s - $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(AS) $(ASFLAGS) -o $@ + $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(PREPROC) -i $$< charmap.txt | $(AS) $(ASFLAGS) -o $@ else define SRC_ASM_DATA_DEP $1: $2 $$(shell $(SCANINC) -I include -I "" $2) - $$(PREPROC) $$< charmap.txt | $$(CPP) -I include - | $$(AS) $$(ASFLAGS) -o $$@ + $$(PREPROC) $$< charmap.txt | $$(CPP) -I include - | $$(PREPROC) -ie $$< charmap.txt | $$(AS) $$(ASFLAGS) -o $$@ endef $(foreach src, $(C_ASM_SRCS), $(eval $(call SRC_ASM_DATA_DEP,$(patsubst $(C_SUBDIR)/%.s,$(C_BUILDDIR)/%.o, $(src)),$(src)))) endif @@ -385,7 +385,7 @@ endif ifeq ($(NODEP),1) $(DATA_ASM_BUILDDIR)/%.o: $(DATA_ASM_SUBDIR)/%.s - $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(AS) $(ASFLAGS) -o $@ + $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(PREPROC) -ie $$< charmap.txt | $(AS) $(ASFLAGS) -o $@ else $(foreach src, $(REGULAR_DATA_ASM_SRCS), $(eval $(call SRC_ASM_DATA_DEP,$(patsubst $(DATA_ASM_SUBDIR)/%.s,$(DATA_ASM_BUILDDIR)/%.o, $(src)),$(src)))) endif diff --git a/tools/preproc/Makefile b/tools/preproc/Makefile index 1507c973f2..606318944c 100644 --- a/tools/preproc/Makefile +++ b/tools/preproc/Makefile @@ -3,10 +3,10 @@ CXX ?= g++ CXXFLAGS := -std=c++11 -O2 -Wall -Wno-switch -Werror SRCS := asm_file.cpp c_file.cpp charmap.cpp preproc.cpp string_parser.cpp \ - utf8.cpp + utf8.cpp io.cpp HEADERS := asm_file.h c_file.h char_util.h charmap.h preproc.h string_parser.h \ - utf8.h + utf8.h io.h ifeq ($(OS),Windows_NT) EXE := .exe diff --git a/tools/preproc/asm_file.cpp b/tools/preproc/asm_file.cpp index 04a7410e00..ca8b8cc4ae 100644 --- a/tools/preproc/asm_file.cpp +++ b/tools/preproc/asm_file.cpp @@ -27,33 +27,12 @@ #include "utf8.h" #include "string_parser.h" #include "../../gflib/characters.h" +#include "io.h" -AsmFile::AsmFile(std::string filename) : m_filename(filename) +AsmFile::AsmFile(std::string filename, bool isStdin, bool doEnum) : m_filename(filename) { - FILE *fp = std::fopen(filename.c_str(), "rb"); - - if (fp == NULL) - FATAL_ERROR("Failed to open \"%s\" for reading.\n", filename.c_str()); - - std::fseek(fp, 0, SEEK_END); - - m_size = std::ftell(fp); - - if (m_size < 0) - FATAL_ERROR("File size of \"%s\" is less than zero.\n", filename.c_str()); - else if (m_size == 0) - return; // Empty file - - m_buffer = new char[m_size + 1]; - - std::rewind(fp); - - if (std::fread(m_buffer, m_size, 1, fp) != 1) - FATAL_ERROR("Failed to read \"%s\".\n", filename.c_str()); - - m_buffer[m_size] = 0; - - std::fclose(fp); + m_buffer = ReadFileToBuffer(filename.c_str(), isStdin, &m_size); + m_doEnum = doEnum; m_pos = 0; m_lineNum = 1; @@ -65,6 +44,7 @@ AsmFile::AsmFile(std::string filename) : m_filename(filename) AsmFile::AsmFile(AsmFile&& other) : m_filename(std::move(other.m_filename)) { m_buffer = other.m_buffer; + m_doEnum = other.m_doEnum; m_pos = other.m_pos; m_size = other.m_size; m_lineNum = other.m_lineNum; @@ -174,6 +154,8 @@ Directive AsmFile::GetDirective() return Directive::String; else if (CheckForDirective(".braille")) return Directive::Braille; + else if (CheckForDirective("enum")) + return Directive::Enum; else return Directive::Unknown; } @@ -527,6 +509,70 @@ void AsmFile::OutputLine() } } +// parses an assumed C `enum`. Returns false if `enum { ...` is not matched +bool AsmFile::ParseEnum() +{ + if (!m_doEnum) + return false; + + long fallbackPosition = m_pos; + std::string headerFilename = ""; + long currentHeaderLine = SkipWhitespaceAndEol(); + std::string enumName = ReadIdentifier(); + currentHeaderLine += SkipWhitespaceAndEol(); + long enumCounter = 0; + long symbolCount = 0; + + if (m_buffer[m_pos] != '{') // assume assembly macro, otherwise assume enum and report errors accordingly + { + m_pos = fallbackPosition - 4; + return false; + } + + currentHeaderLine += FindLastLineNumber(headerFilename); + m_pos++; + for (;;) + { + currentHeaderLine += SkipWhitespaceAndEol(); + std::string currentIdentName = ReadIdentifier(); + if (!currentIdentName.empty()) + { + std::printf("# %ld \"%s\"\n", currentHeaderLine, headerFilename.c_str()); + currentHeaderLine += SkipWhitespaceAndEol(); + if (m_buffer[m_pos] == '=') + { + m_pos++; + currentHeaderLine += SkipWhitespaceAndEol(); + enumCounter = ReadInteger(headerFilename, currentHeaderLine); + currentHeaderLine += SkipWhitespaceAndEol(); + } + std::printf(".equiv %s, %ld\n", currentIdentName.c_str(), enumCounter); + enumCounter++; + symbolCount++; + } + else if (symbolCount == 0) + { + RaiseError("%s:%ld: empty enum is invalid", headerFilename.c_str(), currentHeaderLine); + } + + if (m_buffer[m_pos] != ',') + { + currentHeaderLine += SkipWhitespaceAndEol(); + if (m_buffer[m_pos++] == '}' && m_buffer[m_pos++] == ';') + { + ExpectEmptyRestOfLine(); + break; + } + else + { + RaiseError("unterminated enum from included file %s:%ld", headerFilename.c_str(), currentHeaderLine); + } + } + m_pos++; + } + return true; +} + // Asserts that the rest of the line is empty and moves to the next one. void AsmFile::ExpectEmptyRestOfLine() { @@ -599,3 +645,130 @@ void AsmFile::RaiseWarning(const char* format, ...) { DO_REPORT("warning"); } + +// Skips Whitespace including newlines and returns the amount of newlines skipped +int AsmFile::SkipWhitespaceAndEol() +{ + int newlines = 0; + while (m_buffer[m_pos] == '\t' || m_buffer[m_pos] == ' ' || m_buffer[m_pos] == '\n') + { + if (m_buffer[m_pos] == '\n') + newlines++; + m_pos++; + } + return newlines; +} + +// returns the last line indicator and its corresponding file name without modifying the token index +int AsmFile::FindLastLineNumber(std::string& filename) +{ + long pos = m_pos; + long linebreaks = 0; + while (m_buffer[pos] != '#' && pos >= 0) + { + if (m_buffer[pos] == '\n') + linebreaks++; + pos--; + } + + if (pos < 0) + RaiseError("line indicator for header file not found before `enum`"); + + pos++; + while (m_buffer[pos] == ' ' || m_buffer[pos] == '\t') + pos++; + + if (!IsAsciiDigit(m_buffer[pos])) + RaiseError("malformatted line indicator found before `enum`, expected line number"); + + unsigned n = 0; + int digit = 0; + while ((digit = ConvertDigit(m_buffer[pos++], 10)) != -1) + n = 10 * n + digit; + + while (m_buffer[pos] == ' ' || m_buffer[pos] == '\t') + pos++; + + if (m_buffer[pos++] != '"') + RaiseError("malformatted line indicator found before `enum`, expected filename"); + + while (m_buffer[pos] != '"') + { + unsigned char c = m_buffer[pos++]; + + if (c == 0) + { + if (pos >= m_size) + RaiseError("unexpected EOF in line indicator"); + else + RaiseError("unexpected null character in line indicator"); + } + + if (!IsAsciiPrintable(c)) + RaiseError("unexpected character '\\x%02X' in line indicator", c); + + if (c == '\\') + { + c = m_buffer[pos]; + RaiseError("unexpected escape '\\%c' in line indicator", c); + } + + filename += c; + } + + return n + linebreaks - 1; +} + +std::string AsmFile::ReadIdentifier() +{ + long start = m_pos; + if (!IsIdentifierStartingChar(m_buffer[m_pos])) + return std::string(); + + m_pos++; + + while (IsIdentifierChar(m_buffer[m_pos])) + m_pos++; + + return std::string(&m_buffer[start], m_pos - start); +} + +long AsmFile::ReadInteger(std::string filename, long line) +{ + bool negate = false; + int radix = 10; + if (!IsAsciiDigit(m_buffer[m_pos])) + { + if (m_buffer[m_pos++] == '-') + negate = true; + else + RaiseError("expected number in included file %s:%ld", filename.c_str(), line); + } + + if (m_buffer[m_pos] == '0' && m_buffer[m_pos + 1] == 'x') + { + radix = 16; + m_pos += 2; + } + else if (m_buffer[m_pos] == '0' && m_buffer[m_pos + 1] == 'b') + { + radix = 2; + m_pos += 2; + } + else if (m_buffer[m_pos] == '0' && IsAsciiDigit(m_buffer[m_pos+1])) + { + radix = 8; + m_pos++; + } + + long n = 0; + int digit; + + while ((digit = ConvertDigit(m_buffer[m_pos], radix)) != -1) + { + n = n * radix + digit; + m_pos++; + } + + return negate ? -n : n; +} diff --git a/tools/preproc/asm_file.h b/tools/preproc/asm_file.h index 29435f76a4..33e6ce5c49 100644 --- a/tools/preproc/asm_file.h +++ b/tools/preproc/asm_file.h @@ -31,13 +31,14 @@ enum class Directive Include, String, Braille, + Enum, Unknown }; class AsmFile { public: - AsmFile(std::string filename); + AsmFile(std::string filename, bool isStdin, bool doEnum); AsmFile(AsmFile&& other); AsmFile(const AsmFile&) = delete; ~AsmFile(); @@ -49,9 +50,11 @@ public: bool IsAtEnd(); void OutputLine(); void OutputLocation(); + bool ParseEnum(); private: char* m_buffer; + bool m_doEnum; long m_pos; long m_size; long m_lineNum; @@ -68,6 +71,10 @@ private: void RaiseError(const char* format, ...); void RaiseWarning(const char* format, ...); void VerifyStringLength(int length); + int SkipWhitespaceAndEol(); + int FindLastLineNumber(std::string& filename); + std::string ReadIdentifier(); + long ReadInteger(std::string filename, long line); }; #endif // ASM_FILE_H diff --git a/tools/preproc/c_file.cpp b/tools/preproc/c_file.cpp index 508c628731..191ca4c152 100644 --- a/tools/preproc/c_file.cpp +++ b/tools/preproc/c_file.cpp @@ -30,56 +30,16 @@ #include "char_util.h" #include "utf8.h" #include "string_parser.h" +#include "io.h" CFile::CFile(const char * filenameCStr, bool isStdin) { - FILE *fp; - - if (isStdin) { - fp = stdin; + if (isStdin) m_filename = std::string{"/"}.append(filenameCStr); - } else { - fp = std::fopen(filenameCStr, "rb"); + else m_filename = std::string(filenameCStr); - } - std::string& filename = m_filename; - - if (fp == NULL) - FATAL_ERROR("Failed to open \"%s\" for reading.\n", filename.c_str()); - - m_size = 0; - m_buffer = (char *)malloc(CHUNK_SIZE + 1); - if (m_buffer == NULL) { - FATAL_ERROR("Failed to allocate memory to process file \"%s\"!", filename.c_str()); - } - - std::size_t numAllocatedBytes = CHUNK_SIZE + 1; - std::size_t bufferOffset = 0; - std::size_t count; - - while ((count = std::fread(m_buffer + bufferOffset, 1, CHUNK_SIZE, fp)) != 0) { - if (!std::ferror(fp)) { - m_size += count; - - if (std::feof(fp)) { - break; - } - - numAllocatedBytes += CHUNK_SIZE; - bufferOffset += CHUNK_SIZE; - m_buffer = (char *)realloc(m_buffer, numAllocatedBytes); - if (m_buffer == NULL) { - FATAL_ERROR("Failed to allocate memory to process file \"%s\"!", filename.c_str()); - } - } else { - FATAL_ERROR("Failed to read \"%s\". (error: %s)", filename.c_str(), std::strerror(errno)); - } - } - - m_buffer[m_size] = 0; - - std::fclose(fp); + m_buffer = ReadFileToBuffer(filenameCStr, isStdin, &m_size); m_pos = 0; m_lineNum = 1; diff --git a/tools/preproc/c_file.h b/tools/preproc/c_file.h index 49e633a18d..c40c33c962 100644 --- a/tools/preproc/c_file.h +++ b/tools/preproc/c_file.h @@ -56,6 +56,4 @@ private: void RaiseWarning(const char* format, ...); }; -#define CHUNK_SIZE 4096 - #endif // C_FILE_H diff --git a/tools/preproc/io.cpp b/tools/preproc/io.cpp new file mode 100644 index 0000000000..321676180d --- /dev/null +++ b/tools/preproc/io.cpp @@ -0,0 +1,51 @@ +#include "preproc.h" +#include "io.h" +#include +#include +#include + +char *ReadFileToBuffer(const char *filename, bool isStdin, long *size) +{ + FILE *fp; + if (isStdin) + fp = stdin; + else + fp = std::fopen(filename, "rb"); + + if (fp == NULL) + FATAL_ERROR("Failed to open \"%s\" for reading.\n", filename); + + *size = 0; + char *buffer = (char *)malloc(CHUNK_SIZE + 1); + if (buffer == NULL) { + FATAL_ERROR("Failed to allocate memory to process file \"%s\"!", filename); + } + + std::size_t numAllocatedBytes = CHUNK_SIZE + 1; + std::size_t bufferOffset = 0; + std::size_t count; + + while ((count = std::fread(buffer + bufferOffset, 1, CHUNK_SIZE, fp)) != 0) { + if (!std::ferror(fp)) { + *size += count; + + if (std::feof(fp)) { + break; + } + + numAllocatedBytes += CHUNK_SIZE; + bufferOffset += CHUNK_SIZE; + buffer = (char *)realloc(buffer, numAllocatedBytes); + if (buffer == NULL) { + FATAL_ERROR("Failed to allocate memory to process file \"%s\"!", filename); + } + } else { + FATAL_ERROR("Failed to read \"%s\". (error: %s)", filename, std::strerror(errno)); + } + } + + buffer[*size] = 0; + + std::fclose(fp); + return buffer; +} diff --git a/tools/preproc/io.h b/tools/preproc/io.h new file mode 100644 index 0000000000..ac4e91051f --- /dev/null +++ b/tools/preproc/io.h @@ -0,0 +1,8 @@ +#ifndef IO_H_ +#define IO_H_ + +#define CHUNK_SIZE 4096 + +char *ReadFileToBuffer(const char *filename, bool isStdin, long *size); + +#endif // IO_H_ diff --git a/tools/preproc/preproc.cpp b/tools/preproc/preproc.cpp index eb2d4c8a23..20c2de51b6 100644 --- a/tools/preproc/preproc.cpp +++ b/tools/preproc/preproc.cpp @@ -20,11 +20,14 @@ #include #include +#include #include "preproc.h" #include "asm_file.h" #include "c_file.h" #include "charmap.h" +static void UsageAndExit(const char *program); + Charmap* g_charmap; void PrintAsmBytes(unsigned char *s, int length) @@ -43,11 +46,12 @@ void PrintAsmBytes(unsigned char *s, int length) } } -void PreprocAsmFile(std::string filename) +void PreprocAsmFile(std::string filename, bool isStdin, bool doEnum) { std::stack stack; - stack.push(AsmFile(filename)); + stack.push(AsmFile(filename, isStdin, doEnum)); + std::printf("# 1 \"%s\"\n", filename.c_str()); for (;;) { @@ -66,7 +70,7 @@ void PreprocAsmFile(std::string filename) switch (directive) { case Directive::Include: - stack.push(AsmFile(stack.top().ReadPath())); + stack.push(AsmFile(stack.top().ReadPath(), false, doEnum)); stack.top().OutputLocation(); break; case Directive::String: @@ -83,6 +87,12 @@ void PreprocAsmFile(std::string filename) PrintAsmBytes(s, length); break; } + case Directive::Enum: + { + if (!stack.top().ParseEnum()) + stack.top().OutputLine(); + break; + } case Directive::Unknown: { std::string globalLabel = stack.top().GetGlobalLabel(); @@ -109,9 +119,9 @@ void PreprocCFile(const char * filename, bool isStdin) cFile.Preproc(); } -char* GetFileExtension(char* filename) +const char* GetFileExtension(const char* filename) { - char* extension = filename; + const char* extension = filename; while (*extension != 0) extension++; @@ -130,35 +140,64 @@ char* GetFileExtension(char* filename) return extension; } +static void UsageAndExit(const char *program) +{ + std::fprintf(stderr, "Usage: %s [-i] [-e] SRC_FILE CHARMAP_FILE\nwhere -i denotes if input is from stdin\n -e enables enum handling\n", program); + std::exit(EXIT_FAILURE); +} + int main(int argc, char **argv) { - if (argc < 3 || argc > 4) + int opt; + const char *source = NULL; + const char *charmap = NULL; + bool isStdin = false; + bool doEnum = false; + + /* preproc [-i] [-e] SRC_FILE CHARMAP_FILE */ + while ((opt = getopt(argc, argv, "ie")) != -1) { - std::fprintf(stderr, "Usage: %s SRC_FILE CHARMAP_FILE [-i]\nwhere -i denotes if input is from stdin\n", argv[0]); - return 1; + switch (opt) + { + case 'i': + isStdin = true; + break; + case 'e': + doEnum = true; + break; + default: + UsageAndExit(argv[0]); + break; + } } - g_charmap = new Charmap(argv[2]); + if (optind + 2 != argc) + UsageAndExit(argv[0]); - char* extension = GetFileExtension(argv[1]); + source = argv[optind + 0]; + charmap = argv[optind + 1]; + + g_charmap = new Charmap(charmap); + + const char* extension = GetFileExtension(source); if (!extension) FATAL_ERROR("\"%s\" has no file extension.\n", argv[1]); if ((extension[0] == 's') && extension[1] == 0) - PreprocAsmFile(argv[1]); - else if ((extension[0] == 'c' || extension[0] == 'i') && extension[1] == 0) { - if (argc == 4) { - if (argv[3][0] == '-' && argv[3][1] == 'i' && argv[3][2] == '\0') { - PreprocCFile(argv[1], true); - } else { - FATAL_ERROR("unknown argument flag \"%s\".\n", argv[3]); - } - } else { - PreprocCFile(argv[1], false); - } - } else + { + PreprocAsmFile(source, isStdin, doEnum); + } + else if ((extension[0] == 'c' || extension[0] == 'i') && extension[1] == 0) + { + if (doEnum) + FATAL_ERROR("-e is invalid for C sources\n"); + PreprocCFile(source, isStdin); + } + else + { FATAL_ERROR("\"%s\" has an unknown file extension of \"%s\".\n", argv[1], extension); + } return 0; } From 3d2b861436a522c83dce702961587dc5486d7fdc Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Tue, 23 Jul 2024 17:53:19 -0400 Subject: [PATCH 119/120] Fix WSL1 install instructions --- INSTALL.md | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 30b5d0f25a..7ffcdee07b 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -33,27 +33,23 @@ WSL1 is the preferred terminal to build **pokeemerald**. The following instructi - Otherwise, **open WSL** and go to [Choosing where to store pokeemerald (WSL1)](#Choosing-where-to-store-pokeemerald-WSL1). ### Installing WSL1 -1. Open [Windows Powershell **as Administrator**](https://i.imgur.com/QKmVbP9.png), and run the following command (Right Click or Shift+Insert is paste in the Powershell). +1. Open [Windows Powershell **as Administrator**](https://i.imgur.com/QKmVbP9.png), and run the following commands (Right Click or Shift+Insert is paste in the Powershell). ```powershell - dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart + wsl --install -d Ubuntu --enable-wsl1 ``` 2. Once the process finishes, restart your machine. -3. The next step is to choose and install a Linux distribution from the Microsoft Store. The following instructions will assume Ubuntu as the Linux distribution of choice. +3. Open Windows Powershell **as Administrator** again (after restarting), and run the following command to configure Ubuntu to use WSL1. + + ```powershell + wsl --set-version Ubuntu 1 + ```
- Note for advanced users... + Note... - > You can pick a preferred Linux distribution, but setup instructions may differ. Debian should work with the given instructions, but has not been tested. -
- -4. Open the [Microsoft Store Linux Selection](https://aka.ms/wslstore), click Ubuntu, then click Get, which will install the Ubuntu distribution. -
- Notes... - - > Note 1: If a dialog pops up asking for you to sign into a Microsoft Account, then just close the dialog. - > Note 2: If the link does not work, then open the Microsoft Store manually, and search for the Ubuntu app (choose the one with no version number). + > WSL may open automatically after restarting, but you can ignore it for now.
### Setting up WSL1 From 91b48a10d4f0b4c85ffa0363c19f6979b34889c9 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Fri, 26 Jul 2024 21:57:42 -0700 Subject: [PATCH 120/120] Added constant for NUM_SNOWFLAKE_SPRITES --- include/constants/field_weather.h | 1 + src/field_weather_effect.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/include/constants/field_weather.h b/include/constants/field_weather.h index e84dbc48c4..fe7eb6a1ae 100644 --- a/include/constants/field_weather.h +++ b/include/constants/field_weather.h @@ -8,6 +8,7 @@ #define NUM_FOG_DIAGONAL_SPRITES 20 #define NUM_SANDSTORM_SPRITES 20 #define NUM_SWIRL_SANDSTORM_SPRITES 5 +#define NUM_SNOWFLAKE_SPRITES 16 // Controls how the weather should be changing the screen palettes. #define WEATHER_PAL_STATE_CHANGING_WEATHER 0 diff --git a/src/field_weather_effect.c b/src/field_weather_effect.c index de0b90c480..10ce1bc37a 100644 --- a/src/field_weather_effect.c +++ b/src/field_weather_effect.c @@ -770,7 +770,7 @@ void Snow_InitVars(void) gWeatherPtr->weatherGfxLoaded = FALSE; gWeatherPtr->targetColorMapIndex = 3; gWeatherPtr->colorMapStepDelay = 20; - gWeatherPtr->targetSnowflakeSpriteCount = 16; + gWeatherPtr->targetSnowflakeSpriteCount = NUM_SNOWFLAKE_SPRITES; gWeatherPtr->snowflakeVisibleCounter = 0; }