inital port of BSBob's map pop-ups
19
graphics/interface/map_popup_palette.pal
Normal file
|
@ -0,0 +1,19 @@
|
|||
JASC-PAL
|
||||
0100
|
||||
16
|
||||
0 0 0
|
||||
0 0 0
|
||||
255 255 255
|
||||
41 49 90
|
||||
0 0 0
|
||||
238 230 238
|
||||
189 180 197
|
||||
139 139 164
|
||||
90 90 123
|
||||
41 49 90
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
BIN
graphics/interface/map_popup_tiles.png
Normal file
After Width: | Height: | Size: 9.1 KiB |
Before Width: | Height: | Size: 412 B |
Before Width: | Height: | Size: 461 B |
Before Width: | Height: | Size: 509 B |
Before Width: | Height: | Size: 494 B |
Before Width: | Height: | Size: 201 B |
Before Width: | Height: | Size: 201 B |
Before Width: | Height: | Size: 407 B |
Before Width: | Height: | Size: 407 B |
|
@ -1,19 +0,0 @@
|
|||
JASC-PAL
|
||||
0100
|
||||
16
|
||||
115 197 164
|
||||
0 0 0
|
||||
238 255 255
|
||||
65 65 123
|
||||
255 255 255
|
||||
180 222 255
|
||||
139 172 213
|
||||
98 123 172
|
||||
57 74 131
|
||||
16 24 90
|
||||
180 222 255
|
||||
139 172 213
|
||||
98 123 172
|
||||
57 74 131
|
||||
16 24 90
|
||||
255 255 255
|
Before Width: | Height: | Size: 304 B |
Before Width: | Height: | Size: 485 B |
Before Width: | Height: | Size: 338 B |
Before Width: | Height: | Size: 391 B |
|
@ -5070,4 +5070,8 @@ extern const u8 gMailTilemap_Retro[];
|
|||
extern const u8 gMonMarkingsMenu_Gfx[];
|
||||
extern const u16 gMonMarkingsMenu_Pal[];
|
||||
|
||||
// BSBob map pop-ups
|
||||
extern const u8 gPopUpWindowBorder_Tiles[];
|
||||
extern const u16 gPopUpWindowBorder_Palette[];
|
||||
|
||||
#endif //GUARD_GRAPHICS_H
|
||||
|
|
|
@ -41,6 +41,7 @@ struct MenuAction
|
|||
};
|
||||
|
||||
extern const u16 gStandardMenuPalette[];
|
||||
extern EWRAM_DATA u8 gPopupTaskId;
|
||||
|
||||
void FreeAllOverworldWindowBuffers(void);
|
||||
void InitStandardTextBoxWindows(void);
|
||||
|
@ -103,8 +104,8 @@ void AddTextPrinterForMessage_2(bool8 allowSkippingDelayWithButtonPress);
|
|||
void RemoveStartMenuWindow(void);
|
||||
void DisplayYesNoMenuWithDefault(u8 initialCursorPos);
|
||||
void BufferSaveMenuText(u8 textId, u8 *dest, u8 color);
|
||||
void RemoveMapNamePopUpWindow(void);
|
||||
u8 GetMapNamePopUpWindowId(void);
|
||||
void RemovePrimaryPopUpWindow(void);
|
||||
u8 GetPrimaryPopUpWindowId(void);
|
||||
u8 AddMapNamePopUpWindow(void);
|
||||
void AddTextPrinterParameterized5(u8 windowId, u8 fontId, const u8 *str, u8 left, u8 top, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16), u8 letterSpacing, u8 lineSpacing);
|
||||
void SetBgTilemapPalette(u8 bgId, u8 left, u8 top, u8 width, u8 height, u8 palette);
|
||||
|
@ -124,5 +125,9 @@ void AddTextPrinterWithCustomSpeedForMessage(bool8 allowSkippingDelayWithButtonP
|
|||
void EraseYesNoWindow(void);
|
||||
void PrintMenuActionTextsAtPos(u8 windowId, u8 fontId, u8 left, u8 top, u8 lineHeight, u8 itemCount, const struct MenuAction *strs);
|
||||
void Menu_LoadStdPal(void);
|
||||
u8 AddWeatherPopUpWindow(void);
|
||||
u8 GetSecondaryPopUpWindowId(void);
|
||||
void RemoveSecondaryPopUpWindow(void);
|
||||
void HBlankCB_DoublePopupWindow(void);
|
||||
|
||||
#endif // GUARD_MENU_H
|
||||
|
|
|
@ -45,5 +45,6 @@ void RtcCalcLocalTimeOffset(s32 days, s32 hours, s32 minutes, s32 seconds);
|
|||
void CalcTimeDifference(struct Time *result, struct Time *t1, struct Time *t2);
|
||||
u32 RtcGetMinuteCount(void);
|
||||
u32 RtcGetLocalDayCount(void);
|
||||
void FormatDecimalTimeWithoutSeconds(u8 *dest, s8 hour, s8 minute, bool8 is24Hour);
|
||||
|
||||
#endif // GUARD_RTC_UTIL_H
|
||||
|
|
|
@ -3026,4 +3026,8 @@ extern const u8 gText_BoxName[];
|
|||
extern const u8 gText_PkmnsNickname[];
|
||||
extern const u8 gText_TellHimTheWords[];
|
||||
|
||||
// BSBob map pop-ups
|
||||
extern const u8 gText_AM[];
|
||||
extern const u8 gText_PM[];
|
||||
|
||||
#endif // GUARD_STRINGS_H
|
||||
|
|
|
@ -1535,3 +1535,7 @@ static const u8 sUnused2[] = {0x02};
|
|||
static const u8 sEmpty5[0x3242] = {0};
|
||||
static const u8 sUnused3[] = {0x40};
|
||||
static const u8 sEmpty6[0x13] = {0};
|
||||
|
||||
// BSBob map pop-ups
|
||||
const u8 gPopUpWindowBorder_Tiles[] = INCBIN_U8("graphics/interface/map_popup_tiles.4bpp");
|
||||
const u16 gPopUpWindowBorder_Palette[] = INCBIN_U16("graphics/interface/map_popup_palette.gbapal");
|
||||
|
|
|
@ -3,11 +3,14 @@
|
|||
#include "bg.h"
|
||||
#include "event_data.h"
|
||||
#include "gpu_regs.h"
|
||||
#include "graphics.h"
|
||||
#include "international_string_util.h"
|
||||
#include "main.h"
|
||||
#include "menu.h"
|
||||
#include "map_name_popup.h"
|
||||
#include "palette.h"
|
||||
#include "region_map.h"
|
||||
#include "rtc.h"
|
||||
#include "start_menu.h"
|
||||
#include "string_util.h"
|
||||
#include "task.h"
|
||||
|
@ -17,165 +20,12 @@
|
|||
#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);
|
||||
static void LoadMapNamePopUpWindowBgs(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");
|
||||
|
||||
static const u8 sRegionMapSectionId_To_PopUpThemeIdMapping[] =
|
||||
{
|
||||
[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 u16 sMapPopUp_Palette[16] = INCBIN_U16("graphics/interface/map_popup_palette.gbapal");
|
||||
|
||||
static const u8 sText_PyramidFloor1[] = _("PYRAMID FLOOR 1");
|
||||
static const u8 sText_PyramidFloor2[] = _("PYRAMID FLOOR 2");
|
||||
|
@ -216,7 +66,7 @@ enum {
|
|||
STATE_PRINT, // For some reason the first state is numerically last.
|
||||
};
|
||||
|
||||
#define POPUP_OFFSCREEN_Y 40
|
||||
#define POPUP_OFFSCREEN_Y 24
|
||||
#define POPUP_SLIDE_SPEED 2
|
||||
|
||||
#define tState data[0]
|
||||
|
@ -232,18 +82,18 @@ void ShowMapNamePopup(void)
|
|||
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;
|
||||
gPopupTaskId = CreateTask(Task_MapNamePopUpWindow, 100);
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
|
||||
gTasks[gPopupTaskId].tState = STATE_PRINT;
|
||||
gTasks[gPopupTaskId].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;
|
||||
if (gTasks[gPopupTaskId].tState != STATE_SLIDE_OUT)
|
||||
gTasks[gPopupTaskId].tState = STATE_SLIDE_OUT;
|
||||
gTasks[gPopupTaskId].tIncomingPopUp = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -261,6 +111,8 @@ static void Task_MapNamePopUpWindow(u8 taskId)
|
|||
task->tState = STATE_SLIDE_IN;
|
||||
task->tPrintTimer = 0;
|
||||
ShowMapNamePopUpWindow();
|
||||
EnableInterrupts(INTR_FLAG_HBLANK);
|
||||
SetHBlankCallback(HBlankCB_DoublePopupWindow);
|
||||
}
|
||||
break;
|
||||
case STATE_SLIDE_IN:
|
||||
|
@ -270,7 +122,7 @@ static void Task_MapNamePopUpWindow(u8 taskId)
|
|||
{
|
||||
task->tYOffset = 0;
|
||||
task->tState = STATE_WAIT;
|
||||
gTasks[sPopupTaskId].data[1] = 0;
|
||||
gTasks[gPopupTaskId].tOnscreenTimer = 0;
|
||||
}
|
||||
break;
|
||||
case STATE_WAIT:
|
||||
|
@ -303,24 +155,31 @@ static void Task_MapNamePopUpWindow(u8 taskId)
|
|||
}
|
||||
break;
|
||||
case STATE_ERASE:
|
||||
ClearStdWindowAndFrame(GetMapNamePopUpWindowId(), TRUE);
|
||||
ClearStdWindowAndFrame(GetPrimaryPopUpWindowId(), TRUE);
|
||||
ClearStdWindowAndFrame(GetSecondaryPopUpWindowId(), TRUE);
|
||||
task->tState = STATE_END;
|
||||
break;
|
||||
case STATE_END:
|
||||
HideMapNamePopUpWindow();
|
||||
return;
|
||||
}
|
||||
SetGpuReg(REG_OFFSET_BG0VOFS, task->tYOffset);
|
||||
}
|
||||
|
||||
void HideMapNamePopUpWindow(void)
|
||||
{
|
||||
if (FuncIsActiveTask(Task_MapNamePopUpWindow))
|
||||
{
|
||||
ClearStdWindowAndFrame(GetMapNamePopUpWindowId(), TRUE);
|
||||
RemoveMapNamePopUpWindow();
|
||||
ClearStdWindowAndFrame(GetPrimaryPopUpWindowId(), TRUE);
|
||||
ClearStdWindowAndFrame(GetSecondaryPopUpWindowId(), TRUE);
|
||||
RemovePrimaryPopUpWindow();
|
||||
RemoveSecondaryPopUpWindow();
|
||||
DisableInterrupts(INTR_FLAG_HBLANK);
|
||||
SetHBlankCallback(NULL);
|
||||
SetGpuReg_ForcedBlank(REG_OFFSET_BG0VOFS, 0);
|
||||
DestroyTask(sPopupTaskId);
|
||||
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ);
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_EFFECT_BLEND);
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(8, 10));
|
||||
DestroyTask(gPopupTaskId);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -328,9 +187,22 @@ static void ShowMapNamePopUpWindow(void)
|
|||
{
|
||||
u8 mapDisplayHeader[24];
|
||||
u8 *withoutPrefixPtr;
|
||||
u8 x;
|
||||
u8 mapNameX, timeX, mapNameY, timeY, mapNamePopUpWindowId, weatherPopUpWindowId;
|
||||
const u8 *mapDisplayHeaderSource;
|
||||
|
||||
mapNameX = 8;
|
||||
mapNameY = 2;
|
||||
timeX = 5;
|
||||
timeY = 8;
|
||||
|
||||
SetGpuRegBits(REG_OFFSET_WININ, WININ_WIN0_CLR);
|
||||
|
||||
mapNamePopUpWindowId = AddMapNamePopUpWindow();
|
||||
weatherPopUpWindowId = AddWeatherPopUpWindow();
|
||||
|
||||
LoadMapNamePopUpWindowBgs();
|
||||
LoadPalette(gPopUpWindowBorder_Palette, 0xE0, 32);
|
||||
|
||||
if (InBattlePyramid())
|
||||
{
|
||||
if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_TOP)
|
||||
|
@ -350,52 +222,23 @@ static void ShowMapNamePopUpWindow(void)
|
|||
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);
|
||||
|
||||
AddTextPrinterParameterized(mapNamePopUpWindowId, FONT_SHORT, mapDisplayHeader, mapNameX, mapNameY, TEXT_SKIP_DRAW, NULL);
|
||||
FormatDecimalTimeWithoutSeconds(withoutPrefixPtr, gLocalTime.hours, gLocalTime.minutes, FALSE);
|
||||
AddTextPrinterParameterized(weatherPopUpWindowId, FONT_SMALL, mapDisplayHeader, GetStringRightAlignXOffset(FONT_SMALL, mapDisplayHeader, DISPLAY_WIDTH) - timeX, timeY, TEXT_SKIP_DRAW, NULL);
|
||||
|
||||
CopyWindowToVram(mapNamePopUpWindowId, COPYWIN_FULL);
|
||||
CopyWindowToVram(weatherPopUpWindowId, 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)
|
||||
static void LoadMapNamePopUpWindowBgs(void)
|
||||
{
|
||||
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();
|
||||
u8 mapNamePopUpWindowId = GetPrimaryPopUpWindowId();
|
||||
u8 weatherPopUpWindowId = GetSecondaryPopUpWindowId();
|
||||
u16 regionMapSectionId = gMapHeader.regionMapSectionId;
|
||||
|
||||
if (regionMapSectionId >= KANTO_MAPSEC_START)
|
||||
|
@ -405,14 +248,10 @@ static void LoadMapNamePopUpWindowBg(void)
|
|||
else
|
||||
regionMapSectionId = 0; // Discard kanto region sections;
|
||||
}
|
||||
popUpThemeId = sRegionMapSectionId_To_PopUpThemeIdMapping[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);
|
||||
PutWindowTilemap(mapNamePopUpWindowId);
|
||||
PutWindowTilemap(weatherPopUpWindowId);
|
||||
|
||||
BlitBitmapRectToWindow(mapNamePopUpWindowId, gPopUpWindowBorder_Tiles, 0, 0, DISPLAY_WIDTH, 24, 0, 0, DISPLAY_WIDTH, 24);
|
||||
BlitBitmapRectToWindow(weatherPopUpWindowId, gPopUpWindowBorder_Tiles, 0, 24, DISPLAY_WIDTH, 24, 0, 0, DISPLAY_WIDTH, 24);
|
||||
}
|
||||
|
|
64
src/menu.c
|
@ -60,8 +60,11 @@ static void WindowFunc_DrawStdFrameWithCustomTileAndPalette(u8, u8, u8, u8, u8,
|
|||
static void WindowFunc_ClearStdWindowAndFrameToTransparent(u8, u8, u8, u8, u8, u8);
|
||||
static void task_free_buf_after_copying_tile_data_to_vram(u8 taskId);
|
||||
|
||||
EWRAM_DATA u8 gPopupTaskId;
|
||||
|
||||
static EWRAM_DATA u8 sStartMenuWindowId = 0;
|
||||
static EWRAM_DATA u8 sMapNamePopupWindowId = 0;
|
||||
static EWRAM_DATA u8 sPrimaryPopupWindowId = 0;
|
||||
static EWRAM_DATA u8 sSecondaryPopupWindowId = 0;
|
||||
static EWRAM_DATA struct Menu sMenu = {0};
|
||||
static EWRAM_DATA u16 sTileNum = 0;
|
||||
static EWRAM_DATA u8 sPaletteNum = 0;
|
||||
|
@ -144,7 +147,8 @@ void InitStandardTextBoxWindows(void)
|
|||
{
|
||||
InitWindows(sStandardTextBox_WindowTemplates);
|
||||
sStartMenuWindowId = WINDOW_NONE;
|
||||
sMapNamePopupWindowId = WINDOW_NONE;
|
||||
sPrimaryPopupWindowId = WINDOW_NONE;
|
||||
sSecondaryPopupWindowId = WINDOW_NONE;
|
||||
}
|
||||
|
||||
void FreeAllOverworldWindowBuffers(void)
|
||||
|
@ -520,22 +524,22 @@ static u16 UNUSED GetStandardFrameBaseTileNum(void)
|
|||
|
||||
u8 AddMapNamePopUpWindow(void)
|
||||
{
|
||||
if (sMapNamePopupWindowId == WINDOW_NONE)
|
||||
sMapNamePopupWindowId = AddWindowParameterized(0, 1, 1, 10, 3, 14, 0x107);
|
||||
return sMapNamePopupWindowId;
|
||||
if (sPrimaryPopupWindowId == WINDOW_NONE)
|
||||
sPrimaryPopupWindowId = AddWindowParameterized(0, 0, 0, 30, 3, 14, 0x107);
|
||||
return sPrimaryPopupWindowId;
|
||||
}
|
||||
|
||||
u8 GetMapNamePopUpWindowId(void)
|
||||
u8 GetPrimaryPopUpWindowId(void)
|
||||
{
|
||||
return sMapNamePopupWindowId;
|
||||
return sPrimaryPopupWindowId;
|
||||
}
|
||||
|
||||
void RemoveMapNamePopUpWindow(void)
|
||||
void RemovePrimaryPopUpWindow(void)
|
||||
{
|
||||
if (sMapNamePopupWindowId != WINDOW_NONE)
|
||||
if (sPrimaryPopupWindowId != WINDOW_NONE)
|
||||
{
|
||||
RemoveWindow(sMapNamePopupWindowId);
|
||||
sMapNamePopupWindowId = WINDOW_NONE;
|
||||
RemoveWindow(sPrimaryPopupWindowId);
|
||||
sPrimaryPopupWindowId = WINDOW_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2145,3 +2149,41 @@ void BufferSaveMenuText(u8 textId, u8 *dest, u8 color)
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// BSBob map pop-ups
|
||||
u8 AddWeatherPopUpWindow(void)
|
||||
{
|
||||
if (sSecondaryPopupWindowId == WINDOW_NONE)
|
||||
sSecondaryPopupWindowId = AddWindowParameterized(0, 0, 17, 30, 3, 14, 0x161);
|
||||
return sSecondaryPopupWindowId;
|
||||
}
|
||||
|
||||
u8 GetSecondaryPopUpWindowId(void)
|
||||
{
|
||||
return sSecondaryPopupWindowId;
|
||||
}
|
||||
|
||||
void RemoveSecondaryPopUpWindow(void)
|
||||
{
|
||||
if (sSecondaryPopupWindowId != WINDOW_NONE)
|
||||
{
|
||||
RemoveWindow(sSecondaryPopupWindowId);
|
||||
sSecondaryPopupWindowId = WINDOW_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
void HBlankCB_DoublePopupWindow(void)
|
||||
{
|
||||
u16 offset = gTasks[gPopupTaskId].data[2];
|
||||
u16 scanline = REG_VCOUNT;
|
||||
|
||||
if (scanline < 80 || scanline > 160)
|
||||
{
|
||||
REG_BG0VOFS = offset;
|
||||
REG_BLDALPHA = BLDALPHA_BLEND(15, 5);
|
||||
}
|
||||
else
|
||||
{
|
||||
REG_BG0VOFS = 512 - offset;
|
||||
}
|
||||
}
|
||||
|
|
34
src/rtc.c
|
@ -1,6 +1,7 @@
|
|||
#include "global.h"
|
||||
#include "rtc.h"
|
||||
#include "string_util.h"
|
||||
#include "strings.h"
|
||||
#include "text.h"
|
||||
|
||||
// iwram bss
|
||||
|
@ -344,3 +345,36 @@ u32 RtcGetLocalDayCount(void)
|
|||
{
|
||||
return RtcGetDayCount(&sRtc);
|
||||
}
|
||||
|
||||
void FormatDecimalTimeWithoutSeconds(u8 *txtPtr, s8 hour, s8 minute, bool8 is24Hour)
|
||||
{
|
||||
RtcCalcLocalTime();
|
||||
switch (is24Hour)
|
||||
{
|
||||
case TRUE:
|
||||
txtPtr = ConvertIntToDecimalStringN(txtPtr, hour, STR_CONV_MODE_LEADING_ZEROS, 2);
|
||||
*txtPtr++ = CHAR_COLON;
|
||||
txtPtr = ConvertIntToDecimalStringN(txtPtr, minute, STR_CONV_MODE_LEADING_ZEROS, 2);
|
||||
break;
|
||||
case FALSE:
|
||||
if (hour == 0)
|
||||
hour = 12;
|
||||
|
||||
if (hour < 13)
|
||||
txtPtr = ConvertIntToDecimalStringN(txtPtr, hour, STR_CONV_MODE_LEADING_ZEROS, 2);
|
||||
else
|
||||
txtPtr = ConvertIntToDecimalStringN(txtPtr, hour - 12, STR_CONV_MODE_LEADING_ZEROS, 2);
|
||||
|
||||
*txtPtr++ = CHAR_COLON;
|
||||
txtPtr = ConvertIntToDecimalStringN(txtPtr, minute, STR_CONV_MODE_LEADING_ZEROS, 2);
|
||||
txtPtr = StringAppend(txtPtr, gText_Space);
|
||||
if (hour < 13)
|
||||
txtPtr = StringAppend(txtPtr, gText_AM);
|
||||
else
|
||||
txtPtr = StringAppend(txtPtr, gText_PM);
|
||||
break;
|
||||
}
|
||||
|
||||
*txtPtr++ = EOS;
|
||||
*txtPtr = EOS;
|
||||
}
|
||||
|
|
|
@ -1819,3 +1819,5 @@ const u8 gText_Answer[] = _("ANSWER");
|
|||
const u8 gText_PokeBalls[] = _("POKé BALLS");
|
||||
const u8 gText_Berry[] = _("BERRY");
|
||||
const u8 gText_Berries[] = _("BERRIES");
|
||||
const u8 gText_AM[] = _("AM");
|
||||
const u8 gText_PM[] = _("PM");
|