mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2025-01-13 15:13:42 +01:00
Document DrawFootprint
This commit is contained in:
parent
1497719f8c
commit
8b37b4292a
@ -64,14 +64,23 @@
|
|||||||
|
|
||||||
#define ROM_HEADER_SIZE 0xC0
|
#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_WIDTH 240
|
||||||
#define DISPLAY_HEIGHT 160
|
#define DISPLAY_HEIGHT 160
|
||||||
|
|
||||||
#define DISPLAY_TILE_WIDTH (DISPLAY_WIDTH / 8)
|
// Dimensions of the GBA screen in tiles
|
||||||
#define DISPLAY_TILE_HEIGHT (DISPLAY_HEIGHT / 8)
|
#define DISPLAY_TILE_WIDTH (DISPLAY_WIDTH / TILE_WIDTH)
|
||||||
|
#define DISPLAY_TILE_HEIGHT (DISPLAY_HEIGHT / TILE_HEIGHT)
|
||||||
|
|
||||||
#define TILE_SIZE_4BPP 32
|
// Size of different tile formats in bytes
|
||||||
#define TILE_SIZE_8BPP 64
|
#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_4BPP(n) ((n) * TILE_SIZE_4BPP)
|
||||||
#define TILE_OFFSET_8BPP(n) ((n) * TILE_SIZE_8BPP)
|
#define TILE_OFFSET_8BPP(n) ((n) * TILE_SIZE_8BPP)
|
||||||
|
@ -93,6 +93,13 @@ enum
|
|||||||
NAME_YZ,
|
NAME_YZ,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
WIN_INFO,
|
||||||
|
WIN_FOOTPRINT,
|
||||||
|
WIN_CRY_WAVE,
|
||||||
|
WIN_VU_METER,
|
||||||
|
};
|
||||||
|
|
||||||
// For scrolling search parameter
|
// For scrolling search parameter
|
||||||
#define MAX_SEARCH_PARAM_ON_SCREEN 6
|
#define MAX_SEARCH_PARAM_ON_SCREEN 6
|
||||||
#define MAX_SEARCH_PARAM_CURSOR_POS (MAX_SEARCH_PARAM_ON_SCREEN - 1)
|
#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[] =
|
static const struct WindowTemplate sInfoScreen_WindowTemplates[] =
|
||||||
{
|
{
|
||||||
[WIN_INFO] =
|
[WIN_INFO] =
|
||||||
@ -4570,26 +4572,38 @@ static void PrintDecimalNum(u8 windowId, u16 num, u8 left, u8 top)
|
|||||||
PrintInfoSubMenuText(windowId, str, left, 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)
|
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)];
|
const u8 * footprintGfx = gMonFootprintTable[NationalPokedexNumToSpecies(dexNum)];
|
||||||
u16 tileIdx = 0;
|
u16 tileIdx = 0;
|
||||||
u16 i, j;
|
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++)
|
for (j = 0; j < 4; j++)
|
||||||
{
|
{
|
||||||
u8 value = ((tile >> (2 * j)) & 1 ? 2 : 0);
|
u8 tile = 0;
|
||||||
if (tile & (2 << (2 * j)))
|
if (footprint1bpp & (1 << (2 * j)))
|
||||||
value |= 0x20;
|
tile |= FOOTPRINT_COLOR_IDX; // Set pixel
|
||||||
footprint[tileIdx] = value;
|
if (footprint1bpp & (2 << (2 * j)))
|
||||||
|
tile |= FOOTPRINT_COLOR_IDX << 4; // Set pixel
|
||||||
|
footprint4bpp[tileIdx] = tile;
|
||||||
tileIdx++;
|
tileIdx++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
CopyToWindowPixelBuffer(windowId, footprint, sizeof(footprint), 0);
|
CopyToWindowPixelBuffer(windowId, footprint4bpp, sizeof(footprint4bpp), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unused Ruby/Sapphire function.
|
// Unused Ruby/Sapphire function.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user