Merge pull request #1908 from GriffinRichards/name-buffer

Automatically update nickname buffer sizes
This commit is contained in:
GriffinR 2023-08-12 23:36:19 -04:00 committed by GitHub
commit 4c2b12541b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
20 changed files with 83 additions and 73 deletions

View File

@ -1,7 +1,11 @@
#ifndef GUARD_BATTLE_MESSAGE_H #ifndef GUARD_BATTLE_MESSAGE_H
#define GUARD_BATTLE_MESSAGE_H #define GUARD_BATTLE_MESSAGE_H
#define TEXT_BUFF_ARRAY_COUNT 16 // This buffer can hold many different things. Some of the things it can hold
// that have explicit sizes are listed below to ensure it can contain them.
#define TEXT_BUFF_ARRAY_COUNT max(16, \
max(MOVE_NAME_LENGTH + 2, /* +2 to hold the "!" and EOS. */ \
POKEMON_NAME_LENGTH + 1))
// for 0xFD // for 0xFD
#define B_TXT_BUFF1 0x0 #define B_TXT_BUFF1 0x0

View File

@ -92,6 +92,7 @@
// string lengths // string lengths
#define ITEM_NAME_LENGTH 14 #define ITEM_NAME_LENGTH 14
#define POKEMON_NAME_LENGTH 10 #define POKEMON_NAME_LENGTH 10
#define POKEMON_NAME_BUFFER_SIZE max(20, POKEMON_NAME_LENGTH + 1) // Frequently used buffer size. Larger than necessary
#define PLAYER_NAME_LENGTH 7 #define PLAYER_NAME_LENGTH 7
#define MAIL_WORDS_COUNT 9 #define MAIL_WORDS_COUNT 9
#define EASY_CHAT_BATTLE_WORDS_COUNT 6 #define EASY_CHAT_BATTLE_WORDS_COUNT 6

View File

@ -556,7 +556,7 @@ static u32 CopyLinkOpponentMonData(u8 monId, u8 *dst)
{ {
struct BattlePokemon battleMon; struct BattlePokemon battleMon;
struct MovePpInfo moveData; struct MovePpInfo moveData;
u8 nickname[20]; u8 nickname[POKEMON_NAME_BUFFER_SIZE];
u8 *src; u8 *src;
s16 data16; s16 data16;
u32 data32; u32 data32;

View File

@ -450,7 +450,7 @@ static u32 CopyLinkPartnerMonData(u8 monId, u8 *dst)
{ {
struct BattlePokemon battleMon; struct BattlePokemon battleMon;
struct MovePpInfo moveData; struct MovePpInfo moveData;
u8 nickname[20]; u8 nickname[POKEMON_NAME_BUFFER_SIZE];
u8 *src; u8 *src;
s16 data16; s16 data16;
u32 data32; u32 data32;

View File

@ -561,7 +561,7 @@ static u32 GetOpponentMonData(u8 monId, u8 *dst)
{ {
struct BattlePokemon battleMon; struct BattlePokemon battleMon;
struct MovePpInfo moveData; struct MovePpInfo moveData;
u8 nickname[20]; u8 nickname[POKEMON_NAME_BUFFER_SIZE];
u8 *src; u8 *src;
s16 data16; s16 data16;
u32 data32; u32 data32;

View File

@ -1608,7 +1608,7 @@ static u32 CopyPlayerMonData(u8 monId, u8 *dst)
{ {
struct BattlePokemon battleMon; struct BattlePokemon battleMon;
struct MovePpInfo moveData; struct MovePpInfo moveData;
u8 nickname[20]; u8 nickname[POKEMON_NAME_BUFFER_SIZE];
u8 *src; u8 *src;
s16 data16; s16 data16;
u32 data32; u32 data32;

View File

@ -634,7 +634,7 @@ static u32 CopyPlayerPartnerMonData(u8 monId, u8 *dst)
{ {
struct BattlePokemon battleMon; struct BattlePokemon battleMon;
struct MovePpInfo moveData; struct MovePpInfo moveData;
u8 nickname[20]; u8 nickname[POKEMON_NAME_BUFFER_SIZE];
u8 *src; u8 *src;
s16 data16; s16 data16;
u32 data32; u32 data32;

View File

@ -542,7 +542,7 @@ static u32 CopyRecordedOpponentMonData(u8 monId, u8 *dst)
{ {
struct BattlePokemon battleMon; struct BattlePokemon battleMon;
struct MovePpInfo moveData; struct MovePpInfo moveData;
u8 nickname[20]; u8 nickname[POKEMON_NAME_BUFFER_SIZE];
u8 *src; u8 *src;
s16 data16; s16 data16;
u32 data32; u32 data32;

View File

@ -525,7 +525,7 @@ static u32 CopyRecordedPlayerMonData(u8 monId, u8 *dst)
{ {
struct BattlePokemon battleMon; struct BattlePokemon battleMon;
struct MovePpInfo moveData; struct MovePpInfo moveData;
u8 nickname[20]; u8 nickname[POKEMON_NAME_BUFFER_SIZE];
u8 *src; u8 *src;
s16 data16; s16 data16;
u32 data32; u32 data32;

View File

@ -452,7 +452,7 @@ static u32 CopyWallyMonData(u8 monId, u8 *dst)
{ {
struct BattlePokemon battleMon; struct BattlePokemon battleMon;
struct MovePpInfo moveData; struct MovePpInfo moveData;
u8 nickname[20]; u8 nickname[POKEMON_NAME_BUFFER_SIZE];
u8 *src; u8 *src;
s16 data16; s16 data16;
u32 data32; u32 data32;

View File

@ -1323,7 +1323,8 @@ const u8 gText_Draw[] = _("{HIGHLIGHT TRANSPARENT}Draw");
static const u8 sText_SpaceIs[] = _(" is"); static const u8 sText_SpaceIs[] = _(" is");
static const u8 sText_ApostropheS[] = _("'s"); static const u8 sText_ApostropheS[] = _("'s");
// For displaying names of invalid moves // For displaying names of invalid moves.
// This is large enough that the text for TYPE_ELECTRIC will exceed TEXT_BUFF_ARRAY_COUNT.
static const u8 sATypeMove_Table[NUMBER_OF_MON_TYPES][17] = static const u8 sATypeMove_Table[NUMBER_OF_MON_TYPES][17] =
{ {
[TYPE_NORMAL] = _("a NORMAL move"), [TYPE_NORMAL] = _("a NORMAL move"),
@ -1472,7 +1473,7 @@ static const u16 sGrammarMoveUsedTable[] =
MOVE_COVET, 0 MOVE_COVET, 0
}; };
static const u8 sDummyWeirdStatusString[] = {EOS, EOS, EOS, EOS, EOS, EOS, EOS, EOS, 0, 0}; static const u8 sText_EmptyStatus[] = _("$$$$$$$");
static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = static const struct BattleWindowText sTextOnWindowsInfo_Normal[] =
{ {
@ -2259,10 +2260,10 @@ static const u8 *TryGetStatusString(u8 *src)
u32 chars1, chars2; u32 chars1, chars2;
u8 *statusPtr; u8 *statusPtr;
memcpy(status, sDummyWeirdStatusString, 8); memcpy(status, sText_EmptyStatus, min(ARRAY_COUNT(status), ARRAY_COUNT(sText_EmptyStatus)));
statusPtr = status; statusPtr = status;
for (i = 0; i < 8; i++) for (i = 0; i < ARRAY_COUNT(status); i++)
{ {
if (*src == EOS) break; // one line required to match -g if (*src == EOS) break; // one line required to match -g
*statusPtr = *src; *statusPtr = *src;
@ -2304,11 +2305,16 @@ static const u8 *TryGetStatusString(u8 *src)
StringGet_Nickname(text); \ StringGet_Nickname(text); \
toCpy = text; toCpy = text;
// Ensure the defined length for an item name can contain the full defined length of a berry name.
// This ensures that custom Enigma Berry names will fit in the text buffer at the top of BattleStringExpandPlaceholders.
STATIC_ASSERT(BERRY_NAME_LENGTH + ARRAY_COUNT(sText_BerrySuffix) <= ITEM_NAME_LENGTH, BerryNameTooLong);
u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst) u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
{ {
u32 dstID = 0; // if they used dstID, why not use srcID as well? u32 dstID = 0; // if they used dstID, why not use srcID as well?
const u8 *toCpy = NULL; const u8 *toCpy = NULL;
u8 text[30]; // This buffer may hold either the name of a trainer, pokemon, or item.
u8 text[max(max(max(32, TRAINER_NAME_LENGTH + 1), POKEMON_NAME_LENGTH + 1), ITEM_NAME_LENGTH)];
u8 multiplayerId; u8 multiplayerId;
s32 i; s32 i;
@ -2753,7 +2759,7 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst)
{ {
u32 srcID = 1; u32 srcID = 1;
u32 value = 0; u32 value = 0;
u8 text[12]; u8 nickname[POKEMON_NAME_LENGTH + 1];
u16 hword; u16 hword;
*dst = EOS; *dst = EOS;
@ -2793,7 +2799,7 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst)
case B_BUFF_MON_NICK_WITH_PREFIX: // poke nick with prefix case B_BUFF_MON_NICK_WITH_PREFIX: // poke nick with prefix
if (GetBattlerSide(src[srcID + 1]) == B_SIDE_PLAYER) if (GetBattlerSide(src[srcID + 1]) == B_SIDE_PLAYER)
{ {
GetMonData(&gPlayerParty[src[srcID + 2]], MON_DATA_NICKNAME, text); GetMonData(&gPlayerParty[src[srcID + 2]], MON_DATA_NICKNAME, nickname);
} }
else else
{ {
@ -2802,10 +2808,10 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst)
else else
StringAppend(dst, sText_WildPkmnPrefix); StringAppend(dst, sText_WildPkmnPrefix);
GetMonData(&gEnemyParty[src[srcID + 2]], MON_DATA_NICKNAME, text); GetMonData(&gEnemyParty[src[srcID + 2]], MON_DATA_NICKNAME, nickname);
} }
StringGet_Nickname(text); StringGet_Nickname(nickname);
StringAppend(dst, text); StringAppend(dst, nickname);
srcID += 3; srcID += 3;
break; break;
case B_BUFF_STAT: // stats case B_BUFF_STAT: // stats

View File

@ -2775,7 +2775,7 @@ static bool8 IsPlayerLinkLeader(void)
void CreateContestMonFromParty(u8 partyIndex) void CreateContestMonFromParty(u8 partyIndex)
{ {
u8 name[20]; u8 name[max(PLAYER_NAME_LENGTH + 1, POKEMON_NAME_BUFFER_SIZE)];
u16 heldItem; u16 heldItem;
s16 cool; s16 cool;
s16 beauty; s16 beauty;
@ -2785,10 +2785,8 @@ void CreateContestMonFromParty(u8 partyIndex)
StringCopy(name, gSaveBlock2Ptr->playerName); StringCopy(name, gSaveBlock2Ptr->playerName);
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK) if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
{
StripPlayerNameForLinkContest(name); StripPlayerNameForLinkContest(name);
} memcpy(gContestMons[gContestPlayerMonIndex].trainerName, name, PLAYER_NAME_LENGTH + 1);
memcpy(gContestMons[gContestPlayerMonIndex].trainerName, name, 8);
if (gSaveBlock2Ptr->playerGender == MALE) if (gSaveBlock2Ptr->playerGender == MALE)
gContestMons[gContestPlayerMonIndex].trainerGfxId = OBJ_EVENT_GFX_LINK_BRENDAN; gContestMons[gContestPlayerMonIndex].trainerGfxId = OBJ_EVENT_GFX_LINK_BRENDAN;
else else
@ -6020,8 +6018,10 @@ static u8 GetMonNicknameLanguage(u8 *nickname)
if (nickname[0] == EXT_CTRL_CODE_BEGIN && nickname[1] == EXT_CTRL_CODE_JPN) if (nickname[0] == EXT_CTRL_CODE_BEGIN && nickname[1] == EXT_CTRL_CODE_JPN)
return GAME_LANGUAGE; return GAME_LANGUAGE;
if (StringLength(nickname) < PLAYER_NAME_LENGTH - 1) if (StringLength(nickname) <= 5)
{ {
// Name is short enough that it might be Japanese.
// Make sure all the character values are valid latin name characters.
while (*nickname != EOS) while (*nickname != EOS)
{ {
if ((*nickname >= CHAR_A && *nickname <= CHAR_z) if ((*nickname >= CHAR_A && *nickname <= CHAR_z)
@ -6039,12 +6039,18 @@ static u8 GetMonNicknameLanguage(u8 *nickname)
|| *nickname == CHAR_DBL_QUOTE_LEFT || *nickname == CHAR_DBL_QUOTE_LEFT
|| *nickname == CHAR_DBL_QUOTE_RIGHT || *nickname == CHAR_DBL_QUOTE_RIGHT
|| *nickname == CHAR_SGL_QUOTE_LEFT || *nickname == CHAR_SGL_QUOTE_LEFT
|| *nickname == CHAR_DBL_QUOTE_LEFT) // Most likely a typo, CHAR_SGL_QUOTE_RIGHT should be here instead. #ifdef BUGFIX
|| *nickname == CHAR_SGL_QUOTE_RIGHT
#else
|| *nickname == CHAR_DBL_QUOTE_LEFT // Most likely a typo, CHAR_SGL_QUOTE_RIGHT should be here instead.
#endif
)
{ {
nickname++; nickname++;
} }
else else
{ {
// Invalid latin name character, assume the name was Japanese.
ret = LANGUAGE_JAPANESE; ret = LANGUAGE_JAPANESE;
break; break;
} }
@ -6101,7 +6107,7 @@ void StripPlayerAndMonNamesForLinkContest(struct ContestPokemon *mon, s32 langua
name = mon->trainerName; name = mon->trainerName;
if (language == LANGUAGE_JAPANESE) if (language == LANGUAGE_JAPANESE)
{ {
name[PLAYER_NAME_LENGTH] = EOS; name[7] = EOS;
name[6] = name[4]; name[6] = name[4];
name[5] = name[3]; name[5] = name[3];
name[4] = name[2]; name[4] = name[2];

View File

@ -93,16 +93,14 @@ static const u8 sJapaneseEggNickname[] = _("タマゴ"); // "tamago" ("egg" in J
u8 *GetMonNickname2(struct Pokemon *mon, u8 *dest) u8 *GetMonNickname2(struct Pokemon *mon, u8 *dest)
{ {
u8 nickname[POKEMON_NAME_LENGTH * 2]; u8 nickname[POKEMON_NAME_BUFFER_SIZE];
GetMonData(mon, MON_DATA_NICKNAME, nickname); GetMonData(mon, MON_DATA_NICKNAME, nickname);
return StringCopy_Nickname(dest, nickname); return StringCopy_Nickname(dest, nickname);
} }
u8 *GetBoxMonNickname(struct BoxPokemon *mon, u8 *dest) u8 *GetBoxMonNickname(struct BoxPokemon *mon, u8 *dest)
{ {
u8 nickname[POKEMON_NAME_LENGTH * 2]; u8 nickname[POKEMON_NAME_BUFFER_SIZE];
GetBoxMonData(mon, MON_DATA_NICKNAME, nickname); GetBoxMonData(mon, MON_DATA_NICKNAME, nickname);
return StringCopy_Nickname(dest, nickname); return StringCopy_Nickname(dest, nickname);
} }
@ -946,12 +944,12 @@ static bool8 IsEggPending(struct DayCare *daycare)
// gStringVar3 = first mon trainer's name // gStringVar3 = first mon trainer's name
static void _GetDaycareMonNicknames(struct DayCare *daycare) static void _GetDaycareMonNicknames(struct DayCare *daycare)
{ {
u8 text[12]; u8 otName[max(12, PLAYER_NAME_LENGTH + 1)];
if (GetBoxMonData(&daycare->mons[0].mon, MON_DATA_SPECIES) != 0) if (GetBoxMonData(&daycare->mons[0].mon, MON_DATA_SPECIES) != 0)
{ {
GetBoxMonNickname(&daycare->mons[0].mon, gStringVar1); GetBoxMonNickname(&daycare->mons[0].mon, gStringVar1);
GetBoxMonData(&daycare->mons[0].mon, MON_DATA_OT_NAME, text); GetBoxMonData(&daycare->mons[0].mon, MON_DATA_OT_NAME, otName);
StringCopy(gStringVar3, text); StringCopy(gStringVar3, otName);
} }
if (GetBoxMonData(&daycare->mons[1].mon, MON_DATA_SPECIES) != 0) if (GetBoxMonData(&daycare->mons[1].mon, MON_DATA_SPECIES) != 0)
@ -1146,7 +1144,7 @@ static u8 *AppendMonGenderSymbol(u8 *name, struct BoxPokemon *boxMon)
static void GetDaycareLevelMenuText(struct DayCare *daycare, u8 *dest) static void GetDaycareLevelMenuText(struct DayCare *daycare, u8 *dest)
{ {
u8 monNames[DAYCARE_MON_COUNT][20]; u8 monNames[DAYCARE_MON_COUNT][POKEMON_NAME_BUFFER_SIZE];
u8 i; u8 i;
*dest = EOS; *dest = EOS;
@ -1204,8 +1202,7 @@ static void DaycareAddTextPrinter(u8 windowId, const u8 *text, u32 x, u32 y)
static void DaycarePrintMonNickname(struct DayCare *daycare, u8 windowId, u32 daycareSlotId, u32 y) static void DaycarePrintMonNickname(struct DayCare *daycare, u8 windowId, u32 daycareSlotId, u32 y)
{ {
u8 nickname[POKEMON_NAME_LENGTH * 2]; u8 nickname[POKEMON_NAME_BUFFER_SIZE];
GetBoxMonNickname(&daycare->mons[daycareSlotId].mon, nickname); GetBoxMonNickname(&daycare->mons[daycareSlotId].mon, nickname);
AppendMonGenderSymbol(nickname, &daycare->mons[daycareSlotId].mon); AppendMonGenderSymbol(nickname, &daycare->mons[daycareSlotId].mon);
DaycareAddTextPrinter(windowId, nickname, 8, y); DaycareAddTextPrinter(windowId, nickname, 8, y);

View File

@ -399,7 +399,7 @@ void ScriptHatchMon(void)
static bool8 _CheckDaycareMonReceivedMail(struct DayCare *daycare, u8 daycareId) static bool8 _CheckDaycareMonReceivedMail(struct DayCare *daycare, u8 daycareId)
{ {
u8 nickname[32]; u8 nickname[max(32, POKEMON_NAME_BUFFER_SIZE)];
struct DaycareMon *daycareMon = &daycare->mons[daycareId]; struct DaycareMon *daycareMon = &daycare->mons[daycareId];
GetBoxMonNickname(&daycareMon->mon, nickname); GetBoxMonNickname(&daycareMon->mon, nickname);

View File

@ -208,7 +208,7 @@ void BeginEvolutionScene(struct Pokemon *mon, u16 postEvoSpecies, bool8 canStopE
void EvolutionScene(struct Pokemon *mon, u16 postEvoSpecies, bool8 canStopEvo, u8 partyId) void EvolutionScene(struct Pokemon *mon, u16 postEvoSpecies, bool8 canStopEvo, u8 partyId)
{ {
u8 name[20]; u8 name[POKEMON_NAME_BUFFER_SIZE];
u16 currSpecies; u16 currSpecies;
u32 trainerId, personality; u32 trainerId, personality;
const struct CompressedSpritePalette* pokePal; const struct CompressedSpritePalette* pokePal;
@ -467,7 +467,7 @@ static void CB2_TradeEvolutionSceneLoadGraphics(void)
void TradeEvolutionScene(struct Pokemon *mon, u16 postEvoSpecies, u8 preEvoSpriteId, u8 partyId) void TradeEvolutionScene(struct Pokemon *mon, u16 postEvoSpecies, u8 preEvoSpriteId, u8 partyId)
{ {
u8 name[20]; u8 name[POKEMON_NAME_BUFFER_SIZE];
u16 currSpecies; u16 currSpecies;
u32 trainerId, personality; u32 trainerId, personality;
const struct CompressedSpritePalette* pokePal; const struct CompressedSpritePalette* pokePal;
@ -775,8 +775,7 @@ static void Task_EvolutionScene(u8 taskId)
var = MonTryLearningNewMove(mon, gTasks[taskId].tLearnsFirstMove); var = MonTryLearningNewMove(mon, gTasks[taskId].tLearnsFirstMove);
if (var != MOVE_NONE && !gTasks[taskId].tEvoWasStopped) if (var != MOVE_NONE && !gTasks[taskId].tEvoWasStopped)
{ {
u8 text[20]; u8 nickname[POKEMON_NAME_BUFFER_SIZE];
if (!(gTasks[taskId].tBits & TASK_BIT_LEARN_MOVE)) if (!(gTasks[taskId].tBits & TASK_BIT_LEARN_MOVE))
{ {
StopMapMusic(); StopMapMusic();
@ -786,8 +785,8 @@ static void Task_EvolutionScene(u8 taskId)
gTasks[taskId].tBits |= TASK_BIT_LEARN_MOVE; gTasks[taskId].tBits |= TASK_BIT_LEARN_MOVE;
gTasks[taskId].tLearnsFirstMove = FALSE; gTasks[taskId].tLearnsFirstMove = FALSE;
gTasks[taskId].tLearnMoveState = MVSTATE_INTRO_MSG_1; gTasks[taskId].tLearnMoveState = MVSTATE_INTRO_MSG_1;
GetMonData(mon, MON_DATA_NICKNAME, text); GetMonData(mon, MON_DATA_NICKNAME, nickname);
StringCopy_Nickname(gBattleTextBuff1, text); StringCopy_Nickname(gBattleTextBuff1, nickname);
if (var == MON_HAS_MAX_MOVES) if (var == MON_HAS_MAX_MOVES)
gTasks[taskId].tState = EVOSTATE_REPLACE_MOVE; gTasks[taskId].tState = EVOSTATE_REPLACE_MOVE;
@ -1195,13 +1194,12 @@ static void Task_TradeEvolutionScene(u8 taskId)
var = MonTryLearningNewMove(mon, gTasks[taskId].tLearnsFirstMove); var = MonTryLearningNewMove(mon, gTasks[taskId].tLearnsFirstMove);
if (var != MOVE_NONE && !gTasks[taskId].tEvoWasStopped) if (var != MOVE_NONE && !gTasks[taskId].tEvoWasStopped)
{ {
u8 text[20]; u8 nickname[POKEMON_NAME_BUFFER_SIZE];
gTasks[taskId].tBits |= TASK_BIT_LEARN_MOVE; gTasks[taskId].tBits |= TASK_BIT_LEARN_MOVE;
gTasks[taskId].tLearnsFirstMove = FALSE; gTasks[taskId].tLearnsFirstMove = FALSE;
gTasks[taskId].tLearnMoveState = 0; gTasks[taskId].tLearnMoveState = 0;
GetMonData(mon, MON_DATA_NICKNAME, text); GetMonData(mon, MON_DATA_NICKNAME, nickname);
StringCopy_Nickname(gBattleTextBuff1, text); StringCopy_Nickname(gBattleTextBuff1, nickname);
if (var == MON_HAS_MAX_MOVES) if (var == MON_HAS_MAX_MOVES)
gTasks[taskId].tState = T_EVOSTATE_REPLACE_MOVE; gTasks[taskId].tState = T_EVOSTATE_REPLACE_MOVE;

View File

@ -44,7 +44,7 @@ struct HallofFameMon
u32 personality; u32 personality;
u16 species:9; u16 species:9;
u16 lvl:7; u16 lvl:7;
u8 nick[POKEMON_NAME_LENGTH]; u8 nickname[POKEMON_NAME_LENGTH];
}; };
struct HallofFameTeam struct HallofFameTeam
@ -338,7 +338,7 @@ static const struct HallofFameMon sDummyFameMon =
.personality = 0, .personality = 0,
.species = SPECIES_NONE, .species = SPECIES_NONE,
.lvl = 0, .lvl = 0,
.nick = {0} .nickname = {0}
}; };
// Unused, order of party slots on Hall of Fame screen // Unused, order of party slots on Hall of Fame screen
@ -442,18 +442,16 @@ static void Task_Hof_InitMonData(u8 taskId)
for (i = 0; i < PARTY_SIZE; i++) for (i = 0; i < PARTY_SIZE; i++)
{ {
u8 nick[POKEMON_NAME_LENGTH + 2]; u8 nickname[POKEMON_NAME_LENGTH + 1];
if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES)) if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES))
{ {
sHofMonPtr->mon[i].species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); sHofMonPtr->mon[i].species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG);
sHofMonPtr->mon[i].tid = GetMonData(&gPlayerParty[i], MON_DATA_OT_ID); sHofMonPtr->mon[i].tid = GetMonData(&gPlayerParty[i], MON_DATA_OT_ID);
sHofMonPtr->mon[i].personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY); sHofMonPtr->mon[i].personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY);
sHofMonPtr->mon[i].lvl = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); sHofMonPtr->mon[i].lvl = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL);
GetMonData(&gPlayerParty[i], MON_DATA_NICKNAME, nick); GetMonData(&gPlayerParty[i], MON_DATA_NICKNAME, nickname);
for (j = 0; j < POKEMON_NAME_LENGTH; j++) for (j = 0; j < POKEMON_NAME_LENGTH; j++)
{ sHofMonPtr->mon[i].nickname[j] = nickname[j];
sHofMonPtr->mon[i].nick[j] = nick[j];
}
gTasks[taskId].tMonNumber++; gTasks[taskId].tMonNumber++;
} }
else else
@ -462,7 +460,7 @@ static void Task_Hof_InitMonData(u8 taskId)
sHofMonPtr->mon[i].tid = 0; sHofMonPtr->mon[i].tid = 0;
sHofMonPtr->mon[i].personality = 0; sHofMonPtr->mon[i].personality = 0;
sHofMonPtr->mon[i].lvl = 0; sHofMonPtr->mon[i].lvl = 0;
sHofMonPtr->mon[i].nick[0] = EOS; sHofMonPtr->mon[i].nickname[0] = EOS;
} }
} }
@ -1115,7 +1113,7 @@ static void HallOfFame_PrintWelcomeText(u8 unusedPossiblyWindowId, u8 unused2)
static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 unused1, u8 unused2) static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 unused1, u8 unused2)
{ {
u8 text[30]; u8 text[max(32, POKEMON_NAME_LENGTH + 1)];
u8 *stringPtr; u8 *stringPtr;
s32 dexNumber; s32 dexNumber;
s32 width; s32 width;
@ -1148,8 +1146,8 @@ static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 unused1, u
AddTextPrinterParameterized3(0, FONT_NORMAL, 0x10, 1, sMonInfoTextColors, TEXT_SKIP_DRAW, text); AddTextPrinterParameterized3(0, FONT_NORMAL, 0x10, 1, sMonInfoTextColors, TEXT_SKIP_DRAW, text);
} }
// nick, species names, gender and level // nickname, species names, gender and level
memcpy(text, currMon->nick, POKEMON_NAME_LENGTH); memcpy(text, currMon->nickname, POKEMON_NAME_LENGTH);
text[POKEMON_NAME_LENGTH] = EOS; text[POKEMON_NAME_LENGTH] = EOS;
if (currMon->species == SPECIES_EGG) if (currMon->species == SPECIES_EGG)
{ {

View File

@ -918,7 +918,7 @@ static u8 *GetConditionMenuMonString(u8 *dst, u16 boxId, u16 monId)
*(dst++) = TEXT_COLOR_TRANSPARENT; *(dst++) = TEXT_COLOR_TRANSPARENT;
*(dst++) = TEXT_COLOR_LIGHT_BLUE; *(dst++) = TEXT_COLOR_LIGHT_BLUE;
if (GetBoxOrPartyMonData(box, mon, MON_DATA_IS_EGG, NULL)) if (GetBoxOrPartyMonData(box, mon, MON_DATA_IS_EGG, NULL))
return StringCopyPadded(dst, gText_EggNickname, 0, 12); return StringCopyPadded(dst, gText_EggNickname, 0, POKEMON_NAME_LENGTH + 2);
GetBoxOrPartyMonData(box, mon, MON_DATA_NICKNAME, dst); GetBoxOrPartyMonData(box, mon, MON_DATA_NICKNAME, dst);
StringGet_Nickname(dst); StringGet_Nickname(dst);
species = GetBoxOrPartyMonData(box, mon, MON_DATA_SPECIES, NULL); species = GetBoxOrPartyMonData(box, mon, MON_DATA_SPECIES, NULL);
@ -1020,7 +1020,7 @@ void GetConditionMenuMonNameAndLocString(u8 *locationDst, u8 *nameDst, u16 boxId
locationDst[3] = TEXT_COLOR_TRANSPARENT; locationDst[3] = TEXT_COLOR_TRANSPARENT;
locationDst[4] = TEXT_COLOR_LIGHT_BLUE; locationDst[4] = TEXT_COLOR_LIGHT_BLUE;
if (box == TOTAL_BOXES_COUNT) // Party mon. if (box == TOTAL_BOXES_COUNT) // Party mon.
BufferConditionMenuSpacedStringN(&locationDst[5], gText_InParty, 8); BufferConditionMenuSpacedStringN(&locationDst[5], gText_InParty, BOX_NAME_LENGTH);
else else
BufferConditionMenuSpacedStringN(&locationDst[5], GetBoxNamePtr(box), BOX_NAME_LENGTH); BufferConditionMenuSpacedStringN(&locationDst[5], GetBoxNamePtr(box), BOX_NAME_LENGTH);
} }
@ -1029,7 +1029,7 @@ void GetConditionMenuMonNameAndLocString(u8 *locationDst, u8 *nameDst, u16 boxId
for (i = 0; i < POKEMON_NAME_LENGTH + 2; i++) for (i = 0; i < POKEMON_NAME_LENGTH + 2; i++)
nameDst[i] = CHAR_SPACE; nameDst[i] = CHAR_SPACE;
nameDst[i] = EOS; nameDst[i] = EOS;
for (i = 0; i < 8; i++) for (i = 0; i < BOX_NAME_LENGTH; i++)
locationDst[i] = CHAR_SPACE; locationDst[i] = CHAR_SPACE;
locationDst[i] = EOS; locationDst[i] = EOS;
} }

View File

@ -2406,7 +2406,7 @@ void CreateMonWithEVSpread(struct Pokemon *mon, u16 species, u8 level, u8 fixedI
void CreateBattleTowerMon(struct Pokemon *mon, struct BattleTowerPokemon *src) void CreateBattleTowerMon(struct Pokemon *mon, struct BattleTowerPokemon *src)
{ {
s32 i; s32 i;
u8 nickname[30]; u8 nickname[max(32, POKEMON_NAME_BUFFER_SIZE)];
u8 language; u8 language;
u8 value; u8 value;
@ -2460,7 +2460,7 @@ void CreateBattleTowerMon(struct Pokemon *mon, struct BattleTowerPokemon *src)
void CreateBattleTowerMon_HandleLevel(struct Pokemon *mon, struct BattleTowerPokemon *src, bool8 lvl50) void CreateBattleTowerMon_HandleLevel(struct Pokemon *mon, struct BattleTowerPokemon *src, bool8 lvl50)
{ {
s32 i; s32 i;
u8 nickname[30]; u8 nickname[max(32, POKEMON_NAME_BUFFER_SIZE)];
u8 level; u8 level;
u8 language; u8 language;
u8 value; u8 value;
@ -4629,7 +4629,7 @@ void CopyPlayerPartyMonToBattleData(u8 battlerId, u8 partyIndex)
{ {
u16 *hpSwitchout; u16 *hpSwitchout;
s32 i; s32 i;
u8 nickname[POKEMON_NAME_LENGTH * 2]; u8 nickname[POKEMON_NAME_BUFFER_SIZE];
gBattleMons[battlerId].species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES, NULL); gBattleMons[battlerId].species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES, NULL);
gBattleMons[battlerId].item = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HELD_ITEM, NULL); gBattleMons[battlerId].item = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HELD_ITEM, NULL);

View File

@ -348,7 +348,7 @@ static u8 *CopyConditionMonNameGender(u8 *str, u16 listId, bool8 skipPadding)
*(str++) = TEXT_COLOR_LIGHT_BLUE; *(str++) = TEXT_COLOR_LIGHT_BLUE;
if (GetBoxOrPartyMonData(boxId, monId, MON_DATA_IS_EGG, NULL)) if (GetBoxOrPartyMonData(boxId, monId, MON_DATA_IS_EGG, NULL))
return StringCopyPadded(str, gText_EggNickname, CHAR_SPACE, 12); return StringCopyPadded(str, gText_EggNickname, CHAR_SPACE, POKEMON_NAME_LENGTH + 2);
GetBoxOrPartyMonData(boxId, monId, MON_DATA_NICKNAME, str); GetBoxOrPartyMonData(boxId, monId, MON_DATA_NICKNAME, str);
StringGet_Nickname(str); StringGet_Nickname(str);
@ -445,7 +445,7 @@ static void CopyMonNameGenderLocation(s16 listId, u8 loadId)
} }
else else
{ {
for (i = 0; i < 12; i++) for (i = 0; i < POKEMON_NAME_LENGTH + 2; i++)
menu->nameText[loadId][i] = CHAR_SPACE; menu->nameText[loadId][i] = CHAR_SPACE;
menu->nameText[loadId][i] = EOS; menu->nameText[loadId][i] = EOS;

View File

@ -1864,7 +1864,7 @@ static void SetSelectedMon(u8 cursorPosition)
static void DrawSelectedMonScreen(u8 whichParty) static void DrawSelectedMonScreen(u8 whichParty)
{ {
s8 nameStringWidth; s8 nameStringWidth;
u8 nickname[20]; u8 nickname[POKEMON_NAME_BUFFER_SIZE];
u8 movesString[56]; u8 movesString[56];
u8 i; u8 i;
u8 partyIdx; u8 partyIdx;
@ -1950,7 +1950,7 @@ static void DrawSelectedMonScreen(u8 whichParty)
static u8 GetMonNicknameWidth(u8 *str, u8 whichParty, u8 partyIdx) static u8 GetMonNicknameWidth(u8 *str, u8 whichParty, u8 partyIdx)
{ {
u8 nickname[POKEMON_NAME_LENGTH]; u8 nickname[POKEMON_NAME_LENGTH + 1];
if (whichParty == TRADE_PLAYER) if (whichParty == TRADE_PLAYER)
GetMonData(&gPlayerParty[partyIdx], MON_DATA_NICKNAME, nickname); GetMonData(&gPlayerParty[partyIdx], MON_DATA_NICKNAME, nickname);
@ -2006,8 +2006,8 @@ static void PrintPartyMonNickname(u8 whichParty, u8 windowId, u8 *nickname)
static void PrintPartyNicknames(u8 whichParty) static void PrintPartyNicknames(u8 whichParty)
{ {
u8 i; u8 i;
u8 nickname[20]; u8 nickname[POKEMON_NAME_BUFFER_SIZE];
u8 str[32]; u8 str[max(32, POKEMON_NAME_BUFFER_SIZE)];
struct Pokemon *party = (whichParty == TRADE_PLAYER) ? gPlayerParty : gEnemyParty; struct Pokemon *party = (whichParty == TRADE_PLAYER) ? gPlayerParty : gEnemyParty;
for (i = 0; i < sTradeMenu->partyCounts[whichParty]; i++) for (i = 0; i < sTradeMenu->partyCounts[whichParty]; i++)
@ -2023,7 +2023,7 @@ static void PrintLevelAndGender(u8 whichParty, u8 monIdx, u8 x, u8 y, u8 width,
u8 level; u8 level;
u32 symbolTile; u32 symbolTile;
u8 gender; u8 gender;
u8 nickname[POKEMON_NAME_LENGTH]; u8 nickname[POKEMON_NAME_LENGTH + 1];
CopyToBgTilemapBufferRect_ChangePalette(1, gTradeMenuMonBox_Tilemap, width, height, 6, 3, 0); CopyToBgTilemapBufferRect_ChangePalette(1, gTradeMenuMonBox_Tilemap, width, height, 6, 3, 0);
CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(1);
@ -3330,7 +3330,7 @@ static void LoadTradeSequenceSpriteSheetsAndPalettes(void)
static void BufferTradeSceneStrings(void) static void BufferTradeSceneStrings(void)
{ {
u8 mpId; u8 mpId;
u8 name[20]; u8 name[POKEMON_NAME_BUFFER_SIZE];
const struct InGameTrade *ingameTrade; const struct InGameTrade *ingameTrade;
if (sTradeAnim->isLinkTrade) if (sTradeAnim->isLinkTrade)
@ -4539,7 +4539,7 @@ u16 GetInGameTradeSpeciesInfo(void)
static void BufferInGameTradeMonName(void) static void BufferInGameTradeMonName(void)
{ {
u8 nickname[32]; u8 nickname[max(32, POKEMON_NAME_BUFFER_SIZE)];
const struct InGameTrade *inGameTrade = &sIngameTrades[gSpecialVar_0x8004]; const struct InGameTrade *inGameTrade = &sIngameTrades[gSpecialVar_0x8004];
GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_NICKNAME, nickname); GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_NICKNAME, nickname);
StringCopy_Nickname(gStringVar1, nickname); StringCopy_Nickname(gStringVar1, nickname);