Added typedefs: mapsec_t, metloc_t, and variants for MAPSEC and METLOC values. There are some rough edges that could do with smoothing out, but for now, this gets us close to ideal with a ROM that compares equal. Per feedback, all typedefs to mention the underlying type within the typedef name. The documentation comments reflect and explain the naming convention. Updated comments to reflect the fact that we're no longer using SET8 for a Pokemon's met locations, in favor of a new macro (added by this PR) that adjusts to match the width of whatever is being set.
427 lines
16 KiB
C
427 lines
16 KiB
C
#include "global.h"
|
|
#include "battle_pyramid.h"
|
|
#include "bg.h"
|
|
#include "event_data.h"
|
|
#include "gpu_regs.h"
|
|
#include "international_string_util.h"
|
|
#include "menu.h"
|
|
#include "map_name_popup.h"
|
|
#include "palette.h"
|
|
#include "region_map.h"
|
|
#include "start_menu.h"
|
|
#include "string_util.h"
|
|
#include "task.h"
|
|
#include "text.h"
|
|
#include "constants/battle_frontier.h"
|
|
#include "constants/layouts.h"
|
|
#include "constants/region_map_sections.h"
|
|
#include "constants/weather.h"
|
|
|
|
// enums
|
|
enum MapPopUp_Themes
|
|
{
|
|
MAPPOPUP_THEME_WOOD,
|
|
MAPPOPUP_THEME_MARBLE,
|
|
MAPPOPUP_THEME_STONE,
|
|
MAPPOPUP_THEME_BRICK,
|
|
MAPPOPUP_THEME_UNDERWATER,
|
|
MAPPOPUP_THEME_STONE2,
|
|
};
|
|
|
|
// static functions
|
|
static void Task_MapNamePopUpWindow(u8 taskId);
|
|
static void ShowMapNamePopUpWindow(void);
|
|
static void LoadMapNamePopUpWindowBg(void);
|
|
|
|
// EWRAM
|
|
static EWRAM_DATA u8 sPopupTaskId = 0;
|
|
|
|
// .rodata
|
|
static const u8 sMapPopUp_Table[][960] =
|
|
{
|
|
[MAPPOPUP_THEME_WOOD] = INCBIN_U8("graphics/map_popup/wood.4bpp"),
|
|
[MAPPOPUP_THEME_MARBLE] = INCBIN_U8("graphics/map_popup/marble.4bpp"),
|
|
[MAPPOPUP_THEME_STONE] = INCBIN_U8("graphics/map_popup/stone.4bpp"),
|
|
[MAPPOPUP_THEME_BRICK] = INCBIN_U8("graphics/map_popup/brick.4bpp"),
|
|
[MAPPOPUP_THEME_UNDERWATER] = INCBIN_U8("graphics/map_popup/underwater.4bpp"),
|
|
[MAPPOPUP_THEME_STONE2] = INCBIN_U8("graphics/map_popup/stone2.4bpp"),
|
|
};
|
|
|
|
static const u8 sMapPopUp_OutlineTable[][960] =
|
|
{
|
|
[MAPPOPUP_THEME_WOOD] = INCBIN_U8("graphics/map_popup/wood_outline.4bpp"),
|
|
[MAPPOPUP_THEME_MARBLE] = INCBIN_U8("graphics/map_popup/marble_outline.4bpp"),
|
|
[MAPPOPUP_THEME_STONE] = INCBIN_U8("graphics/map_popup/stone_outline.4bpp"),
|
|
[MAPPOPUP_THEME_BRICK] = INCBIN_U8("graphics/map_popup/brick_outline.4bpp"),
|
|
[MAPPOPUP_THEME_UNDERWATER] = INCBIN_U8("graphics/map_popup/underwater_outline.4bpp"),
|
|
[MAPPOPUP_THEME_STONE2] = INCBIN_U8("graphics/map_popup/stone2_outline.4bpp"),
|
|
};
|
|
|
|
static const u16 sMapPopUp_PaletteTable[][16] =
|
|
{
|
|
[MAPPOPUP_THEME_WOOD] = INCBIN_U16("graphics/map_popup/wood.gbapal"),
|
|
[MAPPOPUP_THEME_MARBLE] = INCBIN_U16("graphics/map_popup/marble_outline.gbapal"),
|
|
[MAPPOPUP_THEME_STONE] = INCBIN_U16("graphics/map_popup/stone_outline.gbapal"),
|
|
[MAPPOPUP_THEME_BRICK] = INCBIN_U16("graphics/map_popup/brick_outline.gbapal"),
|
|
[MAPPOPUP_THEME_UNDERWATER] = INCBIN_U16("graphics/map_popup/underwater_outline.gbapal"),
|
|
[MAPPOPUP_THEME_STONE2] = INCBIN_U16("graphics/map_popup/stone2_outline.gbapal"),
|
|
};
|
|
|
|
static const u16 sMapPopUp_Palette_Underwater[16] = INCBIN_U16("graphics/map_popup/underwater.gbapal");
|
|
|
|
// -1 in the size excludes MAPSEC_NONE.
|
|
// The MAPSEC values for Kanto (between MAPSEC_DYNAMIC and MAPSEC_AQUA_HIDEOUT) are also excluded,
|
|
// and this is then handled by subtracting KANTO_MAPSEC_COUNT here and in LoadMapNamePopUpWindowBg.
|
|
static const u8 sMapSectionToThemeId[MAPSEC_COUNT - KANTO_MAPSEC_COUNT - 1] =
|
|
{
|
|
[MAPSEC_LITTLEROOT_TOWN] = MAPPOPUP_THEME_WOOD,
|
|
[MAPSEC_OLDALE_TOWN] = MAPPOPUP_THEME_WOOD,
|
|
[MAPSEC_DEWFORD_TOWN] = MAPPOPUP_THEME_WOOD,
|
|
[MAPSEC_LAVARIDGE_TOWN] = MAPPOPUP_THEME_WOOD,
|
|
[MAPSEC_FALLARBOR_TOWN] = MAPPOPUP_THEME_WOOD,
|
|
[MAPSEC_VERDANTURF_TOWN] = MAPPOPUP_THEME_WOOD,
|
|
[MAPSEC_PACIFIDLOG_TOWN] = MAPPOPUP_THEME_WOOD,
|
|
[MAPSEC_PETALBURG_CITY] = MAPPOPUP_THEME_BRICK,
|
|
[MAPSEC_SLATEPORT_CITY] = MAPPOPUP_THEME_MARBLE,
|
|
[MAPSEC_MAUVILLE_CITY] = MAPPOPUP_THEME_MARBLE,
|
|
[MAPSEC_RUSTBORO_CITY] = MAPPOPUP_THEME_MARBLE,
|
|
[MAPSEC_FORTREE_CITY] = MAPPOPUP_THEME_BRICK,
|
|
[MAPSEC_LILYCOVE_CITY] = MAPPOPUP_THEME_MARBLE,
|
|
[MAPSEC_MOSSDEEP_CITY] = MAPPOPUP_THEME_BRICK,
|
|
[MAPSEC_SOOTOPOLIS_CITY] = MAPPOPUP_THEME_MARBLE,
|
|
[MAPSEC_EVER_GRANDE_CITY] = MAPPOPUP_THEME_BRICK,
|
|
[MAPSEC_ROUTE_101] = MAPPOPUP_THEME_WOOD,
|
|
[MAPSEC_ROUTE_102] = MAPPOPUP_THEME_WOOD,
|
|
[MAPSEC_ROUTE_103] = MAPPOPUP_THEME_WOOD,
|
|
[MAPSEC_ROUTE_104] = MAPPOPUP_THEME_WOOD,
|
|
[MAPSEC_ROUTE_105] = MAPPOPUP_THEME_UNDERWATER,
|
|
[MAPSEC_ROUTE_106] = MAPPOPUP_THEME_UNDERWATER,
|
|
[MAPSEC_ROUTE_107] = MAPPOPUP_THEME_UNDERWATER,
|
|
[MAPSEC_ROUTE_108] = MAPPOPUP_THEME_UNDERWATER,
|
|
[MAPSEC_ROUTE_109] = MAPPOPUP_THEME_UNDERWATER,
|
|
[MAPSEC_ROUTE_110] = MAPPOPUP_THEME_WOOD,
|
|
[MAPSEC_ROUTE_111] = MAPPOPUP_THEME_WOOD,
|
|
[MAPSEC_ROUTE_112] = MAPPOPUP_THEME_WOOD,
|
|
[MAPSEC_ROUTE_113] = MAPPOPUP_THEME_WOOD,
|
|
[MAPSEC_ROUTE_114] = MAPPOPUP_THEME_WOOD,
|
|
[MAPSEC_ROUTE_115] = MAPPOPUP_THEME_WOOD,
|
|
[MAPSEC_ROUTE_116] = MAPPOPUP_THEME_WOOD,
|
|
[MAPSEC_ROUTE_117] = MAPPOPUP_THEME_WOOD,
|
|
[MAPSEC_ROUTE_118] = MAPPOPUP_THEME_WOOD,
|
|
[MAPSEC_ROUTE_119] = MAPPOPUP_THEME_WOOD,
|
|
[MAPSEC_ROUTE_120] = MAPPOPUP_THEME_WOOD,
|
|
[MAPSEC_ROUTE_121] = MAPPOPUP_THEME_WOOD,
|
|
[MAPSEC_ROUTE_122] = MAPPOPUP_THEME_UNDERWATER,
|
|
[MAPSEC_ROUTE_123] = MAPPOPUP_THEME_WOOD,
|
|
[MAPSEC_ROUTE_124] = MAPPOPUP_THEME_UNDERWATER,
|
|
[MAPSEC_ROUTE_125] = MAPPOPUP_THEME_UNDERWATER,
|
|
[MAPSEC_ROUTE_126] = MAPPOPUP_THEME_UNDERWATER,
|
|
[MAPSEC_ROUTE_127] = MAPPOPUP_THEME_UNDERWATER,
|
|
[MAPSEC_ROUTE_128] = MAPPOPUP_THEME_UNDERWATER,
|
|
[MAPSEC_ROUTE_129] = MAPPOPUP_THEME_UNDERWATER,
|
|
[MAPSEC_ROUTE_130] = MAPPOPUP_THEME_UNDERWATER,
|
|
[MAPSEC_ROUTE_131] = MAPPOPUP_THEME_UNDERWATER,
|
|
[MAPSEC_ROUTE_132] = MAPPOPUP_THEME_UNDERWATER,
|
|
[MAPSEC_ROUTE_133] = MAPPOPUP_THEME_UNDERWATER,
|
|
[MAPSEC_ROUTE_134] = MAPPOPUP_THEME_UNDERWATER,
|
|
[MAPSEC_UNDERWATER_124] = MAPPOPUP_THEME_STONE2,
|
|
[MAPSEC_UNDERWATER_126] = MAPPOPUP_THEME_STONE2,
|
|
[MAPSEC_UNDERWATER_127] = MAPPOPUP_THEME_STONE2,
|
|
[MAPSEC_UNDERWATER_128] = MAPPOPUP_THEME_STONE2,
|
|
[MAPSEC_UNDERWATER_SOOTOPOLIS] = MAPPOPUP_THEME_STONE2,
|
|
[MAPSEC_GRANITE_CAVE] = MAPPOPUP_THEME_STONE,
|
|
[MAPSEC_MT_CHIMNEY] = MAPPOPUP_THEME_STONE,
|
|
[MAPSEC_SAFARI_ZONE] = MAPPOPUP_THEME_WOOD,
|
|
[MAPSEC_BATTLE_FRONTIER] = MAPPOPUP_THEME_MARBLE,
|
|
[MAPSEC_PETALBURG_WOODS] = MAPPOPUP_THEME_WOOD,
|
|
[MAPSEC_RUSTURF_TUNNEL] = MAPPOPUP_THEME_STONE,
|
|
[MAPSEC_ABANDONED_SHIP] = MAPPOPUP_THEME_WOOD,
|
|
[MAPSEC_NEW_MAUVILLE] = MAPPOPUP_THEME_MARBLE,
|
|
[MAPSEC_METEOR_FALLS] = MAPPOPUP_THEME_STONE,
|
|
[MAPSEC_METEOR_FALLS2] = MAPPOPUP_THEME_STONE,
|
|
[MAPSEC_MT_PYRE] = MAPPOPUP_THEME_STONE,
|
|
[MAPSEC_AQUA_HIDEOUT_OLD] = MAPPOPUP_THEME_STONE,
|
|
[MAPSEC_SHOAL_CAVE] = MAPPOPUP_THEME_STONE,
|
|
[MAPSEC_SEAFLOOR_CAVERN] = MAPPOPUP_THEME_STONE,
|
|
[MAPSEC_UNDERWATER_SEAFLOOR_CAVERN] = MAPPOPUP_THEME_STONE2,
|
|
[MAPSEC_VICTORY_ROAD] = MAPPOPUP_THEME_STONE,
|
|
[MAPSEC_MIRAGE_ISLAND] = MAPPOPUP_THEME_WOOD,
|
|
[MAPSEC_CAVE_OF_ORIGIN] = MAPPOPUP_THEME_STONE,
|
|
[MAPSEC_SOUTHERN_ISLAND] = MAPPOPUP_THEME_WOOD,
|
|
[MAPSEC_FIERY_PATH] = MAPPOPUP_THEME_STONE,
|
|
[MAPSEC_FIERY_PATH2] = MAPPOPUP_THEME_STONE,
|
|
[MAPSEC_JAGGED_PASS] = MAPPOPUP_THEME_WOOD,
|
|
[MAPSEC_JAGGED_PASS2] = MAPPOPUP_THEME_WOOD,
|
|
[MAPSEC_SEALED_CHAMBER] = MAPPOPUP_THEME_STONE,
|
|
[MAPSEC_UNDERWATER_SEALED_CHAMBER] = MAPPOPUP_THEME_STONE2,
|
|
[MAPSEC_SCORCHED_SLAB] = MAPPOPUP_THEME_STONE,
|
|
[MAPSEC_ISLAND_CAVE] = MAPPOPUP_THEME_STONE,
|
|
[MAPSEC_DESERT_RUINS] = MAPPOPUP_THEME_STONE,
|
|
[MAPSEC_ANCIENT_TOMB] = MAPPOPUP_THEME_STONE,
|
|
[MAPSEC_INSIDE_OF_TRUCK] = MAPPOPUP_THEME_WOOD,
|
|
[MAPSEC_SKY_PILLAR] = MAPPOPUP_THEME_STONE,
|
|
[MAPSEC_SECRET_BASE] = MAPPOPUP_THEME_STONE,
|
|
[MAPSEC_DYNAMIC] = MAPPOPUP_THEME_MARBLE,
|
|
[MAPSEC_AQUA_HIDEOUT - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE,
|
|
[MAPSEC_MAGMA_HIDEOUT - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE,
|
|
[MAPSEC_MIRAGE_TOWER - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE,
|
|
[MAPSEC_BIRTH_ISLAND - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_WOOD,
|
|
[MAPSEC_FARAWAY_ISLAND - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_WOOD,
|
|
[MAPSEC_ARTISAN_CAVE - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE,
|
|
[MAPSEC_MARINE_CAVE - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE,
|
|
[MAPSEC_UNDERWATER_MARINE_CAVE - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE2,
|
|
[MAPSEC_TERRA_CAVE - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE,
|
|
[MAPSEC_UNDERWATER_105 - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE2,
|
|
[MAPSEC_UNDERWATER_125 - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE2,
|
|
[MAPSEC_UNDERWATER_129 - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE2,
|
|
[MAPSEC_DESERT_UNDERPASS - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE,
|
|
[MAPSEC_ALTERING_CAVE - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE,
|
|
[MAPSEC_NAVEL_ROCK - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE,
|
|
[MAPSEC_TRAINER_HILL - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_MARBLE,
|
|
};
|
|
|
|
static const u8 sText_PyramidFloor1[] = _("PYRAMID FLOOR 1");
|
|
static const u8 sText_PyramidFloor2[] = _("PYRAMID FLOOR 2");
|
|
static const u8 sText_PyramidFloor3[] = _("PYRAMID FLOOR 3");
|
|
static const u8 sText_PyramidFloor4[] = _("PYRAMID FLOOR 4");
|
|
static const u8 sText_PyramidFloor5[] = _("PYRAMID FLOOR 5");
|
|
static const u8 sText_PyramidFloor6[] = _("PYRAMID FLOOR 6");
|
|
static const u8 sText_PyramidFloor7[] = _("PYRAMID FLOOR 7");
|
|
static const u8 sText_Pyramid[] = _("PYRAMID");
|
|
|
|
static const u8 *const sBattlePyramid_MapHeaderStrings[FRONTIER_STAGES_PER_CHALLENGE + 1] =
|
|
{
|
|
sText_PyramidFloor1,
|
|
sText_PyramidFloor2,
|
|
sText_PyramidFloor3,
|
|
sText_PyramidFloor4,
|
|
sText_PyramidFloor5,
|
|
sText_PyramidFloor6,
|
|
sText_PyramidFloor7,
|
|
sText_Pyramid,
|
|
};
|
|
|
|
static bool8 UNUSED StartMenu_ShowMapNamePopup(void)
|
|
{
|
|
HideStartMenu();
|
|
ShowMapNamePopup();
|
|
return TRUE;
|
|
}
|
|
|
|
// States and data defines for Task_MapNamePopUpWindow
|
|
enum {
|
|
STATE_SLIDE_IN,
|
|
STATE_WAIT,
|
|
STATE_SLIDE_OUT,
|
|
STATE_UNUSED,
|
|
STATE_ERASE,
|
|
STATE_END,
|
|
STATE_PRINT, // For some reason the first state is numerically last.
|
|
};
|
|
|
|
#define POPUP_OFFSCREEN_Y 40
|
|
#define POPUP_SLIDE_SPEED 2
|
|
|
|
#define tState data[0]
|
|
#define tOnscreenTimer data[1]
|
|
#define tYOffset data[2]
|
|
#define tIncomingPopUp data[3]
|
|
#define tPrintTimer data[4]
|
|
|
|
void ShowMapNamePopup(void)
|
|
{
|
|
if (FlagGet(FLAG_HIDE_MAP_NAME_POPUP) != TRUE)
|
|
{
|
|
if (!FuncIsActiveTask(Task_MapNamePopUpWindow))
|
|
{
|
|
// New pop up window
|
|
sPopupTaskId = CreateTask(Task_MapNamePopUpWindow, 90);
|
|
SetGpuReg(REG_OFFSET_BG0VOFS, POPUP_OFFSCREEN_Y);
|
|
gTasks[sPopupTaskId].tState = STATE_PRINT;
|
|
gTasks[sPopupTaskId].tYOffset = POPUP_OFFSCREEN_Y;
|
|
}
|
|
else
|
|
{
|
|
// There's already a pop up window running.
|
|
// Hurry the old pop up offscreen so the new one can appear.
|
|
if (gTasks[sPopupTaskId].tState != STATE_SLIDE_OUT)
|
|
gTasks[sPopupTaskId].tState = STATE_SLIDE_OUT;
|
|
gTasks[sPopupTaskId].tIncomingPopUp = TRUE;
|
|
}
|
|
}
|
|
}
|
|
|
|
static void Task_MapNamePopUpWindow(u8 taskId)
|
|
{
|
|
struct Task *task = &gTasks[taskId];
|
|
|
|
switch (task->tState)
|
|
{
|
|
case STATE_PRINT:
|
|
// Wait, then create and print the pop up window
|
|
if (++task->tPrintTimer > 30)
|
|
{
|
|
task->tState = STATE_SLIDE_IN;
|
|
task->tPrintTimer = 0;
|
|
ShowMapNamePopUpWindow();
|
|
}
|
|
break;
|
|
case STATE_SLIDE_IN:
|
|
// Slide the window onscreen.
|
|
task->tYOffset -= POPUP_SLIDE_SPEED;
|
|
if (task->tYOffset <= 0 )
|
|
{
|
|
task->tYOffset = 0;
|
|
task->tState = STATE_WAIT;
|
|
gTasks[sPopupTaskId].data[1] = 0;
|
|
}
|
|
break;
|
|
case STATE_WAIT:
|
|
// Wait while the window is fully onscreen.
|
|
if (++task->tOnscreenTimer > 120)
|
|
{
|
|
task->tOnscreenTimer = 0;
|
|
task->tState = STATE_SLIDE_OUT;
|
|
}
|
|
break;
|
|
case STATE_SLIDE_OUT:
|
|
// Slide the window offscreen.
|
|
task->tYOffset += POPUP_SLIDE_SPEED;
|
|
if (task->tYOffset >= POPUP_OFFSCREEN_Y)
|
|
{
|
|
task->tYOffset = POPUP_OFFSCREEN_Y;
|
|
if (task->tIncomingPopUp)
|
|
{
|
|
// A new pop up window is incoming,
|
|
// return to the first state to show it.
|
|
task->tState = STATE_PRINT;
|
|
task->tPrintTimer = 0;
|
|
task->tIncomingPopUp = FALSE;
|
|
}
|
|
else
|
|
{
|
|
task->tState = STATE_ERASE;
|
|
return;
|
|
}
|
|
}
|
|
break;
|
|
case STATE_ERASE:
|
|
ClearStdWindowAndFrame(GetMapNamePopUpWindowId(), TRUE);
|
|
task->tState = STATE_END;
|
|
break;
|
|
case STATE_END:
|
|
HideMapNamePopUpWindow();
|
|
return;
|
|
}
|
|
SetGpuReg(REG_OFFSET_BG0VOFS, task->tYOffset);
|
|
}
|
|
|
|
void HideMapNamePopUpWindow(void)
|
|
{
|
|
if (FuncIsActiveTask(Task_MapNamePopUpWindow))
|
|
{
|
|
#ifdef UBFIX
|
|
if (GetMapNamePopUpWindowId() != WINDOW_NONE)
|
|
#endif // UBFIX
|
|
{
|
|
ClearStdWindowAndFrame(GetMapNamePopUpWindowId(), TRUE);
|
|
RemoveMapNamePopUpWindow();
|
|
}
|
|
SetGpuReg_ForcedBlank(REG_OFFSET_BG0VOFS, 0);
|
|
DestroyTask(sPopupTaskId);
|
|
}
|
|
}
|
|
|
|
static void ShowMapNamePopUpWindow(void)
|
|
{
|
|
u8 mapDisplayHeader[24];
|
|
u8 *withoutPrefixPtr;
|
|
u8 x;
|
|
const u8 *mapDisplayHeaderSource;
|
|
|
|
if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE)
|
|
{
|
|
if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_TOP)
|
|
{
|
|
withoutPrefixPtr = &(mapDisplayHeader[3]);
|
|
mapDisplayHeaderSource = sBattlePyramid_MapHeaderStrings[FRONTIER_STAGES_PER_CHALLENGE];
|
|
}
|
|
else
|
|
{
|
|
withoutPrefixPtr = &(mapDisplayHeader[3]);
|
|
mapDisplayHeaderSource = sBattlePyramid_MapHeaderStrings[gSaveBlock2Ptr->frontier.curChallengeBattleNum];
|
|
}
|
|
StringCopy(withoutPrefixPtr, mapDisplayHeaderSource);
|
|
}
|
|
else
|
|
{
|
|
withoutPrefixPtr = &(mapDisplayHeader[3]);
|
|
GetMapName(withoutPrefixPtr, gMapHeader.regionMapSectionId, 0);
|
|
}
|
|
AddMapNamePopUpWindow();
|
|
LoadMapNamePopUpWindowBg();
|
|
x = GetStringCenterAlignXOffset(FONT_NARROW, withoutPrefixPtr, 80);
|
|
mapDisplayHeader[0] = EXT_CTRL_CODE_BEGIN;
|
|
mapDisplayHeader[1] = EXT_CTRL_CODE_HIGHLIGHT;
|
|
mapDisplayHeader[2] = TEXT_COLOR_TRANSPARENT;
|
|
AddTextPrinterParameterized(GetMapNamePopUpWindowId(), FONT_NARROW, mapDisplayHeader, x, 3, TEXT_SKIP_DRAW, NULL);
|
|
CopyWindowToVram(GetMapNamePopUpWindowId(), COPYWIN_FULL);
|
|
}
|
|
|
|
#define TILE_TOP_EDGE_START 0x21D
|
|
#define TILE_TOP_EDGE_END 0x228
|
|
#define TILE_LEFT_EDGE_TOP 0x229
|
|
#define TILE_RIGHT_EDGE_TOP 0x22A
|
|
#define TILE_LEFT_EDGE_MID 0x22B
|
|
#define TILE_RIGHT_EDGE_MID 0x22C
|
|
#define TILE_LEFT_EDGE_BOT 0x22D
|
|
#define TILE_RIGHT_EDGE_BOT 0x22E
|
|
#define TILE_BOT_EDGE_START 0x22F
|
|
#define TILE_BOT_EDGE_END 0x23A
|
|
|
|
static void DrawMapNamePopUpFrame(u8 bg, u8 x, u8 y, u8 deltaX, u8 deltaY, u8 unused)
|
|
{
|
|
s32 i;
|
|
|
|
// Draw top edge
|
|
for (i = 0; i < 1 + TILE_TOP_EDGE_END - TILE_TOP_EDGE_START; i++)
|
|
FillBgTilemapBufferRect(bg, TILE_TOP_EDGE_START + i, i - 1 + x, y - 1, 1, 1, 14);
|
|
|
|
// Draw sides
|
|
FillBgTilemapBufferRect(bg, TILE_LEFT_EDGE_TOP, x - 1, y, 1, 1, 14);
|
|
FillBgTilemapBufferRect(bg, TILE_RIGHT_EDGE_TOP, deltaX + x, y, 1, 1, 14);
|
|
FillBgTilemapBufferRect(bg, TILE_LEFT_EDGE_MID, x - 1, y + 1, 1, 1, 14);
|
|
FillBgTilemapBufferRect(bg, TILE_RIGHT_EDGE_MID, deltaX + x, y + 1, 1, 1, 14);
|
|
FillBgTilemapBufferRect(bg, TILE_LEFT_EDGE_BOT, x - 1, y + 2, 1, 1, 14);
|
|
FillBgTilemapBufferRect(bg, TILE_RIGHT_EDGE_BOT, deltaX + x, y + 2, 1, 1, 14);
|
|
|
|
// Draw bottom edge
|
|
for (i = 0; i < 1 + TILE_BOT_EDGE_END - TILE_BOT_EDGE_START; i++)
|
|
FillBgTilemapBufferRect(bg, TILE_BOT_EDGE_START + i, i - 1 + x, y + deltaY, 1, 1, 14);
|
|
}
|
|
|
|
static void LoadMapNamePopUpWindowBg(void)
|
|
{
|
|
u8 popUpThemeId;
|
|
u8 popupWindowId = GetMapNamePopUpWindowId();
|
|
mapsec_u16_t regionMapSectionId = gMapHeader.regionMapSectionId;
|
|
|
|
if (regionMapSectionId >= KANTO_MAPSEC_START)
|
|
{
|
|
if (regionMapSectionId > KANTO_MAPSEC_END)
|
|
regionMapSectionId -= KANTO_MAPSEC_COUNT;
|
|
else
|
|
regionMapSectionId = 0; // Discard kanto region sections;
|
|
}
|
|
popUpThemeId = sMapSectionToThemeId[regionMapSectionId];
|
|
|
|
LoadBgTiles(GetWindowAttribute(popupWindowId, WINDOW_BG), sMapPopUp_OutlineTable[popUpThemeId], 0x400, 0x21D);
|
|
CallWindowFunction(popupWindowId, DrawMapNamePopUpFrame);
|
|
PutWindowTilemap(popupWindowId);
|
|
if (gMapHeader.weather == WEATHER_UNDERWATER_BUBBLES)
|
|
LoadPalette(&sMapPopUp_Palette_Underwater, BG_PLTT_ID(14), sizeof(sMapPopUp_Palette_Underwater));
|
|
else
|
|
LoadPalette(sMapPopUp_PaletteTable[popUpThemeId], BG_PLTT_ID(14), sizeof(sMapPopUp_PaletteTable[0]));
|
|
BlitBitmapToWindow(popupWindowId, sMapPopUp_Table[popUpThemeId], 0, 0, 80, 24);
|
|
}
|