Cleanup overlay097

General clean up of most documented files of overlay 97 following the
documentation of `overlay097/main_menu_util.c`.

This also adds some forgotten parentheses in macros that could result
in unintended behaviour.
This commit is contained in:
Gudf 2025-07-26 19:14:26 +02:00
parent ccda4fcf2a
commit 18fca9048b
16 changed files with 481 additions and 459 deletions

View File

@ -9,10 +9,10 @@
#define MAX_LETTER_HEIGHT 16
#define MAX_LETTER_HEIGHT_TILES ((MAX_LETTER_HEIGHT + 7) / 8)
#define TEXT_LINES(n) (n * MAX_LETTER_HEIGHT)
#define TEXT_LINES_TILES(n) (n * MAX_LETTER_HEIGHT_TILES)
#define TEXT_LINES_WITH_SPACING(n, spacing) (n * MAX_LETTER_HEIGHT + (n - 1) * spacing)
#define TEXT_LINES_WITH_SPACING_TILES(n, spacing) (n * MAX_LETTER_HEIGHT_TILES + (n - 1) * spacing)
#define TEXT_LINES(n) ((n) * MAX_LETTER_HEIGHT)
#define TEXT_LINES_TILES(n) ((n) * MAX_LETTER_HEIGHT_TILES)
#define TEXT_LINES_WITH_SPACING(n, spacing) ((n) * MAX_LETTER_HEIGHT + ((n) - 1) * spacing)
#define TEXT_LINES_WITH_SPACING_TILES(n, spacing) ((n) * MAX_LETTER_HEIGHT_TILES + ((n) - 1) * spacing)
enum Font {
FONT_SYSTEM = 0,

View File

@ -0,0 +1,8 @@
#ifndef POKEPLATINUM_OV97_APPLICATION_TEMPLATE_H
#define POKEPLATINUM_OV97_APPLICATION_TEMPLATE_H
#include "overlay_manager.h"
extern const ApplicationManagerTemplate gMainMenuAppTemplate;
#endif // POKEPLATINUM_OV97_APPLICATION_TEMPLATE_H

View File

@ -1,8 +0,0 @@
#ifndef POKEPLATINUM_CONST_OV97_0223D674_H
#define POKEPLATINUM_CONST_OV97_0223D674_H
#include "overlay_manager.h"
extern const ApplicationManagerTemplate gMainMenuAppTemplate;
#endif // POKEPLATINUM_CONST_OV97_0223D674_H

View File

@ -1,6 +1,6 @@
#ifndef POKEPLATINUM_GBA_CONVERT_STRING_H
#define POKEPLATINUM_GBA_CONVERT_STRING_H
BOOL GBAStringToDSString(const u8 *src, u16 *dst, u32 length, u32 language);
BOOL GBA_ConvertStringToDS(const u8 *src, u16 *dst, u32 length, u32 language);
#endif // POKEPLATINUM_GBA_CONVERT_STRING_H

View File

@ -62,7 +62,7 @@ typedef struct MainMenuWindow {
void MainMenuUtil_Init(enum HeapId heapID);
void *MainMenuUtil_InitAppAndFadeToBlack(ApplicationManager *appMan, enum HeapId heapID, int appDataSize, enum HeapSize heapSize);
void MainMenuUtil_InitBG(BgConfig *bgConfig, enum BgLayer bgLayer, u8 screenSize, u32 screenBase, u32 charBase);
void MainMenuUtil_InitBGLayer(BgConfig *bgConfig, enum BgLayer bgLayer, u8 screenSize, u32 screenBase, u32 charBase);
void MainMenuUtil_SetFadeToWhite(BOOL enable);
void MainMenuUtil_StartScreenFadeToState(enum FadeType fadeType, int destState, int *state, int waitState);
void MainMenuUtil_CheckScreenFadeDone(int *state);
@ -78,8 +78,8 @@ void MainMenuUtil_InitSpriteLoader(void);
MainMenuSpriteManager *MainMenuUtil_GetSpriteManager(void);
void MainMenuUtil_LoadSprite(enum NarcID narcID, int tilesID, int plttID, int cellID, int animID, enum DSScreen screen);
void MainMenuUtil_SetSubScreenViewRect(fx32 x, fx32 y);
void MainMenuUtil_UpdateSpritesSkipGift(void);
void MainMenuUtil_UpdateSprites(int skipDrawGift);
void MainMenuUtil_UpdateSprites(void);
void MainMenuUtil_UpdateSpritesForAnimStatus(enum MysteryGiftAnimationStatus skipDrawGift);
Sprite *MainMenuUtil_InitSprite(enum DSScreen screen, Sprite *sprite, int x, int y, int animationIdx);
void MainMenuUtil_FreeSprites(void);
u32 MainMenuUtil_CalcMysteryGiftVersionBit(enum Version version);

View File

@ -91,6 +91,12 @@ enum MysteryGiftAppState {
MG_APP_KEEP_PREVIOUS_STATE = -1,
};
enum MysteryGiftAnimationStatus {
MG_ANIMATION_STATUS_DONE = 0,
MG_ANIMATION_STATUS_BEGIN,
MG_ANIMATION_STATUS_PROCEED_IMPLOSION
};
typedef struct MysteryGiftEventData {
MysteryGiftEventHeader header;
WonderCard wonderCard;
@ -114,7 +120,7 @@ struct MysteryGiftAppData {
int msgBoxPrinterDelay;
int textPrinterId;
int unused_70;
int queuedState;
enum MysteryGiftAppState queuedState;
ListMenu *listMenu;
StringList *listMenuOptions;
int canReceiveGiftStatus;
@ -137,7 +143,7 @@ struct MysteryGiftAppData {
u8 wirelessDistributionBuffer[MG_APP_DISTRIBUTION_DATA_BUFFER_SIZE];
int receptionMethod;
enum MysteryGiftAppState *statePtr;
int unk_1640;
int giftSearchResultDelay;
int nasAuthState;
u8 *unused_1648;
DWCInetControl unk_164C;
@ -158,9 +164,9 @@ struct MysteryGiftAppData {
Window wifiCommErrorWindow;
WonderCard wonderCard;
MysteryGiftAppMainCallbackFuncPtr mainCallback;
int cancelSave;
BOOL cancelSave;
void *waitDial;
int animationStatus;
enum MysteryGiftAnimationStatus animationStatus;
};
void MysteryGiftApp_ToggleWaitDial(MysteryGiftAppData *appData, BOOL show);

View File

@ -16,8 +16,8 @@
#define HI_HALF(i) (((i) >> 16) & 0xFFFF)
#define LO_HALF(i) ((i) & 0xFFFF)
#define HI_AND_LO(h, l) (((h) << 16) | l)
#define max(x, y) (x > y ? x : y)
#define min(x, y) (x < y ? x : y)
#define max(x, y) ((x) > (y) ? (x) : (y))
#define min(x, y) ((x) < (y) ? (x) : (y))
#define ALIGN_4 __attribute__((aligned(4)))

View File

@ -17,6 +17,8 @@
#define DIST_CTRDG_DATA_LENGTH 1192
#define DIST_CTRDG_SIGNATURE_LENGTH 128
#define NINTENDO_MAKER_CODE 0x3130 // ASCII characters "01", as a little-endian 16-bit integer
static u32 sDistributionCartridgeGameCodes[] = {
'B5BE',
'B5CE',
@ -79,7 +81,7 @@ inline u32 FlipEndianness(u32 val)
return ((val >> 0) & 255) << 24 | ((val >> 8) & 255) << 16 | ((val >> 16) & 255) << 8 | ((val >> 24) & 255) << 0;
}
static BOOL CheckDistCartridgeGameCodeAndSignature(void)
static BOOL VerifyCartridgeAuthenticity(void)
{
u32 gameCode = CTRDG_GetAgbGameCode();
@ -114,11 +116,11 @@ static BOOL CheckGBASlotHasDistributionCartridge(void)
return FALSE;
}
if (CTRDG_GetAgbMakerCode() != 0x3130) {
if (CTRDG_GetAgbMakerCode() != NINTENDO_MAKER_CODE) {
return FALSE;
}
if (CheckDistCartridgeGameCodeAndSignature() == FALSE) {
if (VerifyCartridgeAuthenticity() == FALSE) {
return FALSE;
}

View File

@ -5,169 +5,173 @@
#include "constants/charcode.h"
#include "charcode.h"
#define GBA_EOS 0xFF
// Japanese, International
static const u16 sGBACharToDSChars[][2] = {
static const charcode_t sGBACharToDSChars[][2] = {
{ CHAR_WIDE_SPACE, CHAR_WIDE_SPACE },
{ 0x3, 0x3 },
{ 0x5, 0x5 },
{ 0x7, 0x7 },
{ 0x9, 0x9 },
{ 0xB, 0xB },
{ 0xC, 0xC },
{ 0xE, 0xE },
{ 0x10, 0x10 },
{ 0x12, 0x12 },
{ 0x14, 0x14 },
{ 0x16, 0x16 },
{ 0x18, 0x18 },
{ 0x1A, 0x1A },
{ 0x1C, 0x1C },
{ 0x1E, 0x1E },
{ 0x20, 0x20 },
{ 0x22, 0x22 },
{ 0x25, 0x25 },
{ 0x27, 0x27 },
{ 0x29, 0x29 },
{ 0x2B, 0x2B },
{ 0x2C, 0x2C },
{ 0x2D, 0x2D },
{ 0x2E, 0x2E },
{ 0x2f, 0x2f },
{ 0x30, 0x30 },
{ 0x33, 0x33 },
{ 0x36, 0x36 },
{ 0x39, 0x39 },
{ 0x3C, 0x3C },
{ 0x3f, 0x3f },
{ 0x40, 0x40 },
{ 0x41, 0x41 },
{ 0x42, 0x42 },
{ 0x43, 0x43 },
{ 0x45, 0x45 },
{ 0x47, 0x47 },
{ 0x49, 0x49 },
{ 0x4A, 0x4A },
{ 0x4B, 0x4B },
{ 0x4C, 0x4C },
{ 0x4D, 0x4D },
{ 0x4E, 0x4E },
{ 0x4f, 0x4f },
{ 0x50, 0x50 },
{ 0x51, 0x51 },
{ 0x2, 0x2 },
{ 0x4, 0x4 },
{ 0x6, 0x6 },
{ 0x8, 0x8 },
{ 0xA, 0xA },
{ 0x44, 0x44 },
{ 0x46, 0x46 },
{ 0x48, 0x48 },
{ 0xD, 0xD },
{ 0xf, 0xf },
{ 0x11, 0x11 },
{ 0x13, 0x13 },
{ 0x15, 0x15 },
{ 0x17, 0x17 },
{ 0x19, 0x19 },
{ 0x1B, 0x1B },
{ 0x1D, 0x1D },
{ 0x1f, 0x1f },
{ 0x21, 0x21 },
{ 0x23, 0x23 },
{ 0x26, 0x26 },
{ 0x28, 0x28 },
{ 0x2A, 0x2A },
{ 0x31, 0x31 },
{ 0x34, 0x34 },
{ 0x37, 0x37 },
{ 0x3A, 0x3A },
{ 0x3D, 0x3D },
{ 0x32, 0x32 },
{ 0x35, 0x35 },
{ 0x38, 0x38 },
{ 0x3B, 0x3B },
{ 0x3E, 0x3E },
{ 0x24, 0x24 },
{ 0x53, 0x53 },
{ 0x55, 0x55 },
{ 0x57, 0x57 },
{ 0x59, 0x59 },
{ 0x5B, 0x5B },
{ 0x5C, 0x5C },
{ 0x5E, 0x5E },
{ 0x60, 0x60 },
{ 0x62, 0x62 },
{ 0x64, 0x64 },
{ 0x66, 0x66 },
{ 0x68, 0x68 },
{ 0x6A, 0x6A },
{ 0x6C, 0x6C },
{ 0x6E, 0x6E },
{ 0x70, 0x70 },
{ 0x72, 0x72 },
{ 0x75, 0x75 },
{ 0x77, 0x77 },
{ 0x79, 0x79 },
{ 0x7B, 0x7B },
{ 0x7C, 0x7C },
{ 0x7D, 0x7D },
{ 0x7E, 0x7E },
{ 0x7f, 0x7f },
{ 0x80, 0x80 },
{ 0x83, 0x83 },
{ 0x86, 0x86 },
{ 0x89, 0x89 },
{ 0x8C, 0x8C },
{ 0x8f, 0x8f },
{ 0x90, 0x90 },
{ 0x91, 0x91 },
{ 0x92, 0x92 },
{ 0x93, 0x93 },
{ 0x95, 0x95 },
{ 0x97, 0x97 },
{ 0x99, 0x99 },
{ 0x9A, 0x9A },
{ 0x9B, 0x9B },
{ 0x9C, 0x9C },
{ 0x9D, 0x9D },
{ 0x9E, 0x9E },
{ 0x9f, 0x9f },
{ 0xA0, 0xA0 },
{ 0xA1, 0xA1 },
{ 0x52, 0x52 },
{ 0x54, 0x54 },
{ 0x56, 0x56 },
{ 0x58, 0x58 },
{ 0x5A, 0x5A },
{ 0x94, 0x94 },
{ 0x96, 0x96 },
{ 0x98, 0x98 },
{ 0x5D, 0x5D },
{ 0x5f, 0x5f },
{ 0x61, 0x61 },
{ 0x63, 0x63 },
{ 0x65, 0x65 },
{ 0x67, 0x67 },
{ 0x69, 0x69 },
{ 0x6B, 0x6B },
{ 0x6D, 0x6D },
{ 0x6f, 0x6f },
{ 0x71, 0x71 },
{ 0x73, 0x73 },
{ 0x76, 0x76 },
{ 0x78, 0x78 },
{ 0x7A, 0x7A },
{ 0x81, 0x81 },
{ 0x84, 0x84 },
{ 0x87, 0x87 },
{ 0x8A, 0x8A },
{ 0x8D, 0x8D },
{ 0x82, 0x82 },
{ 0x85, 0x85 },
{ 0x88, 0x88 },
{ 0x8B, 0x8B },
{ 0x8E, 0x8E },
{ 0x74, 0x74 },
{ CHAR_HIRAGANA_A, CHAR_HIRAGANA_A },
{ CHAR_HIRAGANA_I, CHAR_HIRAGANA_I },
{ CHAR_HIRAGANA_U, CHAR_HIRAGANA_U },
{ CHAR_HIRAGANA_E, CHAR_HIRAGANA_E },
{ CHAR_HIRAGANA_O, CHAR_HIRAGANA_O },
{ CHAR_HIRAGANA_KA, CHAR_HIRAGANA_KA },
{ CHAR_HIRAGANA_KI, CHAR_HIRAGANA_KI },
{ CHAR_HIRAGANA_KU, CHAR_HIRAGANA_KU },
{ CHAR_HIRAGANA_KE, CHAR_HIRAGANA_KE },
{ CHAR_HIRAGANA_KO, CHAR_HIRAGANA_KO },
{ CHAR_HIRAGANA_SA, CHAR_HIRAGANA_SA },
{ CHAR_HIRAGANA_SHI, CHAR_HIRAGANA_SHI },
{ CHAR_HIRAGANA_SU, CHAR_HIRAGANA_SU },
{ CHAR_HIRAGANA_SE, CHAR_HIRAGANA_SE },
{ CHAR_HIRAGANA_SO, CHAR_HIRAGANA_SO },
{ CHAR_HIRAGANA_TA, CHAR_HIRAGANA_TA },
{ CHAR_HIRAGANA_CHI, CHAR_HIRAGANA_CHI },
{ CHAR_HIRAGANA_TSU, CHAR_HIRAGANA_TSU },
{ CHAR_HIRAGANA_TE, CHAR_HIRAGANA_TE },
{ CHAR_HIRAGANA_TO, CHAR_HIRAGANA_TO },
{ CHAR_HIRAGANA_NA, CHAR_HIRAGANA_NA },
{ CHAR_HIRAGANA_NI, CHAR_HIRAGANA_NI },
{ CHAR_HIRAGANA_NU, CHAR_HIRAGANA_NU },
{ CHAR_HIRAGANA_NE, CHAR_HIRAGANA_NE },
{ CHAR_HIRAGANA_NO, CHAR_HIRAGANA_NO },
{ CHAR_HIRAGANA_HA, CHAR_HIRAGANA_HA },
{ CHAR_HIRAGANA_HI, CHAR_HIRAGANA_HI },
{ CHAR_HIRAGANA_FU, CHAR_HIRAGANA_FU },
{ CHAR_HIRAGANA_HE, CHAR_HIRAGANA_HE },
{ CHAR_HIRAGANA_HO, CHAR_HIRAGANA_HO },
{ CHAR_HIRAGANA_MA, CHAR_HIRAGANA_MA },
{ CHAR_HIRAGANA_MI, CHAR_HIRAGANA_MI },
{ CHAR_HIRAGANA_MU, CHAR_HIRAGANA_MU },
{ CHAR_HIRAGANA_ME, CHAR_HIRAGANA_ME },
{ CHAR_HIRAGANA_MO, CHAR_HIRAGANA_MO },
{ CHAR_HIRAGANA_YA, CHAR_HIRAGANA_YA },
{ CHAR_HIRAGANA_YU, CHAR_HIRAGANA_YU },
{ CHAR_HIRAGANA_YO, CHAR_HIRAGANA_YO },
{ CHAR_HIRAGANA_RA, CHAR_HIRAGANA_RA },
{ CHAR_HIRAGANA_RI, CHAR_HIRAGANA_RI },
{ CHAR_HIRAGANA_RU, CHAR_HIRAGANA_RU },
{ CHAR_HIRAGANA_RE, CHAR_HIRAGANA_RE },
{ CHAR_HIRAGANA_RO, CHAR_HIRAGANA_RO },
{ CHAR_HIRAGANA_WA, CHAR_HIRAGANA_WA },
{ CHAR_HIRAGANA_WO, CHAR_HIRAGANA_WO },
{ CHAR_HIRAGANA_N, CHAR_HIRAGANA_N },
{ CHAR_HIRAGANA_SMALL_A, CHAR_HIRAGANA_SMALL_A },
{ CHAR_HIRAGANA_SMALL_I, CHAR_HIRAGANA_SMALL_I },
{ CHAR_HIRAGANA_SMALL_U, CHAR_HIRAGANA_SMALL_U },
{ CHAR_HIRAGANA_SMALL_E, CHAR_HIRAGANA_SMALL_E },
{ CHAR_HIRAGANA_SMALL_O, CHAR_HIRAGANA_SMALL_O },
{ CHAR_HIRAGANA_SMALL_YA, CHAR_HIRAGANA_SMALL_YA },
{ CHAR_HIRAGANA_SMALL_YU, CHAR_HIRAGANA_SMALL_YU },
{ CHAR_HIRAGANA_SMALL_YO, CHAR_HIRAGANA_SMALL_YO },
{ CHAR_HIRAGANA_GA, CHAR_HIRAGANA_GA },
{ CHAR_HIRAGANA_GI, CHAR_HIRAGANA_GI },
{ CHAR_HIRAGANA_GU, CHAR_HIRAGANA_GU },
{ CHAR_HIRAGANA_GE, CHAR_HIRAGANA_GE },
{ CHAR_HIRAGANA_GO, CHAR_HIRAGANA_GO },
{ CHAR_HIRAGANA_ZA, CHAR_HIRAGANA_ZA },
{ CHAR_HIRAGANA_JI, CHAR_HIRAGANA_JI },
{ CHAR_HIRAGANA_ZU, CHAR_HIRAGANA_ZU },
{ CHAR_HIRAGANA_ZE, CHAR_HIRAGANA_ZE },
{ CHAR_HIRAGANA_ZO, CHAR_HIRAGANA_ZO },
{ CHAR_HIRAGANA_DA, CHAR_HIRAGANA_DA },
{ CHAR_HIRAGANA_DJI, CHAR_HIRAGANA_DJI },
{ CHAR_HIRAGANA_DZU, CHAR_HIRAGANA_DZU },
{ CHAR_HIRAGANA_DE, CHAR_HIRAGANA_DE },
{ CHAR_HIRAGANA_DO, CHAR_HIRAGANA_DO },
{ CHAR_HIRAGANA_BA, CHAR_HIRAGANA_BA },
{ CHAR_HIRAGANA_BI, CHAR_HIRAGANA_BI },
{ CHAR_HIRAGANA_BU, CHAR_HIRAGANA_BU },
{ CHAR_HIRAGANA_BE, CHAR_HIRAGANA_BE },
{ CHAR_HIRAGANA_BO, CHAR_HIRAGANA_BO },
{ CHAR_HIRAGANA_PA, CHAR_HIRAGANA_PA },
{ CHAR_HIRAGANA_PI, CHAR_HIRAGANA_PI },
{ CHAR_HIRAGANA_PU, CHAR_HIRAGANA_PU },
{ CHAR_HIRAGANA_PE, CHAR_HIRAGANA_PE },
{ CHAR_HIRAGANA_PO, CHAR_HIRAGANA_PO },
{ CHAR_HIRAGANA_SOKUON, CHAR_HIRAGANA_SOKUON },
{ CHAR_KATAKANA_A, CHAR_KATAKANA_A },
{ CHAR_KATAKANA_I, CHAR_KATAKANA_I },
{ CHAR_KATAKANA_U, CHAR_KATAKANA_U },
{ CHAR_KATAKANA_E, CHAR_KATAKANA_E },
{ CHAR_KATAKANA_O, CHAR_KATAKANA_O },
{ CHAR_KATAKANA_KA, CHAR_KATAKANA_KA },
{ CHAR_KATAKANA_KI, CHAR_KATAKANA_KI },
{ CHAR_KATAKANA_KU, CHAR_KATAKANA_KU },
{ CHAR_KATAKANA_KE, CHAR_KATAKANA_KE },
{ CHAR_KATAKANA_KO, CHAR_KATAKANA_KO },
{ CHAR_KATAKANA_SA, CHAR_KATAKANA_SA },
{ CHAR_KATAKANA_SHI, CHAR_KATAKANA_SHI },
{ CHAR_KATAKANA_SU, CHAR_KATAKANA_SU },
{ CHAR_KATAKANA_SE, CHAR_KATAKANA_SE },
{ CHAR_KATAKANA_SO, CHAR_KATAKANA_SO },
{ CHAR_KATAKANA_TA, CHAR_KATAKANA_TA },
{ CHAR_KATAKANA_CHI, CHAR_KATAKANA_CHI },
{ CHAR_KATAKANA_TSU, CHAR_KATAKANA_TSU },
{ CHAR_KATAKANA_TE, CHAR_KATAKANA_TE },
{ CHAR_KATAKANA_TO, CHAR_KATAKANA_TO },
{ CHAR_KATAKANA_NA, CHAR_KATAKANA_NA },
{ CHAR_KATAKANA_NI, CHAR_KATAKANA_NI },
{ CHAR_KATAKANA_NU, CHAR_KATAKANA_NU },
{ CHAR_KATAKANA_NE, CHAR_KATAKANA_NE },
{ CHAR_KATAKANA_NO, CHAR_KATAKANA_NO },
{ CHAR_KATAKANA_HA, CHAR_KATAKANA_HA },
{ CHAR_KATAKANA_HI, CHAR_KATAKANA_HI },
{ CHAR_KATAKANA_FU, CHAR_KATAKANA_FU },
{ CHAR_KATAKANA_HE, CHAR_KATAKANA_HE },
{ CHAR_KATAKANA_HO, CHAR_KATAKANA_HO },
{ CHAR_KATAKANA_MA, CHAR_KATAKANA_MA },
{ CHAR_KATAKANA_MI, CHAR_KATAKANA_MI },
{ CHAR_KATAKANA_MU, CHAR_KATAKANA_MU },
{ CHAR_KATAKANA_ME, CHAR_KATAKANA_ME },
{ CHAR_KATAKANA_MO, CHAR_KATAKANA_MO },
{ CHAR_KATAKANA_YA, CHAR_KATAKANA_YA },
{ CHAR_KATAKANA_YU, CHAR_KATAKANA_YU },
{ CHAR_KATAKANA_YO, CHAR_KATAKANA_YO },
{ CHAR_KATAKANA_RA, CHAR_KATAKANA_RA },
{ CHAR_KATAKANA_RI, CHAR_KATAKANA_RI },
{ CHAR_KATAKANA_RU, CHAR_KATAKANA_RU },
{ CHAR_KATAKANA_RE, CHAR_KATAKANA_RE },
{ CHAR_KATAKANA_RO, CHAR_KATAKANA_RO },
{ CHAR_KATAKANA_WA, CHAR_KATAKANA_WA },
{ CHAR_KATAKANA_WO, CHAR_KATAKANA_WO },
{ CHAR_KATAKANA_N, CHAR_KATAKANA_N },
{ CHAR_KATAKANA_SMALL_A, CHAR_KATAKANA_SMALL_A },
{ CHAR_KATAKANA_SMALL_I, CHAR_KATAKANA_SMALL_I },
{ CHAR_KATAKANA_SMALL_U, CHAR_KATAKANA_SMALL_U },
{ CHAR_KATAKANA_SMALL_E, CHAR_KATAKANA_SMALL_E },
{ CHAR_KATAKANA_SMALL_O, CHAR_KATAKANA_SMALL_O },
{ CHAR_KATAKANA_SMALL_YA, CHAR_KATAKANA_SMALL_YA },
{ CHAR_KATAKANA_SMALL_YU, CHAR_KATAKANA_SMALL_YU },
{ CHAR_KATAKANA_SMALL_YO, CHAR_KATAKANA_SMALL_YO },
{ CHAR_KATAKANA_GA, CHAR_KATAKANA_GA },
{ CHAR_KATAKANA_GI, CHAR_KATAKANA_GI },
{ CHAR_KATAKANA_GU, CHAR_KATAKANA_GU },
{ CHAR_KATAKANA_GE, CHAR_KATAKANA_GE },
{ CHAR_KATAKANA_GO, CHAR_KATAKANA_GO },
{ CHAR_KATAKANA_ZA, CHAR_KATAKANA_ZA },
{ CHAR_KATAKANA_JI, CHAR_KATAKANA_JI },
{ CHAR_KATAKANA_ZU, CHAR_KATAKANA_ZU },
{ CHAR_KATAKANA_ZE, CHAR_KATAKANA_ZE },
{ CHAR_KATAKANA_ZO, CHAR_KATAKANA_ZO },
{ CHAR_KATAKANA_DA, CHAR_KATAKANA_DA },
{ CHAR_KATAKANA_DJI, CHAR_KATAKANA_DJI },
{ CHAR_KATAKANA_DZU, CHAR_KATAKANA_DZU },
{ CHAR_KATAKANA_DE, CHAR_KATAKANA_DE },
{ CHAR_KATAKANA_DO, CHAR_KATAKANA_DO },
{ CHAR_KATAKANA_BA, CHAR_KATAKANA_BA },
{ CHAR_KATAKANA_BI, CHAR_KATAKANA_BI },
{ CHAR_KATAKANA_BU, CHAR_KATAKANA_BU },
{ CHAR_KATAKANA_BE, CHAR_KATAKANA_BE },
{ CHAR_KATAKANA_BO, CHAR_KATAKANA_BO },
{ CHAR_KATAKANA_PA, CHAR_KATAKANA_PA },
{ CHAR_KATAKANA_PI, CHAR_KATAKANA_PI },
{ CHAR_KATAKANA_PU, CHAR_KATAKANA_PU },
{ CHAR_KATAKANA_PE, CHAR_KATAKANA_PE },
{ CHAR_KATAKANA_PO, CHAR_KATAKANA_PO },
{ CHAR_KATAKANA_SOKUON, CHAR_KATAKANA_SOKUON },
{ CHAR_WIDE_0, CHAR_0 },
{ CHAR_WIDE_1, CHAR_1 },
{ CHAR_WIDE_2, CHAR_2 },
@ -295,23 +299,21 @@ static u16 GetDoubleQuoteCloseChar(u32 language)
}
}
BOOL GBAStringToDSString(const u8 *src, u16 *dst, u32 length, u32 language)
BOOL GBA_ConvertStringToDS(const u8 *src, charcode_t *dst, u32 length, u32 language)
{
u32 i, nonJap;
nonJap = (language != JAPANESE);
BOOL nonJa = (language != JAPANESE);
u32 i;
for (i = 0; i < (length - 1); i++) {
if (src[i] == 0xff) {
if (src[i] == GBA_EOS) {
break;
}
if (src[i] >= NELEMS(sGBACharToDSChars)) {
int j, v3;
int invalidStrLen = min(length - 1, 10);
v3 = ((length - 1) < 10) ? (length - 1) : 10;
for (j = 0; j < v3; j++) {
int j;
for (j = 0; j < invalidStrLen; j++) {
dst[j] = CHAR_QUESTION;
}
@ -319,7 +321,7 @@ BOOL GBAStringToDSString(const u8 *src, u16 *dst, u32 length, u32 language)
return FALSE;
}
switch (sGBACharToDSChars[src[i]][nonJap]) {
switch (sGBACharToDSChars[src[i]][nonJa]) {
case CHAR_WIDE_SPACE:
dst[i] = GetSpaceChar(language);
break;
@ -330,7 +332,7 @@ BOOL GBAStringToDSString(const u8 *src, u16 *dst, u32 length, u32 language)
dst[i] = GetDoubleQuoteCloseChar(language);
break;
default:
dst[i] = sGBACharToDSChars[src[i]][nonJap];
dst[i] = sGBACharToDSChars[src[i]][nonJa];
break;
}
}

View File

@ -583,7 +583,7 @@ static void ov97_02233FA4(GBAMigrator *migrator)
static void ov97_022340B0(GBAMigrator *migrator)
{
SpriteResourcesHeader_Init(&migrator->unk_1E8, 0, 0, 0, 0, 0xffffffff, 0xffffffff, 0, 0, migrator->unk_1B8[0], migrator->unk_1B8[1], migrator->unk_1B8[2], migrator->unk_1B8[3], NULL, NULL);
SpriteResourcesHeader_Init(&migrator->unk_1E8, 0, 0, 0, 0, -1, -1, 0, 0, migrator->unk_1B8[0], migrator->unk_1B8[1], migrator->unk_1B8[2], migrator->unk_1B8[3], NULL, NULL);
GXLayers_EngineAToggleLayers(GX_PLANEMASK_OBJ, 1);
}
@ -1183,7 +1183,7 @@ static void ov97_02234A2C(GBAMigrator *migrator, int boxNum)
v0.unk_2C = TEXT_COLOR(1, 2, 0);
v0.unk_20 = 0xA0;
GBAStringToDSString(migrator->pokemonStorage->boxNames[boxNum], boxName, GBA_BOX_NAME_LEN + 1, GBACart_GetLanguage());
GBA_ConvertStringToDS(migrator->pokemonStorage->boxNames[boxNum], boxName, GBA_BOX_NAME_LEN + 1, GBACart_GetLanguage());
v0.unk_38 = boxName;
ov97_02233DD0(migrator, &v0, 0x1);
}
@ -1255,7 +1255,7 @@ static void PrintGBABoxMonInfo(GBAMigrator *migrator, GBABoxPokemon *gbaBoxMon)
}
GBABoxPokemon_GetData(gbaBoxMon, GBA_MON_DATA_NICKNAME, gbaNickname);
GBAStringToDSString(gbaNickname, dsNickname, GBA_MON_NAME_LEN + 1, GBABoxPokemon_GetData(gbaBoxMon, GBA_MON_DATA_LANGUAGE, NULL));
GBA_ConvertStringToDS(gbaNickname, dsNickname, GBA_MON_NAME_LEN + 1, GBABoxPokemon_GetData(gbaBoxMon, GBA_MON_DATA_LANGUAGE, NULL));
v4.unk_38 = dsNickname;
v4.messageEntryID = -1;
@ -1656,7 +1656,7 @@ static void ov97_02235344(GBAMigrator *migrator)
Strbuf *strBuf;
u16 playerName[GBA_PLAYER_NAME_LEN + 1];
GBAStringToDSString(GetGBAPlayerName(), playerName, GBA_PLAYER_NAME_LEN + 1, GBACart_GetLanguage());
GBA_ConvertStringToDS(GetGBAPlayerName(), playerName, GBA_PLAYER_NAME_LEN + 1, GBACart_GetLanguage());
strTemplate = StringTemplate_Default(HEAP_ID_MIGRATE_FROM_GBA);
strBuf = Strbuf_Init(GBA_PLAYER_NAME_LEN + 1, HEAP_ID_MIGRATE_FROM_GBA);

View File

@ -1012,7 +1012,7 @@ void BoxMonGBAToBoxMon(GBABoxPokemon *gbaBoxMon, BoxPokemon *boxMon)
}
GBABoxPokemon_GetData(gbaBoxMon, GBA_MON_DATA_NICKNAME, gbaNickname);
GBAStringToDSString(gbaNickname, dsNickName, MON_NAME_LEN + 2, language);
GBA_ConvertStringToDS(gbaNickname, dsNickName, MON_NAME_LEN + 2, language);
BoxPokemon_SetValue(boxMon, MON_DATA_NICKNAME_AND_FLAG, dsNickName);
if (GBABoxPokemon_GetData(gbaBoxMon, GBA_MON_DATA_LANGUAGE, NULL) != gGameLanguage) {
@ -1024,7 +1024,7 @@ void BoxMonGBAToBoxMon(GBABoxPokemon *gbaBoxMon, BoxPokemon *boxMon)
BoxPokemon_SetValue(boxMon, MON_DATA_MET_GAME, &value);
GBABoxPokemon_GetData(gbaBoxMon, GBA_MON_DATA_OT_NAME, gbaNickname);
GBAStringToDSString(gbaNickname, dsNickName, GBA_PLAYER_NAME_LEN + 1, language);
GBA_ConvertStringToDS(gbaNickname, dsNickName, GBA_PLAYER_NAME_LEN + 1, language);
BoxPokemon_SetValue(boxMon, MON_DATA_OTNAME, dsNickName);
value = GBABoxPokemon_GetData(gbaBoxMon, GBA_MON_DATA_MET_LOCATION, NULL);

View File

@ -11,7 +11,7 @@
#include "struct_defs/struct_02099F80.h"
#include "game_opening/const_ov77_021D742C.h"
#include "overlay097/const_ov97_0223D674.h"
#include "overlay097/application_template.h"
#include "overlay097/distribution_cartridge.h"
#include "overlay097/main_menu_util.h"
#include "overlay097/ov97_02235D18.h"
@ -138,11 +138,11 @@ enum MainMenuWirelessCheckState {
};
enum MainMenuAlertsState {
MAIN_MANU_ALERTS_STATE_WAIT = 15,
MAIN_MANU_ALERTS_STATE_LOAD_GRAPHICS,
MAIN_MANU_ALERTS_STATE_SHOW_NEXT_ALERT,
MAIN_MANU_ALERTS_STATE_WAIT_DISMISS,
MAIN_MANU_ALERTS_STATE_HIDE_ALERT,
MAIN_MENU_ALERTS_STATE_WAIT = 15,
MAIN_MENU_ALERTS_STATE_LOAD_GRAPHICS,
MAIN_MENU_ALERTS_STATE_SHOW_NEXT_ALERT,
MAIN_MENU_ALERTS_STATE_WAIT_DISMISS,
MAIN_MENU_ALERTS_STATE_HIDE_ALERT,
};
enum MainMenuAlertType {
@ -235,7 +235,7 @@ typedef struct MainMenuAppData {
*/
typedef BOOL (*MainMenuOptionRenderFuncPtr)(MainMenuAppData *appData, enum MainMenuOption optionIdx, MainMenuWindow *, int yPos);
typedef struct {
typedef struct MainMenuOptionTemplate {
enum MainMenuNextApp appToLoad;
int height;
int textEntryID;
@ -250,14 +250,11 @@ static BOOL RenderWiiConnectionOption(MainMenuAppData *appData, enum MainMenuOpt
static BOOL RenderWFCSettingsOption(MainMenuAppData *appData, enum MainMenuOption option, MainMenuWindow *param2, int yPos);
static BOOL RenderWiiMsgSettingsOption(MainMenuAppData *appData, enum MainMenuOption option, MainMenuWindow *param2, int yPos);
MysteryGift *SaveData_GetMysteryGift(SaveData *saveData);
int TrainerInfo_Size(void);
static WFCUserInfoErasedAlertTemplate sWFCUserInfoErasedMsgWindowTemplate[] = {
{ .x = 5, .y = 5, .width = 22, .height = 14, TEXT_BANK_UNK_0695, pl_msg_00000695_00016, NULL }
{ .x = 5, .y = 5, .width = 22, .height = TEXT_LINES_TILES(7), TEXT_BANK_UNK_0695, pl_msg_00000695_00016, NULL }
};
MainMenuOptionTemplate sOptions[NUM_MAIN_MENU_OPTIONS] = {
static MainMenuOptionTemplate sOptions[NUM_MAIN_MENU_OPTIONS] = {
[MAIN_MENU_OPTION_CONTINUE] = {
.appToLoad = NEXT_APP_LOAD_SAVE,
.height = TEXT_LINES_TILES(5),
@ -318,7 +315,7 @@ static u32 sContinueOptionStringsIDs[] = {
// clang-format off
// Some of these have some extra seemingly random padding, might be an artifact from localization.
MainMenuAlertTemplate sMainMenuAlerts[] = {
static MainMenuAlertTemplate sMainMenuAlerts[] = {
[MAIN_MENU_ALERT_MYSTERY_GIFT_OK] = { .x = 4, .y = 2, .width = 24, .height = TEXT_LINES_TILES(8) + 4, MainMenuAlerts_Text_MysteryGiftOk },
[MAIN_MENU_ALERT_MYSTERY_GIFT_NO_DEX] = { .x = 4, .y = 4, .width = 24, .height = TEXT_LINES_TILES(8), MainMenuAlerts_Text_MysteryGiftNoDex },
[MAIN_MENU_ALERT_RANGER_MSG_OK] = { .x = 4, .y = 1, .width = 24, .height = TEXT_LINES_TILES(9) + 4, MainMenuAlerts_Text_RangerLinkOk },
@ -340,10 +337,10 @@ static BOOL ShowWFCUserInfoErasedMsg(MainMenuAppData *appData)
appData->wfcUserInfoErasedMsgPending[i] = FALSE;
WFCUserInfoErasedAlertTemplate *alertTemplate = &sWFCUserInfoErasedMsgWindowTemplate[i];
MainMenuWindow v2;
MainMenuUtil_InitWindow(&v2, &appData->wfcUserInfoErasedWindow, PLTT_0, alertTemplate->bankID, 1, PLTT_2);
MainMenuWindow_SetDimensionsAndBasetile(&v2, alertTemplate->width, alertTemplate->height, ALERT_WINDOW_CONTENT_BASE_TILE);
MainMenuUtil_ShowWindowAtPos(appData->bgConfig, &v2, alertTemplate->x, alertTemplate->y, alertTemplate->entryID);
MainMenuWindow window;
MainMenuUtil_InitWindow(&window, &appData->wfcUserInfoErasedWindow, PLTT_0, alertTemplate->bankID, ALERT_WINDOW_FRAME_BASE_TILE, PLTT_2);
MainMenuWindow_SetDimensionsAndBasetile(&window, alertTemplate->width, alertTemplate->height, ALERT_WINDOW_CONTENT_BASE_TILE);
MainMenuUtil_ShowWindowAtPos(appData->bgConfig, &window, alertTemplate->x, alertTemplate->y, alertTemplate->entryID);
return TRUE;
}
}
@ -420,7 +417,7 @@ static void DetectWirelessConnections(MainMenuAppData *appData)
case MAIN_MENU_WIRELESS_CHECK_INIT_WIRELESS:
sub_02037D48(appData->saveData);
appData->wirelessCheckTimeout = (2 * 60);
appData->wirelessCheckTimeout = 120;
appData->wirelessCheckState = MAIN_MENU_WIRELESS_CHECK_CHECK_RESULT;
appData->pendingAlerts = 0;
@ -437,7 +434,7 @@ static void DetectWirelessConnections(MainMenuAppData *appData)
int availableConnections = sub_02037DA0();
availableConnections = ~appData->pendingAlerts & availableConnections;
if (availableConnections && (appData->alertsState == MAIN_MANU_ALERTS_STATE_WAIT) && (appData->alertsPending == FALSE) && (appData->pendingAlerts != availableConnections)) {
if (availableConnections && (appData->alertsState == MAIN_MENU_ALERTS_STATE_WAIT) && (appData->alertsPending == FALSE) && (appData->pendingAlerts != availableConnections)) {
appData->shouldUpdateOptions = TRUE;
if (availableConnections & MYSTERY_GIFT) {
@ -474,25 +471,25 @@ static void DetectWirelessConnections(MainMenuAppData *appData)
static BOOL ShowAlerts(MainMenuAppData *appData)
{
switch (appData->alertsState) {
case MAIN_MANU_ALERTS_STATE_WAIT:
case MAIN_MENU_ALERTS_STATE_WAIT:
if (appData->alertsPending == FALSE) {
return FALSE;
}
if (--appData->alertsPending == FALSE) {
appData->alertsState = MAIN_MANU_ALERTS_STATE_LOAD_GRAPHICS;
appData->alertsState = MAIN_MENU_ALERTS_STATE_LOAD_GRAPHICS;
}
return TRUE;
case MAIN_MANU_ALERTS_STATE_LOAD_GRAPHICS:
case MAIN_MENU_ALERTS_STATE_LOAD_GRAPHICS:
LoadStandardWindowGraphics(appData->bgConfig, BG_LAYER_MAIN_1, ALERT_WINDOW_FRAME_BASE_TILE, PLTT_2, STANDARD_WINDOW_SYSTEM, HEAP_ID_MAIN_MENU);
Bg_ClearTilemap(appData->bgConfig, BG_LAYER_MAIN_1);
*HW_BG_A_PLTT_COLOR(PLTT_2, 1) = UNFOCUSED_OPTION_BG_COLOR;
appData->alertsState = MAIN_MANU_ALERTS_STATE_SHOW_NEXT_ALERT;
appData->alertsState = MAIN_MENU_ALERTS_STATE_SHOW_NEXT_ALERT;
break;
case MAIN_MANU_ALERTS_STATE_SHOW_NEXT_ALERT: {
MainMenuWindow v0;
MainMenuUtil_InitWindow(&v0, &appData->alertWindow, PLTT_0, TEXT_BANK_MAIN_MENU_ALERTS, 1, PLTT_2);
case MAIN_MENU_ALERTS_STATE_SHOW_NEXT_ALERT: {
MainMenuWindow window;
MainMenuUtil_InitWindow(&window, &appData->alertWindow, PLTT_0, TEXT_BANK_MAIN_MENU_ALERTS, ALERT_WINDOW_FRAME_BASE_TILE, PLTT_2);
int pendingAlerts = appData->pendingAlerts & ~appData->shownAlerts;
@ -516,36 +513,36 @@ static BOOL ShowAlerts(MainMenuAppData *appData)
}
appData->shownAlerts |= pendingAlerts;
MainMenuWindow_SetDimensionsAndBasetile(&v0, alertTemplate->width, alertTemplate->height, ALERT_WINDOW_CONTENT_BASE_TILE);
MainMenuWindow_SetDimensionsAndBasetile(&window, alertTemplate->width, alertTemplate->height, ALERT_WINDOW_CONTENT_BASE_TILE);
v0.bgLayer = 1;
MainMenuUtil_ShowWindowAtPos(appData->bgConfig, &v0, alertTemplate->x, alertTemplate->y, alertTemplate->textEntryID);
window.bgLayer = BG_LAYER_MAIN_1;
MainMenuUtil_ShowWindowAtPos(appData->bgConfig, &window, alertTemplate->x, alertTemplate->y, alertTemplate->textEntryID);
Bg_ChangeTilemapRectPalette(appData->bgConfig, BG_LAYER_MAIN_1, Window_GetXPos(v0.window), Window_GetYPos(v0.window), Window_GetWidth(v0.window), Window_GetHeight(v0.window), PLTT_0);
Bg_ChangeTilemapRectPalette(appData->bgConfig, BG_LAYER_MAIN_1, Window_GetXPos(window.window), Window_GetYPos(window.window), Window_GetWidth(window.window), Window_GetHeight(window.window), PLTT_0);
GXLayers_EngineAToggleLayers(GX_PLANEMASK_BG0, FALSE);
GXLayers_EngineAToggleLayers(GX_PLANEMASK_BG2, FALSE);
GXLayers_EngineAToggleLayers(GX_PLANEMASK_BG1, TRUE);
appData->alertsDelay = 30;
appData->alertsState = MAIN_MANU_ALERTS_STATE_WAIT_DISMISS;
appData->alertsState = MAIN_MENU_ALERTS_STATE_WAIT_DISMISS;
} break;
case MAIN_MANU_ALERTS_STATE_WAIT_DISMISS:
case MAIN_MENU_ALERTS_STATE_WAIT_DISMISS:
if (appData->alertsDelay) {
appData->alertsDelay--;
} else {
if (JOY_NEW(PAD_BUTTON_A | PAD_BUTTON_B)) {
Window_Remove(&appData->alertWindow);
appData->alertsState = MAIN_MANU_ALERTS_STATE_HIDE_ALERT;
appData->alertsState = MAIN_MENU_ALERTS_STATE_HIDE_ALERT;
appData->alertDismissKeys = gSystem.pressedKeys;
Sound_PlayEffect(SEQ_SE_CONFIRM);
}
}
break;
case MAIN_MANU_ALERTS_STATE_HIDE_ALERT:
case MAIN_MENU_ALERTS_STATE_HIDE_ALERT:
GXLayers_EngineAToggleLayers(GX_PLANEMASK_BG0, TRUE);
GXLayers_EngineAToggleLayers(GX_PLANEMASK_BG2, TRUE);
GXLayers_EngineAToggleLayers(GX_PLANEMASK_BG1, FALSE);
appData->alertsState = MAIN_MANU_ALERTS_STATE_WAIT;
appData->alertsState = MAIN_MENU_ALERTS_STATE_WAIT;
break;
}
@ -603,15 +600,15 @@ static void InitMainMenuGraphics(MainMenuAppData *appData)
GXLayers_SetBanks(&vramBanks);
SetAllGraphicsModes(&graphicsModes);
MainMenuUtil_InitBG(appData->bgConfig, 0, 2, 0xF000, 0x0);
MainMenuUtil_InitBGLayer(appData->bgConfig, BG_LAYER_MAIN_0, BG_SCREEN_SIZE_256x512, GX_BG_SCRBASE_0xf000 * 0x800, GX_BG_CHARBASE_0x00000 * 0x4000);
G2_SetBG0Priority(2);
Bg_ClearTilesRange(BG_LAYER_MAIN_0, 32, 0, HEAP_ID_MAIN_MENU);
MainMenuUtil_InitBG(appData->bgConfig, 1, 1, 0xD800, 0x8000);
MainMenuUtil_InitBGLayer(appData->bgConfig, BG_LAYER_MAIN_1, BG_SCREEN_SIZE_256x256, GX_BG_SCRBASE_0xd800 * 0x800, GX_BG_CHARBASE_0x08000 * 0x4000);
G2_SetBG1Priority(1);
Bg_ClearTilesRange(BG_LAYER_MAIN_1, 32, 0, HEAP_ID_MAIN_MENU);
MainMenuUtil_InitBG(appData->bgConfig, 2, 2, 0xE000, 0x0);
MainMenuUtil_InitBGLayer(appData->bgConfig, BG_LAYER_MAIN_2, BG_SCREEN_SIZE_256x512, GX_BG_SCRBASE_0xe000 * 0x800, GX_BG_CHARBASE_0x00000 * 0x4000);
G2_SetBG2Priority(0);
Bg_ClearTilesRange(BG_LAYER_MAIN_2, 32, 0, HEAP_ID_MAIN_MENU);
@ -632,12 +629,12 @@ static void LoadScrollArrowsSprites(MainMenuAppData *appData)
{
MainMenuUtil_InitCharPlttTransferBuffers();
MainMenuUtil_InitSpriteLoader();
MainMenuUtil_LoadSprite(NARC_INDEX_GRAPHIC__MYSTERY, 43, 40, 42, 41, 0);
MainMenuUtil_LoadSprite(NARC_INDEX_GRAPHIC__MYSTERY, 43, 40, 42, 41, DS_SCREEN_MAIN);
appData->scrollUpArrowSprite = MainMenuUtil_InitSprite(0, appData->scrollUpArrowSprite, HW_LCD_WIDTH / 2, SCROLL_ARROWS_OFFSET, 0);
appData->scrollUpArrowSprite = MainMenuUtil_InitSprite(DS_SCREEN_MAIN, appData->scrollUpArrowSprite, HW_LCD_WIDTH / 2, SCROLL_ARROWS_OFFSET, 0);
Sprite_SetDrawFlag(appData->scrollUpArrowSprite, FALSE);
appData->scrollDownArrowSprite = MainMenuUtil_InitSprite(0, appData->scrollDownArrowSprite, HW_LCD_WIDTH / 2, HW_LCD_HEIGHT - SCROLL_ARROWS_OFFSET, 1);
appData->scrollDownArrowSprite = MainMenuUtil_InitSprite(DS_SCREEN_MAIN, appData->scrollDownArrowSprite, HW_LCD_WIDTH / 2, HW_LCD_HEIGHT - SCROLL_ARROWS_OFFSET, 1);
Sprite_SetDrawFlag(appData->scrollDownArrowSprite, FALSE);
}
@ -659,14 +656,14 @@ static void DrawWirelessIcon(MainMenuAppData *appData, int column, int row, int
}
// Top half
tilemapBuffer[row * (HW_LCD_WIDTH / 8) + column + 0] = tilesIDStart + 0;
tilemapBuffer[row * (HW_LCD_WIDTH / 8) + column + 1] = tilesIDStart + 1;
tilemapBuffer[row * (HW_LCD_WIDTH / TILE_WIDTH_PIXELS) + column + 0] = tilesIDStart + 0;
tilemapBuffer[row * (HW_LCD_WIDTH / TILE_WIDTH_PIXELS) + column + 1] = tilesIDStart + 1;
row++;
// Bottom half
tilemapBuffer[row * (HW_LCD_WIDTH / 8) + column + 0] = tilesIDStart + 8;
tilemapBuffer[row * (HW_LCD_WIDTH / 8) + column + 1] = tilesIDStart + 9;
tilemapBuffer[row * (HW_LCD_WIDTH / TILE_WIDTH_PIXELS) + column + 0] = tilesIDStart + 8;
tilemapBuffer[row * (HW_LCD_WIDTH / TILE_WIDTH_PIXELS) + column + 1] = tilesIDStart + 9;
Bg_CopyTilemapBufferToVRAM(appData->bgConfig, BG_LAYER_MAIN_2);
}
@ -678,13 +675,13 @@ static void ClearWirelessIcon(MainMenuAppData *appData, int column, int row)
// Empty tile
int tileID = WIRELESS_ICONS_TILES_ID_START + 4;
tilemapBuffer[row * (HW_LCD_WIDTH / 8) + column + 0] = tileID;
tilemapBuffer[row * (HW_LCD_WIDTH / 8) + column + 1] = tileID;
tilemapBuffer[row * (HW_LCD_WIDTH / TILE_WIDTH_PIXELS) + column + 0] = tileID;
tilemapBuffer[row * (HW_LCD_WIDTH / TILE_WIDTH_PIXELS) + column + 1] = tileID;
row++;
tilemapBuffer[row * (HW_LCD_WIDTH / 8) + column + 0] = tileID;
tilemapBuffer[row * (HW_LCD_WIDTH / 8) + column + 1] = tileID;
tilemapBuffer[row * (HW_LCD_WIDTH / TILE_WIDTH_PIXELS) + column + 0] = tileID;
tilemapBuffer[row * (HW_LCD_WIDTH / TILE_WIDTH_PIXELS) + column + 1] = tileID;
Bg_CopyTilemapBufferToVRAM(appData->bgConfig, BG_LAYER_MAIN_2);
}
@ -693,7 +690,7 @@ static void PrintRightAlignedWithMargin(Window *window, MessageLoader *msgLoader
{
Strbuf *strBuf = MessageUtil_ExpandedStrbuf(strTemplate, msgLoader, entryID, HEAP_ID_MAIN_MENU);
u32 textWidth = Font_CalcStrbufWidth(FONT_SYSTEM, strBuf, Font_GetAttribute(FONT_SYSTEM, FONTATTR_LETTER_SPACING));
u32 xOffset = Window_GetWidth(window) * 8 - (textWidth + CONTINUE_WINDOW_MARGIN);
u32 xOffset = Window_GetWidth(window) * TILE_WIDTH_PIXELS - (textWidth + CONTINUE_WINDOW_MARGIN);
Text_AddPrinterWithParamsAndColor(window, FONT_SYSTEM, strBuf, xOffset, yOffset, TEXT_SPEED_NO_TRANSFER, textColor, NULL);
Strbuf_Free(strBuf);
@ -718,7 +715,7 @@ static void SetTemplateNumberCustomFormatting(StringTemplate *strTemplate, int n
StringTemplate_SetNumber(strTemplate, 0, number, maxDigits, paddingMode, CHARSET_MODE_EN);
}
static BOOL RenderContinueOption(MainMenuAppData *appData, enum MainMenuOption option, MainMenuWindow *param2, int yPos)
static BOOL RenderContinueOption(MainMenuAppData *appData, enum MainMenuOption option, MainMenuWindow *window, int yPos)
{
StringTemplate *strTemplate; // Forward-declaration required to match.
@ -732,7 +729,7 @@ static BOOL RenderContinueOption(MainMenuAppData *appData, enum MainMenuOption o
textColor = TEXT_COLOR(7, 8, 15);
}
MainMenuUtil_ShowWindowAtPos(appData->bgConfig, param2, 3, yPos, sOptions[option].textEntryID);
MainMenuUtil_ShowWindowAtPos(appData->bgConfig, window, 3, yPos, sOptions[option].textEntryID);
// Index 0 has the "Continue" string, which is printed separately
for (int i = 1; i < NELEMS(sContinueOptionStringsIDs); i++) {
@ -741,26 +738,26 @@ static BOOL RenderContinueOption(MainMenuAppData *appData, enum MainMenuOption o
}
Strbuf *strBuf = MessageUtil_ExpandedStrbuf(strTemplate, msgLoader, sContinueOptionStringsIDs[i], HEAP_ID_MAIN_MENU);
Text_AddPrinterWithParamsAndColor(param2->window, FONT_SYSTEM, strBuf, CONTINUE_WINDOW_MARGIN, TEXT_LINES(i), TEXT_SPEED_NO_TRANSFER, textColor, NULL);
Text_AddPrinterWithParamsAndColor(window->window, FONT_SYSTEM, strBuf, CONTINUE_WINDOW_MARGIN, TEXT_LINES(i), TEXT_SPEED_NO_TRANSFER, textColor, NULL);
Strbuf_Free(strBuf);
}
StringTemplate_SetPlayerName(strTemplate, 0, appData->trainerInfo);
PrintRightAlignedWithMargin(param2->window, msgLoader, strTemplate, textColor, MainMenuOptions_Text_PlayerName, TEXT_LINES(1));
PrintRightAlignedWithMargin(window->window, msgLoader, strTemplate, textColor, MainMenuOptions_Text_PlayerName, TEXT_LINES(1));
SetTemplateNumberCustomFormatting(strTemplate, PlayTime_GetHours(appData->playTime));
StringTemplate_SetNumber(strTemplate, 1, PlayTime_GetMinutes(appData->playTime), 2, PADDING_MODE_ZEROES, CHARSET_MODE_EN);
PrintRightAlignedWithMargin(param2->window, msgLoader, strTemplate, textColor, MainMenuOptions_Text_PlayTime, TEXT_LINES(2));
PrintRightAlignedWithMargin(window->window, msgLoader, strTemplate, textColor, MainMenuOptions_Text_PlayTime, TEXT_LINES(2));
StringTemplate_SetNumber(strTemplate, 0, appData->badgeCount, 1, PADDING_MODE_NONE, CHARSET_MODE_EN);
PrintRightAlignedWithMargin(param2->window, msgLoader, strTemplate, textColor, MainMenuOptions_Text_BadgeCount, TEXT_LINES(3));
PrintRightAlignedWithMargin(window->window, msgLoader, strTemplate, textColor, MainMenuOptions_Text_BadgeCount, TEXT_LINES(3));
if (appData->pokedexObtained) {
SetTemplateNumberCustomFormatting(strTemplate, Pokedex_CountSeen(appData->pokedex));
PrintRightAlignedWithMargin(param2->window, msgLoader, strTemplate, textColor, MainMenuOptions_Text_SeenSpeciesCount, TEXT_LINES(4));
PrintRightAlignedWithMargin(window->window, msgLoader, strTemplate, textColor, MainMenuOptions_Text_SeenSpeciesCount, TEXT_LINES(4));
}
Window_DrawStandardFrame(param2->window, FALSE, param2->frameBaseTile, param2->framePltt);
Window_DrawStandardFrame(window->window, FALSE, window->frameBaseTile, window->framePltt);
appData->optionApps[option] = sOptions[option].appToLoad;
@ -770,7 +767,7 @@ static BOOL RenderContinueOption(MainMenuAppData *appData, enum MainMenuOption o
return TRUE;
}
static BOOL RenderGBAMigrationOption(MainMenuAppData *appData, enum MainMenuOption option, MainMenuWindow *param2, int yPos)
static BOOL RenderGBAMigrationOption(MainMenuAppData *appData, enum MainMenuOption option, MainMenuWindow *window, int yPos)
{
if (appData->agbGameType == 0) {
return FALSE;
@ -795,7 +792,7 @@ static BOOL RenderGBAMigrationOption(MainMenuAppData *appData, enum MainMenuOpti
break;
}
MainMenuUtil_ShowWindowAtPos(appData->bgConfig, param2, 3, yPos, optionTextID);
MainMenuUtil_ShowWindowAtPos(appData->bgConfig, window, 3, yPos, optionTextID);
ClearWirelessIcon(appData, OPTION_WINDOW_WIDTH, yPos);
appData->optionApps[option] = sOptions[option].appToLoad;
@ -803,7 +800,7 @@ static BOOL RenderGBAMigrationOption(MainMenuAppData *appData, enum MainMenuOpti
return TRUE;
}
static BOOL RenderMysteryGiftOption(MainMenuAppData *appData, enum MainMenuOption option, MainMenuWindow *param2, int yPos)
static BOOL RenderMysteryGiftOption(MainMenuAppData *appData, enum MainMenuOption option, MainMenuWindow *window, int yPos)
{
if (appData->mysteryGiftUnlocked == FALSE) {
if (MysteryGift_GetMysteryGiftUnlockedFlag(appData->mysteryGift) == TRUE) {
@ -829,7 +826,7 @@ static BOOL RenderMysteryGiftOption(MainMenuAppData *appData, enum MainMenuOptio
}
if (appData->mysteryGiftUnlocked == TRUE) {
MainMenuUtil_ShowWindowAtPos(appData->bgConfig, param2, 3, yPos, sOptions[option].textEntryID);
MainMenuUtil_ShowWindowAtPos(appData->bgConfig, window, 3, yPos, sOptions[option].textEntryID);
ClearWirelessIcon(appData, OPTION_WINDOW_WIDTH, yPos);
appData->optionApps[option] = sOptions[option].appToLoad;
@ -842,10 +839,10 @@ static BOOL RenderMysteryGiftOption(MainMenuAppData *appData, enum MainMenuOptio
return FALSE;
}
static BOOL RenderRangerLinkOption(MainMenuAppData *appData, enum MainMenuOption option, MainMenuWindow *param2, int yPos)
static BOOL RenderRangerLinkOption(MainMenuAppData *appData, enum MainMenuOption option, MainMenuWindow *window, int yPos)
{
if ((appData->rangerLinkAvailable == TRUE) && (appData->pokedexObtained == TRUE)) {
MainMenuUtil_ShowWindowAtPos(appData->bgConfig, param2, 3, yPos, sOptions[option].textEntryID);
MainMenuUtil_ShowWindowAtPos(appData->bgConfig, window, 3, yPos, sOptions[option].textEntryID);
DrawWirelessIcon(appData, OPTION_WINDOW_WIDTH, yPos, WIRELESS_ICON_LOCAL);
appData->optionWirelessIconTypes[option] = WIRELESS_ICON_LOCAL;
@ -858,10 +855,10 @@ static BOOL RenderRangerLinkOption(MainMenuAppData *appData, enum MainMenuOption
return FALSE;
}
static BOOL RenderWiiConnectionOption(MainMenuAppData *appData, enum MainMenuOption option, MainMenuWindow *param2, int yPos)
static BOOL RenderWiiConnectionOption(MainMenuAppData *appData, enum MainMenuOption option, MainMenuWindow *window, int yPos)
{
if (appData->wiiConnectionAvailable == TRUE) {
MainMenuUtil_ShowWindowAtPos(appData->bgConfig, param2, 3, yPos, sOptions[option].textEntryID);
MainMenuUtil_ShowWindowAtPos(appData->bgConfig, window, 3, yPos, sOptions[option].textEntryID);
appData->optionWirelessIconTypes[option] = WIRELESS_ICON_LOCAL;
DrawWirelessIcon(appData, OPTION_WINDOW_WIDTH, yPos, WIRELESS_ICON_LOCAL);
@ -872,9 +869,9 @@ static BOOL RenderWiiConnectionOption(MainMenuAppData *appData, enum MainMenuOpt
return FALSE;
}
static BOOL RenderWFCSettingsOption(MainMenuAppData *appData, enum MainMenuOption option, MainMenuWindow *param2, int yPos)
static BOOL RenderWFCSettingsOption(MainMenuAppData *appData, enum MainMenuOption option, MainMenuWindow *window, int yPos)
{
MainMenuUtil_ShowWindowAtPos(appData->bgConfig, param2, 3, yPos, sOptions[option].textEntryID);
MainMenuUtil_ShowWindowAtPos(appData->bgConfig, window, 3, yPos, sOptions[option].textEntryID);
appData->optionWirelessIconTypes[option] = WIRELESS_ICON_WIFI;
DrawWirelessIcon(appData, OPTION_WINDOW_WIDTH, yPos, WIRELESS_ICON_WIFI);
@ -883,9 +880,9 @@ static BOOL RenderWFCSettingsOption(MainMenuAppData *appData, enum MainMenuOptio
return TRUE;
}
static BOOL RenderWiiMsgSettingsOption(MainMenuAppData *appData, enum MainMenuOption option, MainMenuWindow *param2, int yPos)
static BOOL RenderWiiMsgSettingsOption(MainMenuAppData *appData, enum MainMenuOption option, MainMenuWindow *window, int yPos)
{
MainMenuUtil_ShowWindowAtPos(appData->bgConfig, param2, 3, yPos, sOptions[option].textEntryID);
MainMenuUtil_ShowWindowAtPos(appData->bgConfig, window, 3, yPos, sOptions[option].textEntryID);
appData->optionWirelessIconTypes[option] = WIRELESS_ICON_NONE;
ClearWirelessIcon(appData, OPTION_WINDOW_WIDTH, yPos);
@ -906,15 +903,15 @@ static BOOL RenderOptions(MainMenuAppData *appData)
for (i = 0; i < (sizeof(sOptions) / sizeof(MainMenuOptionTemplate)); i++) {
MainMenuOptionTemplate *option = &sOptions[i];
MainMenuWindow v1;
MainMenuUtil_InitWindow(&v1, &appData->optionWindows[i], PLTT_1, TEXT_BANK_MAIN_MENU_OPTIONS, 1, PLTT_2);
MainMenuWindow_SetDimensionsAndBasetile(&v1, OPTION_WINDOW_WIDTH, option->height, appData->nextOptionBasetile);
MainMenuWindow window;
MainMenuUtil_InitWindow(&window, &appData->optionWindows[i], PLTT_1, TEXT_BANK_MAIN_MENU_OPTIONS, UNFOCUSED_OPTION_FRAME_BASE_TILE, PLTT_2);
MainMenuWindow_SetDimensionsAndBasetile(&window, OPTION_WINDOW_WIDTH, option->height, appData->nextOptionBasetile);
if (option->renderFunc) {
if (appData->optionApps[i]) {
Window_SetXPos(v1.window, 3);
Window_SetYPos(v1.window, nextOptionY);
Window_DrawStandardFrame(v1.window, FALSE, v1.frameBaseTile, v1.framePltt);
Window_SetXPos(window.window, 3);
Window_SetYPos(window.window, nextOptionY);
Window_DrawStandardFrame(window.window, FALSE, window.frameBaseTile, window.framePltt);
if (appData->optionWirelessIconTypes[i]) {
DrawWirelessIcon(appData, OPTION_WINDOW_WIDTH, nextOptionY, appData->optionWirelessIconTypes[i]);
@ -924,12 +921,12 @@ static BOOL RenderOptions(MainMenuAppData *appData)
nextOptionY += option->height + 2; // Add 2 to account for the window border
renderedCustomRenderedOption = TRUE;
} else if (option->renderFunc(appData, i, &v1, nextOptionY) == TRUE) {
} else if (option->renderFunc(appData, i, &window, nextOptionY) == TRUE) {
nextOptionY += option->height + 2; // Add 2 to account for the window border
renderedCustomRenderedOption = TRUE;
}
} else {
MainMenuUtil_ShowWindowAtPos(appData->bgConfig, &v1, 3, nextOptionY, option->textEntryID);
MainMenuUtil_ShowWindowAtPos(appData->bgConfig, &window, 3, nextOptionY, option->textEntryID);
appData->optionApps[i] = option->appToLoad;
nextOptionY += option->height + 2; // Add 2 to account for the window border
}
@ -993,8 +990,8 @@ static void FocusNextOption(MainMenuAppData *appData, int direction)
static void TargetFocusedOptionForScroll(MainMenuAppData *appData)
{
int targetWindowY = (Window_GetYPos(&appData->optionWindows[appData->focusedOption]) - 1) * 8;
int targetWindowHeight = (Window_GetHeight(&appData->optionWindows[appData->focusedOption]) + 2) * 8;
int targetWindowY = (Window_GetYPos(&appData->optionWindows[appData->focusedOption]) - 1) * TILE_HEIGHT_PIXELS;
int targetWindowHeight = (Window_GetHeight(&appData->optionWindows[appData->focusedOption]) + 2) * TILE_HEIGHT_PIXELS;
int scrollTarget = appData->scrollTarget / FX32_ONE;
if (scrollTarget > targetWindowY) {
@ -1018,9 +1015,9 @@ static void DrawScrollArrows(MainMenuAppData *appData)
continue;
}
// -1 and +2 to account for the window frame, times 8 to convert from tiles to pixels
int windowPosition = (Window_GetYPos(&appData->optionWindows[i]) - 1) * 8;
int windowHeight = (Window_GetHeight(&appData->optionWindows[i]) + 2) * 8;
// -1 and +2 to account for the window frame
int windowPosition = (Window_GetYPos(&appData->optionWindows[i]) - 1) * TILE_HEIGHT_PIXELS;
int windowHeight = (Window_GetHeight(&appData->optionWindows[i]) + 2) * TILE_HEIGHT_PIXELS;
if (scrollTarget > windowPosition) {
canScrollUp = TRUE;
@ -1115,7 +1112,7 @@ static void MainMenuVBlankCallback(void *data)
OS_SetIrqCheckFlag(OS_IE_V_BLANK);
}
static int MainMenu_Init(ApplicationManager *appMan, int *unused)
static BOOL MainMenu_Init(ApplicationManager *appMan, int *unused)
{
Heap_Create(HEAP_ID_APPLICATION, HEAP_ID_MAIN_MENU, HEAP_SIZE_MAIN_MENU);
@ -1128,14 +1125,14 @@ static int MainMenu_Init(ApplicationManager *appMan, int *unused)
appData->saveData = ((ApplicationArgs *)ApplicationManager_Args(appMan))->saveData;
appData->mysteryGift = SaveData_GetMysteryGift(appData->saveData);
appData->scrollPos = FX32_ONE * 0;
appData->scrollTarget = FX32_ONE * 0;
appData->scrollPos = FX32_CONST(0);
appData->scrollTarget = FX32_CONST(0);
appData->trainerInfo = SaveData_GetTrainerInfo(appData->saveData);
appData->pokedex = SaveData_GetPokedex(appData->saveData);
appData->playTime = SaveData_GetPlayTime(appData->saveData);
appData->pokedexObtained = Pokedex_IsObtained(appData->pokedex);
appData->badgeCount = TrainerInfo_BadgeCount(appData->trainerInfo);
appData->alertsState = MAIN_MANU_ALERTS_STATE_WAIT;
appData->alertsState = MAIN_MENU_ALERTS_STATE_WAIT;
MainMenuUtil_Init(HEAP_ID_MAIN_MENU);
@ -1146,10 +1143,10 @@ static int MainMenu_Init(ApplicationManager *appMan, int *unused)
Sound_ConfigureBGMChannelsAndReverb(SOUND_CHANNEL_CONFIG_DEFAULT);
Sound_SetScene(SOUND_SCENE_NONE);
return 1;
return TRUE;
}
static int MainMenu_Main(ApplicationManager *appMan, int *state)
static BOOL MainMenu_Main(ApplicationManager *appMan, int *state)
{
MainMenuAppData *appData = ApplicationManager_Data(appMan);
@ -1269,7 +1266,7 @@ static int MainMenu_Main(ApplicationManager *appMan, int *state)
}
break;
case MAIN_MENU_STATE_CONFIRM_NEW_GAME:
if (appData->alertsState == MAIN_MANU_ALERTS_STATE_WAIT) {
if (appData->alertsState == MAIN_MENU_ALERTS_STATE_WAIT) {
if (appData->alertDismissKeys & PAD_BUTTON_B) {
*state = MAIN_MENU_STATE_SELECT_OPTION;
} else {
@ -1291,7 +1288,7 @@ static int MainMenu_Main(ApplicationManager *appMan, int *state)
DetectWirelessConnections(appData);
DoScrollStep(appData);
MainMenuUtil_UpdateSpritesSkipGift();
MainMenuUtil_UpdateSprites();
return FALSE;
}

View File

@ -99,7 +99,7 @@ void *MainMenuUtil_InitAppAndFadeToBlack(ApplicationManager *appMan, enum HeapId
return newAppData;
}
void MainMenuUtil_InitBG(BgConfig *bgConfig, enum BgLayer bgLayer, u8 screenSize, u32 screenBase, u32 charBase)
void MainMenuUtil_InitBGLayer(BgConfig *bgConfig, enum BgLayer bgLayer, u8 screenSize, u32 screenBase, u32 charBase)
{
BgTemplate bgTemplate = {
.x = 0,
@ -241,7 +241,7 @@ static int MainMenuWindow_PrintText(MainMenuWindow *window, int textEntryID)
printerID = Text_AddPrinterWithParamsAndColor(window->window, window->font, strBuf, window->textXOffset, window->textYOffset, window->renderDelay, window->textColor, NULL);
} else {
int textWidth = Font_CalcStrbufWidth(window->font, strBuf, Font_GetAttribute(window->font, FONTATTR_LETTER_SPACING));
int windowWidth = Window_GetWidth(window->window) * 8 - textWidth;
int windowWidth = Window_GetWidth(window->window) * TILE_WIDTH_PIXELS - textWidth;
printerID = Text_AddPrinterWithParamsAndColor(window->window, window->font, strBuf, windowWidth, window->textYOffset, window->renderDelay, window->textColor, NULL);
window->textRightAligned = FALSE;
@ -257,7 +257,7 @@ static int MainMenuWindow_PrintText(MainMenuWindow *window, int textEntryID)
}
}
window->renderDelay = 0xff;
window->renderDelay = TEXT_SPEED_NO_TRANSFER;
return printerID;
}
@ -300,10 +300,10 @@ void MainMenuUtil_InitCharPlttTransferBuffers(void)
{
MainMenuUtilManager *utilMan = &sMainMenuUtilManager;
CharTransferTemplate charTransTemplte = {
40,
4096,
4096,
HEAP_ID_SYSTEM,
.maxTasks = 40,
.sizeMain = 4096,
.sizeSub = 4096,
.heapID = HEAP_ID_SYSTEM,
};
charTransTemplte.heapID = utilMan->heapID;
@ -332,7 +332,7 @@ void MainMenuUtil_InitSpriteLoader(void)
utilMan->spriteManager.spriteList = SpriteList_InitRendering(128, &utilMan->spriteManager.renderer, utilMan->heapID);
SetSubScreenViewRect(&utilMan->spriteManager.renderer, 0, 256 * FX32_ONE);
utilMan->bottomScreenTopY = 192 << FX32_SHIFT;
utilMan->bottomScreenTopY = HW_LCD_HEIGHT << FX32_SHIFT;
for (int i = 0; i < SPRITE_RESOURCE_MAX; i++) {
utilMan->spriteManager.resourceCollections[i] = SpriteResourceCollection_New(32, i, utilMan->heapID);
@ -377,7 +377,7 @@ void MainMenuUtil_LoadSprite(enum NarcID narcID, int tilesID, int plttID, int ce
SpriteTransfer_RequestChar(utilMan->spriteManager.resources[screen][SPRITE_RESOURCE_CHAR]);
SpriteTransfer_RequestPlttFreeSpace(utilMan->spriteManager.resources[screen][SPRITE_RESOURCE_PLTT]);
SpriteResourcesHeader_Init(&utilMan->spriteManager.resourceHeaders[screen], screen, screen, screen, screen, 0xffffffff, 0xffffffff, FALSE, 0, utilMan->spriteManager.resourceCollections[SPRITE_RESOURCE_CHAR], utilMan->spriteManager.resourceCollections[SPRITE_RESOURCE_PLTT], utilMan->spriteManager.resourceCollections[SPRITE_RESOURCE_CELL], utilMan->spriteManager.resourceCollections[SPRITE_RESOURCE_ANIM], NULL, NULL);
SpriteResourcesHeader_Init(&utilMan->spriteManager.resourceHeaders[screen], screen, screen, screen, screen, -1, -1, FALSE, 0, utilMan->spriteManager.resourceCollections[SPRITE_RESOURCE_CHAR], utilMan->spriteManager.resourceCollections[SPRITE_RESOURCE_PLTT], utilMan->spriteManager.resourceCollections[SPRITE_RESOURCE_CELL], utilMan->spriteManager.resourceCollections[SPRITE_RESOURCE_ANIM], NULL, NULL);
if (screen == DS_SCREEN_MAIN) {
GXLayers_EngineAToggleLayers(GX_PLANEMASK_OBJ, TRUE);
@ -396,12 +396,12 @@ void MainMenuUtil_SetSubScreenViewRect(fx32 x, fx32 y)
utilMan->bottomScreenTopY = y;
}
void MainMenuUtil_UpdateSpritesSkipGift(void)
void MainMenuUtil_UpdateSprites(void)
{
MainMenuUtil_UpdateSprites(FALSE);
MainMenuUtil_UpdateSpritesForAnimStatus(MG_ANIMATION_STATUS_DONE);
}
void MainMenuUtil_UpdateSprites(BOOL skipDrawGift)
void MainMenuUtil_UpdateSpritesForAnimStatus(enum MysteryGiftAnimationStatus animStatus)
{
MainMenuUtilManager *utilMan = &sMainMenuUtilManager;
@ -409,7 +409,7 @@ void MainMenuUtil_UpdateSprites(BOOL skipDrawGift)
VecFx32 *spritePos;
if (utilMan->giftSpriteDelay == 0) {
if (Sprite_GetDrawFlag(utilMan->mysteryGiftSprite) == FALSE && skipDrawGift == FALSE) {
if (Sprite_GetDrawFlag(utilMan->mysteryGiftSprite) == FALSE && animStatus == MG_ANIMATION_STATUS_DONE) {
Sprite_SetDrawFlag(utilMan->mysteryGiftSprite, TRUE);
}
@ -617,6 +617,9 @@ static void LoadSpriteForMonGift(MainMenuUtilManager *param0, enum MysteryGiftTy
case MYST_GIFT_MANAPHY_EGG:
LoadPokemonSprite(param0->mysteryGiftSprite, mon, SPECIES_EGG, EGG_FORM_MANAPHY, param0->monSpriteBuffer, &param0->monSpriteTemplate);
break;
default:
// Should never be reached
break;
}
}
@ -640,6 +643,9 @@ static void LoadItemSprite(MainMenuUtilManager *utilMan, enum MysteryGiftType gi
case MYST_GIFT_SECRET_KEY:
item = ITEM_SECRET_KEY;
break;
default:
// Should never be reached
break;
}
MainMenuUtil_LoadSprite(NARC_INDEX_ITEMTOOL__ITEMDATA__ITEM_ICON, Item_FileID(item, ITEM_FILE_TYPE_ICON), Item_FileID(item, ITEM_FILE_TYPE_PALETTE), Item_IconNCERFile(), Item_IconNANRFile(), DS_SCREEN_SUB);
@ -660,17 +666,17 @@ void MainMenuUtil_LoadGiftSprite(BgConfig *bgConfig, WonderCard *wonderCard)
enum MysteryGiftType giftType = wonderCard->pgt.type;
int plttOffset = CalcPlttOffsetForGiftType(giftType);
Graphics_LoadTilesToBgLayer(NARC_INDEX_GRAPHIC__MYSTERY, 30, bgConfig, BG_LAYER_SUB_1, 0, 10 * 16 * 0x20, TRUE, utilMan->heapID);
Graphics_LoadTilesToBgLayer(NARC_INDEX_GRAPHIC__MYSTERY, 30, bgConfig, BG_LAYER_SUB_1, 0, 10 * 16 * TILE_SIZE_4BPP, TRUE, utilMan->heapID);
NNSG2dScreenData *screenData;
void *nscr = LoadMemberFromNARC(NARC_INDEX_GRAPHIC__MYSTERY, 31, TRUE, utilMan->heapID, TRUE);
NNS_G2dGetUnpackedScreenData(nscr, &screenData);
Bg_LoadTilemapBuffer(bgConfig, BG_LAYER_SUB_1, screenData->rawData, 32 * 24 * 2);
Bg_LoadTilemapBuffer(bgConfig, BG_LAYER_SUB_1, screenData->rawData, (HW_LCD_WIDTH / TILE_WIDTH_PIXELS) * (HW_LCD_HEIGHT / TILE_HEIGHT_PIXELS) * 2);
Heap_Free(nscr);
Bg_ChangeTilemapRectPalette(bgConfig, BG_LAYER_SUB_1, 0, 0, 32, 24, PLTT_8 + plttOffset);
Bg_ChangeTilemapRectPalette(bgConfig, BG_LAYER_SUB_1, 0, 0, HW_LCD_WIDTH / TILE_WIDTH_PIXELS, HW_LCD_HEIGHT / TILE_HEIGHT_PIXELS, PLTT_8 + plttOffset);
Bg_ScheduleTilemapTransfer(bgConfig, BG_LAYER_SUB_1);
utilMan->onVBlank = LoadMysteryGiftPalettes;
@ -697,6 +703,9 @@ void MainMenuUtil_LoadGiftSprite(BgConfig *bgConfig, WonderCard *wonderCard)
case MYST_GIFT_SECRET_KEY:
LoadItemSprite(utilMan, giftType, wonderCard);
break;
default:
// Should never be reached
break;
}
Sprite_SetDrawFlag(utilMan->mysteryGiftSprite, FALSE);

View File

@ -20,6 +20,7 @@
#include "savedata/save_table.h"
#include "bg_window.h"
#include "brightness_controller.h"
#include "communication_system.h"
#include "font.h"
#include "game_options.h"
@ -77,9 +78,6 @@ FS_EXTERN_OVERLAY(overlay97);
#define HIDE_DOWNLOADING_ARROW -1
#define PARTICLES_MAN_BLEND_BRIGHTNESS_BLACK -16
#define PARTICLES_MAN_BLEND_BRIGHTNESS_WHITE +16
#define FOUND_GIFT_CARTRIDGE 19
#define FOUND_GIFT_WIFI 27
@ -106,6 +104,7 @@ FS_EXTERN_OVERLAY(overlay97);
#define BASE_TILE_RECEPTION_METHODS_MENU (BASE_TILE_MAIN_APP_MENU + NUM_TILES_MAIN_MG_MENU)
#define BASE_TILE_YES_NO_MENU (BASE_TILE_RECEPTION_METHODS_MENU + NUM_TILES_RECEPTION_METHODS_MENU)
#define BASE_TILE_WONDERCARD_TITLE (BASE_TILE_YES_NO_MENU + NUM_TILES_YES_NO_MENU)
#define BASE_TILE_WIFI_COMM_ERROR_WINDOW 100
enum MysteryGiftAnimBrightnessFadeDirection {
FADE_TOWARDS_NORMAL,
@ -125,6 +124,7 @@ enum MysteryGiftReceptionMethod {
RECEIVE_FROM_GBA_CARTRIDGE,
RECEIVE_FROM_LOCAL_WIRELESS,
RECEIVE_FROM_WIFI,
NUM_RECEPTION_METHODS = RECEIVE_FROM_WIFI,
};
enum MysteryGiftCanReceiveStatus {
@ -165,12 +165,6 @@ enum MysteryGiftAnimationStage {
MG_ANIMATION_STAGE_DONE = 255,
};
enum MysteryGiftAnimationStatus {
MG_ANIMATION_STATUS_DONE = 0,
MG_ANIMATION_STATUS_BEGIN,
MG_ANIMATION_STATUS_PROCEED_IMPLOSION
};
enum ParticleAnimationType {
PARTICLE_ANIMATION_TYPE_ORBIT_0 = 0,
PARTICLE_ANIMATION_TYPE_ORBIT_1,
@ -185,10 +179,10 @@ enum ParticleAnimationType {
typedef enum MysteryGiftAppState (*StateTransitionFuncPtr)(ApplicationManager *);
typedef struct StateChangeMenuOptionTemplate {
typedef struct StateTransitionMenuOptionTemplate {
int textEntryId;
StateTransitionFuncPtr stateTransitionFuncPtr;
} StateChangeMenuOptionTemplate;
} StateTransitionMenuOptionTemplate;
typedef struct MysteryGiftParticle {
int unused_00;
@ -214,14 +208,14 @@ typedef struct MysteryGiftAnimationManager {
int animationStage;
int unused_04;
s8 blendBrightness;
MainMenuSpriteManager *unk_0C;
MainMenuSpriteManager *spriteMan;
SpriteResourcesHeader spriteResourcesHeaders[DS_SCREEN_MAX];
SpriteResource *spriteResources[DS_SCREEN_MAX][SPRITE_RESOURCE_MAX];
MysteryGiftParticle topScreenSmallParticles[NUM_MYSTERY_GIFT_PARTICLES];
MysteryGiftParticle bottomScreenSmallParticles[NUM_MYSTERY_GIFT_PARTICLES];
MysteryGiftParticle topScreenLargeParticle;
MysteryGiftParticle bottomScreenLargeParticle;
int *animationStatusPtr;
enum MysteryGiftAnimationStatus *animationStatusPtr;
} MysteryGiftAnimationManager;
static enum MysteryGiftAppState ShowMysteryGiftReceptionMethodsMenu(ApplicationManager *appMan);
@ -240,57 +234,58 @@ static enum MysteryGiftAppState StartSearchLocalWirelessDistribution(Application
static enum MysteryGiftAppState CheckPlayerCanReceive_WirelessDistribution(ApplicationManager *appMan);
static enum MysteryGiftAppState DisconnectLocalWireless(ApplicationManager *appMan);
static void MakeStateChangeListMenuFromEntryTemplates(ApplicationManager *appMan, StateChangeMenuOptionTemplate *entries, int numEntries, Window *window, u32 msgBoxEntryId);
static void MakeStateChangeListMenuFromEntryTemplates(ApplicationManager *appMan, StateTransitionMenuOptionTemplate *entries, int numEntries, Window *window, u32 msgBoxEntryId);
static void ShowMysteryGiftMenuOptions(ApplicationManager *appMan, int windowBaseTile, u32 textEntryId);
static void ShowMessageBox(ApplicationManager *appMan, Window *window, u32 entryId);
static void ov97_022302D4(void);
static void ov97_02230224(MysteryGiftAppData *appData);
static void UpdateLocalWirelessDistributionState(MysteryGiftAppData *appData);
static int ShowMessageBoxIntoStateTransition(ApplicationManager *appMan, Window *window, int textEntryId, int nextState);
static int ShowMessageBoxIntoStateTransition(ApplicationManager *appMan, Window *window, int textEntryId, enum MysteryGiftAppState nextState);
static void RunParticleAnimationFrame(SysTask *sysTask, MysteryGiftParticle *particle);
static void MysteryGiftApp_SetApplicationManager(ApplicationManager *appMan);
static ApplicationManager *sApplicationManager;
StateChangeMenuOptionTemplate sMysteryGiftMenuOptions[] = {
static StateTransitionMenuOptionTemplate sMysteryGiftMenuOptions[] = {
[MG_MENU_RECEIVE_GIFT] = { MysteryGiftMenu_Text_ReceiveGift, ShowMysteryGiftReceptionMethodsMenu },
[MG_MENU_CHECK_CARD] = { MysteryGiftMenu_Text_CheckCard, ExitToWonderCardsApp },
[MG_MENU_EXIT] = { MysteryGiftMenu_Text_Exit_MysteryGift, ExitToTitleScreen }
};
StateChangeMenuOptionTemplate sMysteryGiftReceiveOptions[] = {
static StateTransitionMenuOptionTemplate sMysteryGiftReceiveOptions[] = {
{ MysteryGiftMenu_Text_GetFromFriend, AskConfirmWireless_FriendOrGBA },
{ MysteryGiftMenu_Text_GetViaWireless, AskConfirmWireless_WirelessDistribution },
{ MysteryGiftMenu_Text_GetViaWFC, AskConfirmConnectToWFC },
{ MysteryGiftMenu_Text_Cancel_MysteryGift, ReturnToMysteryGiftMenu }
};
StateChangeMenuOptionTemplate sStartWirelessCommsOptions_FriendOrGBA[] = {
static StateTransitionMenuOptionTemplate sStartWirelessCommsOptions_FriendOrGBA[] = {
{ MysteryGiftMenu_Text_Yes_MysteryGift, SetupFriendOrGBADistribution },
{ MysteryGiftMenu_Text_No_MysteryGift, ReturnToReceptionMethodChoiceAfterRefusingWireless }
};
StateChangeMenuOptionTemplate sConfirmReceiveGiftOptions[] = {
static StateTransitionMenuOptionTemplate sConfirmReceiveGiftOptions[] = {
{ MysteryGiftMenu_Text_Yes_MysteryGift, SendGiftRequestIfCanReceive },
{ MysteryGiftMenu_Text_No_MysteryGift, ReturnToReceptionMethodChoiceAfterRefusingGift }
};
StateChangeMenuOptionTemplate sConfirmConnectToWFCOptions[] = {
static StateTransitionMenuOptionTemplate sConfirmConnectToWFCOptions[] = {
{ MysteryGiftMenu_Text_Yes_MysteryGift, InitWFCConnection },
{ MysteryGiftMenu_Text_No_MysteryGift, ReturnToReceptionMethodChoiceAfterRefusingWireless }
};
StateChangeMenuOptionTemplate sUnusedYesNoOptions[] = {
// Gets optimized out if declared static.
StateTransitionMenuOptionTemplate sUnusedYesNoOptions[] = {
{ MysteryGiftMenu_Text_Yes_MysteryGift, SendGiftRequestIfCanReceive },
{ MysteryGiftMenu_Text_No_MysteryGift, NULL }
};
StateChangeMenuOptionTemplate sStartWirelessCommsOption_WirelessDistribution[] = {
static StateTransitionMenuOptionTemplate sStartWirelessCommsOption_WirelessDistribution[] = {
{ MysteryGiftMenu_Text_Yes_MysteryGift, StartSearchLocalWirelessDistribution },
{ MysteryGiftMenu_Text_No_MysteryGift, ReturnToReceptionMethodChoiceAfterRefusingWireless }
};
StateChangeMenuOptionTemplate sConfirmReceiveGiftOptions_WirelessDistribution[] = {
static StateTransitionMenuOptionTemplate sConfirmReceiveGiftOptions_WirelessDistribution[] = {
{ MysteryGiftMenu_Text_Yes_MysteryGift, CheckPlayerCanReceive_WirelessDistribution },
{ MysteryGiftMenu_Text_No_MysteryGift, DisconnectLocalWireless }
};
@ -380,13 +375,13 @@ static void LoadDownloadArrowSpriteResources(MysteryGiftAppData *appData)
{
MainMenuUtil_InitCharPlttTransferBuffers();
MainMenuUtil_InitSpriteLoader();
MainMenuUtil_LoadSprite(NARC_INDEX_GRAPHIC__MYSTERY, 10, 7, 9, 8, 0);
MainMenuUtil_LoadSprite(NARC_INDEX_GRAPHIC__MYSTERY, 10, 7, 9, 8, DS_SCREEN_MAIN);
}
static void SetDownloadArrowAnim(MysteryGiftAppData *appData, int animID)
{
if (animID != HIDE_DOWNLOADING_ARROW) {
appData->dowloadArrowSprite = MainMenuUtil_InitSprite(0, appData->dowloadArrowSprite, HW_LCD_WIDTH / 2, 100, animID);
appData->dowloadArrowSprite = MainMenuUtil_InitSprite(DS_SCREEN_MAIN, appData->dowloadArrowSprite, HW_LCD_WIDTH / 2, 100, animID);
} else {
Sprite_SetDrawFlag(appData->dowloadArrowSprite, FALSE);
}
@ -579,7 +574,7 @@ static void ShowConfirmReceiveGiftMenu(ApplicationManager *appMan, BOOL hideMsgB
Window *window = &appData->menuWindows[2];
if (window->bgConfig == NULL) {
Window_Add(appData->bgConfig, window, BG_LAYER_MAIN_0, 23, 10, 6, 4, PLTT_0, BASE_TILE_YES_NO_MENU);
Window_Add(appData->bgConfig, window, BG_LAYER_MAIN_0, 23, 10, 6, TEXT_LINES_TILES(2), PLTT_0, BASE_TILE_YES_NO_MENU);
}
Window_DrawStandardFrame(window, TRUE, BASE_TILE_STANDARD_WINDOW_FRAME, PLTT_3);
@ -618,7 +613,7 @@ static enum MysteryGiftAppState AskConfirmWireless_FriendOrGBA(ApplicationManage
window = &appData->menuWindows[2];
if (window->bgConfig == NULL) {
Window_Add(appData->bgConfig, window, BG_LAYER_MAIN_0, 23, 10, 6, 4, PLTT_0, BASE_TILE_YES_NO_MENU);
Window_Add(appData->bgConfig, window, BG_LAYER_MAIN_0, 23, 10, 6, TEXT_LINES_TILES(2), PLTT_0, BASE_TILE_YES_NO_MENU);
}
Window_DrawStandardFrame(window, TRUE, BASE_TILE_STANDARD_WINDOW_FRAME, PLTT_3);
@ -639,7 +634,7 @@ static enum MysteryGiftAppState AskConfirmConnectToWFC(ApplicationManager *appMa
window = &appData->menuWindows[2];
if (window->bgConfig == NULL) {
Window_Add(appData->bgConfig, window, BG_LAYER_MAIN_0, 23, 10, 6, 4, PLTT_0, BASE_TILE_YES_NO_MENU);
Window_Add(appData->bgConfig, window, BG_LAYER_MAIN_0, 23, 10, 6, TEXT_LINES_TILES(2), PLTT_0, BASE_TILE_YES_NO_MENU);
}
Window_DrawStandardFrame(window, TRUE, BASE_TILE_STANDARD_WINDOW_FRAME, PLTT_3);
@ -659,7 +654,7 @@ static enum MysteryGiftAppState AskConfirmWireless_WirelessDistribution(Applicat
Window *window = &appData->menuWindows[2];
if (window->bgConfig == NULL) {
Window_Add(appData->bgConfig, window, BG_LAYER_MAIN_0, 23, 10, 6, 4, PLTT_0, BASE_TILE_YES_NO_MENU);
Window_Add(appData->bgConfig, window, BG_LAYER_MAIN_0, 23, 10, 6, TEXT_LINES_TILES(2), PLTT_0, BASE_TILE_YES_NO_MENU);
}
Window_DrawStandardFrame(window, TRUE, BASE_TILE_STANDARD_WINDOW_FRAME, PLTT_3);
@ -675,7 +670,7 @@ static void ShowConfirmReceiveGiftMenu_LocalWireless(ApplicationManager *appMan)
Window *window = &appData->menuWindows[2];
if (window->bgConfig == NULL) {
Window_Add(appData->bgConfig, window, BG_LAYER_MAIN_0, 23, 10, 6, 4, PLTT_0, BASE_TILE_YES_NO_MENU);
Window_Add(appData->bgConfig, window, BG_LAYER_MAIN_0, 23, 10, 6, TEXT_LINES_TILES(2), PLTT_0, BASE_TILE_YES_NO_MENU);
}
Window_DrawStandardFrame(window, TRUE, BASE_TILE_STANDARD_WINDOW_FRAME, PLTT_3);
@ -780,7 +775,7 @@ static enum MysteryGiftAppState ShowMysteryGiftReceptionMethodsMenu(ApplicationM
window = &appData->menuWindows[1];
if (window->bgConfig == NULL) {
Window_Add(appData->bgConfig, window, BG_LAYER_MAIN_0, 15, 9, 16, 8, PLTT_0, BASE_TILE_RECEPTION_METHODS_MENU);
Window_Add(appData->bgConfig, window, BG_LAYER_MAIN_0, 15, 9, 16, TEXT_LINES_TILES(NUM_RECEPTION_METHODS), PLTT_0, BASE_TILE_RECEPTION_METHODS_MENU);
}
Window_DrawStandardFrame(window, TRUE, BASE_TILE_STANDARD_WINDOW_FRAME, PLTT_3);
@ -798,7 +793,7 @@ static enum MysteryGiftAppState ExitToWonderCardsApp(ApplicationManager *appMan)
ov97_02230224(appData);
}
MainMenuUtil_StartScreenFadeToState(0, MG_APP_STATE_EXIT_TO_WONDER_CARDS_APP, (int *)appData->statePtr, MG_APP_STATE_WAIT_SCREEN_TRANSITION);
MainMenuUtil_StartScreenFadeToState(FADE_TYPE_BRIGHTNESS_OUT, MG_APP_STATE_EXIT_TO_WONDER_CARDS_APP, (int *)appData->statePtr, MG_APP_STATE_WAIT_SCREEN_TRANSITION);
return MG_APP_KEEP_PREVIOUS_STATE;
}
@ -810,8 +805,8 @@ static enum MysteryGiftAppState ExitToTitleScreen(ApplicationManager *appMan)
appData->unk_630 = 1;
}
MainMenuUtil_SetFadeToWhite(1);
MainMenuUtil_StartScreenFadeToState(0, MG_APP_STATE_EXIT_TO_TITLE_SCREEN, (int *)appData->statePtr, MG_APP_STATE_WAIT_SCREEN_TRANSITION);
MainMenuUtil_SetFadeToWhite(TRUE);
MainMenuUtil_StartScreenFadeToState(FADE_TYPE_BRIGHTNESS_OUT, MG_APP_STATE_EXIT_TO_TITLE_SCREEN, (int *)appData->statePtr, MG_APP_STATE_WAIT_SCREEN_TRANSITION);
return MG_APP_KEEP_PREVIOUS_STATE;
}
@ -830,7 +825,7 @@ static void InitBgLayer(BgConfig *bgConfig, int bgLayer, u32 screenBase, u32 cha
.bgExtPltt = GX_BG_EXTPLTT_01,
.priority = 0,
.areaOver = 0,
.mosaic = 0
.mosaic = FALSE
};
bgTemplate.screenBase = screenBase / 0x800;
@ -877,7 +872,7 @@ static void LoadBothScreensBg(BgConfig *bgConfig)
LoadBottomScreenBg(bgConfig);
}
static void MakeStateChangeListMenuFromEntryTemplates(ApplicationManager *appMan, StateChangeMenuOptionTemplate *entries, int numEntries, Window *window, u32 msgBoxEntryId)
static void MakeStateChangeListMenuFromEntryTemplates(ApplicationManager *appMan, StateTransitionMenuOptionTemplate *entries, int numEntries, Window *window, u32 msgBoxEntryId)
{
MysteryGiftAppData *appData = ApplicationManager_Data(appMan);
@ -914,7 +909,7 @@ static void MakeStateChangeListMenuFromEntryTemplates(ApplicationManager *appMan
static void ShowMysteryGiftMenuOptions(ApplicationManager *appMan, int windowBaseTile, u32 textEntryId)
{
MysteryGiftAppData *appData = ApplicationManager_Data(appMan);
StateChangeMenuOptionTemplate entries[4];
StateTransitionMenuOptionTemplate entries[4];
int numEntries = 0;
MysteryGift *mysteryGift = SaveData_GetMysteryGift(appData->saveData);
@ -928,7 +923,7 @@ static void ShowMysteryGiftMenuOptions(ApplicationManager *appMan, int windowBas
entries[numEntries++] = sMysteryGiftMenuOptions[MG_MENU_EXIT];
if (window->bgConfig == NULL) {
Window_Add(appData->bgConfig, window, BG_LAYER_MAIN_0, 8, 7, 16, numEntries * 2, PLTT_0, windowBaseTile);
Window_Add(appData->bgConfig, window, BG_LAYER_MAIN_0, 8, 7, 16, TEXT_LINES_TILES(numEntries), PLTT_0, windowBaseTile);
}
Window_DrawStandardFrame(window, TRUE, BASE_TILE_STANDARD_WINDOW_FRAME, PLTT_3);
@ -1016,13 +1011,13 @@ static BOOL ShowAppMainMenu(ApplicationManager *appMan, MysteryGiftAppData *appD
int frameType = Options_Frame(appData->options);
LoadMessageBoxGraphics(appData->bgConfig, BG_LAYER_MAIN_0, 1, 2, frameType, HEAP_ID_MYSTERY_GIFT_APP);
LoadStandardWindowGraphics(appData->bgConfig, BG_LAYER_MAIN_0, BASE_TILE_STANDARD_WINDOW_FRAME, 3, STANDARD_WINDOW_FIELD, HEAP_ID_MYSTERY_GIFT_APP);
LoadMessageBoxGraphics(appData->bgConfig, BG_LAYER_MAIN_0, BASE_TILE_MESSAGE_BOX_FRAME, PLTT_2, frameType, HEAP_ID_MYSTERY_GIFT_APP);
LoadStandardWindowGraphics(appData->bgConfig, BG_LAYER_MAIN_0, BASE_TILE_STANDARD_WINDOW_FRAME, PLTT_3, STANDARD_WINDOW_FIELD, HEAP_ID_MYSTERY_GIFT_APP);
*(GXRgb *)HW_BG_PLTT = GX_RGB(12, 12, 31);
*HW_BG_A_PLTT_COLOR(PLTT_0, 0) = GX_RGB(12, 12, 31);
if (!Window_IsInUse(&appData->messageBox)) {
Window_Add(appData->bgConfig, &appData->messageBox, BG_LAYER_MAIN_0, 2, 19, 27, 4, PLTT_0, BASE_TILE_MAIN_APP_MENU_MSG_BOX);
Window_Add(appData->bgConfig, &appData->messageBox, BG_LAYER_MAIN_0, 2, 19, 27, TEXT_LINES_TILES(2), PLTT_0, BASE_TILE_MAIN_APP_MENU_MSG_BOX);
}
ShowMessageBox(appMan, &appData->messageBox, MysteryGiftMenu_Text_Welcome);
@ -1044,12 +1039,12 @@ static void SearchForWiFiDistributionEvent(ApplicationManager *appMan, enum Myst
ToggleWaitDial(appData, FALSE);
appData->foundGiftType = FOUND_GIFT_WIFI;
*state = MG_APP_STATE_FOUND_WIFI_OR_GBA_GIFT;
appData->unk_1640 = 0;
appData->giftSearchResultDelay = 0;
break;
case 2:
case 3:
ToggleWaitDial(appData, FALSE);
appData->unk_1640 = 0;
appData->giftSearchResultDelay = 0;
*state = MG_APP_STATE_NO_GIFT_FOUND;
break;
case 4:
@ -1075,14 +1070,14 @@ void MysteryGiftApp_ShowWiFiCommError(MysteryGiftAppData *appData)
StringTemplate *strTemplate = StringTemplate_Default(HEAP_ID_MYSTERY_GIFT_APP);
StringTemplate_SetNumber(strTemplate, 0, appData->wifiCommErrorCode, 5, PADDING_MODE_ZEROES, CHARSET_MODE_EN);
MainMenuWindow v1;
MainMenuUtil_InitWindow(&v1, &appData->wifiCommErrorWindow, PLTT_1, TEXT_BANK_UNK_0695, BASE_TILE_STANDARD_WINDOW_FRAME, PLTT_3);
MainMenuWindow_SetDimensionsAndBasetile(&v1, 24, 16, 100);
MainMenuWindow_SetScrollableAndFont(&v1, FALSE, FONT_MESSAGE);
MainMenuWindow window;
MainMenuUtil_InitWindow(&window, &appData->wifiCommErrorWindow, PLTT_1, TEXT_BANK_UNK_0695, BASE_TILE_STANDARD_WINDOW_FRAME, PLTT_3);
MainMenuWindow_SetDimensionsAndBasetile(&window, 24, TEXT_LINES_TILES(8), BASE_TILE_WIFI_COMM_ERROR_WINDOW);
MainMenuWindow_SetScrollableAndFont(&window, FALSE, FONT_MESSAGE);
v1.strTemplate = strTemplate;
window.strTemplate = strTemplate;
MainMenuUtil_ShowWindowAtPos(appData->bgConfig, &v1, 4, 4, textEntryID);
MainMenuUtil_ShowWindowAtPos(appData->bgConfig, &window, 4, 4, textEntryID);
StringTemplate_Free(strTemplate);
}
@ -1112,7 +1107,7 @@ static inline int WaitUntilMsgBoxPrinterFinished(ApplicationManager *appMan, int
return ShowMessageBoxIntoStateTransition(appMan, NULL, 0, nextState);
}
static int ShowMessageBoxIntoStateTransition(ApplicationManager *appMan, Window *window, int textEntryId, int nextState)
static int ShowMessageBoxIntoStateTransition(ApplicationManager *appMan, Window *window, int textEntryId, enum MysteryGiftAppState nextState)
{
StringTemplate *strTemplate;
MessageLoader *msgLoader;
@ -1212,18 +1207,18 @@ static void LoadParticleSpriteResources(MysteryGiftAnimationManager *animMan)
vramType = NNS_G2D_VRAM_TYPE_2DMAIN;
resourceID = 20000 + vramType;
animMan->spriteResources[DS_SCREEN_MAIN][SPRITE_RESOURCE_CHAR] = SpriteResourceCollection_AddTiles(animMan->unk_0C->resourceCollections[SPRITE_RESOURCE_CHAR], narcID, tilesID, compressed, resourceID, vramType, heapID);
animMan->spriteResources[DS_SCREEN_MAIN][SPRITE_RESOURCE_PLTT] = SpriteResourceCollection_AddPalette(animMan->unk_0C->resourceCollections[SPRITE_RESOURCE_PLTT], narcID, paletteID, FALSE, resourceID, vramType, PLTT_1, heapID);
animMan->spriteResources[DS_SCREEN_MAIN][SPRITE_RESOURCE_CELL] = SpriteResourceCollection_Add(animMan->unk_0C->resourceCollections[SPRITE_RESOURCE_CELL], narcID, cellsID, compressed, resourceID, SPRITE_RESOURCE_CELL, heapID);
animMan->spriteResources[DS_SCREEN_MAIN][SPRITE_RESOURCE_ANIM] = SpriteResourceCollection_Add(animMan->unk_0C->resourceCollections[SPRITE_RESOURCE_ANIM], narcID, animationID, compressed, resourceID, SPRITE_RESOURCE_ANIM, heapID);
animMan->spriteResources[DS_SCREEN_MAIN][SPRITE_RESOURCE_CHAR] = SpriteResourceCollection_AddTiles(animMan->spriteMan->resourceCollections[SPRITE_RESOURCE_CHAR], narcID, tilesID, compressed, resourceID, vramType, heapID);
animMan->spriteResources[DS_SCREEN_MAIN][SPRITE_RESOURCE_PLTT] = SpriteResourceCollection_AddPalette(animMan->spriteMan->resourceCollections[SPRITE_RESOURCE_PLTT], narcID, paletteID, FALSE, resourceID, vramType, PLTT_1, heapID);
animMan->spriteResources[DS_SCREEN_MAIN][SPRITE_RESOURCE_CELL] = SpriteResourceCollection_Add(animMan->spriteMan->resourceCollections[SPRITE_RESOURCE_CELL], narcID, cellsID, compressed, resourceID, SPRITE_RESOURCE_CELL, heapID);
animMan->spriteResources[DS_SCREEN_MAIN][SPRITE_RESOURCE_ANIM] = SpriteResourceCollection_Add(animMan->spriteMan->resourceCollections[SPRITE_RESOURCE_ANIM], narcID, animationID, compressed, resourceID, SPRITE_RESOURCE_ANIM, heapID);
vramType = NNS_G2D_VRAM_TYPE_2DSUB;
resourceID = 20000 + vramType;
animMan->spriteResources[DS_SCREEN_SUB][SPRITE_RESOURCE_CHAR] = SpriteResourceCollection_AddTiles(animMan->unk_0C->resourceCollections[SPRITE_RESOURCE_CHAR], narcID, tilesID, compressed, resourceID, vramType, heapID);
animMan->spriteResources[DS_SCREEN_SUB][SPRITE_RESOURCE_PLTT] = SpriteResourceCollection_AddPalette(animMan->unk_0C->resourceCollections[SPRITE_RESOURCE_PLTT], narcID, paletteID, FALSE, resourceID, vramType, PLTT_1, heapID);
animMan->spriteResources[DS_SCREEN_SUB][SPRITE_RESOURCE_CELL] = SpriteResourceCollection_Add(animMan->unk_0C->resourceCollections[SPRITE_RESOURCE_CELL], narcID, cellsID, compressed, resourceID, SPRITE_RESOURCE_CELL, heapID);
animMan->spriteResources[DS_SCREEN_SUB][SPRITE_RESOURCE_ANIM] = SpriteResourceCollection_Add(animMan->unk_0C->resourceCollections[SPRITE_RESOURCE_ANIM], narcID, animationID, compressed, resourceID, SPRITE_RESOURCE_ANIM, heapID);
animMan->spriteResources[DS_SCREEN_SUB][SPRITE_RESOURCE_CHAR] = SpriteResourceCollection_AddTiles(animMan->spriteMan->resourceCollections[SPRITE_RESOURCE_CHAR], narcID, tilesID, compressed, resourceID, vramType, heapID);
animMan->spriteResources[DS_SCREEN_SUB][SPRITE_RESOURCE_PLTT] = SpriteResourceCollection_AddPalette(animMan->spriteMan->resourceCollections[SPRITE_RESOURCE_PLTT], narcID, paletteID, FALSE, resourceID, vramType, PLTT_1, heapID);
animMan->spriteResources[DS_SCREEN_SUB][SPRITE_RESOURCE_CELL] = SpriteResourceCollection_Add(animMan->spriteMan->resourceCollections[SPRITE_RESOURCE_CELL], narcID, cellsID, compressed, resourceID, SPRITE_RESOURCE_CELL, heapID);
animMan->spriteResources[DS_SCREEN_SUB][SPRITE_RESOURCE_ANIM] = SpriteResourceCollection_Add(animMan->spriteMan->resourceCollections[SPRITE_RESOURCE_ANIM], narcID, animationID, compressed, resourceID, SPRITE_RESOURCE_ANIM, heapID);
SpriteTransfer_RequestChar(animMan->spriteResources[DS_SCREEN_MAIN][SPRITE_RESOURCE_CHAR]);
SpriteTransfer_RequestChar(animMan->spriteResources[DS_SCREEN_SUB][SPRITE_RESOURCE_CHAR]);
@ -1234,13 +1229,13 @@ static void LoadParticleSpriteResources(MysteryGiftAnimationManager *animMan)
vramType = NNS_G2D_VRAM_TYPE_2DMAIN;
resourceID = 20000 + vramType;
SpriteResourcesHeader_Init(&animMan->spriteResourcesHeaders[DS_SCREEN_MAIN], resourceID, resourceID, resourceID, resourceID, 0xffffffff, 0xffffffff, FALSE, 0, animMan->unk_0C->resourceCollections[SPRITE_RESOURCE_CHAR], animMan->unk_0C->resourceCollections[SPRITE_RESOURCE_PLTT], animMan->unk_0C->resourceCollections[SPRITE_RESOURCE_CELL], animMan->unk_0C->resourceCollections[SPRITE_RESOURCE_ANIM], NULL, NULL);
SpriteResourcesHeader_Init(&animMan->spriteResourcesHeaders[DS_SCREEN_MAIN], resourceID, resourceID, resourceID, resourceID, -1, -1, FALSE, 0, animMan->spriteMan->resourceCollections[SPRITE_RESOURCE_CHAR], animMan->spriteMan->resourceCollections[SPRITE_RESOURCE_PLTT], animMan->spriteMan->resourceCollections[SPRITE_RESOURCE_CELL], animMan->spriteMan->resourceCollections[SPRITE_RESOURCE_ANIM], NULL, NULL);
vramType = NNS_G2D_VRAM_TYPE_2DSUB;
resourceID = 20000 + vramType;
// Despite baseIndex always being 0, replacing `baseIndex + DS_SCREEN_SUB` with `DS_SCREEN_SUB` doesn't match here.
SpriteResourcesHeader_Init(&animMan->spriteResourcesHeaders[baseIndex + DS_SCREEN_SUB], resourceID, resourceID, resourceID, resourceID, 0xffffffff, 0xffffffff, FALSE, 0, animMan->unk_0C->resourceCollections[SPRITE_RESOURCE_CHAR], animMan->unk_0C->resourceCollections[SPRITE_RESOURCE_PLTT], animMan->unk_0C->resourceCollections[SPRITE_RESOURCE_CELL], animMan->unk_0C->resourceCollections[SPRITE_RESOURCE_ANIM], NULL, NULL);
SpriteResourcesHeader_Init(&animMan->spriteResourcesHeaders[baseIndex + DS_SCREEN_SUB], resourceID, resourceID, resourceID, resourceID, -1, -1, FALSE, 0, animMan->spriteMan->resourceCollections[SPRITE_RESOURCE_CHAR], animMan->spriteMan->resourceCollections[SPRITE_RESOURCE_PLTT], animMan->spriteMan->resourceCollections[SPRITE_RESOURCE_CELL], animMan->spriteMan->resourceCollections[SPRITE_RESOURCE_ANIM], NULL, NULL);
}
static Sprite *InitParticleSprite(MysteryGiftAnimationManager *animMan, int vramType)
@ -1253,7 +1248,7 @@ static Sprite *InitParticleSprite(MysteryGiftAnimationManager *animMan, int vram
// 0 is the top screen, 1 is the bottom screen. Using enum variants doesn't match.
enum DSScreen screen = (vramType == NNS_G2D_VRAM_TYPE_2DMAIN) ? 0 : 1;
template.list = animMan->unk_0C->spriteList;
template.list = animMan->spriteMan->spriteList;
template.resourceData = &animMan->spriteResourcesHeaders[screen];
template.position.z = 0;
template.affineScale.x = FX32_ONE;
@ -1403,7 +1398,7 @@ static void DeleteBottomScreenSmallParticles(MysteryGiftAnimationManager *animMa
static void SetupTopScreenParticlesForGather(MysteryGiftAnimationManager *animMan)
{
for (int i = 0; i < 80; i++) {
for (int i = 0; i < NUM_MYSTERY_GIFT_PARTICLES; i++) {
animMan->topScreenSmallParticles[i].animationCenter.x = FX32_CONST(HW_LCD_WIDTH / 2);
animMan->topScreenSmallParticles[i].animationCenter.y = FX32_CONST(HW_LCD_HEIGHT / 2);
animMan->topScreenSmallParticles[i].speedToCenter = FX32_CONST(4);
@ -1413,7 +1408,7 @@ static void SetupTopScreenParticlesForGather(MysteryGiftAnimationManager *animMa
animMan->topScreenSmallParticles[i].timeSinceCenterReached = 0;
{
animMan->topScreenSmallParticles[i].speedToCenter = FX32_CONST((i / 10) + 4);
animMan->topScreenSmallParticles[i].speedToCenter = FX_F32_TO_FX32((i / 10) + 4);
}
{
if (i > 50) {
@ -1436,7 +1431,7 @@ static void SetupTopScreenParticlesForGather(MysteryGiftAnimationManager *animMa
animMan->topScreenSmallParticles[i].apparitionDelay += 1;
}
animMan->topScreenSmallParticles[i].speed = 5 * 3;
animMan->topScreenSmallParticles[i].speed = 15;
animMan->topScreenSmallParticles[i].horizontalSpeed = animMan->topScreenSmallParticles[i].speed;
animMan->topScreenSmallParticles[i].verticalSpeed = animMan->topScreenSmallParticles[i].speed;
@ -1514,7 +1509,7 @@ static void SetupBottomScreenSmallParticlesForSpiralOut(MysteryGiftAnimationMana
animMan->bottomScreenSmallParticles[i].movementAngle = 0;
animMan->bottomScreenSmallParticles[i].timeSinceCenterReached = 0;
animMan->bottomScreenSmallParticles[i].spiralOutAcceleration = 2 + (LCRNG_Next() % 4);
animMan->bottomScreenSmallParticles[i].speedToCenter = FX32_CONST((i / 30) + 4);
animMan->bottomScreenSmallParticles[i].speedToCenter = FX_F32_TO_FX32((i / 30) + 4);
if (i > 60) {
animMan->bottomScreenSmallParticles[i].speed = 5;
@ -1648,7 +1643,7 @@ static void RunParticleAnimationFrame(SysTask *sysTask, MysteryGiftParticle *par
spritePos.x = particle->animationCenter.x + (CalcSineDegrees_Wraparound(particle->angleAroundCenter) * particle->horizontalSpeed * -1);
spritePos.y = particle->animationCenter.y + (CalcCosineDegrees_Wraparound(particle->angleAroundCenter) * particle->verticalSpeed * -1);
} else if (particle->animationType == PARTICLE_ANIMATION_TYPE_SPIRAL_OUT_0) {
if (particle->speed < (64 + 32)) {
if (particle->speed < 96) {
particle->speed += particle->spiralOutAcceleration;
}
@ -1658,7 +1653,7 @@ static void RunParticleAnimationFrame(SysTask *sysTask, MysteryGiftParticle *par
spritePos.x = particle->animationCenter.x + (CalcSineDegrees_Wraparound(particle->angleAroundCenter) * particle->horizontalSpeed * +1);
spritePos.y = particle->animationCenter.y + (CalcCosineDegrees_Wraparound(particle->angleAroundCenter) * particle->verticalSpeed * +1);
} else if (particle->animationType == PARTICLE_ANIMATION_TYPE_SPIRAL_OUT_1) {
if (particle->speed < (64 + 32)) {
if (particle->speed < 96) {
particle->speed += particle->spiralOutAcceleration;
}
@ -1708,8 +1703,8 @@ static void SetBothScreensBlendBrightness(MysteryGiftAnimationManager *animMan)
static void MakeBlackTransparent(void)
{
Bg_MaskPalette(BG_LAYER_MAIN_1, GX_RGB(0, 0, 0));
Bg_MaskPalette(BG_LAYER_SUB_1, GX_RGB(0, 0, 0));
Bg_MaskPalette(BG_LAYER_MAIN_1, COLOR_BLACK);
Bg_MaskPalette(BG_LAYER_SUB_1, COLOR_BLACK);
}
static BOOL FadeBothScreensBlendBrightness(MysteryGiftAnimationManager *animMan, enum MysteryGiftAnimBrightnessFadeDirection direction, s8 speed)
@ -1735,19 +1730,19 @@ static BOOL FadeBothScreensBlendBrightness(MysteryGiftAnimationManager *animMan,
}
break;
case FADE_TOWARDS_BLACK:
if (animMan->blendBrightness - speed > PARTICLES_MAN_BLEND_BRIGHTNESS_BLACK) {
if (animMan->blendBrightness - speed > BRIGHTNESS_BLACK) {
animMan->blendBrightness -= speed;
reachedLimit = FALSE;
} else {
animMan->blendBrightness = PARTICLES_MAN_BLEND_BRIGHTNESS_BLACK;
animMan->blendBrightness = BRIGHTNESS_BLACK;
}
break;
case FADE_TOWARDS_WHITE:
if (animMan->blendBrightness + speed < PARTICLES_MAN_BLEND_BRIGHTNESS_WHITE) {
if (animMan->blendBrightness + speed < BRIGHTNESS_WHITE) {
animMan->blendBrightness += speed;
reachedLimit = FALSE;
} else {
animMan->blendBrightness = PARTICLES_MAN_BLEND_BRIGHTNESS_WHITE;
animMan->blendBrightness = BRIGHTNESS_WHITE;
}
break;
}
@ -1779,19 +1774,19 @@ static BOOL FadeTopScreenBlendBrightness(MysteryGiftAnimationManager *animMan, e
}
break;
case FADE_TOWARDS_BLACK:
if (animMan->blendBrightness - speed > PARTICLES_MAN_BLEND_BRIGHTNESS_BLACK) {
if (animMan->blendBrightness - speed > BRIGHTNESS_BLACK) {
animMan->blendBrightness -= speed;
reachedLimit = FALSE;
} else {
animMan->blendBrightness = PARTICLES_MAN_BLEND_BRIGHTNESS_BLACK;
animMan->blendBrightness = BRIGHTNESS_BLACK;
}
break;
case FADE_TOWARDS_WHITE:
if (animMan->blendBrightness + speed < PARTICLES_MAN_BLEND_BRIGHTNESS_WHITE) {
if (animMan->blendBrightness + speed < BRIGHTNESS_WHITE) {
animMan->blendBrightness += speed;
reachedLimit = FALSE;
} else {
animMan->blendBrightness = PARTICLES_MAN_BLEND_BRIGHTNESS_WHITE;
animMan->blendBrightness = BRIGHTNESS_WHITE;
}
break;
}
@ -2009,7 +2004,7 @@ static BOOL MysteryGiftApp_Main(ApplicationManager *appMan, enum MysteryGiftAppS
case MG_APP_STATE_INIT_GRAPHICS:
ShowAppMainMenu(appMan, appData);
LoadDownloadArrowSpriteResources(appData);
MainMenuUtil_StartScreenFadeToState(1, MG_APP_STATE_WAIT_MAIN_MENU_INPUT, (int *)state, MG_APP_STATE_WAIT_SCREEN_TRANSITION);
MainMenuUtil_StartScreenFadeToState(FADE_TYPE_BRIGHTNESS_IN, MG_APP_STATE_WAIT_MAIN_MENU_INPUT, (int *)state, MG_APP_STATE_WAIT_SCREEN_TRANSITION);
break;
case MG_APP_STATE_WAIT_SCREEN_TRANSITION:
MainMenuUtil_CheckScreenFadeDone((int *)state);
@ -2040,7 +2035,7 @@ static BOOL MysteryGiftApp_Main(ApplicationManager *appMan, enum MysteryGiftAppS
*state = MG_APP_STATE_FROM_FRIEND_OR_CANT_RECEIVE;
} else {
if (!Window_IsInUse(&appData->wonderCardTitleWindow)) {
Window_Add(appData->bgConfig, &appData->wonderCardTitleWindow, BG_LAYER_MAIN_0, 3, 2, 26, 4, PLTT_0, BASE_TILE_WONDERCARD_TITLE);
Window_Add(appData->bgConfig, &appData->wonderCardTitleWindow, BG_LAYER_MAIN_0, 3, 2, 26, TEXT_LINES_TILES(2), PLTT_0, BASE_TILE_WONDERCARD_TITLE);
}
ShowWonderCardTitle(appMan, &appData->wonderCardTitleWindow, ov97_02238D54());
@ -2080,7 +2075,7 @@ static BOOL MysteryGiftApp_Main(ApplicationManager *appMan, enum MysteryGiftAppS
memset(animMan, 0, sizeof(MysteryGiftAnimationManager));
animMan->animationStatusPtr = &appData->animationStatus;
animMan->unk_0C = MainMenuUtil_GetSpriteManager();
animMan->spriteMan = MainMenuUtil_GetSpriteManager();
SysTask_Start((SysTaskFunc)RunMysteryGiftAnimationFrame, animMan, 5);
}
@ -2150,7 +2145,7 @@ static BOOL MysteryGiftApp_Main(ApplicationManager *appMan, enum MysteryGiftAppS
appData->canReceiveGiftStatus = ov97_02232148(appData->saveData, &appData->eventData);
if (!Window_IsInUse(&appData->wonderCardTitleWindow)) {
Window_Add(appData->bgConfig, &appData->wonderCardTitleWindow, BG_LAYER_MAIN_0, 3, 2, 26, 4, PLTT_0, BASE_TILE_WONDERCARD_TITLE);
Window_Add(appData->bgConfig, &appData->wonderCardTitleWindow, BG_LAYER_MAIN_0, 3, 2, 26, TEXT_LINES_TILES(2), PLTT_0, BASE_TILE_WONDERCARD_TITLE);
}
ShowWonderCardTitle(appMan, &appData->wonderCardTitleWindow, appData->eventData.header.title);
@ -2179,7 +2174,7 @@ static BOOL MysteryGiftApp_Main(ApplicationManager *appMan, enum MysteryGiftAppS
ShowMessageBox(appMan, &appData->messageBox, MysteryGiftMenu_Text_ReceivingGiftDontTurnOff);
SetDownloadArrowAnim(appData, 1);
ToggleWaitDial(appData, TRUE);
appData->wirelessCommsTimeout = 60 * 10;
appData->wirelessCommsTimeout = 600;
*state = MG_APP_STATE_RECEIVING_FROM_FRIEND;
}
} else if (netID != 0 && CommSys_IsPlayerConnected(netID) == FALSE) {
@ -2235,11 +2230,11 @@ static BOOL MysteryGiftApp_Main(ApplicationManager *appMan, enum MysteryGiftAppS
break;
}
if (MainMenuUtil_GetSavingStatus() == 4) {
if (MainMenuUtil_GetSavingStatus() == MAIN_MENU_UTIL_SAVING_IDLE) {
CommTiming_StartSync(0x93);
*state = MG_APP_STATE_WAIT_FRIEND_READY_TO_DISCONNECT;
appData->delay = 120;
} else if (MainMenuUtil_GetSavingStatus() == SAVE_RESULT_CORRUPT) {
} else if (MainMenuUtil_GetSavingStatus() == MAIN_MENU_UTIL_SAVE_FAILURE) {
MainMenuUtil_CancelSave();
appData->eventData.header.hasWonderCard = FALSE;
ToggleWaitDial(appData, FALSE);
@ -2280,8 +2275,8 @@ static BOOL MysteryGiftApp_Main(ApplicationManager *appMan, enum MysteryGiftAppS
*state = MG_APP_STATE_RETURN_TO_MENU;
break;
case MG_APP_STATE_NO_GIFT_FOUND:
if (appData->unk_1640) {
appData->unk_1640--;
if (appData->giftSearchResultDelay) {
appData->giftSearchResultDelay--;
break;
}
@ -2299,8 +2294,8 @@ static BOOL MysteryGiftApp_Main(ApplicationManager *appMan, enum MysteryGiftAppS
}
break;
case MG_APP_STATE_FOUND_WIFI_OR_GBA_GIFT:
if (appData->unk_1640) {
appData->unk_1640--;
if (appData->giftSearchResultDelay) {
appData->giftSearchResultDelay--;
break;
}
@ -2315,7 +2310,7 @@ static BOOL MysteryGiftApp_Main(ApplicationManager *appMan, enum MysteryGiftAppS
*state = MG_APP_STATE_FROM_FRIEND_OR_CANT_RECEIVE;
} else {
if (!Window_IsInUse(&appData->wonderCardTitleWindow)) {
Window_Add(appData->bgConfig, &appData->wonderCardTitleWindow, BG_LAYER_MAIN_0, 3, 2, 26, 4, PLTT_0, BASE_TILE_WONDERCARD_TITLE);
Window_Add(appData->bgConfig, &appData->wonderCardTitleWindow, BG_LAYER_MAIN_0, 3, 2, 26, TEXT_LINES_TILES(2), PLTT_0, BASE_TILE_WONDERCARD_TITLE);
}
ShowWonderCardTitle(appMan, &appData->wonderCardTitleWindow, appData->eventData.header.title);
@ -2347,17 +2342,17 @@ static BOOL MysteryGiftApp_Main(ApplicationManager *appMan, enum MysteryGiftAppS
}
break;
case MG_APP_STATE_WAIT_MYSTERY_GIFT_SAVED:
if (MainMenuUtil_GetSavingStatus() == 4) {
if (MainMenuUtil_GetSavingStatus() == MAIN_MENU_UTIL_SAVING_IDLE) {
MainMenuUtil_ContinueSaving();
}
if (MainMenuUtil_GetSavingStatus() == SAVE_RESULT_OK) {
if (MainMenuUtil_GetSavingStatus() == MAIN_MENU_UTIL_SAVE_SUCCESS) {
appData->delay = 1;
ToggleWaitDial(appData, FALSE);
SetDownloadArrowAnim(appData, HIDE_DOWNLOADING_ARROW);
Sound_PlayEffect(SEQ_SE_DP_UG_020);
*state = ShowMessageBoxIntoStateTransition(appMan, &appData->messageBox, MysteryGiftMenu_Text_GiftReceivedPickUpInPokeMart, MG_APP_STATE_WAIT_BEFORE_EXIT_AFTER_RECEIVING_GIFT);
} else if (MainMenuUtil_GetSavingStatus() == SAVE_RESULT_CORRUPT) {
} else if (MainMenuUtil_GetSavingStatus() == MAIN_MENU_UTIL_SAVE_FAILURE) {
SetDownloadArrowAnim(appData, HIDE_DOWNLOADING_ARROW);
appData->eventData.header.hasWonderCard = FALSE;
*state = ShowMessageBoxIntoStateTransition(appMan, &appData->messageBox, MysteryGiftMenu_Text_ProblemWithReceivingTheGift, MG_APP_STATE_EXIT_AFTER_RECEIVING_GIFT);
@ -2365,7 +2360,7 @@ static BOOL MysteryGiftApp_Main(ApplicationManager *appMan, enum MysteryGiftAppS
break;
case MG_APP_STATE_WAIT_BEFORE_EXIT_AFTER_RECEIVING_GIFT:
if (--appData->delay == 0) {
appData->delay = 256 * 256;
appData->delay = 65536;
*state = MG_APP_STATE_EXIT_AFTER_RECEIVING_GIFT;
}
break;
@ -2406,10 +2401,10 @@ static BOOL MysteryGiftApp_Main(ApplicationManager *appMan, enum MysteryGiftAppS
Sound_PlayEffect(SEQ_SE_CONFIRM);
if (appData->eventData.header.hasWonderCard == TRUE) {
MainMenuUtil_StartScreenFadeToState(0, MG_APP_STATE_SHOW_RECEIVED_WONDERCARD, (int *)appData->statePtr, MG_APP_STATE_WAIT_SCREEN_TRANSITION);
MainMenuUtil_StartScreenFadeToState(FADE_TYPE_BRIGHTNESS_OUT, MG_APP_STATE_SHOW_RECEIVED_WONDERCARD, (int *)appData->statePtr, MG_APP_STATE_WAIT_SCREEN_TRANSITION);
} else {
MainMenuUtil_SetFadeToWhite(1);
MainMenuUtil_StartScreenFadeToState(0, MG_APP_STATE_RESET_SYSTEM, (int *)appData->statePtr, MG_APP_STATE_WAIT_SCREEN_TRANSITION);
MainMenuUtil_SetFadeToWhite(TRUE);
MainMenuUtil_StartScreenFadeToState(FADE_TYPE_BRIGHTNESS_OUT, MG_APP_STATE_RESET_SYSTEM, (int *)appData->statePtr, MG_APP_STATE_WAIT_SCREEN_TRANSITION);
}
}
break;
@ -2418,19 +2413,22 @@ static BOOL MysteryGiftApp_Main(ApplicationManager *appMan, enum MysteryGiftAppS
GXLayers_EngineBToggleLayers(GX_PLANEMASK_BG0, FALSE);
GXLayers_EngineBToggleLayers(GX_PLANEMASK_BG1, TRUE);
WonderCardsApp_ShowWondercard(appData->bgConfig, &appData->eventData.wonderCard, HEAP_ID_MYSTERY_GIFT_APP);
MainMenuUtil_StartScreenFadeToState(1, MG_APP_STATE_EXIT_AFTER_RECEIVING_GIFT, (int *)appData->statePtr, MG_APP_STATE_WAIT_SCREEN_TRANSITION);
MainMenuUtil_StartScreenFadeToState(FADE_TYPE_BRIGHTNESS_IN, MG_APP_STATE_EXIT_AFTER_RECEIVING_GIFT, (int *)appData->statePtr, MG_APP_STATE_WAIT_SCREEN_TRANSITION);
appData->eventData.header.hasWonderCard = FALSE; // Makes the game exit the application
break;
case MG_APP_STATE_RESET_SYSTEM:
OS_ResetSystem(0);
break;
default:
// Should never be reached
break;
}
if (appData->mainCallback) {
appData->mainCallback(appData);
}
MainMenuUtil_UpdateSprites(appData->animationStatus);
MainMenuUtil_UpdateSpritesForAnimStatus(appData->animationStatus);
return FALSE;
}
@ -2481,7 +2479,7 @@ static void ov97_02230224(MysteryGiftAppData *param0)
break;
case 28:
sub_02037D48(param0->saveData);
param0->unk_630 = (2 * 60);
param0->unk_630 = 120;
param0->unk_62C = 30;
break;
case 30:

View File

@ -528,10 +528,10 @@ static void ov97_0222C254(UnkStruct_ov97_0222C388 *param0)
GXLayers_SetBanks(&v1);
SetAllGraphicsModes(&v2);
MainMenuUtil_InitBG(param0->unk_04, 0, 1, 0xF000, 0x0);
MainMenuUtil_InitBG(param0->unk_04, 1, 1, 0xF800, 0x4000);
MainMenuUtil_InitBG(param0->unk_04, 4, 1, 0x7800, 0x0);
MainMenuUtil_InitBG(param0->unk_04, 5, 1, 0x7000, 0x4000);
MainMenuUtil_InitBGLayer(param0->unk_04, 0, 1, 0xF000, 0x0);
MainMenuUtil_InitBGLayer(param0->unk_04, 1, 1, 0xF800, 0x4000);
MainMenuUtil_InitBGLayer(param0->unk_04, 4, 1, 0x7800, 0x0);
MainMenuUtil_InitBGLayer(param0->unk_04, 5, 1, 0x7000, 0x4000);
Text_ResetAllPrinters();
Font_LoadTextPalette(0, 0 * 32, param0->heapID);
@ -765,7 +765,7 @@ static int ov97_0222C78C(ApplicationManager *appMan, int *param1)
break;
}
MainMenuUtil_UpdateSpritesSkipGift();
MainMenuUtil_UpdateSprites();
return 0;
}

View File

@ -157,6 +157,7 @@ enum WonderCardAction {
WC_ACTION_SHARE,
WC_ACTION_TRASH,
WC_ACTION_EXIT,
NUM_WC_ACTIONS,
};
enum WonderCardShareBtn {
@ -210,14 +211,14 @@ typedef struct WonderCardsAppWindowTemplate {
int topMarginSize;
} WonderCardsAppWindowTemplate;
typedef struct {
typedef struct StateTransitionMenuOptionTemplate {
int textEntryID;
union {
enum WonderCardsAppState targetState; //!< Used when the state transition is handled by the main function
StateTransitionFuncPtr transitionFunc; //!< Used when some action needs to be performed outside of the main function before changing the state, typically showing a message box and/or menu
u32 asU32;
} stateChange;
} StateTransitionListMenuEntryTemplate;
} StateTransitionMenuOptionTemplate;
struct WonderCardsAppData {
int heapID;
@ -262,8 +263,8 @@ struct WonderCardsAppData {
int queuedState;
SpriteList *spriteList;
G2dRenderer g2dRenderer;
SpriteResourceCollection *spriteResourceCollections[6];
SpriteResource *spriteResources[6];
SpriteResourceCollection *spriteResourceCollections[SPRITE_RESOURCE_MAX];
SpriteResource *spriteResources[SPRITE_RESOURCE_MAX];
SpriteResourcesHeader spriteResourceHeader;
Sprite *shareScreenBtnSprites[2];
Sprite *selectedWcSprites[NUM_WONDERCARD_SPRITES];
@ -276,9 +277,9 @@ struct WonderCardsAppData {
static enum WonderCardsAppState AskConfirmDeleteWc(ApplicationManager *appMan);
static enum WonderCardsAppState AskConfirmShareWc(ApplicationManager *appMan);
static enum WonderCardsAppState GoBackToWcActionsMenu(ApplicationManager *appMan);
static enum WonderCardsAppState ReturnToWcActionsMenu(ApplicationManager *appMan);
static enum WonderCardsAppState DeleteWcAndOpenNextWcActionsMenu(ApplicationManager *appMan);
static void WonderCardsApp_CloseListMenu(WonderCardsAppData *appData);
static BOOL DoNothing(WonderCardsAppData *appData, Window *window, TextColor color);
static BOOL PrintWondercardTitle(WonderCardsAppData *appData, Window *window, TextColor color);
static BOOL DetermineGiftStatus(WonderCardsAppData *appData, Window *window, TextColor color);
@ -289,6 +290,8 @@ static BOOL InitWondercardActionsMenu(WonderCardsAppData *appData, Window *windo
static BOOL InitConfirmWondercardDeleteMenu(WonderCardsAppData *appData, Window *window, TextColor color);
static BOOL InitConfirmWondercardShareMenu(WonderCardsAppData *appData, Window *window, TextColor color);
static BOOL SetupEntriesCount(WonderCardsAppData *appData, Window *window, TextColor color);
static void WonderCardsApp_CloseListMenu(WonderCardsAppData *appData);
static int UpdateConnectedPlayers(WonderCardsAppData *appData, Window *window);
static void UpdateConnectedPlayersCount(WonderCardsAppData *appData, Window *window, int count);
static void StopWirelessCommunication(WonderCardsAppData *appData, enum WonderCardsAppState *state, enum WonderCardsAppState nextState);
@ -301,7 +304,7 @@ static void LoadPokemonSpritesForSelectedWc(WonderCardsAppData *appData);
static void ResetAllSprites(WonderCardsAppData *appData);
static int CountConnectedPlayers(WonderCardsAppData *appData);
WonderCardsAppWindowTemplate sWonderCardsAppWindows[NUM_WC_APP_WINDOWS] = {
static WonderCardsAppWindowTemplate sWonderCardsAppWindows[NUM_WC_APP_WINDOWS] = {
[WC_FRONT_TEXT_WONDER_CARD] = {
.screen = WC_SCREEN_WONDERCARD_FRONT,
.tilemapLeft = 2,
@ -572,26 +575,26 @@ WonderCardsAppWindowTemplate sWonderCardsAppWindows[NUM_WC_APP_WINDOWS] = {
},
};
static StateTransitionListMenuEntryTemplate sWonderCardActions[] = {
static StateTransitionMenuOptionTemplate sWonderCardActions[] = {
[WC_ACTION_INFO] = { MysteryGiftMenu_Text_Info, { .targetState = WC_APP_STATE_START_FLIP_WC_TO_BACK } },
[WC_ACTION_SHARE] = { MysteryGiftMenu_Text_Share, { .transitionFunc = AskConfirmShareWc } },
[WC_ACTION_TRASH] = { MysteryGiftMenu_Text_Trash, { .transitionFunc = AskConfirmDeleteWc } },
[WC_ACTION_EXIT] = { MysteryGiftMenu_Text_Exit_WonderCards, { .targetState = WC_APP_STATE_CLOSE_WINDOWS } }
};
static StateTransitionListMenuEntryTemplate sConfirmWondercardDeleteOptions[] = {
static StateTransitionMenuOptionTemplate sConfirmWondercardDeleteOptions[] = {
{ MysteryGiftMenu_Text_Yes_WonderCards, { .transitionFunc = DeleteWcAndOpenNextWcActionsMenu } },
{ MysteryGiftMenu_Text_No_WonderCards, { .transitionFunc = GoBackToWcActionsMenu } }
{ MysteryGiftMenu_Text_No_WonderCards, { .transitionFunc = ReturnToWcActionsMenu } }
};
static StateTransitionListMenuEntryTemplate sConfirmWondercardShareOptions[] = {
static StateTransitionMenuOptionTemplate sConfirmWondercardShareOptions[] = {
{ MysteryGiftMenu_Text_Yes_WonderCards, { .targetState = WC_APP_STATE_ASK_START_WIRELESS_TO_SHARE_WC } },
{ MysteryGiftMenu_Text_No_WonderCards, { .transitionFunc = GoBackToWcActionsMenu } }
{ MysteryGiftMenu_Text_No_WonderCards, { .transitionFunc = ReturnToWcActionsMenu } }
};
static StateTransitionListMenuEntryTemplate sConfirmStartWirelessOptions[] = {
static StateTransitionMenuOptionTemplate sConfirmStartWirelessOptions[] = {
{ MysteryGiftMenu_Text_Yes_WonderCards, { .targetState = WC_APP_STATE_START_TRANSITION_TO_WC_SHARE_SCREEN } },
{ MysteryGiftMenu_Text_No_WonderCards, { .transitionFunc = GoBackToWcActionsMenu } }
{ MysteryGiftMenu_Text_No_WonderCards, { .transitionFunc = ReturnToWcActionsMenu } }
};
static ListMenuTemplate sWonderCardsAppListMenuTemplate = {
@ -620,7 +623,7 @@ static void LoadWcShareScreenButtonsGraphics(WonderCardsAppData *appData)
ResetAllSprites(appData);
MainMenuUtil_InitCharPlttTransferBuffers();
MainMenuUtil_InitSpriteLoader();
MainMenuUtil_LoadSprite(NARC_INDEX_GRAPHIC__MYSTERY, 15, 12, 14, 13, 0);
MainMenuUtil_LoadSprite(NARC_INDEX_GRAPHIC__MYSTERY, 15, 12, 14, 13, DS_SCREEN_MAIN);
}
static void ResetAllSprites(WonderCardsAppData *appData)
@ -653,11 +656,11 @@ static void ResetAllSprites(WonderCardsAppData *appData)
static void ShowWcShareButtons(WonderCardsAppData *appData)
{
appData->shareScreenSelectedBtn = 0;
appData->shareScreenBtnSprites[WC_SHARE_BTN_SEND] = MainMenuUtil_InitSprite(0, appData->shareScreenBtnSprites[WC_SHARE_BTN_SEND], 72, WONDERCARD_HEIGHT, 1);
appData->shareScreenSelectedBtn = WC_SHARE_BTN_SEND;
appData->shareScreenBtnSprites[WC_SHARE_BTN_SEND] = MainMenuUtil_InitSprite(DS_SCREEN_MAIN, appData->shareScreenBtnSprites[WC_SHARE_BTN_SEND], 72, WONDERCARD_HEIGHT, 1);
Sprite_SetExplicitPriority(appData->shareScreenBtnSprites[WC_SHARE_BTN_SEND], 2);
appData->shareScreenBtnSprites[WC_SHARE_BTN_CANCEL] = MainMenuUtil_InitSprite(0, appData->shareScreenBtnSprites[WC_SHARE_BTN_CANCEL], 184, WONDERCARD_HEIGHT, 0);
appData->shareScreenBtnSprites[WC_SHARE_BTN_CANCEL] = MainMenuUtil_InitSprite(DS_SCREEN_MAIN, appData->shareScreenBtnSprites[WC_SHARE_BTN_CANCEL], 184, WONDERCARD_HEIGHT, 0);
Sprite_SetExplicitPriority(appData->shareScreenBtnSprites[WC_SHARE_BTN_CANCEL], 2);
}
@ -675,7 +678,7 @@ static void EraseMessageBoxIfInUse(Window *window, u8 skipTransfer)
}
}
static void MakeStateChangeListMenuFromEntryTemplates(WonderCardsAppData *appData, StateTransitionListMenuEntryTemplate *entries, int numEntries, Window *window, int startCursorPos)
static void MakeStateChangeListMenuFromEntryTemplates(WonderCardsAppData *appData, StateTransitionMenuOptionTemplate *entries, int numEntries, Window *window, int startCursorPos)
{
if (appData->strList) {
StringList_Free(appData->strList);
@ -787,7 +790,7 @@ static enum WonderCardsAppState DeleteWcAndOpenNextWcActionsMenu(ApplicationMana
return WC_APP_STATE_WAIT_FOR_MENU_CHOICE;
}
static enum WonderCardsAppState GoBackToWcActionsMenu(ApplicationManager *appMan)
static enum WonderCardsAppState ReturnToWcActionsMenu(ApplicationManager *appMan)
{
WonderCardsAppData *appData = ApplicationManager_Data(appMan);
@ -889,7 +892,7 @@ static BOOL SetupRemainingSharesCount(WonderCardsAppData *appData, Window *windo
static BOOL InitWondercardActionsMenu(WonderCardsAppData *appData, Window *window, TextColor unused)
{
StateTransitionListMenuEntryTemplate entries[4];
StateTransitionMenuOptionTemplate entries[NUM_WC_ACTIONS];
WonderCardsAppWindowTemplate *windowTemplate;
int numOptions = 0;
@ -906,7 +909,7 @@ static BOOL InitWondercardActionsMenu(WonderCardsAppData *appData, Window *windo
Window_ClearAndCopyToVRAM(window);
Window_Remove(window);
Window_Add(appData->bgConfig, window, BG_LAYER_MAIN_2, windowTemplate->tilemapLeft, windowTemplate->tilemapTop + (4 - numOptions) * 2, windowTemplate->width, windowTemplate->height - (4 - numOptions) * 2, PLTT_15, appData->messageBoxBaseTile);
Window_Add(appData->bgConfig, window, BG_LAYER_MAIN_2, windowTemplate->tilemapLeft, windowTemplate->tilemapTop + TEXT_LINES_TILES(NUM_WC_ACTIONS - numOptions), windowTemplate->width, windowTemplate->height - TEXT_LINES_TILES(NUM_WC_ACTIONS - numOptions), PLTT_15, appData->messageBoxBaseTile);
MakeStateChangeListMenuFromEntryTemplates(appData, entries, numOptions, window, 0);
return TRUE;
@ -938,9 +941,9 @@ static BOOL SetupEntriesCount(WonderCardsAppData *appData, Window *window, TextC
return TRUE;
}
static void DoScreenTransitionToState(WonderCardsAppData *appData, int param1, enum WonderCardsAppState nextState, enum WonderCardsAppState *state)
static void DoScreenTransitionToState(WonderCardsAppData *appData, enum FadeType fadeType, enum WonderCardsAppState nextState, enum WonderCardsAppState *state)
{
StartScreenFade(FADE_BOTH_SCREENS, param1, param1, 0x0, 6, 1, HEAP_ID_WONDER_CARDS_APP);
StartScreenFade(FADE_BOTH_SCREENS, fadeType, fadeType, COLOR_BLACK, 6, 1, HEAP_ID_WONDER_CARDS_APP);
if (state) {
*state = WC_APP_STATE_WAIT_FOR_SCREEN_TRANSITION;
@ -988,7 +991,7 @@ static void ShowWindowsForScreen(WonderCardsAppData *appData, BOOL unused, enum
Strbuf *strBuf = MessageUtil_ExpandedStrbuf(appData->strTemplate, appData->msgLoader, windowTemplates[i].entryID, appData->heapID);
{
u32 yOffset = (windowTemplates[i].leftMarginSize == CENTER_TEXT) ? Font_CalcCenterAlignment(windowTemplates[i].font, strBuf, 0, windowTemplates[i].width * 8) : windowTemplates[i].leftMarginSize;
u32 yOffset = (windowTemplates[i].leftMarginSize == CENTER_TEXT) ? Font_CalcCenterAlignment(windowTemplates[i].font, strBuf, 0, windowTemplates[i].width * TILE_WIDTH_PIXELS) : windowTemplates[i].leftMarginSize;
Text_AddPrinterWithParamsAndColor(&appData->windows[i], windowTemplates[i].font, strBuf, yOffset, windowTemplates[i].topMarginSize, TEXT_SPEED_NO_TRANSFER, color, NULL);
}
@ -1097,6 +1100,8 @@ static void LoadWondercardGraphics(WonderCardsAppData *appData, enum WonderCards
case WC_SCREEN_WONDERCARD_BACK:
Graphics_LoadTilemapToBgLayer(NARC_INDEX_GRAPHIC__MYSTERY, 5, appData->bgConfig, BG_LAYER_MAIN_1, 0, WC_BACK_TILEMAP_WIDTH * WC_BACK_TILEMAP_HEIGHT * 2, TRUE, appData->heapID);
break;
default:
break;
}
Graphics_LoadPalette(NARC_INDEX_GRAPHIC__MYSTERY, 0, PAL_LOAD_MAIN_BG, PLTT_OFFSET(11), PALETTE_SIZE_BYTES, appData->heapID);
@ -1160,7 +1165,7 @@ static void LoadPokemonSpritesForSelectedWc(WonderCardsAppData *appData)
MainMenuUtil_InitCharPlttTransferBuffers();
MainMenuUtil_InitSpriteLoader();
MainMenuUtil_LoadSprite(NARC_INDEX_GRAPHIC__MYSTERY, 26, 23, 25, 24, 0);
MainMenuUtil_LoadSprite(NARC_INDEX_GRAPHIC__MYSTERY, 26, 23, 25, 24, DS_SCREEN_MAIN);
Graphics_LoadPalette(NARC_INDEX_POKETOOL__ICONGRA__PL_POKE_ICON, PokeIconPalettesFileIndex(), PAL_LOAD_MAIN_OBJ, PLTT_OFFSET(3), 0, appData->heapID);
}
@ -1181,11 +1186,11 @@ static void LoadPokemonSpritesForSelectedWc(WonderCardsAppData *appData)
NNSG2dCharacterData *charData;
appData->selectedWcSprites[i] = MainMenuUtil_InitSprite(0, appData->selectedWcSprites[i], spriteX, 16, 10 + i);
appData->selectedWcSprites[i] = MainMenuUtil_InitSprite(DS_SCREEN_MAIN, appData->selectedWcSprites[i], spriteX, 16, 10 + i);
u8 *ncgrBuffer = Graphics_GetCharData(NARC_INDEX_POKETOOL__ICONGRA__PL_POKE_ICON, PokeIconSpriteIndex(species, FALSE, HEAP_ID_SYSTEM), FALSE, &charData, appData->heapID);
DC_FlushRange(charData->pRawData, (4 * 4 * 0x20));
GX_LoadOBJ(charData->pRawData, (0x64 + i * 4 * 4) * 0x20, (4 * 4 * 0x20));
DC_FlushRange(charData->pRawData, (4 * 4 * TILE_SIZE_4BPP));
GX_LoadOBJ(charData->pRawData, (0x64 + i * 4 * 4) * TILE_SIZE_4BPP, (4 * 4 * TILE_SIZE_4BPP));
Sprite_SetExplicitPalette(appData->selectedWcSprites[i], PokeIconPaletteIndex(species, 0, 0) + 3);
Heap_Free(ncgrBuffer);
@ -1309,7 +1314,7 @@ static BOOL RunFlipAnimFrame(WonderCardsAppData *appData)
offsetFx32 += flipAnimMan->offsetStep;
}
DC_FlushRange(buffer, SCROLL_REGISTER_SIZE * 4 * HW_LCD_HEIGHT);
DC_FlushRange(buffer, sizeof(flipAnimMan->scrollsBuffers[0]));
BufferManager_SwapBuffers(flipAnimMan->bufferManager);
return FALSE;
@ -1317,9 +1322,9 @@ static BOOL RunFlipAnimFrame(WonderCardsAppData *appData)
static void WonderCardsAppCallbackSaveGame(WonderCardsAppData *appData)
{
int stage = MainMenuUtil_SaveState();
int saveStatus = MainMenuUtil_SaveState();
if (stage == 2 || stage == 3) {
if (saveStatus == SAVE_RESULT_OK || saveStatus == SAVE_RESULT_CORRUPT) {
Sound_PlayEffect(SEQ_SE_DP_SAVE);
appData->mainCallback = NULL;
}
@ -1425,7 +1430,7 @@ static int WonderCardsApp_Main(ApplicationManager *appMan, enum WonderCardsAppSt
LoadMessageBoxGraphics(appData->bgConfig, BG_LAYER_MAIN_0, BASE_TILE_MESSAGE_BOX_FRAME, PLTT_10, appData->msgBoxFrame, HEAP_ID_WONDER_CARDS_APP);
ShowWindowsForScreen(appData, 1, WC_SCREEN_WONDERCARD_FRONT);
DoScreenTransitionToState(appData, 1, WC_APP_STATE_SELECT_WONDERCARD, state);
DoScreenTransitionToState(appData, FADE_TYPE_BRIGHTNESS_IN, WC_APP_STATE_SELECT_WONDERCARD, state);
break;
case WC_APP_STATE_SELECT_WONDERCARD: {
int selectedWcSlot = appData->selectedWondercardSlot;
@ -1436,7 +1441,7 @@ static int WonderCardsApp_Main(ApplicationManager *appMan, enum WonderCardsAppSt
selectedWcSlot = GetNextOccupiedWcSlot(appData, appData->selectedWondercardSlot, DIRECTION_NEXT);
} else if (JOY_NEW(PAD_BUTTON_B)) {
Sound_PlayEffect(SEQ_SE_CONFIRM);
DoScreenTransitionToState(appData, 0, WC_APP_STATE_EXIT, state);
DoScreenTransitionToState(appData, FADE_TYPE_BRIGHTNESS_OUT, WC_APP_STATE_EXIT, state);
} else if (JOY_NEW(PAD_BUTTON_A)) {
Sound_PlayEffect(SEQ_SE_CONFIRM);
*state = WC_APP_STATE_SHOW_WONDERCARD_ACTIONS;
@ -1511,17 +1516,17 @@ static int WonderCardsApp_Main(ApplicationManager *appMan, enum WonderCardsAppSt
*state = WC_APP_STATE_SELECT_WONDERCARD;
break;
case WC_APP_STATE_WAIT_CONFIRM_DELETION:
ProcessStateTransitionMenuInput(appMan, state, GoBackToWcActionsMenu);
ProcessStateTransitionMenuInput(appMan, state, ReturnToWcActionsMenu);
break;
case WC_APP_STATE_WAIT_CONFIRM_START_WIRELESS:
ProcessStateTransitionMenuInput(appMan, state, GoBackToWcActionsMenu);
ProcessStateTransitionMenuInput(appMan, state, ReturnToWcActionsMenu);
break;
case WC_APP_STATE_ASK_START_WIRELESS_TO_SHARE_WC:
AskConfirmStartWireless(appData, &appData->standardWindow, TEXT_COLOR(1, 2, 0));
*state = WC_APP_STATE_WAIT_CONFIRM_START_WIRELESS;
break;
case WC_APP_STATE_START_TRANSITION_TO_WC_SHARE_SCREEN:
DoScreenTransitionToState(appData, 0, WC_APP_STATE_SHOW_WC_SHARE_SCREEN, state);
DoScreenTransitionToState(appData, FADE_TYPE_BRIGHTNESS_OUT, WC_APP_STATE_SHOW_WC_SHARE_SCREEN, state);
break;
case WC_APP_STATE_SHOW_WC_SHARE_SCREEN:
WonderCardsApp_CloseListMenu(appData);
@ -1537,7 +1542,7 @@ static int WonderCardsApp_Main(ApplicationManager *appMan, enum WonderCardsAppSt
case WC_APP_STATE_PREPARE_FOR_SHARING:
PrepareSelectedWCForSharing(appData);
sub_02039734();
DoScreenTransitionToState(appData, 1, WC_APP_STATE_WAIT_FOR_PLAYERS, state);
DoScreenTransitionToState(appData, FADE_TYPE_BRIGHTNESS_IN, WC_APP_STATE_WAIT_FOR_PLAYERS, state);
break;
case WC_APP_STATE_WAIT_FOR_PLAYERS: {
int connectedPlayersCount = 0;
@ -1561,7 +1566,7 @@ static int WonderCardsApp_Main(ApplicationManager *appMan, enum WonderCardsAppSt
break;
}
case WC_APP_STATE_RETURN_AFTER_COMM_MAN_EXIT:
DoScreenTransitionToState(appData, 0, WC_APP_STATE_RETURN_TO_WC_ACTIONS, state);
DoScreenTransitionToState(appData, FADE_TYPE_BRIGHTNESS_OUT, WC_APP_STATE_RETURN_TO_WC_ACTIONS, state);
break;
case WC_APP_STATE_RETURN_TO_WC_ACTIONS:
ResetAllSprites(appData);
@ -1569,7 +1574,7 @@ static int WonderCardsApp_Main(ApplicationManager *appMan, enum WonderCardsAppSt
EraseStandardWindowIfInUse(&appData->standardWindow, FALSE);
ShowWindowsForScreen(appData, 1, WC_SCREEN_WONDERCARD_FRONT);
Font_LoadTextPalette(PAL_LOAD_MAIN_BG, PLTT_OFFSET(15), HEAP_ID_WONDER_CARDS_APP);
DoScreenTransitionToState(appData, 1, WC_APP_STATE_SHOW_WONDERCARD_ACTIONS, state);
DoScreenTransitionToState(appData, FADE_TYPE_BRIGHTNESS_IN, WC_APP_STATE_SHOW_WONDERCARD_ACTIONS, state);
break;
case WC_APP_STATE_WAIT_FOR_COMM_MAN_EXIT:
if (CommMan_IsInitialized() == FALSE) {
@ -1585,7 +1590,7 @@ static int WonderCardsApp_Main(ApplicationManager *appMan, enum WonderCardsAppSt
}
break;
case WC_APP_STATE_START_COMM_SYNC:
if (MainMenuUtil_GetSavingStatus() == 4) {
if (MainMenuUtil_GetSavingStatus() == MAIN_MENU_UTIL_SAVING_IDLE) {
CommTiming_StartSync(0x93);
*state = WC_APP_STATE_WAIT_FOR_COMM_SYNC;
}
@ -1604,7 +1609,7 @@ static int WonderCardsApp_Main(ApplicationManager *appMan, enum WonderCardsAppSt
}
break;
case WC_APP_STATE_NO_MORE_WONDERCARDS:
DoScreenTransitionToState(appData, 0, WC_APP_STATE_EXIT, state);
DoScreenTransitionToState(appData, FADE_TYPE_BRIGHTNESS_OUT, WC_APP_STATE_EXIT, state);
break;
case WC_APP_STATE_WAIT_FOR_SCREEN_TRANSITION:
if (IsScreenFadeDone()) {
@ -1618,13 +1623,16 @@ static int WonderCardsApp_Main(ApplicationManager *appMan, enum WonderCardsAppSt
break;
case WC_APP_STATE_UNUSED:
break;
default:
// Should never be reached
break;
}
if (appData->spriteList != NULL) {
SpriteList_Update(appData->spriteList);
}
MainMenuUtil_UpdateSpritesSkipGift();
MainMenuUtil_UpdateSprites();
if (appData->mainCallback) {
appData->mainCallback(appData);
@ -1755,7 +1763,7 @@ static int UpdateConnectedPlayers(WonderCardsAppData *appData, Window *window)
Text_AddPrinterWithParamsAndColor(window, FONT_SYSTEM, strBuf, 80, trainerInfoYOffset, TEXT_SPEED_NO_TRANSFER, TEXT_COLOR(14, 15, 0), NULL);
Strbuf_Free(strBuf);
trainerInfoYOffset += 24;
trainerInfoYOffset += TEXT_LINES(1) + 8;
}
}