summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGriffinR <griffin.g.richards@gmail.com>2021-02-22 12:12:35 -0500
committerGriffinR <griffin.g.richards@gmail.com>2021-02-24 11:03:45 -0500
commitc6141fea831a30a0d2de24b3c02375a01014ec97 (patch)
treead42905d6bb2ebae0fecce7531e85283746bfa08 /src
parent1cac608dbedeaaccd2446891c38a71f10230bfc0 (diff)
Document easy chat
Diffstat (limited to 'src')
-rw-r--r--src/apprentice.c4
-rw-r--r--src/bard_music.c2
-rw-r--r--src/battle_pike.c18
-rw-r--r--src/data/bard_music/bard_sounds.h44
-rw-r--r--src/data/battle_frontier/apprentice.h8
-rw-r--r--src/data/battle_frontier/battle_frontier_trainers.h452
-rw-r--r--src/data/battle_frontier/battle_tent.h4
-rw-r--r--src/data/battle_frontier/trainer_hill.h56
-rwxr-xr-xsrc/data/easy_chat/easy_chat_words_by_letter.h970
-rw-r--r--src/data/lilycove_lady.h18
-rw-r--r--src/data/trade.h2
-rw-r--r--src/dewford_trend.c2
-rw-r--r--src/easy_chat.c3991
-rwxr-xr-xsrc/ereader_helpers.c12
-rw-r--r--src/graphics.c8
-rw-r--r--src/lilycove_lady.c4
-rw-r--r--src/mail_data.c5
-rw-r--r--src/mauville_old_man.c8
-rwxr-xr-xsrc/mevent2.c12
-rw-r--r--src/overworld.c4
-rw-r--r--src/tv.c11
21 files changed, 2957 insertions, 2678 deletions
diff --git a/src/apprentice.c b/src/apprentice.c
index 8a8de009c..7053a8b63 100644
--- a/src/apprentice.c
+++ b/src/apprentice.c
@@ -144,7 +144,7 @@ void ResetApprenticeStruct(struct Apprentice *apprentice)
u8 i;
for (i = 0; i < ARRAY_COUNT(apprentice->speechWon); i++)
- apprentice->speechWon[i] = 0xFFFF;
+ apprentice->speechWon[i] = EC_EMPTY_WORD;
apprentice->playerName[0] = EOS;
apprentice->id = NUM_APPRENTICES;
@@ -158,7 +158,7 @@ void ResetAllApprenticeData(void)
for (i = 0; i < APPRENTICE_COUNT; i++)
{
for (j = 0; j < ARRAY_COUNT(gSaveBlock2Ptr->apprentices[i].speechWon); j++)
- gSaveBlock2Ptr->apprentices[i].speechWon[j] = 0xFFFF;
+ gSaveBlock2Ptr->apprentices[i].speechWon[j] = EC_EMPTY_WORD;
gSaveBlock2Ptr->apprentices[i].id = NUM_APPRENTICES;
gSaveBlock2Ptr->apprentices[i].playerName[0] = EOS;
gSaveBlock2Ptr->apprentices[i].lvlMode = 0;
diff --git a/src/bard_music.c b/src/bard_music.c
index ad065249a..114f1cf42 100644
--- a/src/bard_music.c
+++ b/src/bard_music.c
@@ -28,7 +28,7 @@ const struct BardSound *GetWordSounds(u16 word)
switch (category)
{
case EC_GROUP_POKEMON:
- case EC_GROUP_POKEMON_2:
+ case EC_GROUP_POKEMON_NATIONAL:
ptr = gBardSounds_Pokemon;
break;
case EC_GROUP_MOVE_1:
diff --git a/src/battle_pike.c b/src/battle_pike.c
index aa0761965..0a54cf226 100644
--- a/src/battle_pike.c
+++ b/src/battle_pike.c
@@ -428,32 +428,32 @@ static const u16 sNPCSpeeches[][EASY_CHAT_BATTLE_WORDS_COUNT] =
{EC_WORD_DID, EC_WORD_YOU, EC_WORD_MAKE, EC_WORD_A, EC_WORD_MISTAKE, EC_WORD_QUES},
{EC_WORD_IT_S, EC_WORD_MEAN, EC_WORD_AND, EC_WORD_AWFUL, EC_WORD_IN, EC_WORD_HERE},
{EC_WORD_I_AM, EC_WORD_SO, EC_WORD_TIRED, EC_WORD_OF, EC_WORD_THIS, EC_WORD_PLACE},
- {EC_WORD_I, EC_WORD_QUITE, EC_WORD_ENJOY, EC_WORD_THIS, EC_WORD_CHALLENGE, 0xFFFF},
+ {EC_WORD_I, EC_WORD_QUITE, EC_WORD_ENJOY, EC_WORD_THIS, EC_WORD_CHALLENGE, EC_EMPTY_WORD},
{EC_WORD_LOOK, EC_WORD_AT, EC_WORD_HOW, EC_WORD_I, EC_MOVE2(TACKLE), EC_WORD_THIS},
- {EC_WORD_READY, EC_WORD_TO, EC_WORD_GIVE_UP, EC_WORD_YET, EC_WORD_QUES, 0xFFFF},
+ {EC_WORD_READY, EC_WORD_TO, EC_WORD_GIVE_UP, EC_WORD_YET, EC_WORD_QUES, EC_EMPTY_WORD},
{EC_WORD_OH, EC_WORD_NO, EC_WORD_WHO, EC_WORD_ARE, EC_WORD_YOU, EC_WORD_QUES},
{EC_WORD_I_VE, EC_WORD_BEEN, EC_WORD_WANDERING, EC_WORD_ABOUT, EC_WORD_FOREVER, EC_WORD_ELLIPSIS},
- {EC_WORD_I, EC_WORD_THINK, EC_WORD_I, EC_WORD_WILL, EC_WORD_GIVE_UP, 0xFFFF},
+ {EC_WORD_I, EC_WORD_THINK, EC_WORD_I, EC_WORD_WILL, EC_WORD_GIVE_UP, EC_EMPTY_WORD},
{EC_WORD_WHAT, EC_WORD_SHOULD, EC_WORD_I, EC_WORD_DO, EC_WORD_NEXT, EC_WORD_QUES},
{EC_WORD_I, EC_WORD_CAN_WIN, EC_WORD_WITH, EC_WORD_MY, EC_MOVE(SHEER_COLD), EC_WORD_GENIUS},
{EC_WORD_WON_T, EC_WORD_SOMEONE, EC_WORD_COOL, EC_WORD_SHOW, EC_WORD_UP, EC_WORD_QUES},
- {EC_WORD_BATTLE, EC_WORD_GAME, EC_WORD_IS, EC_WORD_AWESOME, EC_WORD_EXCL, 0xFFFF},
+ {EC_WORD_BATTLE, EC_WORD_GAME, EC_WORD_IS, EC_WORD_AWESOME, EC_WORD_EXCL, EC_EMPTY_WORD},
{EC_WORD_I, EC_WORD_CAN_T, EC_WORD_TAKE, EC_WORD_THIS, EC_WORD_ANY, EC_WORD_MORE},
{EC_WORD_I, EC_WORD_DON_T, EC_WORD_KNOW, EC_WORD_IF, EC_WORD_IT_S, EC_WORD_OKAY},
{EC_WORD_OH, EC_WORD_NO, EC_WORD_EXCL, EC_WORD_NOT, EC_WORD_ANOTHER, EC_WORD_TRAINER},
{EC_WORD_IT, EC_WORD_HAS, EC_WORD_TO, EC_WORD_BE, EC_WORD_LEFT, EC_WORD_NEXT},
{EC_WORD_IT, EC_WORD_MUST_BE, EC_WORD_OVER, EC_WORD_SOON, EC_WORD_RIGHT, EC_WORD_QUES},
- {EC_WORD_THIS, EC_WORD_IS, EC_WORD_TOTALLY, EC_WORD_EASY, EC_WORD_ISN_T_IT_QUES, 0xFFFF},
- {EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_TO, EC_WORD_POWER, EC_WORD_ON, 0xFFFF},
+ {EC_WORD_THIS, EC_WORD_IS, EC_WORD_TOTALLY, EC_WORD_EASY, EC_WORD_ISN_T_IT_QUES, EC_EMPTY_WORD},
+ {EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_TO, EC_WORD_POWER, EC_WORD_ON, EC_EMPTY_WORD},
{EC_WORD_THERE, EC_WORD_IS, EC_WORD_NO, EC_WORD_GIVE_UP, EC_WORD_IN, EC_WORD_ME},
{EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_GOING, EC_WORD_TO, EC_WORD_MAKE, EC_WORD_IT},
{EC_WORD_GO, EC_WORD_ON, EC_WORD_I, EC_WORD_CAN_T, EC_WORD_ANY, EC_WORD_MORE},
- {EC_WORD_A, EC_WORD_TRAINER, EC_WORD_AFTER, EC_WORD_ANOTHER, EC_WORD_ELLIPSIS, 0xFFFF},
+ {EC_WORD_A, EC_WORD_TRAINER, EC_WORD_AFTER, EC_WORD_ANOTHER, EC_WORD_ELLIPSIS, EC_EMPTY_WORD},
{EC_WORD_DO, EC_WORD_YOU, EC_WORD_LIKE, EC_WORD_STEEL, EC_WORD_POKEMON, EC_WORD_QUES},
- {EC_WORD_EVERY, EC_WORD_TRAINER, EC_WORD_HERE, EC_WORD_IS, EC_WORD_TOO_WEAK, 0xFFFF},
+ {EC_WORD_EVERY, EC_WORD_TRAINER, EC_WORD_HERE, EC_WORD_IS, EC_WORD_TOO_WEAK, EC_EMPTY_WORD},
{EC_WORD_YOU, EC_WORD_THINK, EC_WORD_THIS, EC_WORD_IS, EC_WORD_EASY, EC_WORD_QUES},
{EC_WORD_WHAT, EC_WORD_WILL, EC_WORD_COME, EC_WORD_AFTER, EC_WORD_THIS, EC_WORD_QUES},
- {EC_WORD_I_AM, EC_WORD_JUST, EC_WORD_SO, EC_WORD_CONFUSED, EC_WORD_EXCL, 0xFFFF},
+ {EC_WORD_I_AM, EC_WORD_JUST, EC_WORD_SO, EC_WORD_CONFUSED, EC_WORD_EXCL, EC_EMPTY_WORD},
{EC_WORD_I, EC_WORD_JUST, EC_WORD_WANT, EC_WORD_TO, EC_WORD_GO_HOME, EC_WORD_ELLIPSIS},
{EC_WORD_YEEHAW_EXCL, EC_WORD_THIS, EC_WORD_PLACE, EC_WORD_IS, EC_WORD_A, EC_WORD_PUSHOVER},
{EC_WORD_I, EC_WORD_HAVEN_T, EC_WORD_BEEN, EC_WORD_IN, EC_WORD_A, EC_WORD_BATTLE},
diff --git a/src/data/bard_music/bard_sounds.h b/src/data/bard_music/bard_sounds.h
index 1ec1f0d97..1dd5c7f56 100644
--- a/src/data/bard_music/bard_sounds.h
+++ b/src/data/bard_music/bard_sounds.h
@@ -25,28 +25,28 @@
#include "trendysaying.h"
const struct BardSound (*const gBardSoundsTable[EC_NUM_GROUPS])[6] = {
- [EC_GROUP_POKEMON] = NULL, // Handled by gBardSounds_Pokemon
- [EC_GROUP_TRAINER] = gBardSounds_Trainer,
- [EC_GROUP_STATUS] = gBardSounds_Status,
- [EC_GROUP_BATTLE] = gBardSounds_Battle,
- [EC_GROUP_GREETINGS] = gBardSounds_Greetings,
- [EC_GROUP_PEOPLE] = gBardSounds_People,
- [EC_GROUP_VOICES] = gBardSounds_Voices,
- [EC_GROUP_SPEECH] = gBardSounds_Speech,
- [EC_GROUP_ENDINGS] = gBardSounds_Endings,
- [EC_GROUP_FEELINGS] = gBardSounds_Feelings,
- [EC_GROUP_CONDITIONS] = gBardSounds_Conditions,
- [EC_GROUP_ACTIONS] = gBardSounds_Actions,
- [EC_GROUP_LIFESTYLE] = gBardSounds_Lifestyle,
- [EC_GROUP_HOBBIES] = gBardSounds_Hobbies,
- [EC_GROUP_TIME] = gBardSounds_Time,
- [EC_GROUP_MISC] = gBardSounds_Misc,
- [EC_GROUP_ADJECTIVES] = gBardSounds_Adjectives,
- [EC_GROUP_EVENTS] = gBardSounds_Events,
- [EC_GROUP_MOVE_1] = NULL, // Handled by gBardSounds_Moves
- [EC_GROUP_MOVE_2] = NULL, // Handled by gBardSounds_Moves
- [EC_GROUP_TRENDY_SAYING] = gBardSounds_TrendySaying,
- [EC_GROUP_POKEMON_2] = NULL // Handled by gBardSounds_Pokemon
+ [EC_GROUP_POKEMON] = NULL, // Handled by gBardSounds_Pokemon
+ [EC_GROUP_TRAINER] = gBardSounds_Trainer,
+ [EC_GROUP_STATUS] = gBardSounds_Status,
+ [EC_GROUP_BATTLE] = gBardSounds_Battle,
+ [EC_GROUP_GREETINGS] = gBardSounds_Greetings,
+ [EC_GROUP_PEOPLE] = gBardSounds_People,
+ [EC_GROUP_VOICES] = gBardSounds_Voices,
+ [EC_GROUP_SPEECH] = gBardSounds_Speech,
+ [EC_GROUP_ENDINGS] = gBardSounds_Endings,
+ [EC_GROUP_FEELINGS] = gBardSounds_Feelings,
+ [EC_GROUP_CONDITIONS] = gBardSounds_Conditions,
+ [EC_GROUP_ACTIONS] = gBardSounds_Actions,
+ [EC_GROUP_LIFESTYLE] = gBardSounds_Lifestyle,
+ [EC_GROUP_HOBBIES] = gBardSounds_Hobbies,
+ [EC_GROUP_TIME] = gBardSounds_Time,
+ [EC_GROUP_MISC] = gBardSounds_Misc,
+ [EC_GROUP_ADJECTIVES] = gBardSounds_Adjectives,
+ [EC_GROUP_EVENTS] = gBardSounds_Events,
+ [EC_GROUP_MOVE_1] = NULL, // Handled by gBardSounds_Moves
+ [EC_GROUP_MOVE_2] = NULL, // Handled by gBardSounds_Moves
+ [EC_GROUP_TRENDY_SAYING] = gBardSounds_TrendySaying,
+ [EC_GROUP_POKEMON_NATIONAL] = NULL // Handled by gBardSounds_Pokemon
};
#endif //GUARD_BARD_SOUNDS_TABLE_H
diff --git a/src/data/battle_frontier/apprentice.h b/src/data/battle_frontier/apprentice.h
index 349dc9619..144129743 100644
--- a/src/data/battle_frontier/apprentice.h
+++ b/src/data/battle_frontier/apprentice.h
@@ -326,7 +326,7 @@ const struct ApprenticeTrainer gApprentices[NUM_APPRENTICES] =
.facilityClass = FACILITY_CLASS_LASS,
.species = {SPECIES_SWALOT, SPECIES_XATU, SPECIES_ALTARIA, SPECIES_GOLDUCK, SPECIES_FLYGON, SPECIES_ALAKAZAM, SPECIES_GARDEVOIR, SPECIES_WAILORD, SPECIES_GRUMPIG, SPECIES_MIGHTYENA},
.id = 3,
- .speechLost = {EC_WORD_IS, EC_WORD_THIS, EC_WORD_TOO, EC_WORD_MUCH, EC_WORD_QUES, 0xFFFF},
+ .speechLost = {EC_WORD_IS, EC_WORD_THIS, EC_WORD_TOO, EC_WORD_MUCH, EC_WORD_QUES, EC_EMPTY_WORD},
},
{
.name = {_("ヨウカ"), _("MACY"), _("AMELIE"), _("CLEO"), _("MARIA"), _("ELISA")},
@@ -358,7 +358,7 @@ const struct ApprenticeTrainer gApprentices[NUM_APPRENTICES] =
.facilityClass = FACILITY_CLASS_BEAUTY,
.species = {SPECIES_NINETALES, SPECIES_ALAKAZAM, SPECIES_SCEPTILE, SPECIES_SALAMENCE, SPECIES_GOLDUCK, SPECIES_MAWILE, SPECIES_WEEZING, SPECIES_LANTURN, SPECIES_GARDEVOIR, SPECIES_MILOTIC},
.id = 7,
- .speechLost = {EC_WORD_YOU_RE, EC_WORD_STRONG, EC_WORD_AREN_T, EC_WORD_YOU, EC_WORD_QUES, 0xFFFF},
+ .speechLost = {EC_WORD_YOU_RE, EC_WORD_STRONG, EC_WORD_AREN_T, EC_WORD_YOU, EC_WORD_QUES, EC_EMPTY_WORD},
},
{
.name = {_("スミレ"), _("ANNIE"), _("ANNIE"), _("IMELDA"), _("INES"), _("ROSA")},
@@ -374,7 +374,7 @@ const struct ApprenticeTrainer gApprentices[NUM_APPRENTICES] =
.facilityClass = FACILITY_CLASS_HIKER,
.species = {SPECIES_SKARMORY, SPECIES_GOLEM, SPECIES_BLAZIKEN, SPECIES_CAMERUPT, SPECIES_DONPHAN, SPECIES_MUK, SPECIES_SALAMENCE, SPECIES_TROPIUS, SPECIES_SOLROCK, SPECIES_RHYDON},
.id = 9,
- .speechLost = {EC_WORD_WE, EC_WORD_WERE, EC_WORD_JUST, EC_WORD_SHREDDED, EC_WORD_ELLIPSIS, 0xFFFF},
+ .speechLost = {EC_WORD_WE, EC_WORD_WERE, EC_WORD_JUST, EC_WORD_SHREDDED, EC_WORD_ELLIPSIS, EC_EMPTY_WORD},
},
{
.name = {_("トウゾウ"), _("DALLAS"), _("BRUNO"), _("LEARCO"), _("ANSGAR"), _("MANOLO")},
@@ -382,7 +382,7 @@ const struct ApprenticeTrainer gApprentices[NUM_APPRENTICES] =
.facilityClass = FACILITY_CLASS_FISHERMAN,
.species = {SPECIES_SEAKING, SPECIES_STARMIE, SPECIES_GOLDUCK, SPECIES_TENTACRUEL, SPECIES_OCTILLERY, SPECIES_GOREBYSS, SPECIES_GLALIE, SPECIES_WAILORD, SPECIES_SHARPEDO, SPECIES_KINGDRA},
.id = 10,
- .speechLost = {EC_WORD_YOUR, EC_WORD_WIN, EC_WORD_ANGERS, EC_WORD_ME, EC_WORD_EXCL, 0xFFFF},
+ .speechLost = {EC_WORD_YOUR, EC_WORD_WIN, EC_WORD_ANGERS, EC_WORD_ME, EC_WORD_EXCL, EC_EMPTY_WORD},
},
{
.name = {_("セイヤ"), _("FRANK"), _("FRANK"), _("OLINDO"), _("FRANK"), _("MAURO")},
diff --git a/src/data/battle_frontier/battle_frontier_trainers.h b/src/data/battle_frontier/battle_frontier_trainers.h
index bbd88d76f..1cae890c2 100644
--- a/src/data/battle_frontier/battle_frontier_trainers.h
+++ b/src/data/battle_frontier/battle_frontier_trainers.h
@@ -4,15 +4,15 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.facilityClass = FACILITY_CLASS_YOUNGSTER,
.trainerName = _("BRADY"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_NEVER, EC_WORD_GOING, EC_WORD_TO, EC_WORD_LOSE, EC_WORD_EXCL},
- .speechWin = {EC_WORD_I_AM, EC_WORD_STRONG, EC_WORD_AREN_T, EC_WORD_I, EC_WORD_QUES, 0xFFFF},
- .speechLose = {EC_WORD_WHAT, EC_WORD_QUES, 0xFFFF, EC_WORD_BUT, EC_WORD_HOW, EC_WORD_QUES},
+ .speechWin = {EC_WORD_I_AM, EC_WORD_STRONG, EC_WORD_AREN_T, EC_WORD_I, EC_WORD_QUES, EC_EMPTY_WORD},
+ .speechLose = {EC_WORD_WHAT, EC_WORD_QUES, EC_EMPTY_WORD, EC_WORD_BUT, EC_WORD_HOW, EC_WORD_QUES},
.monSet = gBattleFrontierTrainerMons_Brady
},
[FRONTIER_TRAINER_CONNER] = {
.facilityClass = FACILITY_CLASS_YOUNGSTER,
.trainerName = _("CONNER"),
- .speechBefore = {EC_WORD_LOSING, EC_WORD_DOESN_T, EC_WORD_BUG, EC_WORD_ME, 0xFFFF, 0xFFFF},
- .speechWin = {EC_WORD_A, EC_WORD_WIN, EC_WORD_IS, EC_WORD_JUST, EC_WORD_AWESOME, 0xFFFF},
+ .speechBefore = {EC_WORD_LOSING, EC_WORD_DOESN_T, EC_WORD_BUG, EC_WORD_ME, EC_EMPTY_WORD, EC_EMPTY_WORD},
+ .speechWin = {EC_WORD_A, EC_WORD_WIN, EC_WORD_IS, EC_WORD_JUST, EC_WORD_AWESOME, EC_EMPTY_WORD},
.speechLose = {EC_WORD_DARN, EC_WORD_ELLIPSIS, EC_WORD_LOSING, EC_WORD_DOES, EC_WORD_BUG, EC_WORD_ME},
.monSet = gBattleFrontierTrainerMons_Conner
},
@@ -20,7 +20,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.facilityClass = FACILITY_CLASS_YOUNGSTER,
.trainerName = _("BRADLEY"),
.speechBefore = {EC_WORD_HEY_THERE, EC_WORD_EXCL, EC_WORD_YOU_RE, EC_WORD_MY, EC_WORD_OPPONENT, EC_WORD_TODAY},
- .speechWin = {EC_WORD_HAHAHA, EC_WORD_EXCL, 0xFFFF, EC_WORD_SEE_YA, EC_WORD_LATER, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_HAHAHA, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_SEE_YA, EC_WORD_LATER, EC_WORD_EXCL},
.speechLose = {EC_WORD_TOMORROW, EC_WORD_IS, EC_WORD_WHEN, EC_WORD_WE, EC_WORD_REALLY, EC_WORD_BATTLE},
.monSet = gBattleFrontierTrainerMons_Bradley
},
@@ -44,7 +44,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.facilityClass = FACILITY_CLASS_LASS,
.trainerName = _("PEGGY"),
.speechBefore = {EC_WORD_GET, EC_WORD_READY, EC_WORD_TO, EC_WORD_BE, EC_WORD_DESTROYED, EC_WORD_EXCL},
- .speechWin = {EC_WORD_HAHAHA, EC_WORD_EXCL_EXCL, 0xFFFF, EC_WORD_I_AM, EC_WORD_LOLLING, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_HAHAHA, EC_WORD_EXCL_EXCL, EC_EMPTY_WORD, EC_WORD_I_AM, EC_WORD_LOLLING, EC_WORD_EXCL},
.speechLose = {EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_SAD, EC_WORD_THANKS, EC_WORD_TO, EC_WORD_YOU},
.monSet = gBattleFrontierTrainerMons_Peggy
},
@@ -52,7 +52,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.facilityClass = FACILITY_CLASS_SCHOOL_KID_M,
.trainerName = _("KEITH"),
.speechBefore = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_JUST, EC_WORD_STUDY, EC_WORD_YOU, EC_WORD_KNOW},
- .speechWin = {EC_WORD_YOU, EC_WORD_DON_T, EC_WORD_STUDY, EC_WORD_ENOUGH, EC_WORD_ELLIPSIS, 0xFFFF},
+ .speechWin = {EC_WORD_YOU, EC_WORD_DON_T, EC_WORD_STUDY, EC_WORD_ENOUGH, EC_WORD_ELLIPSIS, EC_EMPTY_WORD},
.speechLose = {EC_WORD_I, EC_WORD_NEED, EC_WORD_TO, EC_WORD_STUDY, EC_WORD_MORE, EC_WORD_ELLIPSIS},
.monSet = gBattleFrontierTrainerMons_Keith
},
@@ -60,15 +60,15 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.facilityClass = FACILITY_CLASS_SCHOOL_KID_M,
.trainerName = _("GRAYSON"),
.speechBefore = {EC_WORD_A, EC_WORD_POKEMON, EC_WORD_BATTLE, EC_WORD_ISN_T, EC_WORD_CHILD_S_PLAY, EC_WORD_EXCL},
- .speechWin = {EC_WORD_YOU_RE, EC_WORD_DONE, EC_WORD_AREN_T, EC_WORD_YOU, EC_WORD_QUES, 0xFFFF},
+ .speechWin = {EC_WORD_YOU_RE, EC_WORD_DONE, EC_WORD_AREN_T, EC_WORD_YOU, EC_WORD_QUES, EC_EMPTY_WORD},
.speechLose = {EC_WORD_WE, EC_WORD_WERE, EC_WORD_LIKE, EC_WORD_TOYS, EC_WORD_TO, EC_WORD_YOU},
.monSet = gBattleFrontierTrainerMons_Grayson
},
[FRONTIER_TRAINER_GLENN] = {
.facilityClass = FACILITY_CLASS_SCHOOL_KID_M,
.trainerName = _("GLENN"),
- .speechBefore = {EC_WORD_I, EC_WORD_WOULD, EC_WORD_BE, EC_WORD_COOL, EC_WORD_IF_I_WIN, 0xFFFF},
- .speechWin = {EC_WORD_COOL, EC_WORD_EXCL, 0xFFFF, EC_WORD_THAT_S, EC_WORD_WHAT, EC_WORD_I_AM},
+ .speechBefore = {EC_WORD_I, EC_WORD_WOULD, EC_WORD_BE, EC_WORD_COOL, EC_WORD_IF_I_WIN, EC_EMPTY_WORD},
+ .speechWin = {EC_WORD_COOL, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_THAT_S, EC_WORD_WHAT, EC_WORD_I_AM},
.speechLose = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_GOING, EC_WORD_TO, EC_WORD_BE, EC_WORD_COOL},
.monSet = gBattleFrontierTrainerMons_Glenn
},
@@ -92,7 +92,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.facilityClass = FACILITY_CLASS_SCHOOL_KID_F,
.trainerName = _("ZOEY"),
.speechBefore = {EC_WORD_PLEASE, EC_WORD_BATTLE, EC_WORD_LIKE, EC_WORD_YOU, EC_WORD_MEAN, EC_WORD_IT},
- .speechWin = {EC_WORD_THANK_YOU, EC_WORD_EXCL_EXCL, 0xFFFF, EC_WORD_THANK_YOU, EC_WORD_SO, EC_WORD_MUCH},
+ .speechWin = {EC_WORD_THANK_YOU, EC_WORD_EXCL_EXCL, EC_EMPTY_WORD, EC_WORD_THANK_YOU, EC_WORD_SO, EC_WORD_MUCH},
.speechLose = {EC_WORD_WERE, EC_WORD_YOU, EC_WORD_REALLY, EC_WORD_BEING, EC_WORD_SERIOUS, EC_WORD_QUES},
.monSet = gBattleFrontierTrainerMons_Zoey
},
@@ -100,8 +100,8 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.facilityClass = FACILITY_CLASS_RICH_BOY,
.trainerName = _("MANUEL"),
.speechBefore = {EC_WORD_ME, EC_WORD_LOSE, EC_WORD_QUES, EC_WORD_THAT_S, EC_WORD_PREPOSTEROUS, EC_WORD_EXCL},
- .speechWin = {EC_WORD_NATURALLY, EC_WORD_I, EC_WORD_WIN, 0xFFFF, 0xFFFF, 0xFFFF},
- .speechLose = {EC_WORD_WAAAH, EC_WORD_EXCL, 0xFFFF, EC_WORD_I, EC_WORD_LOST, EC_WORD_MOTHER},
+ .speechWin = {EC_WORD_NATURALLY, EC_WORD_I, EC_WORD_WIN, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_EMPTY_WORD},
+ .speechLose = {EC_WORD_WAAAH, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_I, EC_WORD_LOST, EC_WORD_MOTHER},
.monSet = gBattleFrontierTrainerMons_Manuel
},
[FRONTIER_TRAINER_RUSS] = {
@@ -115,16 +115,16 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
[FRONTIER_TRAINER_DUSTIN] = {
.facilityClass = FACILITY_CLASS_RICH_BOY,
.trainerName = _("DUSTIN"),
- .speechBefore = {EC_WORD_I, EC_WORD_REALLY, EC_WORD_LIKE, EC_WORD_COOL, EC_WORD_POKEMON, 0xFFFF},
- .speechWin = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_MYSELF, EC_WORD_WHEN_I_WIN, EC_WORD_EXCL, 0xFFFF},
- .speechLose = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_MYSELF, EC_WORD_IF_I_LOSE, EC_WORD_TOO, 0xFFFF},
+ .speechBefore = {EC_WORD_I, EC_WORD_REALLY, EC_WORD_LIKE, EC_WORD_COOL, EC_WORD_POKEMON, EC_EMPTY_WORD},
+ .speechWin = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_MYSELF, EC_WORD_WHEN_I_WIN, EC_WORD_EXCL, EC_EMPTY_WORD},
+ .speechLose = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_MYSELF, EC_WORD_IF_I_LOSE, EC_WORD_TOO, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Dustin
},
[FRONTIER_TRAINER_TINA] = {
.facilityClass = FACILITY_CLASS_LADY,
.trainerName = _("TINA"),
.speechBefore = {EC_WORD_IF_I_WIN, EC_WORD_YOU, EC_WORD_CAN, EC_WORD_HAVE, EC_WORD_A, EC_MOVE2(SWEET_KISS)},
- .speechWin = {EC_WORD_HERE_IT_IS, EC_WORD_YOUR, EC_MOVE2(SWEET_KISS), EC_WORD_FROM, EC_WORD_MY, EC_POKEMON2(JYNX)},
+ .speechWin = {EC_WORD_HERE_IT_IS, EC_WORD_YOUR, EC_MOVE2(SWEET_KISS), EC_WORD_FROM, EC_WORD_MY, EC_POKEMON_NATIONAL(JYNX)},
.speechLose = {EC_WORD_YOU, EC_WORD_WANT, EC_WORD_A, EC_MOVE(SWIFT), EC_MOVE2(MEGA_KICK), EC_WORD_INSTEAD},
.monSet = gBattleFrontierTrainerMons_Tina
},
@@ -133,14 +133,14 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.trainerName = _("GILLIAN"),
.speechBefore = {EC_WORD_THE, EC_WORD_GOURMET, EC_WORD_THING, EC_WORD_IS, EC_WORD_SO, EC_WORD_YESTERDAY},
.speechWin = {EC_WORD_POKEMON, EC_WORD_NEVER, EC_WORD_GO, EC_WORD_OUT, EC_WORD_OF, EC_WORD_FASHION},
- .speechLose = {EC_WORD_LOSING, EC_WORD_DOESN_T, EC_WORD_DISAPPOINT, EC_WORD_ME, 0xFFFF, 0xFFFF},
+ .speechLose = {EC_WORD_LOSING, EC_WORD_DOESN_T, EC_WORD_DISAPPOINT, EC_WORD_ME, EC_EMPTY_WORD, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Gillian
},
[FRONTIER_TRAINER_ZOE] = {
.facilityClass = FACILITY_CLASS_LADY,
.trainerName = _("ZOE"),
.speechBefore = {EC_WORD_I, EC_WORD_HAVEN_T, EC_WORD_A, EC_WORD_WORRY, EC_WORD_AT, EC_WORD_ALL},
- .speechWin = {EC_WORD_LIFE, EC_WORD_IS, EC_WORD_ALWAYS, EC_WORD_GOOD, EC_WORD_TO_ME, 0xFFFF},
+ .speechWin = {EC_WORD_LIFE, EC_WORD_IS, EC_WORD_ALWAYS, EC_WORD_GOOD, EC_WORD_TO_ME, EC_EMPTY_WORD},
.speechLose = {EC_WORD_I, EC_WORD_WORRY, EC_WORD_ABOUT, EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_SKILL},
.monSet = gBattleFrontierTrainerMons_Zoe
},
@@ -156,7 +156,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.facilityClass = FACILITY_CLASS_CAMPER,
.trainerName = _("AL"),
.speechBefore = {EC_WORD_YOUR, EC_WORD_LOOK, EC_WORD_SAYS, EC_WORD_YOU_RE, EC_WORD_REALLY, EC_WORD_TOUGH},
- .speechWin = {EC_WORD_IT_S, EC_WORD_ME, EC_WORD_WHO_IS, EC_WORD_REALLY, EC_WORD_TOUGH, 0xFFFF},
+ .speechWin = {EC_WORD_IT_S, EC_WORD_ME, EC_WORD_WHO_IS, EC_WORD_REALLY, EC_WORD_TOUGH, EC_EMPTY_WORD},
.speechLose = {EC_WORD_I_AM, EC_WORD_RIGHT, EC_WORD_EXCL, EC_WORD_YOU_RE, EC_WORD_REALLY, EC_WORD_TOUGH},
.monSet = gBattleFrontierTrainerMons_Al
},
@@ -165,15 +165,15 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.trainerName = _("MITCH"),
.speechBefore = {EC_WORD_MOTHER, EC_WORD_NATURE, EC_WORD_IS, EC_WORD_MY, EC_WORD_ALLY, EC_WORD_EXCL},
.speechWin = {EC_WORD_WAS, EC_WORD_THAT, EC_WORD_ENOUGH, EC_WORD_FOR, EC_WORD_YOU, EC_WORD_QUES},
- .speechLose = {EC_WORD_MOTHER, EC_WORD_NATURE, EC_WORD_DIDN_T, EC_WORD_LET_ME_WIN, EC_WORD_QUES, 0xFFFF},
+ .speechLose = {EC_WORD_MOTHER, EC_WORD_NATURE, EC_WORD_DIDN_T, EC_WORD_LET_ME_WIN, EC_WORD_QUES, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Mitch
},
[FRONTIER_TRAINER_ANNE] = {
.facilityClass = FACILITY_CLASS_PICNICKER,
.trainerName = _("ANNE"),
.speechBefore = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_WAIT, EC_WORD_LET_S, EC_WORD_BATTLE, EC_WORD_NOW},
- .speechWin = {EC_WORD_MY, EC_WORD_HAPPINESS, EC_WORD_IS, EC_WORD_OVERWHELMING, EC_WORD_EXCL, 0xFFFF},
- .speechLose = {EC_WORD_YOU_VE, EC_WORD_DESTROYED, EC_WORD_MY, EC_WORD_HAPPINESS, EC_WORD_ELLIPSIS, 0xFFFF},
+ .speechWin = {EC_WORD_MY, EC_WORD_HAPPINESS, EC_WORD_IS, EC_WORD_OVERWHELMING, EC_WORD_EXCL, EC_EMPTY_WORD},
+ .speechLose = {EC_WORD_YOU_VE, EC_WORD_DESTROYED, EC_WORD_MY, EC_WORD_HAPPINESS, EC_WORD_ELLIPSIS, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Anne
},
[FRONTIER_TRAINER_ALIZE] = {
@@ -203,15 +203,15 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
[FRONTIER_TRAINER_JASON] = {
.facilityClass = FACILITY_CLASS_TUBER_M,
.trainerName = _("JASON"),
- .speechBefore = {EC_WORD_TEACH, EC_WORD_ME, EC_WORD_A, EC_WORD_GOOD, EC_WORD_STRATEGY, 0xFFFF},
- .speechWin = {EC_WORD_THAT_WAS, EC_WORD_YOUR, EC_WORD_GOOD, EC_WORD_STRATEGY, EC_WORD_QUES_EXCL, 0xFFFF},
+ .speechBefore = {EC_WORD_TEACH, EC_WORD_ME, EC_WORD_A, EC_WORD_GOOD, EC_WORD_STRATEGY, EC_EMPTY_WORD},
+ .speechWin = {EC_WORD_THAT_WAS, EC_WORD_YOUR, EC_WORD_GOOD, EC_WORD_STRATEGY, EC_WORD_QUES_EXCL, EC_EMPTY_WORD},
.speechLose = {EC_WORD_WOW, EC_WORD_THAT, EC_WORD_IS, EC_WORD_AN, EC_WORD_AWESOME, EC_WORD_STRATEGY},
.monSet = gBattleFrontierTrainerMons_Jason
},
[FRONTIER_TRAINER_JOHN] = {
.facilityClass = FACILITY_CLASS_TUBER_M,
.trainerName = _("JOHN"),
- .speechBefore = {EC_WORD_I_AM, EC_WORD_A, EC_WORD_PRETTY, EC_WORD_NEW, EC_WORD_TRAINER, 0xFFFF},
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_A, EC_WORD_PRETTY, EC_WORD_NEW, EC_WORD_TRAINER, EC_EMPTY_WORD},
.speechWin = {EC_WORD_I_AM, EC_WORD_NEW, EC_WORD_BUT, EC_WORD_I, EC_WORD_WON, EC_WORD_EXCL},
.speechLose = {EC_WORD_I_AM, EC_WORD_NEW, EC_WORD_SO, EC_WORD_WHAT, EC_WORD_IF_I_LOSE, EC_WORD_QUES},
.monSet = gBattleFrontierTrainerMons_John
@@ -237,14 +237,14 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.trainerName = _("CARLIE"),
.speechBefore = {EC_WORD_MY, EC_WORD_SUMMER, EC_WORD_VACATION, EC_WORD_IS, EC_WORD_FOR, EC_WORD_POKEMON},
.speechWin = {EC_WORD_MY, EC_WORD_SUMMER, EC_WORD_VACATION, EC_WORD_WILL, EC_WORD_BE, EC_WORD_AWESOME},
- .speechLose = {EC_WORD_I, EC_WORD_CAN_T_WIN, EC_WORD_LIKE, EC_WORD_THIS, EC_WORD_ELLIPSIS, 0xFFFF},
+ .speechLose = {EC_WORD_I, EC_WORD_CAN_T_WIN, EC_WORD_LIKE, EC_WORD_THIS, EC_WORD_ELLIPSIS, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Carlie
},
[FRONTIER_TRAINER_GORDON] = {
.facilityClass = FACILITY_CLASS_SWIMMER_M,
.trainerName = _("GORDON"),
- .speechBefore = {EC_WORD_VICTORY, EC_WORD_WILL, EC_WORD_COME, EC_WORD_TO_ME, EC_WORD_EXCL, 0xFFFF},
- .speechWin = {EC_WORD_OH_YEAH, EC_WORD_EXCL, 0xFFFF, EC_WORD_I, EC_WORD_REALLY, EC_WORD_WON},
+ .speechBefore = {EC_WORD_VICTORY, EC_WORD_WILL, EC_WORD_COME, EC_WORD_TO_ME, EC_WORD_EXCL, EC_EMPTY_WORD},
+ .speechWin = {EC_WORD_OH_YEAH, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_I, EC_WORD_REALLY, EC_WORD_WON},
.speechLose = {EC_WORD_NOTHING, EC_WORD_IS, EC_WORD_WORKING, EC_WORD_OUT, EC_WORD_FOR, EC_WORD_ME},
.monSet = gBattleFrontierTrainerMons_Gordon
},
@@ -268,7 +268,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.facilityClass = FACILITY_CLASS_SWIMMER_F,
.trainerName = _("CIERRA"),
.speechBefore = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_TO, EC_WORD_SYNCHRONIZE, EC_WORD_MY, EC_WORD_SWIFT_SWIM},
- .speechWin = {EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_SYNCHRONIZE, EC_WORD_WITH, EC_WORD_ME, 0xFFFF},
+ .speechWin = {EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_SYNCHRONIZE, EC_WORD_WITH, EC_WORD_ME, EC_EMPTY_WORD},
.speechLose = {EC_WORD_I, EC_WORD_NEED, EC_WORD_TO, EC_WORD_SYNCHRONIZE, EC_WORD_BETTER, EC_WORD_ELLIPSIS},
.monSet = gBattleFrontierTrainerMons_Cierra
},
@@ -324,7 +324,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.facilityClass = FACILITY_CLASS_POKEFAN_F,
.trainerName = _("AMANDA"),
.speechBefore = {EC_WORD_I, EC_WORD_COME, EC_WORD_FROM, EC_WORD_A, EC_WORD_TRAINER, EC_WORD_FAMILY},
- .speechWin = {EC_WORD_I, EC_WORD_WILL, EC_WORD_TREASURE, EC_WORD_THIS, EC_WORD_WIN, 0xFFFF},
+ .speechWin = {EC_WORD_I, EC_WORD_WILL, EC_WORD_TREASURE, EC_WORD_THIS, EC_WORD_WIN, EC_EMPTY_WORD},
.speechLose = {EC_WORD_I, EC_WORD_WANT, EC_WORD_TO, EC_WORD_GO_HOME, EC_WORD_RIGHT, EC_WORD_NOW},
.monSet = gBattleFrontierTrainerMons_Amanda
},
@@ -340,7 +340,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.facilityClass = FACILITY_CLASS_PKMN_BREEDER_M,
.trainerName = _("RAFAEL"),
.speechBefore = {EC_WORD_COME_ON, EC_WORD_EXCL, EC_WORD_LET_S, EC_WORD_SEE, EC_WORD_SOME, EC_WORD_SPIRIT},
- .speechWin = {EC_WORD_THAT_S_IT_EXCL, EC_WORD_THAT_S, EC_WORD_THE, EC_WORD_SPIRIT, EC_WORD_EXCL, 0xFFFF},
+ .speechWin = {EC_WORD_THAT_S_IT_EXCL, EC_WORD_THAT_S, EC_WORD_THE, EC_WORD_SPIRIT, EC_WORD_EXCL, EC_EMPTY_WORD},
.speechLose = {EC_WORD_WELL, EC_WORD_SO, EC_WORD_MUCH, EC_WORD_FOR, EC_WORD_OUR, EC_WORD_SPIRIT},
.monSet = gBattleFrontierTrainerMons_Rafael
},
@@ -356,15 +356,15 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.facilityClass = FACILITY_CLASS_PKMN_BREEDER_M,
.trainerName = _("PAYTON"),
.speechBefore = {EC_WORD_I, EC_WORD_TRAIN, EC_WORD_FROM, EC_WORD_THE, EC_WORD_EGG, EC_WORD_UP},
- .speechWin = {EC_WORD_WELL, EC_WORD_DONE, EC_WORD_EXCL, 0xFFFF, 0xFFFF, 0xFFFF},
- .speechLose = {EC_WORD_THAT_WAS, EC_WORD_A, EC_MOVE2(SOFT_BOILED), EC_WORD_LOSS, EC_WORD_ELLIPSIS, 0xFFFF},
+ .speechWin = {EC_WORD_WELL, EC_WORD_DONE, EC_WORD_EXCL, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_EMPTY_WORD},
+ .speechLose = {EC_WORD_THAT_WAS, EC_WORD_A, EC_MOVE2(SOFT_BOILED), EC_WORD_LOSS, EC_WORD_ELLIPSIS, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Payton
},
[FRONTIER_TRAINER_PAMELA] = {
.facilityClass = FACILITY_CLASS_PKMN_BREEDER_F,
.trainerName = _("PAMELA"),
.speechBefore = {EC_WORD_ALL, EC_WORD_POKEMON, EC_WORD_ADORE, EC_WORD_A, EC_WORD_KIND, EC_WORD_TRAINER},
- .speechWin = {EC_WORD_IT_S, EC_WORD_TOO, EC_WORD_BAD, EC_WORD_YOU, EC_WORD_LOST, 0xFFFF},
+ .speechWin = {EC_WORD_IT_S, EC_WORD_TOO, EC_WORD_BAD, EC_WORD_YOU, EC_WORD_LOST, EC_EMPTY_WORD},
.speechLose = {EC_WORD_YOU_RE, EC_WORD_KIND, EC_WORD_AND, EC_WORD_YOU_RE, EC_WORD_ALSO, EC_WORD_STRONG},
.monSet = gBattleFrontierTrainerMons_Pamela
},
@@ -379,7 +379,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
[FRONTIER_TRAINER_MARISA] = {
.facilityClass = FACILITY_CLASS_PKMN_BREEDER_F,
.trainerName = _("MARISA"),
- .speechBefore = {EC_WORD_I, EC_WORD_PROMISE, EC_WORD_TO, EC_WORD_BATTLE, EC_WORD_SERIOUSLY, 0xFFFF},
+ .speechBefore = {EC_WORD_I, EC_WORD_PROMISE, EC_WORD_TO, EC_WORD_BATTLE, EC_WORD_SERIOUSLY, EC_EMPTY_WORD},
.speechWin = {EC_WORD_PROMISE, EC_WORD_ME, EC_WORD_YOU, EC_WORD_WILL, EC_WORD_DO, EC_WORD_BETTER},
.speechLose = {EC_WORD_PROMISE, EC_WORD_ME, EC_WORD_ANOTHER, EC_WORD_BATTLE, EC_WORD_PLEASE, EC_WORD_EXCL},
.monSet = gBattleFrontierTrainerMons_Marisa
@@ -397,23 +397,23 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.trainerName = _("YOSHI"),
.speechBefore = {EC_WORD_BUG, EC_WORD_POKEMON, EC_WORD_MAKE, EC_WORD_ME, EC_WORD_FEELING, EC_WORD_LOVEY_DOVEY},
.speechWin = {EC_WORD_BUG, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_THE, EC_WORD_BEST, EC_WORD_EXCL},
- .speechLose = {EC_WORD_YOU_RE, EC_WORD_IGNORANT, EC_WORD_ABOUT, EC_WORD_BUG, EC_WORD_POKEMON, 0xFFFF},
+ .speechLose = {EC_WORD_YOU_RE, EC_WORD_IGNORANT, EC_WORD_ABOUT, EC_WORD_BUG, EC_WORD_POKEMON, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Yoshi
},
[FRONTIER_TRAINER_DESTIN] = {
.facilityClass = FACILITY_CLASS_BUG_CATCHER,
.trainerName = _("DESTIN"),
- .speechBefore = {EC_WORD_IT_S, EC_WORD_WAY, EC_WORD_TOO, EC_WORD_HOT, EC_WORD_HERE, 0xFFFF},
- .speechWin = {EC_WORD_I_AM, EC_WORD_ABOUT, EC_WORD_TO, EC_MOVE(OVERHEAT), 0xFFFF, 0xFFFF},
- .speechLose = {EC_WORD_PLEASE, EC_WORD_I, EC_WORD_NEED, EC_WORD_SOME, EC_WORD_WATER, 0xFFFF},
+ .speechBefore = {EC_WORD_IT_S, EC_WORD_WAY, EC_WORD_TOO, EC_WORD_HOT, EC_WORD_HERE, EC_EMPTY_WORD},
+ .speechWin = {EC_WORD_I_AM, EC_WORD_ABOUT, EC_WORD_TO, EC_MOVE(OVERHEAT), EC_EMPTY_WORD, EC_EMPTY_WORD},
+ .speechLose = {EC_WORD_PLEASE, EC_WORD_I, EC_WORD_NEED, EC_WORD_SOME, EC_WORD_WATER, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Destin
},
[FRONTIER_TRAINER_KEON] = {
.facilityClass = FACILITY_CLASS_NINJA_BOY,
.trainerName = _("KEON"),
- .speechBefore = {EC_WORD_FORGIVE, EC_WORD_ME, EC_WORD_BUT, EC_WORD_HERE_I_COME, EC_WORD_EXCL, 0xFFFF},
+ .speechBefore = {EC_WORD_FORGIVE, EC_WORD_ME, EC_WORD_BUT, EC_WORD_HERE_I_COME, EC_WORD_EXCL, EC_EMPTY_WORD},
.speechWin = {EC_WORD_FORGIVE, EC_WORD_ME, EC_WORD_FOR, EC_WORD_MY, EC_WORD_OVERWHELMING, EC_WORD_POWER},
- .speechLose = {EC_WORD_I_AM, EC_WORD_SORRY, EC_WORD_ELLIPSIS, 0xFFFF, 0xFFFF, 0xFFFF},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_SORRY, EC_WORD_ELLIPSIS, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Keon
},
[FRONTIER_TRAINER_STUART] = {
@@ -429,7 +429,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.trainerName = _("NESTOR"),
.speechBefore = {EC_WORD_SHOW, EC_WORD_ME, EC_WORD_A, EC_WORD_REALLY, EC_WORD_SMOOTH, EC_WORD_MOVE},
.speechWin = {EC_WORD_THERE, EC_WORD_WAS, EC_WORD_NOTHING, EC_WORD_SMOOTH, EC_WORD_ABOUT, EC_WORD_THAT},
- .speechLose = {EC_WORD_YOU, EC_WORD_REALLY, EC_WORD_ARE, EC_WORD_SMOOTH, EC_WORD_EXCL, 0xFFFF},
+ .speechLose = {EC_WORD_YOU, EC_WORD_REALLY, EC_WORD_ARE, EC_WORD_SMOOTH, EC_WORD_EXCL, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Nestor
},
[FRONTIER_TRAINER_DERRICK] = {
@@ -445,13 +445,13 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.trainerName = _("BRYSON"),
.speechBefore = {EC_MOVE2(POISON_POWDER), EC_WORD_IS, EC_WORD_IN, EC_WORD_OUR, EC_MOVE2(COTTON_SPORE), EC_WORD_MOVE},
.speechWin = {EC_WORD_HOW_DO, EC_WORD_YOU, EC_WORD_LIKE, EC_WORD_OUR, EC_MOVE2(POISON_POWDER), EC_WORD_QUES},
- .speechLose = {EC_WORD_MY, EC_MOVE2(COTTON_SPORE), EC_WORD_WAS, EC_WORD_USELESS, 0xFFFF, 0xFFFF},
+ .speechLose = {EC_WORD_MY, EC_MOVE2(COTTON_SPORE), EC_WORD_WAS, EC_WORD_USELESS, EC_EMPTY_WORD, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Bryson
},
[FRONTIER_TRAINER_CLAYTON] = {
.facilityClass = FACILITY_CLASS_BUG_MANIAC,
.trainerName = _("CLAYTON"),
- .speechBefore = {EC_WORD_HUH_QUES, 0xFFFF, 0xFFFF, EC_WORD_WHERE, EC_WORD_IS_IT_QUES, 0xFFFF},
+ .speechBefore = {EC_WORD_HUH_QUES, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_WORD_WHERE, EC_WORD_IS_IT_QUES, EC_EMPTY_WORD},
.speechWin = {EC_WORD_WHERE, EC_WORD_IS_IT_QUES, EC_WORD_I_VE, EC_WORD_LOST, EC_WORD_MY, EC_WORD_POKENAV},
.speechLose = {EC_WORD_WHERE, EC_WORD_IS_IT_QUES, EC_WORD_I_VE, EC_WORD_LOST, EC_WORD_MY, EC_WORD_SENSE},
.monSet = gBattleFrontierTrainerMons_Clayton
@@ -459,7 +459,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
[FRONTIER_TRAINER_TRENTON] = {
.facilityClass = FACILITY_CLASS_FISHERMAN,
.trainerName = _("TRENTON"),
- .speechBefore = {EC_WORD_COME_OVER, EC_WORD_FOR, EC_WORD_SOME, EC_WORD_TASTY, EC_WORD_WATER, 0xFFFF},
+ .speechBefore = {EC_WORD_COME_OVER, EC_WORD_FOR, EC_WORD_SOME, EC_WORD_TASTY, EC_WORD_WATER, EC_EMPTY_WORD},
.speechWin = {EC_WORD_MMM, EC_WORD_DO, EC_WORD_YOU, EC_WORD_WANT, EC_WORD_SOME, EC_WORD_QUES},
.speechLose = {EC_WORD_I, EC_WORD_GOT, EC_WORD_THIS, EC_WORD_TASTY, EC_WORD_WATER, EC_WORD_SHOPPING},
.monSet = gBattleFrontierTrainerMons_Trenton
@@ -475,9 +475,9 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
[FRONTIER_TRAINER_WESLEY] = {
.facilityClass = FACILITY_CLASS_FISHERMAN,
.trainerName = _("WESLEY"),
- .speechBefore = {EC_POKEMON2(MEW), EC_POKEMON2(MEW), EC_WORD_IS, EC_WORD_HOW, EC_WORD_I, EC_WORD_CRY},
+ .speechBefore = {EC_POKEMON_NATIONAL(MEW), EC_POKEMON_NATIONAL(MEW), EC_WORD_IS, EC_WORD_HOW, EC_WORD_I, EC_WORD_CRY},
.speechWin = {EC_WORD_YES, EC_WORD_I, EC_WORD_KNOW, EC_WORD_I_AM, EC_WORD_CUTE, EC_WORD_EXCL},
- .speechLose = {EC_POKEMON2(MEW), EC_POKEMON2(MEW), EC_WORD_EXCL, EC_POKEMON2(MEW), EC_WORD_EXCL_EXCL, 0xFFFF},
+ .speechLose = {EC_POKEMON_NATIONAL(MEW), EC_POKEMON_NATIONAL(MEW), EC_WORD_EXCL, EC_POKEMON_NATIONAL(MEW), EC_WORD_EXCL_EXCL, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Wesley
},
[FRONTIER_TRAINER_ANTON] = {
@@ -491,7 +491,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
[FRONTIER_TRAINER_LAWSON] = {
.facilityClass = FACILITY_CLASS_RUIN_MANIAC,
.trainerName = _("LAWSON"),
- .speechBefore = {EC_WORD_I_AM, EC_WORD_YOUNG, EC_WORD_AT, EC_WORD_HEART, EC_WORD_EXCL, 0xFFFF},
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_YOUNG, EC_WORD_AT, EC_WORD_HEART, EC_WORD_EXCL, EC_EMPTY_WORD},
.speechWin = {EC_WORD_NOT, EC_WORD_COOL, EC_WORD_EXCL, EC_WORD_NOT, EC_WORD_AT, EC_WORD_ALL},
.speechLose = {EC_WORD_I_AM, EC_WORD_OLD, EC_WORD_AND, EC_WORD_FEELING, EC_WORD_SHAKY, EC_WORD_ELLIPSIS},
.monSet = gBattleFrontierTrainerMons_Lawson
@@ -515,16 +515,16 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
[FRONTIER_TRAINER_ADRIAN] = {
.facilityClass = FACILITY_CLASS_COLLECTOR,
.trainerName = _("ADRIAN"),
- .speechBefore = {EC_WORD_YAHOO, EC_WORD_EXCL, 0xFFFF, EC_WORD_YAHOO, EC_WORD_EXCL_EXCL, 0xFFFF},
- .speechWin = {EC_WORD_THANK_YOU, EC_WORD_EXCL, 0xFFFF, EC_WORD_THANK_YOU, EC_WORD_EXCL_EXCL, 0xFFFF},
- .speechLose = {EC_WORD_GOOD_BYE, EC_WORD_EXCL, 0xFFFF, EC_WORD_GOOD_BYE, EC_WORD_EXCL_EXCL, 0xFFFF},
+ .speechBefore = {EC_WORD_YAHOO, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_YAHOO, EC_WORD_EXCL_EXCL, EC_EMPTY_WORD},
+ .speechWin = {EC_WORD_THANK_YOU, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_THANK_YOU, EC_WORD_EXCL_EXCL, EC_EMPTY_WORD},
+ .speechLose = {EC_WORD_GOOD_BYE, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_GOOD_BYE, EC_WORD_EXCL_EXCL, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Adrian
},
[FRONTIER_TRAINER_TRISTAN] = {
.facilityClass = FACILITY_CLASS_COLLECTOR,
.trainerName = _("TRISTAN"),
- .speechBefore = {EC_WORD_CONFUSED, EC_WORD_QUES, 0xFFFF, EC_WORD_I_AM, EC_WORD_A, EC_WORD_GENIUS},
- .speechWin = {EC_WORD_SEE, EC_WORD_QUES, 0xFFFF, EC_WORD_I_AM, EC_WORD_A, EC_WORD_GENIUS},
+ .speechBefore = {EC_WORD_CONFUSED, EC_WORD_QUES, EC_EMPTY_WORD, EC_WORD_I_AM, EC_WORD_A, EC_WORD_GENIUS},
+ .speechWin = {EC_WORD_SEE, EC_WORD_QUES, EC_EMPTY_WORD, EC_WORD_I_AM, EC_WORD_A, EC_WORD_GENIUS},
.speechLose = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_A, EC_WORD_GENIUS, EC_WORD_IN, EC_WORD_BATTLE},
.monSet = gBattleFrontierTrainerMons_Tristan
},
@@ -548,8 +548,8 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.facilityClass = FACILITY_CLASS_PARASOL_LADY,
.trainerName = _("CHELSEA"),
.speechBefore = {EC_WORD_I, EC_WORD_SERIOUSLY, EC_WORD_MEAN, EC_WORD_TO, EC_WORD_WIN, EC_WORD_EXCL},
- .speechWin = {EC_WORD_THAT_WAS, EC_WORD_MY, EC_WORD_WILL, EC_WORD_TO, EC_WORD_WIN, 0xFFFF},
- .speechLose = {EC_WORD_YOU_RE, EC_WORD_FAR, EC_WORD_TOO_STRONG, EC_WORD_FOR, EC_WORD_ME, 0xFFFF},
+ .speechWin = {EC_WORD_THAT_WAS, EC_WORD_MY, EC_WORD_WILL, EC_WORD_TO, EC_WORD_WIN, EC_EMPTY_WORD},
+ .speechLose = {EC_WORD_YOU_RE, EC_WORD_FAR, EC_WORD_TOO_STRONG, EC_WORD_FOR, EC_WORD_ME, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Chelsea
},
[FRONTIER_TRAINER_DANELA] = {
@@ -613,7 +613,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.trainerName = _("JADEN"),
.speechBefore = {EC_WORD_HELLO, EC_WORD_I, EC_WORD_THINK, EC_WORD_I, EC_WORD_ADORE, EC_WORD_YOU},
.speechWin = {EC_WORD_YOU, EC_WORD_MAKE, EC_WORD_ME, EC_MOVE(THRASH), EC_WORD_IN, EC_MOVE2(FRUSTRATION)},
- .speechLose = {EC_WORD_THIS_IS_IT_EXCL, 0xFFFF, 0xFFFF, EC_WORD_GOOD_BYE, EC_WORD_FOREVER, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_THIS_IS_IT_EXCL, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_WORD_GOOD_BYE, EC_WORD_FOREVER, EC_WORD_EXCL},
.monSet = gBattleFrontierTrainerMons_Jaden
},
[FRONTIER_TRAINER_DAKOTA] = {
@@ -621,7 +621,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.trainerName = _("DAKOTA"),
.speechBefore = {EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_TO, EC_WORD_DANCE, EC_WORD_WITH, EC_WORD_POWER},
.speechWin = {EC_WORD_GOT, EC_WORD_IT, EC_WORD_QUES, EC_WORD_DANCE, EC_WORD_WITH, EC_WORD_POWER},
- .speechLose = {EC_WORD_OKAY, EC_WORD_YOU, EC_WORD_UNDERSTAND, EC_WORD_ALL_RIGHT, EC_WORD_EXCL, 0xFFFF},
+ .speechLose = {EC_WORD_OKAY, EC_WORD_YOU, EC_WORD_UNDERSTAND, EC_WORD_ALL_RIGHT, EC_WORD_EXCL, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Dakota
},
[FRONTIER_TRAINER_BRAYDEN] = {
@@ -637,22 +637,22 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.trainerName = _("CORSON"),
.speechBefore = {EC_WORD_I, EC_WORD_GET, EC_WORD_TO, EC_MOVE2(BEAT_UP), EC_WORD_ON, EC_WORD_YOU},
.speechWin = {EC_WORD_TOO, EC_WORD_EASY, EC_WORD_EXCL, EC_WORD_I_AM, EC_WORD_SO, EC_WORD_COOL},
- .speechLose = {EC_WORD_WHY, EC_WORD_QUES_EXCL, 0xFFFF, EC_WORD_I, EC_MOVE2(CURSE), EC_WORD_YOU},
+ .speechLose = {EC_WORD_WHY, EC_WORD_QUES_EXCL, EC_EMPTY_WORD, EC_WORD_I, EC_MOVE2(CURSE), EC_WORD_YOU},
.monSet = gBattleFrontierTrainerMons_Corson
},
[FRONTIER_TRAINER_TREVIN] = {
.facilityClass = FACILITY_CLASS_BIRD_KEEPER,
.trainerName = _("TREVIN"),
.speechBefore = {EC_WORD_THERE, EC_WORD_IS, EC_WORD_NONE, EC_WORD_BETTER, EC_WORD_THAN, EC_WORD_ME},
- .speechWin = {EC_WORD_YES_SIR_EXCL, 0xFFFF, 0xFFFF, EC_WORD_I_AM, EC_WORD_THE, EC_WORD_BEST},
- .speechLose = {EC_WORD_SERIOUS, EC_WORD_QUES_EXCL, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF},
+ .speechWin = {EC_WORD_YES_SIR_EXCL, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_WORD_I_AM, EC_WORD_THE, EC_WORD_BEST},
+ .speechLose = {EC_WORD_SERIOUS, EC_WORD_QUES_EXCL, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Trevin
},
[FRONTIER_TRAINER_PATRICK] = {
.facilityClass = FACILITY_CLASS_SAILOR,
.trainerName = _("PATRICK"),
- .speechBefore = {EC_WORD_I_AM, EC_WORD_PERFECT, EC_WORD_EXCL, EC_WORD_GIVE_UP, EC_WORD_NOW, 0xFFFF},
- .speechWin = {EC_WORD_DON_T, EC_WORD_BE, EC_WORD_DISAPPOINTED, EC_WORD_I_AM, EC_WORD_PERFECT, 0xFFFF},
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_PERFECT, EC_WORD_EXCL, EC_WORD_GIVE_UP, EC_WORD_NOW, EC_EMPTY_WORD},
+ .speechWin = {EC_WORD_DON_T, EC_WORD_BE, EC_WORD_DISAPPOINTED, EC_WORD_I_AM, EC_WORD_PERFECT, EC_EMPTY_WORD},
.speechLose = {EC_WORD_BUT, EC_WORD_HOW, EC_WORD_QUES, EC_WORD_I_AM, EC_WORD_PERFECT, EC_WORD_ELLIPSIS},
.monSet = gBattleFrontierTrainerMons_Patrick
},
@@ -667,9 +667,9 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
[FRONTIER_TRAINER_MAXWELL] = {
.facilityClass = FACILITY_CLASS_SAILOR,
.trainerName = _("MAXWELL"),
- .speechBefore = {EC_WORD_HEY_THERE, EC_WORD_WHO_IS, EC_WORD_YOUR, EC_WORD_RIVAL, EC_WORD_QUES, 0xFFFF},
+ .speechBefore = {EC_WORD_HEY_THERE, EC_WORD_WHO_IS, EC_WORD_YOUR, EC_WORD_RIVAL, EC_WORD_QUES, EC_EMPTY_WORD},
.speechWin = {EC_WORD_MY, EC_WORD_RIVAL, EC_WORD_IS, EC_WORD_MY, EC_WORD_GIRL, EC_WORD_FRIEND},
- .speechLose = {EC_WORD_I_AM, EC_WORD_MAKING, EC_WORD_YOU, EC_WORD_MY, EC_WORD_RIVAL, 0xFFFF},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_MAKING, EC_WORD_YOU, EC_WORD_MY, EC_WORD_RIVAL, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Maxwell
},
[FRONTIER_TRAINER_DARYL] = {
@@ -685,22 +685,22 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.trainerName = _("KENNETH"),
.speechBefore = {EC_WORD_YOU, EC_WORD_BETTER, EC_WORD_NOT, EC_MOVE2(SLACK_OFF), EC_WORD_WITH, EC_WORD_ME},
.speechWin = {EC_WORD_DID, EC_WORD_MY, EC_MOVE2(TAUNT), EC_WORD_INTIMIDATE, EC_WORD_YOU, EC_WORD_QUES},
- .speechLose = {EC_WORD_I_AM, EC_WORD_SORRY, EC_WORD_ELLIPSIS, 0xFFFF, 0xFFFF, 0xFFFF},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_SORRY, EC_WORD_ELLIPSIS, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Kenneth
},
[FRONTIER_TRAINER_RICH] = {
.facilityClass = FACILITY_CLASS_HIKER,
.trainerName = _("RICH"),
- .speechBefore = {EC_WORD_YOUR, EC_MOVE(FACADE), EC_WORD_DOESN_T, EC_MOVE2(TRICK), EC_WORD_ME, 0xFFFF},
- .speechWin = {EC_WORD_SERIOUSLY, EC_WORD_ARE, EC_WORD_YOU, EC_WORD_REALLY, EC_WORD_OK_QUES, 0xFFFF},
- .speechLose = {EC_WORD_THAT_WAS, EC_WORD_REALLY, EC_WORD_TOUGH, EC_WORD_ON, EC_WORD_ME, 0xFFFF},
+ .speechBefore = {EC_WORD_YOUR, EC_MOVE(FACADE), EC_WORD_DOESN_T, EC_MOVE2(TRICK), EC_WORD_ME, EC_EMPTY_WORD},
+ .speechWin = {EC_WORD_SERIOUSLY, EC_WORD_ARE, EC_WORD_YOU, EC_WORD_REALLY, EC_WORD_OK_QUES, EC_EMPTY_WORD},
+ .speechLose = {EC_WORD_THAT_WAS, EC_WORD_REALLY, EC_WORD_TOUGH, EC_WORD_ON, EC_WORD_ME, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Rich
},
[FRONTIER_TRAINER_CADEN] = {
.facilityClass = FACILITY_CLASS_KINDLER,
.trainerName = _("CADEN"),
- .speechBefore = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_BE, EC_WORD_DEFEATED, EC_WORD_EXCL, 0xFFFF},
- .speechWin = {EC_WORD_FIRE, EC_WORD_EXCL, 0xFFFF, EC_WORD_FIRE, EC_WORD_EXCL_EXCL, 0xFFFF},
+ .speechBefore = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_BE, EC_WORD_DEFEATED, EC_WORD_EXCL, EC_EMPTY_WORD},
+ .speechWin = {EC_WORD_FIRE, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_FIRE, EC_WORD_EXCL_EXCL, EC_EMPTY_WORD},
.speechLose = {EC_WORD_I_AM, EC_WORD_TIRED, EC_WORD_ELLIPSIS, EC_WORD_IT_S, EC_WORD_SO, EC_WORD_HOT},
.monSet = gBattleFrontierTrainerMons_Caden
},
@@ -715,9 +715,9 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
[FRONTIER_TRAINER_NASH] = {
.facilityClass = FACILITY_CLASS_KINDLER,
.trainerName = _("NASH"),
- .speechBefore = {EC_WORD_I_AM, EC_WORD_ON, EC_WORD_FIRE, EC_WORD_BABY, EC_WORD_EXCL, 0xFFFF},
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_ON, EC_WORD_FIRE, EC_WORD_BABY, EC_WORD_EXCL, EC_EMPTY_WORD},
.speechWin = {EC_WORD_I, EC_WORD_LEFT, EC_WORD_YOU, EC_WORD_JUST, EC_WORD_AN, EC_MOVE2(EMBER)},
- .speechLose = {EC_WORD_AIYEEH, EC_WORD_EXCL_EXCL, 0xFFFF, EC_WORD_NO, EC_WORD_WATER, EC_WORD_PLEASE},
+ .speechLose = {EC_WORD_AIYEEH, EC_WORD_EXCL_EXCL, EC_EMPTY_WORD, EC_WORD_NO, EC_WORD_WATER, EC_WORD_PLEASE},
.monSet = gBattleFrontierTrainerMons_Nash
},
[FRONTIER_TRAINER_ROBBY] = {
@@ -749,13 +749,13 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.trainerName = _("ELLEN"),
.speechBefore = {EC_WORD_CRUSH, EC_WORD_YOU, EC_WORD_LIKE, EC_WORD_AN, EC_WORD_EGG, EC_WORD_EXCL},
.speechWin = {EC_WORD_THAT_WAS, EC_WORD_A, EC_WORD_TASTY, EC_WORD_VICTORY, EC_WORD_FOR, EC_WORD_ME},
- .speechLose = {EC_WORD_TOO, EC_WORD_TOUGH, EC_WORD_TO, EC_WORD_CRUSH, EC_WORD_EXCL, 0xFFFF},
+ .speechLose = {EC_WORD_TOO, EC_WORD_TOUGH, EC_WORD_TO, EC_WORD_CRUSH, EC_WORD_EXCL, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Ellen
},
[FRONTIER_TRAINER_RAMON] = {
.facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_M,
.trainerName = _("RAMON"),
- .speechBefore = {EC_WORD_OKAY, EC_WORD_EXCL, 0xFFFF, EC_WORD_THIS, EC_WORD_IS, EC_WORD_PERFECTION},
+ .speechBefore = {EC_WORD_OKAY, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_THIS, EC_WORD_IS, EC_WORD_PERFECTION},
.speechWin = {EC_WORD_I_AM, EC_WORD_HAPPY, EC_WORD_THAT, EC_WORD_I, EC_WORD_WON, EC_WORD_EXCL},
.speechLose = {EC_WORD_IT_S, EC_WORD_A, EC_WORD_SECRET, EC_WORD_WHY, EC_WORD_I_AM, EC_WORD_HAPPY},
.monSet = gBattleFrontierTrainerMons_Ramon
@@ -764,8 +764,8 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_M,
.trainerName = _("ARTHUR"),
.speechBefore = {EC_WORD_HERE_I_COME, EC_WORD_FEELING, EC_WORD_READY, EC_WORD_FOR, EC_WORD_IT, EC_WORD_ALL},
- .speechWin = {EC_WORD_THAT_S_IT_EXCL, 0xFFFF, 0xFFFF, EC_WORD_THAT_WAS, EC_WORD_FABULOUS, EC_WORD_EXCL},
- .speechLose = {EC_WORD_THAT_WAS, EC_WORD_NOT, EC_WORD_WHAT, EC_WORD_I, EC_WORD_NEED, 0xFFFF},
+ .speechWin = {EC_WORD_THAT_S_IT_EXCL, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_WORD_THAT_WAS, EC_WORD_FABULOUS, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_THAT_WAS, EC_WORD_NOT, EC_WORD_WHAT, EC_WORD_I, EC_WORD_NEED, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Arthur
},
[FRONTIER_TRAINER_ALONDRA] = {
@@ -781,7 +781,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.trainerName = _("ADRIANA"),
.speechBefore = {EC_WORD_COME, EC_WORD_SEE, EC_WORD_AN, EC_WORD_INCREDIBLE, EC_WORD_SWIFT_SWIM, EC_WORD_EXCL},
.speechWin = {EC_WORD_I, EC_WORD_MAKE, EC_WORD_IT, EC_WORD_LOOK, EC_WORD_SO, EC_WORD_EASY},
- .speechLose = {EC_WORD_I_AM, EC_WORD_FEELING, EC_MOVE2(BEAT_UP), EC_WORD_AND, EC_WORD_TIRED, 0xFFFF},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_FEELING, EC_MOVE2(BEAT_UP), EC_WORD_AND, EC_WORD_TIRED, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Adriana
},
[FRONTIER_TRAINER_MALIK] = {
@@ -795,17 +795,17 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
[FRONTIER_TRAINER_JILL] = {
.facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_F,
.trainerName = _("JILL"),
- .speechBefore = {EC_WORD_I_AM, EC_WORD_THE, EC_MOVE2(QUICK_ATTACK), EC_WORD_TRAINER, EC_WORD_EXCL, 0xFFFF},
- .speechWin = {EC_WORD_THE, EC_MOVE2(QUICK_ATTACK), EC_WORD_TRAINER, EC_WORD_WINS, EC_WORD_EXCL, 0xFFFF},
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_THE, EC_MOVE2(QUICK_ATTACK), EC_WORD_TRAINER, EC_WORD_EXCL, EC_EMPTY_WORD},
+ .speechWin = {EC_WORD_THE, EC_MOVE2(QUICK_ATTACK), EC_WORD_TRAINER, EC_WORD_WINS, EC_WORD_EXCL, EC_EMPTY_WORD},
.speechLose = {EC_WORD_THE, EC_MOVE2(QUICK_ATTACK), EC_WORD_TRAINER, EC_WORD_GIVES, EC_WORD_UP, EC_WORD_EXCL},
.monSet = gBattleFrontierTrainerMons_Jill
},
[FRONTIER_TRAINER_ERIK] = {
.facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_M,
.trainerName = _("ERIK"),
- .speechBefore = {EC_WORD_I_AM, EC_WORD_THE, EC_WORD_SPEED_BOOST, EC_WORD_HERO, EC_WORD_EXCL, 0xFFFF},
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_THE, EC_WORD_SPEED_BOOST, EC_WORD_HERO, EC_WORD_EXCL, EC_EMPTY_WORD},
.speechWin = {EC_WORD_THANK_YOU, EC_WORD_FROM, EC_WORD_THE, EC_WORD_SPEED_BOOST, EC_WORD_HERO, EC_WORD_EXCL},
- .speechLose = {EC_WORD_WAAAH, EC_WORD_EXCL_EXCL, 0xFFFF, EC_WORD_NO, EC_WORD_NO, EC_WORD_EXCL_EXCL},
+ .speechLose = {EC_WORD_WAAAH, EC_WORD_EXCL_EXCL, EC_EMPTY_WORD, EC_WORD_NO, EC_WORD_NO, EC_WORD_EXCL_EXCL},
.monSet = gBattleFrontierTrainerMons_Erik
},
[FRONTIER_TRAINER_YAZMIN] = {
@@ -843,9 +843,9 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
[FRONTIER_TRAINER_CARLO] = {
.facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_M,
.trainerName = _("CARLO"),
- .speechBefore = {EC_WORD_HAH, EC_WORD_EXCL_EXCL, 0xFFFF, EC_WORD_YEAH, EC_WORD_EXCL_EXCL, 0xFFFF},
+ .speechBefore = {EC_WORD_HAH, EC_WORD_EXCL_EXCL, EC_EMPTY_WORD, EC_WORD_YEAH, EC_WORD_EXCL_EXCL, EC_EMPTY_WORD},
.speechWin = {EC_WORD_I, EC_WORD_DO, EC_WORD_THINGS, EC_WORD_AT, EC_MOVE(EXTREME_SPEED), EC_WORD_EXCL},
- .speechLose = {EC_WORD_I, EC_WORD_LOST, EC_WORD_AT, EC_MOVE(EXTREME_SPEED), EC_WORD_ELLIPSIS, 0xFFFF},
+ .speechLose = {EC_WORD_I, EC_WORD_LOST, EC_WORD_AT, EC_MOVE(EXTREME_SPEED), EC_WORD_ELLIPSIS, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Carlo
},
[FRONTIER_TRAINER_EMILIA] = {
@@ -859,7 +859,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
[FRONTIER_TRAINER_DALIA] = {
.facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_F,
.trainerName = _("DALIA"),
- .speechBefore = {EC_WORD_MY, EC_WORD_BIKE, EC_WORD_IS, EC_WORD_VERY, EC_WORD_EXPENSIVE, 0xFFFF},
+ .speechBefore = {EC_WORD_MY, EC_WORD_BIKE, EC_WORD_IS, EC_WORD_VERY, EC_WORD_EXPENSIVE, EC_EMPTY_WORD},
.speechWin = {EC_WORD_DON_T, EC_WORD_COME, EC_WORD_NEAR, EC_WORD_MY, EC_WORD_BIKE, EC_WORD_EXCL},
.speechLose = {EC_WORD_MY, EC_WORD_BIKE, EC_WORD_IS, EC_WORD_MY, EC_WORD_BEST, EC_WORD_FRIEND},
.monSet = gBattleFrontierTrainerMons_Dalia
@@ -867,24 +867,24 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
[FRONTIER_TRAINER_HITOMI] = {
.facilityClass = FACILITY_CLASS_BLACK_BELT,
.trainerName = _("HITOMI"),
- .speechBefore = {EC_WORD_YEAH, EC_WORD_EXCL_EXCL, 0xFFFF, EC_WORD_HAH, EC_WORD_EXCL_EXCL, 0xFFFF},
- .speechWin = {EC_WORD_WHAT, EC_WORD_QUES_EXCL, 0xFFFF, EC_WORD_I, EC_WORD_WON, EC_WORD_QUES_EXCL},
- .speechLose = {EC_WORD_AIYEEH, EC_WORD_EXCL_EXCL, 0xFFFF, EC_WORD_I_AM, EC_WORD_SORRY, EC_WORD_EXCL_EXCL},
+ .speechBefore = {EC_WORD_YEAH, EC_WORD_EXCL_EXCL, EC_EMPTY_WORD, EC_WORD_HAH, EC_WORD_EXCL_EXCL, EC_EMPTY_WORD},
+ .speechWin = {EC_WORD_WHAT, EC_WORD_QUES_EXCL, EC_EMPTY_WORD, EC_WORD_I, EC_WORD_WON, EC_WORD_QUES_EXCL},
+ .speechLose = {EC_WORD_AIYEEH, EC_WORD_EXCL_EXCL, EC_EMPTY_WORD, EC_WORD_I_AM, EC_WORD_SORRY, EC_WORD_EXCL_EXCL},
.monSet = gBattleFrontierTrainerMons_Hitomi
},
[FRONTIER_TRAINER_RICARDO] = {
.facilityClass = FACILITY_CLASS_BLACK_BELT,
.trainerName = _("RICARDO"),
.speechBefore = {EC_WORD_COME_ON, EC_WORD_EXCL, EC_WORD_PLAY, EC_WORD_TIME, EC_WORD_IS, EC_WORD_OVER},
- .speechWin = {EC_WORD_YOU_RE, EC_WORD_OUT, EC_WORD_OF, EC_WORD_HERE, EC_WORD_EXCL, 0xFFFF},
- .speechLose = {EC_WORD_PLEASE, EC_WORD_DON_T, EC_WORD_HIT, EC_WORD_ME, EC_WORD_EXCL, 0xFFFF},
+ .speechWin = {EC_WORD_YOU_RE, EC_WORD_OUT, EC_WORD_OF, EC_WORD_HERE, EC_WORD_EXCL, EC_EMPTY_WORD},
+ .speechLose = {EC_WORD_PLEASE, EC_WORD_DON_T, EC_WORD_HIT, EC_WORD_ME, EC_WORD_EXCL, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Ricardo
},
[FRONTIER_TRAINER_SHIZUKA] = {
.facilityClass = FACILITY_CLASS_BLACK_BELT,
.trainerName = _("SHIZUKA"),
.speechBefore = {EC_WORD_SHOW, EC_WORD_ME, EC_WORD_THAT, EC_WORD_YOU_RE, EC_WORD_SERIOUS, EC_WORD_EXCL},
- .speechWin = {EC_WORD_I, EC_WORD_WON_T, EC_WORD_FORGET, EC_WORD_ABOUT, EC_WORD_YOU, 0xFFFF},
+ .speechWin = {EC_WORD_I, EC_WORD_WON_T, EC_WORD_FORGET, EC_WORD_ABOUT, EC_WORD_YOU, EC_EMPTY_WORD},
.speechLose = {EC_WORD_YOU_RE, EC_WORD_PERFECT, EC_WORD_IN, EC_WORD_EVERY, EC_WORD_WAY, EC_WORD_EXCL},
.monSet = gBattleFrontierTrainerMons_Shizuka
},
@@ -900,7 +900,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.facilityClass = FACILITY_CLASS_BATTLE_GIRL,
.trainerName = _("KELLY"),
.speechBefore = {EC_WORD_MY, EC_WORD_NIGHT, EC_WORD_SCHOOL, EC_WORD_IS, EC_WORD_REALLY, EC_WORD_SCARY},
- .speechWin = {EC_WORD_A, EC_WORD_LADY, EC_WORD_GHOST, EC_WORD_APPEARS, EC_WORD_THERE, 0xFFFF},
+ .speechWin = {EC_WORD_A, EC_WORD_LADY, EC_WORD_GHOST, EC_WORD_APPEARS, EC_WORD_THERE, EC_EMPTY_WORD},
.speechLose = {EC_WORD_THE, EC_WORD_HOME, EC_WORD_WORK, EC_WORD_IS, EC_WORD_AWFULLY, EC_WORD_SCARY},
.monSet = gBattleFrontierTrainerMons_Kelly
},
@@ -908,14 +908,14 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.facilityClass = FACILITY_CLASS_BATTLE_GIRL,
.trainerName = _("RAYNA"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_NO_1, EC_WORD_WHEN, EC_WORD_IT_S, EC_WORD_ABOUT, EC_WORD_POWER},
- .speechWin = {EC_WORD_UNDERSTAND, EC_WORD_MY, EC_WORD_POWER, EC_WORD_NOW, EC_WORD_QUES, 0xFFFF},
- .speechLose = {EC_WORD_TERRIBLE, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_I_AM, EC_WORD_TERRIBLE, EC_WORD_ELLIPSIS},
+ .speechWin = {EC_WORD_UNDERSTAND, EC_WORD_MY, EC_WORD_POWER, EC_WORD_NOW, EC_WORD_QUES, EC_EMPTY_WORD},
+ .speechLose = {EC_WORD_TERRIBLE, EC_WORD_ELLIPSIS, EC_EMPTY_WORD, EC_WORD_I_AM, EC_WORD_TERRIBLE, EC_WORD_ELLIPSIS},
.monSet = gBattleFrontierTrainerMons_Rayna
},
[FRONTIER_TRAINER_EVAN] = {
.facilityClass = FACILITY_CLASS_EXPERT_M,
.trainerName = _("EVAN"),
- .speechBefore = {EC_WORD_EVERY, EC_WORD_BATTLE, EC_WORD_HAS, EC_WORD_A, EC_WORD_SMELL, 0xFFFF},
+ .speechBefore = {EC_WORD_EVERY, EC_WORD_BATTLE, EC_WORD_HAS, EC_WORD_A, EC_WORD_SMELL, EC_EMPTY_WORD},
.speechWin = {EC_WORD_OH, EC_WORD_EXCL, EC_WORD_THE, EC_MOVE(SWEET_SCENT), EC_WORD_OF, EC_WORD_VICTORY},
.speechLose = {EC_WORD_THE, EC_WORD_AWFUL, EC_WORD_STENCH, EC_WORD_OF, EC_WORD_A, EC_WORD_LOSS},
.monSet = gBattleFrontierTrainerMons_Evan
@@ -923,23 +923,23 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
[FRONTIER_TRAINER_JORDAN] = {
.facilityClass = FACILITY_CLASS_EXPERT_M,
.trainerName = _("JORDAN"),
- .speechBefore = {EC_WORD_GOOD, EC_WORD_EXCL, 0xFFFF, EC_WORD_COME_ON, EC_WORD_EXCL_EXCL, 0xFFFF},
- .speechWin = {EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_BEAT, EC_WORD_ME, EC_WORD_EXCL, 0xFFFF},
- .speechLose = {EC_WORD_WHAT, EC_WORD_QUES_EXCL, 0xFFFF, EC_WORD_BUT, EC_WORD_HOW, EC_WORD_QUES},
+ .speechBefore = {EC_WORD_GOOD, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_COME_ON, EC_WORD_EXCL_EXCL, EC_EMPTY_WORD},
+ .speechWin = {EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_BEAT, EC_WORD_ME, EC_WORD_EXCL, EC_EMPTY_WORD},
+ .speechLose = {EC_WORD_WHAT, EC_WORD_QUES_EXCL, EC_EMPTY_WORD, EC_WORD_BUT, EC_WORD_HOW, EC_WORD_QUES},
.monSet = gBattleFrontierTrainerMons_Jordan
},
[FRONTIER_TRAINER_JOEL] = {
.facilityClass = FACILITY_CLASS_EXPERT_M,
.trainerName = _("JOEL"),
- .speechBefore = {EC_WORD_FUFUFU, EC_WORD_ELLIPSIS, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF},
- .speechWin = {EC_WORD_GIGGLE, EC_WORD_ELLIPSIS, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF},
- .speechLose = {EC_WORD_HAHAHA, EC_WORD_ELLIPSIS, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF},
+ .speechBefore = {EC_WORD_FUFUFU, EC_WORD_ELLIPSIS, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_EMPTY_WORD},
+ .speechWin = {EC_WORD_GIGGLE, EC_WORD_ELLIPSIS, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_EMPTY_WORD},
+ .speechLose = {EC_WORD_HAHAHA, EC_WORD_ELLIPSIS, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Joel
},
[FRONTIER_TRAINER_KRISTEN] = {
.facilityClass = FACILITY_CLASS_EXPERT_F,
.trainerName = _("KRISTEN"),
- .speechBefore = {EC_WORD_HAHAHA, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_A, EC_WORD_KID, EC_WORD_ELLIPSIS},
+ .speechBefore = {EC_WORD_HAHAHA, EC_WORD_ELLIPSIS, EC_EMPTY_WORD, EC_WORD_A, EC_WORD_KID, EC_WORD_ELLIPSIS},
.speechWin = {EC_WORD_JUST, EC_WORD_A_LITTLE, EC_WORD_KID, EC_WORD_AFTER, EC_WORD_ALL, EC_WORD_EXCL},
.speechLose = {EC_WORD_A, EC_WORD_TOUGH, EC_WORD_KID, EC_WORD_HUH_QUES, EC_WORD_HUMPH, EC_WORD_EXCL},
.monSet = gBattleFrontierTrainerMons_Kristen
@@ -947,7 +947,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
[FRONTIER_TRAINER_SELPHY] = {
.facilityClass = FACILITY_CLASS_EXPERT_F,
.trainerName = _("SELPHY"),
- .speechBefore = {EC_WORD_HUH_QUES, EC_WORD_WHAT, EC_WORD_IS_IT_QUES, 0xFFFF, 0xFFFF, 0xFFFF},
+ .speechBefore = {EC_WORD_HUH_QUES, EC_WORD_WHAT, EC_WORD_IS_IT_QUES, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_EMPTY_WORD},
.speechWin = {EC_WORD_OH, EC_WORD_YES, EC_WORD_EXCL, EC_WORD_WHY, EC_WORD_NOT, EC_WORD_QUES},
.speechLose = {EC_WORD_OH, EC_WORD_NO, EC_WORD_EXCL, EC_WORD_WHY, EC_WORD_NOT, EC_WORD_QUES},
.monSet = gBattleFrontierTrainerMons_Selphy
@@ -956,14 +956,14 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.facilityClass = FACILITY_CLASS_EXPERT_F,
.trainerName = _("CHLOE"),
.speechBefore = {EC_WORD_COME, EC_WORD_WE, EC_WORD_WILL, EC_WORD_DO, EC_WORD_BATTLE, EC_WORD_NOW},
- .speechWin = {EC_WORD_MORE, EC_WORD_EXCL, 0xFFFF, EC_WORD_ANOTHER, EC_WORD_BATTLE, EC_WORD_EXCL},
- .speechLose = {EC_WORD_OH, EC_WORD_EXCL, 0xFFFF, EC_WORD_STRONG, EC_WORD_YOU, EC_WORD_ARE},
+ .speechWin = {EC_WORD_MORE, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_ANOTHER, EC_WORD_BATTLE, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_OH, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_STRONG, EC_WORD_YOU, EC_WORD_ARE},
.monSet = gBattleFrontierTrainerMons_Chloe
},
[FRONTIER_TRAINER_NORTON] = {
.facilityClass = FACILITY_CLASS_PSYCHIC_M,
.trainerName = _("NORTON"),
- .speechBefore = {EC_WORD_I, EC_WORD_KNOW, EC_WORD_ONLY, EC_WORD_YOU, 0xFFFF, 0xFFFF},
+ .speechBefore = {EC_WORD_I, EC_WORD_KNOW, EC_WORD_ONLY, EC_WORD_YOU, EC_EMPTY_WORD, EC_EMPTY_WORD},
.speechWin = {EC_WORD_EXCUSE_ME, EC_WORD_BUT, EC_WORD_YOU_RE, EC_WORD_A, EC_WORD_PUSHOVER, EC_WORD_EXCL},
.speechLose = {EC_WORD_YOU_RE, EC_WORD_SOME, EC_WORD_KIND, EC_WORD_OF, EC_WORD_AWESOME, EC_WORD_EXCL},
.monSet = gBattleFrontierTrainerMons_Norton
@@ -973,15 +973,15 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.trainerName = _("LUKAS"),
.speechBefore = {EC_WORD_MY, EC_WORD_JOKING, EC_WORD_IS, EC_WORD_PRETTY, EC_WORD_TERRIBLE, EC_WORD_ELLIPSIS},
.speechWin = {EC_WORD_YOUR, EC_WORD_ROCK_HEAD, EC_WORD_EXISTS, EC_WORD_TO, EC_WORD_SHINE, EC_WORD_EXCL},
- .speechLose = {EC_WORD_YOUR, EC_WORD_ROCK_HEAD, EC_WORD_COME, EC_WORD_TO, EC_WORD_SHINE, 0xFFFF},
+ .speechLose = {EC_WORD_YOUR, EC_WORD_ROCK_HEAD, EC_WORD_COME, EC_WORD_TO, EC_WORD_SHINE, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Lukas
},
[FRONTIER_TRAINER_ZACH] = {
.facilityClass = FACILITY_CLASS_PSYCHIC_M,
.trainerName = _("ZACH"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_AN, EC_WORD_EXCELLENT, EC_MOVE2(MIMIC), EC_WORD_OF, EC_WORD_POKEMON},
- .speechWin = {EC_WORD_I_AM, EC_WORD_HAPPY, EC_WORD_LIKE, EC_WORD_A_LITTLE, EC_POKEMON2(TOGEPI), EC_WORD_EXCL},
- .speechLose = {EC_WORD_I_AM, EC_WORD_ANGRY, EC_WORD_LIKE, EC_WORD_A, EC_POKEMON2(MANKEY), EC_WORD_EXCL},
+ .speechWin = {EC_WORD_I_AM, EC_WORD_HAPPY, EC_WORD_LIKE, EC_WORD_A_LITTLE, EC_POKEMON_NATIONAL(TOGEPI), EC_WORD_EXCL},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_ANGRY, EC_WORD_LIKE, EC_WORD_A, EC_POKEMON_NATIONAL(MANKEY), EC_WORD_EXCL},
.monSet = gBattleFrontierTrainerMons_Zach
},
[FRONTIER_TRAINER_KAITLYN] = {
@@ -997,7 +997,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.trainerName = _("BREANNA"),
.speechBefore = {EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_WILL, EC_WORD_CRUSH, EC_WORD_YOU, EC_WORD_EXCL},
.speechWin = {EC_WORD_HAVE, EC_WORD_SOME, EC_WORD_MORE, EC_WORD_OF, EC_WORD_THIS, EC_WORD_EXCL},
- .speechLose = {EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_GUTS, EC_WORD_AND, EC_WORD_SKILL, 0xFFFF},
+ .speechLose = {EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_GUTS, EC_WORD_AND, EC_WORD_SKILL, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Breanna
},
[FRONTIER_TRAINER_KENDRA] = {
@@ -1005,7 +1005,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.trainerName = _("KENDRA"),
.speechBefore = {EC_WORD_IF, EC_WORD_YOU_RE, EC_WORD_SMART, EC_WORD_STOP, EC_WORD_RIGHT, EC_WORD_NOW},
.speechWin = {EC_WORD_I, EC_WORD_SAID, EC_WORD_THAT, EC_WORD_YOU, EC_WORD_SHOULD, EC_WORD_STOP},
- .speechLose = {EC_WORD_WHY, EC_WORD_DIDN_T, EC_WORD_YOU, EC_WORD_STOP, EC_WORD_QUES, 0xFFFF},
+ .speechLose = {EC_WORD_WHY, EC_WORD_DIDN_T, EC_WORD_YOU, EC_WORD_STOP, EC_WORD_QUES, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Kendra
},
[FRONTIER_TRAINER_MOLLY] = {
@@ -1013,7 +1013,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.trainerName = _("MOLLY"),
.speechBefore = {EC_WORD_WILL, EC_WORD_MY, EC_WORD_CUTE_CHARM, EC_MOVE2(ATTRACT), EC_WORD_YOU, EC_WORD_QUES},
.speechWin = {EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_MY, EC_WORD_TOYS, EC_WORD_NOW},
- .speechLose = {EC_WORD_OH, EC_WORD_HOW, EC_WORD_COULD, EC_WORD_YOU, EC_WORD_QUES, 0xFFFF},
+ .speechLose = {EC_WORD_OH, EC_WORD_HOW, EC_WORD_COULD, EC_WORD_YOU, EC_WORD_QUES, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Molly
},
[FRONTIER_TRAINER_JAZMIN] = {
@@ -1077,7 +1077,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.trainerName = _("BALEY"),
.speechBefore = {EC_MOVE(SCREECH), EC_WORD_IS, EC_WORD_LIKE, EC_WORD_MUSIC, EC_WORD_TO_ME, EC_WORD_EXCL},
.speechWin = {EC_WORD_MY, EC_MOVE(SCREECH), EC_WORD_STRATEGY, EC_WORD_IS, EC_WORD_THE, EC_WORD_BEST},
- .speechLose = {EC_WORD_YOU_RE, EC_WORD_SOUNDPROOF, EC_WORD_QUES, 0xFFFF, 0xFFFF, 0xFFFF},
+ .speechLose = {EC_WORD_YOU_RE, EC_WORD_SOUNDPROOF, EC_WORD_QUES, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Baley
},
[FRONTIER_TRAINER_ZACKARY] = {
@@ -1093,7 +1093,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.trainerName = _("GABRIEL"),
.speechBefore = {EC_MOVE2(POUND), EC_WORD_THE, EC_WORD_THICK_FAT, EC_WORD_ON, EC_WORD_MY, EC_MOVE2(BELLY_DRUM)},
.speechWin = {EC_MOVE2(POUND), EC_WORD_MY, EC_MOVE2(BELLY_DRUM), EC_MOVE2(POUND), EC_WORD_MY, EC_MOVE2(BELLY_DRUM)},
- .speechLose = {EC_WORD_MY, EC_MOVE2(BELLY_DRUM), EC_WORD_WAS, EC_WORD_TOO_WEAK, EC_WORD_ELLIPSIS, 0xFFFF},
+ .speechLose = {EC_WORD_MY, EC_MOVE2(BELLY_DRUM), EC_WORD_WAS, EC_WORD_TOO_WEAK, EC_WORD_ELLIPSIS, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Gabriel
},
[FRONTIER_TRAINER_EMILY] = {
@@ -1115,17 +1115,17 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
[FRONTIER_TRAINER_SOFIA] = {
.facilityClass = FACILITY_CLASS_AROMA_LADY,
.trainerName = _("SOFIA"),
- .speechBefore = {EC_POKEMON(LOUDRED), EC_WORD_PROBABLY, EC_WORD_HAS, EC_WORD_A, EC_MOVE(SWEET_SCENT), 0xFFFF},
+ .speechBefore = {EC_POKEMON(LOUDRED), EC_WORD_PROBABLY, EC_WORD_HAS, EC_WORD_A, EC_MOVE(SWEET_SCENT), EC_EMPTY_WORD},
.speechWin = {EC_WORD_THAT_S, EC_WORD_THE, EC_WORD_FEELING, EC_WORD_THAT, EC_WORD_I, EC_WORD_GET},
- .speechLose = {EC_WORD_I, EC_WORD_WORK, EC_WORD_AT, EC_WORD_THE, EC_WORD_DEPT_STORE, 0xFFFF},
+ .speechLose = {EC_WORD_I, EC_WORD_WORK, EC_WORD_AT, EC_WORD_THE, EC_WORD_DEPT_STORE, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Sofia
},
[FRONTIER_TRAINER_BRADEN] = {
.facilityClass = FACILITY_CLASS_COOLTRAINER_M,
.trainerName = _("BRADEN"),
- .speechBefore = {EC_WORD_I_CHOOSE_YOU, EC_WORD_EXCL, 0xFFFF, EC_WORD_THIS_IS_IT_EXCL, 0xFFFF, 0xFFFF},
+ .speechBefore = {EC_WORD_I_CHOOSE_YOU, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_THIS_IS_IT_EXCL, EC_EMPTY_WORD, EC_EMPTY_WORD},
.speechWin = {EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_PRETTY, EC_WORD_AWESOME, EC_WORD_ABOUT, EC_WORD_MYSELF},
- .speechLose = {EC_WORD_ALL_RIGHT, EC_WORD_EXCL, 0xFFFF, EC_WORD_I, EC_WORD_SURRENDER, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_ALL_RIGHT, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_I, EC_WORD_SURRENDER, EC_WORD_EXCL},
.monSet = gBattleFrontierTrainerMons_Braden
},
[FRONTIER_TRAINER_KAYDEN] = {
@@ -1133,7 +1133,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.trainerName = _("KAYDEN"),
.speechBefore = {EC_WORD_THEY, EC_WORD_OVERDO, EC_WORD_THAT, EC_WORD_GOURMET, EC_WORD_THING, EC_WORD_ELLIPSIS},
.speechWin = {EC_WORD_THAT, EC_WORD_GOURMET, EC_WORD_THING, EC_WORD_ISN_T, EC_WORD_FOR, EC_WORD_ME},
- .speechLose = {EC_WORD_HEY, EC_WORD_THIS, EC_WORD_IS, EC_WORD_PRETTY, EC_WORD_TASTY, 0xFFFF},
+ .speechLose = {EC_WORD_HEY, EC_WORD_THIS, EC_WORD_IS, EC_WORD_PRETTY, EC_WORD_TASTY, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Kayden
},
[FRONTIER_TRAINER_COOPER] = {
@@ -1141,7 +1141,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.trainerName = _("COOPER"),
.speechBefore = {EC_WORD_THIS, EC_WORD_SHOULD, EC_WORD_ABSOLUTELY, EC_WORD_BE, EC_WORD_A, EC_WORD_PUSHOVER},
.speechWin = {EC_WORD_THAT_WAS, EC_WORD_TOO, EC_WORD_EXCITING, EC_WORD_FOR, EC_WORD_ME, EC_WORD_ELLIPSIS},
- .speechLose = {EC_WORD_PLEASE, EC_WORD_EXCL, 0xFFFF, EC_WORD_SORRY, EC_WORD_I_AM, EC_WORD_SORRY},
+ .speechLose = {EC_WORD_PLEASE, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_SORRY, EC_WORD_I_AM, EC_WORD_SORRY},
.monSet = gBattleFrontierTrainerMons_Cooper
},
[FRONTIER_TRAINER_JULIA] = {
@@ -1179,8 +1179,8 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
[FRONTIER_TRAINER_DOMINIC] = {
.facilityClass = FACILITY_CLASS_PKMN_RANGER_M,
.trainerName = _("DOMINIC"),
- .speechBefore = {EC_WORD_I, EC_WORD_HAVE, EC_WORD_THIS, EC_WORD_EXCELLENT, EC_WORD_CAMERA, 0xFFFF},
- .speechWin = {EC_WORD_MY, EC_WORD_CAMERA, EC_WORD_WAS, EC_WORD_AWFULLY, EC_WORD_EXPENSIVE, 0xFFFF},
+ .speechBefore = {EC_WORD_I, EC_WORD_HAVE, EC_WORD_THIS, EC_WORD_EXCELLENT, EC_WORD_CAMERA, EC_EMPTY_WORD},
+ .speechWin = {EC_WORD_MY, EC_WORD_CAMERA, EC_WORD_WAS, EC_WORD_AWFULLY, EC_WORD_EXPENSIVE, EC_EMPTY_WORD},
.speechLose = {EC_WORD_MY, EC_WORD_CAMERA, EC_WORD_DOESN_T, EC_WORD_MISS, EC_WORD_A, EC_WORD_THING},
.monSet = gBattleFrontierTrainerMons_Dominic
},
@@ -1188,8 +1188,8 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.facilityClass = FACILITY_CLASS_PKMN_RANGER_M,
.trainerName = _("NIKOLAS"),
.speechBefore = {EC_WORD_I, EC_MOVE2(MIMIC), EC_WORD_POKEMON, EC_WORD_AFTER, EC_WORD_EVERY, EC_WORD_BATTLE},
- .speechWin = {EC_WORD_IF_I_WIN, EC_WORD_I, EC_WORD_PRETEND, EC_WORD_I_AM, EC_WORD_A, EC_POKEMON2(TAUROS)},
- .speechLose = {EC_WORD_IF_I_LOSE, EC_WORD_I, EC_WORD_PRETEND, EC_WORD_I_AM, EC_WORD_A, EC_POKEMON2(MILTANK)},
+ .speechWin = {EC_WORD_IF_I_WIN, EC_WORD_I, EC_WORD_PRETEND, EC_WORD_I_AM, EC_WORD_A, EC_POKEMON_NATIONAL(TAUROS)},
+ .speechLose = {EC_WORD_IF_I_LOSE, EC_WORD_I, EC_WORD_PRETEND, EC_WORD_I_AM, EC_WORD_A, EC_POKEMON_NATIONAL(MILTANK)},
.monSet = gBattleFrontierTrainerMons_Nikolas
},
[FRONTIER_TRAINER_VALERIA] = {
@@ -1212,16 +1212,16 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.facilityClass = FACILITY_CLASS_PKMN_RANGER_F,
.trainerName = _("MEGHAN"),
.speechBefore = {EC_WORD_SCHOOL, EC_WORD_IS, EC_WORD_OUT, EC_WORD_TIME, EC_WORD_TO, EC_WORD_PLAY},
- .speechWin = {EC_WORD_MY, EC_WORD_BOY, EC_WORD_FRIEND, EC_WORD_LIKES, EC_WORD_COMICS, 0xFFFF},
- .speechLose = {EC_WORD_IT_S, EC_WORD_BACK, EC_WORD_TO, EC_WORD_SCHOOL, EC_WORD_SOON, 0xFFFF},
+ .speechWin = {EC_WORD_MY, EC_WORD_BOY, EC_WORD_FRIEND, EC_WORD_LIKES, EC_WORD_COMICS, EC_EMPTY_WORD},
+ .speechLose = {EC_WORD_IT_S, EC_WORD_BACK, EC_WORD_TO, EC_WORD_SCHOOL, EC_WORD_SOON, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Meghan
},
[FRONTIER_TRAINER_ROBERTO] = {
.facilityClass = FACILITY_CLASS_DRAGON_TAMER,
.trainerName = _("ROBERTO"),
- .speechBefore = {EC_WORD_DRAGON, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_INVINCIBLE, EC_WORD_EXCL, 0xFFFF},
+ .speechBefore = {EC_WORD_DRAGON, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_INVINCIBLE, EC_WORD_EXCL, EC_EMPTY_WORD},
.speechWin = {EC_WORD_YOU, EC_WORD_WEREN_T, EC_WORD_BAD, EC_WORD_I_WAS, EC_WORD_JUST, EC_WORD_BETTER},
- .speechLose = {EC_WORD_AREN_T, EC_WORD_YOU, EC_WORD_SATISFIED, EC_WORD_YET, EC_WORD_QUES, 0xFFFF},
+ .speechLose = {EC_WORD_AREN_T, EC_WORD_YOU, EC_WORD_SATISFIED, EC_WORD_YET, EC_WORD_QUES, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Roberto
},
[FRONTIER_TRAINER_DAMIAN] = {
@@ -1229,7 +1229,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.trainerName = _("DAMIAN"),
.speechBefore = {EC_WORD_MY, EC_WORD_PURE_POWER, EC_WORD_IS, EC_WORD_MACHINE, EC_WORD_LIKE, EC_WORD_EXCL},
.speechWin = {EC_WORD_MY, EC_MOVE2(MACH_PUNCH), EC_WORD_WILL, EC_WORD_MAKE, EC_WORD_A, EC_MOVE(BRICK_BREAK)},
- .speechLose = {EC_WORD_ARRGH, EC_WORD_EXCL, 0xFFFF, EC_WORD_NO, EC_WORD_EXCL_EXCL, 0xFFFF},
+ .speechLose = {EC_WORD_ARRGH, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_NO, EC_WORD_EXCL_EXCL, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Damian
},
[FRONTIER_TRAINER_BRODY] = {
@@ -1243,7 +1243,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
[FRONTIER_TRAINER_GRAHAM] = {
.facilityClass = FACILITY_CLASS_DRAGON_TAMER,
.trainerName = _("GRAHAM"),
- .speechBefore = {EC_WORD_YEAH, EC_WORD_EXCL, 0xFFFF, EC_WORD_YEAH_YEAH, EC_WORD_EXCL_EXCL, 0xFFFF},
+ .speechBefore = {EC_WORD_YEAH, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_YEAH_YEAH, EC_WORD_EXCL_EXCL, EC_EMPTY_WORD},
.speechWin = {EC_WORD_WAHAHAHA, EC_WORD_WAHAHAHA, EC_WORD_EXCL, EC_WORD_WAHAHAHA, EC_WORD_WAHAHAHA, EC_WORD_EXCL_EXCL},
.speechLose = {EC_WORD_I_AM, EC_WORD_SORRY, EC_WORD_ELLIPSIS, EC_WORD_IT_S, EC_WORD_MY, EC_WORD_BAD},
.monSet = gBattleFrontierTrainerMons_Graham
@@ -1252,23 +1252,23 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.facilityClass = FACILITY_CLASS_POKEFAN_M,
.trainerName = _("TYLOR"),
.speechBefore = {EC_WORD_ARE, EC_WORD_YOU, EC_WORD_FEELING, EC_WORD_MY, EC_MOVE2(HEAT_WAVE), EC_WORD_QUES},
- .speechWin = {EC_WORD_YES, EC_WORD_I_AM, EC_WORD_ON, EC_WORD_FIRE, EC_WORD_EXCL, 0xFFFF},
+ .speechWin = {EC_WORD_YES, EC_WORD_I_AM, EC_WORD_ON, EC_WORD_FIRE, EC_WORD_EXCL, EC_EMPTY_WORD},
.speechLose = {EC_WORD_BUT, EC_WORD_I_WAS, EC_WORD_ON, EC_WORD_FIRE, EC_WORD_FOR, EC_WORD_YOU},
.monSet = gBattleFrontierTrainerMons_Tylor
},
[FRONTIER_TRAINER_JAREN] = {
.facilityClass = FACILITY_CLASS_POKEFAN_F,
.trainerName = _("JAREN"),
- .speechBefore = {EC_WORD_FIGHTING, EC_WORD_SPIRIT, EC_WORD_QUES, EC_WORD_ME, EC_WORD_QUES, 0xFFFF},
- .speechWin = {EC_WORD_I, EC_WORD_WANT, EC_WORD_MORE, EC_WORD_CUTE, EC_WORD_POKEMON, 0xFFFF},
- .speechLose = {EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_LOOK, EC_WORD_QUITE, EC_WORD_CUTE, 0xFFFF},
+ .speechBefore = {EC_WORD_FIGHTING, EC_WORD_SPIRIT, EC_WORD_QUES, EC_WORD_ME, EC_WORD_QUES, EC_EMPTY_WORD},
+ .speechWin = {EC_WORD_I, EC_WORD_WANT, EC_WORD_MORE, EC_WORD_CUTE, EC_WORD_POKEMON, EC_EMPTY_WORD},
+ .speechLose = {EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_LOOK, EC_WORD_QUITE, EC_WORD_CUTE, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Jaren
},
[FRONTIER_TRAINER_CORDELL] = {
.facilityClass = FACILITY_CLASS_PKMN_BREEDER_M,
.trainerName = _("CORDELL"),
.speechBefore = {EC_WORD_A, EC_WORD_BATTLE, EC_WORD_IS, EC_WORD_DECIDED, EC_WORD_ON, EC_WORD_SPIRIT},
- .speechWin = {EC_WORD_CAN_T, EC_WORD_YOU, EC_WORD_ACCEPT, EC_WORD_THAT, EC_WORD_QUES, 0xFFFF},
+ .speechWin = {EC_WORD_CAN_T, EC_WORD_YOU, EC_WORD_ACCEPT, EC_WORD_THAT, EC_WORD_QUES, EC_EMPTY_WORD},
.speechLose = {EC_WORD_I, EC_WORD_WILL, EC_WORD_BE, EC_WORD_ON, EC_WORD_MY, EC_WORD_WAY},
.monSet = gBattleFrontierTrainerMons_Cordell
},
@@ -1291,7 +1291,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
[FRONTIER_TRAINER_JOHAN] = {
.facilityClass = FACILITY_CLASS_YOUNGSTER,
.trainerName = _("JOHAN"),
- .speechBefore = {EC_WORD_WINTER, EC_WORD_WILL, EC_WORD_SOON, EC_WORD_BE, EC_WORD_HERE, 0xFFFF},
+ .speechBefore = {EC_WORD_WINTER, EC_WORD_WILL, EC_WORD_SOON, EC_WORD_BE, EC_WORD_HERE, EC_EMPTY_WORD},
.speechWin = {EC_WORD_MY, EC_WORD_ALLOWANCE, EC_WORD_COULD, EC_WORD_USE, EC_WORD_A, EC_MOVE2(HELPING_HAND)},
.speechLose = {EC_WORD_I, EC_WORD_ALWAYS, EC_WORD_USE, EC_WORD_MY, EC_WORD_ALLOWANCE, EC_WORD_UP},
.monSet = gBattleFrontierTrainerMons_Johan
@@ -1315,7 +1315,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
[FRONTIER_TRAINER_ISIAH] = {
.facilityClass = FACILITY_CLASS_SCHOOL_KID_M,
.trainerName = _("ISIAH"),
- .speechBefore = {EC_WORD_I, EC_WORD_PRETEND, EC_WORD_TO, EC_WORD_STUDY, EC_WORD_A_LOT, 0xFFFF},
+ .speechBefore = {EC_WORD_I, EC_WORD_PRETEND, EC_WORD_TO, EC_WORD_STUDY, EC_WORD_A_LOT, EC_EMPTY_WORD},
.speechWin = {EC_WORD_I, EC_MOVE2(TRICK), EC_WORD_MOTHER, EC_WORD_FOR, EC_WORD_MY, EC_WORD_ALLOWANCE},
.speechLose = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_WANT, EC_WORD_TO, EC_WORD_STUDY, EC_WORD_MORE},
.monSet = gBattleFrontierTrainerMons_Isiah
@@ -1340,14 +1340,14 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.facilityClass = FACILITY_CLASS_SCHOOL_KID_F,
.trainerName = _("MEGAN"),
.speechBefore = {EC_WORD_I, EC_WORD_BELIEVE, EC_WORD_IN, EC_WORD_AN, EC_MOVE(AROMATHERAPY), EC_WORD_BATH},
- .speechWin = {EC_WORD_I, EC_WORD_WANT, EC_WORD_A, EC_WORD_HEALTHY, EC_WORD_CLEAR_BODY, 0xFFFF},
+ .speechWin = {EC_WORD_I, EC_WORD_WANT, EC_WORD_A, EC_WORD_HEALTHY, EC_WORD_CLEAR_BODY, EC_EMPTY_WORD},
.speechLose = {EC_WORD_IF, EC_WORD_ONLY, EC_MOVE(AROMATHERAPY), EC_WORD_WERE, EC_WORD_LESS, EC_WORD_EXPENSIVE},
.monSet = gBattleFrontierTrainerMons_Megan
},
[FRONTIER_TRAINER_ISSAC] = {
.facilityClass = FACILITY_CLASS_RICH_BOY,
.trainerName = _("ISSAC"),
- .speechBefore = {EC_WORD_MY, EC_WORD_HOBBY, EC_WORD_QUES, 0xFFFF, 0xFFFF, 0xFFFF},
+ .speechBefore = {EC_WORD_MY, EC_WORD_HOBBY, EC_WORD_QUES, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_EMPTY_WORD},
.speechWin = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_ANY, EC_WORD_KIND, EC_WORD_OF, EC_MOVE2(WATER_SPORT)},
.speechLose = {EC_WORD_I, EC_WORD_DISLIKE, EC_WORD_ANY, EC_WORD_KIND, EC_WORD_OF, EC_MOVE2(MUD_SPORT)},
.monSet = gBattleFrontierTrainerMons_Issac
@@ -1355,8 +1355,8 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
[FRONTIER_TRAINER_QUINTON] = {
.facilityClass = FACILITY_CLASS_RICH_BOY,
.trainerName = _("QUINTON"),
- .speechBefore = {EC_WORD_I_AM, EC_WORD_SAD, EC_WORD_CAUSE, EC_WORD_I_AM, EC_WORD_TOO_WEAK, 0xFFFF},
- .speechWin = {EC_WORD_YOU, EC_WORD_AREN_T, EC_WORD_TOO_STRONG, EC_WORD_FOR, EC_WORD_ME, 0xFFFF},
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_SAD, EC_WORD_CAUSE, EC_WORD_I_AM, EC_WORD_TOO_WEAK, EC_EMPTY_WORD},
+ .speechWin = {EC_WORD_YOU, EC_WORD_AREN_T, EC_WORD_TOO_STRONG, EC_WORD_FOR, EC_WORD_ME, EC_EMPTY_WORD},
.speechLose = {EC_WORD_HEY, EC_WORD_WHAT, EC_WORD_DID, EC_WORD_I, EC_WORD_DO, EC_WORD_QUES},
.monSet = gBattleFrontierTrainerMons_Quinton
},
@@ -1372,7 +1372,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.facilityClass = FACILITY_CLASS_LADY,
.trainerName = _("ANSLEY"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_BORED, EC_WORD_ELLIPSIS, EC_WORD_DANCE, EC_WORD_FOR, EC_WORD_ME},
- .speechWin = {EC_WORD_YOU_VE, EC_WORD_BORED, EC_WORD_ME, EC_WORD_SOME, EC_WORD_MORE, 0xFFFF},
+ .speechWin = {EC_WORD_YOU_VE, EC_WORD_BORED, EC_WORD_ME, EC_WORD_SOME, EC_WORD_MORE, EC_EMPTY_WORD},
.speechLose = {EC_WORD_TAKE, EC_WORD_YOUR, EC_MOVE2(FRUSTRATION), EC_WORD_SOME, EC_WORD_OTHER, EC_WORD_PLACE},
.monSet = gBattleFrontierTrainerMons_Ansley
},
@@ -1380,8 +1380,8 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.facilityClass = FACILITY_CLASS_BUG_CATCHER,
.trainerName = _("HOLDEN"),
.speechBefore = {EC_WORD_LET_S, EC_WORD_COMMEMORATE, EC_WORD_MY, EC_WORD_COOLNESS, EC_WORD_IN, EC_WORD_BATTLE},
- .speechWin = {EC_WORD_YOU_RE, EC_WORD_TOO_WEAK, EC_WORD_FOR, EC_WORD_ANY, EC_WORD_PRAISE, 0xFFFF},
- .speechLose = {EC_WORD_YOUR, EC_WORD_BATTLE, EC_WORD_SENSE, EC_WORD_IS, EC_WORD_AMUSING, 0xFFFF},
+ .speechWin = {EC_WORD_YOU_RE, EC_WORD_TOO_WEAK, EC_WORD_FOR, EC_WORD_ANY, EC_WORD_PRAISE, EC_EMPTY_WORD},
+ .speechLose = {EC_WORD_YOUR, EC_WORD_BATTLE, EC_WORD_SENSE, EC_WORD_IS, EC_WORD_AMUSING, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Holden
},
[FRONTIER_TRAINER_LUCA] = {
@@ -1396,14 +1396,14 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.facilityClass = FACILITY_CLASS_NINJA_BOY,
.trainerName = _("JAMISON"),
.speechBefore = {EC_WORD_MY, EC_MOVE2(SECRET_POWER), EC_WORD_IS, EC_WORD_OVERWHELMING, EC_WORD_TO, EC_WORD_POKEMON},
- .speechWin = {EC_WORD_DID, EC_WORD_YOU, EC_WORD_SEE, EC_WORD_THAT, EC_WORD_QUES, 0xFFFF},
+ .speechWin = {EC_WORD_DID, EC_WORD_YOU, EC_WORD_SEE, EC_WORD_THAT, EC_WORD_QUES, EC_EMPTY_WORD},
.speechLose = {EC_WORD_I, EC_WORD_WILL, EC_WORD_USE, EC_MOVE(SMOKESCREEN), EC_WORD_TO, EC_WORD_ESCAPE},
.monSet = gBattleFrontierTrainerMons_Jamison
},
[FRONTIER_TRAINER_GUNNAR] = {
.facilityClass = FACILITY_CLASS_NINJA_BOY,
.trainerName = _("GUNNAR"),
- .speechBefore = {EC_WORD_I, EC_MOVE(CUT), EC_WORD_DOWN, EC_WORD_EVERY, EC_WORD_OPPONENT, 0xFFFF},
+ .speechBefore = {EC_WORD_I, EC_MOVE(CUT), EC_WORD_DOWN, EC_WORD_EVERY, EC_WORD_OPPONENT, EC_EMPTY_WORD},
.speechWin = {EC_WORD_DON_T, EC_MOVE(GRUDGE), EC_WORD_ME, EC_WORD_FOR, EC_WORD_YOUR, EC_WORD_LOSS},
.speechLose = {EC_WORD_PLEASE, EC_WORD_LOSE, EC_WORD_THAT, EC_MOVE(SCARY_FACE), EC_WORD_OF, EC_WORD_YOURS},
.monSet = gBattleFrontierTrainerMons_Gunnar
@@ -1413,22 +1413,22 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.trainerName = _("CRAIG"),
.speechBefore = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_WAIT, EC_WORD_FOR, EC_WORD_MY, EC_WORD_TRAIN},
.speechWin = {EC_WORD_MY, EC_WORD_TRAIN, EC_WORD_ISN_T, EC_WORD_HERE, EC_WORD_YET, EC_WORD_ELLIPSIS},
- .speechLose = {EC_WORD_HERE_IT_IS, EC_WORD_MY, EC_WORD_TRAIN, EC_WORD_SEE_YA, EC_WORD_EXCL, 0xFFFF},
+ .speechLose = {EC_WORD_HERE_IT_IS, EC_WORD_MY, EC_WORD_TRAIN, EC_WORD_SEE_YA, EC_WORD_EXCL, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Craig
},
[FRONTIER_TRAINER_PIERCE] = {
.facilityClass = FACILITY_CLASS_TUBER_M,
.trainerName = _("PIERCE"),
.speechBefore = {EC_WORD_THERE, EC_WORD_WAS, EC_WORD_A, EC_MOVE2(HEAT_WAVE), EC_WORD_LAST, EC_WORD_WEEK},
- .speechWin = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_TAKE, EC_WORD_A, EC_MOVE2(HEAT_WAVE), 0xFFFF},
- .speechLose = {EC_WORD_DIDN_T, EC_WORD_IT, EC_MOVE(HAIL), EC_WORD_TOO, EC_WORD_QUES, 0xFFFF},
+ .speechWin = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_TAKE, EC_WORD_A, EC_MOVE2(HEAT_WAVE), EC_EMPTY_WORD},
+ .speechLose = {EC_WORD_DIDN_T, EC_WORD_IT, EC_MOVE(HAIL), EC_WORD_TOO, EC_WORD_QUES, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Pierce
},
[FRONTIER_TRAINER_REGINA] = {
.facilityClass = FACILITY_CLASS_TUBER_F,
.trainerName = _("REGINA"),
.speechBefore = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_TO, EC_WORD_PLAY, EC_WORD_IN, EC_WORD_WATER},
- .speechWin = {EC_WORD_I, EC_WORD_REFUSE, EC_WORD_TO, EC_WORD_COME, EC_WORD_OUT, 0xFFFF},
+ .speechWin = {EC_WORD_I, EC_WORD_REFUSE, EC_WORD_TO, EC_WORD_COME, EC_WORD_OUT, EC_EMPTY_WORD},
.speechLose = {EC_WORD_YOU_RE, EC_WORD_NOT, EC_WORD_MUCH, EC_WORD_GOOD, EC_WORD_IN, EC_WORD_WATER},
.monSet = gBattleFrontierTrainerMons_Regina
},
@@ -1469,7 +1469,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.trainerName = _("HUNTER"),
.speechBefore = {EC_WORD_SHOW, EC_WORD_ME, EC_WORD_A, EC_WORD_TOTALLY, EC_WORD_COOL, EC_MOVE(CROSS_CHOP)},
.speechWin = {EC_WORD_YOU_RE, EC_WORD_TOO_WEAK, EC_WORD_TO, EC_WORD_DO, EC_WORD_A, EC_MOVE(CROSS_CHOP)},
- .speechLose = {EC_WORD_WAS, EC_WORD_IT, EC_WORD_A, EC_WORD_MISTAKE, EC_WORD_QUES, 0xFFFF},
+ .speechLose = {EC_WORD_WAS, EC_WORD_IT, EC_WORD_A, EC_WORD_MISTAKE, EC_WORD_QUES, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Hunter
},
[FRONTIER_TRAINER_AIDEN] = {
@@ -1483,9 +1483,9 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
[FRONTIER_TRAINER_XAVIER] = {
.facilityClass = FACILITY_CLASS_RUIN_MANIAC,
.trainerName = _("XAVIER"),
- .speechBefore = {EC_WORD_HEY_THERE, EC_WORD_EXCL, 0xFFFF, EC_WORD_LOOK, EC_WORD_LOOK, EC_WORD_EXCL_EXCL},
- .speechWin = {EC_WORD_GOOD_BYE, EC_WORD_AND, EC_WORD_THANK_YOU, EC_WORD_THAT_WAS, EC_WORD_FUNNY, 0xFFFF},
- .speechLose = {EC_WORD_WOWEE, EC_WORD_EXCL, 0xFFFF, EC_WORD_NO, EC_WORD_NO, EC_WORD_EXCL_EXCL},
+ .speechBefore = {EC_WORD_HEY_THERE, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_LOOK, EC_WORD_LOOK, EC_WORD_EXCL_EXCL},
+ .speechWin = {EC_WORD_GOOD_BYE, EC_WORD_AND, EC_WORD_THANK_YOU, EC_WORD_THAT_WAS, EC_WORD_FUNNY, EC_EMPTY_WORD},
+ .speechLose = {EC_WORD_WOWEE, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_NO, EC_WORD_NO, EC_WORD_EXCL_EXCL},
.monSet = gBattleFrontierTrainerMons_Xavier
},
[FRONTIER_TRAINER_CLINTON] = {
@@ -1493,7 +1493,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.trainerName = _("CLINTON"),
.speechBefore = {EC_WORD_WANT, EC_WORD_TO, EC_WORD_SEE, EC_WORD_MY, EC_MOVE(HYPNOSIS), EC_WORD_QUES},
.speechWin = {EC_WORD_YOUR, EC_MOVE2(FURY_SWIPES), EC_WORD_YOUR, EC_MOVE(STRENGTH), EC_WORD_YOUNG, EC_WORD_TRAINER},
- .speechLose = {EC_WORD_TCH, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_I_AM, EC_WORD_TOO_WEAK, EC_WORD_ELLIPSIS},
+ .speechLose = {EC_WORD_TCH, EC_WORD_ELLIPSIS, EC_EMPTY_WORD, EC_WORD_I_AM, EC_WORD_TOO_WEAK, EC_WORD_ELLIPSIS},
.monSet = gBattleFrontierTrainerMons_Clinton
},
[FRONTIER_TRAINER_JESSE] = {
@@ -1501,7 +1501,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.trainerName = _("JESSE"),
.speechBefore = {EC_WORD_THIS, EC_WORD_BATTLE, EC_WORD_IS, EC_WORD_FOR, EC_WORD_MY, EC_WORD_MOTHER},
.speechWin = {EC_WORD_MOTHER, EC_WORD_WILL, EC_WORD_BE, EC_WORD_HAPPY, EC_WORD_FOR, EC_WORD_ME},
- .speechLose = {EC_WORD_I, EC_WORD_WANT, EC_WORD_MY, EC_WORD_MOTHER, EC_WORD_EXCL, 0xFFFF},
+ .speechLose = {EC_WORD_I, EC_WORD_WANT, EC_WORD_MY, EC_WORD_MOTHER, EC_WORD_EXCL, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Jesse
},
[FRONTIER_TRAINER_EDUARDO] = {
@@ -1515,7 +1515,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
[FRONTIER_TRAINER_HAL] = {
.facilityClass = FACILITY_CLASS_GUITARIST,
.trainerName = _("HAL"),
- .speechBefore = {EC_WORD_I_AM, EC_WORD_TRENDY, EC_WORD_AREN_T, EC_WORD_I, EC_WORD_QUES, 0xFFFF},
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_TRENDY, EC_WORD_AREN_T, EC_WORD_I, EC_WORD_QUES, EC_EMPTY_WORD},
.speechWin = {EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_HIP_AND, EC_WORD_HAPPENING, EC_WORD_OH_YEAH, EC_WORD_EXCL},
.speechLose = {EC_WORD_I_AM, EC_WORD_ALWAYS, EC_WORD_TRENDY, EC_WORD_THANK_YOU, EC_WORD_VERY, EC_WORD_MUCH},
.monSet = gBattleFrontierTrainerMons_Hal
@@ -1525,7 +1525,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.trainerName = _("GAGE"),
.speechBefore = {EC_WORD_HERE_IT_IS, EC_WORD_A, EC_WORD_FLYING, EC_WORD_TYPE, EC_WORD_HIDDEN, EC_WORD_MOVE},
.speechWin = {EC_WORD_IT_S, EC_WORD_A, EC_WORD_FLYING, EC_WORD_TYPE, EC_WORD_VICTORY, EC_WORD_EXCL},
- .speechLose = {EC_WORD_IF_I_LOSE, EC_WORD_I, EC_WORD_JUST, EC_MOVE(FLY), EC_WORD_AWAY, 0xFFFF},
+ .speechLose = {EC_WORD_IF_I_LOSE, EC_WORD_I, EC_WORD_JUST, EC_MOVE(FLY), EC_WORD_AWAY, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Gage
},
[FRONTIER_TRAINER_ARNOLD] = {
@@ -1563,8 +1563,8 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
[FRONTIER_TRAINER_GUSTAVO] = {
.facilityClass = FACILITY_CLASS_HIKER,
.trainerName = _("GUSTAVO"),
- .speechBefore = {EC_MOVE(CHARGE), EC_WORD_EXCL, 0xFFFF, EC_MOVE(CHARGE), EC_WORD_EXCL_EXCL, 0xFFFF},
- .speechWin = {EC_WORD_SURRENDER, EC_WORD_QUES, 0xFFFF, EC_WORD_SO, EC_WORD_SOON, EC_WORD_QUES},
+ .speechBefore = {EC_MOVE(CHARGE), EC_WORD_EXCL, EC_EMPTY_WORD, EC_MOVE(CHARGE), EC_WORD_EXCL_EXCL, EC_EMPTY_WORD},
+ .speechWin = {EC_WORD_SURRENDER, EC_WORD_QUES, EC_EMPTY_WORD, EC_WORD_SO, EC_WORD_SOON, EC_WORD_QUES},
.speechLose = {EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_MAKE, EC_WORD_ME, EC_WORD_SURRENDER, EC_WORD_YET},
.monSet = gBattleFrontierTrainerMons_Gustavo
},
@@ -1581,7 +1581,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.trainerName = _("ALFREDO"),
.speechBefore = {EC_WORD_A, EC_WORD_FIERY, EC_WORD_GOURMET, EC_WORD_AM, EC_WORD_I, EC_WORD_EXCL},
.speechWin = {EC_WORD_IT_S, EC_WORD_A, EC_WORD_TASTY, EC_WORD_GOURMET, EC_WORD_VICTORY, EC_WORD_EXCL},
- .speechLose = {EC_WORD_WHAT, EC_WORD_A, EC_WORD_DISASTER, EC_WORD_THAT_WAS, EC_WORD_EXCL, 0xFFFF},
+ .speechLose = {EC_WORD_WHAT, EC_WORD_A, EC_WORD_DISASTER, EC_WORD_THAT_WAS, EC_WORD_EXCL, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Alfredo
},
[FRONTIER_TRAINER_RUBEN] = {
@@ -1589,15 +1589,15 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.trainerName = _("RUBEN"),
.speechBefore = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_WAIT, EC_WORD_TO, EC_WORD_GET, EC_WORD_GOING},
.speechWin = {EC_WORD_GET, EC_WORD_GOING, EC_WORD_EXCL, EC_WORD_THIS, EC_WORD_IS, EC_WORD_GOOD_BYE},
- .speechLose = {EC_WORD_I_VE, EC_WORD_GOT, EC_WORD_TO, EC_WORD_GET, EC_WORD_GOING, 0xFFFF},
+ .speechLose = {EC_WORD_I_VE, EC_WORD_GOT, EC_WORD_TO, EC_WORD_GET, EC_WORD_GOING, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Ruben
},
[FRONTIER_TRAINER_LAMAR] = {
.facilityClass = FACILITY_CLASS_GENTLEMAN,
.trainerName = _("LAMAR"),
- .speechBefore = {EC_WORD_A, EC_MOVE2(PRESENT), EC_WORD_FOR, EC_WORD_ME, EC_WORD_QUES, 0xFFFF},
+ .speechBefore = {EC_WORD_A, EC_MOVE2(PRESENT), EC_WORD_FOR, EC_WORD_ME, EC_WORD_QUES, EC_EMPTY_WORD},
.speechWin = {EC_WORD_MMM, EC_WORD_THIS, EC_WORD_IS, EC_WORD_QUITE, EC_WORD_TASTY, EC_WORD_ELLIPSIS},
- .speechLose = {EC_WORD_OH, EC_WORD_IT_S, EC_WORD_A, EC_WORD_GAME, EC_WORD_IS_IT_QUES, 0xFFFF},
+ .speechLose = {EC_WORD_OH, EC_WORD_IT_S, EC_WORD_A, EC_WORD_GAME, EC_WORD_IS_IT_QUES, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Lamar
},
[FRONTIER_TRAINER_JAXON] = {
@@ -1645,14 +1645,14 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.trainerName = _("SKYLER"),
.speechBefore = {EC_MOVE2(INGRAIN), EC_WORD_IS, EC_WORD_MY, EC_WORD_CHOICE, EC_WORD_BATTLE, EC_WORD_MOVE},
.speechWin = {EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_MOVE, EC_WORD_ME, EC_WORD_NOW, EC_WORD_EXCL},
- .speechLose = {EC_WORD_YOU, EC_MOVE(CUT), EC_WORD_ME, EC_WORD_DOWN, EC_WORD_ELLIPSIS, 0xFFFF},
+ .speechLose = {EC_WORD_YOU, EC_MOVE(CUT), EC_WORD_ME, EC_WORD_DOWN, EC_WORD_ELLIPSIS, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Skyler
},
[FRONTIER_TRAINER_RUTH] = {
.facilityClass = FACILITY_CLASS_PICNICKER,
.trainerName = _("RUTH"),
.speechBefore = {EC_WORD_I, EC_WORD_WANT, EC_WORD_TO, EC_WORD_ENJOY, EC_WORD_THIS, EC_WORD_BATTLE},
- .speechWin = {EC_WORD_THAT_WAS, EC_WORD_MUCH, EC_WORD_TOO, EC_WORD_EASY, EC_WORD_EXCL, 0xFFFF},
+ .speechWin = {EC_WORD_THAT_WAS, EC_WORD_MUCH, EC_WORD_TOO, EC_WORD_EASY, EC_WORD_EXCL, EC_EMPTY_WORD},
.speechLose = {EC_WORD_PLEASE, EC_WORD_STOP, EC_WORD_I, EC_WORD_DON_T, EC_WORD_ENJOY, EC_WORD_THIS},
.monSet = gBattleFrontierTrainerMons_Ruth
},
@@ -1669,7 +1669,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.trainerName = _("PEDRO"),
.speechBefore = {EC_WORD_A, EC_WORD_SWIFT_SWIM, EC_WORD_WILL, EC_WORD_DO, EC_WORD_YOU, EC_WORD_GOOD},
.speechWin = {EC_WORD_THAT_S, EC_WORD_HOW, EC_WORD_I, EC_WORD_SINK, EC_WORD_AN, EC_WORD_OPPONENT},
- .speechLose = {EC_WORD_UH_OH, EC_WORD_EXCL, 0xFFFF, EC_WORD_A, EC_MOVE(WHIRLPOOL), EC_WORD_EXCL},
+ .speechLose = {EC_WORD_UH_OH, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_A, EC_MOVE(WHIRLPOOL), EC_WORD_EXCL},
.monSet = gBattleFrontierTrainerMons_Pedro
},
[FRONTIER_TRAINER_ERICK] = {
@@ -1693,7 +1693,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.trainerName = _("JOYCE"),
.speechBefore = {EC_WORD_YOU, EC_WORD_MAKE, EC_WORD_ME, EC_WORD_GO, EC_WORD_AHAHA, EC_WORD_EXCL},
.speechWin = {EC_WORD_LALALA, EC_WORD_NO, EC_WORD_LOSING, EC_WORD_FOR, EC_WORD_ME, EC_WORD_EXCL},
- .speechLose = {EC_WORD_LALALA, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_HUH_QUES, 0xFFFF, 0xFFFF},
+ .speechLose = {EC_WORD_LALALA, EC_WORD_ELLIPSIS, EC_EMPTY_WORD, EC_WORD_HUH_QUES, EC_EMPTY_WORD, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Joyce
},
[FRONTIER_TRAINER_TODD] = {
@@ -1707,8 +1707,8 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
[FRONTIER_TRAINER_GAVIN] = {
.facilityClass = FACILITY_CLASS_POKEFAN_M,
.trainerName = _("GAVIN"),
- .speechBefore = {EC_WORD_I, EC_WORD_WILL, EC_MOVE(BIDE), EC_WORD_MY, EC_WORD_TIME, 0xFFFF},
- .speechWin = {EC_WORD_IT_S, EC_WORD_OVER, EC_WORD_SO, EC_WORD_SOON, EC_WORD_QUES, 0xFFFF},
+ .speechBefore = {EC_WORD_I, EC_WORD_WILL, EC_MOVE(BIDE), EC_WORD_MY, EC_WORD_TIME, EC_EMPTY_WORD},
+ .speechWin = {EC_WORD_IT_S, EC_WORD_OVER, EC_WORD_SO, EC_WORD_SOON, EC_WORD_QUES, EC_EMPTY_WORD},
.speechLose = {EC_WORD_MY, EC_WORD_MISTAKE, EC_WORD_WAS, EC_WORD_TOO, EC_WORD_EXPENSIVE, EC_WORD_ELLIPSIS},
.monSet = gBattleFrontierTrainerMons_Gavin
},
@@ -1716,7 +1716,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.facilityClass = FACILITY_CLASS_POKEFAN_F,
.trainerName = _("MALORY"),
.speechBefore = {EC_WORD_PROMISE, EC_WORD_TO, EC_WORD_SHOW, EC_WORD_ME, EC_WORD_CUTE, EC_WORD_POKEMON},
- .speechWin = {EC_WORD_GIGGLE, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_THANK_YOU, EC_WORD_SO, EC_WORD_MUCH},
+ .speechWin = {EC_WORD_GIGGLE, EC_WORD_ELLIPSIS, EC_EMPTY_WORD, EC_WORD_THANK_YOU, EC_WORD_SO, EC_WORD_MUCH},
.speechLose = {EC_WORD_TCH, EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_AREN_T, EC_WORD_VERY, EC_WORD_NICE},
.monSet = gBattleFrontierTrainerMons_Malory
},
@@ -1733,7 +1733,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.trainerName = _("OSCAR"),
.speechBefore = {EC_WORD_LET_S, EC_WORD_SEE, EC_WORD_YOUR, EC_WORD_POWER, EC_WORD_IN, EC_WORD_FULL},
.speechWin = {EC_WORD_THAT_WAS, EC_WORD_NOT, EC_WORD_YOUR, EC_WORD_FULL, EC_WORD_POWER, EC_WORD_EXCL},
- .speechLose = {EC_WORD_NOT, EC_WORD_FUNNY, EC_WORD_ELLIPSIS, EC_WORD_YOU_RE, EC_WORD_TOO_STRONG, 0xFFFF},
+ .speechLose = {EC_WORD_NOT, EC_WORD_FUNNY, EC_WORD_ELLIPSIS, EC_WORD_YOU_RE, EC_WORD_TOO_STRONG, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Oscar
},
[FRONTIER_TRAINER_WILSON] = {
@@ -1772,8 +1772,8 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.facilityClass = FACILITY_CLASS_COOLTRAINER_M,
.trainerName = _("ALONZO"),
.speechBefore = {EC_WORD_I_VE, EC_WORD_NOT, EC_WORD_LOST, EC_WORD_ONCE, EC_WORD_YET, EC_WORD_EXCL},
- .speechWin = {EC_WORD_YOUR, EC_WORD_SAD, EC_WORD_LOOK, EC_WORD_BECOMES, EC_WORD_YOU, 0xFFFF},
- .speechLose = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_BELIEVE, EC_WORD_THIS, EC_WORD_ELLIPSIS, 0xFFFF},
+ .speechWin = {EC_WORD_YOUR, EC_WORD_SAD, EC_WORD_LOOK, EC_WORD_BECOMES, EC_WORD_YOU, EC_EMPTY_WORD},
+ .speechLose = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_BELIEVE, EC_WORD_THIS, EC_WORD_ELLIPSIS, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Alonzo
},
[FRONTIER_TRAINER_VINCE] = {
@@ -1812,7 +1812,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.facilityClass = FACILITY_CLASS_COOLTRAINER_F,
.trainerName = _("CARRIE"),
.speechBefore = {EC_WORD_I, EC_WORD_WILL, EC_WORD_SHOW, EC_WORD_YOU, EC_WORD_GUTSY, EC_WORD_EXCL},
- .speechWin = {EC_WORD_IT_S, EC_WORD_ALL, EC_WORD_ABOUT, EC_WORD_GUTS, EC_WORD_EXCL, 0xFFFF},
+ .speechWin = {EC_WORD_IT_S, EC_WORD_ALL, EC_WORD_ABOUT, EC_WORD_GUTS, EC_WORD_EXCL, EC_EMPTY_WORD},
.speechLose = {EC_WORD_OH, EC_WORD_NO, EC_WORD_ELLIPSIS, EC_MOVE(SELF_DESTRUCT), EC_WORD_MODE, EC_WORD_EXCL},
.monSet = gBattleFrontierTrainerMons_Carrie
},
@@ -1827,9 +1827,9 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
[FRONTIER_TRAINER_TYLER] = {
.facilityClass = FACILITY_CLASS_PKMN_RANGER_M,
.trainerName = _("TYLER"),
- .speechBefore = {EC_WORD_YO, EC_WORD_EXCL, 0xFFFF, EC_WORD_LET_S, EC_WORD_GO, EC_WORD_EXCL_EXCL},
- .speechWin = {EC_WORD_YO, EC_WORD_EXCL, 0xFFFF, EC_WORD_I, EC_WORD_WON, EC_WORD_YO},
- .speechLose = {EC_WORD_YO, EC_WORD_EXCL, 0xFFFF, EC_WORD_I, EC_WORD_LOST, EC_WORD_YO},
+ .speechBefore = {EC_WORD_YO, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_LET_S, EC_WORD_GO, EC_WORD_EXCL_EXCL},
+ .speechWin = {EC_WORD_YO, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_I, EC_WORD_WON, EC_WORD_YO},
+ .speechLose = {EC_WORD_YO, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_I, EC_WORD_LOST, EC_WORD_YO},
.monSet = gBattleFrontierTrainerMons_Tyler
},
[FRONTIER_TRAINER_CHAZ] = {
@@ -1867,7 +1867,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
[FRONTIER_TRAINER_DORINE] = {
.facilityClass = FACILITY_CLASS_PKMN_RANGER_F,
.trainerName = _("DORINE"),
- .speechBefore = {EC_WORD_I_AM, EC_WORD_YOUNG, EC_WORD_AND, EC_WORD_STRONG, EC_WORD_EXCL, 0xFFFF},
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_YOUNG, EC_WORD_AND, EC_WORD_STRONG, EC_WORD_EXCL, EC_EMPTY_WORD},
.speechWin = {EC_WORD_SEE, EC_WORD_QUES, EC_WORD_AREN_T, EC_WORD_I, EC_WORD_GOOD, EC_WORD_QUES},
.speechLose = {EC_WORD_THIS, EC_WORD_ISN_T, EC_WORD_WORKING, EC_WORD_OUT, EC_WORD_AT, EC_WORD_ALL},
.monSet = gBattleFrontierTrainerMons_Dorine
@@ -1883,9 +1883,9 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
[FRONTIER_TRAINER_DAVIN] = {
.facilityClass = FACILITY_CLASS_DRAGON_TAMER,
.trainerName = _("DAVIN"),
- .speechBefore = {EC_WORD_LET_S, EC_WORD_HEAR, EC_WORD_YOU, EC_MOVE2(ROAR), EC_WORD_EXCL, 0xFFFF},
- .speechWin = {EC_WORD_WROOOAAR_EXCL, 0xFFFF, 0xFFFF, EC_WORD_VICTORY, EC_WORD_EXCL_EXCL, 0xFFFF},
- .speechLose = {EC_WORD_WROOOAAR_EXCL, 0xFFFF, 0xFFFF, EC_WORD_WHY, EC_WORD_QUES_EXCL, 0xFFFF},
+ .speechBefore = {EC_WORD_LET_S, EC_WORD_HEAR, EC_WORD_YOU, EC_MOVE2(ROAR), EC_WORD_EXCL, EC_EMPTY_WORD},
+ .speechWin = {EC_WORD_WROOOAAR_EXCL, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_WORD_VICTORY, EC_WORD_EXCL_EXCL, EC_EMPTY_WORD},
+ .speechLose = {EC_WORD_WROOOAAR_EXCL, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_WORD_WHY, EC_WORD_QUES_EXCL, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Davin
},
[FRONTIER_TRAINER_TREVON] = {
@@ -1915,7 +1915,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
[FRONTIER_TRAINER_RAUL] = {
.facilityClass = FACILITY_CLASS_BLACK_BELT,
.trainerName = _("RAUL"),
- .speechBefore = {EC_WORD_I, EC_WORD_REJECT, EC_WORD_EVERY, EC_WORD_WEAK, EC_WORD_TRAINER, 0xFFFF},
+ .speechBefore = {EC_WORD_I, EC_WORD_REJECT, EC_WORD_EVERY, EC_WORD_WEAK, EC_WORD_TRAINER, EC_EMPTY_WORD},
.speechWin = {EC_WORD_HUMPH, EC_WORD_EXCL, EC_WORD_ANOTHER, EC_WORD_WEAK, EC_WORD_TRAINER, EC_WORD_ELLIPSIS},
.speechLose = {EC_WORD_THERE, EC_WORD_IS, EC_WORD_NOTHING, EC_WORD_WEAK, EC_WORD_ABOUT, EC_WORD_YOU},
.monSet = gBattleFrontierTrainerMons_Raul
@@ -1923,7 +1923,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
[FRONTIER_TRAINER_KAY] = {
.facilityClass = FACILITY_CLASS_BATTLE_GIRL,
.trainerName = _("KAY"),
- .speechBefore = {EC_WORD_AND, EC_WORD_YET, EC_WORD_ANOTHER, EC_WORD_BATTLE, EC_WORD_QUES, 0xFFFF},
+ .speechBefore = {EC_WORD_AND, EC_WORD_YET, EC_WORD_ANOTHER, EC_WORD_BATTLE, EC_WORD_QUES, EC_EMPTY_WORD},
.speechWin = {EC_WORD_I, EC_WORD_WON, EC_WORD_BUT, EC_WORD_I_AM, EC_WORD_TIRED, EC_WORD_ELLIPSIS},
.speechLose = {EC_WORD_GOOD, EC_WORD_IT_S, EC_WORD_OVER, EC_WORD_AT, EC_WORD_LAST, EC_WORD_ELLIPSIS},
.monSet = gBattleFrontierTrainerMons_Kay
@@ -1940,7 +1940,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.facilityClass = FACILITY_CLASS_BATTLE_GIRL,
.trainerName = _("ALANA"),
.speechBefore = {EC_WORD_EAT, EC_WORD_MY, EC_WORD_INVINCIBLE, EC_WORD_ATTACK, EC_WORD_YOU, EC_WORD_EXCL},
- .speechWin = {EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_MUCH, EC_WORD_TO, EC_WORD_LEARN, 0xFFFF},
+ .speechWin = {EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_MUCH, EC_WORD_TO, EC_WORD_LEARN, EC_EMPTY_WORD},
.speechLose = {EC_WORD_SO, EC_WORD_MUCH, EC_WORD_FOR, EC_WORD_MY, EC_WORD_INVINCIBLE, EC_WORD_ATTACK},
.monSet = gBattleFrontierTrainerMons_Alana
},
@@ -1948,7 +1948,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.facilityClass = FACILITY_CLASS_EXPERT_M,
.trainerName = _("ALEXAS"),
.speechBefore = {EC_WORD_GOOD, EC_WORD_TO, EC_WORD_MEET_YOU, EC_WORD_YOUNG, EC_WORD_TRAINER, EC_WORD_EXCL},
- .speechWin = {EC_WORD_WAHAHAHA, EC_WORD_EXCL, 0xFFFF, EC_WORD_GIVE, EC_WORD_IT, EC_WORD_UP},
+ .speechWin = {EC_WORD_WAHAHAHA, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_GIVE, EC_WORD_IT, EC_WORD_UP},
.speechLose = {EC_WORD_YOU, EC_WORD_ARE, EC_WORD_A, EC_WORD_STRONG, EC_WORD_TRAINER, EC_WORD_KID},
.monSet = gBattleFrontierTrainerMons_Alexas
},
@@ -1964,7 +1964,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.facilityClass = FACILITY_CLASS_EXPERT_M,
.trainerName = _("JASPER"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_OLD, EC_WORD_I_AM, EC_WORD_SKILLED, EC_WORD_EXCL},
- .speechWin = {EC_WORD_SKILLED, EC_WORD_THAT_S, EC_WORD_WHAT, EC_WORD_I_AM, EC_WORD_EXCL, 0xFFFF},
+ .speechWin = {EC_WORD_SKILLED, EC_WORD_THAT_S, EC_WORD_WHAT, EC_WORD_I_AM, EC_WORD_EXCL, EC_EMPTY_WORD},
.speechLose = {EC_WORD_I_AM, EC_WORD_SHOCKED, EC_WORD_EXCL, EC_WORD_DOWN, EC_WORD_I, EC_WORD_GO},
.monSet = gBattleFrontierTrainerMons_Jasper
},
@@ -1972,14 +1972,14 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.facilityClass = FACILITY_CLASS_EXPERT_F,
.trainerName = _("NADIA"),
.speechBefore = {EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_BEAT, EC_WORD_ME, EC_WORD_DOWN, EC_WORD_EXCL},
- .speechWin = {EC_WORD_HAH, EC_WORD_EXCL, 0xFFFF, EC_WORD_I, EC_WORD_BEAT, EC_WORD_YOU},
- .speechLose = {EC_WORD_I_AM, EC_MOVE2(BEAT_UP), EC_WORD_AND, EC_WORD_DOWNCAST, EC_WORD_ELLIPSIS, 0xFFFF},
+ .speechWin = {EC_WORD_HAH, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_I, EC_WORD_BEAT, EC_WORD_YOU},
+ .speechLose = {EC_WORD_I_AM, EC_MOVE2(BEAT_UP), EC_WORD_AND, EC_WORD_DOWNCAST, EC_WORD_ELLIPSIS, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Nadia
},
[FRONTIER_TRAINER_MIRANDA] = {
.facilityClass = FACILITY_CLASS_EXPERT_F,
.trainerName = _("MIRANDA"),
- .speechBefore = {EC_WORD_WELL, EC_WORD_WELL, 0xFFFF, EC_WORD_LET_S, EC_WORD_START, 0xFFFF},
+ .speechBefore = {EC_WORD_WELL, EC_WORD_WELL, EC_EMPTY_WORD, EC_WORD_LET_S, EC_WORD_START, EC_EMPTY_WORD},
.speechWin = {EC_WORD_WHAT, EC_WORD_QUES, EC_WORD_DONE, EC_WORD_SO, EC_WORD_SOON, EC_WORD_QUES},
.speechLose = {EC_WORD_WELL, EC_WORD_I, EC_WORD_SEE, EC_WORD_THAT, EC_WORD_I_AM, EC_WORD_TOO_WEAK},
.monSet = gBattleFrontierTrainerMons_Miranda
@@ -1987,8 +1987,8 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
[FRONTIER_TRAINER_EMMA] = {
.facilityClass = FACILITY_CLASS_EXPERT_F,
.trainerName = _("EMMA"),
- .speechBefore = {EC_WORD_I_VE, EC_WORD_BEEN, EC_WORD_HEARING, EC_WORD_ABOUT, EC_WORD_YOU, 0xFFFF},
- .speechWin = {EC_WORD_I, EC_WORD_THINK, EC_WORD_I_VE, EC_WORD_MISHEARD, EC_WORD_THINGS, 0xFFFF},
+ .speechBefore = {EC_WORD_I_VE, EC_WORD_BEEN, EC_WORD_HEARING, EC_WORD_ABOUT, EC_WORD_YOU, EC_EMPTY_WORD},
+ .speechWin = {EC_WORD_I, EC_WORD_THINK, EC_WORD_I_VE, EC_WORD_MISHEARD, EC_WORD_THINGS, EC_EMPTY_WORD},
.speechLose = {EC_WORD_WHAT, EC_WORD_I_VE, EC_WORD_BEEN, EC_WORD_HEARING, EC_WORD_IS, EC_WORD_RIGHT},
.monSet = gBattleFrontierTrainerMons_Emma
},
@@ -2004,15 +2004,15 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.facilityClass = FACILITY_CLASS_PSYCHIC_M,
.trainerName = _("STANLY"),
.speechBefore = {EC_WORD_THIS, EC_WORD_SHOULD, EC_WORD_BE, EC_WORD_AN, EC_WORD_EASY, EC_WORD_MATCH},
- .speechWin = {EC_WORD_IT, EC_WORD_REALLY, EC_WORD_WAS, EC_WORD_EASY, 0xFFFF, 0xFFFF},
- .speechLose = {EC_WORD_ARE, EC_WORD_YOU, EC_WORD_HAPPY, EC_WORD_NOW, EC_WORD_QUES, 0xFFFF},
+ .speechWin = {EC_WORD_IT, EC_WORD_REALLY, EC_WORD_WAS, EC_WORD_EASY, EC_EMPTY_WORD, EC_EMPTY_WORD},
+ .speechLose = {EC_WORD_ARE, EC_WORD_YOU, EC_WORD_HAPPY, EC_WORD_NOW, EC_WORD_QUES, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Stanly
},
[FRONTIER_TRAINER_DARIO] = {
.facilityClass = FACILITY_CLASS_PSYCHIC_M,
.trainerName = _("DARIO"),
.speechBefore = {EC_WORD_MY, EC_MOVE2(FORESIGHT), EC_WORD_SAYS, EC_WORD_I, EC_WORD_WILL, EC_WORD_WIN},
- .speechWin = {EC_WORD_MY, EC_MOVE2(FORESIGHT), EC_WORD_HAS, EC_WORD_BEEN, EC_WORD_PERFECT, 0xFFFF},
+ .speechWin = {EC_WORD_MY, EC_MOVE2(FORESIGHT), EC_WORD_HAS, EC_WORD_BEEN, EC_WORD_PERFECT, EC_EMPTY_WORD},
.speechLose = {EC_WORD_I, EC_WORD_DIDN_T, EC_WORD_SEE, EC_WORD_THIS, EC_MOVE(REVERSAL), EC_WORD_ELLIPSIS},
.monSet = gBattleFrontierTrainerMons_Dario
},
@@ -2020,7 +2020,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.facilityClass = FACILITY_CLASS_PSYCHIC_F,
.trainerName = _("KARLEE"),
.speechBefore = {EC_WORD_SOMETHING, EC_WORD_GOOD, EC_WORD_WILL, EC_WORD_COME, EC_WORD_OF, EC_WORD_THIS},
- .speechWin = {EC_WORD_YOU, EC_WORD_SEE, EC_WORD_QUES, EC_WORD_FANTASTIC, EC_WORD_EXCL, 0xFFFF},
+ .speechWin = {EC_WORD_YOU, EC_WORD_SEE, EC_WORD_QUES, EC_WORD_FANTASTIC, EC_WORD_EXCL, EC_EMPTY_WORD},
.speechLose = {EC_WORD_THAT, EC_WORD_SOMETHING, EC_WORD_GOOD, EC_WORD_WENT, EC_WORD_TO, EC_WORD_YOU},
.monSet = gBattleFrontierTrainerMons_Karlee
},
@@ -2043,7 +2043,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
[FRONTIER_TRAINER_DELILAH] = {
.facilityClass = FACILITY_CLASS_HEX_MANIAC,
.trainerName = _("DELILAH"),
- .speechBefore = {EC_WORD_DON_T, EC_MOVE(GRUDGE), EC_WORD_ME, EC_WORD_IF_I_WIN, EC_WORD_OK_QUES, 0xFFFF},
+ .speechBefore = {EC_WORD_DON_T, EC_MOVE(GRUDGE), EC_WORD_ME, EC_WORD_IF_I_WIN, EC_WORD_OK_QUES, EC_EMPTY_WORD},
.speechWin = {EC_WORD_I_AM, EC_WORD_SORRY, EC_WORD_TO, EC_WORD_SEE, EC_WORD_YOU, EC_WORD_ANGRY},
.speechLose = {EC_WORD_I, EC_WORD_HAVE, EC_WORD_A, EC_MOVE(GRUDGE), EC_WORD_WITH, EC_WORD_YOU},
.monSet = gBattleFrontierTrainerMons_Delilah
@@ -2060,16 +2060,16 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.facilityClass = FACILITY_CLASS_HEX_MANIAC,
.trainerName = _("LEXIE"),
.speechBefore = {EC_WORD_WANT, EC_WORD_TO, EC_WORD_SEE, EC_WORD_SCARY, EC_WORD_POKEMON, EC_WORD_QUES},
- .speechWin = {EC_WORD_WASN_T, EC_WORD_THAT, EC_WORD_SCARY, EC_WORD_EH_QUES, 0xFFFF, 0xFFFF},
+ .speechWin = {EC_WORD_WASN_T, EC_WORD_THAT, EC_WORD_SCARY, EC_WORD_EH_QUES, EC_EMPTY_WORD, EC_EMPTY_WORD},
.speechLose = {EC_WORD_YOU_RE, EC_WORD_MORE, EC_WORD_SCARY, EC_WORD_THAN, EC_WORD_MY, EC_WORD_POKEMON},
.monSet = gBattleFrontierTrainerMons_Lexie
},
[FRONTIER_TRAINER_MILLER] = {
.facilityClass = FACILITY_CLASS_POKEMANIAC,
.trainerName = _("MILLER"),
- .speechBefore = {EC_WORD_HELLO, EC_WORD_QUES, 0xFFFF, EC_WORD_HELLO, EC_WORD_QUES_EXCL, 0xFFFF},
+ .speechBefore = {EC_WORD_HELLO, EC_WORD_QUES, EC_EMPTY_WORD, EC_WORD_HELLO, EC_WORD_QUES_EXCL, EC_EMPTY_WORD},
.speechWin = {EC_WORD_HELLO, EC_WORD_MOTHER, EC_WORD_EXCL, EC_WORD_I, EC_WORD_WON, EC_WORD_EXCL},
- .speechLose = {EC_WORD_MY, EC_WORD_PHONE, EC_WORD_ISN_T, EC_WORD_WORKING, EC_WORD_ELLIPSIS, 0xFFFF},
+ .speechLose = {EC_WORD_MY, EC_WORD_PHONE, EC_WORD_ISN_T, EC_WORD_WORKING, EC_WORD_ELLIPSIS, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Miller
},
[FRONTIER_TRAINER_MARV] = {
@@ -2099,7 +2099,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
[FRONTIER_TRAINER_GREGORY] = {
.facilityClass = FACILITY_CLASS_GENTLEMAN,
.trainerName = _("GREGORY"),
- .speechBefore = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_THAT, EC_WORD_OLD, EC_WORD_YET, 0xFFFF},
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_THAT, EC_WORD_OLD, EC_WORD_YET, EC_EMPTY_WORD},
.speechWin = {EC_WORD_WHO, EC_WORD_SAYS, EC_WORD_I_AM, EC_WORD_TOO, EC_WORD_OLD, EC_WORD_QUES},
.speechLose = {EC_WORD_PLEASE, EC_WORD_I_AM, EC_WORD_REALLY, EC_WORD_NOT, EC_WORD_THAT, EC_WORD_OLD},
.monSet = gBattleFrontierTrainerMons_Gregory
@@ -2107,23 +2107,23 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
[FRONTIER_TRAINER_REESE] = {
.facilityClass = FACILITY_CLASS_GENTLEMAN,
.trainerName = _("REESE"),
- .speechBefore = {EC_WORD_I_VE, EC_WORD_A, EC_WORD_COUPLE, EC_WORD_THINGS, 0xFFFF, 0xFFFF},
- .speechWin = {EC_WORD_DON_T, EC_WORD_DIET, EC_WORD_PLAY, EC_WORD_SPORTS, EC_WORD_INSTEAD, 0xFFFF},
+ .speechBefore = {EC_WORD_I_VE, EC_WORD_A, EC_WORD_COUPLE, EC_WORD_THINGS, EC_EMPTY_WORD, EC_EMPTY_WORD},
+ .speechWin = {EC_WORD_DON_T, EC_WORD_DIET, EC_WORD_PLAY, EC_WORD_SPORTS, EC_WORD_INSTEAD, EC_EMPTY_WORD},
.speechLose = {EC_WORD_INSTEAD, EC_WORD_OF, EC_WORD_TELEVISION, EC_WORD_GET, EC_WORD_A, EC_WORD_BOOK},
.monSet = gBattleFrontierTrainerMons_Reese
},
[FRONTIER_TRAINER_MASON] = {
.facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_M,
.trainerName = _("MASON"),
- .speechBefore = {EC_WORD_PLEASE, EC_WORD_DON_T, EC_WORD_MAKE, EC_WORD_THIS, EC_WORD_SCARY, 0xFFFF},
- .speechWin = {EC_WORD_THANK_YOU, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_I_AM, EC_WORD_HAPPY, EC_WORD_NOW},
- .speechLose = {EC_WORD_I_AM, EC_WORD_DISAPPOINTED, EC_WORD_ELLIPSIS, 0xFFFF, 0xFFFF, 0xFFFF},
+ .speechBefore = {EC_WORD_PLEASE, EC_WORD_DON_T, EC_WORD_MAKE, EC_WORD_THIS, EC_WORD_SCARY, EC_EMPTY_WORD},
+ .speechWin = {EC_WORD_THANK_YOU, EC_WORD_ELLIPSIS, EC_EMPTY_WORD, EC_WORD_I_AM, EC_WORD_HAPPY, EC_WORD_NOW},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_DISAPPOINTED, EC_WORD_ELLIPSIS, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Mason
},
[FRONTIER_TRAINER_TOBY] = {
.facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_M,
.trainerName = _("TOBY"),
- .speechBefore = {EC_WORD_LISTEN, EC_WORD_UP, 0xFFFF, EC_WORD_I, EC_WORD_ALWAYS, EC_WORD_WIN},
+ .speechBefore = {EC_WORD_LISTEN, EC_WORD_UP, EC_EMPTY_WORD, EC_WORD_I, EC_WORD_ALWAYS, EC_WORD_WIN},
.speechWin = {EC_WORD_I_AM, EC_WORD_A, EC_WORD_GENIUS, EC_WORD_OR, EC_WORD_WHAT, EC_WORD_QUES},
.speechLose = {EC_WORD_I, EC_WORD_CAN, EC_WORD_BEAT, EC_WORD_YOU, EC_WORD_AT, EC_WORD_SMARTNESS},
.monSet = gBattleFrontierTrainerMons_Toby
@@ -2141,14 +2141,14 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.trainerName = _("PIPER"),
.speechBefore = {EC_WORD_COME_ON, EC_WORD_YOU, EC_WORD_NEED, EC_WORD_A, EC_WORD_SPEED_BOOST, EC_WORD_QUES},
.speechWin = {EC_WORD_YOU, EC_WORD_NEED, EC_WORD_TO, EC_WORD_SHOW, EC_WORD_MORE, EC_WORD_GUTS},
- .speechLose = {EC_WORD_OH, EC_WORD_YOU, EC_WORD_EXCL, 0xFFFF, 0xFFFF, 0xFFFF},
+ .speechLose = {EC_WORD_OH, EC_WORD_YOU, EC_WORD_EXCL, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Piper
},
[FRONTIER_TRAINER_FINN] = {
.facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_M,
.trainerName = _("FINN"),
- .speechBefore = {EC_WORD_NOT, EC_WORD_ANOTHER, EC_WORD_TRAINER, EC_WORD_BATTLE, EC_WORD_ELLIPSIS, 0xFFFF},
- .speechWin = {EC_WORD_WON_T, EC_WORD_THIS, EC_WORD_EVER, EC_WORD_END, EC_WORD_QUES, 0xFFFF},
+ .speechBefore = {EC_WORD_NOT, EC_WORD_ANOTHER, EC_WORD_TRAINER, EC_WORD_BATTLE, EC_WORD_ELLIPSIS, EC_EMPTY_WORD},
+ .speechWin = {EC_WORD_WON_T, EC_WORD_THIS, EC_WORD_EVER, EC_WORD_END, EC_WORD_QUES, EC_EMPTY_WORD},
.speechLose = {EC_WORD_I, EC_WORD_FINALLY, EC_WORD_GET, EC_WORD_TO, EC_MOVE2(REST), EC_WORD_A_LITTLE},
.monSet = gBattleFrontierTrainerMons_Finn
},
@@ -2157,7 +2157,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.trainerName = _("SAMIR"),
.speechBefore = {EC_WORD_I, EC_MOVE2(DIVE), EC_WORD_BELOW, EC_WORD_THE, EC_MOVE2(SURF), EC_WORD_EXCL},
.speechWin = {EC_WORD_YAHOO, EC_WORD_TAKE, EC_WORD_A, EC_MOVE2(DIVE), EC_WORD_YOU, EC_WORD_EXCL},
- .speechLose = {EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_TO, EC_WORD_SINK, EC_WORD_ELLIPSIS, 0xFFFF},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_TO, EC_WORD_SINK, EC_WORD_ELLIPSIS, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Samir
},
[FRONTIER_TRAINER_FIONA] = {
@@ -2179,7 +2179,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
[FRONTIER_TRAINER_NICO] = {
.facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_M,
.trainerName = _("NICO"),
- .speechBefore = {EC_WORD_LIKE, EC_WORD_A, EC_MOVE(SONIC_BOOM), EC_WORD_I_VE_ARRIVED, 0xFFFF, 0xFFFF},
+ .speechBefore = {EC_WORD_LIKE, EC_WORD_A, EC_MOVE(SONIC_BOOM), EC_WORD_I_VE_ARRIVED, EC_EMPTY_WORD, EC_EMPTY_WORD},
.speechWin = {EC_WORD_SORRY, EC_WORD_TO, EC_WORD_MAKE, EC_WORD_YOU, EC_WORD_SO, EC_WORD_DOWNCAST},
.speechLose = {EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_WITH, EC_WORD_A, EC_MOVE2(SUPERSONIC), EC_WORD_SPEED_BOOST},
.monSet = gBattleFrontierTrainerMons_Nico
@@ -2220,7 +2220,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.facilityClass = FACILITY_CLASS_BUG_MANIAC,
.trainerName = _("LIAM"),
.speechBefore = {EC_WORD_WE, EC_WORD_REALLY, EC_WORD_DISLIKE, EC_WORD_FIRE, EC_WORD_AND, EC_WORD_FLYING},
- .speechWin = {EC_WORD_BUG, EC_WORD_POKEMON, EC_WORD_AREN_T, EC_WORD_BAD, EC_WORD_HEY_QUES, 0xFFFF},
+ .speechWin = {EC_WORD_BUG, EC_WORD_POKEMON, EC_WORD_AREN_T, EC_WORD_BAD, EC_WORD_HEY_QUES, EC_EMPTY_WORD},
.speechLose = {EC_WORD_YOU, EC_WORD_KNOW, EC_WORD_WHAT, EC_WORD_WE, EC_WORD_DISLIKE, EC_WORD_HEY_QUES},
.monSet = gBattleFrontierTrainerMons_Liam
},
@@ -2269,14 +2269,14 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.trainerName = _("TRISTON"),
.speechBefore = {EC_WORD_I, EC_WORD_WOULD, EC_WORD_RATHER, EC_WORD_LOOK, EC_WORD_AT, EC_WORD_POKEMON},
.speechWin = {EC_WORD_HUH_QUES, EC_WORD_YOU, EC_WORD_MEAN, EC_WORD_I, EC_WORD_WON, EC_WORD_QUES_EXCL},
- .speechLose = {EC_WORD_SEE, EC_WORD_QUES, 0xFFFF, EC_WORD_I, EC_WORD_ALWAYS, EC_WORD_LOSE},
+ .speechLose = {EC_WORD_SEE, EC_WORD_QUES, EC_EMPTY_WORD, EC_WORD_I, EC_WORD_ALWAYS, EC_WORD_LOSE},
.monSet = gBattleFrontierTrainerMons_Triston
},
[FRONTIER_TRAINER_CHARLES] = {
.facilityClass = FACILITY_CLASS_GUITARIST,
.trainerName = _("CHARLES"),
.speechBefore = {EC_WORD_IT_S, EC_WORD_HOPELESS, EC_WORD_TO, EC_MOVE2(STRUGGLE), EC_WORD_WITH, EC_WORD_ME},
- .speechWin = {EC_MOVE(SUBMISSION), EC_WORD_WAS, EC_WORD_YOUR, EC_WORD_ONLY, EC_WORD_CHOICE, 0xFFFF},
+ .speechWin = {EC_MOVE(SUBMISSION), EC_WORD_WAS, EC_WORD_YOUR, EC_WORD_ONLY, EC_WORD_CHOICE, EC_EMPTY_WORD},
.speechLose = {EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_DOWN, EC_WORD_DOWN, EC_WORD_DOWN, EC_WORD_EXCL},
.monSet = gBattleFrontierTrainerMons_Charles
},
@@ -2284,7 +2284,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.facilityClass = FACILITY_CLASS_GUITARIST,
.trainerName = _("RAYMOND"),
.speechBefore = {EC_WORD_WANT, EC_WORD_TO, EC_WORD_HEAR, EC_WORD_MY, EC_WORD_SONG, EC_WORD_QUES},
- .speechWin = {EC_WORD_SATISFIED, EC_WORD_THAT_S, EC_WORD_WHAT, EC_WORD_I_AM, EC_WORD_EXCL, 0xFFFF},
+ .speechWin = {EC_WORD_SATISFIED, EC_WORD_THAT_S, EC_WORD_WHAT, EC_WORD_I_AM, EC_WORD_EXCL, EC_EMPTY_WORD},
.speechLose = {EC_WORD_SATISFIED, EC_WORD_IS, EC_WORD_WHAT, EC_WORD_I, EC_WORD_CAN_T, EC_WORD_BE},
.monSet = gBattleFrontierTrainerMons_Raymond
},
@@ -2348,7 +2348,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.facilityClass = FACILITY_CLASS_KINDLER,
.trainerName = _("FERRIS"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_NO_1, EC_WORD_IN, EC_WORD_THE, EC_WORD_OLD, EC_WORD_CLASS},
- .speechWin = {EC_WORD_NO_1, EC_WORD_THAT_S, EC_WORD_WHAT, EC_WORD_I_AM, EC_WORD_EXCL, 0xFFFF},
+ .speechWin = {EC_WORD_NO_1, EC_WORD_THAT_S, EC_WORD_WHAT, EC_WORD_I_AM, EC_WORD_EXCL, EC_EMPTY_WORD},
.speechLose = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_NO_1, EC_WORD_ANY, EC_WORD_MORE, EC_WORD_ELLIPSIS},
.monSet = gBattleFrontierTrainerMons_Ferris
},
@@ -2363,24 +2363,24 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
[FRONTIER_TRAINER_PAIGE] = {
.facilityClass = FACILITY_CLASS_PARASOL_LADY,
.trainerName = _("PAIGE"),
- .speechBefore = {EC_WORD_LET_S, EC_WORD_ENJOY, EC_WORD_OUR, EC_WORD_BATTLE, EC_WORD_TOGETHER, 0xFFFF},
- .speechWin = {EC_WORD_THAT_S_IT_EXCL, 0xFFFF, 0xFFFF, EC_WORD_THANK_YOU, EC_WORD_VERY, EC_WORD_MUCH},
- .speechLose = {EC_WORD_THAT_S_IT_EXCL, 0xFFFF, 0xFFFF, EC_WORD_DO, EC_WORD_GO, EC_WORD_ON},
+ .speechBefore = {EC_WORD_LET_S, EC_WORD_ENJOY, EC_WORD_OUR, EC_WORD_BATTLE, EC_WORD_TOGETHER, EC_EMPTY_WORD},
+ .speechWin = {EC_WORD_THAT_S_IT_EXCL, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_WORD_THANK_YOU, EC_WORD_VERY, EC_WORD_MUCH},
+ .speechLose = {EC_WORD_THAT_S_IT_EXCL, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_WORD_DO, EC_WORD_GO, EC_WORD_ON},
.monSet = gBattleFrontierTrainerMons_Paige
},
[FRONTIER_TRAINER_ANYA] = {
.facilityClass = FACILITY_CLASS_BEAUTY,
.trainerName = _("ANYA"),
.speechBefore = {EC_WORD_I, EC_WORD_DISLIKE, EC_WORD_OH, EC_WORD_SO, EC_WORD_PRETTY, EC_WORD_FASHION},
- .speechWin = {EC_WORD_FASHION, EC_WORD_SHOULD, EC_WORD_MATCH, EC_WORD_THE, EC_WORD_PERSON, 0xFFFF},
- .speechLose = {EC_WORD_PRETTY, EC_WORD_COULD, EC_WORD_BE, EC_WORD_GOOD, 0xFFFF, 0xFFFF},
+ .speechWin = {EC_WORD_FASHION, EC_WORD_SHOULD, EC_WORD_MATCH, EC_WORD_THE, EC_WORD_PERSON, EC_EMPTY_WORD},
+ .speechLose = {EC_WORD_PRETTY, EC_WORD_COULD, EC_WORD_BE, EC_WORD_GOOD, EC_EMPTY_WORD, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Anya
},
[FRONTIER_TRAINER_DAWN] = {
.facilityClass = FACILITY_CLASS_BEAUTY,
.trainerName = _("DAWN"),
- .speechBefore = {EC_WORD_I, EC_WORD_GO, EC_WORD_ALL, EC_WORD_OUT, EC_WORD_EXCL, 0xFFFF},
- .speechWin = {EC_WORD_DON_T, EC_WORD_BE, EC_WORD_A, EC_WORD_BABY, EC_WORD_EXCL, 0xFFFF},
+ .speechBefore = {EC_WORD_I, EC_WORD_GO, EC_WORD_ALL, EC_WORD_OUT, EC_WORD_EXCL, EC_EMPTY_WORD},
+ .speechWin = {EC_WORD_DON_T, EC_WORD_BE, EC_WORD_A, EC_WORD_BABY, EC_WORD_EXCL, EC_EMPTY_WORD},
.speechLose = {EC_WORD_YOU, EC_WORD_WON, EC_WORD_EXCL, EC_WORD_MOVE, EC_WORD_ON, EC_WORD_EXCL},
.monSet = gBattleFrontierTrainerMons_Dawn
},
@@ -2388,8 +2388,8 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COU
.facilityClass = FACILITY_CLASS_AROMA_LADY,
.trainerName = _("ABBY"),
.speechBefore = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_A, EC_WORD_TRAINER, EC_WORD_THAT_S, EC_WORD_REFRESHING},
- .speechWin = {EC_WORD_VICTORY, EC_WORD_HAS, EC_WORD_A, EC_MOVE(SWEET_SCENT), EC_WORD_EXCL, 0xFFFF},
- .speechLose = {EC_WORD_WHAT, EC_WORD_AN, EC_WORD_AWFUL, EC_WORD_STENCH, EC_WORD_EXCL, 0xFFFF},
+ .speechWin = {EC_WORD_VICTORY, EC_WORD_HAS, EC_WORD_A, EC_MOVE(SWEET_SCENT), EC_WORD_EXCL, EC_EMPTY_WORD},
+ .speechLose = {EC_WORD_WHAT, EC_WORD_AN, EC_WORD_AWFUL, EC_WORD_STENCH, EC_WORD_EXCL, EC_EMPTY_WORD},
.monSet = gBattleFrontierTrainerMons_Abby
},
[FRONTIER_TRAINER_GRETEL] = {
diff --git a/src/data/battle_frontier/battle_tent.h b/src/data/battle_frontier/battle_tent.h
index bf89c5bc3..e1c3750bf 100644
--- a/src/data/battle_frontier/battle_tent.h
+++ b/src/data/battle_frontier/battle_tent.h
@@ -616,9 +616,9 @@ const struct BattleFrontierTrainer gSlateportBattleTentTrainers[NUM_BATTLE_TENT_
[SLATEPORT_TENT_TRAINER_MAGGIE] = {
.facilityClass = FACILITY_CLASS_SCHOOL_KID_F,
.trainerName = _("MAGGIE"),
- .speechBefore = {EC_POKEMON(VULPIX), EC_POKEMON(XATU), EC_POKEMON2(UMBREON), EC_WORD_ELLIPSIS, EC_WORD_UM, EC_WORD_ELLIPSIS},
+ .speechBefore = {EC_POKEMON(VULPIX), EC_POKEMON(XATU), EC_POKEMON_NATIONAL(UMBREON), EC_WORD_ELLIPSIS, EC_WORD_UM, EC_WORD_ELLIPSIS},
.speechWin = {EC_POKEMON(NOSEPASS), EC_WORD_ELLIPSIS, EC_WORD_UM, EC_POKEMON(SEVIPER), EC_WORD_EXCL, -1},
- .speechLose = {EC_POKEMON(NOSEPASS), EC_WORD_ELLIPSIS, EC_WORD_UM, EC_POKEMON2(SNORLAX), EC_WORD_ELLIPSIS, EC_WORD_UH_OH},
+ .speechLose = {EC_POKEMON(NOSEPASS), EC_WORD_ELLIPSIS, EC_WORD_UM, EC_POKEMON_NATIONAL(SNORLAX), EC_WORD_ELLIPSIS, EC_WORD_UH_OH},
.monSet = gSlateportBattleTentTrainerMons_Maggie
},
[SLATEPORT_TENT_TRAINER_STEPHON] = {
diff --git a/src/data/battle_frontier/trainer_hill.h b/src/data/battle_frontier/trainer_hill.h
index d8bd57576..127eb8ed4 100644
--- a/src/data/battle_frontier/trainer_hill.h
+++ b/src/data/battle_frontier/trainer_hill.h
@@ -314,7 +314,7 @@ static const struct TrHillFloor sDataTagJPDefault_Floors[] = {
.speechBefore = { EC_WORD_SISTER, EC_WORD_ALTHOUGH, EC_WORD_KIND, EC_WORD_MATCH, EC_WORD_PLEASE, EC_WORD_WITHOUT },
.speechWin = { EC_WORD_KIND, EC_WORD_ELLIPSIS, EC_WORD_INSTEAD, EC_WORD_DEEP, EC_WORD_WEAK, EC_WORD_QUES },
.speechLose = { EC_WORD_AWFUL, EC_WORD_GWAH, EC_WORD_HOPELESS, EC_WORD_CAN_T_WIN, EC_WORD_IS, EC_WORD_NONE },
- .speechAfter = { EC_WORD_AWW, 0xFFFF, 0xFFFF, EC_WORD_ALMOST, EC_WORD_GOOD, EC_WORD_ANYWHERE },
+ .speechAfter = { EC_WORD_AWW, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_WORD_ALMOST, EC_WORD_GOOD, EC_WORD_ANYWHERE },
.mons = {
[0] = NULL_BATTLE_TOWER_POKEMON,
[1] = NULL_BATTLE_TOWER_POKEMON,
@@ -444,7 +444,7 @@ static const struct TrHillFloor sDataTagNormal_Floors[] =
.unused = 0,
.speechBefore = {EC_WORD_YOU, EC_WORD_CAN, EC_WORD_CHOOSE, EC_WORD_NOT, EC_WORD_TO, EC_WORD_BELIEVE},
.speechWin = {EC_WORD_A, EC_WORD_SUPER, EC_WORD_NATURAL, EC_WORD_POWER, EC_WORD_HAS, EC_WORD_COME},
- .speechLose = {EC_WORD_THIS, EC_WORD_MUST_BE, EC_WORD_A, EC_MOVE(NIGHTMARE), EC_WORD_EXCL, 0xFFFF},
+ .speechLose = {EC_WORD_THIS, EC_WORD_MUST_BE, EC_WORD_A, EC_MOVE(NIGHTMARE), EC_WORD_EXCL, EC_EMPTY_WORD},
.speechAfter = {EC_WORD_I, EC_WORD_WILL, EC_WORD_DISAPPEAR, EC_WORD_IN, EC_WORD_THE, EC_WORD_DARK},
.mons =
{
@@ -589,7 +589,7 @@ static const struct TrHillFloor sDataTagNormal_Floors[] =
.name = _("ALFONSO"),
.facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_M,
.unused = 0,
- .speechBefore = {EC_WORD_I, EC_WORD_NEVER, EC_WORD_TAKE, EC_WORD_A, EC_WORD_TRAIN, 0xFFFF},
+ .speechBefore = {EC_WORD_I, EC_WORD_NEVER, EC_WORD_TAKE, EC_WORD_A, EC_WORD_TRAIN, EC_EMPTY_WORD},
.speechWin = {EC_WORD_I_AM, EC_WORD_FEELING, EC_MOVE2(SUPERSONIC), EC_WORD_ON, EC_WORD_MY, EC_WORD_BIKE},
.speechLose = {EC_WORD_MY, EC_WORD_BIKE, EC_WORD_EXCL, EC_WORD_YOU_VE, EC_WORD_DESTROYED, EC_WORD_IT},
.speechAfter = {EC_WORD_A, EC_WORD_BIKE, EC_WORD_OVER, EC_WORD_ANY, EC_WORD_TRAIN, EC_WORD_EXCL},
@@ -907,8 +907,8 @@ static const struct TrHillFloor sDataTagNormal_Floors[] =
.facilityClass = FACILITY_CLASS_PKMN_BREEDER_F,
.unused = 0,
.speechBefore = {EC_WORD_SOME, EC_WORD_THINGS, EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_DO, EC_WORD_ALONE},
- .speechWin = {EC_WORD_YOU, EC_WORD_WIN, EC_WORD_AS, EC_WORD_A, EC_WORD_GROUP, 0xFFFF},
- .speechLose = {EC_WORD_WE, EC_WORD_COULDN_T, EC_WORD_WIN, EC_WORD_TOGETHER, EC_WORD_QUES, 0xFFFF},
+ .speechWin = {EC_WORD_YOU, EC_WORD_WIN, EC_WORD_AS, EC_WORD_A, EC_WORD_GROUP, EC_EMPTY_WORD},
+ .speechLose = {EC_WORD_WE, EC_WORD_COULDN_T, EC_WORD_WIN, EC_WORD_TOGETHER, EC_WORD_QUES, EC_EMPTY_WORD},
.speechAfter = {EC_WORD_MAYBE, EC_WORD_I, EC_WORD_NEED, EC_WORD_A, EC_WORD_BOY, EC_WORD_FRIEND},
.mons =
{
@@ -1086,7 +1086,7 @@ static const struct TrHillFloor sDataTagNormal_Floors[] =
.speechBefore = {EC_WORD_LET_S, EC_MOVE2(WRAP), EC_WORD_THINGS, EC_WORD_UP, EC_WORD_HERE, EC_WORD_HEY_QUES},
.speechWin = {EC_WORD_WOULD, EC_WORD_YOU, EC_WORD_LIKE, EC_WORD_TO, EC_WORD_GO_HOME, EC_WORD_QUES},
.speechLose = {EC_WORD_I, EC_WORD_WILL, EC_WORD_MAKE, EC_WORD_YOU, EC_WORD_SORRY, EC_WORD_FRIEND},
- .speechAfter = {EC_WORD_HAVEN_T, EC_WORD_YOU, EC_WORD_DONE, EC_WORD_ENOUGH, EC_WORD_QUES, 0xFFFF},
+ .speechAfter = {EC_WORD_HAVEN_T, EC_WORD_YOU, EC_WORD_DONE, EC_WORD_ENOUGH, EC_WORD_QUES, EC_EMPTY_WORD},
.mons =
{
[0] =
@@ -1229,7 +1229,7 @@ static const struct TrHillFloor sDataTagNormal_Floors[] =
.facilityClass = FACILITY_CLASS_PKMN_BREEDER_F,
.unused = 0,
.speechBefore = {EC_WORD_I_AM, EC_WORD_THE, EC_WORD_STRONG, EC_WORD_BEAUTY, EC_WORD_AROUND, EC_WORD_HERE},
- .speechWin = {EC_WORD_I_AM, EC_WORD_STRONG, EC_WORD_THAT_S, EC_WORD_WHY, EC_WORD_EXCL, 0xFFFF},
+ .speechWin = {EC_WORD_I_AM, EC_WORD_STRONG, EC_WORD_THAT_S, EC_WORD_WHY, EC_WORD_EXCL, EC_EMPTY_WORD},
.speechLose = {EC_WORD_I_AM, EC_WORD_TIRED, EC_WORD_TODAY, EC_WORD_THAT_S, EC_WORD_WHY, EC_WORD_EXCL},
.speechAfter = {EC_WORD_WHY, EC_WORD_YES, EC_WORD_I_AM, EC_WORD_ANGRY, EC_WORD_THANK_YOU, EC_WORD_EXCL},
.mons =
@@ -1404,8 +1404,8 @@ static const struct TrHillFloor sDataTagNormal_Floors[] =
.name = _("KEENAN"),
.facilityClass = FACILITY_CLASS_PSYCHIC_M,
.unused = 0,
- .speechBefore = {EC_WORD_YOU, EC_WORD_LOOK, EC_WORD_SO, EC_WORD_HURRIED, 0xFFFF, 0xFFFF},
- .speechWin = {EC_WORD_TOO, EC_WORD_BAD, 0xFFFF, EC_WORD_TIME, EC_WORD_IS, EC_WORD_UP},
+ .speechBefore = {EC_WORD_YOU, EC_WORD_LOOK, EC_WORD_SO, EC_WORD_HURRIED, EC_EMPTY_WORD, EC_EMPTY_WORD},
+ .speechWin = {EC_WORD_TOO, EC_WORD_BAD, EC_EMPTY_WORD, EC_WORD_TIME, EC_WORD_IS, EC_WORD_UP},
.speechLose = {EC_WORD_DOES, EC_WORD_THE, EC_WORD_TIME, EC_WORD_WORRY, EC_WORD_YOU, EC_WORD_QUES},
.speechAfter = {EC_WORD_YOU, EC_WORD_DON_T, EC_WORD_HAVE, EC_WORD_TIME, EC_WORD_TO, EC_WORD_CHAT},
.mons =
@@ -1547,7 +1547,7 @@ static const struct TrHillFloor sDataTagNormal_Floors[] =
.unused = 0,
.speechBefore = {EC_WORD_IT_S, EC_WORD_HOT, EC_WORD_ELLIPSIS, EC_WORD_WHAT, EC_WORD_A, EC_WORD_STENCH},
.speechWin = {EC_WORD_I, EC_WORD_REALLY, EC_WORD_LIKE, EC_WORD_AN, EC_WORD_OFFENSIVE, EC_WORD_STENCH},
- .speechLose = {EC_WORD_I, EC_MOVE2(COVET), EC_WORD_ANY, EC_WORD_STRONG, EC_WORD_STENCH, 0xFFFF},
+ .speechLose = {EC_WORD_I, EC_MOVE2(COVET), EC_WORD_ANY, EC_WORD_STRONG, EC_WORD_STENCH, EC_EMPTY_WORD},
.speechAfter = {EC_WORD_MY, EC_WORD_SENSE, EC_WORD_OF, EC_WORD_SMELL, EC_WORD_ISN_T, EC_WORD_NORMAL},
.mons =
{
@@ -1731,8 +1731,8 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = {
.unused = 0,
.speechBefore = {EC_WORD_GOOD, EC_WORD_CHILDREN, EC_WORD_WILL, EC_WORD_GET, EC_WORD_A, EC_MOVE2(PRESENT)},
.speechWin = {EC_WORD_THANK_YOU, EC_WORD_MY, EC_WORD_VICTORY, EC_WORD_IS, EC_WORD_YOUR, EC_MOVE2(PRESENT)},
- .speechLose = {EC_WORD_THAT_WAS, EC_WORD_MY, EC_MOVE2(PRESENT), EC_WORD_TO, EC_WORD_YOU, 0xFFFF},
- .speechAfter = {EC_WORD_WELL_THEN, EC_WORD_CONGRATS, EC_WORD_MY, EC_WORD_FRIEND, 0xFFFF, 0xFFFF},
+ .speechLose = {EC_WORD_THAT_WAS, EC_WORD_MY, EC_MOVE2(PRESENT), EC_WORD_TO, EC_WORD_YOU, EC_EMPTY_WORD},
+ .speechAfter = {EC_WORD_WELL_THEN, EC_WORD_CONGRATS, EC_WORD_MY, EC_WORD_FRIEND, EC_EMPTY_WORD, EC_EMPTY_WORD},
.mons =
{
[0] =
@@ -1870,7 +1870,7 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = {
.unused = 0,
.speechBefore = {EC_WORD_CAN, EC_WORD_YOU, EC_WORD_SENSE, EC_WORD_ME, EC_MOVE(FOCUS_ENERGY), EC_WORD_QUES},
.speechWin = {EC_WORD_THAT_S, EC_WORD_ABOUT, EC_WORD_RIGHT, EC_WORD_I, EC_WORD_WOULD, EC_WORD_THINK},
- .speechLose = {EC_WORD_THINGS, EC_WORD_DON_T, EC_WORD_ALWAYS, EC_WORD_WORK, EC_WORD_OUT, 0xFFFF},
+ .speechLose = {EC_WORD_THINGS, EC_WORD_DON_T, EC_WORD_ALWAYS, EC_WORD_WORK, EC_WORD_OUT, EC_EMPTY_WORD},
.speechAfter = {EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_LONESOME, EC_WORD_AND, EC_WORD_SAD, EC_WORD_NOW},
.mons =
{
@@ -2040,7 +2040,7 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = {
.facilityClass = FACILITY_CLASS_PARASOL_LADY,
.unused = 0,
.speechBefore = {EC_WORD_HI, EC_WORD_ARE, EC_WORD_YOU, EC_WORD_FEELING, EC_WORD_UPBEAT, EC_WORD_QUES},
- .speechWin = {EC_WORD_AREN_T, EC_WORD_YOU, EC_WORD_FEELING, EC_WORD_WELL, EC_WORD_QUES, 0xFFFF},
+ .speechWin = {EC_WORD_AREN_T, EC_WORD_YOU, EC_WORD_FEELING, EC_WORD_WELL, EC_WORD_QUES, EC_EMPTY_WORD},
.speechLose = {EC_WORD_I, EC_WORD_CAN, EC_WORD_SEE, EC_WORD_YOU_RE, EC_WORD_FEELING, EC_WORD_GREAT},
.speechAfter = {EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_LOOK, EC_WORD_READY, EC_WORD_TO, EC_WORD_HUSTLE},
.mons =
@@ -2380,8 +2380,8 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = {
.facilityClass = FACILITY_CLASS_RICH_BOY,
.unused = 0,
.speechBefore = {EC_WORD_GET, EC_WORD_READY, EC_WORD_FOR, EC_WORD_AN, EC_WORD_AWESOME, EC_WORD_TIME},
- .speechWin = {EC_WORD_HEY, EC_WORD_HEY, EC_WORD_EXCL, EC_WORD_WHAT_S_UP_QUES, 0xFFFF, 0xFFFF},
- .speechLose = {EC_WORD_AWW, EC_WORD_COULDN_T, EC_WORD_YOU, EC_WORD_LET_ME_WIN, EC_WORD_QUES, 0xFFFF},
+ .speechWin = {EC_WORD_HEY, EC_WORD_HEY, EC_WORD_EXCL, EC_WORD_WHAT_S_UP_QUES, EC_EMPTY_WORD, EC_EMPTY_WORD},
+ .speechLose = {EC_WORD_AWW, EC_WORD_COULDN_T, EC_WORD_YOU, EC_WORD_LET_ME_WIN, EC_WORD_QUES, EC_EMPTY_WORD},
.speechAfter = {EC_WORD_DID, EC_WORD_YOU, EC_WORD_SEE, EC_WORD_MY, EC_WORD_SKILL, EC_WORD_QUES},
.mons =
{
@@ -2840,10 +2840,10 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = {
.name = _("FRANCISCO"),
.facilityClass = FACILITY_CLASS_POKEFAN_M,
.unused = 0,
- .speechBefore = {EC_WORD_I, EC_WORD_STUDY, EC_WORD_EVERY, EC_WORD_DAY, EC_WORD_TOO, 0xFFFF},
- .speechWin = {EC_WORD_SO, EC_WORD_THAT_S, EC_WORD_HOW, EC_WORD_YOU, EC_WORD_LOSE, 0xFFFF},
+ .speechBefore = {EC_WORD_I, EC_WORD_STUDY, EC_WORD_EVERY, EC_WORD_DAY, EC_WORD_TOO, EC_EMPTY_WORD},
+ .speechWin = {EC_WORD_SO, EC_WORD_THAT_S, EC_WORD_HOW, EC_WORD_YOU, EC_WORD_LOSE, EC_EMPTY_WORD},
.speechLose = {EC_WORD_NO, EC_WORD_WONDER, EC_WORD_I, EC_WORD_COULDN_T, EC_WORD_BEAT, EC_WORD_YOU},
- .speechAfter = {EC_WORD_YES, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_THANK_YOU, 0xFFFF, 0xFFFF},
+ .speechAfter = {EC_WORD_YES, EC_WORD_ELLIPSIS, EC_EMPTY_WORD, EC_WORD_THANK_YOU, EC_EMPTY_WORD, EC_EMPTY_WORD},
.mons =
{
[0] =
@@ -3023,10 +3023,10 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = {
.name = _("MEREDITH"),
.facilityClass = FACILITY_CLASS_PKMN_RANGER_F,
.unused = 0,
- .speechBefore = {EC_WORD_UM, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_I, EC_WORD_ELLIPSIS, 0xFFFF},
- .speechWin = {EC_WORD_OH, EC_WORD_EXCL, 0xFFFF, EC_WORD_UM, EC_WORD_ELLIPSIS, EC_WORD_YAY},
- .speechLose = {EC_WORD_UM, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_WAAAH, EC_WORD_ELLIPSIS, 0xFFFF},
- .speechAfter = {EC_WORD_UM, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_I_AM, EC_WORD_SAD, EC_WORD_ELLIPSIS},
+ .speechBefore = {EC_WORD_UM, EC_WORD_ELLIPSIS, EC_EMPTY_WORD, EC_WORD_I, EC_WORD_ELLIPSIS, EC_EMPTY_WORD},
+ .speechWin = {EC_WORD_OH, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_UM, EC_WORD_ELLIPSIS, EC_WORD_YAY},
+ .speechLose = {EC_WORD_UM, EC_WORD_ELLIPSIS, EC_EMPTY_WORD, EC_WORD_WAAAH, EC_WORD_ELLIPSIS, EC_EMPTY_WORD},
+ .speechAfter = {EC_WORD_UM, EC_WORD_ELLIPSIS, EC_EMPTY_WORD, EC_WORD_I_AM, EC_WORD_SAD, EC_WORD_ELLIPSIS},
.mons =
{
[0] =
@@ -4948,8 +4948,8 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = {
.unused = 0,
.speechBefore = {EC_WORD_OH_DEAR, EC_WORD_THIS, EC_WORD_MATCH, EC_WORD_IS, EC_WORD_FOR, EC_WORD_YOU},
.speechWin = {EC_WORD_OH_DEAR, EC_WORD_DID, EC_WORD_YOU, EC_WORD_SEE, EC_WORD_THAT, EC_WORD_QUES},
- .speechLose = {EC_WORD_OH_DEAR, EC_WORD_I_AM, EC_WORD_SO, EC_WORD_SORRY, 0xFFFF, 0xFFFF},
- .speechAfter = {EC_WORD_IS, EC_WORD_YOUR, EC_WORD_GRANDMOTHER, EC_WORD_STRONG, EC_WORD_QUES, 0xFFFF},
+ .speechLose = {EC_WORD_OH_DEAR, EC_WORD_I_AM, EC_WORD_SO, EC_WORD_SORRY, EC_EMPTY_WORD, EC_EMPTY_WORD},
+ .speechAfter = {EC_WORD_IS, EC_WORD_YOUR, EC_WORD_GRANDMOTHER, EC_WORD_STRONG, EC_WORD_QUES, EC_EMPTY_WORD},
.mons =
{
[0] =
@@ -5094,7 +5094,7 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = {
.speechBefore = {EC_WORD_OH_DEAR, EC_WORD_I, EC_WORD_WILL, EC_WORD_WIN, EC_WORD_FOR, EC_WORD_YOU},
.speechWin = {EC_WORD_OH_DEAR, EC_WORD_WE, EC_WORD_HAVE, EC_WORD_A, EC_WORD_PARTY, EC_WORD_LATER},
.speechLose = {EC_WORD_OH_DEAR, EC_WORD_I_AM, EC_WORD_SORRY, EC_WORD_TO, EC_WORD_DISAPPOINT, EC_WORD_YOU},
- .speechAfter = {EC_WORD_IS, EC_WORD_YOUR, EC_WORD_GRANDFATHER, EC_WORD_COOL, EC_WORD_QUES, 0xFFFF},
+ .speechAfter = {EC_WORD_IS, EC_WORD_YOUR, EC_WORD_GRANDFATHER, EC_WORD_COOL, EC_WORD_QUES, EC_EMPTY_WORD},
.mons =
{
[0] =
@@ -5271,7 +5271,7 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = {
.speechBefore = {EC_WORD_WAAAH, EC_WORD_THIS, EC_WORD_IS, EC_WORD_SO, EC_WORD_EXCITING, EC_WORD_EXCL},
.speechWin = {EC_WORD_WAAAH, EC_WORD_I_AM, EC_WORD_SO, EC_WORD_HAPPY, EC_WORD_I, EC_WORD_WON},
.speechLose = {EC_WORD_WAAAH, EC_WORD_I_AM, EC_WORD_SO, EC_WORD_SAD, EC_WORD_I, EC_WORD_LOST},
- .speechAfter = {EC_WORD_WAAAH, EC_WORD_EXCL, 0xFFFF, EC_WORD_GO, EC_WORD_AWAY, EC_WORD_EXCL},
+ .speechAfter = {EC_WORD_WAAAH, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_GO, EC_WORD_AWAY, EC_WORD_EXCL},
.mons =
{
[0] =
@@ -5410,7 +5410,7 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = {
.facilityClass = FACILITY_CLASS_PKMN_RANGER_M,
.unused = 0,
.speechBefore = {EC_WORD_WAHAHAHA, EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_STOP, EC_WORD_ME, EC_WORD_EXCL},
- .speechWin = {EC_WORD_WOWEE, EC_WORD_EXCL, 0xFFFF, EC_WORD_I_AM, EC_WORD_AWESOME, EC_WORD_COOL},
+ .speechWin = {EC_WORD_WOWEE, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_I_AM, EC_WORD_AWESOME, EC_WORD_COOL},
.speechLose = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_COOL, EC_WORD_AT, EC_WORD_ALL, EC_WORD_EXCL},
.speechAfter = {EC_WORD_HEHEHE, EC_WORD_THAT_WAS, EC_WORD_AN, EC_WORD_AWESOME, EC_WORD_BATTLE, EC_WORD_EXCL},
.mons =
diff --git a/src/data/easy_chat/easy_chat_words_by_letter.h b/src/data/easy_chat/easy_chat_words_by_letter.h
index 927b9db2f..a56e3184f 100755
--- a/src/data/easy_chat/easy_chat_words_by_letter.h
+++ b/src/data/easy_chat/easy_chat_words_by_letter.h
@@ -1,6 +1,8 @@
#include "easy_chat.h"
#include "constants/easy_chat.h"
+#define DOUBLE_SPECIES_NAME EC_EMPTY_WORD, 2,
+
const u16 gEasyChatWordsByLetter_Others[] = {
EC_WORD_EXCL,
EC_WORD_EXCL_EXCL,
@@ -21,9 +23,9 @@ const u16 gEasyChatWordsByLetter_A[] = {
EC_WORD_A_TINY_BIT,
EC_WORD_ABOUT,
EC_WORD_ABOVE,
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(ABRA),
- EC_POKEMON2(ABRA),
+ EC_POKEMON_NATIONAL(ABRA),
EC_WORD_ABSENT,
EC_POKEMON(ABSOL),
EC_WORD_ABSOLUTELY,
@@ -36,7 +38,7 @@ const u16 gEasyChatWordsByLetter_A[] = {
EC_WORD_ADVENTURE,
EC_MOVE2(AERIAL_ACE),
EC_MOVE(AEROBLAST),
- EC_POKEMON2(AERODACTYL),
+ EC_POKEMON_NATIONAL(AERODACTYL),
EC_WORD_AFTER,
EC_WORD_AGE,
EC_POKEMON(AGGRON),
@@ -44,13 +46,13 @@ const u16 gEasyChatWordsByLetter_A[] = {
EC_WORD_AGREE,
EC_WORD_AHAHA,
EC_WORD_AIM,
- EC_POKEMON2(AIPOM),
+ EC_POKEMON_NATIONAL(AIPOM),
EC_MOVE(AIR_CUTTER),
EC_WORD_AIR_LOCK,
EC_WORD_AIYEEH,
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(ALAKAZAM),
- EC_POKEMON2(ALAKAZAM),
+ EC_POKEMON_NATIONAL(ALAKAZAM),
EC_WORD_ALL,
EC_WORD_ALL_RIGHT,
EC_WORD_ALLOW,
@@ -65,7 +67,7 @@ const u16 gEasyChatWordsByLetter_A[] = {
EC_WORD_ALWAYS,
EC_WORD_AM,
EC_MOVE2(AMNESIA),
- EC_POKEMON2(AMPHAROS),
+ EC_POKEMON_NATIONAL(AMPHAROS),
EC_WORD_AMUSING,
EC_WORD_AN,
EC_MOVE(ANCIENT_POWER),
@@ -85,19 +87,19 @@ const u16 gEasyChatWordsByLetter_A[] = {
EC_WORD_APPEARS,
EC_WORD_APPRECIATE,
EC_WORD_APPROVED,
- EC_POKEMON2(ARBOK),
- EC_POKEMON2(ARCANINE),
+ EC_POKEMON_NATIONAL(ARBOK),
+ EC_POKEMON_NATIONAL(ARCANINE),
EC_WORD_ARE,
EC_WORD_AREN_T,
EC_WORD_ARENA_TRAP,
- EC_POKEMON2(ARIADOS),
+ EC_POKEMON_NATIONAL(ARIADOS),
EC_MOVE2(ARM_THRUST),
EC_POKEMON(ARMALDO),
EC_MOVE(AROMATHERAPY),
EC_POKEMON(ARON),
EC_WORD_AROUND,
EC_WORD_ARRGH,
- EC_POKEMON2(ARTICUNO),
+ EC_POKEMON_NATIONAL(ARTICUNO),
EC_WORD_AS,
EC_WORD_AS_IF,
EC_WORD_AS_MUCH_AS,
@@ -114,9 +116,9 @@ const u16 gEasyChatWordsByLetter_A[] = {
EC_WORD_AWFUL,
EC_WORD_AWFULLY,
EC_WORD_AWW,
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(AZUMARILL),
- EC_POKEMON2(AZUMARILL),
+ EC_POKEMON_NATIONAL(AZUMARILL),
EC_POKEMON(AZURILL),
};
@@ -141,7 +143,7 @@ const u16 gEasyChatWordsByLetter_B[] = {
EC_WORD_BATTLE_ARMOR,
EC_WORD_BATTLE_ROOM,
EC_WORD_BATTLE_TOWER,
- EC_POKEMON2(BAYLEEF),
+ EC_POKEMON_NATIONAL(BAYLEEF),
EC_WORD_BE,
EC_WORD_BEAT,
EC_MOVE2(BEAT_UP),
@@ -149,17 +151,17 @@ const u16 gEasyChatWordsByLetter_B[] = {
EC_WORD_BEAUTIFUL,
EC_WORD_BEAUTY,
EC_WORD_BECOMES,
- EC_POKEMON2(BEEDRILL),
+ EC_POKEMON_NATIONAL(BEEDRILL),
EC_WORD_BEEN,
EC_WORD_BEFORE,
EC_WORD_BEGINNING,
EC_WORD_BEING,
EC_POKEMON(BELDUM),
EC_WORD_BELIEVE,
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(BELLOSSOM),
- EC_POKEMON2(BELLOSSOM),
- EC_POKEMON2(BELLSPROUT),
+ EC_POKEMON_NATIONAL(BELLOSSOM),
+ EC_POKEMON_NATIONAL(BELLSPROUT),
EC_MOVE2(BELLY_DRUM),
EC_WORD_BELONGS_TO,
EC_WORD_BELOW,
@@ -173,12 +175,12 @@ const u16 gEasyChatWordsByLetter_B[] = {
EC_MOVE(BIND),
EC_MOVE(BITE),
EC_MOVE2(BLAST_BURN),
- EC_POKEMON2(BLASTOISE),
+ EC_POKEMON_NATIONAL(BLASTOISE),
EC_WORD_BLAZE,
EC_MOVE2(BLAZE_KICK),
EC_POKEMON(BLAZIKEN),
EC_WORD_BLEND,
- EC_POKEMON2(BLISSEY),
+ EC_POKEMON_NATIONAL(BLISSEY),
EC_MOVE2(BLIZZARD),
EC_MOVE2(BLOCK),
EC_WORD_BOARD,
@@ -199,12 +201,12 @@ const u16 gEasyChatWordsByLetter_B[] = {
EC_MOVE(BUBBLE),
EC_MOVE2(BUBBLE_BEAM),
EC_WORD_BUG,
- EC_POKEMON2(BULBASAUR),
+ EC_POKEMON_NATIONAL(BULBASAUR),
EC_MOVE2(BULK_UP),
EC_MOVE2(BULLET_SEED),
EC_WORD_BUSY,
EC_WORD_BUT,
- EC_POKEMON2(BUTTERFREE),
+ EC_POKEMON_NATIONAL(BUTTERFREE),
EC_WORD_BYE_BYE,
};
@@ -229,27 +231,27 @@ const u16 gEasyChatWordsByLetter_C[] = {
EC_POKEMON(CASCOON),
EC_WORD_CASE,
EC_POKEMON(CASTFORM),
- EC_POKEMON2(CATERPIE),
+ EC_POKEMON_NATIONAL(CATERPIE),
EC_WORD_CAUSE,
- EC_POKEMON2(CELEBI),
+ EC_POKEMON_NATIONAL(CELEBI),
EC_WORD_CENTER,
EC_WORD_CHALLENGE,
EC_WORD_CHANGE,
EC_WORD_CHANNEL,
- EC_POKEMON2(CHANSEY),
+ EC_POKEMON_NATIONAL(CHANSEY),
EC_MOVE(CHARGE),
- EC_POKEMON2(CHARIZARD),
+ EC_POKEMON_NATIONAL(CHARIZARD),
EC_MOVE(CHARM),
- EC_POKEMON2(CHARMANDER),
- EC_POKEMON2(CHARMELEON),
+ EC_POKEMON_NATIONAL(CHARMANDER),
+ EC_POKEMON_NATIONAL(CHARMELEON),
EC_WORD_CHAT,
- EC_POKEMON2(CHIKORITA),
+ EC_POKEMON_NATIONAL(CHIKORITA),
EC_WORD_CHILD_S_PLAY,
EC_WORD_CHILDREN,
EC_POKEMON(CHIMECHO),
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(CHINCHOU),
- EC_POKEMON2(CHINCHOU),
+ EC_POKEMON_NATIONAL(CHINCHOU),
EC_WORD_CHLOROPHYLL,
EC_WORD_CHOICE,
EC_WORD_CHOOSE,
@@ -259,12 +261,12 @@ const u16 gEasyChatWordsByLetter_C[] = {
EC_WORD_CLASS,
EC_POKEMON(CLAYDOL),
EC_WORD_CLEAR_BODY,
- EC_POKEMON2(CLEFABLE),
- EC_POKEMON2(CLEFAIRY),
- EC_POKEMON2(CLEFFA),
+ EC_POKEMON_NATIONAL(CLEFABLE),
+ EC_POKEMON_NATIONAL(CLEFAIRY),
+ EC_POKEMON_NATIONAL(CLEFFA),
EC_WORD_CLOSE,
EC_WORD_CLOUD_NINE,
- EC_POKEMON2(CLOYSTER),
+ EC_POKEMON_NATIONAL(CLOYSTER),
EC_WORD_COLD,
EC_WORD_COLLECT,
EC_WORD_COLLECTION,
@@ -293,9 +295,9 @@ const u16 gEasyChatWordsByLetter_C[] = {
EC_WORD_COOLNESS,
EC_POKEMON(CORPHISH),
EC_WORD_CORRECT,
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(CORSOLA),
- EC_POKEMON2(CORSOLA),
+ EC_POKEMON_NATIONAL(CORSOLA),
EC_MOVE(COSMIC_POWER),
EC_MOVE2(COTTON_SPORE),
EC_WORD_COULD,
@@ -308,23 +310,23 @@ const u16 gEasyChatWordsByLetter_C[] = {
EC_POKEMON(CRADILY),
EC_POKEMON(CRAWDAUNT),
EC_WORD_CRIES,
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(CROBAT),
- EC_POKEMON2(CROBAT),
- EC_POKEMON2(CROCONAW),
+ EC_POKEMON_NATIONAL(CROBAT),
+ EC_POKEMON_NATIONAL(CROCONAW),
EC_MOVE(CROSS_CHOP),
EC_MOVE(CRUNCH),
EC_WORD_CRUSH,
EC_MOVE2(CRUSH_CLAW),
EC_WORD_CRY,
- EC_POKEMON2(CUBONE),
+ EC_POKEMON_NATIONAL(CUBONE),
EC_WORD_CURRENT,
EC_MOVE2(CURSE),
EC_MOVE(CUT),
EC_WORD_CUTE,
EC_WORD_CUTE_CHARM,
EC_WORD_CUTENESS,
- EC_POKEMON2(CYNDAQUIL),
+ EC_POKEMON_NATIONAL(CYNDAQUIL),
};
const u16 gEasyChatWordsByLetter_D[] = {
@@ -345,7 +347,7 @@ const u16 gEasyChatWordsByLetter_D[] = {
EC_WORD_DEFEATED,
EC_MOVE2(DEFENSE_CURL),
EC_POKEMON(DELCATTY),
- EC_POKEMON2(DELIBIRD),
+ EC_POKEMON_NATIONAL(DELIBIRD),
EC_POKEMON(DEOXYS),
EC_WORD_DEPT_STORE,
EC_WORD_DESIGN,
@@ -353,14 +355,14 @@ const u16 gEasyChatWordsByLetter_D[] = {
EC_MOVE2(DESTINY_BOND),
EC_WORD_DESTROYED,
EC_MOVE2(DETECT),
- EC_POKEMON2(DEWGONG),
+ EC_POKEMON_NATIONAL(DEWGONG),
EC_WORD_DID,
EC_WORD_DIDN_T,
EC_WORD_DIET,
EC_WORD_DIFFERENT,
EC_MOVE(DIG),
EC_WORD_DIGITAL,
- EC_POKEMON2(DIGLETT),
+ EC_POKEMON_NATIONAL(DIGLETT),
EC_WORD_DIRECT,
EC_MOVE(DISABLE),
EC_WORD_DISAPPEAR,
@@ -370,24 +372,24 @@ const u16 gEasyChatWordsByLetter_D[] = {
EC_WORD_DISASTER,
EC_WORD_DISLIKE,
EC_WORD_DISLIKES,
- EC_POKEMON2(DITTO),
+ EC_POKEMON_NATIONAL(DITTO),
EC_MOVE2(DIVE),
EC_MOVE2(DIZZY_PUNCH),
EC_WORD_DO,
EC_WORD_DOCILE,
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(DODRIO),
- EC_POKEMON2(DODRIO),
- -1, 2, // Doubled pokemon species name
+ EC_POKEMON_NATIONAL(DODRIO),
+ DOUBLE_SPECIES_NAME
EC_POKEMON(DODUO),
- EC_POKEMON2(DODUO),
+ EC_POKEMON_NATIONAL(DODUO),
EC_WORD_DOES,
EC_WORD_DOESN_T,
EC_WORD_DON_T,
EC_WORD_DONE,
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(DONPHAN),
- EC_POKEMON2(DONPHAN),
+ EC_POKEMON_NATIONAL(DONPHAN),
EC_MOVE2(DOOM_DESIRE),
EC_MOVE2(DOUBLE_KICK),
EC_MOVE(DOUBLE_TEAM),
@@ -399,10 +401,10 @@ const u16 gEasyChatWordsByLetter_D[] = {
EC_MOVE2(DRAGON_CLAW),
EC_MOVE2(DRAGON_DANCE),
EC_MOVE2(DRAGON_RAGE),
- EC_POKEMON2(DRAGONAIR),
+ EC_POKEMON_NATIONAL(DRAGONAIR),
EC_MOVE2(DRAGON_BREATH),
- EC_POKEMON2(DRAGONITE),
- EC_POKEMON2(DRATINI),
+ EC_POKEMON_NATIONAL(DRAGONITE),
+ EC_POKEMON_NATIONAL(DRATINI),
EC_WORD_DREAM,
EC_MOVE2(DREAM_EATER),
EC_MOVE2(DRILL_PECK),
@@ -411,10 +413,10 @@ const u16 gEasyChatWordsByLetter_D[] = {
EC_WORD_DRIZZLE,
EC_WORD_DROOLING,
EC_WORD_DROUGHT,
- EC_POKEMON2(DROWZEE),
+ EC_POKEMON_NATIONAL(DROWZEE),
EC_WORD_DUDE,
- EC_POKEMON2(DUGTRIO),
- EC_POKEMON2(DUNSPARCE),
+ EC_POKEMON_NATIONAL(DUGTRIO),
+ EC_POKEMON_NATIONAL(DUNSPARCE),
EC_POKEMON(DUSCLOPS),
EC_POKEMON(DUSKULL),
EC_POKEMON(DUSTOX),
@@ -429,20 +431,20 @@ const u16 gEasyChatWordsByLetter_E[] = {
EC_WORD_EAT,
EC_WORD_EATS,
EC_WORD_EEK,
- EC_POKEMON2(EEVEE),
+ EC_POKEMON_NATIONAL(EEVEE),
EC_WORD_EFFECT_SPORE,
EC_WORD_EGG,
EC_MOVE2(EGG_BOMB),
EC_WORD_EH_QUES,
EC_WORD_EHEHE,
- EC_POKEMON2(EKANS),
- EC_POKEMON2(ELECTABUZZ),
+ EC_POKEMON_NATIONAL(EKANS),
+ EC_POKEMON_NATIONAL(ELECTABUZZ),
EC_WORD_ELECTRIC,
EC_POKEMON(ELECTRIKE),
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(ELECTRODE),
- EC_POKEMON2(ELECTRODE),
- EC_POKEMON2(ELEKID),
+ EC_POKEMON_NATIONAL(ELECTRODE),
+ EC_POKEMON_NATIONAL(ELEKID),
EC_WORD_ELSE,
EC_MOVE2(EMBER),
EC_WORD_EMERALD,
@@ -454,11 +456,11 @@ const u16 gEasyChatWordsByLetter_E[] = {
EC_WORD_ENJOY,
EC_WORD_ENJOYS,
EC_WORD_ENOUGH,
- EC_POKEMON2(ENTEI),
+ EC_POKEMON_NATIONAL(ENTEI),
EC_WORD_ENTERTAINING,
EC_MOVE2(ERUPTION),
EC_WORD_ESCAPE,
- EC_POKEMON2(ESPEON),
+ EC_POKEMON_NATIONAL(ESPEON),
EC_WORD_EVEN_SO,
EC_WORD_EVENT,
EC_WORD_EVENTS,
@@ -472,8 +474,8 @@ const u16 gEasyChatWordsByLetter_E[] = {
EC_WORD_EXCITING,
EC_WORD_EXCUSE,
EC_WORD_EXCUSE_ME,
- EC_POKEMON2(EXEGGCUTE),
- EC_POKEMON2(EXEGGUTOR),
+ EC_POKEMON_NATIONAL(EXEGGCUTE),
+ EC_POKEMON_NATIONAL(EXEGGUTOR),
EC_WORD_EXISTS,
EC_WORD_EXPENSIVE,
EC_MOVE2(EXPLOSION),
@@ -495,16 +497,16 @@ const u16 gEasyChatWordsByLetter_F[] = {
EC_WORD_FAMILY,
EC_WORD_FANTASTIC,
EC_WORD_FAR,
- EC_POKEMON2(FARFETCHD),
+ EC_POKEMON_NATIONAL(FARFETCHD),
EC_WORD_FASHION,
EC_WORD_FAST,
EC_WORD_FATHER,
EC_WORD_FEAR,
- EC_POKEMON2(FEAROW),
+ EC_POKEMON_NATIONAL(FEAROW),
EC_MOVE2(FEATHER_DANCE),
EC_POKEMON(FEEBAS),
EC_WORD_FEELING,
- EC_POKEMON2(FERALIGATR),
+ EC_POKEMON_NATIONAL(FERALIGATR),
EC_WORD_FESTIVAL,
EC_WORD_FEVER,
EC_WORD_FIERY,
@@ -520,13 +522,13 @@ const u16 gEasyChatWordsByLetter_F[] = {
EC_MOVE2(FIRE_SPIN),
EC_WORD_FISHING,
EC_MOVE(FISSURE),
- EC_POKEMON2(FLAAFFY),
+ EC_POKEMON_NATIONAL(FLAAFFY),
EC_MOVE(FLAIL),
EC_WORD_FLAME,
EC_WORD_FLAME_BODY,
EC_MOVE(FLAME_WHEEL),
EC_MOVE(FLAMETHROWER),
- EC_POKEMON2(FLAREON),
+ EC_POKEMON_NATIONAL(FLAREON),
EC_MOVE2(FLASH),
EC_WORD_FLASH_FIRE,
EC_WORD_FLATTEN,
@@ -547,7 +549,7 @@ const u16 gEasyChatWordsByLetter_F[] = {
EC_WORD_FORGET,
EC_WORD_FORGETS,
EC_WORD_FORGIVE,
- EC_POKEMON2(FORRETRESS),
+ EC_POKEMON_NATIONAL(FORRETRESS),
EC_MOVE2(FRENZY_PLANT),
EC_WORD_FRIDAY,
EC_WORD_FRIEND,
@@ -558,7 +560,7 @@ const u16 gEasyChatWordsByLetter_F[] = {
EC_WORD_FUFUFU,
EC_WORD_FULL,
EC_WORD_FUNNY,
- EC_POKEMON2(FURRET),
+ EC_POKEMON_NATIONAL(FURRET),
EC_MOVE2(FURY_ATTACK),
EC_MOVE2(FURY_CUTTER),
EC_MOVE2(FURY_SWIPES),
@@ -568,12 +570,12 @@ const u16 gEasyChatWordsByLetter_F[] = {
const u16 gEasyChatWordsByLetter_G[] = {
EC_WORD_GAME,
EC_POKEMON(GARDEVOIR),
- EC_POKEMON2(GASTLY),
- EC_POKEMON2(GENGAR),
+ EC_POKEMON_NATIONAL(GASTLY),
+ EC_POKEMON_NATIONAL(GENGAR),
EC_WORD_GENIUS,
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(GEODUDE),
- EC_POKEMON2(GEODUDE),
+ EC_POKEMON_NATIONAL(GEODUDE),
EC_WORD_GET,
EC_WORD_GETS,
EC_WORD_GHOST,
@@ -581,9 +583,9 @@ const u16 gEasyChatWordsByLetter_G[] = {
EC_MOVE(GIGA_DRAIN),
EC_WORD_GIGGLE,
EC_WORD_GIMME,
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(GIRAFARIG),
- EC_POKEMON2(GIRAFARIG),
+ EC_POKEMON_NATIONAL(GIRAFARIG),
EC_WORD_GIRL,
EC_WORD_GIVE,
EC_WORD_GIVE_ME,
@@ -591,29 +593,29 @@ const u16 gEasyChatWordsByLetter_G[] = {
EC_WORD_GIVES,
EC_POKEMON(GLALIE),
EC_MOVE2(GLARE),
- EC_POKEMON2(GLIGAR),
- -1, 2, // Doubled pokemon species name
+ EC_POKEMON_NATIONAL(GLIGAR),
+ DOUBLE_SPECIES_NAME
EC_POKEMON(GLOOM),
- EC_POKEMON2(GLOOM),
+ EC_POKEMON_NATIONAL(GLOOM),
EC_WORD_GO,
EC_WORD_GO_AHEAD,
EC_WORD_GO_EASY,
EC_WORD_GO_HOME,
EC_WORD_GOES,
EC_WORD_GOING,
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(GOLBAT),
- EC_POKEMON2(GOLBAT),
+ EC_POKEMON_NATIONAL(GOLBAT),
EC_WORD_GOLD,
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(GOLDEEN),
- EC_POKEMON2(GOLDEEN),
- -1, 2, // Doubled pokemon species name
+ EC_POKEMON_NATIONAL(GOLDEEN),
+ DOUBLE_SPECIES_NAME
EC_POKEMON(GOLDUCK),
- EC_POKEMON2(GOLDUCK),
- -1, 2, // Doubled pokemon species name
+ EC_POKEMON_NATIONAL(GOLDUCK),
+ DOUBLE_SPECIES_NAME
EC_POKEMON(GOLEM),
- EC_POKEMON2(GOLEM),
+ EC_POKEMON_NATIONAL(GOLEM),
EC_WORD_GOOD,
EC_WORD_GOOD_BYE,
EC_POKEMON(GOREBYSS),
@@ -621,25 +623,25 @@ const u16 gEasyChatWordsByLetter_G[] = {
EC_WORD_GOTCHA,
EC_WORD_GOURMET,
EC_WORD_GRAAAH,
- EC_POKEMON2(GRANBULL),
+ EC_POKEMON_NATIONAL(GRANBULL),
EC_WORD_GRANDFATHER,
EC_WORD_GRANDMOTHER,
EC_WORD_GRASS,
EC_MOVE(GRASS_WHISTLE),
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(GRAVELER),
- EC_POKEMON2(GRAVELER),
+ EC_POKEMON_NATIONAL(GRAVELER),
EC_WORD_GREAT,
EC_WORD_GREEN,
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(GRIMER),
- EC_POKEMON2(GRIMER),
+ EC_POKEMON_NATIONAL(GRIMER),
EC_POKEMON(GROUDON),
EC_WORD_GROUND,
EC_WORD_GROUP,
EC_POKEMON(GROVYLE),
EC_MOVE2(GROWL),
- EC_POKEMON2(GROWLITHE),
+ EC_POKEMON_NATIONAL(GROWLITHE),
EC_MOVE(GROWTH),
EC_MOVE(GRUDGE),
EC_POKEMON(GRUMPIG),
@@ -651,9 +653,9 @@ const u16 gEasyChatWordsByLetter_G[] = {
EC_WORD_GUTSY,
EC_WORD_GWAH,
EC_WORD_GWAHAHAHA,
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(GYARADOS),
- EC_POKEMON2(GYARADOS),
+ EC_POKEMON_NATIONAL(GYARADOS),
};
const u16 gEasyChatWordsByLetter_H[] = {
@@ -671,7 +673,7 @@ const u16 gEasyChatWordsByLetter_H[] = {
EC_POKEMON(HARIYAMA),
EC_WORD_HAS,
EC_WORD_HASSLE,
- EC_POKEMON2(HAUNTER),
+ EC_POKEMON_NATIONAL(HAUNTER),
EC_WORD_HAVE,
EC_WORD_HAVEN_T,
EC_MOVE(HAZE),
@@ -691,9 +693,9 @@ const u16 gEasyChatWordsByLetter_H[] = {
EC_WORD_HELLO,
EC_MOVE2(HELPING_HAND),
EC_WORD_HER,
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(HERACROSS),
- EC_POKEMON2(HERACROSS),
+ EC_POKEMON_NATIONAL(HERACROSS),
EC_WORD_HERE,
EC_WORD_HERE_GOES,
EC_WORD_HERE_I_COME,
@@ -714,28 +716,28 @@ const u16 gEasyChatWordsByLetter_H[] = {
EC_WORD_HIP_AND,
EC_WORD_HIS,
EC_WORD_HIT,
- EC_POKEMON2(HITMONCHAN),
- EC_POKEMON2(HITMONLEE),
- EC_POKEMON2(HITMONTOP),
+ EC_POKEMON_NATIONAL(HITMONCHAN),
+ EC_POKEMON_NATIONAL(HITMONLEE),
+ EC_POKEMON_NATIONAL(HITMONTOP),
EC_WORD_HIYAH,
EC_WORD_HMM,
- EC_POKEMON2(HO_OH),
+ EC_POKEMON_NATIONAL(HO_OH),
EC_WORD_HOBBY,
EC_WORD_HOHOHO,
EC_WORD_HOLIDAY,
EC_WORD_HOME,
EC_WORD_HOO_HAH,
- EC_POKEMON2(HOOTHOOT),
+ EC_POKEMON_NATIONAL(HOOTHOOT),
EC_WORD_HOPELESS,
- EC_POKEMON2(HOPPIP),
+ EC_POKEMON_NATIONAL(HOPPIP),
EC_MOVE2(HORN_ATTACK),
EC_MOVE2(HORN_DRILL),
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(HORSEA),
- EC_POKEMON2(HORSEA),
+ EC_POKEMON_NATIONAL(HORSEA),
EC_WORD_HOT,
- EC_POKEMON2(HOUNDOOM),
- EC_POKEMON2(HOUNDOUR),
+ EC_POKEMON_NATIONAL(HOUNDOOM),
+ EC_POKEMON_NATIONAL(HOUNDOUR),
EC_WORD_HOW,
EC_WORD_HOW_DO,
EC_WORD_HOWEVER,
@@ -754,7 +756,7 @@ const u16 gEasyChatWordsByLetter_H[] = {
EC_WORD_HYPER_CUTTER,
EC_MOVE2(HYPER_FANG),
EC_MOVE2(HYPER_VOICE),
- EC_POKEMON2(HYPNO),
+ EC_POKEMON_NATIONAL(HYPNO),
EC_MOVE(HYPNOSIS),
};
@@ -775,9 +777,9 @@ const u16 gEasyChatWordsByLetter_I[] = {
EC_WORD_IF,
EC_WORD_IF_I_LOSE,
EC_WORD_IF_I_WIN,
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(IGGLYBUFF),
- EC_POKEMON2(IGGLYBUFF),
+ EC_POKEMON_NATIONAL(IGGLYBUFF),
EC_WORD_IGNORANT,
EC_WORD_ILLUMINATE,
EC_POKEMON(ILLUMISE),
@@ -805,32 +807,32 @@ const u16 gEasyChatWordsByLetter_I[] = {
EC_WORD_IT,
EC_WORD_IT_S,
EC_WORD_ITEM,
- EC_POKEMON2(IVYSAUR),
+ EC_POKEMON_NATIONAL(IVYSAUR),
};
const u16 gEasyChatWordsByLetter_J[] = {
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(JIGGLYPUFF),
- EC_POKEMON2(JIGGLYPUFF),
+ EC_POKEMON_NATIONAL(JIGGLYPUFF),
EC_POKEMON(JIRACHI),
EC_WORD_JOKING,
- EC_POKEMON2(JOLTEON),
+ EC_POKEMON_NATIONAL(JOLTEON),
EC_WORD_JOY,
EC_WORD_JUDGE,
EC_MOVE2(JUMP_KICK),
- EC_POKEMON2(JUMPLUFF),
+ EC_POKEMON_NATIONAL(JUMPLUFF),
EC_WORD_JUST,
- EC_POKEMON2(JYNX),
+ EC_POKEMON_NATIONAL(JYNX),
};
const u16 gEasyChatWordsByLetter_K[] = {
- EC_POKEMON2(KABUTO),
- EC_POKEMON2(KABUTOPS),
- -1, 2, // Doubled pokemon species name
+ EC_POKEMON_NATIONAL(KABUTO),
+ EC_POKEMON_NATIONAL(KABUTOPS),
+ DOUBLE_SPECIES_NAME
EC_POKEMON(KADABRA),
- EC_POKEMON2(KADABRA),
- EC_POKEMON2(KAKUNA),
- EC_POKEMON2(KANGASKHAN),
+ EC_POKEMON_NATIONAL(KADABRA),
+ EC_POKEMON_NATIONAL(KAKUNA),
+ EC_POKEMON_NATIONAL(KANGASKHAN),
EC_MOVE(KARATE_CHOP),
EC_POKEMON(KECLEON),
EC_WORD_KEEN_EYE,
@@ -839,19 +841,19 @@ const u16 gEasyChatWordsByLetter_K[] = {
EC_WORD_KIND,
EC_WORD_KINDERGARTEN,
EC_MOVE(KINESIS),
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(KINGDRA),
- EC_POKEMON2(KINGDRA),
- EC_POKEMON2(KINGLER),
+ EC_POKEMON_NATIONAL(KINGDRA),
+ EC_POKEMON_NATIONAL(KINGLER),
EC_POKEMON(KIRLIA),
EC_MOVE2(KNOCK_OFF),
EC_WORD_KNOCKOUT,
EC_WORD_KNOW,
EC_WORD_KNOWS,
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(KOFFING),
- EC_POKEMON2(KOFFING),
- EC_POKEMON2(KRABBY),
+ EC_POKEMON_NATIONAL(KOFFING),
+ EC_POKEMON_NATIONAL(KRABBY),
EC_WORD_KTHX_BYE,
EC_POKEMON(KYOGRE),
};
@@ -862,11 +864,11 @@ const u16 gEasyChatWordsByLetter_L[] = {
EC_WORD_LADY,
EC_POKEMON(LAIRON),
EC_WORD_LALALA,
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(LANTURN),
- EC_POKEMON2(LANTURN),
- EC_POKEMON2(LAPRAS),
- EC_POKEMON2(LARVITAR),
+ EC_POKEMON_NATIONAL(LANTURN),
+ EC_POKEMON_NATIONAL(LAPRAS),
+ EC_POKEMON_NATIONAL(LARVITAR),
EC_WORD_LAST,
EC_WORD_LATE,
EC_WORD_LATER,
@@ -879,8 +881,8 @@ const u16 gEasyChatWordsByLetter_L[] = {
EC_WORD_LEAF,
EC_MOVE2(LEAF_BLADE),
EC_WORD_LEARN,
- EC_POKEMON2(LEDIAN),
- EC_POKEMON2(LEDYBA),
+ EC_POKEMON_NATIONAL(LEDIAN),
+ EC_POKEMON_NATIONAL(LEDYBA),
EC_MOVE(LEECH_LIFE),
EC_MOVE2(LEECH_SEED),
EC_MOVE2(LEER),
@@ -894,7 +896,7 @@ const u16 gEasyChatWordsByLetter_L[] = {
EC_WORD_LEVEL,
EC_WORD_LEVITATE,
EC_MOVE(LICK),
- EC_POKEMON2(LICKITUNG),
+ EC_POKEMON_NATIONAL(LICKITUNG),
EC_WORD_LIE,
EC_WORD_LIFE,
EC_MOVE2(LIGHT_SCREEN),
@@ -933,7 +935,7 @@ const u16 gEasyChatWordsByLetter_L[] = {
EC_MOVE(LOW_KICK),
EC_WORD_LOWS,
EC_POKEMON(LUDICOLO),
- EC_POKEMON2(LUGIA),
+ EC_POKEMON_NATIONAL(LUGIA),
EC_WORD_LUKEWARM,
EC_POKEMON(LUNATONE),
EC_MOVE2(LUSTER_PURGE),
@@ -942,35 +944,35 @@ const u16 gEasyChatWordsByLetter_L[] = {
const u16 gEasyChatWordsByLetter_M[] = {
EC_MOVE2(MACH_PUNCH),
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(MACHAMP),
- EC_POKEMON2(MACHAMP),
+ EC_POKEMON_NATIONAL(MACHAMP),
EC_WORD_MACHINE,
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(MACHOKE),
- EC_POKEMON2(MACHOKE),
- -1, 2, // Doubled pokemon species name
+ EC_POKEMON_NATIONAL(MACHOKE),
+ DOUBLE_SPECIES_NAME
EC_POKEMON(MACHOP),
- EC_POKEMON2(MACHOP),
+ EC_POKEMON_NATIONAL(MACHOP),
EC_WORD_MAGAZINE,
- EC_POKEMON2(MAGBY),
- -1, 2, // Doubled pokemon species name
+ EC_POKEMON_NATIONAL(MAGBY),
+ DOUBLE_SPECIES_NAME
EC_POKEMON(MAGCARGO),
- EC_POKEMON2(MAGCARGO),
+ EC_POKEMON_NATIONAL(MAGCARGO),
EC_MOVE2(MAGIC_COAT),
EC_MOVE2(MAGICAL_LEAF),
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(MAGIKARP),
- EC_POKEMON2(MAGIKARP),
+ EC_POKEMON_NATIONAL(MAGIKARP),
EC_WORD_MAGMA_ARMOR,
- EC_POKEMON2(MAGMAR),
- -1, 2, // Doubled pokemon species name
+ EC_POKEMON_NATIONAL(MAGMAR),
+ DOUBLE_SPECIES_NAME
EC_POKEMON(MAGNEMITE),
- EC_POKEMON2(MAGNEMITE),
+ EC_POKEMON_NATIONAL(MAGNEMITE),
EC_WORD_MAGNET_PULL,
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(MAGNETON),
- EC_POKEMON2(MAGNETON),
+ EC_POKEMON_NATIONAL(MAGNETON),
EC_MOVE2(MAGNITUDE),
EC_WORD_MAIL,
EC_WORD_MAKE,
@@ -978,13 +980,13 @@ const u16 gEasyChatWordsByLetter_M[] = {
EC_POKEMON(MAKUHITA),
EC_WORD_MAN,
EC_POKEMON(MANECTRIC),
- EC_POKEMON2(MANKEY),
- EC_POKEMON2(MANTINE),
- EC_POKEMON2(MAREEP),
- -1, 2, // Doubled pokemon species name
+ EC_POKEMON_NATIONAL(MANKEY),
+ EC_POKEMON_NATIONAL(MANTINE),
+ EC_POKEMON_NATIONAL(MAREEP),
+ DOUBLE_SPECIES_NAME
EC_POKEMON(MARILL),
- EC_POKEMON2(MARILL),
- EC_POKEMON2(MAROWAK),
+ EC_POKEMON_NATIONAL(MARILL),
+ EC_POKEMON_NATIONAL(MAROWAK),
EC_POKEMON(MARSHTOMP),
EC_WORD_MARVEL_SCALE,
EC_POKEMON(MASQUERAIN),
@@ -1008,23 +1010,23 @@ const u16 gEasyChatWordsByLetter_M[] = {
EC_MOVE2(MEGA_KICK),
EC_MOVE2(MEGA_PUNCH),
EC_MOVE2(MEGAHORN),
- EC_POKEMON2(MEGANIUM),
+ EC_POKEMON_NATIONAL(MEGANIUM),
EC_MOVE(MEMENTO),
- EC_POKEMON2(MEOWTH),
+ EC_POKEMON_NATIONAL(MEOWTH),
EC_WORD_MESSAGE,
EC_POKEMON(METAGROSS),
EC_MOVE2(METAL_CLAW),
EC_MOVE(METAL_SOUND),
EC_POKEMON(METANG),
- EC_POKEMON2(METAPOD),
+ EC_POKEMON_NATIONAL(METAPOD),
EC_MOVE(METEOR_MASH),
EC_MOVE2(METRONOME),
- EC_POKEMON2(MEW),
- EC_POKEMON2(MEWTWO),
+ EC_POKEMON_NATIONAL(MEW),
+ EC_POKEMON_NATIONAL(MEWTWO),
EC_POKEMON(MIGHTYENA),
EC_MOVE2(MILK_DRINK),
EC_POKEMON(MILOTIC),
- EC_POKEMON2(MILTANK),
+ EC_POKEMON_NATIONAL(MILTANK),
EC_MOVE2(MIMIC),
EC_MOVE(MIND_READER),
EC_MOVE2(MINIMIZE),
@@ -1032,7 +1034,7 @@ const u16 gEasyChatWordsByLetter_M[] = {
EC_WORD_MINUS,
EC_MOVE2(MIRROR_COAT),
EC_MOVE(MIRROR_MOVE),
- EC_POKEMON2(MISDREAVUS),
+ EC_POKEMON_NATIONAL(MISDREAVUS),
EC_WORD_MISHEARD,
EC_WORD_MISS,
EC_MOVE(MIST),
@@ -1041,7 +1043,7 @@ const u16 gEasyChatWordsByLetter_M[] = {
EC_WORD_MMM,
EC_WORD_MODE,
EC_WORD_MODERN,
- EC_POKEMON2(MOLTRES),
+ EC_POKEMON_NATIONAL(MOLTRES),
EC_WORD_MOMENTUM,
EC_WORD_MONDAY,
EC_WORD_MONEY,
@@ -1055,7 +1057,7 @@ const u16 gEasyChatWordsByLetter_M[] = {
EC_WORD_MOVE,
EC_WORD_MOVIE,
EC_WORD_MR,
- EC_POKEMON2(MR_MIME),
+ EC_POKEMON_NATIONAL(MR_MIME),
EC_WORD_MRS,
EC_WORD_MUCH,
EC_WORD_MUCH_OBLIGED,
@@ -1065,10 +1067,10 @@ const u16 gEasyChatWordsByLetter_M[] = {
EC_MOVE2(MUDDY_WATER),
EC_POKEMON(MUDKIP),
EC_WORD_MUFUFU,
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(MUK),
- EC_POKEMON2(MUK),
- EC_POKEMON2(MURKROW),
+ EC_POKEMON_NATIONAL(MUK),
+ EC_POKEMON_NATIONAL(MURKROW),
EC_WORD_MUSIC,
EC_WORD_MUST_BE,
EC_WORD_MY,
@@ -1079,9 +1081,9 @@ const u16 gEasyChatWordsByLetter_M[] = {
const u16 gEasyChatWordsByLetter_N[] = {
EC_WORD_NAME,
EC_WORD_NAP,
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(NATU),
- EC_POKEMON2(NATU),
+ EC_POKEMON_NATIONAL(NATU),
EC_WORD_NATURAL,
EC_WORD_NATURAL_CURE,
EC_WORD_NATURALLY,
@@ -1097,26 +1099,26 @@ const u16 gEasyChatWordsByLetter_N[] = {
EC_WORD_NEWS,
EC_WORD_NEXT,
EC_WORD_NICE,
- EC_POKEMON2(NIDOKING),
- EC_POKEMON2(NIDOQUEEN),
- EC_POKEMON2(NIDORAN_F),
- EC_POKEMON2(NIDORAN_M),
- EC_POKEMON2(NIDORINA),
- EC_POKEMON2(NIDORINO),
+ EC_POKEMON_NATIONAL(NIDOKING),
+ EC_POKEMON_NATIONAL(NIDOQUEEN),
+ EC_POKEMON_NATIONAL(NIDORAN_F),
+ EC_POKEMON_NATIONAL(NIDORAN_M),
+ EC_POKEMON_NATIONAL(NIDORINA),
+ EC_POKEMON_NATIONAL(NIDORINO),
EC_WORD_NIGHT,
EC_MOVE2(NIGHT_SHADE),
EC_MOVE(NIGHTMARE),
EC_WORD_NIGHTTIME,
EC_POKEMON(NINCADA),
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(NINETALES),
- EC_POKEMON2(NINETALES),
+ EC_POKEMON_NATIONAL(NINETALES),
EC_POKEMON(NINJASK),
EC_WORD_NITWIT,
EC_WORD_NO,
EC_WORD_NO_MATCH,
EC_WORD_NO_1,
- EC_POKEMON2(NOCTOWL),
+ EC_POKEMON_NATIONAL(NOCTOWL),
EC_WORD_NOISY,
EC_WORD_NON_STOP,
EC_WORD_NONE,
@@ -1134,10 +1136,10 @@ const u16 gEasyChatWordsByLetter_N[] = {
const u16 gEasyChatWordsByLetter_O[] = {
EC_WORD_OBLIVIOUS,
EC_MOVE(OCTAZOOKA),
- EC_POKEMON2(OCTILLERY),
- -1, 2, // Doubled pokemon species name
+ EC_POKEMON_NATIONAL(OCTILLERY),
+ DOUBLE_SPECIES_NAME
EC_POKEMON(ODDISH),
- EC_POKEMON2(ODDISH),
+ EC_POKEMON_NATIONAL(ODDISH),
EC_MOVE(ODOR_SLEUTH),
EC_WORD_OF,
EC_WORD_OFF,
@@ -1153,11 +1155,11 @@ const u16 gEasyChatWordsByLetter_O[] = {
EC_WORD_OKAY,
EC_WORD_OLD,
EC_WORD_OLDEN,
- EC_POKEMON2(OMANYTE),
- EC_POKEMON2(OMASTAR),
+ EC_POKEMON_NATIONAL(OMANYTE),
+ EC_POKEMON_NATIONAL(OMASTAR),
EC_WORD_ON,
EC_WORD_ONCE,
- EC_POKEMON2(ONIX),
+ EC_POKEMON_NATIONAL(ONIX),
EC_WORD_ONLY,
EC_WORD_OOPS,
EC_WORD_OPPONENT,
@@ -1179,8 +1181,8 @@ const u16 gEasyChatWordsByLetter_O[] = {
const u16 gEasyChatWordsByLetter_P[] = {
EC_MOVE(PAIN_SPLIT),
- EC_POKEMON2(PARAS),
- EC_POKEMON2(PARASECT),
+ EC_POKEMON_NATIONAL(PARAS),
+ EC_POKEMON_NATIONAL(PARASECT),
EC_WORD_PARDON,
EC_WORD_PARENT,
EC_WORD_PARTNER,
@@ -1193,29 +1195,29 @@ const u16 gEasyChatWordsByLetter_P[] = {
EC_WORD_PERFECT,
EC_WORD_PERFECTION,
EC_MOVE2(PERISH_SONG),
- EC_POKEMON2(PERSIAN),
+ EC_POKEMON_NATIONAL(PERSIAN),
EC_WORD_PERSON,
EC_MOVE2(PETAL_DANCE),
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(PHANPY),
- EC_POKEMON2(PHANPY),
+ EC_POKEMON_NATIONAL(PHANPY),
EC_WORD_PHONE,
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(PICHU),
- EC_POKEMON2(PICHU),
+ EC_POKEMON_NATIONAL(PICHU),
EC_WORD_PICKUP,
- EC_POKEMON2(PIDGEOT),
- EC_POKEMON2(PIDGEOTTO),
- EC_POKEMON2(PIDGEY),
- -1, 2, // Doubled pokemon species name
+ EC_POKEMON_NATIONAL(PIDGEOT),
+ EC_POKEMON_NATIONAL(PIDGEOTTO),
+ EC_POKEMON_NATIONAL(PIDGEY),
+ DOUBLE_SPECIES_NAME
EC_POKEMON(PIKACHU),
- EC_POKEMON2(PIKACHU),
- EC_POKEMON2(PILOSWINE),
+ EC_POKEMON_NATIONAL(PIKACHU),
+ EC_POKEMON_NATIONAL(PILOSWINE),
EC_MOVE2(PIN_MISSILE),
- EC_POKEMON2(PINECO),
- -1, 2, // Doubled pokemon species name
+ EC_POKEMON_NATIONAL(PINECO),
+ DOUBLE_SPECIES_NAME
EC_POKEMON(PINSIR),
- EC_POKEMON2(PINSIR),
+ EC_POKEMON_NATIONAL(PINSIR),
EC_WORD_PKRS,
EC_WORD_PLACE,
EC_WORD_PLANS,
@@ -1238,15 +1240,15 @@ const u16 gEasyChatWordsByLetter_P[] = {
EC_WORD_POKEDEX,
EC_WORD_POKEMON,
EC_WORD_POKENAV,
- EC_POKEMON2(POLITOED),
- EC_POKEMON2(POLIWAG),
- EC_POKEMON2(POLIWHIRL),
- EC_POKEMON2(POLIWRATH),
- EC_POKEMON2(PONYTA),
+ EC_POKEMON_NATIONAL(POLITOED),
+ EC_POKEMON_NATIONAL(POLIWAG),
+ EC_POKEMON_NATIONAL(POLIWHIRL),
+ EC_POKEMON_NATIONAL(POLIWRATH),
+ EC_POKEMON_NATIONAL(PONYTA),
EC_POKEMON(POOCHYENA),
EC_WORD_POPULAR,
- EC_POKEMON2(PORYGON),
- EC_POKEMON2(PORYGON2),
+ EC_POKEMON_NATIONAL(PORYGON),
+ EC_POKEMON_NATIONAL(PORYGON2),
EC_MOVE2(POUND),
EC_MOVE(POWDER_SNOW),
EC_WORD_POWER,
@@ -1256,52 +1258,52 @@ const u16 gEasyChatWordsByLetter_P[] = {
EC_WORD_PRESSURE,
EC_WORD_PRETEND,
EC_WORD_PRETTY,
- EC_POKEMON2(PRIMEAPE),
+ EC_POKEMON_NATIONAL(PRIMEAPE),
EC_WORD_PROBABLY,
EC_WORD_PROMISE,
EC_MOVE2(PROTECT),
EC_MOVE(PSYBEAM),
EC_MOVE(PSYCH_UP),
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_WORD_PSYCHIC,
EC_MOVE(PSYCHIC),
EC_MOVE(PSYCHO_BOOST),
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(PSYDUCK),
- EC_POKEMON2(PSYDUCK),
+ EC_POKEMON_NATIONAL(PSYDUCK),
EC_MOVE(PSYWAVE),
- EC_POKEMON2(PUPITAR),
+ EC_POKEMON_NATIONAL(PUPITAR),
EC_WORD_PURE_POWER,
EC_MOVE(PURSUIT),
EC_WORD_PUSHOVER,
};
const u16 gEasyChatWordsByLetter_Q[] = {
- EC_POKEMON2(QUAGSIRE),
+ EC_POKEMON_NATIONAL(QUAGSIRE),
EC_WORD_QUESTION,
EC_MOVE2(QUICK_ATTACK),
- EC_POKEMON2(QUILAVA),
+ EC_POKEMON_NATIONAL(QUILAVA),
EC_WORD_QUITE,
- EC_POKEMON2(QWILFISH),
+ EC_POKEMON_NATIONAL(QWILFISH),
};
const u16 gEasyChatWordsByLetter_R[] = {
EC_WORD_RADIO,
EC_MOVE(RAGE),
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(RAICHU),
- EC_POKEMON2(RAICHU),
- EC_POKEMON2(RAIKOU),
+ EC_POKEMON_NATIONAL(RAICHU),
+ EC_POKEMON_NATIONAL(RAIKOU),
EC_MOVE(RAIN_DANCE),
EC_WORD_RAIN_DISH,
EC_POKEMON(RALTS),
EC_WORD_RANK,
EC_MOVE(RAPID_SPIN),
- EC_POKEMON2(RAPIDASH),
+ EC_POKEMON_NATIONAL(RAPIDASH),
EC_WORD_RARE,
EC_WORD_RATHER,
- EC_POKEMON2(RATICATE),
- EC_POKEMON2(RATTATA),
+ EC_POKEMON_NATIONAL(RATICATE),
+ EC_POKEMON_NATIONAL(RATTATA),
EC_POKEMON(RAYQUAZA),
EC_MOVE2(RAZOR_LEAF),
EC_MOVE(RAZOR_WIND),
@@ -1323,19 +1325,19 @@ const u16 gEasyChatWordsByLetter_R[] = {
EC_WORD_REJECT,
EC_WORD_RELEASE,
EC_POKEMON(RELICANTH),
- EC_POKEMON2(REMORAID),
+ EC_POKEMON_NATIONAL(REMORAID),
EC_WORD_RENTAL,
EC_MOVE2(REST),
EC_WORD_RESUSCITATE,
EC_MOVE(RETURN),
EC_MOVE2(REVENGE),
EC_MOVE(REVERSAL),
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(RHYDON),
- EC_POKEMON2(RHYDON),
- -1, 2, // Doubled pokemon species name
+ EC_POKEMON_NATIONAL(RHYDON),
+ DOUBLE_SPECIES_NAME
EC_POKEMON(RHYHORN),
- EC_POKEMON2(RHYHORN),
+ EC_POKEMON_NATIONAL(RHYHORN),
EC_WORD_RIBBON,
EC_WORD_RICKETY,
EC_WORD_RIGHT,
@@ -1377,12 +1379,12 @@ const u16 gEasyChatWordsByLetter_S[] = {
EC_MOVE(SAND_TOMB),
EC_WORD_SAND_VEIL,
EC_MOVE(SAND_ATTACK),
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(SANDSHREW),
- EC_POKEMON2(SANDSHREW),
- -1, 2, // Doubled pokemon species name
+ EC_POKEMON_NATIONAL(SANDSHREW),
+ DOUBLE_SPECIES_NAME
EC_POKEMON(SANDSLASH),
- EC_POKEMON2(SANDSLASH),
+ EC_POKEMON_NATIONAL(SANDSLASH),
EC_MOVE(SANDSTORM),
EC_WORD_SAPPHIRE,
EC_WORD_SATISFIED,
@@ -1393,16 +1395,16 @@ const u16 gEasyChatWordsByLetter_S[] = {
EC_WORD_SCATTER,
EC_POKEMON(SCEPTILE),
EC_WORD_SCHOOL,
- EC_POKEMON2(SCIZOR),
+ EC_POKEMON_NATIONAL(SCIZOR),
EC_MOVE2(SCRATCH),
EC_MOVE(SCREECH),
- EC_POKEMON2(SCYTHER),
- -1, 2, // Doubled pokemon species name
+ EC_POKEMON_NATIONAL(SCYTHER),
+ DOUBLE_SPECIES_NAME
EC_POKEMON(SEADRA),
- EC_POKEMON2(SEADRA),
- -1, 2, // Doubled pokemon species name
+ EC_POKEMON_NATIONAL(SEADRA),
+ DOUBLE_SPECIES_NAME
EC_POKEMON(SEAKING),
- EC_POKEMON2(SEAKING),
+ EC_POKEMON_NATIONAL(SEAKING),
EC_POKEMON(SEALEO),
EC_WORD_SEARCH,
EC_WORD_SECRET,
@@ -1412,13 +1414,13 @@ const u16 gEasyChatWordsByLetter_S[] = {
EC_WORD_SEE_YA,
EC_POKEMON(SEEDOT),
EC_WORD_SEEK,
- EC_POKEMON2(SEEL),
+ EC_POKEMON_NATIONAL(SEEL),
EC_WORD_SEEMS,
EC_WORD_SEES,
EC_MOVE2(SEISMIC_TOSS),
EC_MOVE(SELF_DESTRUCT),
EC_WORD_SENSE,
- EC_POKEMON2(SENTRET),
+ EC_POKEMON_NATIONAL(SENTRET),
EC_WORD_SERENE_GRACE,
EC_WORD_SERIOUS,
EC_WORD_SERIOUSLY,
@@ -1441,7 +1443,7 @@ const u16 gEasyChatWordsByLetter_S[] = {
EC_MOVE(SHEER_COLD),
EC_POKEMON(SHELGON),
EC_WORD_SHELL_ARMOR,
- EC_POKEMON2(SHELLDER),
+ EC_POKEMON_NATIONAL(SHELLDER),
EC_WORD_SHIELD_DUST,
EC_POKEMON(SHIFTRY),
EC_WORD_SHINE,
@@ -1452,7 +1454,7 @@ const u16 gEasyChatWordsByLetter_S[] = {
EC_WORD_SHOW,
EC_WORD_SHREDDED,
EC_POKEMON(SHROOMISH),
- EC_POKEMON2(SHUCKLE),
+ EC_POKEMON_NATIONAL(SHUCKLE),
EC_POKEMON(SHUPPET),
EC_WORD_SIBLINGS,
EC_WORD_SIGH,
@@ -1466,14 +1468,14 @@ const u16 gEasyChatWordsByLetter_S[] = {
EC_MOVE(SING),
EC_WORD_SINK,
EC_WORD_SISTER,
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(SKARMORY),
- EC_POKEMON2(SKARMORY),
+ EC_POKEMON_NATIONAL(SKARMORY),
EC_MOVE(SKETCH),
EC_WORD_SKILL,
EC_MOVE(SKILL_SWAP),
EC_WORD_SKILLED,
- EC_POKEMON2(SKIPLOOM),
+ EC_POKEMON_NATIONAL(SKIPLOOM),
EC_POKEMON(SKITTY),
EC_MOVE2(SKULL_BASH),
EC_MOVE(SKY_ATTACK),
@@ -1489,34 +1491,34 @@ const u16 gEasyChatWordsByLetter_S[] = {
EC_WORD_SLEPT,
EC_WORD_SLIDE,
EC_WORD_SLIMY,
- EC_POKEMON2(SLOWBRO),
- EC_POKEMON2(SLOWKING),
- EC_POKEMON2(SLOWPOKE),
+ EC_POKEMON_NATIONAL(SLOWBRO),
+ EC_POKEMON_NATIONAL(SLOWKING),
+ EC_POKEMON_NATIONAL(SLOWPOKE),
EC_MOVE2(SLUDGE),
EC_MOVE2(SLUDGE_BOMB),
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(SLUGMA),
- EC_POKEMON2(SLUGMA),
+ EC_POKEMON_NATIONAL(SLUGMA),
EC_WORD_SMACK,
EC_WORD_SMALL,
EC_WORD_SMART,
EC_WORD_SMARTNESS,
- EC_POKEMON2(SMEARGLE),
+ EC_POKEMON_NATIONAL(SMEARGLE),
EC_WORD_SMELL,
EC_WORD_SMELL_YA,
EC_MOVE(SMELLING_SALT),
EC_WORD_SMITE,
EC_MOVE(SMOG),
EC_MOVE(SMOKESCREEN),
- EC_POKEMON2(SMOOCHUM),
+ EC_POKEMON_NATIONAL(SMOOCHUM),
EC_WORD_SMOOTH,
EC_MOVE2(SNATCH),
- EC_POKEMON2(SNEASEL),
+ EC_POKEMON_NATIONAL(SNEASEL),
EC_MOVE(SNORE),
- EC_POKEMON2(SNORLAX),
+ EC_POKEMON_NATIONAL(SNORLAX),
EC_WORD_SNORT,
EC_POKEMON(SNORUNT),
- EC_POKEMON2(SNUBBULL),
+ EC_POKEMON_NATIONAL(SNUBBULL),
EC_WORD_SO,
EC_MOVE2(SOFT_BOILED),
EC_WORD_SOFTWARE,
@@ -1536,14 +1538,14 @@ const u16 gEasyChatWordsByLetter_S[] = {
EC_WORD_SOUNDPROOF,
EC_WORD_SP_ABILITY,
EC_MOVE(SPARK),
- EC_POKEMON2(SPEAROW),
+ EC_POKEMON_NATIONAL(SPEAROW),
EC_WORD_SPECTATOR,
EC_WORD_SPEED_BOOST,
EC_POKEMON(SPHEAL),
EC_MOVE(SPIDER_WEB),
EC_MOVE2(SPIKE_CANNON),
EC_MOVE2(SPIKES),
- EC_POKEMON2(SPINARAK),
+ EC_POKEMON_NATIONAL(SPINARAK),
EC_POKEMON(SPINDA),
EC_WORD_SPIRALING,
EC_WORD_SPIRIT,
@@ -1554,21 +1556,21 @@ const u16 gEasyChatWordsByLetter_S[] = {
EC_MOVE(SPORE),
EC_WORD_SPORTS,
EC_WORD_SPRING,
- EC_POKEMON2(SQUIRTLE),
+ EC_POKEMON_NATIONAL(SQUIRTLE),
EC_WORD_STAGE,
- EC_POKEMON2(STANTLER),
- -1, 2, // Doubled pokemon species name
+ EC_POKEMON_NATIONAL(STANTLER),
+ DOUBLE_SPECIES_NAME
EC_POKEMON(STARMIE),
- EC_POKEMON2(STARMIE),
+ EC_POKEMON_NATIONAL(STARMIE),
EC_WORD_START,
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(STARYU),
- EC_POKEMON2(STARYU),
+ EC_POKEMON_NATIONAL(STARYU),
EC_WORD_STATIC,
EC_WORD_STAY_AT_HOME,
EC_WORD_STEEL,
EC_MOVE2(STEEL_WING),
- EC_POKEMON2(STEELIX),
+ EC_POKEMON_NATIONAL(STEELIX),
EC_WORD_STENCH,
EC_WORD_STICKY_HOLD,
EC_MOVE2(STOCKPILE),
@@ -1588,12 +1590,12 @@ const u16 gEasyChatWordsByLetter_S[] = {
EC_MOVE(SUBMISSION),
EC_MOVE2(SUBSTITUTE),
EC_WORD_SUCTION_CUPS,
- EC_POKEMON2(SUDOWOODO),
- EC_POKEMON2(SUICUNE),
+ EC_POKEMON_NATIONAL(SUDOWOODO),
+ EC_POKEMON_NATIONAL(SUICUNE),
EC_WORD_SUMMER,
EC_WORD_SUNDAY,
- EC_POKEMON2(SUNFLORA),
- EC_POKEMON2(SUNKERN),
+ EC_POKEMON_NATIONAL(SUNFLORA),
+ EC_POKEMON_NATIONAL(SUNKERN),
EC_MOVE2(SUNNY_DAY),
EC_WORD_SUPER,
EC_MOVE(SUPER_FANG),
@@ -1615,7 +1617,7 @@ const u16 gEasyChatWordsByLetter_S[] = {
EC_POKEMON(SWELLOW),
EC_MOVE(SWIFT),
EC_WORD_SWIFT_SWIM,
- EC_POKEMON2(SWINUB),
+ EC_POKEMON_NATIONAL(SWINUB),
EC_MOVE2(SWORDS_DANCE),
EC_WORD_SYNCHRONIZE,
EC_MOVE(SYNTHESIS),
@@ -1633,24 +1635,24 @@ const u16 gEasyChatWordsByLetter_T[] = {
EC_WORD_TALENT,
EC_WORD_TALK,
EC_WORD_TALKING,
- EC_POKEMON2(TANGELA),
+ EC_POKEMON_NATIONAL(TANGELA),
EC_WORD_TASTY,
EC_MOVE2(TAUNT),
- EC_POKEMON2(TAUROS),
+ EC_POKEMON_NATIONAL(TAUROS),
EC_WORD_TCH,
EC_WORD_TEACH,
EC_WORD_TEACHER,
EC_WORD_TEACHES,
- EC_POKEMON2(TEDDIURSA),
+ EC_POKEMON_NATIONAL(TEDDIURSA),
EC_MOVE2(TEETER_DANCE),
EC_MOVE2(TELEPORT),
EC_WORD_TELEVISION,
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(TENTACOOL),
- EC_POKEMON2(TENTACOOL),
- -1, 2, // Doubled pokemon species name
+ EC_POKEMON_NATIONAL(TENTACOOL),
+ DOUBLE_SPECIES_NAME
EC_POKEMON(TENTACRUEL),
- EC_POKEMON2(TENTACRUEL),
+ EC_POKEMON_NATIONAL(TENTACRUEL),
EC_WORD_TERRIBLE,
EC_WORD_TEST,
EC_WORD_THAN,
@@ -1704,9 +1706,9 @@ const u16 gEasyChatWordsByLetter_T[] = {
EC_WORD_TO_US,
EC_WORD_TO_WHOM,
EC_WORD_TODAY,
- EC_POKEMON2(TOGEPI),
+ EC_POKEMON_NATIONAL(TOGEPI),
EC_WORD_TOGETHER,
- EC_POKEMON2(TOGETIC),
+ EC_POKEMON_NATIONAL(TOGETIC),
EC_WORD_TOMORROW,
EC_WORD_TOO,
EC_WORD_TOO_LATE,
@@ -1718,7 +1720,7 @@ const u16 gEasyChatWordsByLetter_T[] = {
EC_MOVE(TORMENT),
EC_WORD_TORRENT,
EC_WORD_TOTALLY,
- EC_POKEMON2(TOTODILE),
+ EC_POKEMON_NATIONAL(TOTODILE),
EC_WORD_TOUGH,
EC_WORD_TOUGHNESS,
EC_WORD_TOURNAMENT,
@@ -1751,9 +1753,9 @@ const u16 gEasyChatWordsByLetter_T[] = {
EC_WORD_TWIRLING,
EC_MOVE2(TWISTER),
EC_WORD_TYPE,
- EC_POKEMON2(TYPHLOSION),
- EC_POKEMON2(TYRANITAR),
- EC_POKEMON2(TYROGUE),
+ EC_POKEMON_NATIONAL(TYPHLOSION),
+ EC_POKEMON_NATIONAL(TYRANITAR),
+ EC_POKEMON_NATIONAL(TYROGUE),
};
const u16 gEasyChatWordsByLetter_U[] = {
@@ -1761,7 +1763,7 @@ const u16 gEasyChatWordsByLetter_U[] = {
EC_WORD_UH_HUH,
EC_WORD_UH_OH,
EC_WORD_UM,
- EC_POKEMON2(UMBREON),
+ EC_POKEMON_NATIONAL(UMBREON),
EC_WORD_UNAVOIDABLE,
EC_WORD_UNBELIEVABLE,
EC_WORD_UNCLE,
@@ -1769,14 +1771,14 @@ const u16 gEasyChatWordsByLetter_U[] = {
EC_WORD_UNDERSTANDS,
EC_WORD_UNDERSTOOD,
EC_WORD_UNION,
- EC_POKEMON2(UNOWN),
+ EC_POKEMON_NATIONAL(UNOWN),
EC_WORD_UNTIL,
EC_WORD_UP,
EC_WORD_UPBEAT,
EC_MOVE(UPROAR),
EC_WORD_UPSIDE_DOWN,
EC_WORD_URGH,
- EC_POKEMON2(URSARING),
+ EC_POKEMON_NATIONAL(URSARING),
EC_WORD_USE,
EC_WORD_USELESS,
EC_WORD_USES,
@@ -1785,35 +1787,35 @@ const u16 gEasyChatWordsByLetter_U[] = {
const u16 gEasyChatWordsByLetter_V[] = {
EC_WORD_VACATION,
- EC_POKEMON2(VAPOREON),
- EC_POKEMON2(VENOMOTH),
- EC_POKEMON2(VENONAT),
- EC_POKEMON2(VENUSAUR),
+ EC_POKEMON_NATIONAL(VAPOREON),
+ EC_POKEMON_NATIONAL(VENOMOTH),
+ EC_POKEMON_NATIONAL(VENONAT),
+ EC_POKEMON_NATIONAL(VENUSAUR),
EC_WORD_VERSION,
EC_WORD_VERSUS,
EC_WORD_VERY,
EC_POKEMON(VIBRAVA),
EC_MOVE2(VICE_GRIP),
EC_WORD_VICTORY,
- EC_POKEMON2(VICTREEBEL),
+ EC_POKEMON_NATIONAL(VICTREEBEL),
EC_WORD_VIEWING,
EC_POKEMON(VIGOROTH),
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(VILEPLUME),
- EC_POKEMON2(VILEPLUME),
+ EC_POKEMON_NATIONAL(VILEPLUME),
EC_MOVE2(VINE_WHIP),
EC_WORD_VITAL_SPIRIT,
EC_MOVE(VITAL_THROW),
EC_POKEMON(VOLBEAT),
EC_WORD_VOLT_ABSORB,
EC_MOVE2(VOLT_TACKLE),
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(VOLTORB),
- EC_POKEMON2(VOLTORB),
+ EC_POKEMON_NATIONAL(VOLTORB),
EC_WORD_VORACIOUS,
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(VULPIX),
- EC_POKEMON2(VULPIX),
+ EC_POKEMON_NATIONAL(VULPIX),
};
const u16 gEasyChatWordsByLetter_W[] = {
@@ -1832,7 +1834,7 @@ const u16 gEasyChatWordsByLetter_W[] = {
EC_WORD_WANNABE,
EC_WORD_WANT,
EC_WORD_WANTS,
- EC_POKEMON2(WARTORTLE),
+ EC_POKEMON_NATIONAL(WARTORTLE),
EC_WORD_WAS,
EC_WORD_WASN_T,
EC_WORD_WATER,
@@ -1851,12 +1853,12 @@ const u16 gEasyChatWordsByLetter_W[] = {
EC_WORD_WEAKENED,
EC_MOVE(WEATHER_BALL),
EC_WORD_WEDNESDAY,
- EC_POKEMON2(WEEDLE),
+ EC_POKEMON_NATIONAL(WEEDLE),
EC_WORD_WEEK,
- EC_POKEMON2(WEEPINBELL),
- -1, 2, // Doubled pokemon species name
+ EC_POKEMON_NATIONAL(WEEPINBELL),
+ DOUBLE_SPECIES_NAME
EC_POKEMON(WEEZING),
- EC_POKEMON2(WEEZING),
+ EC_POKEMON_NATIONAL(WEEZING),
EC_WORD_WEIRD,
EC_WORD_WELCOME,
EC_WORD_WELL,
@@ -1883,9 +1885,9 @@ const u16 gEasyChatWordsByLetter_W[] = {
EC_WORD_WHOM,
EC_WORD_WHOSE,
EC_WORD_WHY,
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(WIGGLYTUFF),
- EC_POKEMON2(WIGGLYTUFF),
+ EC_POKEMON_NATIONAL(WIGGLYTUFF),
EC_WORD_WILD,
EC_WORD_WILL,
EC_WORD_WILL_BE_HERE,
@@ -1903,15 +1905,15 @@ const u16 gEasyChatWordsByLetter_W[] = {
EC_MOVE(WITHDRAW),
EC_WORD_WITHOUT,
EC_WORD_WOBBLY,
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(WOBBUFFET),
- EC_POKEMON2(WOBBUFFET),
+ EC_POKEMON_NATIONAL(WOBBUFFET),
EC_WORD_WOMAN,
EC_WORD_WON,
EC_WORD_WON_T,
EC_WORD_WONDER,
EC_WORD_WONDER_GUARD,
- EC_POKEMON2(WOOPER),
+ EC_POKEMON_NATIONAL(WOOPER),
EC_WORD_WORD,
EC_WORD_WORK,
EC_WORD_WORKING,
@@ -1928,14 +1930,14 @@ const u16 gEasyChatWordsByLetter_W[] = {
};
const u16 gEasyChatWordsByLetter_X[] = {
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(XATU),
- EC_POKEMON2(XATU),
+ EC_POKEMON_NATIONAL(XATU),
};
const u16 gEasyChatWordsByLetter_Y[] = {
EC_WORD_YAHOO,
- EC_POKEMON2(YANMA),
+ EC_POKEMON_NATIONAL(YANMA),
EC_MOVE(YAWN),
EC_WORD_YAY,
EC_WORD_YEAH,
@@ -1958,59 +1960,59 @@ const u16 gEasyChatWordsByLetter_Y[] = {
const u16 gEasyChatWordsByLetter_Z[] = {
EC_POKEMON(ZANGOOSE),
EC_MOVE2(ZAP_CANNON),
- EC_POKEMON2(ZAPDOS),
+ EC_POKEMON_NATIONAL(ZAPDOS),
EC_POKEMON(ZIGZAGOON),
- -1, 2, // Doubled pokemon species name
+ DOUBLE_SPECIES_NAME
EC_POKEMON(ZUBAT),
- EC_POKEMON2(ZUBAT),
+ EC_POKEMON_NATIONAL(ZUBAT),
};
const u16 gEasyChatWordsByLetter_UnusedJapaneseHi[] = {
- EC_POKEMON2(CLEFFA),
+ EC_POKEMON_NATIONAL(CLEFFA),
EC_WORD_AIYEEH,
- EC_POKEMON2(WEEDLE),
+ EC_POKEMON_NATIONAL(WEEDLE),
EC_WORD_HERO,
- -1, 2, // Doubled pokemon species name
- EC_POKEMON2(PIKACHU),
+ DOUBLE_SPECIES_NAME
+ EC_POKEMON_NATIONAL(PIKACHU),
EC_POKEMON(PIKACHU),
EC_MOVE2(LIGHT_SCREEN),
EC_WORD_SHINE,
EC_WORD_LOW,
- EC_POKEMON2(CLEFABLE),
+ EC_POKEMON_NATIONAL(CLEFABLE),
EC_WORD_FLYING,
- EC_POKEMON2(PIDGEOT),
- EC_POKEMON2(PIDGEOTTO),
+ EC_POKEMON_NATIONAL(PIDGEOT),
+ EC_POKEMON_NATIONAL(PIDGEOTTO),
EC_WORD_LEFT,
- -1, 2, // Doubled pokemon species name
- EC_POKEMON2(PICHU),
+ DOUBLE_SPECIES_NAME
+ EC_POKEMON_NATIONAL(PICHU),
EC_POKEMON(PICHU),
EC_MOVE2(SCRATCH),
EC_WORD_SURPRISE,
EC_MOVE2(HYPER_FANG),
- EC_POKEMON2(CLEFAIRY),
+ EC_POKEMON_NATIONAL(CLEFAIRY),
EC_WORD_DROUGHT,
EC_WORD_HIDDEN,
EC_WORD_PERSON,
EC_WORD_AWFUL,
- EC_POKEMON2(CHARMANDER),
- -1, 2, // Doubled pokemon species name
- EC_POKEMON2(STARYU),
+ EC_POKEMON_NATIONAL(CHARMANDER),
+ DOUBLE_SPECIES_NAME
+ EC_POKEMON_NATIONAL(STARYU),
EC_POKEMON(STARYU),
EC_WORD_ALONE,
- EC_POKEMON2(CYNDAQUIL),
+ EC_POKEMON_NATIONAL(CYNDAQUIL),
EC_MOVE2(EMBER),
EC_POKEMON(VIBRAVA),
EC_WORD_BORED,
- EC_POKEMON2(SUNKERN),
+ EC_POKEMON_NATIONAL(SUNKERN),
EC_WORD_SECRET,
EC_WORD_SECRET_BASE,
EC_MOVE2(SECRET_POWER),
- EC_POKEMON2(TEDDIURSA),
+ EC_POKEMON_NATIONAL(TEDDIURSA),
EC_WORD_HIYAH,
EC_MOVE2(DIZZY_PUNCH),
EC_WORD_LIGHTNINGROD,
- -1, 2, // Doubled pokemon species name
- EC_POKEMON2(VOLTORB),
+ DOUBLE_SPECIES_NAME
+ EC_POKEMON_NATIONAL(VOLTORB),
EC_POKEMON(VOLTORB),
EC_WORD_DAYTIME,
EC_MOVE2(BULK_UP),
@@ -2021,42 +2023,42 @@ const u16 gEasyChatWordsByLetter_UnusedJapaneseHi[] = {
const u16 gEasyChatWordsByLetter_UnusedJapaneseFu[] = {
EC_WORD_FIGHT,
- EC_POKEMON2(MOLTRES),
+ EC_POKEMON_NATIONAL(MOLTRES),
EC_WORD_FASHION,
EC_WORD_FEAR,
EC_WORD_FEVER,
EC_MOVE2(IMPRISON),
- EC_POKEMON2(FLAREON),
- -1, 2, // Doubled pokemon species name
- EC_POKEMON2(ALAKAZAM),
+ EC_POKEMON_NATIONAL(FLAREON),
+ DOUBLE_SPECIES_NAME
+ EC_POKEMON_NATIONAL(ALAKAZAM),
EC_POKEMON(ALAKAZAM),
- EC_POKEMON2(MAGMAR),
+ EC_POKEMON_NATIONAL(MAGMAR),
EC_POKEMON(GRUMPIG),
EC_MOVE2(FEATHER_DANCE),
- EC_POKEMON2(FORRETRESS),
+ EC_POKEMON_NATIONAL(FORRETRESS),
EC_MOVE2(WHIRLWIND),
EC_WORD_COMPOUNDEYES,
- -1, 2, // Doubled pokemon species name
- EC_POKEMON2(WIGGLYTUFF),
+ DOUBLE_SPECIES_NAME
+ EC_POKEMON_NATIONAL(WIGGLYTUFF),
EC_POKEMON(WIGGLYTUFF),
EC_MOVE2(BEAT_UP),
EC_WORD_MYSTERY,
- EC_POKEMON2(IVYSAUR),
- EC_POKEMON2(BULBASAUR),
+ EC_POKEMON_NATIONAL(IVYSAUR),
+ EC_POKEMON_NATIONAL(BULBASAUR),
EC_WORD_MARVEL_SCALE,
EC_WORD_WONDER_GUARD,
- EC_POKEMON2(VENUSAUR),
+ EC_POKEMON_NATIONAL(VENUSAUR),
EC_WORD_LACKS,
EC_WORD_RESUSCITATE,
EC_WORD_SMACK,
EC_WORD_FUFUFU,
- EC_POKEMON2(AERODACTYL),
+ EC_POKEMON_NATIONAL(AERODACTYL),
EC_WORD_WIMPY,
- EC_POKEMON2(MAGBY),
+ EC_POKEMON_NATIONAL(MAGBY),
EC_WORD_LOL,
EC_MOVE2(BLIZZARD),
- -1, 2, // Doubled pokemon species name
- EC_POKEMON2(IGGLYBUFF),
+ DOUBLE_SPECIES_NAME
+ EC_POKEMON_NATIONAL(IGGLYBUFF),
EC_POKEMON(IGGLYBUFF),
EC_WORD_SNORT,
EC_MOVE2(STOMP),
@@ -2067,17 +2069,17 @@ const u16 gEasyChatWordsByLetter_UnusedJapaneseFu[] = {
EC_WORD_PLUS,
EC_MOVE2(BLAST_BURN),
EC_POKEMON(PLUSLE),
- EC_POKEMON2(UMBREON),
+ EC_POKEMON_NATIONAL(UMBREON),
EC_MOVE2(FLASH),
EC_WORD_WOBBLY,
EC_MOVE2(TEETER_DANCE),
EC_WORD_PRETEND,
- EC_POKEMON2(ARTICUNO),
+ EC_POKEMON_NATIONAL(ARTICUNO),
EC_WORD_WANNABE,
- -1, 2, // Doubled pokemon species name
- EC_POKEMON2(JIGGLYPUFF),
+ DOUBLE_SPECIES_NAME
+ EC_POKEMON_NATIONAL(JIGGLYPUFF),
EC_POKEMON(JIGGLYPUFF),
- EC_POKEMON2(SNUBBULL),
+ EC_POKEMON_NATIONAL(SNUBBULL),
EC_WORD_SHAKY,
EC_MOVE2(CRUSH_CLAW),
EC_MOVE2(BLAZE_KICK),
@@ -2093,29 +2095,29 @@ const u16 gEasyChatWordsByLetter_UnusedJapaneseHe[] = {
EC_WORD_HEY,
EC_POKEMON(CORPHISH),
EC_WORD_BABY,
- EC_POKEMON2(BAYLEEF),
+ EC_POKEMON_NATIONAL(BAYLEEF),
EC_WORD_BEST,
EC_WORD_LOUSY,
EC_WORD_HEHEHE,
- -1, 2, // Doubled pokemon species name
- EC_POKEMON2(GRIMER),
+ DOUBLE_SPECIES_NAME
+ EC_POKEMON_NATIONAL(GRIMER),
EC_POKEMON(GRIMER),
- -1, 2, // Doubled pokemon species name
- EC_POKEMON2(MUK),
+ DOUBLE_SPECIES_NAME
+ EC_POKEMON_NATIONAL(MUK),
EC_POKEMON(MUK),
EC_WORD_LIQUID_OOZE,
EC_MOVE2(SLUDGE),
EC_MOVE2(SLUDGE_BOMB),
EC_MOVE2(GLARE),
EC_WORD_HEH,
- -1, 2, // Doubled pokemon species name
- EC_POKEMON2(HERACROSS),
+ DOUBLE_SPECIES_NAME
+ EC_POKEMON_NATIONAL(HERACROSS),
EC_POKEMON(HERACROSS),
EC_POKEMON(PELIPPER),
- EC_POKEMON2(HOUNDOOM),
- EC_POKEMON2(PERSIAN),
+ EC_POKEMON_NATIONAL(HOUNDOOM),
+ EC_POKEMON_NATIONAL(PERSIAN),
EC_WORD_RIPPED,
- EC_POKEMON2(LICKITUNG),
+ EC_POKEMON_NATIONAL(LICKITUNG),
EC_WORD_STUDY,
EC_WORD_COLOR_CHANGE,
EC_MOVE2(TRANSFORM),
@@ -2124,7 +2126,7 @@ const u16 gEasyChatWordsByLetter_UnusedJapaneseHe[] = {
const u16 gEasyChatWordsByLetter_UnusedJapaneseHo[] = {
EC_MOVE2(POISON_TAIL),
EC_WORD_POINTS,
- EC_POKEMON2(HO_OH),
+ EC_POKEMON_NATIONAL(HO_OH),
EC_WORD_SOUNDPROOF,
EC_WORD_ADVENTURE,
EC_WORD_EFFECT_SPORE,
@@ -2133,7 +2135,7 @@ const u16 gEasyChatWordsByLetter_UnusedJapaneseHo[] = {
EC_POKEMON(WAILMER),
EC_WORD_DUDE,
EC_WORD_BOARD,
- EC_POKEMON2(HOOTHOOT),
+ EC_POKEMON_NATIONAL(HOOTHOOT),
EC_POKEMON(SALAMENCE),
EC_WORD_BALL,
EC_MOVE2(BONE_RUSH),
@@ -2154,21 +2156,21 @@ const u16 gEasyChatWordsByLetter_UnusedJapaneseHo[] = {
EC_POKEMON(AGGRON),
EC_MOVE2(TAIL_GLOW),
EC_POKEMON(POOCHYENA),
- EC_POKEMON2(PIDGEY),
+ EC_POKEMON_NATIONAL(PIDGEY),
EC_WORD_AS_MUCH_AS,
- EC_POKEMON2(PONYTA),
+ EC_POKEMON_NATIONAL(PONYTA),
EC_MOVE2(BONE_CLUB),
EC_MOVE2(BONEMERANG),
EC_WORD_FIRE,
EC_MOVE2(FIRE_SPIN),
EC_WORD_FLAME_BODY,
EC_MOVE2(FIRE_PUNCH),
- EC_POKEMON2(SKIPLOOM),
+ EC_POKEMON_NATIONAL(SKIPLOOM),
EC_WORD_HOHOHO,
EC_WORD_PRAISE,
EC_WORD_UH_HUH,
- EC_POKEMON2(PORYGON),
- EC_POKEMON2(PORYGON2),
+ EC_POKEMON_NATIONAL(PORYGON),
+ EC_POKEMON_NATIONAL(PORYGON2),
EC_MOVE2(VOLT_TACKLE),
EC_WORD_POKEBLOCK,
EC_MOVE2(PERISH_SONG),
@@ -2189,16 +2191,16 @@ const u16 gEasyChatWordsByLetter_UnusedJapaneseMa[] = {
EC_WORD_OWN_TEMPO,
EC_MOVE2(WRAP),
EC_MOVE2(SPIKES),
- -1, 2, // Doubled pokemon species name
- EC_POKEMON2(MAGCARGO),
+ DOUBLE_SPECIES_NAME
+ EC_POKEMON_NATIONAL(MAGCARGO),
EC_POKEMON(MAGCARGO),
EC_MOVE2(MAGNITUDE),
EC_POKEMON(MAKUHITA),
- -1, 2, // Doubled pokemon species name
- EC_POKEMON2(SLUGMA),
+ DOUBLE_SPECIES_NAME
+ EC_POKEMON_NATIONAL(SLUGMA),
EC_POKEMON(SLUGMA),
EC_WORD_MAGMA_ARMOR,
- EC_POKEMON2(QUILAVA),
+ EC_POKEMON_NATIONAL(QUILAVA),
EC_WORD_OVERDO,
EC_WORD_LOSS,
EC_WORD_IF_I_LOSE,
@@ -2214,9 +2216,9 @@ const u16 gEasyChatWordsByLetter_UnusedJapaneseMa[] = {
EC_WORD_INCREASING,
EC_WORD_TOO,
EC_WORD_LIKE,
- EC_POKEMON2(BELLSPROUT),
- -1, 2, // Doubled pokemon species name
- EC_POKEMON2(WEEZING),
+ EC_POKEMON_NATIONAL(BELLSPROUT),
+ DOUBLE_SPECIES_NAME
+ EC_POKEMON_NATIONAL(WEEZING),
EC_POKEMON(WEEZING),
EC_WORD_SMELL,
EC_WORD_YET,
@@ -2231,23 +2233,23 @@ const u16 gEasyChatWordsByLetter_UnusedJapaneseMa[] = {
EC_WORD_GUARD,
EC_MOVE2(PROTECT),
EC_POKEMON(CASCOON),
- -1, 2, // Doubled pokemon species name
- EC_POKEMON2(MARILL),
+ DOUBLE_SPECIES_NAME
+ EC_POKEMON_NATIONAL(MARILL),
EC_POKEMON(MARILL),
- -1, 2, // Doubled pokemon species name
- EC_POKEMON2(AZUMARILL),
+ DOUBLE_SPECIES_NAME
+ EC_POKEMON_NATIONAL(AZUMARILL),
EC_POKEMON(AZUMARILL),
EC_MOVE2(DEFENSE_CURL),
EC_WORD_AS_IF,
EC_POKEMON(SWALOT),
- -1, 2, // Doubled pokemon species name
- EC_POKEMON2(ELECTRODE),
+ DOUBLE_SPECIES_NAME
+ EC_POKEMON_NATIONAL(ELECTRODE),
EC_POKEMON(ELECTRODE),
EC_MOVE2(ROLLING_KICK),
EC_WORD_COMICS,
- EC_POKEMON2(MANKEY),
+ EC_POKEMON_NATIONAL(MANKEY),
EC_WORD_SATISFIED,
- EC_POKEMON2(MANTINE),
+ EC_POKEMON_NATIONAL(MANTINE),
};
const u16 gEasyChatWordsByLetter_UnusedJapaneseMi[] = {
@@ -2272,16 +2274,16 @@ const u16 gEasyChatWordsByLetter_UnusedJapaneseMi[] = {
EC_WORD_LOOKS,
EC_WORD_REJECT,
EC_WORD_ACCEPT,
- EC_POKEMON2(DRATINI),
+ EC_POKEMON_NATIONAL(DRATINI),
EC_MOVE2(FALSE_SWIPE),
EC_MOVE2(FORESIGHT),
- EC_POKEMON2(MEW),
- EC_POKEMON2(MEWTWO),
+ EC_POKEMON_NATIONAL(MEW),
+ EC_POKEMON_NATIONAL(MEWTWO),
EC_MOVE2(MIRROR_COAT),
EC_MOVE2(FUTURE_SIGHT),
EC_WORD_SEES,
EC_MOVE2(MILK_DRINK),
- EC_POKEMON2(MILTANK),
+ EC_POKEMON_NATIONAL(MILTANK),
EC_POKEMON(MILOTIC),
EC_WORD_WE,
EC_WORD_BEEN,
@@ -2292,13 +2294,13 @@ const u16 gEasyChatWordsByLetter_UnusedJapaneseMi[] = {
const u16 gEasyChatWordsByLetter_UnusedJapaneseMu[] = {
EC_WORD_MOOD,
- EC_POKEMON2(MISDREAVUS),
+ EC_POKEMON_NATIONAL(MISDREAVUS),
EC_WORD_OLDEN,
EC_WORD_ARRGH,
EC_WORD_BUG,
EC_WORD_SWARM,
EC_WORD_RATHER,
- EC_POKEMON2(SMOOCHUM),
+ EC_POKEMON_NATIONAL(SMOOCHUM),
EC_WORD_INVINCIBLE,
EC_WORD_HEART,
EC_WORD_MUFUFU,
@@ -2311,23 +2313,23 @@ const u16 gEasyChatWordsByLetter_UnusedJapaneseMe[] = {
EC_MOVE2(MEGA_DRAIN),
EC_MOVE2(MEGA_KICK),
EC_MOVE2(MEGA_PUNCH),
- EC_POKEMON2(MEGANIUM),
+ EC_POKEMON_NATIONAL(MEGANIUM),
EC_MOVE2(MEGAHORN),
EC_WORD_SEEK,
EC_MOVE2(HIDDEN_POWER),
EC_WORD_RARE,
EC_POKEMON(METAGROSS),
- EC_POKEMON2(DITTO),
+ EC_POKEMON_NATIONAL(DITTO),
EC_MOVE2(METAL_CLAW),
EC_POKEMON(METANG),
EC_WORD_DESTROYED,
EC_WORD_MESSAGE,
EC_WORD_AWFULLY,
- -1, 2, // Doubled pokemon species name
- EC_POKEMON2(TENTACOOL),
+ DOUBLE_SPECIES_NAME
+ EC_POKEMON_NATIONAL(TENTACOOL),
EC_POKEMON(TENTACOOL),
EC_WORD_FIERY,
- EC_POKEMON2(MAREEP),
+ EC_POKEMON_NATIONAL(MAREEP),
EC_MOVE2(ATTRACT),
EC_WORD_CUTE_CHARM,
EC_WORD_IMMUNITY,
@@ -2340,7 +2342,7 @@ const u16 gEasyChatWordsByLetter_UnusedJapaneseMo[] = {
EC_WORD_MODE,
EC_WORD_OLD,
EC_WORD_THURSDAY,
- EC_POKEMON2(FLAAFFY),
+ EC_POKEMON_NATIONAL(FLAAFFY),
EC_WORD_LISTENING,
EC_WORD_OWN,
EC_WORD_MORE,
@@ -2351,9 +2353,9 @@ const u16 gEasyChatWordsByLetter_UnusedJapaneseMo[] = {
EC_WORD_PATTERN,
EC_WORD_FLASH_FIRE,
EC_WORD_RECEIVED,
- EC_POKEMON2(VENOMOTH),
+ EC_POKEMON_NATIONAL(VENOMOTH),
EC_WORD_DOESN_T,
- EC_POKEMON2(TANGELA),
+ EC_POKEMON_NATIONAL(TANGELA),
};
const u16 gEasyChatWordsByLetter_UnusedJapaneseYa[] = {
@@ -2368,19 +2370,19 @@ const u16 gEasyChatWordsByLetter_UnusedJapaneseYa[] = {
EC_WORD_FINALLY,
EC_WORD_ANY,
EC_WORD_YAHOO,
- EC_POKEMON2(SLOWKING),
- EC_POKEMON2(SLOWBRO),
+ EC_POKEMON_NATIONAL(SLOWKING),
+ EC_POKEMON_NATIONAL(SLOWBRO),
EC_MOVE2(LEECH_SEED),
- EC_POKEMON2(SLOWPOKE),
+ EC_POKEMON_NATIONAL(SLOWPOKE),
EC_WORD_DANGER,
- EC_POKEMON2(MURKROW),
+ EC_POKEMON_NATIONAL(MURKROW),
EC_POKEMON(SABLEYE),
EC_WORD_DEFEATED,
EC_WORD_BEAT,
EC_WORD_VITAL_SPIRIT,
EC_POKEMON(VIGOROTH),
EC_WORD_YOUNG,
- EC_POKEMON2(YANMA),
+ EC_POKEMON_NATIONAL(YANMA),
};
const u16 gEasyChatWordsByLetter_UnusedJapaneseYu[] = {
@@ -2393,8 +2395,8 @@ const u16 gEasyChatWordsByLetter_UnusedJapaneseYu[] = {
EC_WORD_ALLOW,
EC_WORD_FORGET,
EC_POKEMON(CRADILY),
- -1, 2, // Doubled pokemon species name
- EC_POKEMON2(KADABRA),
+ DOUBLE_SPECIES_NAME
+ EC_POKEMON_NATIONAL(KADABRA),
EC_POKEMON(KADABRA),
};
@@ -2406,7 +2408,7 @@ const u16 gEasyChatWordsByLetter_UnusedJapaneseYo[] = {
EC_WORD_KINDERGARTEN,
EC_WORD_CHLOROPHYLL,
EC_WORD_AFTER,
- EC_POKEMON2(LARVITAR),
+ EC_POKEMON_NATIONAL(LARVITAR),
EC_WORD_OH_KAY,
EC_WORD_BEFORE,
EC_WORD_GREAT,
@@ -2422,7 +2424,7 @@ const u16 gEasyChatWordsByLetter_UnusedJapaneseYo[] = {
EC_WORD_EASY,
EC_WORD_INSTEAD,
EC_WORD_NIGHT,
- EC_POKEMON2(NOCTOWL),
+ EC_POKEMON_NATIONAL(NOCTOWL),
EC_WORD_COUNT_ON,
EC_WORD_WEAK,
EC_WORD_TOO_WEAK,
@@ -2430,10 +2432,10 @@ const u16 gEasyChatWordsByLetter_UnusedJapaneseYo[] = {
};
const u16 gEasyChatWordsByLetter_UnusedJapaneseRa[] = {
- EC_POKEMON2(RAIKOU),
+ EC_POKEMON_NATIONAL(RAIKOU),
EC_WORD_WEEK,
- -1, 2, // Doubled pokemon species name
- EC_POKEMON2(RAICHU),
+ DOUBLE_SPECIES_NAME
+ EC_POKEMON_NATIONAL(RAICHU),
EC_POKEMON(RAICHU),
EC_WORD_RIVAL,
EC_WORD_LIFE,
@@ -2445,31 +2447,31 @@ const u16 gEasyChatWordsByLetter_UnusedJapaneseRa[] = {
EC_WORD_SEEMS,
EC_WORD_RADIO,
EC_MOVE2(LUSTER_PURGE),
- EC_POKEMON2(CHANSEY),
- EC_POKEMON2(RATICATE),
+ EC_POKEMON_NATIONAL(CHANSEY),
+ EC_POKEMON_NATIONAL(RATICATE),
EC_POKEMON(LATIAS),
EC_POKEMON(LATIOS),
EC_POKEMON(LUVDISC),
- EC_POKEMON2(LAPRAS),
+ EC_POKEMON_NATIONAL(LAPRAS),
EC_WORD_LOVEY_DOVEY,
- -1, 2, // Doubled pokemon species name
- EC_POKEMON2(VILEPLUME),
+ DOUBLE_SPECIES_NAME
+ EC_POKEMON_NATIONAL(VILEPLUME),
EC_POKEMON(VILEPLUME),
EC_WORD_LALALA,
EC_POKEMON(RALTS),
EC_WORD_FORGETS,
EC_WORD_APPEARS,
EC_WORD_RANK,
- -1, 2, // Doubled pokemon species name
- EC_POKEMON2(LANTURN),
+ DOUBLE_SPECIES_NAME
+ EC_POKEMON_NATIONAL(LANTURN),
EC_POKEMON(LANTURN),
};
const u16 gEasyChatWordsByLetter_UnusedJapaneseRi[] = {
EC_WORD_LEADER,
EC_MOVE2(LEAF_BLADE),
- EC_POKEMON2(CHARMELEON),
- EC_POKEMON2(CHARIZARD),
+ EC_POKEMON_NATIONAL(CHARMELEON),
+ EC_POKEMON_NATIONAL(CHARIZARD),
EC_MOVE2(RECYCLE),
EC_MOVE2(REFLECT),
EC_MOVE2(REFRESH),
@@ -2481,15 +2483,15 @@ const u16 gEasyChatWordsByLetter_UnusedJapaneseRi[] = {
EC_MOVE2(DRAGON_DANCE),
EC_WORD_VACATION,
EC_POKEMON(LILEEP),
- EC_POKEMON2(URSARING),
+ EC_POKEMON_NATIONAL(URSARING),
EC_WORD_SHIELD_DUST,
};
const u16 gEasyChatWordsByLetter_UnusedJapaneseRu[] = {
- EC_POKEMON2(JYNX),
+ EC_POKEMON_NATIONAL(JYNX),
EC_WORD_ROOM,
EC_WORD_RULE,
- EC_POKEMON2(LUGIA),
+ EC_POKEMON_NATIONAL(LUGIA),
EC_WORD_LOOK,
EC_POKEMON(LUNATONE),
EC_WORD_RUBY,
@@ -2500,8 +2502,8 @@ const u16 gEasyChatWordsByLetter_UnusedJapaneseRu[] = {
};
const u16 gEasyChatWordsByLetter_UnusedJapaneseRe[] = {
- -1, 2, // Doubled pokemon species name
- EC_POKEMON2(MAGNETON),
+ DOUBLE_SPECIES_NAME
+ EC_POKEMON_NATIONAL(MAGNETON),
EC_POKEMON(MAGNETON),
EC_MOVE2(ICE_PUNCH),
EC_MOVE2(ICE_BEAM),
@@ -2510,8 +2512,8 @@ const u16 gEasyChatWordsByLetter_UnusedJapaneseRe[] = {
EC_POKEMON(REGIROCK),
EC_POKEMON(RAYQUAZA),
EC_WORD_UGLY,
- EC_POKEMON2(LEDIAN),
- EC_POKEMON2(LEDYBA),
+ EC_POKEMON_NATIONAL(LEDIAN),
+ EC_POKEMON_NATIONAL(LEDYBA),
EC_WORD_FANTASTIC,
EC_WORD_LEVEL,
EC_MOVE2(FURY_CUTTER),
@@ -2521,8 +2523,8 @@ const u16 gEasyChatWordsByLetter_UnusedJapaneseRe[] = {
const u16 gEasyChatWordsByLetter_UnusedJapaneseRo[] = {
EC_MOVE2(SKULL_BASH),
- -1, 2, // Doubled pokemon species name
- EC_POKEMON2(VULPIX),
+ DOUBLE_SPECIES_NAME
+ EC_POKEMON_NATIONAL(VULPIX),
EC_POKEMON(VULPIX),
EC_POKEMON(ROSELIA),
EC_MOVE2(LOCK_ON),
@@ -2553,198 +2555,198 @@ const u16 gEasyChatWordsByLetter_UnusedJapaneseWa[] = {
EC_WORD_HERS,
EC_WORD_SHE_IS,
EC_WORD_SOME,
- EC_POKEMON2(JUMPLUFF),
+ EC_POKEMON_NATIONAL(JUMPLUFF),
EC_MOVE2(COTTON_SPORE),
EC_WORD_GWAH,
- EC_POKEMON2(TOTODILE),
+ EC_POKEMON_NATIONAL(TOTODILE),
EC_WORD_WAHAHAHA,
EC_WORD_ANYWHERE,
EC_MOVE2(STRUGGLE),
EC_WORD_BADLY,
- -1, 2, // Doubled pokemon species name
- EC_POKEMON2(MACHOP),
+ DOUBLE_SPECIES_NAME
+ EC_POKEMON_NATIONAL(MACHOP),
EC_POKEMON(MACHOP),
};
-const struct EasyChatWordsByLetter gEasyChatWordsByLetterPointers[] = {
+const struct EasyChatWordsByLetter gEasyChatWordsByLetterPointers[EC_NUM_ALPHABET_GROUPS + 18] = { // 18 unused JP groups
{
.words = gEasyChatWordsByLetter_Others,
- .numWords = 10,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_Others),
},
{
.words = gEasyChatWordsByLetter_A,
- .numWords = 106,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_A),
},
{
.words = gEasyChatWordsByLetter_B,
- .numWords = 86,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_B),
},
{
.words = gEasyChatWordsByLetter_C,
- .numWords = 119,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_C),
},
{
.words = gEasyChatWordsByLetter_D,
- .numWords = 94,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_D),
},
{
.words = gEasyChatWordsByLetter_E,
- .numWords = 59,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_E),
},
{
.words = gEasyChatWordsByLetter_F,
- .numWords = 80,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_F),
},
{
.words = gEasyChatWordsByLetter_G,
- .numWords = 98,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_G),
},
{
.words = gEasyChatWordsByLetter_H,
- .numWords = 101,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_H),
},
{
.words = gEasyChatWordsByLetter_I,
- .numWords = 48,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_I),
},
{
.words = gEasyChatWordsByLetter_J,
- .numWords = 13,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_J),
},
{
.words = gEasyChatWordsByLetter_K,
- .numWords = 33,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_K),
},
{
.words = gEasyChatWordsByLetter_L,
- .numWords = 82,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_L),
},
{
.words = gEasyChatWordsByLetter_M,
- .numWords = 142,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_M),
},
{
.words = gEasyChatWordsByLetter_N,
- .numWords = 54,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_N),
},
{
.words = gEasyChatWordsByLetter_O,
- .numWords = 44,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_O),
},
{
.words = gEasyChatWordsByLetter_P,
- .numWords = 102,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_P),
},
{
.words = gEasyChatWordsByLetter_Q,
- .numWords = 6,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_Q),
},
{
.words = gEasyChatWordsByLetter_R,
- .numWords = 80,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_R),
},
{
.words = gEasyChatWordsByLetter_S,
- .numWords = 262,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_S),
},
{
.words = gEasyChatWordsByLetter_T,
- .numWords = 133,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_T),
},
{
.words = gEasyChatWordsByLetter_U,
- .numWords = 24,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_U),
},
{
.words = gEasyChatWordsByLetter_V,
- .numWords = 33,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_V),
},
{
.words = gEasyChatWordsByLetter_W,
- .numWords = 111,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_W),
},
{
.words = gEasyChatWordsByLetter_X,
- .numWords = 4,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_X),
},
{
.words = gEasyChatWordsByLetter_Y,
- .numWords = 19,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_Y),
},
{
.words = gEasyChatWordsByLetter_Z,
- .numWords = 8,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_Z),
},
{
.words = gEasyChatWordsByLetter_UnusedJapaneseHi,
- .numWords = 55,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_UnusedJapaneseHi),
},
{
.words = gEasyChatWordsByLetter_UnusedJapaneseFu,
- .numWords = 71,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_UnusedJapaneseFu),
},
{
.words = gEasyChatWordsByLetter_UnusedJapaneseHe,
- .numWords = 32,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_UnusedJapaneseHe),
},
{
.words = gEasyChatWordsByLetter_UnusedJapaneseHo,
- .numWords = 55,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_UnusedJapaneseHo),
},
{
.words = gEasyChatWordsByLetter_UnusedJapaneseMa,
- .numWords = 74,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_UnusedJapaneseMa),
},
{
.words = gEasyChatWordsByLetter_UnusedJapaneseMi,
- .numWords = 37,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_UnusedJapaneseMi),
},
{
.words = gEasyChatWordsByLetter_UnusedJapaneseMu,
- .numWords = 12,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_UnusedJapaneseMu),
},
{
.words = gEasyChatWordsByLetter_UnusedJapaneseMe,
- .numWords = 26,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_UnusedJapaneseMe),
},
{
.words = gEasyChatWordsByLetter_UnusedJapaneseMo,
- .numWords = 20,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_UnusedJapaneseMo),
},
{
.words = gEasyChatWordsByLetter_UnusedJapaneseYa,
- .numWords = 24,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_UnusedJapaneseYa),
},
{
.words = gEasyChatWordsByLetter_UnusedJapaneseYu,
- .numWords = 13,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_UnusedJapaneseYu),
},
{
.words = gEasyChatWordsByLetter_UnusedJapaneseYo,
- .numWords = 28,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_UnusedJapaneseYo),
},
{
.words = gEasyChatWordsByLetter_UnusedJapaneseRa,
- .numWords = 36,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_UnusedJapaneseRa),
},
{
.words = gEasyChatWordsByLetter_UnusedJapaneseRi,
- .numWords = 17,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_UnusedJapaneseRi),
},
{
.words = gEasyChatWordsByLetter_UnusedJapaneseRu,
- .numWords = 11,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_UnusedJapaneseRu),
},
{
.words = gEasyChatWordsByLetter_UnusedJapaneseRe,
- .numWords = 18,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_UnusedJapaneseRe),
},
{
.words = gEasyChatWordsByLetter_UnusedJapaneseRo,
- .numWords = 10,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_UnusedJapaneseRo),
},
{
.words = gEasyChatWordsByLetter_UnusedJapaneseWa,
- .numWords = 33,
+ .numWords = ARRAY_COUNT(gEasyChatWordsByLetter_UnusedJapaneseWa),
},
};
diff --git a/src/data/lilycove_lady.h b/src/data/lilycove_lady.h
index 37bae7e95..818a5fd5f 100644
--- a/src/data/lilycove_lady.h
+++ b/src/data/lilycove_lady.h
@@ -53,7 +53,7 @@ static const u16 sQuizLadyQuestion3[] =
EC_WORD_POKEMON,
EC_WORD_EVOLVE,
EC_WORD_QUES,
- 0xFFFF,
+ EC_EMPTY_WORD,
EC_WORD_LEVEL,
EC_WORD_INSOMNIA,
EC_WORD_CUTE_CHARM
@@ -92,7 +92,7 @@ static const u16 sQuizLadyQuestion6[] =
EC_WORD_STOP,
EC_MOVE2(CONFUSION),
EC_WORD_QUES,
- 0xFFFF,
+ EC_EMPTY_WORD,
EC_WORD_ILLUMINATE,
EC_WORD_OWN_TEMPO,
EC_WORD_SWIFT_SWIM
@@ -118,7 +118,7 @@ static const u16 sQuizLadyQuestion8[] =
EC_MOVE2(BLOCK),
EC_WORD_ESCAPE,
EC_WORD_QUES,
- 0xFFFF,
+ EC_EMPTY_WORD,
EC_WORD_RUN_AWAY,
EC_WORD_SHADOW_TAG,
EC_WORD_WONDER_GUARD
@@ -131,7 +131,7 @@ static const u16 sQuizLadyQuestion9[] =
EC_WORD_STOP,
EC_WORD_POISON,
EC_WORD_QUES,
- 0xFFFF,
+ EC_EMPTY_WORD,
EC_WORD_GUTS,
EC_WORD_IMMUNITY,
EC_WORD_SHED_SKIN
@@ -144,7 +144,7 @@ static const u16 sQuizLadyQuestion10[] =
EC_WORD_WITH,
EC_WORD_CENTER,
EC_WORD_QUES,
- 0xFFFF,
+ EC_EMPTY_WORD,
EC_WORD_POKEDEX,
EC_WORD_POKEMON,
EC_WORD_POKENAV
@@ -157,7 +157,7 @@ static const u16 sQuizLadyQuestion11[] =
EC_WORD_YOUR,
EC_WORD_POKEMON,
EC_WORD_QUES,
- 0xFFFF,
+ EC_EMPTY_WORD,
EC_WORD_PC,
EC_WORD_DEPT_STORE,
EC_WORD_TELEVISION
@@ -199,7 +199,7 @@ static const u16 sQuizLadyQuestion14[] =
EC_WORD_QUES,
EC_WORD_ICE,
EC_WORD_GROUND,
- 0xFFFF
+ EC_EMPTY_WORD
};
static const u16 sQuizLadyQuestion15[] =
@@ -212,7 +212,7 @@ static const u16 sQuizLadyQuestion15[] =
EC_WORD_QUES,
EC_WORD_PSYCHIC,
EC_WORD_FIGHTING,
- 0xFFFF
+ EC_EMPTY_WORD
};
static const u16 sQuizLadyQuestion16[] =
@@ -225,7 +225,7 @@ static const u16 sQuizLadyQuestion16[] =
EC_WORD_QUES,
EC_WORD_NORMAL,
EC_WORD_DARK,
- 0xFFFF
+ EC_EMPTY_WORD
};
static const u16 *const sQuizLadyQuizQuestions[] =
diff --git a/src/data/trade.h b/src/data/trade.h
index b9350863b..7001b6ce5 100644
--- a/src/data/trade.h
+++ b/src/data/trade.h
@@ -1070,7 +1070,7 @@ static const u16 sIngameTradeMail[][MAIL_WORDS_COUNT + 1] =
EC_WORD_THANK_YOU,
EC_WORD_FOR,
EC_POKEMON(SKITTY),
- EC_POKEMON2(MEOWTH),
+ EC_POKEMON_NATIONAL(MEOWTH),
EC_WORD_CRIES,
EC_WORD_IN,
EC_WORD_A,
diff --git a/src/dewford_trend.c b/src/dewford_trend.c
index 5c7e50f16..c60797f86 100644
--- a/src/dewford_trend.c
+++ b/src/dewford_trend.c
@@ -90,7 +90,7 @@ void UpdateDewfordTrendPerDay(u16 a)
}
-bool8 sub_81226D8(u16 *a)
+bool8 IsPhraseTrendy(u16 *a)
{
struct EasyChatPair s = {0};
u16 i;
diff --git a/src/easy_chat.c b/src/easy_chat.c
index fa3d4472a..16b302bb8 100644
--- a/src/easy_chat.c
+++ b/src/easy_chat.c
@@ -34,228 +34,382 @@
#include "constants/songs.h"
#include "constants/rgb.h"
-#define EZCHAT_TASK_STATE 0
-#define EZCHAT_TASK_TYPE 1
-#define EZCHAT_TASK_WORDS 2
-#define EZCHAT_TASK_MAINCALLBACK 4
-#define EZCHAT_TASK_UNK06 6
-#define EZCHAT_TASK_SIZE 7
-
static EWRAM_DATA struct EasyChatScreen *sEasyChatScreen = NULL;
-static EWRAM_DATA struct Unk203A11C *sUnknown_0203A11C = NULL;
-static EWRAM_DATA struct Unk203A120 *sUnknown_0203A120 = NULL;
-
-static void sub_811A2C0(u8);
-static void MainCallback_EasyChatScreen(void);
-static bool8 sub_811A428(u8);
-static void sub_811A2FC(u8);
-static void sub_811A4D0(MainCallback);
-static bool32 sub_811A88C(u16);
-static void sub_811A8A4(u16);
-static bool8 EasyChat_AllocateResources(u8, u16 *, u8);
-static void EasyChat_FreeResources(void);
-static u16 sub_811AAAC(void);
-static u16 sub_811AB68(void);
-static u16 sub_811ACDC(void);
-static u16 sub_811AE44(void);
-static u16 sub_811AF00(void);
-static u16 sub_811AF8C(void);
-static u16 sub_811AFEC(void);
-static u16 sub_811B040(void);
-static u16 sub_811B08C(void);
-static u16 sub_811B0BC(void);
-static u16 sub_811B0E8(void);
-static u16 sub_811B0F8(void);
-static u16 sub_811B150(void);
-static u16 sub_811B1B4(void);
+static EWRAM_DATA struct EasyChatScreenControl *sScreenControl = NULL;
+static EWRAM_DATA struct EasyChatScreenWordData *sWordData = NULL;
+
+static void Task_InitEasyChatScreen(u8);
+static void CB2_EasyChatScreen(void);
+static bool8 InitEasyChatScreen(u8);
+static void Task_EasyChatScreen(u8);
+static void ExitEasyChatScreen(MainCallback);
+static bool32 IsFuncIdForQuizLadyScreen(u16);
+static void EnterQuizLadyScreen(u16);
+static bool8 InitEasyChatScreenStruct(u8, u16 *, u8);
+static void FreeEasyChatScreenStruct(void);
+static u16 HandleEasyChatInput(void);
+static u16 HandleEasyChatInput_Phrase(void);
+static u16 HandleEasyChatInput_MainScreenButtons(void);
+static u16 HandleEasyChatInput_Keyboard(void);
+static u16 HandleEasyChatInput_WordSelect(void);
+static u16 HandleEasyChatInput_ExitPrompt(void);
+static u16 HandleEasyChatInput_ConfirmWordsYesNo(void);
+static u16 HandleEasyChatInput_DeleteAllYesNo(void);
+static u16 HandleEasyChatInput_QuizQuestion(void);
+static u16 HandleEasyChatInput_WaitForMsg(void);
+static u16 HandleEasyChatInput_StartConfirmLyrics(void);
+static u16 HandleEasyChatInput_ConfirmLyricsYesNo(void);
+static u16 StartConfirmExitPrompt(void);
+static u16 TryConfirmWords(void);
static u8 GetEasyChatScreenFrameId(void);
static u8 GetEachChatScreenTemplateId(u8);
-static void sub_811BDF0(u8 *);
-static void sub_811BF78(void);
-static bool8 sub_811BF8C(void);
-static bool8 sub_811BFA4(void);
-static void sub_811C13C(void);
-static void sub_811C158(u16);
-static bool8 sub_811C170(void);
-static bool8 sub_811F28C(void);
-static void sub_811F2B8(void);
-static u8 sub_811F3AC(void);
+static void GetQuizTitle(u8 *);
+static void ClearUnusedField(void);
+static bool8 InitEasyChatScreenControl(void);
+static bool8 LoadEasyChatScreen(void);
+static void FreeEasyChatScreenControl(void);
+static void StartEasyChatFunction(u16);
+static bool8 RunEasyChatFunction(void);
+static bool8 InitEasyChatScreenWordData(void);
+static void FreeEasyChatScreenWordData(void);
+static u8 GetNumUnlockedEasyChatGroups(void);
static int FooterHasFourOptions(void);
-static int sub_811B184(void);
-static int sub_811B264(void);
-static int sub_811B32C(void);
-static int sub_811B2B0(void);
-static int sub_811B33C(void);
-static int sub_811B368(void);
-static u16 sub_811B528(int);
-static u16 sub_811B794(u32);
-static int sub_811B394(void);
-static u8 sub_811B2A4(void);
-static void sub_811B3E4(void);
-static void sub_811BE9C(void);
-static int sub_811B4EC(void);
-static void sub_811B418(void);
-static void sub_811B454(void);
-static int sub_811BD64(void);
-static int sub_811BDB0(void);
-static int sub_811BD2C(void);
-static int sub_811BCF4(void);
-static u16 sub_811B8E8(void);
-static u8 sub_811F3B8(u8);
-static void sub_811F548(int, u16);
-static int sub_811B908(void);
-static u16 sub_811F5B0(void);
-static void sub_811B488(u16);
-static u16 sub_811B940(void);
-static u16 sub_811F578(u16);
-static int sub_811BF88(int);
-static u16 sub_811B8C8(void);
-static int sub_811B568(u32);
-static int sub_811B634(u32);
-static int sub_811B6C4(u32);
-static void sub_811B978(void);
-static void sub_811B744(void);
-static u8 sub_811B9C8(void);
-static void sub_811B768(void);
-static u8 sub_811B960(u8);
-static void sub_811B9A0(void);
-static u8 sub_811BA1C(void);
+static int DoDeleteAllButton(void);
+static int DoQuizButton(void);
+static int ExitKeyboardToMainScreen(void);
+static int SelectKeyboardGroup(void);
+static int StartSwitchKeyboardMode(void);
+static int DeleteSelectedWord(void);
+static u16 MoveKeyboardCursor(int);
+static u16 MoveWordSelectCursor(u32);
+static int SelectNewWord(void);
+static u8 GetEasyChatBackupState(void);
+static void SaveCurrentPhrase(void);
+static void SetSpecialEasyChatResult(void);
+static bool32 GetEasyChatCompleted(void);
+static void ResetCurrentPhrase(void);
+static void ResetCurrentPhraseToSaved(void);
+static int IsQuizQuestionEmpty(void);
+static int IsQuizAnswerEmpty(void);
+static bool32 IsCurrentPhraseFull(void);
+static bool32 IsCurrentPhraseEmpty(void);
+static u16 GetSelectedGroupIndex(void);
+static u8 GetUnlockedEasyChatGroupId(u8);
+static void SetSelectedWordGroup(bool32, u16);
+static int GetSelectedAlphabetGroupId(void);
+static u16 GetNumWordsInSelectedGroup(void);
+static void SetSelectedWord(u16);
+static u16 GetSelectedWordIndex(void);
+static u16 GetWordFromSelectedGroup(u16);
+static bool32 DummyWordCheck(int);
+static u16 GetWordIndexToReplace(void);
+static int MoveKeyboardCursor_GroupNames(u32);
+static int MoveKeyboardCursor_Alphabet(u32);
+static int MoveKeyboardCursor_ButtonWindow(u32);
+static void ReduceToValidKeyboardColumn(void);
+static void SetKeyboardCursorInButtonWindow(void);
+static bool8 IsSelectedKeyboardIndexInvalid(void);
+static void SetKeyboardCursorToLastColumn(void);
+static u8 GetLastAlphabetColumn(u8);
+static void ReduceToValidWordSelectColumn(void);
+static bool8 IsSelectedWordIndexInvalid(void);
static int DidPlayerInputMysteryGiftPhrase(void);
static u16 DidPlayerInputABerryMasterWifePhrase(void);
-static bool8 sub_811CE94(void);
-static void sub_811CF64(void);
-static void sub_811CF04(void);
-static void sub_811D60C(void);
-static void sub_811D424(u16 *);
-static void sub_811D230(void);
-static void sub_811E948(void);
-static void sub_811CFCC(void);
-static void sub_811D0BC(void);
-static void sub_811D2C8(void);
-static void sub_811D684(void);
-static void sub_811DE90(void);
-static void sub_811DEC4(void);
-static void sub_811DF28(struct Sprite *);
-static void sub_811DE5C(u8, u8, u8, u8);
-static void sub_811E5D4(void);
-static void sub_811E720(void);
-static void sub_811E828(void);
-static bool8 sub_811C2D4(void);
-static bool8 sub_811C30C(void);
-static bool8 sub_811C3E4(void);
-static bool8 sub_811C48C(void);
-static bool8 sub_811C404(void);
-static bool8 sub_811C448(void);
-static bool8 sub_811C4D0(void);
-static bool8 sub_811C518(void);
-static bool8 sub_811C554(void);
-static bool8 sub_811C620(void);
-static bool8 sub_811C830(void);
-static bool8 sub_811C8F0(void);
-static bool8 sub_811C99C(void);
-static bool8 sub_811CA5C(void);
-static bool8 sub_811C780(void);
-static bool8 sub_811C78C(void);
-static bool8 sub_811C7D4(void);
-static bool8 sub_811CB18(void);
-static bool8 sub_811CB98(void);
-static bool8 sub_811CB24(void);
-static bool8 sub_811CC90(void);
-static bool8 sub_811CC08(void);
-static bool8 sub_811C6C0(void);
-static bool8 sub_811CD14(void);
-static bool8 sub_811CD54(void);
-static bool8 sub_811CD94(void);
-static bool8 sub_811CDD4(void);
-static bool8 sub_811CE14(void);
-static bool8 sub_811CE54(void);
-static void sub_811DF60(u8, u8);
+static bool8 InitEasyChatScreenControl_(void);
+static void LoadEasyChatPalettes(void);
+static void InitEasyChatBgs(void);
+static void AdjustBgTilemapForFooter(void);
+static void BufferFrameTilemap(u16 *);
+static void AddPhraseWindow(void);
+static void AddMainScreenButtonWindow(void);
+static void PrintTitle(void);
+static void PrintInitialInstructions(void);
+static void PrintCurrentPhrase(void);
+static void DrawLowerWindow(void);
+static void LoadEasyChatGfx(void);
+static void CreateMainCursorSprite(void);
+static void SpriteCB_Cursor(struct Sprite *);
+static void SetWindowDimensions(u8, u8, u8, u8);
+static void CreateScrollIndicatorSprites(void);
+static void CreateStartSelectButtonSprites(void);
+static void TryAddInterviewObjectEvents(void);
+static bool8 ReprintPhrase(void);
+static bool8 UpdateMainCursor(void);
+static bool8 UpdateMainCursorOnButtons(void);
+static bool8 ShowConfirmDeleteAllPrompt(void);
+static bool8 ShowConfirmExitPrompt(void);
+static bool8 ShowConfirmPrompt(void);
+static bool8 ClosePrompt(void);
+static bool8 ClosePromptAfterDeleteAll(void);
+static bool8 OpenKeyboard(void);
+static bool8 CloseKeyboard(void);
+static bool8 OpenWordSelect(void);
+static bool8 CloseWordSelect(void);
+static bool8 ShowConfirmLyricsPrompt(void);
+static bool8 ReturnToKeyboard(void);
+static bool8 UpdateKeyboardCursor(void);
+static bool8 GroupNamesScrollDown(void);
+static bool8 GroupNamesScrollUp(void);
+static bool8 UpdateWordSelectCursor(void);
+static bool8 WordSelectScrollUp(void);
+static bool8 WordSelectScrollDown(void);
+static bool8 WordSelectPageScrollUp(void);
+static bool8 WordSelectPageScrollDown(void);
+static bool8 SwitchKeyboardMode(void);
+static bool8 ShowCreateQuizMsg(void);
+static bool8 ShowSelectAnswerMsg(void);
+static bool8 ShowSongTooShortMsg(void);
+static bool8 ShowCantDeleteLyricsMsg(void);
+static bool8 ShowCombineTwoWordsMsg(void);
+static bool8 ShowCantExitMsg(void);
+static void SetMainCursorPos(u8, u8);
static int GetFooterOptionXOffset(int);
-static void sub_811DF90(void);
-static void sub_811D104(u8);
-static void sub_811D214(u8);
-static void sub_811DFB0(void);
-static void sub_811D6D4(void);
-static void sub_811D9CC(int);
-static void sub_811E3AC(void);
-static bool8 sub_811E418(void);
-static void sub_811DFC8(void);
-static void sub_811E6E0(int);
-static bool8 sub_811DAA4(void);
-static void sub_811E64C(void);
-static void sub_811E050(void);
-static void sub_811E4AC(void);
-static void sub_811E6B0(void);
-static void sub_811E55C(void);
-static bool8 sub_811E4D0(void);
-static bool8 sub_811E5B8(void);
-static void sub_811E578(void);
-static void sub_811E088(void);
-static void sub_811DDAC(s16, u8);
-static bool8 sub_811DE10(void);
-static void sub_811D9B4(void);
-static void sub_811D698(u32);
-static void sub_811E288(void);
-static void sub_811E794(void);
-static void sub_811E380(void);
-static void sub_811E7F8(void);
-static void sub_811E30C(void);
-static void sub_811D7A4(void);
-static void sub_811D7C8(void);
-static int sub_811DE48(void);
-static void sub_811D7EC(void);
-static void sub_811D830(void);
-static void sub_811D058(u8, u8, const u8 *, u8, u8, u8, u8, u8, u8);
-static void sub_811DD84(void);
-static void sub_811D6F4(void);
-static void PrintEasyChatKeyboardText(void);
-static void sub_811D794(void);
+static void StopMainCursorAnim(void);
+static void PrintEasyChatStdMessage(u8);
+static void CreateEasyChatYesNoMenu(u8);
+static void StartMainCursorAnim(void);
+static void PrintKeyboardText(void);
+static void InitLowerWindowAnim(int);
+static void CreateSideWindowSprites(void);
+static bool8 ShowSideWindow(void);
+static void CreateRectangleCursorSprites(void);
+static void SetScrollIndicatorXPos(bool32);
+static bool8 UpdateLowerWindowAnim(void);
+static void UpdateScrollIndicatorsVisibility(void);
+static void DestroyRectangleCursorSprites(void);
+static void HideModeWindow(void);
+static void HideScrollIndicators(void);
+static void SetModeWindowToTransition(void);
+static bool8 DestroySideWindowSprites(void);
+static bool8 IsModeWindowAnimActive(void);
+static void UpdateModeWindowAnim(void);
+static void UpdateRectangleCursorPos(void);
+static void InitLowerWindowScroll(s16, u8);
+static bool8 UpdateLowerWindowScroll(void);
+static void ClearWordSelectWindow(void);
+static void InitLowerWindowText(u32);
+static void CreateWordSelectCursorSprite(void);
+static void UpdateStartSelectButtonsVisibility(void);
+static void DestroyWordSelectCursorSprite(void);
+static void HideStartSelectButtons(void);
+static void UpdateWordSelectCursorPos(void);
+static void PrintWordSelectNextRowDown(void);
+static void PrintWordSelectNextRowUp(void);
+static int GetLowerWindowScrollOffset(void);
+static void PrintWordSelectRowsPageDown(void);
+static void PrintWordSelectRowsPageUp(void);
+static void PrintEasyChatTextWithColors(u8, u8, const u8 *, u8, u8, u8, u8, u8, u8);
+static void ResetLowerWindowScroll(void);
+static void PrintKeyboardGroupNames(void);
+static void PrintKeyboardAlphabet(void);
+static void PrintInitialWordSelectText(void);
static const u8 *GetEasyChatWordGroupName(u8);
-static void sub_811D864(u8, u8);
-static void sub_811D950(u8, u8);
-static void sub_811DADC(u8);
-static void sub_811DC28(int, int, int, int);
-static void sub_811E0EC(s8, s8);
-static void sub_811E1A4(s8, s8);
-static void sub_811E2DC(struct Sprite *);
-static void sub_811E34C(u8, u8);
+static void PrintWordSelectText(u8, u8);
+static void EraseWordSelectRows(u8, u8);
+static void DrawLowerWindowFrame(u8);
+static void BufferLowerWindowFrame(int, int, int, int);
+static void SetRectangleCursorPos_GroupMode(s8, s8);
+static void SetRectangleCursorPos_AlphabetMode(s8, s8);
+static void SpriteCB_WordSelectCursor(struct Sprite *);
+static void SetWordSelectCursorPos(u8, u8);
static bool8 EasyChatIsNationalPokedexEnabled(void);
static u16 GetRandomUnlockedEasyChatPokemon(void);
-static void sub_811F2D4(void);
-static void sub_811F46C(void);
+static void SetUnlockedEasyChatGroups(void);
+static void SetUnlockedWordsByAlphabet(void);
static u8 *CopyEasyChatWordPadded(u8 *, u16, u16);
-static u8 sub_811F860(u16);
-static u16 sub_811F5C4(u16);
-static u16 sub_811F6B8(u16);
-static bool8 sub_811F764(u16, u8);
-static int sub_811F838(u16);
+static u8 IsEasyChatWordUnlocked(u16);
+static u16 SetSelectedWordGroup_GroupMode(u16);
+static u16 SetSelectedWordGroup_AlphabetMode(u16);
+static bool8 IsEasyChatIndexAndGroupUnlocked(u16, u8);
+static int IsRestrictedWordSpecies(u16);
static void DoQuizAnswerEasyChatScreen(void);
static void DoQuizQuestionEasyChatScreen(void);
static void DoQuizSetAnswerEasyChatScreen(void);
static void DoQuizSetQuestionEasyChatScreen(void);
-struct Unk8597530
-{
- u16 word;
- MainCallback callback;
+#define PALTAG_TRIANGLE_CURSOR 0
+#define PALTAG_RECTANGLE_CURSOR 1
+#define PALTAG_MISC_UI 2
+#define PALTAG_3 3
+
+#define GFXTAG_TRIANGLE_CURSOR 0
+#define GFXTAG_RECTANGLE_CURSOR 1
+#define GFXTAG_SCROLL_INDICATOR 2
+#define GFXTAG_START_SELECT_BUTTONS 3
+#define GFXTAG_MODE_WINDOW 4
+#define GFXTAG_5 5
+#define GFXTAG_BUTTON_WINDOW 6
+
+// State values for sEasyChatScreen->inputState
+// Control which input handler to use in HandleEasyChatInput
+enum {
+ INPUTSTATE_PHRASE,
+ INPUTSTATE_MAIN_SCREEN_BUTTONS,
+ INPUTSTATE_KEYBOARD,
+ INPUTSTATE_WORD_SELECT,
+ INPUTSTATE_EXIT_PROMPT,
+ INPUTSTATE_DELETE_ALL_YES_NO,
+ INPUTSTATE_CONFIRM_WORDS_YES_NO,
+ INPUTSTATE_QUIZ_QUESTION,
+ INPUTSTATE_WAIT_FOR_MSG,
+ INPUTSTATE_START_CONFIRM_LYRICS,
+ INPUTSTATE_CONFIRM_LYRICS_YES_NO,
+};
+
+// Task states for the 'main' task, Task_EasyChatScreen
+enum {
+ MAINSTATE_FADE_IN,
+ MAINSTATE_HANDLE_INPUT,
+ MAINSTATE_RUN_FUNC,
+ MAINSTATE_TO_QUIZ_LADY,
+ MAINSTATE_EXIT,
+ MAINSTATE_WAIT_FADE_IN,
+};
+
+// IDs provided to PrintEasyChatStdMessage to print a standard message
+enum {
+ MSG_INSTRUCTIONS,
+ MSG_CONFIRM_DELETE,
+ MSG_CONFIRM_EXIT,
+ MSG_CONFIRM,
+ MSG_CREATE_QUIZ,
+ MSG_SELECT_ANSWER,
+ MSG_SONG_TOO_SHORT,
+ MSG_CANT_DELETE_LYRICS,
+ MSG_COMBINE_TWO_WORDS,
+ MSG_CANT_QUIT,
+};
+
+// IDs for supplementary Easy Chat functions
+// Returned by the input handler functions, and run
+// in the main task (MAINSTATE_RUN_FUNC)
+enum {
+ ECFUNC_NONE,
+ ECFUNC_REPRINT_PHRASE,
+ ECFUNC_UPDATE_MAIN_CURSOR,
+ ECFUNC_UPDATE_MAIN_CURSOR_ON_BUTTONS,
+ ECFUNC_PROMPT_DELETE_ALL,
+ ECFUNC_PROMPT_EXIT,
+ ECFUNC_PROMPT_CONFIRM,
+ ECFUNC_CLOSE_PROMPT,
+ ECFUNC_CLOSE_PROMPT_AFTER_DELETE,
+ ECFUNC_OPEN_KEYBOARD,
+ ECFUNC_CLOSE_KEYBOARD,
+ ECFUNC_OPEN_WORD_SELECT,
+ ECFUNC_CLOSE_WORD_SELECT,
+ ECFUNC_PROMPT_CONFIRM_LYRICS,
+ ECFUNC_RETURN_TO_KEYBOARD,
+ ECFUNC_UPDATE_KEYBOARD_CURSOR,
+ ECFUNC_GROUP_NAMES_SCROLL_DOWN,
+ ECFUNC_GROUP_NAMES_SCROLL_UP,
+ ECFUNC_UPDATE_WORD_SELECT_CURSOR,
+ ECFUNC_WORD_SELECT_SCROLL_UP,
+ ECFUNC_WORD_SELECT_SCROLL_DOWN,
+ ECFUNC_WORD_SELECT_PAGE_UP,
+ ECFUNC_WORD_SELECT_PAGE_DOWN,
+ ECFUNC_SWITCH_KEYBOARD_MODE,
+ ECFUNC_EXIT,
+ ECFUNC_QUIZ_QUESTION,
+ ECFUNC_QUIZ_ANSWER,
+ ECFUNC_SET_QUIZ_QUESTION,
+ ECFUNC_SET_QUIZ_ANSWER,
+ ECFUNC_MSG_CREATE_QUIZ,
+ ECFUNC_MSG_SELECT_ANSWER,
+ ECFUNC_MSG_SONG_TOO_SHORT,
+ ECFUNC_MSG_CANT_DELETE_LYRICS,
+ ECFUNC_MSG_COMBINE_TWO_WORDS,
+ ECFUNC_MSG_CANT_EXIT,
+};
+
+// IDs for InitLowerWindowText
+enum {
+ TEXT_GROUPS,
+ TEXT_ALPHABET,
+ TEXT_WORD_SELECT,
+};
+
+#define NUM_ALPHABET_ROWS 4
+#define NUM_GROUP_NAME_ROWS 4
+#define NUM_WORD_SELECT_ROWS 4
+#define NUM_BUTTON_ROWS 3
+
+#define NUM_ALPHABET_COLUMNS 7
+#define NUM_GROUP_NAME_COLUMNS 2
+#define NUM_WORD_SELECT_COLUMNS 2
+
+enum {
+ FRAMEID_GENERAL_2x2,
+ FRAMEID_GENERAL_2x3,
+ FRAMEID_MAIL,
+ FRAMEID_COMBINE_TWO_WORDS,
+ FRAMEID_INTERVIEW_SHOW_PERSON,
+ FRAMEID_INTERVIEW,
+ FRAMEID_QUIZ_ANSWER,
+ FRAMEID_QUIZ_QUESTION,
+ FRAMEID_QUIZ_SET_QUESTION,
+};
+
+// IDs for the footer row of buttons on the main screen
+enum {
+ FOOTER_NORMAL,
+ FOOTER_QUIZ,
+ FOOTER_ANSWER,
+ NUM_FOOTER_TYPES
+};
+
+enum {
+ INPUT_RIGHT,
+ INPUT_LEFT,
+ INPUT_UP,
+ INPUT_DOWN,
+ INPUT_START,
+ INPUT_SELECT,
};
-// Lilycove Quiz Lady
-static const struct Unk8597530 sUnknown_08597530[] = {
+// Types of animations for the lower window (keyboard/word select), given to InitLowerWindowAnim
+enum {
+ WINANIM_OPEN_KEYBOARD,
+ WINANIM_CLOSE_KEYBOARD,
+ WINANIM_OPEN_WORD_SELECT,
+ WINANIM_CLOSE_WORD_SELECT,
+ WINANIM_RETURN_TO_KEYBOARD,
+ WINANIM_KEYBOARD_SWITCH_OUT,
+ WINANIM_KEYBOARD_SWITCH_IN,
+};
+
+// Values for text frame tilemap
+#define FRAME_OFFSET_ORANGE 0x1000 // Orange frame, for phrase text
+#define FRAME_OFFSET_GREEN 0x4000 // Green frame, for keyboard/word select
+
+#define FRAME_TILE_TRANSPARENT 0x0
+#define FRAME_TILE_TOP_L_CORNER 0x1
+#define FRAME_TILE_TOP_EDGE 0x2
+#define FRAME_TILE_TOP_R_CORNER 0x3
+#define FRAME_TILE_L_EDGE 0x5
+#define FRAME_TILE_R_EDGE 0x7
+#define FRAME_TILE_BOTTOM_L_CORNER 0x9
+#define FRAME_TILE_BOTTOM_EDGE 0xA
+#define FRAME_TILE_BOTTOM_R_CORNER 0xB
+
+struct
+{
+ u16 funcId;
+ MainCallback callback;
+} static const sQuizLadyEasyChatScreens[] = {
{
- .word = 26,
+ .funcId = ECFUNC_QUIZ_ANSWER,
.callback = DoQuizAnswerEasyChatScreen,
},
{
- .word = 25,
+ .funcId = ECFUNC_QUIZ_QUESTION,
.callback = DoQuizQuestionEasyChatScreen,
},
{
- .word = 28,
+ .funcId = ECFUNC_SET_QUIZ_ANSWER,
.callback = DoQuizSetAnswerEasyChatScreen,
},
{
- .word = 27,
+ .funcId = ECFUNC_SET_QUIZ_QUESTION,
.callback = DoQuizSetQuestionEasyChatScreen,
},
};
@@ -265,7 +419,7 @@ static const struct EasyChatScreenTemplate sEasyChatScreenTemplates[] = {
.type = EASY_CHAT_TYPE_PROFILE,
.numColumns = 2,
.numRows = 2,
- .frameId = 0,
+ .frameId = FRAMEID_GENERAL_2x2,
.fourFooterOptions = FALSE,
.titleText = gText_Profile,
.instructionsText1 = gText_CombineFourWordsOrPhrases,
@@ -277,7 +431,7 @@ static const struct EasyChatScreenTemplate sEasyChatScreenTemplates[] = {
.type = EASY_CHAT_TYPE_BATTLE_START,
.numColumns = 2,
.numRows = 3,
- .frameId = 1,
+ .frameId = FRAMEID_GENERAL_2x3,
.fourFooterOptions = FALSE,
.titleText = gText_AtTheBattlesStart,
.instructionsText1 = gText_CombineSixWordsOrPhrases,
@@ -289,7 +443,7 @@ static const struct EasyChatScreenTemplate sEasyChatScreenTemplates[] = {
.type = EASY_CHAT_TYPE_BATTLE_WON,
.numColumns = 2,
.numRows = 3,
- .frameId = 1,
+ .frameId = FRAMEID_GENERAL_2x3,
.fourFooterOptions = FALSE,
.titleText = gText_UponWinningABattle,
.instructionsText1 = gText_CombineSixWordsOrPhrases,
@@ -301,7 +455,7 @@ static const struct EasyChatScreenTemplate sEasyChatScreenTemplates[] = {
.type = EASY_CHAT_TYPE_BATTLE_LOST,
.numColumns = 2,
.numRows = 3,
- .frameId = 1,
+ .frameId = FRAMEID_GENERAL_2x3,
.fourFooterOptions = FALSE,
.titleText = gText_UponLosingABattle,
.instructionsText1 = gText_CombineSixWordsOrPhrases,
@@ -313,7 +467,7 @@ static const struct EasyChatScreenTemplate sEasyChatScreenTemplates[] = {
.type = EASY_CHAT_TYPE_MAIL,
.numColumns = 2,
.numRows = 5,
- .frameId = 2,
+ .frameId = FRAMEID_MAIL,
.fourFooterOptions = FALSE,
.titleText = NULL,
.instructionsText1 = gText_CombineNineWordsOrPhrases,
@@ -325,7 +479,7 @@ static const struct EasyChatScreenTemplate sEasyChatScreenTemplates[] = {
.type = EASY_CHAT_TYPE_INTERVIEW,
.numColumns = 2,
.numRows = 2,
- .frameId = 5,
+ .frameId = FRAMEID_INTERVIEW,
.fourFooterOptions = FALSE,
.titleText = gText_Interview,
.instructionsText1 = gText_CombineFourWordsOrPhrases,
@@ -337,7 +491,7 @@ static const struct EasyChatScreenTemplate sEasyChatScreenTemplates[] = {
.type = EASY_CHAT_TYPE_BARD_SONG,
.numColumns = 2,
.numRows = 3,
- .frameId = 1,
+ .frameId = FRAMEID_GENERAL_2x3,
.fourFooterOptions = FALSE,
.titleText = gText_TheBardsSong,
.instructionsText1 = gText_ChangeJustOneWordOrPhrase,
@@ -349,7 +503,7 @@ static const struct EasyChatScreenTemplate sEasyChatScreenTemplates[] = {
.type = EASY_CHAT_TYPE_FAN_CLUB,
.numColumns = 1,
.numRows = 1,
- .frameId = 4,
+ .frameId = FRAMEID_INTERVIEW_SHOW_PERSON,
.fourFooterOptions = FALSE,
.titleText = gText_Interview,
.instructionsText1 = gText_FindWordsThatDescribeYour,
@@ -361,7 +515,7 @@ static const struct EasyChatScreenTemplate sEasyChatScreenTemplates[] = {
.type = EASY_CHAT_TYPE_TRENDY_PHRASE,
.numColumns = 2,
.numRows = 1,
- .frameId = 3,
+ .frameId = FRAMEID_COMBINE_TWO_WORDS,
.fourFooterOptions = FALSE,
.titleText = gText_WhatsHipAndHappening,
.instructionsText1 = gText_CombineTwoWordsOrPhrases,
@@ -373,7 +527,7 @@ static const struct EasyChatScreenTemplate sEasyChatScreenTemplates[] = {
.type = EASY_CHAT_TYPE_QUIZ_QUESTION,
.numColumns = 2,
.numRows = 5,
- .frameId = 7,
+ .frameId = FRAMEID_QUIZ_QUESTION,
.fourFooterOptions = TRUE,
.titleText = NULL,
.instructionsText1 = gText_AfterYouHaveReadTheQuiz,
@@ -385,7 +539,7 @@ static const struct EasyChatScreenTemplate sEasyChatScreenTemplates[] = {
.type = EASY_CHAT_TYPE_QUIZ_ANSWER,
.numColumns = 1,
.numRows = 1,
- .frameId = 6,
+ .frameId = FRAMEID_QUIZ_ANSWER,
.fourFooterOptions = TRUE,
.titleText = gText_TheQuizAnswerIs,
.instructionsText1 = gText_OutOfTheListedChoices,
@@ -397,7 +551,7 @@ static const struct EasyChatScreenTemplate sEasyChatScreenTemplates[] = {
.type = EASY_CHAT_TYPE_QUIZ_SET_QUESTION,
.numColumns = 2,
.numRows = 5,
- .frameId = 8,
+ .frameId = FRAMEID_QUIZ_SET_QUESTION,
.fourFooterOptions = TRUE,
.titleText = NULL,
.instructionsText1 = gText_CombineNineWordsOrPhrases,
@@ -409,7 +563,7 @@ static const struct EasyChatScreenTemplate sEasyChatScreenTemplates[] = {
.type = EASY_CHAT_TYPE_QUIZ_SET_ANSWER,
.numColumns = 1,
.numRows = 1,
- .frameId = 6,
+ .frameId = FRAMEID_QUIZ_ANSWER,
.fourFooterOptions = TRUE,
.titleText = gText_TheQuizAnswerIs,
.instructionsText1 = gText_PickAWordOrPhraseAnd,
@@ -421,7 +575,7 @@ static const struct EasyChatScreenTemplate sEasyChatScreenTemplates[] = {
.type = EASY_CHAT_TYPE_BARD_SONG,
.numColumns = 2,
.numRows = 3,
- .frameId = 1,
+ .frameId = FRAMEID_GENERAL_2x3,
.fourFooterOptions = FALSE,
.titleText = gText_TheBardsSong,
.instructionsText1 = gText_ChangeJustOneWordOrPhrase,
@@ -433,7 +587,7 @@ static const struct EasyChatScreenTemplate sEasyChatScreenTemplates[] = {
.type = EASY_CHAT_TYPE_APPRENTICE,
.numColumns = 2,
.numRows = 3,
- .frameId = 1,
+ .frameId = FRAMEID_GENERAL_2x3,
.fourFooterOptions = FALSE,
.titleText = gText_ApprenticesPhrase,
.instructionsText1 = gText_FindWordsWhichFit,
@@ -445,7 +599,7 @@ static const struct EasyChatScreenTemplate sEasyChatScreenTemplates[] = {
.type = EASY_CHAT_TYPE_GOOD_SAYING,
.numColumns = 2,
.numRows = 1,
- .frameId = 3,
+ .frameId = FRAMEID_COMBINE_TWO_WORDS,
.fourFooterOptions = FALSE,
.titleText = gText_GoodSaying,
.instructionsText1 = gText_CombineTwoWordsOrPhrases2,
@@ -457,7 +611,7 @@ static const struct EasyChatScreenTemplate sEasyChatScreenTemplates[] = {
.type = EASY_CHAT_TYPE_GABBY_AND_TY,
.numColumns = 1,
.numRows = 1,
- .frameId = 4,
+ .frameId = FRAMEID_INTERVIEW_SHOW_PERSON,
.fourFooterOptions = FALSE,
.titleText = gText_Interview,
.instructionsText1 = gText_FindWordsThatDescribeYour,
@@ -469,7 +623,7 @@ static const struct EasyChatScreenTemplate sEasyChatScreenTemplates[] = {
.type = EASY_CHAT_TYPE_BATTLE_TOWER_INTERVIEW,
.numColumns = 1,
.numRows = 1,
- .frameId = 4,
+ .frameId = FRAMEID_INTERVIEW_SHOW_PERSON,
.fourFooterOptions = FALSE,
.titleText = gText_Interview,
.instructionsText1 = gText_FindWordsThatDescribeYour,
@@ -481,7 +635,7 @@ static const struct EasyChatScreenTemplate sEasyChatScreenTemplates[] = {
.type = EASY_CHAT_TYPE_CONTEST_INTERVIEW,
.numColumns = 1,
.numRows = 1,
- .frameId = 4,
+ .frameId = FRAMEID_INTERVIEW_SHOW_PERSON,
.fourFooterOptions = FALSE,
.titleText = gText_Interview,
.instructionsText1 = gText_FindWordsThatDescribeYour,
@@ -493,7 +647,7 @@ static const struct EasyChatScreenTemplate sEasyChatScreenTemplates[] = {
.type = EASY_CHAT_TYPE_FAN_QUESTION,
.numColumns = 1,
.numRows = 1,
- .frameId = 4,
+ .frameId = FRAMEID_INTERVIEW_SHOW_PERSON,
.fourFooterOptions = FALSE,
.titleText = gText_FansQuestion,
.instructionsText1 = gText_FindWordsWhichFit,
@@ -505,7 +659,7 @@ static const struct EasyChatScreenTemplate sEasyChatScreenTemplates[] = {
.type = EASY_CHAT_TYPE_QUESTIONNAIRE,
.numColumns = 2,
.numRows = 2,
- .frameId = 0,
+ .frameId = FRAMEID_GENERAL_2x2,
.fourFooterOptions = FALSE,
.titleText = gText_Questionnaire,
.instructionsText1 = gText_CombineFourWordsOrPhrases,
@@ -515,14 +669,17 @@ static const struct EasyChatScreenTemplate sEasyChatScreenTemplates[] = {
},
};
-static const u8 sUnknown_08597748[][7] = {
+// IDs are used indirectly as indexes into gEasyChatWordsByLetterPointers
+// 0 is 'Others', 1-26 are the letters A-Z
+// This array maps the group IDs to the alphabet keyboard
+static const u8 sAlphabetGroupIdMap[NUM_ALPHABET_ROWS][NUM_ALPHABET_COLUMNS] = {
{ 1, 2, 3, 4, 5, 6, 0},
{ 7, 8, 9, 10, 11, 12, 0},
{13, 14, 15, 16, 17, 18, 19},
{20, 21, 22, 23, 24, 25, 26},
};
-static const u16 sMysteryGiftPhrase[] = {
+static const u16 sMysteryGiftPhrase[NUM_QUESTIONNAIRE_WORDS] = {
EC_WORD_LINK,
EC_WORD_TOGETHER,
EC_WORD_WITH,
@@ -537,81 +694,81 @@ static const u16 sBerryMasterWifePhrases[][2] = {
[PHRASE_SUPER_HUSTLE - 1] = {EC_WORD_SUPER, EC_WORD_HUSTLE},
};
-static const u16 sEasyChatTriangleCursorPalette[] = INCBIN_U16("graphics/easy_chat/triangle_cursor.gbapal");
-static const u32 sEasyChatTriangleCursorGfx[] = INCBIN_U32("graphics/easy_chat/triangle_cursor.4bpp");
-static const u32 sEasyChatScrollIndicatorGfx[] = INCBIN_U32("graphics/easy_chat/scroll_indicator.4bpp");
-static const u32 sEasyChatStartSelectButtonsGfx[] = INCBIN_U32("graphics/easy_chat/start_select_buttons.4bpp");
+static const u16 sTriangleCursor_Pal[] = INCBIN_U16("graphics/easy_chat/triangle_cursor.gbapal");
+static const u32 sTriangleCursor_Gfx[] = INCBIN_U32("graphics/easy_chat/triangle_cursor.4bpp");
+static const u32 sScrollIndicator_Gfx[] = INCBIN_U32("graphics/easy_chat/scroll_indicator.4bpp");
+static const u32 sStartSelectButtons_Gfx[] = INCBIN_U32("graphics/easy_chat/start_select_buttons.4bpp");
static const u16 sUnknown_085979C0[] = INCBIN_U16("graphics/misc/interview_frame.gbapal");
static const u32 sUnknown_085979E0[] = INCBIN_U32("graphics/misc/interview_frame.4bpp.lz");
-static const u16 sUnknown_08597B14[] = INCBIN_U16("graphics/misc/interview_frame_orange.gbapal");
-static const u16 sUnknown_08597B34[] = INCBIN_U16("graphics/misc/interview_frame_green.gbapal");
-static const u32 sUnknown_08597B54[] = INCBIN_U32("graphics/misc/interview_frame_2.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 sUnknown_08597C1C[] = INCBIN_U16("graphics/misc/8597C1C.gbapal");
static const u16 sUnknown_08597C24[] = INCBIN_U16("graphics/misc/8597C24.gbapal");
static const struct EasyChatPhraseFrameDimensions sPhraseFrameDimensions[] = {
- {
+ [FRAMEID_GENERAL_2x2] = {
.left = 3,
.top = 4,
.width = 24,
.height = 4,
- .footerId = 0,
+ .footerId = FOOTER_NORMAL,
},
- {
+ [FRAMEID_GENERAL_2x3] = {
.left = 3,
.top = 3,
.width = 24,
.height = 6,
- .footerId = 0,
+ .footerId = FOOTER_NORMAL,
},
- {
+ [FRAMEID_MAIL] = {
.left = 3,
.top = 0,
.width = 24,
.height = 10,
- .footerId = 0,
+ .footerId = FOOTER_NORMAL,
},
- {
+ [FRAMEID_COMBINE_TWO_WORDS] = {
.left = 3,
.top = 5,
.width = 24,
.height = 2,
- .footerId = 0,
+ .footerId = FOOTER_NORMAL,
},
- {
+ [FRAMEID_INTERVIEW_SHOW_PERSON] = {
.left = 16,
.top = 5,
.width = 12,
.height = 2,
- .footerId = 0,
+ .footerId = FOOTER_NORMAL,
},
- {
+ [FRAMEID_INTERVIEW] = {
.left = 3,
.top = 4,
.width = 24,
.height = 4,
- .footerId = 0,
+ .footerId = FOOTER_NORMAL,
},
- {
+ [FRAMEID_QUIZ_ANSWER] = {
.left = 9,
.top = 4,
.width = 12,
.height = 2,
- .footerId = 1,
+ .footerId = FOOTER_QUIZ,
},
- {
+ [FRAMEID_QUIZ_QUESTION] = {
.left = 5,
.top = 3,
- .width = 0x14,
+ .width = 20,
.height = 10,
- .footerId = 3,
+ .footerId = NUM_FOOTER_TYPES,
},
- {
+ [FRAMEID_QUIZ_SET_QUESTION] = {
.left = 3,
.top = 0,
.width = 24,
.height = 10,
- .footerId = 2,
+ .footerId = FOOTER_ANSWER,
},
};
@@ -685,7 +842,7 @@ static const struct WindowTemplate sEasyChatWindowTemplates[] = {
DUMMY_WIN_TEMPLATE,
};
-static const struct WindowTemplate sEasyChatYesNoWindowTemplate = {
+static const struct WindowTemplate sEasyChatYesNoWindowTemplate = {
.bg = 0,
.tilemapLeft = 22,
.tilemapTop = 9,
@@ -697,7 +854,7 @@ static const struct WindowTemplate sEasyChatYesNoWindowTemplate = {
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,
@@ -705,71 +862,71 @@ static const u8 *const sEasyChatKeyboardText[] =
gText_EasyChatKeyboard_TUVWXYZ,
};
-static const struct SpriteSheet sEasyChatSpriteSheets[] = {
+static const struct SpriteSheet sSpriteSheets[] = {
{
- .data = sEasyChatTriangleCursorGfx,
- .size = 0x0020,
- .tag = 0
+ .data = sTriangleCursor_Gfx,
+ .size = 0x20,
+ .tag = GFXTAG_TRIANGLE_CURSOR
},
{
- .data = sEasyChatScrollIndicatorGfx,
- .size = 0x0100,
- .tag = 2
+ .data = sScrollIndicator_Gfx,
+ .size = 0x100,
+ .tag = GFXTAG_SCROLL_INDICATOR
},
{
- .data = sEasyChatStartSelectButtonsGfx,
- .size = 0x0100,
- .tag = 3
+ .data = sStartSelectButtons_Gfx,
+ .size = 0x100,
+ .tag = GFXTAG_START_SELECT_BUTTONS
},
{0}
};
-static const struct SpritePalette sEasyChatSpritePalettes[] = {
+static const struct SpritePalette sSpritePalettes[] = {
{
- .data = sEasyChatTriangleCursorPalette,
- .tag = 0,
+ .data = sTriangleCursor_Pal,
+ .tag = PALTAG_TRIANGLE_CURSOR,
},
{
- .data = gEasyChatCursor_Pal,
- .tag = 1,
+ .data = gEasyChatRectangleCursor_Pal,
+ .tag = PALTAG_RECTANGLE_CURSOR,
},
{
- .data = gEasyChatRightWindow_Pal,
- .tag = 2,
+ .data = gEasyChatButtonWindow_Pal,
+ .tag = PALTAG_MISC_UI, // The palette is generated from the button window but used for various parts of the UI
},
{
.data = sUnknown_085979C0,
- .tag = 3,
+ .tag = PALTAG_3,
},
{0}
};
-static const struct CompressedSpriteSheet sUnknown_08597CE8[] = {
+static const struct CompressedSpriteSheet sCompressedSpriteSheets[] = {
{
.data = sUnknown_085979E0,
- .size = 0x0800,
- .tag = 5,
+ .size = 0x800,
+ .tag = GFXTAG_5,
},
{
- .data = gEasyChatCursor_Gfx,
+ .data = gEasyChatRectangleCursor_Gfx,
.size = 0x1000,
- .tag = 1,
+ .tag = GFXTAG_RECTANGLE_CURSOR,
},
{
- .data = gEasyChatRightWindow_Gfx,
- .size = 0x0800,
- .tag = 6,
+ .data = gEasyChatButtonWindow_Gfx,
+ .size = 0x800,
+ .tag = GFXTAG_BUTTON_WINDOW,
},
{
.data = gEasyChatMode_Gfx,
.size = 0x1000,
- .tag = 4,
+ .tag = GFXTAG_MODE_WINDOW,
},
};
-static const u8 sUnknown_08597D08[] = {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_8597D10 = {
+static const struct OamData sOamData_TriangleCursor = {
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
@@ -785,17 +942,17 @@ static const struct OamData sOamData_8597D10 = {
.affineParam = 0,
};
-static const struct SpriteTemplate sUnknown_08597D18 = {
- .tileTag = 0,
- .paletteTag = 0,
- .oam = &sOamData_8597D10,
+static const struct SpriteTemplate sSpriteTemplate_TriangleCursor = {
+ .tileTag = PALTAG_TRIANGLE_CURSOR,
+ .paletteTag = GFXTAG_TRIANGLE_CURSOR,
+ .oam = &sOamData_TriangleCursor,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_811DF28,
+ .callback = SpriteCB_Cursor,
};
-static const struct OamData sUnknown_08597D30 = {
+static const struct OamData sOamData_RectangleCursor = {
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
@@ -811,44 +968,52 @@ static const struct OamData sUnknown_08597D30 = {
.affineParam = 0,
};
-static const union AnimCmd sUnknown_08597D38[] = {
+static const union AnimCmd sAnim_RectangleCursor_OnGroup[] = {
ANIMCMD_FRAME(0, 0),
ANIMCMD_END,
};
-static const union AnimCmd sUnknown_08597D40[] = {
+static const union AnimCmd sAnim_RectangleCursor_OnButton[] = {
ANIMCMD_FRAME(32, 0),
ANIMCMD_END,
};
-static const union AnimCmd sUnknown_08597D48[] = {
+static const union AnimCmd sAnim_RectangleCursor_OnOthers[] = {
ANIMCMD_FRAME(64, 0),
ANIMCMD_END,
};
-static const union AnimCmd sUnknown_08597D50[] = {
+static const union AnimCmd sAnim_RectangleCursor_OnLetter[] = {
ANIMCMD_FRAME(96, 0),
ANIMCMD_END,
};
-static const union AnimCmd *const sUnknown_08597D58[] = {
- sUnknown_08597D38,
- sUnknown_08597D40,
- sUnknown_08597D48,
- sUnknown_08597D50,
+// Each anim changes the width 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 sUnknown_08597D68 = {
- .tileTag = 1,
- .paletteTag = 1,
- .oam = &sUnknown_08597D30,
- .anims = sUnknown_08597D58,
+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 = sub_811DF28,
+ .callback = SpriteCB_Cursor,
};
-static const struct OamData sUnknown_08597D80 = {
+static const struct OamData sOamData_ModeWindow = {
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
@@ -864,53 +1029,61 @@ static const struct OamData sUnknown_08597D80 = {
.affineParam = 0,
};
-static const union AnimCmd sUnknown_08597D88[] = {
+static const union AnimCmd sAnim_ModeWindow_Hidden[] = {
ANIMCMD_FRAME(96, 0),
ANIMCMD_END,
};
-static const union AnimCmd sUnknown_08597D90[] = {
- ANIMCMD_FRAME(64, 4),
- ANIMCMD_FRAME(32, 4),
+static const union AnimCmd sAnim_ModeWindow_ToGroup[] = {
+ ANIMCMD_FRAME(64, 4), // Transition frame
+ ANIMCMD_FRAME(32, 4), // 'Group' frame
ANIMCMD_END,
};
-static const union AnimCmd sUnknown_08597D9C[] = {
- ANIMCMD_FRAME(64, 4),
- ANIMCMD_FRAME(0, 4),
+static const union AnimCmd sAnim_ModeWindow_ToAlphabet[] = {
+ ANIMCMD_FRAME(64, 4), // Transition frame
+ ANIMCMD_FRAME(0, 4), // 'A-Z' frame
ANIMCMD_END,
};
-static const union AnimCmd sUnknown_08597DA8[] = {
- ANIMCMD_FRAME(64, 4),
- ANIMCMD_FRAME(96, 0),
+static const union AnimCmd sAnim_ModeWindow_ToHidden[] = {
+ ANIMCMD_FRAME(64, 4), // Transition frame
+ ANIMCMD_FRAME(96, 0), // Hidden frame
ANIMCMD_END,
};
-static const union AnimCmd sUnknown_08597DB4[] = {
+static const union AnimCmd sAnim_ModeWindow_Transition[] = {
ANIMCMD_FRAME(64, 4),
ANIMCMD_END,
};
-static const union AnimCmd *const sUnknown_08597DBC[] = {
- sUnknown_08597D88,
- sUnknown_08597D90,
- sUnknown_08597D9C,
- sUnknown_08597DA8,
- sUnknown_08597DB4,
+enum {
+ MODEWINDOW_ANIM_HIDDEN,
+ MODEWINDOW_ANIM_TO_GROUP,
+ MODEWINDOW_ANIM_TO_ALPHABET,
+ MODEWINDOW_ANIM_TO_HIDDEN,
+ MODEWINDOW_ANIM_TRANSITION,
};
-static const struct SpriteTemplate sUnknown_08597DD0 = {
- .tileTag = 4,
- .paletteTag = 2,
- .oam = &sUnknown_08597D80,
- .anims = sUnknown_08597DBC,
+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 sUnknown_08597DE8 = {
+static const struct OamData sOamData_ButtonWindow = {
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
@@ -926,17 +1099,17 @@ static const struct OamData sUnknown_08597DE8 = {
.affineParam = 0,
};
-static const struct SpriteTemplate sUnknown_08597DF0 = {
- .tileTag = 6,
- .paletteTag = 2,
- .oam = &sUnknown_08597DE8,
+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 sUnknown_08597E08 = {
+static const struct OamData sOamData_StartSelectButton = {
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
@@ -952,7 +1125,7 @@ static const struct OamData sUnknown_08597E08 = {
.affineParam = 0,
};
-static const struct OamData gUnknown_08597E10 = {
+static const struct OamData sOamData_ScrollIndicator = {
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
@@ -968,89 +1141,90 @@ static const struct OamData gUnknown_08597E10 = {
.affineParam = 0,
};
-static const union AnimCmd sUnknown_08597E18[] = {
+static const union AnimCmd sAnim_Frame0[] = {
ANIMCMD_FRAME(0, 0),
ANIMCMD_END,
};
-static const union AnimCmd sUnknown_08597E20[] = {
+static const union AnimCmd sAnim_Frame1[] = {
ANIMCMD_FRAME(4, 0),
ANIMCMD_END,
};
-static const union AnimCmd *const sUnknown_08597E28[] = {
- sUnknown_08597E18,
- sUnknown_08597E20,
+// 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 sUnknown_08597E30 = {
- .tileTag = 3,
- .paletteTag = 2,
- .oam = &sUnknown_08597E08,
- .anims = sUnknown_08597E28,
+static const struct SpriteTemplate sSpriteTemplate_StartSelectButton = {
+ .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 sUnknown_08597E48 = {
- .tileTag = 2,
- .paletteTag = 2,
- .oam = &gUnknown_08597E10,
- .anims = sUnknown_08597E28,
+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,
};
-static const u8 sFooterOptionXOffsets[][4] = {
- {16, 111, 196, 0},
- {16, 78, 130, 160},
- {16, 80, 134, 170},
+static const u8 sFooterOptionXOffsets[NUM_FOOTER_TYPES][4] = {
+ [FOOTER_NORMAL] = {16, 111, 196, 0},
+ [FOOTER_QUIZ] = {16, 78, 130, 160},
+ [FOOTER_ANSWER] = {16, 80, 134, 170},
};
-static const u8 *const sFooterTextOptions[][4] = {
- {gText_DelAll, gText_Cancel5, gText_Ok2, NULL},
- {gText_DelAll, gText_Cancel5, gText_Ok2, gText_Quiz},
- {gText_DelAll, gText_Cancel5, gText_Ok2, gText_Answer},
+static const u8 *const sFooterTextOptions[NUM_FOOTER_TYPES][4] = {
+ [FOOTER_NORMAL] = {gText_DelAll, gText_Cancel5, gText_Ok2, NULL},
+ [FOOTER_QUIZ] = {gText_DelAll, gText_Cancel5, gText_Ok2, gText_Quiz},
+ [FOOTER_ANSWER] = {gText_DelAll, gText_Cancel5, gText_Ok2, gText_Answer},
};
#include "data/easy_chat/easy_chat_groups.h"
#include "data/easy_chat/easy_chat_words_by_letter.h"
-const u8 *const gEasyChatGroupNamePointers[] = {
- [EC_GROUP_POKEMON] = gEasyChatGroupName_Pokemon,
- [EC_GROUP_TRAINER] = gEasyChatGroupName_Trainer,
- [EC_GROUP_STATUS] = gEasyChatGroupName_Status,
- [EC_GROUP_BATTLE] = gEasyChatGroupName_Battle,
- [EC_GROUP_GREETINGS] = gEasyChatGroupName_Greetings,
- [EC_GROUP_PEOPLE] = gEasyChatGroupName_People,
- [EC_GROUP_VOICES] = gEasyChatGroupName_Voices,
- [EC_GROUP_SPEECH] = gEasyChatGroupName_Speech,
- [EC_GROUP_ENDINGS] = gEasyChatGroupName_Endings,
- [EC_GROUP_FEELINGS] = gEasyChatGroupName_Feelings,
- [EC_GROUP_CONDITIONS] = gEasyChatGroupName_Conditions,
- [EC_GROUP_ACTIONS] = gEasyChatGroupName_Actions,
- [EC_GROUP_LIFESTYLE] = gEasyChatGroupName_Lifestyle,
- [EC_GROUP_HOBBIES] = gEasyChatGroupName_Hobbies,
- [EC_GROUP_TIME] = gEasyChatGroupName_Time,
- [EC_GROUP_MISC] = gEasyChatGroupName_Misc,
- [EC_GROUP_ADJECTIVES] = gEasyChatGroupName_Adjectives,
- [EC_GROUP_EVENTS] = gEasyChatGroupName_Events,
- [EC_GROUP_MOVE_1] = gEasyChatGroupName_Move1,
- [EC_GROUP_MOVE_2] = gEasyChatGroupName_Move2,
- [EC_GROUP_TRENDY_SAYING] = gEasyChatGroupName_TrendySaying,
- [EC_GROUP_POKEMON_2] = gEasyChatGroupName_Pokemon2,
+static const u8 *const sEasyChatGroupNamePointers[EC_NUM_GROUPS] = {
+ [EC_GROUP_POKEMON] = gEasyChatGroupName_Pokemon,
+ [EC_GROUP_TRAINER] = gEasyChatGroupName_Trainer,
+ [EC_GROUP_STATUS] = gEasyChatGroupName_Status,
+ [EC_GROUP_BATTLE] = gEasyChatGroupName_Battle,
+ [EC_GROUP_GREETINGS] = gEasyChatGroupName_Greetings,
+ [EC_GROUP_PEOPLE] = gEasyChatGroupName_People,
+ [EC_GROUP_VOICES] = gEasyChatGroupName_Voices,
+ [EC_GROUP_SPEECH] = gEasyChatGroupName_Speech,
+ [EC_GROUP_ENDINGS] = gEasyChatGroupName_Endings,
+ [EC_GROUP_FEELINGS] = gEasyChatGroupName_Feelings,
+ [EC_GROUP_CONDITIONS] = gEasyChatGroupName_Conditions,
+ [EC_GROUP_ACTIONS] = gEasyChatGroupName_Actions,
+ [EC_GROUP_LIFESTYLE] = gEasyChatGroupName_Lifestyle,
+ [EC_GROUP_HOBBIES] = gEasyChatGroupName_Hobbies,
+ [EC_GROUP_TIME] = gEasyChatGroupName_Time,
+ [EC_GROUP_MISC] = gEasyChatGroupName_Misc,
+ [EC_GROUP_ADJECTIVES] = gEasyChatGroupName_Adjectives,
+ [EC_GROUP_EVENTS] = gEasyChatGroupName_Events,
+ [EC_GROUP_MOVE_1] = gEasyChatGroupName_Move1,
+ [EC_GROUP_MOVE_2] = gEasyChatGroupName_Move2,
+ [EC_GROUP_TRENDY_SAYING] = gEasyChatGroupName_TrendySaying,
+ [EC_GROUP_POKEMON_NATIONAL] = gEasyChatGroupName_Pokemon2,
};
-static const u16 sDefaultProfileWords[] = {
+static const u16 sDefaultProfileWords[EASY_CHAT_BATTLE_WORDS_COUNT - 2] = {
EC_WORD_I_AM,
EC_WORD_A,
EC_WORD_POKEMON,
EC_WORD_FRIEND,
};
-static const u16 sDefaultBattleStartWords[] = {
+static const u16 sDefaultBattleStartWords[EASY_CHAT_BATTLE_WORDS_COUNT] = {
EC_WORD_ARE,
EC_WORD_YOU,
EC_WORD_READY,
@@ -1059,7 +1233,7 @@ static const u16 sDefaultBattleStartWords[] = {
EC_WORD_EXCL,
};
-static const u16 sUnknown_0859E640[] = {
+static const u16 sDefaultBattleWonWords[EASY_CHAT_BATTLE_WORDS_COUNT] = {
EC_WORD_YAY,
EC_WORD_YAY,
EC_WORD_EXCL_EXCL,
@@ -1068,7 +1242,7 @@ static const u16 sUnknown_0859E640[] = {
EC_WORD_EXCL_EXCL,
};
-static const u16 sUnknown_0859E64C[] = {
+static const u16 sDefaultBattleLostWords[EASY_CHAT_BATTLE_WORDS_COUNT] = {
EC_WORD_TOO,
EC_WORD_BAD,
EC_WORD_ELLIPSIS,
@@ -1077,24 +1251,40 @@ static const u16 sUnknown_0859E64C[] = {
EC_WORD_ELLIPSIS,
};
-static const u16 sUnknown_0859E658[] = {
+static const u16 sRestrictedWordSpecies[] = {
SPECIES_DEOXYS,
};
-void DoEasyChatScreen(u8 type, u16 *words, MainCallback callback, u8 displayedPersonType)
+
+// In addition to the task defines below, these two elements
+// have their indexes used explicitly because they are 4-byte
+// pointers, and occupy the next data element as well.
+// SetWordTaskArg/GetWordTaskArg use these defines to
+// read the pointer from the two elements
+#define TASKIDX_WORDS 2
+#define TASKIDX_EXIT_CALLBACK 4
+
+#define tState data[0]
+#define tType data[1]
+#define tWords data[TASKIDX_WORDS] // Occupies 2 and 3
+#define tExitCallback data[TASKIDX_EXIT_CALLBACK] // Occupies 4 and 5
+#define tFuncId data[6]
+#define tPersonType data[7]
+
+void DoEasyChatScreen(u8 type, u16 *words, MainCallback exitCallback, u8 displayedPersonType)
{
u8 taskId;
ResetTasks();
- taskId = CreateTask(sub_811A2C0, 0);
- gTasks[taskId].data[EZCHAT_TASK_TYPE] = type;
- gTasks[taskId].data[EZCHAT_TASK_SIZE] = displayedPersonType;
- SetWordTaskArg(taskId, EZCHAT_TASK_WORDS, (u32)words);
- SetWordTaskArg(taskId, EZCHAT_TASK_MAINCALLBACK, (u32)callback);
- SetMainCallback2(MainCallback_EasyChatScreen);
+ taskId = CreateTask(Task_InitEasyChatScreen, 0);
+ gTasks[taskId].tType = type;
+ gTasks[taskId].tPersonType = displayedPersonType;
+ SetWordTaskArg(taskId, TASKIDX_WORDS, (u32)words);
+ SetWordTaskArg(taskId, TASKIDX_EXIT_CALLBACK, (u32)exitCallback);
+ SetMainCallback2(CB2_EasyChatScreen);
}
-static void MainCallback_EasyChatScreen(void)
+static void CB2_EasyChatScreen(void)
{
RunTasks();
AnimateSprites();
@@ -1102,94 +1292,97 @@ static void MainCallback_EasyChatScreen(void)
UpdatePaletteFade();
}
-static void VBlankCallback_EasyChatScreen(void)
+static void VBlankCB_EasyChatScreen(void)
{
TransferPlttBuffer();
LoadOam();
ProcessSpriteCopyRequests();
}
-static void sub_811A2A4(u8 taskId, TaskFunc taskFunc)
+static void StartEasyChatScreen(u8 taskId, TaskFunc taskFunc)
{
gTasks[taskId].func = taskFunc;
- gTasks[taskId].data[EZCHAT_TASK_STATE] = 0;
+ gTasks[taskId].tState = MAINSTATE_FADE_IN;
}
-static void sub_811A2C0(u8 taskId)
+static void Task_InitEasyChatScreen(u8 taskId)
{
if (!IsUpdateLinkStateCBActive())
{
- while (sub_811A428(taskId));
+ while (InitEasyChatScreen(taskId));
}
else
{
- if (sub_811A428(taskId) == TRUE)
- {
+ if (InitEasyChatScreen(taskId) == TRUE)
return;
- }
}
- sub_811A2A4(taskId, sub_811A2FC);
+ StartEasyChatScreen(taskId, Task_EasyChatScreen);
}
-static void sub_811A2FC(u8 taskId)
+// After loading, this is the 'main' Easy Chat task
+static void Task_EasyChatScreen(u8 taskId)
{
- u16 v0;
+ u16 funcId;
s16 *data;
data = gTasks[taskId].data;
- switch (data[EZCHAT_TASK_STATE])
+ switch (tState)
{
- case 0:
- SetVBlankCallback(VBlankCallback_EasyChatScreen);
+ case MAINSTATE_FADE_IN:
+ SetVBlankCallback(VBlankCB_EasyChatScreen);
BlendPalettes(0xFFFFFFFF, 16, 0);
BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK);
- data[EZCHAT_TASK_STATE] = 5;
+ tState = MAINSTATE_WAIT_FADE_IN;
break;
- case 1:
- v0 = sub_811AAAC();
- if (sub_811A88C(v0))
+ case MAINSTATE_HANDLE_INPUT:
+ funcId = HandleEasyChatInput();
+ if (IsFuncIdForQuizLadyScreen(funcId))
{
+ // Fade to Quiz Lady screen
BeginNormalPaletteFade(0xFFFFFFFF, -2, 0, 16, RGB_BLACK);
- data[EZCHAT_TASK_STATE] = 3;
- data[EZCHAT_TASK_UNK06] = v0;
+ tState = MAINSTATE_TO_QUIZ_LADY;
+ tFuncId = funcId;
}
- else if (v0 == 0x18)
+ else if (funcId == ECFUNC_EXIT)
{
+ // Fade and exit Easy Chat
BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK);
- data[EZCHAT_TASK_STATE] = 4;
+ tState = MAINSTATE_EXIT;
}
- else if (v0 != 0)
+ else if (funcId != ECFUNC_NONE)
{
PlaySE(SE_SELECT);
- sub_811C158(v0);
- data[EZCHAT_TASK_STATE] ++;
+ StartEasyChatFunction(funcId);
+ tState++; // MAINSTATE_RUN_FUNC
}
break;
- case 2:
- if (!sub_811C170())
- data[EZCHAT_TASK_STATE] = 1;
+ case MAINSTATE_RUN_FUNC:
+ if (!RunEasyChatFunction())
+ tState = MAINSTATE_HANDLE_INPUT;
break;
- case 3:
+ case MAINSTATE_TO_QUIZ_LADY:
if (!gPaletteFade.active)
- sub_811A8A4(data[EZCHAT_TASK_UNK06]);
+ EnterQuizLadyScreen(tFuncId);
break;
- case 4:
+ case MAINSTATE_EXIT:
if (!gPaletteFade.active)
- sub_811A4D0((MainCallback)GetWordTaskArg(taskId, EZCHAT_TASK_MAINCALLBACK));
+ ExitEasyChatScreen((MainCallback)GetWordTaskArg(taskId, TASKIDX_EXIT_CALLBACK));
break;
- case 5:
+ case MAINSTATE_WAIT_FADE_IN:
if (!gPaletteFade.active)
- data[EZCHAT_TASK_STATE] = 1;
+ tState = MAINSTATE_HANDLE_INPUT;
break;
}
}
-static bool8 sub_811A428(u8 taskId)
+// Returns TRUE if still initializing, FALSE when finished
+// If an allocation fails it will switch to the exit callback
+static bool8 InitEasyChatScreen(u8 taskId)
{
s16 *data;
data = gTasks[taskId].data;
- switch (data[EZCHAT_TASK_STATE])
+ switch (tState)
{
case 0:
SetVBlankCallback(NULL);
@@ -1198,25 +1391,28 @@ static bool8 sub_811A428(u8 taskId)
ResetPaletteFade();
break;
case 1:
- if (!sub_811F28C())
+ if (!InitEasyChatScreenWordData())
{
- sub_811A4D0((MainCallback)GetWordTaskArg(taskId, EZCHAT_TASK_MAINCALLBACK));
+ // Alloc failed, exit
+ ExitEasyChatScreen((MainCallback)GetWordTaskArg(taskId, TASKIDX_EXIT_CALLBACK));
}
break;
case 2:
- if (!EasyChat_AllocateResources(data[EZCHAT_TASK_TYPE], (u16 *)GetWordTaskArg(taskId, EZCHAT_TASK_WORDS), data[EZCHAT_TASK_SIZE]))
+ if (!InitEasyChatScreenStruct(tType, (u16 *)GetWordTaskArg(taskId, TASKIDX_WORDS), tPersonType))
{
- sub_811A4D0((MainCallback)GetWordTaskArg(taskId, EZCHAT_TASK_MAINCALLBACK));
+ // Alloc failed, exit
+ ExitEasyChatScreen((MainCallback)GetWordTaskArg(taskId, TASKIDX_EXIT_CALLBACK));
}
break;
case 3:
- if (!sub_811BF8C())
+ if (!InitEasyChatScreenControl())
{
- sub_811A4D0((MainCallback)GetWordTaskArg(taskId, EZCHAT_TASK_MAINCALLBACK));
+ // Alloc failed, exit
+ ExitEasyChatScreen((MainCallback)GetWordTaskArg(taskId, TASKIDX_EXIT_CALLBACK));
}
break;
case 4:
- if (sub_811BFA4())
+ if (LoadEasyChatScreen())
{
return TRUE;
}
@@ -1224,15 +1420,15 @@ static bool8 sub_811A428(u8 taskId)
default:
return FALSE;
}
- data[EZCHAT_TASK_STATE] ++;
+ tState++;
return TRUE;
}
-static void sub_811A4D0(MainCallback callback)
+static void ExitEasyChatScreen(MainCallback callback)
{
- sub_811C13C();
- EasyChat_FreeResources();
- sub_811F2B8();
+ FreeEasyChatScreenControl();
+ FreeEasyChatScreenStruct();
+ FreeEasyChatScreenWordData();
FreeAllWindowBuffers();
SetMainCallback2(callback);
}
@@ -1286,7 +1482,7 @@ void ShowEasyChatScreen(void)
break;
case EASY_CHAT_TYPE_GABBY_AND_TY:
words = gSaveBlock1Ptr->gabbyAndTyData.quote;
- *words = -1;
+ *words = EC_EMPTY_WORD;
displayedPersonType = EASY_CHAT_PERSON_REPORTER_FEMALE;
break;
case EASY_CHAT_TYPE_CONTEST_INTERVIEW:
@@ -1303,7 +1499,7 @@ void ShowEasyChatScreen(void)
break;
case EASY_CHAT_TYPE_FAN_QUESTION:
words = gSaveBlock1Ptr->tvShows[gSpecialVar_0x8005].fanClubSpecial.words;
- words[0] = -1;
+ words[0] = EC_EMPTY_WORD;
displayedPersonType = EASY_CHAT_PERSON_BOY;
break;
case EASY_CHAT_TYPE_QUIZ_ANSWER:
@@ -1321,7 +1517,7 @@ void ShowEasyChatScreen(void)
words = gSaveBlock2Ptr->apprentices[0].speechWon;
break;
case EASY_CHAT_TYPE_QUESTIONNAIRE:
- words = sub_801B058();
+ words = GetQuestionnaireWordsPtr();
break;
default:
return;
@@ -1345,7 +1541,7 @@ static void CB2_QuizLadyQuestion(void)
if (!gPaletteFade.active)
{
lilycoveLady = &gSaveBlock1Ptr->lilycoveLady;
- lilycoveLady->quiz.playerAnswer = -1;
+ lilycoveLady->quiz.playerAnswer = EC_EMPTY_WORD;
CleanupOverworldWindowsAndTilemaps();
DoQuizQuestionEasyChatScreen();
}
@@ -1359,30 +1555,30 @@ void QuizLadyShowQuizQuestion(void)
SetMainCallback2(CB2_QuizLadyQuestion);
}
-static int sub_811A868(u16 word)
+static int GetQuizLadyScreenByFuncId(u16 funcId)
{
int i;
- for (i = 0; i < ARRAY_COUNT(sUnknown_08597530); i ++)
+ for (i = 0; i < ARRAY_COUNT(sQuizLadyEasyChatScreens); i ++)
{
- if (word == sUnknown_08597530[i].word)
+ if (funcId == sQuizLadyEasyChatScreens[i].funcId)
return i;
}
return -1;
}
-static bool32 sub_811A88C(u16 word)
+static bool32 IsFuncIdForQuizLadyScreen(u16 funcId)
{
- return sub_811A868(word) == -1 ? FALSE : TRUE;
+ return GetQuizLadyScreenByFuncId(funcId) == -1 ? FALSE : TRUE;
}
-static void sub_811A8A4(u16 word)
+static void EnterQuizLadyScreen(u16 funcId)
{
int i;
- i = sub_811A868(word);
+ i = GetQuizLadyScreenByFuncId(funcId);
ResetTasks();
- sub_811A4D0(sUnknown_08597530[i].callback);
+ ExitEasyChatScreen(sQuizLadyEasyChatScreens[i].callback);
}
static void DoQuizAnswerEasyChatScreen(void)
@@ -1418,7 +1614,7 @@ static void DoQuizSetQuestionEasyChatScreen(void)
EASY_CHAT_PERSON_DISPLAY_NONE);
}
-static bool8 EasyChat_AllocateResources(u8 type, u16 *words, u8 displayedPersonType)
+static bool8 InitEasyChatScreenStruct(u8 type, u16 *words, u8 displayedPersonType)
{
u8 templateId;
int i;
@@ -1428,116 +1624,121 @@ static bool8 EasyChat_AllocateResources(u8 type, u16 *words, u8 displayedPersonT
return FALSE;
sEasyChatScreen->type = type;
- sEasyChatScreen->words = words;
+ sEasyChatScreen->savedPhrase = words;
sEasyChatScreen->mainCursorColumn = 0;
sEasyChatScreen->mainCursorRow = 0;
- sEasyChatScreen->unk_09 = 0;
+ sEasyChatScreen->inAlphabetMode = FALSE;
sEasyChatScreen->displayedPersonType = displayedPersonType;
- sEasyChatScreen->unk_13 = 0;
+ sEasyChatScreen->unused = 0;
templateId = GetEachChatScreenTemplateId(type);
if (type == EASY_CHAT_TYPE_QUIZ_QUESTION)
{
- sub_811BDF0(sEasyChatScreen->unk_14);
- sEasyChatScreen->titleText = sEasyChatScreen->unk_14;
- sEasyChatScreen->state = 7;
+ GetQuizTitle(sEasyChatScreen->quizTitle);
+ sEasyChatScreen->titleText = sEasyChatScreen->quizTitle;
+ sEasyChatScreen->inputState = INPUTSTATE_QUIZ_QUESTION;
}
else
{
- sEasyChatScreen->state = 0;
+ sEasyChatScreen->inputState = INPUTSTATE_PHRASE;
sEasyChatScreen->titleText = sEasyChatScreenTemplates[templateId].titleText;
}
sEasyChatScreen->numColumns = sEasyChatScreenTemplates[templateId].numColumns;
sEasyChatScreen->numRows = sEasyChatScreenTemplates[templateId].numRows;
- sEasyChatScreen->unk_07 = sEasyChatScreen->numColumns * sEasyChatScreen->numRows;
+ sEasyChatScreen->maxWords = sEasyChatScreen->numColumns * sEasyChatScreen->numRows;
sEasyChatScreen->templateId = templateId;
- if (sEasyChatScreen->unk_07 > 9)
- sEasyChatScreen->unk_07 = 9;
+ if (sEasyChatScreen->maxWords > ARRAY_COUNT(sEasyChatScreen->currentPhrase))
+ sEasyChatScreen->maxWords = ARRAY_COUNT(sEasyChatScreen->currentPhrase);
if (words != NULL)
{
- CpuCopy16(words, sEasyChatScreen->ecWordBuffer, sEasyChatScreen->unk_07 * sizeof(u16));
+ // Phrase starts with words filled in, copy to current phrase
+ CpuCopy16(words, sEasyChatScreen->currentPhrase, sEasyChatScreen->maxWords * sizeof(u16));
}
else
{
- for (i = 0; i < sEasyChatScreen->unk_07; i ++)
- sEasyChatScreen->ecWordBuffer[i] = -1;
+ // Phrase starts with no words, fill with empty words and save
+ for (i = 0; i < sEasyChatScreen->maxWords; i ++)
+ sEasyChatScreen->currentPhrase[i] = EC_EMPTY_WORD;
- sEasyChatScreen->words = sEasyChatScreen->ecWordBuffer;
+ sEasyChatScreen->savedPhrase = sEasyChatScreen->currentPhrase;
}
- sEasyChatScreen->unk_0d = (sub_811F3AC() - 1) / 2 + 1;
+ sEasyChatScreen->keyboardLastRow = (GetNumUnlockedEasyChatGroups() - 1) / 2 + 1;
return TRUE;
}
-static void EasyChat_FreeResources(void)
+static void FreeEasyChatScreenStruct(void)
{
if (sEasyChatScreen != NULL)
FREE_AND_SET_NULL(sEasyChatScreen);
}
-static u16 sub_811AAAC(void)
-{
- switch (sEasyChatScreen->state)
- {
- case 0:
- return sub_811AB68();
- case 1:
- return sub_811ACDC();
- case 2:
- return sub_811AE44();
- case 3:
- return sub_811AF00();
- case 4:
- return sub_811AF8C();
- case 5:
- return sub_811B040();
- case 6:
- return sub_811AFEC();
- case 7:
- return sub_811B08C();
- case 8:
- return sub_811B0BC();
- case 9:
- return sub_811B0E8();
- case 10:
- return sub_811B0F8();
- }
- return 0;
-}
-
-bool32 sub_811AB44(void)
+// Returns the function ID of the action to take as a result of player's input.
+// If no action is needed, returns ECFUNC_NONE
+static u16 HandleEasyChatInput(void)
+{
+ switch (sEasyChatScreen->inputState)
+ {
+ case INPUTSTATE_PHRASE:
+ return HandleEasyChatInput_Phrase();
+ case INPUTSTATE_MAIN_SCREEN_BUTTONS:
+ return HandleEasyChatInput_MainScreenButtons();
+ case INPUTSTATE_KEYBOARD:
+ return HandleEasyChatInput_Keyboard();
+ case INPUTSTATE_WORD_SELECT:
+ return HandleEasyChatInput_WordSelect();
+ case INPUTSTATE_EXIT_PROMPT:
+ return HandleEasyChatInput_ExitPrompt();
+ case INPUTSTATE_DELETE_ALL_YES_NO:
+ return HandleEasyChatInput_DeleteAllYesNo();
+ case INPUTSTATE_CONFIRM_WORDS_YES_NO:
+ return HandleEasyChatInput_ConfirmWordsYesNo();
+ case INPUTSTATE_QUIZ_QUESTION:
+ return HandleEasyChatInput_QuizQuestion();
+ case INPUTSTATE_WAIT_FOR_MSG:
+ return HandleEasyChatInput_WaitForMsg();
+ case INPUTSTATE_START_CONFIRM_LYRICS:
+ return HandleEasyChatInput_StartConfirmLyrics();
+ case INPUTSTATE_CONFIRM_LYRICS_YES_NO:
+ return HandleEasyChatInput_ConfirmLyricsYesNo();
+ }
+ return ECFUNC_NONE;
+}
+
+static bool32 IsCurrentFrame2x5(void)
{
switch (GetEasyChatScreenFrameId())
{
- case 2:
- case 7:
- case 8:
+ case FRAMEID_MAIL:
+ case FRAMEID_QUIZ_QUESTION:
+ case FRAMEID_QUIZ_SET_QUESTION:
return TRUE;
}
return FALSE;
}
-static u16 sub_811AB68(void)
+// Handles main screen input while cursor is on a word in the phrase
+static u16 HandleEasyChatInput_Phrase(void)
{
do
{
if (JOY_NEW(A_BUTTON))
{
- sub_811BF78();
- sEasyChatScreen->state = 2;
- sEasyChatScreen->unk_0a = 0;
- sEasyChatScreen->unk_0b = 0;
- sEasyChatScreen->unk_0c = 0;
- return 9;
+ ClearUnusedField();
+ sEasyChatScreen->inputState = INPUTSTATE_KEYBOARD;
+ sEasyChatScreen->keyboardColumn = 0;
+ sEasyChatScreen->keyboardRow = 0;
+ sEasyChatScreen->keyboardScrollOffset = 0;
+ return ECFUNC_OPEN_KEYBOARD;
}
else if (JOY_NEW(B_BUTTON))
{
- return sub_811B150();
+ return StartConfirmExitPrompt();
}
else if (JOY_NEW(START_BUTTON))
{
- return sub_811B1B4();
+ return TryConfirmWords();
}
else if (JOY_NEW(DPAD_UP))
{
@@ -1560,37 +1761,42 @@ static u16 sub_811AB68(void)
break;
}
- return 0;
+ return ECFUNC_NONE;
} while (0);
+ // Handle D-Pad input
+
+ // Wrap row
if (sEasyChatScreen->mainCursorRow < 0)
sEasyChatScreen->mainCursorRow = sEasyChatScreenTemplates[sEasyChatScreen->templateId].numRows;
-
if (sEasyChatScreen->mainCursorRow > sEasyChatScreenTemplates[sEasyChatScreen->templateId].numRows)
sEasyChatScreen->mainCursorRow = 0;
if (sEasyChatScreen->mainCursorRow == sEasyChatScreenTemplates[sEasyChatScreen->templateId].numRows)
{
+ // Moved onto bottom row (buttons)
if (sEasyChatScreen->mainCursorColumn > 2)
sEasyChatScreen->mainCursorColumn = 2;
- sEasyChatScreen->state = 1;
- return 3;
+ sEasyChatScreen->inputState = INPUTSTATE_MAIN_SCREEN_BUTTONS;
+ return ECFUNC_UPDATE_MAIN_CURSOR_ON_BUTTONS;
}
+ // Wrap column
if (sEasyChatScreen->mainCursorColumn < 0)
sEasyChatScreen->mainCursorColumn = sEasyChatScreenTemplates[sEasyChatScreen->templateId].numColumns - 1;
-
if (sEasyChatScreen->mainCursorColumn >= sEasyChatScreenTemplates[sEasyChatScreen->templateId].numColumns)
sEasyChatScreen->mainCursorColumn = 0;
- if (sub_811AB44() && sEasyChatScreen->mainCursorColumn == 1 && sEasyChatScreen->mainCursorRow == 4)
+ // All 2x5 phrases are only 9 words long, exclude the bottom right (10th) position
+ if (IsCurrentFrame2x5() && sEasyChatScreen->mainCursorColumn == 1 && sEasyChatScreen->mainCursorRow == 4)
sEasyChatScreen->mainCursorColumn = 0;
- return 2;
+ return ECFUNC_UPDATE_MAIN_CURSOR;
}
-static u16 sub_811ACDC(void)
+// Handles main screen input while cursor is below the phrase on one of the buttons, e.g. Del. All or Cancel
+static u16 HandleEasyChatInput_MainScreenButtons(void)
{
do
{
@@ -1598,24 +1804,24 @@ static u16 sub_811ACDC(void)
{
switch (sEasyChatScreen->mainCursorColumn)
{
- case 0:
- return sub_811B184();
- case 1:
- return sub_811B150();
- case 2:
- return sub_811B1B4();
- case 3:
- return sub_811B264();
+ case 0: // Del. All button
+ return DoDeleteAllButton();
+ case 1: // Cancel button
+ return StartConfirmExitPrompt();
+ case 2: // OK button
+ return TryConfirmWords();
+ case 3: // Quiz/Answer button
+ return DoQuizButton();
}
}
if (JOY_NEW(B_BUTTON))
{
- return sub_811B150();
+ return StartConfirmExitPrompt();
}
else if (JOY_NEW(START_BUTTON))
{
- return sub_811B1B4();
+ return TryConfirmWords();
}
else if (JOY_NEW(DPAD_UP))
{
@@ -1638,7 +1844,7 @@ static u16 sub_811ACDC(void)
break;
}
- return 0;
+ return ECFUNC_NONE;
} while (0);
if (sEasyChatScreen->mainCursorRow == sEasyChatScreenTemplates[sEasyChatScreen->templateId].numRows)
@@ -1650,790 +1856,803 @@ static u16 sub_811ACDC(void)
if (sEasyChatScreen->mainCursorColumn >= numFooterColumns)
sEasyChatScreen->mainCursorColumn = 0;
- return 3;
+ return ECFUNC_UPDATE_MAIN_CURSOR_ON_BUTTONS;
}
if (sEasyChatScreen->mainCursorColumn >= sEasyChatScreenTemplates[sEasyChatScreen->templateId].numColumns)
sEasyChatScreen->mainCursorColumn = sEasyChatScreenTemplates[sEasyChatScreen->templateId].numColumns - 1;
- if (sub_811AB44() && sEasyChatScreen->mainCursorColumn == 1 && sEasyChatScreen->mainCursorRow == 4)
+ // All 2x5 phrases are only 9 words long, exclude the bottom right (10th) position
+ if (IsCurrentFrame2x5() && sEasyChatScreen->mainCursorColumn == 1 && sEasyChatScreen->mainCursorRow == 4)
sEasyChatScreen->mainCursorColumn = 0;
- sEasyChatScreen->state = 0;
- return 2;
+ sEasyChatScreen->inputState = INPUTSTATE_PHRASE;
+ return ECFUNC_UPDATE_MAIN_CURSOR;
}
-static u16 sub_811AE44(void)
+static u16 HandleEasyChatInput_Keyboard(void)
{
if (JOY_NEW(B_BUTTON))
- return sub_811B32C();
+ return ExitKeyboardToMainScreen();
if (JOY_NEW(A_BUTTON))
{
- if (sEasyChatScreen->unk_0a != -1)
- return sub_811B2B0();
+ if (sEasyChatScreen->keyboardColumn != -1)
+ return SelectKeyboardGroup();
- switch (sEasyChatScreen->unk_0b)
+ // Cursor is in button window
+ switch (sEasyChatScreen->keyboardRow)
{
- case 0:
- return sub_811B33C();
- case 1:
- return sub_811B368();
- case 2:
- return sub_811B32C();
+ case 0: // Mode button
+ return StartSwitchKeyboardMode();
+ case 1: // Delete button
+ return DeleteSelectedWord();
+ case 2: // Cancel button
+ return ExitKeyboardToMainScreen();
}
}
if (JOY_NEW(SELECT_BUTTON))
- return sub_811B33C();
+ return StartSwitchKeyboardMode();
if (JOY_REPEAT(DPAD_UP))
- return sub_811B528(2);
+ return MoveKeyboardCursor(INPUT_UP);
if (JOY_REPEAT(DPAD_DOWN))
- return sub_811B528(3);
+ return MoveKeyboardCursor(INPUT_DOWN);
if (JOY_REPEAT(DPAD_LEFT))
- return sub_811B528(1);
+ return MoveKeyboardCursor(INPUT_LEFT);
if (JOY_REPEAT(DPAD_RIGHT))
- return sub_811B528(0);
+ return MoveKeyboardCursor(INPUT_RIGHT);
- return 0;
+ return ECFUNC_NONE;
}
-static u16 sub_811AF00(void)
+// Input handling for the lower window after a word group has been selected
+static u16 HandleEasyChatInput_WordSelect(void)
{
if (JOY_NEW(B_BUTTON))
{
- sEasyChatScreen->state = 2;
- return 14;
+ sEasyChatScreen->inputState = INPUTSTATE_KEYBOARD;
+ return ECFUNC_RETURN_TO_KEYBOARD;
}
if (JOY_NEW(A_BUTTON))
- return sub_811B394();
+ return SelectNewWord();
if (JOY_NEW(START_BUTTON))
- return sub_811B794(4);
+ return MoveWordSelectCursor(INPUT_START);
if (JOY_NEW(SELECT_BUTTON))
- return sub_811B794(5);
+ return MoveWordSelectCursor(INPUT_SELECT);
if (JOY_REPEAT(DPAD_UP))
- return sub_811B794(2);
+ return MoveWordSelectCursor(INPUT_UP);
if (JOY_REPEAT(DPAD_DOWN))
- return sub_811B794(3);
+ return MoveWordSelectCursor(INPUT_DOWN);
if (JOY_REPEAT(DPAD_LEFT))
- return sub_811B794(1);
+ return MoveWordSelectCursor(INPUT_LEFT);
if (JOY_REPEAT(DPAD_RIGHT))
- return sub_811B794(0);
+ return MoveWordSelectCursor(INPUT_RIGHT);
- return 0;
+ return ECFUNC_NONE;
}
-static u16 sub_811AF8C(void)
+static u16 HandleEasyChatInput_ExitPrompt(void)
{
- u8 var0;
-
switch (Menu_ProcessInputNoWrapClearOnChoose())
{
- case MENU_B_PRESSED: // B Button
- case 1: // No
- sEasyChatScreen->state = sub_811B2A4();
- return 7;
- case 0: // Yes
+ case MENU_B_PRESSED:
+ case 1: // No (Continue)
+ sEasyChatScreen->inputState = GetEasyChatBackupState();
+ return ECFUNC_CLOSE_PROMPT;
+ case 0: // Yes (Exit)
gSpecialVar_Result = 0;
- var0 = sEasyChatScreen->type - EASY_CHAT_TYPE_QUIZ_SET_QUESTION;
- if (var0 < 2)
- sub_811B3E4();
+ if (sEasyChatScreen->type == EASY_CHAT_TYPE_QUIZ_SET_QUESTION
+ || sEasyChatScreen->type == EASY_CHAT_TYPE_QUIZ_SET_ANSWER)
+ SaveCurrentPhrase();
- return 24;
+ return ECFUNC_EXIT;
default:
- return 0;
+ return ECFUNC_NONE;
}
}
-static u16 sub_811AFEC(void)
+static u16 HandleEasyChatInput_ConfirmWordsYesNo(void)
{
switch (Menu_ProcessInputNoWrapClearOnChoose())
{
- case MENU_B_PRESSED: // B Button
+ case MENU_B_PRESSED:
case 1: // No
- sEasyChatScreen->state = sub_811B2A4();
- return 7;
+ sEasyChatScreen->inputState = GetEasyChatBackupState();
+ return ECFUNC_CLOSE_PROMPT;
case 0: // Yes
- sub_811BE9C();
- gSpecialVar_Result = sub_811B4EC();
- sub_811B3E4();
- return 24;
+ SetSpecialEasyChatResult();
+ gSpecialVar_Result = GetEasyChatCompleted();
+ SaveCurrentPhrase();
+ return ECFUNC_EXIT;
default:
- return 0;
+ return ECFUNC_NONE;
}
}
-static u16 sub_811B040(void)
+static u16 HandleEasyChatInput_DeleteAllYesNo(void)
{
switch (Menu_ProcessInputNoWrapClearOnChoose())
{
- case MENU_B_PRESSED: // B Button
+ case MENU_B_PRESSED:
case 1: // No
- sEasyChatScreen->state = 1;
- return 7;
+ sEasyChatScreen->inputState = INPUTSTATE_MAIN_SCREEN_BUTTONS;
+ return ECFUNC_CLOSE_PROMPT;
case 0: // Yes
- sub_811B418();
- sEasyChatScreen->state = 1;
- return 8;
+ ResetCurrentPhrase();
+ sEasyChatScreen->inputState = INPUTSTATE_MAIN_SCREEN_BUTTONS;
+ return ECFUNC_CLOSE_PROMPT_AFTER_DELETE;
default:
- return 0;
+ return ECFUNC_NONE;
}
}
-static u16 sub_811B08C(void)
+static u16 HandleEasyChatInput_QuizQuestion(void)
{
if (JOY_NEW(A_BUTTON))
- return 26;
+ return ECFUNC_QUIZ_ANSWER;
if (JOY_NEW(B_BUTTON))
- return sub_811B150();
+ return StartConfirmExitPrompt();
- return 0;
+ return ECFUNC_NONE;
}
-static u16 sub_811B0BC(void)
+// A message has been printed. Wait for player to
+// press A or B, then return to previous state
+static u16 HandleEasyChatInput_WaitForMsg(void)
{
if (JOY_NEW(A_BUTTON | B_BUTTON))
{
- sEasyChatScreen->state = sub_811B2A4();
- return 7;
+ sEasyChatScreen->inputState = GetEasyChatBackupState();
+ return ECFUNC_CLOSE_PROMPT;
}
- return 0;
+ return ECFUNC_NONE;
}
-static u16 sub_811B0E8(void)
+// Odd, could have been skipped. Just passes to HandleEasyChatInput_ConfirmLyricsYesNo
+static u16 HandleEasyChatInput_StartConfirmLyrics(void)
{
- sEasyChatScreen->state = 10;
- return 6;
+ sEasyChatScreen->inputState = INPUTSTATE_CONFIRM_LYRICS_YES_NO;
+ return ECFUNC_PROMPT_CONFIRM;
}
-static u16 sub_811B0F8(void)
+static u16 HandleEasyChatInput_ConfirmLyricsYesNo(void)
{
switch (Menu_ProcessInputNoWrapClearOnChoose())
{
- case MENU_B_PRESSED: // B Button
+ case MENU_B_PRESSED:
case 1: // No
- sub_811B454();
- sEasyChatScreen->stateBackup = 0;
- sEasyChatScreen->state = 8;
- return 31;
+ ResetCurrentPhraseToSaved();
+ sEasyChatScreen->inputStateBackup = INPUTSTATE_PHRASE;
+ sEasyChatScreen->inputState = INPUTSTATE_WAIT_FOR_MSG;
+ return ECFUNC_MSG_SONG_TOO_SHORT;
case 0: // Yes
- gSpecialVar_Result = sub_811B4EC();
- sub_811B3E4();
- return 24;
+ gSpecialVar_Result = GetEasyChatCompleted();
+ SaveCurrentPhrase();
+ return ECFUNC_EXIT;
default:
- return 0;
+ return ECFUNC_NONE;
}
}
-static u16 sub_811B150(void)
+static u16 StartConfirmExitPrompt(void)
{
if (sEasyChatScreen->type == EASY_CHAT_TYPE_APPRENTICE
|| sEasyChatScreen->type == EASY_CHAT_TYPE_CONTEST_INTERVIEW)
{
- sEasyChatScreen->stateBackup = sEasyChatScreen->state;
- sEasyChatScreen->state = 8;
- return 34;
+ sEasyChatScreen->inputStateBackup = sEasyChatScreen->inputState;
+ sEasyChatScreen->inputState = INPUTSTATE_WAIT_FOR_MSG;
+ return ECFUNC_MSG_CANT_EXIT;
}
else
{
- sEasyChatScreen->stateBackup = sEasyChatScreen->state;
- sEasyChatScreen->state = 4;
- return 5;
+ sEasyChatScreen->inputStateBackup = sEasyChatScreen->inputState;
+ sEasyChatScreen->inputState = INPUTSTATE_EXIT_PROMPT;
+ return ECFUNC_PROMPT_EXIT;
}
}
-static int sub_811B184(void)
+static int DoDeleteAllButton(void)
{
- sEasyChatScreen->stateBackup = sEasyChatScreen->state;
+ sEasyChatScreen->inputStateBackup = sEasyChatScreen->inputState;
if (sEasyChatScreen->type != EASY_CHAT_TYPE_BARD_SONG)
{
- sEasyChatScreen->state = 5;
- return 4;
+ // Show Delete yes/no
+ sEasyChatScreen->inputState = INPUTSTATE_DELETE_ALL_YES_NO;
+ return ECFUNC_PROMPT_DELETE_ALL;
}
else
{
- sEasyChatScreen->stateBackup = sEasyChatScreen->state;
- sEasyChatScreen->state = 8;
- return 32;
+ // Cannot delete lyrics when setting Bard's song
+ sEasyChatScreen->inputStateBackup = sEasyChatScreen->inputState;
+ sEasyChatScreen->inputState = INPUTSTATE_WAIT_FOR_MSG;
+ return ECFUNC_MSG_CANT_DELETE_LYRICS;
}
}
-static u16 sub_811B1B4(void)
+static u16 TryConfirmWords(void)
{
- sEasyChatScreen->stateBackup = sEasyChatScreen->state;
+ sEasyChatScreen->inputStateBackup = sEasyChatScreen->inputState;
if (sEasyChatScreen->type == EASY_CHAT_TYPE_QUIZ_SET_QUESTION)
{
- if (sub_811BD64())
+ if (IsQuizQuestionEmpty())
{
- sEasyChatScreen->state = 8;
- return 29;
+ sEasyChatScreen->inputState = INPUTSTATE_WAIT_FOR_MSG;
+ return ECFUNC_MSG_CREATE_QUIZ;
}
- if (sub_811BDB0())
+ if (IsQuizAnswerEmpty())
{
- sEasyChatScreen->state = 8;
- return 30;
+ sEasyChatScreen->inputState = INPUTSTATE_WAIT_FOR_MSG;
+ return ECFUNC_MSG_SELECT_ANSWER;
}
- sEasyChatScreen->state = 6;
- return 6;
+ sEasyChatScreen->inputState = INPUTSTATE_CONFIRM_WORDS_YES_NO;
+ return ECFUNC_PROMPT_CONFIRM;
}
else if (sEasyChatScreen->type == EASY_CHAT_TYPE_QUIZ_SET_ANSWER)
{
- if (sub_811BDB0())
+ if (IsQuizAnswerEmpty())
{
- sEasyChatScreen->state = 8;
- return 30;
+ sEasyChatScreen->inputState = INPUTSTATE_WAIT_FOR_MSG;
+ return ECFUNC_MSG_SELECT_ANSWER;
}
- if (sub_811BD64())
+ if (IsQuizQuestionEmpty())
{
- sEasyChatScreen->state = 8;
- return 29;
+ sEasyChatScreen->inputState = INPUTSTATE_WAIT_FOR_MSG;
+ return ECFUNC_MSG_CREATE_QUIZ;
}
- sEasyChatScreen->state = 6;
- return 6;
+ sEasyChatScreen->inputState = INPUTSTATE_CONFIRM_WORDS_YES_NO;
+ return ECFUNC_PROMPT_CONFIRM;
}
else if (sEasyChatScreen->type == EASY_CHAT_TYPE_TRENDY_PHRASE
|| sEasyChatScreen->type == EASY_CHAT_TYPE_GOOD_SAYING)
{
- if (!sub_811BD2C())
+ if (!IsCurrentPhraseFull())
{
- sEasyChatScreen->state = 8;
- return 33;
+ sEasyChatScreen->inputState = INPUTSTATE_WAIT_FOR_MSG;
+ return ECFUNC_MSG_COMBINE_TWO_WORDS;
}
- sEasyChatScreen->state = 6;
- return 6;
+ sEasyChatScreen->inputState = INPUTSTATE_CONFIRM_WORDS_YES_NO;
+ return ECFUNC_PROMPT_CONFIRM;
}
else if (sEasyChatScreen->type == EASY_CHAT_TYPE_APPRENTICE
|| sEasyChatScreen->type == EASY_CHAT_TYPE_CONTEST_INTERVIEW)
{
- if (sub_811BCF4())
+ if (IsCurrentPhraseEmpty())
{
- sEasyChatScreen->state = 8;
- return 34;
+ sEasyChatScreen->inputState = INPUTSTATE_WAIT_FOR_MSG;
+ return ECFUNC_MSG_CANT_EXIT;
}
- sEasyChatScreen->state = 6;
- return 6;
+ sEasyChatScreen->inputState = INPUTSTATE_CONFIRM_WORDS_YES_NO;
+ return ECFUNC_PROMPT_CONFIRM;
}
else if (sEasyChatScreen->type == EASY_CHAT_TYPE_QUESTIONNAIRE)
{
- sEasyChatScreen->state = 6;
- return 6;
+ sEasyChatScreen->inputState = INPUTSTATE_CONFIRM_WORDS_YES_NO;
+ return ECFUNC_PROMPT_CONFIRM;
}
else
{
- if (sub_811BCF4() == 1 || !sub_811B4EC())
+ if (IsCurrentPhraseEmpty() == TRUE || !GetEasyChatCompleted())
{
- sEasyChatScreen->state = 4;
- return 5;
+ sEasyChatScreen->inputState = INPUTSTATE_EXIT_PROMPT;
+ return ECFUNC_PROMPT_EXIT;
}
- sEasyChatScreen->state = 6;
- return 6;
+ sEasyChatScreen->inputState = INPUTSTATE_CONFIRM_WORDS_YES_NO;
+ return ECFUNC_PROMPT_CONFIRM;
}
}
-static int sub_811B264(void)
+static int DoQuizButton(void)
{
- sEasyChatScreen->stateBackup = sEasyChatScreen->state;
+ sEasyChatScreen->inputStateBackup = sEasyChatScreen->inputState;
switch (sEasyChatScreen->type)
{
case EASY_CHAT_TYPE_QUIZ_ANSWER:
- return 25;
+ return ECFUNC_QUIZ_QUESTION;
case EASY_CHAT_TYPE_QUIZ_SET_QUESTION:
- sub_811B3E4();
- return 28;
+ SaveCurrentPhrase();
+ return ECFUNC_SET_QUIZ_ANSWER;
case EASY_CHAT_TYPE_QUIZ_SET_ANSWER:
- sub_811B3E4();
- return 27;
+ SaveCurrentPhrase();
+ return ECFUNC_SET_QUIZ_QUESTION;
default:
- return 0;
+ return ECFUNC_NONE;
}
}
-static u8 sub_811B2A4(void)
+static u8 GetEasyChatBackupState(void)
{
- return sEasyChatScreen->stateBackup;
+ return sEasyChatScreen->inputStateBackup;
}
-static int sub_811B2B0(void)
+static int SelectKeyboardGroup(void)
{
- u16 var1;
+ u16 numWords;
- if (sEasyChatScreen->unk_09 == 0)
+ if (!sEasyChatScreen->inAlphabetMode)
{
- u8 groupId = sub_811F3B8(sub_811B8E8());
- sub_811F548(0, groupId);
+ u8 groupId = GetUnlockedEasyChatGroupId(GetSelectedGroupIndex());
+ SetSelectedWordGroup(FALSE, groupId);
}
else
{
- sub_811F548(1, sub_811B908());
+ SetSelectedWordGroup(TRUE, GetSelectedAlphabetGroupId());
}
- var1 = sub_811F5B0();
- if (var1 == 0)
- return 0;
+ numWords = GetNumWordsInSelectedGroup();
+ if (numWords == 0)
+ return ECFUNC_NONE;
- sEasyChatScreen->unk_0f = (var1 - 1) / 2;
- sEasyChatScreen->unk_0e = 0;
- sEasyChatScreen->unk_10 = 0;
- sEasyChatScreen->unk_11 = 0;
- sEasyChatScreen->state = 3;
- return 11;
+ sEasyChatScreen->wordSelectLastRow = (numWords - 1) / 2;
+ sEasyChatScreen->wordSelectScrollOffset = 0;
+ sEasyChatScreen->wordSelectColumn = 0;
+ sEasyChatScreen->wordSelectRow = 0;
+ sEasyChatScreen->inputState = INPUTSTATE_WORD_SELECT;
+ return ECFUNC_OPEN_WORD_SELECT;
}
-static int sub_811B32C(void)
+static int ExitKeyboardToMainScreen(void)
{
- sEasyChatScreen->state = 0;
- return 10;
+ sEasyChatScreen->inputState = INPUTSTATE_PHRASE;
+ return ECFUNC_CLOSE_KEYBOARD;
}
-static int sub_811B33C(void)
+static int StartSwitchKeyboardMode(void)
{
- sEasyChatScreen->unk_0a = 0;
- sEasyChatScreen->unk_0b = 0;
- sEasyChatScreen->unk_0c = 0;
- if (!sEasyChatScreen->unk_09)
- sEasyChatScreen->unk_09 = 1;
+ sEasyChatScreen->keyboardColumn = 0;
+ sEasyChatScreen->keyboardRow = 0;
+ sEasyChatScreen->keyboardScrollOffset = 0;
+ if (!sEasyChatScreen->inAlphabetMode)
+ sEasyChatScreen->inAlphabetMode = TRUE;
else
- sEasyChatScreen->unk_09 = 0;
+ sEasyChatScreen->inAlphabetMode = FALSE;
- return 23;
+ return ECFUNC_SWITCH_KEYBOARD_MODE;
}
-static int sub_811B368(void)
+static int DeleteSelectedWord(void)
{
if (sEasyChatScreen->type == EASY_CHAT_TYPE_BARD_SONG)
{
PlaySE(SE_FAILURE);
- return 0;
+ return ECFUNC_NONE;
}
else
{
- sub_811B488(0xFFFF);
- return 1;
+ SetSelectedWord(EC_EMPTY_WORD);
+ return ECFUNC_REPRINT_PHRASE;
}
}
-static int sub_811B394(void)
+static int SelectNewWord(void)
{
- u16 easyChatWord = sub_811F578(sub_811B940());
- if (sub_811BF88(easyChatWord))
+ u16 easyChatWord = GetWordFromSelectedGroup(GetSelectedWordIndex());
+ if (DummyWordCheck(easyChatWord))
{
+ // Never reached. Would disallow selecting certain words
PlaySE(SE_FAILURE);
- return 0;
+ return ECFUNC_NONE;
}
else
{
- sub_811B488(easyChatWord);
+ SetSelectedWord(easyChatWord);
if (sEasyChatScreen->type != EASY_CHAT_TYPE_BARD_SONG)
{
- sEasyChatScreen->state = 0;
- return 12;
+ sEasyChatScreen->inputState = INPUTSTATE_PHRASE;
+ return ECFUNC_CLOSE_WORD_SELECT;
}
else
{
- sEasyChatScreen->state = 9;
- return 13;
+ sEasyChatScreen->inputState = INPUTSTATE_START_CONFIRM_LYRICS;
+ return ECFUNC_PROMPT_CONFIRM_LYRICS;
}
}
}
-static void sub_811B3E4(void)
+static void SaveCurrentPhrase(void)
{
int i;
- for (i = 0; i < sEasyChatScreen->unk_07; i++)
- sEasyChatScreen->words[i] = sEasyChatScreen->ecWordBuffer[i];
+ for (i = 0; i < sEasyChatScreen->maxWords; i++)
+ sEasyChatScreen->savedPhrase[i] = sEasyChatScreen->currentPhrase[i];
}
-static void sub_811B418(void)
+static void ResetCurrentPhrase(void)
{
int i;
- for (i = 0; i < sEasyChatScreen->unk_07; i++)
- sEasyChatScreen->ecWordBuffer[i] = 0xFFFF;
+ for (i = 0; i < sEasyChatScreen->maxWords; i++)
+ sEasyChatScreen->currentPhrase[i] = EC_EMPTY_WORD;
}
-static void sub_811B454(void)
+static void ResetCurrentPhraseToSaved(void)
{
int i;
- for (i = 0; i < sEasyChatScreen->unk_07; i++)
- sEasyChatScreen->ecWordBuffer[i] = sEasyChatScreen->words[i];
+ for (i = 0; i < sEasyChatScreen->maxWords; i++)
+ sEasyChatScreen->currentPhrase[i] = sEasyChatScreen->savedPhrase[i];
}
-static void sub_811B488(u16 easyChatWord)
+static void SetSelectedWord(u16 easyChatWord)
{
- u16 index = sub_811B8C8();
- sEasyChatScreen->ecWordBuffer[index] = easyChatWord;
+ u16 index = GetWordIndexToReplace();
+ sEasyChatScreen->currentPhrase[index] = easyChatWord;
}
-static u8 sub_811B4AC(void)
+// Compare current phrase to the original saved phrase
+static bool8 DidPhraseChange(void)
{
u16 i;
- for (i = 0; i < sEasyChatScreen->unk_07; i++)
+ for (i = 0; i < sEasyChatScreen->maxWords; i++)
{
- if (sEasyChatScreen->ecWordBuffer[i] != sEasyChatScreen->words[i])
- return 1;
+ if (sEasyChatScreen->currentPhrase[i] != sEasyChatScreen->savedPhrase[i])
+ return TRUE;
}
- return 0;
+ return FALSE;
}
-static int sub_811B4EC(void)
+// 'Completed' if the phrase was changed, or in the case of making a quiz, the question and answer were filled out
+static bool32 GetEasyChatCompleted(void)
{
- u8 var0 = sEasyChatScreen->type - EASY_CHAT_TYPE_QUIZ_SET_QUESTION;
- if (var0 < 2)
+ if (sEasyChatScreen->type == EASY_CHAT_TYPE_QUIZ_SET_QUESTION
+ || sEasyChatScreen->type == EASY_CHAT_TYPE_QUIZ_SET_ANSWER)
{
- if (sub_811BD64())
- return 0;
+ if (IsQuizQuestionEmpty())
+ return FALSE;
- if (sub_811BDB0())
- return 0;
+ if (IsQuizAnswerEmpty())
+ return FALSE;
- return 1;
+ return TRUE;
}
else
{
- return sub_811B4AC();
+ return DidPhraseChange();
}
}
-static u16 sub_811B528(int arg0)
+static u16 MoveKeyboardCursor(int input)
{
- if (sEasyChatScreen->unk_0a != -1)
+ if (sEasyChatScreen->keyboardColumn != -1)
{
- if (sEasyChatScreen->unk_09 == 0)
- return sub_811B568(arg0);
+ if (!sEasyChatScreen->inAlphabetMode)
+ return MoveKeyboardCursor_GroupNames(input);
else
- return sub_811B634(arg0);
+ return MoveKeyboardCursor_Alphabet(input);
}
else
{
- return sub_811B6C4(arg0);
+ return MoveKeyboardCursor_ButtonWindow(input);
}
}
-static int sub_811B568(u32 arg0)
+static int MoveKeyboardCursor_GroupNames(u32 input)
{
- switch (arg0)
+ switch (input)
{
- case 2:
- if (sEasyChatScreen->unk_0b != -sEasyChatScreen->unk_0c)
+ case INPUT_UP:
+ if (sEasyChatScreen->keyboardRow != -sEasyChatScreen->keyboardScrollOffset)
{
- if (sEasyChatScreen->unk_0b)
+ if (sEasyChatScreen->keyboardRow)
{
- sEasyChatScreen->unk_0b--;
- return 15;
+ sEasyChatScreen->keyboardRow--;
+ return ECFUNC_UPDATE_KEYBOARD_CURSOR;
}
else
{
- sEasyChatScreen->unk_0c--;
- return 17;
+ sEasyChatScreen->keyboardScrollOffset--;
+ return ECFUNC_GROUP_NAMES_SCROLL_UP;
}
}
break;
- case 3:
- if (sEasyChatScreen->unk_0b + sEasyChatScreen->unk_0c < sEasyChatScreen->unk_0d - 1)
+ case INPUT_DOWN:
+ if (sEasyChatScreen->keyboardRow + sEasyChatScreen->keyboardScrollOffset < sEasyChatScreen->keyboardLastRow - 1)
{
- int var0;
- if (sEasyChatScreen->unk_0b < 3)
+ int funcId;
+ if (sEasyChatScreen->keyboardRow < NUM_GROUP_NAME_ROWS - 1)
{
- sEasyChatScreen->unk_0b++;
- var0 = 15;
+ sEasyChatScreen->keyboardRow++;
+ funcId = ECFUNC_UPDATE_KEYBOARD_CURSOR;
}
else
{
- sEasyChatScreen->unk_0c++;
- var0 = 16;
+ sEasyChatScreen->keyboardScrollOffset++;
+ funcId = ECFUNC_GROUP_NAMES_SCROLL_DOWN;
}
- sub_811B978();
- return var0;
+ ReduceToValidKeyboardColumn();
+ return funcId;
}
break;
- case 1:
- if (sEasyChatScreen->unk_0a)
- sEasyChatScreen->unk_0a--;
+ case INPUT_LEFT:
+ if (sEasyChatScreen->keyboardColumn)
+ sEasyChatScreen->keyboardColumn--;
else
- sub_811B744();
+ SetKeyboardCursorInButtonWindow();
- return 15;
- case 0:
- if (sEasyChatScreen->unk_0a < 1)
+ return ECFUNC_UPDATE_KEYBOARD_CURSOR;
+ case INPUT_RIGHT:
+ if (sEasyChatScreen->keyboardColumn < 1)
{
- sEasyChatScreen->unk_0a++;
- if (sub_811B9C8())
- sub_811B744();
+ sEasyChatScreen->keyboardColumn++;
+ if (IsSelectedKeyboardIndexInvalid())
+ SetKeyboardCursorInButtonWindow();
}
else
{
- sub_811B744();
+ SetKeyboardCursorInButtonWindow();
}
- return 15;
+ return ECFUNC_UPDATE_KEYBOARD_CURSOR;
}
- return 0;
+ return ECFUNC_NONE;
}
-static int sub_811B634(u32 arg0)
+static int MoveKeyboardCursor_Alphabet(u32 input)
{
- switch (arg0)
+ switch (input)
{
- case 2:
- if (sEasyChatScreen->unk_0b > 0)
- sEasyChatScreen->unk_0b--;
+ case INPUT_UP:
+ if (sEasyChatScreen->keyboardRow > 0)
+ sEasyChatScreen->keyboardRow--;
else
- sEasyChatScreen->unk_0b = 3;
+ sEasyChatScreen->keyboardRow = NUM_ALPHABET_ROWS - 1;
- sub_811B978();
- return 15;
- case 3:
- if (sEasyChatScreen->unk_0b < 3)
- sEasyChatScreen->unk_0b++;
+ ReduceToValidKeyboardColumn();
+ return ECFUNC_UPDATE_KEYBOARD_CURSOR;
+ case INPUT_DOWN:
+ if (sEasyChatScreen->keyboardRow < NUM_ALPHABET_ROWS - 1)
+ sEasyChatScreen->keyboardRow++;
else
- sEasyChatScreen->unk_0b = 0;
+ sEasyChatScreen->keyboardRow = 0;
- sub_811B978();
- return 15;
- case 0:
- sEasyChatScreen->unk_0a++;
- if (sub_811B9C8())
- sub_811B744();
+ ReduceToValidKeyboardColumn();
+ return ECFUNC_UPDATE_KEYBOARD_CURSOR;
+ case INPUT_RIGHT:
+ sEasyChatScreen->keyboardColumn++;
+ if (IsSelectedKeyboardIndexInvalid())
+ SetKeyboardCursorInButtonWindow();
- return 15;
- case 1:
- sEasyChatScreen->unk_0a--;
- if (sEasyChatScreen->unk_0a < 0)
- sub_811B744();
+ return ECFUNC_UPDATE_KEYBOARD_CURSOR;
+ case INPUT_LEFT:
+ sEasyChatScreen->keyboardColumn--;
+ if (sEasyChatScreen->keyboardColumn < 0)
+ SetKeyboardCursorInButtonWindow();
- return 15;
+ return ECFUNC_UPDATE_KEYBOARD_CURSOR;
}
- return 0;
+ return ECFUNC_NONE;
}
-static int sub_811B6C4(u32 arg0)
+static int MoveKeyboardCursor_ButtonWindow(u32 input)
{
- switch (arg0)
+ switch (input)
{
- case 2:
- if (sEasyChatScreen->unk_0b)
- sEasyChatScreen->unk_0b--;
+ case INPUT_UP:
+ if (sEasyChatScreen->keyboardRow)
+ sEasyChatScreen->keyboardRow--;
else
- sEasyChatScreen->unk_0b = 2;
+ sEasyChatScreen->keyboardRow = NUM_BUTTON_ROWS - 1;
- return 15;
- case 3:
- if (sEasyChatScreen->unk_0b < 2)
- sEasyChatScreen->unk_0b++;
+ return ECFUNC_UPDATE_KEYBOARD_CURSOR;
+ case INPUT_DOWN:
+ if (sEasyChatScreen->keyboardRow < NUM_BUTTON_ROWS - 1)
+ sEasyChatScreen->keyboardRow++;
else
- sEasyChatScreen->unk_0b = 0;
+ sEasyChatScreen->keyboardRow = 0;
- return 15;
- case 1:
- sEasyChatScreen->unk_0b++;
- sub_811B768();
- return 15;
- case 0:
- sEasyChatScreen->unk_0a = 0;
- sEasyChatScreen->unk_0b++;
- return 15;
+ return ECFUNC_UPDATE_KEYBOARD_CURSOR;
+ case INPUT_LEFT:
+ sEasyChatScreen->keyboardRow++;
+ SetKeyboardCursorToLastColumn();
+ return ECFUNC_UPDATE_KEYBOARD_CURSOR;
+ case INPUT_RIGHT:
+ sEasyChatScreen->keyboardColumn = 0;
+ sEasyChatScreen->keyboardRow++;
+ return ECFUNC_UPDATE_KEYBOARD_CURSOR;
}
- return 0;
+ return ECFUNC_NONE;
}
-static void sub_811B744(void)
+static void SetKeyboardCursorInButtonWindow(void)
{
- sEasyChatScreen->unk_0a = 0xFF;
- if (sEasyChatScreen->unk_0b)
- sEasyChatScreen->unk_0b--;
+ sEasyChatScreen->keyboardColumn = -1;
+ if (sEasyChatScreen->keyboardRow)
+ sEasyChatScreen->keyboardRow--;
}
-static void sub_811B768(void)
+static void SetKeyboardCursorToLastColumn(void)
{
- if (sEasyChatScreen->unk_09 == 0)
+ if (!sEasyChatScreen->inAlphabetMode)
{
- sEasyChatScreen->unk_0a = 1;
- sub_811B978();
+ sEasyChatScreen->keyboardColumn = 1;
+ ReduceToValidKeyboardColumn();
}
else
{
- sEasyChatScreen->unk_0a = sub_811B960(sEasyChatScreen->unk_0b);
+ sEasyChatScreen->keyboardColumn = GetLastAlphabetColumn(sEasyChatScreen->keyboardRow);
}
}
-static u16 sub_811B794(u32 arg0)
+static u16 MoveWordSelectCursor(u32 input)
{
- u16 result;
- switch (arg0)
+ u16 funcId;
+ switch (input)
{
- case 2:
- if (sEasyChatScreen->unk_11 + sEasyChatScreen->unk_0e > 0)
+ case INPUT_UP:
+ if (sEasyChatScreen->wordSelectRow + sEasyChatScreen->wordSelectScrollOffset > 0)
{
- if (sEasyChatScreen->unk_11 > 0)
+ if (sEasyChatScreen->wordSelectRow > 0)
{
- sEasyChatScreen->unk_11--;
- result = 18;
+ sEasyChatScreen->wordSelectRow--;
+ funcId = ECFUNC_UPDATE_WORD_SELECT_CURSOR;
}
else
{
- sEasyChatScreen->unk_0e--;
- result = 19;
+ sEasyChatScreen->wordSelectScrollOffset--;
+ funcId = ECFUNC_WORD_SELECT_SCROLL_UP;
}
- sub_811B9A0();
- return result;
+ ReduceToValidWordSelectColumn();
+ return funcId;
}
break;
- case 3:
- if (sEasyChatScreen->unk_11 + sEasyChatScreen->unk_0e < sEasyChatScreen->unk_0f)
+ case INPUT_DOWN:
+ if (sEasyChatScreen->wordSelectRow + sEasyChatScreen->wordSelectScrollOffset < sEasyChatScreen->wordSelectLastRow)
{
- if (sEasyChatScreen->unk_11 < 3)
+ if (sEasyChatScreen->wordSelectRow < NUM_WORD_SELECT_ROWS - 1)
{
- sEasyChatScreen->unk_11++;
- result = 18;
+ sEasyChatScreen->wordSelectRow++;
+ funcId = ECFUNC_UPDATE_WORD_SELECT_CURSOR;
}
else
{
- sEasyChatScreen->unk_0e++;
- result = 20;
+ sEasyChatScreen->wordSelectScrollOffset++;
+ funcId = ECFUNC_WORD_SELECT_SCROLL_DOWN;
}
- sub_811B9A0();
- return result;
+ ReduceToValidWordSelectColumn();
+ return funcId;
}
break;
- case 1:
- if (sEasyChatScreen->unk_10 > 0)
- sEasyChatScreen->unk_10--;
+ case INPUT_LEFT:
+ if (sEasyChatScreen->wordSelectColumn > 0)
+ sEasyChatScreen->wordSelectColumn--;
else
- sEasyChatScreen->unk_10 = 1;
+ sEasyChatScreen->wordSelectColumn = 1;
- sub_811B9A0();
- return 18;
- case 0:
- if (sEasyChatScreen->unk_10 < 1)
+ ReduceToValidWordSelectColumn();
+ return ECFUNC_UPDATE_WORD_SELECT_CURSOR;
+ case INPUT_RIGHT:
+ if (sEasyChatScreen->wordSelectColumn < 1)
{
- sEasyChatScreen->unk_10++;
- if (sub_811BA1C())
- sEasyChatScreen->unk_10 = 0;
+ sEasyChatScreen->wordSelectColumn++;
+ if (IsSelectedWordIndexInvalid())
+ sEasyChatScreen->wordSelectColumn = 0;
}
else
{
- sEasyChatScreen->unk_10 = 0;
+ sEasyChatScreen->wordSelectColumn = 0;
}
- return 18;
- case 4:
- if (sEasyChatScreen->unk_0e)
+ return ECFUNC_UPDATE_WORD_SELECT_CURSOR;
+ case INPUT_START:
+ // Page scroll up
+ if (sEasyChatScreen->wordSelectScrollOffset)
{
- if (sEasyChatScreen->unk_0e > 3)
- sEasyChatScreen->unk_0e -= 4;
+ if (sEasyChatScreen->wordSelectScrollOffset >= NUM_WORD_SELECT_ROWS)
+ sEasyChatScreen->wordSelectScrollOffset -= NUM_WORD_SELECT_ROWS;
else
- sEasyChatScreen->unk_0e = 0;
+ sEasyChatScreen->wordSelectScrollOffset = 0;
- return 21;
+ return ECFUNC_WORD_SELECT_PAGE_UP;
}
break;
- case 5:
- if (sEasyChatScreen->unk_0e <= sEasyChatScreen->unk_0f - 4)
+ case INPUT_SELECT:
+ // Page scroll down
+ if (sEasyChatScreen->wordSelectScrollOffset <= sEasyChatScreen->wordSelectLastRow - NUM_WORD_SELECT_ROWS)
{
- sEasyChatScreen->unk_0e += 4;
- if (sEasyChatScreen->unk_0e > sEasyChatScreen->unk_0f - 3)
- sEasyChatScreen->unk_0e = sEasyChatScreen->unk_0f + 0xFD;
+ sEasyChatScreen->wordSelectScrollOffset += NUM_WORD_SELECT_ROWS;
+ if (sEasyChatScreen->wordSelectScrollOffset > sEasyChatScreen->wordSelectLastRow - NUM_WORD_SELECT_ROWS + 1)
+ sEasyChatScreen->wordSelectScrollOffset = sEasyChatScreen->wordSelectLastRow - NUM_WORD_SELECT_ROWS + 1;
- sub_811B9A0();
- return 22;
+ ReduceToValidWordSelectColumn();
+ return ECFUNC_WORD_SELECT_PAGE_DOWN;
}
break;
}
- return 0;
+ return ECFUNC_NONE;
}
-static u16 sub_811B8C8(void)
+static u16 GetWordIndexToReplace(void)
{
return (sEasyChatScreen->mainCursorRow * sEasyChatScreen->numColumns) + sEasyChatScreen->mainCursorColumn;
}
-static u16 sub_811B8E8(void)
+static u16 GetSelectedGroupIndex(void)
{
- return 2 * (sEasyChatScreen->unk_0b + sEasyChatScreen->unk_0c) + sEasyChatScreen->unk_0a;
+ return NUM_GROUP_NAME_COLUMNS * (sEasyChatScreen->keyboardRow + sEasyChatScreen->keyboardScrollOffset) + sEasyChatScreen->keyboardColumn;
}
-static int sub_811B908(void)
+static int GetSelectedAlphabetGroupId(void)
{
- int var0 = (u8)sEasyChatScreen->unk_0a < 7 ? sEasyChatScreen->unk_0a : 0;
- int var1 = (u8)sEasyChatScreen->unk_0b < 4 ? sEasyChatScreen->unk_0b : 0;
- return sUnknown_08597748[var1][var0];
+ int column = (u8)sEasyChatScreen->keyboardColumn < NUM_ALPHABET_COLUMNS ? sEasyChatScreen->keyboardColumn : 0;
+ int row = (u8)sEasyChatScreen->keyboardRow < NUM_ALPHABET_ROWS ? sEasyChatScreen->keyboardRow : 0;
+ return sAlphabetGroupIdMap[row][column];
}
-static u16 sub_811B940(void)
+static u16 GetSelectedWordIndex(void)
{
- return 2 * (sEasyChatScreen->unk_11 + sEasyChatScreen->unk_0e) + sEasyChatScreen->unk_10;
+ return NUM_WORD_SELECT_COLUMNS * (sEasyChatScreen->wordSelectRow + sEasyChatScreen->wordSelectScrollOffset) + sEasyChatScreen->wordSelectColumn;
}
-static u8 sub_811B960(u8 arg0)
+// Get the index of the last column in the alphabet keyboard, depending on current row
+static u8 GetLastAlphabetColumn(u8 row)
{
- switch (arg0)
+ switch (row)
{
case 0:
default:
- return 6;
+ return NUM_ALPHABET_COLUMNS - 1;
case 1:
- return 5;
+ return NUM_ALPHABET_COLUMNS - 2; // At 6 letters, only the 2nd row (index 1) has less than the max columns
+ // The 3rd and 4th row have 7 letters, the 1st row has 6 letters and 'Others'
}
}
-static void sub_811B978(void)
+static void ReduceToValidKeyboardColumn(void)
{
- while (sub_811B9C8())
+ while (IsSelectedKeyboardIndexInvalid())
{
- if (sEasyChatScreen->unk_0a)
- sEasyChatScreen->unk_0a--;
+ if (sEasyChatScreen->keyboardColumn)
+ sEasyChatScreen->keyboardColumn--;
else
break;
}
}
-static void sub_811B9A0(void)
+static void ReduceToValidWordSelectColumn(void)
{
- while (sub_811BA1C())
+ while (IsSelectedWordIndexInvalid())
{
- if (sEasyChatScreen->unk_10)
- sEasyChatScreen->unk_10--;
+ if (sEasyChatScreen->wordSelectColumn)
+ sEasyChatScreen->wordSelectColumn--;
else
break;
}
}
-static u8 sub_811B9C8(void)
+static bool8 IsSelectedKeyboardIndexInvalid(void)
{
- if (sEasyChatScreen->unk_09 == 0)
- return sub_811B8E8() >= sub_811F3AC() ? 1 : 0;
+ if (!sEasyChatScreen->inAlphabetMode)
+ return GetSelectedGroupIndex() >= GetNumUnlockedEasyChatGroups() ? TRUE : FALSE;
else
- return sEasyChatScreen->unk_0a > sub_811B960(sEasyChatScreen->unk_0b) ? 1 : 0;
+ return sEasyChatScreen->keyboardColumn > GetLastAlphabetColumn(sEasyChatScreen->keyboardRow) ? TRUE : FALSE;
}
-static u8 sub_811BA1C(void)
+static bool8 IsSelectedWordIndexInvalid(void)
{
- return sub_811B940() >= sub_811F5B0() ? 1 : 0;
+ return GetSelectedWordIndex() >= GetNumWordsInSelectedGroup() ? TRUE : FALSE;
}
static int FooterHasFourOptions(void)
@@ -2456,9 +2675,9 @@ const u8 *GetTitleText(void)
return sEasyChatScreen->titleText;
}
-static u16 *GetEasyChatWordBuffer(void)
+static u16 *GetCurrentPhrase(void)
{
- return sEasyChatScreen->ecWordBuffer;
+ return sEasyChatScreen->currentPhrase;
}
static u8 GetNumRows(void)
@@ -2493,7 +2712,7 @@ static void GetEasyChatConfirmText(const u8 **str1, const u8 **str2)
*str2 = sEasyChatScreenTemplates[sEasyChatScreen->templateId].confirmText2;
}
-static void sub_811BB40(const u8 **str1, const u8 **str2)
+static void GetEasyChatConfirmExitText(const u8 **str1, const u8 **str2)
{
switch (sEasyChatScreen->type)
{
@@ -2520,75 +2739,75 @@ static void GetEasyChatConfirmDeletionText(const u8 **str1, const u8 **str2)
*str2 = gText_BeDeletedThatOkay;
}
-void sub_811BB9C(u8 *arg0, u8 *arg1)
+static void GetKeyboardCursorColAndRow(u8 *column, u8 *row)
{
- *arg0 = sEasyChatScreen->unk_0a;
- *arg1 = sEasyChatScreen->unk_0b;
+ *column = sEasyChatScreen->keyboardColumn;
+ *row = sEasyChatScreen->keyboardRow;
}
-u8 sub_811BBB0(void)
+static bool8 GetInAlphabetMode(void)
{
- return sEasyChatScreen->unk_09;
+ return sEasyChatScreen->inAlphabetMode;
}
-u8 sub_811BBBC(void)
+static u8 GetKeyboardScrollOffset(void)
{
- return sEasyChatScreen->unk_0c;
+ return sEasyChatScreen->keyboardScrollOffset;
}
-void sub_811BBC8(u8 *arg0, u8 *arg1)
+static void GetWordSelectColAndRow(u8 *column, u8 *row)
{
- *arg0 = sEasyChatScreen->unk_10;
- *arg1 = sEasyChatScreen->unk_11;
+ *column = sEasyChatScreen->wordSelectColumn;
+ *row = sEasyChatScreen->wordSelectRow;
}
-u8 sub_811BBDC(void)
+static u8 GetWordSelectScrollOffset(void)
{
- return sEasyChatScreen->unk_0e;
+ return sEasyChatScreen->wordSelectScrollOffset;
}
-u8 sub_811BBE8(void)
+static u8 GetWordSelectLastRow(void)
{
- return sEasyChatScreen->unk_0f;
+ return sEasyChatScreen->wordSelectLastRow;
}
-static u8 unref_sub_811BBF4(void)
+static u8 UnusedDummy(void)
{
- return 0;
+ return FALSE;
}
-int sub_811BBF8(void)
+static bool32 CanScrollUp(void)
{
- switch (sEasyChatScreen->state)
+ switch (sEasyChatScreen->inputState)
{
- case 2:
- if (sEasyChatScreen->unk_09 == 0 && sEasyChatScreen->unk_0c)
- return 1;
+ case INPUTSTATE_KEYBOARD:
+ if (!sEasyChatScreen->inAlphabetMode && sEasyChatScreen->keyboardScrollOffset)
+ return TRUE;
break;
- case 3:
- if (sEasyChatScreen->unk_0e)
- return 1;
+ case INPUTSTATE_WORD_SELECT:
+ if (sEasyChatScreen->wordSelectScrollOffset)
+ return TRUE;
break;
}
- return 0;
+ return FALSE;
}
-int sub_811BC2C(void)
+static bool32 CanScrollDown(void)
{
- switch (sEasyChatScreen->state)
+ switch (sEasyChatScreen->inputState)
{
- case 2:
- if (sEasyChatScreen->unk_09 == 0 && sEasyChatScreen->unk_0c + 4 <= sEasyChatScreen->unk_0d - 1)
- return 1;
+ case INPUTSTATE_KEYBOARD:
+ if (!sEasyChatScreen->inAlphabetMode && sEasyChatScreen->keyboardScrollOffset + NUM_GROUP_NAME_ROWS <= sEasyChatScreen->keyboardLastRow - 1)
+ return TRUE;
break;
- case 3:
- if (sEasyChatScreen->unk_0e + 4 <= sEasyChatScreen->unk_0f)
- return 1;
+ case INPUTSTATE_WORD_SELECT:
+ if (sEasyChatScreen->wordSelectScrollOffset + NUM_WORD_SELECT_ROWS <= sEasyChatScreen->wordSelectLastRow)
+ return TRUE;
break;
}
- return 0;
+ return FALSE;
}
static int FooterHasFourOptions_(void)
@@ -2602,7 +2821,7 @@ static bool8 IsPhraseDifferentThanPlayerInput(const u16 *phrase, u8 phraseLength
for (i = 0; i < phraseLength; i++)
{
- if (phrase[i] != sEasyChatScreen->ecWordBuffer[i])
+ if (phrase[i] != sEasyChatScreen->currentPhrase[i])
return TRUE;
}
@@ -2627,65 +2846,67 @@ static u8 GetEachChatScreenTemplateId(u8 type)
return 0;
}
-static int sub_811BCF4(void)
+static bool32 IsCurrentPhraseEmpty(void)
{
int i;
- for (i = 0; i < sEasyChatScreen->unk_07; i++)
+ for (i = 0; i < sEasyChatScreen->maxWords; i++)
{
- if (sEasyChatScreen->ecWordBuffer[i] != 0xFFFF)
- return 0;
+ if (sEasyChatScreen->currentPhrase[i] != EC_EMPTY_WORD)
+ return FALSE;
}
- return 1;
+ return TRUE;
}
-static int sub_811BD2C(void)
+static bool32 IsCurrentPhraseFull(void)
{
int i;
- for (i = 0; i < sEasyChatScreen->unk_07; i++)
+ for (i = 0; i < sEasyChatScreen->maxWords; i++)
{
- if (sEasyChatScreen->ecWordBuffer[i] == 0xFFFF)
- return 0;
+ if (sEasyChatScreen->currentPhrase[i] == EC_EMPTY_WORD)
+ return FALSE;
}
- return 1;
+ return TRUE;
}
-static int sub_811BD64(void)
+static int IsQuizQuestionEmpty(void)
{
int i;
struct SaveBlock1 *saveBlock1;
if (sEasyChatScreen->type == EASY_CHAT_TYPE_QUIZ_SET_QUESTION)
- return sub_811BCF4();
+ return IsCurrentPhraseEmpty();
saveBlock1 = gSaveBlock1Ptr;
for (i = 0; i < QUIZ_QUESTION_LEN; i++)
{
- if (saveBlock1->lilycoveLady.quiz.question[i] != 0xFFFF)
- return 0;
+ if (saveBlock1->lilycoveLady.quiz.question[i] != EC_EMPTY_WORD)
+ return FALSE;
}
- return 1;
+ return TRUE;
}
-static int sub_811BDB0(void)
+static int IsQuizAnswerEmpty(void)
{
struct LilycoveLadyQuiz *quiz;
if (sEasyChatScreen->type == EASY_CHAT_TYPE_QUIZ_SET_ANSWER)
- return sub_811BCF4();
+ return IsCurrentPhraseEmpty();
quiz = &gSaveBlock1Ptr->lilycoveLady.quiz;
- return quiz->correctAnswer == 0xFFFF ? 1 : 0;
+ return quiz->correctAnswer == EC_EMPTY_WORD ? TRUE : FALSE;
}
-static void sub_811BDF0(u8 *arg0)
+static void GetQuizTitle(u8 *dst)
{
u8 name[32];
struct SaveBlock1 *saveBlock1 = gSaveBlock1Ptr;
DynamicPlaceholderTextUtil_Reset();
+
+ // Buffer author's name
if (StringLength(saveBlock1->lilycoveLady.quiz.playerName) != 0)
{
TVShowConvertInternationalString(name, saveBlock1->lilycoveLady.quiz.playerName, saveBlock1->lilycoveLady.quiz.language);
@@ -2696,32 +2917,33 @@ static void sub_811BDF0(u8 *arg0)
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gText_Lady);
}
- DynamicPlaceholderTextUtil_ExpandPlaceholders(arg0, gText_F700sQuiz);
+ // "<author>'s Quiz"
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(dst, gText_F700sQuiz);
}
-static void sub_811BE54(void)
+static void BufferCurrentPhraseToStringVar2(void)
{
int i;
- u16 *ecWord;
+ u16 *phrase;
u8 *str;
- ecWord = sEasyChatScreen->ecWordBuffer;
+ phrase = sEasyChatScreen->currentPhrase;
str = gStringVar2;
i = 0;
- while (i < sEasyChatScreen->unk_07)
+ while (i < sEasyChatScreen->maxWords)
{
- str = CopyEasyChatWordPadded(str, *ecWord, 0);
+ str = CopyEasyChatWordPadded(str, *phrase, 0);
*str = 0;
str++;
- ecWord++;
+ phrase++;
i++;
}
str--;
- str[0] = 0xFF;
+ str[0] = EOS;
}
-static void sub_811BE9C(void)
+static void SetSpecialEasyChatResult(void)
{
switch (sEasyChatScreen->type)
{
@@ -2735,8 +2957,8 @@ static void sub_811BE9C(void)
gSpecialVar_0x8004 = 0;
break;
case EASY_CHAT_TYPE_TRENDY_PHRASE:
- sub_811BE54();
- gSpecialVar_0x8004 = sub_81226D8(sEasyChatScreen->ecWordBuffer);
+ BufferCurrentPhraseToStringVar2();
+ gSpecialVar_0x8004 = IsPhraseTrendy(sEasyChatScreen->currentPhrase);
break;
case EASY_CHAT_TYPE_GOOD_SAYING:
gSpecialVar_0x8004 = DidPlayerInputABerryMasterWifePhrase();
@@ -2761,62 +2983,62 @@ static u16 DidPlayerInputABerryMasterWifePhrase(void)
return 0;
}
-static void sub_811BF78(void)
+static void ClearUnusedField(void)
{
- sEasyChatScreen->unk_13 = 0;
+ sEasyChatScreen->unused = 0;
}
-static int sub_811BF88(int easyChatWord)
+static bool32 DummyWordCheck(int easyChatWord)
{
- return 0;
+ return FALSE;
}
-static bool8 sub_811BF8C(void)
+static bool8 InitEasyChatScreenControl(void)
{
- if (!sub_811CE94())
- return 0;
+ if (!InitEasyChatScreenControl_())
+ return FALSE;
else
- return 1;
+ return TRUE;
}
-static bool8 sub_811BFA4(void)
+static bool8 LoadEasyChatScreen(void)
{
- switch (sUnknown_0203A11C->unk0)
+ switch (sScreenControl->funcState)
{
case 0:
ResetBgsAndClearDma3BusyFlags(0);
InitBgsFromTemplates(0, sEasyChatBgTemplates, ARRAY_COUNT(sEasyChatBgTemplates));
- SetBgTilemapBuffer(3, sUnknown_0203A11C->unkB00);
- SetBgTilemapBuffer(1, sUnknown_0203A11C->unk300);
+ SetBgTilemapBuffer(3, sScreenControl->bg3TilemapBuffer);
+ SetBgTilemapBuffer(1, sScreenControl->bg1TilemapBuffer);
InitWindows(sEasyChatWindowTemplates);
DeactivateAllTextPrinters();
- sub_811CF64();
- sub_811CF04();
+ LoadEasyChatPalettes();
+ InitEasyChatBgs();
CpuFastFill(0, (void *)OAM, OAM_SIZE);
break;
case 1:
DecompressAndLoadBgGfxUsingHeap(3, gEasyChatWindow_Gfx, 0, 0, 0);
CopyToBgTilemapBuffer(3, gEasyChatWindow_Tilemap, 0, 0);
- sub_811D60C();
- sub_811D424(sUnknown_0203A11C->unk300);
- sub_811D230();
- sub_811E948();
+ AdjustBgTilemapForFooter();
+ BufferFrameTilemap(sScreenControl->bg1TilemapBuffer);
+ AddPhraseWindow();
+ AddMainScreenButtonWindow();
CopyBgTilemapBufferToVram(3);
break;
case 2:
- DecompressAndLoadBgGfxUsingHeap(1, sUnknown_08597B54, 0, 0, 0);
+ DecompressAndLoadBgGfxUsingHeap(1, sTextInputFrame_Gfx, 0, 0, 0);
CopyBgTilemapBufferToVram(1);
break;
case 3:
- sub_811CFCC();
- sub_811D0BC();
- sub_811D2C8();
- sub_811D684();
+ PrintTitle();
+ PrintInitialInstructions();
+ PrintCurrentPhrase();
+ DrawLowerWindow();
break;
case 4:
- sub_811DE90();
+ LoadEasyChatGfx();
if (GetEasyChatScreenType() != EASY_CHAT_TYPE_QUIZ_QUESTION)
- sub_811DEC4();
+ CreateMainCursorSprite();
break;
case 5:
if (IsDma3ManagerBusyWithBgCopy())
@@ -2825,7 +3047,7 @@ static bool8 sub_811BFA4(void)
}
else
{
- sub_811DE5C(0, 0, 0, 0);
+ SetWindowDimensions(0, 0, 0, 0);
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR);
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0
| WINOUT_WIN01_BG1
@@ -2836,82 +3058,84 @@ static bool8 sub_811BFA4(void)
ShowBg(1);
ShowBg(2);
ShowBg(0);
- sub_811E5D4();
- sub_811E720();
- sub_811E828();
+ CreateScrollIndicatorSprites();
+ CreateStartSelectButtonSprites();
+ TryAddInterviewObjectEvents();
}
break;
default:
return FALSE;
}
- sUnknown_0203A11C->unk0++;
+ sScreenControl->funcState++;
return TRUE;
}
-static void sub_811C13C(void)
-{
- if (sUnknown_0203A11C)
- FREE_AND_SET_NULL(sUnknown_0203A11C);
-}
-
-static void sub_811C158(u16 arg0)
-{
- sUnknown_0203A11C->unk4 = arg0;
- sUnknown_0203A11C->unk0 = 0;
- sub_811C170();
-}
-
-static bool8 sub_811C170(void)
-{
- switch (sUnknown_0203A11C->unk4)
- {
- case 0: return FALSE;
- case 1: return sub_811C2D4();
- case 2: return sub_811C30C();
- case 3: return sub_811C3E4();
- case 4: return sub_811C48C();
- case 5: return sub_811C404();
- case 6: return sub_811C448();
- case 7: return sub_811C4D0();
- case 8: return sub_811C518();
- case 9: return sub_811C554();
- case 10: return sub_811C620();
- case 11: return sub_811C830();
- case 12: return sub_811C8F0();
- case 13: return sub_811C99C();
- case 14: return sub_811CA5C();
- case 15: return sub_811C780();
- case 16: return sub_811C78C();
- case 17: return sub_811C7D4();
- case 18: return sub_811CB18();
- case 19: return sub_811CB98();
- case 20: return sub_811CB24();
- case 21: return sub_811CC90();
- case 22: return sub_811CC08();
- case 23: return sub_811C6C0();
- case 24: return FALSE;
- case 25: return FALSE;
- case 26: return FALSE;
- case 27: return FALSE;
- case 28: return FALSE;
- case 29: return sub_811CD14();
- case 30: return sub_811CD54();
- case 31: return sub_811CD94();
- case 32: return sub_811CDD4();
- case 33: return sub_811CE14();
- case 34: return sub_811CE54();
- default: return FALSE;
- }
-}
-
-static bool8 sub_811C2D4(void)
-{
- switch (sUnknown_0203A11C->unk0)
+static void FreeEasyChatScreenControl(void)
+{
+ if (sScreenControl)
+ FREE_AND_SET_NULL(sScreenControl);
+}
+
+static void StartEasyChatFunction(u16 funcId)
+{
+ sScreenControl->currentFuncId = funcId;
+ sScreenControl->funcState = 0;
+ RunEasyChatFunction();
+}
+
+// Returns FALSE when called function has finished
+static bool8 RunEasyChatFunction(void)
+{
+ switch (sScreenControl->currentFuncId)
+ {
+ case ECFUNC_NONE: return FALSE;
+ case ECFUNC_REPRINT_PHRASE: return ReprintPhrase();
+ case ECFUNC_UPDATE_MAIN_CURSOR: return UpdateMainCursor();
+ case ECFUNC_UPDATE_MAIN_CURSOR_ON_BUTTONS: return UpdateMainCursorOnButtons();
+ case ECFUNC_PROMPT_DELETE_ALL: return ShowConfirmDeleteAllPrompt();
+ case ECFUNC_PROMPT_EXIT: return ShowConfirmExitPrompt();
+ case ECFUNC_PROMPT_CONFIRM: return ShowConfirmPrompt();
+ case ECFUNC_CLOSE_PROMPT: return ClosePrompt();
+ case ECFUNC_CLOSE_PROMPT_AFTER_DELETE: return ClosePromptAfterDeleteAll();
+ case ECFUNC_OPEN_KEYBOARD: return OpenKeyboard();
+ case ECFUNC_CLOSE_KEYBOARD: return CloseKeyboard();
+ case ECFUNC_OPEN_WORD_SELECT: return OpenWordSelect();
+ case ECFUNC_CLOSE_WORD_SELECT: return CloseWordSelect();
+ case ECFUNC_PROMPT_CONFIRM_LYRICS: return ShowConfirmLyricsPrompt();
+ case ECFUNC_RETURN_TO_KEYBOARD: return ReturnToKeyboard();
+ case ECFUNC_UPDATE_KEYBOARD_CURSOR: return UpdateKeyboardCursor();
+ case ECFUNC_GROUP_NAMES_SCROLL_DOWN: return GroupNamesScrollDown();
+ case ECFUNC_GROUP_NAMES_SCROLL_UP: return GroupNamesScrollUp();
+ case ECFUNC_UPDATE_WORD_SELECT_CURSOR: return UpdateWordSelectCursor();
+ case ECFUNC_WORD_SELECT_SCROLL_UP: return WordSelectScrollUp();
+ case ECFUNC_WORD_SELECT_SCROLL_DOWN: return WordSelectScrollDown();
+ case ECFUNC_WORD_SELECT_PAGE_UP: return WordSelectPageScrollUp();
+ case ECFUNC_WORD_SELECT_PAGE_DOWN: return WordSelectPageScrollDown();
+ case ECFUNC_SWITCH_KEYBOARD_MODE: return SwitchKeyboardMode();
+ case ECFUNC_EXIT: return FALSE;
+ case ECFUNC_QUIZ_QUESTION: return FALSE; // The 4 quiz functions
+ case ECFUNC_QUIZ_ANSWER: return FALSE; // 'finish' automatically
+ case ECFUNC_SET_QUIZ_QUESTION: return FALSE; // because they switch to a
+ case ECFUNC_SET_QUIZ_ANSWER: return FALSE; // callback in sQuizLadyEasyChatScreens
+ case ECFUNC_MSG_CREATE_QUIZ: return ShowCreateQuizMsg();
+ case ECFUNC_MSG_SELECT_ANSWER: return ShowSelectAnswerMsg();
+ case ECFUNC_MSG_SONG_TOO_SHORT: return ShowSongTooShortMsg();
+ case ECFUNC_MSG_CANT_DELETE_LYRICS: return ShowCantDeleteLyricsMsg();
+ case ECFUNC_MSG_COMBINE_TWO_WORDS: return ShowCombineTwoWordsMsg();
+ case ECFUNC_MSG_CANT_EXIT: return ShowCantExitMsg();
+ default: return FALSE;
+ }
+}
+
+// Only used to update the current phrase after a word deletion
+static bool8 ReprintPhrase(void)
+{
+ switch (sScreenControl->funcState)
{
case 0:
- sub_811D2C8();
- sUnknown_0203A11C->unk0++;
+ PrintCurrentPhrase();
+ sScreenControl->funcState++;
break;
case 1:
return IsDma3ManagerBusyWithBgCopy();
@@ -2920,29 +3144,29 @@ static bool8 sub_811C2D4(void)
return TRUE;
}
-static bool8 sub_811C30C(void)
+static bool8 UpdateMainCursor(void)
{
u8 i;
- u16 *ecWordBuffer;
+ u16 *currentPhrase;
u16 *ecWord;
u8 frameId;
u8 cursorColumn, cursorRow, numColumns;
- s16 var1;
+ s16 x;
int stringWidth;
int trueStringWidth;
- u8 var2;
+ u8 y;
u8 str[64];
- ecWordBuffer = GetEasyChatWordBuffer();
+ currentPhrase = GetCurrentPhrase();
frameId = GetEasyChatScreenFrameId();
cursorColumn = GetMainCursorColumn();
cursorRow = GetMainCursorRow();
numColumns = GetNumColumns();
- ecWord = &ecWordBuffer[cursorRow * numColumns];
- var1 = 8 * sPhraseFrameDimensions[frameId].left + 13;
+ ecWord = &currentPhrase[cursorRow * numColumns];
+ x = 8 * sPhraseFrameDimensions[frameId].left + 13;
for (i = 0; i < cursorColumn; i++)
{
- if (*ecWord == 0xFFFF)
+ if (*ecWord == EC_EMPTY_WORD)
{
stringWidth = 72;
}
@@ -2953,31 +3177,31 @@ static bool8 sub_811C30C(void)
}
trueStringWidth = stringWidth + 17;
- var1 += trueStringWidth;
+ x += trueStringWidth;
ecWord++;
}
- var2 = 8 * (sPhraseFrameDimensions[frameId].top + cursorRow * 2);
- sub_811DF60(var1, var2 + 8);
+ y = 8 * (sPhraseFrameDimensions[frameId].top + cursorRow * 2);
+ SetMainCursorPos(x, y + 8);
return FALSE;
}
-static bool8 sub_811C3E4(void)
+static bool8 UpdateMainCursorOnButtons(void)
{
u8 xOffset = GetFooterOptionXOffset(GetMainCursorColumn());
- sub_811DF60(xOffset, 96);
+ SetMainCursorPos(xOffset, 96);
return FALSE;
}
-static bool8 sub_811C404(void)
+static bool8 ShowConfirmExitPrompt(void)
{
- switch (sUnknown_0203A11C->unk0)
+ switch (sScreenControl->funcState)
{
case 0:
- sub_811DF90();
- sub_811D104(2);
- sub_811D214(1);
- sUnknown_0203A11C->unk0++;
+ StopMainCursorAnim();
+ PrintEasyChatStdMessage(MSG_CONFIRM_EXIT);
+ CreateEasyChatYesNoMenu(1);
+ sScreenControl->funcState++;
break;
case 1:
return IsDma3ManagerBusyWithBgCopy();
@@ -2986,15 +3210,15 @@ static bool8 sub_811C404(void)
return TRUE;
}
-static bool8 sub_811C448(void)
+static bool8 ShowConfirmPrompt(void)
{
- switch (sUnknown_0203A11C->unk0)
+ switch (sScreenControl->funcState)
{
case 0:
- sub_811DF90();
- sub_811D104(3);
- sub_811D214(0);
- sUnknown_0203A11C->unk0++;
+ StopMainCursorAnim();
+ PrintEasyChatStdMessage(MSG_CONFIRM);
+ CreateEasyChatYesNoMenu(0);
+ sScreenControl->funcState++;
break;
case 1:
return IsDma3ManagerBusyWithBgCopy();
@@ -3003,15 +3227,15 @@ static bool8 sub_811C448(void)
return TRUE;
}
-static bool8 sub_811C48C(void)
+static bool8 ShowConfirmDeleteAllPrompt(void)
{
- switch (sUnknown_0203A11C->unk0)
+ switch (sScreenControl->funcState)
{
case 0:
- sub_811DF90();
- sub_811D104(1);
- sub_811D214(1);
- sUnknown_0203A11C->unk0++;
+ StopMainCursorAnim();
+ PrintEasyChatStdMessage(MSG_CONFIRM_DELETE);
+ CreateEasyChatYesNoMenu(1);
+ sScreenControl->funcState++;
break;
case 1:
return IsDma3ManagerBusyWithBgCopy();
@@ -3020,16 +3244,16 @@ static bool8 sub_811C48C(void)
return TRUE;
}
-static bool8 sub_811C4D0(void)
+static bool8 ClosePrompt(void)
{
- switch (sUnknown_0203A11C->unk0)
+ switch (sScreenControl->funcState)
{
case 0:
- sub_811DFB0();
- sub_811D104(0);
- sub_811D2C8();
+ StartMainCursorAnim();
+ PrintEasyChatStdMessage(MSG_INSTRUCTIONS);
+ PrintCurrentPhrase();
ShowBg(0);
- sUnknown_0203A11C->unk0++;
+ sScreenControl->funcState++;
break;
case 1:
return IsDma3ManagerBusyWithBgCopy();
@@ -3038,15 +3262,15 @@ static bool8 sub_811C4D0(void)
return TRUE;
}
-static bool8 sub_811C518(void)
+static bool8 ClosePromptAfterDeleteAll(void)
{
- switch (sUnknown_0203A11C->unk0)
+ switch (sScreenControl->funcState)
{
case 0:
- sub_811DFB0();
- sub_811D104(0);
- sub_811D2C8();
- sUnknown_0203A11C->unk0++;
+ StartMainCursorAnim();
+ PrintEasyChatStdMessage(MSG_INSTRUCTIONS);
+ PrintCurrentPhrase();
+ sScreenControl->funcState++;
// Fall through
case 1:
return IsDma3ManagerBusyWithBgCopy();
@@ -3055,42 +3279,42 @@ static bool8 sub_811C518(void)
return TRUE;
}
-static bool8 sub_811C554(void)
+static bool8 OpenKeyboard(void)
{
- switch (sUnknown_0203A11C->unk0)
+ switch (sScreenControl->funcState)
{
case 0:
- sub_811DF90();
+ StopMainCursorAnim();
HideBg(0);
- sub_811DE5C(0, 0, 0, 0);
- sub_811D6D4();
- sUnknown_0203A11C->unk0++;
+ SetWindowDimensions(0, 0, 0, 0);
+ PrintKeyboardText();
+ sScreenControl->funcState++;
break;
case 1:
if (!IsDma3ManagerBusyWithBgCopy())
{
- sub_811D9CC(0);
- sUnknown_0203A11C->unk0++;
+ InitLowerWindowAnim(WINANIM_OPEN_KEYBOARD);
+ sScreenControl->funcState++;
}
break;
case 2:
- if (!IsDma3ManagerBusyWithBgCopy() && !sub_811DAA4())
- sUnknown_0203A11C->unk0++;
+ if (!IsDma3ManagerBusyWithBgCopy() && !UpdateLowerWindowAnim())
+ sScreenControl->funcState++;
break;
case 3:
if (!IsDma3ManagerBusyWithBgCopy())
{
- sub_811E3AC();
- sUnknown_0203A11C->unk0++;
+ CreateSideWindowSprites();
+ sScreenControl->funcState++;
}
break;
case 4:
- if (!sub_811E418())
+ if (!ShowSideWindow())
{
- sub_811DFC8();
- sub_811E6E0(0);
- sub_811E64C();
- sUnknown_0203A11C->unk0++;
+ CreateRectangleCursorSprites();
+ SetScrollIndicatorXPos(FALSE);
+ UpdateScrollIndicatorsVisibility();
+ sScreenControl->funcState++;
return FALSE;
}
break;
@@ -3101,33 +3325,33 @@ static bool8 sub_811C554(void)
return TRUE;
}
-static bool8 sub_811C620(void)
+static bool8 CloseKeyboard(void)
{
- switch (sUnknown_0203A11C->unk0)
+ switch (sScreenControl->funcState)
{
case 0:
- sub_811E050();
- sub_811E4AC();
- sub_811E6B0();
- sUnknown_0203A11C->unk0++;
+ DestroyRectangleCursorSprites();
+ HideModeWindow();
+ HideScrollIndicators();
+ sScreenControl->funcState++;
break;
case 1:
- if (sub_811E4D0() == TRUE)
+ if (DestroySideWindowSprites() == TRUE)
break;
- sub_811D9CC(1);
- sUnknown_0203A11C->unk0++;
+ InitLowerWindowAnim(WINANIM_CLOSE_KEYBOARD);
+ sScreenControl->funcState++;
// Fall through
case 2:
- if (!sub_811DAA4())
- sUnknown_0203A11C->unk0++;
+ if (!UpdateLowerWindowAnim())
+ sScreenControl->funcState++;
break;
case 3:
if (!IsDma3ManagerBusyWithBgCopy())
{
- sub_811DFB0();
+ StartMainCursorAnim();
ShowBg(0);
- sUnknown_0203A11C->unk0++;
+ sScreenControl->funcState++;
}
break;
case 4:
@@ -3137,38 +3361,38 @@ static bool8 sub_811C620(void)
return TRUE;
}
-static bool8 sub_811C6C0(void)
+static bool8 SwitchKeyboardMode(void)
{
- switch (sUnknown_0203A11C->unk0)
+ switch (sScreenControl->funcState)
{
case 0:
- sub_811E050();
- sub_811E6B0();
- sub_811E55C();
- sub_811D9CC(5);
- sUnknown_0203A11C->unk0++;
+ DestroyRectangleCursorSprites();
+ HideScrollIndicators();
+ SetModeWindowToTransition();
+ InitLowerWindowAnim(WINANIM_KEYBOARD_SWITCH_OUT);
+ sScreenControl->funcState++;
break;
case 1:
- if (!sub_811DAA4() && !sub_811E5B8())
+ if (!UpdateLowerWindowAnim() && !IsModeWindowAnimActive())
{
- sub_811D6D4();
- sUnknown_0203A11C->unk0++;
+ PrintKeyboardText();
+ sScreenControl->funcState++;
}
break;
case 2:
if (!IsDma3ManagerBusyWithBgCopy())
{
- sub_811D9CC(6);
- sub_811E578();
- sUnknown_0203A11C->unk0++;
+ InitLowerWindowAnim(WINANIM_KEYBOARD_SWITCH_IN);
+ UpdateModeWindowAnim();
+ sScreenControl->funcState++;
}
break;
case 3:
- if (!sub_811DAA4() && !sub_811E5B8())
+ if (!UpdateLowerWindowAnim() && !IsModeWindowAnimActive())
{
- sub_811E64C();
- sub_811DFC8();
- sUnknown_0203A11C->unk0++;
+ UpdateScrollIndicatorsVisibility();
+ CreateRectangleCursorSprites();
+ sScreenControl->funcState++;
return FALSE;
}
break;
@@ -3179,25 +3403,25 @@ static bool8 sub_811C6C0(void)
return TRUE;
}
-static bool8 sub_811C780(void)
+static bool8 UpdateKeyboardCursor(void)
{
- sub_811E088();
+ UpdateRectangleCursorPos();
return FALSE;
}
-static bool8 sub_811C78C(void)
+static bool8 GroupNamesScrollDown(void)
{
- switch (sUnknown_0203A11C->unk0)
+ switch (sScreenControl->funcState)
{
case 0:
- sub_811DDAC(1, 4);
- sUnknown_0203A11C->unk0++;
+ InitLowerWindowScroll(1, 4);
+ sScreenControl->funcState++;
// Fall through
case 1:
- if (!sub_811DE10())
+ if (!UpdateLowerWindowScroll())
{
- sub_811E088();
- sub_811E64C();
+ UpdateRectangleCursorPos();
+ UpdateScrollIndicatorsVisibility();
return FALSE;
}
break;
@@ -3206,19 +3430,19 @@ static bool8 sub_811C78C(void)
return TRUE;
}
-static bool8 sub_811C7D4(void)
+static bool8 GroupNamesScrollUp(void)
{
- switch (sUnknown_0203A11C->unk0)
+ switch (sScreenControl->funcState)
{
case 0:
- sub_811DDAC(-1, 4);
- sUnknown_0203A11C->unk0++;
+ InitLowerWindowScroll(-1, 4);
+ sScreenControl->funcState++;
// Fall through
case 1:
- if (!sub_811DE10())
+ if (!UpdateLowerWindowScroll())
{
- sub_811E64C();
- sUnknown_0203A11C->unk0++;
+ UpdateScrollIndicatorsVisibility();
+ sScreenControl->funcState++;
return FALSE;
}
break;
@@ -3229,45 +3453,45 @@ static bool8 sub_811C7D4(void)
return TRUE;
}
-static bool8 sub_811C830(void)
+static bool8 OpenWordSelect(void)
{
- switch (sUnknown_0203A11C->unk0)
+ switch (sScreenControl->funcState)
{
case 0:
- sub_811E050();
- sub_811E4AC();
- sub_811E6B0();
- sUnknown_0203A11C->unk0++;
+ DestroyRectangleCursorSprites();
+ HideModeWindow();
+ HideScrollIndicators();
+ sScreenControl->funcState++;
break;
case 1:
- if (!sub_811E4D0())
+ if (!DestroySideWindowSprites())
{
- sub_811D9B4();
- sUnknown_0203A11C->unk0++;
+ ClearWordSelectWindow();
+ sScreenControl->funcState++;
}
break;
case 2:
if (!IsDma3ManagerBusyWithBgCopy())
{
- sub_811D9CC(2);
- sUnknown_0203A11C->unk0++;
+ InitLowerWindowAnim(WINANIM_OPEN_WORD_SELECT);
+ sScreenControl->funcState++;
}
break;
case 3:
- if (!sub_811DAA4())
+ if (!UpdateLowerWindowAnim())
{
- sub_811D698(2);
- sUnknown_0203A11C->unk0++;
+ InitLowerWindowText(TEXT_WORD_SELECT);
+ sScreenControl->funcState++;
}
break;
case 4:
if (!IsDma3ManagerBusyWithBgCopy())
{
- sub_811E288();
- sub_811E6E0(1);
- sub_811E64C();
- sub_811E794();
- sUnknown_0203A11C->unk0++;
+ CreateWordSelectCursorSprite();
+ SetScrollIndicatorXPos(TRUE);
+ UpdateScrollIndicatorsVisibility();
+ UpdateStartSelectButtonsVisibility();
+ sScreenControl->funcState++;
return FALSE;
}
break;
@@ -3278,40 +3502,40 @@ static bool8 sub_811C830(void)
return TRUE;
}
-static bool8 sub_811C8F0(void)
+static bool8 CloseWordSelect(void)
{
- switch (sUnknown_0203A11C->unk0)
+ switch (sScreenControl->funcState)
{
case 0:
- sub_811D2C8();
- sUnknown_0203A11C->unk0++;
+ PrintCurrentPhrase();
+ sScreenControl->funcState++;
break;
case 1:
- sub_811E380();
- sub_811E6B0();
- sub_811E7F8();
- sub_811D9B4();
- sUnknown_0203A11C->unk0++;
+ DestroyWordSelectCursorSprite();
+ HideScrollIndicators();
+ HideStartSelectButtons();
+ ClearWordSelectWindow();
+ sScreenControl->funcState++;
break;
case 2:
if (!IsDma3ManagerBusyWithBgCopy())
{
- sub_811D9CC(3);
- sUnknown_0203A11C->unk0++;
+ InitLowerWindowAnim(WINANIM_CLOSE_WORD_SELECT);
+ sScreenControl->funcState++;
}
break;
case 3:
- if (!sub_811DAA4())
+ if (!UpdateLowerWindowAnim())
{
ShowBg(0);
- sUnknown_0203A11C->unk0++;
+ sScreenControl->funcState++;
}
break;
case 4:
if (!IsDma3ManagerBusyWithBgCopy())
{
- sub_811DFB0();
- sUnknown_0203A11C->unk0++;
+ StartMainCursorAnim();
+ sScreenControl->funcState++;
return FALSE;
}
break;
@@ -3322,47 +3546,47 @@ static bool8 sub_811C8F0(void)
return TRUE;
}
-static bool8 sub_811C99C(void)
+static bool8 ShowConfirmLyricsPrompt(void)
{
- switch (sUnknown_0203A11C->unk0)
+ switch (sScreenControl->funcState)
{
case 0:
- sub_811D2C8();
- sUnknown_0203A11C->unk0++;
+ PrintCurrentPhrase();
+ sScreenControl->funcState++;
break;
case 1:
- sub_811E380();
- sub_811E6B0();
- sub_811E7F8();
- sub_811D9B4();
- sUnknown_0203A11C->unk0++;
+ DestroyWordSelectCursorSprite();
+ HideScrollIndicators();
+ HideStartSelectButtons();
+ ClearWordSelectWindow();
+ sScreenControl->funcState++;
break;
case 2:
if (!IsDma3ManagerBusyWithBgCopy())
{
- sub_811D9CC(3);
- sUnknown_0203A11C->unk0++;
+ InitLowerWindowAnim(WINANIM_CLOSE_WORD_SELECT);
+ sScreenControl->funcState++;
}
break;
case 3:
- if (!sub_811DAA4())
+ if (!UpdateLowerWindowAnim())
{
- sub_811D104(3);
- sUnknown_0203A11C->unk0++;
+ PrintEasyChatStdMessage(MSG_CONFIRM);
+ sScreenControl->funcState++;
}
break;
case 4:
if (!IsDma3ManagerBusyWithBgCopy())
{
ShowBg(0);
- sUnknown_0203A11C->unk0++;
+ sScreenControl->funcState++;
}
break;
case 5:
if (!IsDma3ManagerBusyWithBgCopy())
{
- sub_811DFB0();
- sUnknown_0203A11C->unk0++;
+ StartMainCursorAnim();
+ sScreenControl->funcState++;
return FALSE;
}
break;
@@ -3373,45 +3597,45 @@ static bool8 sub_811C99C(void)
return TRUE;
}
-static bool8 sub_811CA5C(void)
+static bool8 ReturnToKeyboard(void)
{
- switch (sUnknown_0203A11C->unk0)
+ switch (sScreenControl->funcState)
{
case 0:
- sub_811E380();
- sub_811E6B0();
- sub_811E7F8();
- sub_811D9B4();
- sUnknown_0203A11C->unk0++;
+ DestroyWordSelectCursorSprite();
+ HideScrollIndicators();
+ HideStartSelectButtons();
+ ClearWordSelectWindow();
+ sScreenControl->funcState++;
break;
case 1:
if (!IsDma3ManagerBusyWithBgCopy())
{
- sub_811D9CC(4);
- sUnknown_0203A11C->unk0++;
+ InitLowerWindowAnim(WINANIM_RETURN_TO_KEYBOARD);
+ sScreenControl->funcState++;
}
break;
case 2:
- if (!sub_811DAA4())
+ if (!UpdateLowerWindowAnim())
{
- sub_811D6D4();
- sUnknown_0203A11C->unk0++;
+ PrintKeyboardText();
+ sScreenControl->funcState++;
}
break;
case 3:
if (!IsDma3ManagerBusyWithBgCopy())
{
- sub_811E3AC();
- sUnknown_0203A11C->unk0++;
+ CreateSideWindowSprites();
+ sScreenControl->funcState++;
}
break;
case 4:
- if (!sub_811E418())
+ if (!ShowSideWindow())
{
- sub_811DFC8();
- sub_811E6E0(0);
- sub_811E64C();
- sUnknown_0203A11C->unk0++;
+ CreateRectangleCursorSprites();
+ SetScrollIndicatorXPos(FALSE);
+ UpdateScrollIndicatorsVisibility();
+ sScreenControl->funcState++;
return FALSE;
}
break;
@@ -3420,34 +3644,34 @@ static bool8 sub_811CA5C(void)
return TRUE;
}
-static bool8 sub_811CB18(void)
+static bool8 UpdateWordSelectCursor(void)
{
- sub_811E30C();
+ UpdateWordSelectCursorPos();
return FALSE;
}
-static bool8 sub_811CB24(void)
+static bool8 WordSelectScrollDown(void)
{
- switch (sUnknown_0203A11C->unk0)
+ switch (sScreenControl->funcState)
{
case 0:
- sub_811D7A4();
- sUnknown_0203A11C->unk0++;
+ PrintWordSelectNextRowDown();
+ sScreenControl->funcState++;
break;
case 1:
if (!IsDma3ManagerBusyWithBgCopy())
{
- sub_811DDAC(1, 4);
- sUnknown_0203A11C->unk0++;
+ InitLowerWindowScroll(1, 4);
+ sScreenControl->funcState++;
}
break;
case 2:
- if (!sub_811DE10())
+ if (!UpdateLowerWindowScroll())
{
- sub_811E30C();
- sub_811E64C();
- sub_811E794();
- sUnknown_0203A11C->unk0++;
+ UpdateWordSelectCursorPos();
+ UpdateScrollIndicatorsVisibility();
+ UpdateStartSelectButtonsVisibility();
+ sScreenControl->funcState++;
return FALSE;
}
break;
@@ -3458,27 +3682,27 @@ static bool8 sub_811CB24(void)
return TRUE;
}
-static bool8 sub_811CB98(void)
+static bool8 WordSelectScrollUp(void)
{
- switch (sUnknown_0203A11C->unk0)
+ switch (sScreenControl->funcState)
{
case 0:
- sub_811D7C8();
- sUnknown_0203A11C->unk0++;
+ PrintWordSelectNextRowUp();
+ sScreenControl->funcState++;
break;
case 1:
if (!IsDma3ManagerBusyWithBgCopy())
{
- sub_811DDAC(-1, 4);
- sUnknown_0203A11C->unk0++;
+ InitLowerWindowScroll(-1, 4);
+ sScreenControl->funcState++;
}
break;
case 2:
- if (!sub_811DE10())
+ if (!UpdateLowerWindowScroll())
{
- sub_811E64C();
- sub_811E794();
- sUnknown_0203A11C->unk0++;
+ UpdateScrollIndicatorsVisibility();
+ UpdateStartSelectButtonsVisibility();
+ sScreenControl->funcState++;
return FALSE;
}
break;
@@ -3489,29 +3713,29 @@ static bool8 sub_811CB98(void)
return TRUE;
}
-static bool8 sub_811CC08(void)
+static bool8 WordSelectPageScrollDown(void)
{
- switch (sUnknown_0203A11C->unk0)
+ switch (sScreenControl->funcState)
{
case 0:
- sub_811D7EC();
- sUnknown_0203A11C->unk0++;
+ PrintWordSelectRowsPageDown();
+ sScreenControl->funcState++;
break;
case 1:
if (!IsDma3ManagerBusyWithBgCopy())
{
- s16 var0 = sub_811BBDC() - sub_811DE48();
- sub_811DDAC(var0, 8);
- sUnknown_0203A11C->unk0++;
+ s16 scrollChange = GetWordSelectScrollOffset() - GetLowerWindowScrollOffset();
+ InitLowerWindowScroll(scrollChange, 8);
+ sScreenControl->funcState++;
}
break;
case 2:
- if (!sub_811DE10())
+ if (!UpdateLowerWindowScroll())
{
- sub_811E30C();
- sub_811E64C();
- sub_811E794();
- sUnknown_0203A11C->unk0++;
+ UpdateWordSelectCursorPos();
+ UpdateScrollIndicatorsVisibility();
+ UpdateStartSelectButtonsVisibility();
+ sScreenControl->funcState++;
return FALSE;
}
break;
@@ -3522,28 +3746,28 @@ static bool8 sub_811CC08(void)
return TRUE;
}
-static bool8 sub_811CC90(void)
+static bool8 WordSelectPageScrollUp(void)
{
- switch (sUnknown_0203A11C->unk0)
+ switch (sScreenControl->funcState)
{
case 0:
- sub_811D830();
- sUnknown_0203A11C->unk0++;
+ PrintWordSelectRowsPageUp();
+ sScreenControl->funcState++;
break;
case 1:
if (!IsDma3ManagerBusyWithBgCopy())
{
- s16 var0 = sub_811BBDC() - sub_811DE48();
- sub_811DDAC(var0, 8);
- sUnknown_0203A11C->unk0++;
+ s16 scrollChange = GetWordSelectScrollOffset() - GetLowerWindowScrollOffset();
+ InitLowerWindowScroll(scrollChange, 8);
+ sScreenControl->funcState++;
}
break;
case 2:
- if (!sub_811DE10())
+ if (!UpdateLowerWindowScroll())
{
- sub_811E64C();
- sub_811E794();
- sUnknown_0203A11C->unk0++;
+ UpdateScrollIndicatorsVisibility();
+ UpdateStartSelectButtonsVisibility();
+ sScreenControl->funcState++;
return FALSE;
}
break;
@@ -3554,14 +3778,14 @@ static bool8 sub_811CC90(void)
return TRUE;
}
-static bool8 sub_811CD14(void)
+static bool8 ShowCreateQuizMsg(void)
{
- switch (sUnknown_0203A11C->unk0)
+ switch (sScreenControl->funcState)
{
case 0:
- sub_811DF90();
- sub_811D104(4);
- sUnknown_0203A11C->unk0++;
+ StopMainCursorAnim();
+ PrintEasyChatStdMessage(MSG_CREATE_QUIZ);
+ sScreenControl->funcState++;
break;
case 1:
return IsDma3ManagerBusyWithBgCopy();
@@ -3570,14 +3794,14 @@ static bool8 sub_811CD14(void)
return TRUE;
}
-static bool8 sub_811CD54(void)
+static bool8 ShowSelectAnswerMsg(void)
{
- switch (sUnknown_0203A11C->unk0)
+ switch (sScreenControl->funcState)
{
case 0:
- sub_811DF90();
- sub_811D104(5);
- sUnknown_0203A11C->unk0++;
+ StopMainCursorAnim();
+ PrintEasyChatStdMessage(MSG_SELECT_ANSWER);
+ sScreenControl->funcState++;
break;
case 1:
return IsDma3ManagerBusyWithBgCopy();
@@ -3586,14 +3810,14 @@ static bool8 sub_811CD54(void)
return TRUE;
}
-static bool8 sub_811CD94(void)
+static bool8 ShowSongTooShortMsg(void)
{
- switch (sUnknown_0203A11C->unk0)
+ switch (sScreenControl->funcState)
{
case 0:
- sub_811DF90();
- sub_811D104(6);
- sUnknown_0203A11C->unk0++;
+ StopMainCursorAnim();
+ PrintEasyChatStdMessage(MSG_SONG_TOO_SHORT);
+ sScreenControl->funcState++;
break;
case 1:
return IsDma3ManagerBusyWithBgCopy();
@@ -3602,14 +3826,14 @@ static bool8 sub_811CD94(void)
return TRUE;
}
-static bool8 sub_811CDD4(void)
+static bool8 ShowCantDeleteLyricsMsg(void)
{
- switch (sUnknown_0203A11C->unk0)
+ switch (sScreenControl->funcState)
{
case 0:
- sub_811DF90();
- sub_811D104(7);
- sUnknown_0203A11C->unk0++;
+ StopMainCursorAnim();
+ PrintEasyChatStdMessage(MSG_CANT_DELETE_LYRICS);
+ sScreenControl->funcState++;
break;
case 1:
return IsDma3ManagerBusyWithBgCopy();
@@ -3618,14 +3842,14 @@ static bool8 sub_811CDD4(void)
return TRUE;
}
-static bool8 sub_811CE14(void)
+static bool8 ShowCombineTwoWordsMsg(void)
{
- switch (sUnknown_0203A11C->unk0)
+ switch (sScreenControl->funcState)
{
case 0:
- sub_811DF90();
- sub_811D104(8);
- sUnknown_0203A11C->unk0++;
+ StopMainCursorAnim();
+ PrintEasyChatStdMessage(MSG_COMBINE_TWO_WORDS);
+ sScreenControl->funcState++;
break;
case 1:
return IsDma3ManagerBusyWithBgCopy();
@@ -3634,14 +3858,14 @@ static bool8 sub_811CE14(void)
return TRUE;
}
-static bool8 sub_811CE54(void)
+static bool8 ShowCantExitMsg(void)
{
- switch (sUnknown_0203A11C->unk0)
+ switch (sScreenControl->funcState)
{
case 0:
- sub_811DF90();
- sub_811D104(9);
- sUnknown_0203A11C->unk0++;
+ StopMainCursorAnim();
+ PrintEasyChatStdMessage(MSG_CANT_QUIT);
+ sScreenControl->funcState++;
break;
case 1:
return IsDma3ManagerBusyWithBgCopy();
@@ -3650,28 +3874,28 @@ static bool8 sub_811CE54(void)
return TRUE;
}
-static bool8 sub_811CE94(void)
+static bool8 InitEasyChatScreenControl_(void)
{
- sUnknown_0203A11C = Alloc(sizeof(*sUnknown_0203A11C));
- if (!sUnknown_0203A11C)
+ sScreenControl = Alloc(sizeof(*sScreenControl));
+ if (!sScreenControl)
return FALSE;
- sUnknown_0203A11C->unk0 = 0;
- sUnknown_0203A11C->unk2D8 = NULL;
- sUnknown_0203A11C->unk2DC = NULL;
- sUnknown_0203A11C->unk2E0 = NULL;
- sUnknown_0203A11C->unk2E4 = NULL;
- sUnknown_0203A11C->unk2E8 = NULL;
- sUnknown_0203A11C->unk2EC = NULL;
- sUnknown_0203A11C->unk2F0 = NULL;
- sUnknown_0203A11C->unk2F4 = NULL;
- sUnknown_0203A11C->unk2F8 = NULL;
- sUnknown_0203A11C->unk2FC = NULL;
- sUnknown_0203A11C->unkA = FooterHasFourOptions_();
+ sScreenControl->funcState = 0;
+ sScreenControl->mainCursorSprite = NULL;
+ sScreenControl->rectangleCursorSpriteRight = NULL;
+ sScreenControl->rectangleCursorSpriteLeft = NULL;
+ sScreenControl->wordSelectCursorSprite = NULL;
+ sScreenControl->buttonWindowSprite = NULL;
+ sScreenControl->modeWindowSprite = NULL;
+ sScreenControl->scrollIndicatorUpSprite = NULL;
+ sScreenControl->scrollIndicatorDownSprite = NULL;
+ sScreenControl->startButtonSprite = NULL;
+ sScreenControl->selectButtonSprite = NULL;
+ sScreenControl->fourFooterOptions = FooterHasFourOptions_();
return TRUE;
}
-static void sub_811CF04(void)
+static void InitEasyChatBgs(void)
{
ChangeBgX(3, 0, 0);
ChangeBgY(3, 0, 0);
@@ -3684,19 +3908,19 @@ static void sub_811CF04(void)
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON);
}
-static void sub_811CF64(void)
+static void LoadEasyChatPalettes(void)
{
ResetPaletteFade();
LoadPalette(gEasyChatMode_Pal, 0, 32);
- LoadPalette(sUnknown_08597B14, 1 * 16, 32);
- LoadPalette(sUnknown_08597B34, 4 * 16, 32);
+ LoadPalette(sTextInputFrameOrange_Pal, 1 * 16, 32);
+ LoadPalette(sTextInputFrameGreen_Pal, 4 * 16, 32);
LoadPalette(sUnknown_08597C1C, 10 * 16, 8);
LoadPalette(sUnknown_08597C24, 11 * 16, 12);
LoadPalette(sUnknown_08597C24, 15 * 16, 12);
LoadPalette(sUnknown_08597C24, 3 * 16, 12);
}
-static void sub_811CFCC(void)
+static void PrintTitle(void)
{
int xOffset;
const u8 *titleText = GetTitleText();
@@ -3705,17 +3929,17 @@ static void sub_811CFCC(void)
xOffset = GetStringCenterAlignXOffset(1, titleText, 144);
FillWindowPixelBuffer(0, PIXEL_FILL(0));
- sub_811D058(0, 1, titleText, xOffset, 1, 0xFF, TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY);
+ PrintEasyChatTextWithColors(0, 1, titleText, xOffset, 1, TEXT_SPEED_FF, TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY);
PutWindowTilemap(0);
CopyWindowToVram(0, 3);
}
-void sub_811D028(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16))
+static void PrintEasyChatText(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16))
{
AddTextPrinterParameterized(windowId, fontId, str, x, y, speed, callback);
}
-static void sub_811D058(u8 windowId, u8 fontId, const u8 *str, u8 left, u8 top, u8 speed, u8 bg, u8 fg, u8 shadow)
+static void PrintEasyChatTextWithColors(u8 windowId, u8 fontId, const u8 *str, u8 left, u8 top, u8 speed, u8 bg, u8 fg, u8 shadow)
{
u8 color[3];
color[0] = bg;
@@ -3724,51 +3948,51 @@ static void sub_811D058(u8 windowId, u8 fontId, const u8 *str, u8 left, u8 top,
AddTextPrinterParameterized3(windowId, fontId, left, top, color, speed, str);
}
-static void sub_811D0BC(void)
+static void PrintInitialInstructions(void)
{
FillBgTilemapBufferRect(0, 0, 0, 0, 32, 20, 17);
LoadUserWindowBorderGfx(1, 1, 0xE0);
DrawTextBorderOuter(1, 1, 14);
- sub_811D104(0);
+ PrintEasyChatStdMessage(MSG_INSTRUCTIONS);
PutWindowTilemap(1);
CopyBgTilemapBufferToVram(0);
}
-static void sub_811D104(u8 arg0)
+static void PrintEasyChatStdMessage(u8 msgId)
{
const u8 *text2 = NULL;
const u8 *text1 = NULL;
- switch (arg0)
+ switch (msgId)
{
- case 0:
+ case MSG_INSTRUCTIONS:
GetEasyChatInstructionsText(&text1, &text2);
break;
- case 2:
- sub_811BB40(&text1, &text2);
+ case MSG_CONFIRM_EXIT:
+ GetEasyChatConfirmExitText(&text1, &text2);
break;
- case 3:
+ case MSG_CONFIRM:
GetEasyChatConfirmText(&text1, &text2);
break;
- case 1:
+ case MSG_CONFIRM_DELETE:
GetEasyChatConfirmDeletionText(&text1, &text2);
break;
- case 4:
+ case MSG_CREATE_QUIZ:
text1 = gText_CreateAQuiz;
break;
- case 5:
+ case MSG_SELECT_ANSWER:
text1 = gText_SelectTheAnswer;
break;
- case 6:
+ case MSG_SONG_TOO_SHORT:
text1 = gText_OnlyOnePhrase;
text2 = gText_OriginalSongWillBeUsed;
break;
- case 7:
+ case MSG_CANT_DELETE_LYRICS:
text1 = gText_LyricsCantBeDeleted;
break;
- case 8:
+ case MSG_COMBINE_TWO_WORDS:
text1 = gText_CombineTwoWordsOrPhrases3;
break;
- case 9:
+ case MSG_CANT_QUIT:
text1 = gText_YouCannotQuitHere;
text2 = gText_SectionMustBeCompleted;
break;
@@ -3776,20 +4000,20 @@ static void sub_811D104(u8 arg0)
FillWindowPixelBuffer(1, PIXEL_FILL(1));
if (text1)
- sub_811D028(1, 1, text1, 0, 1, 0xFF, 0);
+ PrintEasyChatText(1, 1, text1, 0, 1, TEXT_SPEED_FF, 0);
if (text2)
- sub_811D028(1, 1, text2, 0, 17, 0xFF, 0);
+ PrintEasyChatText(1, 1, text2, 0, 17, TEXT_SPEED_FF, 0);
CopyWindowToVram(1, 3);
}
-static void sub_811D214(u8 initialCursorPos)
+static void CreateEasyChatYesNoMenu(u8 initialCursorPos)
{
CreateYesNoMenu(&sEasyChatYesNoWindowTemplate, 1, 14, initialCursorPos);
}
-static void sub_811D230(void)
+static void AddPhraseWindow(void)
{
u8 frameId;
struct WindowTemplate template;
@@ -3802,49 +4026,50 @@ static void sub_811D230(void)
template.height = sPhraseFrameDimensions[frameId].height;
template.paletteNum = 11;
template.baseBlock = 0x6C;
- sUnknown_0203A11C->windowId = AddWindow(&template);
- PutWindowTilemap(sUnknown_0203A11C->windowId);
+ sScreenControl->windowId = AddWindow(&template);
+ PutWindowTilemap(sScreenControl->windowId);
}
-static void sub_811D2C8(void)
+static void PrintCurrentPhrase(void)
{
- u8 spC[4];
- u16 *ecWord;
+ u8 strClear[4];
+ u16 *currentPhrase;
u8 numColumns, numRows;
u8 *str;
int frameId;
- int var1;
+ bool32 isQuizQuestion;
int i, j, k;
- ecWord = GetEasyChatWordBuffer();
+ currentPhrase = GetCurrentPhrase();
numColumns = GetNumColumns();
numRows = GetNumRows();
frameId = GetEasyChatScreenFrameId();
- var1 = 0;
- if (frameId == 7)
- var1 = 1;
- FillWindowPixelBuffer(sUnknown_0203A11C->windowId, PIXEL_FILL(1));
+ isQuizQuestion = FALSE;
+ if (frameId == FRAMEID_QUIZ_QUESTION)
+ isQuizQuestion = TRUE;
+
+ FillWindowPixelBuffer(sScreenControl->windowId, PIXEL_FILL(1));
for (i = 0; i < numRows; i++)
{
- memcpy(spC, sText_Clear17, sizeof(sText_Clear17));
- if (var1)
- spC[2] = 6;
+ memcpy(strClear, sText_Clear17, sizeof(sText_Clear17));
+ if (isQuizQuestion)
+ strClear[2] = 6;
- str = sUnknown_0203A11C->unkB;
- sUnknown_0203A11C->unkB[0] = EOS;
- str = StringAppend(str, spC);
+ str = sScreenControl->phrasePrintBuffer;
+ sScreenControl->phrasePrintBuffer[0] = EOS;
+ str = StringAppend(str, strClear);
for (j = 0; j < numColumns; j++)
{
- if (*ecWord != 0xFFFF)
+ if (*currentPhrase != EC_EMPTY_WORD)
{
- str = CopyEasyChatWord(str, *ecWord);
- ecWord++;
+ str = CopyEasyChatWord(str, *currentPhrase);
+ currentPhrase++;
}
else
{
- ecWord++;
- if (!var1)
+ currentPhrase++;
+ if (!isQuizQuestion)
{
str = WriteColorChangeControlCode(str, 0, 4);
for (k = 0; k < 12; k++)
@@ -3857,25 +4082,27 @@ static void sub_811D2C8(void)
}
}
- if (var1)
- spC[2] = 3;
+ if (isQuizQuestion)
+ strClear[2] = 3;
+
+ str = StringAppend(str, strClear);
- str = StringAppend(str, spC);
- if (frameId == 2 || frameId == 7 || frameId == 8)
+ if (frameId == FRAMEID_MAIL || frameId == FRAMEID_QUIZ_QUESTION || frameId == FRAMEID_QUIZ_SET_QUESTION)
{
+ // Is 2x5 frame, end on 9th word
if (j == 0 && i == 4)
break;
}
}
*str = EOS;
- sub_811D028(sUnknown_0203A11C->windowId, 1, sUnknown_0203A11C->unkB, 0, i * 16 + 1, 0xFF, 0);
+ PrintEasyChatText(sScreenControl->windowId, 1, sScreenControl->phrasePrintBuffer, 0, i * 16 + 1, TEXT_SPEED_FF, 0);
}
- CopyWindowToVram(sUnknown_0203A11C->windowId, 3);
+ CopyWindowToVram(sScreenControl->windowId, 3);
}
-static void sub_811D424(u16 *tilemap)
+static void BufferFrameTilemap(u16 *tilemap)
{
u8 frameId;
int right, bottom;
@@ -3883,19 +4110,22 @@ static void sub_811D424(u16 *tilemap)
frameId = GetEasyChatScreenFrameId();
CpuFastFill(0, tilemap, BG_SCREEN_SIZE);
- if (frameId == 2 || frameId == 8)
+ if (frameId == FRAMEID_MAIL || frameId == FRAMEID_QUIZ_SET_QUESTION)
{
+ // These frames fill the screen, no need to draw top/bottom edges
right = sPhraseFrameDimensions[frameId].left + sPhraseFrameDimensions[frameId].width;
bottom = sPhraseFrameDimensions[frameId].top + sPhraseFrameDimensions[frameId].height;
+
+ // Draw middle section
for (y = sPhraseFrameDimensions[frameId].top; y < bottom; y++)
{
x = sPhraseFrameDimensions[frameId].left - 1;
- tilemap[y * 32 + x] = 0x1005;
+ tilemap[y * 32 + x] = FRAME_OFFSET_ORANGE + FRAME_TILE_L_EDGE;
x++;
for (; x < right; x++)
- tilemap[y * 32 + x] = 0x1000;
+ tilemap[y * 32 + x] = FRAME_OFFSET_ORANGE + FRAME_TILE_TRANSPARENT;
- tilemap[y* 32 + x] = 0x1007;
+ tilemap[y* 32 + x] = FRAME_OFFSET_ORANGE + FRAME_TILE_R_EDGE;
}
}
else
@@ -3904,35 +4134,40 @@ static void sub_811D424(u16 *tilemap)
x = sPhraseFrameDimensions[frameId].left - 1;
right = sPhraseFrameDimensions[frameId].left + sPhraseFrameDimensions[frameId].width;
bottom = sPhraseFrameDimensions[frameId].top + sPhraseFrameDimensions[frameId].height;
- tilemap[y * 32 + x] = 0x1001;
+
+ // Draw top edge
+ tilemap[y * 32 + x] = FRAME_OFFSET_ORANGE + FRAME_TILE_TOP_L_CORNER;
x++;
for (; x < right; x++)
- tilemap[y * 32 + x] = 0x1002;
+ tilemap[y * 32 + x] = FRAME_OFFSET_ORANGE + FRAME_TILE_TOP_EDGE;
- tilemap[y * 32 + x] = 0x1003;
+ tilemap[y * 32 + x] = FRAME_OFFSET_ORANGE + FRAME_TILE_TOP_R_CORNER;
y++;
+
+ // Draw middle section
for (; y < bottom; y++)
{
x = sPhraseFrameDimensions[frameId].left - 1;
- tilemap[y * 32 + x] = 0x1005;
+ tilemap[y * 32 + x] = FRAME_OFFSET_ORANGE + FRAME_TILE_L_EDGE;
x++;
for (; x < right; x++)
- tilemap[y * 32 + x] = 0x1000;
+ tilemap[y * 32 + x] = FRAME_OFFSET_ORANGE + FRAME_TILE_TRANSPARENT;
- tilemap[y* 32 + x] = 0x1007;
+ tilemap[y* 32 + x] = FRAME_OFFSET_ORANGE + FRAME_TILE_R_EDGE;
}
+ // Draw bottom edge
x = sPhraseFrameDimensions[frameId].left - 1;
- tilemap[y * 32 + x] = 0x1009;
+ tilemap[y * 32 + x] = FRAME_OFFSET_ORANGE + FRAME_TILE_BOTTOM_L_CORNER;
x++;
for (; x < right; x++)
- tilemap[y * 32 + x] = 0x100A;
+ tilemap[y * 32 + x] = FRAME_OFFSET_ORANGE + FRAME_TILE_BOTTOM_EDGE;
- tilemap[y * 32 + x] = 0x100B;
+ tilemap[y * 32 + x] = FRAME_OFFSET_ORANGE + FRAME_TILE_BOTTOM_R_CORNER;
}
}
-static void sub_811D60C(void)
+static void AdjustBgTilemapForFooter(void)
{
u8 frameId;
u16 *tilemap;
@@ -3941,55 +4176,55 @@ static void sub_811D60C(void)
frameId = GetEasyChatScreenFrameId();
switch (sPhraseFrameDimensions[frameId].footerId)
{
- case 2:
+ case FOOTER_ANSWER:
tilemap += 0x2A0;
CopyToBgTilemapBufferRect(3, tilemap, 0, 11, 32, 2);
break;
- case 1:
+ case FOOTER_QUIZ:
tilemap += 0x300;
CopyToBgTilemapBufferRect(3, tilemap, 0, 11, 32, 2);
break;
- case 3:
+ case NUM_FOOTER_TYPES:
CopyToBgTilemapBufferRect(3, tilemap, 0, 10, 32, 4);
break;
}
}
-static void sub_811D684(void)
+static void DrawLowerWindow(void)
{
PutWindowTilemap(2);
CopyBgTilemapBufferToVram(2);
}
-static void sub_811D698(u32 arg0)
+static void InitLowerWindowText(u32 whichText)
{
- sub_811DD84();
+ ResetLowerWindowScroll();
FillWindowPixelBuffer(2, PIXEL_FILL(1));
- switch (arg0)
+ switch (whichText)
{
- case 0:
- sub_811D6F4();
+ case TEXT_GROUPS:
+ PrintKeyboardGroupNames();
break;
- case 1:
- PrintEasyChatKeyboardText();
+ case TEXT_ALPHABET:
+ PrintKeyboardAlphabet();
break;
- case 2:
- sub_811D794();
+ case TEXT_WORD_SELECT:
+ PrintInitialWordSelectText();
break;
}
CopyWindowToVram(2, 2);
}
-static void sub_811D6D4(void)
+static void PrintKeyboardText(void)
{
- if (!sub_811BBB0())
- sub_811D698(0);
+ if (!GetInAlphabetMode())
+ InitLowerWindowText(TEXT_GROUPS);
else
- sub_811D698(1);
+ InitLowerWindowText(TEXT_ALPHABET);
}
-static void sub_811D6F4(void)
+static void PrintKeyboardGroupNames(void)
{
int i;
int x, y;
@@ -4000,97 +4235,99 @@ static void sub_811D6F4(void)
{
for (x = 0; x < 2; x++)
{
- u8 groupId = sub_811F3B8(i++);
+ u8 groupId = GetUnlockedEasyChatGroupId(i++);
if (groupId == EC_NUM_GROUPS)
{
- sub_811DDAC(sub_811BBBC(), 0);
+ InitLowerWindowScroll(GetKeyboardScrollOffset(), 0);
return;
}
- sub_811D028(2, 1, GetEasyChatWordGroupName(groupId), x * 84 + 10, y, 0xFF, NULL);
+ PrintEasyChatText(2, 1, GetEasyChatWordGroupName(groupId), x * 84 + 10, y, TEXT_SPEED_FF, NULL);
}
y += 16;
}
}
-static void PrintEasyChatKeyboardText(void)
+static void PrintKeyboardAlphabet(void)
{
u32 i;
- for (i = 0; i < ARRAY_COUNT(sEasyChatKeyboardText); i++)
- sub_811D028(2, 1, sEasyChatKeyboardText[i], 10, 97 + i * 16, 0xFF, NULL);
+ for (i = 0; i < ARRAY_COUNT(sEasyChatKeyboardAlphabet); i++)
+ PrintEasyChatText(2, 1, sEasyChatKeyboardAlphabet[i], 10, 97 + i * 16, TEXT_SPEED_FF, NULL);
}
-static void sub_811D794(void)
+static void PrintInitialWordSelectText(void)
{
- sub_811D864(0, 4);
+ PrintWordSelectText(0, NUM_WORD_SELECT_ROWS);
}
-static void sub_811D7A4(void)
+static void PrintWordSelectNextRowDown(void)
{
- u8 var0 = sub_811BBDC() + 3;
- sub_811D950(var0, 1);
- sub_811D864(var0, 1);
+ u8 wordScroll = GetWordSelectScrollOffset() + NUM_WORD_SELECT_ROWS - 1;
+ EraseWordSelectRows(wordScroll, 1);
+ PrintWordSelectText(wordScroll, 1);
}
-static void sub_811D7C8(void)
+static void PrintWordSelectNextRowUp(void)
{
- u8 var0 = sub_811BBDC();
- sub_811D950(var0, 1);
- sub_811D864(var0, 1);
+ u8 wordScroll = GetWordSelectScrollOffset();
+ EraseWordSelectRows(wordScroll, 1);
+ PrintWordSelectText(wordScroll, 1);
}
-static void sub_811D7EC(void)
+static void PrintWordSelectRowsPageDown(void)
{
- u8 var0 = sub_811BBDC();
- u8 var1 = var0 + 4;
- u8 var2 = sub_811BBE8() + 1;
- if (var1 > var2)
- var1 = var2;
+ u8 wordScroll = GetWordSelectScrollOffset();
+ u8 maxScroll = wordScroll + NUM_WORD_SELECT_ROWS;
+ u8 maxRows = GetWordSelectLastRow() + 1;
+ if (maxScroll > maxRows)
+ maxScroll = maxRows;
- if (var0 < var1)
+ if (wordScroll < maxScroll)
{
- u8 var3 = var1 - var0;
- sub_811D950(var0, var3);
- sub_811D864(var0, var3);
+ u8 numRows = maxScroll - wordScroll;
+ EraseWordSelectRows(wordScroll, numRows);
+ PrintWordSelectText(wordScroll, numRows);
}
}
-static void sub_811D830(void)
+static void PrintWordSelectRowsPageUp(void)
{
- u8 var0 = sub_811BBDC();
- u8 var1 = sub_811DE48();
- if (var0 < var1)
+ u8 wordScroll = GetWordSelectScrollOffset();
+ u8 windowScroll = GetLowerWindowScrollOffset();
+ if (wordScroll < windowScroll)
{
- u8 var2 = var1 - var0;
- sub_811D950(var0, var2);
- sub_811D864(var0, var2);
+ u8 numRows = windowScroll - wordScroll;
+ EraseWordSelectRows(wordScroll, numRows);
+ PrintWordSelectText(wordScroll, numRows);
}
}
-static void sub_811D864(u8 arg0, u8 arg1)
+// Print the easy chat words available for selection in
+// the currently selected group and at the given offset and row
+static void PrintWordSelectText(u8 scrollOffset, u8 numRows)
{
int i, j;
u16 easyChatWord;
int y;
- int var0;
+ int wordIndex;
- var0 = arg0 * 2;
- y = (arg0 * 16 + 96) & 0xFF;
+ wordIndex = scrollOffset * NUM_WORD_SELECT_COLUMNS;
+ y = (scrollOffset * 16 + 96) & 0xFF;
y++;
- for (i = 0; i < arg1; i++)
+ for (i = 0; i < numRows; i++)
{
for (j = 0; j < 2; j++)
{
- easyChatWord = sub_811F578(var0++);
- if (easyChatWord != 0xFFFF)
+ easyChatWord = GetWordFromSelectedGroup(wordIndex++);
+ if (easyChatWord != EC_EMPTY_WORD)
{
- CopyEasyChatWordPadded(sUnknown_0203A11C->unkCC, easyChatWord, 0);
- if (!sub_811BF88(easyChatWord))
- sub_811D028(2, 1, sUnknown_0203A11C->unkCC, (j * 13 + 3) * 8, y, 0xFF, NULL);
- else
- sub_811D058(2, 1, sUnknown_0203A11C->unkCC, (j * 13 + 3) * 8, y, 0xFF, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_RED, TEXT_COLOR_LIGHT_GREY);
+ CopyEasyChatWordPadded(sScreenControl->wordSelectPrintBuffer, easyChatWord, 0);
+ if (!DummyWordCheck(easyChatWord))
+ PrintEasyChatText(2, 1, sScreenControl->wordSelectPrintBuffer, (j * 13 + 3) * 8, y, TEXT_SPEED_FF, NULL);
+ else // Never reached
+ PrintEasyChatTextWithColors(2, 1, sScreenControl->wordSelectPrintBuffer, (j * 13 + 3) * 8, y, TEXT_SPEED_FF, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_RED, TEXT_COLOR_LIGHT_GREY);
}
}
@@ -4100,16 +4337,17 @@ static void sub_811D864(u8 arg0, u8 arg1)
CopyWindowToVram(2, 2);
}
-static void sub_811D950(u8 arg0, u8 arg1)
+static void EraseWordSelectRows(u8 scrollOffset, u8 numRows)
{
int y;
int var0;
int var1;
int var2;
- y = (arg0 * 16 + 96) & 0xFF;
- var2 = arg1 * 16;
+ y = (scrollOffset * 16 + 96) & 0xFF;
+ var2 = numRows * 16;
var0 = y + var2;
+
if (var0 > 255)
{
var1 = var0 - 256;
@@ -4125,191 +4363,209 @@ static void sub_811D950(u8 arg0, u8 arg1)
FillWindowPixelRect(2, PIXEL_FILL(1), 0, 0, 224, var1);
}
-static void sub_811D9B4(void)
+static void ClearWordSelectWindow(void)
{
FillWindowPixelBuffer(2, PIXEL_FILL(1));
CopyWindowToVram(2, 2);
}
-static void sub_811D9CC(int arg0)
+static void InitLowerWindowAnim(int winAnimType)
{
- switch (arg0)
+ switch (winAnimType)
{
- case 0:
- sUnknown_0203A11C->unk6 = 0;
- sUnknown_0203A11C->unk7 = 10;
+ case WINANIM_OPEN_KEYBOARD:
+ sScreenControl->curWindowAnimState = 0;
+ sScreenControl->destWindowAnimState = 10;
break;
- case 1:
- sUnknown_0203A11C->unk6 = 9;
- sUnknown_0203A11C->unk7 = 0;
+ case WINANIM_CLOSE_KEYBOARD:
+ sScreenControl->curWindowAnimState = 9;
+ sScreenControl->destWindowAnimState = 0;
break;
- case 2:
- sUnknown_0203A11C->unk6 = 11;
- sUnknown_0203A11C->unk7 = 17;
+ case WINANIM_OPEN_WORD_SELECT:
+ sScreenControl->curWindowAnimState = 11;
+ sScreenControl->destWindowAnimState = 17;
break;
- case 3:
- sUnknown_0203A11C->unk6 = 17;
- sUnknown_0203A11C->unk7 = 0;
+ case WINANIM_CLOSE_WORD_SELECT:
+ sScreenControl->curWindowAnimState = 17;
+ sScreenControl->destWindowAnimState = 0;
break;
- case 4:
- sUnknown_0203A11C->unk6 = 17;
- sUnknown_0203A11C->unk7 = 10;
+ case WINANIM_RETURN_TO_KEYBOARD:
+ sScreenControl->curWindowAnimState = 17;
+ sScreenControl->destWindowAnimState = 10;
break;
- case 5:
- sUnknown_0203A11C->unk6 = 18;
- sUnknown_0203A11C->unk7 = 22;
+ case WINANIM_KEYBOARD_SWITCH_OUT:
+ sScreenControl->curWindowAnimState = 18;
+ sScreenControl->destWindowAnimState = 22;
break;
- case 6:
- sUnknown_0203A11C->unk6 = 22;
- sUnknown_0203A11C->unk7 = 18;
+ case WINANIM_KEYBOARD_SWITCH_IN:
+ sScreenControl->curWindowAnimState = 22;
+ sScreenControl->destWindowAnimState = 18;
break;
}
- sUnknown_0203A11C->unk8 = sUnknown_0203A11C->unk6 < sUnknown_0203A11C->unk7 ? 1 : -1;
+ sScreenControl->windowAnimStateDir = sScreenControl->curWindowAnimState < sScreenControl->destWindowAnimState ? 1 : -1;
}
-static bool8 sub_811DAA4(void)
+// Returns FALSE if the anim is finished
+static bool8 UpdateLowerWindowAnim(void)
{
- u8 var0, var1;
- if (sUnknown_0203A11C->unk6 == sUnknown_0203A11C->unk7)
+ u8 curState, destState;
+ if (sScreenControl->curWindowAnimState == sScreenControl->destWindowAnimState)
return FALSE;
- sUnknown_0203A11C->unk6 += sUnknown_0203A11C->unk8;
- sub_811DADC(sUnknown_0203A11C->unk6);
- var0 = sUnknown_0203A11C->unk6;
- var1 = sUnknown_0203A11C->unk7;
- return (var0 ^ var1) > 0;
+ sScreenControl->curWindowAnimState += sScreenControl->windowAnimStateDir;
+ DrawLowerWindowFrame(sScreenControl->curWindowAnimState);
+ curState = sScreenControl->curWindowAnimState;
+ destState = sScreenControl->destWindowAnimState;
+ return (curState ^ destState) > 0;
}
-static void sub_811DADC(u8 arg0)
+// States in this function are used incrementally with differing start/end cases
+// to draw the lower window and create the appearance that it's opening/closing/animating.
+// See InitLowerWindowAnim
+static void DrawLowerWindowFrame(u8 type)
{
FillBgTilemapBufferRect_Palette0(1, 0, 0, 10, 30, 10);
- switch (arg0)
+ switch (type)
{
- case 0:
+ case 0: // Closed
break;
case 1:
- sub_811DC28(11, 14, 3, 2);
+ BufferLowerWindowFrame(11, 14, 3, 2);
break;
case 2:
- sub_811DC28(9, 14, 7, 2);
+ BufferLowerWindowFrame(9, 14, 7, 2);
break;
case 3:
- sub_811DC28(7, 14, 11, 2);
+ BufferLowerWindowFrame(7, 14, 11, 2);
break;
case 4:
- sub_811DC28(5, 14, 15, 2);
+ BufferLowerWindowFrame(5, 14, 15, 2);
break;
case 5:
- sub_811DC28(3, 14, 19, 2);
+ BufferLowerWindowFrame(3, 14, 19, 2);
break;
case 6:
- sub_811DC28(1, 14, 23, 2);
+ BufferLowerWindowFrame(1, 14, 23, 2);
+ break;
+ case 7:
+ BufferLowerWindowFrame(1, 13, 23, 4);
+ break;
+ case 8:
+ BufferLowerWindowFrame(1, 12, 23, 6);
+ break;
+ case 9:
+ BufferLowerWindowFrame(1, 11, 23, 8);
+ break;
+ case 10:
+ BufferLowerWindowFrame(1, 10, 23, 10);
break;
case 11:
- sub_811DC28(1, 10, 24, 10);
+ BufferLowerWindowFrame(1, 10, 24, 10);
break;
case 12:
- sub_811DC28(1, 10, 25, 10);
+ BufferLowerWindowFrame(1, 10, 25, 10);
break;
case 13:
- sub_811DC28(1, 10, 26, 10);
+ BufferLowerWindowFrame(1, 10, 26, 10);
break;
case 14:
- sub_811DC28(1, 10, 27, 10);
+ BufferLowerWindowFrame(1, 10, 27, 10);
break;
case 15:
- sub_811DC28(1, 10, 28, 10);
+ BufferLowerWindowFrame(1, 10, 28, 10);
break;
case 16:
- sub_811DC28(1, 10, 29, 10);
+ BufferLowerWindowFrame(1, 10, 29, 10);
break;
case 17:
- sub_811DC28(0, 10, 30, 10);
+ BufferLowerWindowFrame(0, 10, 30, 10);
break;
- case 10:
case 18:
- sub_811DC28(1, 10, 23, 10);
+ BufferLowerWindowFrame(1, 10, 23, 10);
break;
- case 9:
case 19:
- sub_811DC28(1, 11, 23, 8);
+ BufferLowerWindowFrame(1, 11, 23, 8);
break;
- case 8:
case 20:
- sub_811DC28(1, 12, 23, 6);
+ BufferLowerWindowFrame(1, 12, 23, 6);
break;
- case 7:
case 21:
- sub_811DC28(1, 13, 23, 4);
+ BufferLowerWindowFrame(1, 13, 23, 4);
break;
case 22:
- sub_811DC28(1, 14, 23, 2);
+ BufferLowerWindowFrame(1, 14, 23, 2);
break;
}
CopyBgTilemapBufferToVram(1);
}
-static void sub_811DC28(int left, int top, int width, int height)
+static void BufferLowerWindowFrame(int left, int top, int width, int height)
{
u16 *tilemap;
int right;
int bottom;
int x, y;
- tilemap = sUnknown_0203A11C->unk300;
+ tilemap = sScreenControl->bg1TilemapBuffer;
right = left + width - 1;
bottom = top + height - 1;
x = left;
y = top;
- tilemap[y * 32 + x] = 0x4001;
+
+ // Draw top edge
+ tilemap[y * 32 + x] = FRAME_OFFSET_GREEN + FRAME_TILE_TOP_L_CORNER;
x++;
for (; x < right; x++)
- tilemap[y * 32 + x] = 0x4002;
+ tilemap[y * 32 + x] = FRAME_OFFSET_GREEN + FRAME_TILE_TOP_EDGE;
- tilemap[y * 32 + x] = 0x4003;
+ tilemap[y * 32 + x] = FRAME_OFFSET_GREEN + FRAME_TILE_TOP_R_CORNER;
y++;
+
+ // Draw middle section
for (; y < bottom; y++)
{
- tilemap[y * 32 + left] = 0x4005;
+ tilemap[y * 32 + left] = FRAME_OFFSET_GREEN + FRAME_TILE_L_EDGE;
x = left + 1;
for (; x < right; x++)
- tilemap[y * 32 + x] = 0x4000;
+ tilemap[y * 32 + x] = FRAME_OFFSET_GREEN + FRAME_TILE_TRANSPARENT;
- tilemap[y * 32 + x] = 0x4007;
+ tilemap[y * 32 + x] = FRAME_OFFSET_GREEN + FRAME_TILE_R_EDGE;
}
- tilemap[y * 32 + left] = 0x4009;
+ // Draw bottom edge
+ tilemap[y * 32 + left] = FRAME_OFFSET_GREEN + FRAME_TILE_BOTTOM_L_CORNER;
x = left + 1;
for (; x < right; x++)
- tilemap[y * 32 + x] = 0x400A;
+ tilemap[y * 32 + x] = FRAME_OFFSET_GREEN + FRAME_TILE_BOTTOM_EDGE;
- tilemap[y * 32 + x] = 0x400B;
- sub_811DE5C((left + 1) * 8, (top + 1) * 8, (width - 2) * 8, (height - 2) * 8);
+ tilemap[y * 32 + x] = FRAME_OFFSET_GREEN + FRAME_TILE_BOTTOM_R_CORNER;
+
+ SetWindowDimensions((left + 1) * 8, (top + 1) * 8, (width - 2) * 8, (height - 2) * 8);
}
-static void sub_811DD84(void)
+static void ResetLowerWindowScroll(void)
{
ChangeBgY(2, 0x800, 0);
- sUnknown_0203A11C->unk2CE = 0;
+ sScreenControl->scrollOffset = 0;
}
-static void sub_811DDAC(s16 arg0, u8 arg1)
+static void InitLowerWindowScroll(s16 scrollChange, u8 speed)
{
int bgY;
- s16 var0;
+ s16 yChange;
bgY = GetBgY(2);
- sUnknown_0203A11C->unk2CE += arg0;
- var0 = arg0 * 16;
- bgY += var0 << 8;
- if (arg1)
+ sScreenControl->scrollOffset += scrollChange;
+ yChange = scrollChange * 16;
+ bgY += yChange * 256;
+ if (speed)
{
- sUnknown_0203A11C->unk2D0 = bgY;
- sUnknown_0203A11C->unk2D4 = arg1 * 256;
- if (var0 < 0)
- sUnknown_0203A11C->unk2D4 = -sUnknown_0203A11C->unk2D4;
+ sScreenControl->scrollDest = bgY;
+ sScreenControl->scrollSpeed = speed * 256;
+ if (yChange < 0)
+ sScreenControl->scrollSpeed = -sScreenControl->scrollSpeed;
}
else
{
@@ -4317,28 +4573,28 @@ static void sub_811DDAC(s16 arg0, u8 arg1)
}
}
-static bool8 sub_811DE10(void)
+static bool8 UpdateLowerWindowScroll(void)
{
int bgY;
bgY = GetBgY(2);
- if (bgY == sUnknown_0203A11C->unk2D0)
+ if (bgY == sScreenControl->scrollDest)
{
return FALSE;
}
else
{
- ChangeBgY(2, sUnknown_0203A11C->unk2D4, 1);
+ ChangeBgY(2, sScreenControl->scrollSpeed, 1);
return TRUE;
}
}
-static int sub_811DE48(void)
+static int GetLowerWindowScrollOffset(void)
{
- return sUnknown_0203A11C->unk2CE;
+ return sScreenControl->scrollOffset;
}
-static void sub_811DE5C(u8 left, u8 top, u8 width, u8 height)
+static void SetWindowDimensions(u8 left, u8 top, u8 width, u8 height)
{
u16 horizontalDimensions = WIN_RANGE(left, left + width);
u16 verticalDimensions = WIN_RANGE(top, top + height);
@@ -4346,244 +4602,258 @@ static void sub_811DE5C(u8 left, u8 top, u8 width, u8 height)
SetGpuReg(REG_OFFSET_WIN0V, verticalDimensions);
}
-static void sub_811DE90(void)
+static void LoadEasyChatGfx(void)
{
u32 i;
- LoadSpriteSheets(sEasyChatSpriteSheets);
- LoadSpritePalettes(sEasyChatSpritePalettes);
- for (i = 0; i < ARRAY_COUNT(sUnknown_08597CE8); i++)
- LoadCompressedSpriteSheet(&sUnknown_08597CE8[i]);
+ LoadSpriteSheets(sSpriteSheets);
+ LoadSpritePalettes(sSpritePalettes);
+ for (i = 0; i < ARRAY_COUNT(sCompressedSpriteSheets); i++)
+ LoadCompressedSpriteSheet(&sCompressedSpriteSheets[i]);
}
-static void sub_811DEC4(void)
+#define sDelayTimer data[0]
+#define sAnimateCursor data[1]
+
+static void CreateMainCursorSprite(void)
{
u8 frameId = GetEasyChatScreenFrameId();
int x = sPhraseFrameDimensions[frameId].left * 8 + 13;
int y = sPhraseFrameDimensions[frameId].top * 8 + 8;
- u8 spriteId = CreateSprite(&sUnknown_08597D18, x, y, 2);
- sUnknown_0203A11C->unk2D8 = &gSprites[spriteId];
- gSprites[spriteId].data[1] = 1;
+ u8 spriteId = CreateSprite(&sSpriteTemplate_TriangleCursor, x, y, 2);
+ sScreenControl->mainCursorSprite = &gSprites[spriteId];
+ gSprites[spriteId].sAnimateCursor = TRUE;
}
-static void sub_811DF28(struct Sprite *sprite)
+static void SpriteCB_Cursor(struct Sprite *sprite)
{
- if (sprite->data[1])
+ if (sprite->sAnimateCursor)
{
- if (++sprite->data[0] > 2)
+ if (++sprite->sDelayTimer > 2)
{
- sprite->data[0] = 0;
+ sprite->sDelayTimer = 0;
if (++sprite->pos2.x > 0)
sprite->pos2.x = -6;
}
}
}
-static void sub_811DF60(u8 x, u8 y)
+static void SetMainCursorPos(u8 x, u8 y)
{
- sUnknown_0203A11C->unk2D8->pos1.x = x;
- sUnknown_0203A11C->unk2D8->pos1.y = y;
- sUnknown_0203A11C->unk2D8->pos2.x = 0;
- sUnknown_0203A11C->unk2D8->data[0] = 0;
+ sScreenControl->mainCursorSprite->pos1.x = x;
+ sScreenControl->mainCursorSprite->pos1.y = y;
+ sScreenControl->mainCursorSprite->pos2.x = 0;
+ sScreenControl->mainCursorSprite->sDelayTimer = 0;
}
-static void sub_811DF90(void)
+static void StopMainCursorAnim(void)
{
- sUnknown_0203A11C->unk2D8->data[0] = 0;
- sUnknown_0203A11C->unk2D8->data[1] = 0;
- sUnknown_0203A11C->unk2D8->pos2.x = 0;
+ sScreenControl->mainCursorSprite->sDelayTimer = 0;
+ sScreenControl->mainCursorSprite->sAnimateCursor = FALSE;
+ sScreenControl->mainCursorSprite->pos2.x = 0;
}
-static void sub_811DFB0(void)
+static void StartMainCursorAnim(void)
{
- sUnknown_0203A11C->unk2D8->data[1] = 1;
+ sScreenControl->mainCursorSprite->sAnimateCursor = TRUE;
}
-static void sub_811DFC8(void)
+static void CreateRectangleCursorSprites(void)
{
- u8 spriteId = CreateSprite(&sUnknown_08597D68, 0, 0, 3);
- sUnknown_0203A11C->unk2DC = &gSprites[spriteId];
- sUnknown_0203A11C->unk2DC->pos2.x = 32;
+ u8 spriteId = CreateSprite(&sSpriteTemplate_RectangleCursor, 0, 0, 3);
+ sScreenControl->rectangleCursorSpriteRight = &gSprites[spriteId];
+ sScreenControl->rectangleCursorSpriteRight->pos2.x = 32;
- spriteId = CreateSprite(&sUnknown_08597D68, 0, 0, 3);
- sUnknown_0203A11C->unk2E0 = &gSprites[spriteId];
- sUnknown_0203A11C->unk2E0->pos2.x = -32;
+ spriteId = CreateSprite(&sSpriteTemplate_RectangleCursor, 0, 0, 3);
+ sScreenControl->rectangleCursorSpriteLeft = &gSprites[spriteId];
+ sScreenControl->rectangleCursorSpriteLeft->pos2.x = -32;
- sUnknown_0203A11C->unk2DC->hFlip = 1;
- sub_811E088();
+ sScreenControl->rectangleCursorSpriteRight->hFlip = TRUE;
+ UpdateRectangleCursorPos();
}
-static void sub_811E050(void)
+static void DestroyRectangleCursorSprites(void)
{
- DestroySprite(sUnknown_0203A11C->unk2DC);
- sUnknown_0203A11C->unk2DC = NULL;
- DestroySprite(sUnknown_0203A11C->unk2E0);
- sUnknown_0203A11C->unk2E0 = NULL;
+ DestroySprite(sScreenControl->rectangleCursorSpriteRight);
+ sScreenControl->rectangleCursorSpriteRight = NULL;
+ DestroySprite(sScreenControl->rectangleCursorSpriteLeft);
+ sScreenControl->rectangleCursorSpriteLeft = NULL;
}
-static void sub_811E088(void)
+static void UpdateRectangleCursorPos(void)
{
- u8 var0;
- u8 var1;
+ s8 column;
+ s8 row;
- if (sUnknown_0203A11C->unk2DC && sUnknown_0203A11C->unk2E0)
+ if (sScreenControl->rectangleCursorSpriteRight
+ && sScreenControl->rectangleCursorSpriteLeft)
{
- sub_811BB9C(&var0, &var1);
- if (!sub_811BBB0())
- sub_811E0EC(var0, var1);
+ GetKeyboardCursorColAndRow(&column, &row);
+ if (!GetInAlphabetMode())
+ SetRectangleCursorPos_GroupMode(column, row);
else
- sub_811E1A4(var0, var1);
+ SetRectangleCursorPos_AlphabetMode(column, row);
}
}
-static void sub_811E0EC(s8 arg0, s8 arg1)
+static void SetRectangleCursorPos_GroupMode(s8 column, s8 row)
{
- if (arg0 != -1)
+ if (column != -1)
{
- StartSpriteAnim(sUnknown_0203A11C->unk2DC, 0);
- sUnknown_0203A11C->unk2DC->pos1.x = arg0 * 84 + 58;
- sUnknown_0203A11C->unk2DC->pos1.y = arg1 * 16 + 96;
+ // In group name window
+ StartSpriteAnim(sScreenControl->rectangleCursorSpriteRight, RECTCURSOR_ANIM_ON_GROUP);
+ sScreenControl->rectangleCursorSpriteRight->pos1.x = column * 84 + 58;
+ sScreenControl->rectangleCursorSpriteRight->pos1.y = row * 16 + 96;
- StartSpriteAnim(sUnknown_0203A11C->unk2E0, 0);
- sUnknown_0203A11C->unk2E0->pos1.x = arg0 * 84 + 58;
- sUnknown_0203A11C->unk2E0->pos1.y = arg1 * 16 + 96;
+ StartSpriteAnim(sScreenControl->rectangleCursorSpriteLeft, RECTCURSOR_ANIM_ON_GROUP);
+ sScreenControl->rectangleCursorSpriteLeft->pos1.x = column * 84 + 58;
+ sScreenControl->rectangleCursorSpriteLeft->pos1.y = row * 16 + 96;
}
else
{
- StartSpriteAnim(sUnknown_0203A11C->unk2DC, 1);
- sUnknown_0203A11C->unk2DC->pos1.x = 216;
- sUnknown_0203A11C->unk2DC->pos1.y = arg1 * 16 + 112;
+ // In button window
+ StartSpriteAnim(sScreenControl->rectangleCursorSpriteRight, RECTCURSOR_ANIM_ON_BUTTON);
+ sScreenControl->rectangleCursorSpriteRight->pos1.x = 216;
+ sScreenControl->rectangleCursorSpriteRight->pos1.y = row * 16 + 112;
- StartSpriteAnim(sUnknown_0203A11C->unk2E0, 1);
- sUnknown_0203A11C->unk2E0->pos1.x = 216;
- sUnknown_0203A11C->unk2E0->pos1.y = arg1 * 16 + 112;
+ StartSpriteAnim(sScreenControl->rectangleCursorSpriteLeft, RECTCURSOR_ANIM_ON_BUTTON);
+ sScreenControl->rectangleCursorSpriteLeft->pos1.x = 216;
+ sScreenControl->rectangleCursorSpriteLeft->pos1.y = row * 16 + 112;
}
}
-static void sub_811E1A4(s8 arg0, s8 arg1)
+static void SetRectangleCursorPos_AlphabetMode(s8 column, s8 row)
{
int anim;
int x, y;
- if (arg0 != -1)
+ if (column != -1)
{
- y = arg1 * 16 + 96;
+ y = row * 16 + 96;
x = 32;
- if (arg0 == 6 && arg1 == 0)
+ if (column == NUM_ALPHABET_COLUMNS - 1 && row == 0)
{
+ // Cursor is on 'Others'
x = 158;
- anim = 2;
+ anim = RECTCURSOR_ANIM_ON_OTHERS;
}
else
{
- x += sUnknown_08597D08[arg0 < ARRAY_COUNT(sUnknown_08597D08) ? arg0 : 0];
- anim = 3;
+ // Cursor is on a letter
+ x += sAlphabetKeyboardColumnOffsets[(u8)column < NUM_ALPHABET_COLUMNS ? column : 0];
+ anim = RECTCURSOR_ANIM_ON_LETTER;
}
- StartSpriteAnim(sUnknown_0203A11C->unk2DC, anim);
- sUnknown_0203A11C->unk2DC->pos1.x = x;
- sUnknown_0203A11C->unk2DC->pos1.y = y;
+ StartSpriteAnim(sScreenControl->rectangleCursorSpriteRight, anim);
+ sScreenControl->rectangleCursorSpriteRight->pos1.x = x;
+ sScreenControl->rectangleCursorSpriteRight->pos1.y = y;
- StartSpriteAnim(sUnknown_0203A11C->unk2E0, anim);
- sUnknown_0203A11C->unk2E0->pos1.x = x;
- sUnknown_0203A11C->unk2E0->pos1.y = y;
+ StartSpriteAnim(sScreenControl->rectangleCursorSpriteLeft, anim);
+ sScreenControl->rectangleCursorSpriteLeft->pos1.x = x;
+ sScreenControl->rectangleCursorSpriteLeft->pos1.y = y;
}
else
{
- StartSpriteAnim(sUnknown_0203A11C->unk2DC, 1);
- sUnknown_0203A11C->unk2DC->pos1.x = 216;
- sUnknown_0203A11C->unk2DC->pos1.y = arg1 * 16 + 112;
+ // In button window
+ StartSpriteAnim(sScreenControl->rectangleCursorSpriteRight, RECTCURSOR_ANIM_ON_BUTTON);
+ sScreenControl->rectangleCursorSpriteRight->pos1.x = 216;
+ sScreenControl->rectangleCursorSpriteRight->pos1.y = row * 16 + 112;
- StartSpriteAnim(sUnknown_0203A11C->unk2E0, 1);
- sUnknown_0203A11C->unk2E0->pos1.x = 216;
- sUnknown_0203A11C->unk2E0->pos1.y = arg1 * 16 + 112;
+ StartSpriteAnim(sScreenControl->rectangleCursorSpriteLeft, RECTCURSOR_ANIM_ON_BUTTON);
+ sScreenControl->rectangleCursorSpriteLeft->pos1.x = 216;
+ sScreenControl->rectangleCursorSpriteLeft->pos1.y = row * 16 + 112;
}
}
-static void sub_811E288(void)
+// Cursor for selecting a new word
+// Identical in appearance to the 'main' cursor
+static void CreateWordSelectCursorSprite(void)
{
- u8 spriteId = CreateSprite(&sUnknown_08597D18, 0, 0, 4);
- sUnknown_0203A11C->unk2E4 = &gSprites[spriteId];
- sUnknown_0203A11C->unk2E4->callback = sub_811E2DC;
- sUnknown_0203A11C->unk2E4->oam.priority = 2;
- sub_811E30C();
+ u8 spriteId = CreateSprite(&sSpriteTemplate_TriangleCursor, 0, 0, 4);
+ sScreenControl->wordSelectCursorSprite = &gSprites[spriteId];
+ sScreenControl->wordSelectCursorSprite->callback = SpriteCB_WordSelectCursor;
+ sScreenControl->wordSelectCursorSprite->oam.priority = 2;
+ UpdateWordSelectCursorPos();
}
-static void sub_811E2DC(struct Sprite *sprite)
+static void SpriteCB_WordSelectCursor(struct Sprite *sprite)
{
- if (++sprite->data[0] > 2)
+ if (++sprite->sDelayTimer > 2)
{
- sprite->data[0] = 0;
+ sprite->sDelayTimer = 0;
if (++sprite->pos2.x > 0)
sprite->pos2.x = -6;
}
}
-static void sub_811E30C(void)
+static void UpdateWordSelectCursorPos(void)
{
- s8 var0, var1, x, y;
+ s8 column, row, x, y;
- sub_811BBC8(&var0, &var1);
- x = var0 * 13;
+ GetWordSelectColAndRow(&column, &row);
+ x = column * 13;
x = x * 8 + 28;
- y = var1 * 16 + 96;
- sub_811E34C(x, y);
+ y = row * 16 + 96;
+ SetWordSelectCursorPos(x, y);
}
-static void sub_811E34C(u8 x, u8 y)
+static void SetWordSelectCursorPos(u8 x, u8 y)
{
- if (sUnknown_0203A11C->unk2E4)
+ if (sScreenControl->wordSelectCursorSprite)
{
- sUnknown_0203A11C->unk2E4->pos1.x = x;
- sUnknown_0203A11C->unk2E4->pos1.y = y;
- sUnknown_0203A11C->unk2E4->pos2.x = 0;
- sUnknown_0203A11C->unk2E4->data[0] = 0;
+ sScreenControl->wordSelectCursorSprite->pos1.x = x;
+ sScreenControl->wordSelectCursorSprite->pos1.y = y;
+ sScreenControl->wordSelectCursorSprite->pos2.x = 0;
+ sScreenControl->wordSelectCursorSprite->sDelayTimer = 0;
}
}
-static void sub_811E380(void)
+static void DestroyWordSelectCursorSprite(void)
{
- if (sUnknown_0203A11C->unk2E4)
+ if (sScreenControl->wordSelectCursorSprite)
{
- DestroySprite(sUnknown_0203A11C->unk2E4);
- sUnknown_0203A11C->unk2E4 = NULL;
+ DestroySprite(sScreenControl->wordSelectCursorSprite);
+ sScreenControl->wordSelectCursorSprite = NULL;
}
}
-static void sub_811E3AC(void)
+static void CreateSideWindowSprites(void)
{
- u8 spriteId = CreateSprite(&sUnknown_08597DF0, 208, 128, 6);
- sUnknown_0203A11C->unk2E8 = &gSprites[spriteId];
- sUnknown_0203A11C->unk2E8->pos2.x = -64;
+ u8 spriteId = CreateSprite(&sSpriteTemplate_ButtonWindow, 208, 128, 6);
+ sScreenControl->buttonWindowSprite = &gSprites[spriteId];
+ sScreenControl->buttonWindowSprite->pos2.x = -64;
- spriteId = CreateSprite(&sUnknown_08597DD0, 208, 80, 5);
- sUnknown_0203A11C->unk2EC = &gSprites[spriteId];
- sUnknown_0203A11C->unk9 = 0;
+ spriteId = CreateSprite(&sSpriteTemplate_ModeWindow, 208, 80, 5);
+ sScreenControl->modeWindowSprite = &gSprites[spriteId];
+ sScreenControl->modeWindowState = 0;
}
-static bool8 sub_811E418(void)
+static bool8 ShowSideWindow(void)
{
- switch (sUnknown_0203A11C->unk9)
+ switch (sScreenControl->modeWindowState)
{
default:
return FALSE;
case 0:
- sUnknown_0203A11C->unk2E8->pos2.x += 8;
- if (sUnknown_0203A11C->unk2E8->pos2.x >= 0)
+ // Slide button window on
+ sScreenControl->buttonWindowSprite->pos2.x += 8;
+ if (sScreenControl->buttonWindowSprite->pos2.x >= 0)
{
- sUnknown_0203A11C->unk2E8->pos2.x = 0;
- if (!sub_811BBB0())
- StartSpriteAnim(sUnknown_0203A11C->unk2EC, 1);
+ sScreenControl->buttonWindowSprite->pos2.x = 0;
+
+ // Set mode window anim
+ if (!GetInAlphabetMode())
+ StartSpriteAnim(sScreenControl->modeWindowSprite, MODEWINDOW_ANIM_TO_GROUP);
else
- StartSpriteAnim(sUnknown_0203A11C->unk2EC, 2);
+ StartSpriteAnim(sScreenControl->modeWindowSprite, MODEWINDOW_ANIM_TO_ALPHABET);
- sUnknown_0203A11C->unk9++;
+ sScreenControl->modeWindowState++;
}
break;
case 1:
- if (sUnknown_0203A11C->unk2EC->animEnded)
+ if (sScreenControl->modeWindowSprite->animEnded)
{
- sUnknown_0203A11C->unk9 = 2;
+ sScreenControl->modeWindowState = 2;
return FALSE;
}
}
@@ -4591,31 +4861,31 @@ static bool8 sub_811E418(void)
return TRUE;
}
-static void sub_811E4AC(void)
+static void HideModeWindow(void)
{
- sUnknown_0203A11C->unk9 = 0;
- StartSpriteAnim(sUnknown_0203A11C->unk2EC, 3);
+ sScreenControl->modeWindowState = 0;
+ StartSpriteAnim(sScreenControl->modeWindowSprite, MODEWINDOW_ANIM_TO_HIDDEN);
}
-static bool8 sub_811E4D0(void)
+static bool8 DestroySideWindowSprites(void)
{
- switch (sUnknown_0203A11C->unk9)
+ switch (sScreenControl->modeWindowState)
{
default:
return FALSE;
case 0:
- if (sUnknown_0203A11C->unk2EC->animEnded)
- sUnknown_0203A11C->unk9 = 1;
+ if (sScreenControl->modeWindowSprite->animEnded)
+ sScreenControl->modeWindowState = 1;
break;
case 1:
- sUnknown_0203A11C->unk2E8->pos2.x -= 8;
- if (sUnknown_0203A11C->unk2E8->pos2.x <= -64)
+ sScreenControl->buttonWindowSprite->pos2.x -= 8;
+ if (sScreenControl->buttonWindowSprite->pos2.x <= -64)
{
- DestroySprite(sUnknown_0203A11C->unk2EC);
- DestroySprite(sUnknown_0203A11C->unk2E8);
- sUnknown_0203A11C->unk2EC = NULL;
- sUnknown_0203A11C->unk2E8 = NULL;
- sUnknown_0203A11C->unk9++;
+ DestroySprite(sScreenControl->modeWindowSprite);
+ DestroySprite(sScreenControl->buttonWindowSprite);
+ sScreenControl->modeWindowSprite = NULL;
+ sScreenControl->buttonWindowSprite = NULL;
+ sScreenControl->modeWindowState++;
return FALSE;
}
}
@@ -4623,95 +4893,98 @@ static bool8 sub_811E4D0(void)
return TRUE;
}
-static void sub_811E55C(void)
+static void SetModeWindowToTransition(void)
{
- StartSpriteAnim(sUnknown_0203A11C->unk2EC, 4);
+ StartSpriteAnim(sScreenControl->modeWindowSprite, MODEWINDOW_ANIM_TRANSITION);
}
-static void sub_811E578(void)
+static void UpdateModeWindowAnim(void)
{
- if (!sub_811BBB0())
- StartSpriteAnim(sUnknown_0203A11C->unk2EC, 1);
+ if (!GetInAlphabetMode())
+ StartSpriteAnim(sScreenControl->modeWindowSprite, MODEWINDOW_ANIM_TO_GROUP);
else
- StartSpriteAnim(sUnknown_0203A11C->unk2EC, 2);
+ StartSpriteAnim(sScreenControl->modeWindowSprite, MODEWINDOW_ANIM_TO_ALPHABET);
}
-static bool8 sub_811E5B8(void)
+static bool8 IsModeWindowAnimActive(void)
{
- return !sUnknown_0203A11C->unk2EC->animEnded;
+ return !sScreenControl->modeWindowSprite->animEnded;
}
-static void sub_811E5D4(void)
+static void CreateScrollIndicatorSprites(void)
{
- u8 spriteId = CreateSprite(&sUnknown_08597E48, 96, 80, 0);
+ u8 spriteId = CreateSprite(&sSpriteTemplate_ScrollIndicator, 96, 80, 0);
if (spriteId != MAX_SPRITES)
- sUnknown_0203A11C->unk2F0 = &gSprites[spriteId];
+ sScreenControl->scrollIndicatorUpSprite = &gSprites[spriteId];
- spriteId = CreateSprite(&sUnknown_08597E48, 96, 156, 0);
+ spriteId = CreateSprite(&sSpriteTemplate_ScrollIndicator, 96, 156, 0);
if (spriteId != MAX_SPRITES)
{
- sUnknown_0203A11C->unk2F4 = &gSprites[spriteId];
- sUnknown_0203A11C->unk2F4->vFlip = 1;
+ sScreenControl->scrollIndicatorDownSprite = &gSprites[spriteId];
+ sScreenControl->scrollIndicatorDownSprite->vFlip = TRUE;
}
- sub_811E6B0();
+ HideScrollIndicators();
}
-static void sub_811E64C(void)
+static void UpdateScrollIndicatorsVisibility(void)
{
- sUnknown_0203A11C->unk2F0->invisible = !sub_811BBF8();
- sUnknown_0203A11C->unk2F4->invisible = !sub_811BC2C();
+ sScreenControl->scrollIndicatorUpSprite->invisible = !CanScrollUp();
+ sScreenControl->scrollIndicatorDownSprite->invisible = !CanScrollDown();
}
-static void sub_811E6B0(void)
+static void HideScrollIndicators(void)
{
- sUnknown_0203A11C->unk2F0->invisible = 1;
- sUnknown_0203A11C->unk2F4->invisible = 1;
+ sScreenControl->scrollIndicatorUpSprite->invisible = TRUE;
+ sScreenControl->scrollIndicatorDownSprite->invisible = TRUE;
}
-static void sub_811E6E0(int arg0)
+static void SetScrollIndicatorXPos(bool32 inWordSelect)
{
- if (!arg0)
+ if (!inWordSelect)
{
- sUnknown_0203A11C->unk2F0->pos1.x = 96;
- sUnknown_0203A11C->unk2F4->pos1.x = 96;
+ // Keyboard (only relevant for group mode, can't scroll in alphabet mode)
+ sScreenControl->scrollIndicatorUpSprite->pos1.x = 96;
+ sScreenControl->scrollIndicatorDownSprite->pos1.x = 96;
}
else
{
- sUnknown_0203A11C->unk2F0->pos1.x = 120;
- sUnknown_0203A11C->unk2F4->pos1.x = 120;
+ // Word select
+ sScreenControl->scrollIndicatorUpSprite->pos1.x = 120;
+ sScreenControl->scrollIndicatorDownSprite->pos1.x = 120;
}
}
-static void sub_811E720(void)
+// The Start/Select buttons are used as page scroll indicators
+static void CreateStartSelectButtonSprites(void)
{
- u8 spriteId = CreateSprite(&sUnknown_08597E30, 220, 84, 1);
+ u8 spriteId = CreateSprite(&sSpriteTemplate_StartSelectButton, 220, 84, 1);
if (spriteId != MAX_SPRITES)
- sUnknown_0203A11C->unk2F8 = &gSprites[spriteId];
+ sScreenControl->startButtonSprite = &gSprites[spriteId];
- spriteId = CreateSprite(&sUnknown_08597E30, 220, 156, 1);
+ spriteId = CreateSprite(&sSpriteTemplate_StartSelectButton, 220, 156, 1);
if (spriteId != MAX_SPRITES)
{
- sUnknown_0203A11C->unk2FC = &gSprites[spriteId];
- StartSpriteAnim(sUnknown_0203A11C->unk2FC, 1);
+ sScreenControl->selectButtonSprite = &gSprites[spriteId];
+ StartSpriteAnim(sScreenControl->selectButtonSprite, 1);
}
- sub_811E7F8();
+ HideStartSelectButtons();
}
-static void sub_811E794(void)
+static void UpdateStartSelectButtonsVisibility(void)
{
- sUnknown_0203A11C->unk2F8->invisible = !sub_811BBF8();
- sUnknown_0203A11C->unk2FC->invisible = !sub_811BC2C();
+ sScreenControl->startButtonSprite->invisible = !CanScrollUp();
+ sScreenControl->selectButtonSprite->invisible = !CanScrollDown();
}
-static void sub_811E7F8(void)
+static void HideStartSelectButtons(void)
{
- sUnknown_0203A11C->unk2F8->invisible = 1;
- sUnknown_0203A11C->unk2FC->invisible = 1;
+ sScreenControl->startButtonSprite->invisible = TRUE;
+ sScreenControl->selectButtonSprite->invisible = TRUE;
}
-static void sub_811E828(void)
+static void TryAddInterviewObjectEvents(void)
{
int graphicsId;
u8 spriteId;
@@ -4731,9 +5004,10 @@ static void sub_811E828(void)
return;
}
- if (GetEasyChatScreenFrameId() != 4)
+ if (GetEasyChatScreenFrameId() != FRAMEID_INTERVIEW_SHOW_PERSON)
return;
+ // Add object for reporter/interviewing fan (facing left)
spriteId = AddPseudoObjectEvent(graphicsId, SpriteCallbackDummy, 76, 40, 0);
if (spriteId != MAX_SPRITES)
{
@@ -4741,6 +5015,7 @@ static void sub_811E828(void)
StartSpriteAnim(&gSprites[spriteId], 2);
}
+ // Add object for player (facing right)
spriteId = AddPseudoObjectEvent(
gSaveBlock2Ptr->playerGender == MALE ? OBJ_EVENT_GFX_RIVAL_BRENDAN_NORMAL : OBJ_EVENT_GFX_RIVAL_MAY_NORMAL,
SpriteCallbackDummy,
@@ -4760,33 +5035,33 @@ int GetFooterIndex(void)
u8 frameId = GetEasyChatScreenFrameId();
switch (sPhraseFrameDimensions[frameId].footerId)
{
- case 1:
- return 1;
- case 2:
- return 2;
- case 0:
- return 0;
+ case FOOTER_QUIZ:
+ return FOOTER_QUIZ;
+ case FOOTER_ANSWER:
+ return FOOTER_ANSWER;
+ case FOOTER_NORMAL:
+ return FOOTER_NORMAL;
default:
- return 3;
+ return NUM_FOOTER_TYPES;
}
}
static int GetFooterOptionXOffset(int option)
{
int footerIndex = GetFooterIndex();
- if (footerIndex < 3)
+ if (footerIndex < NUM_FOOTER_TYPES)
return sFooterOptionXOffsets[footerIndex][option] + 4;
else
return 0;
}
-static void sub_811E948(void)
+static void AddMainScreenButtonWindow(void)
{
int i;
u16 windowId;
struct WindowTemplate template;
- int footerId = GetFooterIndex();
- if (footerId == 3)
+ int footerIndex = GetFooterIndex();
+ if (footerIndex == NUM_FOOTER_TYPES)
return;
template.bg = 3;
@@ -4798,13 +5073,13 @@ static void sub_811E948(void)
template.baseBlock = 0x34;
windowId = AddWindow(&template);
FillWindowPixelBuffer(windowId, PIXEL_FILL(1));
- for (i = 0; i < 4; i++)
+ for (i = 0; i < (int)ARRAY_COUNT(sFooterTextOptions[0]); i++)
{
- const u8 *str = sFooterTextOptions[footerId][i];
+ const u8 *str = sFooterTextOptions[footerIndex][i];
if (str)
{
- int x = sFooterOptionXOffsets[footerId][i];
- sub_811D028(windowId, 1, str, x, 1, 0, NULL);
+ int x = sFooterOptionXOffsets[footerIndex][i];
+ PrintEasyChatText(windowId, 1, str, x, 1, 0, NULL);
}
}
@@ -4821,7 +5096,7 @@ static bool8 IsEasyChatGroupUnlocked(u8 groupId)
case EC_GROUP_MOVE_1:
case EC_GROUP_MOVE_2:
return FlagGet(FLAG_SYS_GAME_CLEAR);
- case EC_GROUP_POKEMON_2:
+ case EC_GROUP_POKEMON_NATIONAL:
return EasyChatIsNationalPokedexEnabled();
default:
return TRUE;
@@ -4839,14 +5114,14 @@ u16 EasyChat_GetNumWordsInGroup(u8 groupId)
return 0;
}
-bool8 sub_811EAA4(u16 easyChatWord)
+static bool8 IsEasyChatWordInvalid(u16 easyChatWord)
{
u16 i;
u8 groupId;
u32 index;
u16 numWords;
const u16 *list;
- if (easyChatWord == 0xFFFF)
+ if (easyChatWord == EC_EMPTY_WORD)
return FALSE;
groupId = EC_GROUP(easyChatWord);
@@ -4858,7 +5133,7 @@ bool8 sub_811EAA4(u16 easyChatWord)
switch (groupId)
{
case EC_GROUP_POKEMON:
- case EC_GROUP_POKEMON_2:
+ case EC_GROUP_POKEMON_NATIONAL:
case EC_GROUP_MOVE_1:
case EC_GROUP_MOVE_2:
list = gEasyChatGroups[groupId].wordData.valueList;
@@ -4868,12 +5143,12 @@ bool8 sub_811EAA4(u16 easyChatWord)
return FALSE;
}
return TRUE;
- default:
- if (index >= numWords)
- return TRUE;
- else
- return FALSE;
}
+
+ if (index >= numWords)
+ return TRUE;
+ else
+ return FALSE;
}
bool8 IsBardWordInvalid(u16 easyChatWord)
@@ -4887,7 +5162,7 @@ bool8 IsBardWordInvalid(u16 easyChatWord)
switch (groupId)
{
case EC_GROUP_POKEMON:
- case EC_GROUP_POKEMON_2:
+ case EC_GROUP_POKEMON_NATIONAL:
numWordsInGroup = gNumBardWords_Species;
break;
case EC_GROUP_MOVE_1:
@@ -4905,12 +5180,12 @@ bool8 IsBardWordInvalid(u16 easyChatWord)
return FALSE;
}
-const u8 *GetEasyChatWord(u8 groupId, u16 index)
+static const u8 *GetEasyChatWord(u8 groupId, u16 index)
{
switch (groupId)
{
case EC_GROUP_POKEMON:
- case EC_GROUP_POKEMON_2:
+ case EC_GROUP_POKEMON_NATIONAL:
return gSpeciesNames[index];
case EC_GROUP_MOVE_1:
case EC_GROUP_MOVE_2:
@@ -4923,11 +5198,11 @@ const u8 *GetEasyChatWord(u8 groupId, u16 index)
u8 *CopyEasyChatWord(u8 *dest, u16 easyChatWord)
{
u8 *resultStr;
- if (sub_811EAA4(easyChatWord))
+ if (IsEasyChatWordInvalid(easyChatWord))
{
resultStr = StringCopy(dest, gText_ThreeQuestionMarks);
}
- else if (easyChatWord != 0xFFFF)
+ else if (easyChatWord != EC_EMPTY_WORD)
{
u16 index = EC_INDEX(easyChatWord);
u8 groupId = EC_GROUP(easyChatWord);
@@ -4952,7 +5227,7 @@ u8 *ConvertEasyChatWordsToString(u8 *dest, const u16 *src, u16 columns, u16 rows
for (j = 0; j < numColumns; j++)
{
dest = CopyEasyChatWord(dest, *src);
- if (*src != 0xFFFF)
+ if (*src != EC_EMPTY_WORD)
{
*dest = CHAR_SPACE;
dest++;
@@ -4971,26 +5246,26 @@ u8 *ConvertEasyChatWordsToString(u8 *dest, const u16 *src, u16 columns, u16 rows
return dest;
}
-u8 *unref_sub_811EC98(u8 *dest, const u16 *src, u16 columns, u16 rows)
+static u8 *UnusedConvertEasyChatWordsToString(u8 *dest, const u16 *src, u16 columns, u16 rows)
{
u16 i, j, k;
u16 numColumns;
- int var0, var1;
+ int notEmpty, lineNumber;
numColumns = columns;
- var1 = 0;
+ lineNumber = 0;
columns--;
for (i = 0; i < rows; i++)
{
- const u16 *var2 = src;
- var0 = 0;
+ const u16 *str = src;
+ notEmpty = FALSE;
for (j = 0; j < numColumns; j++)
{
- if (var2[j] != 0xFFFF)
- var0 = 1;
+ if (str[j] != EC_EMPTY_WORD)
+ notEmpty = TRUE;
}
- if (!var0)
+ if (!notEmpty)
{
src += numColumns;
continue;
@@ -4999,7 +5274,7 @@ u8 *unref_sub_811EC98(u8 *dest, const u16 *src, u16 columns, u16 rows)
for (k = 0; k < columns; k++)
{
dest = CopyEasyChatWord(dest, *src);
- if (*src != 0xFFFF)
+ if (*src != EC_EMPTY_WORD)
{
*dest = CHAR_SPACE;
dest++;
@@ -5009,13 +5284,13 @@ u8 *unref_sub_811EC98(u8 *dest, const u16 *src, u16 columns, u16 rows)
}
dest = CopyEasyChatWord(dest, *(src++));
- if (var1 == 0)
+ if (lineNumber == 0)
*dest = CHAR_NEWLINE;
else
*dest = CHAR_PROMPT_SCROLL;
dest++;
- var1++;
+ lineNumber++;
}
dest--;
@@ -5025,10 +5300,10 @@ u8 *unref_sub_811EC98(u8 *dest, const u16 *src, u16 columns, u16 rows)
static u16 GetEasyChatWordStringLength(u16 easyChatWord)
{
- if (easyChatWord == 0xFFFF)
+ if (easyChatWord == EC_EMPTY_WORD)
return 0;
- if (sub_811EAA4(easyChatWord))
+ if (IsEasyChatWordInvalid(easyChatWord))
{
return StringLength(gText_ThreeQuestionMarks);
}
@@ -5061,7 +5336,7 @@ u16 GetRandomEasyChatWordFromGroup(u16 groupId)
{
u16 index = Random() % gEasyChatGroups[groupId].numWords;
if (groupId == EC_GROUP_POKEMON
- || groupId == EC_GROUP_POKEMON_2
+ || groupId == EC_GROUP_POKEMON_NATIONAL
|| groupId == EC_GROUP_MOVE_1
|| groupId == EC_GROUP_MOVE_2)
{
@@ -5074,7 +5349,7 @@ u16 GetRandomEasyChatWordFromGroup(u16 groupId)
u16 GetRandomEasyChatWordFromUnlockedGroup(u16 groupId)
{
if (!IsEasyChatGroupUnlocked(groupId))
- return 0xFFFF;
+ return EC_EMPTY_WORD;
if (groupId == EC_GROUP_POKEMON)
return GetRandomUnlockedEasyChatPokemon();
@@ -5169,7 +5444,7 @@ u16 GetNewHipsterPhraseToTeach(void)
u16 additionalPhraseId;
u8 numAdditionalPhrasesUnlocked = GetNumAdditionalPhrasesUnlocked();
if (numAdditionalPhrasesUnlocked == NUM_ADDITIONAL_PHRASES)
- return 0xFFFF;
+ return EC_EMPTY_WORD;
additionalPhraseId = Random() % (NUM_ADDITIONAL_PHRASES - numAdditionalPhrasesUnlocked);
for (i = 0; i < NUM_ADDITIONAL_PHRASES; i++)
@@ -5188,7 +5463,7 @@ u16 GetNewHipsterPhraseToTeach(void)
}
}
- return 0xFFFF;
+ return EC_EMPTY_WORD;
}
// Unused
@@ -5197,7 +5472,7 @@ u16 GetRandomTaughtHipsterPhrase(void)
u16 i;
u16 additionalPhraseId = GetNumAdditionalPhrasesUnlocked();
if (additionalPhraseId == 0)
- return 0xFFFF;
+ return EC_EMPTY_WORD;
additionalPhraseId = Random() % additionalPhraseId;
for (i = 0; i < NUM_ADDITIONAL_PHRASES; i++)
@@ -5211,7 +5486,7 @@ u16 GetRandomTaughtHipsterPhrase(void)
}
}
- return 0xFFFF;
+ return EC_EMPTY_WORD;
}
static bool8 EasyChatIsNationalPokedexEnabled(void)
@@ -5226,7 +5501,7 @@ static u16 GetRandomUnlockedEasyChatPokemon(void)
const u16 *species;
u16 index = EasyChat_GetNumWordsInGroup(EC_GROUP_POKEMON);
if (index == 0)
- return 0xFFFF;
+ return EC_EMPTY_WORD;
index = Random() % index;
species = gEasyChatGroups[EC_GROUP_POKEMON].wordData.valueList;
@@ -5245,29 +5520,29 @@ static u16 GetRandomUnlockedEasyChatPokemon(void)
species++;
}
- return 0xFFFF;
+ return EC_EMPTY_WORD;
}
void InitEasyChatPhrases(void)
{
u16 i, j;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < ARRAY_COUNT(sDefaultProfileWords); i++)
gSaveBlock1Ptr->easyChatProfile[i] = sDefaultProfileWords[i];
- for (i = 0; i < 6; i++)
+ for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++)
gSaveBlock1Ptr->easyChatBattleStart[i] = sDefaultBattleStartWords[i];
- for (i = 0; i < 6; i++)
- gSaveBlock1Ptr->easyChatBattleWon[i] = sUnknown_0859E640[i];
+ for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++)
+ gSaveBlock1Ptr->easyChatBattleWon[i] = sDefaultBattleWonWords[i];
- for (i = 0; i < 6; i++)
- gSaveBlock1Ptr->easyChatBattleLost[i] = sUnknown_0859E64C[i];
+ for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++)
+ gSaveBlock1Ptr->easyChatBattleLost[i] = sDefaultBattleLostWords[i];
for (i = 0; i < MAIL_COUNT; i++)
{
for (j = 0; j < MAIL_WORDS_COUNT; j++)
- gSaveBlock1Ptr->mail[i].words[j] = 0xFFFF;
+ gSaveBlock1Ptr->mail[i].words[j] = EC_EMPTY_WORD;
}
#ifndef UBFIX
@@ -5283,65 +5558,67 @@ void InitEasyChatPhrases(void)
#endif
}
-static bool8 sub_811F28C(void)
+static bool8 InitEasyChatScreenWordData(void)
{
- sUnknown_0203A120 = Alloc(sizeof(*sUnknown_0203A120));
- if (!sUnknown_0203A120)
+ sWordData = Alloc(sizeof(*sWordData));
+ if (!sWordData)
return FALSE;
- sub_811F2D4();
- sub_811F46C();
+ SetUnlockedEasyChatGroups();
+ SetUnlockedWordsByAlphabet();
return TRUE;
}
-static void sub_811F2B8(void)
+static void FreeEasyChatScreenWordData(void)
{
- if (sUnknown_0203A120)
- FREE_AND_SET_NULL(sUnknown_0203A120);
+ if (sWordData)
+ FREE_AND_SET_NULL(sWordData);
}
-static void sub_811F2D4(void)
+static void SetUnlockedEasyChatGroups(void)
{
int i;
- sUnknown_0203A120->unk0 = 0;
+ sWordData->numUnlockedGroups = 0;
if (GetNationalPokedexCount(FLAG_GET_SEEN))
- sUnknown_0203A120->unk2[sUnknown_0203A120->unk0++] = EC_GROUP_POKEMON;
+ sWordData->unlockedGroupIds[sWordData->numUnlockedGroups++] = EC_GROUP_POKEMON;
+ // These groups are unlocked automatically
for (i = EC_GROUP_TRAINER; i <= EC_GROUP_ADJECTIVES; i++)
- sUnknown_0203A120->unk2[sUnknown_0203A120->unk0++] = i;
+ sWordData->unlockedGroupIds[sWordData->numUnlockedGroups++] = i;
if (FlagGet(FLAG_SYS_GAME_CLEAR))
{
- sUnknown_0203A120->unk2[sUnknown_0203A120->unk0++] = EC_GROUP_EVENTS;
- sUnknown_0203A120->unk2[sUnknown_0203A120->unk0++] = EC_GROUP_MOVE_1;
- sUnknown_0203A120->unk2[sUnknown_0203A120->unk0++] = EC_GROUP_MOVE_2;
+ sWordData->unlockedGroupIds[sWordData->numUnlockedGroups++] = EC_GROUP_EVENTS;
+ sWordData->unlockedGroupIds[sWordData->numUnlockedGroups++] = EC_GROUP_MOVE_1;
+ sWordData->unlockedGroupIds[sWordData->numUnlockedGroups++] = EC_GROUP_MOVE_2;
}
if (FlagGet(FLAG_SYS_HIPSTER_MEET))
- sUnknown_0203A120->unk2[sUnknown_0203A120->unk0++] = EC_GROUP_TRENDY_SAYING;
+ sWordData->unlockedGroupIds[sWordData->numUnlockedGroups++] = EC_GROUP_TRENDY_SAYING;
if (IsNationalPokedexEnabled())
- sUnknown_0203A120->unk2[sUnknown_0203A120->unk0++] = EC_GROUP_POKEMON_2;
+ sWordData->unlockedGroupIds[sWordData->numUnlockedGroups++] = EC_GROUP_POKEMON_NATIONAL;
}
-static u8 sub_811F3AC(void)
+static u8 GetNumUnlockedEasyChatGroups(void)
{
- return sUnknown_0203A120->unk0;
+ return sWordData->numUnlockedGroups;
}
-static u8 sub_811F3B8(u8 index)
+static u8 GetUnlockedEasyChatGroupId(u8 index)
{
- if (index >= sUnknown_0203A120->unk0)
+ if (index >= sWordData->numUnlockedGroups)
return EC_NUM_GROUPS;
else
- return sUnknown_0203A120->unk2[index];
+ return sWordData->unlockedGroupIds[index];
}
-u8 *unref_sub_811F3E0(u8 *dest, u8 groupId, u16 totalChars)
+// Unused
+static u8 *BufferEasyChatWordGroupName(u8 *dest, u8 groupId, u16 totalChars)
{
u16 i;
- u8 *str = StringCopy(dest, gEasyChatGroupNamePointers[groupId]);
+ u8 *str = StringCopy(dest, sEasyChatGroupNamePointers[groupId]);
for (i = str - dest; i < totalChars; i++)
{
*str = CHAR_SPACE;
@@ -5354,7 +5631,7 @@ u8 *unref_sub_811F3E0(u8 *dest, u8 groupId, u16 totalChars)
static const u8 *GetEasyChatWordGroupName(u8 groupId)
{
- return gEasyChatGroupNamePointers[groupId];
+ return sEasyChatGroupNamePointers[groupId];
}
static u8 *CopyEasyChatWordPadded(u8 *dest, u16 easyChatWord, u16 totalChars)
@@ -5371,7 +5648,7 @@ static u8 *CopyEasyChatWordPadded(u8 *dest, u16 easyChatWord, u16 totalChars)
return str;
}
-static void sub_811F46C(void)
+static void SetUnlockedWordsByAlphabet(void)
{
int i, j, k;
int numWords;
@@ -5379,15 +5656,15 @@ static void sub_811F46C(void)
u16 numToProcess;
int index;
- for (i = 0; i < 27; i++)
+ for (i = 0; i < EC_NUM_ALPHABET_GROUPS; i++)
{
numWords = gEasyChatWordsByLetterPointers[i].numWords;
words = gEasyChatWordsByLetterPointers[i].words;
- sUnknown_0203A120->unk2E[i] = 0;
+ sWordData->numUnlockedAlphabetWords[i] = 0;
index = 0;
for (j = 0; j < numWords; j++)
{
- if (*words == 0xFFFF)
+ if (*words == EC_EMPTY_WORD)
{
words++;
numToProcess = *words;
@@ -5401,10 +5678,10 @@ static void sub_811F46C(void)
for (k = 0; k < numToProcess; k++)
{
- if (sub_811F860(words[k]))
+ if (IsEasyChatWordUnlocked(words[k]))
{
- sUnknown_0203A120->unk64[i][index++] = words[k];
- sUnknown_0203A120->unk2E[i]++;
+ sWordData->unlockedAlphabetWords[i][index++] = words[k];
+ sWordData->numUnlockedAlphabetWords[i]++;
break;
}
}
@@ -5414,28 +5691,28 @@ static void sub_811F46C(void)
}
}
-static void sub_811F548(int arg0, u16 groupId)
+static void SetSelectedWordGroup(bool32 inAlphabetMode, u16 groupId)
{
- if (!arg0)
- sUnknown_0203A120->unk3BA0 = sub_811F5C4(groupId);
+ if (!inAlphabetMode)
+ sWordData->numSelectedGroupWords = SetSelectedWordGroup_GroupMode(groupId);
else
- sUnknown_0203A120->unk3BA0 = sub_811F6B8(groupId);
+ sWordData->numSelectedGroupWords = SetSelectedWordGroup_AlphabetMode(groupId);
}
-static u16 sub_811F578(u16 arg0)
+static u16 GetWordFromSelectedGroup(u16 index)
{
- if (arg0 >= sUnknown_0203A120->unk3BA0)
- return 0xFFFF;
+ if (index >= sWordData->numSelectedGroupWords)
+ return EC_EMPTY_WORD;
else
- return sUnknown_0203A120->unk3984[arg0];
+ return sWordData->selectedGroupWords[index];
}
-static u16 sub_811F5B0(void)
+static u16 GetNumWordsInSelectedGroup(void)
{
- return sUnknown_0203A120->unk3BA0;
+ return sWordData->numSelectedGroupWords;
}
-static u16 sub_811F5C4(u16 groupId)
+static u16 SetSelectedWordGroup_GroupMode(u16 groupId)
{
u32 i;
int totalWords;
@@ -5443,14 +5720,14 @@ static u16 sub_811F5C4(u16 groupId)
const struct EasyChatWordInfo *wordInfo;
u16 numWords = gEasyChatGroups[groupId].numWords;
- if (groupId == EC_GROUP_POKEMON || groupId == EC_GROUP_POKEMON_2
+ if (groupId == EC_GROUP_POKEMON || groupId == EC_GROUP_POKEMON_NATIONAL
|| groupId == EC_GROUP_MOVE_1 || groupId == EC_GROUP_MOVE_2)
{
list = gEasyChatGroups[groupId].wordData.valueList;
for (i = 0, totalWords = 0; i < numWords; i++)
{
- if (sub_811F764(list[i], groupId))
- sUnknown_0203A120->unk3984[totalWords++] = EC_WORD(groupId, list[i]);
+ if (IsEasyChatIndexAndGroupUnlocked(list[i], groupId))
+ sWordData->selectedGroupWords[totalWords++] = EC_WORD(groupId, list[i]);
}
return totalWords;
@@ -5461,45 +5738,45 @@ static u16 sub_811F5C4(u16 groupId)
for (i = 0, totalWords = 0; i < numWords; i++)
{
u16 alphabeticalOrder = wordInfo[i].alphabeticalOrder;
- if (sub_811F764(alphabeticalOrder, groupId))
- sUnknown_0203A120->unk3984[totalWords++] = EC_WORD(groupId, alphabeticalOrder);
+ if (IsEasyChatIndexAndGroupUnlocked(alphabeticalOrder, groupId))
+ sWordData->selectedGroupWords[totalWords++] = EC_WORD(groupId, alphabeticalOrder);
}
return totalWords;
}
}
-static u16 sub_811F6B8(u16 alphabeticalGroup)
+static u16 SetSelectedWordGroup_AlphabetMode(u16 groupId)
{
u16 i;
u16 totalWords;
- for (i = 0, totalWords = 0; i < sUnknown_0203A120->unk2E[alphabeticalGroup]; i++)
- sUnknown_0203A120->unk3984[totalWords++] = sUnknown_0203A120->unk64[alphabeticalGroup][i];
+ for (i = 0, totalWords = 0; i < sWordData->numUnlockedAlphabetWords[groupId]; i++)
+ sWordData->selectedGroupWords[totalWords++] = sWordData->unlockedAlphabetWords[groupId][i];
return totalWords;
}
-static bool8 sub_811F72C(u8 arg0)
+static bool8 IsEasyChatGroupUnlocked2(u8 groupId)
{
int i;
- for (i = 0; i < sUnknown_0203A120->unk0; i++)
+ for (i = 0; i < sWordData->numUnlockedGroups; i++)
{
- if (sUnknown_0203A120->unk2[i] == arg0)
+ if (sWordData->unlockedGroupIds[i] == groupId)
return TRUE;
}
return FALSE;
}
-static bool8 sub_811F764(u16 wordIndex, u8 groupId)
+static bool8 IsEasyChatIndexAndGroupUnlocked(u16 wordIndex, u8 groupId)
{
switch (groupId)
{
case EC_GROUP_POKEMON:
return GetSetPokedexFlag(SpeciesToNationalPokedexNum(wordIndex), FLAG_GET_SEEN);
- case EC_GROUP_POKEMON_2:
- if (sub_811F838(wordIndex))
+ case EC_GROUP_POKEMON_NATIONAL:
+ if (IsRestrictedWordSpecies(wordIndex))
GetSetPokedexFlag(SpeciesToNationalPokedexNum(wordIndex), FLAG_GET_SEEN);
return TRUE;
case EC_GROUP_MOVE_1:
@@ -5512,50 +5789,52 @@ static bool8 sub_811F764(u16 wordIndex, u8 groupId)
}
}
-static int sub_811F838(u16 species)
+// Pokémon words in EC_GROUP_POKEMON_NATIONAL are always allowed (assuming the group is unlocked)
+// unless they are in this group. If they are in this group (just Deoxys), they must also have been seen.
+static int IsRestrictedWordSpecies(u16 species)
{
u32 i;
- for (i = 0; i < ARRAY_COUNT(sUnknown_0859E658); i++)
+ for (i = 0; i < ARRAY_COUNT(sRestrictedWordSpecies); i++)
{
- if (sUnknown_0859E658[i] == species)
+ if (sRestrictedWordSpecies[i] == species)
return TRUE;
}
return FALSE;
}
-static u8 sub_811F860(u16 easyChatWord)
+static u8 IsEasyChatWordUnlocked(u16 easyChatWord)
{
u8 groupId = EC_GROUP(easyChatWord);
u32 index = EC_INDEX(easyChatWord);
- if (!sub_811F72C(groupId))
+ if (!IsEasyChatGroupUnlocked2(groupId))
return FALSE;
else
- return sub_811F764(index, groupId);
+ return IsEasyChatIndexAndGroupUnlocked(index, groupId);
}
void InitializeEasyChatWordArray(u16 *words, u16 length)
{
u16 i;
- for (i = length - 1; i != 0xFFFF; i--)
- *(words++) = 0xFFFF;
+ for (i = length - 1; i != EC_EMPTY_WORD; i--)
+ *(words++) = EC_EMPTY_WORD;
}
-void sub_811F8BC(void)
+void InitQuestionnaireWords(void)
{
int i;
- u16 *words = sub_801B058();
- for (i = 0; i < 4; i++)
- words[i] = 0xFFFF;
+ u16 *words = GetQuestionnaireWordsPtr();
+ for (i = 0; i < NUM_QUESTIONNAIRE_WORDS; i++)
+ words[i] = EC_EMPTY_WORD;
}
-bool32 sub_811F8D8(int easyChatWord)
+bool32 IsEasyChatAnswerUnlocked(int easyChatWord)
{
int groupId = EC_GROUP(easyChatWord);
- int mask = 0x7F;
+ int mask = EC_MASK_GROUP;
int index = EC_INDEX(easyChatWord);
if (!IsEasyChatGroupUnlocked(groupId & mask))
return FALSE;
else
- return sub_811F764(index, groupId & mask);
+ return IsEasyChatIndexAndGroupUnlocked(index, groupId & mask);
}
diff --git a/src/ereader_helpers.c b/src/ereader_helpers.c
index 944d1d728..5edfc120c 100755
--- a/src/ereader_helpers.c
+++ b/src/ereader_helpers.c
@@ -134,10 +134,10 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = {
.name = __("ハルヒト$$$$ "),
.facilityClass = FACILITY_CLASS_CAMPER,
.unused = 0x1,
- .speechBefore = { EC_MOVE2(BOUNCE), EC_WORD_AS_MUCH_AS, 0xFFFF, EC_WORD_THEY_RE, EC_WORD_STRONG, EC_WORD_EXCL },
- .speechWin = { EC_MOVE(FLY), EC_WORD_AS_MUCH_AS, 0xFFFF, EC_WORD_THEY_RE, EC_WORD_HAPPY, EC_WORD_EXCL },
- .speechLose = { EC_MOVE2(MINIMIZE), EC_WORD_AS_MUCH_AS, 0xFFFF, EC_WORD_THEY_RE, EC_WORD_SAD, EC_WORD_EXCL },
- .speechAfter = { EC_MOVE(BITE), EC_WORD_AS_MUCH_AS, 0xFFFF, EC_WORD_THEY_RE, EC_WORD_ANGRY, EC_WORD_EXCL },
+ .speechBefore = { EC_MOVE2(BOUNCE), EC_WORD_AS_MUCH_AS, EC_EMPTY_WORD, EC_WORD_THEY_RE, EC_WORD_STRONG, EC_WORD_EXCL },
+ .speechWin = { EC_MOVE(FLY), EC_WORD_AS_MUCH_AS, EC_EMPTY_WORD, EC_WORD_THEY_RE, EC_WORD_HAPPY, EC_WORD_EXCL },
+ .speechLose = { EC_MOVE2(MINIMIZE), EC_WORD_AS_MUCH_AS, EC_EMPTY_WORD, EC_WORD_THEY_RE, EC_WORD_SAD, EC_WORD_EXCL },
+ .speechAfter = { EC_MOVE(BITE), EC_WORD_AS_MUCH_AS, EC_EMPTY_WORD, EC_WORD_THEY_RE, EC_WORD_ANGRY, EC_WORD_EXCL },
.mons = {
[0] = NULL_BATTLE_TOWER_POKEMON,
[1] = NULL_BATTLE_TOWER_POKEMON,
@@ -223,7 +223,7 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = {
.speechBefore = { EC_WORD_SHINE, EC_WORD_POKEMON, EC_WORD_RELEASE, EC_WORD_WAS, EC_MOVE2(FRUSTRATION), EC_WORD_WITHOUT },
.speechWin = { EC_WORD_SHINE, EC_WORD_POKEMON, EC_WORD_TO_HER, EC_MOVE2(PRESENT), EC_WORD_KNOWS, EC_WORD_WITHOUT },
.speechLose = { EC_WORD_THAT, EC_WORD_ABOVE, EC_WORD_LOST, EC_WORD_STORES, EC_WORD_JOKING, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS },
- .speechAfter = { EC_WORD_ENTERTAINING, EC_WORD_NONE, EC_WORD_HEY_QUES, EC_WORD_ALMOST, EC_WORD_EXCL, 0xFFFF },
+ .speechAfter = { EC_WORD_ENTERTAINING, EC_WORD_NONE, EC_WORD_HEY_QUES, EC_WORD_ALMOST, EC_WORD_EXCL, EC_EMPTY_WORD },
.mons = {
[0] = NULL_BATTLE_TOWER_POKEMON,
[1] = NULL_BATTLE_TOWER_POKEMON,
@@ -307,7 +307,7 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = {
.facilityClass = FACILITY_CLASS_GENTLEMAN,
.unused = 0x1,
.speechBefore = { EC_WORD_SHE_WAS, EC_WORD_NO_1, EC_WORD_STRONG, EC_WORD_UNCLE, EC_WORD_THERE, EC_WORD_EXCL },
- .speechWin = { EC_WORD_HAHAHA, EC_WORD_TEACHER, EC_WORD_BECOMES, EC_WORD_GIVE, EC_WORD_IS_IT_QUES, 0xFFFF },
+ .speechWin = { EC_WORD_HAHAHA, EC_WORD_TEACHER, EC_WORD_BECOMES, EC_WORD_GIVE, EC_WORD_IS_IT_QUES, EC_EMPTY_WORD },
.speechLose = { EC_WORD_OUTSIDE, EC_WORD_UNCLE, EC_WORD_SURPRISE, EC_WORD_THESE, EC_WORD_HEY_QUES, EC_WORD_ELLIPSIS_EXCL },
.speechAfter = { EC_WORD_HE_S, EC_WORD_NO_1, EC_WORD_STRONG, EC_WORD_CHILDREN, EC_WORD_CAN_T, EC_WORD_EXCL_EXCL },
.mons = {
diff --git a/src/graphics.c b/src/graphics.c
index 3f49cd2e7..5710d171b 100644
--- a/src/graphics.c
+++ b/src/graphics.c
@@ -1361,11 +1361,11 @@ static const u8 sEmpty1[0x200] = {0};
const u8 gBerryBlenderPlayerArrow_Gfx[] = INCBIN_U8("graphics/berry_blender/arrow.4bpp");
static const u8 sEmpty2[0x2C0] = {0};
-const u16 gEasyChatCursor_Pal[] = INCBIN_U16("graphics/easy_chat/cursor.gbapal");
-const u32 gEasyChatCursor_Gfx[] = INCBIN_U32("graphics/easy_chat/cursor.4bpp.lz");
+const u16 gEasyChatRectangleCursor_Pal[] = INCBIN_U16("graphics/easy_chat/rectangle_cursor.gbapal");
+const u32 gEasyChatRectangleCursor_Gfx[] = INCBIN_U32("graphics/easy_chat/rectangle_cursor.4bpp.lz");
-const u16 gEasyChatRightWindow_Pal[] = INCBIN_U16("graphics/easy_chat/rwindow.gbapal");
-const u32 gEasyChatRightWindow_Gfx[] = INCBIN_U32("graphics/easy_chat/rwindow.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 u16 gEasyChatMode_Pal[] = INCBIN_U16("graphics/easy_chat/mode.gbapal");
diff --git a/src/lilycove_lady.c b/src/lilycove_lady.c
index 011d9fdfd..5bad07420 100644
--- a/src/lilycove_lady.c
+++ b/src/lilycove_lady.c
@@ -379,7 +379,7 @@ u8 GetQuizAuthor(void)
struct LilycoveLadyQuiz *quiz;
quiz = &gSaveBlock1Ptr->lilycoveLady.quiz;
- if (sub_811F8D8(quiz->correctAnswer) == 0)
+ if (IsEasyChatAnswerUnlocked(quiz->correctAnswer) == FALSE)
{
i = quiz->questionId;
do
@@ -388,7 +388,7 @@ u8 GetQuizAuthor(void)
{
i = 0;
}
- } while (sub_811F8D8(sQuizLadyQuizAnswers[i]) == 0);
+ } while (IsEasyChatAnswerUnlocked(sQuizLadyQuizAnswers[i]) == FALSE);
for (j = 0; j < QUIZ_QUESTION_LEN; j ++)
{
quiz->question[j] = sQuizLadyQuizQuestions[i][j];
diff --git a/src/mail_data.c b/src/mail_data.c
index 350888d0b..2ae9bedab 100644
--- a/src/mail_data.c
+++ b/src/mail_data.c
@@ -5,6 +5,7 @@
#include "pokemon_icon.h"
#include "text.h"
#include "international_string_util.h"
+#include "constants/easy_chat.h"
void ClearMailData(void)
{
@@ -19,7 +20,7 @@ void ClearMailStruct(struct MailStruct *mail)
s32 i;
for (i = 0; i < MAIL_WORDS_COUNT; i++)
- mail->words[i] = 0xFFFF;
+ mail->words[i] = EC_EMPTY_WORD;
for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++)
mail->playerName[i] = EOS;
@@ -55,7 +56,7 @@ u8 GiveMailToMon(struct Pokemon *mon, u16 itemId)
if (gSaveBlock1Ptr->mail[id].itemId == ITEM_NONE)
{
for (i = 0; i < MAIL_WORDS_COUNT; i++)
- gSaveBlock1Ptr->mail[id].words[i] = 0xFFFF;
+ gSaveBlock1Ptr->mail[id].words[i] = EC_EMPTY_WORD;
for (i = 0; i < PLAYER_NAME_LENGTH; i++)
gSaveBlock1Ptr->mail[id].playerName[i] = gSaveBlock2Ptr->playerName[i];
diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c
index c97ee94f3..cdcde9b06 100644
--- a/src/mauville_old_man.c
+++ b/src/mauville_old_man.c
@@ -250,7 +250,7 @@ void ScrSpecial_HipsterTeachWord(void)
{
u16 phrase = GetNewHipsterPhraseToTeach();
- if (phrase == 0xFFFF)
+ if (phrase == EC_EMPTY_WORD)
{
gSpecialVar_Result = FALSE;
}
@@ -283,7 +283,7 @@ void ScrSpecial_GenerateGiddyLine(void)
if (giddy->taleCounter == 0)
InitGiddyTaleList();
- if (giddy->randomWords[giddy->taleCounter] != 0xFFFF) // is not the last element of the array?
+ if (giddy->randomWords[giddy->taleCounter] != EC_EMPTY_WORD)
{
u8 *stringPtr;
u32 adjective = Random();
@@ -316,7 +316,7 @@ static void InitGiddyTaleList(void)
{EC_GROUP_HOBBIES, 0},
{EC_GROUP_MOVE_1, 0},
{EC_GROUP_MOVE_2, 0},
- {EC_GROUP_POKEMON_2, 0}
+ {EC_GROUP_POKEMON_NATIONAL, 0}
};
u16 i;
u16 r10;
@@ -348,7 +348,7 @@ static void InitGiddyTaleList(void)
r1 = Random() % 10;
if (r1 < 3 && r7 < 8)
{
- giddy->randomWords[i] = 0xFFFF;
+ giddy->randomWords[i] = EC_EMPTY_WORD;
r7++;
}
else
diff --git a/src/mevent2.c b/src/mevent2.c
index 3209c585a..d2c020858 100755
--- a/src/mevent2.c
+++ b/src/mevent2.c
@@ -26,7 +26,7 @@ void sub_801AFD8(void)
{
CpuFill32(0, &gSaveBlock1Ptr->unk_322C, sizeof(gSaveBlock1Ptr->unk_322C));
sub_801B180();
- sub_811F8BC();
+ InitQuestionnaireWords();
}
struct WonderNews *GetSavedWonderNews(void)
@@ -49,9 +49,9 @@ struct MysteryEventStruct *sub_801B044(void)
return &gSaveBlock1Ptr->unk_322C.unk_340;
}
-u16 *sub_801B058(void)
+u16 *GetQuestionnaireWordsPtr(void)
{
- return gSaveBlock1Ptr->unk_322C.unk_338;
+ return gSaveBlock1Ptr->unk_322C.questionnaireWords;
}
void DestroyWonderNews(void)
@@ -364,8 +364,8 @@ void sub_801B580(struct MEventStruct_Unk1442CC *data, bool32 a1)
data->unk_14 = 0;
}
- for (i = 0; i < 4; i++)
- data->unk_16[i] = gSaveBlock1Ptr->unk_322C.unk_338[i];
+ for (i = 0; i < NUM_QUESTIONNAIRE_WORDS; i++)
+ data->unk_16[i] = gSaveBlock1Ptr->unk_322C.questionnaireWords[i];
CopyTrainerId(data->unk_4C, gSaveBlock2Ptr->playerTrainerId);
StringCopy(data->unk_45, gSaveBlock2Ptr->playerName);
@@ -425,7 +425,7 @@ u32 sub_801B708(const u16 *a0, const struct MEventStruct_Unk1442CC *a1, const vo
bool32 MEventStruct_Unk1442CC_CompareField_unk_16(const struct MEventStruct_Unk1442CC *a0, const u16 *a1)
{
int i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < NUM_QUESTIONNAIRE_WORDS; i++)
{
if (a0->unk_16[i] != a1[i])
return FALSE;
diff --git a/src/overworld.c b/src/overworld.c
index cbfc70898..5aa5bb73d 100644
--- a/src/overworld.c
+++ b/src/overworld.c
@@ -1133,7 +1133,7 @@ void Overworld_PlaySpecialMapMusic(void)
{
u16 music = GetCurrLocationDefaultMusic();
- if (music != MUS_ABNORMAL_WEATHER && music != 0xFFFF)
+ if (music != MUS_ABNORMAL_WEATHER && music != MUS_NONE)
{
if (gSaveBlock1Ptr->savedMusic)
music = gSaveBlock1Ptr->savedMusic;
@@ -1163,7 +1163,7 @@ static void TransitionMapMusic(void)
{
u16 newMusic = GetWarpDestinationMusic();
u16 currentMusic = GetCurrentMapMusic();
- if (newMusic != MUS_ABNORMAL_WEATHER && newMusic != 0xFFFF)
+ if (newMusic != MUS_ABNORMAL_WEATHER && newMusic != MUS_NONE)
{
if (currentMusic == MUS_UNDERWATER || currentMusic == MUS_SURF)
return;
diff --git a/src/tv.c b/src/tv.c
index a1743fd2d..82624977e 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -1016,7 +1016,7 @@ bool8 IsTVShowInSearchOfTrainersAiring(void)
bool8 GabbyAndTyGetLastQuote(void)
{
- if (gSaveBlock1Ptr->gabbyAndTyData.quote[0] == 0xFFFF)
+ if (gSaveBlock1Ptr->gabbyAndTyData.quote[0] == EC_EMPTY_WORD)
{
return FALSE;
}
@@ -3299,14 +3299,11 @@ void TV_FanClubLetter_RandomWordToStringVar3(TVShow *show)
while (TRUE)
{
if (i == 6)
- {
i = 0;
- }
- if (show->fanclubLetter.words[i] != 0xFFFF)
- {
+
+ if (show->fanclubLetter.words[i] != EC_EMPTY_WORD)
break;
- }
- i ++;
+ i++;
}
CopyEasyChatWord(gStringVar3, show->fanclubLetter.words[i]);
}