Document easy_chat

This commit is contained in:
PikalaxALT
2019-11-01 16:40:31 -04:00
parent 115fd2aa9b
commit 2100eb9d81
8 changed files with 134 additions and 131 deletions
+1 -1
View File
@@ -1863,7 +1863,7 @@ sub_80E678C: @ 80E678C
movs r1, 0x3 movs r1, 0x3
movs r2, 0x2 movs r2, 0x2
movs r3, 0x12 movs r3, 0x12
bl sub_80BD974 bl EC_DoesEasyChatStringFitOnLine
lsls r0, 24 lsls r0, 24
cmp r0, 0 cmp r0, 0
beq _080E67E4 beq _080E67E4
+12 -12
View File
@@ -3443,7 +3443,7 @@ _080FEDC0:
bl ResetPaletteFade bl ResetPaletteFade
b _080FEE16 b _080FEE16
_080FEDD4: _080FEDD4:
bl sub_80BDE44 bl InitEasyChatSelection
b _080FEDF2 b _080FEDF2
_080FEDDA: _080FEDDA:
ldrb r4, [r6, 0x2] ldrb r4, [r6, 0x2]
@@ -3490,7 +3490,7 @@ _080FEE1E:
sub_80FEE24: @ 80FEE24 sub_80FEE24: @ 80FEE24
push {r4,lr} push {r4,lr}
adds r4, r0, 0 adds r4, r0, 0
bl sub_80BDE70 bl DestroyEasyChatSelectionData
bl sub_80FF010 bl sub_80FF010
bl sub_810011C bl sub_810011C
bl FreeAllWindowBuffers bl FreeAllWindowBuffers
@@ -3701,7 +3701,7 @@ _080FEFE0:
ldrb r2, [r0, 0x7] ldrb r2, [r0, 0x7]
adds r0, r6, 0 adds r0, r6, 0
bl CpuSet bl CpuSet
bl sub_80BDF38 bl GetNumDisplayableGroups
ldr r2, [r4] ldr r2, [r4]
lsls r0, 24 lsls r0, 24
lsrs r0, 24 lsrs r0, 24
@@ -4565,12 +4565,12 @@ sub_80FF5FC: @ 80FF5FC
bl sub_80FFB8C bl sub_80FFB8C
lsls r0, 24 lsls r0, 24
lsrs r0, 24 lsrs r0, 24
bl sub_80BDF44 bl GetSelectedGroupByIndex
adds r1, r0, 0 adds r1, r0, 0
lsls r1, 24 lsls r1, 24
lsrs r1, 24 lsrs r1, 24
movs r0, 0 movs r0, 0
bl sub_80BE16C bl GetUnlockedECWords
b _080FF638 b _080FF638
.align 2, 0 .align 2, 0
_080FF624: .4byte gUnknown_203ACE8 _080FF624: .4byte gUnknown_203ACE8
@@ -4580,9 +4580,9 @@ _080FF628:
lsls r1, 16 lsls r1, 16
lsrs r1, 16 lsrs r1, 16
movs r0, 0x1 movs r0, 0x1
bl sub_80BE16C bl GetUnlockedECWords
_080FF638: _080FF638:
bl sub_80BE1D4 bl GetNumDisplayedWords
lsls r0, 16 lsls r0, 16
lsrs r0, 16 lsrs r0, 16
cmp r0, 0 cmp r0, 0
@@ -4673,7 +4673,7 @@ sub_80FF6C8: @ 80FF6C8
bl sub_80FFBE4 bl sub_80FFBE4
lsls r0, 16 lsls r0, 16
lsrs r0, 16 lsrs r0, 16
bl sub_80BE19C bl GetDisplayedWordByIndex
lsls r0, 16 lsls r0, 16
lsrs r0, 16 lsrs r0, 16
bl sub_80FF768 bl sub_80FF768
@@ -5506,7 +5506,7 @@ sub_80FFC6C: @ 80FFC6C
bne _080FFC9C bne _080FFC9C
bl sub_80FFB8C bl sub_80FFB8C
adds r4, r0, 0 adds r4, r0, 0
bl sub_80BDF38 bl GetNumDisplayableGroups
movs r1, 0 movs r1, 0
lsls r0, 24 lsls r0, 24
lsls r4, 16 lsls r4, 16
@@ -5546,7 +5546,7 @@ sub_80FFCC0: @ 80FFCC0
push {r4,lr} push {r4,lr}
bl sub_80FFBE4 bl sub_80FFBE4
adds r4, r0, 0 adds r4, r0, 0
bl sub_80BE1D4 bl GetNumDisplayedWords
movs r1, 0 movs r1, 0
lsls r4, 16 lsls r4, 16
lsls r0, 16 lsls r0, 16
@@ -8492,7 +8492,7 @@ _0810134A:
lsls r0, r5, 24 lsls r0, r5, 24
lsrs r0, 24 lsrs r0, 24
adds r5, 0x1 adds r5, 0x1
bl sub_80BDF44 bl GetSelectedGroupByIndex
lsls r0, 24 lsls r0, 24
lsrs r0, 24 lsrs r0, 24
cmp r0, 0x16 cmp r0, 0x16
@@ -8708,7 +8708,7 @@ _081014E6:
lsls r0, r4, 16 lsls r0, r4, 16
lsrs r0, 16 lsrs r0, 16
adds r4, 0x1 adds r4, 0x1
bl sub_80BE19C bl GetDisplayedWordByIndex
lsls r0, 16 lsls r0, 16
lsrs r1, r0, 16 lsrs r1, r0, 16
ldr r0, _08101554 @ =0x0000ffff ldr r0, _08101554 @ =0x0000ffff
+2 -2
View File
@@ -11329,7 +11329,7 @@ EventScript_1BEE9E:: @ 81BEE9E
EventScript_1BEEA8:: @ 81BEEA8 EventScript_1BEEA8:: @ 81BEEA8
setvar VAR_0x4001, 1 setvar VAR_0x4001, 1
setvar VAR_0x8004, 0 setvar VAR_0x8004, 0
special sub_80BDA7C special Special_BufferEasyChatMessage
waitmessage waitmessage
delay 80 delay 80
msgbox gUnknown_81BF28E msgbox gUnknown_81BF28E
@@ -11376,7 +11376,7 @@ EventScript_1BEF35:: @ 81BEF35
EventScript_1BEF3F:: @ 81BEF3F EventScript_1BEF3F:: @ 81BEF3F
setvar VAR_0x4001, 1 setvar VAR_0x4001, 1
setvar VAR_0x8004, 0 setvar VAR_0x8004, 0
special sub_80BDA7C special Special_BufferEasyChatMessage
waitmessage waitmessage
delay 80 delay 80
msgbox gUnknown_81BF30D msgbox gUnknown_81BF30D
+1 -1
View File
@@ -104,7 +104,7 @@ gSpecials:: @ 815FD60
def_special Field_AskSaveTheGame def_special Field_AskSaveTheGame
def_special nullsub_56 def_special nullsub_56
def_special sub_80FEE44 def_special sub_80FEE44
def_special sub_80BDA7C def_special Special_BufferEasyChatMessage
def_special nullsub_75 def_special nullsub_75
def_special nullsub_75 def_special nullsub_75
def_special nullsub_75 def_special nullsub_75
+2
View File
@@ -1076,4 +1076,6 @@
#define EC_INDEX(word) ((word) & 0x1FF) #define EC_INDEX(word) ((word) & 0x1FF)
#define EC_WORD(groupId, index) ((((groupId) & 0x7F) << 9) | ((index) & 0x1FF)) #define EC_WORD(groupId, index) ((((groupId) & 0x7F) << 9) | ((index) & 0x1FF))
#define EC_WORD_UNDEFINED (0xFFFF)
#endif // GUARD_CONSTANTS_EASY_CHAT_H #endif // GUARD_CONSTANTS_EASY_CHAT_H
+8 -7
View File
@@ -33,15 +33,16 @@ struct EasyChatWordsByLetter
void InitEasyChatPhrases(void); void InitEasyChatPhrases(void);
u8 *CopyEasyChatWord(u8 *dest, u16 word); u8 *CopyEasyChatWord(u8 *dest, u16 word);
u8 *ConvertEasyChatWordsToString(u8 *dest, const u16 *src, u16 length1, u16 length2); u8 *ConvertEasyChatWordsToString(u8 *dest, const u16 *src, u16 length1, u16 length2);
void sub_80BDE28(void); bool8 EC_DoesEasyChatStringFitOnLine(const u16 *easyChatWords, u8 columns, u8 rows, u16 maxLength);
void ResetSomeMEventECBuffer_3120_338(void);
void InitEasyChatPhrases(void); void InitEasyChatPhrases(void);
void EnableRareWord(u8); void EnableRareWord(u8);
bool8 sub_80BDE44(void); bool8 InitEasyChatSelection(void);
void sub_80BDE70(void); void DestroyEasyChatSelectionData(void);
u8 sub_80BDF44(u8); u8 GetSelectedGroupByIndex(u8);
void sub_80BE16C(int, u16); void GetUnlockedECWords(bool32 isAlphabetical, u16 groupId);
u16 sub_80BE1D4(void); u16 GetDisplayedWordByIndex(u16 index);
u16 sub_80BE19C(u16); u16 GetNumDisplayedWords(void);
const u8 *GetEasyChatWordGroupName(u8); const u8 *GetEasyChatWordGroupName(u8);
u8 *CopyEasyChatWordPadded(u8 *, u16, u16); u8 *CopyEasyChatWordPadded(u8 *, u16, u16);
+107 -107
View File
@@ -32,26 +32,26 @@
struct Unk203A120 struct Unk203A120
{ {
u16 unk0; u16 numGroups;
u16 unk2[EC_NUM_GROUPS]; u16 groups[EC_NUM_GROUPS];
u16 unk2E[27]; u16 alphabeticalGroups[27];
u16 unk64[27][270]; u16 alphabeticalWordsByGroup[27][270];
u8 filler3958[0x2C]; u8 filler3958[0x2C];
u16 unk3984[0x10E]; u16 allWords[270];
u16 unk3BA0; u16 totalWords;
}; /*size = 0x3BA4*/ }; /*size = 0x3BA4*/
static EWRAM_DATA struct Unk203A120 * gUnknown_20399BC = NULL; static EWRAM_DATA struct Unk203A120 * sEasyChatSelectionData = NULL;
static bool8 sub_80BDCA8(void); static bool8 EC_IsNationalPokedexEnabled(void);
static u16 GetRandomECPokemon(void); static u16 GetRandomECPokemon(void);
static void sub_80BDE88(void); static void PopulateECGroups(void);
static void sub_80BDFF8(void); static void PopulateAlphabeticalGroups(void);
static u16 sub_80BE1E8(u16); static u16 GetUnlockedWordsInECGroup(u16);
static u16 sub_80BE2F8(u16); static u16 GetUnlockedWordsInAlphabeticalGroup(u16);
static bool8 sub_80BE3A4(u16, u8); static bool8 UnlockedECMonOrMove(u16, u8);
static int sub_80BE418(u16 species); static int EC_IsDeoxys(u16 species);
static u8 sub_80BE440(u16 word); static u8 IsWordUnlocked(u16 word);
#include "data/easy_chat/easy_chat_groups.h" #include "data/easy_chat/easy_chat_groups.h"
#include "data/easy_chat/easy_chat_words_by_letter.h" #include "data/easy_chat/easy_chat_words_by_letter.h"
@@ -97,11 +97,11 @@ static const u16 sDefaultBattleStartWords[] = {
EC_WORD_EXCL, EC_WORD_EXCL,
}; };
static const u16 gUnknown_83EE004[] = { static const u16 sDeoxysValue[] = {
SPECIES_DEOXYS, SPECIES_DEOXYS,
}; };
static bool8 sub_80BD718(u8 groupId) static bool8 IsECGroupUnlocked(u8 groupId)
{ {
switch (groupId) switch (groupId)
{ {
@@ -112,7 +112,7 @@ static bool8 sub_80BD718(u8 groupId)
case EC_GROUP_MOVE_2: case EC_GROUP_MOVE_2:
return FlagGet(FLAG_SYS_GAME_CLEAR); return FlagGet(FLAG_SYS_GAME_CLEAR);
case EC_GROUP_POKEMON: case EC_GROUP_POKEMON:
return sub_80BDCA8(); return EC_IsNationalPokedexEnabled();
default: default:
return TRUE; return TRUE;
} }
@@ -123,20 +123,20 @@ static u16 EasyChat_GetNumWordsInGroup(u8 groupId)
if (groupId == EC_GROUP_POKEMON) if (groupId == EC_GROUP_POKEMON)
return GetNationalPokedexCount(FLAG_GET_SEEN); return GetNationalPokedexCount(FLAG_GET_SEEN);
if (sub_80BD718(groupId)) if (IsECGroupUnlocked(groupId))
return gEasyChatGroups[groupId].numEnabledWords; return gEasyChatGroups[groupId].numEnabledWords;
return 0; return 0;
} }
static bool8 sub_80BD78C(u16 easyChatWord) static bool8 IsECWordInvalid(u16 easyChatWord)
{ {
u16 i; u16 i;
u8 groupId; u8 groupId;
u32 index; u32 index;
u16 numWords; u16 numWords;
const u16 *list; const u16 *list;
if (easyChatWord == 0xFFFF) if (easyChatWord == EC_WORD_UNDEFINED)
return FALSE; return FALSE;
groupId = EC_GROUP(easyChatWord); groupId = EC_GROUP(easyChatWord);
@@ -184,11 +184,11 @@ static const u8 *GetEasyChatWord(u8 groupId, u16 index)
u8 *CopyEasyChatWord(u8 *dest, u16 easyChatWord) u8 *CopyEasyChatWord(u8 *dest, u16 easyChatWord)
{ {
u8 *resultStr; u8 *resultStr;
if (sub_80BD78C(easyChatWord)) if (IsECWordInvalid(easyChatWord))
{ {
resultStr = StringCopy(dest, gText_ThreeQuestionMarks); resultStr = StringCopy(dest, gText_ThreeQuestionMarks);
} }
else if (easyChatWord != 0xFFFF) else if (easyChatWord != EC_WORD_UNDEFINED)
{ {
u16 index = EC_INDEX(easyChatWord); u16 index = EC_INDEX(easyChatWord);
u8 groupId = EC_GROUP(easyChatWord); u8 groupId = EC_GROUP(easyChatWord);
@@ -213,7 +213,7 @@ u8 *ConvertEasyChatWordsToString(u8 *dest, const u16 *src, u16 columns, u16 rows
for (j = 0; j < numColumns; j++) for (j = 0; j < numColumns; j++)
{ {
dest = CopyEasyChatWord(dest, *src); dest = CopyEasyChatWord(dest, *src);
if (*src != 0xFFFF) if (*src != EC_WORD_UNDEFINED)
{ {
*dest = CHAR_SPACE; *dest = CHAR_SPACE;
dest++; dest++;
@@ -234,10 +234,10 @@ u8 *ConvertEasyChatWordsToString(u8 *dest, const u16 *src, u16 columns, u16 rows
static u16 GetEasyChatWordStringLength(u16 easyChatWord) static u16 GetEasyChatWordStringLength(u16 easyChatWord)
{ {
if (easyChatWord == 0xFFFF) if (easyChatWord == EC_WORD_UNDEFINED)
return 0; return 0;
if (sub_80BD78C(easyChatWord)) if (IsECWordInvalid(easyChatWord))
{ {
return StringLength(gText_ThreeQuestionMarks); return StringLength(gText_ThreeQuestionMarks);
} }
@@ -249,24 +249,24 @@ static u16 GetEasyChatWordStringLength(u16 easyChatWord)
} }
} }
bool8 sub_80BD974(const u16 *easyChatWords, u8 arg1, u8 arg2, u16 arg3) bool8 EC_DoesEasyChatStringFitOnLine(const u16 *easyChatWords, u8 columns, u8 rows, u16 maxLength)
{ {
u8 i, j; u8 i, j;
for (i = 0; i < arg2; i++) for (i = 0; i < rows; i++)
{ {
u16 totalLength = arg1 - 1; u16 totalLength = columns - 1;
for (j = 0; j < arg1; j++) for (j = 0; j < columns; j++)
totalLength += GetEasyChatWordStringLength(*(easyChatWords++)); totalLength += GetEasyChatWordStringLength(*(easyChatWords++));
if (totalLength > arg3) if (totalLength > maxLength)
return TRUE; return TRUE;
} }
return FALSE; return FALSE;
} }
static u16 sub_80BD9E8(u16 groupId) static u16 GetRandomWordFromGroup(u16 groupId)
{ {
u16 index = Random() % gEasyChatGroups[groupId].numWords; u16 index = Random() % gEasyChatGroups[groupId].numWords;
if (groupId == EC_GROUP_POKEMON_2 if (groupId == EC_GROUP_POKEMON_2
@@ -280,18 +280,18 @@ static u16 sub_80BD9E8(u16 groupId)
return EC_WORD(groupId, index); return EC_WORD(groupId, index);
} }
static u16 sub_80BDA40(u16 groupId) static u16 GetRandomWordFromAnyGroup(u16 groupId)
{ {
if (!sub_80BD718(groupId)) if (!IsECGroupUnlocked(groupId))
return 0xFFFF; return EC_WORD_UNDEFINED;
if (groupId == EC_GROUP_POKEMON) if (groupId == EC_GROUP_POKEMON)
return GetRandomECPokemon(); return GetRandomECPokemon();
return sub_80BD9E8(groupId); return GetRandomWordFromGroup(groupId);
} }
void sub_80BDA7C(void) void Special_BufferEasyChatMessage(void)
{ {
u16 *easyChatWords; u16 *easyChatWords;
int columns, rows; int columns, rows;
@@ -304,7 +304,7 @@ void sub_80BDA7C(void)
break; break;
case 1: case 1:
easyChatWords = gSaveBlock1Ptr->easyChatBattleStart; easyChatWords = gSaveBlock1Ptr->easyChatBattleStart;
if (sub_80BD974(gSaveBlock1Ptr->easyChatBattleStart, 3, 2, 18)) if (EC_DoesEasyChatStringFitOnLine(gSaveBlock1Ptr->easyChatBattleStart, 3, 2, 18))
{ {
columns = 2; columns = 2;
rows = 3; rows = 3;
@@ -336,7 +336,7 @@ void sub_80BDA7C(void)
void BufferRandomHobbyOrLifestyleString(void) void BufferRandomHobbyOrLifestyleString(void)
{ {
int groupId = Random() & 1 ? EC_GROUP_HOBBIES : EC_GROUP_LIFESTYLE; int groupId = Random() & 1 ? EC_GROUP_HOBBIES : EC_GROUP_LIFESTYLE;
u16 easyChatWord = sub_80BDA40(groupId); u16 easyChatWord = GetRandomWordFromAnyGroup(groupId);
CopyEasyChatWord(gStringVar2, easyChatWord); CopyEasyChatWord(gStringVar2, easyChatWord);
} }
@@ -377,7 +377,7 @@ static u16 UnlockRandomTrendySaying(void)
u16 additionalPhraseId; u16 additionalPhraseId;
u8 numAdditionalPhrasesUnlocked = GetNumUnlockedTrendySayings(); u8 numAdditionalPhrasesUnlocked = GetNumUnlockedTrendySayings();
if (numAdditionalPhrasesUnlocked == 33) if (numAdditionalPhrasesUnlocked == 33)
return 0xFFFF; return EC_WORD_UNDEFINED;
additionalPhraseId = Random() % (33 - numAdditionalPhrasesUnlocked); additionalPhraseId = Random() % (33 - numAdditionalPhrasesUnlocked);
for (i = 0; i < 33; i++) for (i = 0; i < 33; i++)
@@ -396,7 +396,7 @@ static u16 UnlockRandomTrendySaying(void)
} }
} }
return 0xFFFF; return EC_WORD_UNDEFINED;
} }
static u16 GetRandomUnlockedTrendySaying(void) static u16 GetRandomUnlockedTrendySaying(void)
@@ -404,7 +404,7 @@ static u16 GetRandomUnlockedTrendySaying(void)
u16 i; u16 i;
u16 additionalPhraseId = GetNumUnlockedTrendySayings(); u16 additionalPhraseId = GetNumUnlockedTrendySayings();
if (additionalPhraseId == 0) if (additionalPhraseId == 0)
return 0xFFFF; return EC_WORD_UNDEFINED;
additionalPhraseId = Random() % additionalPhraseId; additionalPhraseId = Random() % additionalPhraseId;
for (i = 0; i < 33; i++) for (i = 0; i < 33; i++)
@@ -418,10 +418,10 @@ static u16 GetRandomUnlockedTrendySaying(void)
} }
} }
return 0xFFFF; return EC_WORD_UNDEFINED;
} }
static bool8 sub_80BDCA8(void) static bool8 EC_IsNationalPokedexEnabled(void)
{ {
return IsNationalPokedexEnabled(); return IsNationalPokedexEnabled();
} }
@@ -433,7 +433,7 @@ static u16 GetRandomECPokemon(void)
const u16 *species; const u16 *species;
u16 index = EasyChat_GetNumWordsInGroup(EC_GROUP_POKEMON_2); u16 index = EasyChat_GetNumWordsInGroup(EC_GROUP_POKEMON_2);
if (index == 0) if (index == 0)
return 0xFFFF; return EC_WORD_UNDEFINED;
index = Random() % index; index = Random() % index;
species = gEasyChatGroups[EC_GROUP_POKEMON_2].wordData.valueList; species = gEasyChatGroups[EC_GROUP_POKEMON_2].wordData.valueList;
@@ -452,7 +452,7 @@ static u16 GetRandomECPokemon(void)
species++; species++;
} }
return 0xFFFF; return EC_WORD_UNDEFINED;
} }
void InitEasyChatPhrases(void) void InitEasyChatPhrases(void)
@@ -467,14 +467,14 @@ void InitEasyChatPhrases(void)
for (i = 0; i < 6; i++) for (i = 0; i < 6; i++)
{ {
gSaveBlock1Ptr->easyChatBattleWon[i] = 0xFFFF; gSaveBlock1Ptr->easyChatBattleWon[i] = EC_WORD_UNDEFINED;
gSaveBlock1Ptr->easyChatBattleLost[i] = 0xFFFF; gSaveBlock1Ptr->easyChatBattleLost[i] = EC_WORD_UNDEFINED;
} }
for (i = 0; i < MAIL_COUNT; i++) for (i = 0; i < MAIL_COUNT; i++)
{ {
for (j = 0; j < MAIL_WORDS_COUNT; j++) for (j = 0; j < MAIL_WORDS_COUNT; j++)
gSaveBlock1Ptr->mail[i].words[j] = 0xFFFF; gSaveBlock1Ptr->mail[i].words[j] = EC_WORD_UNDEFINED;
} }
// BUG: This is supposed to clear 64 bits, but this loop is clearing 64 bytes. // BUG: This is supposed to clear 64 bits, but this loop is clearing 64 bytes.
@@ -485,64 +485,64 @@ void InitEasyChatPhrases(void)
gSaveBlock1Ptr->additionalPhrases[i] = 0; gSaveBlock1Ptr->additionalPhrases[i] = 0;
} }
void sub_80BDE28(void) void ResetSomeMEventECBuffer_3120_338(void)
{ {
s32 i; s32 i;
u16 *ptr = sub_8143DA8(); u16 *ptr = sub_8143DA8();
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
ptr[i] = 0xFFFF; ptr[i] = EC_WORD_UNDEFINED;
} }
bool8 sub_80BDE44(void) bool8 InitEasyChatSelection(void)
{ {
gUnknown_20399BC = Alloc(sizeof(*gUnknown_20399BC)); sEasyChatSelectionData = Alloc(sizeof(*sEasyChatSelectionData));
if (!gUnknown_20399BC) if (!sEasyChatSelectionData)
return FALSE; return FALSE;
sub_80BDE88(); PopulateECGroups();
sub_80BDFF8(); PopulateAlphabeticalGroups();
return TRUE; return TRUE;
} }
void sub_80BDE70(void) void DestroyEasyChatSelectionData(void)
{ {
if (gUnknown_20399BC != NULL) if (sEasyChatSelectionData != NULL)
Free(gUnknown_20399BC); Free(sEasyChatSelectionData);
} }
static void sub_80BDE88(void) static void PopulateECGroups(void)
{ {
int i; int i;
gUnknown_20399BC->unk0 = 0; sEasyChatSelectionData->numGroups = 0;
if (GetNationalPokedexCount(FLAG_GET_SEEN)) if (GetNationalPokedexCount(FLAG_GET_SEEN))
gUnknown_20399BC->unk2[gUnknown_20399BC->unk0++] = EC_GROUP_POKEMON; sEasyChatSelectionData->groups[sEasyChatSelectionData->numGroups++] = EC_GROUP_POKEMON;
for (i = EC_GROUP_TRAINER; i <= EC_GROUP_ADJECTIVES; i++) for (i = EC_GROUP_TRAINER; i <= EC_GROUP_ADJECTIVES; i++)
gUnknown_20399BC->unk2[gUnknown_20399BC->unk0++] = i; sEasyChatSelectionData->groups[sEasyChatSelectionData->numGroups++] = i;
if (FlagGet(FLAG_SYS_GAME_CLEAR)) if (FlagGet(FLAG_SYS_GAME_CLEAR))
{ {
gUnknown_20399BC->unk2[gUnknown_20399BC->unk0++] = EC_GROUP_EVENTS; sEasyChatSelectionData->groups[sEasyChatSelectionData->numGroups++] = EC_GROUP_EVENTS;
gUnknown_20399BC->unk2[gUnknown_20399BC->unk0++] = EC_GROUP_MOVE_1; sEasyChatSelectionData->groups[sEasyChatSelectionData->numGroups++] = EC_GROUP_MOVE_1;
gUnknown_20399BC->unk2[gUnknown_20399BC->unk0++] = EC_GROUP_MOVE_2; sEasyChatSelectionData->groups[sEasyChatSelectionData->numGroups++] = EC_GROUP_MOVE_2;
} }
if (IsNationalPokedexEnabled()) if (IsNationalPokedexEnabled())
gUnknown_20399BC->unk2[gUnknown_20399BC->unk0++] = EC_GROUP_POKEMON_2; sEasyChatSelectionData->groups[sEasyChatSelectionData->numGroups++] = EC_GROUP_POKEMON_2;
} }
u8 sub_80BDF38(void) u8 GetNumDisplayableGroups(void)
{ {
return gUnknown_20399BC->unk0; return sEasyChatSelectionData->numGroups;
} }
u8 sub_80BDF44(u8 index) u8 GetSelectedGroupByIndex(u8 index)
{ {
if (index >= gUnknown_20399BC->unk0) if (index >= sEasyChatSelectionData->numGroups)
return EC_NUM_GROUPS; return EC_NUM_GROUPS;
else else
return gUnknown_20399BC->unk2[index]; return sEasyChatSelectionData->groups[index];
} }
static u8 *unref_sub_80BDF6C(u8 *dest, u8 groupId, u16 totalChars) static u8 *unref_sub_80BDF6C(u8 *dest, u8 groupId, u16 totalChars)
@@ -578,7 +578,7 @@ u8 *CopyEasyChatWordPadded(u8 *dest, u16 easyChatWord, u16 totalChars)
return str; return str;
} }
static void sub_80BDFF8(void) static void PopulateAlphabeticalGroups(void)
{ {
static int i; static int i;
static int j; static int j;
@@ -592,11 +592,11 @@ static void sub_80BDFF8(void)
{ {
numWords = gEasyChatWordsByLetterPointers[i].numWords; numWords = gEasyChatWordsByLetterPointers[i].numWords;
words = gEasyChatWordsByLetterPointers[i].words; words = gEasyChatWordsByLetterPointers[i].words;
gUnknown_20399BC->unk2E[i] = 0; sEasyChatSelectionData->alphabeticalGroups[i] = 0;
index = 0; index = 0;
for (j = 0; j < numWords; ) for (j = 0; j < numWords; )
{ {
if (*words == 0xFFFF) if (*words == EC_WORD_UNDEFINED)
{ {
words++; words++;
numToProcess = *words++; numToProcess = *words++;
@@ -609,10 +609,10 @@ static void sub_80BDFF8(void)
for (k = 0; k < numToProcess; k++) for (k = 0; k < numToProcess; k++)
{ {
if (sub_80BE440(words[k])) if (IsWordUnlocked(words[k]))
{ {
gUnknown_20399BC->unk64[i][index++] = words[k]; sEasyChatSelectionData->alphabeticalWordsByGroup[i][index++] = words[k];
gUnknown_20399BC->unk2E[i]++; sEasyChatSelectionData->alphabeticalGroups[i]++;
break; break;
} }
} }
@@ -623,28 +623,28 @@ static void sub_80BDFF8(void)
} }
} }
void sub_80BE16C(int arg0, u16 groupId) void GetUnlockedECWords(bool32 isAlphabetical, u16 groupId)
{ {
if (!arg0) if (!isAlphabetical)
gUnknown_20399BC->unk3BA0 = sub_80BE1E8(groupId); sEasyChatSelectionData->totalWords = GetUnlockedWordsInECGroup(groupId);
else else
gUnknown_20399BC->unk3BA0 = sub_80BE2F8(groupId); sEasyChatSelectionData->totalWords = GetUnlockedWordsInAlphabeticalGroup(groupId);
} }
u16 sub_80BE19C(u16 arg0) u16 GetDisplayedWordByIndex(u16 index)
{ {
if (arg0 >= gUnknown_20399BC->unk3BA0) if (index >= sEasyChatSelectionData->totalWords)
return 0xFFFF; return EC_WORD_UNDEFINED;
else else
return gUnknown_20399BC->unk3984[arg0]; return sEasyChatSelectionData->allWords[index];
} }
u16 sub_80BE1D4(void) u16 GetNumDisplayedWords(void)
{ {
return gUnknown_20399BC->unk3BA0; return sEasyChatSelectionData->totalWords;
} }
static u16 sub_80BE1E8(u16 groupId) static u16 GetUnlockedWordsInECGroup(u16 groupId)
{ {
u16 i; u16 i;
u16 totalWords; u16 totalWords;
@@ -658,8 +658,8 @@ static u16 sub_80BE1E8(u16 groupId)
list = gEasyChatGroups[groupId].wordData.valueList; list = gEasyChatGroups[groupId].wordData.valueList;
for (i = 0, totalWords = 0; i < numWords; i++) for (i = 0, totalWords = 0; i < numWords; i++)
{ {
if (sub_80BE3A4(list[i], groupId)) if (UnlockedECMonOrMove(list[i], groupId))
gUnknown_20399BC->unk3984[totalWords++] = EC_WORD(groupId, list[i]); sEasyChatSelectionData->allWords[totalWords++] = EC_WORD(groupId, list[i]);
} }
return totalWords; return totalWords;
@@ -670,45 +670,45 @@ static u16 sub_80BE1E8(u16 groupId)
for (i = 0, totalWords = 0; i < numWords; i++) for (i = 0, totalWords = 0; i < numWords; i++)
{ {
u16 alphabeticalOrder = wordInfo[i].alphabeticalOrder; u16 alphabeticalOrder = wordInfo[i].alphabeticalOrder;
if (sub_80BE3A4(alphabeticalOrder, groupId)) if (UnlockedECMonOrMove(alphabeticalOrder, groupId))
gUnknown_20399BC->unk3984[totalWords++] = EC_WORD(groupId, alphabeticalOrder); sEasyChatSelectionData->allWords[totalWords++] = EC_WORD(groupId, alphabeticalOrder);
} }
return totalWords; return totalWords;
} }
} }
static u16 sub_80BE2F8(u16 alphabeticalGroup) static u16 GetUnlockedWordsInAlphabeticalGroup(u16 alphabeticalGroup)
{ {
u16 i; u16 i;
u16 totalWords; u16 totalWords;
for (i = 0, totalWords = 0; i < gUnknown_20399BC->unk2E[alphabeticalGroup]; i++) for (i = 0, totalWords = 0; i < sEasyChatSelectionData->alphabeticalGroups[alphabeticalGroup]; i++)
gUnknown_20399BC->unk3984[totalWords++] = gUnknown_20399BC->unk64[alphabeticalGroup][i]; sEasyChatSelectionData->allWords[totalWords++] = sEasyChatSelectionData->alphabeticalWordsByGroup[alphabeticalGroup][i];
return totalWords; return totalWords;
} }
static bool8 sub_80BE36C(u8 arg0) static bool8 IsGroupSelectable(u8 groupIdx)
{ {
int i; int i;
for (i = 0; i < gUnknown_20399BC->unk0; i++) for (i = 0; i < sEasyChatSelectionData->numGroups; i++)
{ {
if (gUnknown_20399BC->unk2[i] == arg0) if (sEasyChatSelectionData->groups[i] == groupIdx)
return TRUE; return TRUE;
} }
return FALSE; return FALSE;
} }
static bool8 sub_80BE3A4(u16 wordIndex, u8 groupId) static bool8 UnlockedECMonOrMove(u16 wordIndex, u8 groupId)
{ {
switch (groupId) switch (groupId)
{ {
case EC_GROUP_POKEMON: case EC_GROUP_POKEMON:
return GetSetPokedexFlag(SpeciesToNationalPokedexNum(wordIndex), FLAG_GET_SEEN); return GetSetPokedexFlag(SpeciesToNationalPokedexNum(wordIndex), FLAG_GET_SEEN);
case EC_GROUP_POKEMON_2: case EC_GROUP_POKEMON_2:
if (sub_80BE418(wordIndex)) if (EC_IsDeoxys(wordIndex))
return GetSetPokedexFlag(SpeciesToNationalPokedexNum(wordIndex), FLAG_GET_SEEN); return GetSetPokedexFlag(SpeciesToNationalPokedexNum(wordIndex), FLAG_GET_SEEN);
return TRUE; return TRUE;
case EC_GROUP_MOVE_1: case EC_GROUP_MOVE_1:
@@ -719,25 +719,25 @@ static bool8 sub_80BE3A4(u16 wordIndex, u8 groupId)
} }
} }
static int sub_80BE418(u16 species) static int EC_IsDeoxys(u16 species)
{ {
u32 i; u32 i;
for (i = 0; i < ARRAY_COUNT(gUnknown_83EE004); i++) for (i = 0; i < ARRAY_COUNT(sDeoxysValue); i++)
{ {
if (gUnknown_83EE004[i] == species) if (sDeoxysValue[i] == species)
return TRUE; return TRUE;
} }
return FALSE; return FALSE;
} }
static u8 sub_80BE440(u16 easyChatWord) static u8 IsWordUnlocked(u16 easyChatWord)
{ {
u8 groupId = EC_GROUP(easyChatWord); u8 groupId = EC_GROUP(easyChatWord);
u32 index = EC_INDEX(easyChatWord); u32 index = EC_INDEX(easyChatWord);
if (!sub_80BE36C(groupId)) if (!IsGroupSelectable(groupId))
return FALSE; return FALSE;
else else
return sub_80BE3A4(index, groupId); return UnlockedECMonOrMove(index, groupId);
} }
+1 -1
View File
@@ -487,7 +487,7 @@ void sub_8143D24(void)
{ {
CpuFill32(0, &gSaveBlock1Ptr->unk_3120, sizeof(gSaveBlock1Ptr->unk_3120)); CpuFill32(0, &gSaveBlock1Ptr->unk_3120, sizeof(gSaveBlock1Ptr->unk_3120));
sub_8143ED0(); sub_8143ED0();
sub_80BDE28(); ResetSomeMEventECBuffer_3120_338();
} }
struct MEventBuffer_3120_Sub * GetSavedWonderNews(void) struct MEventBuffer_3120_Sub * GetSavedWonderNews(void)