Merge branch 'master' of https://github.com/pret/pokefirered into doc-ql
This commit is contained in:
@@ -225,16 +225,16 @@ void BagPrintTextOnWindow(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8
|
||||
|
||||
void BagPrintTextOnWin1CenteredColor0(const u8 * str, u8 unused)
|
||||
{
|
||||
u32 x = 0x48 - GetStringWidth(FONT_1, str, 0);
|
||||
AddTextPrinterParameterized3(2, FONT_1, x / 2, 1, sTextColors[0], 0, str);
|
||||
u32 x = 0x48 - GetStringWidth(FONT_NORMAL_COPY_1, str, 0);
|
||||
AddTextPrinterParameterized3(2, FONT_NORMAL_COPY_1, x / 2, 1, sTextColors[0], 0, str);
|
||||
}
|
||||
|
||||
void BagDrawDepositItemTextBox(void)
|
||||
{
|
||||
u32 x;
|
||||
DrawStdFrameWithCustomTileAndPalette(2, FALSE, 0x081, 0x0C);
|
||||
x = 0x40 - GetStringWidth(FONT_0, gText_DepositItem, 0);
|
||||
AddTextPrinterParameterized(2, FONT_0, gText_DepositItem, x / 2, 1, 0, NULL);
|
||||
x = 0x40 - GetStringWidth(FONT_SMALL, gText_DepositItem, 0);
|
||||
AddTextPrinterParameterized(2, FONT_SMALL, gText_DepositItem, x / 2, 1, 0, NULL);
|
||||
}
|
||||
|
||||
u8 ShowBagWindow(u8 whichWindow, u8 nItems)
|
||||
@@ -293,12 +293,12 @@ u8 GetBagWindow(u8 whichWindow)
|
||||
|
||||
void BagCreateYesNoMenuBottomRight(u8 taskId, const struct YesNoFuncTable * ptrs)
|
||||
{
|
||||
CreateYesNoMenuWithCallbacks(taskId, &sWindowTemplates[3], FONT_2, 0, 2, 0x064, 0x0E, ptrs);
|
||||
CreateYesNoMenuWithCallbacks(taskId, &sWindowTemplates[3], FONT_NORMAL, 0, 2, 0x064, 0x0E, ptrs);
|
||||
}
|
||||
|
||||
void BagCreateYesNoMenuTopRight(u8 taskId, const struct YesNoFuncTable * ptrs)
|
||||
{
|
||||
CreateYesNoMenuWithCallbacks(taskId, &sWindowTemplates[4], FONT_2, 0, 2, 0x064, 0x0E, ptrs);
|
||||
CreateYesNoMenuWithCallbacks(taskId, &sWindowTemplates[4], FONT_NORMAL, 0, 2, 0x064, 0x0E, ptrs);
|
||||
}
|
||||
|
||||
void BagPrintMoneyAmount(void)
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
#include "constants/moves.h"
|
||||
#include "constants/songs.h"
|
||||
|
||||
// Defines
|
||||
#define TAG_PARTICLES_POKEBALL 55020
|
||||
#define TAG_PARTICLES_GREATBALL 55021
|
||||
#define TAG_PARTICLES_SAFARIBALL 55022
|
||||
@@ -31,15 +30,10 @@
|
||||
#define TAG_PARTICLES_LUXURYBALL 55030
|
||||
#define TAG_PARTICLES_PREMIERBALL 55031
|
||||
|
||||
#define TAG_HEALTHBOX_PALS_1 55049
|
||||
#define TAG_HEALTHBOX_PALS_2 55050
|
||||
|
||||
// RAM
|
||||
u32 gMonShrinkDuration;
|
||||
u16 gMonShrinkDelta;
|
||||
u16 gMonShrinkDistance;
|
||||
|
||||
// Function Declarations
|
||||
static void AnimTask_UnusedLevelUpHealthBox_Step(u8);
|
||||
static void AnimTask_FlashHealthboxOnLevelUp_Step(u8);
|
||||
static void AnimTask_ThrowBall_WaitAnimObjComplete(u8);
|
||||
@@ -94,7 +88,6 @@ static void TimerBallOpenParticleAnimation(u8);
|
||||
static void PremierBallOpenParticleAnimation(u8);
|
||||
static void SpriteCB_SafariBaitOrRock_Init(struct Sprite *);
|
||||
|
||||
// Data
|
||||
struct CaptureStar
|
||||
{
|
||||
s8 xOffset;
|
||||
@@ -408,8 +401,6 @@ const struct SpriteTemplate gSafariRockTemplate =
|
||||
.callback = SpriteCB_SafariBaitOrRock_Init,
|
||||
};
|
||||
|
||||
// Functions
|
||||
|
||||
// Unused
|
||||
void AnimTask_LevelUpHealthBox(u8 taskId)
|
||||
{
|
||||
|
||||
+71
-46
@@ -28,9 +28,9 @@ struct BattleBackground
|
||||
static void CB2_unused(void);
|
||||
static u8 GetBattleTerrainOverride(void);
|
||||
|
||||
static const u8 gUnknown_824829C[] = {1, 2};
|
||||
static const u8 sUnused[] = {1, 2};
|
||||
|
||||
static const struct OamData gOamData_82482A0 = {
|
||||
static const struct OamData sVsLetter_V_OamData = {
|
||||
.y = 0,
|
||||
.affineMode = ST_OAM_AFFINE_DOUBLE,
|
||||
.objMode = ST_OAM_OBJ_NORMAL,
|
||||
@@ -46,7 +46,7 @@ static const struct OamData gOamData_82482A0 = {
|
||||
.affineParam = 0
|
||||
};
|
||||
|
||||
static const struct OamData gOamData_82482A8 = {
|
||||
static const struct OamData sVsLetter_S_OamData = {
|
||||
.y = 0,
|
||||
.affineMode = ST_OAM_AFFINE_DOUBLE,
|
||||
.objMode = ST_OAM_OBJ_NORMAL,
|
||||
@@ -62,38 +62,38 @@ static const struct OamData gOamData_82482A8 = {
|
||||
.affineParam = 0
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd gUnknown_82482B0[] = {
|
||||
static const union AffineAnimCmd sVsLetterAffineAnimCmds0[] = {
|
||||
AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0),
|
||||
AFFINEANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd gUnknown_82482C0[] = {
|
||||
static const union AffineAnimCmd sVsLetterAffineAnimCmds1[] = {
|
||||
AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0),
|
||||
AFFINEANIMCMD_FRAME(0x18, 0x18, 0x0, 0x80),
|
||||
AFFINEANIMCMD_FRAME(0x18, 0x18, 0x0, 0x80),
|
||||
AFFINEANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd *const gAffineAnimTable_82482E0[] = {
|
||||
gUnknown_82482B0,
|
||||
gUnknown_82482C0
|
||||
static const union AffineAnimCmd *const sVsLetterAffineAnimTable[] = {
|
||||
sVsLetterAffineAnimCmds0,
|
||||
sVsLetterAffineAnimCmds1
|
||||
};
|
||||
|
||||
static const struct SpriteTemplate sVsLetter_V_SpriteTemplate = {
|
||||
.tileTag = TAG_VS_LETTERS,
|
||||
.paletteTag = TAG_VS_LETTERS,
|
||||
.oam = &gOamData_82482A0,
|
||||
.oam = &sVsLetter_V_OamData,
|
||||
.anims = gDummySpriteAnimTable,
|
||||
.affineAnims = gAffineAnimTable_82482E0,
|
||||
.affineAnims = sVsLetterAffineAnimTable,
|
||||
.callback = SpriteCB_VsLetterDummy
|
||||
};
|
||||
|
||||
static const struct SpriteTemplate sVsLetter_S_SpriteTemplate = {
|
||||
.tileTag = TAG_VS_LETTERS,
|
||||
.paletteTag = TAG_VS_LETTERS,
|
||||
.oam = &gOamData_82482A8,
|
||||
.oam = &sVsLetter_S_OamData,
|
||||
.anims = gDummySpriteAnimTable,
|
||||
.affineAnims = gAffineAnimTable_82482E0,
|
||||
.affineAnims = sVsLetterAffineAnimTable,
|
||||
.callback = SpriteCB_VsLetterDummy
|
||||
};
|
||||
|
||||
@@ -139,8 +139,8 @@ const struct BgTemplate gBattleBgTemplates[4] = {
|
||||
}
|
||||
};
|
||||
|
||||
static const struct WindowTemplate gUnknown_8248330[] = {
|
||||
{
|
||||
static const struct WindowTemplate sStandardBattleWindowTemplates[] = {
|
||||
[B_WIN_MSG] = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 1,
|
||||
.tilemapTop = 15,
|
||||
@@ -148,7 +148,8 @@ static const struct WindowTemplate gUnknown_8248330[] = {
|
||||
.height = 4,
|
||||
.paletteNum = 0,
|
||||
.baseBlock = 0x090
|
||||
}, {
|
||||
},
|
||||
[B_WIN_ACTION_PROMPT] = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 1,
|
||||
.tilemapTop = 35,
|
||||
@@ -156,7 +157,8 @@ static const struct WindowTemplate gUnknown_8248330[] = {
|
||||
.height = 4,
|
||||
.paletteNum = 0,
|
||||
.baseBlock = 0x1c0
|
||||
}, {
|
||||
},
|
||||
[B_WIN_ACTION_MENU] = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 17,
|
||||
.tilemapTop = 35,
|
||||
@@ -164,7 +166,8 @@ static const struct WindowTemplate gUnknown_8248330[] = {
|
||||
.height = 4,
|
||||
.paletteNum = 5,
|
||||
.baseBlock = 0x190
|
||||
}, {
|
||||
},
|
||||
[B_WIN_MOVE_NAME_1] = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 2,
|
||||
.tilemapTop = 55,
|
||||
@@ -172,7 +175,8 @@ static const struct WindowTemplate gUnknown_8248330[] = {
|
||||
.height = 2,
|
||||
.paletteNum = 5,
|
||||
.baseBlock = 0x300
|
||||
}, {
|
||||
},
|
||||
[B_WIN_MOVE_NAME_2] = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 11,
|
||||
.tilemapTop = 55,
|
||||
@@ -180,7 +184,8 @@ static const struct WindowTemplate gUnknown_8248330[] = {
|
||||
.height = 2,
|
||||
.paletteNum = 5,
|
||||
.baseBlock = 0x310
|
||||
}, {
|
||||
},
|
||||
[B_WIN_MOVE_NAME_3] = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 2,
|
||||
.tilemapTop = 57,
|
||||
@@ -188,7 +193,8 @@ static const struct WindowTemplate gUnknown_8248330[] = {
|
||||
.height = 2,
|
||||
.paletteNum = 5,
|
||||
.baseBlock = 0x320
|
||||
}, {
|
||||
},
|
||||
[B_WIN_MOVE_NAME_4] = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 11,
|
||||
.tilemapTop = 57,
|
||||
@@ -196,7 +202,8 @@ static const struct WindowTemplate gUnknown_8248330[] = {
|
||||
.height = 2,
|
||||
.paletteNum = 5,
|
||||
.baseBlock = 0x330
|
||||
}, {
|
||||
},
|
||||
[B_WIN_PP] = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 21,
|
||||
.tilemapTop = 55,
|
||||
@@ -204,7 +211,8 @@ static const struct WindowTemplate gUnknown_8248330[] = {
|
||||
.height = 2,
|
||||
.paletteNum = 5,
|
||||
.baseBlock = 0x290
|
||||
}, {
|
||||
},
|
||||
[B_WIN_MOVE_TYPE] = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 21,
|
||||
.tilemapTop = 57,
|
||||
@@ -212,7 +220,8 @@ static const struct WindowTemplate gUnknown_8248330[] = {
|
||||
.height = 2,
|
||||
.paletteNum = 5,
|
||||
.baseBlock = 0x296
|
||||
}, {
|
||||
},
|
||||
[B_WIN_PP_REMAINING] = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 24,
|
||||
.tilemapTop = 55,
|
||||
@@ -220,7 +229,8 @@ static const struct WindowTemplate gUnknown_8248330[] = {
|
||||
.height = 2,
|
||||
.paletteNum = 5,
|
||||
.baseBlock = 0x2a6
|
||||
}, {
|
||||
},
|
||||
[B_WIN_DUMMY] = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 25,
|
||||
.tilemapTop = 57,
|
||||
@@ -228,7 +238,8 @@ static const struct WindowTemplate gUnknown_8248330[] = {
|
||||
.height = 0,
|
||||
.paletteNum = 5,
|
||||
.baseBlock = 0x2b0
|
||||
}, {
|
||||
},
|
||||
[B_WIN_SWITCH_PROMPT] = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 21,
|
||||
.tilemapTop = 55,
|
||||
@@ -236,7 +247,8 @@ static const struct WindowTemplate gUnknown_8248330[] = {
|
||||
.height = 4,
|
||||
.paletteNum = 5,
|
||||
.baseBlock = 0x2b0
|
||||
}, {
|
||||
},
|
||||
[B_WIN_LEVEL_UP_BOX] = {
|
||||
.bg = 1,
|
||||
.tilemapLeft = 19,
|
||||
.tilemapTop = 8,
|
||||
@@ -244,7 +256,8 @@ static const struct WindowTemplate gUnknown_8248330[] = {
|
||||
.height = 11,
|
||||
.paletteNum = 5,
|
||||
.baseBlock = 0x100
|
||||
}, {
|
||||
},
|
||||
[B_WIN_LEVEL_UP_BANNER] = {
|
||||
.bg = 2,
|
||||
.tilemapLeft = 18,
|
||||
.tilemapTop = 0,
|
||||
@@ -252,7 +265,8 @@ static const struct WindowTemplate gUnknown_8248330[] = {
|
||||
.height = 3,
|
||||
.paletteNum = 6,
|
||||
.baseBlock = 0x16e
|
||||
}, {
|
||||
},
|
||||
[B_WIN_YESNO] = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 25,
|
||||
.tilemapTop = 9,
|
||||
@@ -260,7 +274,8 @@ static const struct WindowTemplate gUnknown_8248330[] = {
|
||||
.height = 4,
|
||||
.paletteNum = 5,
|
||||
.baseBlock = 0x100
|
||||
}, {
|
||||
},
|
||||
[B_WIN_VS_PLAYER] = {
|
||||
.bg = 1,
|
||||
.tilemapLeft = 2,
|
||||
.tilemapTop = 3,
|
||||
@@ -268,7 +283,8 @@ static const struct WindowTemplate gUnknown_8248330[] = {
|
||||
.height = 2,
|
||||
.paletteNum = 5,
|
||||
.baseBlock = 0x020
|
||||
}, {
|
||||
},
|
||||
[B_WIN_VS_OPPONENT] = {
|
||||
.bg = 2,
|
||||
.tilemapLeft = 2,
|
||||
.tilemapTop = 3,
|
||||
@@ -276,7 +292,8 @@ static const struct WindowTemplate gUnknown_8248330[] = {
|
||||
.height = 2,
|
||||
.paletteNum = 5,
|
||||
.baseBlock = 0x040
|
||||
}, {
|
||||
},
|
||||
[B_WIN_VS_MULTI_PLAYER_1] = {
|
||||
.bg = 1,
|
||||
.tilemapLeft = 2,
|
||||
.tilemapTop = 2,
|
||||
@@ -284,7 +301,8 @@ static const struct WindowTemplate gUnknown_8248330[] = {
|
||||
.height = 2,
|
||||
.paletteNum = 5,
|
||||
.baseBlock = 0x020
|
||||
}, {
|
||||
},
|
||||
[B_WIN_VS_MULTI_PLAYER_2] = {
|
||||
.bg = 2,
|
||||
.tilemapLeft = 2,
|
||||
.tilemapTop = 2,
|
||||
@@ -292,7 +310,8 @@ static const struct WindowTemplate gUnknown_8248330[] = {
|
||||
.height = 2,
|
||||
.paletteNum = 5,
|
||||
.baseBlock = 0x040
|
||||
}, {
|
||||
},
|
||||
[B_WIN_VS_MULTI_PLAYER_3] = {
|
||||
.bg = 1,
|
||||
.tilemapLeft = 2,
|
||||
.tilemapTop = 6,
|
||||
@@ -300,7 +319,8 @@ static const struct WindowTemplate gUnknown_8248330[] = {
|
||||
.height = 2,
|
||||
.paletteNum = 5,
|
||||
.baseBlock = 0x060
|
||||
}, {
|
||||
},
|
||||
[B_WIN_VS_MULTI_PLAYER_4] = {
|
||||
.bg = 2,
|
||||
.tilemapLeft = 2,
|
||||
.tilemapTop = 6,
|
||||
@@ -308,7 +328,8 @@ static const struct WindowTemplate gUnknown_8248330[] = {
|
||||
.height = 2,
|
||||
.paletteNum = 5,
|
||||
.baseBlock = 0x080
|
||||
}, {
|
||||
},
|
||||
[B_WIN_VS_OUTCOME_DRAW] = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 11,
|
||||
.tilemapTop = 2,
|
||||
@@ -316,7 +337,8 @@ static const struct WindowTemplate gUnknown_8248330[] = {
|
||||
.height = 2,
|
||||
.paletteNum = 0,
|
||||
.baseBlock = 0x0a0
|
||||
}, {
|
||||
},
|
||||
[B_WIN_VS_OUTCOME_LEFT] = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 4,
|
||||
.tilemapTop = 2,
|
||||
@@ -324,7 +346,8 @@ static const struct WindowTemplate gUnknown_8248330[] = {
|
||||
.height = 2,
|
||||
.paletteNum = 0,
|
||||
.baseBlock = 0x0a0
|
||||
}, {
|
||||
},
|
||||
[B_WIN_VS_OUTCOME_RIGHT] = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 19,
|
||||
.tilemapTop = 2,
|
||||
@@ -332,7 +355,8 @@ static const struct WindowTemplate gUnknown_8248330[] = {
|
||||
.height = 2,
|
||||
.paletteNum = 0,
|
||||
.baseBlock = 0x0b0
|
||||
}, {
|
||||
},
|
||||
[B_WIN_OAK_OLD_MAN] = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 2,
|
||||
.tilemapTop = 15,
|
||||
@@ -340,7 +364,8 @@ static const struct WindowTemplate gUnknown_8248330[] = {
|
||||
.height = 4,
|
||||
.paletteNum = 7,
|
||||
.baseBlock = 0x090
|
||||
}, DUMMY_WIN_TEMPLATE
|
||||
},
|
||||
DUMMY_WIN_TEMPLATE
|
||||
};
|
||||
|
||||
static const u32 sBattleTerrainPalette_Grass[] = INCBIN_U32("graphics/battle_terrain/grass/terrain.gbapal.lz");
|
||||
@@ -649,7 +674,7 @@ void BattleInitBgsAndWindows(void)
|
||||
{
|
||||
ResetBgsAndClearDma3BusyFlags(FALSE);
|
||||
InitBgsFromTemplates(0, gBattleBgTemplates, NELEMS(gBattleBgTemplates));
|
||||
InitWindows(gUnknown_8248330);
|
||||
InitWindows(sStandardBattleWindowTemplates);
|
||||
DeactivateAllTextPrinters();
|
||||
}
|
||||
|
||||
@@ -688,10 +713,10 @@ void DrawMainBattleBackground(void)
|
||||
|
||||
void LoadBattleTextboxAndBackground(void)
|
||||
{
|
||||
LZDecompressVram(gBattleTextboxTiles, (void *)BG_CHAR_ADDR(0));
|
||||
CopyToBgTilemapBuffer(0, gBattleTextboxTilemap, 0, 0x000);
|
||||
LZDecompressVram(gBattleInterface_Textbox_Gfx, (void *)BG_CHAR_ADDR(0));
|
||||
CopyToBgTilemapBuffer(0, gBattleInterface_Textbox_Tilemap, 0, 0x000);
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
LoadCompressedPalette(gBattleTextboxPalette, 0x00, 0x40);
|
||||
LoadCompressedPalette(gBattleInterface_Textbox_Pal, 0x00, 0x40);
|
||||
LoadBattleMenuWindowGfx();
|
||||
DrawMainBattleBackground();
|
||||
}
|
||||
@@ -1051,14 +1076,14 @@ bool8 LoadChosenBattleElement(u8 caseId)
|
||||
switch (caseId)
|
||||
{
|
||||
case 0:
|
||||
LZDecompressVram(gBattleTextboxTiles, (void *)BG_CHAR_ADDR(0));
|
||||
LZDecompressVram(gBattleInterface_Textbox_Gfx, (void *)BG_CHAR_ADDR(0));
|
||||
break;
|
||||
case 1:
|
||||
CopyToBgTilemapBuffer(0, gBattleTextboxTilemap, 0, 0x000);
|
||||
CopyToBgTilemapBuffer(0, gBattleInterface_Textbox_Tilemap, 0, 0x000);
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
break;
|
||||
case 2:
|
||||
LoadCompressedPalette(gBattleTextboxPalette, 0x00, 0x40);
|
||||
LoadCompressedPalette(gBattleInterface_Textbox_Pal, 0x00, 0x40);
|
||||
break;
|
||||
case 3:
|
||||
battleScene = GetBattleTerrainOverride();
|
||||
|
||||
@@ -519,7 +519,7 @@ void TryReceiveLinkBattleData(void)
|
||||
|
||||
if (gReceivedRemoteLinkPlayers != 0 && (gBattleTypeFlags & BATTLE_TYPE_LINK_IN_BATTLE) && (gLinkPlayers[0].linkType == 0x2211))
|
||||
{
|
||||
LinkRfu_DestroyIdleTask();
|
||||
DestroyTask_RfuIdle();
|
||||
for (i = 0; i < GetLinkPlayerCount(); i++)
|
||||
{
|
||||
if (GetBlockReceivedStatus() & gBitTable[i])
|
||||
|
||||
@@ -98,11 +98,11 @@ static const struct CompressedSpriteSheet sSpriteSheets_HealthBar[MAX_BATTLERS_C
|
||||
static const struct SpritePalette sSpritePalettes_HealthBoxHealthBar[2] =
|
||||
{
|
||||
{
|
||||
.data = gBattleInterface_BallStatusBarPal,
|
||||
.data = gBattleInterface_Healthbox_Pal,
|
||||
.tag = TAG_HEALTHBOX_PAL,
|
||||
},
|
||||
{
|
||||
.data = gBattleInterface_BallDisplayPal,
|
||||
.data = gBattleInterface_Healthbar_Pal,
|
||||
.tag = TAG_HEALTHBAR_PAL,
|
||||
},
|
||||
};
|
||||
|
||||
+756
-713
File diff suppressed because it is too large
Load Diff
+7
-11
@@ -278,31 +278,27 @@ const struct OamData gOamData_BattlerPlayer =
|
||||
.affineParam = 0,
|
||||
};
|
||||
|
||||
// not used
|
||||
static const union AnimCmd gUnknown_824F020[] =
|
||||
static const union AnimCmd sAnim_Unused[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 5),
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
// not used
|
||||
static const union AnimCmd *const gUnknown_824F028[] =
|
||||
static const union AnimCmd *const sAnims_Unused[] =
|
||||
{
|
||||
gUnknown_824F020,
|
||||
sAnim_Unused,
|
||||
};
|
||||
|
||||
// not used
|
||||
static const union AffineAnimCmd gUnknown_824F02C[] =
|
||||
static const union AffineAnimCmd sAffineAnim_Unused[] =
|
||||
{
|
||||
AFFINEANIMCMD_FRAME(-0x10, 0x0, 0, 4),
|
||||
AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 0x3C),
|
||||
AFFINEANIMCMD_JUMP(1),
|
||||
};
|
||||
|
||||
// not used
|
||||
static const union AffineAnimCmd *const gUnknown_824F044[] =
|
||||
static const union AffineAnimCmd *const sAffineAnims_Unused[] =
|
||||
{
|
||||
gUnknown_824F02C,
|
||||
sAffineAnim_Unused,
|
||||
};
|
||||
|
||||
static const s8 sPlayerThrowXTranslation[] = { -32, -16, -16, -32, -32, 0, 0, 0 };
|
||||
@@ -1773,7 +1769,7 @@ void CB2_InitEndLinkBattle(void)
|
||||
gBattle_BG3_X = 0;
|
||||
gBattle_BG3_Y = 0;
|
||||
InitBattleBgsVideo();
|
||||
LoadCompressedPalette(gBattleTextboxPalette, 0, 64);
|
||||
LoadCompressedPalette(gBattleInterface_Textbox_Pal, 0, 64);
|
||||
LoadBattleMenuWindowGfx();
|
||||
ResetSpriteData();
|
||||
ResetTasks();
|
||||
|
||||
+31
-31
@@ -1292,7 +1292,7 @@ static const u8 sText_RightArrow2[] = _("{RIGHT_ARROW_2}");
|
||||
static const u8 sText_Plus[] = _("{PLUS}");
|
||||
static const u8 sText_Dash[] = _("-");
|
||||
|
||||
static const u8 sText_MaxHP[] = _("{FONT_0}Max{FONT_2} HP");
|
||||
static const u8 sText_MaxHP[] = _("{FONT_SMALL}Max{FONT_NORMAL} HP");
|
||||
static const u8 sText_Attack[] = _("ATTACK ");
|
||||
static const u8 sText_Defense[] = _("DEFENSE");
|
||||
static const u8 sText_SpAtk[] = _("SP. ATK");
|
||||
@@ -2195,7 +2195,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
|
||||
|| *src == B_TXT_TRAINER2_LOSE_TEXT || *src == B_TXT_TRAINER2_WIN_TEXT)
|
||||
{
|
||||
dst[dstId++] = EXT_CTRL_CODE_BEGIN;
|
||||
dst[dstId++] = EXT_CTRL_CODE_WAIT_BUTTON;
|
||||
dst[dstId++] = EXT_CTRL_CODE_PAUSE_UNTIL_PRESS;
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -2407,7 +2407,7 @@ static void ChooseTypeOfMoveUsedString(u8 *dst)
|
||||
static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = {
|
||||
[B_WIN_MSG] = {
|
||||
.fillValue = PIXEL_FILL(0xf),
|
||||
.fontId = FONT_2,
|
||||
.fontId = FONT_NORMAL,
|
||||
.x = 2,
|
||||
.y = 2,
|
||||
.letterSpacing = 0,
|
||||
@@ -2419,7 +2419,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = {
|
||||
},
|
||||
[B_WIN_ACTION_PROMPT] = {
|
||||
.fillValue = PIXEL_FILL(0xf),
|
||||
.fontId = FONT_2,
|
||||
.fontId = FONT_NORMAL,
|
||||
.x = 2,
|
||||
.y = 2,
|
||||
.letterSpacing = 0,
|
||||
@@ -2431,7 +2431,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = {
|
||||
},
|
||||
[B_WIN_ACTION_MENU] = {
|
||||
.fillValue = PIXEL_FILL(0xe),
|
||||
.fontId = FONT_1,
|
||||
.fontId = FONT_NORMAL_COPY_1,
|
||||
.x = 0,
|
||||
.y = 2,
|
||||
.letterSpacing = 0,
|
||||
@@ -2443,7 +2443,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = {
|
||||
},
|
||||
[B_WIN_MOVE_NAME_1] = {
|
||||
.fillValue = PIXEL_FILL(0xe),
|
||||
.fontId = FONT_0,
|
||||
.fontId = FONT_SMALL,
|
||||
.x = 0,
|
||||
.y = 1,
|
||||
.letterSpacing = 0,
|
||||
@@ -2455,7 +2455,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = {
|
||||
},
|
||||
[B_WIN_MOVE_NAME_2] = {
|
||||
.fillValue = PIXEL_FILL(0xe),
|
||||
.fontId = FONT_0,
|
||||
.fontId = FONT_SMALL,
|
||||
.x = 0,
|
||||
.y = 1,
|
||||
.letterSpacing = 0,
|
||||
@@ -2467,7 +2467,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = {
|
||||
},
|
||||
[B_WIN_MOVE_NAME_3] = {
|
||||
.fillValue = PIXEL_FILL(0xe),
|
||||
.fontId = FONT_0,
|
||||
.fontId = FONT_SMALL,
|
||||
.x = 0,
|
||||
.y = 1,
|
||||
.letterSpacing = 0,
|
||||
@@ -2479,7 +2479,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = {
|
||||
},
|
||||
[B_WIN_MOVE_NAME_4] = {
|
||||
.fillValue = PIXEL_FILL(0xe),
|
||||
.fontId = FONT_0,
|
||||
.fontId = FONT_SMALL,
|
||||
.x = 0,
|
||||
.y = 1,
|
||||
.letterSpacing = 0,
|
||||
@@ -2491,7 +2491,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = {
|
||||
},
|
||||
[B_WIN_PP] = {
|
||||
.fillValue = PIXEL_FILL(0xe),
|
||||
.fontId = FONT_0,
|
||||
.fontId = FONT_SMALL,
|
||||
.x = 0,
|
||||
.y = 2,
|
||||
.letterSpacing = 0,
|
||||
@@ -2503,7 +2503,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = {
|
||||
},
|
||||
[B_WIN_MOVE_TYPE] = {
|
||||
.fillValue = PIXEL_FILL(0xe),
|
||||
.fontId = FONT_0,
|
||||
.fontId = FONT_SMALL,
|
||||
.x = 0,
|
||||
.y = 2,
|
||||
.letterSpacing = 0,
|
||||
@@ -2515,7 +2515,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = {
|
||||
},
|
||||
[B_WIN_PP_REMAINING] = {
|
||||
.fillValue = PIXEL_FILL(0xe),
|
||||
.fontId = FONT_1,
|
||||
.fontId = FONT_NORMAL_COPY_1,
|
||||
.x = 10,
|
||||
.y = 2,
|
||||
.letterSpacing = 0,
|
||||
@@ -2527,7 +2527,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = {
|
||||
},
|
||||
[B_WIN_DUMMY] = {
|
||||
.fillValue = PIXEL_FILL(0xe),
|
||||
.fontId = FONT_1,
|
||||
.fontId = FONT_NORMAL_COPY_1,
|
||||
.x = 0,
|
||||
.y = 2,
|
||||
.letterSpacing = 0,
|
||||
@@ -2539,7 +2539,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = {
|
||||
},
|
||||
[B_WIN_SWITCH_PROMPT] = {
|
||||
.fillValue = PIXEL_FILL(0xe),
|
||||
.fontId = FONT_1,
|
||||
.fontId = FONT_NORMAL_COPY_1,
|
||||
.x = 0,
|
||||
.y = 2,
|
||||
.letterSpacing = 0,
|
||||
@@ -2551,7 +2551,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = {
|
||||
},
|
||||
[B_WIN_LEVEL_UP_BOX] = {
|
||||
.fillValue = PIXEL_FILL(0xe),
|
||||
.fontId = FONT_2,
|
||||
.fontId = FONT_NORMAL,
|
||||
.x = 0,
|
||||
.y = 0,
|
||||
.letterSpacing = 0,
|
||||
@@ -2563,7 +2563,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = {
|
||||
},
|
||||
[B_WIN_LEVEL_UP_BANNER] = {
|
||||
.fillValue = PIXEL_FILL(0x0),
|
||||
.fontId = FONT_0,
|
||||
.fontId = FONT_SMALL,
|
||||
.x = 0x20,
|
||||
.y = 0,
|
||||
.letterSpacing = 0,
|
||||
@@ -2575,7 +2575,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = {
|
||||
},
|
||||
[B_WIN_YESNO] = {
|
||||
.fillValue = PIXEL_FILL(0xe),
|
||||
.fontId = FONT_2,
|
||||
.fontId = FONT_NORMAL,
|
||||
.x = 0,
|
||||
.y = 2,
|
||||
.letterSpacing = 1,
|
||||
@@ -2587,7 +2587,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = {
|
||||
},
|
||||
[B_WIN_VS_PLAYER] = {
|
||||
.fillValue = PIXEL_FILL(0xe),
|
||||
.fontId = FONT_2,
|
||||
.fontId = FONT_NORMAL,
|
||||
.x = 0,
|
||||
.y = 2,
|
||||
.letterSpacing = 0,
|
||||
@@ -2599,7 +2599,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = {
|
||||
},
|
||||
[B_WIN_VS_OPPONENT] = {
|
||||
.fillValue = PIXEL_FILL(0xe),
|
||||
.fontId = FONT_2,
|
||||
.fontId = FONT_NORMAL,
|
||||
.x = 0,
|
||||
.y = 2,
|
||||
.letterSpacing = 0,
|
||||
@@ -2611,7 +2611,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = {
|
||||
},
|
||||
[B_WIN_VS_MULTI_PLAYER_1] = {
|
||||
.fillValue = PIXEL_FILL(0xe),
|
||||
.fontId = FONT_2,
|
||||
.fontId = FONT_NORMAL,
|
||||
.x = 0,
|
||||
.y = 2,
|
||||
.letterSpacing = 0,
|
||||
@@ -2623,7 +2623,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = {
|
||||
},
|
||||
[B_WIN_VS_MULTI_PLAYER_2] = {
|
||||
.fillValue = PIXEL_FILL(0xe),
|
||||
.fontId = FONT_2,
|
||||
.fontId = FONT_NORMAL,
|
||||
.x = 0,
|
||||
.y = 2,
|
||||
.letterSpacing = 0,
|
||||
@@ -2635,7 +2635,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = {
|
||||
},
|
||||
[B_WIN_VS_MULTI_PLAYER_3] = {
|
||||
.fillValue = PIXEL_FILL(0xe),
|
||||
.fontId = FONT_2,
|
||||
.fontId = FONT_NORMAL,
|
||||
.x = 0,
|
||||
.y = 2,
|
||||
.letterSpacing = 0,
|
||||
@@ -2647,7 +2647,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = {
|
||||
},
|
||||
[B_WIN_VS_MULTI_PLAYER_4] = {
|
||||
.fillValue = PIXEL_FILL(0xe),
|
||||
.fontId = FONT_2,
|
||||
.fontId = FONT_NORMAL,
|
||||
.x = 0,
|
||||
.y = 2,
|
||||
.letterSpacing = 0,
|
||||
@@ -2659,7 +2659,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = {
|
||||
},
|
||||
[B_WIN_VS_OUTCOME_DRAW] = {
|
||||
.fillValue = PIXEL_FILL(0x0),
|
||||
.fontId = FONT_2,
|
||||
.fontId = FONT_NORMAL,
|
||||
.x = 0,
|
||||
.y = 2,
|
||||
.letterSpacing = 0,
|
||||
@@ -2671,7 +2671,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = {
|
||||
},
|
||||
[B_WIN_VS_OUTCOME_LEFT] = {
|
||||
.fillValue = PIXEL_FILL(0x0),
|
||||
.fontId = FONT_2,
|
||||
.fontId = FONT_NORMAL,
|
||||
.x = 0,
|
||||
.y = 2,
|
||||
.letterSpacing = 0,
|
||||
@@ -2683,7 +2683,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = {
|
||||
},
|
||||
[B_WIN_VS_OUTCOME_RIGHT] = {
|
||||
.fillValue = PIXEL_FILL(0x0),
|
||||
.fontId = FONT_2,
|
||||
.fontId = FONT_NORMAL,
|
||||
.x = 0,
|
||||
.y = 2,
|
||||
.letterSpacing = 0,
|
||||
@@ -2695,7 +2695,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = {
|
||||
},
|
||||
[B_WIN_OAK_OLD_MAN] = {
|
||||
.fillValue = PIXEL_FILL(0x1),
|
||||
.fontId = FONT_4,
|
||||
.fontId = FONT_MALE,
|
||||
.x = 0,
|
||||
.y = 1,
|
||||
.letterSpacing = 0,
|
||||
@@ -2709,10 +2709,10 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = {
|
||||
|
||||
static const u8 sNpcTextColorToFont[] =
|
||||
{
|
||||
[NPC_TEXT_COLOR_MALE] = FONT_4,
|
||||
[NPC_TEXT_COLOR_FEMALE] = FONT_5,
|
||||
[NPC_TEXT_COLOR_MON] = FONT_2,
|
||||
[NPC_TEXT_COLOR_NEUTRAL] = FONT_2,
|
||||
[NPC_TEXT_COLOR_MALE] = FONT_MALE,
|
||||
[NPC_TEXT_COLOR_FEMALE] = FONT_FEMALE,
|
||||
[NPC_TEXT_COLOR_MON] = FONT_NORMAL,
|
||||
[NPC_TEXT_COLOR_NEUTRAL] = FONT_NORMAL,
|
||||
};
|
||||
|
||||
// windowId: Upper 2 bits are text flags
|
||||
|
||||
@@ -486,7 +486,7 @@ static void PrintTotalRecord(struct LinkBattleRecords * records)
|
||||
}
|
||||
|
||||
StringExpandPlaceholders(gStringVar4, gString_BattleRecords_TotalRecord);
|
||||
AddTextPrinterParameterized4(0, FONT_2, 12, 24, 0, 2, sTextColor, 0, gStringVar4);
|
||||
AddTextPrinterParameterized4(0, FONT_NORMAL, 12, 24, 0, 2, sTextColor, 0, gStringVar4);
|
||||
}
|
||||
|
||||
static void PrintOpponentBattleRecord(struct LinkBattleRecord * record, u8 y)
|
||||
@@ -496,7 +496,7 @@ static void PrintOpponentBattleRecord(struct LinkBattleRecord * record, u8 y)
|
||||
|
||||
if (record->wins == 0 && record->losses == 0 && record->draws == 0)
|
||||
{
|
||||
AddTextPrinterParameterized4(0, FONT_2, 0, y, 0, 2, sTextColor, 0, gString_BattleRecords_7Dashes);
|
||||
AddTextPrinterParameterized4(0, FONT_NORMAL, 0, y, 0, 2, sTextColor, 0, gString_BattleRecords_7Dashes);
|
||||
for (i = 0; i < 3; i++)
|
||||
{
|
||||
if (i == 0)
|
||||
@@ -505,7 +505,7 @@ static void PrintOpponentBattleRecord(struct LinkBattleRecord * record, u8 y)
|
||||
x = 0x84;
|
||||
else
|
||||
x = 0xB4;
|
||||
AddTextPrinterParameterized4(0, FONT_2, x, y, 0, 2, sTextColor, 0, gString_BattleRecords_4Dashes);
|
||||
AddTextPrinterParameterized4(0, FONT_NORMAL, x, y, 0, 2, sTextColor, 0, gString_BattleRecords_4Dashes);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -533,7 +533,7 @@ static void PrintOpponentBattleRecord(struct LinkBattleRecord * record, u8 y)
|
||||
x = 0xB4;
|
||||
ConvertIntToDecimalStringN(gStringVar1, record->draws, STR_CONV_MODE_RIGHT_ALIGN, 4);
|
||||
}
|
||||
AddTextPrinterParameterized4(0, FONT_2, x, y, 0, 2, sTextColor, 0, gStringVar1);
|
||||
AddTextPrinterParameterized4(0, FONT_NORMAL, x, y, 0, 2, sTextColor, 0, gStringVar1);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -545,10 +545,10 @@ static void PrintBattleRecords(void)
|
||||
|
||||
FillWindowPixelRect(0, PIXEL_FILL(0), 0, 0, 0xD8, 0x90);
|
||||
StringExpandPlaceholders(gStringVar4, gString_BattleRecords_PlayersBattleResults);
|
||||
left = 0xD0 - GetStringWidth(FONT_2, gStringVar4, -1);
|
||||
AddTextPrinterParameterized4(0, FONT_2, left / 2, 4, 0, 2, sTextColor, 0, gStringVar4);
|
||||
left = 0xD0 - GetStringWidth(FONT_NORMAL, gStringVar4, -1);
|
||||
AddTextPrinterParameterized4(0, FONT_NORMAL, left / 2, 4, 0, 2, sTextColor, 0, gStringVar4);
|
||||
PrintTotalRecord(&gSaveBlock2Ptr->linkBattleRecords);
|
||||
AddTextPrinterParameterized4(0, FONT_2, 0x54, 0x30, 0, 2, sTextColor, 0, gString_BattleRecords_ColumnHeaders);
|
||||
AddTextPrinterParameterized4(0, FONT_NORMAL, 0x54, 0x30, 0, 2, sTextColor, 0, gString_BattleRecords_ColumnHeaders);
|
||||
for (i = 0; i < LINK_B_RECORDS_COUNT; i++)
|
||||
PrintOpponentBattleRecord(&gSaveBlock2Ptr->linkBattleRecords.entries[i], 0x3D + 14 * i);
|
||||
CommitWindow(0);
|
||||
|
||||
@@ -5824,7 +5824,7 @@ static void DrawLevelUpBannerText(void)
|
||||
|
||||
printerTemplate.currentChar = gStringVar4;
|
||||
printerTemplate.windowId = B_WIN_LEVEL_UP_BANNER;
|
||||
printerTemplate.fontId = FONT_0;
|
||||
printerTemplate.fontId = FONT_SMALL;
|
||||
printerTemplate.x = 32;
|
||||
printerTemplate.y = 0;
|
||||
printerTemplate.currentX = 32;
|
||||
|
||||
+40
-30
@@ -33,6 +33,13 @@
|
||||
#include "constants/pokemon.h"
|
||||
#include "constants/trainers.h"
|
||||
|
||||
enum {
|
||||
TRANSITION_TYPE_NORMAL,
|
||||
TRANSITION_TYPE_CAVE,
|
||||
TRANSITION_TYPE_FLASH,
|
||||
TRANSITION_TYPE_WATER,
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
TRAINER_PARAM_LOAD_VAL_8BIT,
|
||||
@@ -74,20 +81,22 @@ static EWRAM_DATA u8 *sTrainerBattleEndScript = NULL;
|
||||
static EWRAM_DATA u8 *sTrainerABattleScriptRetAddr = NULL;
|
||||
static EWRAM_DATA u16 sRivalBattleFlags = 0;
|
||||
|
||||
// The first transition is used if the enemy pokemon are lower level than our pokemon.
|
||||
// Otherwise, the second transition is used.
|
||||
static const u8 sBattleTransitionTable_Wild[][2] =
|
||||
{
|
||||
{ B_TRANSITION_SLICED_SCREEN, B_TRANSITION_WHITEFADE_IN_STRIPES },
|
||||
{ B_TRANSITION_CLOCKWISE_BLACKFADE, B_TRANSITION_GRID_SQUARES },
|
||||
{ B_TRANSITION_BLUR, B_TRANSITION_GRID_SQUARES },
|
||||
{ B_TRANSITION_BLACK_WAVE_TO_RIGHT, B_TRANSITION_FULLSCREEN_WAVE },
|
||||
[TRANSITION_TYPE_NORMAL] = {B_TRANSITION_SLICE, B_TRANSITION_WHITE_BARS_FADE},
|
||||
[TRANSITION_TYPE_CAVE] = {B_TRANSITION_CLOCKWISE_WIPE, B_TRANSITION_GRID_SQUARES},
|
||||
[TRANSITION_TYPE_FLASH] = {B_TRANSITION_BLUR, B_TRANSITION_GRID_SQUARES},
|
||||
[TRANSITION_TYPE_WATER] = {B_TRANSITION_WAVE, B_TRANSITION_RIPPLE},
|
||||
};
|
||||
|
||||
static const u8 sBattleTransitionTable_Trainer[][2] =
|
||||
{
|
||||
{ B_TRANSITION_SLIDING_POKEBALLS, B_TRANSITION_BLACK_DOODLES },
|
||||
{ B_TRANSITION_HORIZONTAL_CORRUGATE, B_TRANSITION_BIG_POKEBALL },
|
||||
{ B_TRANSITION_BLUR, B_TRANSITION_GRID_SQUARES },
|
||||
{ B_TRANSITION_DISTORTED_WAVE, B_TRANSITION_FULLSCREEN_WAVE },
|
||||
[TRANSITION_TYPE_NORMAL] = {B_TRANSITION_POKEBALLS_TRAIL, B_TRANSITION_ANGLED_WIPES},
|
||||
[TRANSITION_TYPE_CAVE] = {B_TRANSITION_SHUFFLE, B_TRANSITION_BIG_POKEBALL},
|
||||
[TRANSITION_TYPE_FLASH] = {B_TRANSITION_BLUR, B_TRANSITION_GRID_SQUARES},
|
||||
[TRANSITION_TYPE_WATER] = {B_TRANSITION_SWIRL, B_TRANSITION_RIPPLE},
|
||||
};
|
||||
|
||||
static const struct TrainerBattleParameter sOrdinaryBattleParams[] =
|
||||
@@ -182,12 +191,12 @@ static void Task_BattleStart(u8 taskId)
|
||||
if (!FldEffPoison_IsActive())
|
||||
{
|
||||
HelpSystem_Disable();
|
||||
BT_StartOnField(tTransition);
|
||||
BattleTransition_StartOnField(tTransition);
|
||||
++tState;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (BT_IsDone() == TRUE)
|
||||
if (IsBattleTransitionDone() == TRUE)
|
||||
{
|
||||
HelpSystem_Enable();
|
||||
CleanupOverworldWindowsAndTilemaps();
|
||||
@@ -294,7 +303,7 @@ void StartOldManTutorialBattle(void)
|
||||
LockPlayerFieldControls();
|
||||
gMain.savedCallback = CB2_ReturnToFieldContinueScriptPlayMapMusic;
|
||||
gBattleTypeFlags = BATTLE_TYPE_OLD_MAN_TUTORIAL;
|
||||
CreateBattleStartTask(B_TRANSITION_SLICED_SCREEN, 0);
|
||||
CreateBattleStartTask(B_TRANSITION_SLICE, 0);
|
||||
}
|
||||
|
||||
void StartScriptedWildBattle(void)
|
||||
@@ -373,9 +382,9 @@ void StartGroudonKyogreBattle(void)
|
||||
gMain.savedCallback = CB2_EndScriptedWildBattle;
|
||||
gBattleTypeFlags = BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_KYOGRE_GROUDON;
|
||||
if (gGameVersion == VERSION_FIRE_RED)
|
||||
CreateBattleStartTask(B_TRANSITION_BLACK_DOODLES, MUS_RS_VS_TRAINER);
|
||||
CreateBattleStartTask(B_TRANSITION_ANGLED_WIPES, MUS_RS_VS_TRAINER);
|
||||
else // pointless, exactly the same
|
||||
CreateBattleStartTask(B_TRANSITION_BLACK_DOODLES, MUS_RS_VS_TRAINER);
|
||||
CreateBattleStartTask(B_TRANSITION_ANGLED_WIPES, MUS_RS_VS_TRAINER);
|
||||
IncrementGameStat(GAME_STAT_TOTAL_BATTLES);
|
||||
IncrementGameStat(GAME_STAT_WILD_BATTLES);
|
||||
}
|
||||
@@ -506,26 +515,27 @@ u8 BattleSetup_GetTerrainId(void)
|
||||
|
||||
static u8 GetBattleTransitionTypeByMap(void)
|
||||
{
|
||||
u16 tileBehavior;
|
||||
u16 behavior;
|
||||
s16 x, y;
|
||||
|
||||
PlayerGetDestCoords(&x, &y);
|
||||
tileBehavior = MapGridGetMetatileBehaviorAt(x, y);
|
||||
behavior = MapGridGetMetatileBehaviorAt(x, y);
|
||||
|
||||
if (Overworld_GetFlashLevel())
|
||||
return B_TRANSITION_HORIZONTAL_CORRUGATE;
|
||||
if (!MetatileBehavior_IsSurfable(tileBehavior))
|
||||
return TRANSITION_TYPE_FLASH;
|
||||
|
||||
if (MetatileBehavior_IsSurfable(behavior))
|
||||
return TRANSITION_TYPE_WATER;
|
||||
|
||||
switch (gMapHeader.mapType)
|
||||
{
|
||||
switch (gMapHeader.mapType)
|
||||
{
|
||||
case MAP_TYPE_UNDERGROUND:
|
||||
return B_TRANSITION_DISTORTED_WAVE;
|
||||
case MAP_TYPE_UNDERWATER:
|
||||
return B_TRANSITION_BIG_POKEBALL;
|
||||
default:
|
||||
return B_TRANSITION_BLUR;
|
||||
}
|
||||
case MAP_TYPE_UNDERGROUND:
|
||||
return TRANSITION_TYPE_CAVE;
|
||||
case MAP_TYPE_UNDERWATER:
|
||||
return TRANSITION_TYPE_WATER;
|
||||
default:
|
||||
return TRANSITION_TYPE_NORMAL;
|
||||
}
|
||||
return B_TRANSITION_BIG_POKEBALL;
|
||||
}
|
||||
|
||||
static u16 GetSumOfPlayerPartyLevel(u8 numMons)
|
||||
@@ -652,7 +662,7 @@ u8 BattleSetup_GetBattleTowerBattleTransition(void)
|
||||
u8 playerLevel = GetSumOfPlayerPartyLevel(1);
|
||||
|
||||
if (enemyLevel < playerLevel)
|
||||
return B_TRANSITION_SLIDING_POKEBALLS;
|
||||
return B_TRANSITION_POKEBALLS_TRAIL;
|
||||
else
|
||||
return B_TRANSITION_BIG_POKEBALL;
|
||||
}
|
||||
@@ -797,13 +807,13 @@ const u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data)
|
||||
SetMapVarsToTrainer();
|
||||
return EventScript_TryDoDoubleTrainerBattle;
|
||||
case TRAINER_BATTLE_REMATCH_DOUBLE:
|
||||
FinishRecordingQuestLogScene();
|
||||
QL_FinishRecordingScene();
|
||||
TrainerBattleLoadArgs(sDoubleBattleParams, data);
|
||||
SetMapVarsToTrainer();
|
||||
gTrainerBattleOpponent_A = GetRematchTrainerId(gTrainerBattleOpponent_A);
|
||||
return EventScript_TryDoDoubleRematchBattle;
|
||||
case TRAINER_BATTLE_REMATCH:
|
||||
FinishRecordingQuestLogScene();
|
||||
QL_FinishRecordingScene();
|
||||
TrainerBattleLoadArgs(sOrdinaryBattleParams, data);
|
||||
SetMapVarsToTrainer();
|
||||
gTrainerBattleOpponent_A = GetRematchTrainerId(gTrainerBattleOpponent_A);
|
||||
|
||||
+4
-4
@@ -882,7 +882,7 @@ static void CB2_FinishEReaderBattle(void)
|
||||
|
||||
static void Task_WaitBT(u8 taskId)
|
||||
{
|
||||
if (BT_IsDone() == TRUE)
|
||||
if (IsBattleTransitionDone() == TRUE)
|
||||
{
|
||||
gMain.savedCallback = CB2_FinishEReaderBattle;
|
||||
CleanupOverworldWindowsAndTilemaps();
|
||||
@@ -910,7 +910,7 @@ void StartSpecialBattle(void)
|
||||
CreateTask(Task_WaitBT, 1);
|
||||
PlayMapChosenOrBattleBGM(0);
|
||||
transition = BattleSetup_GetBattleTowerBattleTransition();
|
||||
BT_StartOnField(transition);
|
||||
BattleTransition_StartOnField(transition);
|
||||
break;
|
||||
case 1: // secret base battle
|
||||
for (i = 0; i < PARTY_SIZE; i++)
|
||||
@@ -922,7 +922,7 @@ void StartSpecialBattle(void)
|
||||
CreateTask(Task_WaitBT, 1);
|
||||
PlayMapChosenOrBattleBGM(0);
|
||||
transition = BattleSetup_GetBattleTowerBattleTransition();
|
||||
BT_StartOnField(transition);
|
||||
BattleTransition_StartOnField(transition);
|
||||
break;
|
||||
case 2: // e-reader trainer battle
|
||||
ZeroEnemyPartyMons();
|
||||
@@ -936,7 +936,7 @@ void StartSpecialBattle(void)
|
||||
CreateTask(Task_WaitBT, 1);
|
||||
PlayMapChosenOrBattleBGM(0);
|
||||
transition = BattleSetup_GetBattleTowerBattleTransition();
|
||||
BT_StartOnField(transition);
|
||||
BattleTransition_StartOnField(transition);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
+1661
-1500
File diff suppressed because it is too large
Load Diff
+42
-42
@@ -969,9 +969,9 @@ static u32 QuitBerryCrush(MainCallback callback)
|
||||
#define ERROR_EXIT(exitCallback) \
|
||||
{ \
|
||||
SetMainCallback2(exitCallback); \
|
||||
Rfu.linkman_param[0] = 0; \
|
||||
Rfu.linkman_param[1] = 0; \
|
||||
Rfu.errorState = 1; \
|
||||
gRfu.errorParams[0] = 0; \
|
||||
gRfu.errorParams[1] = 0; \
|
||||
gRfu.errorState = 1; \
|
||||
}
|
||||
|
||||
|
||||
@@ -1268,11 +1268,11 @@ static u32 Cmd_PrintMessage(struct BerryCrushGame * game, u8 *args)
|
||||
if (bFlags & F_MSG_EXPAND)
|
||||
{
|
||||
StringExpandPlaceholders(gStringVar4, sMessages[bMsgId]);
|
||||
AddTextPrinterParameterized2(0, FONT_2, gStringVar4, game->textSpeed, 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
AddTextPrinterParameterized2(0, FONT_NORMAL, gStringVar4, game->textSpeed, 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
}
|
||||
else
|
||||
{
|
||||
AddTextPrinterParameterized2(0, FONT_2, sMessages[bMsgId], game->textSpeed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
AddTextPrinterParameterized2(0, FONT_NORMAL, sMessages[bMsgId], game->textSpeed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
}
|
||||
CopyWindowToVram(0, COPYWIN_FULL);
|
||||
break;
|
||||
@@ -2222,7 +2222,7 @@ static u32 Cmd_SaveGame(struct BerryCrushGame * game, u8 *args)
|
||||
if (!IsLinkTaskFinished())
|
||||
return 0;
|
||||
DrawDialogueFrame(0, FALSE);
|
||||
AddTextPrinterParameterized2(0, FONT_2, gText_SavingDontTurnOffThePower2, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
AddTextPrinterParameterized2(0, FONT_NORMAL, gText_SavingDontTurnOffThePower2, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
CopyWindowToVram(0, COPYWIN_FULL);
|
||||
CreateTask(Task_LinkFullSave, 0);
|
||||
break;
|
||||
@@ -2367,9 +2367,9 @@ static u32 Cmd_StopGame(struct BerryCrushGame * game, u8 *args)
|
||||
case 0:
|
||||
DrawDialogueFrame(0, FALSE);
|
||||
if (game->playAgainState == PLAY_AGAIN_NO_BERRIES)
|
||||
AddTextPrinterParameterized2(0, FONT_2, sMessages[MSG_NO_BERRIES], game->textSpeed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
AddTextPrinterParameterized2(0, FONT_NORMAL, sMessages[MSG_NO_BERRIES], game->textSpeed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
else
|
||||
AddTextPrinterParameterized2(0, FONT_2, sMessages[MSG_DROPPED], game->textSpeed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
AddTextPrinterParameterized2(0, FONT_NORMAL, sMessages[MSG_DROPPED], game->textSpeed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
CopyWindowToVram(0, COPYWIN_FULL);
|
||||
break;
|
||||
case 1:
|
||||
@@ -2896,8 +2896,8 @@ static void FramesToMinSec(struct BerryCrushGame_Gfx * gfx, u16 frames)
|
||||
|
||||
static void PrintTextCentered(u8 windowId, u8 left, u8 colorId, const u8 *string)
|
||||
{
|
||||
left = (left * 4) - (GetStringWidth(FONT_2, string, -1) / 2u);
|
||||
AddTextPrinterParameterized3(windowId, FONT_2, left, 0, sBerryCrushTextColorTable[colorId], 0, string);
|
||||
left = (left * 4) - (GetStringWidth(FONT_NORMAL, string, -1) / 2u);
|
||||
AddTextPrinterParameterized3(windowId, FONT_NORMAL, left, 0, sBerryCrushTextColorTable[colorId], 0, string);
|
||||
}
|
||||
|
||||
static void PrintResultsText(struct BerryCrushGame * game, u8 command, u8 x, u8 y)
|
||||
@@ -2922,9 +2922,9 @@ static void PrintResultsText(struct BerryCrushGame * game, u8 command, u8 x, u8
|
||||
if (i != 0 && bcPlayers->stats[command][i] != bcPlayers->stats[command][i - 1])
|
||||
linkIdToPrint = i;
|
||||
ConvertIntToDecimalStringN(gStringVar1, bcPlayers->stats[command][i], STR_CONV_MODE_RIGHT_ALIGN, 4);
|
||||
realX = x - GetStringWidth(FONT_2, sBCRankingHeaders[command], -1) - 4;
|
||||
AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_2, realX, y + 14 * i, sBerryCrushTextColorTable[COLORID_GRAY], 0, sBCRankingHeaders[command]);
|
||||
AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_2, realX - 24, y + 14 * i, sBerryCrushTextColorTable[COLORID_GRAY], 0, gStringVar1);
|
||||
realX = x - GetStringWidth(FONT_NORMAL, sBCRankingHeaders[command], -1) - 4;
|
||||
AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_NORMAL, realX, y + 14 * i, sBerryCrushTextColorTable[COLORID_GRAY], 0, sBCRankingHeaders[command]);
|
||||
AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_NORMAL, realX - 24, y + 14 * i, sBerryCrushTextColorTable[COLORID_GRAY], 0, gStringVar1);
|
||||
break;
|
||||
case RESULTS_PAGE_RANDOM:
|
||||
// Neatness
|
||||
@@ -2943,7 +2943,7 @@ static void PrintResultsText(struct BerryCrushGame * game, u8 command, u8 x, u8
|
||||
ConvertIntToDecimalStringN(gStringVar2, realX, STR_CONV_MODE_LEADING_ZEROS, 2);
|
||||
StringExpandPlaceholders(gStringVar4, sBCRankingHeaders[command]);
|
||||
realX2 = x - 4;
|
||||
AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_2, realX2 - GetStringWidth(FONT_2, gStringVar4, 0), y + 14 * i, sBerryCrushTextColorTable[COLORID_GRAY], 0, gStringVar4);
|
||||
AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_NORMAL, realX2 - GetStringWidth(FONT_NORMAL, gStringVar4, 0), y + 14 * i, sBerryCrushTextColorTable[COLORID_GRAY], 0, gStringVar4);
|
||||
break;
|
||||
case RESULTS_PAGE_CRUSHING:
|
||||
// Berry names
|
||||
@@ -2954,7 +2954,7 @@ static void PrintResultsText(struct BerryCrushGame * game, u8 command, u8 x, u8
|
||||
j = 0;
|
||||
StringCopy(gStringVar1, gBerries[j].name);
|
||||
StringExpandPlaceholders(gStringVar4, sBCRankingHeaders[command]);
|
||||
AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_2, x - GetStringWidth(FONT_2, gStringVar4, -1) - 4, y + 14 * i, sBerryCrushTextColorTable[COLORID_GRAY], 0, gStringVar4);
|
||||
AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_NORMAL, x - GetStringWidth(FONT_NORMAL, gStringVar4, -1) - 4, y + 14 * i, sBerryCrushTextColorTable[COLORID_GRAY], 0, gStringVar4);
|
||||
break;
|
||||
}
|
||||
if (linkPlayerId == game->localId)
|
||||
@@ -2964,7 +2964,7 @@ static void PrintResultsText(struct BerryCrushGame * game, u8 command, u8 x, u8
|
||||
gStringVar3[0] = linkIdToPrint + CHAR_1;
|
||||
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, game->players[linkPlayerId].name);
|
||||
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gStringVar3);
|
||||
AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_2, 4, y + 14 * i, sBerryCrushTextColorTable[COLORID_GRAY], 0, gStringVar4);
|
||||
AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_NORMAL, 4, y + 14 * i, sBerryCrushTextColorTable[COLORID_GRAY], 0, gStringVar4);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2977,30 +2977,30 @@ static void printCrushingResults(struct BerryCrushGame * game)
|
||||
u8 y = GetWindowAttribute(game->gfx.resultsWindowId, WINDOW_HEIGHT) * 8 - 42;
|
||||
|
||||
FramesToMinSec(&game->gfx, players->time);
|
||||
AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_2, 2, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gText_TimeColon);
|
||||
AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_NORMAL, 2, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gText_TimeColon);
|
||||
|
||||
x = 190 - (u8)GetStringWidth(FONT_2, gText_SpaceSec, 0);
|
||||
AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_2, x, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gText_SpaceSec);
|
||||
x = 190 - (u8)GetStringWidth(FONT_NORMAL, gText_SpaceSec, 0);
|
||||
AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_NORMAL, x, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gText_SpaceSec);
|
||||
|
||||
x -= 32;
|
||||
ConvertIntToDecimalStringN(gStringVar1, game->gfx.secondsInt, STR_CONV_MODE_LEADING_ZEROS, 2);
|
||||
ConvertIntToDecimalStringN(gStringVar2, game->gfx.secondsFrac, STR_CONV_MODE_LEADING_ZEROS, 2);
|
||||
StringExpandPlaceholders(gStringVar4, gText_XDotY2);
|
||||
AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_2, x, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gStringVar4);
|
||||
AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_NORMAL, x, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gStringVar4);
|
||||
|
||||
x -= (u8)GetStringWidth(FONT_2, gText_SpaceMin, 0) + 3;
|
||||
AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_2, x, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gText_SpaceMin);
|
||||
x -= (u8)GetStringWidth(FONT_NORMAL, gText_SpaceMin, 0) + 3;
|
||||
AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_NORMAL, x, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gText_SpaceMin);
|
||||
|
||||
x -= 9;
|
||||
ConvertIntToDecimalStringN(gStringVar1, game->gfx.minutes, STR_CONV_MODE_LEADING_ZEROS, 1);
|
||||
StringExpandPlaceholders(gStringVar4, gText_StrVar1);
|
||||
AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_2, x, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gStringVar4);
|
||||
AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_NORMAL, x, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gStringVar4);
|
||||
|
||||
y += 14;
|
||||
AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_2, 2, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gText_PressingSpeed);
|
||||
AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_NORMAL, 2, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gText_PressingSpeed);
|
||||
|
||||
x = 190 - (u8)GetStringWidth(FONT_2, gText_TimesPerSec, 0);
|
||||
AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_3, x, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gText_TimesPerSec);
|
||||
x = 190 - (u8)GetStringWidth(FONT_NORMAL, gText_TimesPerSec, 0);
|
||||
AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_NORMAL_COPY_2, x, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gText_TimesPerSec);
|
||||
|
||||
for (i = 0; i < 8; ++i)
|
||||
if (((u8)game->pressingSpeed >> (7 - i)) & 1)
|
||||
@@ -3010,17 +3010,17 @@ static void printCrushingResults(struct BerryCrushGame * game)
|
||||
StringExpandPlaceholders(gStringVar4, gText_XDotY3);
|
||||
x -= 38;
|
||||
if (game->newRecord)
|
||||
AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_2, x, y, sBerryCrushTextColorTable[COLORID_RED], 0, gStringVar4);
|
||||
AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_NORMAL, x, y, sBerryCrushTextColorTable[COLORID_RED], 0, gStringVar4);
|
||||
else
|
||||
AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_2, x, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gStringVar4);
|
||||
AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_NORMAL, x, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gStringVar4);
|
||||
|
||||
y += 14;
|
||||
AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_2, 2, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gText_Silkiness);
|
||||
AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_NORMAL, 2, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gText_Silkiness);
|
||||
|
||||
ConvertIntToDecimalStringN(gStringVar1, players->silkiness, STR_CONV_MODE_RIGHT_ALIGN, 3);
|
||||
StringExpandPlaceholders(gStringVar4, gText_Var1Percent);
|
||||
x = 190 - (u8)GetStringWidth(FONT_2, gStringVar4, 0);
|
||||
AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_2, x, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gStringVar4);
|
||||
x = 190 - (u8)GetStringWidth(FONT_NORMAL, gStringVar4, 0);
|
||||
AddTextPrinterParameterized3(game->gfx.resultsWindowId, FONT_NORMAL, x, y, sBerryCrushTextColorTable[COLORID_GRAY], 0, gStringVar4);
|
||||
}
|
||||
|
||||
static bool32 OpenResultsWindow(struct BerryCrushGame * game, struct BerryCrushGame_Gfx * spriteManager)
|
||||
@@ -3109,20 +3109,20 @@ static void Task_ShowBerryCrushRankings(u8 taskId)
|
||||
DrawStdFrameWithCustomTileAndPalette(tWindowId, 0, 0x21D, 0xD);
|
||||
break;
|
||||
case 1:
|
||||
xPos = 96 - GetStringWidth(FONT_2, gText_BerryCrush2, -1) / 2u;
|
||||
xPos = 96 - GetStringWidth(FONT_NORMAL, gText_BerryCrush2, -1) / 2u;
|
||||
AddTextPrinterParameterized3(
|
||||
tWindowId,
|
||||
FONT_2,
|
||||
FONT_NORMAL,
|
||||
xPos,
|
||||
2,
|
||||
sBerryCrushTextColorTable[COLORID_BLUE],
|
||||
0,
|
||||
gText_BerryCrush2
|
||||
);
|
||||
xPos = 96 - GetStringWidth(FONT_2, gText_PressingSpeedRankings, -1) / 2u;
|
||||
xPos = 96 - GetStringWidth(FONT_NORMAL, gText_PressingSpeedRankings, -1) / 2u;
|
||||
AddTextPrinterParameterized3(
|
||||
tWindowId,
|
||||
FONT_2,
|
||||
FONT_NORMAL,
|
||||
xPos,
|
||||
18,
|
||||
sBerryCrushTextColorTable[COLORID_BLUE],
|
||||
@@ -3136,7 +3136,7 @@ static void Task_ShowBerryCrushRankings(u8 taskId)
|
||||
StringExpandPlaceholders(gStringVar4, gText_Var1Players);
|
||||
AddTextPrinterParameterized3(
|
||||
tWindowId,
|
||||
FONT_2,
|
||||
FONT_NORMAL,
|
||||
4,
|
||||
yPos,
|
||||
sBerryCrushTextColorTable[COLORID_GRAY],
|
||||
@@ -3153,10 +3153,10 @@ static void Task_ShowBerryCrushRankings(u8 taskId)
|
||||
str = StringExpandPlaceholders(gStringVar4, gText_XDotY3);
|
||||
*str++ = CHAR_SPACE;
|
||||
StringCopy(str, gText_TimesPerSec);
|
||||
xPos = 192 - (u8)GetStringWidth(FONT_3, gStringVar4, 0);
|
||||
xPos = 192 - (u8)GetStringWidth(FONT_NORMAL_COPY_2, gStringVar4, 0);
|
||||
AddTextPrinterParameterized3(
|
||||
tWindowId,
|
||||
FONT_3,
|
||||
FONT_NORMAL_COPY_2,
|
||||
xPos,
|
||||
yPos,
|
||||
sBerryCrushTextColorTable[COLORID_GRAY],
|
||||
@@ -3239,8 +3239,8 @@ static void DrawPlayerNameWindows(struct BerryCrushGame * game)
|
||||
{
|
||||
AddTextPrinterParameterized4(
|
||||
game->gfx.nameWindowIds[i],
|
||||
FONT_2,
|
||||
36 - GetStringWidth(FONT_2, game->players[i].name, 0) / 2u,
|
||||
FONT_NORMAL,
|
||||
36 - GetStringWidth(FONT_NORMAL, game->players[i].name, 0) / 2u,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
@@ -3253,8 +3253,8 @@ static void DrawPlayerNameWindows(struct BerryCrushGame * game)
|
||||
{
|
||||
AddTextPrinterParameterized4(
|
||||
game->gfx.nameWindowIds[i],
|
||||
FONT_2,
|
||||
36 - GetStringWidth(FONT_2, game->players[i].name, 0) / 2u,
|
||||
FONT_NORMAL,
|
||||
36 - GetStringWidth(FONT_NORMAL, game->players[i].name, 0) / 2u,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
|
||||
+38
-38
@@ -458,11 +458,11 @@ static void CB2_InitBerryPouch(void)
|
||||
{
|
||||
while (1)
|
||||
{
|
||||
if (MenuHelpers_CallLinkSomething() == TRUE)
|
||||
if (IsActiveOverworldLinkBusy() == TRUE)
|
||||
break;
|
||||
if (RunBerryPouchInit() == TRUE)
|
||||
break;
|
||||
if (MenuHelpers_LinkSomething() == TRUE)
|
||||
if (MenuHelpers_IsLinkActive() == TRUE)
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -499,7 +499,7 @@ static bool8 RunBerryPouchInit(void)
|
||||
gMain.state++;
|
||||
break;
|
||||
case 6:
|
||||
if (!MenuHelpers_LinkSomething())
|
||||
if (!MenuHelpers_IsLinkActive())
|
||||
ResetTasks();
|
||||
gMain.state++;
|
||||
break;
|
||||
@@ -673,7 +673,7 @@ static void SetUpListMenuTemplate(void)
|
||||
gMultiuseListMenuTemplate.itemVerticalPadding = 2;
|
||||
gMultiuseListMenuTemplate.upText_Y = 2;
|
||||
gMultiuseListMenuTemplate.maxShowed = sResources->listMenuMaxShowed;
|
||||
gMultiuseListMenuTemplate.fontId = FONT_2;
|
||||
gMultiuseListMenuTemplate.fontId = FONT_NORMAL;
|
||||
gMultiuseListMenuTemplate.cursorPal = 2;
|
||||
gMultiuseListMenuTemplate.fillValue = 0;
|
||||
gMultiuseListMenuTemplate.cursorShadowPal = 3;
|
||||
@@ -685,13 +685,13 @@ static void SetUpListMenuTemplate(void)
|
||||
|
||||
static void GetBerryNameAndIndexForMenu(u8 * dest, u16 itemId)
|
||||
{
|
||||
StringCopy(gStringVar4, gText_FontSize0);
|
||||
StringCopy(gStringVar4, gText_FontSmall);
|
||||
StringAppend(gStringVar4, gText_NumberClear01);
|
||||
ConvertIntToDecimalStringN(gStringVar1, itemId - FIRST_BERRY_INDEX + 1, STR_CONV_MODE_LEADING_ZEROS, 2);
|
||||
StringAppend(gStringVar4, gStringVar1);
|
||||
CopyItemName(itemId, gStringVar1);
|
||||
StringAppend(gStringVar4, sText_Space);
|
||||
StringAppend(gStringVar4, gText_FontSize2);
|
||||
StringAppend(gStringVar4, gText_FontNormal);
|
||||
StringAppend(gStringVar4, gStringVar1);
|
||||
StringCopy(dest, gStringVar4);
|
||||
}
|
||||
@@ -727,7 +727,7 @@ static void BerryPouchItemPrintFunc(u8 windowId, u32 itemId, u8 y)
|
||||
itemQuantity = BagGetQuantityByPocketPosition(POCKET_BERRY_POUCH, itemId);
|
||||
ConvertIntToDecimalStringN(gStringVar1, itemQuantity, STR_CONV_MODE_RIGHT_ALIGN, 3);
|
||||
StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1);
|
||||
BerryPouchPrint(windowId, FONT_0, gStringVar4, 110, y, 0, 0, 0xFF, 1);
|
||||
BerryPouchPrint(windowId, FONT_SMALL, gStringVar4, 110, y, 0, 0, 0xFF, 1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -742,14 +742,14 @@ static void BerryPouchSetArrowCursorAt(u8 y, u8 colorIdx)
|
||||
u8 height;
|
||||
if (colorIdx == 0xFF)
|
||||
{
|
||||
width = GetMenuCursorDimensionByFont(FONT_2, 0);
|
||||
height = GetMenuCursorDimensionByFont(FONT_2, 1);
|
||||
width = GetMenuCursorDimensionByFont(FONT_NORMAL, 0);
|
||||
height = GetMenuCursorDimensionByFont(FONT_NORMAL, 1);
|
||||
FillWindowPixelRect(0, 0, 1, y, width, height);
|
||||
CopyWindowToVram(0, COPYWIN_GFX);
|
||||
}
|
||||
else
|
||||
{
|
||||
BerryPouchPrint(0, FONT_2, gText_SelectorArrow2, 1, y, 0, 0, 0, colorIdx);
|
||||
BerryPouchPrint(0, FONT_NORMAL, gText_SelectorArrow2, 1, y, 0, 0, 0, colorIdx);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -761,7 +761,7 @@ static void PrintSelectedBerryDescription(s32 itemIdx)
|
||||
else
|
||||
str = gText_TheBerryPouchWillBePutAway;
|
||||
FillWindowPixelBuffer(1, PIXEL_FILL(0));
|
||||
BerryPouchPrint(1, FONT_2, str, 0, 2, 2, 0, 0, 0);
|
||||
BerryPouchPrint(1, FONT_NORMAL, str, 0, 2, 2, 0, 0, 0);
|
||||
}
|
||||
|
||||
static void SetDescriptionWindowBorderPalette(s32 pal)
|
||||
@@ -801,8 +801,8 @@ static void DestroyScrollIndicatorArrows(void)
|
||||
|
||||
static void PrintBerryPouchHeaderCentered(void)
|
||||
{
|
||||
u32 slack = 72 - GetStringWidth(FONT_1, gText_BerryPouch, 0);
|
||||
BerryPouchPrint(2, FONT_1, gText_BerryPouch, slack / 2, 1, 0, 0, 0, 0);
|
||||
u32 slack = 72 - GetStringWidth(FONT_NORMAL_COPY_1, gText_BerryPouch, 0);
|
||||
BerryPouchPrint(2, FONT_NORMAL_COPY_1, gText_BerryPouch, slack / 2, 1, 0, 0, 0, 0);
|
||||
}
|
||||
|
||||
void BerryPouch_CursorResetToTop(void)
|
||||
@@ -915,11 +915,11 @@ void InitTossQuantitySelectUI(u8 taskId, const u8 * str)
|
||||
u8 windowId2;
|
||||
CopySelectedListMenuItemName(data[1], gStringVar1);
|
||||
StringExpandPlaceholders(gStringVar4, str);
|
||||
BerryPouchPrint(windowId, FONT_2, gStringVar4, 0, 2, 1, 2, 0, 1);
|
||||
BerryPouchPrint(windowId, FONT_NORMAL, gStringVar4, 0, 2, 1, 2, 0, 1);
|
||||
windowId2 = GetOrCreateVariableWindow(0);
|
||||
ConvertIntToDecimalStringN(gStringVar1, 1, STR_CONV_MODE_LEADING_ZEROS, 3);
|
||||
StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1);
|
||||
BerryPouchPrint(windowId2, FONT_0, gStringVar4, 4, 10, 1, 0, 0, 1);
|
||||
BerryPouchPrint(windowId2, FONT_SMALL, gStringVar4, 4, 10, 1, 0, 0, 1);
|
||||
}
|
||||
|
||||
static void PrintxQuantityOnWindow(u8 whichWindow, s16 quantity, u8 ndigits)
|
||||
@@ -928,14 +928,14 @@ static void PrintxQuantityOnWindow(u8 whichWindow, s16 quantity, u8 ndigits)
|
||||
FillWindowPixelBuffer(windowId, PIXEL_FILL(1));
|
||||
ConvertIntToDecimalStringN(gStringVar1, quantity, STR_CONV_MODE_LEADING_ZEROS, ndigits);
|
||||
StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1);
|
||||
BerryPouchPrint(windowId, FONT_0, gStringVar4, 4, 10, 1, 0, 0, 1);
|
||||
BerryPouchPrint(windowId, FONT_SMALL, gStringVar4, 4, 10, 1, 0, 0, 1);
|
||||
}
|
||||
|
||||
static void Task_BerryPouchMain(u8 taskId)
|
||||
{
|
||||
s16 * data = gTasks[taskId].data;
|
||||
s32 menuInput;
|
||||
if (!gPaletteFade.active && MenuHelpers_CallLinkSomething() != TRUE)
|
||||
if (!gPaletteFade.active && IsActiveOverworldLinkBusy() != TRUE)
|
||||
{
|
||||
menuInput = ListMenu_ProcessInput(data[0]);
|
||||
ListMenuGetScrollAndRow(data[0], &sStaticCnt.listMenuScrollOffset, &sStaticCnt.listMenuSelectedRow);
|
||||
@@ -1005,9 +1005,9 @@ static void CreateNormalContextMenu(u8 taskId)
|
||||
sContextMenuOptions = sOptions_UseToss_Exit;
|
||||
sContextMenuNumOptions = 3;
|
||||
}
|
||||
else if (MenuHelpers_LinkSomething() == TRUE || InUnionRoom() == TRUE)
|
||||
else if (MenuHelpers_IsLinkActive() == TRUE || InUnionRoom() == TRUE)
|
||||
{
|
||||
if (!itemid_link_can_give_berry(gSpecialVar_ItemId))
|
||||
if (!IsHoldingItemAllowed(gSpecialVar_ItemId))
|
||||
{
|
||||
sContextMenuOptions = sOptions_Exit;
|
||||
sContextMenuNumOptions = 1;
|
||||
@@ -1024,12 +1024,12 @@ static void CreateNormalContextMenu(u8 taskId)
|
||||
sContextMenuNumOptions = 4;
|
||||
}
|
||||
windowId = GetOrCreateVariableWindow(sContextMenuNumOptions + 9);
|
||||
AddItemMenuActionTextPrinters(windowId, FONT_2, GetMenuCursorDimensionByFont(FONT_2, 0), 2, GetFontAttribute(FONT_2, FONTATTR_LETTER_SPACING), GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT) + 2, sContextMenuNumOptions, sContextMenuActions, sContextMenuOptions);
|
||||
Menu_InitCursor(windowId, FONT_2, 0, 2, GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT) + 2, sContextMenuNumOptions, 0);
|
||||
AddItemMenuActionTextPrinters(windowId, FONT_NORMAL, GetMenuCursorDimensionByFont(FONT_NORMAL, 0), 2, GetFontAttribute(FONT_NORMAL, FONTATTR_LETTER_SPACING), GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT) + 2, sContextMenuNumOptions, sContextMenuActions, sContextMenuOptions);
|
||||
Menu_InitCursor(windowId, FONT_NORMAL, 0, 2, GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT) + 2, sContextMenuNumOptions, 0);
|
||||
windowId2 = GetOrCreateVariableWindow(6);
|
||||
CopySelectedListMenuItemName(data[1], gStringVar1);
|
||||
StringExpandPlaceholders(gStringVar4, gText_Var1IsSelected);
|
||||
BerryPouchPrint(windowId2, FONT_2, gStringVar4, 0, 2, 1, 2, 0, 1);
|
||||
BerryPouchPrint(windowId2, FONT_NORMAL, gStringVar4, 0, 2, 1, 2, 0, 1);
|
||||
}
|
||||
|
||||
static void Task_NormalContextMenu(u8 taskId)
|
||||
@@ -1041,7 +1041,7 @@ static void Task_NormalContextMenu(u8 taskId)
|
||||
static void Task_NormalContextMenu_HandleInput(u8 taskId)
|
||||
{
|
||||
s8 input;
|
||||
if (MenuHelpers_CallLinkSomething() != TRUE)
|
||||
if (IsActiveOverworldLinkBusy() != TRUE)
|
||||
{
|
||||
input = Menu_ProcessInputNoWrapAround();
|
||||
switch (input)
|
||||
@@ -1105,7 +1105,7 @@ static void Task_AskTossMultiple(u8 taskId)
|
||||
s16 * data = gTasks[taskId].data;
|
||||
ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3);
|
||||
StringExpandPlaceholders(gStringVar4, gText_ThrowAwayStrVar2OfThisItemQM);
|
||||
BerryPouchPrint(GetOrCreateVariableWindow(7), FONT_2, gStringVar4, 0, 2, 1, 2, 0, 1);
|
||||
BerryPouchPrint(GetOrCreateVariableWindow(7), FONT_NORMAL, gStringVar4, 0, 2, 1, 2, 0, 1);
|
||||
CreateYesNoMenuWin3(taskId, &sYesNoFuncs_Toss);
|
||||
}
|
||||
|
||||
@@ -1159,7 +1159,7 @@ static void Task_TossYes(u8 taskId)
|
||||
CopySelectedListMenuItemName(data[1], gStringVar1);
|
||||
ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3);
|
||||
StringExpandPlaceholders(gStringVar4, gText_ThrewAwayStrVar2StrVar1s);
|
||||
BerryPouchPrint(GetOrCreateVariableWindow(9), FONT_2, gStringVar4, 0, 2, 1, 2, 0, 1);
|
||||
BerryPouchPrint(GetOrCreateVariableWindow(9), FONT_NORMAL, gStringVar4, 0, 2, 1, 2, 0, 1);
|
||||
gTasks[taskId].func = Task_WaitButtonThenTossBerries;
|
||||
}
|
||||
|
||||
@@ -1202,7 +1202,7 @@ static void Task_BerryPouch_Give(u8 taskId)
|
||||
|
||||
static void Task_Give_PrintThereIsNoPokemon(u8 taskId)
|
||||
{
|
||||
DisplayItemMessageInBerryPouch(taskId, FONT_2, gText_ThereIsNoPokemon, Task_WaitButtonBeforeDialogueWindowDestruction);
|
||||
DisplayItemMessageInBerryPouch(taskId, FONT_NORMAL, gText_ThereIsNoPokemon, Task_WaitButtonBeforeDialogueWindowDestruction);
|
||||
}
|
||||
|
||||
static void Task_WaitButtonBeforeDialogueWindowDestruction(u8 taskId)
|
||||
@@ -1244,11 +1244,11 @@ static void Task_ContextMenu_FromPartyGiveMenu(u8 taskId)
|
||||
{
|
||||
s16 * data = gTasks[taskId].data;
|
||||
u16 itemId = BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, data[1]);
|
||||
if (!itemid_link_can_give_berry(itemId))
|
||||
if (!IsHoldingItemAllowed(itemId))
|
||||
{
|
||||
CopyItemName(itemId, gStringVar1);
|
||||
StringExpandPlaceholders(gStringVar4, gText_TheStrVar1CantBeHeldHere);
|
||||
DisplayItemMessageInBerryPouch(taskId, FONT_2, gStringVar4, Task_WaitButtonBeforeDialogueWindowDestruction);
|
||||
DisplayItemMessageInBerryPouch(taskId, FONT_NORMAL, gStringVar4, Task_WaitButtonBeforeDialogueWindowDestruction);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1266,7 +1266,7 @@ static void Task_ContextMenu_FromPokemonPC(u8 taskId)
|
||||
static void Task_ContextMenu_Sell(u8 taskId)
|
||||
{
|
||||
s16 * data = gTasks[taskId].data;
|
||||
if (itemid_get_market_price(gSpecialVar_ItemId) == 0)
|
||||
if (ItemId_GetPrice(gSpecialVar_ItemId) == 0)
|
||||
{
|
||||
CopyItemName(gSpecialVar_ItemId, gStringVar1);
|
||||
StringExpandPlaceholders(gStringVar4, gText_OhNoICantBuyThat);
|
||||
@@ -1294,7 +1294,7 @@ static void Task_ContextMenu_Sell(u8 taskId)
|
||||
static void Task_AskSellMultiple(u8 taskId)
|
||||
{
|
||||
s16 * data = gTasks[taskId].data;
|
||||
ConvertIntToDecimalStringN(gStringVar3, itemid_get_market_price(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6);
|
||||
ConvertIntToDecimalStringN(gStringVar3, ItemId_GetPrice(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6);
|
||||
StringExpandPlaceholders(gStringVar4, gText_ICanPayThisMuch_WouldThatBeOkay);
|
||||
DisplayItemMessageInBerryPouch(taskId, GetDialogBoxFontId(), gStringVar4, Task_SellMultiple_CreateYesNoMenu);
|
||||
}
|
||||
@@ -1323,8 +1323,8 @@ static void Task_Sell_PrintSelectMultipleUI(u8 taskId)
|
||||
u8 windowId = GetOrCreateVariableWindow(1);
|
||||
ConvertIntToDecimalStringN(gStringVar1, 1, STR_CONV_MODE_LEADING_ZEROS, 2);
|
||||
StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1);
|
||||
BerryPouchPrint(windowId, FONT_0, gStringVar4, 4, 10, 1, 0, 0xFF, 1);
|
||||
SellMultiple_UpdateSellPriceDisplay(itemid_get_market_price(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, data[1])) / 2 * data[8]);
|
||||
BerryPouchPrint(windowId, FONT_SMALL, gStringVar4, 4, 10, 1, 0, 0xFF, 1);
|
||||
SellMultiple_UpdateSellPriceDisplay(ItemId_GetPrice(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, data[1])) / 2 * data[8]);
|
||||
PrintMoneyInWin2();
|
||||
CreateScrollIndicatorArrows_SellQuantity();
|
||||
gTasks[taskId].func = Task_Sell_SelectMultiple;
|
||||
@@ -1341,7 +1341,7 @@ static void Task_Sell_SelectMultiple(u8 taskId)
|
||||
if (AdjustQuantityAccordingToDPadInput(&data[8], data[2]) == TRUE)
|
||||
{
|
||||
PrintxQuantityOnWindow(1, data[8], 2);
|
||||
SellMultiple_UpdateSellPriceDisplay(itemid_get_market_price(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, data[1])) / 2 * data[8]);
|
||||
SellMultiple_UpdateSellPriceDisplay(ItemId_GetPrice(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, data[1])) / 2 * data[8]);
|
||||
}
|
||||
else if (JOY_NEW(A_BUTTON))
|
||||
{
|
||||
@@ -1374,9 +1374,9 @@ static void Task_SellYes(u8 taskId)
|
||||
PutWindowTilemap(0);
|
||||
ScheduleBgCopyTilemapToVram(0);
|
||||
CopyItemName(gSpecialVar_ItemId, gStringVar1);
|
||||
ConvertIntToDecimalStringN(gStringVar3, itemid_get_market_price(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6);
|
||||
ConvertIntToDecimalStringN(gStringVar3, ItemId_GetPrice(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6);
|
||||
StringExpandPlaceholders(gStringVar4, gText_TurnedOverItemsWorthYen);
|
||||
DisplayItemMessageInBerryPouch(taskId, FONT_2, gStringVar4, Task_SellBerries_PlaySfxAndRemoveBerries);
|
||||
DisplayItemMessageInBerryPouch(taskId, FONT_NORMAL, gStringVar4, Task_SellBerries_PlaySfxAndRemoveBerries);
|
||||
}
|
||||
|
||||
static void Task_SellBerries_PlaySfxAndRemoveBerries(u8 taskId)
|
||||
@@ -1384,7 +1384,7 @@ static void Task_SellBerries_PlaySfxAndRemoveBerries(u8 taskId)
|
||||
s16 * data = gTasks[taskId].data;
|
||||
PlaySE(SE_SHOP);
|
||||
RemoveBagItem(gSpecialVar_ItemId, data[8]);
|
||||
AddMoney(&gSaveBlock1Ptr->money, itemid_get_market_price(gSpecialVar_ItemId) / 2 * data[8]);
|
||||
AddMoney(&gSaveBlock1Ptr->money, ItemId_GetPrice(gSpecialVar_ItemId) / 2 * data[8]);
|
||||
RecordItemTransaction(gSpecialVar_ItemId, data[8], QL_EVENT_SOLD_ITEM - QL_EVENT_USED_POKEMART);
|
||||
DestroyListMenuTask(data[0], &sStaticCnt.listMenuScrollOffset, &sStaticCnt.listMenuSelectedRow);
|
||||
SortAndCountBerries();
|
||||
@@ -1491,12 +1491,12 @@ void DisplayItemMessageInBerryPouch(u8 taskId, u8 fontId, const u8 * str, TaskFu
|
||||
|
||||
static void CreateYesNoMenuWin3(u8 taskId, const struct YesNoFuncTable *ptrs)
|
||||
{
|
||||
CreateYesNoMenuWithCallbacks(taskId, &sWindowTemplates_Variable[3], FONT_2, 0, 2, 0x001, 0xE, ptrs);
|
||||
CreateYesNoMenuWithCallbacks(taskId, &sWindowTemplates_Variable[3], FONT_NORMAL, 0, 2, 0x001, 0xE, ptrs);
|
||||
}
|
||||
|
||||
static void CreateYesNoMenuWin4(u8 taskId, const struct YesNoFuncTable *ptrs)
|
||||
{
|
||||
CreateYesNoMenuWithCallbacks(taskId, &sWindowTemplates_Variable[4], FONT_2, 0, 2, 0x001, 0xE, ptrs);
|
||||
CreateYesNoMenuWithCallbacks(taskId, &sWindowTemplates_Variable[4], FONT_NORMAL, 0, 2, 0x001, 0xE, ptrs);
|
||||
}
|
||||
|
||||
static void PrintMoneyInWin2(void)
|
||||
|
||||
+2
-2
@@ -94,13 +94,13 @@ u32 GetBerryPowder(void)
|
||||
static void PrintBerryPowderAmount(u8 windowId, u32 amount, u8 x, u8 y, u8 speed)
|
||||
{
|
||||
ConvertIntToDecimalStringN(gStringVar1, amount, STR_CONV_MODE_RIGHT_ALIGN, 5);
|
||||
AddTextPrinterParameterized(windowId, FONT_0, gStringVar1, x, y, speed, NULL);
|
||||
AddTextPrinterParameterized(windowId, FONT_SMALL, gStringVar1, x, y, speed, NULL);
|
||||
}
|
||||
|
||||
static void DrawPlayerPowderAmount(u8 windowId, u16 baseBlock, u8 palette, u32 amount)
|
||||
{
|
||||
DrawStdFrameWithCustomTileAndPalette(windowId, FALSE, baseBlock, palette);
|
||||
AddTextPrinterParameterized(windowId, FONT_0, gOtherText_Powder, 0, 0, -1, NULL);
|
||||
AddTextPrinterParameterized(windowId, FONT_SMALL, gOtherText_Powder, 0, 0, -1, NULL);
|
||||
PrintBerryPowderAmount(windowId, amount, 39, 12, 0);
|
||||
}
|
||||
|
||||
|
||||
+166
-177
@@ -4,220 +4,209 @@
|
||||
#include "text.h"
|
||||
#include "sound.h"
|
||||
|
||||
// This file handles the braille font.
|
||||
// For printing braille messages, see ScrCmd_braillemessage
|
||||
|
||||
static const u8 sScrollDistances[] = {
|
||||
[OPTIONS_TEXT_SPEED_SLOW] = 1,
|
||||
[OPTIONS_TEXT_SPEED_MID] = 2,
|
||||
[OPTIONS_TEXT_SPEED_FAST] = 4,
|
||||
};
|
||||
static const u16 sFont6BrailleGlyphs[] = INCBIN_U16("graphics/fonts/font6.fwjpnfont");
|
||||
static const u16 sBrailleGlyphs[] = INCBIN_U16("graphics/fonts/braille.fwjpnfont");
|
||||
|
||||
static void DecompressGlyphFont6(u16);
|
||||
static void DecompressGlyph_Braille(u16);
|
||||
|
||||
u16 Font6Func(struct TextPrinter *textPrinter)
|
||||
u16 FontFunc_Braille(struct TextPrinter *textPrinter)
|
||||
{
|
||||
u16 char_;
|
||||
struct TextPrinterSubStruct *sub;
|
||||
struct TextPrinterSubStruct *sub = &textPrinter->subUnion.sub;
|
||||
|
||||
sub = &textPrinter->subUnion.sub;
|
||||
switch (textPrinter->state)
|
||||
{
|
||||
case 0:
|
||||
if (gMain.heldKeys & (A_BUTTON | B_BUTTON) && sub->hasPrintBeenSpedUp)
|
||||
case RENDER_STATE_HANDLE_CHAR:
|
||||
if (JOY_HELD(A_BUTTON | B_BUTTON) && sub->hasPrintBeenSpedUp)
|
||||
{
|
||||
textPrinter->delayCounter = 0;
|
||||
}
|
||||
if (textPrinter->delayCounter && textPrinter->textSpeed)
|
||||
{
|
||||
textPrinter->delayCounter--;
|
||||
if (gTextFlags.canABSpeedUpPrint && JOY_NEW(A_BUTTON | B_BUTTON))
|
||||
{
|
||||
sub->hasPrintBeenSpedUp = TRUE;
|
||||
textPrinter->delayCounter = 0;
|
||||
}
|
||||
if (textPrinter->delayCounter && textPrinter->textSpeed)
|
||||
{
|
||||
textPrinter->delayCounter --;
|
||||
if (gTextFlags.canABSpeedUpPrint && gMain.newKeys & (A_BUTTON | B_BUTTON))
|
||||
{
|
||||
sub->hasPrintBeenSpedUp = TRUE;
|
||||
textPrinter->delayCounter = 0;
|
||||
}
|
||||
return 3;
|
||||
}
|
||||
if (gTextFlags.autoScroll)
|
||||
{
|
||||
textPrinter->delayCounter = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
textPrinter->delayCounter = textPrinter->textSpeed;
|
||||
}
|
||||
return RENDER_UPDATE;
|
||||
}
|
||||
if (gTextFlags.autoScroll)
|
||||
textPrinter->delayCounter = 1;
|
||||
else
|
||||
textPrinter->delayCounter = textPrinter->textSpeed;
|
||||
|
||||
char_ = *textPrinter->printerTemplate.currentChar++;
|
||||
switch (char_)
|
||||
{
|
||||
case EOS:
|
||||
return RENDER_FINISH;
|
||||
case CHAR_NEWLINE:
|
||||
textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x;
|
||||
textPrinter->printerTemplate.currentY += gFonts[textPrinter->printerTemplate.fontId].maxLetterHeight + textPrinter->printerTemplate.lineSpacing;
|
||||
return RENDER_REPEAT;
|
||||
case PLACEHOLDER_BEGIN:
|
||||
textPrinter->printerTemplate.currentChar++;
|
||||
return RENDER_REPEAT;
|
||||
case EXT_CTRL_CODE_BEGIN:
|
||||
char_ = *textPrinter->printerTemplate.currentChar++;
|
||||
switch (char_)
|
||||
{
|
||||
case EOS:
|
||||
return 1;
|
||||
case CHAR_NEWLINE:
|
||||
textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x;
|
||||
textPrinter->printerTemplate.currentY += gFonts[textPrinter->printerTemplate.fontId].maxLetterHeight + textPrinter->printerTemplate.lineSpacing;
|
||||
return 2;
|
||||
case PLACEHOLDER_BEGIN:
|
||||
textPrinter->printerTemplate.currentChar++;
|
||||
return 2;
|
||||
case EXT_CTRL_CODE_BEGIN:
|
||||
char_ = *textPrinter->printerTemplate.currentChar++;
|
||||
switch (char_)
|
||||
{
|
||||
case 1:
|
||||
textPrinter->printerTemplate.fgColor = *textPrinter->printerTemplate.currentChar++;
|
||||
GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor);
|
||||
return 2;
|
||||
case 2:
|
||||
textPrinter->printerTemplate.bgColor = *textPrinter->printerTemplate.currentChar++;
|
||||
GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor);
|
||||
return 2;
|
||||
case 3:
|
||||
textPrinter->printerTemplate.shadowColor = *textPrinter->printerTemplate.currentChar++;
|
||||
GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor);
|
||||
return 2;
|
||||
case 4:
|
||||
textPrinter->printerTemplate.fgColor = *textPrinter->printerTemplate.currentChar;
|
||||
textPrinter->printerTemplate.bgColor = *++textPrinter->printerTemplate.currentChar;
|
||||
textPrinter->printerTemplate.shadowColor = *++textPrinter->printerTemplate.currentChar;
|
||||
textPrinter->printerTemplate.currentChar++;
|
||||
case EXT_CTRL_CODE_COLOR:
|
||||
textPrinter->printerTemplate.fgColor = *textPrinter->printerTemplate.currentChar++;
|
||||
GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor);
|
||||
return RENDER_REPEAT;
|
||||
case EXT_CTRL_CODE_HIGHLIGHT:
|
||||
textPrinter->printerTemplate.bgColor = *textPrinter->printerTemplate.currentChar++;
|
||||
GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor);
|
||||
return RENDER_REPEAT;
|
||||
case EXT_CTRL_CODE_SHADOW:
|
||||
textPrinter->printerTemplate.shadowColor = *textPrinter->printerTemplate.currentChar++;
|
||||
GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor);
|
||||
return RENDER_REPEAT;
|
||||
case EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW:
|
||||
textPrinter->printerTemplate.fgColor = *textPrinter->printerTemplate.currentChar;
|
||||
textPrinter->printerTemplate.bgColor = *++textPrinter->printerTemplate.currentChar;
|
||||
textPrinter->printerTemplate.shadowColor = *++textPrinter->printerTemplate.currentChar;
|
||||
textPrinter->printerTemplate.currentChar++;
|
||||
|
||||
GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor);
|
||||
return 2;
|
||||
case 5:
|
||||
textPrinter->printerTemplate.currentChar++;
|
||||
return 2;
|
||||
case 6:
|
||||
sub->glyphId = *textPrinter->printerTemplate.currentChar;
|
||||
textPrinter->printerTemplate.currentChar++;
|
||||
return 2;
|
||||
case 7:
|
||||
return 2;
|
||||
case 8:
|
||||
textPrinter->delayCounter = *textPrinter->printerTemplate.currentChar++;
|
||||
textPrinter->state = 6;
|
||||
return 2;
|
||||
case 9:
|
||||
textPrinter->state = 1;
|
||||
if (gTextFlags.autoScroll)
|
||||
{
|
||||
sub->autoScrollDelay = 0;
|
||||
}
|
||||
return 3;
|
||||
case 10:
|
||||
textPrinter->state = 5;
|
||||
return 3;
|
||||
case 11:
|
||||
case 16:
|
||||
textPrinter->printerTemplate.currentChar += 2;
|
||||
return 2;
|
||||
case 12:
|
||||
char_ = *++textPrinter->printerTemplate.currentChar;
|
||||
break;
|
||||
case 13:
|
||||
textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x + *textPrinter->printerTemplate.currentChar++;
|
||||
return 2;
|
||||
case 14:
|
||||
textPrinter->printerTemplate.currentY = textPrinter->printerTemplate.y + *textPrinter->printerTemplate.currentChar++;
|
||||
return 2;
|
||||
case 15:
|
||||
FillWindowPixelBuffer(textPrinter->printerTemplate.windowId, PIXEL_FILL(textPrinter->printerTemplate.bgColor));
|
||||
return 2;
|
||||
}
|
||||
break;
|
||||
case CHAR_PROMPT_CLEAR:
|
||||
textPrinter->state = 2;
|
||||
TextPrinterInitDownArrowCounters(textPrinter);
|
||||
return 3;
|
||||
case CHAR_PROMPT_SCROLL:
|
||||
textPrinter->state = 3;
|
||||
TextPrinterInitDownArrowCounters(textPrinter);
|
||||
return 3;
|
||||
case 0xF9:
|
||||
char_ = *textPrinter->printerTemplate.currentChar++| 0x100;
|
||||
break;
|
||||
case 0xF8:
|
||||
textPrinter->printerTemplate.currentChar++;
|
||||
return 0;
|
||||
}
|
||||
DecompressGlyphFont6(char_);
|
||||
CopyGlyphToWindow(textPrinter);
|
||||
textPrinter->printerTemplate.currentX += gGlyphInfo.width + textPrinter->printerTemplate.letterSpacing;
|
||||
return 0;
|
||||
case 1:
|
||||
if (TextPrinterWait(textPrinter))
|
||||
{
|
||||
textPrinter->state = 0;
|
||||
}
|
||||
return 3;
|
||||
case 2:
|
||||
if (TextPrinterWaitWithDownArrow(textPrinter))
|
||||
{
|
||||
GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor);
|
||||
return RENDER_REPEAT;
|
||||
case EXT_CTRL_CODE_PALETTE:
|
||||
textPrinter->printerTemplate.currentChar++;
|
||||
return RENDER_REPEAT;
|
||||
case EXT_CTRL_CODE_FONT:
|
||||
sub->glyphId = *textPrinter->printerTemplate.currentChar;
|
||||
textPrinter->printerTemplate.currentChar++;
|
||||
return RENDER_REPEAT;
|
||||
case EXT_CTRL_CODE_RESET_FONT:
|
||||
return RENDER_REPEAT;
|
||||
case EXT_CTRL_CODE_PAUSE:
|
||||
textPrinter->delayCounter = *textPrinter->printerTemplate.currentChar++;
|
||||
textPrinter->state = RENDER_STATE_PAUSE;
|
||||
return RENDER_REPEAT;
|
||||
case EXT_CTRL_CODE_PAUSE_UNTIL_PRESS:
|
||||
textPrinter->state = RENDER_STATE_WAIT;
|
||||
if (gTextFlags.autoScroll)
|
||||
sub->autoScrollDelay = 0;
|
||||
return RENDER_UPDATE;
|
||||
case EXT_CTRL_CODE_WAIT_SE:
|
||||
textPrinter->state = RENDER_STATE_WAIT_SE;
|
||||
return RENDER_UPDATE;
|
||||
case EXT_CTRL_CODE_PLAY_BGM:
|
||||
case EXT_CTRL_CODE_PLAY_SE:
|
||||
textPrinter->printerTemplate.currentChar += 2;
|
||||
return RENDER_REPEAT;
|
||||
case EXT_CTRL_CODE_ESCAPE:
|
||||
char_ = *++textPrinter->printerTemplate.currentChar;
|
||||
break;
|
||||
case EXT_CTRL_CODE_SHIFT_RIGHT:
|
||||
textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x + *textPrinter->printerTemplate.currentChar++;
|
||||
return RENDER_REPEAT;
|
||||
case EXT_CTRL_CODE_SHIFT_DOWN:
|
||||
textPrinter->printerTemplate.currentY = textPrinter->printerTemplate.y + *textPrinter->printerTemplate.currentChar++;
|
||||
return RENDER_REPEAT;
|
||||
case EXT_CTRL_CODE_FILL_WINDOW:
|
||||
FillWindowPixelBuffer(textPrinter->printerTemplate.windowId, PIXEL_FILL(textPrinter->printerTemplate.bgColor));
|
||||
textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x;
|
||||
textPrinter->printerTemplate.currentY = textPrinter->printerTemplate.y;
|
||||
textPrinter->state = 0;
|
||||
return RENDER_REPEAT;
|
||||
}
|
||||
return 3;
|
||||
case 3:
|
||||
if (TextPrinterWaitWithDownArrow(textPrinter))
|
||||
break;
|
||||
case CHAR_PROMPT_CLEAR:
|
||||
textPrinter->state = RENDER_STATE_CLEAR;
|
||||
TextPrinterInitDownArrowCounters(textPrinter);
|
||||
return RENDER_UPDATE;
|
||||
case CHAR_PROMPT_SCROLL:
|
||||
textPrinter->state = RENDER_STATE_SCROLL_START;
|
||||
TextPrinterInitDownArrowCounters(textPrinter);
|
||||
return RENDER_UPDATE;
|
||||
case CHAR_EXTRA_SYMBOL:
|
||||
char_ = *textPrinter->printerTemplate.currentChar++| 0x100;
|
||||
break;
|
||||
case CHAR_KEYPAD_ICON:
|
||||
textPrinter->printerTemplate.currentChar++;
|
||||
return RENDER_PRINT;
|
||||
}
|
||||
DecompressGlyph_Braille(char_);
|
||||
CopyGlyphToWindow(textPrinter);
|
||||
textPrinter->printerTemplate.currentX += gGlyphInfo.width + textPrinter->printerTemplate.letterSpacing;
|
||||
return RENDER_PRINT;
|
||||
case RENDER_STATE_WAIT:
|
||||
if (TextPrinterWait(textPrinter))
|
||||
textPrinter->state = RENDER_STATE_HANDLE_CHAR;
|
||||
return RENDER_UPDATE;
|
||||
case RENDER_STATE_CLEAR:
|
||||
if (TextPrinterWaitWithDownArrow(textPrinter))
|
||||
{
|
||||
FillWindowPixelBuffer(textPrinter->printerTemplate.windowId, PIXEL_FILL(textPrinter->printerTemplate.bgColor));
|
||||
textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x;
|
||||
textPrinter->printerTemplate.currentY = textPrinter->printerTemplate.y;
|
||||
textPrinter->state = RENDER_STATE_HANDLE_CHAR;
|
||||
}
|
||||
return RENDER_UPDATE;
|
||||
case RENDER_STATE_SCROLL_START:
|
||||
if (TextPrinterWaitWithDownArrow(textPrinter))
|
||||
{
|
||||
TextPrinterClearDownArrow(textPrinter);
|
||||
textPrinter->scrollDistance = gFonts[textPrinter->printerTemplate.fontId].maxLetterHeight + textPrinter->printerTemplate.lineSpacing;
|
||||
textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x;
|
||||
textPrinter->state = RENDER_STATE_SCROLL;
|
||||
}
|
||||
return RENDER_UPDATE;
|
||||
case RENDER_STATE_SCROLL:
|
||||
if (textPrinter->scrollDistance)
|
||||
{
|
||||
if (textPrinter->scrollDistance < sScrollDistances[gSaveBlock2Ptr->optionsTextSpeed])
|
||||
{
|
||||
TextPrinterClearDownArrow(textPrinter);
|
||||
textPrinter->scrollDistance = gFonts[textPrinter->printerTemplate.fontId].maxLetterHeight + textPrinter->printerTemplate.lineSpacing;
|
||||
textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x;
|
||||
textPrinter->state = 4;
|
||||
}
|
||||
return 3;
|
||||
case 4:
|
||||
if (textPrinter->scrollDistance)
|
||||
{
|
||||
if (textPrinter->scrollDistance < sScrollDistances[gSaveBlock2Ptr->optionsTextSpeed])
|
||||
{
|
||||
ScrollWindow(textPrinter->printerTemplate.windowId, 0, textPrinter->scrollDistance, PIXEL_FILL(textPrinter->printerTemplate.bgColor));
|
||||
textPrinter->scrollDistance = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
ScrollWindow(textPrinter->printerTemplate.windowId, 0, sScrollDistances[gSaveBlock2Ptr->optionsTextSpeed], PIXEL_FILL(textPrinter->printerTemplate.bgColor));
|
||||
textPrinter->scrollDistance -= sScrollDistances[gSaveBlock2Ptr->optionsTextSpeed];
|
||||
}
|
||||
CopyWindowToVram(textPrinter->printerTemplate.windowId, COPYWIN_GFX);
|
||||
ScrollWindow(textPrinter->printerTemplate.windowId, 0, textPrinter->scrollDistance, PIXEL_FILL(textPrinter->printerTemplate.bgColor));
|
||||
textPrinter->scrollDistance = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
textPrinter->state = 0;
|
||||
ScrollWindow(textPrinter->printerTemplate.windowId, 0, sScrollDistances[gSaveBlock2Ptr->optionsTextSpeed], PIXEL_FILL(textPrinter->printerTemplate.bgColor));
|
||||
textPrinter->scrollDistance -= sScrollDistances[gSaveBlock2Ptr->optionsTextSpeed];
|
||||
}
|
||||
return 3;
|
||||
case 5:
|
||||
if (!IsSEPlaying())
|
||||
{
|
||||
textPrinter->state = 0;
|
||||
}
|
||||
return 3;
|
||||
case 6:
|
||||
if (textPrinter->delayCounter)
|
||||
{
|
||||
textPrinter->delayCounter --;
|
||||
}
|
||||
else
|
||||
{
|
||||
textPrinter->state = 0;
|
||||
}
|
||||
return 3;
|
||||
CopyWindowToVram(textPrinter->printerTemplate.windowId, COPYWIN_GFX);
|
||||
}
|
||||
else
|
||||
{
|
||||
textPrinter->state = RENDER_STATE_HANDLE_CHAR;
|
||||
}
|
||||
return RENDER_UPDATE;
|
||||
case RENDER_STATE_WAIT_SE:
|
||||
if (!IsSEPlaying())
|
||||
textPrinter->state = RENDER_STATE_HANDLE_CHAR;
|
||||
return RENDER_UPDATE;
|
||||
case RENDER_STATE_PAUSE:
|
||||
if (textPrinter->delayCounter)
|
||||
textPrinter->delayCounter--;
|
||||
else
|
||||
textPrinter->state = RENDER_STATE_HANDLE_CHAR;
|
||||
return RENDER_UPDATE;
|
||||
}
|
||||
return 1;
|
||||
return RENDER_FINISH;
|
||||
}
|
||||
|
||||
static void DecompressGlyphFont6(u16 glyph)
|
||||
static void DecompressGlyph_Braille(u16 glyph)
|
||||
{
|
||||
const u16 *glyphs;
|
||||
|
||||
glyphs = sFont6BrailleGlyphs + 0x100 * (glyph / 8) + 0x10 * (glyph % 8);
|
||||
glyphs = sBrailleGlyphs + 0x100 * (glyph / 8) + 0x10 * (glyph % 8);
|
||||
DecompressGlyphTile(glyphs, (u16 *)gGlyphInfo.pixels);
|
||||
DecompressGlyphTile(glyphs + 0x8, (u16 *)(gGlyphInfo.pixels + 0x20));
|
||||
DecompressGlyphTile(glyphs + 0x80, (u16 *)(gGlyphInfo.pixels + 0x40));
|
||||
DecompressGlyphTile(glyphs + 0x88, (u16 *)(gGlyphInfo.pixels + 0x60));
|
||||
gGlyphInfo.width = 0x10;
|
||||
gGlyphInfo.height = 0x10;
|
||||
gGlyphInfo.width = 16;
|
||||
gGlyphInfo.height = 16;
|
||||
}
|
||||
|
||||
s32 GetGlyphWidthFont6(u16 font_type, bool32 isJapanese)
|
||||
s32 GetGlyphWidth_Braille(u16 font_type, bool32 isJapanese)
|
||||
{
|
||||
return 0x10;
|
||||
return 16;
|
||||
}
|
||||
|
||||
@@ -200,5 +200,5 @@ void BuyMenuQuantityBoxThinBorder(u8 windowId, bool8 copyToVram)
|
||||
|
||||
void BuyMenuConfirmPurchase(u8 taskId, const struct YesNoFuncTable *yesNo)
|
||||
{
|
||||
CreateYesNoMenuWithCallbacks(taskId, &sShopBuyMenuYesNoWindowTemplate, FONT_2, 0, 2, 1, 0xD, yesNo);
|
||||
CreateYesNoMenuWithCallbacks(taskId, &sShopBuyMenuYesNoWindowTemplate, FONT_NORMAL, 0, 2, 1, 0xD, yesNo);
|
||||
}
|
||||
|
||||
+4
-4
@@ -10,7 +10,7 @@
|
||||
#include "link.h"
|
||||
#include "load_save.h"
|
||||
#include "m4a.h"
|
||||
#include "mevent.h"
|
||||
#include "mystery_gift.h"
|
||||
#include "new_menu_helpers.h"
|
||||
#include "overworld.h"
|
||||
#include "quest_log.h"
|
||||
@@ -89,7 +89,7 @@ static void PrintNumPlayersInLink(u16 windowId, s32 numPlayers)
|
||||
ConvertIntToDecimalStringN(gStringVar1, numPlayers, STR_CONV_MODE_LEFT_ALIGN, 1);
|
||||
SetStdWindowBorderStyle(windowId, FALSE);
|
||||
StringExpandPlaceholders(gStringVar4, gText_NumPlayerLink);
|
||||
AddTextPrinterParameterized(windowId, FONT_2, gStringVar4, 0, 0, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(windowId, FONT_NORMAL, gStringVar4, 0, 0, TEXT_SKIP_DRAW, NULL);
|
||||
CopyWindowToVram(windowId, COPYWIN_FULL);
|
||||
}
|
||||
|
||||
@@ -897,7 +897,7 @@ static void Task_StartWiredTrade(u8 taskId)
|
||||
case 3:
|
||||
if (!gReceivedRemoteLinkPlayers)
|
||||
{
|
||||
SetMainCallback2(CB2_ReturnFromLinkTrade);
|
||||
SetMainCallback2(CB2_StartCreateTradeMenu);
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
break;
|
||||
@@ -929,7 +929,7 @@ static void Task_StartWirelessTrade(u8 taskId)
|
||||
case 3:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
UnionRoom_CreateTask_CallCB2ReturnFromLinkTrade();
|
||||
CreateTask_CreateTradeMenu();
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -106,11 +106,11 @@ static void Task_DrawClearSaveDataScreen(u8 taskId)
|
||||
break;
|
||||
case 4:
|
||||
DrawStdFrameWithCustomTileAndPalette(1, TRUE, 0x001, 0xF);
|
||||
AddTextPrinterParameterized4(1, FONT_2, 0, 3, 1, 1, sTextColor, 0, gText_ClearAllSaveData);
|
||||
AddTextPrinterParameterized4(1, FONT_NORMAL, 0, 3, 1, 1, sTextColor, 0, gText_ClearAllSaveData);
|
||||
CopyWindowToVram(1, COPYWIN_GFX);
|
||||
break;
|
||||
case 5:
|
||||
CreateYesNoMenu(&sWindowTemplates[0], FONT_2, 0, 2, 0x001, 0xF, 1);
|
||||
CreateYesNoMenu(&sWindowTemplates[0], FONT_NORMAL, 0, 2, 0x001, 0xF, 1);
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
break;
|
||||
default:
|
||||
@@ -138,7 +138,7 @@ static void Task_HandleYesNoMenu(u8 taskId)
|
||||
case 0:
|
||||
PlaySE(SE_SELECT);
|
||||
FillWindowPixelBuffer(1, PIXEL_FILL(1));
|
||||
AddTextPrinterParameterized4(1, FONT_2, 0, 3, 1, 1, sTextColor, 0, gText_ClearingData);
|
||||
AddTextPrinterParameterized4(1, FONT_NORMAL, 0, 3, 1, 1, sTextColor, 0, gText_ClearingData);
|
||||
CopyWindowToVram(1, COPYWIN_FULL);
|
||||
ClearSaveData();
|
||||
break;
|
||||
|
||||
+5
-5
@@ -53,14 +53,14 @@ static void PrintCoinsString_Parameterized(u8 windowId, u32 coinAmount, u8 x, u8
|
||||
{
|
||||
ConvertIntToDecimalStringN(gStringVar1, coinAmount, STR_CONV_MODE_RIGHT_ALIGN, 4);
|
||||
StringExpandPlaceholders(gStringVar4, gText_Coins);
|
||||
AddTextPrinterParameterized(windowId, FONT_0, gStringVar4, x, y, speed, NULL);
|
||||
AddTextPrinterParameterized(windowId, FONT_SMALL, gStringVar4, x, y, speed, NULL);
|
||||
}
|
||||
|
||||
// Unused
|
||||
static void ShowCoinsWindow_Parameterized(u8 windowId, u16 tileStart, u8 palette, u32 coinAmount)
|
||||
{
|
||||
DrawStdFrameWithCustomTileAndPalette(windowId, FALSE, tileStart, palette);
|
||||
AddTextPrinterParameterized(windowId, FONT_2, gText_Coins_2, 0, 0, 0xFF, 0);
|
||||
AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_Coins_2, 0, 0, 0xFF, 0);
|
||||
PrintCoinsString_Parameterized(windowId, coinAmount, 0x10, 0xC, 0);
|
||||
}
|
||||
|
||||
@@ -71,9 +71,9 @@ void PrintCoinsString(u32 coinAmount)
|
||||
|
||||
ConvertIntToDecimalStringN(gStringVar1, coinAmount, STR_CONV_MODE_RIGHT_ALIGN, 4);
|
||||
StringExpandPlaceholders(gStringVar4, gText_Coins);
|
||||
width = GetStringWidth(FONT_0, gStringVar4, 0);
|
||||
width = GetStringWidth(FONT_SMALL, gStringVar4, 0);
|
||||
windowId = sCoinsWindowId;
|
||||
AddTextPrinterParameterized(windowId, FONT_0, gStringVar4, 64 - width, 0xC, 0, NULL);
|
||||
AddTextPrinterParameterized(windowId, FONT_SMALL, gStringVar4, 64 - width, 0xC, 0, NULL);
|
||||
}
|
||||
|
||||
void ShowCoinsWindow(u32 coinAmount, u8 x, u8 y)
|
||||
@@ -86,7 +86,7 @@ void ShowCoinsWindow(u32 coinAmount, u8 x, u8 y)
|
||||
PutWindowTilemap(sCoinsWindowId);
|
||||
LoadStdWindowGfx(sCoinsWindowId, 0x21D, 0xD0);
|
||||
DrawStdFrameWithCustomTileAndPalette(sCoinsWindowId, FALSE, 0x21D, 0xD);
|
||||
AddTextPrinterParameterized(sCoinsWindowId, FONT_2, gText_Coins_2, 0, 0, 0xFF, 0);
|
||||
AddTextPrinterParameterized(sCoinsWindowId, FONT_NORMAL, gText_Coins_2, 0, 0, 0xFF, 0);
|
||||
PrintCoinsString(coinAmount);
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -856,7 +856,7 @@ static s32 RollCredits(void)
|
||||
|
||||
}
|
||||
sCreditsMgr->timer = 360;
|
||||
AddTextPrinterParameterized4(sCreditsMgr->windowId, FONT_1, 0x08, 0x29, 1, 2, sTextColor_Header, 0, TITLE_TEXT);
|
||||
AddTextPrinterParameterized4(sCreditsMgr->windowId, FONT_NORMAL_COPY_1, 0x08, 0x29, 1, 2, sTextColor_Header, 0, TITLE_TEXT);
|
||||
sCreditsMgr->mainseqno = CREDITSSCENE_WAIT_TITLE_STAFF;
|
||||
return 0;
|
||||
case CREDITSSCENE_WAIT_TITLE_STAFF:
|
||||
@@ -913,12 +913,12 @@ static s32 RollCredits(void)
|
||||
if (gPaletteFade.active)
|
||||
return sCreditsMgr->canSpeedThrough;
|
||||
win0v[0] = sCreditsTexts[sCreditsScript[sCreditsMgr->scrcmdidx].param].unk_8; // unused
|
||||
AddTextPrinterParameterized4(sCreditsMgr->windowId, FONT_1, 2, 6, 0, 0, sTextColor_Header, -1, sCreditsTexts[sCreditsScript[sCreditsMgr->scrcmdidx].param].unk_0);
|
||||
AddTextPrinterParameterized4(sCreditsMgr->windowId, FONT_NORMAL_COPY_1, 2, 6, 0, 0, sTextColor_Header, -1, sCreditsTexts[sCreditsScript[sCreditsMgr->scrcmdidx].param].unk_0);
|
||||
sCreditsMgr->mainseqno = CREDITSSCENE_PRINT_ADDPRINTER2;
|
||||
return sCreditsMgr->canSpeedThrough;
|
||||
case CREDITSSCENE_PRINT_ADDPRINTER2:
|
||||
win0v[0] = sCreditsTexts[sCreditsScript[sCreditsMgr->scrcmdidx].param].unk_8;
|
||||
AddTextPrinterParameterized4(sCreditsMgr->windowId, FONT_2, 8, 6, 0, 0, sTextColor_Regular, -1, sCreditsTexts[sCreditsScript[sCreditsMgr->scrcmdidx].param].unk_4);
|
||||
AddTextPrinterParameterized4(sCreditsMgr->windowId, FONT_NORMAL, 8, 6, 0, 0, sTextColor_Regular, -1, sCreditsTexts[sCreditsScript[sCreditsMgr->scrcmdidx].param].unk_4);
|
||||
sCreditsMgr->mainseqno = CREDITSSCENE_PRINT_DELAY;
|
||||
return sCreditsMgr->canSpeedThrough;
|
||||
case CREDITSSCENE_PRINT_DELAY:
|
||||
|
||||
+375
-375
File diff suppressed because it is too large
Load Diff
@@ -20,7 +20,7 @@ const struct Item gItems[] = {
|
||||
.description = gItemDescription_{{ item.itemId }},
|
||||
## endif
|
||||
.importance = {{ item.importance }},
|
||||
.exitsBagOnUse = {{ item.exitsBagOnUse }},
|
||||
.registrability = {{ item.registrability }},
|
||||
.pocket = {{ item.pocket }},
|
||||
.type = {{ item.type }},
|
||||
.fieldUseFunc = {{ item.fieldUseFunc }},
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
const u16 gObjectEventPal_Player[] = INCBIN_U16("graphics/object_events/palettes/player.gbapal");
|
||||
const u16 gUnknown_835B988[] = INCBIN_U16("graphics/object_events/palettes/unk_835B988.gbapal");
|
||||
const u16 gObjectEventPal_PlayerUnused[] = INCBIN_U16("graphics/object_events/palettes/player_unused.gbapal"); // Identical except for the transparency
|
||||
const u16 gObjectEventPaletteNull1[16] = {};
|
||||
const u16 gObjectEventPaletteNull2[16] = {};
|
||||
const u16 gObjectEventPaletteNull3[16] = {};
|
||||
@@ -190,7 +190,7 @@ const u16 gFieldEffectObjectPic_ShadowSmall[] = INCBIN_U16("graphics/field_effec
|
||||
const u16 gFieldEffectObjectPic_ShadowMedium[] = INCBIN_U16("graphics/field_effects/pics/shadow_medium.4bpp");
|
||||
const u16 gFieldEffectObjectPic_ShadowLarge[] = INCBIN_U16("graphics/field_effects/pics/shadow_large.4bpp");
|
||||
const u16 gFieldEffectObjectPic_ShadowExtraLarge[] = INCBIN_U16("graphics/field_effects/pics/shadow_extra_large.4bpp");
|
||||
const u16 filler_8398188[0x90] = {};
|
||||
const u16 sFiller1[0x90] = {};
|
||||
const u16 gFieldEffectObjectPic_CutGrass[] = INCBIN_U16("graphics/field_effects/fldeff_cut.4bpp");
|
||||
const u16 gFieldEffectObjectPic_CutGrass2[] = INCBIN_U16("graphics/field_effects/fldeff_cut.4bpp"); // Unused
|
||||
const u16 gFieldEffectPal_CutGrass[] = INCBIN_U16("graphics/field_effects/fldeff_cut.gbapal");
|
||||
@@ -199,7 +199,7 @@ const u16 gFieldEffectObjectPic_Ash[] = INCBIN_U16("graphics/field_effects/pics/
|
||||
const u16 gFieldEffectObjectPic_Arrow[] = INCBIN_U16("graphics/field_effects/pics/arrow.4bpp");
|
||||
const u16 gFieldEffectObjectPalette0[] = INCBIN_U16("graphics/field_effects/palettes/general_0.gbapal");
|
||||
const u16 gFieldEffectObjectPalette1[] = INCBIN_U16("graphics/field_effects/palettes/general_1.gbapal");
|
||||
const u16 filler_8398FE8[16] = {0};
|
||||
const u16 sFiller2[0x10] = {};
|
||||
const u16 gFieldEffectObjectPic_GroundImpactDust[] = INCBIN_U16("graphics/field_effects/pics/ground_impact_dust.4bpp");
|
||||
const u16 gFieldEffectObjectPic_UnusedGrass3[] = INCBIN_U16("graphics/field_effects/pics/unused_grass_3.4bpp"); // Unused
|
||||
const u16 gFieldEffectObjectPic_JumpTallGrass[] = INCBIN_U16("graphics/field_effects/pics/jump_tall_grass.4bpp");
|
||||
|
||||
+742
-2226
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,471 @@
|
||||
static const u8 *const sLinkGroupActivityNameTexts[] = {
|
||||
[ACTIVITY_NONE] = gText_UR_EmptyString,
|
||||
[ACTIVITY_BATTLE_SINGLE] = gText_UR_SingleBattle,
|
||||
[ACTIVITY_BATTLE_DOUBLE] = gText_UR_DoubleBattle,
|
||||
[ACTIVITY_BATTLE_MULTI] = gText_UR_MultiBattle,
|
||||
[ACTIVITY_TRADE] = gText_UR_PokemonTrades,
|
||||
[ACTIVITY_CHAT] = gText_UR_Chat,
|
||||
[ACTIVITY_WONDER_CARD_DUP] = gText_UR_WonderCards,
|
||||
[ACTIVITY_WONDER_NEWS_DUP] = gText_UR_WonderNews,
|
||||
[ACTIVITY_CARD] = gText_UR_Cards,
|
||||
[ACTIVITY_POKEMON_JUMP] = gText_UR_PokemonJump,
|
||||
[ACTIVITY_BERRY_CRUSH] = gText_UR_BerryCrush,
|
||||
[ACTIVITY_BERRY_PICK] = gText_UR_BerryPicking,
|
||||
[ACTIVITY_SEARCH] = gText_UR_Search,
|
||||
[ACTIVITY_SPIN_TRADE] = gText_UR_SpinTrade,
|
||||
[ACTIVITY_ITEM_TRADE] = gText_UR_ItemTrade,
|
||||
[ACTIVITY_RECORD_CORNER] = gText_UR_EmptyString,
|
||||
[ACTIVITY_BERRY_BLENDER] = gText_UR_EmptyString,
|
||||
[ACTIVITY_ACCEPT] = gText_UR_EmptyString,
|
||||
[ACTIVITY_DECLINE] = gText_UR_EmptyString,
|
||||
[ACTIVITY_NPCTALK] = gText_UR_EmptyString,
|
||||
[ACTIVITY_PLYRTALK] = gText_UR_EmptyString,
|
||||
[ACTIVITY_WONDER_CARD] = gText_UR_WonderCards,
|
||||
[ACTIVITY_WONDER_NEWS] = gText_UR_WonderNews
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sWindowTemplate_BButtonCancel = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 0,
|
||||
.tilemapTop = 0,
|
||||
.width = 30,
|
||||
.height = 2,
|
||||
.paletteNum = 0xF,
|
||||
.baseBlock = 0x008
|
||||
};
|
||||
|
||||
// Minimum and maximum number of players for a link group
|
||||
// A minimum of 0 means the min and max are equal
|
||||
#define LINK_GROUP_CAPACITY(min, max)(((min) << 12) | ((max) << 8))
|
||||
#define GROUP_MAX(capacity)(capacity & 0x0F)
|
||||
#define GROUP_MIN(capacity)(capacity >> 4)
|
||||
#define GROUP_MIN2(capacity)(capacity & 0xF0) // Unnecessary to have both, but needed to match
|
||||
|
||||
static const u32 sLinkGroupToActivityAndCapacity[] = {
|
||||
[LINK_GROUP_SINGLE_BATTLE] = ACTIVITY_BATTLE_SINGLE | LINK_GROUP_CAPACITY(0, 2),
|
||||
[LINK_GROUP_DOUBLE_BATTLE] = ACTIVITY_BATTLE_DOUBLE | LINK_GROUP_CAPACITY(0, 2),
|
||||
[LINK_GROUP_MULTI_BATTLE] = ACTIVITY_BATTLE_MULTI | LINK_GROUP_CAPACITY(0, 4),
|
||||
[LINK_GROUP_TRADE] = ACTIVITY_TRADE | LINK_GROUP_CAPACITY(0, 2),
|
||||
[LINK_GROUP_POKEMON_JUMP] = ACTIVITY_POKEMON_JUMP | LINK_GROUP_CAPACITY(2, 5),
|
||||
[LINK_GROUP_BERRY_CRUSH] = ACTIVITY_BERRY_CRUSH | LINK_GROUP_CAPACITY(2, 5),
|
||||
[LINK_GROUP_BERRY_PICKING] = ACTIVITY_BERRY_PICK | LINK_GROUP_CAPACITY(3, 5),
|
||||
[LINK_GROUP_WONDER_CARD] = ACTIVITY_SPIN_TRADE | LINK_GROUP_CAPACITY(3, 5),
|
||||
[LINK_GROUP_WONDER_NEWS] = ACTIVITY_ITEM_TRADE | LINK_GROUP_CAPACITY(3, 5)
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sWindowTemplate_List_PossibleGroupMembers = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 1,
|
||||
.tilemapTop = 3,
|
||||
.width = 13,
|
||||
.height = 10,
|
||||
.paletteNum = 15,
|
||||
.baseBlock = 0x044
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sWindowTemplate_NumPlayerMode = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 16,
|
||||
.tilemapTop = 3,
|
||||
.width = 7,
|
||||
.height = 4,
|
||||
.paletteNum = 15,
|
||||
.baseBlock = 0x0C6
|
||||
};
|
||||
|
||||
const struct ListMenuItem sListMenuItems_PossibleGroupMembers[] = {
|
||||
{gText_UR_EmptyString, 0},
|
||||
{gText_UR_EmptyString, 1},
|
||||
{gText_UR_EmptyString, 2},
|
||||
{gText_UR_EmptyString, 3},
|
||||
{gText_UR_EmptyString, 4}
|
||||
};
|
||||
|
||||
static const struct ListMenuTemplate sListMenuTemplate_PossibleGroupMembers = {
|
||||
.items = sListMenuItems_PossibleGroupMembers,
|
||||
.moveCursorFunc = NULL,
|
||||
.itemPrintFunc = ItemPrintFunc_PossibleGroupMembers,
|
||||
.totalItems = ARRAY_COUNT(sListMenuItems_PossibleGroupMembers),
|
||||
.maxShowed = 5,
|
||||
.windowId = 0,
|
||||
.header_X = 0,
|
||||
.item_X = 1,
|
||||
.cursor_X = 0,
|
||||
.upText_Y = 0,
|
||||
.cursorPal = 2,
|
||||
.fillValue = 1,
|
||||
.cursorShadowPal = 3,
|
||||
.lettersSpacing = 0,
|
||||
.itemVerticalPadding = 2,
|
||||
.scrollMultiple = LIST_NO_MULTIPLE_SCROLL,
|
||||
.fontId = FONT_NORMAL,
|
||||
.cursorKind = 1
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sWindowTemplate_GroupList = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 1,
|
||||
.tilemapTop = 3,
|
||||
.width = 17,
|
||||
.height = 10,
|
||||
.paletteNum = 15,
|
||||
.baseBlock = 0x044
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sWindowTemplate_PlayerNameAndId = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 20,
|
||||
.tilemapTop = 3,
|
||||
.width = 7,
|
||||
.height = 4,
|
||||
.paletteNum = 15,
|
||||
.baseBlock = 0x0EE
|
||||
};
|
||||
|
||||
static const struct ListMenuItem sListMenuItems_UnionRoomGroups[] = {
|
||||
{gText_UR_EmptyString, 0},
|
||||
{gText_UR_EmptyString, 1},
|
||||
{gText_UR_EmptyString, 2},
|
||||
{gText_UR_EmptyString, 3},
|
||||
{gText_UR_EmptyString, 4},
|
||||
{gText_UR_EmptyString, 5},
|
||||
{gText_UR_EmptyString, 6},
|
||||
{gText_UR_EmptyString, 7},
|
||||
{gText_UR_EmptyString, 8},
|
||||
{gText_UR_EmptyString, 9},
|
||||
{gText_UR_EmptyString, 10},
|
||||
{gText_UR_EmptyString, 11},
|
||||
{gText_UR_EmptyString, 12},
|
||||
{gText_UR_EmptyString, 13},
|
||||
{gText_UR_EmptyString, 14},
|
||||
{gText_UR_EmptyString, 15}
|
||||
};
|
||||
|
||||
static const struct ListMenuTemplate sListMenuTemplate_UnionRoomGroups = {
|
||||
.items = sListMenuItems_UnionRoomGroups,
|
||||
.moveCursorFunc = ListMenuDefaultCursorMoveFunc,
|
||||
.itemPrintFunc = ListMenuItemPrintFunc_UnionRoomGroups,
|
||||
.totalItems = ARRAY_COUNT(sListMenuItems_UnionRoomGroups),
|
||||
.maxShowed = 5,
|
||||
.windowId = 0,
|
||||
.header_X = 0,
|
||||
.item_X = 8,
|
||||
.cursor_X = 0,
|
||||
.upText_Y = 0,
|
||||
.cursorPal = 2,
|
||||
.fillValue = 1,
|
||||
.cursorShadowPal = 3,
|
||||
.lettersSpacing = 0,
|
||||
.itemVerticalPadding = 2,
|
||||
.scrollMultiple = LIST_MULTIPLE_SCROLL_DPAD,
|
||||
.fontId = FONT_NORMAL,
|
||||
.cursorKind = 0
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sWindowTemplate_InviteToActivity = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 20,
|
||||
.tilemapTop = 6,
|
||||
.width = 8,
|
||||
.height = 7,
|
||||
.paletteNum = 15,
|
||||
.baseBlock = 0x001
|
||||
};
|
||||
|
||||
static const struct ListMenuItem sListMenuItems_InviteToActivity[] = {
|
||||
{gText_UR_Greetings, ACTIVITY_CARD | LINK_GROUP_CAPACITY(0, 2)},
|
||||
{gText_UR_Battle, ACTIVITY_BATTLE_SINGLE | IN_UNION_ROOM | LINK_GROUP_CAPACITY(0, 2)},
|
||||
{gText_UR_Chat2, ACTIVITY_CHAT | IN_UNION_ROOM | LINK_GROUP_CAPACITY(0, 2)},
|
||||
{gText_UR_Exit, ACTIVITY_NONE | IN_UNION_ROOM }
|
||||
};
|
||||
|
||||
static const struct ListMenuTemplate sListMenuTemplate_InviteToActivity = {
|
||||
.items = sListMenuItems_InviteToActivity,
|
||||
.moveCursorFunc = ListMenuDefaultCursorMoveFunc,
|
||||
.itemPrintFunc = NULL,
|
||||
.totalItems = ARRAY_COUNT(sListMenuItems_InviteToActivity),
|
||||
.maxShowed = 4,
|
||||
.windowId = 0,
|
||||
.header_X = 0,
|
||||
.item_X = 8,
|
||||
.cursor_X = 0,
|
||||
.upText_Y = 0,
|
||||
.cursorPal = 2,
|
||||
.fillValue = 1,
|
||||
.cursorShadowPal = 3,
|
||||
.lettersSpacing = 1,
|
||||
.itemVerticalPadding = 0,
|
||||
.scrollMultiple = LIST_NO_MULTIPLE_SCROLL,
|
||||
.fontId = FONT_NORMAL,
|
||||
.cursorKind = 0
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sWindowTemplate_RegisterForTrade = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 18,
|
||||
.tilemapTop = 8,
|
||||
.width = 11,
|
||||
.height = 5,
|
||||
.paletteNum = 15,
|
||||
.baseBlock = 0x001
|
||||
};
|
||||
|
||||
static const struct ListMenuItem sListMenuItems_RegisterForTrade[] = {
|
||||
{gText_Register, 1},
|
||||
{gText_UR_Info, 2},
|
||||
{gText_UR_Exit, 3}
|
||||
};
|
||||
|
||||
static const struct ListMenuTemplate sListMenuTemplate_RegisterForTrade = {
|
||||
.items = sListMenuItems_RegisterForTrade,
|
||||
.moveCursorFunc = ListMenuDefaultCursorMoveFunc,
|
||||
.itemPrintFunc = NULL,
|
||||
.totalItems = ARRAY_COUNT(sListMenuItems_RegisterForTrade),
|
||||
.maxShowed = 3,
|
||||
.windowId = 0,
|
||||
.header_X = 0,
|
||||
.item_X = 8,
|
||||
.cursor_X = 0,
|
||||
.upText_Y = 0,
|
||||
.cursorPal = 2,
|
||||
.fillValue = 1,
|
||||
.cursorShadowPal = 3,
|
||||
.lettersSpacing = 1,
|
||||
.itemVerticalPadding = 0,
|
||||
.scrollMultiple = LIST_NO_MULTIPLE_SCROLL,
|
||||
.fontId = FONT_NORMAL,
|
||||
.cursorKind = 0
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sWindowTemplate_TypeNames = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 20,
|
||||
.tilemapTop = 2,
|
||||
.width = 9,
|
||||
.height = 11,
|
||||
.paletteNum = 15,
|
||||
.baseBlock = 0x001
|
||||
};
|
||||
|
||||
static const struct ListMenuItem sListMenuItems_TypeNames[NUMBER_OF_MON_TYPES] = {
|
||||
{ gTypeNames[TYPE_NORMAL], TYPE_NORMAL },
|
||||
{ gTypeNames[TYPE_FIRE], TYPE_FIRE },
|
||||
{ gTypeNames[TYPE_WATER], TYPE_WATER },
|
||||
{ gTypeNames[TYPE_ELECTRIC], TYPE_ELECTRIC },
|
||||
{ gTypeNames[TYPE_GRASS], TYPE_GRASS },
|
||||
{ gTypeNames[TYPE_ICE], TYPE_ICE },
|
||||
{ gTypeNames[TYPE_GROUND], TYPE_GROUND },
|
||||
{ gTypeNames[TYPE_ROCK], TYPE_ROCK },
|
||||
{ gTypeNames[TYPE_FLYING], TYPE_FLYING },
|
||||
{ gTypeNames[TYPE_PSYCHIC], TYPE_PSYCHIC },
|
||||
{ gTypeNames[TYPE_FIGHTING], TYPE_FIGHTING },
|
||||
{ gTypeNames[TYPE_POISON], TYPE_POISON },
|
||||
{ gTypeNames[TYPE_BUG], TYPE_BUG },
|
||||
{ gTypeNames[TYPE_GHOST], TYPE_GHOST },
|
||||
{ gTypeNames[TYPE_DRAGON], TYPE_DRAGON },
|
||||
{ gTypeNames[TYPE_STEEL], TYPE_STEEL },
|
||||
{ gTypeNames[TYPE_DARK], TYPE_DARK },
|
||||
{ gText_UR_Exit, NUMBER_OF_MON_TYPES }
|
||||
};
|
||||
|
||||
static const struct ListMenuTemplate sListMenuTemplate_TypeNames = {
|
||||
.items = sListMenuItems_TypeNames,
|
||||
.moveCursorFunc = ListMenuDefaultCursorMoveFunc,
|
||||
.itemPrintFunc = NULL,
|
||||
.totalItems = NUMBER_OF_MON_TYPES,
|
||||
.maxShowed = 6,
|
||||
.windowId = 0,
|
||||
.header_X = 0,
|
||||
.item_X = 8,
|
||||
.cursor_X = 0,
|
||||
.upText_Y = 2,
|
||||
.cursorPal = 2,
|
||||
.fillValue = 1,
|
||||
.cursorShadowPal = 3,
|
||||
.lettersSpacing = 1,
|
||||
.itemVerticalPadding = 0,
|
||||
.scrollMultiple = LIST_NO_MULTIPLE_SCROLL,
|
||||
.fontId = FONT_NORMAL,
|
||||
.cursorKind = 0
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sWindowTemplate_TradingBoardHeader = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 1,
|
||||
.tilemapTop = 1,
|
||||
.width = 28,
|
||||
.height = 2,
|
||||
.paletteNum = 13,
|
||||
.baseBlock = 0x001
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sWindowTemplate_TradingBoardMain = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 1,
|
||||
.tilemapTop = 5,
|
||||
.width = 28,
|
||||
.height = 10,
|
||||
.paletteNum = 13,
|
||||
.baseBlock = 0x039
|
||||
};
|
||||
|
||||
static const struct ListMenuItem sListMenuItems_TradeBoard[] = {
|
||||
{gText_UR_EmptyString, -3},
|
||||
{gText_UR_EmptyString, 0},
|
||||
{gText_UR_EmptyString, 1},
|
||||
{gText_UR_EmptyString, 2},
|
||||
{gText_UR_EmptyString, 3},
|
||||
{gText_UR_EmptyString, 4},
|
||||
{gText_UR_EmptyString, 5},
|
||||
{gText_UR_EmptyString, 6},
|
||||
{gText_UR_EmptyString, 7},
|
||||
{gText_UR_Exit2, 8}
|
||||
};
|
||||
|
||||
static const struct ListMenuTemplate sListMenuTemplate_TradeBoard = {
|
||||
.items = sListMenuItems_TradeBoard,
|
||||
.moveCursorFunc = ListMenuDefaultCursorMoveFunc,
|
||||
.itemPrintFunc = TradeBoardListMenuItemPrintFunc,
|
||||
.totalItems = ARRAY_COUNT(sListMenuItems_TradeBoard),
|
||||
.maxShowed = 5,
|
||||
.windowId = 0,
|
||||
.header_X = 0,
|
||||
.item_X = 12,
|
||||
.cursor_X = 0,
|
||||
.upText_Y = 2,
|
||||
.cursorPal = 14,
|
||||
.fillValue = 15,
|
||||
.cursorShadowPal = 13,
|
||||
.lettersSpacing = 1,
|
||||
.itemVerticalPadding = 1,
|
||||
.scrollMultiple = LIST_NO_MULTIPLE_SCROLL,
|
||||
.fontId = FONT_NORMAL,
|
||||
.cursorKind = 0
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sWindowTemplate_Unused = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 1,
|
||||
.tilemapTop = 5,
|
||||
.width = 28,
|
||||
.height = 10,
|
||||
.paletteNum = 13,
|
||||
.baseBlock = 0x039
|
||||
};
|
||||
|
||||
static const struct ListMenuItem sListMenuItems_Unused[] = {
|
||||
{gText_UR_EmptyString, 0},
|
||||
{gText_UR_EmptyString, 1},
|
||||
{gText_UR_EmptyString, 2},
|
||||
{gText_UR_EmptyString, 3},
|
||||
{gText_UR_EmptyString, 4},
|
||||
{gText_UR_EmptyString, 5},
|
||||
{gText_UR_EmptyString, 6},
|
||||
{gText_UR_EmptyString, 7},
|
||||
{gText_UR_EmptyString, 8},
|
||||
{gText_UR_EmptyString, 9},
|
||||
{gText_UR_EmptyString, 10},
|
||||
{gText_UR_EmptyString, 11},
|
||||
{gText_UR_EmptyString, 12},
|
||||
{gText_UR_EmptyString, 13},
|
||||
{gText_UR_EmptyString, 14},
|
||||
{gText_UR_EmptyString, 15}
|
||||
};
|
||||
|
||||
static const struct ListMenuTemplate sListMenuTemplate_Unused = {
|
||||
.items = sListMenuItems_Unused,
|
||||
.moveCursorFunc = ListMenuDefaultCursorMoveFunc,
|
||||
.itemPrintFunc = ItemPrintFunc_Unused,
|
||||
.totalItems = ARRAY_COUNT(sListMenuItems_Unused),
|
||||
.maxShowed = 4,
|
||||
.windowId = 0,
|
||||
.header_X = 0,
|
||||
.item_X = 8,
|
||||
.cursor_X = 1,
|
||||
.upText_Y = 0,
|
||||
.cursorPal = 2,
|
||||
.fillValue = 1,
|
||||
.cursorShadowPal = 3,
|
||||
.lettersSpacing = 1,
|
||||
.itemVerticalPadding = 0,
|
||||
.scrollMultiple = LIST_MULTIPLE_SCROLL_DPAD,
|
||||
.fontId = FONT_NORMAL,
|
||||
.cursorKind = 0
|
||||
};
|
||||
|
||||
static const struct RfuPlayerData sRfuPlayerData_Dummy = {};
|
||||
|
||||
ALIGNED(4) static const u8 sAcceptedActivityIds_SingleBattle[] = {ACTIVITY_BATTLE_SINGLE, 0xFF};
|
||||
ALIGNED(4) static const u8 sAcceptedActivityIds_DoubleBattle[] = {ACTIVITY_BATTLE_DOUBLE, 0xFF};
|
||||
ALIGNED(4) static const u8 sAcceptedActivityIds_MultiBattle[] = {ACTIVITY_BATTLE_MULTI, 0xFF};
|
||||
ALIGNED(4) static const u8 sAcceptedActivityIds_Trade[] = {ACTIVITY_TRADE, 0xFF};
|
||||
ALIGNED(4) static const u8 sAcceptedActivityIds_PokemonJump[] = {ACTIVITY_POKEMON_JUMP, 0xFF};
|
||||
ALIGNED(4) static const u8 sAcceptedActivityIds_BerryCrush[] = {ACTIVITY_BERRY_CRUSH, 0xFF};
|
||||
ALIGNED(4) static const u8 sAcceptedActivityIds_BerryPicking[] = {ACTIVITY_BERRY_PICK, 0xFF};
|
||||
ALIGNED(4) static const u8 sAcceptedActivityIds_WonderCard[] = {ACTIVITY_WONDER_CARD, 0xFF};
|
||||
ALIGNED(4) static const u8 sAcceptedActivityIds_WonderNews[] = {ACTIVITY_WONDER_NEWS, 0xFF};
|
||||
ALIGNED(4) static const u8 sAcceptedActivityIds_Resume[] = {
|
||||
IN_UNION_ROOM | ACTIVITY_NONE,
|
||||
IN_UNION_ROOM | ACTIVITY_BATTLE_SINGLE,
|
||||
IN_UNION_ROOM | ACTIVITY_TRADE,
|
||||
IN_UNION_ROOM | ACTIVITY_CHAT,
|
||||
IN_UNION_ROOM | ACTIVITY_CARD,
|
||||
IN_UNION_ROOM | ACTIVITY_ACCEPT,
|
||||
IN_UNION_ROOM | ACTIVITY_DECLINE,
|
||||
IN_UNION_ROOM | ACTIVITY_NPCTALK,
|
||||
IN_UNION_ROOM | ACTIVITY_PLYRTALK,
|
||||
0xFF
|
||||
};
|
||||
ALIGNED(4) static const u8 sAcceptedActivityIds_Init[] = {ACTIVITY_SEARCH, 0xFF};
|
||||
ALIGNED(4) static const u8 sAcceptedActivityIds_Unk11[] = {
|
||||
ACTIVITY_BATTLE_SINGLE,
|
||||
ACTIVITY_BATTLE_DOUBLE,
|
||||
ACTIVITY_BATTLE_MULTI,
|
||||
ACTIVITY_TRADE,
|
||||
ACTIVITY_POKEMON_JUMP,
|
||||
ACTIVITY_BERRY_CRUSH,
|
||||
ACTIVITY_BERRY_PICK,
|
||||
ACTIVITY_WONDER_CARD,
|
||||
ACTIVITY_WONDER_NEWS,
|
||||
ACTIVITY_SPIN_TRADE,
|
||||
0xFF
|
||||
};
|
||||
ALIGNED(4) static const u8 sAcceptedActivityIds_Unk12[] = {
|
||||
ACTIVITY_BATTLE_SINGLE,
|
||||
ACTIVITY_BATTLE_DOUBLE,
|
||||
ACTIVITY_BATTLE_MULTI,
|
||||
ACTIVITY_TRADE,
|
||||
ACTIVITY_BERRY_CRUSH,
|
||||
0xFF
|
||||
};
|
||||
|
||||
static const u8 *const sAcceptedActivityIds[NUM_LINK_GROUP_TYPES] = {
|
||||
[LINK_GROUP_SINGLE_BATTLE] = sAcceptedActivityIds_SingleBattle,
|
||||
[LINK_GROUP_DOUBLE_BATTLE] = sAcceptedActivityIds_DoubleBattle,
|
||||
[LINK_GROUP_MULTI_BATTLE] = sAcceptedActivityIds_MultiBattle,
|
||||
[LINK_GROUP_TRADE] = sAcceptedActivityIds_Trade,
|
||||
[LINK_GROUP_POKEMON_JUMP] = sAcceptedActivityIds_PokemonJump,
|
||||
[LINK_GROUP_BERRY_CRUSH] = sAcceptedActivityIds_BerryCrush,
|
||||
[LINK_GROUP_BERRY_PICKING] = sAcceptedActivityIds_BerryPicking,
|
||||
[LINK_GROUP_WONDER_CARD] = sAcceptedActivityIds_WonderCard,
|
||||
[LINK_GROUP_WONDER_NEWS] = sAcceptedActivityIds_WonderNews,
|
||||
[LINK_GROUP_UNION_ROOM_RESUME] = sAcceptedActivityIds_Resume,
|
||||
[LINK_GROUP_UNION_ROOM_INIT] = sAcceptedActivityIds_Init,
|
||||
[LINK_GROUP_UNK_11] = sAcceptedActivityIds_Unk11,
|
||||
[LINK_GROUP_UNK_12] = sAcceptedActivityIds_Unk12,
|
||||
};
|
||||
|
||||
static const u8 sLinkGroupToURoomActivity[] = {
|
||||
[LINK_GROUP_SINGLE_BATTLE] = ACTIVITY_BATTLE_SINGLE,
|
||||
[LINK_GROUP_DOUBLE_BATTLE] = ACTIVITY_BATTLE_DOUBLE,
|
||||
[LINK_GROUP_MULTI_BATTLE] = ACTIVITY_BATTLE_MULTI,
|
||||
[LINK_GROUP_TRADE] = ACTIVITY_TRADE,
|
||||
[LINK_GROUP_POKEMON_JUMP] = ACTIVITY_POKEMON_JUMP,
|
||||
[LINK_GROUP_BERRY_CRUSH] = ACTIVITY_BERRY_CRUSH,
|
||||
[LINK_GROUP_BERRY_PICKING] = ACTIVITY_BERRY_PICK,
|
||||
[LINK_GROUP_WONDER_CARD] = ACTIVITY_WONDER_CARD,
|
||||
[LINK_GROUP_WONDER_NEWS] = ACTIVITY_WONDER_NEWS
|
||||
};
|
||||
|
||||
// Unused
|
||||
static const u8 sDotSeparatedValues[] = _("{DYNAMIC 00}·{DYNAMIC 01}");
|
||||
+8
-8
@@ -119,7 +119,7 @@ static const struct ListMenuTemplate sDaycareListMenuLevelTemplate =
|
||||
.lettersSpacing = 1,
|
||||
.itemVerticalPadding = 0,
|
||||
.scrollMultiple = 0,
|
||||
.fontId = FONT_3,
|
||||
.fontId = FONT_NORMAL_COPY_2,
|
||||
.cursorKind = 0
|
||||
};
|
||||
|
||||
@@ -1439,7 +1439,7 @@ static void DaycareAddTextPrinter(u8 windowId, const u8 *text, u32 x, u32 y)
|
||||
|
||||
printer.currentChar = text;
|
||||
printer.windowId = windowId;
|
||||
printer.fontId = FONT_3;
|
||||
printer.fontId = FONT_NORMAL_COPY_2;
|
||||
printer.x = x;
|
||||
printer.y = y;
|
||||
printer.currentX = x;
|
||||
@@ -1479,7 +1479,7 @@ static void DaycarePrintMonLvl(struct DayCare *daycare, u8 windowId, u32 daycare
|
||||
level = GetLevelAfterDaycareSteps(&daycare->mons[daycareSlotId].mon, daycare->mons[daycareSlotId].steps);
|
||||
ConvertIntToDecimalStringN(intText, level, STR_CONV_MODE_LEFT_ALIGN, 3);
|
||||
StringAppend(lvlText, intText);
|
||||
x = 132 - GetStringWidth(FONT_3, lvlText, 0);
|
||||
x = 132 - GetStringWidth(FONT_NORMAL_COPY_2, lvlText, 0);
|
||||
DaycareAddTextPrinter(windowId, lvlText, x, y);
|
||||
}
|
||||
|
||||
@@ -1816,9 +1816,9 @@ static void CB2_EggHatch_0(void)
|
||||
gMain.state++;
|
||||
break;
|
||||
case 2:
|
||||
DecompressAndLoadBgGfxUsingHeap(0, gBattleTextboxTiles, 0, 0, 0);
|
||||
CopyToBgTilemapBuffer(0, gBattleTextboxTilemap, 0, 0);
|
||||
LoadCompressedPalette(gBattleTextboxPalette, 0, 0x20);
|
||||
DecompressAndLoadBgGfxUsingHeap(0, gBattleInterface_Textbox_Gfx, 0, 0, 0);
|
||||
CopyToBgTilemapBuffer(0, gBattleInterface_Textbox_Tilemap, 0, 0);
|
||||
LoadCompressedPalette(gBattleInterface_Textbox_Pal, 0, 0x20);
|
||||
gMain.state++;
|
||||
break;
|
||||
case 3:
|
||||
@@ -1957,7 +1957,7 @@ static void CB2_EggHatch_1(void)
|
||||
if (!IsTextPrinterActive(sEggHatchData->windowId))
|
||||
{
|
||||
LoadUserWindowGfx2(sEggHatchData->windowId, 0x140, 0xE0);
|
||||
CreateYesNoMenu(&sYesNoWinTemplate, FONT_3, 0, 2, 0x140, 0xE, 0);
|
||||
CreateYesNoMenu(&sYesNoWinTemplate, FONT_NORMAL_COPY_2, 0, 2, 0x140, 0xE, 0);
|
||||
sEggHatchData->CB2_state++;
|
||||
}
|
||||
break;
|
||||
@@ -2159,5 +2159,5 @@ static void EggHatchPrintMessage(u8 windowId, u8 *string, u8 x, u8 y, u8 speed)
|
||||
sEggHatchData->textColor[0] = 0;
|
||||
sEggHatchData->textColor[1] = 5;
|
||||
sEggHatchData->textColor[2] = 6;
|
||||
AddTextPrinterParameterized4(windowId, FONT_3, x, y, 1, 1, sEggHatchData->textColor, speed, string);
|
||||
AddTextPrinterParameterized4(windowId, FONT_NORMAL_COPY_2, x, y, 1, 1, sEggHatchData->textColor, speed, string);
|
||||
}
|
||||
|
||||
+5
-5
@@ -265,11 +265,11 @@ static void DiplomaPrintText(void)
|
||||
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gText_Diploma_Kanto);
|
||||
FillWindowPixelBuffer(WIN_TEXT, PIXEL_FILL(0));
|
||||
DynamicPlaceholderTextUtil_ExpandPlaceholders(str, gText_Diploma_Player);
|
||||
width = GetStringWidth(FONT_2, str, -1);
|
||||
AddTextPrinterParameterized3(WIN_TEXT, FONT_2, 120 - (width / 2), 4, sTextColors, TEXT_SKIP_DRAW, str);
|
||||
width = GetStringWidth(FONT_NORMAL, str, -1);
|
||||
AddTextPrinterParameterized3(WIN_TEXT, FONT_NORMAL, 120 - (width / 2), 4, sTextColors, TEXT_SKIP_DRAW, str);
|
||||
DynamicPlaceholderTextUtil_ExpandPlaceholders(str, gText_Diploma_ThisDocument);
|
||||
width = GetStringWidth(FONT_2, str, -1);
|
||||
AddTextPrinterParameterized3(WIN_TEXT, FONT_2, 120 - (width / 2), 30, sTextColors, TEXT_SKIP_DRAW, str);
|
||||
AddTextPrinterParameterized3(WIN_TEXT, FONT_2, 120, 105, sTextColors, 0, gText_Diploma_GameFreak);
|
||||
width = GetStringWidth(FONT_NORMAL, str, -1);
|
||||
AddTextPrinterParameterized3(WIN_TEXT, FONT_NORMAL, 120 - (width / 2), 30, sTextColors, TEXT_SKIP_DRAW, str);
|
||||
AddTextPrinterParameterized3(WIN_TEXT, FONT_NORMAL, 120, 105, sTextColors, 0, gText_Diploma_GameFreak);
|
||||
PutWindowTilemap(WIN_TEXT);
|
||||
}
|
||||
|
||||
+35
-35
@@ -3005,14 +3005,14 @@ static void PrintRecordsText(u8 windowId)
|
||||
LoadStdWindowGfx(windowId, 0x21D, 0xD0);
|
||||
DrawTextBorderOuter(windowId, 0x21D, 0xD);
|
||||
FillWindowPixelBuffer(windowId, PIXEL_FILL(1));
|
||||
AddTextPrinterParameterized(windowId, FONT_2, sRecordsTexts[0], 1, 1, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(windowId, FONT_NORMAL, sRecordsTexts[0], 1, 1, TEXT_SKIP_DRAW, NULL);
|
||||
for (i = 0; i < NUM_RECORD_TYPES; i++)
|
||||
{
|
||||
ConvertIntToDecimalStringN(strbuf, recordNums[i], STR_CONV_MODE_LEFT_ALIGN, sRecordNumMaxDigits[i]);
|
||||
numWidth = GetStringWidth(FONT_2, strbuf, -1);
|
||||
AddTextPrinterParameterized(windowId, FONT_2, sRecordsTexts[i + 1], 1, sRecordTextYCoords[i][0], TEXT_SKIP_DRAW, NULL);
|
||||
numWidth = GetStringWidth(FONT_NORMAL, strbuf, -1);
|
||||
AddTextPrinterParameterized(windowId, FONT_NORMAL, sRecordsTexts[i + 1], 1, sRecordTextYCoords[i][0], TEXT_SKIP_DRAW, NULL);
|
||||
x = DISPLAY_WIDTH - 16 - numWidth;
|
||||
AddTextPrinterParameterized(windowId, FONT_2, strbuf, x, sRecordNumYCoords[i][0], TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(windowId, FONT_NORMAL, strbuf, x, sRecordNumYCoords[i][0], TEXT_SKIP_DRAW, NULL);
|
||||
}
|
||||
PutWindowTilemap(windowId);
|
||||
}
|
||||
@@ -4371,7 +4371,7 @@ static void ShowNames(void)
|
||||
{
|
||||
colorsId = 0;
|
||||
playerId = GetPlayerIdByPos(i);
|
||||
left = (56 - GetStringWidth(FONT_0, GetPlayerName(playerId), -1)) / 2u;
|
||||
left = (56 - GetStringWidth(FONT_SMALL, GetPlayerName(playerId), -1)) / 2u;
|
||||
window.tilemapLeft = coords->left;
|
||||
window.tilemapTop = coords->top;
|
||||
sGfx->windowIds[i] = AddWindow(&window);
|
||||
@@ -4380,7 +4380,7 @@ static void ShowNames(void)
|
||||
if (playerId == GetMultiplayerId())
|
||||
colorsId = COLORID_BLUE;
|
||||
name = GetPlayerName(playerId);
|
||||
AddTextPrinterParameterized3(sGfx->windowIds[i], FONT_0, left, 1, sTextColorTable[colorsId], TEXT_SKIP_DRAW, name);
|
||||
AddTextPrinterParameterized3(sGfx->windowIds[i], FONT_SMALL, left, 1, sTextColorTable[colorsId], TEXT_SKIP_DRAW, name);
|
||||
CopyWindowToVram(sGfx->windowIds[i], COPYWIN_GFX);
|
||||
window.baseBlock += 0xE;
|
||||
DrawMessageWindow(&window);
|
||||
@@ -4457,22 +4457,22 @@ static void PrintRankedScores(u8 numPlayers_)
|
||||
}
|
||||
|
||||
// Print text
|
||||
x = 216 - GetStringWidth(FONT_0, gText_SpacePoints, 0);
|
||||
x = 216 - GetStringWidth(FONT_SMALL, gText_SpacePoints, 0);
|
||||
for (i = 0; i < numPlayers; i++)
|
||||
{
|
||||
u8 colorsId = COLORID_GRAY;
|
||||
u8 playerId = playersByRanking[i];
|
||||
u32 points = scoreResults[playerId].score;
|
||||
|
||||
AddTextPrinterParameterized(sGfx->windowIds[1], FONT_0, sRankingTexts[scoreResults[playerId].ranking], 8, sRankingYCoords[i], TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(sGfx->windowIds[1], FONT_SMALL, sRankingTexts[scoreResults[playerId].ranking], 8, sRankingYCoords[i], TEXT_SKIP_DRAW, NULL);
|
||||
if (playerId == GetMultiplayerId())
|
||||
colorsId =COLORID_BLUE;
|
||||
name = GetPlayerName(playerId);
|
||||
AddTextPrinterParameterized3(sGfx->windowIds[1], FONT_0, 28, sRankingYCoords[i], sTextColorTable[colorsId], TEXT_SKIP_DRAW, name);
|
||||
AddTextPrinterParameterized3(sGfx->windowIds[1], FONT_SMALL, 28, sRankingYCoords[i], sTextColorTable[colorsId], TEXT_SKIP_DRAW, name);
|
||||
ConvertIntToDecimalStringN(numString, points, STR_CONV_MODE_RIGHT_ALIGN, 7);
|
||||
numWidth = GetStringWidth(FONT_0, numString, -1);
|
||||
AddTextPrinterParameterized(sGfx->windowIds[1], FONT_0, numString, x - 35, sRankingYCoords[i], TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(sGfx->windowIds[1], FONT_0, gText_SpacePoints, x, sRankingYCoords[i], TEXT_SKIP_DRAW, NULL);
|
||||
numWidth = GetStringWidth(FONT_SMALL, numString, -1);
|
||||
AddTextPrinterParameterized(sGfx->windowIds[1], FONT_SMALL, numString, x - 35, sRankingYCoords[i], TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(sGfx->windowIds[1], FONT_SMALL, gText_SpacePoints, x, sRankingYCoords[i], TEXT_SKIP_DRAW, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4503,10 +4503,10 @@ static void ShowResults(void)
|
||||
case 2:
|
||||
FillWindowPixelBuffer(sGfx->windowIds[0], PIXEL_FILL(1));
|
||||
FillWindowPixelBuffer(sGfx->windowIds[1], PIXEL_FILL(1));
|
||||
strWidth = GetStringWidth(FONT_0, gText_BerryPickingResults, -1);
|
||||
strWidth = GetStringWidth(FONT_SMALL, gText_BerryPickingResults, -1);
|
||||
x = (DISPLAY_WIDTH - 16 - strWidth) / 2;
|
||||
AddTextPrinterParameterized(sGfx->windowIds[0], FONT_0, gText_BerryPickingResults, x, 2, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(sGfx->windowIds[1], FONT_0, gText_10P30P50P50P, 68, 16, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(sGfx->windowIds[0], FONT_SMALL, gText_BerryPickingResults, x, 2, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(sGfx->windowIds[1], FONT_SMALL, gText_10P30P50P50P, 68, 16, TEXT_SKIP_DRAW, NULL);
|
||||
for (i = 0; i < numPlayers; i++)
|
||||
{
|
||||
u8 colorsId = COLORID_GRAY;
|
||||
@@ -4514,7 +4514,7 @@ static void ShowResults(void)
|
||||
colorsId = COLORID_BLUE;
|
||||
|
||||
name = GetPlayerName(i);
|
||||
AddTextPrinterParameterized3(sGfx->windowIds[1], FONT_0, 2, sResultsYCoords[i], sTextColorTable[colorsId], TEXT_SKIP_DRAW, name);
|
||||
AddTextPrinterParameterized3(sGfx->windowIds[1], FONT_SMALL, 2, sResultsYCoords[i], sTextColorTable[colorsId], TEXT_SKIP_DRAW, name);
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
u32 width;
|
||||
@@ -4522,13 +4522,13 @@ static void ShowResults(void)
|
||||
u16 maxBerriesPicked = Min(GetHighestBerryResult(j), MAX_BERRIES);
|
||||
|
||||
ConvertIntToDecimalStringN(strBuff_Large, berriesPicked, STR_CONV_MODE_LEFT_ALIGN, 4);
|
||||
width = GetStringWidth(FONT_0, strBuff_Large, -1);
|
||||
width = GetStringWidth(FONT_SMALL, strBuff_Large, -1);
|
||||
|
||||
// If player got the most of a berry type, highlight their number in red
|
||||
if (maxBerriesPicked == berriesPicked && maxBerriesPicked != 0)
|
||||
AddTextPrinterParameterized3(sGfx->windowIds[1], FONT_0, sResultsXCoords[j] - width, sResultsYCoords[i], sTextColorTable[1], TEXT_SKIP_DRAW, strBuff_Large);
|
||||
AddTextPrinterParameterized3(sGfx->windowIds[1], FONT_SMALL, sResultsXCoords[j] - width, sResultsYCoords[i], sTextColorTable[1], TEXT_SKIP_DRAW, strBuff_Large);
|
||||
else
|
||||
AddTextPrinterParameterized(sGfx->windowIds[1], FONT_0, strBuff_Large, sResultsXCoords[j] - width, sResultsYCoords[i], TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(sGfx->windowIds[1], FONT_SMALL, strBuff_Large, sResultsXCoords[j] - width, sResultsYCoords[i], TEXT_SKIP_DRAW, NULL);
|
||||
}
|
||||
}
|
||||
CopyWindowToVram(sGfx->windowIds[0], COPYWIN_GFX);
|
||||
@@ -4557,9 +4557,9 @@ static void ShowResults(void)
|
||||
case 5:
|
||||
FillWindowPixelBuffer(sGfx->windowIds[0], PIXEL_FILL(1));
|
||||
FillWindowPixelBuffer(sGfx->windowIds[1], PIXEL_FILL(1));
|
||||
strWidth = GetStringWidth(FONT_0, gText_AnnouncingRankings, -1);
|
||||
strWidth = GetStringWidth(FONT_SMALL, gText_AnnouncingRankings, -1);
|
||||
x = (DISPLAY_WIDTH - 16 - strWidth) / 2;
|
||||
AddTextPrinterParameterized(sGfx->windowIds[0], FONT_0, gText_AnnouncingRankings, x, 2, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(sGfx->windowIds[0], FONT_SMALL, gText_AnnouncingRankings, x, 2, TEXT_SKIP_DRAW, NULL);
|
||||
sGfx->state++;
|
||||
break;
|
||||
case 6:
|
||||
@@ -4603,14 +4603,14 @@ static void ShowResults(void)
|
||||
PlayNewMapMusic(MUS_LEVEL_UP);
|
||||
FillWindowPixelBuffer(sGfx->windowIds[0], PIXEL_FILL(1));
|
||||
FillWindowPixelBuffer(sGfx->windowIds[1], PIXEL_FILL(1));
|
||||
strWidth = GetStringWidth(FONT_0, gText_AnnouncingPrizes, -1);
|
||||
strWidth = GetStringWidth(FONT_SMALL, gText_AnnouncingPrizes, -1);
|
||||
x = (DISPLAY_WIDTH - 16 - strWidth) / 2;
|
||||
AddTextPrinterParameterized(sGfx->windowIds[0], FONT_0, gText_AnnouncingPrizes, x, 2, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(sGfx->windowIds[0], FONT_SMALL, gText_AnnouncingPrizes, x, 2, TEXT_SKIP_DRAW, NULL);
|
||||
DynamicPlaceholderTextUtil_Reset();
|
||||
CopyItemName(GetPrizeItemId(), strBuff_Small);
|
||||
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, strBuff_Small);
|
||||
DynamicPlaceholderTextUtil_ExpandPlaceholders(strBuff_Large, gText_FirstPlacePrize);
|
||||
AddTextPrinterParameterized(sGfx->windowIds[1], FONT_0, strBuff_Large, 8, 2, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(sGfx->windowIds[1], FONT_SMALL, strBuff_Large, 8, 2, TEXT_SKIP_DRAW, NULL);
|
||||
prizeState = TryGivePrize();
|
||||
if (prizeState != PRIZE_RECEIVED && prizeState != NO_PRIZE)
|
||||
{
|
||||
@@ -4621,7 +4621,7 @@ static void ShowResults(void)
|
||||
DynamicPlaceholderTextUtil_ExpandPlaceholders(strBuff_Large, gText_CantHoldAnyMore);
|
||||
else if (prizeState == PRIZE_FILLED_BAG)
|
||||
DynamicPlaceholderTextUtil_ExpandPlaceholders(strBuff_Large, gText_FilledStorageSpace);
|
||||
AddTextPrinterParameterized(sGfx->windowIds[1], FONT_0, strBuff_Large, 8, 40, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(sGfx->windowIds[1], FONT_SMALL, strBuff_Large, 8, 40, TEXT_SKIP_DRAW, NULL);
|
||||
}
|
||||
CopyWindowToVram(sGfx->windowIds[0], COPYWIN_GFX);
|
||||
CopyWindowToVram(sGfx->windowIds[1], COPYWIN_GFX);
|
||||
@@ -4679,10 +4679,10 @@ static void Msg_WantToPlayAgain(void)
|
||||
// Print text
|
||||
FillWindowPixelBuffer(sGfx->windowIds[WIN_PLAY_AGAIN], PIXEL_FILL(1));
|
||||
FillWindowPixelBuffer(sGfx->windowIds[WIN_YES_NO], PIXEL_FILL(1));
|
||||
AddTextPrinterParameterized(sGfx->windowIds[WIN_PLAY_AGAIN], FONT_2, gText_WantToPlayAgain, 0, 6, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(sGfx->windowIds[WIN_YES_NO], FONT_2, gText_Yes, 8, 2, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(sGfx->windowIds[WIN_YES_NO], FONT_2, gText_No, 8, 16, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(sGfx->windowIds[WIN_YES_NO], FONT_2, gText_SelectorArrow2, 0, 2, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(sGfx->windowIds[WIN_PLAY_AGAIN], FONT_NORMAL, gText_WantToPlayAgain, 0, 6, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(sGfx->windowIds[WIN_YES_NO], FONT_NORMAL, gText_Yes, 8, 2, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(sGfx->windowIds[WIN_YES_NO], FONT_NORMAL, gText_No, 8, 16, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(sGfx->windowIds[WIN_YES_NO], FONT_NORMAL, gText_SelectorArrow2, 0, 2, TEXT_SKIP_DRAW, NULL);
|
||||
CopyWindowToVram(sGfx->windowIds[WIN_PLAY_AGAIN], COPYWIN_GFX);
|
||||
CopyWindowToVram(sGfx->windowIds[WIN_YES_NO], COPYWIN_GFX);
|
||||
sGfx->state++;
|
||||
@@ -4703,9 +4703,9 @@ static void Msg_WantToPlayAgain(void)
|
||||
if (y == PLAY_AGAIN_NONE)
|
||||
y = PLAY_AGAIN_YES;
|
||||
FillWindowPixelBuffer(sGfx->windowIds[WIN_YES_NO], PIXEL_FILL(1));
|
||||
AddTextPrinterParameterized(sGfx->windowIds[WIN_YES_NO], FONT_2, gText_Yes, 8, 2, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(sGfx->windowIds[WIN_YES_NO], FONT_2, gText_No, 8, 16, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(sGfx->windowIds[WIN_YES_NO], FONT_2, gText_SelectorArrow2, 0, y == 1 ? 2 : 16, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(sGfx->windowIds[WIN_YES_NO], FONT_NORMAL, gText_Yes, 8, 2, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(sGfx->windowIds[WIN_YES_NO], FONT_NORMAL, gText_No, 8, 16, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(sGfx->windowIds[WIN_YES_NO], FONT_NORMAL, gText_SelectorArrow2, 0, y == 1 ? 2 : 16, TEXT_SKIP_DRAW, NULL);
|
||||
CopyWindowToVram(sGfx->windowIds[WIN_YES_NO], COPYWIN_FULL);
|
||||
|
||||
// Increment state only if A or B button have been pressed.
|
||||
@@ -4758,7 +4758,7 @@ static void Msg_SavingDontTurnOff(void)
|
||||
{
|
||||
case 0:
|
||||
DrawDialogueFrame(0, FALSE);
|
||||
AddTextPrinterParameterized2(0, FONT_2, gText_SavingDontTurnOffThePower2, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
AddTextPrinterParameterized2(0, FONT_NORMAL, gText_SavingDontTurnOffThePower2, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
sGfx->state++;
|
||||
break;
|
||||
case 1:
|
||||
@@ -4796,7 +4796,7 @@ static void Msg_CommunicationStandby(void)
|
||||
break;
|
||||
case 1:
|
||||
FillWindowPixelBuffer(sGfx->windowIds[0], PIXEL_FILL(1));
|
||||
AddTextPrinterParameterized(sGfx->windowIds[0], FONT_2, gText_CommunicationStandby3, 0, 6, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(sGfx->windowIds[0], FONT_NORMAL, gText_CommunicationStandby3, 0, 6, TEXT_SKIP_DRAW, NULL);
|
||||
CopyWindowToVram(sGfx->windowIds[0], COPYWIN_GFX);
|
||||
sGfx->state++;
|
||||
break;
|
||||
@@ -4836,7 +4836,7 @@ static void Msg_SomeoneDroppedOut(void)
|
||||
break;
|
||||
case 1:
|
||||
FillWindowPixelBuffer(sGfx->windowIds[0], PIXEL_FILL(1));
|
||||
AddTextPrinterParameterized(sGfx->windowIds[0], FONT_2, gText_SomeoneDroppedOut, 0, 6, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(sGfx->windowIds[0], FONT_NORMAL, gText_SomeoneDroppedOut, 0, 6, TEXT_SKIP_DRAW, NULL);
|
||||
CopyWindowToVram(sGfx->windowIds[0], COPYWIN_GFX);
|
||||
sGfx->state++;
|
||||
break;
|
||||
|
||||
@@ -110,7 +110,7 @@ u8 *DynamicPlaceholderTextUtil_ExpandPlaceholders(u8 *dest, const u8 *src)
|
||||
{
|
||||
while (*src != EOS)
|
||||
{
|
||||
if (*src != CHAR_DYNAMIC_PLACEHOLDER)
|
||||
if (*src != CHAR_DYNAMIC)
|
||||
{
|
||||
*dest++ = *src++;
|
||||
}
|
||||
|
||||
+6
-5
@@ -4,7 +4,7 @@
|
||||
#include "easy_chat.h"
|
||||
#include "event_data.h"
|
||||
#include "field_message_box.h"
|
||||
#include "mevent.h"
|
||||
#include "mystery_gift.h"
|
||||
#include "menu.h"
|
||||
#include "mail.h"
|
||||
#include "pokedex.h"
|
||||
@@ -472,11 +472,11 @@ void InitEasyChatPhrases(void)
|
||||
#endif
|
||||
}
|
||||
|
||||
void EC_ResetMEventProfileMaybe(void)
|
||||
void InitQuestionnaireWords(void)
|
||||
{
|
||||
s32 i;
|
||||
u16 *ptr = GetMEventProfileECWordsMaybe();
|
||||
for (i = 0; i < 4; i++)
|
||||
u16 *ptr = GetQuestionnaireWordsPtr();
|
||||
for (i = 0; i < NUM_QUESTIONNAIRE_WORDS; i++)
|
||||
ptr[i] = EC_WORD_UNDEFINED;
|
||||
}
|
||||
|
||||
@@ -532,7 +532,8 @@ u8 GetSelectedGroupByIndex(u8 index)
|
||||
return sEasyChatSelectionData->groups[index];
|
||||
}
|
||||
|
||||
static u8 *unref_sub_80BDF6C(u8 *dest, u8 groupId, u16 totalChars)
|
||||
// Unused
|
||||
static u8 *BufferEasyChatWordGroupName(u8 *dest, u8 groupId, u16 totalChars)
|
||||
{
|
||||
u16 i;
|
||||
u8 *str = StringCopy(dest, sEasyChatGroupNamePointers[groupId]);
|
||||
|
||||
+3
-3
@@ -3,7 +3,7 @@
|
||||
#include "easy_chat.h"
|
||||
#include "event_data.h"
|
||||
#include "menu.h"
|
||||
#include "mevent.h"
|
||||
#include "mystery_gift.h"
|
||||
#include "overworld.h"
|
||||
#include "strings.h"
|
||||
#include "task.h"
|
||||
@@ -271,7 +271,7 @@ void ShowEasyChatScreen(void)
|
||||
words = gSaveBlock1Ptr->easyChatBattleLost;
|
||||
break;
|
||||
case EASY_CHAT_TYPE_QUESTIONNAIRE:
|
||||
words = GetMEventProfileECWordsMaybe();
|
||||
words = GetQuestionnaireWordsPtr();
|
||||
break;
|
||||
case EASY_CHAT_TYPE_MAIL:
|
||||
words = gSaveBlock1Ptr->mail[gSpecialVar_0x8005].words;
|
||||
@@ -1284,7 +1284,7 @@ u8 GetECSelectWordNumRows(void)
|
||||
return sEasyChatScreen->selectWordNumRows;
|
||||
}
|
||||
|
||||
u8 unref_sub_80FFE60(void)
|
||||
static u8 UnusedDummy(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
+200
-184
@@ -9,6 +9,23 @@
|
||||
#include "strings.h"
|
||||
#include "text_window.h"
|
||||
|
||||
enum {
|
||||
GFXTAG_TRIANGLE_CURSOR,
|
||||
GFXTAG_RECTANGLE_CURSOR,
|
||||
GFXTAG_SCROLL_INDICATOR,
|
||||
GFXTAG_START_SELECT_BUTTONS,
|
||||
GFXTAG_MODE_WINDOW,
|
||||
GFXTAG_RS_INTERVIEW_FRAME,
|
||||
GFXTAG_BUTTON_WINDOW,
|
||||
};
|
||||
|
||||
enum {
|
||||
PALTAG_TRIANGLE_CURSOR,
|
||||
PALTAG_RECTANGLE_CURSOR,
|
||||
PALTAG_MISC_UI,
|
||||
PALTAG_RS_INTERVIEW_FRAME,
|
||||
};
|
||||
|
||||
struct ECWork
|
||||
{
|
||||
u16 state;
|
||||
@@ -134,63 +151,53 @@ static void UpdateStartSelectButtonSpriteVisibility(void);
|
||||
static void HideStartSelectButtonSprites(void);
|
||||
static void CreateFooterWindow(void);
|
||||
|
||||
static const u16 gUnknown_843F3B8[] = INCBIN_U16("graphics/link_rfu/unk_843F3F8.gbapal");
|
||||
static const u16 gUnknown_843F3D8[] = INCBIN_U16("graphics/link_rfu/unk_8E9BD28.gbapal");
|
||||
static const u16 sRightTriangleCursor_Tiles[] = INCBIN_U16("graphics/link_rfu/unk_843F3F8.4bpp");
|
||||
static const u16 sUpTriangleCursor_Tiles[] = INCBIN_U16("graphics/link_rfu/unk_843F418.4bpp");
|
||||
static const u16 sStartSelectButtons_Tiles[] = INCBIN_U16("graphics/link_rfu/unk_843F518.4bpp");
|
||||
static const u16 gUnknown_843F618[] = INCBIN_U16("graphics/link_rfu/unk_843F638.gbapal");
|
||||
static const u32 gUnknown_843F638[] = INCBIN_U32("graphics/link_rfu/unk_843F638.4bpp.lz");
|
||||
static const u16 gUnknown_843F76C[] = INCBIN_U16("graphics/link_rfu/unk_843F76C.gbapal");
|
||||
static const u16 gUnknown_843F78C[] = INCBIN_U16("graphics/link_rfu/unk_843F78C.gbapal");
|
||||
static const u32 gUnknown_843F7AC[] = INCBIN_U32("graphics/link_rfu/unk_843F7AC.4bpp.lz");
|
||||
|
||||
static const u16 gUnknown_843F874[] = {
|
||||
RGB( 0, 0, 0),
|
||||
RGB( 0, 0, 0),
|
||||
RGB( 7, 25, 31),
|
||||
RGB(21, 21, 29)
|
||||
};
|
||||
|
||||
static const u16 gUnknown_843F87C[] = {
|
||||
RGB( 0, 0, 0),
|
||||
RGB(31, 31, 31),
|
||||
RGB(12, 12, 12),
|
||||
RGB(27, 26, 27),
|
||||
RGB( 8, 17, 9)
|
||||
};
|
||||
static const u16 sTriangleCursor_Pal[] = INCBIN_U16("graphics/easy_chat/triangle_cursor.gbapal");
|
||||
static const u16 sRectangleCursor_Pal[] = INCBIN_U16("graphics/easy_chat/rectangle_cursor.gbapal");
|
||||
static const u16 sTriangleCursor_Gfx[] = INCBIN_U16("graphics/easy_chat/triangle_cursor.4bpp");
|
||||
static const u16 sScrollIndicator_Gfx[] = INCBIN_U16("graphics/easy_chat/scroll_indicator.4bpp");
|
||||
static const u16 sStartSelectButtons_Gfx[] = INCBIN_U16("graphics/easy_chat/start_select_buttons.4bpp");
|
||||
// In Ruby/Sapphire Easy Chat screens had a black background, and when the player & interviewer were present
|
||||
// on screen the interview_frame gfx was shown behind them.
|
||||
// In FRLG all Easy Chat screens have a filled background, so these gfx go unused
|
||||
static const u16 sRSInterviewFrame_Pal[] = INCBIN_U16("graphics/easy_chat/interview_frame.gbapal");
|
||||
static const u32 sRSInterviewFrame_Gfx[] = INCBIN_U32("graphics/easy_chat/interview_frame.4bpp.lz");
|
||||
static const u16 sTextInputFrameOrange_Pal[] = INCBIN_U16("graphics/easy_chat/text_input_frame_orange.gbapal");
|
||||
static const u16 sTextInputFrameGreen_Pal[] = INCBIN_U16("graphics/easy_chat/text_input_frame_green.gbapal");
|
||||
static const u32 sTextInputFrame_Gfx[] = INCBIN_U32("graphics/easy_chat/text_input_frame.4bpp.lz");
|
||||
static const u16 sTitleText_Pal[] = INCBIN_U16("graphics/easy_chat/title_text.gbapal");
|
||||
static const u16 sText_Pal[] = INCBIN_U16("graphics/easy_chat/text.gbapal");
|
||||
|
||||
static const struct EasyChatPhraseFrameDimensions sPhraseFrameDimensions[] = {
|
||||
{
|
||||
.left = 0x03,
|
||||
.top = 0x04,
|
||||
.width = 0x18,
|
||||
.height = 0x04
|
||||
.left = 3,
|
||||
.top = 4,
|
||||
.width = 24,
|
||||
.height = 4
|
||||
}, {
|
||||
.left = 0x01,
|
||||
.top = 0x04,
|
||||
.width = 0x1b,
|
||||
.height = 0x04
|
||||
.left = 1,
|
||||
.top = 4,
|
||||
.width = 27,
|
||||
.height = 4
|
||||
}, {
|
||||
.left = 0x03,
|
||||
.top = 0x00,
|
||||
.width = 0x18,
|
||||
.height = 0x0a
|
||||
.left = 3,
|
||||
.top = 0,
|
||||
.width = 24,
|
||||
.height = 10
|
||||
}, {
|
||||
.left = 0x06,
|
||||
.top = 0x06,
|
||||
.width = 0x12,
|
||||
.height = 0x04
|
||||
.left = 6,
|
||||
.top = 6,
|
||||
.width = 18,
|
||||
.height = 4
|
||||
}, {
|
||||
.left = 0x10,
|
||||
.top = 0x04,
|
||||
.width = 0x09,
|
||||
.height = 0x02
|
||||
.left = 16,
|
||||
.top = 4,
|
||||
.width = 9,
|
||||
.height = 2
|
||||
}, {
|
||||
.left = 0x0e,
|
||||
.top = 0x04,
|
||||
.width = 0x12,
|
||||
.height = 0x04
|
||||
.left = 14,
|
||||
.top = 4,
|
||||
.width = 18,
|
||||
.height = 4
|
||||
}
|
||||
};
|
||||
|
||||
@@ -271,10 +278,10 @@ static const struct WindowTemplate sEasyChatYesNoWindowTemplate = {
|
||||
.baseBlock = 0x062
|
||||
};
|
||||
|
||||
static const u8 gUnknown_843F8D8[] = _("{UNDERSCORE}");
|
||||
static const u8 sText_Underscore[] = _("{UNDERSCORE}");
|
||||
static const u8 sText_Clear17[] = _("{CLEAR 17}");
|
||||
|
||||
static const u8 *const sEasyChatKeyboardText[] = {
|
||||
static const u8 *const sEasyChatKeyboardAlphabet[NUM_ALPHABET_ROWS] = {
|
||||
gText_EasyChatKeyboard_ABCDEFothers,
|
||||
gText_EasyChatKeyboard_GHIJKL,
|
||||
gText_EasyChatKeyboard_MNOPQRS,
|
||||
@@ -282,38 +289,30 @@ static const u8 *const sEasyChatKeyboardText[] = {
|
||||
};
|
||||
|
||||
static const struct SpriteSheet sEasyChatSpriteSheets[] = {
|
||||
{sRightTriangleCursor_Tiles, 0x0020, 0},
|
||||
{sUpTriangleCursor_Tiles, 0x0100, 2},
|
||||
{sStartSelectButtons_Tiles, 0x0100, 3},
|
||||
{.data = sTriangleCursor_Gfx, .size = 0x0020, .tag = GFXTAG_TRIANGLE_CURSOR},
|
||||
{.data = sScrollIndicator_Gfx, .size = 0x0100, .tag = GFXTAG_SCROLL_INDICATOR},
|
||||
{.data = sStartSelectButtons_Gfx, .size = 0x0100, .tag = GFXTAG_START_SELECT_BUTTONS},
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct SpritePalette sEasyChatSpritePalettes[] = {
|
||||
{gUnknown_843F3B8, 0},
|
||||
{gUnknown_843F3D8, 1},
|
||||
{gUnknown_8E99F24, 2},
|
||||
{gUnknown_843F618, 3},
|
||||
{.data = sTriangleCursor_Pal, .tag = PALTAG_TRIANGLE_CURSOR},
|
||||
{.data = sRectangleCursor_Pal, .tag = PALTAG_RECTANGLE_CURSOR},
|
||||
{.data = gEasyChatButtonWindow_Pal, .tag = PALTAG_MISC_UI}, // The palette is generated from the button window but used for various parts of the UI
|
||||
{.data = sRSInterviewFrame_Pal, .tag = PALTAG_RS_INTERVIEW_FRAME},
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct CompressedSpriteSheet sEasyChatCompressedSpriteSheets[] = {
|
||||
{gUnknown_843F638, 0x0800, 5},
|
||||
{gEasyChatRedRectangularCursor_Tiles, 0x1000, 1},
|
||||
{gEasyChatSelectGroupHelp_Tiles, 0x0800, 6},
|
||||
{gEasyChatModeIcons_Tiles, 0x1000, 4}
|
||||
{.data = sRSInterviewFrame_Gfx, .size = 0x0800, .tag = GFXTAG_RS_INTERVIEW_FRAME},
|
||||
{.data = gEasyChatRectangleCursor_Gfx, .size = 0x1000, .tag = GFXTAG_RECTANGLE_CURSOR},
|
||||
{.data = gEasyChatButtonWindow_Gfx, .size = 0x0800, .tag = GFXTAG_BUTTON_WINDOW},
|
||||
{.data = gEasyChatMode_Gfx, .size = 0x1000, .tag = GFXTAG_MODE_WINDOW}
|
||||
};
|
||||
|
||||
static const u8 sECDisplay_AlphaModeXCoords[] = {
|
||||
0,
|
||||
12,
|
||||
24,
|
||||
56,
|
||||
68,
|
||||
80,
|
||||
92
|
||||
};
|
||||
static const u8 sAlphabetKeyboardColumnOffsets[NUM_ALPHABET_COLUMNS] = {0, 12, 24, 56, 68, 80, 92};
|
||||
|
||||
static const struct OamData sOamData_RightTriangleCursor = {
|
||||
static const struct OamData sOamData_TriangleCursor = {
|
||||
.y = 0,
|
||||
.affineMode = ST_OAM_AFFINE_OFF,
|
||||
.objMode = ST_OAM_OBJ_NORMAL,
|
||||
@@ -328,17 +327,17 @@ static const struct OamData sOamData_RightTriangleCursor = {
|
||||
.paletteNum = 0
|
||||
};
|
||||
|
||||
static const struct SpriteTemplate sSpriteTemplate_RightTriangleCursor = {
|
||||
.tileTag = 0,
|
||||
.paletteTag = 0,
|
||||
.oam = &sOamData_RightTriangleCursor,
|
||||
static const struct SpriteTemplate sSpriteTemplate_TriangleCursor = {
|
||||
.tileTag = GFXTAG_TRIANGLE_CURSOR,
|
||||
.paletteTag = PALTAG_TRIANGLE_CURSOR,
|
||||
.oam = &sOamData_TriangleCursor,
|
||||
.anims = gDummySpriteAnimTable,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = SpriteCB_BounceCursor
|
||||
};
|
||||
|
||||
static const struct OamData sOamData_RedRectangularCursor = {
|
||||
static const struct OamData sOamData_RectangleCursor = {
|
||||
.y = 0,
|
||||
.affineMode = ST_OAM_AFFINE_OFF,
|
||||
.objMode = ST_OAM_OBJ_NORMAL,
|
||||
@@ -353,44 +352,52 @@ static const struct OamData sOamData_RedRectangularCursor = {
|
||||
.paletteNum = 0
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnimCmd_RectCursor_Wide[] = {
|
||||
static const union AnimCmd sAnim_RectangleCursor_OnGroup[] = {
|
||||
ANIMCMD_FRAME(0x00, 0),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnimCmd_RectCursor_Norm[] = {
|
||||
static const union AnimCmd sAnim_RectangleCursor_OnButton[] = {
|
||||
ANIMCMD_FRAME(0x20, 0),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnimCmd_RectCursor_NormTaller[] = {
|
||||
static const union AnimCmd sAnim_RectangleCursor_OnOthers[] = {
|
||||
ANIMCMD_FRAME(0x40, 0),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnimCmd_RectCursor_Narrow[] = {
|
||||
static const union AnimCmd sAnim_RectangleCursor_OnLetter[] = {
|
||||
ANIMCMD_FRAME(0x60, 0),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sAnimTable_RedRectangularCursor[] = {
|
||||
sAnimCmd_RectCursor_Wide,
|
||||
sAnimCmd_RectCursor_Norm,
|
||||
sAnimCmd_RectCursor_NormTaller,
|
||||
sAnimCmd_RectCursor_Narrow
|
||||
// Each anim changes the dimensions of the rectangle cursor to fit what it should be selecting
|
||||
enum {
|
||||
RECTCURSOR_ANIM_ON_GROUP,
|
||||
RECTCURSOR_ANIM_ON_BUTTON,
|
||||
RECTCURSOR_ANIM_ON_OTHERS,
|
||||
RECTCURSOR_ANIM_ON_LETTER,
|
||||
};
|
||||
|
||||
static const struct SpriteTemplate sSpriteTemplate_RedRectangularCursor = {
|
||||
.tileTag = 1,
|
||||
.paletteTag = 1,
|
||||
.oam = &sOamData_RedRectangularCursor,
|
||||
.anims = sAnimTable_RedRectangularCursor,
|
||||
static const union AnimCmd *const sAnims_RectangleCursor[] = {
|
||||
[RECTCURSOR_ANIM_ON_GROUP] = sAnim_RectangleCursor_OnGroup,
|
||||
[RECTCURSOR_ANIM_ON_BUTTON] = sAnim_RectangleCursor_OnButton,
|
||||
[RECTCURSOR_ANIM_ON_OTHERS] = sAnim_RectangleCursor_OnOthers,
|
||||
[RECTCURSOR_ANIM_ON_LETTER] = sAnim_RectangleCursor_OnLetter,
|
||||
};
|
||||
|
||||
static const struct SpriteTemplate sSpriteTemplate_RectangleCursor = {
|
||||
.tileTag = GFXTAG_RECTANGLE_CURSOR,
|
||||
.paletteTag = PALTAG_RECTANGLE_CURSOR,
|
||||
.oam = &sOamData_RectangleCursor,
|
||||
.anims = sAnims_RectangleCursor,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = SpriteCB_BounceCursor
|
||||
};
|
||||
|
||||
static const struct OamData sOamData_EasyChatModeIcons = {
|
||||
static const struct OamData sOamData_ModeWindow = {
|
||||
.y = 0,
|
||||
.affineMode = ST_OAM_AFFINE_OFF,
|
||||
.objMode = ST_OAM_OBJ_NORMAL,
|
||||
@@ -405,53 +412,61 @@ static const struct OamData sOamData_EasyChatModeIcons = {
|
||||
.paletteNum = 0
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnim_EasyChatModeIcon_Hidden[] = {
|
||||
ANIMCMD_FRAME(0x60, 0),
|
||||
static const union AnimCmd sAnim_ModeWindow_Hidden[] = {
|
||||
ANIMCMD_FRAME(0x60, 0), // Hidden frame
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnim_EasyChatModeIcon_ToGroupMode[] = {
|
||||
ANIMCMD_FRAME(0x40, 4),
|
||||
ANIMCMD_FRAME(0x20, 4),
|
||||
static const union AnimCmd sAnim_ModeWindow_ToGroup[] = {
|
||||
ANIMCMD_FRAME(0x40, 4), // Transition frame
|
||||
ANIMCMD_FRAME(0x20, 4), // 'Group' frame
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnim_EasyChatModeIcon_ToAlphaMode[] = {
|
||||
ANIMCMD_FRAME(0x40, 4),
|
||||
ANIMCMD_FRAME(0x00, 4),
|
||||
static const union AnimCmd sAnim_ModeWindow_ToAlphabet[] = {
|
||||
ANIMCMD_FRAME(0x40, 4), // Transition frame
|
||||
ANIMCMD_FRAME(0x00, 4), // 'A-Z' frame
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnim_EasyChatModeIcon_ToHidden[] = {
|
||||
ANIMCMD_FRAME(0x40, 4),
|
||||
ANIMCMD_FRAME(0x60, 0),
|
||||
static const union AnimCmd sAnim_ModeWindow_ToHidden[] = {
|
||||
ANIMCMD_FRAME(0x40, 4), // Transition frame
|
||||
ANIMCMD_FRAME(0x60, 0), // Hidden frame
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnim_EasyChatModeIcon_HoldSmall[] = {
|
||||
ANIMCMD_FRAME(0x40, 4),
|
||||
static const union AnimCmd sAnim_ModeWindow_Transition[] = {
|
||||
ANIMCMD_FRAME(0x40, 4), // Transition frame
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sAnimTable_EasyChatModeIcons[] = {
|
||||
sAnim_EasyChatModeIcon_Hidden,
|
||||
sAnim_EasyChatModeIcon_ToGroupMode,
|
||||
sAnim_EasyChatModeIcon_ToAlphaMode,
|
||||
sAnim_EasyChatModeIcon_ToHidden,
|
||||
sAnim_EasyChatModeIcon_HoldSmall
|
||||
enum {
|
||||
MODEWINDOW_ANIM_HIDDEN,
|
||||
MODEWINDOW_ANIM_TO_GROUP,
|
||||
MODEWINDOW_ANIM_TO_ALPHABET,
|
||||
MODEWINDOW_ANIM_TO_HIDDEN,
|
||||
MODEWINDOW_ANIM_TRANSITION,
|
||||
};
|
||||
|
||||
static const struct SpriteTemplate sSpriteTemplate_EasyChatModeIcons = {
|
||||
.tileTag = 4,
|
||||
.paletteTag = 2,
|
||||
.oam = &sOamData_EasyChatModeIcons,
|
||||
.anims = sAnimTable_EasyChatModeIcons,
|
||||
static const union AnimCmd *const sAnims_ModeWindow[] = {
|
||||
[MODEWINDOW_ANIM_HIDDEN] = sAnim_ModeWindow_Hidden,
|
||||
[MODEWINDOW_ANIM_TO_GROUP] = sAnim_ModeWindow_ToGroup,
|
||||
[MODEWINDOW_ANIM_TO_ALPHABET] = sAnim_ModeWindow_ToAlphabet,
|
||||
[MODEWINDOW_ANIM_TO_HIDDEN] = sAnim_ModeWindow_ToHidden,
|
||||
[MODEWINDOW_ANIM_TRANSITION] = sAnim_ModeWindow_Transition,
|
||||
};
|
||||
|
||||
static const struct SpriteTemplate sSpriteTemplate_ModeWindow = {
|
||||
.tileTag = GFXTAG_MODE_WINDOW,
|
||||
.paletteTag = PALTAG_MISC_UI,
|
||||
.oam = &sOamData_ModeWindow,
|
||||
.anims = sAnims_ModeWindow,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = SpriteCallbackDummy
|
||||
};
|
||||
|
||||
static const struct OamData sOamData_SelectGroupHelp = {
|
||||
static const struct OamData sOamData_ButtonWindow = {
|
||||
.y = 0,
|
||||
.affineMode = ST_OAM_AFFINE_OFF,
|
||||
.objMode = ST_OAM_OBJ_NORMAL,
|
||||
@@ -466,17 +481,17 @@ static const struct OamData sOamData_SelectGroupHelp = {
|
||||
.paletteNum = 0
|
||||
};
|
||||
|
||||
static const struct SpriteTemplate sSpriteTemplate_SelectGroupHelp = {
|
||||
.tileTag = 6,
|
||||
.paletteTag = 2,
|
||||
.oam = &sOamData_SelectGroupHelp,
|
||||
static const struct SpriteTemplate sSpriteTemplate_ButtonWindow = {
|
||||
.tileTag = GFXTAG_BUTTON_WINDOW,
|
||||
.paletteTag = PALTAG_MISC_UI,
|
||||
.oam = &sOamData_ButtonWindow,
|
||||
.anims = gDummySpriteAnimTable,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = SpriteCallbackDummy
|
||||
};
|
||||
|
||||
static const struct OamData gUnknown_843FA58 = {
|
||||
static const struct OamData sOamData_StartSelectButton = {
|
||||
.y = 0,
|
||||
.affineMode = ST_OAM_AFFINE_OFF,
|
||||
.objMode = ST_OAM_OBJ_NORMAL,
|
||||
@@ -491,7 +506,7 @@ static const struct OamData gUnknown_843FA58 = {
|
||||
.paletteNum = 0
|
||||
};
|
||||
|
||||
static const struct OamData sOamData_UpTriangleCursor = {
|
||||
static const struct OamData sOamData_ScrollIndicator = {
|
||||
.y = 0,
|
||||
.affineMode = ST_OAM_AFFINE_OFF,
|
||||
.objMode = ST_OAM_OBJ_NORMAL,
|
||||
@@ -506,36 +521,37 @@ static const struct OamData sOamData_UpTriangleCursor = {
|
||||
.paletteNum = 0
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_843FA68[] = {
|
||||
static const union AnimCmd sAnim_Frame0[] = {
|
||||
ANIMCMD_FRAME(0, 0),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_843FA70[] = {
|
||||
static const union AnimCmd sAnim_Frame1[] = {
|
||||
ANIMCMD_FRAME(4, 0),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd *const gUnknown_843FA78[] = {
|
||||
gUnknown_843FA68,
|
||||
gUnknown_843FA70,
|
||||
// Frame0 is Start button, Frame1 is Select button, both are identical for the scroll indicators
|
||||
static const union AnimCmd *const sAnims_TwoFrame[] = {
|
||||
sAnim_Frame0,
|
||||
sAnim_Frame1,
|
||||
};
|
||||
|
||||
static const struct SpriteTemplate sSpriteTemplate_StartSelectButtons = {
|
||||
.tileTag = 3,
|
||||
.paletteTag = 2,
|
||||
.oam = &gUnknown_843FA58,
|
||||
.anims = gUnknown_843FA78,
|
||||
.tileTag = GFXTAG_START_SELECT_BUTTONS,
|
||||
.paletteTag = PALTAG_MISC_UI,
|
||||
.oam = &sOamData_StartSelectButton,
|
||||
.anims = sAnims_TwoFrame,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = SpriteCallbackDummy,
|
||||
};
|
||||
|
||||
static const struct SpriteTemplate sSpriteTemplate_UpTriangleCursor = {
|
||||
.tileTag = 2,
|
||||
.paletteTag = 2,
|
||||
.oam = &sOamData_UpTriangleCursor,
|
||||
.anims = gUnknown_843FA78,
|
||||
static const struct SpriteTemplate sSpriteTemplate_ScrollIndicator = {
|
||||
.tileTag = GFXTAG_SCROLL_INDICATOR,
|
||||
.paletteTag = PALTAG_MISC_UI,
|
||||
.oam = &sOamData_ScrollIndicator,
|
||||
.anims = sAnims_TwoFrame,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = SpriteCallbackDummy,
|
||||
@@ -573,7 +589,7 @@ bool8 LoadEasyChatGraphics(void)
|
||||
break;
|
||||
case 2:
|
||||
DrawECFrameInTilemapBuffer(sEasyChatGraphicsResources->bg1TilemapBuffer);
|
||||
DecompressAndLoadBgGfxUsingHeap(1, gUnknown_843F7AC, 0, 0, 0);
|
||||
DecompressAndLoadBgGfxUsingHeap(1, sTextInputFrame_Gfx, 0, 0, 0);
|
||||
CopyBgTilemapBufferToVram(1);
|
||||
break;
|
||||
case 3:
|
||||
@@ -695,12 +711,12 @@ static bool8 ECInterfaceCmd_02(void)
|
||||
{
|
||||
if (*ecWord == 0xFFFF)
|
||||
{
|
||||
stringWidth = GetStringWidth(FONT_1, gUnknown_843F8D8, 0) * 7;
|
||||
stringWidth = GetStringWidth(FONT_NORMAL_COPY_1, sText_Underscore, 0) * 7;
|
||||
}
|
||||
else
|
||||
{
|
||||
CopyEasyChatWord(str, *ecWord);
|
||||
stringWidth = GetStringWidth(FONT_1, str, 0);
|
||||
stringWidth = GetStringWidth(FONT_NORMAL_COPY_1, str, 0);
|
||||
}
|
||||
|
||||
trueStringWidth = stringWidth + 17;
|
||||
@@ -1303,13 +1319,13 @@ static void SetGpuRegsForEasyChatInit(void)
|
||||
static void LoadEasyChatPals(void)
|
||||
{
|
||||
ResetPaletteFade();
|
||||
LoadPalette(gEasyChatMode_Pal, 0, 32);
|
||||
LoadPalette(gUnknown_843F76C, 1 * 16, 32);
|
||||
LoadPalette(gUnknown_843F78C, 4 * 16, 32);
|
||||
LoadPalette(gUnknown_843F874, 10 * 16, 8);
|
||||
LoadPalette(gUnknown_843F87C, 11 * 16, 10);
|
||||
LoadPalette(gUnknown_843F87C, 15 * 16, 10);
|
||||
LoadPalette(gUnknown_843F87C, 3 * 16, 10);
|
||||
LoadPalette(gEasyChatWindow_Pal, 0, 32);
|
||||
LoadPalette(sTextInputFrameOrange_Pal, 1 * 16, 32);
|
||||
LoadPalette(sTextInputFrameGreen_Pal, 4 * 16, 32);
|
||||
LoadPalette(sTitleText_Pal, 10 * 16, 8);
|
||||
LoadPalette(sText_Pal, 11 * 16, 10);
|
||||
LoadPalette(sText_Pal, 15 * 16, 10);
|
||||
LoadPalette(sText_Pal, 3 * 16, 10);
|
||||
}
|
||||
|
||||
static void PrintTitleText(void)
|
||||
@@ -1319,16 +1335,16 @@ static void PrintTitleText(void)
|
||||
if (titleText == NULL)
|
||||
return;
|
||||
|
||||
xOffset = (128 - GetStringWidth(FONT_1, titleText, 0)) / 2u;
|
||||
xOffset = (128 - GetStringWidth(FONT_NORMAL_COPY_1, titleText, 0)) / 2u;
|
||||
FillWindowPixelBuffer(0, PIXEL_FILL(0));
|
||||
EC_AddTextPrinterParameterized2(0, FONT_1, titleText, xOffset, 0, TEXT_SKIP_DRAW, TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_LIGHT_GRAY);
|
||||
EC_AddTextPrinterParameterized2(0, FONT_NORMAL_COPY_1, titleText, xOffset, 0, TEXT_SKIP_DRAW, TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_LIGHT_GRAY);
|
||||
PutWindowTilemap(0);
|
||||
CopyWindowToVram(0, COPYWIN_FULL);
|
||||
}
|
||||
|
||||
static void EC_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16))
|
||||
{
|
||||
if (fontId == FONT_1)
|
||||
if (fontId == FONT_NORMAL_COPY_1)
|
||||
y += 2;
|
||||
AddTextPrinterParameterized(windowId, fontId, str, x, y, speed, callback);
|
||||
}
|
||||
@@ -1336,7 +1352,7 @@ static void EC_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str
|
||||
static void EC_AddTextPrinterParameterized2(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, u8 bg, u8 fg, u8 shadow)
|
||||
{
|
||||
u8 color[3];
|
||||
if (fontId == FONT_1)
|
||||
if (fontId == FONT_NORMAL_COPY_1)
|
||||
y += 2;
|
||||
color[0] = bg;
|
||||
color[1] = fg;
|
||||
@@ -1376,17 +1392,17 @@ static void PrintECInterfaceTextById(u8 direction)
|
||||
|
||||
FillWindowPixelBuffer(1, PIXEL_FILL(1));
|
||||
if (text1)
|
||||
EC_AddTextPrinterParameterized(1, FONT_1, text1, 0, 0, TEXT_SKIP_DRAW, NULL);
|
||||
EC_AddTextPrinterParameterized(1, FONT_NORMAL_COPY_1, text1, 0, 0, TEXT_SKIP_DRAW, NULL);
|
||||
|
||||
if (text2)
|
||||
EC_AddTextPrinterParameterized(1, FONT_1, text2, 0, 16, TEXT_SKIP_DRAW, NULL);
|
||||
EC_AddTextPrinterParameterized(1, FONT_NORMAL_COPY_1, text2, 0, 16, TEXT_SKIP_DRAW, NULL);
|
||||
|
||||
CopyWindowToVram(1, COPYWIN_FULL);
|
||||
}
|
||||
|
||||
static void EC_CreateYesNoMenuWithInitialCursorPos(u8 initialCursorPos)
|
||||
{
|
||||
CreateYesNoMenu(&sEasyChatYesNoWindowTemplate, FONT_1, 0, 2, 0x001, 14, initialCursorPos);
|
||||
CreateYesNoMenu(&sEasyChatYesNoWindowTemplate, FONT_NORMAL_COPY_1, 0, 2, 0x001, 14, initialCursorPos);
|
||||
}
|
||||
|
||||
static void CreatePhraseFrameWindow(void)
|
||||
@@ -1438,7 +1454,7 @@ static void PrintECFields(void)
|
||||
for (k = 0; k < 7; k++)
|
||||
{
|
||||
*str++ = CHAR_EXTRA_SYMBOL;
|
||||
*str++ = 9;
|
||||
*str++ = CHAR_UNDERSCORE;
|
||||
}
|
||||
|
||||
str = WriteColorChangeControlCode(str, 0, TEXT_COLOR_DARK_GRAY);
|
||||
@@ -1453,7 +1469,7 @@ static void PrintECFields(void)
|
||||
}
|
||||
|
||||
*str = EOS;
|
||||
EC_AddTextPrinterParameterized(sEasyChatGraphicsResources->windowId, FONT_1, sEasyChatGraphicsResources->ecPrintBuffer, 0, i * 16, TEXT_SKIP_DRAW, NULL);
|
||||
EC_AddTextPrinterParameterized(sEasyChatGraphicsResources->windowId, FONT_NORMAL_COPY_1, sEasyChatGraphicsResources->ecPrintBuffer, 0, i * 16, TEXT_SKIP_DRAW, NULL);
|
||||
}
|
||||
|
||||
CopyWindowToVram(sEasyChatGraphicsResources->windowId, COPYWIN_FULL);
|
||||
@@ -1568,7 +1584,7 @@ static void PrintECGroupsMenu(void)
|
||||
return;
|
||||
}
|
||||
|
||||
EC_AddTextPrinterParameterized(2, FONT_1, GetEasyChatWordGroupName(groupId), x * 84 + 10, y, TEXT_SKIP_DRAW, NULL);
|
||||
EC_AddTextPrinterParameterized(2, FONT_NORMAL_COPY_1, GetEasyChatWordGroupName(groupId), x * 84 + 10, y, TEXT_SKIP_DRAW, NULL);
|
||||
}
|
||||
|
||||
y += 16;
|
||||
@@ -1579,8 +1595,8 @@ static void PrintEasyChatKeyboardText(void)
|
||||
{
|
||||
u32 i;
|
||||
|
||||
for (i = 0; i < NELEMS(sEasyChatKeyboardText); i++)
|
||||
EC_AddTextPrinterParameterized(2, FONT_1, sEasyChatKeyboardText[i], 10, 96 + i * 16, TEXT_SKIP_DRAW, NULL);
|
||||
for (i = 0; i < ARRAY_COUNT(sEasyChatKeyboardAlphabet); i++)
|
||||
EC_AddTextPrinterParameterized(2, FONT_NORMAL_COPY_1, sEasyChatKeyboardAlphabet[i], 10, 96 + i * 16, TEXT_SKIP_DRAW, NULL);
|
||||
}
|
||||
|
||||
static void PrintECWordsMenu(void)
|
||||
@@ -1654,7 +1670,7 @@ static void PrintECRowsWin2(u8 row, u8 remrow)
|
||||
|
||||
CopyEasyChatWordPadded(sEasyChatGraphicsResources->ecPaddedWordBuffer, easyChatWord, 0);
|
||||
|
||||
EC_AddTextPrinterParameterized(2, FONT_1, sEasyChatGraphicsResources->ecPaddedWordBuffer, (j * 13 + 3) * 8, y_, TEXT_SKIP_DRAW, NULL);
|
||||
EC_AddTextPrinterParameterized(2, FONT_NORMAL_COPY_1, sEasyChatGraphicsResources->ecPaddedWordBuffer, (j * 13 + 3) * 8, y_, TEXT_SKIP_DRAW, NULL);
|
||||
}
|
||||
}
|
||||
y += 16;
|
||||
@@ -1930,7 +1946,7 @@ static void CreateSelectDestFieldCursorSprite(void)
|
||||
u8 frameId = GetEasyChatScreenFrameId();
|
||||
s16 x = sPhraseFrameDimensions[frameId].left * 8 + 13;
|
||||
s16 y = (sPhraseFrameDimensions[frameId].top + 1) * 8 + 1;
|
||||
u8 spriteId = CreateSprite(&sSpriteTemplate_RightTriangleCursor, x, y, 2);
|
||||
u8 spriteId = CreateSprite(&sSpriteTemplate_TriangleCursor, x, y, 2);
|
||||
sEasyChatGraphicsResources->selectDestFieldCursorSprite = &gSprites[spriteId];
|
||||
gSprites[spriteId].data[1] = 1;
|
||||
}
|
||||
@@ -1970,11 +1986,11 @@ static void UnfreezeSelectDestFieldCursorSprite(void)
|
||||
|
||||
static void CreateRedRectangularCursorSpritePair(void)
|
||||
{
|
||||
u8 spriteId = CreateSprite(&sSpriteTemplate_RedRectangularCursor, 0, 0, 3);
|
||||
u8 spriteId = CreateSprite(&sSpriteTemplate_RectangleCursor, 0, 0, 3);
|
||||
sEasyChatGraphicsResources->rectCursorSpriteRight = &gSprites[spriteId];
|
||||
sEasyChatGraphicsResources->rectCursorSpriteRight->x2 = 32;
|
||||
|
||||
spriteId = CreateSprite(&sSpriteTemplate_RedRectangularCursor, 0, 0, 3);
|
||||
spriteId = CreateSprite(&sSpriteTemplate_RectangleCursor, 0, 0, 3);
|
||||
sEasyChatGraphicsResources->rectCursorSpriteLeft = &gSprites[spriteId];
|
||||
sEasyChatGraphicsResources->rectCursorSpriteLeft->x2 = -32;
|
||||
|
||||
@@ -2009,21 +2025,21 @@ static void MoveCursor_Group(s8 x, s8 y)
|
||||
{
|
||||
if (x != -1)
|
||||
{
|
||||
StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteRight, 0);
|
||||
StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteRight, RECTCURSOR_ANIM_ON_GROUP);
|
||||
sEasyChatGraphicsResources->rectCursorSpriteRight->x = x * 84 + 58;
|
||||
sEasyChatGraphicsResources->rectCursorSpriteRight->y = y * 16 + 96;
|
||||
|
||||
StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteLeft, 0);
|
||||
StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteLeft, RECTCURSOR_ANIM_ON_GROUP);
|
||||
sEasyChatGraphicsResources->rectCursorSpriteLeft->x = x * 84 + 58;
|
||||
sEasyChatGraphicsResources->rectCursorSpriteLeft->y = y * 16 + 96;
|
||||
}
|
||||
else
|
||||
{
|
||||
StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteRight, 1);
|
||||
StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteRight, RECTCURSOR_ANIM_ON_BUTTON);
|
||||
sEasyChatGraphicsResources->rectCursorSpriteRight->x = 216;
|
||||
sEasyChatGraphicsResources->rectCursorSpriteRight->y = y * 16 + 112;
|
||||
|
||||
StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteLeft, 1);
|
||||
StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteLeft, RECTCURSOR_ANIM_ON_BUTTON);
|
||||
sEasyChatGraphicsResources->rectCursorSpriteLeft->x = 216;
|
||||
sEasyChatGraphicsResources->rectCursorSpriteLeft->y = y * 16 + 112;
|
||||
}
|
||||
@@ -2041,12 +2057,12 @@ static void MoveCursor_Alpha(s8 cursorX, s8 cursorY)
|
||||
if (cursorX == 6 && cursorY == 0)
|
||||
{
|
||||
x = 157;
|
||||
anim = 2;
|
||||
anim = RECTCURSOR_ANIM_ON_OTHERS;
|
||||
}
|
||||
else
|
||||
{
|
||||
x += sECDisplay_AlphaModeXCoords[cursorX < NELEMS(sECDisplay_AlphaModeXCoords) ? cursorX : 0];
|
||||
anim = 3;
|
||||
x += sAlphabetKeyboardColumnOffsets[cursorX < ARRAY_COUNT(sAlphabetKeyboardColumnOffsets) ? cursorX : 0];
|
||||
anim = RECTCURSOR_ANIM_ON_LETTER;
|
||||
}
|
||||
|
||||
StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteRight, anim);
|
||||
@@ -2059,11 +2075,11 @@ static void MoveCursor_Alpha(s8 cursorX, s8 cursorY)
|
||||
}
|
||||
else
|
||||
{
|
||||
StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteRight, 1);
|
||||
StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteRight, RECTCURSOR_ANIM_ON_BUTTON);
|
||||
sEasyChatGraphicsResources->rectCursorSpriteRight->x = 216;
|
||||
sEasyChatGraphicsResources->rectCursorSpriteRight->y = cursorY * 16 + 112;
|
||||
|
||||
StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteLeft, 1);
|
||||
StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteLeft, RECTCURSOR_ANIM_ON_BUTTON);
|
||||
sEasyChatGraphicsResources->rectCursorSpriteLeft->x = 216;
|
||||
sEasyChatGraphicsResources->rectCursorSpriteLeft->y = cursorY * 16 + 112;
|
||||
}
|
||||
@@ -2071,7 +2087,7 @@ static void MoveCursor_Alpha(s8 cursorX, s8 cursorY)
|
||||
|
||||
static void CreateSelectWordCursorSprite(void)
|
||||
{
|
||||
u8 spriteId = CreateSprite(&sSpriteTemplate_RightTriangleCursor, 0, 0, 4);
|
||||
u8 spriteId = CreateSprite(&sSpriteTemplate_TriangleCursor, 0, 0, 4);
|
||||
sEasyChatGraphicsResources->selectWordCursorSprite = &gSprites[spriteId];
|
||||
sEasyChatGraphicsResources->selectWordCursorSprite->callback = SpriteCB_SelectWordCursorSprite;
|
||||
sEasyChatGraphicsResources->selectWordCursorSprite->oam.priority = 2;
|
||||
@@ -2121,11 +2137,11 @@ static void DestroySelectWordCursorSprite(void)
|
||||
|
||||
static void CreateSelectGroupHelpSprite(void)
|
||||
{
|
||||
u8 spriteId = CreateSprite(&sSpriteTemplate_SelectGroupHelp, 208, 128, 6);
|
||||
u8 spriteId = CreateSprite(&sSpriteTemplate_ButtonWindow, 208, 128, 6);
|
||||
sEasyChatGraphicsResources->selectGroupHelpSprite = &gSprites[spriteId];
|
||||
sEasyChatGraphicsResources->selectGroupHelpSprite->x2 = -64;
|
||||
|
||||
spriteId = CreateSprite(&sSpriteTemplate_EasyChatModeIcons, 208, 80, 5);
|
||||
spriteId = CreateSprite(&sSpriteTemplate_ModeWindow, 208, 80, 5);
|
||||
sEasyChatGraphicsResources->modeIconsSprite = &gSprites[spriteId];
|
||||
sEasyChatGraphicsResources->modeIconState = 0;
|
||||
}
|
||||
@@ -2142,9 +2158,9 @@ static bool8 AnimateSeletGroupModeAndHelpSpriteEnter(void)
|
||||
{
|
||||
sEasyChatGraphicsResources->selectGroupHelpSprite->x2 = 0;
|
||||
if (!IsEasyChatAlphaMode())
|
||||
StartSpriteAnim(sEasyChatGraphicsResources->modeIconsSprite, 1);
|
||||
StartSpriteAnim(sEasyChatGraphicsResources->modeIconsSprite, MODEWINDOW_ANIM_TO_GROUP);
|
||||
else
|
||||
StartSpriteAnim(sEasyChatGraphicsResources->modeIconsSprite, 2);
|
||||
StartSpriteAnim(sEasyChatGraphicsResources->modeIconsSprite, MODEWINDOW_ANIM_TO_ALPHABET);
|
||||
|
||||
sEasyChatGraphicsResources->modeIconState++;
|
||||
}
|
||||
@@ -2163,7 +2179,7 @@ static bool8 AnimateSeletGroupModeAndHelpSpriteEnter(void)
|
||||
static void StartModeIconHidingAnimation(void)
|
||||
{
|
||||
sEasyChatGraphicsResources->modeIconState = 0;
|
||||
StartSpriteAnim(sEasyChatGraphicsResources->modeIconsSprite, 3);
|
||||
StartSpriteAnim(sEasyChatGraphicsResources->modeIconsSprite, MODEWINDOW_ANIM_TO_HIDDEN);
|
||||
}
|
||||
|
||||
static bool8 RunModeIconHidingAnimation(void)
|
||||
@@ -2194,15 +2210,15 @@ static bool8 RunModeIconHidingAnimation(void)
|
||||
|
||||
static void ShrinkModeIconsSprite(void)
|
||||
{
|
||||
StartSpriteAnim(sEasyChatGraphicsResources->modeIconsSprite, 4);
|
||||
StartSpriteAnim(sEasyChatGraphicsResources->modeIconsSprite, MODEWINDOW_ANIM_TRANSITION);
|
||||
}
|
||||
|
||||
static void ShowModeIconsSprite(void)
|
||||
{
|
||||
if (!IsEasyChatAlphaMode())
|
||||
StartSpriteAnim(sEasyChatGraphicsResources->modeIconsSprite, 1);
|
||||
StartSpriteAnim(sEasyChatGraphicsResources->modeIconsSprite, MODEWINDOW_ANIM_TO_GROUP);
|
||||
else
|
||||
StartSpriteAnim(sEasyChatGraphicsResources->modeIconsSprite, 2);
|
||||
StartSpriteAnim(sEasyChatGraphicsResources->modeIconsSprite, MODEWINDOW_ANIM_TO_ALPHABET);
|
||||
}
|
||||
|
||||
static bool8 ModeIconsSpriteAnimIsEnded(void)
|
||||
@@ -2212,11 +2228,11 @@ static bool8 ModeIconsSpriteAnimIsEnded(void)
|
||||
|
||||
static void CreateVerticalScrollArrowSprites(void)
|
||||
{
|
||||
u8 spriteId = CreateSprite(&sSpriteTemplate_UpTriangleCursor, 96, 80, 0);
|
||||
u8 spriteId = CreateSprite(&sSpriteTemplate_ScrollIndicator, 96, 80, 0);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
sEasyChatGraphicsResources->upTriangleCursorSprite = &gSprites[spriteId];
|
||||
|
||||
spriteId = CreateSprite(&sSpriteTemplate_UpTriangleCursor, 96, 156, 0);
|
||||
spriteId = CreateSprite(&sSpriteTemplate_ScrollIndicator, 96, 156, 0);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
sEasyChatGraphicsResources->downTriangleCursorSprite = &gSprites[spriteId];
|
||||
@@ -2295,6 +2311,6 @@ static void CreateFooterWindow(void)
|
||||
template.baseBlock = 0x030;
|
||||
windowId = AddWindow(&template);
|
||||
FillWindowPixelBuffer(windowId, PIXEL_FILL(1));
|
||||
EC_AddTextPrinterParameterized(windowId, FONT_1, gText_DelAllCancelOk, 0, 0, 0, NULL);
|
||||
EC_AddTextPrinterParameterized(windowId, FONT_NORMAL_COPY_1, gText_DelAllCancelOk, 0, 0, 0, NULL);
|
||||
PutWindowTilemap(windowId);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,520 @@
|
||||
#include "global.h"
|
||||
#include "malloc.h"
|
||||
#include "decompress.h"
|
||||
#include "ereader_helpers.h"
|
||||
#include "link.h"
|
||||
#include "main.h"
|
||||
#include "mystery_gift_menu.h"
|
||||
#include "mystery_gift_client.h"
|
||||
#include "save.h"
|
||||
#include "sound.h"
|
||||
#include "sprite.h"
|
||||
#include "task.h"
|
||||
#include "strings.h"
|
||||
#include "util.h"
|
||||
#include "cereader_tool.h"
|
||||
#include "help_system.h"
|
||||
#include "constants/songs.h"
|
||||
|
||||
struct EReaderTaskData
|
||||
{
|
||||
u16 timer;
|
||||
u16 unused1;
|
||||
u16 unused2;
|
||||
u16 unused3;
|
||||
u8 state;
|
||||
u8 textState;
|
||||
u8 unused4;
|
||||
u8 unused5;
|
||||
u8 unused6;
|
||||
u8 unused7;
|
||||
u8 status;
|
||||
u8 *unusedBuffer;
|
||||
};
|
||||
|
||||
struct EReaderData
|
||||
{
|
||||
u16 status;
|
||||
size_t size;
|
||||
const void *data;
|
||||
};
|
||||
|
||||
static void Task_EReader(u8);
|
||||
|
||||
struct EReaderData gEReaderData;
|
||||
|
||||
extern const u8 gMultiBootProgram_EReader_Start[];
|
||||
extern const u8 gMultiBootProgram_EReader_End[];
|
||||
|
||||
static void EReader_Load(struct EReaderData *eReader, size_t size, const void *data)
|
||||
{
|
||||
vu16 imeBak = REG_IME;
|
||||
REG_IME = 0;
|
||||
gIntrTable[1] = EReaderHelper_SerialCallback;
|
||||
gIntrTable[2] = EReaderHelper_Timer3Callback;
|
||||
EReaderHelper_SaveRegsState();
|
||||
EReaderHelper_ClearsSendRecvMgr();
|
||||
REG_IE |= INTR_FLAG_VCOUNT;
|
||||
REG_IME = imeBak;
|
||||
eReader->status = 0;
|
||||
eReader->size = size;
|
||||
eReader->data = data;
|
||||
}
|
||||
|
||||
static void EReader_Reset(struct EReaderData *eReader)
|
||||
{
|
||||
vu16 imeBak = REG_IME;
|
||||
REG_IME = 0;
|
||||
EReaderHelper_ClearsSendRecvMgr();
|
||||
EReaderHelper_RestoreRegsState();
|
||||
RestoreSerialTimer3IntrHandlers();
|
||||
REG_IME = imeBak;
|
||||
}
|
||||
|
||||
// Return values for EReader_Transfer
|
||||
enum {
|
||||
TRANSFER_ACTIVE,
|
||||
TRANSFER_SUCCESS,
|
||||
TRANSFER_CANCELED,
|
||||
TRANSFER_TIMEOUT,
|
||||
};
|
||||
|
||||
static u8 EReader_Transfer(struct EReaderData *eReader)
|
||||
{
|
||||
u8 transferStatus = TRANSFER_ACTIVE;
|
||||
eReader->status = EReaderHandleTransfer(TRUE, eReader->size, eReader->data, NULL);
|
||||
|
||||
if ((eReader->status & EREADER_XFER_MASK) == 0 && eReader->status & EREADER_CHECKSUM_OK_MASK)
|
||||
transferStatus = TRANSFER_SUCCESS;
|
||||
|
||||
if (eReader->status & EREADER_CANCEL_KEY_MASK)
|
||||
transferStatus = TRANSFER_CANCELED;
|
||||
|
||||
if (eReader->status & EREADER_CANCEL_TIMEOUT_MASK)
|
||||
transferStatus = TRANSFER_TIMEOUT;
|
||||
|
||||
gShouldAdvanceLinkState = 0;
|
||||
return transferStatus;
|
||||
}
|
||||
|
||||
static void OpenEReaderLink(void)
|
||||
{
|
||||
memset(gDecompressionBuffer, 0, 0x2000);
|
||||
gLinkType = LINKTYPE_EREADER_FRLG;
|
||||
OpenLink();
|
||||
SetSuppressLinkErrorMessage(TRUE);
|
||||
}
|
||||
|
||||
static bool32 ValidateEReaderConnection(void)
|
||||
{
|
||||
vu16 imeBak = REG_IME;
|
||||
u16 handshakes[MAX_LINK_PLAYERS];
|
||||
|
||||
REG_IME = 0;
|
||||
*(u64 *)handshakes = *(u64 *)gLink.tempRecvBuffer;
|
||||
REG_IME = imeBak;
|
||||
|
||||
// Validate that we are player 1, the EReader is player 2,
|
||||
// and that players 3 and 4 are empty.
|
||||
if (handshakes[0] == SLAVE_HANDSHAKE
|
||||
&& handshakes[1] == EREADER_HANDSHAKE
|
||||
&& handshakes[2] == 0xFFFF
|
||||
&& handshakes[3] == 0xFFFF)
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool32 IsEReaderConnectionSane(void)
|
||||
{
|
||||
if (IsLinkMaster() && GetLinkPlayerCount_2() == 2)
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// States for TryReceiveCard
|
||||
enum {
|
||||
RECV_STATE_INIT,
|
||||
RECV_STATE_WAIT_START,
|
||||
RECV_STATE_START,
|
||||
RECV_STATE_EXCHANGE,
|
||||
RECV_STATE_START_DISCONNECT,
|
||||
RECV_STATE_WAIT_DISCONNECT,
|
||||
};
|
||||
|
||||
// Return values for TryReceiveCard
|
||||
enum {
|
||||
RECV_ACTIVE,
|
||||
RECV_CANCELED,
|
||||
RECV_SUCCESS,
|
||||
RECV_ERROR,
|
||||
RECV_DISCONNECTED,
|
||||
RECV_TIMEOUT,
|
||||
};
|
||||
|
||||
static u32 TryReceiveCard(u8 * state, u16 * timer)
|
||||
{
|
||||
if ((*state == RECV_STATE_EXCHANGE
|
||||
|| *state == RECV_STATE_START_DISCONNECT
|
||||
|| *state == RECV_STATE_WAIT_DISCONNECT)
|
||||
&& HasLinkErrorOccurred())
|
||||
{
|
||||
// Return error status if an error occurs
|
||||
// during the link exchange.
|
||||
*state = 0;
|
||||
return RECV_ERROR;
|
||||
}
|
||||
|
||||
switch (*state)
|
||||
{
|
||||
case RECV_STATE_INIT:
|
||||
if (IsLinkMaster() && GetLinkPlayerCount_2() > 1)
|
||||
{
|
||||
*state = RECV_STATE_WAIT_START;
|
||||
}
|
||||
else if (JOY_NEW(B_BUTTON))
|
||||
{
|
||||
*state = 0;
|
||||
return RECV_CANCELED;
|
||||
}
|
||||
break;
|
||||
case RECV_STATE_WAIT_START:
|
||||
if (++(*timer) > 5)
|
||||
{
|
||||
*timer = 0;
|
||||
*state = RECV_STATE_START;
|
||||
}
|
||||
break;
|
||||
case RECV_STATE_START:
|
||||
if (GetLinkPlayerCount_2() == 2)
|
||||
{
|
||||
PlaySE(SE_DING_DONG);
|
||||
CheckShouldAdvanceLinkState();
|
||||
*timer = 0;
|
||||
*state = RECV_STATE_EXCHANGE;
|
||||
}
|
||||
else if (JOY_NEW(B_BUTTON))
|
||||
{
|
||||
*state = 0;
|
||||
return RECV_CANCELED;
|
||||
}
|
||||
break;
|
||||
case RECV_STATE_EXCHANGE:
|
||||
if (++(*timer) > 30)
|
||||
{
|
||||
*state = 0;
|
||||
return RECV_TIMEOUT;
|
||||
}
|
||||
|
||||
if (IsLinkConnectionEstablished())
|
||||
{
|
||||
if (gReceivedRemoteLinkPlayers)
|
||||
{
|
||||
if (IsLinkPlayerDataExchangeComplete())
|
||||
{
|
||||
*state = 0;
|
||||
return RECV_SUCCESS;
|
||||
}
|
||||
else
|
||||
*state = RECV_STATE_START_DISCONNECT;
|
||||
}
|
||||
else
|
||||
*state = RECV_STATE_EXCHANGE;
|
||||
}
|
||||
break;
|
||||
case RECV_STATE_START_DISCONNECT:
|
||||
SetCloseLinkCallbackAndType(0);
|
||||
*state = RECV_STATE_WAIT_DISCONNECT;
|
||||
break;
|
||||
case RECV_STATE_WAIT_DISCONNECT:
|
||||
if (!gReceivedRemoteLinkPlayers)
|
||||
{
|
||||
*state = 0;
|
||||
return RECV_DISCONNECTED;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return RECV_ACTIVE;
|
||||
}
|
||||
|
||||
void CreateEReaderTask(void)
|
||||
{
|
||||
u8 taskId = CreateTask(Task_EReader, 0);
|
||||
struct EReaderTaskData *data = (struct EReaderTaskData *)gTasks[taskId].data;
|
||||
data->state = 0;
|
||||
data->textState = 0;
|
||||
data->unused4 = 0;
|
||||
data->unused5 = 0;
|
||||
data->unused6 = 0;
|
||||
data->unused7 = 0;
|
||||
data->timer = 0;
|
||||
data->unused1 = 0;
|
||||
data->unused2 = 0;
|
||||
data->unused3 = 0;
|
||||
data->status = 0;
|
||||
data->unusedBuffer = AllocZeroed(CLIENT_MAX_MSG_SIZE);
|
||||
}
|
||||
|
||||
static void ResetTimer(u16 *timer)
|
||||
{
|
||||
*timer = 0;
|
||||
}
|
||||
|
||||
static bool32 UpdateTimer(u16 * timer, u16 time)
|
||||
{
|
||||
if (++(*timer) > time)
|
||||
{
|
||||
// Timer has finished
|
||||
*timer = 0;
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// States for Task_EReader
|
||||
enum {
|
||||
ER_STATE_START,
|
||||
ER_STATE_INIT_LINK,
|
||||
ER_STATE_INIT_LINK_WAIT,
|
||||
ER_STATE_INIT_LINK_CHECK,
|
||||
ER_STATE_MSG_SELECT_CONNECT,
|
||||
ER_STATE_MSG_SELECT_CONNECT_WAIT,
|
||||
ER_STATE_TRY_LINK,
|
||||
ER_STATE_INCORRECT_LINK,
|
||||
ER_STATE_CONNECTING,
|
||||
ER_STATE_TRANSFER,
|
||||
ER_STATE_TRANSFER_END,
|
||||
ER_STATE_TRANSFER_SUCCESS,
|
||||
ER_STATE_LOAD_CARD_START,
|
||||
ER_STATE_LOAD_CARD,
|
||||
ER_STATE_WAIT_RECV_CARD,
|
||||
ER_STATE_VALIDATE_CARD,
|
||||
ER_STATE_WAIT_DISCONNECT,
|
||||
ER_STATE_SAVE,
|
||||
ER_STATE_SUCCESS_MSG,
|
||||
ER_STATE_SUCCESS_END,
|
||||
ER_STATE_LINK_ERROR,
|
||||
ER_STATE_LINK_ERROR_TRY_AGAIN,
|
||||
ER_STATE_SAVE_FAILED,
|
||||
ER_STATE_CANCELED_CARD_READ,
|
||||
ER_STATE_UNUSED_1,
|
||||
ER_STATE_UNUSED_2,
|
||||
ER_STATE_END,
|
||||
};
|
||||
|
||||
static void Task_EReader(u8 taskId)
|
||||
{
|
||||
struct EReaderTaskData *data = (struct EReaderTaskData *)gTasks[taskId].data;
|
||||
switch (data->state)
|
||||
{
|
||||
case ER_STATE_START:
|
||||
if (PrintMysteryGiftMenuMessage(&data->textState, gJPText_ReceiveMysteryGiftWithEReader))
|
||||
data->state = ER_STATE_INIT_LINK;
|
||||
break;
|
||||
case ER_STATE_INIT_LINK:
|
||||
OpenEReaderLink();
|
||||
ResetTimer(&data->timer);
|
||||
data->state = ER_STATE_INIT_LINK_WAIT;
|
||||
break;
|
||||
case ER_STATE_INIT_LINK_WAIT:
|
||||
if (UpdateTimer(&data->timer, 10))
|
||||
data->state = ER_STATE_INIT_LINK_CHECK;
|
||||
break;
|
||||
case ER_STATE_INIT_LINK_CHECK:
|
||||
if (!IsEReaderConnectionSane())
|
||||
{
|
||||
CloseLink();
|
||||
data->state = ER_STATE_MSG_SELECT_CONNECT;
|
||||
}
|
||||
else
|
||||
data->state = ER_STATE_LOAD_CARD;
|
||||
break;
|
||||
case ER_STATE_MSG_SELECT_CONNECT:
|
||||
if (PrintMysteryGiftMenuMessage(&data->textState, gJPText_SelectConnectFromEReaderMenu))
|
||||
{
|
||||
AddTextPrinterToWindow1(gJPText_SelectConnectWithGBA);
|
||||
ResetTimer(&data->timer);
|
||||
data->state = ER_STATE_MSG_SELECT_CONNECT_WAIT;
|
||||
}
|
||||
break;
|
||||
case ER_STATE_MSG_SELECT_CONNECT_WAIT:
|
||||
if (UpdateTimer(&data->timer, 90))
|
||||
{
|
||||
OpenEReaderLink();
|
||||
data->state = ER_STATE_TRY_LINK;
|
||||
}
|
||||
else if (JOY_NEW(B_BUTTON))
|
||||
{
|
||||
ResetTimer(&data->timer);
|
||||
PlaySE(SE_SELECT);
|
||||
data->state = ER_STATE_CANCELED_CARD_READ;
|
||||
}
|
||||
break;
|
||||
case ER_STATE_TRY_LINK:
|
||||
if (JOY_NEW(B_BUTTON))
|
||||
{
|
||||
// Canceled
|
||||
PlaySE(SE_SELECT);
|
||||
CloseLink();
|
||||
ResetTimer(&data->timer);
|
||||
data->state = ER_STATE_CANCELED_CARD_READ;
|
||||
}
|
||||
else if (GetLinkPlayerCount_2() > 1)
|
||||
{
|
||||
ResetTimer(&data->timer);
|
||||
CloseLink();
|
||||
data->state = ER_STATE_INCORRECT_LINK;
|
||||
}
|
||||
else if (ValidateEReaderConnection())
|
||||
{
|
||||
// Successful connection
|
||||
PlaySE(SE_SELECT);
|
||||
CloseLink();
|
||||
ResetTimer(&data->timer);
|
||||
data->state = ER_STATE_CONNECTING;
|
||||
}
|
||||
else if (UpdateTimer(&data->timer, 10))
|
||||
{
|
||||
// Retry connection
|
||||
CloseLink();
|
||||
OpenEReaderLink();
|
||||
ResetTimer(&data->timer);
|
||||
}
|
||||
break;
|
||||
case ER_STATE_INCORRECT_LINK:
|
||||
if (PrintMysteryGiftMenuMessage(&data->textState, gJPText_LinkIsIncorrect))
|
||||
data->state = ER_STATE_MSG_SELECT_CONNECT;
|
||||
break;
|
||||
case ER_STATE_CONNECTING:
|
||||
AddTextPrinterToWindow1(gJPText_Connecting);
|
||||
EReader_Load(&gEReaderData, gMultiBootProgram_EReader_End - gMultiBootProgram_EReader_Start, gMultiBootProgram_EReader_Start);
|
||||
data->state = ER_STATE_TRANSFER;
|
||||
break;
|
||||
case ER_STATE_TRANSFER:
|
||||
data->status = EReader_Transfer(&gEReaderData);
|
||||
if (data->status != TRANSFER_ACTIVE)
|
||||
data->state = ER_STATE_TRANSFER_END;
|
||||
break;
|
||||
case ER_STATE_TRANSFER_END:
|
||||
EReader_Reset(&gEReaderData);
|
||||
if (data->status == TRANSFER_TIMEOUT)
|
||||
{
|
||||
data->state = ER_STATE_LINK_ERROR;
|
||||
}
|
||||
else if (data->status == TRANSFER_SUCCESS)
|
||||
{
|
||||
ResetTimer(&data->timer);
|
||||
AddTextPrinterToWindow1(gJPText_PleaseWaitAMoment);
|
||||
data->state = ER_STATE_TRANSFER_SUCCESS;
|
||||
}
|
||||
else // TRANSFER_CANCELED
|
||||
{
|
||||
data->state = ER_STATE_START;
|
||||
}
|
||||
break;
|
||||
case ER_STATE_TRANSFER_SUCCESS:
|
||||
if (UpdateTimer(&data->timer, 840))
|
||||
data->state = ER_STATE_LOAD_CARD_START;
|
||||
break;
|
||||
case ER_STATE_LOAD_CARD_START:
|
||||
OpenEReaderLink();
|
||||
AddTextPrinterToWindow1(gJPText_AllowEReaderToLoadCard);
|
||||
data->state = ER_STATE_LOAD_CARD;
|
||||
break;
|
||||
case ER_STATE_LOAD_CARD:
|
||||
switch (TryReceiveCard(&data->textState, &data->timer))
|
||||
{
|
||||
case RECV_ACTIVE:
|
||||
// Running
|
||||
break;
|
||||
case RECV_SUCCESS:
|
||||
AddTextPrinterToWindow1(gJPText_Connecting);
|
||||
data->state = ER_STATE_WAIT_RECV_CARD;
|
||||
break;
|
||||
case RECV_CANCELED:
|
||||
PlaySE(SE_SELECT);
|
||||
CloseLink();
|
||||
data->state = ER_STATE_CANCELED_CARD_READ;
|
||||
break;
|
||||
case RECV_TIMEOUT:
|
||||
CloseLink();
|
||||
data->state = ER_STATE_LINK_ERROR_TRY_AGAIN;
|
||||
break;
|
||||
case RECV_ERROR:
|
||||
case RECV_DISCONNECTED:
|
||||
CloseLink();
|
||||
data->state = ER_STATE_LINK_ERROR;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case ER_STATE_WAIT_RECV_CARD:
|
||||
if (HasLinkErrorOccurred())
|
||||
{
|
||||
CloseLink();
|
||||
data->state = ER_STATE_LINK_ERROR;
|
||||
}
|
||||
else if (GetBlockReceivedStatus())
|
||||
{
|
||||
ResetBlockReceivedFlags();
|
||||
data->state = ER_STATE_VALIDATE_CARD;
|
||||
}
|
||||
break;
|
||||
case ER_STATE_VALIDATE_CARD:
|
||||
data->status = ValidateTrainerTowerData((struct EReaderTrainerTowerSet *)gDecompressionBuffer);
|
||||
SetCloseLinkCallbackAndType(data->status);
|
||||
data->state = ER_STATE_WAIT_DISCONNECT;
|
||||
break;
|
||||
case ER_STATE_WAIT_DISCONNECT:
|
||||
if (!gReceivedRemoteLinkPlayers)
|
||||
{
|
||||
if (data->status == TRUE) // Was data valid?
|
||||
data->state = ER_STATE_SAVE;
|
||||
else
|
||||
data->state = ER_STATE_LINK_ERROR;
|
||||
}
|
||||
break;
|
||||
case ER_STATE_SAVE:
|
||||
if (CEReaderTool_SaveTrainerTower((struct EReaderTrainerTowerSet *)gDecompressionBuffer))
|
||||
{
|
||||
AddTextPrinterToWindow1(gJPText_ConnectionComplete);
|
||||
ResetTimer(&data->timer);
|
||||
data->state = ER_STATE_SUCCESS_MSG;
|
||||
}
|
||||
else
|
||||
data->state = ER_STATE_SAVE_FAILED;
|
||||
break;
|
||||
case ER_STATE_SUCCESS_MSG:
|
||||
if (UpdateTimer(&data->timer, 120))
|
||||
{
|
||||
AddTextPrinterToWindow1(gJPText_NewTrainerHasComeToSevii);
|
||||
PlayFanfare(MUS_OBTAIN_ITEM);
|
||||
data->state = ER_STATE_SUCCESS_END;
|
||||
}
|
||||
break;
|
||||
case ER_STATE_SUCCESS_END:
|
||||
if (IsFanfareTaskInactive() && JOY_NEW(A_BUTTON | B_BUTTON))
|
||||
data->state = ER_STATE_END;
|
||||
break;
|
||||
case ER_STATE_CANCELED_CARD_READ:
|
||||
if (PrintMysteryGiftMenuMessage(&data->textState, gJPText_CardReadingHasBeenHalted))
|
||||
data->state = ER_STATE_END;
|
||||
break;
|
||||
case ER_STATE_LINK_ERROR:
|
||||
if (PrintMysteryGiftMenuMessage(&data->textState, gJPText_ConnectionErrorCheckLink))
|
||||
data->state = ER_STATE_START;
|
||||
break;
|
||||
case ER_STATE_LINK_ERROR_TRY_AGAIN:
|
||||
if (PrintMysteryGiftMenuMessage(&data->textState, gJPText_ConnectionErrorTryAgain))
|
||||
data->state = ER_STATE_START;
|
||||
break;
|
||||
case ER_STATE_SAVE_FAILED:
|
||||
if (PrintMysteryGiftMenuMessage(&data->textState, gJPText_WriteErrorUnableToSaveData))
|
||||
data->state = ER_STATE_START;
|
||||
break;
|
||||
case ER_STATE_END:
|
||||
HelpSystem_Enable();
|
||||
Free(data->unusedBuffer);
|
||||
DestroyTask(taskId);
|
||||
SetMainCallback2(MainCB_FreeAllBuffersAndReturnToInitTitleScreen);
|
||||
break;
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -129,7 +129,7 @@ bool32 IsMysteryGiftEnabled(void)
|
||||
return FlagGet(FLAG_SYS_MYSTERY_GIFT_ENABLED);
|
||||
}
|
||||
|
||||
void ResetMysteryEventFlags(void)
|
||||
void ClearMysteryGiftFlags(void)
|
||||
{
|
||||
FlagClear(FLAG_MYSTERY_GIFT_DONE);
|
||||
FlagClear(FLAG_MYSTERY_GIFT_1);
|
||||
@@ -149,7 +149,7 @@ void ResetMysteryEventFlags(void)
|
||||
FlagClear(FLAG_MYSTERY_GIFT_15);
|
||||
}
|
||||
|
||||
void ResetMysteryEventVars(void)
|
||||
void ClearMysteryGiftVars(void)
|
||||
{
|
||||
VarSet(VAR_EVENT_PICHU_SLOT, 0);
|
||||
VarSet(VAR_MYSTERY_GIFT_1, 0);
|
||||
|
||||
@@ -4686,7 +4686,7 @@ u8 GetAcroWheelieDirectionAnimNum(u8 direction)
|
||||
return sAcroBunnyHopBackWheelDirectionAnimNums[direction];
|
||||
}
|
||||
|
||||
u8 Unref_GetAnimNums_080634A0(u8 direction)
|
||||
u8 GetAcroBunnyHopFrontWheelDirectionAnimNum(u8 direction)
|
||||
{
|
||||
return sAcroBunnyHopFrontWheelDirectionAnimNums[direction];
|
||||
}
|
||||
|
||||
@@ -1332,7 +1332,7 @@ static void Task_TradeEvolutionScene(u8 taskId)
|
||||
if (!IsTextPrinterActive(0) && !IsSEPlaying())
|
||||
{
|
||||
LoadUserWindowGfx2(0, 0xA8, 0xE0);
|
||||
CreateYesNoMenu(&gTradeEvolutionSceneYesNoWindowTemplate, FONT_3, 0, 2, 0xA8, 0xE, 0);
|
||||
CreateYesNoMenu(&gTradeEvolutionSceneYesNoWindowTemplate, FONT_NORMAL_COPY_2, 0, 2, 0xA8, 0xE, 0);
|
||||
sEvoCursorPos = 0;
|
||||
gTasks[taskId].tLearnMoveState++;
|
||||
sEvoCursorPos = 0;
|
||||
|
||||
+15
-15
@@ -822,7 +822,7 @@ static bool8 TryExitPickMode(u8 taskId)
|
||||
|
||||
static void MessageBoxPrintEmptyText(void)
|
||||
{
|
||||
AddTextPrinterParameterized2(FCWINDOWID_MSGBOX, FONT_2, gFameCheckerText_ClearTextbox, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
AddTextPrinterParameterized2(FCWINDOWID_MSGBOX, FONT_NORMAL, gFameCheckerText_ClearTextbox, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
}
|
||||
|
||||
static void Task_EnterPickMode(u8 taskId)
|
||||
@@ -962,7 +962,7 @@ static void GetPickModeText(void)
|
||||
if (HasUnlockedAllFlavorTextsForCurrentPerson() == TRUE)
|
||||
whichText = NUM_FAMECHECKER_PERSONS;
|
||||
StringExpandPlaceholders(gStringVar4, sFameCheckerNameAndQuotesPointers[sFameCheckerData->unlockedPersons[who] + whichText]);
|
||||
AddTextPrinterParameterized2(FCWINDOWID_MSGBOX, FONT_2, gStringVar4, GetTextSpeedSetting(), NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
AddTextPrinterParameterized2(FCWINDOWID_MSGBOX, FONT_NORMAL, gStringVar4, GetTextSpeedSetting(), NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
FC_PutWindowTilemapAndCopyWindowToVramMode3(FCWINDOWID_MSGBOX);
|
||||
}
|
||||
}
|
||||
@@ -973,7 +973,7 @@ static void PrintSelectedNameInBrightGreen(u8 taskId)
|
||||
u16 cursorPos = FameCheckerGetCursorY();
|
||||
FillWindowPixelRect(FCWINDOWID_MSGBOX, PIXEL_FILL(1), 0, 0, 0xd0, 0x20);
|
||||
StringExpandPlaceholders(gStringVar4, sFameCheckerFlavorTextPointers[sFameCheckerData->unlockedPersons[cursorPos] * 6 + data[1]]);
|
||||
AddTextPrinterParameterized2(FCWINDOWID_MSGBOX, FONT_2, gStringVar4, GetTextSpeedSetting(), NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
AddTextPrinterParameterized2(FCWINDOWID_MSGBOX, FONT_NORMAL, gStringVar4, GetTextSpeedSetting(), NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
FC_PutWindowTilemapAndCopyWindowToVramMode3(FCWINDOWID_MSGBOX);
|
||||
}
|
||||
|
||||
@@ -1081,9 +1081,9 @@ static void PrintUIHelp(u8 state)
|
||||
if (state == 1)
|
||||
src = gFameCheckerText_PickScreenUI;
|
||||
}
|
||||
width = GetStringWidth(FONT_0, src, 0);
|
||||
width = GetStringWidth(FONT_SMALL, src, 0);
|
||||
FillWindowPixelRect(FCWINDOWID_UIHELP, PIXEL_FILL(0), 0, 0, 0xc0, 0x10);
|
||||
AddTextPrinterParameterized4(FCWINDOWID_UIHELP, FONT_0, 188 - width, 0, 0, 2, sTextColor_White, -1, src);
|
||||
AddTextPrinterParameterized4(FCWINDOWID_UIHELP, FONT_SMALL, 188 - width, 0, 0, 2, sTextColor_White, -1, src);
|
||||
FC_PutWindowTilemapAndCopyWindowToVramMode3(FCWINDOWID_UIHELP);
|
||||
}
|
||||
|
||||
@@ -1395,11 +1395,11 @@ static void UpdateIconDescriptionBox(u8 whichText)
|
||||
HandleFlavorTextModeSwitch(TRUE);
|
||||
gIconDescriptionBoxIsOpen = 1;
|
||||
FillWindowPixelRect(FCWINDOWID_ICONDESC, PIXEL_FILL(0), 0, 0, 0x58, 0x20);
|
||||
width = (0x54 - GetStringWidth(FONT_0, sFlavorTextOriginLocationTexts[idx], 0)) / 2;
|
||||
AddTextPrinterParameterized4(FCWINDOWID_ICONDESC, FONT_0, width, 0, 0, 2, sTextColor_DkGrey, -1, sFlavorTextOriginLocationTexts[idx]);
|
||||
width = (0x54 - GetStringWidth(FONT_SMALL, sFlavorTextOriginLocationTexts[idx], 0)) / 2;
|
||||
AddTextPrinterParameterized4(FCWINDOWID_ICONDESC, FONT_SMALL, width, 0, 0, 2, sTextColor_DkGrey, -1, sFlavorTextOriginLocationTexts[idx]);
|
||||
StringExpandPlaceholders(gStringVar1, sFlavorTextOriginObjectNameTexts[idx]);
|
||||
width = (0x54 - GetStringWidth(FONT_0, gStringVar1, 0)) / 2;
|
||||
AddTextPrinterParameterized4(FCWINDOWID_ICONDESC, FONT_0, width, 10, 0, 2, sTextColor_DkGrey, -1, gStringVar1);
|
||||
width = (0x54 - GetStringWidth(FONT_SMALL, gStringVar1, 0)) / 2;
|
||||
AddTextPrinterParameterized4(FCWINDOWID_ICONDESC, FONT_SMALL, width, 10, 0, 2, sTextColor_DkGrey, -1, gStringVar1);
|
||||
FC_PutWindowTilemapAndCopyWindowToVramMode3(FCWINDOWID_ICONDESC);
|
||||
}
|
||||
|
||||
@@ -1435,7 +1435,7 @@ static void InitListMenuTemplate(void)
|
||||
gFameChecker_ListMenuTemplate.lettersSpacing = 0;
|
||||
gFameChecker_ListMenuTemplate.itemVerticalPadding = 0;
|
||||
gFameChecker_ListMenuTemplate.scrollMultiple = 0;
|
||||
gFameChecker_ListMenuTemplate.fontId = FONT_2;
|
||||
gFameChecker_ListMenuTemplate.fontId = FONT_NORMAL;
|
||||
gFameChecker_ListMenuTemplate.cursorKind = 0;
|
||||
}
|
||||
|
||||
@@ -1513,7 +1513,7 @@ static void Task_SwitchToPickMode(u8 taskId)
|
||||
static void PrintCancelDescription(void)
|
||||
{
|
||||
FillWindowPixelRect(FCWINDOWID_MSGBOX, PIXEL_FILL(1), 0, 0, 0xd0, 0x20);
|
||||
AddTextPrinterParameterized2(FCWINDOWID_MSGBOX, FONT_2, gFameCheckerText_FameCheckerWillBeClosed, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
AddTextPrinterParameterized2(FCWINDOWID_MSGBOX, FONT_NORMAL, gFameCheckerText_FameCheckerWillBeClosed, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
FC_PutWindowTilemapAndCopyWindowToVramMode3(FCWINDOWID_MSGBOX);
|
||||
}
|
||||
|
||||
@@ -1524,14 +1524,14 @@ static void FC_DoMoveCursor(s32 itemIndex, bool8 onInit)
|
||||
u16 who;
|
||||
ListMenuGetScrollAndRow(sFameCheckerData->listMenuTaskId, &listY, &cursorY);
|
||||
who = listY + cursorY;
|
||||
AddTextPrinterParameterized4(FCWINDOWID_LIST, FONT_2, 8, 14 * cursorY + 4, 0, 0, sTextColor_Green, 0, sListMenuItems[itemIndex].label);
|
||||
AddTextPrinterParameterized4(FCWINDOWID_LIST, FONT_NORMAL, 8, 14 * cursorY + 4, 0, 0, sTextColor_Green, 0, sListMenuItems[itemIndex].label);
|
||||
if (!onInit)
|
||||
{
|
||||
if (listY < sFameCheckerData->listMenuTopIdx2)
|
||||
sFameCheckerData->listMenuDrawnSelIdx++;
|
||||
else if (listY > sFameCheckerData->listMenuTopIdx2 && who != sFameCheckerData->numUnlockedPersons - 1)
|
||||
sFameCheckerData->listMenuDrawnSelIdx--;
|
||||
AddTextPrinterParameterized4(FCWINDOWID_LIST, FONT_2, 8, 14 * sFameCheckerData->listMenuDrawnSelIdx + 4, 0, 0, sTextColor_DkGrey, 0, sListMenuItems[sFameCheckerData->listMenuCurIdx].label);
|
||||
AddTextPrinterParameterized4(FCWINDOWID_LIST, FONT_NORMAL, 8, 14 * sFameCheckerData->listMenuDrawnSelIdx + 4, 0, 0, sTextColor_DkGrey, 0, sListMenuItems[sFameCheckerData->listMenuCurIdx].label);
|
||||
|
||||
}
|
||||
sFameCheckerData->listMenuCurIdx = itemIndex;
|
||||
@@ -1729,7 +1729,7 @@ static void PlaceListMenuCursor(bool8 isActive)
|
||||
{
|
||||
u16 cursorY = ListMenuGetYCoordForPrintingArrowCursor(sFameCheckerData->listMenuTaskId);
|
||||
if (isActive == TRUE)
|
||||
AddTextPrinterParameterized4(FCWINDOWID_LIST, FONT_2, 0, cursorY, 0, 0, sTextColor_DkGrey, 0, gText_SelectorArrow2);
|
||||
AddTextPrinterParameterized4(FCWINDOWID_LIST, FONT_NORMAL, 0, cursorY, 0, 0, sTextColor_DkGrey, 0, gText_SelectorArrow2);
|
||||
else
|
||||
AddTextPrinterParameterized4(FCWINDOWID_LIST, FONT_2, 0, cursorY, 0, 0, sTextColor_White, 0, gText_SelectorArrow2);
|
||||
AddTextPrinterParameterized4(FCWINDOWID_LIST, FONT_NORMAL, 0, cursorY, 0, 0, sTextColor_White, 0, gText_SelectorArrow2);
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
#include "field_specials.h"
|
||||
#include "item_menu.h"
|
||||
#include "link.h"
|
||||
#include "menews_jisan.h"
|
||||
#include "wonder_news.h"
|
||||
#include "metatile_behavior.h"
|
||||
#include "overworld.h"
|
||||
#include "renewable_hidden_items.h"
|
||||
@@ -215,7 +215,7 @@ int ProcessPlayerFieldInput(struct FieldInput *input)
|
||||
if (input->tookStep)
|
||||
{
|
||||
IncrementGameStat(GAME_STAT_STEPS);
|
||||
MENewsJisanStepCounter();
|
||||
WonderNews_IncrementStepCounter();
|
||||
IncrementRenewableHiddenItemStepCounter();
|
||||
RunMassageCooldownStepCounter();
|
||||
IncrementResortGorgeousStepCounter();
|
||||
|
||||
@@ -1766,7 +1766,7 @@ static bool8 Fishing5(struct Task *task)
|
||||
}
|
||||
else
|
||||
{
|
||||
AddTextPrinterParameterized(0, FONT_2, dot, task->tNumDots * 12, 1, 0, NULL);
|
||||
AddTextPrinterParameterized(0, FONT_NORMAL, dot, task->tNumDots * 12, 1, 0, NULL);
|
||||
task->tNumDots++;
|
||||
}
|
||||
}
|
||||
@@ -1845,7 +1845,7 @@ static bool8 Fishing10(struct Task *task)
|
||||
{
|
||||
AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]);
|
||||
FillWindowPixelBuffer(0, PIXEL_FILL(1));
|
||||
AddTextPrinterParameterized2(0, FONT_2, gText_PokemonOnHook, 1, 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
AddTextPrinterParameterized2(0, FONT_NORMAL, gText_PokemonOnHook, 1, 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
task->tStep++;
|
||||
task->tFrameCounter = 0;
|
||||
return FALSE;
|
||||
@@ -1892,7 +1892,7 @@ static bool8 Fishing12(struct Task *task)
|
||||
AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]);
|
||||
StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingNoCatchDirectionAnimNum(GetPlayerFacingDirection()));
|
||||
FillWindowPixelBuffer(0, PIXEL_FILL(1));
|
||||
AddTextPrinterParameterized2(0, FONT_2, gText_NotEvenANibble, 1, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
AddTextPrinterParameterized2(0, FONT_NORMAL, gText_NotEvenANibble, 1, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
task->tStep = FISHING_SHOW_RESULT;
|
||||
return TRUE;
|
||||
}
|
||||
@@ -1902,7 +1902,7 @@ static bool8 Fishing13(struct Task *task)
|
||||
{
|
||||
AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]);
|
||||
StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingNoCatchDirectionAnimNum(GetPlayerFacingDirection()));
|
||||
AddTextPrinterParameterized2(0, FONT_2, gText_ItGotAway, 1, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
AddTextPrinterParameterized2(0, FONT_NORMAL, gText_ItGotAway, 1, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
task->tStep++;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -368,7 +368,7 @@ static bool8 PrintWhiteOutRecoveryMessage(u8 taskId, const u8 *text, u8 x, u8 y)
|
||||
case 0:
|
||||
FillWindowPixelBuffer(windowId, PIXEL_FILL(0));
|
||||
StringExpandPlaceholders(gStringVar4, text);
|
||||
AddTextPrinterParameterized4(windowId, FONT_2, x, y, 1, 0, sWhiteoutTextColors, 1, gStringVar4);
|
||||
AddTextPrinterParameterized4(windowId, FONT_NORMAL, x, y, 1, 0, sWhiteoutTextColors, 1, gStringVar4);
|
||||
gTextFlags.canABSpeedUpPrint = FALSE;
|
||||
gTasks[taskId].tPrintState = 1;
|
||||
break;
|
||||
|
||||
+19
-19
@@ -28,7 +28,7 @@
|
||||
#include "pokedex.h"
|
||||
#include "text_window.h"
|
||||
#include "menu.h"
|
||||
#include "mevent.h"
|
||||
#include "mystery_gift.h"
|
||||
#include "naming_screen.h"
|
||||
#include "party_menu.h"
|
||||
#include "dynamic_placeholder_text_util.h"
|
||||
@@ -545,7 +545,7 @@ void NullFieldSpecial(void)
|
||||
void DoPicboxCancel(void)
|
||||
{
|
||||
u8 t = EOS;
|
||||
AddTextPrinterParameterized(0, FONT_2, &t, 0, 1, 0, NULL);
|
||||
AddTextPrinterParameterized(0, FONT_NORMAL, &t, 0, 1, 0, NULL);
|
||||
PicboxCancel();
|
||||
}
|
||||
|
||||
@@ -1100,10 +1100,10 @@ void DrawElevatorCurrentFloorWindow(void)
|
||||
sElevatorCurrentFloorWindowId = AddWindow(&sElevatorCurrentFloorWindowTemplate);
|
||||
LoadStdWindowGfx(sElevatorCurrentFloorWindowId, 0x21D, 0xD0);
|
||||
DrawStdFrameWithCustomTileAndPalette(sElevatorCurrentFloorWindowId, FALSE, 0x21D, 0xD);
|
||||
AddTextPrinterParameterized(sElevatorCurrentFloorWindowId, FONT_2, gText_NowOn, 0, 2, 0xFF, NULL);
|
||||
AddTextPrinterParameterized(sElevatorCurrentFloorWindowId, FONT_NORMAL, gText_NowOn, 0, 2, 0xFF, NULL);
|
||||
floorname = sFloorNamePointers[gSpecialVar_0x8005];
|
||||
strwidth = GetStringWidth(FONT_2, floorname, 0);
|
||||
AddTextPrinterParameterized(sElevatorCurrentFloorWindowId, FONT_2, floorname, 56 - strwidth, 16, 0xFF, NULL);
|
||||
strwidth = GetStringWidth(FONT_NORMAL, floorname, 0);
|
||||
AddTextPrinterParameterized(sElevatorCurrentFloorWindowId, FONT_NORMAL, floorname, 56 - strwidth, 16, 0xFF, NULL);
|
||||
PutWindowTilemap(sElevatorCurrentFloorWindowId);
|
||||
CopyWindowToVram(sElevatorCurrentFloorWindowId, COPYWIN_FULL);
|
||||
}
|
||||
@@ -1346,7 +1346,7 @@ static void Task_CreateScriptListMenu(u8 taskId)
|
||||
{
|
||||
sListMenuItems[i].label = sListMenuLabels[gSpecialVar_0x8004][i];
|
||||
sListMenuItems[i].index = i;
|
||||
width = GetStringWidth(FONT_2, sListMenuItems[i].label, 0);
|
||||
width = GetStringWidth(FONT_NORMAL, sListMenuItems[i].label, 0);
|
||||
if (width > mwidth)
|
||||
mwidth = width;
|
||||
}
|
||||
@@ -1384,7 +1384,7 @@ static void CreateScriptListMenu(void)
|
||||
sFieldSpecialsListMenuTemplate.lettersSpacing = 1;
|
||||
sFieldSpecialsListMenuTemplate.itemVerticalPadding = 0;
|
||||
sFieldSpecialsListMenuTemplate.scrollMultiple = 0;
|
||||
sFieldSpecialsListMenuTemplate.fontId = FONT_2;
|
||||
sFieldSpecialsListMenuTemplate.fontId = FONT_NORMAL;
|
||||
sFieldSpecialsListMenuTemplate.cursorKind = 0;
|
||||
}
|
||||
|
||||
@@ -1950,20 +1950,20 @@ void QuestLog_TryRecordDepartedLocation(void)
|
||||
}
|
||||
}
|
||||
|
||||
u16 BattleCardAction(void)
|
||||
u16 GetMysteryGiftCardStat(void)
|
||||
{
|
||||
switch (gSpecialVar_Result)
|
||||
{
|
||||
case 0:
|
||||
return MEvent_GetBattleCardCount(3);
|
||||
case 1:
|
||||
return MEvent_GetBattleCardCount(4);
|
||||
case 2:
|
||||
return MEvent_GetBattleCardCount(0);
|
||||
case 3:
|
||||
return MEvent_GetBattleCardCount(1);
|
||||
case 4:
|
||||
return MEvent_GetBattleCardCount(2);
|
||||
case GET_NUM_STAMPS:
|
||||
return MysteryGift_GetCardStat(CARD_STAT_NUM_STAMPS);
|
||||
case GET_MAX_STAMPS:
|
||||
return MysteryGift_GetCardStat(CARD_STAT_MAX_STAMPS);
|
||||
case GET_CARD_BATTLES_WON:
|
||||
return MysteryGift_GetCardStat(CARD_STAT_BATTLES_WON);
|
||||
case GET_CARD_BATTLES_LOST:
|
||||
return MysteryGift_GetCardStat(CARD_STAT_BATTLES_LOST);
|
||||
case GET_CARD_NUM_TRADES:
|
||||
return MysteryGift_GetCardStat(CARD_STAT_NUM_TRADES);
|
||||
default:
|
||||
AGB_ASSERT_EX(0, ABSPATH("scr_tool.c"), 3873);
|
||||
return 0;
|
||||
@@ -2487,7 +2487,7 @@ void BrailleCursorToggle(void)
|
||||
{
|
||||
x = gSpecialVar_0x8004 + 27;
|
||||
if (gSpecialVar_0x8006 == 0)
|
||||
sBrailleTextCursorSpriteID = CreateTextCursorSpriteForOakSpeech(0, x, gSpecialVar_0x8005, 0, 0);
|
||||
sBrailleTextCursorSpriteID = CreateTextCursorSprite(0, x, gSpecialVar_0x8005, 0, 0);
|
||||
else
|
||||
DestroyTextCursorSprite(sBrailleTextCursorSpriteID);
|
||||
}
|
||||
|
||||
+33
-56
@@ -1,8 +1,8 @@
|
||||
#include "global.h"
|
||||
|
||||
const u32 gBattleTextboxTiles[] = INCBIN_U32("graphics/battle_interface/window.4bpp.lz");
|
||||
const u32 gBattleTextboxPalette[] = INCBIN_U32("graphics/battle_interface/window.gbapal.lz");
|
||||
const u32 gBattleTextboxTilemap[] = INCBIN_U32("graphics/interface/menu_map.bin.lz");
|
||||
const u32 gBattleInterface_Textbox_Gfx[] = INCBIN_U32("graphics/battle_interface/textbox.4bpp.lz");
|
||||
const u32 gBattleInterface_Textbox_Pal[] = INCBIN_U32("graphics/battle_interface/textbox.gbapal.lz");
|
||||
const u32 gBattleInterface_Textbox_Tilemap[] = INCBIN_U32("graphics/battle_interface/textbox.bin.lz");
|
||||
|
||||
const u32 gMonFrontPic_CircledQuestionMark[] = INCBIN_U32("graphics/pokemon/question_mark/circled/front.4bpp.lz");
|
||||
const u32 gMonBackPic_CircledQuestionMark[] = INCBIN_U32("graphics/pokemon/question_mark/circled/back.4bpp.lz");
|
||||
@@ -348,33 +348,10 @@ const u32 gUnusedGfx_BasicFrame[] = INCBIN_U32("graphics/unused/basic_frame.4bpp
|
||||
const u32 gUnusedPal_BasicFrame[] = INCBIN_U32("graphics/unused/basic_frame.gbapal.lz");
|
||||
const u32 gUnusedTilemap_BasicFrame[] = INCBIN_U32("graphics/unused/basic_frame.bin.lz");
|
||||
|
||||
// Battle Interface
|
||||
const u16 gBattleInterface_Healthbox_Pal[] = INCBIN_U16("graphics/battle_interface/healthbox.gbapal");
|
||||
const u16 gBattleInterface_Healthbar_Pal[] = INCBIN_U16("graphics/battle_interface/healthbar.gbapal");
|
||||
const u8 gBattleInterface_Gfx[] = INCBIN_U8("graphics/battle_interface/healthbox_elements.4bpp");
|
||||
|
||||
const u16 gBattleInterface_BallStatusBarPal[] = INCBIN_U16("graphics/battle_interface/ball_status_bar.gbapal");
|
||||
|
||||
const u16 gBattleInterface_BallDisplayPal[] = INCBIN_U16("graphics/battle_interface/ball_display.gbapal");
|
||||
|
||||
//Originally an array?
|
||||
const u8 gHealthboxElementsGfxTable[] = INCBIN_U8("graphics/battle_interface/hp_bar.4bpp");
|
||||
const u8 gHealthboxElementsGfxTable_ExpBar[] = INCBIN_U8("graphics/battle_interface/exp_bar.4bpp");
|
||||
const u8 gHealthboxElementsGfxTable_StatusPsn[] = INCBIN_U8("graphics/battle_interface/status_psn.4bpp");
|
||||
const u8 gHealthboxElementsGfxTable_StatusPar[] = INCBIN_U8("graphics/battle_interface/status_par.4bpp");
|
||||
const u8 gHealthboxElementsGfxTable_StatusSlp[] = INCBIN_U8("graphics/battle_interface/status_slp.4bpp");
|
||||
const u8 gHealthboxElementsGfxTable_StatusFrz[] = INCBIN_U8("graphics/battle_interface/status_frz.4bpp");
|
||||
const u8 gHealthboxElementsGfxTable_StatusBrn[] = INCBIN_U8("graphics/battle_interface/status_brn.4bpp");
|
||||
const u8 gHealthboxElementsGfxTable_Misc[] = INCBIN_U8("graphics/battle_interface/misc.4bpp");
|
||||
const u8 gHealthboxElementsGfxTable_HpBarAnim[] = INCBIN_U8("graphics/battle_interface/hp_bar_anim.4bpp");
|
||||
const u8 gHealthboxElementsGfxTable_MiscFrameEnd[] = INCBIN_U8("graphics/battle_interface/misc_frame_end.4bpp");
|
||||
|
||||
const u8 gBattleInterface_SummaryBallDisplayGfx[] = INCBIN_U8("graphics/battle_interface/ball_display.4bpp");
|
||||
|
||||
//Originally an array?
|
||||
const u8 gBattleInterface_UnusedSummaryBallDisplayGfx[] = INCBIN_U8("graphics/battle_interface/ball_display_unused_extra.4bpp");
|
||||
const u8 gBattleInterfaceGfx_Status2[] = INCBIN_U8("graphics/battle_interface/status2.4bpp"); // these three duplicate sets of graphics are for the opponent pokemon
|
||||
const u8 gBattleInterfaceGfx_Status3[] = INCBIN_U8("graphics/battle_interface/status3.4bpp"); // and are also for use in double battles. they use dynamic palettes so
|
||||
const u8 gBattleInterfaceGfx_Status4[] = INCBIN_U8("graphics/battle_interface/status4.4bpp"); // coloring them is an extreme headache and wont be done for now
|
||||
const u8 gUnknown_8D12A44[] = INCBIN_U8("graphics/unknown/unknown_D12A44.4bpp");
|
||||
const u8 gUnknown_8D12A64[] = INCBIN_U8("graphics/unknown/unknown_D12A64.4bpp");
|
||||
const u32 gBattleInterfaceGfx_UnusedWindow3[] = INCBIN_U32("graphics/battle_interface/unused_window3.4bpp.lz");
|
||||
const u32 gBattleInterfaceGfx_UnusedWindow4[] = INCBIN_U32("graphics/battle_interface/unused_window4.4bpp.lz");
|
||||
|
||||
@@ -1023,7 +1000,7 @@ const u32 gBattleAnimBgPalette_MuddyWater[] = INCBIN_U32("graphics/battle_anims/
|
||||
|
||||
const u32 gEnemyMonShadow_Gfx[] = INCBIN_U32("graphics/battle_interface/enemy_mon_shadow.4bpp.lz");
|
||||
|
||||
const u32 gFile_graphics_battle_interface_ball_status_bar_sheet[] = INCBIN_U32("graphics/battle_interface/ball_status_bar.4bpp.lz");
|
||||
const u32 gBattleInterface_PartySummaryBar_Gfx[] = INCBIN_U32("graphics/battle_interface/party_summary_bar.4bpp.lz");
|
||||
|
||||
const u8 gMonIcon_Egg[] = INCBIN_U8("graphics/pokemon/egg/icon.4bpp");
|
||||
|
||||
@@ -1123,18 +1100,18 @@ const u32 gBag_Pal[] = INCBIN_U32("graphics/interface/bag.gbapal.lz");
|
||||
const u32 gSwapLine_Gfx[] = INCBIN_U32("graphics/interface/bag_swap.4bpp.lz");
|
||||
const u32 gSwapLine_Pal[] = INCBIN_U32("graphics/interface/bag_swap.gbapal.lz");
|
||||
|
||||
const u32 gUnknown_8E845D8[] = INCBIN_U32("graphics/tm_case/unk_8E845D8.4bpp.lz");
|
||||
const u32 gUnknown_8E84A24[] = INCBIN_U32("graphics/tm_case/unk_8E84A24.bin.lz");
|
||||
const u32 gUnknown_8E84B70[] = INCBIN_U32("graphics/tm_case/unk_8E84B70.bin.lz");
|
||||
const u32 gUnknown_8E84CB0[] = INCBIN_U32("graphics/tm_case/unk_8E84CB0.gbapal.lz");
|
||||
const u32 gUnknown_8E84D20[] = INCBIN_U32("graphics/tm_case/unk_8E84D20.gbapal.lz");
|
||||
const u32 gTMCase_TMSpriteGfx[] = INCBIN_U32("graphics/tm_case/unk_8E84D90.4bpp.lz");
|
||||
const u32 gUnknown_8E84F20[] = INCBIN_U32("graphics/tm_case/unk_8E84F20.gbapal.lz");
|
||||
const u32 gUnknown_8E85068[] = INCBIN_U32("graphics/tm_case/unk_8E85068.gbapal.lz");
|
||||
const u32 gTMCase_Gfx[] = INCBIN_U32("graphics/tm_case/tm_case.4bpp.lz");
|
||||
const u32 gTMCaseMenu_Tilemap[] = INCBIN_U32("graphics/tm_case/menu.bin.lz");
|
||||
const u32 gTMCase_Tilemap[] = INCBIN_U32("graphics/tm_case/tm_case.bin.lz");
|
||||
const u32 gTMCaseMenu_Male_Pal[] = INCBIN_U32("graphics/tm_case/menu_male.gbapal.lz");
|
||||
const u32 gTMCaseMenu_Female_Pal[] = INCBIN_U32("graphics/tm_case/menu_female.gbapal.lz");
|
||||
const u32 gTMCaseDisc_Gfx[] = INCBIN_U32("graphics/tm_case/disc.4bpp.lz");
|
||||
const u32 gTMCaseDiscTypes1_Pal[] = INCBIN_U32("graphics/tm_case/disc_types_1.gbapal.lz");
|
||||
const u32 gTMCaseDiscTypes2_Pal[] = INCBIN_U32("graphics/tm_case/disc_types_2.gbapal.lz");
|
||||
|
||||
const u8 gItemPcTiles[] = INCBIN_U8("graphics/item_pc/unk_8E85090.4bpp.lz");
|
||||
const u32 gItemPcBgPals[] = INCBIN_U32("graphics/item_pc/unk_8E85408.gbapal.lz");
|
||||
const u8 gItemPcTilemap[] = INCBIN_U8("graphics/item_pc/unk_8E85458.bin.lz");
|
||||
const u8 gItemPcTiles[] = INCBIN_U8("graphics/item_pc/bg.4bpp.lz");
|
||||
const u32 gItemPcBgPals[] = INCBIN_U32("graphics/item_pc/bg.gbapal.lz");
|
||||
const u8 gItemPcTilemap[] = INCBIN_U8("graphics/item_pc/bg.bin.lz");
|
||||
|
||||
const u32 gBerryPouchSpriteTiles[] = INCBIN_U32("graphics/berry_pouch/berry_pouch.4bpp.lz");
|
||||
const u8 gBerryPouchBgGfx[] = INCBIN_U8("graphics/berry_pouch/background.4bpp.lz");
|
||||
@@ -1212,20 +1189,20 @@ const u32 gNamingScreenPageSwapButton_Gfx[] = INCBIN_U32("graphics/naming_screen
|
||||
const u32 gNamingScreenInputArrow_Gfx[] = INCBIN_U32("graphics/naming_screen/input_arrow.4bpp");
|
||||
const u32 gNamingScreenUnderscore_Gfx[] = INCBIN_U32("graphics/naming_screen/underscore.4bpp");
|
||||
|
||||
const u8 gUnknown_8E99118[] = INCBIN_U8("graphics/tm_case/unk_8E99118.4bpp");
|
||||
const u8 gTMCaseHM_Gfx[] = INCBIN_U8("graphics/tm_case/hm.4bpp");
|
||||
|
||||
const u16 gKantoTrainerCard_Pal[] = INCBIN_U16("graphics/trainer_card/0star.gbapal");
|
||||
const u32 gKantoTrainerCard_Gfx[] = INCBIN_U32("graphics/trainer_card/card.4bpp.lz");
|
||||
const u16 gHoennTrainerCard_Pal[] = INCBIN_U16("graphics/trainer_card/0star_em.gbapal");
|
||||
const u32 gHoennTrainerCard_Gfx[] = INCBIN_U32("graphics/trainer_card/card_em.4bpp.lz");
|
||||
|
||||
const u16 gEasyChatMode_Pal[] = INCBIN_U16("graphics/link_rfu/unk_8E99DAC.gbapal");
|
||||
const u32 gEasyChatWindow_Gfx[] = INCBIN_U32("graphics/link_rfu/unk_8E99DAC.4bpp.lz");
|
||||
const u32 gEasyChatWindow_Tilemap[] = INCBIN_U32("graphics/link_rfu/unk_8E99E74.bin.lz");
|
||||
const u16 gEasyChatWindow_Pal[] = INCBIN_U16("graphics/easy_chat/window.gbapal");
|
||||
const u32 gEasyChatWindow_Gfx[] = INCBIN_U32("graphics/easy_chat/window.4bpp.lz");
|
||||
const u32 gEasyChatWindow_Tilemap[] = INCBIN_U32("graphics/easy_chat/window.bin.lz");
|
||||
|
||||
const u16 gUnknown_8E99F24[] = INCBIN_U16("graphics/link_rfu/unk_8E9A168.gbapal");
|
||||
const u32 gEasyChatSelectGroupHelp_Tiles[] = INCBIN_U32("graphics/link_rfu/unk_8E99F44.4bpp.lz");
|
||||
const u32 gEasyChatModeIcons_Tiles[] = INCBIN_U32("graphics/link_rfu/unk_8E9A168.4bpp.lz");
|
||||
const u16 gEasyChatButtonWindow_Pal[] = INCBIN_U16("graphics/easy_chat/button_window.gbapal");
|
||||
const u32 gEasyChatButtonWindow_Gfx[] = INCBIN_U32("graphics/easy_chat/button_window.4bpp.lz");
|
||||
const u32 gEasyChatMode_Gfx[] = INCBIN_U32("graphics/easy_chat/mode.4bpp.lz");
|
||||
|
||||
const u32 gPokeSumBgTiles[] = INCBIN_U32("graphics/interface/trainer_memo.4bpp.lz");
|
||||
const u32 gTrainerMemoPal1[] = INCBIN_U32("graphics/interface/trainer_memo_pal1.gbapal");
|
||||
@@ -1242,11 +1219,11 @@ const u32 gBgTilemap_PokeSum_MovesListForDelete[] = INCBIN_U32("graphics/interfa
|
||||
const u32 gBgTilemap_PokeSum_MoveDetailsForDelete[] = INCBIN_U32("graphics/interface/trainer_memo_4.bin.lz");
|
||||
const u32 gBgTilemap_TrainerMemo_Egg[] = INCBIN_U32("graphics/interface/trainer_memo_5.bin.lz");
|
||||
|
||||
const u16 gUnknown_8E9BD08[] = INCBIN_U16("graphics/unknown/unknown_E9BD08.gbapal"); // might be an alternate unused palette of the link_rfu gfx below.
|
||||
const u16 gUnknown_8E9BD08[] = INCBIN_U16("graphics/unknown/unknown_E9BD08.gbapal");
|
||||
|
||||
const u32 gEasyChatRedRectangularCursor_Tiles[] = INCBIN_U32("graphics/interface/link_rfu_frame.4bpp.lz");
|
||||
const u16 gPokeSummary_StatusAilmentIconPals[] = INCBIN_U16("graphics/interface/link_rfu_frame.gbapal");
|
||||
const u32 gPokeSummary_StatusAilmentIconTiles[] = INCBIN_U32("graphics/interface/link_rfu_status.4bpp.lz");
|
||||
const u32 gEasyChatRectangleCursor_Gfx[] = INCBIN_U32("graphics/easy_chat/rectangle_cursor.4bpp.lz");
|
||||
const u16 gPokeSummary_StatusAilmentIconPals[] = INCBIN_U16("graphics/interface/status_ailment_icons.gbapal");
|
||||
const u32 gPokeSummary_StatusAilmentIconTiles[] = INCBIN_U32("graphics/interface/status_ailment_icons.4bpp.lz");
|
||||
|
||||
const u16 gDexScreen_TopMenuIconPals_AtoZ[] = INCBIN_U16("graphics/pokedex/cat_icon_abc.gbapal");
|
||||
const u32 gDexScreen_TopMenuIconTiles_AtoZ[] = INCBIN_U32("graphics/pokedex/cat_icon_abc.4bpp.lz");
|
||||
@@ -1387,8 +1364,7 @@ const u8 gGraphics_TitleScreen_BoxArtMonMap[] = INCBIN_U8("graphics/title_screen
|
||||
const u16 gGraphics_TitleScreen_BackgroundPals[] = INCBIN_U16("graphics/title_screen/firered/background.gbapal");
|
||||
const u8 gGraphics_TitleScreen_CopyrightPressStartTiles[] = INCBIN_U8("graphics/title_screen/copyright_press_start.4bpp.lz");
|
||||
const u8 gGraphics_TitleScreen_CopyrightPressStartMap[] = INCBIN_U8("graphics/title_screen/copyright_press_start.bin.lz");
|
||||
const u16 gGraphics_TitleScreen_FireOrLeafPals[] = INCBIN_U16("graphics/title_screen/firered/fire_sprite.gbapal");
|
||||
const u32 gGraphics_TitleScreen_BlankObjTiles[] = INCBIN_U32("graphics/title_screen/blank_obj.4bpp.lz");
|
||||
const u16 gTitleScreen_Slash_Pal[] = INCBIN_U16("graphics/title_screen/firered/slash.gbapal");
|
||||
#endif
|
||||
|
||||
#ifdef LEAFGREEN
|
||||
@@ -1401,10 +1377,11 @@ const u8 gGraphics_TitleScreen_BoxArtMonMap[] = INCBIN_U8("graphics/title_screen
|
||||
const u16 gGraphics_TitleScreen_BackgroundPals[] = INCBIN_U16("graphics/title_screen/leafgreen/background.gbapal");
|
||||
const u8 gGraphics_TitleScreen_CopyrightPressStartTiles[] = INCBIN_U8("graphics/title_screen/copyright_press_start.4bpp.lz");
|
||||
const u8 gGraphics_TitleScreen_CopyrightPressStartMap[] = INCBIN_U8("graphics/title_screen/copyright_press_start.bin.lz");
|
||||
const u16 gGraphics_TitleScreen_FireOrLeafPals[] = INCBIN_U16("graphics/title_screen/leafgreen/leaf_sprite.gbapal");
|
||||
const u32 gGraphics_TitleScreen_BlankObjTiles[] = INCBIN_U32("graphics/title_screen/blank_obj.4bpp.lz");
|
||||
const u16 gTitleScreen_Slash_Pal[] = INCBIN_U16("graphics/title_screen/leafgreen/slash.gbapal");
|
||||
#endif
|
||||
|
||||
const u32 gTitleScreen_BlankSprite_Tiles[] = INCBIN_U32("graphics/title_screen/blank_sprite.4bpp.lz");
|
||||
|
||||
const u16 gCreditsAllRightsReservedGfxPal[] = INCBIN_U16("graphics/credits/unk_8EAE548.gbapal");
|
||||
const u8 gCreditsAllRightsReservedGfxTiles[] = INCBIN_U8("graphics/credits/unk_8EAE548.4bpp.lz");
|
||||
const u8 gCreditsAllRightsReservedGfxMap[] = INCBIN_U8("graphics/credits/unk_8EAE548.bin.lz");
|
||||
|
||||
+18
-18
@@ -454,7 +454,7 @@ static void Task_Hof_InitTeamSaveData(u8 taskId)
|
||||
*lastSavedTeam = *sHofMonPtr;
|
||||
|
||||
DrawDialogueFrame(0, 0);
|
||||
AddTextPrinterParameterized2(0, FONT_2, gText_SavingDontTurnOffThePower2, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
AddTextPrinterParameterized2(0, FONT_NORMAL, gText_SavingDontTurnOffThePower2, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
CopyWindowToVram(0, COPYWIN_FULL);
|
||||
gTasks[taskId].func = Task_Hof_TrySaveData;
|
||||
}
|
||||
@@ -618,7 +618,7 @@ static void Task_Hof_SpawnPlayerPic(u8 taskId)
|
||||
ShowBg(0);
|
||||
ShowBg(1);
|
||||
ShowBg(3);
|
||||
gTasks[taskId].data[4] = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId_Debug(gSaveBlock2Ptr->playerGender, TRUE), TRUE, 0x78, 0x48, 6, 0xFFFF);
|
||||
gTasks[taskId].data[4] = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender, TRUE), TRUE, 0x78, 0x48, 6, 0xFFFF);
|
||||
AddWindow(&sWindowTemplate);
|
||||
LoadStdWindowGfx(1, 0x21D, 0xD0);
|
||||
gTasks[taskId].data[3] = 120;
|
||||
@@ -640,7 +640,7 @@ static void Task_Hof_WaitAndPrintPlayerInfo(u8 taskId)
|
||||
FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x20, 0x20);
|
||||
HallOfFame_PrintPlayerInfo(1, 2);
|
||||
DrawDialogueFrame(0, 0);
|
||||
AddTextPrinterParameterized2(0, FONT_2, gText_LeagueChamp, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
AddTextPrinterParameterized2(0, FONT_NORMAL, gText_LeagueChamp, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
CopyWindowToVram(0, COPYWIN_FULL);
|
||||
gTasks[taskId].func = Task_Hof_ExitOnKeyPressed;
|
||||
}
|
||||
@@ -970,7 +970,7 @@ static void Task_HofPC_PrintDataIsCorrupted(u8 taskId)
|
||||
{
|
||||
TopBarWindowPrintString(gText_ABUTTONExit, 8, TRUE);
|
||||
DrawDialogueFrame(0, 0);
|
||||
AddTextPrinterParameterized2(0, FONT_2, gText_HOFCorrupted, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
AddTextPrinterParameterized2(0, FONT_NORMAL, gText_HOFCorrupted, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
CopyWindowToVram(0, COPYWIN_FULL);
|
||||
gTasks[taskId].func = Task_HofPC_ExitOnButtonPress;
|
||||
}
|
||||
@@ -983,10 +983,10 @@ static void Task_HofPC_ExitOnButtonPress(u8 taskId)
|
||||
|
||||
static void HallOfFame_PrintWelcomeText(u8 not, u8 used)
|
||||
{
|
||||
u8 x = (0xD0 - GetStringWidth(FONT_2, gText_WelcomeToHOF, 0)) / 2;
|
||||
u8 x = (0xD0 - GetStringWidth(FONT_NORMAL, gText_WelcomeToHOF, 0)) / 2;
|
||||
FillWindowPixelBuffer(0, PIXEL_FILL(0));
|
||||
PutWindowTilemap(0);
|
||||
AddTextPrinterParameterized3(0, FONT_2, x, 1, sTextColors[0], 0, gText_WelcomeToHOF);
|
||||
AddTextPrinterParameterized3(0, FONT_NORMAL, x, 1, sTextColors[0], 0, gText_WelcomeToHOF);
|
||||
CopyWindowToVram(0, COPYWIN_FULL);
|
||||
}
|
||||
|
||||
@@ -1021,7 +1021,7 @@ static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 unused1, u
|
||||
}
|
||||
text[3] = EOS;
|
||||
StringAppend(text2, text);
|
||||
AddTextPrinterParameterized3(0, FONT_2, 16, 1, sTextColors[0], 0, text2);
|
||||
AddTextPrinterParameterized3(0, FONT_NORMAL, 16, 1, sTextColors[0], 0, text2);
|
||||
}
|
||||
|
||||
// nick, species names, gender and lvl
|
||||
@@ -1034,12 +1034,12 @@ static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 unused1, u
|
||||
}
|
||||
}
|
||||
text[i] = EOS;
|
||||
width = GetStringWidth(FONT_2, text, GetFontAttribute(FONT_2, FONTATTR_LETTER_SPACING));
|
||||
width = GetStringWidth(FONT_NORMAL, text, GetFontAttribute(FONT_NORMAL, FONTATTR_LETTER_SPACING));
|
||||
if (currMon->species == SPECIES_EGG)
|
||||
x = 0x80 - width / 2;
|
||||
else
|
||||
x = 0x80 - width;
|
||||
AddTextPrinterParameterized3(0, FONT_2, x, 1, sTextColors[0], 0, text);
|
||||
AddTextPrinterParameterized3(0, FONT_NORMAL, x, 1, sTextColors[0], 0, text);
|
||||
if (currMon->species != SPECIES_EGG)
|
||||
{
|
||||
text[0] = CHAR_SLASH;
|
||||
@@ -1063,15 +1063,15 @@ static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 unused1, u
|
||||
}
|
||||
*stringPtr = EOS;
|
||||
|
||||
AddTextPrinterParameterized3(0, FONT_2, 0x80, 1, sTextColors[0], 0, text);
|
||||
AddTextPrinterParameterized3(0, FONT_NORMAL, 0x80, 1, sTextColors[0], 0, text);
|
||||
|
||||
stringPtr = StringCopy(text, gText_Level);
|
||||
ConvertIntToDecimalStringN(stringPtr, currMon->lvl, STR_CONV_MODE_LEFT_ALIGN, 3);
|
||||
AddTextPrinterParameterized3(0, FONT_2, 0x20, 0x11, sTextColors[0], 0, text);
|
||||
AddTextPrinterParameterized3(0, FONT_NORMAL, 0x20, 0x11, sTextColors[0], 0, text);
|
||||
|
||||
stringPtr = StringCopy(text, gText_IDNumber);
|
||||
ConvertIntToDecimalStringN(stringPtr, (u16)(currMon->tid), STR_CONV_MODE_LEADING_ZEROS, 5);
|
||||
AddTextPrinterParameterized3(0, FONT_2, 0x60, 0x11, sTextColors[0], 0, text);
|
||||
AddTextPrinterParameterized3(0, FONT_NORMAL, 0x60, 0x11, sTextColors[0], 0, text);
|
||||
|
||||
}
|
||||
CopyWindowToVram(0, COPYWIN_FULL);
|
||||
@@ -1086,21 +1086,21 @@ static void HallOfFame_PrintPlayerInfo(u8 unused1, u8 unused2)
|
||||
FillWindowPixelBuffer(1, PIXEL_FILL(1));
|
||||
PutWindowTilemap(1);
|
||||
DrawStdFrameWithCustomTileAndPalette(1, FALSE, 0x21D, 0xD);
|
||||
AddTextPrinterParameterized4(1, FONT_2, 4, 3, 0, 0, sTextColors[1], 0, gText_Name);
|
||||
AddTextPrinterParameterized4(1, FONT_NORMAL, 4, 3, 0, 0, sTextColors[1], 0, gText_Name);
|
||||
|
||||
AddTextPrinterParameterized3(1, FONT_2, textWidth - GetStringWidth(FONT_2, gSaveBlock2Ptr->playerName, 0), 3, sTextColors[1], 0, gSaveBlock2Ptr->playerName);
|
||||
AddTextPrinterParameterized3(1, FONT_NORMAL, textWidth - GetStringWidth(FONT_NORMAL, gSaveBlock2Ptr->playerName, 0), 3, sTextColors[1], 0, gSaveBlock2Ptr->playerName);
|
||||
|
||||
trainerId = (gSaveBlock2Ptr->playerTrainerId[0]) | (gSaveBlock2Ptr->playerTrainerId[1] << 8);
|
||||
AddTextPrinterParameterized3(1, FONT_2, 4, 18, sTextColors[1], 0, gText_IDNumber);
|
||||
AddTextPrinterParameterized3(1, FONT_NORMAL, 4, 18, sTextColors[1], 0, gText_IDNumber);
|
||||
text[0] = (trainerId % 100000) / 10000 + CHAR_0;
|
||||
text[1] = (trainerId % 10000) / 1000 + CHAR_0;
|
||||
text[2] = (trainerId % 1000) / 100 + CHAR_0;
|
||||
text[3] = (trainerId % 100) / 10 + CHAR_0;
|
||||
text[4] = (trainerId % 10) / 1 + CHAR_0;
|
||||
text[5] = EOS;
|
||||
AddTextPrinterParameterized3(1, FONT_2, textWidth - 30, 18, sTextColors[1], 0, text);
|
||||
AddTextPrinterParameterized3(1, FONT_NORMAL, textWidth - 30, 18, sTextColors[1], 0, text);
|
||||
|
||||
AddTextPrinterParameterized3(1, FONT_2, 4, 32, sTextColors[1], 0, gText_MainMenuTime);
|
||||
AddTextPrinterParameterized3(1, FONT_NORMAL, 4, 32, sTextColors[1], 0, gText_MainMenuTime);
|
||||
text[0] = (gSaveBlock2Ptr->playTimeHours / 100) + CHAR_0;
|
||||
text[1] = (gSaveBlock2Ptr->playTimeHours % 100) / 10 + CHAR_0;
|
||||
text[2] = (gSaveBlock2Ptr->playTimeHours % 10) + CHAR_0;
|
||||
@@ -1115,7 +1115,7 @@ static void HallOfFame_PrintPlayerInfo(u8 unused1, u8 unused2)
|
||||
text[5] = (gSaveBlock2Ptr->playTimeMinutes % 10) + CHAR_0;
|
||||
text[6] = EOS;
|
||||
|
||||
AddTextPrinterParameterized3(1, FONT_2, textWidth - 36, 32, sTextColors[1], 0, text);
|
||||
AddTextPrinterParameterized3(1, FONT_NORMAL, textWidth - 36, 32, sTextColors[1], 0, text);
|
||||
|
||||
CopyWindowToVram(1, COPYWIN_FULL);
|
||||
}
|
||||
|
||||
+1
-1
@@ -94,7 +94,7 @@ static const u8 sHelpMessageTextColors[3] = {TEXT_COLOR_TRANSPARENT, TEXT_DYNAMI
|
||||
|
||||
static void PrintHelpMessageText(const u8 *text)
|
||||
{
|
||||
AddTextPrinterParameterized4(sHelpMessageWindowId, FONT_2, 2, 5, 1, 1, sHelpMessageTextColors, -1, text);
|
||||
AddTextPrinterParameterized4(sHelpMessageWindowId, FONT_NORMAL, 2, 5, 1, 1, sHelpMessageTextColors, -1, text);
|
||||
}
|
||||
|
||||
void PrintTextOnHelpMessageWindow(const u8 *text, u8 mode)
|
||||
|
||||
+14
-14
@@ -410,7 +410,7 @@ void HelpSystemRenderText(u8 fontId, u8 * dest, const u8 * src, u8 x, u8 y, u8 w
|
||||
}
|
||||
DecompressAndRenderGlyph(fontId, gSaveBlock2Ptr->playerName[i], &srcBlit, &destBlit, dest, x, y, width, height);
|
||||
// This is required to match a dummy [sp+#0x24] read here
|
||||
if (fontId == FONT_0)
|
||||
if (fontId == FONT_SMALL)
|
||||
{
|
||||
x += gGlyphInfo.width;
|
||||
}
|
||||
@@ -440,7 +440,7 @@ void HelpSystemRenderText(u8 fontId, u8 * dest, const u8 * src, u8 x, u8 y, u8 w
|
||||
}
|
||||
DecompressAndRenderGlyph(fontId, gString_Someone[i], &srcBlit, &destBlit, dest, x, y, width, height);
|
||||
}
|
||||
if (fontId == FONT_0)
|
||||
if (fontId == FONT_SMALL)
|
||||
{
|
||||
x += gGlyphInfo.width;
|
||||
}
|
||||
@@ -479,7 +479,7 @@ void HelpSystemRenderText(u8 fontId, u8 * dest, const u8 * src, u8 x, u8 y, u8 w
|
||||
case EXT_CTRL_CODE_SHIFT_DOWN:
|
||||
src++;
|
||||
case EXT_CTRL_CODE_RESET_FONT:
|
||||
case EXT_CTRL_CODE_WAIT_BUTTON:
|
||||
case EXT_CTRL_CODE_PAUSE_UNTIL_PRESS:
|
||||
case EXT_CTRL_CODE_WAIT_SE:
|
||||
case EXT_CTRL_CODE_FILL_WINDOW:
|
||||
break;
|
||||
@@ -529,7 +529,7 @@ void HelpSystemRenderText(u8 fontId, u8 * dest, const u8 * src, u8 x, u8 y, u8 w
|
||||
default:
|
||||
if (curChar == CHAR_SPACE)
|
||||
{
|
||||
if (fontId == FONT_0)
|
||||
if (fontId == FONT_SMALL)
|
||||
{
|
||||
x += 5;
|
||||
}
|
||||
@@ -541,7 +541,7 @@ void HelpSystemRenderText(u8 fontId, u8 * dest, const u8 * src, u8 x, u8 y, u8 w
|
||||
else
|
||||
{
|
||||
DecompressAndRenderGlyph(fontId, curChar, &srcBlit, &destBlit, dest, x, y, width, height);
|
||||
if (fontId == FONT_0)
|
||||
if (fontId == FONT_SMALL)
|
||||
{
|
||||
x += gGlyphInfo.width;
|
||||
}
|
||||
@@ -557,12 +557,12 @@ void HelpSystemRenderText(u8 fontId, u8 * dest, const u8 * src, u8 x, u8 y, u8 w
|
||||
|
||||
void DecompressAndRenderGlyph(u8 fontId, u16 glyph, struct Bitmap *srcBlit, struct Bitmap *destBlit, u8 *destBuffer, u8 x, u8 y, u8 width, u8 height)
|
||||
{
|
||||
if (fontId == FONT_0)
|
||||
DecompressGlyphFont0(glyph, FALSE);
|
||||
else if (fontId == FONT_5)
|
||||
DecompressGlyphFont5(glyph, FALSE);
|
||||
if (fontId == FONT_SMALL)
|
||||
DecompressGlyph_Small(glyph, FALSE);
|
||||
else if (fontId == FONT_FEMALE)
|
||||
DecompressGlyph_Female(glyph, FALSE);
|
||||
else
|
||||
DecompressGlyphFont2(glyph, FALSE);
|
||||
DecompressGlyph_Normal(glyph, FALSE);
|
||||
srcBlit->pixels = gGlyphInfo.pixels;
|
||||
srcBlit->width = 16;
|
||||
srcBlit->height = 16;
|
||||
@@ -580,7 +580,7 @@ void HelpSystem_PrintTextInTopLeftCorner(const u8 * str)
|
||||
|
||||
void HelpSystem_PrintTextRightAlign_Row52(const u8 * str)
|
||||
{
|
||||
s32 left = 0x7C - GetStringWidth(FONT_0, str, 0);
|
||||
s32 left = 0x7C - GetStringWidth(FONT_SMALL, str, 0);
|
||||
GenerateFontHalfRowLookupTable(TEXT_COLOR_WHITE, TEXT_DYNAMIC_COLOR_6, TEXT_COLOR_DARK_GRAY);
|
||||
HelpSystemRenderText(0, gDecompressionBuffer + 0x3400, str, left, 2, 16, 2);
|
||||
}
|
||||
@@ -713,7 +713,7 @@ void HS_UpdateMenuScrollArrows(void)
|
||||
|
||||
void PrintListMenuItems(void)
|
||||
{
|
||||
u8 glyphHeight = GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT) + 1;
|
||||
u8 glyphHeight = GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT) + 1;
|
||||
s32 i;
|
||||
s32 r5 = gHelpSystemListMenu.itemsAbove;
|
||||
|
||||
@@ -728,7 +728,7 @@ void PrintListMenuItems(void)
|
||||
|
||||
void PlaceListMenuCursor(void)
|
||||
{
|
||||
u8 glyphHeight = GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT) + 1;
|
||||
u8 glyphHeight = GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT) + 1;
|
||||
u8 x = gHelpSystemListMenu.sub.left;
|
||||
u8 y = gHelpSystemListMenu.sub.top + glyphHeight * gHelpSystemListMenu.cursorPos;
|
||||
HelpSystem_PrintTextAt(gText_SelectorArrow2, x, y);
|
||||
@@ -736,7 +736,7 @@ void PlaceListMenuCursor(void)
|
||||
|
||||
void HS_RemoveSelectionCursorAt(u8 i)
|
||||
{
|
||||
u8 glyphHeight = GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT) + 1;
|
||||
u8 glyphHeight = GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT) + 1;
|
||||
u8 x = gHelpSystemListMenu.sub.left;
|
||||
u8 y = gHelpSystemListMenu.sub.top + i * glyphHeight;
|
||||
HelpSystem_PrintTextAt(gString_HelpSystem_ClearTo8, x, y);
|
||||
|
||||
+7
-5
@@ -612,12 +612,13 @@ const u8 * ItemId_GetName(u16 itemId)
|
||||
return gItems[SanitizeItemId(itemId)].name;
|
||||
}
|
||||
|
||||
u16 itemid_get_number(u16 itemId)
|
||||
// Unused
|
||||
u16 ItemId_GetId(u16 itemId)
|
||||
{
|
||||
return gItems[SanitizeItemId(itemId)].itemId;
|
||||
}
|
||||
|
||||
u16 itemid_get_market_price(u16 itemId)
|
||||
u16 ItemId_GetPrice(u16 itemId)
|
||||
{
|
||||
return gItems[SanitizeItemId(itemId)].price;
|
||||
}
|
||||
@@ -637,14 +638,15 @@ const u8 * ItemId_GetDescription(u16 itemId)
|
||||
return gItems[SanitizeItemId(itemId)].description;
|
||||
}
|
||||
|
||||
bool8 itemid_is_unique(u16 itemId)
|
||||
u8 ItemId_GetImportance(u16 itemId)
|
||||
{
|
||||
return gItems[SanitizeItemId(itemId)].importance;
|
||||
}
|
||||
|
||||
u8 itemid_get_x19(u16 itemId)
|
||||
// Unused
|
||||
u8 ItemId_GetRegistrability(u16 itemId)
|
||||
{
|
||||
return gItems[SanitizeItemId(itemId)].exitsBagOnUse;
|
||||
return gItems[SanitizeItemId(itemId)].registrability;
|
||||
}
|
||||
|
||||
u8 ItemId_GetPocket(u16 itemId)
|
||||
|
||||
+52
-52
@@ -378,11 +378,11 @@ static void CB2_OpenBagMenu(void)
|
||||
{
|
||||
while (1)
|
||||
{
|
||||
if (MenuHelpers_CallLinkSomething() == TRUE)
|
||||
if (IsActiveOverworldLinkBusy() == TRUE)
|
||||
break;
|
||||
if (LoadBagMenuGraphics() == TRUE)
|
||||
break;
|
||||
if (MenuHelpers_LinkSomething() == TRUE)
|
||||
if (MenuHelpers_IsLinkActive() == TRUE)
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -420,7 +420,7 @@ static bool8 LoadBagMenuGraphics(void)
|
||||
gMain.state++;
|
||||
break;
|
||||
case 6:
|
||||
if (!MenuHelpers_LinkSomething())
|
||||
if (!MenuHelpers_IsLinkActive())
|
||||
{
|
||||
ResetTasks();
|
||||
}
|
||||
@@ -661,7 +661,7 @@ static void Bag_BuildListMenuTemplate(u8 pocket)
|
||||
gMultiuseListMenuTemplate.itemVerticalPadding = 2;
|
||||
gMultiuseListMenuTemplate.upText_Y = 2;
|
||||
gMultiuseListMenuTemplate.maxShowed = sBagMenuDisplay->maxShowed[pocket];
|
||||
gMultiuseListMenuTemplate.fontId = FONT_2;
|
||||
gMultiuseListMenuTemplate.fontId = FONT_NORMAL;
|
||||
gMultiuseListMenuTemplate.cursorPal = 2;
|
||||
gMultiuseListMenuTemplate.fillValue = 0;
|
||||
gMultiuseListMenuTemplate.cursorShadowPal = 3;
|
||||
@@ -715,11 +715,11 @@ static void BagListMenuItemPrintFunc(u8 windowId, u32 itemId, u8 y)
|
||||
{
|
||||
bagItemId = BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, itemId);
|
||||
bagItemQuantity = BagGetQuantityByPocketPosition(gBagMenuState.pocket + 1, itemId);
|
||||
if (gBagMenuState.pocket != POCKET_KEY_ITEMS - 1 && !itemid_is_unique(bagItemId))
|
||||
if (gBagMenuState.pocket != POCKET_KEY_ITEMS - 1 && ItemId_GetImportance(bagItemId) == 0)
|
||||
{
|
||||
ConvertIntToDecimalStringN(gStringVar1, bagItemQuantity, STR_CONV_MODE_RIGHT_ALIGN, 3);
|
||||
StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1);
|
||||
BagPrintTextOnWindow(windowId, FONT_0, gStringVar4, 0x6e, y, 0, 0, 0xFF, 1);
|
||||
BagPrintTextOnWindow(windowId, FONT_SMALL, gStringVar4, 0x6e, y, 0, 0, 0xFF, 1);
|
||||
}
|
||||
else if (gSaveBlock1Ptr->registeredItem != ITEM_NONE && gSaveBlock1Ptr->registeredItem == bagItemId)
|
||||
{
|
||||
@@ -737,11 +737,11 @@ static void bag_menu_print_cursor(u8 y, u8 colorIdx)
|
||||
{
|
||||
if (colorIdx == 0xFF)
|
||||
{
|
||||
FillWindowPixelRect(0, PIXEL_FILL(0), 1, y, GetMenuCursorDimensionByFont(FONT_2, 0), GetMenuCursorDimensionByFont(FONT_2, 1));
|
||||
FillWindowPixelRect(0, PIXEL_FILL(0), 1, y, GetMenuCursorDimensionByFont(FONT_NORMAL, 0), GetMenuCursorDimensionByFont(FONT_NORMAL, 1));
|
||||
}
|
||||
else
|
||||
{
|
||||
BagPrintTextOnWindow(0, FONT_2, gText_SelectorArrow2, 1, y, 0, 0, 0, colorIdx);
|
||||
BagPrintTextOnWindow(0, FONT_NORMAL, gText_SelectorArrow2, 1, y, 0, 0, 0, colorIdx);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -759,7 +759,7 @@ static void PrintItemDescriptionOnMessageWindow(s32 itemIndex)
|
||||
else
|
||||
description = gText_CloseBag;
|
||||
FillWindowPixelBuffer(1, PIXEL_FILL(0));
|
||||
BagPrintTextOnWindow(1, FONT_2, description, 0, 3, 2, 0, 0, 0);
|
||||
BagPrintTextOnWindow(1, FONT_NORMAL, description, 0, 3, 2, 0, 0, 0);
|
||||
}
|
||||
|
||||
static void CreatePocketScrollArrowPair(void)
|
||||
@@ -1051,7 +1051,7 @@ static void Task_BagMenu_HandleInput(u8 taskId)
|
||||
return;
|
||||
if (FuncIsActiveTask(Task_AnimateWin0v) == TRUE)
|
||||
return;
|
||||
if (MenuHelpers_CallLinkSomething() == TRUE)
|
||||
if (IsActiveOverworldLinkBusy() == TRUE)
|
||||
return;
|
||||
switch (ProcessPocketSwitchInput(taskId, gBagMenuState.pocket))
|
||||
{
|
||||
@@ -1132,15 +1132,15 @@ static u8 ProcessPocketSwitchInput(u8 taskId, u8 pocketId)
|
||||
u8 lrState;
|
||||
if (sBagMenuDisplay->pocketSwitchMode != 0)
|
||||
return 0;
|
||||
lrState = GetLRKeysState();
|
||||
if (JOY_NEW(DPAD_LEFT) || lrState == 1)
|
||||
lrState = GetLRKeysPressed();
|
||||
if (JOY_NEW(DPAD_LEFT) || lrState == MENU_L_PRESSED)
|
||||
{
|
||||
if (pocketId == POCKET_ITEMS - 1)
|
||||
return 0;
|
||||
PlaySE(SE_BAG_POCKET);
|
||||
return 1;
|
||||
}
|
||||
if (JOY_NEW(DPAD_RIGHT) || lrState == 2)
|
||||
if (JOY_NEW(DPAD_RIGHT) || lrState == MENU_R_PRESSED)
|
||||
{
|
||||
if (pocketId >= POCKET_POKE_BALLS - 1)
|
||||
return 0;
|
||||
@@ -1175,7 +1175,7 @@ static void SwitchPockets(u8 taskId, s16 direction, bool16 a2)
|
||||
static void Task_AnimateSwitchPockets(u8 taskId)
|
||||
{
|
||||
s16 *data = gTasks[taskId].data;
|
||||
if (!MenuHelpers_LinkSomething() && !BagIsTutorial())
|
||||
if (!MenuHelpers_IsLinkActive() && !BagIsTutorial())
|
||||
{
|
||||
switch (ProcessPocketSwitchInput(taskId, gBagMenuState.pocket + data[11]))
|
||||
{
|
||||
@@ -1231,7 +1231,7 @@ static void BeginMovingItemInPocket(u8 taskId, s16 itemIndex)
|
||||
StringCopy(gStringVar1, ItemId_GetName(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1])));
|
||||
StringExpandPlaceholders(gStringVar4, gOtherText_WhereShouldTheStrVar1BePlaced);
|
||||
FillWindowPixelBuffer(1, PIXEL_FILL(0));
|
||||
BagPrintTextOnWindow(1, FONT_2, gStringVar4, 0, 3, 2, 0, 0, 0);
|
||||
BagPrintTextOnWindow(1, FONT_NORMAL, gStringVar4, 0, 3, 2, 0, 0, 0);
|
||||
UpdateSwapLinePos(0, ListMenuGetYCoordForPrintingArrowCursor(data[0]));
|
||||
SetSwapLineInvisibility(FALSE);
|
||||
BagDestroyPocketSwitchArrowPair();
|
||||
@@ -1245,7 +1245,7 @@ static void Task_MoveItemInPocket_HandleInput(u8 taskId)
|
||||
s32 input;
|
||||
u16 itemsAbove;
|
||||
u16 cursorPos;
|
||||
if (MenuHelpers_CallLinkSomething() == TRUE)
|
||||
if (IsActiveOverworldLinkBusy() == TRUE)
|
||||
return;
|
||||
input = ListMenu_ProcessInput(data[0]);
|
||||
ListMenuGetScrollAndRow(data[0], &gBagMenuState.cursorPos[gBagMenuState.pocket], &gBagMenuState.itemsAbove[gBagMenuState.pocket]);
|
||||
@@ -1316,11 +1316,11 @@ static void InitQuantityToTossOrDeposit(u16 cursorPos, const u8 *str)
|
||||
u8 r5 = ShowBagWindow(6, 2);
|
||||
CopyItemName(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, cursorPos), gStringVar1);
|
||||
StringExpandPlaceholders(gStringVar4, str);
|
||||
BagPrintTextOnWindow(r5, FONT_2, gStringVar4, 0, 2, 1, 0, 0, 1);
|
||||
BagPrintTextOnWindow(r5, FONT_NORMAL, gStringVar4, 0, 2, 1, 0, 0, 1);
|
||||
r4 = ShowBagWindow(0, 0);
|
||||
ConvertIntToDecimalStringN(gStringVar1, 1, STR_CONV_MODE_LEADING_ZEROS, 3);
|
||||
StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1);
|
||||
BagPrintTextOnWindow(r4, FONT_0, gStringVar4, 4, 10, 1, 0, 0, 1);
|
||||
BagPrintTextOnWindow(r4, FONT_SMALL, gStringVar4, 4, 10, 1, 0, 0, 1);
|
||||
CreateArrowPair_QuantitySelect();
|
||||
}
|
||||
|
||||
@@ -1330,7 +1330,7 @@ static void UpdateQuantityToTossOrDeposit(s16 value, u8 ndigits)
|
||||
FillWindowPixelBuffer(r6, PIXEL_FILL(1));
|
||||
ConvertIntToDecimalStringN(gStringVar1, value, STR_CONV_MODE_LEADING_ZEROS, ndigits);
|
||||
StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1);
|
||||
BagPrintTextOnWindow(r6, FONT_0, gStringVar4, 4, 10, 1, 0, 0, 1);
|
||||
BagPrintTextOnWindow(r6, FONT_SMALL, gStringVar4, 4, 10, 1, 0, 0, 1);
|
||||
}
|
||||
|
||||
static void CopyBagListBgTileRowToTilemapBuffer(u8 frame)
|
||||
@@ -1371,7 +1371,7 @@ static void OpenContextMenu(u8 taskId)
|
||||
sContextMenuNumItems = 2;
|
||||
break;
|
||||
default:
|
||||
if (MenuHelpers_LinkSomething() == TRUE || InUnionRoom() == TRUE)
|
||||
if (MenuHelpers_IsLinkActive() == TRUE || InUnionRoom() == TRUE)
|
||||
{
|
||||
if (gSpecialVar_ItemId == ITEM_TM_CASE || gSpecialVar_ItemId == ITEM_BERRY_POUCH)
|
||||
{
|
||||
@@ -1423,20 +1423,20 @@ static void OpenContextMenu(u8 taskId)
|
||||
r6 = ShowBagWindow(10, sContextMenuNumItems - 1);
|
||||
AddItemMenuActionTextPrinters(
|
||||
r6,
|
||||
FONT_2,
|
||||
GetMenuCursorDimensionByFont(FONT_2, 0),
|
||||
FONT_NORMAL,
|
||||
GetMenuCursorDimensionByFont(FONT_NORMAL, 0),
|
||||
2,
|
||||
GetFontAttribute(FONT_2, FONTATTR_LETTER_SPACING),
|
||||
GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT) + 2,
|
||||
GetFontAttribute(FONT_NORMAL, FONTATTR_LETTER_SPACING),
|
||||
GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT) + 2,
|
||||
sContextMenuNumItems,
|
||||
sItemMenuContextActions,
|
||||
sContextMenuItemsPtr
|
||||
);
|
||||
Menu_InitCursor(r6, FONT_2, 0, 2, GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT) + 2, sContextMenuNumItems, 0);
|
||||
Menu_InitCursor(r6, FONT_NORMAL, 0, 2, GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT) + 2, sContextMenuNumItems, 0);
|
||||
r4 = ShowBagWindow(6, 0);
|
||||
CopyItemName(gSpecialVar_ItemId, gStringVar1);
|
||||
StringExpandPlaceholders(gStringVar4, gText_Var1IsSelected);
|
||||
BagPrintTextOnWindow(r4, FONT_2, gStringVar4, 0, 2, 1, 0, 0, 1);
|
||||
BagPrintTextOnWindow(r4, FONT_NORMAL, gStringVar4, 0, 2, 1, 0, 0, 1);
|
||||
}
|
||||
|
||||
static void Task_ItemContext_FieldOrBattle(u8 taskId)
|
||||
@@ -1448,7 +1448,7 @@ static void Task_ItemContext_FieldOrBattle(u8 taskId)
|
||||
static void Task_FieldItemContextMenuHandleInput(u8 taskId)
|
||||
{
|
||||
s8 input;
|
||||
if (MenuHelpers_CallLinkSomething() != TRUE)
|
||||
if (IsActiveOverworldLinkBusy() != TRUE)
|
||||
{
|
||||
input = Menu_ProcessInputNoWrapAround();
|
||||
switch (input)
|
||||
@@ -1508,7 +1508,7 @@ static void Task_ConfirmTossItems(u8 taskId)
|
||||
s16 *data = gTasks[taskId].data;
|
||||
ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3);
|
||||
StringExpandPlaceholders(gStringVar4, gText_ThrowAwayStrVar2OfThisItemQM);
|
||||
BagPrintTextOnWindow(ShowBagWindow(6, 1), FONT_2, gStringVar4, 0, 2, 1, 0, 0, 1);
|
||||
BagPrintTextOnWindow(ShowBagWindow(6, 1), FONT_NORMAL, gStringVar4, 0, 2, 1, 0, 0, 1);
|
||||
BagCreateYesNoMenuBottomRight(taskId, &sYesNoMenu_Toss);
|
||||
}
|
||||
|
||||
@@ -1560,7 +1560,7 @@ static void Task_TossItem_Yes(u8 taskId)
|
||||
CopyItemName(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1]), gStringVar1);
|
||||
ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3);
|
||||
StringExpandPlaceholders(gStringVar4, gText_ThrewAwayStrVar2StrVar1s);
|
||||
BagPrintTextOnWindow(ShowBagWindow(6, 3), FONT_2, gStringVar4, 0, 2, 1, 0, 0, 1);
|
||||
BagPrintTextOnWindow(ShowBagWindow(6, 3), FONT_NORMAL, gStringVar4, 0, 2, 1, 0, 0, 1);
|
||||
gTasks[taskId].func = Task_WaitAB_RedrawAndReturnToBag;
|
||||
}
|
||||
|
||||
@@ -1610,9 +1610,9 @@ static void Task_ItemMenuAction_Give(u8 taskId)
|
||||
PutWindowTilemap(0);
|
||||
PutWindowTilemap(1);
|
||||
CopyWindowToVram(0, COPYWIN_MAP);
|
||||
if (!CanWriteMailHere(itemId))
|
||||
DisplayItemMessageInBag(taskId, FONT_2, gText_CantWriteMailHere, Task_WaitAButtonAndCloseContextMenu);
|
||||
else if (!itemid_is_unique(itemId))
|
||||
if (!IsWritingMailAllowed(itemId))
|
||||
DisplayItemMessageInBag(taskId, FONT_NORMAL, gText_CantWriteMailHere, Task_WaitAButtonAndCloseContextMenu);
|
||||
else if (ItemId_GetImportance(itemId) == 0)
|
||||
{
|
||||
if (CalculatePlayerPartyCount() == 0)
|
||||
{
|
||||
@@ -1630,14 +1630,14 @@ static void Task_ItemMenuAction_Give(u8 taskId)
|
||||
|
||||
static void Task_PrintThereIsNoPokemon(u8 taskId)
|
||||
{
|
||||
DisplayItemMessageInBag(taskId, FONT_2, gText_ThereIsNoPokemon, Task_WaitAButtonAndCloseContextMenu);
|
||||
DisplayItemMessageInBag(taskId, FONT_NORMAL, gText_ThereIsNoPokemon, Task_WaitAButtonAndCloseContextMenu);
|
||||
}
|
||||
|
||||
static void Task_PrintItemCantBeHeld(u8 taskId)
|
||||
{
|
||||
CopyItemName(gSpecialVar_ItemId, gStringVar1);
|
||||
StringExpandPlaceholders(gStringVar4, gText_ItemCantBeHeld);
|
||||
DisplayItemMessageInBag(taskId, FONT_2, gStringVar4, Task_WaitAButtonAndCloseContextMenu);
|
||||
DisplayItemMessageInBag(taskId, FONT_NORMAL, gStringVar4, Task_WaitAButtonAndCloseContextMenu);
|
||||
}
|
||||
|
||||
static void Task_WaitAButtonAndCloseContextMenu(u8 taskId)
|
||||
@@ -1704,9 +1704,9 @@ static void Task_ItemContext_FieldGive(u8 taskId)
|
||||
{
|
||||
s16 *data = gTasks[taskId].data;
|
||||
u16 itemId = BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1]);
|
||||
if (!CanWriteMailHere(itemId))
|
||||
if (!IsWritingMailAllowed(itemId))
|
||||
{
|
||||
DisplayItemMessageInBag(taskId, FONT_2, gText_CantWriteMailHere, Task_WaitAButtonAndCloseContextMenu);
|
||||
DisplayItemMessageInBag(taskId, FONT_NORMAL, gText_CantWriteMailHere, Task_WaitAButtonAndCloseContextMenu);
|
||||
}
|
||||
else if (itemId == ITEM_TM_CASE)
|
||||
{
|
||||
@@ -1718,7 +1718,7 @@ static void Task_ItemContext_FieldGive(u8 taskId)
|
||||
ItemMenu_SetExitCallback(GoToBerryPouch_Give);
|
||||
ItemMenu_StartFadeToExitCallback(taskId);
|
||||
}
|
||||
else if (gBagMenuState.pocket != POCKET_KEY_ITEMS - 1 && !itemid_is_unique(itemId))
|
||||
else if (gBagMenuState.pocket != POCKET_KEY_ITEMS - 1 && ItemId_GetImportance(itemId) == 0)
|
||||
{
|
||||
Bag_BeginCloseWin0Animation();
|
||||
gTasks[taskId].func = ItemMenu_StartFadeToExitCallback;
|
||||
@@ -1731,7 +1731,7 @@ static void Task_ItemContext_FieldGive(u8 taskId)
|
||||
|
||||
static void GoToTMCase_Give(void)
|
||||
{
|
||||
InitTMCase(TMCASE_FROMPARTYGIVE, ReturnToBagMenuFromSubmenu_Give, FALSE);
|
||||
InitTMCase(TMCASE_GIVE_PARTY, ReturnToBagMenuFromSubmenu_Give, FALSE);
|
||||
}
|
||||
|
||||
static void GoToBerryPouch_Give(void)
|
||||
@@ -1750,7 +1750,7 @@ static void Task_ItemContext_PcBoxGive(u8 taskId)
|
||||
u16 itemId = BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1]);
|
||||
if (ItemIsMail(itemId) == TRUE)
|
||||
{
|
||||
DisplayItemMessageInBag(taskId, FONT_2, gText_CantWriteMailHere, Task_WaitAButtonAndCloseContextMenu);
|
||||
DisplayItemMessageInBag(taskId, FONT_NORMAL, gText_CantWriteMailHere, Task_WaitAButtonAndCloseContextMenu);
|
||||
}
|
||||
else if (itemId == ITEM_TM_CASE)
|
||||
{
|
||||
@@ -1762,7 +1762,7 @@ static void Task_ItemContext_PcBoxGive(u8 taskId)
|
||||
ItemMenu_SetExitCallback(GoToBerryPouch_PCBox);
|
||||
ItemMenu_StartFadeToExitCallback(taskId);
|
||||
}
|
||||
else if (gBagMenuState.pocket != POCKET_KEY_ITEMS - 1 && !itemid_is_unique(itemId))
|
||||
else if (gBagMenuState.pocket != POCKET_KEY_ITEMS - 1 && ItemId_GetImportance(itemId) == 0)
|
||||
{
|
||||
Bag_BeginCloseWin0Animation();
|
||||
gTasks[taskId].func = ItemMenu_StartFadeToExitCallback;
|
||||
@@ -1775,7 +1775,7 @@ static void Task_ItemContext_PcBoxGive(u8 taskId)
|
||||
|
||||
static void GoToTMCase_PCBox(void)
|
||||
{
|
||||
InitTMCase(TMCASE_FROMPOKEMONSTORAGEPC, ReturnToBagMenuFromSubmenu_PCBox, FALSE);
|
||||
InitTMCase(TMCASE_GIVE_PC, ReturnToBagMenuFromSubmenu_PCBox, FALSE);
|
||||
}
|
||||
|
||||
static void GoToBerryPouch_PCBox(void)
|
||||
@@ -1801,7 +1801,7 @@ static void Task_ItemContext_Sell(u8 taskId)
|
||||
ItemMenu_SetExitCallback(GoToBerryPouch_Sell);
|
||||
ItemMenu_StartFadeToExitCallback(taskId);
|
||||
}
|
||||
else if (itemid_get_market_price(gSpecialVar_ItemId) == 0)
|
||||
else if (ItemId_GetPrice(gSpecialVar_ItemId) == 0)
|
||||
{
|
||||
CopyItemName(gSpecialVar_ItemId, gStringVar1);
|
||||
StringExpandPlaceholders(gStringVar4, gText_OhNoICantBuyThat);
|
||||
@@ -1828,7 +1828,7 @@ static void Task_ItemContext_Sell(u8 taskId)
|
||||
|
||||
static void GoToTMCase_Sell(void)
|
||||
{
|
||||
InitTMCase(TMCASE_FROMMARTSELL, ReturnToBagMenuFromSubmenu_Sell, FALSE);
|
||||
InitTMCase(TMCASE_SELL, ReturnToBagMenuFromSubmenu_Sell, FALSE);
|
||||
}
|
||||
|
||||
static void GoToBerryPouch_Sell(void)
|
||||
@@ -1844,7 +1844,7 @@ static void ReturnToBagMenuFromSubmenu_Sell(void)
|
||||
static void Task_PrintSaleConfirmationText(u8 taskId)
|
||||
{
|
||||
s16 *data = gTasks[taskId].data;
|
||||
ConvertIntToDecimalStringN(gStringVar3, itemid_get_market_price(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6);
|
||||
ConvertIntToDecimalStringN(gStringVar3, ItemId_GetPrice(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6);
|
||||
StringExpandPlaceholders(gStringVar4, gText_ICanPayThisMuch_WouldThatBeOkay);
|
||||
DisplayItemMessageInBag(taskId, GetDialogBoxFontId(), gStringVar4, Task_ShowSellYesNoMenu);
|
||||
}
|
||||
@@ -1873,8 +1873,8 @@ static void Task_InitSaleQuantitySelectInterface(u8 taskId)
|
||||
u8 r4 = ShowBagWindow(0, 1);
|
||||
ConvertIntToDecimalStringN(gStringVar1, 1, STR_CONV_MODE_LEADING_ZEROS, 2);
|
||||
StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1);
|
||||
BagPrintTextOnWindow(r4, FONT_0, gStringVar4, 4, 10, 1, 0, 0xFF, 1);
|
||||
UpdateSalePriceDisplay(itemid_get_market_price(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1])) / 2 * data[8]);
|
||||
BagPrintTextOnWindow(r4, FONT_SMALL, gStringVar4, 4, 10, 1, 0, 0xFF, 1);
|
||||
UpdateSalePriceDisplay(ItemId_GetPrice(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1])) / 2 * data[8]);
|
||||
BagPrintMoneyAmount();
|
||||
CreatePocketScrollArrowPair_SellQuantity();
|
||||
gTasks[taskId].func = Task_SelectQuantityToSell;
|
||||
@@ -1891,7 +1891,7 @@ static void Task_SelectQuantityToSell(u8 taskId)
|
||||
if (AdjustQuantityAccordingToDPadInput(&data[8], data[2]) == TRUE)
|
||||
{
|
||||
UpdateQuantityToTossOrDeposit(data[8], 2);
|
||||
UpdateSalePriceDisplay(itemid_get_market_price(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1])) / 2 * data[8]);
|
||||
UpdateSalePriceDisplay(ItemId_GetPrice(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1])) / 2 * data[8]);
|
||||
}
|
||||
else if (JOY_NEW(A_BUTTON))
|
||||
{
|
||||
@@ -1924,9 +1924,9 @@ static void Task_SellItem_Yes(u8 taskId)
|
||||
PutWindowTilemap(0);
|
||||
ScheduleBgCopyTilemapToVram(0);
|
||||
CopyItemName(gSpecialVar_ItemId, gStringVar1);
|
||||
ConvertIntToDecimalStringN(gStringVar3, itemid_get_market_price(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6);
|
||||
ConvertIntToDecimalStringN(gStringVar3, ItemId_GetPrice(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6);
|
||||
StringExpandPlaceholders(gStringVar4, gText_TurnedOverItemsWorthYen);
|
||||
DisplayItemMessageInBag(taskId, FONT_2, gStringVar4, Task_FinalizeSaleToShop);
|
||||
DisplayItemMessageInBag(taskId, FONT_NORMAL, gStringVar4, Task_FinalizeSaleToShop);
|
||||
}
|
||||
|
||||
static void Task_FinalizeSaleToShop(u8 taskId)
|
||||
@@ -1934,7 +1934,7 @@ static void Task_FinalizeSaleToShop(u8 taskId)
|
||||
s16 *data = gTasks[taskId].data;
|
||||
PlaySE(SE_SHOP);
|
||||
RemoveBagItem(gSpecialVar_ItemId, data[8]);
|
||||
AddMoney(&gSaveBlock1Ptr->money, itemid_get_market_price(gSpecialVar_ItemId) / 2 * data[8]);
|
||||
AddMoney(&gSaveBlock1Ptr->money, ItemId_GetPrice(gSpecialVar_ItemId) / 2 * data[8]);
|
||||
RecordItemTransaction(gSpecialVar_ItemId, data[8], QL_EVENT_SOLD_ITEM - QL_EVENT_USED_POKEMART);
|
||||
DestroyListMenuTask(data[0], &gBagMenuState.cursorPos[gBagMenuState.pocket], &gBagMenuState.itemsAbove[gBagMenuState.pocket]);
|
||||
Pocket_CalculateNItemsAndMaxShowed(gBagMenuState.pocket);
|
||||
@@ -2014,12 +2014,12 @@ static void Task_TryDoItemDeposit(u8 taskId)
|
||||
CopyItemName(gSpecialVar_ItemId, gStringVar1);
|
||||
ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3);
|
||||
StringExpandPlaceholders(gStringVar4, gText_DepositedStrVar2StrVar1s);
|
||||
BagPrintTextOnWindow(ShowBagWindow(6, 3), FONT_2, gStringVar4, 0, 2, 1, 0, 0, 1);
|
||||
BagPrintTextOnWindow(ShowBagWindow(6, 3), FONT_NORMAL, gStringVar4, 0, 2, 1, 0, 0, 1);
|
||||
gTasks[taskId].func = Task_WaitAB_RedrawAndReturnToBag;
|
||||
}
|
||||
else
|
||||
{
|
||||
DisplayItemMessageInBag(taskId, FONT_2, gText_NoRoomToStoreItems, Task_WaitAButtonAndCloseContextMenu);
|
||||
DisplayItemMessageInBag(taskId, FONT_NORMAL, gText_NoRoomToStoreItems, Task_WaitAButtonAndCloseContextMenu);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+23
-23
@@ -259,7 +259,7 @@ static void ItemPc_RunSetup(void)
|
||||
{
|
||||
if (ItemPc_DoGfxSetup() == TRUE)
|
||||
break;
|
||||
if (MenuHelpers_LinkSomething() == TRUE)
|
||||
if (MenuHelpers_IsLinkActive() == TRUE)
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -379,7 +379,7 @@ static bool8 ItemPc_DoGfxSetup(void)
|
||||
gMain.state++;
|
||||
break;
|
||||
case 20:
|
||||
if (MenuHelpers_CallLinkSomething() != TRUE)
|
||||
if (IsActiveOverworldLinkBusy() != TRUE)
|
||||
gMain.state++;
|
||||
break;
|
||||
default:
|
||||
@@ -498,7 +498,7 @@ static void ItemPc_BuildListMenuTemplate(void)
|
||||
gMultiuseListMenuTemplate.itemVerticalPadding = 2;
|
||||
gMultiuseListMenuTemplate.upText_Y = 2;
|
||||
gMultiuseListMenuTemplate.maxShowed = sStateDataPtr->maxShowed;
|
||||
gMultiuseListMenuTemplate.fontId = FONT_2;
|
||||
gMultiuseListMenuTemplate.fontId = FONT_NORMAL;
|
||||
gMultiuseListMenuTemplate.cursorPal = 2;
|
||||
gMultiuseListMenuTemplate.fillValue = 0;
|
||||
gMultiuseListMenuTemplate.cursorShadowPal = 3;
|
||||
@@ -534,7 +534,7 @@ static void ItemPc_MoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu *
|
||||
}
|
||||
sStateDataPtr->itemMenuIconSlot ^= 1;
|
||||
FillWindowPixelBuffer(1, 0);
|
||||
ItemPc_AddTextPrinterParameterized(1, FONT_2, desc, 0, 3, 2, 0, 0, 3);
|
||||
ItemPc_AddTextPrinterParameterized(1, FONT_NORMAL, desc, 0, 3, 2, 0, 0, 3);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -552,7 +552,7 @@ static void ItemPc_ItemPrintFunc(u8 windowId, u32 itemId, u8 y)
|
||||
u16 quantity = ItemPc_GetItemQuantityBySlotId(itemId);
|
||||
ConvertIntToDecimalStringN(gStringVar1, quantity, STR_CONV_MODE_RIGHT_ALIGN, 3);
|
||||
StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1);
|
||||
ItemPc_AddTextPrinterParameterized(windowId, FONT_0, gStringVar4, 110, y, 0, 0, 0xFF, 1);
|
||||
ItemPc_AddTextPrinterParameterized(windowId, FONT_SMALL, gStringVar4, 110, y, 0, 0, 0xFF, 1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -565,19 +565,19 @@ static void ItemPc_PrintOrRemoveCursorAt(u8 y, u8 colorIdx)
|
||||
{
|
||||
if (colorIdx == 0xFF)
|
||||
{
|
||||
u8 maxWidth = GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_WIDTH);
|
||||
u8 maxHeight = GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT);
|
||||
u8 maxWidth = GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_WIDTH);
|
||||
u8 maxHeight = GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT);
|
||||
FillWindowPixelRect(0, 0, 0, y, maxWidth, maxHeight);
|
||||
}
|
||||
else
|
||||
{
|
||||
ItemPc_AddTextPrinterParameterized(0, FONT_2, gText_SelectorArrow2, 0, y, 0, 0, 0, colorIdx);
|
||||
ItemPc_AddTextPrinterParameterized(0, FONT_NORMAL, gText_SelectorArrow2, 0, y, 0, 0, 0, colorIdx);
|
||||
}
|
||||
}
|
||||
|
||||
static void ItemPc_PrintWithdrawItem(void)
|
||||
{
|
||||
ItemPc_AddTextPrinterParameterized(2, FONT_0, gText_WithdrawItem, 0, 1, 0, 1, 0, 0);
|
||||
ItemPc_AddTextPrinterParameterized(2, FONT_SMALL, gText_WithdrawItem, 0, 1, 0, 1, 0, 0);
|
||||
}
|
||||
|
||||
static void ItemPc_PlaceTopMenuScrollIndicatorArrows(void)
|
||||
@@ -773,7 +773,7 @@ static void ItemPc_MoveItemModeInit(u8 taskId, s16 pos)
|
||||
StringCopy(gStringVar1, ItemId_GetName(ItemPc_GetItemIdBySlotId(data[1])));
|
||||
StringExpandPlaceholders(gStringVar4, gOtherText_WhereShouldTheStrVar1BePlaced);
|
||||
FillWindowPixelBuffer(1, 0x00);
|
||||
ItemPc_AddTextPrinterParameterized(1, FONT_2, gStringVar4, 0, 3, 2, 3, 0, 0);
|
||||
ItemPc_AddTextPrinterParameterized(1, FONT_NORMAL, gStringVar4, 0, 3, 2, 3, 0, 0);
|
||||
UpdateSwapLinePos(-32, ListMenuGetYCoordForPrintingArrowCursor(data[0]));
|
||||
SetSwapLineInvisibility(FALSE);
|
||||
ItemPc_PrintOrRemoveCursor(data[0], 2);
|
||||
@@ -839,11 +839,11 @@ static void Task_ItemPcSubmenuInit(u8 taskId)
|
||||
|
||||
ItemPc_SetBorderStyleOnWindow(4);
|
||||
windowId = ItemPc_GetOrCreateSubwindow(0);
|
||||
PrintTextArray(4, FONT_2, 8, 2, GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT) + 2, 3, sItemPcSubmenuOptions);
|
||||
Menu_InitCursor(4, FONT_2, 0, 2, GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT) + 2, 3, 0);
|
||||
PrintTextArray(4, FONT_NORMAL, 8, 2, GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT) + 2, 3, sItemPcSubmenuOptions);
|
||||
Menu_InitCursor(4, FONT_NORMAL, 0, 2, GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT) + 2, 3, 0);
|
||||
CopyItemName(ItemPc_GetItemIdBySlotId(data[1]), gStringVar1);
|
||||
StringExpandPlaceholders(gStringVar4, gText_Var1IsSelected);
|
||||
ItemPc_AddTextPrinterParameterized(windowId, FONT_2, gStringVar4, 0, 2, 1, 0, 0, 1);
|
||||
ItemPc_AddTextPrinterParameterized(windowId, FONT_NORMAL, gStringVar4, 0, 2, 1, 0, 0, 1);
|
||||
ScheduleBgCopyTilemapToVram(0);
|
||||
gTasks[taskId].func = Task_ItemPcSubmenuRun;
|
||||
}
|
||||
@@ -901,13 +901,13 @@ static void ItemPc_DoWithdraw(u8 taskId)
|
||||
ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3);
|
||||
StringExpandPlaceholders(gStringVar4, gText_WithdrewQuantItem);
|
||||
windowId = ItemPc_GetOrCreateSubwindow(2);
|
||||
AddTextPrinterParameterized(windowId, FONT_2, gStringVar4, 0, 2, 0, NULL);
|
||||
AddTextPrinterParameterized(windowId, FONT_NORMAL, gStringVar4, 0, 2, 0, NULL);
|
||||
gTasks[taskId].func = Task_ItemPcWaitButtonAndFinishWithdrawMultiple;
|
||||
}
|
||||
else
|
||||
{
|
||||
windowId = ItemPc_GetOrCreateSubwindow(2);
|
||||
AddTextPrinterParameterized(windowId, FONT_2, gText_NoMoreRoomInBag, 0, 2, 0, NULL);
|
||||
AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_NoMoreRoomInBag, 0, 2, 0, NULL);
|
||||
gTasks[taskId].func = Task_ItemPcWaitButtonWithdrawMultipleFailed;
|
||||
}
|
||||
}
|
||||
@@ -957,11 +957,11 @@ static void ItemPc_WithdrawMultipleInitWindow(u16 slotId)
|
||||
|
||||
CopyItemName(itemId, gStringVar1);
|
||||
StringExpandPlaceholders(gStringVar4, gText_WithdrawHowMany);
|
||||
AddTextPrinterParameterized(ItemPc_GetOrCreateSubwindow(1), FONT_2, gStringVar4, 0, 2, 0, NULL);
|
||||
AddTextPrinterParameterized(ItemPc_GetOrCreateSubwindow(1), FONT_NORMAL, gStringVar4, 0, 2, 0, NULL);
|
||||
ConvertIntToDecimalStringN(gStringVar1, 1, STR_CONV_MODE_LEADING_ZEROS, 3);
|
||||
StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1);
|
||||
ItemPc_SetBorderStyleOnWindow(3);
|
||||
ItemPc_AddTextPrinterParameterized(3, FONT_0, gStringVar4, 8, 10, 1, 0, 0, 1);
|
||||
ItemPc_AddTextPrinterParameterized(3, FONT_SMALL, gStringVar4, 8, 10, 1, 0, 0, 1);
|
||||
ScheduleBgCopyTilemapToVram(0);
|
||||
}
|
||||
|
||||
@@ -970,7 +970,7 @@ static void UpdateWithdrawQuantityDisplay(s16 quantity)
|
||||
FillWindowPixelRect(3, PIXEL_FILL(1), 10, 10, 28, 12);
|
||||
ConvertIntToDecimalStringN(gStringVar1, quantity, STR_CONV_MODE_LEADING_ZEROS, 3);
|
||||
StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1);
|
||||
ItemPc_AddTextPrinterParameterized(3, FONT_0, gStringVar4, 8, 10, 1, 0, 0, 1);
|
||||
ItemPc_AddTextPrinterParameterized(3, FONT_SMALL, gStringVar4, 8, 10, 1, 0, 0, 1);
|
||||
}
|
||||
|
||||
static void Task_ItemPcHandleWithdrawMultiple(u8 taskId)
|
||||
@@ -1090,7 +1090,7 @@ static void unused_ItemPc_AddTextPrinterParameterized(u8 windowId, const u8 * st
|
||||
|
||||
template.currentChar = string;
|
||||
template.windowId = windowId;
|
||||
template.fontId = FONT_3;
|
||||
template.fontId = FONT_NORMAL_COPY_2;
|
||||
template.x = x;
|
||||
template.y = y;
|
||||
template.currentX = x;
|
||||
@@ -1098,9 +1098,9 @@ static void unused_ItemPc_AddTextPrinterParameterized(u8 windowId, const u8 * st
|
||||
template.fgColor = 2;
|
||||
template.bgColor = 0;
|
||||
template.shadowColor = 3;
|
||||
template.unk = GetFontAttribute(FONT_3, FONTATTR_UNKNOWN);
|
||||
template.letterSpacing = letterSpacing + GetFontAttribute(FONT_3, FONTATTR_LETTER_SPACING);
|
||||
template.lineSpacing = lineSpacing + GetFontAttribute(FONT_3, FONTATTR_LINE_SPACING);
|
||||
template.unk = GetFontAttribute(FONT_NORMAL_COPY_2, FONTATTR_UNKNOWN);
|
||||
template.letterSpacing = letterSpacing + GetFontAttribute(FONT_NORMAL_COPY_2, FONTATTR_LETTER_SPACING);
|
||||
template.lineSpacing = lineSpacing + GetFontAttribute(FONT_NORMAL_COPY_2, FONTATTR_LINE_SPACING);
|
||||
AddTextPrinter(&template, speed, NULL);
|
||||
}
|
||||
|
||||
@@ -1140,6 +1140,6 @@ static u8 ItemPc_GetSubwindow(u8 idx)
|
||||
|
||||
static void ItemPc_PrintOnWindow5WithContinueTask(u8 taskId, const u8 * str, TaskFunc taskFunc)
|
||||
{
|
||||
DisplayMessageAndContinueTask(taskId, 5, 0x3AC, 0x0B, FONT_2, GetTextSpeedSetting(), str, taskFunc);
|
||||
DisplayMessageAndContinueTask(taskId, 5, 0x3AC, 0x0B, FONT_NORMAL, GetTextSpeedSetting(), str, taskFunc);
|
||||
ScheduleBgCopyTilemapToVram(0);
|
||||
}
|
||||
|
||||
+23
-23
@@ -190,7 +190,7 @@ static void DisplayItemMessageInCurrentContext(u8 taskId, bool8 inField, u8 font
|
||||
|
||||
static void PrintNotTheTimeToUseThat(u8 taskId, bool8 inField)
|
||||
{
|
||||
DisplayItemMessageInCurrentContext(taskId, inField, FONT_4, gText_OakForbidsUseOfItemHere);
|
||||
DisplayItemMessageInCurrentContext(taskId, inField, FONT_MALE, gText_OakForbidsUseOfItemHere);
|
||||
}
|
||||
|
||||
static void Task_ItemUse_CloseMessageBoxAndReturnToField(u8 taskId)
|
||||
@@ -263,7 +263,7 @@ void FieldUseFunc_Bike(u8 taskId)
|
||||
|| MetatileBehavior_IsHorizontalRail(behavior) == TRUE
|
||||
|| MetatileBehavior_IsIsolatedVerticalRail(behavior) == TRUE
|
||||
|| MetatileBehavior_IsIsolatedHorizontalRail(behavior) == TRUE)
|
||||
DisplayItemMessageInCurrentContext(taskId, gTasks[taskId].data[3], FONT_2, gText_CantDismountBike);
|
||||
DisplayItemMessageInCurrentContext(taskId, gTasks[taskId].data[3], FONT_NORMAL, gText_CantDismountBike);
|
||||
else if (Overworld_IsBikingAllowed() == TRUE && !IsBikingDisallowedByPlayer())
|
||||
{
|
||||
sItemUseOnFieldCB = ItemUseOnFieldCB_Bicycle;
|
||||
@@ -340,9 +340,9 @@ void FieldUseFunc_CoinCase(u8 taskId)
|
||||
StringExpandPlaceholders(gStringVar4, gText_CoinCase);
|
||||
ItemUse_SetQuestLogEvent(QL_EVENT_USED_ITEM, NULL, gSpecialVar_ItemId, 0xFFFF);
|
||||
if (gTasks[taskId].data[3] == 0)
|
||||
DisplayItemMessageInBag(taskId, FONT_2, gStringVar4, Task_ReturnToBagFromContextMenu);
|
||||
DisplayItemMessageInBag(taskId, FONT_NORMAL, gStringVar4, Task_ReturnToBagFromContextMenu);
|
||||
else
|
||||
DisplayItemMessageOnField(taskId, FONT_2, gStringVar4, Task_ItemUse_CloseMessageBoxAndReturnToField);
|
||||
DisplayItemMessageOnField(taskId, FONT_NORMAL, gStringVar4, Task_ItemUse_CloseMessageBoxAndReturnToField);
|
||||
}
|
||||
|
||||
void FieldUseFunc_PowderJar(u8 taskId)
|
||||
@@ -351,9 +351,9 @@ void FieldUseFunc_PowderJar(u8 taskId)
|
||||
StringExpandPlaceholders(gStringVar4, gText_PowderQty);
|
||||
ItemUse_SetQuestLogEvent(QL_EVENT_USED_ITEM, NULL, gSpecialVar_ItemId, 0xFFFF);
|
||||
if (gTasks[taskId].data[3] == 0)
|
||||
DisplayItemMessageInBag(taskId, FONT_2, gStringVar4, Task_ReturnToBagFromContextMenu);
|
||||
DisplayItemMessageInBag(taskId, FONT_NORMAL, gStringVar4, Task_ReturnToBagFromContextMenu);
|
||||
else
|
||||
DisplayItemMessageOnField(taskId, FONT_2, gStringVar4, Task_ItemUse_CloseMessageBoxAndReturnToField);
|
||||
DisplayItemMessageOnField(taskId, FONT_NORMAL, gStringVar4, Task_ItemUse_CloseMessageBoxAndReturnToField);
|
||||
}
|
||||
|
||||
void FieldUseFunc_PokeFlute(u8 taskId)
|
||||
@@ -371,16 +371,16 @@ void FieldUseFunc_PokeFlute(u8 taskId)
|
||||
{
|
||||
ItemUse_SetQuestLogEvent(QL_EVENT_USED_ITEM, NULL, gSpecialVar_ItemId, 0xFFFF);
|
||||
if (gTasks[taskId].data[3] == 0)
|
||||
DisplayItemMessageInBag(taskId, FONT_2, gText_PlayedPokeFlute, Task_PlayPokeFlute);
|
||||
DisplayItemMessageInBag(taskId, FONT_NORMAL, gText_PlayedPokeFlute, Task_PlayPokeFlute);
|
||||
else
|
||||
DisplayItemMessageOnField(taskId, FONT_2, gText_PlayedPokeFlute, Task_PlayPokeFlute);
|
||||
DisplayItemMessageOnField(taskId, FONT_NORMAL, gText_PlayedPokeFlute, Task_PlayPokeFlute);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gTasks[taskId].data[3] == 0)
|
||||
DisplayItemMessageInBag(taskId, FONT_2, gText_PlayedPokeFluteCatchy, Task_ReturnToBagFromContextMenu);
|
||||
DisplayItemMessageInBag(taskId, FONT_NORMAL, gText_PlayedPokeFluteCatchy, Task_ReturnToBagFromContextMenu);
|
||||
else
|
||||
DisplayItemMessageOnField(taskId, FONT_2, gText_PlayedPokeFluteCatchy, Task_ItemUse_CloseMessageBoxAndReturnToField);
|
||||
DisplayItemMessageOnField(taskId, FONT_NORMAL, gText_PlayedPokeFluteCatchy, Task_ItemUse_CloseMessageBoxAndReturnToField);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -395,9 +395,9 @@ static void Task_DisplayPokeFluteMessage(u8 taskId)
|
||||
if (WaitFanfare(FALSE))
|
||||
{
|
||||
if (gTasks[taskId].data[3] == 0)
|
||||
DisplayItemMessageInBag(taskId, FONT_2, gText_PokeFluteAwakenedMon, Task_ReturnToBagFromContextMenu);
|
||||
DisplayItemMessageInBag(taskId, FONT_NORMAL, gText_PokeFluteAwakenedMon, Task_ReturnToBagFromContextMenu);
|
||||
else
|
||||
DisplayItemMessageOnField(taskId, FONT_2, gText_PokeFluteAwakenedMon, Task_ItemUse_CloseMessageBoxAndReturnToField);
|
||||
DisplayItemMessageOnField(taskId, FONT_NORMAL, gText_PokeFluteAwakenedMon, Task_ItemUse_CloseMessageBoxAndReturnToField);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -459,7 +459,7 @@ void FieldUseFunc_TmCase(u8 taskId)
|
||||
|
||||
static void InitTMCaseFromBag(void)
|
||||
{
|
||||
InitTMCase(0, CB2_BagMenuFromStartMenu, 0);
|
||||
InitTMCase(TMCASE_FIELD, CB2_BagMenuFromStartMenu, FALSE);
|
||||
}
|
||||
|
||||
static void Task_InitTMCaseFromField(u8 taskId)
|
||||
@@ -468,7 +468,7 @@ static void Task_InitTMCaseFromField(u8 taskId)
|
||||
{
|
||||
CleanupOverworldWindowsAndTilemaps();
|
||||
SetFieldCallback2ForItemUse();
|
||||
InitTMCase(0, CB2_ReturnToField, 1);
|
||||
InitTMCase(TMCASE_FIELD, CB2_ReturnToField, TRUE);
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
}
|
||||
@@ -556,7 +556,7 @@ void FieldUseFunc_Repel(u8 taskId)
|
||||
}
|
||||
else
|
||||
// An earlier repel is still in effect
|
||||
DisplayItemMessageInBag(taskId, FONT_2, gText_RepelEffectsLingered, Task_ReturnToBagFromContextMenu);
|
||||
DisplayItemMessageInBag(taskId, FONT_NORMAL, gText_RepelEffectsLingered, Task_ReturnToBagFromContextMenu);
|
||||
}
|
||||
|
||||
static void Task_UseRepel(u8 taskId)
|
||||
@@ -566,7 +566,7 @@ static void Task_UseRepel(u8 taskId)
|
||||
ItemUse_SetQuestLogEvent(QL_EVENT_USED_ITEM, NULL, gSpecialVar_ItemId, 0xFFFF);
|
||||
VarSet(VAR_REPEL_STEP_COUNT, ItemId_GetHoldEffectParam(gSpecialVar_ItemId));
|
||||
RemoveUsedItem();
|
||||
DisplayItemMessageInBag(taskId, FONT_2, gStringVar4, Task_ReturnToBagFromContextMenu);
|
||||
DisplayItemMessageInBag(taskId, FONT_NORMAL, gStringVar4, Task_ReturnToBagFromContextMenu);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -607,7 +607,7 @@ static void Task_UsedBlackWhiteFlute(u8 taskId)
|
||||
if (++gTasks[taskId].data[8] > 7)
|
||||
{
|
||||
PlaySE(SE_GLASS_FLUTE);
|
||||
DisplayItemMessageInBag(taskId, FONT_2, gStringVar4, Task_ReturnToBagFromContextMenu);
|
||||
DisplayItemMessageInBag(taskId, FONT_NORMAL, gStringVar4, Task_ReturnToBagFromContextMenu);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -636,7 +636,7 @@ static void ItemUseOnFieldCB_EscapeRope(u8 taskId)
|
||||
Overworld_ResetStateAfterDigEscRope();
|
||||
RemoveUsedItem();
|
||||
gTasks[taskId].data[0] = 0;
|
||||
DisplayItemMessageOnField(taskId, FONT_2, gStringVar4, Task_UseDigEscapeRopeOnField);
|
||||
DisplayItemMessageOnField(taskId, FONT_NORMAL, gStringVar4, Task_UseDigEscapeRopeOnField);
|
||||
}
|
||||
|
||||
void Task_UseDigEscapeRopeOnField(u8 taskId)
|
||||
@@ -743,7 +743,7 @@ void BattleUseFunc_PokeBallEtc(u8 taskId)
|
||||
ItemMenu_StartFadeToExitCallback(taskId);
|
||||
}
|
||||
else
|
||||
DisplayItemMessageInBag(taskId, FONT_2, gText_BoxFull, Task_ReturnToBagFromContextMenu);
|
||||
DisplayItemMessageInBag(taskId, FONT_NORMAL, gText_BoxFull, Task_ReturnToBagFromContextMenu);
|
||||
}
|
||||
|
||||
void BattleUseFunc_PokeFlute(u8 taskId)
|
||||
@@ -755,7 +755,7 @@ void BattleUseFunc_PokeFlute(u8 taskId)
|
||||
void BattleUseFunc_StatBooster(u8 taskId)
|
||||
{
|
||||
if (ExecuteTableBasedItemEffect(&gPlayerParty[gBattlerPartyIndexes[gBattlerInMenuId]], gSpecialVar_ItemId, gBattlerPartyIndexes[gBattlerInMenuId], 0))
|
||||
DisplayItemMessageInBag(taskId, FONT_2, gText_WontHaveEffect, Task_ReturnToBagFromContextMenu);
|
||||
DisplayItemMessageInBag(taskId, FONT_NORMAL, gText_WontHaveEffect, Task_ReturnToBagFromContextMenu);
|
||||
else
|
||||
{
|
||||
gTasks[taskId].data[8] = 0;
|
||||
@@ -772,7 +772,7 @@ static void Task_BattleUse_StatBooster_DelayAndPrint(u8 taskId)
|
||||
u16 itemId = gSpecialVar_ItemId;
|
||||
PlaySE(SE_USE_ITEM);
|
||||
RemoveBagItem(itemId, 1);
|
||||
DisplayItemMessageInBag(taskId, FONT_2, Battle_PrintStatBoosterEffectMessage(itemId), Task_BattleUse_StatBooster_WaitButton_ReturnToBattle);
|
||||
DisplayItemMessageInBag(taskId, FONT_NORMAL, Battle_PrintStatBoosterEffectMessage(itemId), Task_BattleUse_StatBooster_WaitButton_ReturnToBattle);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -824,7 +824,7 @@ void BattleUseFunc_PokeDoll(u8 taskId)
|
||||
{
|
||||
RemoveUsedItem();
|
||||
ItemUse_SetQuestLogEvent(QL_EVENT_USED_ITEM, 0, gSpecialVar_ItemId, 0xFFFF);
|
||||
DisplayItemMessageInBag(taskId, FONT_2, gStringVar4, ItemMenu_StartFadeToExitCallback);
|
||||
DisplayItemMessageInBag(taskId, FONT_NORMAL, gStringVar4, ItemMenu_StartFadeToExitCallback);
|
||||
}
|
||||
else
|
||||
PrintNotTheTimeToUseThat(taskId, 0);
|
||||
@@ -904,7 +904,7 @@ void FieldUseFunc_OakStopsYou(u8 taskId)
|
||||
if (GetPocketByItemId(gSpecialVar_ItemId) == POCKET_BERRY_POUCH)
|
||||
{
|
||||
StringExpandPlaceholders(gStringVar4, gText_OakForbidsUseOfItemHere);
|
||||
DisplayItemMessageInBerryPouch(taskId, FONT_4, gStringVar4, Task_BerryPouch_DestroyDialogueWindowAndRefreshListMenu);
|
||||
DisplayItemMessageInBerryPouch(taskId, FONT_MALE, gStringVar4, Task_BerryPouch_DestroyDialogueWindowAndRefreshListMenu);
|
||||
}
|
||||
else
|
||||
PrintNotTheTimeToUseThat(taskId, gTasks[taskId].data[3]);
|
||||
|
||||
+3
-3
@@ -143,7 +143,7 @@ void ItemUseOnFieldCB_Itemfinder(u8 taskId)
|
||||
}
|
||||
else
|
||||
{
|
||||
DisplayItemMessageOnField(taskId, FONT_2, gText_NopeTheresNoResponse, Task_NoResponse_CleanUp);
|
||||
DisplayItemMessageOnField(taskId, FONT_NORMAL, gText_NopeTheresNoResponse, Task_NoResponse_CleanUp);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -479,7 +479,7 @@ static u8 GetPlayerDirectionTowardsHiddenItem(s16 itemX, s16 itemY)
|
||||
|
||||
static void Task_ItemfinderResponsePrintMessage(u8 taskId)
|
||||
{
|
||||
DisplayItemMessageOnField(taskId, FONT_2, gText_ItemfinderResponding, Task_ItemfinderResponseCleanUp);
|
||||
DisplayItemMessageOnField(taskId, FONT_NORMAL, gText_ItemfinderResponding, Task_ItemfinderResponseCleanUp);
|
||||
}
|
||||
|
||||
static void Task_ItemfinderResponseCleanUp(u8 taskId)
|
||||
@@ -493,7 +493,7 @@ static void Task_ItemfinderResponseCleanUp(u8 taskId)
|
||||
|
||||
static void Task_ItemfinderUnderfootPrintMessage(u8 taskId)
|
||||
{
|
||||
DisplayItemMessageOnField(taskId, FONT_2, gText_ItemfinderShakingWildly, Task_ItemfinderUnderfootDigUpItem);
|
||||
DisplayItemMessageOnField(taskId, FONT_NORMAL, gText_ItemfinderShakingWildly, Task_ItemfinderUnderfootDigUpItem);
|
||||
}
|
||||
|
||||
static void Task_ItemfinderUnderfootDigUpItem(u8 taskId)
|
||||
|
||||
+6
-6
@@ -353,7 +353,7 @@ static const struct ListMenuTemplate sMoveRelearnerListMenuTemplate = {
|
||||
.lettersSpacing = 1,
|
||||
.itemVerticalPadding = 0,
|
||||
.scrollMultiple = 0,
|
||||
.fontId = FONT_2,
|
||||
.fontId = FONT_NORMAL,
|
||||
.cursorKind = 0,
|
||||
};
|
||||
|
||||
@@ -506,7 +506,7 @@ static void MoveRelearnerStateMachine(void)
|
||||
MoveRelearnerMenuHandleInput();
|
||||
break;
|
||||
case MENU_STATE_PRINT_TEACH_MOVE_PROMPT:
|
||||
CreateYesNoMenu(&sMoveRelearnerYesNoMenuTemplate, FONT_3, 0, 2, 0x001, 0xE, 0);
|
||||
CreateYesNoMenu(&sMoveRelearnerYesNoMenuTemplate, FONT_NORMAL_COPY_2, 0, 2, 0x001, 0xE, 0);
|
||||
sMoveRelearner->state++;
|
||||
break;
|
||||
case MENU_STATE_TEACH_MOVE_CONFIRM :
|
||||
@@ -531,7 +531,7 @@ static void MoveRelearnerStateMachine(void)
|
||||
}
|
||||
break;
|
||||
case MENU_STATE_PRINT_GIVE_UP_PROMPT:
|
||||
CreateYesNoMenu(&sMoveRelearnerYesNoMenuTemplate, FONT_3, 0, 2, 0x001, 0xE, 0);
|
||||
CreateYesNoMenu(&sMoveRelearnerYesNoMenuTemplate, FONT_NORMAL_COPY_2, 0, 2, 0x001, 0xE, 0);
|
||||
sMoveRelearner->state++;
|
||||
break;
|
||||
case MENU_STATE_GIVE_UP_CONFIRM:
|
||||
@@ -552,7 +552,7 @@ static void MoveRelearnerStateMachine(void)
|
||||
sMoveRelearner->state++;
|
||||
break;
|
||||
case MENU_STATE_WAIT_FOR_TRYING_TO_LEARN:
|
||||
CreateYesNoMenu(&sMoveRelearnerYesNoMenuTemplate, FONT_3, 0, 2, 0x001, 0xE, 0);
|
||||
CreateYesNoMenu(&sMoveRelearnerYesNoMenuTemplate, FONT_NORMAL_COPY_2, 0, 2, 0x001, 0xE, 0);
|
||||
sMoveRelearner->state = 18;
|
||||
break;
|
||||
case MENU_STATE_CONFIRM_DELETE_OLD_MOVE:
|
||||
@@ -573,7 +573,7 @@ static void MoveRelearnerStateMachine(void)
|
||||
sMoveRelearner->state++;
|
||||
break;
|
||||
case MENU_STATE_WAIT_FOR_STOP_TEACHING:
|
||||
CreateYesNoMenu(&sMoveRelearnerYesNoMenuTemplate, FONT_3, 0, 2, 0x001, 0xE, 0);
|
||||
CreateYesNoMenu(&sMoveRelearnerYesNoMenuTemplate, FONT_NORMAL_COPY_2, 0, 2, 0x001, 0xE, 0);
|
||||
sMoveRelearner->state = 26;
|
||||
break;
|
||||
case MENU_STATE_CONFIRM_STOP_TEACHING:
|
||||
@@ -928,5 +928,5 @@ static void PrintTextOnWindow(u8 windowId, const u8 *str, u8 x, u8 y, s32 speed,
|
||||
}
|
||||
if (colorIdx != 1)
|
||||
FillWindowPixelBuffer(windowId, PIXEL_FILL(sMoveRelearner->textColor[0]));
|
||||
AddTextPrinterParameterized4(windowId, FONT_3, x, y, letterSpacing, lineSpacing, sMoveRelearner->textColor, speed, str);
|
||||
AddTextPrinterParameterized4(windowId, FONT_NORMAL_COPY_2, x, y, letterSpacing, lineSpacing, sMoveRelearner->textColor, speed, str);
|
||||
}
|
||||
|
||||
+315
-463
File diff suppressed because it is too large
Load Diff
+1149
-1061
File diff suppressed because it is too large
Load Diff
+163
-218
@@ -6,12 +6,35 @@
|
||||
#include "link_rfu.h"
|
||||
#include "random.h"
|
||||
|
||||
static EWRAM_DATA u8 gWirelessStatusIndicatorSpriteId = 0;
|
||||
enum {
|
||||
WIRELESS_STATUS_ANIM_3_BARS,
|
||||
WIRELESS_STATUS_ANIM_2_BARS,
|
||||
WIRELESS_STATUS_ANIM_1_BAR,
|
||||
WIRELESS_STATUS_ANIM_SEARCHING,
|
||||
WIRELESS_STATUS_ANIM_ERROR,
|
||||
};
|
||||
|
||||
static const u16 gWirelessLinkIconPalette[] = INCBIN_U16("graphics/interface/wireless_link_icon.gbapal");
|
||||
#define TAG_GFX_STATUS_INDICATOR 0xD431
|
||||
#define TAG_PAL_STATUS_INDICATOR 0xD432
|
||||
|
||||
static const u32 gWirelessLinkIconPic[] = INCBIN_U32("graphics/interface/wireless_link_icon.4bpp.lz");
|
||||
#define UNUSED_QUEUE_NUM_SLOTS 2
|
||||
#define UNUSED_QUEUE_SLOT_LENGTH 256
|
||||
|
||||
struct RfuUnusedQueue
|
||||
{
|
||||
u8 slots[UNUSED_QUEUE_NUM_SLOTS][UNUSED_QUEUE_SLOT_LENGTH];
|
||||
vu8 recvSlot;
|
||||
vu8 sendSlot;
|
||||
vu8 count;
|
||||
vu8 full;
|
||||
};
|
||||
|
||||
static EWRAM_DATA u8 sWirelessStatusIndicatorSpriteId = 0;
|
||||
|
||||
static const u16 sWirelessLinkIconPalette[] = INCBIN_U16("graphics/link/wireless_icon.gbapal");
|
||||
static const u32 sWirelessLinkIconPic[] = INCBIN_U32("graphics/link/wireless_icon.4bpp.lz");
|
||||
|
||||
// Most of the below two tables won't make sense with ASCII encoding.
|
||||
static const u8 sWireless_ASCIItoRSETable[] = {
|
||||
EOS,
|
||||
0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x37,
|
||||
@@ -197,7 +220,7 @@ static const u8 sWireless_RSEtoASCIITable[] = {
|
||||
[CHAR_y] = 'y',
|
||||
[CHAR_z] = 'z',
|
||||
0x20, 0x20, 0x2b, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
|
||||
[CHAR_DYNAMIC_PLACEHOLDER] = ' ',
|
||||
[CHAR_DYNAMIC] = ' ',
|
||||
[CHAR_KEYPAD_ICON] = ' ',
|
||||
[CHAR_EXTRA_SYMBOL] = ' ',
|
||||
[CHAR_PROMPT_SCROLL] = ' ',
|
||||
@@ -222,8 +245,7 @@ static const struct OamData sWirelessStatusIndicatorOamData =
|
||||
.paletteNum = 0,
|
||||
};
|
||||
|
||||
static const union AnimCmd sWirelessStatusIndicatorAnim0[] = {
|
||||
// 3 bars
|
||||
static const union AnimCmd sWirelessStatusIndicator_3Bars[] = {
|
||||
ANIMCMD_FRAME( 4, 5),
|
||||
ANIMCMD_FRAME( 8, 5),
|
||||
ANIMCMD_FRAME(12, 5),
|
||||
@@ -233,8 +255,7 @@ static const union AnimCmd sWirelessStatusIndicatorAnim0[] = {
|
||||
ANIMCMD_JUMP(0)
|
||||
};
|
||||
|
||||
static const union AnimCmd sWirelessStatusIndicatorAnim1[] = {
|
||||
// 2 bars
|
||||
static const union AnimCmd sWirelessStatusIndicator_2Bars[] = {
|
||||
ANIMCMD_FRAME( 4, 5),
|
||||
ANIMCMD_FRAME( 8, 5),
|
||||
ANIMCMD_FRAME(12, 10),
|
||||
@@ -242,46 +263,43 @@ static const union AnimCmd sWirelessStatusIndicatorAnim1[] = {
|
||||
ANIMCMD_JUMP(0)
|
||||
};
|
||||
|
||||
static const union AnimCmd sWirelessStatusIndicatorAnim2[] = {
|
||||
// 1 bar
|
||||
static const union AnimCmd sWirelessStatusIndicator_1Bar[] = {
|
||||
ANIMCMD_FRAME(4, 5),
|
||||
ANIMCMD_FRAME(8, 5),
|
||||
ANIMCMD_JUMP(0)
|
||||
};
|
||||
|
||||
static const union AnimCmd sWirelessStatusIndicatorAnim3[] = {
|
||||
// searching
|
||||
static const union AnimCmd sWirelessStatusIndicator_Searching[] = {
|
||||
ANIMCMD_FRAME( 4, 10),
|
||||
ANIMCMD_FRAME(20, 10),
|
||||
ANIMCMD_JUMP(0)
|
||||
};
|
||||
|
||||
static const union AnimCmd sWirelessStatusIndicatorAnim4[] = {
|
||||
// error
|
||||
static const union AnimCmd sWirelessStatusIndicator_Error[] = {
|
||||
ANIMCMD_FRAME(24, 10),
|
||||
ANIMCMD_FRAME( 4, 10),
|
||||
ANIMCMD_JUMP(0)
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sWirelessStatusIndicatorAnims[] = {
|
||||
sWirelessStatusIndicatorAnim0,
|
||||
sWirelessStatusIndicatorAnim1,
|
||||
sWirelessStatusIndicatorAnim2,
|
||||
sWirelessStatusIndicatorAnim3,
|
||||
sWirelessStatusIndicatorAnim4
|
||||
[WIRELESS_STATUS_ANIM_3_BARS] = sWirelessStatusIndicator_3Bars,
|
||||
[WIRELESS_STATUS_ANIM_2_BARS] = sWirelessStatusIndicator_2Bars,
|
||||
[WIRELESS_STATUS_ANIM_1_BAR] = sWirelessStatusIndicator_1Bar,
|
||||
[WIRELESS_STATUS_ANIM_SEARCHING] = sWirelessStatusIndicator_Searching,
|
||||
[WIRELESS_STATUS_ANIM_ERROR] = sWirelessStatusIndicator_Error
|
||||
};
|
||||
|
||||
static const struct CompressedSpriteSheet sWirelessStatusIndicatorSpriteSheet = {
|
||||
gWirelessLinkIconPic, 0x0380, 0xD431
|
||||
sWirelessLinkIconPic, 0x0380, TAG_GFX_STATUS_INDICATOR
|
||||
};
|
||||
|
||||
static const struct SpritePalette sWirelessStatusIndicatorSpritePalette = {
|
||||
gWirelessLinkIconPalette, 0xD432
|
||||
sWirelessLinkIconPalette, TAG_PAL_STATUS_INDICATOR
|
||||
};
|
||||
|
||||
static const struct SpriteTemplate sWirelessStatusIndicatorSpriteTemplate = {
|
||||
.tileTag = 0xD431,
|
||||
.paletteTag = 0xD432,
|
||||
.tileTag = TAG_GFX_STATUS_INDICATOR,
|
||||
.paletteTag = TAG_PAL_STATUS_INDICATOR,
|
||||
.oam = &sWirelessStatusIndicatorOamData,
|
||||
.anims = sWirelessStatusIndicatorAnims,
|
||||
.images = NULL,
|
||||
@@ -298,13 +316,11 @@ void RfuRecvQueue_Reset(struct RfuRecvQueue *queue)
|
||||
|
||||
for (i = 0; i < RECV_QUEUE_NUM_SLOTS; i++)
|
||||
{
|
||||
for (j = 0; j < RECV_QUEUE_SLOT_LENGTH; j++)
|
||||
{
|
||||
for (j = 0; j < COMM_SLOT_LENGTH * MAX_RFU_PLAYERS; j++)
|
||||
queue->slots[i][j] = 0;
|
||||
}
|
||||
}
|
||||
queue->send_slot = 0;
|
||||
queue->recv_slot = 0;
|
||||
queue->sendSlot = 0;
|
||||
queue->recvSlot = 0;
|
||||
queue->count = 0;
|
||||
queue->full = FALSE;
|
||||
}
|
||||
@@ -316,13 +332,11 @@ void RfuSendQueue_Reset(struct RfuSendQueue *queue)
|
||||
|
||||
for (i = 0; i < SEND_QUEUE_NUM_SLOTS; i++)
|
||||
{
|
||||
for (j = 0; j < SEND_QUEUE_SLOT_LENGTH; j++)
|
||||
{
|
||||
for (j = 0; j < COMM_SLOT_LENGTH; j++)
|
||||
queue->slots[i][j] = 0;
|
||||
}
|
||||
}
|
||||
queue->send_slot = 0;
|
||||
queue->recv_slot = 0;
|
||||
queue->sendSlot = 0;
|
||||
queue->recvSlot = 0;
|
||||
queue->count = 0;
|
||||
queue->full = FALSE;
|
||||
}
|
||||
@@ -335,12 +349,10 @@ static void RfuUnusedQueue_Reset(struct RfuUnusedQueue *queue)
|
||||
for (i = 0; i < UNUSED_QUEUE_NUM_SLOTS; i++)
|
||||
{
|
||||
for (j = 0; j < UNUSED_QUEUE_SLOT_LENGTH; j++)
|
||||
{
|
||||
queue->slots[i][j] = 0;
|
||||
}
|
||||
}
|
||||
queue->send_slot = 0;
|
||||
queue->recv_slot = 0;
|
||||
queue->sendSlot = 0;
|
||||
queue->recvSlot = 0;
|
||||
queue->count = 0;
|
||||
queue->full = FALSE;
|
||||
}
|
||||
@@ -356,26 +368,20 @@ void RfuRecvQueue_Enqueue(struct RfuRecvQueue *queue, u8 *src)
|
||||
imeBak = REG_IME;
|
||||
REG_IME = 0;
|
||||
count = 0;
|
||||
for (i = 0; i < RECV_QUEUE_SLOT_LENGTH; i += RECV_QUEUE_SLOT_LENGTH / MAX_RFU_PLAYERS)
|
||||
for (i = 0; i < COMM_SLOT_LENGTH * MAX_RFU_PLAYERS; i += COMM_SLOT_LENGTH)
|
||||
{
|
||||
if (src[i] == 0 && src[i + 1] == 0)
|
||||
{
|
||||
count++;
|
||||
}
|
||||
}
|
||||
if (count != MAX_RFU_PLAYERS)
|
||||
{
|
||||
for (i = 0; i < RECV_QUEUE_SLOT_LENGTH; i++)
|
||||
{
|
||||
queue->slots[queue->recv_slot][i] = src[i];
|
||||
}
|
||||
queue->recv_slot++;
|
||||
queue->recv_slot %= RECV_QUEUE_NUM_SLOTS;
|
||||
for (i = 0; i < COMM_SLOT_LENGTH * MAX_RFU_PLAYERS; i++)
|
||||
queue->slots[queue->recvSlot][i] = src[i];
|
||||
queue->recvSlot++;
|
||||
queue->recvSlot %= RECV_QUEUE_NUM_SLOTS;
|
||||
queue->count++;
|
||||
for (i = 0; i < RECV_QUEUE_SLOT_LENGTH; i++)
|
||||
{
|
||||
for (i = 0; i < COMM_SLOT_LENGTH * MAX_RFU_PLAYERS; i++)
|
||||
src[i] = 0;
|
||||
}
|
||||
}
|
||||
REG_IME = imeBak;
|
||||
}
|
||||
@@ -394,26 +400,20 @@ void RfuSendQueue_Enqueue(struct RfuSendQueue *queue, u8 *src)
|
||||
{
|
||||
imeBak = REG_IME;
|
||||
REG_IME = 0;
|
||||
for (i = 0; i < SEND_QUEUE_SLOT_LENGTH; i++)
|
||||
for (i = 0; i < COMM_SLOT_LENGTH; i++)
|
||||
{
|
||||
if (src[i] != 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i != SEND_QUEUE_SLOT_LENGTH)
|
||||
if (i != COMM_SLOT_LENGTH)
|
||||
{
|
||||
for (i = 0; i < SEND_QUEUE_SLOT_LENGTH; i++)
|
||||
{
|
||||
queue->slots[queue->recv_slot][i] = src[i];
|
||||
}
|
||||
queue->recv_slot++;
|
||||
queue->recv_slot %= SEND_QUEUE_NUM_SLOTS;
|
||||
for (i = 0; i < COMM_SLOT_LENGTH; i++)
|
||||
queue->slots[queue->recvSlot][i] = src[i];
|
||||
queue->recvSlot++;
|
||||
queue->recvSlot %= SEND_QUEUE_NUM_SLOTS;
|
||||
queue->count++;
|
||||
for (i = 0; i < SEND_QUEUE_SLOT_LENGTH; i++)
|
||||
{
|
||||
for (i = 0; i < COMM_SLOT_LENGTH; i++)
|
||||
src[i] = 0;
|
||||
}
|
||||
}
|
||||
REG_IME = imeBak;
|
||||
}
|
||||
@@ -430,21 +430,17 @@ bool8 RfuRecvQueue_Dequeue(struct RfuRecvQueue *queue, u8 *dest)
|
||||
|
||||
imeBak = REG_IME;
|
||||
REG_IME = 0;
|
||||
if (queue->recv_slot == queue->send_slot || queue->full)
|
||||
if (queue->recvSlot == queue->sendSlot || queue->full)
|
||||
{
|
||||
for (i = 0; i < RECV_QUEUE_SLOT_LENGTH; i++)
|
||||
{
|
||||
for (i = 0; i < COMM_SLOT_LENGTH * MAX_RFU_PLAYERS; i++)
|
||||
dest[i] = 0;
|
||||
}
|
||||
REG_IME = imeBak;
|
||||
return FALSE;
|
||||
}
|
||||
for (i = 0; i < RECV_QUEUE_SLOT_LENGTH; i++)
|
||||
{
|
||||
dest[i] = queue->slots[queue->send_slot][i];
|
||||
}
|
||||
queue->send_slot++;
|
||||
queue->send_slot %= RECV_QUEUE_NUM_SLOTS;
|
||||
for (i = 0; i < COMM_SLOT_LENGTH * MAX_RFU_PLAYERS; i++)
|
||||
dest[i] = queue->slots[queue->sendSlot][i];
|
||||
queue->sendSlot++;
|
||||
queue->sendSlot %= RECV_QUEUE_NUM_SLOTS;
|
||||
queue->count--;
|
||||
REG_IME = imeBak;
|
||||
return TRUE;
|
||||
@@ -455,18 +451,14 @@ bool8 RfuSendQueue_Dequeue(struct RfuSendQueue *queue, u8 *dest)
|
||||
s32 i;
|
||||
u16 imeBak;
|
||||
|
||||
if (queue->recv_slot == queue->send_slot || queue->full)
|
||||
{
|
||||
if (queue->recvSlot == queue->sendSlot || queue->full)
|
||||
return FALSE;
|
||||
}
|
||||
imeBak = REG_IME;
|
||||
REG_IME = 0;
|
||||
for (i = 0; i < SEND_QUEUE_SLOT_LENGTH; i++)
|
||||
{
|
||||
dest[i] = queue->slots[queue->send_slot][i];
|
||||
}
|
||||
queue->send_slot++;
|
||||
queue->send_slot %= SEND_QUEUE_NUM_SLOTS;
|
||||
for (i = 0; i < COMM_SLOT_LENGTH; i++)
|
||||
dest[i] = queue->slots[queue->sendSlot][i];
|
||||
queue->sendSlot++;
|
||||
queue->sendSlot %= SEND_QUEUE_NUM_SLOTS;
|
||||
queue->count--;
|
||||
REG_IME = imeBak;
|
||||
return TRUE;
|
||||
@@ -482,20 +474,14 @@ void RfuBackupQueue_Enqueue(struct RfuBackupQueue *queue, const u8 *dest)
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i = 0; i < BACKUP_QUEUE_SLOT_LENGTH; i++)
|
||||
{
|
||||
queue->slots[queue->recv_slot][i] = dest[i];
|
||||
}
|
||||
queue->recv_slot++;
|
||||
queue->recv_slot %= BACKUP_QUEUE_NUM_SLOTS;
|
||||
for (i = 0; i < COMM_SLOT_LENGTH; i++)
|
||||
queue->slots[queue->recvSlot][i] = dest[i];
|
||||
queue->recvSlot++;
|
||||
queue->recvSlot %= BACKUP_QUEUE_NUM_SLOTS;
|
||||
if (queue->count < BACKUP_QUEUE_NUM_SLOTS)
|
||||
{
|
||||
queue->count++;
|
||||
}
|
||||
else
|
||||
{
|
||||
queue->send_slot = queue->recv_slot;
|
||||
}
|
||||
queue->sendSlot = queue->recvSlot;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -504,18 +490,15 @@ bool8 RfuBackupQueue_Dequeue(struct RfuBackupQueue *queue, u8 *dest)
|
||||
s32 i;
|
||||
|
||||
if (queue->count == 0)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (dest != NULL)
|
||||
{
|
||||
for (i = 0; i < BACKUP_QUEUE_SLOT_LENGTH; i++)
|
||||
{
|
||||
dest[i] = queue->slots[queue->send_slot][i];
|
||||
}
|
||||
for (i = 0; i < COMM_SLOT_LENGTH; i++)
|
||||
dest[i] = queue->slots[queue->sendSlot][i];
|
||||
}
|
||||
queue->send_slot++;
|
||||
queue->send_slot %= BACKUP_QUEUE_NUM_SLOTS;
|
||||
queue->sendSlot++;
|
||||
queue->sendSlot %= BACKUP_QUEUE_NUM_SLOTS;
|
||||
queue->count--;
|
||||
return TRUE;
|
||||
}
|
||||
@@ -527,11 +510,9 @@ static void RfuUnusedQueue_Dequeue(struct RfuUnusedQueue *queue, u8 *dest)
|
||||
if (queue->count < UNUSED_QUEUE_NUM_SLOTS)
|
||||
{
|
||||
for (i = 0; i < UNUSED_QUEUE_SLOT_LENGTH; i++)
|
||||
{
|
||||
queue->slots[queue->recv_slot][i] = dest[i];
|
||||
}
|
||||
queue->recv_slot++;
|
||||
queue->recv_slot %= UNUSED_QUEUE_NUM_SLOTS;
|
||||
queue->slots[queue->recvSlot][i] = dest[i];
|
||||
queue->recvSlot++;
|
||||
queue->recvSlot %= UNUSED_QUEUE_NUM_SLOTS;
|
||||
queue->count++;
|
||||
}
|
||||
else
|
||||
@@ -544,16 +525,14 @@ static bool8 RfuUnusedQueue_Enqueue(struct RfuUnusedQueue *queue, u8 *dest)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
if (queue->recv_slot == queue->send_slot || queue->full)
|
||||
{
|
||||
if (queue->recvSlot == queue->sendSlot || queue->full)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
for (i = 0; i < UNUSED_QUEUE_SLOT_LENGTH; i++)
|
||||
{
|
||||
dest[i] = queue->slots[queue->send_slot][i];
|
||||
}
|
||||
queue->send_slot++;
|
||||
queue->send_slot %= UNUSED_QUEUE_NUM_SLOTS;
|
||||
dest[i] = queue->slots[queue->sendSlot][i];
|
||||
|
||||
queue->sendSlot++;
|
||||
queue->sendSlot %= UNUSED_QUEUE_NUM_SLOTS;
|
||||
queue->count--;
|
||||
return TRUE;
|
||||
}
|
||||
@@ -621,9 +600,7 @@ static void PkmnStrToASCII(u8 *dest, const u8 *src)
|
||||
s32 i;
|
||||
|
||||
for (i = 0; src[i] != EOS; i++)
|
||||
{
|
||||
dest[i] = sWireless_RSEtoASCIITable[src[i]];
|
||||
}
|
||||
dest[i] = 0;
|
||||
}
|
||||
|
||||
@@ -632,9 +609,7 @@ static void ASCIIToPkmnStr(u8 *dest, const u8 *src)
|
||||
s32 i;
|
||||
|
||||
for (i = 0; src[i] != 0; i++)
|
||||
{
|
||||
dest[i] = sWireless_ASCIItoRSETable[src[i]];
|
||||
}
|
||||
dest[i] = EOS;
|
||||
}
|
||||
|
||||
@@ -672,40 +647,39 @@ static u8 GetConnectedChildStrength(u8 maxFlags)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void InitHostRFUtgtGname(struct GFtgtGname *data, u8 activity, bool32 started, s32 child_sprite_genders)
|
||||
void InitHostRfuGameData(struct RfuGameData *data, u8 activity, bool32 startedActivity, s32 partnerInfo)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < 2; i++)
|
||||
{
|
||||
data->unk_00.playerTrainerId[i] = gSaveBlock2Ptr->playerTrainerId[i];
|
||||
}
|
||||
for (i = 0; i < (s32)ARRAY_COUNT(data->compatibility.playerTrainerId); i++)
|
||||
data->compatibility.playerTrainerId[i] = gSaveBlock2Ptr->playerTrainerId[i];
|
||||
|
||||
for (i = 0; i < RFU_CHILD_MAX; i++)
|
||||
{
|
||||
data->child_sprite_gender[i] = child_sprite_genders;
|
||||
child_sprite_genders >>= 8;
|
||||
data->partnerInfo[i] = partnerInfo;
|
||||
partnerInfo >>= 8; // Each element is 1 byte
|
||||
}
|
||||
data->playerGender = gSaveBlock2Ptr->playerGender;
|
||||
data->activity = activity;
|
||||
data->started = started;
|
||||
data->unk_00.language = GAME_LANGUAGE;
|
||||
data->unk_00.version = GAME_VERSION;
|
||||
data->unk_00.hasNews = FALSE;
|
||||
data->unk_00.hasCard = FALSE;
|
||||
data->unk_00.unknown = FALSE;
|
||||
data->unk_00.isChampion = FlagGet(FLAG_SYS_CAN_LINK_WITH_RS);
|
||||
data->unk_00.hasNationalDex = IsNationalPokedexEnabled();
|
||||
data->unk_00.gameClear = FlagGet(FLAG_SYS_GAME_CLEAR);
|
||||
data->startedActivity = startedActivity;
|
||||
data->compatibility.language = GAME_LANGUAGE;
|
||||
data->compatibility.version = GAME_VERSION;
|
||||
data->compatibility.hasNews = FALSE;
|
||||
data->compatibility.hasCard = FALSE;
|
||||
data->compatibility.unknown = FALSE;
|
||||
data->compatibility.isChampion = FlagGet(FLAG_SYS_CAN_LINK_WITH_RS);
|
||||
data->compatibility.hasNationalDex = IsNationalPokedexEnabled();
|
||||
data->compatibility.gameClear = FlagGet(FLAG_SYS_GAME_CLEAR);
|
||||
}
|
||||
|
||||
/*
|
||||
* ==========================================================
|
||||
* ================================================================
|
||||
* Returns 1 if parent, 0 if child or neutral.
|
||||
* If partner serial number is valid, copies gname and uname.
|
||||
* If partner serial number is valid, copies gameData and username.
|
||||
* Otherwise, blanks these.
|
||||
* ==========================================================
|
||||
* ================================================================
|
||||
*/
|
||||
bool8 LinkRfu_GetNameIfCompatible(struct GFtgtGname *gname, u8 *uname, u8 idx)
|
||||
bool8 Rfu_GetCompatiblePlayerData(struct RfuGameData *gameData, u8 *username, u8 idx)
|
||||
{
|
||||
bool8 retVal;
|
||||
|
||||
@@ -714,13 +688,13 @@ bool8 LinkRfu_GetNameIfCompatible(struct GFtgtGname *gname, u8 *uname, u8 idx)
|
||||
retVal = TRUE;
|
||||
if (IsRfuSerialNumberValid(gRfuLinkStatus->partner[idx].serialNo) && ((gRfuLinkStatus->getNameFlag >> idx) & 1))
|
||||
{
|
||||
memcpy(gname, &gRfuLinkStatus->partner[idx].gname, RFU_GAME_NAME_LENGTH);
|
||||
memcpy(uname, gRfuLinkStatus->partner[idx].uname, RFU_USER_NAME_LENGTH);
|
||||
memcpy(gameData, gRfuLinkStatus->partner[idx].gname, RFU_GAME_NAME_LENGTH);
|
||||
memcpy(username, gRfuLinkStatus->partner[idx].uname, RFU_USER_NAME_LENGTH);
|
||||
}
|
||||
else
|
||||
{
|
||||
memset(gname, 0, RFU_GAME_NAME_LENGTH);
|
||||
memset(uname, 0, RFU_USER_NAME_LENGTH);
|
||||
memset(gameData, 0, RFU_GAME_NAME_LENGTH);
|
||||
memset(username, 0, RFU_USER_NAME_LENGTH);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -728,45 +702,39 @@ bool8 LinkRfu_GetNameIfCompatible(struct GFtgtGname *gname, u8 *uname, u8 idx)
|
||||
retVal = FALSE;
|
||||
if (IsRfuSerialNumberValid(gRfuLinkStatus->partner[idx].serialNo))
|
||||
{
|
||||
memcpy(gname, &gRfuLinkStatus->partner[idx].gname, RFU_GAME_NAME_LENGTH);
|
||||
memcpy(uname, gRfuLinkStatus->partner[idx].uname, RFU_USER_NAME_LENGTH);
|
||||
memcpy(gameData, gRfuLinkStatus->partner[idx].gname, RFU_GAME_NAME_LENGTH);
|
||||
memcpy(username, gRfuLinkStatus->partner[idx].uname, RFU_USER_NAME_LENGTH);
|
||||
}
|
||||
else
|
||||
{
|
||||
memset(gname, 0, RFU_GAME_NAME_LENGTH);
|
||||
memset(uname, 0, RFU_USER_NAME_LENGTH);
|
||||
memset(gameData, 0, RFU_GAME_NAME_LENGTH);
|
||||
memset(username, 0, RFU_USER_NAME_LENGTH);
|
||||
}
|
||||
}
|
||||
return retVal;
|
||||
}
|
||||
|
||||
/*
|
||||
* ==========================================================
|
||||
* Specific check for serial number 0x7F7D,
|
||||
* which comes from ???
|
||||
* ==========================================================
|
||||
*/
|
||||
bool8 LinkRfu_GetNameIfSerial7F7D(struct GFtgtGname *gname, u8 *uname, u8 idx)
|
||||
bool8 Rfu_GetWonderDistributorPlayerData(struct RfuGameData *gameData, u8 *username, u8 idx)
|
||||
{
|
||||
bool8 retVal = FALSE;
|
||||
if (gRfuLinkStatus->partner[idx].serialNo == RFU_SERIAL_7F7D)
|
||||
if (gRfuLinkStatus->partner[idx].serialNo == RFU_SERIAL_WONDER_DISTRIBUTOR)
|
||||
{
|
||||
memcpy(gname, gRfuLinkStatus->partner[idx].gname, RFU_GAME_NAME_LENGTH);
|
||||
memcpy(uname, gRfuLinkStatus->partner[idx].uname, RFU_USER_NAME_LENGTH);
|
||||
memcpy(gameData, gRfuLinkStatus->partner[idx].gname, RFU_GAME_NAME_LENGTH);
|
||||
memcpy(username, gRfuLinkStatus->partner[idx].uname, RFU_USER_NAME_LENGTH);
|
||||
retVal = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
memset(gname, 0, RFU_GAME_NAME_LENGTH);
|
||||
memset(uname, 0, RFU_USER_NAME_LENGTH);
|
||||
memset(gameData, 0, RFU_GAME_NAME_LENGTH);
|
||||
memset(username, 0, RFU_USER_NAME_LENGTH);
|
||||
}
|
||||
return retVal;
|
||||
}
|
||||
|
||||
void LinkRfu3_SetGnameUnameFromStaticBuffers(struct GFtgtGname *gname, u8 *uname)
|
||||
void CopyHostRfuGameDataAndUsername(struct RfuGameData *gameData, u8 *username)
|
||||
{
|
||||
memcpy(gname, &gHostRFUtgtGnameBuffer, RFU_GAME_NAME_LENGTH);
|
||||
memcpy(uname, gHostRFUtgtUnameBuffer, RFU_USER_NAME_LENGTH);
|
||||
memcpy(gameData, &gHostRfuGameData, RFU_GAME_NAME_LENGTH);
|
||||
memcpy(username, gHostRfuUsername, RFU_USER_NAME_LENGTH);
|
||||
}
|
||||
|
||||
#define sNextAnimNum data[0]
|
||||
@@ -793,23 +761,23 @@ void CreateWirelessStatusIndicatorSprite(u8 x, u8 y)
|
||||
gSprites[sprId].sValidator = STATUS_INDICATOR_ACTIVE;
|
||||
gSprites[sprId].sTileStart = GetSpriteTileStartByTag(sWirelessStatusIndicatorSpriteSheet.tag);
|
||||
gSprites[sprId].invisible = TRUE;
|
||||
gWirelessStatusIndicatorSpriteId = sprId;
|
||||
sWirelessStatusIndicatorSpriteId = sprId;
|
||||
}
|
||||
else
|
||||
{
|
||||
gWirelessStatusIndicatorSpriteId = CreateSprite(&sWirelessStatusIndicatorSpriteTemplate, x, y, 0);
|
||||
gSprites[gWirelessStatusIndicatorSpriteId].sValidator = STATUS_INDICATOR_ACTIVE;
|
||||
gSprites[gWirelessStatusIndicatorSpriteId].sTileStart = GetSpriteTileStartByTag(sWirelessStatusIndicatorSpriteSheet.tag);
|
||||
gSprites[gWirelessStatusIndicatorSpriteId].invisible = TRUE;
|
||||
sWirelessStatusIndicatorSpriteId = CreateSprite(&sWirelessStatusIndicatorSpriteTemplate, x, y, 0);
|
||||
gSprites[sWirelessStatusIndicatorSpriteId].sValidator = STATUS_INDICATOR_ACTIVE;
|
||||
gSprites[sWirelessStatusIndicatorSpriteId].sTileStart = GetSpriteTileStartByTag(sWirelessStatusIndicatorSpriteSheet.tag);
|
||||
gSprites[sWirelessStatusIndicatorSpriteId].invisible = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
void DestroyWirelessStatusIndicatorSprite(void)
|
||||
{
|
||||
if (gSprites[gWirelessStatusIndicatorSpriteId].sValidator == STATUS_INDICATOR_ACTIVE)
|
||||
if (gSprites[sWirelessStatusIndicatorSpriteId].sValidator == STATUS_INDICATOR_ACTIVE)
|
||||
{
|
||||
gSprites[gWirelessStatusIndicatorSpriteId].sValidator = 0;
|
||||
DestroySprite(&gSprites[gWirelessStatusIndicatorSpriteId]);
|
||||
gSprites[sWirelessStatusIndicatorSpriteId].sValidator = 0;
|
||||
DestroySprite(&gSprites[sWirelessStatusIndicatorSpriteId]);
|
||||
gMain.oamBuffer[125] = gDummyOamData;
|
||||
CpuCopy16(&gDummyOamData, (struct OamData *)OAM + 125, sizeof(struct OamData));
|
||||
}
|
||||
@@ -818,11 +786,9 @@ void DestroyWirelessStatusIndicatorSprite(void)
|
||||
void LoadWirelessStatusIndicatorSpriteGfx(void)
|
||||
{
|
||||
if (GetSpriteTileStartByTag(sWirelessStatusIndicatorSpriteSheet.tag) == 0xFFFF)
|
||||
{
|
||||
LoadCompressedSpriteSheet(&sWirelessStatusIndicatorSpriteSheet);
|
||||
}
|
||||
LoadSpritePalette(&sWirelessStatusIndicatorSpritePalette);
|
||||
gWirelessStatusIndicatorSpriteId = 0xFF;
|
||||
sWirelessStatusIndicatorSpriteId = SPRITE_NONE;
|
||||
}
|
||||
|
||||
static u8 GetParentSignalStrength(void)
|
||||
@@ -832,19 +798,17 @@ static u8 GetParentSignalStrength(void)
|
||||
for (i = 0; i < RFU_CHILD_MAX; i++)
|
||||
{
|
||||
if (flags & 1)
|
||||
{
|
||||
return gRfuLinkStatus->strength[i];
|
||||
}
|
||||
flags >>= 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void SetAndRestartWirelessStatusIndicatorAnim(struct Sprite *sprite, s32 signalStrengthAnimNum)
|
||||
static void SetAndRestartWirelessStatusIndicatorAnim(struct Sprite *sprite, s32 animNum)
|
||||
{
|
||||
if (sprite->sCurrAnimNum != signalStrengthAnimNum)
|
||||
if (sprite->sCurrAnimNum != animNum)
|
||||
{
|
||||
sprite->sCurrAnimNum = signalStrengthAnimNum;
|
||||
sprite->sCurrAnimNum = animNum;
|
||||
sprite->sFrameDelay = 0;
|
||||
sprite->sFrameIdx = 0;
|
||||
}
|
||||
@@ -852,45 +816,38 @@ static void SetAndRestartWirelessStatusIndicatorAnim(struct Sprite *sprite, s32
|
||||
|
||||
void UpdateWirelessStatusIndicatorSprite(void)
|
||||
{
|
||||
if (gWirelessStatusIndicatorSpriteId != 0xFF && gSprites[gWirelessStatusIndicatorSpriteId].sValidator == STATUS_INDICATOR_ACTIVE)
|
||||
if (sWirelessStatusIndicatorSpriteId != SPRITE_NONE && gSprites[sWirelessStatusIndicatorSpriteId].sValidator == STATUS_INDICATOR_ACTIVE)
|
||||
{
|
||||
struct Sprite *sprite = &gSprites[gWirelessStatusIndicatorSpriteId];
|
||||
struct Sprite *sprite = &gSprites[sWirelessStatusIndicatorSpriteId];
|
||||
u8 signalStrength = RFU_LINK_ICON_LEVEL4_MAX;
|
||||
u8 i = 0;
|
||||
|
||||
// Get weakest signal strength
|
||||
if (gRfuLinkStatus->parentChild == MODE_PARENT)
|
||||
{
|
||||
for (i = 0; i < GetLinkPlayerCount() - 1; i++)
|
||||
{
|
||||
if (signalStrength >= GetConnectedChildStrength(i + 1))
|
||||
{
|
||||
signalStrength = GetConnectedChildStrength(i + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
signalStrength = GetParentSignalStrength();
|
||||
}
|
||||
|
||||
// Set signal strength sprite anim number
|
||||
if (IsRfuRecoveringFromLinkLoss() == TRUE)
|
||||
{
|
||||
sprite->sNextAnimNum = 4;
|
||||
}
|
||||
sprite->sNextAnimNum = WIRELESS_STATUS_ANIM_ERROR;
|
||||
else if (signalStrength <= RFU_LINK_ICON_LEVEL1_MAX)
|
||||
{
|
||||
sprite->sNextAnimNum = 3;
|
||||
}
|
||||
sprite->sNextAnimNum = WIRELESS_STATUS_ANIM_SEARCHING;
|
||||
else if (signalStrength >= RFU_LINK_ICON_LEVEL2_MIN && signalStrength <= RFU_LINK_ICON_LEVEL2_MAX)
|
||||
{
|
||||
sprite->sNextAnimNum = 2;
|
||||
}
|
||||
sprite->sNextAnimNum = WIRELESS_STATUS_ANIM_1_BAR;
|
||||
else if (signalStrength >= RFU_LINK_ICON_LEVEL3_MIN && signalStrength <= RFU_LINK_ICON_LEVEL3_MAX)
|
||||
{
|
||||
sprite->sNextAnimNum = 1;
|
||||
}
|
||||
sprite->sNextAnimNum = WIRELESS_STATUS_ANIM_2_BARS;
|
||||
else if (signalStrength >= RFU_LINK_ICON_LEVEL4_MIN)
|
||||
{
|
||||
sprite->sNextAnimNum = 0;
|
||||
}
|
||||
sprite->sNextAnimNum = WIRELESS_STATUS_ANIM_3_BARS;
|
||||
|
||||
if (sprite->sNextAnimNum != sprite->sSavedAnimNum)
|
||||
{
|
||||
SetAndRestartWirelessStatusIndicatorAnim(sprite, sprite->sNextAnimNum);
|
||||
@@ -901,9 +858,7 @@ void UpdateWirelessStatusIndicatorSprite(void)
|
||||
sprite->sFrameIdx++;
|
||||
sprite->sFrameDelay = 0;
|
||||
if (sprite->anims[sprite->sCurrAnimNum][sprite->sFrameIdx].type == -2) // ANIMCMD_JUMP
|
||||
{
|
||||
sprite->sFrameIdx = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -934,7 +889,7 @@ static void CopyTrainerRecord(struct TrainerNameRecord *dest, u32 trainerId, con
|
||||
{
|
||||
int i;
|
||||
dest->trainerId = trainerId;
|
||||
for (i = 0; i < 7; i++)
|
||||
for (i = 0; i < PLAYER_NAME_LENGTH; i++)
|
||||
{
|
||||
if (name[i] == EOS)
|
||||
break;
|
||||
@@ -948,9 +903,7 @@ static void ZeroName(u8 *name)
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++)
|
||||
{
|
||||
*name++ = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static bool32 NameIsEmpty(const u8 *name)
|
||||
@@ -960,15 +913,13 @@ static bool32 NameIsEmpty(const u8 *name)
|
||||
for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++)
|
||||
{
|
||||
if (*name++ != 0)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// Save the currently connected players into the trainer records, shifting all previous records down.
|
||||
void RecordMixTrainerNames(void)
|
||||
void SaveLinkTrainerNames(void)
|
||||
{
|
||||
if (gWirelessCommType != 0)
|
||||
{
|
||||
@@ -976,13 +927,13 @@ void RecordMixTrainerNames(void)
|
||||
s32 j;
|
||||
s32 nextSpace;
|
||||
s32 connectedTrainerRecordIndices[5];
|
||||
struct TrainerNameRecord *newRecords = AllocZeroed(20 * sizeof(struct TrainerNameRecord));
|
||||
struct TrainerNameRecord *newRecords = AllocZeroed(sizeof(gSaveBlock1Ptr->trainerNameRecords));
|
||||
|
||||
// Check if we already have a record saved for connected trainers.
|
||||
for (i = 0; i < GetLinkPlayerCount(); i++)
|
||||
{
|
||||
connectedTrainerRecordIndices[i] = -1;
|
||||
for (j = 0; j < 20; j++)
|
||||
for (j = 0; j < (int)ARRAY_COUNT(gSaveBlock1Ptr->trainerNameRecords); j++)
|
||||
{
|
||||
if ((u16)gLinkPlayers[i].trainerId == gSaveBlock1Ptr->trainerNameRecords[j].trainerId && StringCompare(gLinkPlayers[i].name, gSaveBlock1Ptr->trainerNameRecords[j].trainerName) == 0)
|
||||
{
|
||||
@@ -1001,29 +952,25 @@ void RecordMixTrainerNames(void)
|
||||
|
||||
// If we already had a record for this trainer, wipe it so that the next step doesn't duplicate it.
|
||||
if (connectedTrainerRecordIndices[i] >= 0)
|
||||
{
|
||||
ZeroName(gSaveBlock1Ptr->trainerNameRecords[connectedTrainerRecordIndices[i]].trainerName);
|
||||
}
|
||||
nextSpace++;
|
||||
}
|
||||
}
|
||||
|
||||
// Copy all non-empty records to the new list, in the order they appear on the old list. If the list is full,
|
||||
// the last (oldest) records will be dropped.
|
||||
for (i = 0; i < 20; i++)
|
||||
for (i = 0; i < (int)ARRAY_COUNT(gSaveBlock1Ptr->trainerNameRecords); i++)
|
||||
{
|
||||
if (!NameIsEmpty(gSaveBlock1Ptr->trainerNameRecords[i].trainerName))
|
||||
{
|
||||
CopyTrainerRecord(&newRecords[nextSpace], gSaveBlock1Ptr->trainerNameRecords[i].trainerId, gSaveBlock1Ptr->trainerNameRecords[i].trainerName);
|
||||
if (++nextSpace >= 20)
|
||||
{
|
||||
if (++nextSpace >= (int)ARRAY_COUNT(gSaveBlock1Ptr->trainerNameRecords))
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Finalize the new list, and clean up.
|
||||
memcpy(gSaveBlock1Ptr->trainerNameRecords, newRecords, 20 * sizeof(struct TrainerNameRecord));
|
||||
memcpy(gSaveBlock1Ptr->trainerNameRecords, newRecords, sizeof(gSaveBlock1Ptr->trainerNameRecords));
|
||||
Free(newRecords);
|
||||
}
|
||||
}
|
||||
@@ -1032,16 +979,14 @@ bool32 PlayerHasMetTrainerBefore(u16 id, u8 *name)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < 20; i++)
|
||||
for (i = 0; i < (int)ARRAY_COUNT(gSaveBlock1Ptr->trainerNameRecords); i++)
|
||||
{
|
||||
if (StringCompareN(gSaveBlock1Ptr->trainerNameRecords[i].trainerName, name, 7) == 0 && gSaveBlock1Ptr->trainerNameRecords[i].trainerId == id)
|
||||
{
|
||||
if (StringCompareN(gSaveBlock1Ptr->trainerNameRecords[i].trainerName, name, PLAYER_NAME_LENGTH) == 0
|
||||
&& gSaveBlock1Ptr->trainerNameRecords[i].trainerId == id)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (NameIsEmpty(gSaveBlock1Ptr->trainerNameRecords[i].trainerName))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
+5
-5
@@ -629,7 +629,7 @@ static void CB2_InitMailView(void)
|
||||
SetMainCallback2(CB2_RunShowMailCB);
|
||||
break;
|
||||
}
|
||||
} while (MenuHelpers_LinkSomething() != TRUE);
|
||||
} while (MenuHelpers_IsLinkActive() != TRUE);
|
||||
}
|
||||
|
||||
static void BufferMailMessage(void)
|
||||
@@ -669,13 +669,13 @@ static void AddMailMessagePrinters(void)
|
||||
{
|
||||
if (sMailViewResources->messageLinesBuffer[i][0] != EOS && sMailViewResources->messageLinesBuffer[i][0] != CHAR_SPACE)
|
||||
{
|
||||
AddTextPrinterParameterized3(0, FONT_1, sMailViewResources->messageLayout->linesLayout[i].lineXoffset + sMailViewResources->messageLayout->messageLeft, y + sMailViewResources->messageLayout->messageTop, sTextColor, 0, sMailViewResources->messageLinesBuffer[i]);
|
||||
AddTextPrinterParameterized3(0, FONT_NORMAL_COPY_1, sMailViewResources->messageLayout->linesLayout[i].lineXoffset + sMailViewResources->messageLayout->messageLeft, y + sMailViewResources->messageLayout->messageTop, sTextColor, 0, sMailViewResources->messageLinesBuffer[i]);
|
||||
y += sMailViewResources->messageLayout->linesLayout[i].lineHeight;
|
||||
}
|
||||
}
|
||||
width = GetStringWidth(FONT_1, gText_From, 0);
|
||||
AddTextPrinterParameterized3(1, FONT_1, sMailViewResources->nameX, sMailViewResources->messageLayout->nameY, sTextColor, 0, gText_From);
|
||||
AddTextPrinterParameterized3(1, FONT_1, sMailViewResources->nameX + width, sMailViewResources->messageLayout->nameY, sTextColor, 0, sMailViewResources->authorNameBuffer);
|
||||
width = GetStringWidth(FONT_NORMAL_COPY_1, gText_From, 0);
|
||||
AddTextPrinterParameterized3(1, FONT_NORMAL_COPY_1, sMailViewResources->nameX, sMailViewResources->messageLayout->nameY, sTextColor, 0, gText_From);
|
||||
AddTextPrinterParameterized3(1, FONT_NORMAL_COPY_1, sMailViewResources->nameX + width, sMailViewResources->messageLayout->nameY, sTextColor, 0, sMailViewResources->authorNameBuffer);
|
||||
CopyWindowToVram(0, COPYWIN_FULL);
|
||||
CopyWindowToVram(1, COPYWIN_FULL);
|
||||
}
|
||||
|
||||
+3
-3
@@ -87,7 +87,7 @@ static void ItemPrintFunc(u8 windowId, u32 itemId, u8 y)
|
||||
StringCopy(strbuf, gSaveBlock1Ptr->mail[itemId + PARTY_SIZE].playerName);
|
||||
if (StringLength(strbuf) <= 5)
|
||||
ConvertInternationalString(strbuf, LANGUAGE_JAPANESE);
|
||||
AddTextPrinterParameterized4(windowId, FONT_2, 8, y, 0, 0, sTextColor, -1, strbuf);
|
||||
AddTextPrinterParameterized4(windowId, FONT_NORMAL, 8, y, 0, 0, sTextColor, -1, strbuf);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -106,12 +106,12 @@ u8 MailboxPC_InitListMenu(struct PlayerPCItemPageStruct * playerPcStruct)
|
||||
gMultiuseListMenuTemplate.totalItems = playerPcStruct->count + 1;
|
||||
gMultiuseListMenuTemplate.windowId = sWindowIds[1];
|
||||
gMultiuseListMenuTemplate.header_X = 0;
|
||||
gMultiuseListMenuTemplate.item_X = GetMenuCursorDimensionByFont(FONT_2, 0);
|
||||
gMultiuseListMenuTemplate.item_X = GetMenuCursorDimensionByFont(FONT_NORMAL, 0);
|
||||
gMultiuseListMenuTemplate.cursor_X = 0;
|
||||
gMultiuseListMenuTemplate.lettersSpacing = 0;
|
||||
gMultiuseListMenuTemplate.itemVerticalPadding = 2;
|
||||
gMultiuseListMenuTemplate.maxShowed = 8;
|
||||
gMultiuseListMenuTemplate.fontId = FONT_2;
|
||||
gMultiuseListMenuTemplate.fontId = FONT_NORMAL;
|
||||
gMultiuseListMenuTemplate.upText_Y = 10;
|
||||
gMultiuseListMenuTemplate.cursorPal = 2;
|
||||
gMultiuseListMenuTemplate.fillValue = 1;
|
||||
|
||||
+1
-1
@@ -358,7 +358,7 @@ extern void ProcessDma3Requests(void);
|
||||
static void VBlankIntr(void)
|
||||
{
|
||||
if (gWirelessCommType)
|
||||
RFUVSync();
|
||||
RfuVSync();
|
||||
else if (!gLinkVSyncDisabled)
|
||||
LinkVSync();
|
||||
|
||||
|
||||
+16
-16
@@ -349,7 +349,7 @@ static void Task_PrintMainMenuText(u8 taskId)
|
||||
case MAIN_MENU_NEWGAME:
|
||||
default:
|
||||
FillWindowPixelBuffer(MAIN_MENU_WINDOW_NEWGAME_ONLY, PIXEL_FILL(10));
|
||||
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_NEWGAME_ONLY, FONT_2, 2, 2, sTextColor1, -1, gText_NewGame);
|
||||
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_NEWGAME_ONLY, FONT_NORMAL, 2, 2, sTextColor1, -1, gText_NewGame);
|
||||
MainMenu_DrawWindow(&sWindowTemplate[MAIN_MENU_WINDOW_NEWGAME_ONLY]);
|
||||
PutWindowTilemap(MAIN_MENU_WINDOW_NEWGAME_ONLY);
|
||||
CopyWindowToVram(MAIN_MENU_WINDOW_NEWGAME_ONLY, COPYWIN_FULL);
|
||||
@@ -357,8 +357,8 @@ static void Task_PrintMainMenuText(u8 taskId)
|
||||
case MAIN_MENU_CONTINUE:
|
||||
FillWindowPixelBuffer(MAIN_MENU_WINDOW_CONTINUE, PIXEL_FILL(10));
|
||||
FillWindowPixelBuffer(MAIN_MENU_WINDOW_NEWGAME, PIXEL_FILL(10));
|
||||
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_2, 2, 2, sTextColor1, -1, gText_Continue);
|
||||
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_NEWGAME, FONT_2, 2, 2, sTextColor1, -1, gText_NewGame);
|
||||
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_NORMAL, 2, 2, sTextColor1, -1, gText_Continue);
|
||||
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_NEWGAME, FONT_NORMAL, 2, 2, sTextColor1, -1, gText_NewGame);
|
||||
PrintContinueStats();
|
||||
MainMenu_DrawWindow(&sWindowTemplate[MAIN_MENU_WINDOW_CONTINUE]);
|
||||
MainMenu_DrawWindow(&sWindowTemplate[MAIN_MENU_WINDOW_NEWGAME]);
|
||||
@@ -371,10 +371,10 @@ static void Task_PrintMainMenuText(u8 taskId)
|
||||
FillWindowPixelBuffer(MAIN_MENU_WINDOW_CONTINUE, PIXEL_FILL(10));
|
||||
FillWindowPixelBuffer(MAIN_MENU_WINDOW_NEWGAME, PIXEL_FILL(10));
|
||||
FillWindowPixelBuffer(MAIN_MENU_WINDOW_MYSTERYGIFT, PIXEL_FILL(10));
|
||||
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_2, 2, 2, sTextColor1, -1, gText_Continue);
|
||||
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_NEWGAME, FONT_2, 2, 2, sTextColor1, -1, gText_NewGame);
|
||||
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_NORMAL, 2, 2, sTextColor1, -1, gText_Continue);
|
||||
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_NEWGAME, FONT_NORMAL, 2, 2, sTextColor1, -1, gText_NewGame);
|
||||
gTasks[taskId].tMGErrorType = 1;
|
||||
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_MYSTERYGIFT, FONT_2, 2, 2, sTextColor1, -1, gText_MysteryGift);
|
||||
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_MYSTERYGIFT, FONT_NORMAL, 2, 2, sTextColor1, -1, gText_MysteryGift);
|
||||
PrintContinueStats();
|
||||
MainMenu_DrawWindow(&sWindowTemplate[MAIN_MENU_WINDOW_CONTINUE]);
|
||||
MainMenu_DrawWindow(&sWindowTemplate[MAIN_MENU_WINDOW_NEWGAME]);
|
||||
@@ -481,7 +481,7 @@ static void Task_ExecuteMainMenuSelection(u8 taskId)
|
||||
TryStartQuestLogPlayback(taskId);
|
||||
break;
|
||||
case MAIN_MENU_MYSTERYGIFT:
|
||||
SetMainCallback2(c2_mystery_gift);
|
||||
SetMainCallback2(CB2_InitMysteryGift);
|
||||
HelpSystem_Disable();
|
||||
FreeAllWindowBuffers();
|
||||
DestroyTask(taskId);
|
||||
@@ -600,7 +600,7 @@ static void PrintMessageOnWindow4(const u8 *str)
|
||||
{
|
||||
FillWindowPixelBuffer(MAIN_MENU_WINDOW_ERROR, PIXEL_FILL(10));
|
||||
MainMenu_DrawWindow(&sWindowTemplate[MAIN_MENU_WINDOW_ERROR]);
|
||||
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_ERROR, FONT_2, 0, 2, sTextColor1, 2, str);
|
||||
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_ERROR, FONT_NORMAL, 0, 2, sTextColor1, 2, str);
|
||||
PutWindowTilemap(MAIN_MENU_WINDOW_ERROR);
|
||||
CopyWindowToVram(MAIN_MENU_WINDOW_ERROR, COPYWIN_GFX);
|
||||
SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE( 19, 221));
|
||||
@@ -620,12 +620,12 @@ static void PrintPlayerName(void)
|
||||
s32 i;
|
||||
u8 name[PLAYER_NAME_LENGTH + 1];
|
||||
u8 *ptr;
|
||||
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_2, 2, 18, sTextColor2, -1, gText_Player);
|
||||
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_NORMAL, 2, 18, sTextColor2, -1, gText_Player);
|
||||
ptr = name;
|
||||
for (i = 0; i < PLAYER_NAME_LENGTH; i++)
|
||||
*ptr++ = gSaveBlock2Ptr->playerName[i];
|
||||
*ptr = EOS;
|
||||
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_2, 62, 18, sTextColor2, -1, name);
|
||||
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_NORMAL, 62, 18, sTextColor2, -1, name);
|
||||
}
|
||||
|
||||
static void PrintPlayTime(void)
|
||||
@@ -633,11 +633,11 @@ static void PrintPlayTime(void)
|
||||
u8 strbuf[30];
|
||||
u8 *ptr;
|
||||
|
||||
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_2, 2, 34, sTextColor2, -1, gText_Time);
|
||||
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_NORMAL, 2, 34, sTextColor2, -1, gText_Time);
|
||||
ptr = ConvertIntToDecimalStringN(strbuf, gSaveBlock2Ptr->playTimeHours, STR_CONV_MODE_LEFT_ALIGN, 3);
|
||||
*ptr++ = CHAR_COLON;
|
||||
ConvertIntToDecimalStringN(ptr, gSaveBlock2Ptr->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2);
|
||||
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_2, 62, 34, sTextColor2, -1, strbuf);
|
||||
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_NORMAL, 62, 34, sTextColor2, -1, strbuf);
|
||||
}
|
||||
|
||||
static void PrintDexCount(void)
|
||||
@@ -651,10 +651,10 @@ static void PrintDexCount(void)
|
||||
dexcount = GetNationalPokedexCount(FLAG_GET_CAUGHT);
|
||||
else
|
||||
dexcount = GetKantoPokedexCount(FLAG_GET_CAUGHT);
|
||||
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_2, 2, 50, sTextColor2, -1, gText_Pokedex);
|
||||
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_NORMAL, 2, 50, sTextColor2, -1, gText_Pokedex);
|
||||
ptr = ConvertIntToDecimalStringN(strbuf, dexcount, STR_CONV_MODE_LEFT_ALIGN, 3);
|
||||
StringAppend(ptr, gTextJPDummy_Hiki);
|
||||
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_2, 62, 50, sTextColor2, -1, strbuf);
|
||||
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_NORMAL, 62, 50, sTextColor2, -1, strbuf);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -669,10 +669,10 @@ static void PrintBadgeCount(void)
|
||||
if (FlagGet(flagId))
|
||||
nbadges++;
|
||||
}
|
||||
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_2, 2, 66, sTextColor2, -1, gText_Badges);
|
||||
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_NORMAL, 2, 66, sTextColor2, -1, gText_Badges);
|
||||
ptr = ConvertIntToDecimalStringN(strbuf, nbadges, STR_CONV_MODE_LEADING_ZEROS, 1);
|
||||
StringAppend(ptr, gTextJPDummy_Ko);
|
||||
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_2, 62, 66, sTextColor2, -1, strbuf);
|
||||
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, FONT_NORMAL, 62, 66, sTextColor2, -1, strbuf);
|
||||
}
|
||||
|
||||
static void LoadUserFrameToBg(u8 bgId)
|
||||
|
||||
@@ -197,9 +197,9 @@ static void MapNamePopupPrintMapNameOnWindow(u16 windowId)
|
||||
ptr = MapNamePopupAppendFloorNum(ptr, gMapHeader.floorNum);
|
||||
maxWidth = gMapHeader.floorNum != 0x7F ? 152 : 176;
|
||||
}
|
||||
xpos = (maxWidth - GetStringWidth(FONT_2, mapName, -1)) / 2;
|
||||
xpos = (maxWidth - GetStringWidth(FONT_NORMAL, mapName, -1)) / 2;
|
||||
FillWindowPixelBuffer(windowId, PIXEL_FILL(1));
|
||||
AddTextPrinterParameterized(windowId, FONT_2, mapName, xpos, 2, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(windowId, FONT_NORMAL, mapName, xpos, 2, TEXT_SKIP_DRAW, NULL);
|
||||
}
|
||||
|
||||
static u8 *MapNamePopupAppendFloorNum(u8 *dest, s8 floorNum)
|
||||
|
||||
@@ -457,8 +457,8 @@ u16 MapPreview_CreateMapNameWindow(u8 mapsec)
|
||||
color[1] = TEXT_COLOR_RED; // Access violation
|
||||
color[2] = TEXT_COLOR_LIGHT_GRAY; // Access violation
|
||||
GetMapName(gStringVar4, mapsec, 0);
|
||||
xctr = 104 - GetStringWidth(FONT_2, gStringVar4, 0);
|
||||
AddTextPrinterParameterized4(windowId, FONT_2, xctr / 2, 2, 0, 0, color/* Access violation */, -1, gStringVar4);
|
||||
xctr = 104 - GetStringWidth(FONT_NORMAL, gStringVar4, 0);
|
||||
AddTextPrinterParameterized4(windowId, FONT_NORMAL, xctr / 2, 2, 0, 0, color/* Access violation */, -1, gStringVar4);
|
||||
return windowId;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,148 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "mevent.h"
|
||||
#include "random.h"
|
||||
#include "event_data.h"
|
||||
#include "menews_jisan.h"
|
||||
#include "constants/items.h"
|
||||
|
||||
static u32 GetMENewsJisanRewardItem(struct WonderNewsMetadata *);
|
||||
static void MENewsJisanIncrementCounterUnk0_5(struct WonderNewsMetadata *);
|
||||
static u32 GetMENewsJisanState(struct WonderNewsMetadata *);
|
||||
static void MENewsJisanIncrementCounterUnk0_2(struct WonderNewsMetadata *);
|
||||
static void MENewsJisanResetCounterUnk0_2(struct WonderNewsMetadata *);
|
||||
|
||||
void MENewsJisan_SetRandomReward(u32 a0)
|
||||
{
|
||||
struct WonderNewsMetadata *r5 = GetMENewsJisanStructPtr();
|
||||
|
||||
r5->unk_0_0 = a0;
|
||||
switch (a0)
|
||||
{
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
r5->berry = (Random() % 15) + ITEM_TO_BERRY(ITEM_RAZZ_BERRY);
|
||||
break;
|
||||
case 3:
|
||||
r5->berry = (Random() % 15) + ITEM_TO_BERRY(ITEM_CHERI_BERRY);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void MENewsJisanReset(void)
|
||||
{
|
||||
struct WonderNewsMetadata *r5 = GetMENewsJisanStructPtr();
|
||||
|
||||
r5->unk_0_0 = 0;
|
||||
r5->unk_0_2 = 0;
|
||||
r5->unk_0_5 = 0;
|
||||
r5->berry = 0;
|
||||
VarSet(VAR_MENEWS_JISAN_STEP_COUNTER, 0);
|
||||
}
|
||||
|
||||
void MENewsJisanStepCounter(void)
|
||||
{
|
||||
u16 *r4 = GetVarPointer(VAR_MENEWS_JISAN_STEP_COUNTER);
|
||||
struct WonderNewsMetadata *r2 = GetMENewsJisanStructPtr();
|
||||
struct WonderNewsMetadata r0 = *r2;
|
||||
|
||||
if ((u8)r0.unk_0_5 > 4 && ++(*r4) >= 500)
|
||||
{
|
||||
r2->unk_0_5 = 0;
|
||||
*r4 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
u16 GetMENewsJisanItemAndState(void)
|
||||
{
|
||||
u16 *r6 = &gSpecialVar_Result;
|
||||
struct WonderNewsMetadata *r4 = GetMENewsJisanStructPtr();
|
||||
u16 r5;
|
||||
|
||||
if (!IsMysteryGiftEnabled() || !ValidateReceivedWonderNews())
|
||||
return 0;
|
||||
|
||||
r5 = GetMENewsJisanState(r4);
|
||||
|
||||
switch (r5)
|
||||
{
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
*r6 = GetMENewsJisanRewardItem(r4);
|
||||
break;
|
||||
case 2:
|
||||
*r6 = GetMENewsJisanRewardItem(r4);
|
||||
break;
|
||||
case 3:
|
||||
break;
|
||||
case 4:
|
||||
*r6 = GetMENewsJisanRewardItem(r4);
|
||||
MENewsJisanIncrementCounterUnk0_2(r4);
|
||||
break;
|
||||
case 5:
|
||||
*r6 = GetMENewsJisanRewardItem(r4);
|
||||
MENewsJisanResetCounterUnk0_2(r4);
|
||||
break;
|
||||
case 6:
|
||||
break;
|
||||
}
|
||||
|
||||
return r5;
|
||||
}
|
||||
|
||||
static u32 GetMENewsJisanRewardItem(struct WonderNewsMetadata *a0)
|
||||
{
|
||||
u32 r4;
|
||||
|
||||
a0->unk_0_0 = 0;
|
||||
r4 = a0->berry + FIRST_BERRY_INDEX - 1;
|
||||
a0->berry = 0;
|
||||
MENewsJisanIncrementCounterUnk0_5(a0);
|
||||
return r4;
|
||||
}
|
||||
|
||||
static void MENewsJisanResetCounterUnk0_2(struct WonderNewsMetadata *a0)
|
||||
{
|
||||
a0->unk_0_2 = 0;
|
||||
}
|
||||
|
||||
static void MENewsJisanIncrementCounterUnk0_2(struct WonderNewsMetadata *a0)
|
||||
{
|
||||
a0->unk_0_2++;
|
||||
if ((u8)a0->unk_0_2 > 4)
|
||||
a0->unk_0_2 = 4;
|
||||
}
|
||||
|
||||
static void MENewsJisanIncrementCounterUnk0_5(struct WonderNewsMetadata *a0)
|
||||
{
|
||||
a0->unk_0_5++;
|
||||
if ((u8)a0->unk_0_5 > 5)
|
||||
a0->unk_0_5 = 5;
|
||||
}
|
||||
|
||||
static u32 GetMENewsJisanState(struct WonderNewsMetadata *a0)
|
||||
{
|
||||
struct WonderNewsMetadata r0;
|
||||
if ((u8)a0->unk_0_5 == 5)
|
||||
return 6;
|
||||
|
||||
r0 = *a0;
|
||||
switch (r0.unk_0_0)
|
||||
{
|
||||
case 0:
|
||||
return 3;
|
||||
case 1:
|
||||
return 1;
|
||||
case 2:
|
||||
return 2;
|
||||
case 3:
|
||||
if ((u8)r0.unk_0_2 < 3)
|
||||
return 4;
|
||||
return 5;
|
||||
default:
|
||||
AGB_ASSERT_EX(0, ABSPATH("menews_jisan.c"), 383);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
+24
-24
@@ -34,7 +34,7 @@ static void WindowFunc_DrawStdFrameWithCustomTileAndPalette(u8 bg, u8 tilemapLef
|
||||
static void WindowFunc_ClearStdWindowAndFrameToTransparent(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 paletteNum);
|
||||
static u8 MultichoiceGrid_MoveCursor(s8 deltaX, s8 deltaY);
|
||||
|
||||
static const u8 gUnknown_8456618[3] = {15, 1, 2};
|
||||
static const u8 sTopBarWindowTextColors[3] = {15, 1, 2};
|
||||
|
||||
void DrawDialogFrameWithCustomTileAndPalette(u8 windowId, bool8 copyToVram, u16 tileNum, u8 paletteNum)
|
||||
{
|
||||
@@ -192,8 +192,8 @@ void TopBarWindowPrintString(const u8 *string, u8 unused, bool8 copyToVram)
|
||||
{
|
||||
PutWindowTilemap(sTopBarWindowId);
|
||||
FillWindowPixelBuffer(sTopBarWindowId, PIXEL_FILL(15));
|
||||
width = GetStringWidth(FONT_0, string, 0);
|
||||
AddTextPrinterParameterized3(sTopBarWindowId, FONT_0, -20 - width, 1, gUnknown_8456618, 0, string);
|
||||
width = GetStringWidth(FONT_SMALL, string, 0);
|
||||
AddTextPrinterParameterized3(sTopBarWindowId, FONT_SMALL, -20 - width, 1, sTopBarWindowTextColors, 0, string);
|
||||
if (copyToVram)
|
||||
CopyWindowToVram(sTopBarWindowId, COPYWIN_FULL);
|
||||
}
|
||||
@@ -223,10 +223,10 @@ void TopBarWindowPrintTwoStrings(const u8 *string, const u8 *string2, bool8 fgCo
|
||||
FillWindowPixelBuffer(sTopBarWindowId, PIXEL_FILL(15));
|
||||
if (string2)
|
||||
{
|
||||
width = GetStringWidth(FONT_0, string2, 0);
|
||||
AddTextPrinterParameterized3(sTopBarWindowId, FONT_0, -20 - width, 1, color, 0, string2);
|
||||
width = GetStringWidth(FONT_SMALL, string2, 0);
|
||||
AddTextPrinterParameterized3(sTopBarWindowId, FONT_SMALL, -20 - width, 1, color, 0, string2);
|
||||
}
|
||||
AddTextPrinterParameterized4(sTopBarWindowId, FONT_1, 4, 1, 0, 0, color, 0, string);
|
||||
AddTextPrinterParameterized4(sTopBarWindowId, FONT_NORMAL_COPY_1, 4, 1, 0, 0, color, 0, string);
|
||||
if (copyToVram)
|
||||
CopyWindowToVram(sTopBarWindowId, COPYWIN_FULL);
|
||||
}
|
||||
@@ -287,8 +287,8 @@ u8 Menu_InitCursor(u8 windowId, u8 fontId, u8 left, u8 top, u8 cursorHeight, u8
|
||||
return Menu_InitCursorInternal(windowId, fontId, left, top, cursorHeight, numChoices, initialCursorPos, 0);
|
||||
}
|
||||
|
||||
// not used
|
||||
static u8 sub_810F818(u8 windowId, u8 fontId, u8 left, u8 top, u8 numChoices, u8 initialCursorPos)
|
||||
// Unused
|
||||
static u8 InitMenuDefaultCursorHeight(u8 windowId, u8 fontId, u8 left, u8 top, u8 numChoices, u8 initialCursorPos)
|
||||
{
|
||||
return Menu_InitCursor(windowId, fontId, left, top, GetMenuCursorDimensionByFont(fontId, 1), numChoices, initialCursorPos);
|
||||
}
|
||||
@@ -501,8 +501,8 @@ void AddItemMenuActionTextPrinters(u8 windowId, u8 fontId, u8 left, u8 top, u8 l
|
||||
CopyWindowToVram(windowId, COPYWIN_GFX);
|
||||
}
|
||||
|
||||
// not used
|
||||
static void sub_810FDE4(u8 windowId, u8 fontId, u8 lineHeight, u8 itemCount, const struct MenuAction *strs, const u8 *orderArray)
|
||||
// Unused
|
||||
static void PrintMenuActionTextsAtTopById(u8 windowId, u8 fontId, u8 lineHeight, u8 itemCount, const struct MenuAction *strs, const u8 *orderArray)
|
||||
{
|
||||
AddItemMenuActionTextPrinters(windowId, fontId, GetFontAttribute(fontId, FONTATTR_MAX_LETTER_WIDTH), 0, GetFontAttribute(fontId, FONTATTR_LETTER_SPACING), lineHeight, itemCount, strs, orderArray);
|
||||
}
|
||||
@@ -705,8 +705,8 @@ static u8 MultichoiceGrid_MoveCursorIfValid(s8 deltaX, s8 deltaY)
|
||||
}
|
||||
}
|
||||
|
||||
// not used
|
||||
static s8 sub_81105A0(void)
|
||||
// Unused
|
||||
static s8 Menu_ProcessGridInput_NoSoundLimit(void)
|
||||
{
|
||||
if (JOY_NEW(A_BUTTON))
|
||||
{
|
||||
@@ -729,13 +729,13 @@ static s8 sub_81105A0(void)
|
||||
MultichoiceGrid_MoveCursor(0, 1);
|
||||
return MENU_NOTHING_CHOSEN;
|
||||
}
|
||||
else if (JOY_NEW(DPAD_LEFT) || GetLRKeysState() == 1)
|
||||
else if (JOY_NEW(DPAD_LEFT) || GetLRKeysPressed() == MENU_L_PRESSED)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
MultichoiceGrid_MoveCursor(-1, 0);
|
||||
return MENU_NOTHING_CHOSEN;
|
||||
}
|
||||
else if (JOY_NEW(DPAD_RIGHT) || GetLRKeysState() == 2)
|
||||
else if (JOY_NEW(DPAD_RIGHT) || GetLRKeysPressed() == MENU_R_PRESSED)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
MultichoiceGrid_MoveCursor(1, 0);
|
||||
@@ -769,13 +769,13 @@ s8 Menu_ProcessInputGridLayout(void)
|
||||
PlaySE(SE_SELECT);
|
||||
return MENU_NOTHING_CHOSEN;
|
||||
}
|
||||
else if (JOY_NEW(DPAD_LEFT) || GetLRKeysState() == 1)
|
||||
else if (JOY_NEW(DPAD_LEFT) || GetLRKeysPressed() == MENU_L_PRESSED)
|
||||
{
|
||||
if (oldPos != MultichoiceGrid_MoveCursorIfValid(-1, 0))
|
||||
PlaySE(SE_SELECT);
|
||||
return MENU_NOTHING_CHOSEN;
|
||||
}
|
||||
else if (JOY_NEW(DPAD_RIGHT) || GetLRKeysState() == 2)
|
||||
else if (JOY_NEW(DPAD_RIGHT) || GetLRKeysPressed() == MENU_R_PRESSED)
|
||||
{
|
||||
if (oldPos != MultichoiceGrid_MoveCursorIfValid(1, 0))
|
||||
PlaySE(SE_SELECT);
|
||||
@@ -784,8 +784,8 @@ s8 Menu_ProcessInputGridLayout(void)
|
||||
return MENU_NOTHING_CHOSEN;
|
||||
}
|
||||
|
||||
// not used
|
||||
static s8 sub_81106F4(void)
|
||||
// Unused
|
||||
static s8 Menu_ProcessGridInputRepeat_NoSoundLimit(void)
|
||||
{
|
||||
if (JOY_NEW(A_BUTTON))
|
||||
{
|
||||
@@ -808,13 +808,13 @@ static s8 sub_81106F4(void)
|
||||
MultichoiceGrid_MoveCursor(0, 1);
|
||||
return MENU_NOTHING_CHOSEN;
|
||||
}
|
||||
else if (JOY_REPT(DPAD_ANY) == DPAD_LEFT || GetLRKeysPressedAndHeld() == 1)
|
||||
else if (JOY_REPT(DPAD_ANY) == DPAD_LEFT || GetLRKeysPressedAndHeld() == MENU_L_PRESSED)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
MultichoiceGrid_MoveCursor(-1, 0);
|
||||
return MENU_NOTHING_CHOSEN;
|
||||
}
|
||||
else if (JOY_REPT(DPAD_ANY) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == 2)
|
||||
else if (JOY_REPT(DPAD_ANY) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == MENU_R_PRESSED)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
MultichoiceGrid_MoveCursor(1, 0);
|
||||
@@ -824,8 +824,8 @@ static s8 sub_81106F4(void)
|
||||
return MENU_NOTHING_CHOSEN;
|
||||
}
|
||||
|
||||
// not used
|
||||
static s8 sub_81107A0(void)
|
||||
// Unused
|
||||
static s8 Menu_ProcessGridInputRepeat(void)
|
||||
{
|
||||
u8 oldPos = sMenu.cursorPos;
|
||||
|
||||
@@ -850,13 +850,13 @@ static s8 sub_81107A0(void)
|
||||
PlaySE(SE_SELECT);
|
||||
return MENU_NOTHING_CHOSEN;
|
||||
}
|
||||
else if (JOY_REPT(DPAD_ANY) == DPAD_LEFT || GetLRKeysPressedAndHeld() == 1)
|
||||
else if (JOY_REPT(DPAD_ANY) == DPAD_LEFT || GetLRKeysPressedAndHeld() == MENU_L_PRESSED)
|
||||
{
|
||||
if (oldPos != MultichoiceGrid_MoveCursorIfValid(-1, 0))
|
||||
PlaySE(SE_SELECT);
|
||||
return MENU_NOTHING_CHOSEN;
|
||||
}
|
||||
else if (JOY_REPT(DPAD_ANY) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == 2)
|
||||
else if (JOY_REPT(DPAD_ANY) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == MENU_R_PRESSED)
|
||||
{
|
||||
if (oldPos != MultichoiceGrid_MoveCursorIfValid(1, 0))
|
||||
PlaySE(SE_SELECT);
|
||||
|
||||
+2
-2
@@ -500,11 +500,11 @@ void Menu_PrintFormatIntlPlayerName(u8 windowId, const u8 * src, u16 x, u16 y)
|
||||
StringExpandPlaceholders(gStringVar4, src);
|
||||
if (i != 5)
|
||||
{
|
||||
AddTextPrinterParameterized(windowId, FONT_2, gStringVar4, x, y, 0xFF, NULL);
|
||||
AddTextPrinterParameterized(windowId, FONT_NORMAL, gStringVar4, x, y, 0xFF, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
AddTextPrinterParameterized5(windowId, FONT_2, gStringVar4, x, y, 0xFF, NULL, 0, 0);
|
||||
AddTextPrinterParameterized5(windowId, FONT_NORMAL, gStringVar4, x, y, 0xFF, NULL, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+34
-39
@@ -12,15 +12,15 @@
|
||||
#include "constants/items.h"
|
||||
#include "constants/maps.h"
|
||||
|
||||
static EWRAM_DATA const struct YesNoFuncTable *gUnknown_20399C8 = NULL;
|
||||
static EWRAM_DATA TaskFunc gUnknown_20399CC = NULL;
|
||||
static EWRAM_DATA u8 gUnknown_20399D0 = {0};
|
||||
static EWRAM_DATA const struct YesNoFuncTable *sYesNo = NULL;
|
||||
static EWRAM_DATA TaskFunc sMessageNextTask = NULL;
|
||||
static EWRAM_DATA u8 sMessageWindowId = {0};
|
||||
|
||||
static void Task_ContinueTaskAfterMessagePrints(u8 taskId);
|
||||
|
||||
void DisplayMessageAndContinueTask(u8 taskId, u8 windowId, u16 tileNum, u8 paletteNum, u8 fontId, u8 textSpeed, const u8 *string, void *taskFunc)
|
||||
{
|
||||
gUnknown_20399D0 = windowId;
|
||||
sMessageWindowId = windowId;
|
||||
DrawDialogFrameWithCustomTileAndPalette(windowId, TRUE, tileNum, paletteNum);
|
||||
|
||||
if (string != gStringVar4)
|
||||
@@ -28,7 +28,7 @@ void DisplayMessageAndContinueTask(u8 taskId, u8 windowId, u16 tileNum, u8 palet
|
||||
|
||||
gTextFlags.canABSpeedUpPrint = 1;
|
||||
AddTextPrinterParameterized2(windowId, fontId, gStringVar4, textSpeed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
gUnknown_20399CC = taskFunc;
|
||||
sMessageNextTask = taskFunc;
|
||||
gTasks[taskId].func = Task_ContinueTaskAfterMessagePrints;
|
||||
}
|
||||
|
||||
@@ -40,8 +40,8 @@ bool16 RunTextPrinters_CheckActive(u8 textPrinterId)
|
||||
|
||||
static void Task_ContinueTaskAfterMessagePrints(u8 taskId)
|
||||
{
|
||||
if (!RunTextPrinters_CheckActive(gUnknown_20399D0))
|
||||
gUnknown_20399CC(taskId);
|
||||
if (!RunTextPrinters_CheckActive(sMessageWindowId))
|
||||
sMessageNextTask(taskId);
|
||||
}
|
||||
|
||||
static void Task_CallYesOrNoCallback(u8 taskId)
|
||||
@@ -50,12 +50,12 @@ static void Task_CallYesOrNoCallback(u8 taskId)
|
||||
{
|
||||
case 0:
|
||||
PlaySE(SE_SELECT);
|
||||
gTasks[taskId].func = gUnknown_20399C8->yesFunc;
|
||||
gTasks[taskId].func = sYesNo->yesFunc;
|
||||
break;
|
||||
case 1:
|
||||
case MENU_B_PRESSED:
|
||||
PlaySE(SE_SELECT);
|
||||
gTasks[taskId].func = gUnknown_20399C8->noFunc;
|
||||
gTasks[taskId].func = sYesNo->noFunc;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -63,18 +63,18 @@ static void Task_CallYesOrNoCallback(u8 taskId)
|
||||
void CreateYesNoMenuWithCallbacks(u8 taskId, const struct WindowTemplate *template, u8 fontId, u8 left, u8 top, u16 tileStart, u8 palette, const struct YesNoFuncTable *yesNo)
|
||||
{
|
||||
CreateYesNoMenu(template, fontId, left, top, tileStart, palette, 0);
|
||||
gUnknown_20399C8 = yesNo;
|
||||
sYesNo = yesNo;
|
||||
gTasks[taskId].func = Task_CallYesOrNoCallback;
|
||||
}
|
||||
|
||||
u8 GetLRKeysState(void)
|
||||
u8 GetLRKeysPressed(void)
|
||||
{
|
||||
if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)
|
||||
{
|
||||
if (JOY_NEW(L_BUTTON))
|
||||
return 1;
|
||||
return MENU_L_PRESSED;
|
||||
if (JOY_NEW(R_BUTTON))
|
||||
return 2;
|
||||
return MENU_R_PRESSED;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -84,37 +84,34 @@ u8 GetLRKeysPressedAndHeld(void)
|
||||
if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)
|
||||
{
|
||||
if (JOY_REPT(L_BUTTON))
|
||||
return 1;
|
||||
return MENU_L_PRESSED;
|
||||
if (JOY_REPT(R_BUTTON))
|
||||
return 2;
|
||||
return MENU_R_PRESSED;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool8 itemid_link_can_give_berry(u16 itemId)
|
||||
bool8 IsHoldingItemAllowed(u16 itemId)
|
||||
{
|
||||
if (itemId != ITEM_ENIGMA_BERRY)
|
||||
return TRUE;
|
||||
else if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(TRADE_CENTER)
|
||||
&& gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRADE_CENTER))
|
||||
// Enigma Berry can't be held in link areas
|
||||
if (itemId == ITEM_ENIGMA_BERRY
|
||||
&& ((gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(TRADE_CENTER)
|
||||
&& gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRADE_CENTER))
|
||||
|| InUnionRoom() == TRUE))
|
||||
return FALSE;
|
||||
else if (InUnionRoom() != TRUE)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 CanWriteMailHere(u16 itemId)
|
||||
bool8 IsWritingMailAllowed(u16 itemId)
|
||||
{
|
||||
if (IsUpdateLinkStateCBActive() != TRUE && InUnionRoom() != TRUE)
|
||||
return TRUE;
|
||||
else if (ItemIsMail(itemId) != TRUE)
|
||||
return TRUE;
|
||||
else
|
||||
if ((IsUpdateLinkStateCBActive() == TRUE || InUnionRoom() == TRUE) && ItemIsMail(itemId) == TRUE)
|
||||
return FALSE;
|
||||
else
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 MenuHelpers_LinkSomething(void)
|
||||
bool8 MenuHelpers_IsLinkActive(void)
|
||||
{
|
||||
if (IsUpdateLinkStateCBActive() == TRUE || gReceivedRemoteLinkPlayers == 1)
|
||||
return TRUE;
|
||||
@@ -122,22 +119,20 @@ bool8 MenuHelpers_LinkSomething(void)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 MenuHelpers_CallLinkSomething(void)
|
||||
bool8 IsActiveOverworldLinkBusy(void)
|
||||
{
|
||||
if (!MenuHelpers_LinkSomething())
|
||||
if (!MenuHelpers_IsLinkActive())
|
||||
return FALSE;
|
||||
else
|
||||
return (u8)Overworld_LinkRecvQueueLengthMoreThan2();
|
||||
}
|
||||
|
||||
bool8 sub_80BF748(void)
|
||||
bool8 MenuHelpers_ShouldWaitForLinkRecv(void)
|
||||
{
|
||||
if (MenuHelpers_CallLinkSomething() == TRUE)
|
||||
if (IsActiveOverworldLinkBusy() == TRUE || IsLinkRecvQueueAtOverworldMax() == TRUE)
|
||||
return TRUE;
|
||||
else if (LinkRecvQueueLengthMoreThan2() != TRUE)
|
||||
return FALSE;
|
||||
else
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void SetVBlankHBlankCallbacksToNull(void)
|
||||
@@ -242,7 +237,7 @@ bool8 AdjustQuantityAccordingToDPadInput(s16 *quantity_p, u16 qmax)
|
||||
u8 GetDialogBoxFontId(void)
|
||||
{
|
||||
if (ContextNpcGetTextColor() == NPC_TEXT_COLOR_MALE)
|
||||
return FONT_4;
|
||||
return FONT_MALE;
|
||||
else
|
||||
return FONT_5;
|
||||
return FONT_FEMALE;
|
||||
}
|
||||
|
||||
-1029
File diff suppressed because it is too large
Load Diff
@@ -1,290 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "gflib.h"
|
||||
#include "decompress.h"
|
||||
#include "overworld.h"
|
||||
#include "script.h"
|
||||
#include "battle_tower.h"
|
||||
#include "mystery_event_script.h"
|
||||
#include "mevent.h"
|
||||
#include "mevent_server.h"
|
||||
|
||||
static EWRAM_DATA struct mevent_client * s_mevent_client_ptr = NULL;
|
||||
|
||||
static void mevent_client_init(struct mevent_client *, u32, u32);
|
||||
static u32 mevent_client_exec(struct mevent_client *);
|
||||
static void mevent_client_free_resources(struct mevent_client *);
|
||||
|
||||
extern const struct mevent_client_cmd gMEventClientScript_InitialListen[];
|
||||
|
||||
void mevent_client_do_init(void)
|
||||
{
|
||||
s_mevent_client_ptr = AllocZeroed(sizeof(struct mevent_client));
|
||||
mevent_client_init(s_mevent_client_ptr, 1, 0);
|
||||
}
|
||||
|
||||
u32 mevent_client_do_exec(u16 * a0)
|
||||
{
|
||||
u32 result;
|
||||
if (s_mevent_client_ptr == NULL)
|
||||
return 6;
|
||||
result = mevent_client_exec(s_mevent_client_ptr);
|
||||
if (result == 6)
|
||||
{
|
||||
*a0 = s_mevent_client_ptr->param;
|
||||
mevent_client_free_resources(s_mevent_client_ptr);
|
||||
Free(s_mevent_client_ptr);
|
||||
s_mevent_client_ptr = NULL;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void mevent_client_inc_flag(void)
|
||||
{
|
||||
s_mevent_client_ptr->flag++;
|
||||
}
|
||||
|
||||
void *mevent_client_get_buffer(void)
|
||||
{
|
||||
return s_mevent_client_ptr->buffer;
|
||||
}
|
||||
|
||||
void mevent_client_set_param(u32 a0)
|
||||
{
|
||||
s_mevent_client_ptr->param = a0;
|
||||
}
|
||||
|
||||
static void mevent_client_init(struct mevent_client * svr, u32 sendPlayerNo, u32 recvPlayerNo)
|
||||
{
|
||||
svr->unk_00 = 0;
|
||||
svr->mainseqno = 0;
|
||||
svr->flag = 0;
|
||||
svr->sendBuffer = AllocZeroed(ME_SEND_BUF_SIZE);
|
||||
svr->recvBuffer = AllocZeroed(ME_SEND_BUF_SIZE);
|
||||
svr->cmdBuffer = AllocZeroed(ME_SEND_BUF_SIZE);
|
||||
svr->buffer = AllocZeroed(0x40);
|
||||
mevent_srv_sub_init(&svr->manager, sendPlayerNo, recvPlayerNo);
|
||||
}
|
||||
|
||||
static void mevent_client_free_resources(struct mevent_client * svr)
|
||||
{
|
||||
Free(svr->sendBuffer);
|
||||
Free(svr->recvBuffer);
|
||||
Free(svr->cmdBuffer);
|
||||
Free(svr->buffer);
|
||||
}
|
||||
|
||||
static void mevent_client_jmp_buffer(struct mevent_client * svr)
|
||||
{
|
||||
memcpy(svr->cmdBuffer, svr->recvBuffer, ME_SEND_BUF_SIZE);
|
||||
svr->cmdidx = 0;
|
||||
}
|
||||
|
||||
static void mevent_client_send_word(struct mevent_client * svr, u32 ident, u32 word)
|
||||
{
|
||||
CpuFill32(0, svr->sendBuffer, ME_SEND_BUF_SIZE);
|
||||
*(u32 *)svr->sendBuffer = word;
|
||||
mevent_srv_sub_init_send(&svr->manager, ident, svr->sendBuffer, sizeof(u32));
|
||||
}
|
||||
|
||||
static u32 client_mainseq_0(struct mevent_client * svr)
|
||||
{
|
||||
// init
|
||||
memcpy(svr->cmdBuffer, gMEventClientScript_InitialListen, ME_SEND_BUF_SIZE);
|
||||
svr->cmdidx = 0;
|
||||
svr->mainseqno = 4;
|
||||
svr->flag = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static u32 client_mainseq_1(struct mevent_client * svr)
|
||||
{
|
||||
// done
|
||||
return 6;
|
||||
}
|
||||
|
||||
static u32 client_mainseq_2(struct mevent_client * svr)
|
||||
{
|
||||
// do recv
|
||||
if (mevent_srv_sub_recv(&svr->manager))
|
||||
{
|
||||
svr->mainseqno = 4;
|
||||
svr->flag = 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static u32 client_mainseq_3(struct mevent_client * svr)
|
||||
{
|
||||
// do send
|
||||
if (mevent_srv_sub_send(&svr->manager))
|
||||
{
|
||||
svr->mainseqno = 4;
|
||||
svr->flag = 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static u32 client_mainseq_4(struct mevent_client * svr)
|
||||
{
|
||||
// process command
|
||||
struct mevent_client_cmd * cmd = &svr->cmdBuffer[svr->cmdidx];
|
||||
++svr->cmdidx;
|
||||
switch (cmd->instr)
|
||||
{
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
svr->param = cmd->parameter;
|
||||
svr->mainseqno = 1;
|
||||
svr->flag = 0;
|
||||
break;
|
||||
case 2:
|
||||
mevent_srv_sub_init_recv(&svr->manager, cmd->parameter, svr->recvBuffer);
|
||||
svr->mainseqno = 2;
|
||||
svr->flag = 0;
|
||||
break;
|
||||
case 3:
|
||||
svr->mainseqno = 3;
|
||||
svr->flag = 0;
|
||||
break;
|
||||
case 20:
|
||||
mevent_srv_sub_init_send(&svr->manager, 0x14, svr->sendBuffer, 0);
|
||||
svr->mainseqno = 3;
|
||||
svr->flag = 0;
|
||||
break;
|
||||
case 19:
|
||||
mevent_client_send_word(svr, 0x12, GetGameStat(cmd->parameter));
|
||||
svr->mainseqno = 3;
|
||||
svr->flag = 0;
|
||||
break;
|
||||
case 6:
|
||||
if (svr->param == 0)
|
||||
mevent_client_jmp_buffer(svr);
|
||||
break;
|
||||
case 7:
|
||||
if (svr->param == 1)
|
||||
mevent_client_jmp_buffer(svr);
|
||||
break;
|
||||
case 4:
|
||||
mevent_client_jmp_buffer(svr);
|
||||
break;
|
||||
case 5:
|
||||
memcpy(svr->buffer, svr->recvBuffer, 0x40);
|
||||
svr->mainseqno = 5;
|
||||
svr->flag = 0;
|
||||
return 2;
|
||||
case 11:
|
||||
memcpy(svr->buffer, svr->recvBuffer, 0x40);
|
||||
svr->mainseqno = 5;
|
||||
svr->flag = 0;
|
||||
return 3;
|
||||
case 12:
|
||||
memcpy(svr->buffer, svr->recvBuffer, 0x40);
|
||||
svr->mainseqno = 5;
|
||||
svr->flag = 0;
|
||||
return 5;
|
||||
case 13:
|
||||
svr->mainseqno = 5;
|
||||
svr->flag = 0;
|
||||
return 4;
|
||||
case 8:
|
||||
BuildMEventClientHeader(svr->sendBuffer);
|
||||
mevent_srv_sub_init_send(&svr->manager, 0x11, svr->sendBuffer, sizeof(struct MEventClientHeaderStruct));
|
||||
break;
|
||||
case 14:
|
||||
mevent_client_send_word(svr, 0x13, svr->param);
|
||||
break;
|
||||
case 10:
|
||||
OverwriteSavedWonderCardWithReceivedCard(svr->recvBuffer);
|
||||
break;
|
||||
case 9:
|
||||
if (!MEvent_HaveAlreadyReceivedWonderNews(svr->recvBuffer))
|
||||
{
|
||||
OverwriteSavedWonderNewsWithReceivedNews(svr->recvBuffer);
|
||||
mevent_client_send_word(svr, 0x13, 0);
|
||||
}
|
||||
else
|
||||
// Other trainer already has news
|
||||
mevent_client_send_word(svr, 0x13, 1);
|
||||
break;
|
||||
case 15:
|
||||
svr->mainseqno = 6;
|
||||
svr->flag = 0;
|
||||
break;
|
||||
case 16:
|
||||
MEvent_ReceiveDistributionMon(svr->recvBuffer);
|
||||
break;
|
||||
case 17:
|
||||
InitRamScript_NoObjectEvent(svr->recvBuffer, 1000);
|
||||
break;
|
||||
case 18:
|
||||
memcpy(&gSaveBlock2Ptr->battleTower.ereaderTrainer, svr->recvBuffer, sizeof(struct BattleTowerEReaderTrainer));
|
||||
ValidateEReaderTrainer();
|
||||
break;
|
||||
case 21:
|
||||
memcpy(gDecompressionBuffer, svr->recvBuffer, ME_SEND_BUF_SIZE);
|
||||
svr->mainseqno = 7;
|
||||
svr->flag = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static u32 client_mainseq_5(struct mevent_client * svr)
|
||||
{
|
||||
// wait flag
|
||||
if (svr->flag)
|
||||
{
|
||||
svr->mainseqno = 4;
|
||||
svr->flag = 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static u32 client_mainseq_6(struct mevent_client * svr)
|
||||
{
|
||||
// Run mevent buffer script
|
||||
switch (svr->flag)
|
||||
{
|
||||
case 0:
|
||||
MEventScript_InitContext(svr->recvBuffer);
|
||||
++svr->flag;
|
||||
break;
|
||||
case 1:
|
||||
if (!MEventScript_Run(&svr->param))
|
||||
{
|
||||
svr->mainseqno = 4;
|
||||
svr->flag = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static u32 client_mainseq_7(struct mevent_client * svr)
|
||||
{
|
||||
// exec arbitrary code
|
||||
u32 (*func)(u32 *, struct SaveBlock2 *, struct SaveBlock1 *) = (void *)gDecompressionBuffer;
|
||||
if (func(&svr->param, gSaveBlock2Ptr, gSaveBlock1Ptr) == 1)
|
||||
{
|
||||
svr->mainseqno = 4;
|
||||
svr->flag = 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static u32 mevent_client_exec(struct mevent_client * svr)
|
||||
{
|
||||
u32 (*funcs[])(struct mevent_client *) = {
|
||||
client_mainseq_0,
|
||||
client_mainseq_1,
|
||||
client_mainseq_2,
|
||||
client_mainseq_3,
|
||||
client_mainseq_4,
|
||||
client_mainseq_5,
|
||||
client_mainseq_6,
|
||||
client_mainseq_7
|
||||
};
|
||||
return funcs[svr->mainseqno](svr);
|
||||
}
|
||||
@@ -1,192 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "mevent_server.h"
|
||||
|
||||
extern const struct mevent_server_cmd gServerScript_ClientCanceledCard[];
|
||||
|
||||
// Unreferenced
|
||||
const u8 gUnknown_84687A0[] = _("You have collected all STAMPs!\nWant to input a CARD as a prize?");
|
||||
|
||||
/* CLIENT SCRIPTS */
|
||||
|
||||
const struct mevent_client_cmd gMEventClientScript_InitialListen[] = { // 84687E0
|
||||
CLI_RECEIVE(0x10),
|
||||
CLI_JUMPBUF
|
||||
};
|
||||
|
||||
const struct mevent_client_cmd gMEventClientScript_Send1442CC[] = {
|
||||
CLI_SNDHEAD,
|
||||
CLI_WAITSND,
|
||||
CLI_RECEIVE(0x10),
|
||||
CLI_JUMPBUF
|
||||
};
|
||||
|
||||
const struct mevent_client_cmd gMEventClientScript_UnableToRecv[] = { // can't accept card or news
|
||||
CLI_SENDALL,
|
||||
CLI_RETURN(0x0a)
|
||||
};
|
||||
|
||||
const struct mevent_client_cmd gMEventClientScript_CommError[] = { // comm error
|
||||
CLI_SENDALL,
|
||||
CLI_RETURN(0x0b)
|
||||
};
|
||||
|
||||
const struct mevent_client_cmd gMEventClientScript_NothingSentOver[] = { // nothing sent
|
||||
CLI_SENDALL,
|
||||
CLI_RETURN(0x00)
|
||||
};
|
||||
|
||||
const struct mevent_client_cmd gMEventClientScript_ReceiveCardAndReturnSuccess[] = { // card success
|
||||
CLI_RECEIVE(0x16),
|
||||
CLI_RECVSAV,
|
||||
CLI_RECEIVE(0x19),
|
||||
CLI_RECVRAM,
|
||||
CLI_SENDALL,
|
||||
CLI_RETURN(0x02)
|
||||
};
|
||||
|
||||
const struct mevent_client_cmd gMEventClientScript_ReceiveNewsAndValidate[] = {
|
||||
CLI_RECEIVE(0x17),
|
||||
CLI_VLDNEWS,
|
||||
CLI_WAITSND,
|
||||
CLI_RECEIVE(0x10),
|
||||
CLI_JUMPBUF
|
||||
};
|
||||
|
||||
const struct mevent_client_cmd gMEventClientScript_AlreadyHadNews[] = { // already had news
|
||||
CLI_SENDALL,
|
||||
CLI_RETURN(0x07)
|
||||
};
|
||||
|
||||
const struct mevent_client_cmd gMEventClientScript_RecvNewsSuccess[] = { // news success
|
||||
CLI_SENDALL,
|
||||
CLI_RETURN(0x03)
|
||||
};
|
||||
|
||||
const struct mevent_client_cmd gMEventClientScript_AskWouldLikeToTossCard[] = {
|
||||
CLI_REQWORD,
|
||||
CLI_SNDWORD,
|
||||
CLI_WAITSND,
|
||||
CLI_RECEIVE(0x10),
|
||||
CLI_JUMPBUF
|
||||
};
|
||||
|
||||
const struct mevent_client_cmd gMEventClientScript_OtherTrainerCanceled[] = { // comm canceled
|
||||
CLI_SENDALL,
|
||||
CLI_RETURN(0x09)
|
||||
};
|
||||
|
||||
const struct mevent_client_cmd gMEventClientScript_AlreadyHadCard[] = { // already had card
|
||||
CLI_SENDALL,
|
||||
CLI_RETURN(0x05)
|
||||
};
|
||||
|
||||
const struct mevent_client_cmd gMEventClientScript_SuccessFromBuffer[] = { // success from buffer
|
||||
CLI_RECEIVE(0x15),
|
||||
CLI_RECVBUF,
|
||||
CLI_SENDALL,
|
||||
CLI_RETURN(0x0d)
|
||||
};
|
||||
|
||||
/* SERVER SCRIPTS */
|
||||
|
||||
const struct mevent_server_cmd gMEventSrvScript_UnableToSend[] = {
|
||||
SRV_SEND(0x10, gMEventClientScript_UnableToRecv),
|
||||
SRV_WAITSND,
|
||||
SRV_RECV(0x14),
|
||||
SRV_RETURN(0x0a)
|
||||
};
|
||||
|
||||
const struct mevent_server_cmd gUnknown_8468950[] = {
|
||||
SRV_SEND(0x10, gMEventClientScript_CommError),
|
||||
SRV_WAITSND,
|
||||
SRV_RECV(0x14),
|
||||
SRV_RETURN(0x0b)
|
||||
};
|
||||
|
||||
const struct mevent_server_cmd gUnknown_8468980[] = {
|
||||
SRV_SEND(0x10, gMEventClientScript_OtherTrainerCanceled),
|
||||
SRV_WAITSND,
|
||||
SRV_RECV(0x14),
|
||||
SRV_RETURN(0x09)
|
||||
};
|
||||
|
||||
const struct mevent_server_cmd gMEventSrvScript_OtherTrnHasNews[] = {
|
||||
SRV_SEND(0x10, gMEventClientScript_AlreadyHadNews),
|
||||
SRV_WAITSND,
|
||||
SRV_RECV(0x14),
|
||||
SRV_RETURN(0x07)
|
||||
};
|
||||
|
||||
const struct mevent_server_cmd gMEventSrvScript_SentNewsSuccess[] = {
|
||||
SRV_SEND(0x28, gMEventClientScript_ReceiveNewsAndValidate),
|
||||
SRV_WAITSND,
|
||||
SRV_SEND_NEWS,
|
||||
SRV_WAITSND,
|
||||
SRV_RECV(0x13),
|
||||
SRV_READWORD,
|
||||
SRV_BRANCHIF(0x01, gMEventSrvScript_OtherTrnHasNews),
|
||||
SRV_SEND(0x10, gMEventClientScript_RecvNewsSuccess),
|
||||
SRV_WAITSND,
|
||||
SRV_RECV(0x14),
|
||||
SRV_RETURN(0x03)
|
||||
};
|
||||
|
||||
const struct mevent_server_cmd gMEventSrvScript_SendCardSuccess[] = {
|
||||
SRV_SEND(0x30, gMEventClientScript_ReceiveCardAndReturnSuccess),
|
||||
SRV_WAITSND,
|
||||
SRV_SEND_CARD,
|
||||
SRV_WAITSND,
|
||||
SRV_BUFFER_SEND,
|
||||
SRV_WAITSND,
|
||||
SRV_RECV(0x14),
|
||||
SRV_RETURN(0x02)
|
||||
};
|
||||
|
||||
const struct mevent_server_cmd gMEventSrvScript_AskClientToOverwriteCard[] = {
|
||||
SRV_SEND(0x28, gMEventClientScript_AskWouldLikeToTossCard),
|
||||
SRV_WAITSND,
|
||||
SRV_RECV(0x13),
|
||||
SRV_READWORD,
|
||||
SRV_BRANCHIF(0x00, gMEventSrvScript_SendCardSuccess),
|
||||
SRV_BRANCH(gServerScript_ClientCanceledCard)
|
||||
};
|
||||
|
||||
const struct mevent_server_cmd gMEventSrvScript_OtherTrnHasCard[] = {
|
||||
SRV_SEND(0x10, gMEventClientScript_AlreadyHadCard),
|
||||
SRV_WAITSND,
|
||||
SRV_RECV(0x14),
|
||||
SRV_RETURN(0x05)
|
||||
};
|
||||
|
||||
const struct mevent_server_cmd gUnknown_8468B3C[] = {
|
||||
SRV_SEND(0x10, gMEventClientScript_NothingSentOver),
|
||||
SRV_WAITSND,
|
||||
SRV_RECV(0x14),
|
||||
SRV_RETURN(0x00)
|
||||
};
|
||||
|
||||
const struct mevent_server_cmd gMEventSrvScript_SendNews[] = {
|
||||
SRV_BUFFER_NEWS,
|
||||
SRV_SEND(0x20, gMEventClientScript_Send1442CC),
|
||||
SRV_WAITSND,
|
||||
SRV_RECV(0x11),
|
||||
SRV_READ_1442CC,
|
||||
SRV_VALID_1442CC,
|
||||
SRV_BRANCHIF(0x00, gMEventSrvScript_UnableToSend),
|
||||
SRV_BRANCH(gMEventSrvScript_SentNewsSuccess)
|
||||
};
|
||||
|
||||
const struct mevent_server_cmd gMEventSrvScript_SendCard[] = {
|
||||
SRV_BUFFER_CARD,
|
||||
SRV_RAM_SCRIPT_IF_VALID,
|
||||
SRV_SEND(0x20, gMEventClientScript_Send1442CC),
|
||||
SRV_WAITSND,
|
||||
SRV_RECV(0x11),
|
||||
SRV_READ_1442CC,
|
||||
SRV_VALID_1442CC,
|
||||
SRV_BRANCHIF(0x00, gMEventSrvScript_UnableToSend),
|
||||
SRV_CHECK_1442CC_14,
|
||||
SRV_BRANCHIF(0x02, gMEventSrvScript_AskClientToOverwriteCard),
|
||||
SRV_BRANCHIF(0x00, gMEventSrvScript_SendCardSuccess),
|
||||
SRV_BRANCH(gMEventSrvScript_OtherTrnHasCard)
|
||||
};
|
||||
@@ -1,279 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "gflib.h"
|
||||
#include "script.h"
|
||||
#include "mevent.h"
|
||||
#include "mevent_server.h"
|
||||
|
||||
EWRAM_DATA struct mevent_srv_common * s_mevent_srv_common_ptr = NULL;
|
||||
|
||||
static void mevent_srv_init_common(struct mevent_srv_common *, const void *, u32, u32);
|
||||
static void mevent_srv_free_resources(struct mevent_srv_common *);
|
||||
static u32 mevent_srv_exec_common(struct mevent_srv_common *);
|
||||
|
||||
extern const struct mevent_server_cmd gMEventSrvScript_SendNews[];
|
||||
extern const struct mevent_server_cmd gMEventSrvScript_SendCard[];
|
||||
|
||||
void mevent_srv_init_wnews(void)
|
||||
{
|
||||
s_mevent_srv_common_ptr = AllocZeroed(sizeof(struct mevent_srv_common));
|
||||
mevent_srv_init_common(s_mevent_srv_common_ptr, gMEventSrvScript_SendNews, 0, 1);
|
||||
}
|
||||
|
||||
void mevent_srv_new_wcard(void)
|
||||
{
|
||||
s_mevent_srv_common_ptr = AllocZeroed(sizeof(struct mevent_srv_common));
|
||||
mevent_srv_init_common(s_mevent_srv_common_ptr, gMEventSrvScript_SendCard, 0, 1);
|
||||
}
|
||||
|
||||
u32 mevent_srv_common_do_exec(u16 * a0)
|
||||
{
|
||||
u32 result;
|
||||
if (s_mevent_srv_common_ptr == NULL)
|
||||
return 3;
|
||||
result = mevent_srv_exec_common(s_mevent_srv_common_ptr);
|
||||
if (result == 3)
|
||||
{
|
||||
*a0 = s_mevent_srv_common_ptr->param;
|
||||
mevent_srv_free_resources(s_mevent_srv_common_ptr);
|
||||
Free(s_mevent_srv_common_ptr);
|
||||
s_mevent_srv_common_ptr = NULL;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
static void mevent_srv_init_common(struct mevent_srv_common * svr, const void *cmdBuffer, u32 sendPlayerNo, u32 recvPlayerNo)
|
||||
{
|
||||
svr->unk_00 = 0;
|
||||
svr->mainseqno = 0;
|
||||
svr->card = AllocZeroed(sizeof(struct WonderCard));
|
||||
svr->news = AllocZeroed(sizeof(struct WonderNews));
|
||||
svr->recvBuffer = AllocZeroed(ME_SEND_BUF_SIZE);
|
||||
svr->mevent_unk1442cc = AllocZeroed(sizeof(struct MEventClientHeaderStruct));
|
||||
svr->cmdBuffer = cmdBuffer;
|
||||
svr->cmdidx = 0;
|
||||
mevent_srv_sub_init(&svr->manager, sendPlayerNo, recvPlayerNo);
|
||||
}
|
||||
|
||||
static void mevent_srv_free_resources(struct mevent_srv_common * svr)
|
||||
{
|
||||
Free(svr->card);
|
||||
Free(svr->news);
|
||||
Free(svr->recvBuffer);
|
||||
Free(svr->mevent_unk1442cc);
|
||||
}
|
||||
|
||||
static void mevent_srv_common_init_send(struct mevent_srv_common * svr, u32 ident, const void *src, u32 size)
|
||||
{
|
||||
AGB_ASSERT_EX(size <= ME_SEND_BUF_SIZE, ABSPATH("mevent_server.c"), 257);
|
||||
mevent_srv_sub_init_send(&svr->manager, ident, src, size);
|
||||
}
|
||||
|
||||
static void *mevent_first_if_not_null_else_second(void *a0, void *a1)
|
||||
{
|
||||
if (a0 != NULL)
|
||||
return a0;
|
||||
else
|
||||
return a1;
|
||||
}
|
||||
|
||||
static u32 mevent_compare_pointers(void *a0, void *a1)
|
||||
{
|
||||
if (a1 < a0)
|
||||
return 0;
|
||||
else if (a1 == a0)
|
||||
return 1;
|
||||
else
|
||||
return 2;
|
||||
}
|
||||
|
||||
static u32 common_mainseq_0(struct mevent_srv_common * svr)
|
||||
{
|
||||
// start
|
||||
svr->mainseqno = 4;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static u32 common_mainseq_1(struct mevent_srv_common * svr)
|
||||
{
|
||||
// done
|
||||
return 3;
|
||||
}
|
||||
|
||||
static u32 common_mainseq_2(struct mevent_srv_common * svr)
|
||||
{
|
||||
// do recv
|
||||
if (mevent_srv_sub_recv(&svr->manager))
|
||||
svr->mainseqno = 4;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static u32 common_mainseq_3(struct mevent_srv_common * svr)
|
||||
{
|
||||
// do send
|
||||
if (mevent_srv_sub_send(&svr->manager))
|
||||
svr->mainseqno = 4;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static u32 common_mainseq_4(struct mevent_srv_common * svr)
|
||||
{
|
||||
// process command
|
||||
const struct mevent_server_cmd * cmd = &svr->cmdBuffer[svr->cmdidx];
|
||||
void *ptr;
|
||||
svr->cmdidx++;
|
||||
|
||||
switch (cmd->instr)
|
||||
{
|
||||
case 0:
|
||||
AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 354);
|
||||
svr->mainseqno = 1;
|
||||
svr->param = cmd->flag;
|
||||
break;
|
||||
case 1:
|
||||
svr->mainseqno = 3;
|
||||
break;
|
||||
case 2:
|
||||
AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 364);
|
||||
mevent_srv_sub_init_recv(&svr->manager, cmd->flag, svr->recvBuffer);
|
||||
svr->mainseqno = 2;
|
||||
break;
|
||||
case 3:
|
||||
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 370);
|
||||
svr->cmdidx = 0;
|
||||
svr->cmdBuffer = cmd->parameter;
|
||||
break;
|
||||
case 5:
|
||||
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 376);
|
||||
AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 377);
|
||||
memcpy(svr->mevent_unk1442cc, svr->recvBuffer, sizeof(struct MEventClientHeaderStruct));
|
||||
break;
|
||||
case 6:
|
||||
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 382);
|
||||
AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 383);
|
||||
svr->param = ValidateMEventClientHeader(svr->mevent_unk1442cc);
|
||||
break;
|
||||
case 4:
|
||||
if (svr->param == cmd->flag)
|
||||
{
|
||||
svr->cmdidx = 0;
|
||||
svr->cmdBuffer = cmd->parameter;
|
||||
}
|
||||
break;
|
||||
case 7:
|
||||
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 396);
|
||||
ptr = mevent_first_if_not_null_else_second(cmd->parameter, svr->card);
|
||||
svr->param = sub_8144418(ptr, svr->mevent_unk1442cc, ptr);
|
||||
break;
|
||||
case 8:
|
||||
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 402);
|
||||
AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 403);
|
||||
svr->param = *(u32 *)svr->recvBuffer;
|
||||
break;
|
||||
case 9:
|
||||
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 408);
|
||||
ptr = mevent_first_if_not_null_else_second(cmd->parameter, &svr->sendWord);
|
||||
svr->param = MEvent_CanPlayerReceiveDistributionMon(ptr, svr->mevent_unk1442cc, ptr);
|
||||
break;
|
||||
case 10:
|
||||
AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 415);
|
||||
svr->param = sub_81444B0(svr->mevent_unk1442cc, cmd->flag);
|
||||
break;
|
||||
case 11:
|
||||
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 420);
|
||||
svr->param = sub_8144474(svr->mevent_unk1442cc, cmd->parameter);
|
||||
break;
|
||||
case 12:
|
||||
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 426);
|
||||
svr->param = mevent_compare_pointers(cmd->parameter, *(void **)svr->recvBuffer);
|
||||
break;
|
||||
case 14:
|
||||
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 432);
|
||||
mevent_srv_common_init_send(svr, 0x17, mevent_first_if_not_null_else_second(cmd->parameter, svr->news), sizeof(struct WonderNews));
|
||||
break;
|
||||
case 13:
|
||||
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 438);
|
||||
mevent_srv_common_init_send(svr, 0x16, mevent_first_if_not_null_else_second(cmd->parameter, svr->card), sizeof(struct WonderCard));
|
||||
break;
|
||||
case 16:
|
||||
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 444);
|
||||
mevent_srv_common_init_send(svr, 0x18, mevent_first_if_not_null_else_second(cmd->parameter, &svr->sendWord), 4);
|
||||
break;
|
||||
case 15:
|
||||
if (cmd->parameter == NULL)
|
||||
mevent_srv_common_init_send(svr, 0x19, svr->sendBuffer1, svr->sendBuffer1Size);
|
||||
else
|
||||
mevent_srv_common_init_send(svr, 0x19, cmd->parameter, cmd->flag);
|
||||
break;
|
||||
case 18:
|
||||
if (cmd->parameter == NULL)
|
||||
mevent_srv_common_init_send(svr, 0x10, svr->sendBuffer2, svr->sendBuffer2Size);
|
||||
else
|
||||
mevent_srv_common_init_send(svr, 0x10, cmd->parameter, cmd->flag);
|
||||
break;
|
||||
case 19:
|
||||
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 466);
|
||||
mevent_srv_common_init_send(svr, 0x1a, cmd->parameter, 188);
|
||||
break;
|
||||
case 20:
|
||||
mevent_srv_common_init_send(svr, 0x15, cmd->parameter, cmd->flag);
|
||||
break;
|
||||
case 17:
|
||||
mevent_srv_common_init_send(svr, 0x1c, cmd->parameter, cmd->flag);
|
||||
break;
|
||||
case 22:
|
||||
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 481);
|
||||
memcpy(svr->card, cmd->parameter, 332);
|
||||
break;
|
||||
case 23:
|
||||
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 486);
|
||||
memcpy(svr->news, cmd->parameter, 444);
|
||||
break;
|
||||
case 21:
|
||||
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 491);
|
||||
svr->sendWord = *(u32 *)cmd->parameter;
|
||||
break;
|
||||
case 24:
|
||||
svr->sendBuffer1 = cmd->parameter;
|
||||
svr->sendBuffer1Size = cmd->flag;
|
||||
break;
|
||||
case 25:
|
||||
svr->sendBuffer2 = cmd->parameter;
|
||||
svr->sendBuffer2Size = cmd->flag;
|
||||
break;
|
||||
case 26:
|
||||
AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, ABSPATH("mevent_server.c"), 506);
|
||||
memcpy(svr->card, GetSavedWonderCard(), 332);
|
||||
MEvent_WonderCardResetUnk08_6(svr->card);
|
||||
break;
|
||||
case 27:
|
||||
AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, ABSPATH("mevent_server.c"), 512);
|
||||
memcpy(svr->news, GetSavedWonderNews(), 444);
|
||||
break;
|
||||
case 28:
|
||||
AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, ABSPATH("mevent_server.c"), 517);
|
||||
svr->sendBuffer1 = GetSavedRamScriptIfValid();
|
||||
break;
|
||||
case 29:
|
||||
mevent_srv_common_init_send(svr, 0x1b, cmd->parameter, cmd->flag);
|
||||
break;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static u32 (*const func_tbl[])(struct mevent_srv_common *) = {
|
||||
common_mainseq_0,
|
||||
common_mainseq_1,
|
||||
common_mainseq_2,
|
||||
common_mainseq_3,
|
||||
common_mainseq_4
|
||||
};
|
||||
|
||||
static u32 mevent_srv_exec_common(struct mevent_srv_common * svr)
|
||||
{
|
||||
u32 response;
|
||||
AGB_ASSERT_EX(svr->mainseqno < NELEMS(func_tbl), ABSPATH("mevent_server.c"), 546);
|
||||
response = func_tbl[svr->mainseqno](svr);
|
||||
AGB_ASSERT_EX(svr->mainseqno < NELEMS(func_tbl), ABSPATH("mevent_server.c"), 548);
|
||||
return response;
|
||||
}
|
||||
@@ -1,204 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "util.h"
|
||||
#include "link.h"
|
||||
#include "link_rfu.h"
|
||||
#include "mevent_server.h"
|
||||
|
||||
static u32 mevent_receive_func(struct mevent_srv_sub *);
|
||||
static u32 mevent_send_func(struct mevent_srv_sub *);
|
||||
|
||||
u32 mevent_srv_sub_recv(struct mevent_srv_sub * svr)
|
||||
{
|
||||
return svr->recvFunc(svr);
|
||||
}
|
||||
|
||||
u32 mevent_srv_sub_send(struct mevent_srv_sub * svr)
|
||||
{
|
||||
return svr->sendFunc(svr);
|
||||
}
|
||||
|
||||
void mevent_srv_sub_init(struct mevent_srv_sub * svr, u32 sendPlayerNo, u32 recvPlayerNo)
|
||||
{
|
||||
svr->sendPlayerNo = sendPlayerNo;
|
||||
svr->recvPlayerNo = recvPlayerNo;
|
||||
svr->seqno = 0;
|
||||
svr->sendCRC = 0;
|
||||
svr->sendSize = 0;
|
||||
svr->sendCounter = 0;
|
||||
svr->recvCRC = 0;
|
||||
svr->recvSize = 0;
|
||||
svr->recvCounter = 0;
|
||||
svr->sendBfr = NULL;
|
||||
svr->recvBfr = NULL;
|
||||
svr->sendFunc = mevent_send_func;
|
||||
svr->recvFunc = mevent_receive_func;
|
||||
}
|
||||
|
||||
void mevent_srv_sub_init_send(struct mevent_srv_sub * svr, u32 ident, const void *src, u32 size)
|
||||
{
|
||||
svr->seqno = 0;
|
||||
svr->sendIdent = ident;
|
||||
svr->sendCounter = 0;
|
||||
svr->sendCRC = 0;
|
||||
if (size != 0)
|
||||
svr->sendSize = size;
|
||||
else
|
||||
svr->sendSize = ME_SEND_BUF_SIZE;
|
||||
svr->sendBfr = src;
|
||||
}
|
||||
|
||||
void mevent_srv_sub_init_recv(struct mevent_srv_sub * svr, u32 ident, void *dest)
|
||||
{
|
||||
svr->seqno = 0;
|
||||
svr->recvIdent = ident;
|
||||
svr->recvCounter = 0;
|
||||
svr->recvCRC = 0;
|
||||
svr->recvSize = 0;
|
||||
svr->recvBfr = dest;
|
||||
}
|
||||
|
||||
static void mevent_recv_block(u32 recv_idx, void *dest, size_t size)
|
||||
{
|
||||
memcpy(dest, gBlockRecvBuffer[recv_idx], size);
|
||||
}
|
||||
|
||||
static bool32 mevent_has_received(u32 recv_idx)
|
||||
{
|
||||
if ((GetBlockReceivedStatus() >> recv_idx) & 1)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void mevent_reset_recv(u32 recv_idx)
|
||||
{
|
||||
ResetBlockReceivedFlag(recv_idx);
|
||||
}
|
||||
|
||||
static bool32 mevent_receive_func(struct mevent_srv_sub * svr)
|
||||
{
|
||||
struct send_recv_header header;
|
||||
|
||||
switch (svr->seqno)
|
||||
{
|
||||
case 0:
|
||||
if (mevent_has_received(svr->recvPlayerNo))
|
||||
{
|
||||
mevent_recv_block(svr->recvPlayerNo, &header, sizeof(header));
|
||||
svr->recvSize = header.size;
|
||||
svr->recvCRC = header.crc;
|
||||
if (svr->recvSize > ME_SEND_BUF_SIZE)
|
||||
{
|
||||
LinkRfu_FatalError();
|
||||
return FALSE;
|
||||
}
|
||||
else if (svr->recvIdent != header.ident)
|
||||
{
|
||||
LinkRfu_FatalError();
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
svr->recvCounter = 0;
|
||||
mevent_reset_recv(svr->recvPlayerNo);
|
||||
++svr->seqno;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (mevent_has_received(svr->recvPlayerNo))
|
||||
{
|
||||
size_t blocksiz = svr->recvCounter * 252;
|
||||
if (svr->recvSize - blocksiz <= 252)
|
||||
{
|
||||
mevent_recv_block(svr->recvPlayerNo, svr->recvBfr + blocksiz, svr->recvSize - blocksiz);
|
||||
++svr->recvCounter;
|
||||
++svr->seqno;
|
||||
}
|
||||
else
|
||||
{
|
||||
mevent_recv_block(svr->recvPlayerNo, svr->recvBfr + blocksiz, 252);
|
||||
++svr->recvCounter;
|
||||
}
|
||||
mevent_reset_recv(svr->recvPlayerNo);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (CalcCRC16WithTable(svr->recvBfr, svr->recvSize) != svr->recvCRC)
|
||||
{
|
||||
LinkRfu_FatalError();
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
svr->seqno = 0;
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool32 mevent_send_func(struct mevent_srv_sub * svr)
|
||||
{
|
||||
struct send_recv_header header;
|
||||
|
||||
switch (svr->seqno)
|
||||
{
|
||||
case 0:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
header.ident = svr->sendIdent;
|
||||
header.size = svr->sendSize;
|
||||
header.crc = CalcCRC16WithTable(svr->sendBfr, svr->sendSize);
|
||||
svr->sendCRC = header.crc;
|
||||
svr->sendCounter = 0;
|
||||
SendBlock(0, &header, sizeof(header));
|
||||
++svr->seqno;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
if (mevent_has_received(svr->sendPlayerNo))
|
||||
{
|
||||
size_t blocksiz;
|
||||
mevent_reset_recv(svr->sendPlayerNo);
|
||||
blocksiz = 252 * svr->sendCounter;
|
||||
if (svr->sendSize - blocksiz <= 252)
|
||||
{
|
||||
SendBlock(0, svr->sendBfr + blocksiz, svr->sendSize - blocksiz);
|
||||
++svr->sendCounter;
|
||||
++svr->seqno;
|
||||
}
|
||||
else
|
||||
{
|
||||
SendBlock(0, svr->sendBfr + blocksiz, 252);
|
||||
++svr->sendCounter;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
if (CalcCRC16WithTable(svr->sendBfr, svr->sendSize) != svr->sendCRC)
|
||||
LinkRfu_FatalError();
|
||||
else
|
||||
++svr->seqno;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (mevent_has_received(svr->sendPlayerNo))
|
||||
{
|
||||
mevent_reset_recv(svr->sendPlayerNo);
|
||||
svr->seqno = 0;
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
+3
-3
@@ -84,7 +84,7 @@ void PrintMoneyAmountInMoneyBox(u8 windowId, int amount, u8 speed)
|
||||
*(txtPtr++) = 0;
|
||||
|
||||
StringExpandPlaceholders(txtPtr, gText_PokedollarVar1);
|
||||
AddTextPrinterParameterized(windowId, FONT_0, gStringVar4, 64 - GetStringWidth(FONT_0, gStringVar4, 0), 0xC, speed, NULL);
|
||||
AddTextPrinterParameterized(windowId, FONT_SMALL, gStringVar4, 64 - GetStringWidth(FONT_SMALL, gStringVar4, 0), 0xC, speed, NULL);
|
||||
}
|
||||
|
||||
void PrintMoneyAmount(u8 windowId, u8 x, u8 y, int amount, u8 speed)
|
||||
@@ -101,13 +101,13 @@ void PrintMoneyAmount(u8 windowId, u8 x, u8 y, int amount, u8 speed)
|
||||
*(txtPtr++) = 0;
|
||||
|
||||
StringExpandPlaceholders(txtPtr, gText_PokedollarVar1);
|
||||
AddTextPrinterParameterized(windowId, FONT_0, gStringVar4, x, y, speed, NULL);
|
||||
AddTextPrinterParameterized(windowId, FONT_SMALL, gStringVar4, x, y, speed, NULL);
|
||||
}
|
||||
|
||||
void PrintMoneyAmountInMoneyBoxWithBorder(u8 windowId, u16 tileStart, u8 pallete, int amount)
|
||||
{
|
||||
DrawStdFrameWithCustomTileAndPalette(windowId, FALSE, tileStart, pallete);
|
||||
AddTextPrinterParameterized(windowId, FONT_2, gText_TrainerCardMoney, 0, 0, 0xFF, 0);
|
||||
AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_TrainerCardMoney, 0, 0, 0xFF, 0);
|
||||
PrintMoneyAmountInMoneyBox(windowId, amount, 0);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,634 @@
|
||||
#include "global.h"
|
||||
#include "gflib.h"
|
||||
#include "constants/songs.h"
|
||||
#include "easy_chat.h"
|
||||
#include "task.h"
|
||||
#include "link.h"
|
||||
#include "link_rfu.h"
|
||||
#include "util.h"
|
||||
#include "script.h"
|
||||
#include "event_data.h"
|
||||
#include "battle_tower.h"
|
||||
#include "new_game.h"
|
||||
#include "wonder_news.h"
|
||||
#include "mystery_gift_menu.h"
|
||||
#include "help_system.h"
|
||||
#include "mystery_gift.h"
|
||||
#include "strings.h"
|
||||
|
||||
#define CALC_CRC(data) CalcCRC16WithTable((void *)&(data), sizeof(data))
|
||||
|
||||
static bool32 ValidateWonderNews(const struct WonderNews * src);
|
||||
static void ClearSavedWonderNews(void);
|
||||
static void ClearSavedWonderNewsMetadata(void);
|
||||
static bool32 ValidateWonderCard(const struct WonderCard * src);
|
||||
static void ClearSavedWonderCard(void);
|
||||
static void ClearSavedWonderCardMetadata(void);
|
||||
static void IncrementCardStatForNewTrainer(u32 eventId, u32 trainerId, u32 *idsList, s32 count);
|
||||
static void ClearSavedTrainerIds(void);
|
||||
|
||||
static const u16 sReceivedGiftFlags[] = {
|
||||
FLAG_RECEIVED_AURORA_TICKET,
|
||||
FLAG_RECEIVED_MYSTIC_TICKET,
|
||||
FLAG_RECEIVED_OLD_SEA_MAP, // Not used until Emerald
|
||||
FLAG_WONDER_CARD_UNUSED_1,
|
||||
FLAG_WONDER_CARD_UNUSED_2,
|
||||
FLAG_WONDER_CARD_UNUSED_3,
|
||||
FLAG_WONDER_CARD_UNUSED_4,
|
||||
FLAG_WONDER_CARD_UNUSED_5,
|
||||
FLAG_WONDER_CARD_UNUSED_6,
|
||||
FLAG_WONDER_CARD_UNUSED_7,
|
||||
FLAG_WONDER_CARD_UNUSED_8,
|
||||
FLAG_WONDER_CARD_UNUSED_9,
|
||||
FLAG_WONDER_CARD_UNUSED_10,
|
||||
FLAG_WONDER_CARD_UNUSED_11,
|
||||
FLAG_WONDER_CARD_UNUSED_12,
|
||||
FLAG_WONDER_CARD_UNUSED_13,
|
||||
FLAG_WONDER_CARD_UNUSED_14,
|
||||
FLAG_WONDER_CARD_UNUSED_15,
|
||||
FLAG_WONDER_CARD_UNUSED_16,
|
||||
FLAG_WONDER_CARD_UNUSED_17
|
||||
};
|
||||
|
||||
static EWRAM_DATA bool32 sStatsEnabled = FALSE;
|
||||
|
||||
void ClearMysteryGift(void)
|
||||
{
|
||||
CpuFill32(0, &gSaveBlock1Ptr->mysteryGift, sizeof(gSaveBlock1Ptr->mysteryGift));
|
||||
ClearSavedWonderNewsMetadata();
|
||||
InitQuestionnaireWords();
|
||||
}
|
||||
|
||||
struct WonderNews * GetSavedWonderNews(void)
|
||||
{
|
||||
return &gSaveBlock1Ptr->mysteryGift.news;
|
||||
}
|
||||
|
||||
struct WonderCard * GetSavedWonderCard(void)
|
||||
{
|
||||
return &gSaveBlock1Ptr->mysteryGift.card;
|
||||
}
|
||||
|
||||
struct WonderCardMetadata * GetSavedWonderCardMetadata(void)
|
||||
{
|
||||
return &gSaveBlock1Ptr->mysteryGift.cardMetadata;
|
||||
}
|
||||
|
||||
struct WonderNewsMetadata * GetSavedWonderNewsMetadata(void)
|
||||
{
|
||||
return &gSaveBlock1Ptr->mysteryGift.newsMetadata;
|
||||
}
|
||||
|
||||
u16 * GetQuestionnaireWordsPtr(void)
|
||||
{
|
||||
return gSaveBlock1Ptr->mysteryGift.questionnaireWords;
|
||||
}
|
||||
|
||||
// Equivalent to ClearSavedWonderCardAndRelated, but nothing else to clear
|
||||
void ClearSavedWonderNewsAndRelated(void)
|
||||
{
|
||||
ClearSavedWonderNews();
|
||||
}
|
||||
|
||||
bool32 SaveWonderNews(const struct WonderNews * news)
|
||||
{
|
||||
if (!ValidateWonderNews(news))
|
||||
return FALSE;
|
||||
|
||||
ClearSavedWonderNews();
|
||||
gSaveBlock1Ptr->mysteryGift.news = *news;
|
||||
gSaveBlock1Ptr->mysteryGift.newsCrc = CALC_CRC(gSaveBlock1Ptr->mysteryGift.news);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool32 ValidateSavedWonderNews(void)
|
||||
{
|
||||
if (CALC_CRC(gSaveBlock1Ptr->mysteryGift.news) != gSaveBlock1Ptr->mysteryGift.newsCrc)
|
||||
return FALSE;
|
||||
if (!ValidateWonderNews(&gSaveBlock1Ptr->mysteryGift.news))
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static bool32 ValidateWonderNews(const struct WonderNews * news)
|
||||
{
|
||||
if (news->id == 0)
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool32 IsSendingSavedWonderNewsAllowed(void)
|
||||
{
|
||||
const struct WonderNews * news = &gSaveBlock1Ptr->mysteryGift.news;
|
||||
if (news->sendType == SEND_TYPE_DISALLOWED)
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void ClearSavedWonderNews(void)
|
||||
{
|
||||
CpuFill32(0, GetSavedWonderNews(), sizeof(gSaveBlock1Ptr->mysteryGift.news));
|
||||
gSaveBlock1Ptr->mysteryGift.newsCrc = 0;
|
||||
}
|
||||
|
||||
static void ClearSavedWonderNewsMetadata(void)
|
||||
{
|
||||
CpuFill32(0, GetSavedWonderNewsMetadata(), sizeof(gSaveBlock1Ptr->mysteryGift.newsMetadata));
|
||||
WonderNews_Reset();
|
||||
}
|
||||
|
||||
bool32 IsWonderNewsSameAsSaved(const u8 * news)
|
||||
{
|
||||
const u8 * savedNews = (const u8 *)&gSaveBlock1Ptr->mysteryGift.news;
|
||||
u32 i;
|
||||
if (!ValidateSavedWonderNews())
|
||||
return FALSE;
|
||||
|
||||
for (i = 0; i < sizeof(gSaveBlock1Ptr->mysteryGift.news); i++)
|
||||
{
|
||||
if (savedNews[i] != news[i])
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void ClearSavedWonderCardAndRelated(void)
|
||||
{
|
||||
ClearSavedWonderCard();
|
||||
ClearSavedWonderCardMetadata();
|
||||
ClearSavedTrainerIds();
|
||||
ClearRamScript();
|
||||
ClearMysteryGiftFlags();
|
||||
ClearMysteryGiftVars();
|
||||
ClearEReaderTrainer(&gSaveBlock2Ptr->battleTower.ereaderTrainer);
|
||||
}
|
||||
|
||||
bool32 SaveWonderCard(const struct WonderCard * card)
|
||||
{
|
||||
struct WonderCardMetadata * metadata;
|
||||
if (!ValidateWonderCard(card))
|
||||
return FALSE;
|
||||
|
||||
ClearSavedWonderCardAndRelated();
|
||||
memcpy(&gSaveBlock1Ptr->mysteryGift.card, card, sizeof(struct WonderCard));
|
||||
gSaveBlock1Ptr->mysteryGift.cardCrc = CALC_CRC(gSaveBlock1Ptr->mysteryGift.card);
|
||||
metadata = &gSaveBlock1Ptr->mysteryGift.cardMetadata;
|
||||
metadata->iconSpecies = (&gSaveBlock1Ptr->mysteryGift.card)->iconSpecies;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool32 ValidateSavedWonderCard(void)
|
||||
{
|
||||
if (gSaveBlock1Ptr->mysteryGift.cardCrc != CALC_CRC(gSaveBlock1Ptr->mysteryGift.card))
|
||||
return FALSE;
|
||||
if (!ValidateWonderCard(&gSaveBlock1Ptr->mysteryGift.card))
|
||||
return FALSE;
|
||||
if (!ValidateRamScript())
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static bool32 ValidateWonderCard(const struct WonderCard * card)
|
||||
{
|
||||
if (card->flagId == 0)
|
||||
return FALSE;
|
||||
if (card->type >= CARD_TYPE_COUNT)
|
||||
return FALSE;
|
||||
if (!(card->sendType == SEND_TYPE_DISALLOWED
|
||||
|| card->sendType == SEND_TYPE_ALLOWED
|
||||
|| card->sendType == SEND_TYPE_ALLOWED_ALWAYS))
|
||||
return FALSE;
|
||||
if (card->bgType >= NUM_WONDER_BGS)
|
||||
return FALSE;
|
||||
if (card->maxStamps > MAX_STAMP_CARD_STAMPS)
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool32 IsSendingSavedWonderCardAllowed(void)
|
||||
{
|
||||
const struct WonderCard * card = &gSaveBlock1Ptr->mysteryGift.card;
|
||||
if (card->sendType == SEND_TYPE_DISALLOWED)
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void ClearSavedWonderCard(void)
|
||||
{
|
||||
CpuFill32(0, &gSaveBlock1Ptr->mysteryGift.card, sizeof(gSaveBlock1Ptr->mysteryGift.card));
|
||||
gSaveBlock1Ptr->mysteryGift.cardCrc = 0;
|
||||
}
|
||||
|
||||
static void ClearSavedWonderCardMetadata(void)
|
||||
{
|
||||
CpuFill32(0, GetSavedWonderCardMetadata(), sizeof(gSaveBlock1Ptr->mysteryGift.cardMetadata));
|
||||
gSaveBlock1Ptr->mysteryGift.cardMetadataCrc = 0;
|
||||
}
|
||||
|
||||
u16 GetWonderCardFlagId(void)
|
||||
{
|
||||
if (ValidateSavedWonderCard())
|
||||
return gSaveBlock1Ptr->mysteryGift.card.flagId;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void DisableWonderCardSending(struct WonderCard * card)
|
||||
{
|
||||
if (card->sendType == SEND_TYPE_ALLOWED)
|
||||
card->sendType = SEND_TYPE_DISALLOWED;
|
||||
}
|
||||
|
||||
static bool32 IsWonderCardFlagIDInValidRange(u16 flagId)
|
||||
{
|
||||
if (flagId >= WONDER_CARD_FLAG_OFFSET && flagId < WONDER_CARD_FLAG_OFFSET + NUM_WONDER_CARD_FLAGS)
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool32 IsSavedWonderCardGiftNotReceived(void)
|
||||
{
|
||||
u16 value = GetWonderCardFlagId();
|
||||
if (!IsWonderCardFlagIDInValidRange(value))
|
||||
return FALSE;
|
||||
|
||||
// If flag is set, player has received gift from this card
|
||||
if (FlagGet(sReceivedGiftFlags[value - WONDER_CARD_FLAG_OFFSET]) == TRUE)
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static s32 GetNumStampsInMetadata(const struct WonderCardMetadata * data, s32 size)
|
||||
{
|
||||
s32 numStamps = 0;
|
||||
s32 i;
|
||||
for (i = 0; i < size; i++)
|
||||
{
|
||||
if (data->stampData[STAMP_ID][i] && data->stampData[STAMP_SPECIES][i])
|
||||
numStamps++;
|
||||
}
|
||||
return numStamps;
|
||||
}
|
||||
|
||||
static bool32 IsStampInMetadata(const struct WonderCardMetadata * metadata, const u16 * stamp, s32 maxStamps)
|
||||
{
|
||||
s32 i;
|
||||
for (i = 0; i < maxStamps; i++)
|
||||
{
|
||||
if (metadata->stampData[STAMP_ID][i] == stamp[STAMP_ID])
|
||||
return TRUE;
|
||||
if (metadata->stampData[STAMP_SPECIES][i] == stamp[STAMP_SPECIES])
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool32 ValidateStamp(const u16 * stamp)
|
||||
{
|
||||
if (stamp[STAMP_ID] == 0)
|
||||
return FALSE;
|
||||
if (stamp[STAMP_SPECIES] == SPECIES_NONE)
|
||||
return FALSE;
|
||||
if (stamp[STAMP_SPECIES] >= NUM_SPECIES)
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static s32 GetNumStampsInSavedCard(void)
|
||||
{
|
||||
struct WonderCard * card;
|
||||
if (!ValidateSavedWonderCard())
|
||||
return 0;
|
||||
card = &gSaveBlock1Ptr->mysteryGift.card;
|
||||
if (card->type != CARD_TYPE_STAMP)
|
||||
return 0;
|
||||
return GetNumStampsInMetadata(&gSaveBlock1Ptr->mysteryGift.cardMetadata, card->maxStamps);
|
||||
}
|
||||
|
||||
bool32 MysteryGift_TrySaveStamp(const u16 * stamp)
|
||||
{
|
||||
struct WonderCard * card = &gSaveBlock1Ptr->mysteryGift.card;
|
||||
s32 maxStamps = card->maxStamps;
|
||||
s32 i;
|
||||
if (!ValidateStamp(stamp))
|
||||
return FALSE;
|
||||
if (IsStampInMetadata(&gSaveBlock1Ptr->mysteryGift.cardMetadata, stamp, maxStamps))
|
||||
return FALSE;
|
||||
for (i = 0; i < maxStamps; i++)
|
||||
{
|
||||
if (gSaveBlock1Ptr->mysteryGift.cardMetadata.stampData[STAMP_ID][i] == 0
|
||||
&& gSaveBlock1Ptr->mysteryGift.cardMetadata.stampData[STAMP_SPECIES][i] == SPECIES_NONE)
|
||||
{
|
||||
gSaveBlock1Ptr->mysteryGift.cardMetadata.stampData[STAMP_ID][i] = stamp[STAMP_ID];
|
||||
gSaveBlock1Ptr->mysteryGift.cardMetadata.stampData[STAMP_SPECIES][i] = stamp[STAMP_SPECIES];
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
#define GAME_DATA_VALID_VAR 0x101
|
||||
|
||||
#if defined(FIRERED)
|
||||
#define VERSION_CODE 1
|
||||
#elif defined(LEAFGREEN)
|
||||
#define VERSION_CODE 2
|
||||
#endif
|
||||
|
||||
void MysteryGift_LoadLinkGameData(struct MysteryGiftLinkGameData * data)
|
||||
{
|
||||
s32 i;
|
||||
CpuFill32(0, data, sizeof(*data));
|
||||
// Magic
|
||||
data->unk_00 = GAME_DATA_VALID_VAR;
|
||||
data->unk_04 = 1;
|
||||
data->unk_08 = 1;
|
||||
data->unk_0C = 1;
|
||||
data->unk_10 = VERSION_CODE;
|
||||
|
||||
// Check whether a card already exists
|
||||
if (ValidateSavedWonderCard())
|
||||
{
|
||||
// Populate fields
|
||||
data->flagId = GetSavedWonderCard()->flagId;
|
||||
data->cardMetadata = *GetSavedWonderCardMetadata();
|
||||
data->maxStamps = GetSavedWonderCard()->maxStamps;
|
||||
}
|
||||
else
|
||||
{
|
||||
data->flagId = 0;
|
||||
}
|
||||
|
||||
for (i = 0; i < NUM_QUESTIONNAIRE_WORDS; i++)
|
||||
data->questionnaireWords[i] = gSaveBlock1Ptr->mysteryGift.questionnaireWords[i];
|
||||
|
||||
CopyTrainerId(data->playerTrainerId, gSaveBlock2Ptr->playerTrainerId);
|
||||
StringCopy(data->playerName, gSaveBlock2Ptr->playerName);
|
||||
for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++)
|
||||
data->easyChatProfile[i] = gSaveBlock1Ptr->easyChatProfile[i];
|
||||
|
||||
memcpy(data->gameCode, RomHeaderGameCode, GAME_CODE_LENGTH);
|
||||
data->version = RomHeaderSoftwareVersion;
|
||||
}
|
||||
|
||||
bool32 MysteryGift_ValidateLinkGameData(const struct MysteryGiftLinkGameData * data)
|
||||
{
|
||||
if (data->unk_00 != GAME_DATA_VALID_VAR)
|
||||
return FALSE;
|
||||
if (!(data->unk_04 & 1))
|
||||
return FALSE;
|
||||
if (!(data->unk_08 & 1))
|
||||
return FALSE;
|
||||
if (!(data->unk_0C & 1))
|
||||
return FALSE;
|
||||
if (!(data->unk_10 & 0x0F))
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
u32 MysteryGift_CompareCardFlags(const u16 * flagId, const struct MysteryGiftLinkGameData * data, const void *unused)
|
||||
{
|
||||
// Has a Wonder Card already?
|
||||
if (data->flagId == 0)
|
||||
return 0;
|
||||
|
||||
// Has this Wonder Card already?
|
||||
if (*flagId == data->flagId)
|
||||
return 1;
|
||||
|
||||
// Player has a different Wonder Card
|
||||
return 2;
|
||||
}
|
||||
|
||||
u32 MysteryGift_CheckStamps(const u16 * stamp, const struct MysteryGiftLinkGameData * data, const void *unused)
|
||||
{
|
||||
s32 stampsMissing = data->maxStamps - GetNumStampsInMetadata(&data->cardMetadata, data->maxStamps);
|
||||
|
||||
// Has full stamp card?
|
||||
if (stampsMissing == 0)
|
||||
return 1;
|
||||
|
||||
// Already has stamp?
|
||||
if (IsStampInMetadata(&data->cardMetadata, stamp, data->maxStamps))
|
||||
return 3;
|
||||
|
||||
// Only 1 empty stamp left?
|
||||
if (stampsMissing == 1)
|
||||
return 4;
|
||||
|
||||
// This is a new stamp
|
||||
return 2;
|
||||
}
|
||||
|
||||
bool32 MysteryGift_DoesQuestionnaireMatch(const struct MysteryGiftLinkGameData * data, const u16 * words)
|
||||
{
|
||||
s32 i;
|
||||
for (i = 0; i < NUM_QUESTIONNAIRE_WORDS; i++)
|
||||
{
|
||||
if (data->questionnaireWords[i] != words[i])
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static s32 GetNumStampsInLinkData(const struct MysteryGiftLinkGameData * data)
|
||||
{
|
||||
return GetNumStampsInMetadata(&data->cardMetadata, data->maxStamps);
|
||||
}
|
||||
|
||||
u16 MysteryGift_GetCardStatFromLinkData(const struct MysteryGiftLinkGameData * data, u32 stat)
|
||||
{
|
||||
switch (stat)
|
||||
{
|
||||
case CARD_STAT_BATTLES_WON:
|
||||
return data->cardMetadata.battlesWon;
|
||||
case CARD_STAT_BATTLES_LOST:
|
||||
return data->cardMetadata.battlesLost;
|
||||
case CARD_STAT_NUM_TRADES:
|
||||
return data->cardMetadata.numTrades;
|
||||
case CARD_STAT_NUM_STAMPS:
|
||||
return GetNumStampsInLinkData(data);
|
||||
case CARD_STAT_MAX_STAMPS:
|
||||
return data->maxStamps;
|
||||
default:
|
||||
AGB_ASSERT_EX(0, ABSPATH("mevent.c"), 825);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void IncrementCardStat(u32 statType)
|
||||
{
|
||||
struct WonderCard * card = &gSaveBlock1Ptr->mysteryGift.card;
|
||||
if (card->type == CARD_TYPE_LINK_STAT)
|
||||
{
|
||||
u16 * stat = NULL;
|
||||
switch (statType)
|
||||
{
|
||||
case CARD_STAT_BATTLES_WON:
|
||||
stat = &gSaveBlock1Ptr->mysteryGift.cardMetadata.battlesWon;
|
||||
break;
|
||||
case CARD_STAT_BATTLES_LOST:
|
||||
stat = &gSaveBlock1Ptr->mysteryGift.cardMetadata.battlesLost;
|
||||
break;
|
||||
case CARD_STAT_NUM_TRADES:
|
||||
stat = &gSaveBlock1Ptr->mysteryGift.cardMetadata.numTrades;
|
||||
break;
|
||||
case CARD_STAT_NUM_STAMPS:
|
||||
case CARD_STAT_MAX_STAMPS:
|
||||
break;
|
||||
}
|
||||
if (stat == NULL)
|
||||
{
|
||||
AGB_ASSERT_EX(0, ABSPATH("mevent.c"), 868);
|
||||
}
|
||||
else if (++(*stat) > MAX_WONDER_CARD_STAT)
|
||||
{
|
||||
*stat = MAX_WONDER_CARD_STAT;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
u16 MysteryGift_GetCardStat(u32 stat)
|
||||
{
|
||||
switch (stat)
|
||||
{
|
||||
case CARD_STAT_BATTLES_WON:
|
||||
{
|
||||
struct WonderCard * card = &gSaveBlock1Ptr->mysteryGift.card;
|
||||
if (card->type == CARD_TYPE_LINK_STAT)
|
||||
{
|
||||
struct WonderCardMetadata * metadata = &gSaveBlock1Ptr->mysteryGift.cardMetadata;
|
||||
return metadata->battlesWon;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case CARD_STAT_BATTLES_LOST:
|
||||
{
|
||||
struct WonderCard * card = &gSaveBlock1Ptr->mysteryGift.card;
|
||||
if (card->type == CARD_TYPE_LINK_STAT)
|
||||
{
|
||||
struct WonderCardMetadata * metadata = &gSaveBlock1Ptr->mysteryGift.cardMetadata;
|
||||
return metadata->battlesLost;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case CARD_STAT_NUM_TRADES:
|
||||
{
|
||||
struct WonderCard * card = &gSaveBlock1Ptr->mysteryGift.card;
|
||||
if (card->type == CARD_TYPE_LINK_STAT)
|
||||
{
|
||||
struct WonderCardMetadata * metadata = &gSaveBlock1Ptr->mysteryGift.cardMetadata;
|
||||
return metadata->numTrades;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case CARD_STAT_NUM_STAMPS:
|
||||
{
|
||||
struct WonderCard * card = &gSaveBlock1Ptr->mysteryGift.card;
|
||||
if (card->type == CARD_TYPE_STAMP)
|
||||
return GetNumStampsInSavedCard();
|
||||
break;
|
||||
}
|
||||
case CARD_STAT_MAX_STAMPS:
|
||||
{
|
||||
struct WonderCard * card = &gSaveBlock1Ptr->mysteryGift.card;
|
||||
if (card->type == CARD_TYPE_STAMP)
|
||||
return card->maxStamps;
|
||||
break;
|
||||
}
|
||||
}
|
||||
AGB_ASSERT_EX(0, ABSPATH("mevent.c"), 913);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void MysteryGift_DisableStats(void)
|
||||
{
|
||||
sStatsEnabled = FALSE;
|
||||
}
|
||||
|
||||
bool32 MysteryGift_TryEnableStatsByFlagId(u16 flagId)
|
||||
{
|
||||
sStatsEnabled = FALSE;
|
||||
if (flagId == 0)
|
||||
return FALSE;
|
||||
if (!ValidateSavedWonderCard())
|
||||
return FALSE;
|
||||
if (gSaveBlock1Ptr->mysteryGift.card.flagId != flagId)
|
||||
return FALSE;
|
||||
sStatsEnabled = TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void MysteryGift_TryIncrementStat(u32 stat, u32 trainerId)
|
||||
{
|
||||
if (sStatsEnabled)
|
||||
{
|
||||
switch (stat)
|
||||
{
|
||||
case CARD_STAT_NUM_TRADES:
|
||||
IncrementCardStatForNewTrainer(CARD_STAT_NUM_TRADES,
|
||||
trainerId,
|
||||
gSaveBlock1Ptr->mysteryGift.trainerIds[1],
|
||||
ARRAY_COUNT(gSaveBlock1Ptr->mysteryGift.trainerIds[1]));
|
||||
break;
|
||||
case CARD_STAT_BATTLES_WON:
|
||||
IncrementCardStatForNewTrainer(CARD_STAT_BATTLES_WON,
|
||||
trainerId,
|
||||
gSaveBlock1Ptr->mysteryGift.trainerIds[0],
|
||||
ARRAY_COUNT(gSaveBlock1Ptr->mysteryGift.trainerIds[0]));
|
||||
break;
|
||||
case CARD_STAT_BATTLES_LOST:
|
||||
IncrementCardStatForNewTrainer(CARD_STAT_BATTLES_LOST,
|
||||
trainerId,
|
||||
gSaveBlock1Ptr->mysteryGift.trainerIds[0],
|
||||
ARRAY_COUNT(gSaveBlock1Ptr->mysteryGift.trainerIds[0]));
|
||||
break;
|
||||
default:
|
||||
AGB_ASSERT_EX(0, ABSPATH("mevent.c"), 988);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void ClearSavedTrainerIds(void)
|
||||
{
|
||||
CpuFill32(0, gSaveBlock1Ptr->mysteryGift.trainerIds, sizeof(gSaveBlock1Ptr->mysteryGift.trainerIds));
|
||||
}
|
||||
|
||||
// Returns TRUE if it's a new trainer id, FALSE if an existing one.
|
||||
// In either case the given trainerId is saved in element 0
|
||||
static bool32 RecordTrainerId(u32 trainerId, u32 * trainerIds, s32 size)
|
||||
{
|
||||
s32 i;
|
||||
s32 j;
|
||||
|
||||
for (i = 0; i < size; i++)
|
||||
{
|
||||
if (trainerIds[i] == trainerId)
|
||||
break;
|
||||
}
|
||||
|
||||
if (i == size)
|
||||
{
|
||||
// New trainer, shift array and insert new id at front
|
||||
for (j = size - 1; j > 0; j--)
|
||||
trainerIds[j] = trainerIds[j - 1];
|
||||
|
||||
trainerIds[0] = trainerId;
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Existing trainer, shift back to old slot and move id to front
|
||||
for (j = i; j > 0; j--)
|
||||
trainerIds[j] = trainerIds[j - 1];
|
||||
|
||||
trainerIds[0] = trainerId;
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
static void IncrementCardStatForNewTrainer(u32 stat, u32 trainerId, u32 * trainerIds, s32 size)
|
||||
{
|
||||
if (RecordTrainerId(trainerId, trainerIds, size))
|
||||
IncrementCardStat(stat);
|
||||
}
|
||||
@@ -0,0 +1,300 @@
|
||||
#include "global.h"
|
||||
#include "gflib.h"
|
||||
#include "decompress.h"
|
||||
#include "overworld.h"
|
||||
#include "script.h"
|
||||
#include "battle_tower.h"
|
||||
#include "mystery_event_script.h"
|
||||
#include "mystery_gift.h"
|
||||
#include "mystery_gift_client.h"
|
||||
#include "mystery_gift_server.h"
|
||||
|
||||
enum {
|
||||
FUNC_INIT,
|
||||
FUNC_DONE,
|
||||
FUNC_RECV,
|
||||
FUNC_SEND,
|
||||
FUNC_RUN,
|
||||
FUNC_WAIT,
|
||||
FUNC_RUN_MEVENT,
|
||||
FUNC_RUN_BUFFER,
|
||||
};
|
||||
|
||||
static EWRAM_DATA struct MysteryGiftClient * sClient = NULL;
|
||||
|
||||
static void MysteryGiftClient_Init(struct MysteryGiftClient *, u32, u32);
|
||||
static u32 MysteryGiftClient_CallFunc(struct MysteryGiftClient *);
|
||||
static void MysteryGiftClient_Free(struct MysteryGiftClient *);
|
||||
|
||||
extern const struct MysteryGiftClientCmd gMysteryGiftClientScript_Init[];
|
||||
|
||||
void MysteryGiftClient_Create(void)
|
||||
{
|
||||
sClient = AllocZeroed(sizeof(*sClient));
|
||||
MysteryGiftClient_Init(sClient, 1, 0);
|
||||
}
|
||||
|
||||
u32 MysteryGiftClient_Run(u16 * endVal)
|
||||
{
|
||||
u32 result;
|
||||
if (sClient == NULL)
|
||||
return CLI_RET_END;
|
||||
result = MysteryGiftClient_CallFunc(sClient);
|
||||
if (result == CLI_RET_END)
|
||||
{
|
||||
*endVal = sClient->param;
|
||||
MysteryGiftClient_Free(sClient);
|
||||
FREE_AND_SET_NULL(sClient);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void MysteryGiftClient_AdvanceState(void)
|
||||
{
|
||||
sClient->funcState++;
|
||||
}
|
||||
|
||||
void *MysteryGiftClient_GetMsg(void)
|
||||
{
|
||||
return sClient->msg;
|
||||
}
|
||||
|
||||
void MysteryGiftClient_SetParam(u32 val)
|
||||
{
|
||||
sClient->param = val;
|
||||
}
|
||||
|
||||
static void MysteryGiftClient_Init(struct MysteryGiftClient * client, u32 sendPlayerId, u32 recvPlayerId)
|
||||
{
|
||||
client->unused = 0;
|
||||
client->funcId = FUNC_INIT;
|
||||
client->funcState = 0;
|
||||
client->sendBuffer = AllocZeroed(MG_LINK_BUFFER_SIZE);
|
||||
client->recvBuffer = AllocZeroed(MG_LINK_BUFFER_SIZE);
|
||||
client->script = AllocZeroed(MG_LINK_BUFFER_SIZE);
|
||||
client->msg = AllocZeroed(CLIENT_MAX_MSG_SIZE);
|
||||
MysteryGiftLink_Init(&client->link, sendPlayerId, recvPlayerId);
|
||||
}
|
||||
|
||||
static void MysteryGiftClient_Free(struct MysteryGiftClient * client)
|
||||
{
|
||||
Free(client->sendBuffer);
|
||||
Free(client->recvBuffer);
|
||||
Free(client->script);
|
||||
Free(client->msg);
|
||||
}
|
||||
|
||||
static void MysteryGiftClient_CopyRecvScript(struct MysteryGiftClient * client)
|
||||
{
|
||||
memcpy(client->script, client->recvBuffer, MG_LINK_BUFFER_SIZE);
|
||||
client->cmdidx = 0;
|
||||
}
|
||||
|
||||
static void MysteryGiftClient_InitSendWord(struct MysteryGiftClient * client, u32 ident, u32 word)
|
||||
{
|
||||
CpuFill32(0, client->sendBuffer, MG_LINK_BUFFER_SIZE);
|
||||
*(u32 *)client->sendBuffer = word;
|
||||
MysteryGiftLink_InitSend(&client->link, ident, client->sendBuffer, sizeof(word));
|
||||
}
|
||||
|
||||
static u32 Client_Init(struct MysteryGiftClient * client)
|
||||
{
|
||||
memcpy(client->script, gMysteryGiftClientScript_Init, MG_LINK_BUFFER_SIZE);
|
||||
client->cmdidx = 0;
|
||||
client->funcId = FUNC_RUN;
|
||||
client->funcState = 0;
|
||||
return CLI_RET_INIT;
|
||||
}
|
||||
|
||||
static u32 Client_Done(struct MysteryGiftClient * client)
|
||||
{
|
||||
return CLI_RET_END;
|
||||
}
|
||||
|
||||
static u32 Client_Recv(struct MysteryGiftClient * client)
|
||||
{
|
||||
if (MysteryGiftLink_Recv(&client->link))
|
||||
{
|
||||
client->funcId = FUNC_RUN;
|
||||
client->funcState = 0;
|
||||
}
|
||||
return CLI_RET_ACTIVE;
|
||||
}
|
||||
|
||||
static u32 Client_Send(struct MysteryGiftClient * client)
|
||||
{
|
||||
if (MysteryGiftLink_Send(&client->link))
|
||||
{
|
||||
client->funcId = FUNC_RUN;
|
||||
client->funcState = 0;
|
||||
}
|
||||
return CLI_RET_ACTIVE;
|
||||
}
|
||||
|
||||
static u32 Client_Run(struct MysteryGiftClient * client)
|
||||
{
|
||||
// process command
|
||||
struct MysteryGiftClientCmd * cmd = &client->script[client->cmdidx];
|
||||
client->cmdidx++;
|
||||
switch (cmd->instr)
|
||||
{
|
||||
case CLI_NONE:
|
||||
break;
|
||||
case CLI_RETURN:
|
||||
client->param = cmd->parameter; // Set for endVal in MysteryGiftClient_Run
|
||||
client->funcId = FUNC_DONE;
|
||||
client->funcState = 0;
|
||||
break;
|
||||
case CLI_RECV:
|
||||
MysteryGiftLink_InitRecv(&client->link, cmd->parameter, client->recvBuffer);
|
||||
client->funcId = FUNC_RECV;
|
||||
client->funcState = 0;
|
||||
break;
|
||||
case CLI_SEND_LOADED:
|
||||
// Send without a MysteryGiftLink_InitSend
|
||||
// Sends whatever has been loaded already
|
||||
client->funcId = FUNC_SEND;
|
||||
client->funcState = 0;
|
||||
break;
|
||||
case CLI_SEND_READY_END:
|
||||
MysteryGiftLink_InitSend(&client->link, MG_LINKID_READY_END, client->sendBuffer, 0);
|
||||
client->funcId = FUNC_SEND;
|
||||
client->funcState = 0;
|
||||
break;
|
||||
case CLI_SEND_STAT:
|
||||
MysteryGiftClient_InitSendWord(client, MG_LINKID_GAME_STAT, GetGameStat(cmd->parameter));
|
||||
client->funcId = FUNC_SEND;
|
||||
client->funcState = 0;
|
||||
break;
|
||||
case CLI_COPY_RECV_IF_N:
|
||||
if (client->param == FALSE)
|
||||
MysteryGiftClient_CopyRecvScript(client);
|
||||
break;
|
||||
case CLI_COPY_RECV_IF:
|
||||
if (client->param == TRUE)
|
||||
MysteryGiftClient_CopyRecvScript(client);
|
||||
break;
|
||||
case CLI_COPY_RECV:
|
||||
MysteryGiftClient_CopyRecvScript(client);
|
||||
break;
|
||||
case CLI_YES_NO:
|
||||
memcpy(client->msg, client->recvBuffer, CLIENT_MAX_MSG_SIZE);
|
||||
client->funcId = FUNC_WAIT;
|
||||
client->funcState = 0;
|
||||
return CLI_RET_YES_NO;
|
||||
case CLI_PRINT_MSG:
|
||||
memcpy(client->msg, client->recvBuffer, CLIENT_MAX_MSG_SIZE);
|
||||
client->funcId = FUNC_WAIT;
|
||||
client->funcState = 0;
|
||||
return CLI_RET_PRINT_MSG;
|
||||
case CLI_COPY_MSG:
|
||||
memcpy(client->msg, client->recvBuffer, CLIENT_MAX_MSG_SIZE);
|
||||
client->funcId = FUNC_WAIT;
|
||||
client->funcState = 0;
|
||||
return CLI_RET_COPY_MSG;
|
||||
case CLI_ASK_TOSS:
|
||||
client->funcId = FUNC_WAIT;
|
||||
client->funcState = 0;
|
||||
return CLI_RET_ASK_TOSS;
|
||||
case CLI_LOAD_GAME_DATA:
|
||||
MysteryGift_LoadLinkGameData(client->sendBuffer);
|
||||
MysteryGiftLink_InitSend(&client->link, MG_LINKID_GAME_DATA, client->sendBuffer, sizeof(struct MysteryGiftLinkGameData));
|
||||
break;
|
||||
case CLI_LOAD_TOSS_RESPONSE:
|
||||
// param here is set by MG_STATE_CLIENT_ASK_TOSS or MG_STATE_CLIENT_ASK_TOSS_UNRECEIVED
|
||||
MysteryGiftClient_InitSendWord(client, MG_LINKID_RESPONSE, client->param);
|
||||
break;
|
||||
case CLI_SAVE_CARD:
|
||||
SaveWonderCard(client->recvBuffer);
|
||||
break;
|
||||
case CLI_SAVE_NEWS:
|
||||
if (!IsWonderNewsSameAsSaved(client->recvBuffer))
|
||||
{
|
||||
SaveWonderNews(client->recvBuffer);
|
||||
MysteryGiftClient_InitSendWord(client, MG_LINKID_RESPONSE, FALSE);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Wonder News has already been saved (or is invalid).
|
||||
// Prepare a signal to indicate it was not saved.
|
||||
MysteryGiftClient_InitSendWord(client, MG_LINKID_RESPONSE, TRUE);
|
||||
}
|
||||
break;
|
||||
case CLI_RUN_MEVENT_SCRIPT:
|
||||
client->funcId = FUNC_RUN_MEVENT;
|
||||
client->funcState = 0;
|
||||
break;
|
||||
case CLI_SAVE_STAMP:
|
||||
MysteryGift_TrySaveStamp(client->recvBuffer);
|
||||
break;
|
||||
case CLI_SAVE_RAM_SCRIPT:
|
||||
InitRamScript_NoObjectEvent(client->recvBuffer, sizeof(struct RamScriptData));
|
||||
break;
|
||||
case CLI_RECV_EREADER_TRAINER:
|
||||
memcpy(&gSaveBlock2Ptr->battleTower.ereaderTrainer, client->recvBuffer, sizeof(gSaveBlock2Ptr->battleTower.ereaderTrainer));
|
||||
ValidateEReaderTrainer();
|
||||
break;
|
||||
case CLI_RUN_BUFFER_SCRIPT:
|
||||
memcpy(gDecompressionBuffer, client->recvBuffer, MG_LINK_BUFFER_SIZE);
|
||||
client->funcId = FUNC_RUN_BUFFER;
|
||||
client->funcState = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
return CLI_RET_ACTIVE;
|
||||
}
|
||||
|
||||
static u32 Client_Wait(struct MysteryGiftClient * client)
|
||||
{
|
||||
if (client->funcState)
|
||||
{
|
||||
client->funcId = FUNC_RUN;
|
||||
client->funcState = 0;
|
||||
}
|
||||
return CLI_RET_ACTIVE;
|
||||
}
|
||||
|
||||
static u32 Client_RunMysteryEventScript(struct MysteryGiftClient * client)
|
||||
{
|
||||
switch (client->funcState)
|
||||
{
|
||||
case 0:
|
||||
MEventScript_InitContext(client->recvBuffer);
|
||||
client->funcState++;
|
||||
break;
|
||||
case 1:
|
||||
if (!MEventScript_Run(&client->param))
|
||||
{
|
||||
client->funcId = FUNC_RUN;
|
||||
client->funcState = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return CLI_RET_ACTIVE;
|
||||
}
|
||||
|
||||
static u32 Client_RunBufferScript(struct MysteryGiftClient * client)
|
||||
{
|
||||
u32 (*func)(u32 *, struct SaveBlock2 *, struct SaveBlock1 *) = (void *)gDecompressionBuffer;
|
||||
if (func(&client->param, gSaveBlock2Ptr, gSaveBlock1Ptr) == 1)
|
||||
{
|
||||
client->funcId = FUNC_RUN;
|
||||
client->funcState = 0;
|
||||
}
|
||||
return CLI_RET_ACTIVE;
|
||||
}
|
||||
|
||||
static u32 MysteryGiftClient_CallFunc(struct MysteryGiftClient * client)
|
||||
{
|
||||
u32 (*funcs[])(struct MysteryGiftClient *) = {
|
||||
[FUNC_INIT] = Client_Init,
|
||||
[FUNC_DONE] = Client_Done,
|
||||
[FUNC_RECV] = Client_Recv,
|
||||
[FUNC_SEND] = Client_Send,
|
||||
[FUNC_RUN] = Client_Run,
|
||||
[FUNC_WAIT] = Client_Wait,
|
||||
[FUNC_RUN_MEVENT] = Client_RunMysteryEventScript,
|
||||
[FUNC_RUN_BUFFER] = Client_RunBufferScript
|
||||
};
|
||||
return funcs[client->funcId](client);
|
||||
}
|
||||
@@ -0,0 +1,215 @@
|
||||
#include "global.h"
|
||||
#include "util.h"
|
||||
#include "link.h"
|
||||
#include "link_rfu.h"
|
||||
#include "mystery_gift_server.h"
|
||||
|
||||
/*
|
||||
Handles the link connection functions used by the Mystery Gift client/server.
|
||||
Note: MysteryGiftLink is shortened to MGL for internal functions.
|
||||
*/
|
||||
|
||||
struct SendRecvHeader
|
||||
{
|
||||
u16 ident;
|
||||
u16 crc;
|
||||
u16 size;
|
||||
};
|
||||
|
||||
static u32 MGL_Receive(struct MysteryGiftLink *);
|
||||
static u32 MGL_Send(struct MysteryGiftLink *);
|
||||
|
||||
u32 MysteryGiftLink_Recv(struct MysteryGiftLink * link)
|
||||
{
|
||||
return link->recvFunc(link);
|
||||
}
|
||||
|
||||
u32 MysteryGiftLink_Send(struct MysteryGiftLink * link)
|
||||
{
|
||||
return link->sendFunc(link);
|
||||
}
|
||||
|
||||
void MysteryGiftLink_Init(struct MysteryGiftLink * link, u32 sendPlayerId, u32 recvPlayerId)
|
||||
{
|
||||
link->sendPlayerId = sendPlayerId;
|
||||
link->recvPlayerId = recvPlayerId;
|
||||
link->state = 0;
|
||||
link->sendCRC = 0;
|
||||
link->sendSize = 0;
|
||||
link->sendCounter = 0;
|
||||
link->recvCRC = 0;
|
||||
link->recvSize = 0;
|
||||
link->recvCounter = 0;
|
||||
link->sendBuffer = NULL;
|
||||
link->recvBuffer = NULL;
|
||||
link->sendFunc = MGL_Send;
|
||||
link->recvFunc = MGL_Receive;
|
||||
}
|
||||
|
||||
void MysteryGiftLink_InitSend(struct MysteryGiftLink * link, u32 ident, const void *src, u32 size)
|
||||
{
|
||||
link->state = 0;
|
||||
link->sendIdent = ident;
|
||||
link->sendCounter = 0;
|
||||
link->sendCRC = 0;
|
||||
if (size != 0)
|
||||
link->sendSize = size;
|
||||
else
|
||||
link->sendSize = MG_LINK_BUFFER_SIZE;
|
||||
link->sendBuffer = src;
|
||||
}
|
||||
|
||||
void MysteryGiftLink_InitRecv(struct MysteryGiftLink * link, u32 ident, void *dest)
|
||||
{
|
||||
link->state = 0;
|
||||
link->recvIdent = ident;
|
||||
link->recvCounter = 0;
|
||||
link->recvCRC = 0;
|
||||
link->recvSize = 0;
|
||||
link->recvBuffer = dest;
|
||||
}
|
||||
|
||||
static void MGL_ReceiveBlock(u32 playerId, void *dest, size_t size)
|
||||
{
|
||||
memcpy(dest, gBlockRecvBuffer[playerId], size);
|
||||
}
|
||||
|
||||
static bool32 MGL_HasReceived(u32 playerId)
|
||||
{
|
||||
if ((GetBlockReceivedStatus() >> playerId) & 1)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void MGL_ResetReceived(u32 playerId)
|
||||
{
|
||||
ResetBlockReceivedFlag(playerId);
|
||||
}
|
||||
|
||||
static bool32 MGL_Receive(struct MysteryGiftLink * link)
|
||||
{
|
||||
struct SendRecvHeader header;
|
||||
|
||||
switch (link->state)
|
||||
{
|
||||
case 0:
|
||||
if (MGL_HasReceived(link->recvPlayerId))
|
||||
{
|
||||
MGL_ReceiveBlock(link->recvPlayerId, &header, sizeof(header));
|
||||
link->recvSize = header.size;
|
||||
link->recvCRC = header.crc;
|
||||
if (link->recvSize > MG_LINK_BUFFER_SIZE)
|
||||
{
|
||||
LinkRfu_FatalError();
|
||||
return FALSE;
|
||||
}
|
||||
else if (link->recvIdent != header.ident)
|
||||
{
|
||||
LinkRfu_FatalError();
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
link->recvCounter = 0;
|
||||
MGL_ResetReceived(link->recvPlayerId);
|
||||
link->state++;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (MGL_HasReceived(link->recvPlayerId))
|
||||
{
|
||||
size_t blocksize = link->recvCounter * 252;
|
||||
if (link->recvSize - blocksize <= 252)
|
||||
{
|
||||
MGL_ReceiveBlock(link->recvPlayerId, link->recvBuffer + blocksize, link->recvSize - blocksize);
|
||||
link->recvCounter++;
|
||||
link->state++;
|
||||
}
|
||||
else
|
||||
{
|
||||
MGL_ReceiveBlock(link->recvPlayerId, link->recvBuffer + blocksize, 252);
|
||||
link->recvCounter++;
|
||||
}
|
||||
MGL_ResetReceived(link->recvPlayerId);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (CalcCRC16WithTable(link->recvBuffer, link->recvSize) != link->recvCRC)
|
||||
{
|
||||
LinkRfu_FatalError();
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
link->state = 0;
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool32 MGL_Send(struct MysteryGiftLink * link)
|
||||
{
|
||||
struct SendRecvHeader header;
|
||||
|
||||
switch (link->state)
|
||||
{
|
||||
case 0:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
header.ident = link->sendIdent;
|
||||
header.size = link->sendSize;
|
||||
header.crc = CalcCRC16WithTable(link->sendBuffer, link->sendSize);
|
||||
link->sendCRC = header.crc;
|
||||
link->sendCounter = 0;
|
||||
SendBlock(0, &header, sizeof(header));
|
||||
link->state++;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
if (MGL_HasReceived(link->sendPlayerId))
|
||||
{
|
||||
size_t blocksize;
|
||||
MGL_ResetReceived(link->sendPlayerId);
|
||||
blocksize = 252 * link->sendCounter;
|
||||
if (link->sendSize - blocksize <= 252)
|
||||
{
|
||||
SendBlock(0, link->sendBuffer + blocksize, link->sendSize - blocksize);
|
||||
link->sendCounter++;
|
||||
link->state++;
|
||||
}
|
||||
else
|
||||
{
|
||||
SendBlock(0, link->sendBuffer + blocksize, 252);
|
||||
link->sendCounter++;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
if (CalcCRC16WithTable(link->sendBuffer, link->sendSize) != link->sendCRC)
|
||||
LinkRfu_FatalError();
|
||||
else
|
||||
link->state++;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (MGL_HasReceived(link->sendPlayerId))
|
||||
{
|
||||
MGL_ResetReceived(link->sendPlayerId);
|
||||
link->state = 0;
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
+578
-651
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,198 @@
|
||||
#include "global.h"
|
||||
#include "mystery_gift_server.h"
|
||||
#include "mystery_gift_client.h"
|
||||
#include "constants/mystery_gift.h"
|
||||
|
||||
extern const struct MysteryGiftServerCmd gServerScript_ClientCanceledCard[];
|
||||
|
||||
// Unreferenced
|
||||
static const u8 sText_CollectedAllStamps[] = _("You have collected all STAMPs!\nWant to input a CARD as a prize?");
|
||||
|
||||
//==================
|
||||
// Client scripts
|
||||
//==================
|
||||
|
||||
const struct MysteryGiftClientCmd gMysteryGiftClientScript_Init[] = {
|
||||
{CLI_RECV, MG_LINKID_CLIENT_SCRIPT},
|
||||
{CLI_COPY_RECV}
|
||||
};
|
||||
|
||||
static const struct MysteryGiftClientCmd sClientScript_SendGameData[] = {
|
||||
{CLI_LOAD_GAME_DATA},
|
||||
{CLI_SEND_LOADED},
|
||||
{CLI_RECV, MG_LINKID_CLIENT_SCRIPT},
|
||||
{CLI_COPY_RECV}
|
||||
};
|
||||
|
||||
static const struct MysteryGiftClientCmd sClientScript_CantAccept[] = {
|
||||
{CLI_SEND_READY_END},
|
||||
{CLI_RETURN, CLI_MSG_CANT_ACCEPT}
|
||||
};
|
||||
|
||||
static const struct MysteryGiftClientCmd sClientScript_CommError[] = {
|
||||
{CLI_SEND_READY_END},
|
||||
{CLI_RETURN, CLI_MSG_COMM_ERROR}
|
||||
};
|
||||
|
||||
static const struct MysteryGiftClientCmd sClientScript_NothingSent[] = {
|
||||
{CLI_SEND_READY_END},
|
||||
{CLI_RETURN, CLI_MSG_NOTHING_SENT}
|
||||
};
|
||||
|
||||
static const struct MysteryGiftClientCmd sClientScript_SaveCard[] = {
|
||||
{CLI_RECV, MG_LINKID_CARD},
|
||||
{CLI_SAVE_CARD},
|
||||
{CLI_RECV, MG_LINKID_RAM_SCRIPT},
|
||||
{CLI_SAVE_RAM_SCRIPT},
|
||||
{CLI_SEND_READY_END},
|
||||
{CLI_RETURN, CLI_MSG_CARD_RECEIVED}
|
||||
};
|
||||
|
||||
static const struct MysteryGiftClientCmd sClientScript_SaveNews[] = {
|
||||
{CLI_RECV, MG_LINKID_NEWS},
|
||||
{CLI_SAVE_NEWS},
|
||||
{CLI_SEND_LOADED}, // Send whether or not the News was saved (read by sServerScript_SendNews)
|
||||
{CLI_RECV, MG_LINKID_CLIENT_SCRIPT},
|
||||
{CLI_COPY_RECV}
|
||||
};
|
||||
|
||||
static const struct MysteryGiftClientCmd sClientScript_HadNews[] = {
|
||||
{CLI_SEND_READY_END},
|
||||
{CLI_RETURN, CLI_MSG_HAD_NEWS}
|
||||
};
|
||||
|
||||
static const struct MysteryGiftClientCmd sClientScript_NewsReceived[] = {
|
||||
{CLI_SEND_READY_END},
|
||||
{CLI_RETURN, CLI_MSG_NEWS_RECEIVED}
|
||||
};
|
||||
|
||||
static const struct MysteryGiftClientCmd sClientScript_AskToss[] = {
|
||||
{CLI_ASK_TOSS},
|
||||
{CLI_LOAD_TOSS_RESPONSE},
|
||||
{CLI_SEND_LOADED},
|
||||
{CLI_RECV, MG_LINKID_CLIENT_SCRIPT},
|
||||
{CLI_COPY_RECV}
|
||||
};
|
||||
|
||||
static const struct MysteryGiftClientCmd sClientScript_Canceled[] = {
|
||||
{CLI_SEND_READY_END},
|
||||
{CLI_RETURN, CLI_MSG_COMM_CANCELED}
|
||||
};
|
||||
|
||||
static const struct MysteryGiftClientCmd sClientScript_HadCard[] = {
|
||||
{CLI_SEND_READY_END},
|
||||
{CLI_RETURN, CLI_MSG_HAD_CARD}
|
||||
};
|
||||
|
||||
static const struct MysteryGiftClientCmd sClientScript_DynamicSuccess[] = {
|
||||
{CLI_RECV, MG_LINKID_DYNAMIC_MSG},
|
||||
{CLI_COPY_MSG},
|
||||
{CLI_SEND_READY_END},
|
||||
{CLI_RETURN, CLI_MSG_BUFFER_SUCCESS}
|
||||
};
|
||||
|
||||
//==================
|
||||
// Server scripts
|
||||
//==================
|
||||
|
||||
static const struct MysteryGiftServerCmd sServerScript_CantSend[] = {
|
||||
{SVR_LOAD_CLIENT_SCRIPT, PTR_ARG(sClientScript_CantAccept)},
|
||||
{SVR_SEND},
|
||||
{SVR_RECV, MG_LINKID_READY_END},
|
||||
{SVR_RETURN, SVR_MSG_CANT_SEND_GIFT_1}
|
||||
};
|
||||
|
||||
static const struct MysteryGiftServerCmd sServerScript_CommError[] = {
|
||||
{SVR_LOAD_CLIENT_SCRIPT, PTR_ARG(sClientScript_CommError)},
|
||||
{SVR_SEND},
|
||||
{SVR_RECV, MG_LINKID_READY_END},
|
||||
{SVR_RETURN, SVR_MSG_COMM_ERROR}
|
||||
};
|
||||
|
||||
static const struct MysteryGiftServerCmd sServerScript_ClientCanceledNews[] = {
|
||||
{SVR_LOAD_CLIENT_SCRIPT, PTR_ARG(sClientScript_Canceled)},
|
||||
{SVR_SEND},
|
||||
{SVR_RECV, MG_LINKID_READY_END},
|
||||
{SVR_RETURN, SVR_MSG_CLIENT_CANCELED}
|
||||
};
|
||||
|
||||
static const struct MysteryGiftServerCmd sServerScript_HasNews[] = {
|
||||
{SVR_LOAD_CLIENT_SCRIPT, PTR_ARG(sClientScript_HadNews)},
|
||||
{SVR_SEND},
|
||||
{SVR_RECV, MG_LINKID_READY_END},
|
||||
{SVR_RETURN, SVR_MSG_HAS_NEWS}
|
||||
};
|
||||
|
||||
static const struct MysteryGiftServerCmd sServerScript_SendNews[] = {
|
||||
{SVR_LOAD_CLIENT_SCRIPT, PTR_ARG(sClientScript_SaveNews)},
|
||||
{SVR_SEND},
|
||||
{SVR_LOAD_NEWS},
|
||||
{SVR_SEND},
|
||||
{SVR_RECV, MG_LINKID_RESPONSE},
|
||||
{SVR_READ_RESPONSE},
|
||||
{SVR_GOTO_IF_EQ, TRUE, sServerScript_HasNews}, // Wonder News was not saved
|
||||
{SVR_LOAD_CLIENT_SCRIPT, PTR_ARG(sClientScript_NewsReceived)},
|
||||
{SVR_SEND},
|
||||
{SVR_RECV, MG_LINKID_READY_END},
|
||||
{SVR_RETURN, SVR_MSG_NEWS_SENT}
|
||||
};
|
||||
|
||||
static const struct MysteryGiftServerCmd sServerScript_SendCard[] = {
|
||||
{SVR_LOAD_CLIENT_SCRIPT, PTR_ARG(sClientScript_SaveCard)},
|
||||
{SVR_SEND},
|
||||
{SVR_LOAD_CARD},
|
||||
{SVR_SEND},
|
||||
{SVR_LOAD_RAM_SCRIPT},
|
||||
{SVR_SEND},
|
||||
{SVR_RECV, MG_LINKID_READY_END},
|
||||
{SVR_RETURN, SVR_MSG_CARD_SENT}
|
||||
};
|
||||
|
||||
static const struct MysteryGiftServerCmd sServerScript_TossPrompt[] = {
|
||||
{SVR_LOAD_CLIENT_SCRIPT, PTR_ARG(sClientScript_AskToss)},
|
||||
{SVR_SEND},
|
||||
{SVR_RECV, MG_LINKID_RESPONSE},
|
||||
{SVR_READ_RESPONSE},
|
||||
{SVR_GOTO_IF_EQ, FALSE, sServerScript_SendCard}, // Tossed old card, send new one
|
||||
{SVR_GOTO, .ptr = gServerScript_ClientCanceledCard} // Kept old card, cancel new one
|
||||
};
|
||||
|
||||
static const struct MysteryGiftServerCmd sServerScript_HasCard[] = {
|
||||
{SVR_LOAD_CLIENT_SCRIPT, PTR_ARG(sClientScript_HadCard)},
|
||||
{SVR_SEND},
|
||||
{SVR_RECV, MG_LINKID_READY_END},
|
||||
{SVR_RETURN, SVR_MSG_HAS_CARD}
|
||||
};
|
||||
|
||||
static const struct MysteryGiftServerCmd sServerScript_NothingSent[] = {
|
||||
{SVR_LOAD_CLIENT_SCRIPT, PTR_ARG(sClientScript_NothingSent)},
|
||||
{SVR_SEND},
|
||||
{SVR_RECV, MG_LINKID_READY_END},
|
||||
{SVR_RETURN, SVR_MSG_NOTHING_SENT}
|
||||
};
|
||||
|
||||
const struct MysteryGiftServerCmd gMysteryGiftServerScript_SendWonderNews[] = {
|
||||
{SVR_COPY_SAVED_NEWS},
|
||||
{SVR_LOAD_CLIENT_SCRIPT, PTR_ARG(sClientScript_SendGameData)},
|
||||
{SVR_SEND},
|
||||
{SVR_RECV, MG_LINKID_GAME_DATA},
|
||||
{SVR_COPY_GAME_DATA},
|
||||
{SVR_CHECK_GAME_DATA},
|
||||
{SVR_GOTO_IF_EQ, FALSE, sServerScript_CantSend},
|
||||
{SVR_GOTO, .ptr = sServerScript_SendNews},
|
||||
};
|
||||
|
||||
const struct MysteryGiftServerCmd gMysteryGiftServerScript_SendWonderCard[] = {
|
||||
{SVR_COPY_SAVED_CARD},
|
||||
{SVR_COPY_SAVED_RAM_SCRIPT},
|
||||
{SVR_LOAD_CLIENT_SCRIPT, PTR_ARG(sClientScript_SendGameData)},
|
||||
{SVR_SEND},
|
||||
{SVR_RECV, MG_LINKID_GAME_DATA},
|
||||
{SVR_COPY_GAME_DATA},
|
||||
{SVR_CHECK_GAME_DATA},
|
||||
{SVR_GOTO_IF_EQ, FALSE, sServerScript_CantSend},
|
||||
{SVR_CHECK_EXISTING_CARD},
|
||||
{SVR_GOTO_IF_EQ, HAS_DIFF_CARD, sServerScript_TossPrompt},
|
||||
{SVR_GOTO_IF_EQ, HAS_NO_CARD, sServerScript_SendCard},
|
||||
{SVR_GOTO, .ptr = sServerScript_HasCard} // HAS_SAME_CARD
|
||||
};
|
||||
@@ -0,0 +1,302 @@
|
||||
#include "global.h"
|
||||
#include "gflib.h"
|
||||
#include "script.h"
|
||||
#include "mystery_gift.h"
|
||||
#include "mystery_gift_server.h"
|
||||
|
||||
// Assert statements use the original GF names, which are defined below.
|
||||
// Note that their name "flag" is especially misleading,
|
||||
// as it's not a boolean (for example it can contain a size argument).
|
||||
// 'parameter' is shortened to param explicitly to avoid a collision with
|
||||
// the original name for a different field.
|
||||
#define mainseqno funcId
|
||||
#define func_tbl sFuncTable
|
||||
#define parameter ptr
|
||||
#define flag param
|
||||
#define ME_SEND_BUF_SIZE MG_LINK_BUFFER_SIZE
|
||||
#define FILE ABSPATH("mevent_server.c")
|
||||
|
||||
#define ASSERT_PTR_EMPTY(lineNum) AGB_ASSERT_EX(cmd->parameter == NULL, FILE, (lineNum));
|
||||
#define ASSERT_PARAM_EMPTY(lineNum) AGB_ASSERT_EX(cmd->flag == FALSE, FILE, (lineNum));
|
||||
#define ASSERT_PTR_PARAM_EMPTY(lineNum) AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, FILE, (lineNum));
|
||||
#define ASSERT_VALID_FUNC(lineNum) AGB_ASSERT_EX(svr->mainseqno < NELEMS(func_tbl), FILE, (lineNum));
|
||||
#define ASSERT_SIZE_OK(lineNum) AGB_ASSERT_EX(size <= ME_SEND_BUF_SIZE, FILE, (lineNum));
|
||||
|
||||
enum {
|
||||
FUNC_INIT,
|
||||
FUNC_DONE,
|
||||
FUNC_RECV,
|
||||
FUNC_SEND,
|
||||
FUNC_RUN,
|
||||
};
|
||||
|
||||
static EWRAM_DATA struct MysteryGiftServer * sServer = NULL;
|
||||
|
||||
static void MysteryGiftServer_Init(struct MysteryGiftServer *, const void *, u32, u32);
|
||||
static void MysteryGiftServer_Free(struct MysteryGiftServer *);
|
||||
static u32 MysteryGiftServer_CallFunc(struct MysteryGiftServer *);
|
||||
|
||||
extern const struct MysteryGiftServerCmd gMysteryGiftServerScript_SendWonderNews[];
|
||||
extern const struct MysteryGiftServerCmd gMysteryGiftServerScript_SendWonderCard[];
|
||||
|
||||
void MysterGiftServer_CreateForNews(void)
|
||||
{
|
||||
sServer = AllocZeroed(sizeof(*sServer));
|
||||
MysteryGiftServer_Init(sServer, gMysteryGiftServerScript_SendWonderNews, 0, 1);
|
||||
}
|
||||
|
||||
void MysterGiftServer_CreateForCard(void)
|
||||
{
|
||||
sServer = AllocZeroed(sizeof(*sServer));
|
||||
MysteryGiftServer_Init(sServer, gMysteryGiftServerScript_SendWonderCard, 0, 1);
|
||||
}
|
||||
|
||||
u32 MysterGiftServer_Run(u16 * endVal)
|
||||
{
|
||||
u32 result;
|
||||
if (sServer == NULL)
|
||||
return SVR_RET_END;
|
||||
result = MysteryGiftServer_CallFunc(sServer);
|
||||
if (result == SVR_RET_END)
|
||||
{
|
||||
*endVal = sServer->param;
|
||||
MysteryGiftServer_Free(sServer);
|
||||
FREE_AND_SET_NULL(sServer);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
static void MysteryGiftServer_Init(struct MysteryGiftServer * svr, const void *script, u32 sendPlayerId, u32 recvPlayerId)
|
||||
{
|
||||
svr->unused = 0;
|
||||
svr->funcId = FUNC_INIT;
|
||||
svr->card = AllocZeroed(sizeof(*svr->card));
|
||||
svr->news = AllocZeroed(sizeof(*svr->news));
|
||||
svr->recvBuffer = AllocZeroed(MG_LINK_BUFFER_SIZE);
|
||||
svr->linkGameData = AllocZeroed(sizeof(*svr->linkGameData));
|
||||
svr->script = script;
|
||||
svr->cmdidx = 0;
|
||||
MysteryGiftLink_Init(&svr->manager, sendPlayerId, recvPlayerId);
|
||||
}
|
||||
|
||||
static void MysteryGiftServer_Free(struct MysteryGiftServer * svr)
|
||||
{
|
||||
Free(svr->card);
|
||||
Free(svr->news);
|
||||
Free(svr->recvBuffer);
|
||||
Free(svr->linkGameData);
|
||||
}
|
||||
|
||||
static void MysteryGiftServer_InitSend(struct MysteryGiftServer * svr, u32 ident, const void *src, u32 size)
|
||||
{
|
||||
ASSERT_SIZE_OK(257);
|
||||
MysteryGiftLink_InitSend(&svr->manager, ident, src, size);
|
||||
}
|
||||
|
||||
// Given the command pointer parameter and the 'default' normal data.
|
||||
// If the command's pointer is not empty use that as the send data, otherwise use the default.
|
||||
static const void *MysteryGiftServer_GetSendData(const void *dynamicData, const void *defaultData)
|
||||
{
|
||||
if (dynamicData != NULL)
|
||||
return dynamicData;
|
||||
else
|
||||
return defaultData;
|
||||
}
|
||||
|
||||
static u32 MysteryGiftServer_Compare(const void *a, const void *b)
|
||||
{
|
||||
if (b < a)
|
||||
return 0;
|
||||
else if (b == a)
|
||||
return 1;
|
||||
else
|
||||
return 2;
|
||||
}
|
||||
|
||||
static u32 Server_Init(struct MysteryGiftServer * svr)
|
||||
{
|
||||
svr->funcId = FUNC_RUN;
|
||||
return SVR_RET_INIT;
|
||||
}
|
||||
|
||||
static u32 Server_Done(struct MysteryGiftServer * svr)
|
||||
{
|
||||
return SVR_RET_END;
|
||||
}
|
||||
|
||||
static u32 Server_Recv(struct MysteryGiftServer * svr)
|
||||
{
|
||||
if (MysteryGiftLink_Recv(&svr->manager))
|
||||
svr->funcId = FUNC_RUN;
|
||||
return SVR_RET_ACTIVE;
|
||||
}
|
||||
|
||||
static u32 Server_Send(struct MysteryGiftServer * svr)
|
||||
{
|
||||
if (MysteryGiftLink_Send(&svr->manager))
|
||||
svr->funcId = FUNC_RUN;
|
||||
return SVR_RET_ACTIVE;
|
||||
}
|
||||
|
||||
static u32 Server_Run(struct MysteryGiftServer * svr)
|
||||
{
|
||||
// process command
|
||||
const struct MysteryGiftServerCmd * cmd = &svr->script[svr->cmdidx];
|
||||
const void *ptr;
|
||||
svr->cmdidx++;
|
||||
|
||||
switch (cmd->instr)
|
||||
{
|
||||
case SVR_RETURN:
|
||||
ASSERT_PTR_EMPTY(354);
|
||||
svr->funcId = FUNC_DONE;
|
||||
svr->param = cmd->param; // Set for endVal in MysteryGiftServer_Run
|
||||
break;
|
||||
case SVR_SEND:
|
||||
svr->funcId = FUNC_SEND;
|
||||
break;
|
||||
case SVR_RECV:
|
||||
ASSERT_PTR_EMPTY(364);
|
||||
MysteryGiftLink_InitRecv(&svr->manager, cmd->param, svr->recvBuffer);
|
||||
svr->funcId = FUNC_RECV;
|
||||
break;
|
||||
case SVR_GOTO:
|
||||
ASSERT_PARAM_EMPTY(370);
|
||||
svr->cmdidx = 0;
|
||||
svr->script = cmd->ptr;
|
||||
break;
|
||||
case SVR_COPY_GAME_DATA:
|
||||
ASSERT_PARAM_EMPTY(376);
|
||||
ASSERT_PTR_EMPTY(377);
|
||||
memcpy(svr->linkGameData, svr->recvBuffer, sizeof(*svr->linkGameData));
|
||||
break;
|
||||
case SVR_CHECK_GAME_DATA:
|
||||
ASSERT_PARAM_EMPTY(382);
|
||||
ASSERT_PTR_EMPTY(383);
|
||||
svr->param = MysteryGift_ValidateLinkGameData(svr->linkGameData);
|
||||
break;
|
||||
case SVR_GOTO_IF_EQ:
|
||||
if (svr->param == cmd->param)
|
||||
{
|
||||
svr->cmdidx = 0;
|
||||
svr->script = cmd->ptr;
|
||||
}
|
||||
break;
|
||||
case SVR_CHECK_EXISTING_CARD:
|
||||
ASSERT_PARAM_EMPTY(396);
|
||||
ptr = MysteryGiftServer_GetSendData(cmd->ptr, svr->card);
|
||||
svr->param = MysteryGift_CompareCardFlags(ptr, svr->linkGameData, ptr);
|
||||
break;
|
||||
case SVR_READ_RESPONSE:
|
||||
ASSERT_PARAM_EMPTY(402);
|
||||
ASSERT_PTR_EMPTY(403);
|
||||
svr->param = *(u32 *)svr->recvBuffer;
|
||||
break;
|
||||
case SVR_CHECK_EXISTING_STAMPS:
|
||||
ASSERT_PARAM_EMPTY(408);
|
||||
ptr = MysteryGiftServer_GetSendData(cmd->ptr, &svr->stamp);
|
||||
svr->param = MysteryGift_CheckStamps(ptr, svr->linkGameData, ptr);
|
||||
break;
|
||||
case SVR_GET_CARD_STAT:
|
||||
ASSERT_PTR_EMPTY(415);
|
||||
svr->param = MysteryGift_GetCardStatFromLinkData(svr->linkGameData, cmd->param);
|
||||
break;
|
||||
case SVR_CHECK_QUESTIONNAIRE:
|
||||
ASSERT_PARAM_EMPTY(420);
|
||||
svr->param = MysteryGift_DoesQuestionnaireMatch(svr->linkGameData, cmd->ptr);
|
||||
break;
|
||||
case SVR_COMPARE:
|
||||
ASSERT_PARAM_EMPTY(426);
|
||||
svr->param = MysteryGiftServer_Compare(cmd->ptr, *(void **)svr->recvBuffer);
|
||||
break;
|
||||
case SVR_LOAD_NEWS:
|
||||
ASSERT_PARAM_EMPTY(432);
|
||||
MysteryGiftServer_InitSend(svr, MG_LINKID_NEWS, MysteryGiftServer_GetSendData(cmd->ptr, svr->news), sizeof(struct WonderNews));
|
||||
break;
|
||||
case SVR_LOAD_CARD:
|
||||
ASSERT_PARAM_EMPTY(438);
|
||||
MysteryGiftServer_InitSend(svr, MG_LINKID_CARD, MysteryGiftServer_GetSendData(cmd->ptr, svr->card), sizeof(struct WonderCard));
|
||||
break;
|
||||
case SVR_LOAD_STAMP:
|
||||
ASSERT_PARAM_EMPTY(444);
|
||||
MysteryGiftServer_InitSend(svr, MG_LINKID_STAMP, MysteryGiftServer_GetSendData(cmd->ptr, &svr->stamp), sizeof(svr->stamp));
|
||||
break;
|
||||
case SVR_LOAD_RAM_SCRIPT:
|
||||
if (cmd->ptr == NULL)
|
||||
MysteryGiftServer_InitSend(svr, MG_LINKID_RAM_SCRIPT, svr->ramScript, svr->ramScriptSize);
|
||||
else
|
||||
MysteryGiftServer_InitSend(svr, MG_LINKID_RAM_SCRIPT, cmd->ptr, cmd->param);
|
||||
break;
|
||||
case SVR_LOAD_CLIENT_SCRIPT:
|
||||
if (cmd->ptr == NULL)
|
||||
MysteryGiftServer_InitSend(svr, MG_LINKID_CLIENT_SCRIPT, svr->clientScript, svr->clientScriptSize);
|
||||
else
|
||||
MysteryGiftServer_InitSend(svr, MG_LINKID_CLIENT_SCRIPT, cmd->ptr, cmd->param);
|
||||
break;
|
||||
case SVR_LOAD_EREADER_TRAINER:
|
||||
ASSERT_PARAM_EMPTY(466);
|
||||
MysteryGiftServer_InitSend(svr, MG_LINKID_EREADER_TRAINER, cmd->ptr, sizeof(struct BattleTowerEReaderTrainer));
|
||||
break;
|
||||
case SVR_LOAD_MSG:
|
||||
MysteryGiftServer_InitSend(svr, MG_LINKID_DYNAMIC_MSG, cmd->ptr, cmd->param);
|
||||
break;
|
||||
case SVR_LOAD_UNK_2:
|
||||
MysteryGiftServer_InitSend(svr, MG_LINKID_UNK_2, cmd->ptr, cmd->param);
|
||||
break;
|
||||
case SVR_COPY_CARD:
|
||||
ASSERT_PARAM_EMPTY(481);
|
||||
memcpy(svr->card, cmd->ptr, sizeof(*svr->card));
|
||||
break;
|
||||
case SVR_COPY_NEWS:
|
||||
ASSERT_PARAM_EMPTY(486);
|
||||
memcpy(svr->news, cmd->ptr, sizeof(*svr->news));
|
||||
break;
|
||||
case SVR_COPY_STAMP:
|
||||
ASSERT_PARAM_EMPTY(491);
|
||||
svr->stamp = *(u32 *)cmd->ptr;
|
||||
break;
|
||||
case SVR_SET_RAM_SCRIPT:
|
||||
svr->ramScript = cmd->ptr;
|
||||
svr->ramScriptSize = cmd->param;
|
||||
break;
|
||||
case SVR_SET_CLIENT_SCRIPT:
|
||||
svr->clientScript = cmd->ptr;
|
||||
svr->clientScriptSize = cmd->param;
|
||||
break;
|
||||
case SVR_COPY_SAVED_CARD:
|
||||
ASSERT_PTR_PARAM_EMPTY(506);
|
||||
memcpy(svr->card, GetSavedWonderCard(), sizeof(*svr->card));
|
||||
DisableWonderCardSending(svr->card);
|
||||
break;
|
||||
case SVR_COPY_SAVED_NEWS:
|
||||
ASSERT_PTR_PARAM_EMPTY(512);
|
||||
memcpy(svr->news, GetSavedWonderNews(), sizeof(*svr->news));
|
||||
break;
|
||||
case SVR_COPY_SAVED_RAM_SCRIPT:
|
||||
ASSERT_PTR_PARAM_EMPTY(517);
|
||||
svr->ramScript = GetSavedRamScriptIfValid();
|
||||
break;
|
||||
case SVR_LOAD_UNK_1:
|
||||
MysteryGiftServer_InitSend(svr, MG_LINKID_UNK_1, cmd->ptr, cmd->param);
|
||||
break;
|
||||
}
|
||||
|
||||
return SVR_RET_ACTIVE;
|
||||
}
|
||||
|
||||
static u32 (*const sFuncTable[])(struct MysteryGiftServer *) = {
|
||||
[FUNC_INIT] = Server_Init,
|
||||
[FUNC_DONE] = Server_Done,
|
||||
[FUNC_RECV] = Server_Recv,
|
||||
[FUNC_SEND] = Server_Send,
|
||||
[FUNC_RUN] = Server_Run
|
||||
};
|
||||
|
||||
static u32 MysteryGiftServer_CallFunc(struct MysteryGiftServer * svr)
|
||||
{
|
||||
u32 response;
|
||||
ASSERT_VALID_FUNC(546)
|
||||
response = sFuncTable[svr->funcId](svr);
|
||||
ASSERT_VALID_FUNC(548)
|
||||
return response;
|
||||
}
|
||||
@@ -5,7 +5,7 @@
|
||||
#include "new_menu_helpers.h"
|
||||
#include "pokemon_icon.h"
|
||||
#include "mystery_gift_menu.h"
|
||||
#include "mevent.h"
|
||||
#include "mystery_gift.h"
|
||||
#include "battle_anim.h"
|
||||
#include "constants/mystery_gift.h"
|
||||
|
||||
@@ -355,7 +355,7 @@ static void BufferCardText(void)
|
||||
// Copy stat texts
|
||||
for (i = 0, charsUntilStat = 0; i < WONDER_CARD_TEXT_LENGTH; i++)
|
||||
{
|
||||
if (sWonderCardData->card.footerLine2Text[i] != CHAR_DYNAMIC_PLACEHOLDER)
|
||||
if (sWonderCardData->card.footerLine2Text[i] != CHAR_DYNAMIC)
|
||||
{
|
||||
// Regular text, just copy as is
|
||||
sWonderCardData->statTextData[sWonderCardData->recordIdx].statText[charsUntilStat] = sWonderCardData->card.footerLine2Text[i];
|
||||
@@ -399,25 +399,25 @@ static void DrawCardWindow(u8 whichWindow)
|
||||
{
|
||||
// Print card title/subtitle
|
||||
s32 x;
|
||||
AddTextPrinterParameterized3(windowId, FONT_3, 0, 1, sTextColorTable[sWonderCardData->gfx->titleTextPal], 0, sWonderCardData->titleText);
|
||||
x = 160 - GetStringWidth(FONT_3, sWonderCardData->subtitleText, GetFontAttribute(FONT_3, FONTATTR_LETTER_SPACING));
|
||||
AddTextPrinterParameterized3(windowId, FONT_NORMAL_COPY_2, 0, 1, sTextColorTable[sWonderCardData->gfx->titleTextPal], 0, sWonderCardData->titleText);
|
||||
x = 160 - GetStringWidth(FONT_NORMAL_COPY_2, sWonderCardData->subtitleText, GetFontAttribute(FONT_NORMAL_COPY_2, FONTATTR_LETTER_SPACING));
|
||||
if (x < 0)
|
||||
x = 0;
|
||||
AddTextPrinterParameterized3(windowId, FONT_3, x, 17, sTextColorTable[sWonderCardData->gfx->titleTextPal], 0, sWonderCardData->subtitleText);
|
||||
AddTextPrinterParameterized3(windowId, FONT_NORMAL_COPY_2, x, 17, sTextColorTable[sWonderCardData->gfx->titleTextPal], 0, sWonderCardData->subtitleText);
|
||||
|
||||
// Print id number
|
||||
if (sWonderCardData->card.idNumber != 0)
|
||||
AddTextPrinterParameterized3(windowId, FONT_2, 166, 17, sTextColorTable[sWonderCardData->gfx->titleTextPal], 0, sWonderCardData->idNumberText);
|
||||
AddTextPrinterParameterized3(windowId, FONT_NORMAL, 166, 17, sTextColorTable[sWonderCardData->gfx->titleTextPal], 0, sWonderCardData->idNumberText);
|
||||
break;
|
||||
}
|
||||
case WIN_BODY:
|
||||
// Print body text
|
||||
for (; i < WONDER_CARD_BODY_TEXT_LINES; i++)
|
||||
AddTextPrinterParameterized3(windowId, FONT_3, 0, 16 * i + 2, sTextColorTable[sWonderCardData->gfx->bodyTextPal], 0, sWonderCardData->bodyText[i]);
|
||||
AddTextPrinterParameterized3(windowId, FONT_NORMAL_COPY_2, 0, 16 * i + 2, sTextColorTable[sWonderCardData->gfx->bodyTextPal], 0, sWonderCardData->bodyText[i]);
|
||||
break;
|
||||
case WIN_FOOTER:
|
||||
// Print footer line 1
|
||||
AddTextPrinterParameterized3(windowId, FONT_3, 0,
|
||||
AddTextPrinterParameterized3(windowId, FONT_NORMAL_COPY_2, 0,
|
||||
sFooterTextOffsets[sWonderCardData->card.type],
|
||||
sTextColorTable[sWonderCardData->gfx->footerTextPal],
|
||||
0, sWonderCardData->footerLine1Text);
|
||||
@@ -427,7 +427,7 @@ static void DrawCardWindow(u8 whichWindow)
|
||||
{
|
||||
// Print gift text
|
||||
// Odd that CARD_TYPE_STAMP is not ignored, it has empty text for this
|
||||
AddTextPrinterParameterized3(windowId, FONT_3, 0,
|
||||
AddTextPrinterParameterized3(windowId, FONT_NORMAL_COPY_2, 0,
|
||||
16 + sFooterTextOffsets[sWonderCardData->card.type],
|
||||
sTextColorTable[sWonderCardData->gfx->footerTextPal],
|
||||
0, sWonderCardData->footerLine2Text);
|
||||
@@ -436,19 +436,19 @@ static void DrawCardWindow(u8 whichWindow)
|
||||
{
|
||||
s32 x = 0;
|
||||
s32 y = sFooterTextOffsets[sWonderCardData->card.type] + 16;
|
||||
s32 spacing = GetFontAttribute(FONT_3, FONTATTR_LETTER_SPACING);
|
||||
s32 spacing = GetFontAttribute(FONT_NORMAL_COPY_2, FONTATTR_LETTER_SPACING);
|
||||
for (; i < sWonderCardData->recordIdx; i++)
|
||||
{
|
||||
// Print stat text
|
||||
AddTextPrinterParameterized3(windowId, FONT_3, x, y, sTextColorTable[sWonderCardData->gfx->footerTextPal], 0, sWonderCardData->statTextData[i].statText);
|
||||
AddTextPrinterParameterized3(windowId, FONT_NORMAL_COPY_2, x, y, sTextColorTable[sWonderCardData->gfx->footerTextPal], 0, sWonderCardData->statTextData[i].statText);
|
||||
if (sWonderCardData->statTextData[i].statNumberText[0] != EOS)
|
||||
{
|
||||
// Print stat number
|
||||
x += GetStringWidth(FONT_3, sWonderCardData->statTextData[i].statText, spacing);
|
||||
AddTextPrinterParameterized3(windowId, FONT_2, x, y,
|
||||
x += GetStringWidth(FONT_NORMAL_COPY_2, sWonderCardData->statTextData[i].statText, spacing);
|
||||
AddTextPrinterParameterized3(windowId, FONT_NORMAL, x, y,
|
||||
sTextColorTable[sWonderCardData->gfx->footerTextPal],
|
||||
0, sWonderCardData->statTextData[i].statNumberText);
|
||||
x += GetStringWidth(FONT_3, sWonderCardData->statTextData[i].statNumberText, spacing) + sWonderCardData->statTextData[i].width;
|
||||
x += GetStringWidth(FONT_NORMAL_COPY_2, sWonderCardData->statTextData[i].statNumberText, spacing) + sWonderCardData->statTextData[i].width;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#include "gflib.h"
|
||||
#include "menu_indicators.h"
|
||||
#include "new_menu_helpers.h"
|
||||
#include "mevent.h"
|
||||
#include "mystery_gift.h"
|
||||
#include "mystery_gift_menu.h"
|
||||
#include "menu.h"
|
||||
#include "link_rfu.h"
|
||||
@@ -360,15 +360,15 @@ static void DrawNewsWindows(void)
|
||||
FillWindowPixelBuffer(sWonderNewsData->windowIds[WIN_BODY], 0);
|
||||
|
||||
// Print title text
|
||||
x = (224 - GetStringWidth(FONT_3, sWonderNewsData->titleText, GetFontAttribute(FONT_3, FONTATTR_LETTER_SPACING))) / 2;
|
||||
x = (224 - GetStringWidth(FONT_NORMAL_COPY_2, sWonderNewsData->titleText, GetFontAttribute(FONT_NORMAL_COPY_2, FONTATTR_LETTER_SPACING))) / 2;
|
||||
if (x < 0)
|
||||
x = 0;
|
||||
AddTextPrinterParameterized3(sWonderNewsData->windowIds[WIN_TITLE], FONT_3, x, 6, sTextColorTable[sWonderNewsData->gfx->titleTextPal], 0, sWonderNewsData->titleText);
|
||||
AddTextPrinterParameterized3(sWonderNewsData->windowIds[WIN_TITLE], FONT_NORMAL_COPY_2, x, 6, sTextColorTable[sWonderNewsData->gfx->titleTextPal], 0, sWonderNewsData->titleText);
|
||||
|
||||
// Print body text
|
||||
for (; i < WONDER_NEWS_BODY_TEXT_LINES; ++i)
|
||||
{
|
||||
AddTextPrinterParameterized3(sWonderNewsData->windowIds[WIN_BODY], FONT_3, 0,
|
||||
AddTextPrinterParameterized3(sWonderNewsData->windowIds[WIN_BODY], FONT_NORMAL_COPY_2, 0,
|
||||
16 * i + 2,
|
||||
sTextColorTable[sWonderNewsData->gfx->bodyTextPal],
|
||||
0, sWonderNewsData->bodyText[i]);
|
||||
|
||||
+8
-8
@@ -743,7 +743,7 @@ static void DisplaySentToPCMessage(void)
|
||||
StringExpandPlaceholders(gStringVar4, sTransferredToPCMessages[stringToDisplay]);
|
||||
DrawDialogueFrame(0, FALSE);
|
||||
gTextFlags.canABSpeedUpPrint = TRUE;
|
||||
AddTextPrinterParameterized2(0, FONT_2, gStringVar4, GetTextSpeedSetting(), NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
AddTextPrinterParameterized2(0, FONT_NORMAL, gStringVar4, GetTextSpeedSetting(), NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
CopyWindowToVram(0, COPYWIN_FULL);
|
||||
}
|
||||
|
||||
@@ -1698,7 +1698,7 @@ static void HandleDpadMovement(struct Task *task)
|
||||
static void DrawNormalTextEntryBox(void)
|
||||
{
|
||||
FillWindowPixelBuffer(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX], PIXEL_FILL(1));
|
||||
AddTextPrinterParameterized(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX], FONT_1, sNamingScreen->template->title, 1, 1, 0, NULL);
|
||||
AddTextPrinterParameterized(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX], FONT_NORMAL_COPY_1, sNamingScreen->template->title, 1, 1, 0, NULL);
|
||||
PutWindowTilemap(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX]);
|
||||
}
|
||||
|
||||
@@ -1709,7 +1709,7 @@ static void DrawMonTextEntryBox(void)
|
||||
StringCopy(buffer, gSpeciesNames[sNamingScreen->monSpecies]);
|
||||
StringAppendN(buffer, sNamingScreen->template->title, 15);
|
||||
FillWindowPixelBuffer(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX], PIXEL_FILL(1));
|
||||
AddTextPrinterParameterized(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX], FONT_1, buffer, 1, 1, 0, NULL);
|
||||
AddTextPrinterParameterized(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX], FONT_NORMAL_COPY_1, buffer, 1, 1, 0, NULL);
|
||||
PutWindowTilemap(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX]);
|
||||
}
|
||||
|
||||
@@ -1762,7 +1762,7 @@ static void DrawGenderIcon(void)
|
||||
StringCopy(genderSymbol, gText_FemaleSymbol);
|
||||
gender = FEMALE;
|
||||
}
|
||||
AddTextPrinterParameterized3(sNamingScreen->windows[2], FONT_2, 0x68, 1, sGenderColors[gender], TEXT_SKIP_DRAW, genderSymbol);
|
||||
AddTextPrinterParameterized3(sNamingScreen->windows[2], FONT_NORMAL, 0x68, 1, sGenderColors[gender], TEXT_SKIP_DRAW, genderSymbol);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1898,7 +1898,7 @@ static void DrawTextEntry(void)
|
||||
temp[1] = gExpandedPlaceholder_Empty[0];
|
||||
extraWidth = (IsWideLetter(temp[0]) == TRUE) ? 2 : 0;
|
||||
|
||||
AddTextPrinterParameterized(sNamingScreen->windows[WIN_TEXT_ENTRY], FONT_2, temp, i * 8 + xpos + extraWidth, 1, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(sNamingScreen->windows[WIN_TEXT_ENTRY], FONT_NORMAL, temp, i * 8 + xpos + extraWidth, 1, TEXT_SKIP_DRAW, NULL);
|
||||
}
|
||||
|
||||
TryDrawGenderIcon();
|
||||
@@ -1940,7 +1940,7 @@ static void PrintKeyboardKeys(u8 window, u8 page)
|
||||
FillWindowPixelBuffer(window, sFillValues[page]);
|
||||
|
||||
for (i = 0; i < KBROW_COUNT; i++)
|
||||
AddTextPrinterParameterized3(window, FONT_1, 0, i * 16 + 1, sKeyboardTextColors[page], 0, sNamingScreenKeyboardText[page][i]);
|
||||
AddTextPrinterParameterized3(window, FONT_NORMAL_COPY_1, 0, i * 16 + 1, sKeyboardTextColors[page], 0, sNamingScreenKeyboardText[page][i]);
|
||||
|
||||
PutWindowTilemap(window);
|
||||
}
|
||||
@@ -1980,10 +1980,10 @@ static void DrawKeyboardPageOnDeck(void)
|
||||
static void PrintControls(void)
|
||||
{
|
||||
const u8 color[3] = { TEXT_DYNAMIC_COLOR_6, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GRAY };
|
||||
int strwidth = GetStringWidth(FONT_0, gText_MoveOkBack, 0);
|
||||
int strwidth = GetStringWidth(FONT_SMALL, gText_MoveOkBack, 0);
|
||||
|
||||
FillWindowPixelBuffer(sNamingScreen->windows[WIN_BANNER], PIXEL_FILL(15));
|
||||
AddTextPrinterParameterized3(sNamingScreen->windows[WIN_BANNER], FONT_0, DISPLAY_WIDTH - 4 - strwidth, 0, color, 0, gText_MoveOkBack);
|
||||
AddTextPrinterParameterized3(sNamingScreen->windows[WIN_BANNER], FONT_SMALL, DISPLAY_WIDTH - 4 - strwidth, 0, color, 0, gText_MoveOkBack);
|
||||
PutWindowTilemap(sNamingScreen->windows[WIN_BANNER]);
|
||||
CopyWindowToVram(sNamingScreen->windows[WIN_BANNER], COPYWIN_FULL);
|
||||
}
|
||||
|
||||
+2
-2
@@ -22,7 +22,7 @@
|
||||
#include "berry.h"
|
||||
#include "easy_chat.h"
|
||||
#include "union_room_chat.h"
|
||||
#include "mevent.h"
|
||||
#include "mystery_gift.h"
|
||||
#include "renewable_hidden_items.h"
|
||||
#include "trainer_tower.h"
|
||||
#include "script.h"
|
||||
@@ -143,7 +143,7 @@ void NewGameInitData(void)
|
||||
ResetTrainerFanClub();
|
||||
UnionRoomChat_InitializeRegisteredTexts();
|
||||
ResetMiniGamesResults();
|
||||
InitMEventData();
|
||||
ClearMysteryGift();
|
||||
SetAllRenewableItemFlags();
|
||||
WarpToPlayersRoom();
|
||||
RunScriptImmediately(EventScript_ResetAllMapFlags);
|
||||
|
||||
+86
-94
@@ -58,106 +58,98 @@ static const struct WindowTemplate sYesNo_WindowTemplate =
|
||||
|
||||
static const struct FontInfo gFontInfos[] =
|
||||
{
|
||||
{
|
||||
.fontFunction = Font0Func,
|
||||
.maxLetterWidth = 0x8,
|
||||
.maxLetterHeight = 0xD,
|
||||
.letterSpacing = 0x0,
|
||||
.lineSpacing = 0x0,
|
||||
.unk = 0x0,
|
||||
.fgColor = 0x2,
|
||||
.bgColor = 0x1,
|
||||
.shadowColor = 0x3,
|
||||
[FONT_SMALL] = {
|
||||
.fontFunction = FontFunc_Small,
|
||||
.maxLetterWidth = 8,
|
||||
.maxLetterHeight = 13,
|
||||
.letterSpacing = 0,
|
||||
.lineSpacing = 0,
|
||||
.fgColor = 2,
|
||||
.bgColor = 1,
|
||||
.shadowColor = 3,
|
||||
},
|
||||
{
|
||||
.fontFunction = Font1Func,
|
||||
.maxLetterWidth = 0x8,
|
||||
.maxLetterHeight = 0xE,
|
||||
.letterSpacing = 0x0,
|
||||
.lineSpacing = 0x0,
|
||||
.unk = 0x0,
|
||||
.fgColor = 0x2,
|
||||
.bgColor = 0x1,
|
||||
.shadowColor = 0x3,
|
||||
[FONT_NORMAL_COPY_1] = {
|
||||
.fontFunction = FontFunc_NormalCopy1,
|
||||
.maxLetterWidth = 8,
|
||||
.maxLetterHeight = 14,
|
||||
.letterSpacing = 0,
|
||||
.lineSpacing = 0,
|
||||
.fgColor = 2,
|
||||
.bgColor = 1,
|
||||
.shadowColor = 3,
|
||||
},
|
||||
{
|
||||
.fontFunction = Font2Func,
|
||||
.maxLetterWidth = 0xA,
|
||||
.maxLetterHeight = 0xE,
|
||||
.letterSpacing = 0x1,
|
||||
.lineSpacing = 0x0,
|
||||
.unk = 0x0,
|
||||
.fgColor = 0x2,
|
||||
.bgColor = 0x1,
|
||||
.shadowColor = 0x3,
|
||||
[FONT_NORMAL] = {
|
||||
.fontFunction = FontFunc_Normal,
|
||||
.maxLetterWidth = 10,
|
||||
.maxLetterHeight = 14,
|
||||
.letterSpacing = 1,
|
||||
.lineSpacing = 0,
|
||||
.fgColor = 2,
|
||||
.bgColor = 1,
|
||||
.shadowColor = 3,
|
||||
},
|
||||
{
|
||||
.fontFunction = Font3Func,
|
||||
.maxLetterWidth = 0xA,
|
||||
.maxLetterHeight = 0xE,
|
||||
.letterSpacing = 0x1,
|
||||
.lineSpacing = 0x0,
|
||||
.unk = 0x0,
|
||||
.fgColor = 0x2,
|
||||
.bgColor = 0x1,
|
||||
.shadowColor = 0x3,
|
||||
[FONT_NORMAL_COPY_2] = {
|
||||
.fontFunction = FontFunc_NormalCopy2,
|
||||
.maxLetterWidth = 10,
|
||||
.maxLetterHeight = 14,
|
||||
.letterSpacing = 1,
|
||||
.lineSpacing = 0,
|
||||
.fgColor = 2,
|
||||
.bgColor = 1,
|
||||
.shadowColor = 3,
|
||||
},
|
||||
{
|
||||
.fontFunction = Font4Func,
|
||||
.maxLetterWidth = 0xA,
|
||||
.maxLetterHeight = 0xE,
|
||||
.letterSpacing = 0x0,
|
||||
.lineSpacing = 0x0,
|
||||
.unk = 0x0,
|
||||
.fgColor = 0x2,
|
||||
.bgColor = 0x1,
|
||||
.shadowColor = 0x3,
|
||||
[FONT_MALE] = {
|
||||
.fontFunction = FontFunc_Male,
|
||||
.maxLetterWidth = 10,
|
||||
.maxLetterHeight = 14,
|
||||
.letterSpacing = 0,
|
||||
.lineSpacing = 0,
|
||||
.fgColor = 2,
|
||||
.bgColor = 1,
|
||||
.shadowColor = 3,
|
||||
},
|
||||
{
|
||||
.fontFunction = Font5Func,
|
||||
.maxLetterWidth = 0xA,
|
||||
.maxLetterHeight = 0xE,
|
||||
.letterSpacing = 0x0,
|
||||
.lineSpacing = 0x0,
|
||||
.unk = 0x0,
|
||||
.fgColor = 0x2,
|
||||
.bgColor = 0x1,
|
||||
.shadowColor = 0x3,
|
||||
[FONT_FEMALE] = {
|
||||
.fontFunction = FontFunc_Female,
|
||||
.maxLetterWidth = 10,
|
||||
.maxLetterHeight = 14,
|
||||
.letterSpacing = 0,
|
||||
.lineSpacing = 0,
|
||||
.fgColor = 2,
|
||||
.bgColor = 1,
|
||||
.shadowColor = 3,
|
||||
},
|
||||
{
|
||||
.fontFunction = Font6Func,
|
||||
.maxLetterWidth = 0x8,
|
||||
.maxLetterHeight = 0x10,
|
||||
.letterSpacing = 0x0,
|
||||
.lineSpacing = 0x2,
|
||||
.unk = 0x0,
|
||||
.fgColor = 0x2,
|
||||
.bgColor = 0x1,
|
||||
.shadowColor = 0x3,
|
||||
[FONT_BRAILLE] = {
|
||||
.fontFunction = FontFunc_Braille,
|
||||
.maxLetterWidth = 8,
|
||||
.maxLetterHeight = 16,
|
||||
.letterSpacing = 0,
|
||||
.lineSpacing = 2,
|
||||
.fgColor = 2,
|
||||
.bgColor = 1,
|
||||
.shadowColor = 3,
|
||||
},
|
||||
{
|
||||
[FONT_BOLD] = {
|
||||
.fontFunction = NULL,
|
||||
.maxLetterWidth = 0x8,
|
||||
.maxLetterHeight = 0x8,
|
||||
.letterSpacing = 0x0,
|
||||
.lineSpacing = 0x0,
|
||||
.unk = 0x0,
|
||||
.fgColor = 0x1,
|
||||
.bgColor = 0x2,
|
||||
.shadowColor = 0xF,
|
||||
.maxLetterWidth = 8,
|
||||
.maxLetterHeight = 8,
|
||||
.letterSpacing = 0,
|
||||
.lineSpacing = 0,
|
||||
.fgColor = 1,
|
||||
.bgColor = 2,
|
||||
.shadowColor = 15,
|
||||
}
|
||||
};
|
||||
|
||||
static const u8 gMenuCursorDimensions[][2] =
|
||||
{
|
||||
{ 0x8, 0xD },
|
||||
{ 0x8, 0xE },
|
||||
{ 0x8, 0xE },
|
||||
{ 0x8, 0xE },
|
||||
{ 0x8, 0xE },
|
||||
{ 0x8, 0xE },
|
||||
{ 0x8, 0x10 },
|
||||
{ 0x0, 0x0 }
|
||||
[FONT_SMALL] = { 8, 13 },
|
||||
[FONT_NORMAL_COPY_1] = { 8, 14 },
|
||||
[FONT_NORMAL] = { 8, 14 },
|
||||
[FONT_NORMAL_COPY_2] = { 8, 14 },
|
||||
[FONT_MALE] = { 8, 14 },
|
||||
[FONT_FEMALE] = { 8, 14 },
|
||||
[FONT_BRAILLE] = { 8, 16 },
|
||||
[FONT_BOLD] = {}
|
||||
};
|
||||
|
||||
static u16 CopyDecompressedTileDataToVram(u8 bgId, const void *src, u16 size, u16 offset, u8 mode);
|
||||
@@ -436,23 +428,23 @@ void AddTextPrinterDiffStyle(bool8 allowSkippingDelayWithButtonPress)
|
||||
gTextFlags.canABSpeedUpPrint = allowSkippingDelayWithButtonPress;
|
||||
color = ContextNpcGetTextColor();
|
||||
if (color == NPC_TEXT_COLOR_MALE)
|
||||
AddTextPrinterParameterized2(0, FONT_4, gStringVar4, GetTextSpeedSetting(), nptr, TEXT_COLOR_BLUE, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
AddTextPrinterParameterized2(0, FONT_MALE, gStringVar4, GetTextSpeedSetting(), nptr, TEXT_COLOR_BLUE, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
else if (color == NPC_TEXT_COLOR_FEMALE)
|
||||
AddTextPrinterParameterized2(0, FONT_5, gStringVar4, GetTextSpeedSetting(), nptr, TEXT_COLOR_RED, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
AddTextPrinterParameterized2(0, FONT_FEMALE, gStringVar4, GetTextSpeedSetting(), nptr, TEXT_COLOR_RED, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
else // NPC_TEXT_COLOR_MON / NPC_TEXT_COLOR_NEUTRAL
|
||||
AddTextPrinterParameterized2(0, FONT_2, gStringVar4, GetTextSpeedSetting(), nptr, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
AddTextPrinterParameterized2(0, FONT_NORMAL, gStringVar4, GetTextSpeedSetting(), nptr, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
}
|
||||
|
||||
void AddTextPrinterForMessage(bool8 allowSkippingDelayWithButtonPress)
|
||||
{
|
||||
gTextFlags.canABSpeedUpPrint = allowSkippingDelayWithButtonPress;
|
||||
AddTextPrinterParameterized2(0, FONT_2, gStringVar4, GetTextSpeedSetting(), NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
AddTextPrinterParameterized2(0, FONT_NORMAL, gStringVar4, GetTextSpeedSetting(), NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
}
|
||||
|
||||
void AddTextPrinterWithCustomSpeedForMessage(bool8 allowSkippingDelayWithButtonPress, u8 speed)
|
||||
{
|
||||
gTextFlags.canABSpeedUpPrint = allowSkippingDelayWithButtonPress;
|
||||
AddTextPrinterParameterized2(0, FONT_2, gStringVar4, speed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
AddTextPrinterParameterized2(0, FONT_NORMAL, gStringVar4, speed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
}
|
||||
|
||||
void LoadStdWindowFrameGfx(void)
|
||||
@@ -655,12 +647,12 @@ void DisplayItemMessageOnField(u8 taskId, u8 fontId, const u8 *string, TaskFunc
|
||||
|
||||
void DisplayYesNoMenuDefaultYes(void)
|
||||
{
|
||||
CreateYesNoMenu(&sYesNo_WindowTemplate, FONT_2, 0, 2, STD_WINDOW_BASE_TILE_NUM, STD_WINDOW_PALETTE_NUM, 0);
|
||||
CreateYesNoMenu(&sYesNo_WindowTemplate, FONT_NORMAL, 0, 2, STD_WINDOW_BASE_TILE_NUM, STD_WINDOW_PALETTE_NUM, 0);
|
||||
}
|
||||
|
||||
void DisplayYesNoMenuDefaultNo(void)
|
||||
{
|
||||
CreateYesNoMenu(&sYesNo_WindowTemplate, FONT_2, 0, 2, STD_WINDOW_BASE_TILE_NUM, STD_WINDOW_PALETTE_NUM, 1);
|
||||
CreateYesNoMenu(&sYesNo_WindowTemplate, FONT_NORMAL, 0, 2, STD_WINDOW_BASE_TILE_NUM, STD_WINDOW_PALETTE_NUM, 1);
|
||||
}
|
||||
|
||||
u8 GetTextSpeedSetting(void)
|
||||
|
||||
+15
-15
@@ -569,7 +569,7 @@ static void Task_OaksSpeech1(u8 taskId)
|
||||
FillBgTilemapBufferRect_Palette0(1, 0xD00E, 0, 19, 30, 1);
|
||||
CreateHelpDocsPage1();
|
||||
gPaletteFade.bufferTransferDisabled = FALSE;
|
||||
gTasks[taskId].data[5] = CreateTextCursorSpriteForOakSpeech(0, 0xE6, 0x95, 0, 0);
|
||||
gTasks[taskId].data[5] = CreateTextCursorSprite(0, 0xE6, 0x95, 0, 0);
|
||||
BlendPalettes(PALETTES_ALL, 0x10, 0x00);
|
||||
break;
|
||||
case 10:
|
||||
@@ -593,7 +593,7 @@ static void CreateHelpDocsPage1(void)
|
||||
sOakSpeechResources->unk_0014[0] = AddWindow(sHelpDocsWindowTemplatePtrs[sOakSpeechResources->unk_0012]);
|
||||
PutWindowTilemap(sOakSpeechResources->unk_0014[0]);
|
||||
FillWindowPixelBuffer(sOakSpeechResources->unk_0014[0], 0x00);
|
||||
AddTextPrinterParameterized4(sOakSpeechResources->unk_0014[0], FONT_2, 2, 0, 1, 1, sTextColor_HelpSystem, 0, gNewGame_HelpDocs1);
|
||||
AddTextPrinterParameterized4(sOakSpeechResources->unk_0014[0], FONT_NORMAL, 2, 0, 1, 1, sTextColor_HelpSystem, 0, gNewGame_HelpDocs1);
|
||||
CopyWindowToVram(sOakSpeechResources->unk_0014[0], COPYWIN_FULL);
|
||||
FillBgTilemapBufferRect_Palette0(1, 0x3000, 1, 3, 5, 16);
|
||||
CopyBgTilemapBufferToVram(1);
|
||||
@@ -615,7 +615,7 @@ static void Task_OakSpeech4(u8 taskId)
|
||||
sOakSpeechResources->unk_0014[i] = AddWindow(&sHelpDocsWindowTemplatePtrs[sOakSpeechResources->unk_0012][i]);
|
||||
PutWindowTilemap(sOakSpeechResources->unk_0014[i]);
|
||||
FillWindowPixelBuffer(sOakSpeechResources->unk_0014[i], 0x00);
|
||||
AddTextPrinterParameterized4(sOakSpeechResources->unk_0014[i], FONT_2, 6, 0, 1, 1, sTextColor_HelpSystem, 0, sHelpDocsPtrs[i + r7 * 3]);
|
||||
AddTextPrinterParameterized4(sOakSpeechResources->unk_0014[i], FONT_NORMAL, 6, 0, 1, 1, sTextColor_HelpSystem, 0, sHelpDocsPtrs[i + r7 * 3]);
|
||||
CopyWindowToVram(sOakSpeechResources->unk_0014[i], COPYWIN_FULL);
|
||||
}
|
||||
|
||||
@@ -747,8 +747,8 @@ static void Task_OakSpeech6(u8 taskId)
|
||||
sOakSpeechResources->unk_0012 = 0;
|
||||
gMain.state = 0;
|
||||
data[15] = 16;
|
||||
AddTextPrinterParameterized4(data[14], FONT_2, 3, 5, 1, 0, sTextColor_OakSpeech, 0, sNewGameAdventureIntroTextPointers[0]);
|
||||
data[5] = CreateTextCursorSpriteForOakSpeech(0, 0xe2, 0x91, 0, 0);
|
||||
AddTextPrinterParameterized4(data[14], FONT_NORMAL, 3, 5, 1, 0, sTextColor_OakSpeech, 0, sNewGameAdventureIntroTextPointers[0]);
|
||||
data[5] = CreateTextCursorSprite(0, 0xe2, 0x91, 0, 0);
|
||||
gSprites[data[5]].oam.objMode = ST_OAM_OBJ_BLEND;
|
||||
gSprites[data[5]].oam.priority = 0;
|
||||
CreatePikaOrGrassPlatformSpriteAndLinkToCurrentTask(taskId, 0);
|
||||
@@ -807,7 +807,7 @@ static void Task_OakSpeech7(u8 taskId)
|
||||
if (data[15] <= 0)
|
||||
{
|
||||
FillWindowPixelBuffer(data[14], 0x00);
|
||||
AddTextPrinterParameterized4(data[14], FONT_2, 3, 5, 1, 0, sTextColor_OakSpeech, 0, sNewGameAdventureIntroTextPointers[sOakSpeechResources->unk_0012]);
|
||||
AddTextPrinterParameterized4(data[14], FONT_NORMAL, 3, 5, 1, 0, sTextColor_OakSpeech, 0, sNewGameAdventureIntroTextPointers[sOakSpeechResources->unk_0012]);
|
||||
if (sOakSpeechResources->unk_0012 == 0)
|
||||
{
|
||||
ClearTopBarWindow();
|
||||
@@ -906,11 +906,11 @@ static void Task_OakSpeech9(u8 taskId)
|
||||
if (str != gStringVar4) \
|
||||
{ \
|
||||
StringExpandPlaceholders(gStringVar4, str); \
|
||||
AddTextPrinterParameterized2(0, FONT_4, gStringVar4, speed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); \
|
||||
AddTextPrinterParameterized2(0, FONT_MALE, gStringVar4, speed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
AddTextPrinterParameterized2(0, FONT_4, str, speed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); \
|
||||
AddTextPrinterParameterized2(0, FONT_MALE, str, speed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); \
|
||||
} \
|
||||
CopyWindowToVram(0, COPYWIN_FULL); \
|
||||
})
|
||||
@@ -1076,12 +1076,12 @@ static void Task_OakSpeech19(u8 taskId)
|
||||
sOakSpeechResources->textColor[0] = 1;
|
||||
sOakSpeechResources->textColor[1] = 2;
|
||||
sOakSpeechResources->textColor[2] = 3;
|
||||
AddTextPrinterParameterized3(gTasks[taskId].data[13], FONT_2, 8, 1, sOakSpeechResources->textColor, 0, gText_Boy);
|
||||
AddTextPrinterParameterized3(gTasks[taskId].data[13], FONT_NORMAL, 8, 1, sOakSpeechResources->textColor, 0, gText_Boy);
|
||||
sOakSpeechResources->textColor[0] = 1;
|
||||
sOakSpeechResources->textColor[1] = 2;
|
||||
sOakSpeechResources->textColor[2] = 3;
|
||||
AddTextPrinterParameterized3(gTasks[taskId].data[13], FONT_2, 8, 17, sOakSpeechResources->textColor, 0, gText_Girl);
|
||||
Menu_InitCursor(gTasks[taskId].data[13], FONT_2, 0, 1, GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT) + 2, 2, 0);
|
||||
AddTextPrinterParameterized3(gTasks[taskId].data[13], FONT_NORMAL, 8, 17, sOakSpeechResources->textColor, 0, gText_Girl);
|
||||
Menu_InitCursor(gTasks[taskId].data[13], FONT_NORMAL, 0, 1, GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT) + 2, 2, 0);
|
||||
CopyWindowToVram(gTasks[taskId].data[13], COPYWIN_FULL);
|
||||
gTasks[taskId].func = Task_OakSpeech20;
|
||||
}
|
||||
@@ -1263,7 +1263,7 @@ static void Task_OakSpeech26(u8 taskId)
|
||||
data[3]--;
|
||||
else
|
||||
{
|
||||
CreateYesNoMenu(&sNewGameAdventureIntroWindowTemplates[2], FONT_2, 0, 2, GetStdWindowBaseTileNum(), 14, 0);
|
||||
CreateYesNoMenu(&sNewGameAdventureIntroWindowTemplates[2], FONT_NORMAL, 0, 2, GetStdWindowBaseTileNum(), 14, 0);
|
||||
gTasks[taskId].func = Task_OakSpeech27;
|
||||
}
|
||||
}
|
||||
@@ -1871,16 +1871,16 @@ static void PrintNameChoiceOptions(u8 taskId, u8 hasPlayerBeenNamed)
|
||||
PutWindowTilemap(data[13]);
|
||||
DrawStdFrameWithCustomTileAndPalette(data[13], 1, GetStdWindowBaseTileNum(), 14);
|
||||
FillWindowPixelBuffer(gTasks[taskId].data[13], 0x11);
|
||||
AddTextPrinterParameterized(data[13], FONT_2, gOtherText_NewName, 8, 1, 0, NULL);
|
||||
AddTextPrinterParameterized(data[13], FONT_NORMAL, gOtherText_NewName, 8, 1, 0, NULL);
|
||||
if (hasPlayerBeenNamed == FALSE)
|
||||
textPtrs = gSaveBlock2Ptr->playerGender == MALE ? sMaleNameChoices : sFemaleNameChoices;
|
||||
else
|
||||
textPtrs = sRivalNameChoices;
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
AddTextPrinterParameterized(data[13], FONT_2, textPtrs[i], 8, 16 * (i + 1) + 1, 0, NULL);
|
||||
AddTextPrinterParameterized(data[13], FONT_NORMAL, textPtrs[i], 8, 16 * (i + 1) + 1, 0, NULL);
|
||||
}
|
||||
Menu_InitCursor(data[13], FONT_2, 0, 1, 16, 5, 0);
|
||||
Menu_InitCursor(data[13], FONT_NORMAL, 0, 1, 16, 5, 0);
|
||||
CopyWindowToVram(data[13], COPYWIN_FULL);
|
||||
}
|
||||
|
||||
|
||||
+15
-15
@@ -12,7 +12,7 @@
|
||||
#include "gba/m4a_internal.h"
|
||||
|
||||
// can't include the one in menu_helpers.h since Task_OptionMenu needs bool32 for matching
|
||||
bool32 MenuHelpers_CallLinkSomething(void);
|
||||
bool32 IsActiveOverworldLinkBusy(void);
|
||||
|
||||
// Menu items
|
||||
enum
|
||||
@@ -316,9 +316,9 @@ static void InitOptionMenuBg(void)
|
||||
static void OptionMenu_PickSwitchCancel(void)
|
||||
{
|
||||
s32 x;
|
||||
x = 0xE4 - GetStringWidth(FONT_0, gText_PickSwitchCancel, 0);
|
||||
x = 0xE4 - GetStringWidth(FONT_SMALL, gText_PickSwitchCancel, 0);
|
||||
FillWindowPixelBuffer(2, PIXEL_FILL(15));
|
||||
AddTextPrinterParameterized3(2, FONT_0, x, 0, sOptionMenuPickSwitchCancelTextColor, 0, gText_PickSwitchCancel);
|
||||
AddTextPrinterParameterized3(2, FONT_SMALL, x, 0, sOptionMenuPickSwitchCancelTextColor, 0, gText_PickSwitchCancel);
|
||||
PutWindowTilemap(2);
|
||||
CopyWindowToVram(2, COPYWIN_FULL);
|
||||
}
|
||||
@@ -371,7 +371,7 @@ static void Task_OptionMenu(u8 taskId)
|
||||
sOptionMenuPtr->loadState++;
|
||||
break;
|
||||
case 2:
|
||||
if (((bool32)MenuHelpers_CallLinkSomething()) == TRUE)
|
||||
if (((bool32)IsActiveOverworldLinkBusy()) == TRUE)
|
||||
break;
|
||||
switch (OptionMenu_ProcessInput())
|
||||
{
|
||||
@@ -472,31 +472,31 @@ static void BufferOptionMenuString(u8 selection)
|
||||
|
||||
memcpy(dst, sOptionMenuTextColor, 3);
|
||||
x = 0x82;
|
||||
y = ((GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT) - 1) * selection) + 2;
|
||||
FillWindowPixelRect(1, 1, x, y, 0x46, GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT));
|
||||
y = ((GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT) - 1) * selection) + 2;
|
||||
FillWindowPixelRect(1, 1, x, y, 0x46, GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT));
|
||||
|
||||
switch (selection)
|
||||
{
|
||||
case MENUITEM_TEXTSPEED:
|
||||
AddTextPrinterParameterized3(1, FONT_2, x, y, dst, -1, sTextSpeedOptions[sOptionMenuPtr->option[selection]]);
|
||||
AddTextPrinterParameterized3(1, FONT_NORMAL, x, y, dst, -1, sTextSpeedOptions[sOptionMenuPtr->option[selection]]);
|
||||
break;
|
||||
case MENUITEM_BATTLESCENE:
|
||||
AddTextPrinterParameterized3(1, FONT_2, x, y, dst, -1, sBattleSceneOptions[sOptionMenuPtr->option[selection]]);
|
||||
AddTextPrinterParameterized3(1, FONT_NORMAL, x, y, dst, -1, sBattleSceneOptions[sOptionMenuPtr->option[selection]]);
|
||||
break;
|
||||
case MENUITEM_BATTLESTYLE:
|
||||
AddTextPrinterParameterized3(1, FONT_2, x, y, dst, -1, sBattleStyleOptions[sOptionMenuPtr->option[selection]]);
|
||||
AddTextPrinterParameterized3(1, FONT_NORMAL, x, y, dst, -1, sBattleStyleOptions[sOptionMenuPtr->option[selection]]);
|
||||
break;
|
||||
case MENUITEM_SOUND:
|
||||
AddTextPrinterParameterized3(1, FONT_2, x, y, dst, -1, sSoundOptions[sOptionMenuPtr->option[selection]]);
|
||||
AddTextPrinterParameterized3(1, FONT_NORMAL, x, y, dst, -1, sSoundOptions[sOptionMenuPtr->option[selection]]);
|
||||
break;
|
||||
case MENUITEM_BUTTONMODE:
|
||||
AddTextPrinterParameterized3(1, FONT_2, x, y, dst, -1, sButtonTypeOptions[sOptionMenuPtr->option[selection]]);
|
||||
AddTextPrinterParameterized3(1, FONT_NORMAL, x, y, dst, -1, sButtonTypeOptions[sOptionMenuPtr->option[selection]]);
|
||||
break;
|
||||
case MENUITEM_FRAMETYPE:
|
||||
StringCopy(str, gText_FrameType);
|
||||
ConvertIntToDecimalStringN(buf, sOptionMenuPtr->option[selection] + 1, 1, 2);
|
||||
StringAppendN(str, buf, 3);
|
||||
AddTextPrinterParameterized3(1, FONT_2, x, y, dst, -1, str);
|
||||
AddTextPrinterParameterized3(1, FONT_NORMAL, x, y, dst, -1, str);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -524,7 +524,7 @@ static void CloseAndSaveOptionMenu(u8 taskId)
|
||||
static void PrintOptionMenuHeader(void)
|
||||
{
|
||||
FillWindowPixelBuffer(0, PIXEL_FILL(1));
|
||||
AddTextPrinterParameterized(WIN_TEXT_OPTION, FONT_2, gText_Option, 8, 1, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(WIN_TEXT_OPTION, FONT_NORMAL, gText_Option, 8, 1, TEXT_SKIP_DRAW, NULL);
|
||||
PutWindowTilemap(0);
|
||||
CopyWindowToVram(0, COPYWIN_FULL);
|
||||
}
|
||||
@@ -560,7 +560,7 @@ static void LoadOptionMenuItemNames(void)
|
||||
FillWindowPixelBuffer(1, PIXEL_FILL(1));
|
||||
for (i = 0; i < MENUITEM_COUNT; i++)
|
||||
{
|
||||
AddTextPrinterParameterized(WIN_OPTIONS, FONT_2, sOptionMenuItemsNames[i], 8, (u8)((i * (GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT))) + 2) - i, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(WIN_OPTIONS, FONT_NORMAL, sOptionMenuItemsNames[i], 8, (u8)((i * (GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT))) + 2) - i, TEXT_SKIP_DRAW, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -568,7 +568,7 @@ static void UpdateSettingSelectionDisplay(u16 selection)
|
||||
{
|
||||
u16 maxLetterHeight, y;
|
||||
|
||||
maxLetterHeight = GetFontAttribute(FONT_2, FONTATTR_MAX_LETTER_HEIGHT);
|
||||
maxLetterHeight = GetFontAttribute(FONT_NORMAL, FONTATTR_MAX_LETTER_HEIGHT);
|
||||
y = selection * (maxLetterHeight - 1) + 0x3A;
|
||||
SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(y, y + maxLetterHeight));
|
||||
SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(0x10, 0xE0));
|
||||
|
||||
+1
-1
@@ -3239,7 +3239,7 @@ bool32 IsSendingKeysOverCable(void)
|
||||
static u32 GetLinkSendQueueLength(void)
|
||||
{
|
||||
if (gWirelessCommType != 0)
|
||||
return Rfu.sendQueue.count;
|
||||
return gRfu.sendQueue.count;
|
||||
else
|
||||
return gLink.sendQueue.count;
|
||||
}
|
||||
|
||||
+29
-29
@@ -476,7 +476,7 @@ static void CB2_InitPartyMenu(void)
|
||||
{
|
||||
while (TRUE)
|
||||
{
|
||||
if (sub_80BF748() == TRUE || ShowPartyMenu() == TRUE || MenuHelpers_LinkSomething() == TRUE)
|
||||
if (MenuHelpers_ShouldWaitForLinkRecv() == TRUE || ShowPartyMenu() == TRUE || MenuHelpers_IsLinkActive() == TRUE)
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -509,7 +509,7 @@ static bool8 ShowPartyMenu(void)
|
||||
++gMain.state;
|
||||
break;
|
||||
case 5:
|
||||
if (!MenuHelpers_LinkSomething())
|
||||
if (!MenuHelpers_IsLinkActive())
|
||||
ResetTasks();
|
||||
++gMain.state;
|
||||
break;
|
||||
@@ -1118,7 +1118,7 @@ u8 GetPartyMenuType(void)
|
||||
|
||||
void Task_HandleChooseMonInput(u8 taskId)
|
||||
{
|
||||
if (!gPaletteFade.active && sub_80BF748() != TRUE)
|
||||
if (!gPaletteFade.active && MenuHelpers_ShouldWaitForLinkRecv() != TRUE)
|
||||
{
|
||||
s8 *slotPtr = GetCurrentPartySlotPtr();
|
||||
|
||||
@@ -1248,7 +1248,7 @@ static void HandleChooseMonCancel(u8 taskId, s8 *slotPtr)
|
||||
DisplayCancelChooseMonYesNo(taskId);
|
||||
else
|
||||
{
|
||||
if (!MenuHelpers_LinkSomething())
|
||||
if (!MenuHelpers_IsLinkActive())
|
||||
gSpecialVar_0x8004 = SLOT_CANCEL;
|
||||
gPartyMenuUseExitCallback = FALSE;
|
||||
*slotPtr = SLOT_CANCEL;
|
||||
@@ -1548,7 +1548,7 @@ bool8 IsPartyMenuTextPrinterActive(void)
|
||||
|
||||
static void Task_WaitForLinkAndReturnToChooseMon(u8 taskId)
|
||||
{
|
||||
if (sub_80BF748() != TRUE)
|
||||
if (MenuHelpers_ShouldWaitForLinkRecv() != TRUE)
|
||||
{
|
||||
DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON);
|
||||
gTasks[taskId].func = Task_HandleChooseMonInput;
|
||||
@@ -1561,7 +1561,7 @@ static void Task_ReturnToChooseMonAfterText(u8 taskId)
|
||||
{
|
||||
ClearStdWindowAndFrameToTransparent(6, FALSE);
|
||||
ClearWindowTilemap(6);
|
||||
if (MenuHelpers_LinkSomething() == TRUE)
|
||||
if (MenuHelpers_IsLinkActive() == TRUE)
|
||||
{
|
||||
gTasks[taskId].func = Task_WaitForLinkAndReturnToChooseMon;
|
||||
}
|
||||
@@ -2135,7 +2135,7 @@ static void CreateCancelConfirmWindows(bool8 chooseMultiple)
|
||||
{
|
||||
confirmWindowId = AddWindow(&sConfirmButtonWindowTemplate);
|
||||
FillWindowPixelBuffer(confirmWindowId, PIXEL_FILL(0));
|
||||
AddTextPrinterParameterized4(confirmWindowId, FONT_0, (48 - GetStringWidth(FONT_0, gText_PartyMenu_OK, 0)) / 2u, 1, 0, 0, sFontColorTable[0], -1, gText_PartyMenu_OK);
|
||||
AddTextPrinterParameterized4(confirmWindowId, FONT_SMALL, (48 - GetStringWidth(FONT_SMALL, gText_PartyMenu_OK, 0)) / 2u, 1, 0, 0, sFontColorTable[0], -1, gText_PartyMenu_OK);
|
||||
PutWindowTilemap(confirmWindowId);
|
||||
CopyWindowToVram(confirmWindowId, COPYWIN_GFX);
|
||||
cancelWindowId = AddWindow(&sMultiCancelButtonWindowTemplate);
|
||||
@@ -2150,13 +2150,13 @@ static void CreateCancelConfirmWindows(bool8 chooseMultiple)
|
||||
// Branches are functionally identical. Second branch is never reached, Spin Trade wasnt fully implemented
|
||||
if (gPartyMenu.menuType != PARTY_MENU_TYPE_SPIN_TRADE)
|
||||
{
|
||||
offset += (48 - GetStringWidth(FONT_0, gFameCheckerText_Cancel, 0)) / 2;
|
||||
AddTextPrinterParameterized3(cancelWindowId, FONT_0, offset, 1, sFontColorTable[0], -1, gFameCheckerText_Cancel);
|
||||
offset += (48 - GetStringWidth(FONT_SMALL, gFameCheckerText_Cancel, 0)) / 2;
|
||||
AddTextPrinterParameterized3(cancelWindowId, FONT_SMALL, offset, 1, sFontColorTable[0], -1, gFameCheckerText_Cancel);
|
||||
}
|
||||
else
|
||||
{
|
||||
offset += (48 - GetStringWidth(FONT_0, gOtherText_Exit, 0)) / 2;
|
||||
AddTextPrinterParameterized3(cancelWindowId, FONT_0, offset, 1, sFontColorTable[0], -1, gOtherText_Exit);
|
||||
offset += (48 - GetStringWidth(FONT_SMALL, gOtherText_Exit, 0)) / 2;
|
||||
AddTextPrinterParameterized3(cancelWindowId, FONT_SMALL, offset, 1, sFontColorTable[0], -1, gOtherText_Exit);
|
||||
}
|
||||
PutWindowTilemap(cancelWindowId);
|
||||
CopyWindowToVram(cancelWindowId, COPYWIN_GFX);
|
||||
@@ -2297,7 +2297,7 @@ static void LoadPartyBoxPalette(struct PartyMenuBox *menuBox, u8 palFlags)
|
||||
|
||||
static void DisplayPartyPokemonBarDetail(u8 windowId, const u8 *str, u8 color, const u8 *dimensions)
|
||||
{
|
||||
AddTextPrinterParameterized3(windowId, FONT_0, dimensions[0], dimensions[1], sFontColorTable[color], 0, str);
|
||||
AddTextPrinterParameterized3(windowId, FONT_SMALL, dimensions[0], dimensions[1], sFontColorTable[color], 0, str);
|
||||
}
|
||||
|
||||
static void DisplayPartyPokemonNickname(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 drawMenuBoxOrText)
|
||||
@@ -2453,7 +2453,7 @@ static void DisplayPartyPokemonDescriptionText(u8 stringId, struct PartyMenuBox
|
||||
if (drawMenuBoxOrText != DRAW_TEXT_ONLY)
|
||||
menuBox->infoRects->blitFunc(menuBox->windowId, menuBox->infoRects->descTextLeft / 8, menuBox->infoRects->descTextTop / 8, menuBox->infoRects->descTextWidth / 8, menuBox->infoRects->descTextHeight / 8, TRUE);
|
||||
if (drawMenuBoxOrText != DRAW_MENU_BOX_ONLY)
|
||||
AddTextPrinterParameterized3(menuBox->windowId, FONT_1, menuBox->infoRects->descTextLeft, menuBox->infoRects->descTextTop, sFontColorTable[0], 0, sDescriptionStringTable[stringId]);
|
||||
AddTextPrinterParameterized3(menuBox->windowId, FONT_NORMAL_COPY_1, menuBox->infoRects->descTextLeft, menuBox->infoRects->descTextTop, sFontColorTable[0], 0, sDescriptionStringTable[stringId]);
|
||||
}
|
||||
|
||||
static void PartyMenuRemoveWindow(u8 *windowId)
|
||||
@@ -2505,7 +2505,7 @@ void DisplayPartyMenuStdMessage(u32 stringId)
|
||||
}
|
||||
DrawStdFrameWithCustomTileAndPalette(*windowPtr, FALSE, 0x58, 0xF);
|
||||
StringExpandPlaceholders(gStringVar4, sActionStringTable[stringId]);
|
||||
AddTextPrinterParameterized(*windowPtr, FONT_2, gStringVar4, 0, 2, 0, 0);
|
||||
AddTextPrinterParameterized(*windowPtr, FONT_NORMAL, gStringVar4, 0, 2, 0, 0);
|
||||
ScheduleBgCopyTilemapToVram(2);
|
||||
}
|
||||
}
|
||||
@@ -2554,15 +2554,15 @@ static u8 DisplaySelectionWindow(u8 windowType)
|
||||
DrawStdFrameWithCustomTileAndPalette(sPartyMenuInternal->windowId[0], FALSE, 0x4F, 13);
|
||||
if (windowType == SELECTWINDOW_MOVES)
|
||||
return sPartyMenuInternal->windowId[0];
|
||||
cursorDimension = GetMenuCursorDimensionByFont(FONT_2, 0);
|
||||
fontAttribute = GetFontAttribute(FONT_2, FONTATTR_LETTER_SPACING);
|
||||
cursorDimension = GetMenuCursorDimensionByFont(FONT_NORMAL, 0);
|
||||
fontAttribute = GetFontAttribute(FONT_NORMAL, FONTATTR_LETTER_SPACING);
|
||||
for (i = 0; i < sPartyMenuInternal->numActions; ++i)
|
||||
{
|
||||
u8 fontColorsId = (sPartyMenuInternal->actions[i] >= CURSOR_OPTION_FIELD_MOVES) ? 4 : 3;
|
||||
|
||||
AddTextPrinterParameterized4(sPartyMenuInternal->windowId[0], FONT_2, cursorDimension, (i * 16) + 2, fontAttribute, 0, sFontColorTable[fontColorsId], 0, sCursorOptions[sPartyMenuInternal->actions[i]].text);
|
||||
AddTextPrinterParameterized4(sPartyMenuInternal->windowId[0], FONT_NORMAL, cursorDimension, (i * 16) + 2, fontAttribute, 0, sFontColorTable[fontColorsId], 0, sCursorOptions[sPartyMenuInternal->actions[i]].text);
|
||||
}
|
||||
Menu_InitCursorInternal(sPartyMenuInternal->windowId[0], FONT_2, 0, 2, 16, sPartyMenuInternal->numActions, 0, 1);
|
||||
Menu_InitCursorInternal(sPartyMenuInternal->windowId[0], FONT_NORMAL, 0, 2, 16, sPartyMenuInternal->numActions, 0, 1);
|
||||
ScheduleBgCopyTilemapToVram(2);
|
||||
return sPartyMenuInternal->windowId[0];
|
||||
}
|
||||
@@ -2571,12 +2571,12 @@ static void PartyMenuPrintText(const u8 *text)
|
||||
{
|
||||
DrawStdFrameWithCustomTileAndPalette(6, FALSE, 0x4F, 13);
|
||||
gTextFlags.canABSpeedUpPrint = TRUE;
|
||||
AddTextPrinterParameterized2(6, FONT_2, text, GetTextSpeedSetting(), 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
AddTextPrinterParameterized2(6, FONT_NORMAL, text, GetTextSpeedSetting(), 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
}
|
||||
|
||||
static void PartyMenuDisplayYesNoMenu(void)
|
||||
{
|
||||
CreateYesNoMenu(&sPartyMenuYesNoWindowTemplate, FONT_2, 0, 2, 0x4F, 13, 0);
|
||||
CreateYesNoMenu(&sPartyMenuYesNoWindowTemplate, FONT_NORMAL, 0, 2, 0x4F, 13, 0);
|
||||
}
|
||||
|
||||
static u8 CreateLevelUpStatsWindow(void)
|
||||
@@ -2596,7 +2596,7 @@ static void PartyMenu_Oak_PrintText(u8 windowId, const u8 *str)
|
||||
{
|
||||
StringExpandPlaceholders(gStringVar4, str);
|
||||
gTextFlags.canABSpeedUpPrint = TRUE;
|
||||
AddTextPrinterParameterized2(windowId, FONT_4, gStringVar4, GetTextSpeedSetting(), NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
AddTextPrinterParameterized2(windowId, FONT_MALE, gStringVar4, GetTextSpeedSetting(), NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
}
|
||||
|
||||
static bool8 FirstBattleEnterParty_CreateWindowAndMsg1Printer(void)
|
||||
@@ -2637,8 +2637,8 @@ static void ToggleFieldMoveDescriptionWindow(u8 action)
|
||||
if (ptr->windowId[2] == WINDOW_NONE)
|
||||
ptr->windowId[2] = AddWindow(&sFieldMoveDescriptionWindowTemplate);
|
||||
DrawHelpMessageWindowTilesById(ptr->windowId[2]);
|
||||
letterSpacing = GetFontAttribute(FONT_2, FONTATTR_LETTER_SPACING);
|
||||
AddTextPrinterParameterized4(ptr->windowId[2], FONT_2, 3, 6, letterSpacing, 0, sFontColorTable[5], 0, sFieldMoveDescriptionTable[action - CURSOR_OPTION_FIELD_MOVES]);
|
||||
letterSpacing = GetFontAttribute(FONT_NORMAL, FONTATTR_LETTER_SPACING);
|
||||
AddTextPrinterParameterized4(ptr->windowId[2], FONT_NORMAL, 3, 6, letterSpacing, 0, sFontColorTable[5], 0, sFieldMoveDescriptionTable[action - CURSOR_OPTION_FIELD_MOVES]);
|
||||
PutWindowTilemap(ptr->windowId[2]);
|
||||
ScheduleBgCopyTilemapToVram(2);
|
||||
}
|
||||
@@ -3061,7 +3061,7 @@ static void Task_TryCreateSelectionWindow(u8 taskId)
|
||||
|
||||
static void Task_HandleSelectionMenuInput(u8 taskId)
|
||||
{
|
||||
if (!gPaletteFade.active && sub_80BF748() != TRUE)
|
||||
if (!gPaletteFade.active && MenuHelpers_ShouldWaitForLinkRecv() != TRUE)
|
||||
{
|
||||
s8 input;
|
||||
s16 *data = gTasks[taskId].data;
|
||||
@@ -3851,7 +3851,7 @@ static void CursorCB_Register(u8 taskId)
|
||||
u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES);
|
||||
u8 isEventLegal = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_EVENT_LEGAL);
|
||||
|
||||
switch (CanRegisterMonForTradingBoard(*(struct GFtgtGnameSub *)GetHostRFUtgtGname(), species2, species, isEventLegal))
|
||||
switch (CanRegisterMonForTradingBoard(*(struct RfuGameCompatibilityData *)GetHostRfuGameData(), species2, species, isEventLegal))
|
||||
{
|
||||
case CANT_REGISTER_MON:
|
||||
StringExpandPlaceholders(gStringVar4, gText_PkmnCantBeTradedNow);
|
||||
@@ -3877,7 +3877,7 @@ static void CursorCB_Trade1(u8 taskId)
|
||||
u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2);
|
||||
u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES);
|
||||
u8 isEventLegal = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_EVENT_LEGAL);
|
||||
u32 stringId = GetUnionRoomTradeMessageId(*(struct GFtgtGnameSub *)GetHostRFUtgtGname(), gPartnerTgtGnameSub, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, isEventLegal);
|
||||
u32 stringId = GetUnionRoomTradeMessageId(*(struct RfuGameCompatibilityData *)GetHostRfuGameData(), gRfuPartnerCompatibilityData, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, isEventLegal);
|
||||
|
||||
if (stringId != UR_TRADE_MSG_NONE)
|
||||
{
|
||||
@@ -3912,7 +3912,7 @@ static void CursorCB_FieldMove(u8 taskId)
|
||||
return;
|
||||
PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
|
||||
PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
|
||||
if (MenuHelpers_LinkSomething() == TRUE || InUnionRoom() == TRUE)
|
||||
if (MenuHelpers_IsLinkActive() == TRUE || InUnionRoom() == TRUE)
|
||||
{
|
||||
if (fieldMove == FIELD_MOVE_MILK_DRINK || fieldMove == FIELD_MOVE_SOFT_BOILED)
|
||||
DisplayPartyMenuStdMessage(PARTY_MSG_CANT_USE_HERE);
|
||||
@@ -4252,7 +4252,7 @@ static void CB2_ReturnToBagMenu(void)
|
||||
|
||||
static void CB2_ReturnToTMCaseMenu(void)
|
||||
{
|
||||
InitTMCase(TMCASE_NA, NULL, 0xFF);
|
||||
InitTMCase(TMCASE_REOPENING, NULL, TMCASE_KEEP_PREV);
|
||||
}
|
||||
|
||||
static void CB2_ReturnToBerryPouchMenu(void)
|
||||
@@ -4549,7 +4549,7 @@ static void ShowMoveSelectWindow(u8 slot)
|
||||
{
|
||||
u8 i;
|
||||
u8 moveCount = 0;
|
||||
u8 fontId = FONT_2;
|
||||
u8 fontId = FONT_NORMAL;
|
||||
u8 windowId = DisplaySelectionWindow(SELECTWINDOW_MOVES);
|
||||
u16 move;
|
||||
|
||||
|
||||
+20
-20
@@ -157,7 +157,7 @@ void BedroomPC(void)
|
||||
sItemOrder = sItemOrder_BedroomPC;
|
||||
sTopMenuItemCount = 3;
|
||||
taskId = CreateTask(TaskDummy, 0);
|
||||
DisplayItemMessageOnField(taskId, FONT_2, gText_WhatWouldYouLikeToDo, Task_DrawPlayerPcTopMenu);
|
||||
DisplayItemMessageOnField(taskId, FONT_NORMAL, gText_WhatWouldYouLikeToDo, Task_DrawPlayerPcTopMenu);
|
||||
}
|
||||
|
||||
void PlayerPC(void)
|
||||
@@ -169,7 +169,7 @@ void PlayerPC(void)
|
||||
sItemOrder = sItemOrder_PlayerPC;
|
||||
sTopMenuItemCount = 3;
|
||||
taskId = CreateTask(TaskDummy, 0);
|
||||
DisplayItemMessageOnField(taskId, FONT_2, gText_WhatWouldYouLikeToDo, Task_DrawPlayerPcTopMenu);
|
||||
DisplayItemMessageOnField(taskId, FONT_NORMAL, gText_WhatWouldYouLikeToDo, Task_DrawPlayerPcTopMenu);
|
||||
}
|
||||
|
||||
static void Task_DrawPlayerPcTopMenu(u8 taskId)
|
||||
@@ -180,8 +180,8 @@ static void Task_DrawPlayerPcTopMenu(u8 taskId)
|
||||
else
|
||||
tWindowId = AddWindow(&sWindowTemplate_TopMenu_4Items);
|
||||
SetStdWindowBorderStyle(tWindowId, 0);
|
||||
AddItemMenuActionTextPrinters(tWindowId, FONT_2, GetMenuCursorDimensionByFont(FONT_2, 0), 2, GetFontAttribute(FONT_2, FONTATTR_LETTER_SPACING), 16, sTopMenuItemCount, sMenuActions_TopMenu, sItemOrder);
|
||||
Menu_InitCursor(tWindowId, FONT_2, 0, 2, 16, sTopMenuItemCount, 0);
|
||||
AddItemMenuActionTextPrinters(tWindowId, FONT_NORMAL, GetMenuCursorDimensionByFont(FONT_NORMAL, 0), 2, GetFontAttribute(FONT_NORMAL, FONTATTR_LETTER_SPACING), 16, sTopMenuItemCount, sMenuActions_TopMenu, sItemOrder);
|
||||
Menu_InitCursor(tWindowId, FONT_NORMAL, 0, 2, 16, sTopMenuItemCount, 0);
|
||||
ScheduleBgCopyTilemapToVram(0);
|
||||
gTasks[taskId].func = Task_TopMenuHandleInput;
|
||||
}
|
||||
@@ -215,7 +215,7 @@ static void Task_TopMenuHandleInput(u8 taskId)
|
||||
static void Task_ReturnToTopMenu(u8 taskId)
|
||||
{
|
||||
RestoreHelpContext();
|
||||
DisplayItemMessageOnField(taskId, FONT_2, gText_WhatWouldYouLikeToDo, Task_DrawPlayerPcTopMenu);
|
||||
DisplayItemMessageOnField(taskId, FONT_NORMAL, gText_WhatWouldYouLikeToDo, Task_DrawPlayerPcTopMenu);
|
||||
}
|
||||
|
||||
static void Task_PlayerPcItemStorage(u8 taskId)
|
||||
@@ -229,7 +229,7 @@ static void Task_PlayerPcMailbox(u8 taskId)
|
||||
gPlayerPcMenuManager.count = CountPCMail();
|
||||
if (gPlayerPcMenuManager.count == 0)
|
||||
{
|
||||
DisplayItemMessageOnField(taskId, FONT_2, gText_TheresNoMailHere, Task_ReturnToTopMenu);
|
||||
DisplayItemMessageOnField(taskId, FONT_NORMAL, gText_TheresNoMailHere, Task_ReturnToTopMenu);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -249,7 +249,7 @@ static void Task_PlayerPcMailbox(u8 taskId)
|
||||
}
|
||||
else
|
||||
{
|
||||
DisplayItemMessageOnField(taskId, FONT_2, gText_TheresNoMailHere, Task_ReturnToTopMenu);
|
||||
DisplayItemMessageOnField(taskId, FONT_NORMAL, gText_TheresNoMailHere, Task_ReturnToTopMenu);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -272,8 +272,8 @@ static void Task_CreateItemStorageSubmenu(u8 taskId, u8 cursorPos)
|
||||
SetHelpContext(HELPCONTEXT_PLAYERS_PC_ITEMS);
|
||||
tWindowId = AddWindow(&sWindowTemplate_ItemStorageSubmenu);
|
||||
SetStdWindowBorderStyle(tWindowId, FALSE);
|
||||
PrintTextArray(tWindowId, FONT_2, GetMenuCursorDimensionByFont(FONT_2, 0), 2, 16, 3, sMenuActions_ItemPc);
|
||||
Menu_InitCursor(tWindowId, FONT_2, 0, 2, 16, 3, cursorPos);
|
||||
PrintTextArray(tWindowId, FONT_NORMAL, GetMenuCursorDimensionByFont(FONT_NORMAL, 0), 2, 16, 3, sMenuActions_ItemPc);
|
||||
Menu_InitCursor(tWindowId, FONT_NORMAL, 0, 2, 16, 3, cursorPos);
|
||||
ScheduleBgCopyTilemapToVram(0);
|
||||
PrintStringOnWindow0WithDialogueFrame(sItemStorageActionDescriptionPtrs[cursorPos]);
|
||||
}
|
||||
@@ -281,7 +281,7 @@ static void Task_CreateItemStorageSubmenu(u8 taskId, u8 cursorPos)
|
||||
static void PrintStringOnWindow0WithDialogueFrame(const u8 *str)
|
||||
{
|
||||
DrawDialogueFrame(0, FALSE);
|
||||
AddTextPrinterParameterized(0, FONT_2, str, 0, 1, 0, NULL);
|
||||
AddTextPrinterParameterized(0, FONT_NORMAL, str, 0, 1, 0, NULL);
|
||||
}
|
||||
|
||||
static void Task_TopMenu_ItemStorageSubmenu_HandleInput(u8 taskId)
|
||||
@@ -364,7 +364,7 @@ static void Task_PlayerPcWithdrawItem(u8 taskId)
|
||||
ClearStdWindowAndFrameToTransparent(tWindowId, FALSE);
|
||||
ClearWindowTilemap(tWindowId);
|
||||
RemoveWindow(tWindowId);
|
||||
DisplayItemMessageOnField(taskId, FONT_2, gText_ThereAreNoItems, Task_PlayerPcItemStorage);
|
||||
DisplayItemMessageOnField(taskId, FONT_NORMAL, gText_ThereAreNoItems, Task_PlayerPcItemStorage);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -453,9 +453,9 @@ static void PCMailCompaction(void)
|
||||
static void Task_DrawMailboxPcMenu(u8 taskId)
|
||||
{
|
||||
u8 windowId = MailboxPC_GetAddWindow(0);
|
||||
s32 width = GetStringWidth(FONT_2, gText_Mailbox, 0);
|
||||
s32 width = GetStringWidth(FONT_NORMAL, gText_Mailbox, 0);
|
||||
MailboxPC_GetAddWindow(1);
|
||||
AddTextPrinterParameterized(windowId, FONT_2, gText_Mailbox, (80 - width) / 2, 2, 0, NULL);
|
||||
AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_Mailbox, (80 - width) / 2, 2, 0, NULL);
|
||||
ScheduleBgCopyTilemapToVram(0);
|
||||
gTasks[taskId].tListMenuTaskId = MailboxPC_InitListMenu(&gPlayerPcMenuManager);
|
||||
MailboxPC_AddScrollIndicatorArrows(&gPlayerPcMenuManager);
|
||||
@@ -512,7 +512,7 @@ static void Task_PrintWhatToDoWithSelectedMail(u8 taskId)
|
||||
ConvertInternationalString(gStringVar1, LANGUAGE_JAPANESE);
|
||||
}
|
||||
StringExpandPlaceholders(gStringVar4, gText_WhatWouldYouLikeToDoWithPlayersMail);
|
||||
DisplayItemMessageOnField(taskId, FONT_2, gStringVar4, Task_DrawMailSubmenu);
|
||||
DisplayItemMessageOnField(taskId, FONT_NORMAL, gStringVar4, Task_DrawMailSubmenu);
|
||||
}
|
||||
|
||||
static void Task_DestroyMailboxPcViewAndCancel(u8 taskId)
|
||||
@@ -529,8 +529,8 @@ static void Task_DestroyMailboxPcViewAndCancel(u8 taskId)
|
||||
static void Task_DrawMailSubmenu(u8 taskId)
|
||||
{
|
||||
u8 windowId = MailboxPC_GetAddWindow(2);
|
||||
PrintTextArray(windowId, FONT_2, GetMenuCursorDimensionByFont(FONT_2, 0), 2, 16, 4, sMenuActions_MailSubmenu);
|
||||
Menu_InitCursor(windowId, FONT_2, 0, 2, 16, 4, 0);
|
||||
PrintTextArray(windowId, FONT_NORMAL, GetMenuCursorDimensionByFont(FONT_NORMAL, 0), 2, 16, 4, sMenuActions_MailSubmenu);
|
||||
Menu_InitCursor(windowId, FONT_NORMAL, 0, 2, 16, 4, 0);
|
||||
ScheduleBgCopyTilemapToVram(0);
|
||||
gTasks[taskId].func = Task_MailSubmenuHandleInput;
|
||||
}
|
||||
@@ -600,7 +600,7 @@ static void CB2_SetCbToReturnToMailbox(void)
|
||||
|
||||
static void Task_PlayerPcMoveMailToBag(u8 taskId)
|
||||
{
|
||||
DisplayItemMessageOnField(taskId, FONT_2, gText_MessageWillBeLost, Task_DrawYesNoMenuToConfirmMoveToBag);
|
||||
DisplayItemMessageOnField(taskId, FONT_NORMAL, gText_MessageWillBeLost, Task_DrawYesNoMenuToConfirmMoveToBag);
|
||||
}
|
||||
|
||||
static void Task_DrawYesNoMenuToConfirmMoveToBag(u8 taskId)
|
||||
@@ -632,11 +632,11 @@ static void Task_TryPutMailInBag_DestroyMsgIfSuccessful(u8 taskId)
|
||||
struct Mail * mail = &SELECTED_MAIL;
|
||||
if (!AddBagItem(mail->itemId, 1))
|
||||
{
|
||||
DisplayItemMessageOnField(taskId, FONT_2, gText_BagIsFull, Task_PlayerPcExitMailSubmenu);
|
||||
DisplayItemMessageOnField(taskId, FONT_NORMAL, gText_BagIsFull, Task_PlayerPcExitMailSubmenu);
|
||||
}
|
||||
else
|
||||
{
|
||||
DisplayItemMessageOnField(taskId, FONT_2, gText_MailReturnedToBagMessageErased, Task_PlayerPcExitMailSubmenu);
|
||||
DisplayItemMessageOnField(taskId, FONT_NORMAL, gText_MailReturnedToBagMessageErased, Task_PlayerPcExitMailSubmenu);
|
||||
ClearMailStruct(mail);
|
||||
PCMailCompaction();
|
||||
gPlayerPcMenuManager.count--;
|
||||
@@ -715,7 +715,7 @@ void Mailbox_ReturnToMailListAfterDeposit(void)
|
||||
|
||||
static void Task_Error_NoPokemon(u8 taskId)
|
||||
{
|
||||
DisplayItemMessageOnField(taskId, FONT_2, gText_ThereIsNoPokemon, Task_PlayerPcExitMailSubmenu);
|
||||
DisplayItemMessageOnField(taskId, FONT_NORMAL, gText_ThereIsNoPokemon, Task_PlayerPcExitMailSubmenu);
|
||||
}
|
||||
|
||||
static void Task_RedrawPlayerPcMailboxAndSetUpInputHandler(u8 taskId)
|
||||
|
||||
+170
-131
@@ -4,160 +4,191 @@
|
||||
#include "task.h"
|
||||
#include "wild_pokemon_area.h"
|
||||
#include "pokedex_area_markers.h"
|
||||
#include "pokedex.h"
|
||||
|
||||
/*
|
||||
Controls the red ellipse markers that appear on the pokedex maps to show where a species is found.
|
||||
All of the markers together are a single sprite, with each individual marker being represented by
|
||||
a subsprite of the necessary size and shape.
|
||||
|
||||
The data about each area marker is in sAreaMarkers, each specified by a DEX_AREA constant.
|
||||
A MAPSEC is associated with a DEX_AREA constant by a series of arrays in wild_pokemon_area.c
|
||||
*/
|
||||
|
||||
struct PAM_TaskData
|
||||
{
|
||||
struct SubspriteTable subsprites;
|
||||
void *buffer;
|
||||
u8 unused;
|
||||
u8 spriteId;
|
||||
u16 tilesTag;
|
||||
u16 paletteTag; // Never read
|
||||
};
|
||||
|
||||
enum {
|
||||
MARKER_CIRCULAR,
|
||||
MARKER_SMALL_H,
|
||||
MARKER_SMALL_V,
|
||||
MARKER_MED_H,
|
||||
MARKER_MED_V,
|
||||
MARKER_LARGE_H,
|
||||
MARKER_LARGE_V,
|
||||
};
|
||||
|
||||
static const u16 sMarkerPal[] = INCBIN_U16("graphics/pokedex/area_markers/marker.gbapal");
|
||||
static const u32 sMarkerTiles[] = INCBIN_U32("graphics/pokedex/area_markers/marker.4bpp.lz");
|
||||
|
||||
static const struct Subsprite sSubsprite0 = {
|
||||
.size = ST_OAM_SIZE_0,
|
||||
.shape = ST_OAM_SQUARE,
|
||||
static const struct Subsprite sSubsprite_Circular = {
|
||||
.size = SPRITE_SIZE(8x8),
|
||||
.shape = SPRITE_SHAPE(8x8),
|
||||
.priority = 1,
|
||||
.tileOffset = 0
|
||||
};
|
||||
|
||||
static const struct Subsprite sSubsprite1 = {
|
||||
.size = ST_OAM_SIZE_0,
|
||||
.shape = ST_OAM_H_RECTANGLE,
|
||||
static const struct Subsprite sSubsprite_SmallHorizontal = {
|
||||
.size = SPRITE_SIZE(16x8),
|
||||
.shape = SPRITE_SHAPE(16x8),
|
||||
.priority = 1,
|
||||
.tileOffset = 1
|
||||
};
|
||||
|
||||
static const struct Subsprite sSubsprite2 = {
|
||||
.size = ST_OAM_SIZE_0,
|
||||
.shape = ST_OAM_V_RECTANGLE,
|
||||
static const struct Subsprite sSubsprite_SmallVertical = {
|
||||
.size = SPRITE_SIZE(8x16),
|
||||
.shape = SPRITE_SHAPE(8x16),
|
||||
.priority = 1,
|
||||
.tileOffset = 3
|
||||
};
|
||||
|
||||
static const struct Subsprite sSubsprite3 = {
|
||||
.size = ST_OAM_SIZE_2,
|
||||
.shape = ST_OAM_H_RECTANGLE,
|
||||
static const struct Subsprite sSubsprite_MediumHorizontal = {
|
||||
.size = SPRITE_SIZE(32x16),
|
||||
.shape = SPRITE_SHAPE(32x16),
|
||||
.priority = 1,
|
||||
.tileOffset = 5
|
||||
};
|
||||
|
||||
static const struct Subsprite sSubsprite4 = {
|
||||
.size = ST_OAM_SIZE_2,
|
||||
.shape = ST_OAM_V_RECTANGLE,
|
||||
static const struct Subsprite sSubsprite_MediumVertical = {
|
||||
.size = SPRITE_SIZE(16x32),
|
||||
.shape = SPRITE_SHAPE(16x32),
|
||||
.priority = 1,
|
||||
.tileOffset = 13
|
||||
};
|
||||
|
||||
static const struct Subsprite sSubsprite5 = {
|
||||
.size = ST_OAM_SIZE_2,
|
||||
.shape = ST_OAM_H_RECTANGLE,
|
||||
static const struct Subsprite sSubsprite_LargeHorizontal = {
|
||||
.size = SPRITE_SIZE(32x16),
|
||||
.shape = SPRITE_SHAPE(32x16),
|
||||
.priority = 1,
|
||||
.tileOffset = 21
|
||||
};
|
||||
|
||||
static const struct Subsprite sSubsprite6 = {
|
||||
.size = ST_OAM_SIZE_2,
|
||||
.shape = ST_OAM_V_RECTANGLE,
|
||||
static const struct Subsprite sSubsprite_LargeVertical = {
|
||||
.size = SPRITE_SIZE(16x32),
|
||||
.shape = SPRITE_SHAPE(16x32),
|
||||
.priority = 1,
|
||||
.tileOffset = 29
|
||||
};
|
||||
|
||||
|
||||
static const struct Subsprite *const sSubsprites[] = {
|
||||
&sSubsprite0,
|
||||
&sSubsprite1,
|
||||
&sSubsprite2,
|
||||
&sSubsprite3,
|
||||
&sSubsprite4,
|
||||
&sSubsprite5,
|
||||
&sSubsprite6
|
||||
[MARKER_CIRCULAR] = &sSubsprite_Circular,
|
||||
[MARKER_SMALL_H] = &sSubsprite_SmallHorizontal,
|
||||
[MARKER_SMALL_V] = &sSubsprite_SmallVertical,
|
||||
[MARKER_MED_H] = &sSubsprite_MediumHorizontal,
|
||||
[MARKER_MED_V] = &sSubsprite_MediumVertical,
|
||||
[MARKER_LARGE_H] = &sSubsprite_LargeHorizontal,
|
||||
[MARKER_LARGE_V] = &sSubsprite_LargeVertical
|
||||
};
|
||||
|
||||
static const s8 sSubspriteLookupTable[][4] = {
|
||||
{ 0, 0x00, 0x00 },
|
||||
{ 0, 0x36, 0x2c },
|
||||
{ 0, 0x36, 0x1c },
|
||||
{ 0, 0x36, 0x0c },
|
||||
{ 0, 0x5c, 0x0c },
|
||||
{ 0, 0x6e, 0x18 },
|
||||
{ 0, 0x5c, 0x24 },
|
||||
{ 0, 0x4c, 0x18 },
|
||||
{ 0, 0x4e, 0x34 },
|
||||
{ 0, 0x36, 0x3e },
|
||||
{ 0, 0x2a, 0x02 },
|
||||
{ 0, 0x5c, 0x18 },
|
||||
{ 2, 0x36, 0x20 },
|
||||
{ 2, 0x36, 0x10 },
|
||||
{ 1, 0x3d, 0x0c },
|
||||
{ 1, 0x4d, 0x0c },
|
||||
{ 0, 0x5c, 0x12 },
|
||||
{ 0, 0x5c, 0x1e },
|
||||
{ 0, 0x54, 0x18 },
|
||||
{ 1, 0x62, 0x18 },
|
||||
{ 1, 0x62, 0x0c },
|
||||
{ 2, 0x6e, 0x0c },
|
||||
{ 1, 0x62, 0x24 },
|
||||
{ 4, 0x6a, 0x19 },
|
||||
{ 1, 0x64, 0x2e },
|
||||
{ 2, 0x5e, 0x2d },
|
||||
{ 1, 0x55, 0x34 },
|
||||
{ 0, 0x44, 0x18 },
|
||||
{ 4, 0x3e, 0x1a },
|
||||
{ 1, 0x40, 0x34 },
|
||||
{ 0, 0x4e, 0x3c },
|
||||
{ 3, 0x37, 0x3a },
|
||||
{ 2, 0x36, 0x32 },
|
||||
{ 1, 0x28, 0x1c },
|
||||
{ 4, 0x26, 0x04 },
|
||||
{ 0, 0x5c, 0x04 },
|
||||
{ 3, 0x5a, 0xfe },
|
||||
{ 0, 0x33, 0x14 },
|
||||
{ 1, 0x3d, 0x12 },
|
||||
{ 0, 0x48, 0x08 },
|
||||
{ 0, 0x57, 0x08 },
|
||||
{ 0, 0x70, 0x0e },
|
||||
{ 0, 0x71, 0x14 },
|
||||
{ 0, 0x71, 0x19 },
|
||||
{ 1, 0x4e, 0x2c },
|
||||
{ 0, 0x41, 0x3c },
|
||||
{ 0, 0x34, 0x3e },
|
||||
{ 0, 0x2d, 0x07 },
|
||||
{ 0, 0x0a, 0x0a },
|
||||
{ 0, 0x0c, 0x23 },
|
||||
{ 0, 0x0e, 0x34 },
|
||||
{ 0, 0x0c, 0x54 },
|
||||
{ 0, 0x2d, 0x51 },
|
||||
{ 0, 0x4c, 0x54 },
|
||||
{ 0, 0x68, 0x52 },
|
||||
{ 2, 0x0e, 0x02 },
|
||||
{ 0, 0x0a, 0x0f },
|
||||
{ 0, 0x0c, 0x1d },
|
||||
{ 1, 0x02, 0x34 },
|
||||
{ 1, 0x0c, 0x38 },
|
||||
{ 1, 0x2c, 0x4a },
|
||||
{ 1, 0x24, 0x4e },
|
||||
{ 2, 0x30, 0x50 },
|
||||
{ 2, 0x34, 0x56 },
|
||||
{ 0, 0x48, 0x4a },
|
||||
{ 1, 0x48, 0x4e },
|
||||
{ 2, 0x51, 0x50 },
|
||||
{ 0, 0x4c, 0x5c },
|
||||
{ 0, 0x68, 0x4b },
|
||||
{ 0, 0x68, 0x56 },
|
||||
{ 2, 0x6c, 0x53 },
|
||||
{ 3, 0x60, 0x5a },
|
||||
{ 0, 0x0e, 0x01 },
|
||||
{ 0, 0x05, 0x34 },
|
||||
{ 0, 0x0d, 0x50 },
|
||||
{ 0, 0x36, 0x4a },
|
||||
{ 0, 0x45, 0x49 },
|
||||
{ 0, 0x4c, 0x4d },
|
||||
{ 0, 0x49, 0x5f },
|
||||
{ 3, 0x60, 0x5a }
|
||||
static const s8 sAreaMarkers[][4] = {
|
||||
// Marker, x, y
|
||||
[DEX_AREA_NONE] = {},
|
||||
[DEX_AREA_PALLET_TOWN] = { MARKER_CIRCULAR, 54, 44 },
|
||||
[DEX_AREA_VIRIDIAN_CITY] = { MARKER_CIRCULAR, 54, 28 },
|
||||
[DEX_AREA_PEWTER_CITY] = { MARKER_CIRCULAR, 54, 12 },
|
||||
[DEX_AREA_CERULEAN_CITY] = { MARKER_CIRCULAR, 92, 12 },
|
||||
[DEX_AREA_LAVENDER_TOWN] = { MARKER_CIRCULAR, 110, 24 },
|
||||
[DEX_AREA_VERMILION_CITY] = { MARKER_CIRCULAR, 92, 36 },
|
||||
[DEX_AREA_CELADON_CITY] = { MARKER_CIRCULAR, 76, 24 },
|
||||
[DEX_AREA_FUCHSIA_CITY] = { MARKER_CIRCULAR, 78, 52 },
|
||||
[DEX_AREA_CINNABAR_ISLAND] = { MARKER_CIRCULAR, 54, 62 },
|
||||
[DEX_AREA_INDIGO_PLATEAU] = { MARKER_CIRCULAR, 42, 2 },
|
||||
[DEX_AREA_SAFFRON_CITY] = { MARKER_CIRCULAR, 92, 24 },
|
||||
[DEX_AREA_ROUTE_1] = { MARKER_SMALL_V, 54, 32 },
|
||||
[DEX_AREA_ROUTE_2] = { MARKER_SMALL_V, 54, 16 },
|
||||
[DEX_AREA_ROUTE_3] = { MARKER_SMALL_H, 61, 12 },
|
||||
[DEX_AREA_ROUTE_4] = { MARKER_SMALL_H, 77, 12 },
|
||||
[DEX_AREA_ROUTE_5] = { MARKER_CIRCULAR, 92, 18 },
|
||||
[DEX_AREA_ROUTE_6] = { MARKER_CIRCULAR, 92, 30 },
|
||||
[DEX_AREA_ROUTE_7] = { MARKER_CIRCULAR, 84, 24 },
|
||||
[DEX_AREA_ROUTE_8] = { MARKER_SMALL_H, 98, 24 },
|
||||
[DEX_AREA_ROUTE_9] = { MARKER_SMALL_H, 98, 12 },
|
||||
[DEX_AREA_ROUTE_10] = { MARKER_SMALL_V, 110, 12 },
|
||||
[DEX_AREA_ROUTE_11] = { MARKER_SMALL_H, 98, 36 },
|
||||
[DEX_AREA_ROUTE_12] = { MARKER_MED_V, 106, 25 },
|
||||
[DEX_AREA_ROUTE_13] = { MARKER_SMALL_H, 100, 46 },
|
||||
[DEX_AREA_ROUTE_14] = { MARKER_SMALL_V, 94, 45 },
|
||||
[DEX_AREA_ROUTE_15] = { MARKER_SMALL_H, 85, 52 },
|
||||
[DEX_AREA_ROUTE_16] = { MARKER_CIRCULAR, 68, 24 },
|
||||
[DEX_AREA_ROUTE_17] = { MARKER_MED_V, 62, 26 },
|
||||
[DEX_AREA_ROUTE_18] = { MARKER_SMALL_H, 64, 52 },
|
||||
[DEX_AREA_ROUTE_19] = { MARKER_CIRCULAR, 78, 60 },
|
||||
[DEX_AREA_ROUTE_20] = { MARKER_MED_H, 55, 58 },
|
||||
[DEX_AREA_ROUTE_21] = { MARKER_SMALL_V, 54, 50 },
|
||||
[DEX_AREA_ROUTE_22] = { MARKER_SMALL_H, 40, 28 },
|
||||
[DEX_AREA_ROUTE_23] = { MARKER_MED_V, 38, 4 },
|
||||
[DEX_AREA_ROUTE_24] = { MARKER_CIRCULAR, 92, 4 },
|
||||
[DEX_AREA_ROUTE_25] = { MARKER_MED_H, 90, -2 },
|
||||
[DEX_AREA_VIRIDIAN_FOREST] = { MARKER_CIRCULAR, 51, 20 },
|
||||
[DEX_AREA_DIGLETTS_CAVE] = { MARKER_SMALL_H, 61, 18 },
|
||||
[DEX_AREA_MT_MOON] = { MARKER_CIRCULAR, 72, 8 },
|
||||
[DEX_AREA_CERULEAN_CAVE] = { MARKER_CIRCULAR, 87, 8 },
|
||||
[DEX_AREA_ROCK_TUNNEL] = { MARKER_CIRCULAR, 112, 14 },
|
||||
[DEX_AREA_POWER_PLANT] = { MARKER_CIRCULAR, 113, 20 },
|
||||
[DEX_AREA_POKEMON_TOWER] = { MARKER_CIRCULAR, 113, 25 },
|
||||
[DEX_AREA_SAFARI_ZONE] = { MARKER_SMALL_H, 78, 44 },
|
||||
[DEX_AREA_SEAFOAM_ISLANDS] = { MARKER_CIRCULAR, 65, 60 },
|
||||
[DEX_AREA_POKEMON_MANSION] = { MARKER_CIRCULAR, 52, 62 },
|
||||
[DEX_AREA_VICTORY_ROAD] = { MARKER_CIRCULAR, 45, 7 },
|
||||
[DEX_AREA_ONE_ISLAND] = { MARKER_CIRCULAR, 10, 10 },
|
||||
[DEX_AREA_TWO_ISLAND] = { MARKER_CIRCULAR, 12, 35 },
|
||||
[DEX_AREA_THREE_ISLAND] = { MARKER_CIRCULAR, 14, 52 },
|
||||
[DEX_AREA_FOUR_ISLAND] = { MARKER_CIRCULAR, 12, 84 },
|
||||
[DEX_AREA_FIVE_ISLAND] = { MARKER_CIRCULAR, 45, 81 },
|
||||
[DEX_AREA_SIX_ISLAND] = { MARKER_CIRCULAR, 76, 84 },
|
||||
[DEX_AREA_SEVEN_ISLAND] = { MARKER_CIRCULAR, 104, 82 },
|
||||
[DEX_AREA_KINDLE_ROAD] = { MARKER_SMALL_V, 14, 2 },
|
||||
[DEX_AREA_TREASURE_BEACH] = { MARKER_CIRCULAR, 10, 15 },
|
||||
[DEX_AREA_CAPE_BRINK] = { MARKER_CIRCULAR, 12, 29 },
|
||||
[DEX_AREA_BOND_BRIDGE] = { MARKER_SMALL_H, 2, 52 },
|
||||
[DEX_AREA_THREE_ISLE_PATH] = { MARKER_SMALL_H, 12, 56 },
|
||||
[DEX_AREA_RESORT_GORGEOUS] = { MARKER_SMALL_H, 44, 74 },
|
||||
[DEX_AREA_WATER_LABYRINTH] = { MARKER_SMALL_H, 36, 78 },
|
||||
[DEX_AREA_FIVE_ISLE_MEADOW] = { MARKER_SMALL_V, 48, 80 },
|
||||
[DEX_AREA_MEMORIAL_PILLAR] = { MARKER_SMALL_V, 52, 86 },
|
||||
[DEX_AREA_OUTCAST_ISLAND] = { MARKER_CIRCULAR, 72, 74 },
|
||||
[DEX_AREA_GREEN_PATH] = { MARKER_SMALL_H, 72, 78 },
|
||||
[DEX_AREA_WATER_PATH] = { MARKER_SMALL_V, 81, 80 },
|
||||
[DEX_AREA_RUIN_VALLEY] = { MARKER_CIRCULAR, 76, 92 },
|
||||
[DEX_AREA_TRAINER_TOWER] = { MARKER_CIRCULAR, 104, 75 },
|
||||
[DEX_AREA_CANYON_ENTRANCE] = { MARKER_CIRCULAR, 104, 86 },
|
||||
[DEX_AREA_SEVAULT_CANYON] = { MARKER_SMALL_V, 108, 83 },
|
||||
[DEX_AREA_TANOBY_RUINS] = { MARKER_MED_H, 96, 90 },
|
||||
[DEX_AREA_MT_EMBER] = { MARKER_CIRCULAR, 14, 1 },
|
||||
[DEX_AREA_BERRY_FOREST] = { MARKER_CIRCULAR, 5, 52 },
|
||||
[DEX_AREA_ICEFALL_CAVE] = { MARKER_CIRCULAR, 13, 80 },
|
||||
[DEX_AREA_LOST_CAVE] = { MARKER_CIRCULAR, 54, 74 },
|
||||
[DEX_AREA_ALTERING_CAVE] = { MARKER_CIRCULAR, 69, 73 },
|
||||
[DEX_AREA_PATTERN_BUSH] = { MARKER_CIRCULAR, 76, 77 },
|
||||
[DEX_AREA_DOTTED_HOLE] = { MARKER_CIRCULAR, 73, 95 },
|
||||
[DEX_AREA_TANOBY_CHAMBER] = { MARKER_MED_H, 96, 90 },
|
||||
};
|
||||
|
||||
static void Task_ShowAreaMarkers(u8 taskId)
|
||||
{
|
||||
struct PAM_TaskData * data = (void *)gTasks[taskId].data;
|
||||
gSprites[data->spr_id].invisible = FALSE;
|
||||
gSprites[data->spriteId].invisible = FALSE;
|
||||
}
|
||||
|
||||
u8 Ctor_PokedexAreaMarkers(u16 species, u16 tilesTag, u8 palIdx, u8 y)
|
||||
u8 CreatePokedexAreaMarkers(u16 species, u16 tilesTag, u8 palIdx, u8 y)
|
||||
{
|
||||
struct SpriteTemplate spriteTemplate;
|
||||
struct CompressedSpriteSheet spriteSheet;
|
||||
@@ -165,34 +196,42 @@ u8 Ctor_PokedexAreaMarkers(u16 species, u16 tilesTag, u8 palIdx, u8 y)
|
||||
struct PAM_TaskData * data;
|
||||
struct Subsprite * subsprites;
|
||||
|
||||
// Load gfx
|
||||
spriteSheet.data = sMarkerTiles;
|
||||
spriteSheet.size = 0x4A0;
|
||||
spriteSheet.tag = tilesTag;
|
||||
LoadCompressedSpriteSheet(&spriteSheet);
|
||||
LoadPalette(sMarkerPal, 0x100 + 16 * palIdx, 0x20);
|
||||
|
||||
// Get marker subsprites
|
||||
taskId = CreateTask(Task_ShowAreaMarkers, 0);
|
||||
data = (void *)gTasks[taskId].data;
|
||||
data->unk_0C = 0;
|
||||
data->unused = 0;
|
||||
data->tilesTag = tilesTag;
|
||||
data->unk_10 = 0xFFFF;
|
||||
data->paletteTag = TAG_NONE;
|
||||
subsprites = Alloc(120 * sizeof(struct Subsprite));
|
||||
data->buffer = subsprites;
|
||||
data->subsprites.subsprites = subsprites;
|
||||
data->subsprites.subspriteCount = BuildPokedexAreaSubspriteBuffer(species, subsprites);
|
||||
data->subsprites.subspriteCount = GetSpeciesPokedexAreaMarkers(species, subsprites);
|
||||
|
||||
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON);
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_BD);
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(12, 8));
|
||||
SetGpuReg(REG_OFFSET_BLDY, 0);
|
||||
SetGpuReg(REG_OFFSET_WININ, 0x1F1F);
|
||||
SetGpuReg(REG_OFFSET_WINOUT, 0x2F3D);
|
||||
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ);
|
||||
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_CLR);
|
||||
|
||||
// Set marker subsprites on full sprite
|
||||
spriteTemplate = gDummySpriteTemplate;
|
||||
spriteTemplate.tileTag = tilesTag;
|
||||
data->spr_id = CreateSprite(&spriteTemplate, 104, y + 32, 0);
|
||||
SetSubspriteTables(&gSprites[data->spr_id], &data->subsprites);
|
||||
gSprites[data->spr_id].oam.objMode = ST_OAM_OBJ_WINDOW;
|
||||
gSprites[data->spr_id].oam.paletteNum = palIdx;
|
||||
gSprites[data->spr_id].subspriteTableNum = 0;
|
||||
gSprites[data->spr_id].invisible = TRUE;
|
||||
data->spriteId = CreateSprite(&spriteTemplate, 104, y + 32, 0);
|
||||
SetSubspriteTables(&gSprites[data->spriteId], &data->subsprites);
|
||||
gSprites[data->spriteId].oam.objMode = ST_OAM_OBJ_WINDOW;
|
||||
gSprites[data->spriteId].oam.paletteNum = palIdx;
|
||||
gSprites[data->spriteId].subspriteTableNum = 0;
|
||||
gSprites[data->spriteId].invisible = TRUE;
|
||||
|
||||
// Show markers
|
||||
HideBg(1);
|
||||
SetBgAttribute(1, BG_ATTR_CHARBASEINDEX, 0);
|
||||
FillBgTilemapBufferRect_Palette0(1, 0x00F, 0, 0, 30, 20);
|
||||
@@ -201,17 +240,17 @@ u8 Ctor_PokedexAreaMarkers(u16 species, u16 tilesTag, u8 palIdx, u8 y)
|
||||
return taskId;
|
||||
}
|
||||
|
||||
void Dtor_PokedexAreaMarkers(u8 taskId)
|
||||
void DestroyPokedexAreaMarkers(u8 taskId)
|
||||
{
|
||||
struct PAM_TaskData * data = (void *)gTasks[taskId].data;
|
||||
FreeSpriteTilesByTag(data->tilesTag);
|
||||
DestroySprite(&gSprites[data->spr_id]);
|
||||
DestroySprite(&gSprites[data->spriteId]);
|
||||
Free(data->buffer);
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, 0);
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
|
||||
SetGpuReg(REG_OFFSET_BLDY, 0);
|
||||
SetGpuReg(REG_OFFSET_WININ, 0x1F1F);
|
||||
SetGpuReg(REG_OFFSET_WINOUT, 0x1F1F);
|
||||
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ);
|
||||
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ);
|
||||
ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON);
|
||||
HideBg(1);
|
||||
SetBgAttribute(1, BG_ATTR_CHARBASEINDEX, 2);
|
||||
@@ -221,14 +260,14 @@ void Dtor_PokedexAreaMarkers(u8 taskId)
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
|
||||
void SetAreaSubsprite(s32 i, s32 whichArea, struct Subsprite * subsprites)
|
||||
void GetAreaMarkerSubsprite(s32 i, s32 dexArea, struct Subsprite * subsprites)
|
||||
{
|
||||
subsprites[i] = *sSubsprites[sSubspriteLookupTable[whichArea][0]];
|
||||
subsprites[i].x = sSubspriteLookupTable[whichArea][1];
|
||||
subsprites[i].y = sSubspriteLookupTable[whichArea][2];
|
||||
subsprites[i] = *sSubsprites[sAreaMarkers[dexArea][0]];
|
||||
subsprites[i].x = sAreaMarkers[dexArea][1];
|
||||
subsprites[i].y = sAreaMarkers[dexArea][2];
|
||||
}
|
||||
|
||||
u8 PokedexAreaMarkers_Any(u8 taskId)
|
||||
u8 GetNumPokedexAreaMarkers(u8 taskId)
|
||||
{
|
||||
struct PAM_TaskData * data = (void *)gTasks[taskId].data;
|
||||
return data->subsprites.subspriteCount;
|
||||
|
||||
+53
-49
@@ -21,6 +21,8 @@
|
||||
#include "pokedex_area_markers.h"
|
||||
#include "field_specials.h"
|
||||
|
||||
#define TAG_AREA_MARKERS 2001
|
||||
|
||||
enum TextMode {
|
||||
TEXT_LEFT,
|
||||
TEXT_CENTER,
|
||||
@@ -31,7 +33,8 @@ struct PokedexScreenData
|
||||
{
|
||||
u8 taskId;
|
||||
u8 state;
|
||||
u8 data[4];
|
||||
u8 data[2];
|
||||
u8 areaMarkersTaskId;
|
||||
u32 unlockedCategories;
|
||||
u32 modeSelectInput;
|
||||
u16 modeSelectItemsAbove;
|
||||
@@ -353,7 +356,7 @@ static const struct ListMenuTemplate sListMenuTemplate_KantoDexModeSelect = {
|
||||
.lettersSpacing = 1,
|
||||
.itemVerticalPadding = 0,
|
||||
.scrollMultiple = 0,
|
||||
.fontId = FONT_2,
|
||||
.fontId = FONT_NORMAL,
|
||||
.cursorKind = 0,
|
||||
};
|
||||
|
||||
@@ -397,7 +400,7 @@ static const struct ListMenuTemplate sListMenuTemplate_NatDexModeSelect = {
|
||||
.lettersSpacing = 1,
|
||||
.itemVerticalPadding = 0,
|
||||
.scrollMultiple = 0,
|
||||
.fontId = FONT_2,
|
||||
.fontId = FONT_NORMAL,
|
||||
.cursorKind = 0,
|
||||
};
|
||||
|
||||
@@ -520,7 +523,7 @@ static const struct ListMenuTemplate sListMenuTemplate_OrderedListMenu = {
|
||||
.lettersSpacing = 1,
|
||||
.itemVerticalPadding = 0,
|
||||
.scrollMultiple = 1,
|
||||
.fontId = FONT_2,
|
||||
.fontId = FONT_NORMAL,
|
||||
.cursorKind = 0,
|
||||
};
|
||||
|
||||
@@ -1133,15 +1136,15 @@ static void DexScreen_InitGfxForTopMenu(void)
|
||||
listMenuTemplate.windowId = sPokedexScreenData->modeSelectWindowId;
|
||||
sPokedexScreenData->modeSelectListMenuId = ListMenuInit(&listMenuTemplate, sPokedexScreenData->modeSelectCursorPos, sPokedexScreenData->modeSelectItemsAbove);
|
||||
FillWindowPixelBuffer(sPokedexScreenData->dexCountsWindowId, PIXEL_FILL(0));
|
||||
DexScreen_AddTextPrinterParameterized(sPokedexScreenData->dexCountsWindowId, FONT_0, gText_Seen, 0, 2, 0);
|
||||
DexScreen_AddTextPrinterParameterized(sPokedexScreenData->dexCountsWindowId, FONT_0, gText_Kanto, 8, 13, 0);
|
||||
DexScreen_AddTextPrinterParameterized(sPokedexScreenData->dexCountsWindowId, FONT_SMALL, gText_Seen, 0, 2, 0);
|
||||
DexScreen_AddTextPrinterParameterized(sPokedexScreenData->dexCountsWindowId, FONT_SMALL, gText_Kanto, 8, 13, 0);
|
||||
DexScreen_PrintNum3RightAlign(sPokedexScreenData->dexCountsWindowId, 0, sPokedexScreenData->numSeenKanto, 52, 13, 2);
|
||||
DexScreen_AddTextPrinterParameterized(sPokedexScreenData->dexCountsWindowId, FONT_0, gText_National, 8, 24, 0);
|
||||
DexScreen_AddTextPrinterParameterized(sPokedexScreenData->dexCountsWindowId, FONT_SMALL, gText_National, 8, 24, 0);
|
||||
DexScreen_PrintNum3RightAlign(sPokedexScreenData->dexCountsWindowId, 0, sPokedexScreenData->numSeenNational, 52, 24, 2);
|
||||
DexScreen_AddTextPrinterParameterized(sPokedexScreenData->dexCountsWindowId, FONT_0, gText_Owned, 0, 37, 0);
|
||||
DexScreen_AddTextPrinterParameterized(sPokedexScreenData->dexCountsWindowId, FONT_0, gText_Kanto, 8, 48, 0);
|
||||
DexScreen_AddTextPrinterParameterized(sPokedexScreenData->dexCountsWindowId, FONT_SMALL, gText_Owned, 0, 37, 0);
|
||||
DexScreen_AddTextPrinterParameterized(sPokedexScreenData->dexCountsWindowId, FONT_SMALL, gText_Kanto, 8, 48, 0);
|
||||
DexScreen_PrintNum3RightAlign(sPokedexScreenData->dexCountsWindowId, 0, sPokedexScreenData->numOwnedKanto, 52, 48, 2);
|
||||
DexScreen_AddTextPrinterParameterized(sPokedexScreenData->dexCountsWindowId, FONT_0, gText_National, 8, 59, 0);
|
||||
DexScreen_AddTextPrinterParameterized(sPokedexScreenData->dexCountsWindowId, FONT_SMALL, gText_National, 8, 59, 0);
|
||||
DexScreen_PrintNum3RightAlign(sPokedexScreenData->dexCountsWindowId, 0, sPokedexScreenData->numOwnedNational, 52, 59, 2);
|
||||
}
|
||||
else
|
||||
@@ -1150,9 +1153,9 @@ static void DexScreen_InitGfxForTopMenu(void)
|
||||
listMenuTemplate.windowId = sPokedexScreenData->modeSelectWindowId;
|
||||
sPokedexScreenData->modeSelectListMenuId = ListMenuInit(&listMenuTemplate, sPokedexScreenData->modeSelectCursorPos, sPokedexScreenData->modeSelectItemsAbove);
|
||||
FillWindowPixelBuffer(sPokedexScreenData->dexCountsWindowId, PIXEL_FILL(0));
|
||||
DexScreen_AddTextPrinterParameterized(sPokedexScreenData->dexCountsWindowId, FONT_1, gText_Seen, 0, 9, 0);
|
||||
DexScreen_AddTextPrinterParameterized(sPokedexScreenData->dexCountsWindowId, FONT_NORMAL_COPY_1, gText_Seen, 0, 9, 0);
|
||||
DexScreen_PrintNum3RightAlign(sPokedexScreenData->dexCountsWindowId, 1, sPokedexScreenData->numSeenKanto, 32, 21, 2);
|
||||
DexScreen_AddTextPrinterParameterized(sPokedexScreenData->dexCountsWindowId, FONT_1, gText_Owned, 0, 37, 0);
|
||||
DexScreen_AddTextPrinterParameterized(sPokedexScreenData->dexCountsWindowId, FONT_NORMAL_COPY_1, gText_Owned, 0, 37, 0);
|
||||
DexScreen_PrintNum3RightAlign(sPokedexScreenData->dexCountsWindowId, 1, sPokedexScreenData->numOwnedKanto, 32, 49, 2);
|
||||
}
|
||||
FillWindowPixelBuffer(0, PIXEL_FILL(15));
|
||||
@@ -1548,7 +1551,7 @@ static void ItemPrintFunc_OrderedListMenu(u8 windowId, u32 itemId, u8 y)
|
||||
bool8 seen = (itemId >> 16) & 1; // not used but required to match
|
||||
bool8 caught = (itemId >> 17) & 1;
|
||||
u8 type1;
|
||||
DexScreen_PrintMonDexNo(sPokedexScreenData->numericalOrderWindowId, FONT_0, species, 12, y);
|
||||
DexScreen_PrintMonDexNo(sPokedexScreenData->numericalOrderWindowId, FONT_SMALL, species, 12, y);
|
||||
if (caught)
|
||||
{
|
||||
BlitMoveInfoIcon(sPokedexScreenData->numericalOrderWindowId, 0, 0x28, y);
|
||||
@@ -2161,7 +2164,7 @@ static void DexScreen_AddTextPrinterParameterized(u8 windowId, u8 fontId, const
|
||||
textColor[2] = 2;
|
||||
break;
|
||||
}
|
||||
AddTextPrinterParameterized4(windowId, fontId, x, y, fontId == FONT_0 ? 0 : 1, 0, textColor, -1, str);
|
||||
AddTextPrinterParameterized4(windowId, fontId, x, y, fontId == FONT_SMALL ? 0 : 1, 0, textColor, -1, str);
|
||||
}
|
||||
|
||||
static void DexScreen_PrintNum3LeadingZeroes(u8 windowId, u8 fontId, u16 num, u8 x, u8 y, u8 colorIdx)
|
||||
@@ -2293,7 +2296,7 @@ static u16 DexScreen_GetDexCount(u8 caseId, bool8 whichDex)
|
||||
|
||||
static void DexScreen_PrintControlInfo(const u8 *src)
|
||||
{
|
||||
DexScreen_AddTextPrinterParameterized(1, FONT_0, src, 236 - GetStringWidth(FONT_0, src, 0), 2, 4);
|
||||
DexScreen_AddTextPrinterParameterized(1, FONT_SMALL, src, 236 - GetStringWidth(FONT_SMALL, src, 0), 2, 4);
|
||||
}
|
||||
|
||||
bool8 DexScreen_DrawMonPicInCategoryPage(u16 species, u8 slot, u8 numSlots)
|
||||
@@ -2327,8 +2330,8 @@ bool8 DexScreen_DrawMonPicInCategoryPage(u16 species, u8 slot, u8 numSlots)
|
||||
template.baseBlock = slot * 40 + 0x108;
|
||||
sPokedexScreenData->categoryMonInfoWindowIds[slot] = AddWindow(&template);
|
||||
CopyToWindowPixelBuffer(sPokedexScreenData->categoryMonInfoWindowIds[slot], sCategoryMonInfoBgTiles, 0, 0);
|
||||
DexScreen_PrintMonDexNo(sPokedexScreenData->categoryMonInfoWindowIds[slot], FONT_0, species, 12, 0);
|
||||
DexScreen_AddTextPrinterParameterized(sPokedexScreenData->categoryMonInfoWindowIds[slot], FONT_2, gSpeciesNames[species], 2, 13, 0);
|
||||
DexScreen_PrintMonDexNo(sPokedexScreenData->categoryMonInfoWindowIds[slot], FONT_SMALL, species, 12, 0);
|
||||
DexScreen_AddTextPrinterParameterized(sPokedexScreenData->categoryMonInfoWindowIds[slot], FONT_NORMAL, gSpeciesNames[species], 2, 13, 0);
|
||||
if (DexScreen_GetSetPokedexFlag(species, FLAG_GET_CAUGHT, TRUE))
|
||||
BlitBitmapRectToWindow(sPokedexScreenData->categoryMonInfoWindowIds[slot], sDexScreen_CaughtIcon, 0, 0, 8, 8, 2, 3, 8, 8);
|
||||
PutWindowTilemap(sPokedexScreenData->categoryMonInfoWindowIds[slot]);
|
||||
@@ -2695,9 +2698,9 @@ void DexScreen_PrintMonCategory(u8 windowId, u16 species, u8 x, u8 y)
|
||||
|
||||
categoryStr[index] = EOS;
|
||||
|
||||
DexScreen_AddTextPrinterParameterized(windowId, FONT_0, categoryStr, x, y, 0);
|
||||
x += GetStringWidth(FONT_0, categoryStr, 0);
|
||||
DexScreen_AddTextPrinterParameterized(windowId, FONT_0, gText_PokedexPokemon, x, y, 0);
|
||||
DexScreen_AddTextPrinterParameterized(windowId, FONT_SMALL, categoryStr, x, y, 0);
|
||||
x += GetStringWidth(FONT_SMALL, categoryStr, 0);
|
||||
DexScreen_AddTextPrinterParameterized(windowId, FONT_SMALL, gText_PokedexPokemon, x, y, 0);
|
||||
}
|
||||
|
||||
void DexScreen_PrintMonHeight(u8 windowId, u16 species, u8 x, u8 y)
|
||||
@@ -2735,26 +2738,26 @@ void DexScreen_PrintMonHeight(u8 windowId, u16 species, u8 x, u8 y)
|
||||
buffer[i++] = feet / 10 + CHAR_0;
|
||||
buffer[i++] = feet % 10 + CHAR_0;
|
||||
}
|
||||
buffer[i++] = CHAR_SGL_QUOT_RIGHT;
|
||||
buffer[i++] = CHAR_SGL_QUOTE_RIGHT;
|
||||
buffer[i++] = inches / 10 + CHAR_0;
|
||||
buffer[i++] = inches % 10 + CHAR_0;
|
||||
buffer[i++] = CHAR_DBL_QUOT_RIGHT;
|
||||
buffer[i++] = CHAR_DBL_QUOTE_RIGHT;
|
||||
buffer[i++] = EOS;
|
||||
}
|
||||
else
|
||||
{
|
||||
buffer[i++] = CHAR_QUESTION_MARK;
|
||||
buffer[i++] = CHAR_QUESTION_MARK;
|
||||
buffer[i++] = CHAR_SGL_QUOT_RIGHT;
|
||||
buffer[i++] = CHAR_SGL_QUOTE_RIGHT;
|
||||
buffer[i++] = CHAR_QUESTION_MARK;
|
||||
buffer[i++] = CHAR_QUESTION_MARK;
|
||||
buffer[i++] = CHAR_DBL_QUOT_RIGHT;
|
||||
buffer[i++] = CHAR_DBL_QUOTE_RIGHT;
|
||||
}
|
||||
|
||||
buffer[i++] = EOS;
|
||||
DexScreen_AddTextPrinterParameterized(windowId, FONT_0, labelText, x, y, 0);
|
||||
DexScreen_AddTextPrinterParameterized(windowId, FONT_SMALL, labelText, x, y, 0);
|
||||
x += 30;
|
||||
DexScreen_AddTextPrinterParameterized(windowId, FONT_0, buffer, x, y, 0);
|
||||
DexScreen_AddTextPrinterParameterized(windowId, FONT_SMALL, buffer, x, y, 0);
|
||||
}
|
||||
|
||||
void DexScreen_PrintMonWeight(u8 windowId, u16 species, u8 x, u8 y)
|
||||
@@ -2844,9 +2847,9 @@ void DexScreen_PrintMonWeight(u8 windowId, u16 species, u8 x, u8 y)
|
||||
buffer[i + j] = lbsText[j];
|
||||
|
||||
buffer[i + j] = EOS;
|
||||
DexScreen_AddTextPrinterParameterized(windowId, FONT_0, labelText, x, y, 0);
|
||||
DexScreen_AddTextPrinterParameterized(windowId, FONT_SMALL, labelText, x, y, 0);
|
||||
x += 30;
|
||||
DexScreen_AddTextPrinterParameterized(windowId, FONT_0, buffer, x, y, 0);
|
||||
DexScreen_AddTextPrinterParameterized(windowId, FONT_SMALL, buffer, x, y, 0);
|
||||
}
|
||||
|
||||
void DexScreen_PrintMonFlavorText(u8 windowId, u16 species, u8 x, u8 y)
|
||||
@@ -2861,7 +2864,7 @@ void DexScreen_PrintMonFlavorText(u8 windowId, u16 species, u8 x, u8 y)
|
||||
{
|
||||
printerTemplate.currentChar = gPokedexEntries[species].description;
|
||||
printerTemplate.windowId = windowId;
|
||||
printerTemplate.fontId = FONT_2;
|
||||
printerTemplate.fontId = FONT_NORMAL;
|
||||
printerTemplate.letterSpacing = 1;
|
||||
printerTemplate.lineSpacing = 0;
|
||||
printerTemplate.unk = 0;
|
||||
@@ -2869,7 +2872,7 @@ void DexScreen_PrintMonFlavorText(u8 windowId, u16 species, u8 x, u8 y)
|
||||
printerTemplate.bgColor = 0;
|
||||
printerTemplate.shadowColor = 2;
|
||||
|
||||
length = GetStringWidth(FONT_2, gPokedexEntries[species].description, 0);
|
||||
length = GetStringWidth(FONT_NORMAL, gPokedexEntries[species].description, 0);
|
||||
xCenter = x + (240 - length) / 2;
|
||||
|
||||
if (xCenter > 0)
|
||||
@@ -2937,8 +2940,8 @@ static u8 DexScreen_DrawMonDexPage(bool8 justRegistered)
|
||||
|
||||
// Species stats
|
||||
FillWindowPixelBuffer(sPokedexScreenData->windowIds[1], PIXEL_FILL(0));
|
||||
DexScreen_PrintMonDexNo(sPokedexScreenData->windowIds[1], FONT_0, sPokedexScreenData->dexSpecies, 0, 8);
|
||||
DexScreen_AddTextPrinterParameterized(sPokedexScreenData->windowIds[1], FONT_2, gSpeciesNames[sPokedexScreenData->dexSpecies], 28, 8, 0);
|
||||
DexScreen_PrintMonDexNo(sPokedexScreenData->windowIds[1], FONT_SMALL, sPokedexScreenData->dexSpecies, 0, 8);
|
||||
DexScreen_AddTextPrinterParameterized(sPokedexScreenData->windowIds[1], FONT_NORMAL, gSpeciesNames[sPokedexScreenData->dexSpecies], 28, 8, 0);
|
||||
DexScreen_PrintMonCategory(sPokedexScreenData->windowIds[1], sPokedexScreenData->dexSpecies, 0, 24);
|
||||
DexScreen_PrintMonHeight(sPokedexScreenData->windowIds[1], sPokedexScreenData->dexSpecies, 0, 36);
|
||||
DexScreen_PrintMonWeight(sPokedexScreenData->windowIds[1], sPokedexScreenData->dexSpecies, 0, 48);
|
||||
@@ -2956,7 +2959,7 @@ static u8 DexScreen_DrawMonDexPage(bool8 justRegistered)
|
||||
FillWindowPixelBuffer(1, PIXEL_FILL(15));
|
||||
if (justRegistered == FALSE)
|
||||
{
|
||||
DexScreen_AddTextPrinterParameterized(1, FONT_0, gText_Cry, 8, 2, 4);
|
||||
DexScreen_AddTextPrinterParameterized(1, FONT_SMALL, gText_Cry, 8, 2, 4);
|
||||
DexScreen_PrintControlInfo(gText_NextDataCancel);
|
||||
}
|
||||
else
|
||||
@@ -3059,8 +3062,8 @@ u8 DexScreen_DrawMonAreaPage(void)
|
||||
// Print "Size"
|
||||
FillWindowPixelBuffer(sPokedexScreenData->windowIds[9], PIXEL_FILL(0));
|
||||
{
|
||||
s32 strWidth = GetStringWidth(FONT_0, gText_Size, 0);
|
||||
DexScreen_AddTextPrinterParameterized(sPokedexScreenData->windowIds[9], FONT_0, gText_Size, (sWindowTemplate_AreaMap_Size.width * 8 - strWidth) / 2, 4, 0);
|
||||
s32 strWidth = GetStringWidth(FONT_SMALL, gText_Size, 0);
|
||||
DexScreen_AddTextPrinterParameterized(sPokedexScreenData->windowIds[9], FONT_SMALL, gText_Size, (sWindowTemplate_AreaMap_Size.width * 8 - strWidth) / 2, 4, 0);
|
||||
}
|
||||
PutWindowTilemap(sPokedexScreenData->windowIds[9]);
|
||||
CopyWindowToVram(sPokedexScreenData->windowIds[9], COPYWIN_GFX);
|
||||
@@ -3068,8 +3071,8 @@ u8 DexScreen_DrawMonAreaPage(void)
|
||||
// Print "Area"
|
||||
FillWindowPixelBuffer(sPokedexScreenData->windowIds[10], PIXEL_FILL(0));
|
||||
{
|
||||
s32 strWidth = GetStringWidth(FONT_0, gText_Area, 0);
|
||||
DexScreen_AddTextPrinterParameterized(sPokedexScreenData->windowIds[10], FONT_0, gText_Area, (sWindowTemplate_AreaMap_Area.width * 8 - strWidth) / 2, 4, 0);
|
||||
s32 strWidth = GetStringWidth(FONT_SMALL, gText_Area, 0);
|
||||
DexScreen_AddTextPrinterParameterized(sPokedexScreenData->windowIds[10], FONT_SMALL, gText_Area, (sWindowTemplate_AreaMap_Area.width * 8 - strWidth) / 2, 4, 0);
|
||||
}
|
||||
SetWindowAttribute(sPokedexScreenData->windowIds[10], WINDOW_TILEMAP_TOP, GetWindowAttribute(sPokedexScreenData->windowIds[10], WINDOW_TILEMAP_TOP) + kantoMapVoff);
|
||||
PutWindowTilemap(sPokedexScreenData->windowIds[10]);
|
||||
@@ -3077,8 +3080,8 @@ u8 DexScreen_DrawMonAreaPage(void)
|
||||
|
||||
// Print species name
|
||||
FillWindowPixelBuffer(sPokedexScreenData->windowIds[8], PIXEL_FILL(0));
|
||||
DexScreen_PrintMonDexNo(sPokedexScreenData->windowIds[8], FONT_0, species, 0, 0);
|
||||
DexScreen_AddTextPrinterParameterized(sPokedexScreenData->windowIds[8], FONT_2, gSpeciesNames[species], 3, 12, 0);
|
||||
DexScreen_PrintMonDexNo(sPokedexScreenData->windowIds[8], FONT_SMALL, species, 0, 0);
|
||||
DexScreen_AddTextPrinterParameterized(sPokedexScreenData->windowIds[8], FONT_NORMAL, gSpeciesNames[species], 3, 12, 0);
|
||||
PutWindowTilemap(sPokedexScreenData->windowIds[8]);
|
||||
CopyWindowToVram(sPokedexScreenData->windowIds[8], COPYWIN_GFX);
|
||||
|
||||
@@ -3108,7 +3111,7 @@ u8 DexScreen_DrawMonAreaPage(void)
|
||||
gSprites[sPokedexScreenData->windowIds[14]].oam.priority = 1;
|
||||
gSprites[sPokedexScreenData->windowIds[14]].y2 = gPokedexEntries[speciesId].pokemonOffset;
|
||||
SetOamMatrix(2, gPokedexEntries[speciesId].pokemonScale, 0, 0, gPokedexEntries[speciesId].pokemonScale);
|
||||
sPokedexScreenData->windowIds[15] = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId_Debug(gSaveBlock2Ptr->playerGender, TRUE), 1, 80, 104, 0, 0xFFFF);
|
||||
sPokedexScreenData->windowIds[15] = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender, TRUE), 1, 80, 104, 0, 0xFFFF);
|
||||
gSprites[sPokedexScreenData->windowIds[15]].oam.paletteNum = 2;
|
||||
gSprites[sPokedexScreenData->windowIds[15]].oam.affineMode = ST_OAM_AFFINE_NORMAL;
|
||||
gSprites[sPokedexScreenData->windowIds[15]].oam.matrixNum = 1;
|
||||
@@ -3123,20 +3126,21 @@ u8 DexScreen_DrawMonAreaPage(void)
|
||||
}
|
||||
|
||||
// Create the area markers
|
||||
sPokedexScreenData->data[2] = Ctor_PokedexAreaMarkers(species, 2001, 3, kantoMapVoff * 8);
|
||||
if (!(PokedexAreaMarkers_Any(sPokedexScreenData->data[2])))
|
||||
sPokedexScreenData->areaMarkersTaskId = CreatePokedexAreaMarkers(species, TAG_AREA_MARKERS, 3, kantoMapVoff * 8);
|
||||
if (GetNumPokedexAreaMarkers(sPokedexScreenData->areaMarkersTaskId) == 0)
|
||||
{
|
||||
// No markers, display "Area Unknown"
|
||||
BlitBitmapRectToWindow(sPokedexScreenData->windowIds[0], (void *)sBlitTiles_WideEllipse, 0, 0, 88, 16, 4, 28, 88, 16);
|
||||
{
|
||||
s32 strWidth = GetStringWidth(FONT_0, gText_AreaUnknown, 0);
|
||||
DexScreen_AddTextPrinterParameterized(sPokedexScreenData->windowIds[0], FONT_0, gText_AreaUnknown, (96 - strWidth) / 2, 29, 0);
|
||||
s32 strWidth = GetStringWidth(FONT_SMALL, gText_AreaUnknown, 0);
|
||||
DexScreen_AddTextPrinterParameterized(sPokedexScreenData->windowIds[0], FONT_SMALL, gText_AreaUnknown, (96 - strWidth) / 2, 29, 0);
|
||||
}
|
||||
}
|
||||
CopyWindowToVram(sPokedexScreenData->windowIds[0], COPYWIN_GFX);
|
||||
|
||||
// Draw the control info
|
||||
FillWindowPixelBuffer(1, PIXEL_FILL(15));
|
||||
DexScreen_AddTextPrinterParameterized(1, FONT_0, gText_Cry, 8, 2, 4);
|
||||
DexScreen_AddTextPrinterParameterized(1, FONT_SMALL, gText_Cry, 8, 2, 4);
|
||||
DexScreen_PrintControlInfo(gText_CancelPreviousData);
|
||||
PutWindowTilemap(1);
|
||||
CopyWindowToVram(1, COPYWIN_GFX);
|
||||
@@ -3149,7 +3153,7 @@ u8 DexScreen_DestroyAreaScreenResources(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
Dtor_PokedexAreaMarkers(sPokedexScreenData->data[2]);
|
||||
DestroyPokedexAreaMarkers(sPokedexScreenData->areaMarkersTaskId);
|
||||
|
||||
for (i = 0; i < 13; i++)
|
||||
DexScreen_RemoveWindow(&sPokedexScreenData->windowIds[i]);
|
||||
@@ -3436,13 +3440,13 @@ void DexScreen_PrintStringWithAlignment(const u8 * str, s32 mode)
|
||||
x = 8;
|
||||
break;
|
||||
case TEXT_CENTER:
|
||||
x = (u32)(240 - GetStringWidth(FONT_2, str, 0)) / 2;
|
||||
x = (u32)(240 - GetStringWidth(FONT_NORMAL, str, 0)) / 2;
|
||||
break;
|
||||
case TEXT_RIGHT:
|
||||
default:
|
||||
x = 232 - GetStringWidth(FONT_2, str, 0);
|
||||
x = 232 - GetStringWidth(FONT_NORMAL, str, 0);
|
||||
break;
|
||||
}
|
||||
|
||||
DexScreen_AddTextPrinterParameterized(0, FONT_2, str, x, 2, 4);
|
||||
DexScreen_AddTextPrinterParameterized(0, FONT_NORMAL, str, x, 2, 4);
|
||||
}
|
||||
|
||||
+10
-7
@@ -34,6 +34,7 @@
|
||||
#include "constants/trainers.h"
|
||||
#include "constants/hold_effects.h"
|
||||
#include "constants/battle_move_effects.h"
|
||||
#include "constants/union_room.h"
|
||||
|
||||
#define SPECIES_TO_HOENN(name) [SPECIES_##name - 1] = HOENN_DEX_##name
|
||||
#define SPECIES_TO_NATIONAL(name) [SPECIES_##name - 1] = NATIONAL_DEX_##name
|
||||
@@ -1643,7 +1644,9 @@ static const u16 sDeoxysBaseStats[] =
|
||||
};
|
||||
#endif
|
||||
|
||||
const u16 gLinkPlayerFacilityClasses[] =
|
||||
// The classes used by other players in the Union Room.
|
||||
// These should correspond with the overworld graphics in sUnionRoomObjGfxIds
|
||||
const u16 gUnionRoomFacilityClasses[NUM_UNION_ROOM_CLASSES * GENDER_COUNT] =
|
||||
{
|
||||
// Male
|
||||
FACILITY_CLASS_COOLTRAINER_M,
|
||||
@@ -6031,19 +6034,19 @@ void SetDeoxysStats(void)
|
||||
u16 GetUnionRoomTrainerPic(void)
|
||||
{
|
||||
u8 linkId = GetMultiplayerId() ^ 1;
|
||||
u32 arrId = gLinkPlayers[linkId].trainerId & 7;
|
||||
|
||||
arrId |= gLinkPlayers[linkId].gender << 3;
|
||||
return FacilityClassToPicIndex(gLinkPlayerFacilityClasses[arrId]);
|
||||
u32 arrId = gLinkPlayers[linkId].trainerId % NUM_UNION_ROOM_CLASSES;
|
||||
arrId |= gLinkPlayers[linkId].gender * NUM_UNION_ROOM_CLASSES;
|
||||
return FacilityClassToPicIndex(gUnionRoomFacilityClasses[arrId]);
|
||||
}
|
||||
|
||||
u16 GetUnionRoomTrainerClass(void)
|
||||
{
|
||||
u8 linkId = GetMultiplayerId() ^ 1;
|
||||
u32 arrId = gLinkPlayers[linkId].trainerId & 7;
|
||||
|
||||
arrId |= gLinkPlayers[linkId].gender << 3;
|
||||
return gFacilityClassToTrainerClass[gLinkPlayerFacilityClasses[arrId]];
|
||||
u32 arrId = gLinkPlayers[linkId].trainerId % NUM_UNION_ROOM_CLASSES;
|
||||
arrId |= gLinkPlayers[linkId].gender * NUM_UNION_ROOM_CLASSES;
|
||||
return gFacilityClassToTrainerClass[gUnionRoomFacilityClasses[arrId]];
|
||||
}
|
||||
|
||||
void CreateEventLegalEnemyMon(void)
|
||||
|
||||
+17
-17
@@ -2540,7 +2540,7 @@ static int GetPlayersAtJumpPeak(void)
|
||||
|
||||
static bool32 AreLinkQueuesEmpty(void)
|
||||
{
|
||||
return !Rfu.recvQueue.count && !Rfu.sendQueue.count;
|
||||
return !gRfu.recvQueue.count && !gRfu.sendQueue.count;
|
||||
}
|
||||
|
||||
static int GetNumPlayersForBonus(u8 *arg0)
|
||||
@@ -3169,7 +3169,7 @@ static void Msg_WantToPlayAgain(void)
|
||||
{
|
||||
case 0:
|
||||
sPokemonJumpGfx->msgWindowId = AddMessageWindow(1, 8, 20, 2);
|
||||
AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, FONT_2, gText_WantToPlayAgain2, 0, 2, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, FONT_NORMAL, gText_WantToPlayAgain2, 0, 2, TEXT_SKIP_DRAW, NULL);
|
||||
CopyWindowToVram(sPokemonJumpGfx->msgWindowId, COPYWIN_GFX);
|
||||
sPokemonJumpGfx->mainState++;
|
||||
break;
|
||||
@@ -3196,7 +3196,7 @@ static void Msg_SavingDontTurnOff(void)
|
||||
{
|
||||
case 0:
|
||||
sPokemonJumpGfx->msgWindowId = AddMessageWindow(2, 7, 26, 4);
|
||||
AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, FONT_2, gText_SavingDontTurnOffPower, 0, 2, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, FONT_NORMAL, gText_SavingDontTurnOffPower, 0, 2, TEXT_SKIP_DRAW, NULL);
|
||||
CopyWindowToVram(sPokemonJumpGfx->msgWindowId, COPYWIN_GFX);
|
||||
sPokemonJumpGfx->mainState++;
|
||||
break;
|
||||
@@ -3239,7 +3239,7 @@ static void Msg_SomeoneDroppedOut(void)
|
||||
{
|
||||
case 0:
|
||||
sPokemonJumpGfx->msgWindowId = AddMessageWindow(2, 8, 22, 4);
|
||||
AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, FONT_2, gText_SomeoneDroppedOut2, 0, 2, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, FONT_NORMAL, gText_SomeoneDroppedOut2, 0, 2, TEXT_SKIP_DRAW, NULL);
|
||||
CopyWindowToVram(sPokemonJumpGfx->msgWindowId, COPYWIN_GFX);
|
||||
sPokemonJumpGfx->mainState++;
|
||||
break;
|
||||
@@ -3265,7 +3265,7 @@ static void Msg_CommunicationStandby(void)
|
||||
{
|
||||
case 0:
|
||||
sPokemonJumpGfx->msgWindowId = AddMessageWindow(7, 10, 16, 2);
|
||||
AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, FONT_2, gText_CommunicationStandby4, 0, 2, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, FONT_NORMAL, gText_CommunicationStandby4, 0, 2, TEXT_SKIP_DRAW, NULL);
|
||||
CopyWindowToVram(sPokemonJumpGfx->msgWindowId, COPYWIN_GFX);
|
||||
sPokemonJumpGfx->mainState++;
|
||||
break;
|
||||
@@ -3358,7 +3358,7 @@ static void PrintPrizeMessage(u16 itemId, u16 quantity)
|
||||
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, sPokemonJumpGfx->itemQuantityStr);
|
||||
DynamicPlaceholderTextUtil_ExpandPlaceholders(sPokemonJumpGfx->prizeMsg, gText_AwesomeWonF701F700);
|
||||
sPokemonJumpGfx->msgWindowId = AddMessageWindow(4, 8, 22, 4);
|
||||
AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, FONT_2, sPokemonJumpGfx->prizeMsg, 0, 2, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, FONT_NORMAL, sPokemonJumpGfx->prizeMsg, 0, 2, TEXT_SKIP_DRAW, NULL);
|
||||
CopyWindowToVram(sPokemonJumpGfx->msgWindowId, COPYWIN_GFX);
|
||||
sPokemonJumpGfx->fanfare = MUS_LEVEL_UP;
|
||||
sPokemonJumpGfx->msgWindowState = 0;
|
||||
@@ -3371,7 +3371,7 @@ static void PrintPrizeFilledBagMessage(u16 itemId)
|
||||
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, sPokemonJumpGfx->itemName);
|
||||
DynamicPlaceholderTextUtil_ExpandPlaceholders(sPokemonJumpGfx->prizeMsg, gText_FilledStorageSpace2);
|
||||
sPokemonJumpGfx->msgWindowId = AddMessageWindow(4, 8, 22, 4);
|
||||
AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, FONT_2, sPokemonJumpGfx->prizeMsg, 0, 2, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, FONT_NORMAL, sPokemonJumpGfx->prizeMsg, 0, 2, TEXT_SKIP_DRAW, NULL);
|
||||
CopyWindowToVram(sPokemonJumpGfx->msgWindowId, COPYWIN_GFX);
|
||||
sPokemonJumpGfx->fanfare = MUS_DUMMY;
|
||||
sPokemonJumpGfx->msgWindowState = 0;
|
||||
@@ -3384,7 +3384,7 @@ static void PrintNoRoomForPrizeMessage(u16 itemId)
|
||||
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, sPokemonJumpGfx->itemName);
|
||||
DynamicPlaceholderTextUtil_ExpandPlaceholders(sPokemonJumpGfx->prizeMsg, gText_CantHoldMore);
|
||||
sPokemonJumpGfx->msgWindowId = AddMessageWindow(4, 9, 22, 2);
|
||||
AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, FONT_2, sPokemonJumpGfx->prizeMsg, 0, 2, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(sPokemonJumpGfx->msgWindowId, FONT_NORMAL, sPokemonJumpGfx->prizeMsg, 0, 2, TEXT_SKIP_DRAW, NULL);
|
||||
CopyWindowToVram(sPokemonJumpGfx->msgWindowId, COPYWIN_GFX);
|
||||
sPokemonJumpGfx->fanfare = MUS_DUMMY;
|
||||
sPokemonJumpGfx->msgWindowState = 0;
|
||||
@@ -3493,7 +3493,7 @@ static void CreatePokeJumpYesNoMenu(u16 left, u16 top, u8 cursorPos)
|
||||
window.paletteNum = 2;
|
||||
window.baseBlock = 0x2B;
|
||||
|
||||
CreateYesNoMenu(&window, FONT_2, 0, 2, 0x00a, 0xD, a);
|
||||
CreateYesNoMenu(&window, FONT_NORMAL, 0, 2, 0x00a, 0xD, a);
|
||||
}
|
||||
|
||||
// "Points" for jump score and "times" for number of jumps in a row
|
||||
@@ -3505,8 +3505,8 @@ static void PrintScoreSuffixes(void)
|
||||
PutWindowTilemap(WIN_TIMES);
|
||||
FillWindowPixelBuffer(WIN_POINTS, PIXEL_FILL(0));
|
||||
FillWindowPixelBuffer(WIN_TIMES, PIXEL_FILL(0));
|
||||
AddTextPrinterParameterized3(WIN_POINTS, FONT_0, 0, 2, color, 0, gText_SpacePoints2);
|
||||
AddTextPrinterParameterized3(WIN_TIMES, FONT_0, 0, 2, color, 0, gText_SpaceTimes3);
|
||||
AddTextPrinterParameterized3(WIN_POINTS, FONT_SMALL, 0, 2, color, 0, gText_SpacePoints2);
|
||||
AddTextPrinterParameterized3(WIN_TIMES, FONT_SMALL, 0, 2, color, 0, gText_SpaceTimes3);
|
||||
}
|
||||
|
||||
// The venusaurs in the background are actually an empty 256x512 bg with 3 pairs of venusaurs on it.
|
||||
@@ -3726,9 +3726,9 @@ static void PrintPokeJumpPlayerName(int multiplayerId, u8 bgColor, u8 fgColor, u
|
||||
u8 colors[3] = {bgColor, fgColor, shadow};
|
||||
|
||||
FillWindowPixelBuffer(sPokemonJumpGfx->nameWindowIds[multiplayerId], PIXEL_FILL(0));
|
||||
x = 64 - GetStringWidth(FONT_0, GetPokeJumpPlayerName(multiplayerId), -1);
|
||||
x = 64 - GetStringWidth(FONT_SMALL, GetPokeJumpPlayerName(multiplayerId), -1);
|
||||
x /= 2;
|
||||
AddTextPrinterParameterized3(sPokemonJumpGfx->nameWindowIds[multiplayerId], FONT_0, x, 2, colors, TEXT_SKIP_DRAW, GetPokeJumpPlayerName(multiplayerId));
|
||||
AddTextPrinterParameterized3(sPokemonJumpGfx->nameWindowIds[multiplayerId], FONT_SMALL, x, 2, colors, TEXT_SKIP_DRAW, GetPokeJumpPlayerName(multiplayerId));
|
||||
CopyWindowToVram(sPokemonJumpGfx->nameWindowIds[multiplayerId], COPYWIN_GFX);
|
||||
}
|
||||
|
||||
@@ -4557,14 +4557,14 @@ static void PrintRecordsText(u16 windowId)
|
||||
LoadStdWindowGfx(windowId, 0x21D, 0xD0);
|
||||
DrawTextBorderOuter(windowId, 0x21D, 0xD);
|
||||
FillWindowPixelBuffer(windowId, PIXEL_FILL(1));
|
||||
AddTextPrinterParameterized5(windowId, FONT_2, gText_PkmnJumpRecords, 0, 0, TEXT_SKIP_DRAW, NULL, 1, 0);
|
||||
AddTextPrinterParameterized5(windowId, FONT_NORMAL, gText_PkmnJumpRecords, 0, 0, TEXT_SKIP_DRAW, NULL, 1, 0);
|
||||
for (i = 0; i < ARRAY_COUNT(sRecordsTexts); i++)
|
||||
{
|
||||
AddTextPrinterParameterized5(windowId, FONT_2, sRecordsTexts[i], 0, 20 + (i * 14), TEXT_SKIP_DRAW, NULL, 1, 0);
|
||||
AddTextPrinterParameterized5(windowId, FONT_NORMAL, sRecordsTexts[i], 0, 20 + (i * 14), TEXT_SKIP_DRAW, NULL, 1, 0);
|
||||
ConvertIntToDecimalStringN(strbuf, recordNums[i], STR_CONV_MODE_LEFT_ALIGN, 5);
|
||||
TruncateToFirstWordOnly(strbuf);
|
||||
x = 0xDE - GetStringWidth(FONT_2, strbuf, 0);
|
||||
AddTextPrinterParameterized5(windowId, FONT_2, strbuf, x, 20 + (i * 14), TEXT_SKIP_DRAW, NULL, 0, 0);
|
||||
x = 0xDE - GetStringWidth(FONT_NORMAL, strbuf, 0);
|
||||
AddTextPrinterParameterized5(windowId, FONT_NORMAL, strbuf, x, 20 + (i * 14), TEXT_SKIP_DRAW, NULL, 0, 0);
|
||||
}
|
||||
PutWindowTilemap(windowId);
|
||||
}
|
||||
|
||||
@@ -415,10 +415,10 @@ void PSA_PrintMessage(u8 messageId)
|
||||
DynamicPlaceholderTextUtil_ExpandPlaceholders(scene->textBuf, gText_MonLearnedTMHM);
|
||||
break;
|
||||
case 4:
|
||||
strWidth += GetStringWidth(FONT_2, gText_Counting_2And, -1);
|
||||
strWidth += GetStringWidth(FONT_NORMAL, gText_Counting_2And, -1);
|
||||
// fallthrough
|
||||
case 3:
|
||||
strWidth += GetStringWidth(FONT_2, gText_Counting_1, -1);
|
||||
strWidth += GetStringWidth(FONT_NORMAL, gText_Counting_1, -1);
|
||||
// fallthrough
|
||||
case 2: // 1
|
||||
StringCopy(scene->textBuf, s1_2_and_Poof_textPtrs[messageId - 2]);
|
||||
@@ -443,7 +443,7 @@ void PSA_PrintMessage(u8 messageId)
|
||||
return;
|
||||
}
|
||||
|
||||
AddTextPrinterParameterized5(0, FONT_2, scene->textBuf, strWidth, 0, textSpeed, NULL, 0, 4);
|
||||
AddTextPrinterParameterized5(0, FONT_NORMAL, scene->textBuf, strWidth, 0, textSpeed, NULL, 0, 4);
|
||||
}
|
||||
|
||||
void PSA_AfterPoof_ClearMessageWindow(void)
|
||||
@@ -1513,13 +1513,13 @@ void DrawLevelUpWindowPg1(u16 windowId, u16 *beforeStats, u16 *afterStats, u8 bg
|
||||
|
||||
for (i = 0; i < 6; i++)
|
||||
{
|
||||
AddTextPrinterParameterized3(windowId, FONT_2, 0, i * 15, textColor, TEXT_SKIP_DRAW, sLevelUpWindowStatNames[i]);
|
||||
AddTextPrinterParameterized3(windowId, FONT_NORMAL, 0, i * 15, textColor, TEXT_SKIP_DRAW, sLevelUpWindowStatNames[i]);
|
||||
StringCopy(textbuf, diffStats[i] >= 0 ? gText_LevelUp_Plus : gText_LevelUp_Minus);
|
||||
AddTextPrinterParameterized3(windowId, FONT_2, 56, i * 15, textColor, TEXT_SKIP_DRAW, textbuf);
|
||||
AddTextPrinterParameterized3(windowId, FONT_NORMAL, 56, i * 15, textColor, TEXT_SKIP_DRAW, textbuf);
|
||||
textbuf[0] = CHAR_SPACE;
|
||||
x = abs(diffStats[i]) < 10 ? 12 : 6;
|
||||
ConvertIntToDecimalStringN(textbuf + 1, abs(diffStats[i]), STR_CONV_MODE_LEFT_ALIGN, 2);
|
||||
AddTextPrinterParameterized3(windowId, FONT_2, x + 56, i * 15, textColor, TEXT_SKIP_DRAW, textbuf);
|
||||
AddTextPrinterParameterized3(windowId, FONT_NORMAL, x + 56, i * 15, textColor, TEXT_SKIP_DRAW, textbuf);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1555,7 +1555,7 @@ void DrawLevelUpWindowPg2(u16 windowId, u16 *currStats, u8 bgColor, u8 fgColor,
|
||||
ndigits = 1;
|
||||
ConvertIntToDecimalStringN(textbuf, statsRearrange[i], STR_CONV_MODE_LEFT_ALIGN, ndigits);
|
||||
x = 6 * (4 - ndigits);
|
||||
AddTextPrinterParameterized3(windowId, FONT_2, 0, i * 15, textColor, TEXT_SKIP_DRAW, sLevelUpWindowStatNames[i]);
|
||||
AddTextPrinterParameterized3(windowId, FONT_2, 56 + x, i * 15, textColor, TEXT_SKIP_DRAW, textbuf);
|
||||
AddTextPrinterParameterized3(windowId, FONT_NORMAL, 0, i * 15, textColor, TEXT_SKIP_DRAW, sLevelUpWindowStatNames[i]);
|
||||
AddTextPrinterParameterized3(windowId, FONT_NORMAL, 56 + x, i * 15, textColor, TEXT_SKIP_DRAW, textbuf);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2108,8 +2108,8 @@ void AddMenu(void)
|
||||
gStorage->menuWindowId = AddWindow(&gStorage->menuWindow);
|
||||
ClearWindowTilemap(gStorage->menuWindowId);
|
||||
DrawStdFrameWithCustomTileAndPalette(gStorage->menuWindowId, FALSE, 11, 14);
|
||||
PrintTextArray(gStorage->menuWindowId, FONT_1, 8, 2, 16, gStorage->menuItemsCount, (void *)gStorage->menuItems);
|
||||
Menu_InitCursor(gStorage->menuWindowId, FONT_1, 0, 2, 16, gStorage->menuItemsCount, 0);
|
||||
PrintTextArray(gStorage->menuWindowId, FONT_NORMAL_COPY_1, 8, 2, 16, gStorage->menuItemsCount, (void *)gStorage->menuItems);
|
||||
Menu_InitCursor(gStorage->menuWindowId, FONT_NORMAL_COPY_1, 0, 2, 16, gStorage->menuItemsCount, 0);
|
||||
ScheduleBgCopyTilemapToVram(0);
|
||||
gStorage->menuUnusedField = 0;
|
||||
}
|
||||
|
||||
@@ -1442,7 +1442,7 @@ static void CycleBoxTitleColor(void)
|
||||
|
||||
static s16 GetBoxTitleBaseX(const u8 *string)
|
||||
{
|
||||
return DISPLAY_WIDTH - 64 - GetStringWidth(FONT_1, string, 0) / 2;
|
||||
return DISPLAY_WIDTH - 64 - GetStringWidth(FONT_NORMAL_COPY_1, string, 0) / 2;
|
||||
}
|
||||
|
||||
// Sprite data for box scroll arrows
|
||||
|
||||
@@ -63,7 +63,7 @@ void DrawTextWindowAndBufferTiles(const u8 *string, void *dst, u8 zero1, u8 zero
|
||||
txtColor[0] = zero2;
|
||||
txtColor[1] = TEXT_DYNAMIC_COLOR_6;
|
||||
txtColor[2] = TEXT_DYNAMIC_COLOR_5;
|
||||
AddTextPrinterParameterized4(windowId, FONT_1, 0, 2, 0, 0, txtColor, -1, string);
|
||||
AddTextPrinterParameterized4(windowId, FONT_NORMAL_COPY_1, 0, 2, 0, 0, txtColor, -1, string);
|
||||
|
||||
tileBytesToBuffer = bytesToBuffer;
|
||||
if (tileBytesToBuffer > 6)
|
||||
@@ -106,7 +106,7 @@ static void PrintStringToBufferCopyNow(const u8 *string, void *dst, u16 offset,
|
||||
txtColor[0] = bgColor;
|
||||
txtColor[1] = fgColor;
|
||||
txtColor[2] = shadowColor;
|
||||
AddTextPrinterParameterized4(windowId, FONT_1, 0, 2, 0, 0, txtColor, -1, string);
|
||||
AddTextPrinterParameterized4(windowId, FONT_NORMAL_COPY_1, 0, 2, 0, 0, txtColor, -1, string);
|
||||
CpuCopy16(tileData1, dst, var);
|
||||
CpuCopy16(tileData2, dst + offset, var);
|
||||
RemoveWindow(windowId);
|
||||
@@ -250,7 +250,7 @@ static void Task_PCMainMenu(u8 taskId)
|
||||
LoadStdWindowFrameGfx();
|
||||
DrawDialogueFrame(0, FALSE);
|
||||
FillWindowPixelBuffer(0, PIXEL_FILL(1));
|
||||
AddTextPrinterParameterized2(0, FONT_2, sMainMenuTexts[task->tSelectedOption].desc, TEXT_SKIP_DRAW, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
AddTextPrinterParameterized2(0, FONT_NORMAL, sMainMenuTexts[task->tSelectedOption].desc, TEXT_SKIP_DRAW, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
CopyWindowToVram(0, COPYWIN_FULL);
|
||||
CopyWindowToVram(task->tWindowId, COPYWIN_FULL);
|
||||
task->tState++;
|
||||
@@ -275,7 +275,7 @@ static void Task_PCMainMenu(u8 taskId)
|
||||
{
|
||||
task->tSelectedOption = task->tNextOption;
|
||||
FillWindowPixelBuffer(0, PIXEL_FILL(1));
|
||||
AddTextPrinterParameterized2(0, FONT_2, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
AddTextPrinterParameterized2(0, FONT_NORMAL, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
}
|
||||
break;
|
||||
case MENU_B_PRESSED:
|
||||
@@ -291,14 +291,14 @@ static void Task_PCMainMenu(u8 taskId)
|
||||
{
|
||||
// Can't withdraw
|
||||
FillWindowPixelBuffer(0, PIXEL_FILL(1));
|
||||
AddTextPrinterParameterized2(0, FONT_2, gText_PartyFull, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
AddTextPrinterParameterized2(0, FONT_NORMAL, gText_PartyFull, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
task->tState = STATE_ERROR_MSG;
|
||||
}
|
||||
else if (task->tInput == OPTION_DEPOSIT && CountPartyMons() == 1)
|
||||
{
|
||||
// Can't deposit
|
||||
FillWindowPixelBuffer(0, PIXEL_FILL(1));
|
||||
AddTextPrinterParameterized2(0, FONT_2, gText_JustOnePkmn, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
AddTextPrinterParameterized2(0, FONT_NORMAL, gText_JustOnePkmn, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
task->tState = STATE_ERROR_MSG;
|
||||
}
|
||||
else
|
||||
@@ -316,7 +316,7 @@ static void Task_PCMainMenu(u8 taskId)
|
||||
if (JOY_NEW(A_BUTTON | B_BUTTON))
|
||||
{
|
||||
FillWindowPixelBuffer(0, PIXEL_FILL(1));
|
||||
AddTextPrinterParameterized2(0, FONT_2, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
AddTextPrinterParameterized2(0, FONT_NORMAL, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
task->tState = STATE_HANDLE_INPUT;
|
||||
}
|
||||
else if (JOY_NEW(DPAD_UP))
|
||||
@@ -326,7 +326,7 @@ static void Task_PCMainMenu(u8 taskId)
|
||||
Menu_MoveCursor(-1);
|
||||
task->tSelectedOption = Menu_GetCursorPos();
|
||||
FillWindowPixelBuffer(0, PIXEL_FILL(1));
|
||||
AddTextPrinterParameterized2(0, FONT_2, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
AddTextPrinterParameterized2(0, FONT_NORMAL, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
task->tState = STATE_HANDLE_INPUT;
|
||||
}
|
||||
else if (JOY_NEW(DPAD_DOWN))
|
||||
@@ -336,7 +336,7 @@ static void Task_PCMainMenu(u8 taskId)
|
||||
Menu_MoveCursor(1);
|
||||
task->tSelectedOption = Menu_GetCursorPos();
|
||||
FillWindowPixelBuffer(0, PIXEL_FILL(1));
|
||||
AddTextPrinterParameterized2(0, FONT_2, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
AddTextPrinterParameterized2(0, FONT_NORMAL, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
task->tState = STATE_HANDLE_INPUT;
|
||||
}
|
||||
break;
|
||||
@@ -388,8 +388,8 @@ static void CreatePCMainMenu(u8 whichMenu, s16 *windowIdPtr)
|
||||
s16 windowId = AddWindow(&sWindowTemplate_MainMenu);
|
||||
|
||||
DrawStdWindowFrame(windowId, FALSE);
|
||||
PrintTextArray(windowId, FONT_2, GetMenuCursorDimensionByFont(FONT_2, 0), 2, 16, ARRAY_COUNT(sMainMenuTexts), (void *)sMainMenuTexts);
|
||||
Menu_InitCursor(windowId, FONT_2, 0, 2, 16, ARRAY_COUNT(sMainMenuTexts), whichMenu);
|
||||
PrintTextArray(windowId, FONT_NORMAL, GetMenuCursorDimensionByFont(FONT_NORMAL, 0), 2, 16, ARRAY_COUNT(sMainMenuTexts), (void *)sMainMenuTexts);
|
||||
Menu_InitCursor(windowId, FONT_NORMAL, 0, 2, 16, ARRAY_COUNT(sMainMenuTexts), whichMenu);
|
||||
*windowIdPtr = windowId;
|
||||
}
|
||||
|
||||
|
||||
@@ -1147,7 +1147,7 @@ void PrintItemDescription(void)
|
||||
description = ItemId_GetDescription(gStorage->displayMonItemId);
|
||||
|
||||
FillWindowPixelBuffer(2, PIXEL_FILL(1));
|
||||
AddTextPrinterParameterized5(2, FONT_2, description, 2, 0, 0, NULL, 0, 0);
|
||||
AddTextPrinterParameterized5(2, FONT_NORMAL, description, 2, 0, 0, NULL, 0, 0);
|
||||
}
|
||||
|
||||
void InitItemInfoWindow(void)
|
||||
|
||||
@@ -2292,15 +2292,15 @@ static void PrintDisplayMonInfo(void)
|
||||
if (gStorage->boxOption != OPTION_MOVE_ITEMS)
|
||||
{
|
||||
for (i = 0, y = 0; i < 3; i++, y += 14)
|
||||
AddTextPrinterParameterized(0, FONT_2, gStorage->displayMonTexts[i], i == 2 ? 10 : 6, y, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(0, FONT_NORMAL, gStorage->displayMonTexts[i], i == 2 ? 10 : 6, y, TEXT_SKIP_DRAW, NULL);
|
||||
|
||||
AddTextPrinterParameterized(0, FONT_0, gStorage->displayMonTexts[3], 6, y + 2, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(0, FONT_SMALL, gStorage->displayMonTexts[3], 6, y + 2, TEXT_SKIP_DRAW, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
AddTextPrinterParameterized(0, FONT_0, gStorage->displayMonTexts[3], 6, 0, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(0, FONT_SMALL, gStorage->displayMonTexts[3], 6, 0, TEXT_SKIP_DRAW, NULL);
|
||||
for (i = 0, y = 15; i < 3; i++, y += 14)
|
||||
AddTextPrinterParameterized(0, FONT_2, gStorage->displayMonTexts[i], i == 2 ? 10 : 6, y, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(0, FONT_NORMAL, gStorage->displayMonTexts[i], i == 2 ? 10 : 6, y, TEXT_SKIP_DRAW, NULL);
|
||||
}
|
||||
|
||||
CopyWindowToVram(0, COPYWIN_GFX);
|
||||
@@ -2585,7 +2585,7 @@ static void PrintStorageMessage(u8 id)
|
||||
|
||||
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStorage->actionText, sMessages[id].text);
|
||||
FillWindowPixelBuffer(1, PIXEL_FILL(1));
|
||||
AddTextPrinterParameterized(1, FONT_1, gStorage->actionText, 0, 2, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(1, FONT_NORMAL_COPY_1, gStorage->actionText, 0, 2, TEXT_SKIP_DRAW, NULL);
|
||||
DrawTextBorderOuter(1, 2, 13);
|
||||
PutWindowTilemap(1);
|
||||
CopyWindowToVram(1, COPYWIN_GFX);
|
||||
@@ -2594,7 +2594,7 @@ static void PrintStorageMessage(u8 id)
|
||||
|
||||
static void ShowYesNoWindow(s8 cursorPos)
|
||||
{
|
||||
CreateYesNoMenu(&sYesNoWindowTemplate, FONT_1, 0, 2, 11, 14, 1);
|
||||
CreateYesNoMenu(&sYesNoWindowTemplate, FONT_NORMAL_COPY_1, 0, 2, 11, 14, 1);
|
||||
Menu_MoveCursorNoWrapAround(cursorPos);
|
||||
}
|
||||
|
||||
|
||||
@@ -1117,9 +1117,9 @@ static void Task_InputHandler_Info(u8 taskId)
|
||||
sMonSummaryScreen->state3270 = PSS_STATE3270_PLAYCRY;
|
||||
break;
|
||||
case PSS_STATE3270_HANDLEINPUT:
|
||||
if (MenuHelpers_CallLinkSomething() == TRUE)
|
||||
if (IsActiveOverworldLinkBusy() == TRUE)
|
||||
return;
|
||||
else if (LinkRecvQueueLengthMoreThan2() == TRUE)
|
||||
else if (IsLinkRecvQueueAtOverworldMax() == TRUE)
|
||||
return;
|
||||
else if (FuncIsActiveTask(Task_PokeSum_SwitchDisplayedPokemon))
|
||||
return;
|
||||
@@ -1218,7 +1218,7 @@ static void Task_InputHandler_Info(u8 taskId)
|
||||
case PSS_STATE3270_ATEXIT_WAITLINKDELAY:
|
||||
if (Overworld_LinkRecvQueueLengthMoreThan2() == TRUE)
|
||||
return;
|
||||
else if (LinkRecvQueueLengthMoreThan2() == TRUE)
|
||||
else if (IsLinkRecvQueueAtOverworldMax() == TRUE)
|
||||
return;
|
||||
|
||||
sMonSummaryScreen->state3270 = PSS_STATE3270_ATEXIT_WAITFADE;
|
||||
@@ -2405,7 +2405,7 @@ static void PokeSum_FinishSetup(void)
|
||||
static void PokeSum_PrintPageName(const u8 * str)
|
||||
{
|
||||
FillWindowPixelBuffer(sMonSummaryScreen->windowIds[POKESUM_WIN_PAGE_NAME], 0);
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_PAGE_NAME], FONT_2, 4, 1, sLevelNickTextColors[1], 0, str);
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_PAGE_NAME], FONT_NORMAL, 4, 1, sLevelNickTextColors[1], 0, str);
|
||||
PutWindowTilemap(sMonSummaryScreen->windowIds[POKESUM_WIN_PAGE_NAME]);
|
||||
}
|
||||
|
||||
@@ -2416,9 +2416,9 @@ static void PokeSum_PrintControlsString(const u8 * str)
|
||||
u8 r1;
|
||||
|
||||
FillWindowPixelBuffer(sMonSummaryScreen->windowIds[POKESUM_WIN_CONTROLS], 0);
|
||||
width = GetStringWidth(FONT_0, str, 0);
|
||||
width = GetStringWidth(FONT_SMALL, str, 0);
|
||||
r1 = sMonSummaryScreen->windowIds[POKESUM_WIN_CONTROLS];
|
||||
AddTextPrinterParameterized3(r1, FONT_0, 0x54 - width, 0, sLevelNickTextColors[1], 0, str);
|
||||
AddTextPrinterParameterized3(r1, FONT_SMALL, 0x54 - width, 0, sLevelNickTextColors[1], 0, str);
|
||||
PutWindowTilemap(sMonSummaryScreen->windowIds[POKESUM_WIN_CONTROLS]);
|
||||
}
|
||||
|
||||
@@ -2431,12 +2431,12 @@ static void PrintMonLevelNickOnWindow2(const u8 * str)
|
||||
if (sMonSummaryScreen->curPageIndex != PSS_PAGE_MOVES_INFO)
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_LVL_NICK], 2, 4, 2, sLevelNickTextColors[1], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.levelStrBuf);
|
||||
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_LVL_NICK], FONT_2, 40, 2, sLevelNickTextColors[1], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.nicknameStrBuf);
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_LVL_NICK], FONT_NORMAL, 40, 2, sLevelNickTextColors[1], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.nicknameStrBuf);
|
||||
|
||||
if (GetMonGender(&sMonSummaryScreen->currentMon) == MON_FEMALE)
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_LVL_NICK], FONT_2, 105, 2, sLevelNickTextColors[3], 0, sMonSummaryScreen->summary.genderSymbolStrBuf);
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_LVL_NICK], FONT_NORMAL, 105, 2, sLevelNickTextColors[3], 0, sMonSummaryScreen->summary.genderSymbolStrBuf);
|
||||
else
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_LVL_NICK], FONT_2, 105, 2, sLevelNickTextColors[2], 0, sMonSummaryScreen->summary.genderSymbolStrBuf);
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_LVL_NICK], FONT_NORMAL, 105, 2, sLevelNickTextColors[2], 0, sMonSummaryScreen->summary.genderSymbolStrBuf);
|
||||
}
|
||||
|
||||
PutWindowTilemap(sMonSummaryScreen->windowIds[POKESUM_WIN_LVL_NICK]);
|
||||
@@ -2465,14 +2465,14 @@ static void PokeSum_PrintRightPaneText(void)
|
||||
|
||||
static void PrintInfoPage(void)
|
||||
{
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, 47, 19, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.speciesNameStrBuf);
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 47, 19, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.speciesNameStrBuf);
|
||||
|
||||
if (!sMonSummaryScreen->isEgg)
|
||||
{
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, 47 + sMonSkillsPrinterXpos->unk00, 5, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.dexNumStrBuf);
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, 47, 49, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.otNameStrBuf);
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, 47, 64, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.unk306C);
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, 47, 79, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.itemNameStrBuf);
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 47 + sMonSkillsPrinterXpos->unk00, 5, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.dexNumStrBuf);
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 47, 49, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.otNameStrBuf);
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 47, 64, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.unk306C);
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 47, 79, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.itemNameStrBuf);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -2493,20 +2493,20 @@ static void PrintInfoPage(void)
|
||||
if (sMonSummaryScreen->isBadEgg)
|
||||
hatchMsgIndex = 0;
|
||||
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, 7, 45, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sEggHatchTimeTexts[hatchMsgIndex]);
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 7, 45, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sEggHatchTimeTexts[hatchMsgIndex]);
|
||||
}
|
||||
}
|
||||
|
||||
static void PrintSkillsPage(void)
|
||||
{
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, 14 + sMonSkillsPrinterXpos->curHpStr, 4, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.curHpStrBuf);
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, 50 + sMonSkillsPrinterXpos->atkStr, 22, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_ATK]);
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, 50 + sMonSkillsPrinterXpos->defStr, 35, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_DEF]);
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, 50 + sMonSkillsPrinterXpos->spAStr, 48, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPA]);
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, 50 + sMonSkillsPrinterXpos->spDStr, 61, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPD]);
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, 50 + sMonSkillsPrinterXpos->speStr, 74, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPE]);
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, 15 + sMonSkillsPrinterXpos->expStr, 87, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.expPointsStrBuf);
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, 15 + sMonSkillsPrinterXpos->toNextLevel, 100, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.expToNextLevelStrBuf);
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 14 + sMonSkillsPrinterXpos->curHpStr, 4, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.curHpStrBuf);
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 50 + sMonSkillsPrinterXpos->atkStr, 22, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_ATK]);
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 50 + sMonSkillsPrinterXpos->defStr, 35, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_DEF]);
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 50 + sMonSkillsPrinterXpos->spAStr, 48, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPA]);
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 50 + sMonSkillsPrinterXpos->spDStr, 61, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPD]);
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 50 + sMonSkillsPrinterXpos->speStr, 74, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPE]);
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 15 + sMonSkillsPrinterXpos->expStr, 87, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.expPointsStrBuf);
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 15 + sMonSkillsPrinterXpos->toNextLevel, 100, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.expToNextLevelStrBuf);
|
||||
}
|
||||
|
||||
#define GetMoveNamePrinterYpos(x) ((x) * 28 + 5)
|
||||
@@ -2524,7 +2524,7 @@ static void PrintMovesPage(void)
|
||||
if (sMonSummaryScreen->mode == PSS_MODE_SELECT_MOVE)
|
||||
PokeSum_PrintMoveName(4);
|
||||
else
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2,
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL,
|
||||
3, GetMoveNamePrinterYpos(4),
|
||||
sPrintMoveTextColors[0], TEXT_SKIP_DRAW, gFameCheckerText_Cancel);
|
||||
}
|
||||
@@ -2541,7 +2541,7 @@ static void PokeSum_PrintMoveName(u8 i)
|
||||
if (i == 4)
|
||||
curPP = maxPP;
|
||||
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, 3, GetMoveNamePrinterYpos(i), sPrintMoveTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.moveNameStrBufs[i]);
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 3, GetMoveNamePrinterYpos(i), sPrintMoveTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.moveNameStrBufs[i]);
|
||||
|
||||
if (sMonSummaryScreen->moveIds[i] == 0 || (curPP == maxPP))
|
||||
colorIdx = 0;
|
||||
@@ -2567,14 +2567,14 @@ static void PokeSum_PrintMoveName(u8 i)
|
||||
colorIdx = 1;
|
||||
}
|
||||
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, 36, GetMovePpPinterYpos(i), sPrintMoveTextColors[colorIdx], TEXT_SKIP_DRAW,
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 36, GetMovePpPinterYpos(i), sPrintMoveTextColors[colorIdx], TEXT_SKIP_DRAW,
|
||||
gText_PokeSum_PP);
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, 46 + sMonSkillsPrinterXpos->curPp[i], GetMovePpPinterYpos(i), sPrintMoveTextColors[colorIdx], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.moveCurPpStrBufs[i]);
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 46 + sMonSkillsPrinterXpos->curPp[i], GetMovePpPinterYpos(i), sPrintMoveTextColors[colorIdx], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.moveCurPpStrBufs[i]);
|
||||
|
||||
if (sMonSummaryScreen->moveIds[i] != MOVE_NONE)
|
||||
{
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, 58, GetMovePpPinterYpos(i), sPrintMoveTextColors[colorIdx], TEXT_SKIP_DRAW, gText_Slash);
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_2, 64 + sMonSkillsPrinterXpos->maxPp[i], GetMovePpPinterYpos(i), sPrintMoveTextColors[colorIdx], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.moveMaxPpStrBufs[i]);
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 58, GetMovePpPinterYpos(i), sPrintMoveTextColors[colorIdx], TEXT_SKIP_DRAW, gText_Slash);
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 64 + sMonSkillsPrinterXpos->maxPp[i], GetMovePpPinterYpos(i), sPrintMoveTextColors[colorIdx], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.moveMaxPpStrBufs[i]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2679,7 +2679,7 @@ static void PokeSum_PrintTrainerMemo_Mon_HeldByOT(void)
|
||||
}
|
||||
}
|
||||
|
||||
AddTextPrinterParameterized4(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_2, 0, 3, 0, 0, sLevelNickTextColors[0], TEXT_SKIP_DRAW, natureMetOrHatchedAtLevelStr);
|
||||
AddTextPrinterParameterized4(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_NORMAL, 0, 3, 0, 0, sLevelNickTextColors[0], TEXT_SKIP_DRAW, natureMetOrHatchedAtLevelStr);
|
||||
}
|
||||
|
||||
static void PokeSum_PrintTrainerMemo_Mon_NotHeldByOT(void)
|
||||
@@ -2728,7 +2728,7 @@ static void PokeSum_PrintTrainerMemo_Mon_NotHeldByOT(void)
|
||||
DynamicPlaceholderTextUtil_ExpandPlaceholders(natureMetOrHatchedAtLevelStr, gText_PokeSum_MetInATrade);
|
||||
}
|
||||
|
||||
AddTextPrinterParameterized4(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_2, 0, 3, 0, 0, sLevelNickTextColors[0], TEXT_SKIP_DRAW, natureMetOrHatchedAtLevelStr);
|
||||
AddTextPrinterParameterized4(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_NORMAL, 0, 3, 0, 0, sLevelNickTextColors[0], TEXT_SKIP_DRAW, natureMetOrHatchedAtLevelStr);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2776,7 +2776,7 @@ static void PokeSum_PrintTrainerMemo_Mon_NotHeldByOT(void)
|
||||
}
|
||||
}
|
||||
|
||||
AddTextPrinterParameterized4(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_2, 0, 3, 0, 0, sLevelNickTextColors[0], TEXT_SKIP_DRAW, natureMetOrHatchedAtLevelStr);
|
||||
AddTextPrinterParameterized4(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_NORMAL, 0, 3, 0, 0, sLevelNickTextColors[0], TEXT_SKIP_DRAW, natureMetOrHatchedAtLevelStr);
|
||||
}
|
||||
|
||||
static void PokeSum_PrintTrainerMemo_Mon(void)
|
||||
@@ -2837,17 +2837,17 @@ static void PokeSum_PrintTrainerMemo_Egg(void)
|
||||
if (sMonSummaryScreen->isBadEgg)
|
||||
chosenStrIndex = 0;
|
||||
|
||||
AddTextPrinterParameterized4(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_2, 0, 3, 0, 0, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sEggOriginTexts[chosenStrIndex]);
|
||||
AddTextPrinterParameterized4(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_NORMAL, 0, 3, 0, 0, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sEggOriginTexts[chosenStrIndex]);
|
||||
}
|
||||
|
||||
static void PokeSum_PrintExpPoints_NextLv(void)
|
||||
{
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_2,
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_NORMAL,
|
||||
26, 7,
|
||||
sLevelNickTextColors[0], TEXT_SKIP_DRAW,
|
||||
gText_PokeSum_ExpPoints);
|
||||
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_2,
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_NORMAL,
|
||||
26, 20,
|
||||
sLevelNickTextColors[0], TEXT_SKIP_DRAW,
|
||||
gText_PokeSum_NextLv);
|
||||
@@ -2860,17 +2860,17 @@ static void PokeSum_PrintSelectedMoveStats(void)
|
||||
if (sMonSummaryScreen->mode != PSS_MODE_SELECT_MOVE && sMoveSelectionCursorPos == 4)
|
||||
return;
|
||||
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_2,
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_NORMAL,
|
||||
57, 1,
|
||||
sLevelNickTextColors[0], TEXT_SKIP_DRAW,
|
||||
sMonSummaryScreen->summary.movePowerStrBufs[sMoveSelectionCursorPos]);
|
||||
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_2,
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_NORMAL,
|
||||
57, 15,
|
||||
sLevelNickTextColors[0], TEXT_SKIP_DRAW,
|
||||
sMonSummaryScreen->summary.moveAccuracyStrBufs[sMoveSelectionCursorPos]);
|
||||
|
||||
AddTextPrinterParameterized4(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_2,
|
||||
AddTextPrinterParameterized4(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_NORMAL,
|
||||
7, 42,
|
||||
0, 0,
|
||||
sLevelNickTextColors[0], TEXT_SKIP_DRAW,
|
||||
@@ -2900,10 +2900,10 @@ static void PokeSum_PrintAbilityNameAndDesc(void)
|
||||
{
|
||||
FillWindowPixelBuffer(sMonSummaryScreen->windowIds[5], 0);
|
||||
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[5], FONT_2,
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[5], FONT_NORMAL,
|
||||
66, 1, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.abilityNameStrBuf);
|
||||
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[5], FONT_2,
|
||||
AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[5], FONT_NORMAL,
|
||||
2, 15, sLevelNickTextColors[0], TEXT_SKIP_DRAW,
|
||||
sMonSummaryScreen->summary.abilityDescStrBuf);
|
||||
|
||||
@@ -3501,7 +3501,7 @@ static void Task_HandleInput_SelectMove(u8 taskId)
|
||||
switch (sMonSummaryScreen->selectMoveInputHandlerState)
|
||||
{
|
||||
case 0:
|
||||
if (MenuHelpers_CallLinkSomething() == TRUE || LinkRecvQueueLengthMoreThan2() == TRUE)
|
||||
if (IsActiveOverworldLinkBusy() == TRUE || IsLinkRecvQueueAtOverworldMax() == TRUE)
|
||||
return;
|
||||
|
||||
if (JOY_NEW(DPAD_UP))
|
||||
@@ -3662,7 +3662,7 @@ static void Task_HandleInput_SelectMove(u8 taskId)
|
||||
sMonSummaryScreen->selectMoveInputHandlerState = 3;
|
||||
break;
|
||||
case 3:
|
||||
if (MenuHelpers_CallLinkSomething() == TRUE || LinkRecvQueueLengthMoreThan2() == TRUE)
|
||||
if (IsActiveOverworldLinkBusy() == TRUE || IsLinkRecvQueueAtOverworldMax() == TRUE)
|
||||
return;
|
||||
|
||||
CopyWindowToVram(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], 2);
|
||||
@@ -3880,7 +3880,7 @@ static void Task_InputHandler_SelectOrForgetMove(u8 taskId)
|
||||
sMonSummaryScreen->selectMoveInputHandlerState = 4;
|
||||
break;
|
||||
case 4:
|
||||
if (MenuHelpers_CallLinkSomething() == TRUE || LinkRecvQueueLengthMoreThan2() == TRUE)
|
||||
if (IsActiveOverworldLinkBusy() == TRUE || IsLinkRecvQueueAtOverworldMax() == TRUE)
|
||||
return;
|
||||
|
||||
CopyWindowToVram(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], 2);
|
||||
@@ -3893,7 +3893,7 @@ static void Task_InputHandler_SelectOrForgetMove(u8 taskId)
|
||||
break;
|
||||
case 5:
|
||||
FillWindowPixelBuffer(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], 0);
|
||||
AddTextPrinterParameterized4(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_2,
|
||||
AddTextPrinterParameterized4(sMonSummaryScreen->windowIds[POKESUM_WIN_TRAINER_MEMO], FONT_NORMAL,
|
||||
7, 42,
|
||||
0, 0,
|
||||
sLevelNickTextColors[0], TEXT_SKIP_DRAW,
|
||||
@@ -5148,7 +5148,7 @@ static void Task_PokeSum_SwitchDisplayedPokemon(u8 taskId)
|
||||
sMonSummaryScreen->switchMonTaskState++;
|
||||
break;
|
||||
case 11:
|
||||
if (!Overworld_LinkRecvQueueLengthMoreThan2() && !LinkRecvQueueLengthMoreThan2())
|
||||
if (!Overworld_LinkRecvQueueLengthMoreThan2() && !IsLinkRecvQueueAtOverworldMax())
|
||||
{
|
||||
PokeSum_CreateSprites();
|
||||
PokeSum_TryPlayMonCry();
|
||||
|
||||
+32
-30
@@ -117,7 +117,7 @@ static void QLogCB_Recording(void);
|
||||
static void QLogCB_Playback(void);
|
||||
static void SetPlayerInitialCoordsAtScene(u8);
|
||||
static void SetNPCInitialCoordsAtScene(u8);
|
||||
static void TryRecordEvent39_GoToNextScene(void);
|
||||
static void RecordSceneEnd(void);
|
||||
static void BackUpTrainerRematchesToVars(void);
|
||||
static void BackUpMapLayoutToVar(void);
|
||||
static void SetGameStateAtScene(u8);
|
||||
@@ -241,22 +241,23 @@ void RunQuestLogCB(void)
|
||||
sQuestLogCB();
|
||||
}
|
||||
|
||||
bool8 sub_8110944(const void *a0, size_t cmdSize)
|
||||
bool8 QL_IsRoomToSaveEvent(const void * cursor, size_t size)
|
||||
{
|
||||
void *r2 = gSaveBlock1Ptr->questLog[sCurrentSceneNum].script;
|
||||
void *r0 = gSaveBlock1Ptr->questLog[sCurrentSceneNum].end;
|
||||
r0 -= cmdSize;
|
||||
if ((const void *)a0 < r2 || (const void *)a0 > r0)
|
||||
const void *start = gSaveBlock1Ptr->questLog[sCurrentSceneNum].script;
|
||||
const void *end = gSaveBlock1Ptr->questLog[sCurrentSceneNum].end;
|
||||
end -= size;
|
||||
if (cursor < start || cursor > end)
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 WillCommandOfSizeFitInSav1Record(u16 *cursor, size_t size)
|
||||
// Identical to QL_IsRoomToSaveEvent
|
||||
bool8 QL_IsRoomToSaveAction(const void * cursor, size_t size)
|
||||
{
|
||||
void *start = gSaveBlock1Ptr->questLog[sCurrentSceneNum].script;
|
||||
void *end = gSaveBlock1Ptr->questLog[sCurrentSceneNum].end;
|
||||
const void *start = gSaveBlock1Ptr->questLog[sCurrentSceneNum].script;
|
||||
const void *end = gSaveBlock1Ptr->questLog[sCurrentSceneNum].end;
|
||||
end -= size;
|
||||
if ((void *)cursor < start || (void *)cursor > end)
|
||||
if (cursor < start || cursor > end)
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
@@ -275,7 +276,7 @@ static void QLogCB_Recording(void)
|
||||
if (TryRecordActionSequence(sQuestLogActionRecordBuffer) != 1)
|
||||
{
|
||||
gQuestLogPlaybackState = QL_PLAYBACK_STATE_0;
|
||||
TryRecordEvent39_GoToNextScene();
|
||||
RecordSceneEnd();
|
||||
gQuestLogState = 0;
|
||||
sQuestLogCB = NULL;
|
||||
}
|
||||
@@ -412,9 +413,9 @@ static void BackUpMapLayoutToVar(void)
|
||||
VarSet(VAR_QLBAK_MAP_LAYOUT, gSaveBlock1Ptr->mapLayoutId);
|
||||
}
|
||||
|
||||
static void TryRecordEvent39_GoToNextScene(void)
|
||||
static void RecordSceneEnd(void)
|
||||
{
|
||||
QL_RecordAction_FF(gQuestLogRecordingPointer);
|
||||
QL_RecordAction_SceneEnd(gQuestLogRecordingPointer);
|
||||
if (++sCurrentSceneNum >= QUEST_LOG_SCENE_COUNT)
|
||||
sCurrentSceneNum = 0;
|
||||
}
|
||||
@@ -446,7 +447,7 @@ static bool8 TryRecordActionSequence(struct QuestLogAction * actions)
|
||||
|
||||
if (gQuestLogPlaybackState == QL_PLAYBACK_STATE_0)
|
||||
{
|
||||
gQuestLogRecordingPointer = QL_RecordAction_FF(gQuestLogRecordingPointer);
|
||||
gQuestLogRecordingPointer = QL_RecordAction_SceneEnd(gQuestLogRecordingPointer);
|
||||
return FALSE;
|
||||
}
|
||||
gUnknown_203ADFC = gQuestLogCurActionIdx;
|
||||
@@ -536,7 +537,7 @@ void DrawPreviouslyOnQuestHeader(u8 sceneNum)
|
||||
StringAppend(gStringVar4, gStringVar1);
|
||||
}
|
||||
|
||||
AddTextPrinterParameterized4(sWindowIds[WIN_TOP_BAR], FONT_2, 2, 2, 1, 2, sTextColors, 0, gStringVar4);
|
||||
AddTextPrinterParameterized4(sWindowIds[WIN_TOP_BAR], FONT_NORMAL, 2, 2, 1, 2, sTextColors, 0, gStringVar4);
|
||||
PutWindowTilemap(sWindowIds[WIN_TOP_BAR]);
|
||||
PutWindowTilemap(sWindowIds[WIN_BOTTOM_BAR]);
|
||||
CopyWindowToVram(sWindowIds[WIN_TOP_BAR], COPYWIN_GFX);
|
||||
@@ -793,12 +794,12 @@ static void ReadQuestLogScriptFromSav1(u8 sceneNum, struct QuestLogAction * a1)
|
||||
script = QL_LoadAction_MovementOrGfxChange(script, &a1[r6]);
|
||||
r6++;
|
||||
break;
|
||||
case QL_EVENT_ACTION_FF:
|
||||
script = QL_LoadAction_FF(script, &a1[r6]);
|
||||
case QL_EVENT_SCENE_END:
|
||||
script = QL_LoadAction_SceneEnd(script, &a1[r6]);
|
||||
r6++;
|
||||
break;
|
||||
case QL_EVENT_ACTION_FE:
|
||||
script = QL_LoadAction_FE(script, &a1[r6]);
|
||||
case QL_EVENT_WAIT:
|
||||
script = QL_LoadAction_Wait(script, &a1[r6]);
|
||||
r6++;
|
||||
break;
|
||||
default: // Normal event
|
||||
@@ -1023,7 +1024,7 @@ static void DrawSceneDescription(void)
|
||||
|
||||
PutWindowTilemap(sWindowIds[WIN_DESCRIPTION]);
|
||||
CopyDescriptionWindowTiles(sWindowIds[WIN_DESCRIPTION]);
|
||||
AddTextPrinterParameterized4(sWindowIds[WIN_DESCRIPTION], FONT_2, 2, sQuestLogTextLineYCoords[numLines], 1, 0, sTextColors, 0, gStringVar4);
|
||||
AddTextPrinterParameterized4(sWindowIds[WIN_DESCRIPTION], FONT_NORMAL, 2, sQuestLogTextLineYCoords[numLines], 1, 0, sTextColors, 0, gStringVar4);
|
||||
ScheduleBgCopyTilemapToVram(0);
|
||||
}
|
||||
|
||||
@@ -1262,12 +1263,12 @@ static void QL_SlightlyDarkenSomePals(void)
|
||||
Free(buffer);
|
||||
}
|
||||
|
||||
void FinishRecordingQuestLogScene(void)
|
||||
void QL_FinishRecordingScene(void)
|
||||
{
|
||||
if (gQuestLogState == QL_STATE_RECORDING)
|
||||
{
|
||||
TryRecordActionSequence(sQuestLogActionRecordBuffer);
|
||||
TryRecordEvent39_GoToNextScene();
|
||||
RecordSceneEnd();
|
||||
gQuestLogState = 0;
|
||||
sQuestLogCB = NULL;
|
||||
gUnknown_203AE04 = NULL;
|
||||
@@ -1281,8 +1282,8 @@ void QuestLog_CutRecording(void)
|
||||
if (gQuestLogPlaybackState != QL_PLAYBACK_STATE_0 && gQuestLogState == QL_STATE_RECORDING)
|
||||
{
|
||||
TryRecordActionSequence(sQuestLogActionRecordBuffer);
|
||||
TryRecordEvent41_IncCursor(1);
|
||||
TryRecordEvent39_GoToNextScene();
|
||||
QL_RecordWait(1);
|
||||
RecordSceneEnd();
|
||||
gQuestLogPlaybackState = QL_PLAYBACK_STATE_0;
|
||||
gQuestLogState = 0;
|
||||
sQuestLogCB = NULL;
|
||||
@@ -1315,7 +1316,7 @@ static void SortQuestLogInSav1(void)
|
||||
|
||||
void SaveQuestLogData(void)
|
||||
{
|
||||
if (MenuHelpers_LinkSomething() != TRUE)
|
||||
if (MenuHelpers_IsLinkActive() != TRUE)
|
||||
{
|
||||
QuestLog_CutRecording();
|
||||
SortQuestLogInSav1();
|
||||
@@ -1538,7 +1539,7 @@ static void SetUpQuestLogAction(u8 kind, struct QuestLogAction *actions, u16 siz
|
||||
{
|
||||
sCurSceneActions[i] = (struct QuestLogAction){
|
||||
.duration = 0xFFFF,
|
||||
.type = QL_ACTION_FF
|
||||
.type = QL_ACTION_SCENE_END
|
||||
};
|
||||
}
|
||||
gQuestLogCurActionIdx = 0;
|
||||
@@ -1616,12 +1617,13 @@ void sub_8112B3C(void)
|
||||
// End
|
||||
gQuestLogPlaybackState = QL_PLAYBACK_STATE_3;
|
||||
break;
|
||||
case QL_ACTION_FE:
|
||||
case QL_ACTION_WAIT:
|
||||
break;
|
||||
case QL_ACTION_FF:
|
||||
case QL_ACTION_SCENE_END:
|
||||
gQuestLogPlaybackState = QL_PLAYBACK_STATE_0;
|
||||
break;
|
||||
}
|
||||
|
||||
if (gQuestLogPlaybackState == QL_PLAYBACK_STATE_0)
|
||||
break;
|
||||
if (++gQuestLogCurActionIdx >= sMaxActionsInScene)
|
||||
@@ -1630,8 +1632,8 @@ void sub_8112B3C(void)
|
||||
break;
|
||||
}
|
||||
sNextActionDelay = sCurSceneActions[gQuestLogCurActionIdx].duration;
|
||||
} while (gQuestLogPlaybackState != QL_PLAYBACK_STATE_3
|
||||
&& (sNextActionDelay == 0 || sNextActionDelay == 0xFFFF));
|
||||
|
||||
} while (gQuestLogPlaybackState != QL_PLAYBACK_STATE_3 && (sNextActionDelay == 0 || sNextActionDelay == 0xFFFF));
|
||||
}
|
||||
}
|
||||
else if (gQuestLogCurActionIdx >= sMaxActionsInScene)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user