From 8b37b4292a17c67a4711b90aa0e83d63acf26af6 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 9 May 2023 22:04:26 -0400 Subject: [PATCH 1/8] 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 82caf56e6840..f2ea0899d9d6 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 88558d6f2cfa..af96b88771ab 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 2/8] 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 3/8] 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 69fc398d8cf9..97a7794b3085 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 bebed465bfc8..fa2eee42c010 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 a5fefbd8b6e6..c9c240efbba0 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 832e9bb39710..1dfc38e2d036 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 f1dbfcf4f720..1797d84dfd71 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 5d4faacab044..98a1a1edf9f2 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 250b723450aa..830158b52e90 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 4/8] 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 c489eb6a4c34..80fba81fe309 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 82caf56e6840..10e84b8b1aac 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 29723ef6c894..d23a658b4a78 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 2f5d515c024c..e6e049c37051 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 0ee894085e4e..1d9a12cafbd5 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 13cfc1b4eaf4..89696d7dd3fa 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 ca0beabd3284..75a6ee22d985 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 746e3bdd7365..7e5c5e9393bd 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 9b74fdada32c..228ba12ceef7 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 ac38c5e474fe..d9fd6523118c 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 978d14c4cdc9..f7bc6e31ae71 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 4e6b3a3402c0..5000e11096c4 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 d8e1e7baa32a..b399bd5b5c13 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 117dd3b88c0b..dc793f70a592 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 b7c2b1494c62..b3091d965ee7 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 16f702c72ceb..0812953235b9 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 0b5796487ccc..55ed328b8909 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 bc86ede4acf0..f9a7be58ea45 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 f02e38f13445..b02e9e445c51 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 84a439037d03..07d7772f42d8 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 4463a9ebfc74..edc48d820273 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 d12477bea8a5..bf9197a0e8f2 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 4066f72e581c..2e87b9c1d77e 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 cf0de017faa6..10b02c86b7ac 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 e43d68600154..448ee3384875 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 8a1847f11179..84d295f132ee 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 4c9e63c0b8cf..ec999be92493 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 6d95cfbdc307..27ef85de9ed6 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 4f6264492418..2a188674503c 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 35ba633cf4c1..5c910dced1ae 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 a86f16201f71..96ff1b52df80 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 eeb22edd2467..3b92a0c4354c 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 7cae89d22fcc..d51c6ab88af4 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 7c98703c6b36..a2b3d6366fa7 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 92863dee5f26..73aef3746d72 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 df4db47b5319..bdacf7ab25f8 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 87d011741028..5c7d23b5ac7e 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 7e935260947a..dd979c77a81c 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 f4a4c96d7119..2e79a1f6b65d 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 fd9c124670b8..ed50208e7d55 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 7593a296e882..05b5a3a0507a 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 06bde1e38f3e..0894021b564e 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 546ec6f6cd52..e24442ca023c 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 a6f3bc0ffdb4..424a286f3f32 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 6808a8f11a5e..ef4bbd636d34 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 01b87393aeed..f9806e77682c 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 58c9f0f36977..6dd45aa7e1cd 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 577257eff326..6ce47a4933d7 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 61b694753c39..02c742dc90fa 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 88558d6f2cfa..5a2667759e90 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 ff32f8eef134..da50f8c688e6 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 01cbacb44732..f9181a985b6e 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 237f728381e2..8e37018cba6a 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 8649e3ce7989..99b0dae0e7bc 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 d3764cb80213..181739802004 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 bfc5ba0cb4f7..761f572d6bda 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 1747d3ef0b99..4271e2ff23b9 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 336744236224..ede88affdbee 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 50f01345c8d8..e589e28187b7 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 c1ca7f9d92c0..344b44f00914 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 4861b8e0ea1d..e77f839a808c 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 ebe3afb8e9d5..f6123359be8b 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 06561f7988a7..d311ad094081 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 18a56631d3d5..bf4ec38f448b 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 2fc0e2c03541..581e5c78e00c 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 12701fb5f0ef..595ba08a6f51 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 d10c39c7df77..9a562cf7f7f3 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 5/8] 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: Fri, 2 Jun 2023 11:56:12 -0400 Subject: [PATCH 6/8] Missing pret improvement that was causing unmatching --- src/pokedex.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/pokedex.c b/src/pokedex.c index 5b0414513154..13fea297954e 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -4552,7 +4552,9 @@ static void DrawFootprint(u8 windowId, u16 dexNum) // so we need 4 iterations to do all 8 pixels. for (j = 0; j < 4; j++) { - u8 tile = ((footprint1bpp >> (2 * j)) & 1 ? 2 : 0); + 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; From 271bca6a3d5e5848fb5fb9a501ac9765b855718c Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Fri, 2 Jun 2023 11:56:36 -0400 Subject: [PATCH 7/8] Fixed Staraptor using Staravia's footprint --- src/data/graphics/pokemon.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/graphics/pokemon.h b/src/data/graphics/pokemon.h index 673fbb4eea08..56e45283afca 100644 --- a/src/data/graphics/pokemon.h +++ b/src/data/graphics/pokemon.h @@ -6501,7 +6501,7 @@ const u8 gMonFootprint_Prinplup[] = INCBIN_U8("graphics/pokemon/prinplup/footpri const u8 gMonFootprint_Empoleon[] = INCBIN_U8("graphics/pokemon/empoleon/footprint.1bpp"); const u8 gMonFootprint_Starly[] = INCBIN_U8("graphics/pokemon/starly/footprint.1bpp"); const u8 gMonFootprint_Staravia[] = INCBIN_U8("graphics/pokemon/staravia/footprint.1bpp"); -const u8 gMonFootprint_Staraptor[] = INCBIN_U8("graphics/pokemon/staravia/footprint.1bpp"); +const u8 gMonFootprint_Staraptor[] = INCBIN_U8("graphics/pokemon/staraptor/footprint.1bpp"); const u8 gMonFootprint_Bidoof[] = INCBIN_U8("graphics/pokemon/bidoof/footprint.1bpp"); const u8 gMonFootprint_Bibarel[] = INCBIN_U8("graphics/pokemon/bibarel/footprint.1bpp"); const u8 gMonFootprint_Kricketot[] = INCBIN_U8("graphics/pokemon/kricketot/footprint.1bpp"); From 43da48f9928d7eaf4b0f8f9b2167ce928563c5b4 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Fri, 2 Jun 2023 12:22:05 -0400 Subject: [PATCH 8/8] `CpuFastFill` for initializing, thanks SBird --- src/pokedex.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/pokedex.c b/src/pokedex.c index 13fea297954e..c5b8105b2d7b 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -4537,7 +4537,7 @@ static void PrintDecimalNum(u8 windowId, u16 num, u8 left, u8 top) static void DrawFootprint(u8 windowId, u16 dexNum) { - u8 footprint4bpp[TILE_SIZE_4BPP * NUM_FOOTPRINT_TILES] = {0}; + u8 footprint4bpp[TILE_SIZE_4BPP * NUM_FOOTPRINT_TILES]; const u8 *footprintGfx = gMonFootprintTable[NationalPokedexNumToSpecies(dexNum)]; u32 i, j, tileIdx = 0; @@ -4562,6 +4562,10 @@ static void DrawFootprint(u8 windowId, u16 dexNum) } } } + else + { + CpuFastFill(0, footprint4bpp, sizeof(footprint4bpp)); + } CopyToWindowPixelBuffer(windowId, footprint4bpp, sizeof(footprint4bpp), 0); }