From 21c3e7e8e5555af964f7419aa9213446eaa421d6 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 2 May 2018 11:31:58 -0400 Subject: through SetMauvilleOldMan --- src/mauville_old_man.c | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 src/mauville_old_man.c (limited to 'src') diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c new file mode 100644 index 000000000..592b5c4ce --- /dev/null +++ b/src/mauville_old_man.c @@ -0,0 +1,84 @@ +#include "global.h" +#include "main.h" +#include "constants/easy_chat.h" +#include "mauville_old_man.h" + +void sub_8120E08(void); // StorytellerSetup +void sub_81339F8(void); // TraderSetup +void sub_8120B5C(void); + +static const u16 sDefaultBardSongLyrics[6] = { + EC_WORD_SHAKE, + EC_WORD_IT, + EC_WORD_DO, + EC_WORD_THE, + EC_WORD_DIET, + EC_WORD_DANCE +}; + +static void SetupBard(void) +{ + u16 i; + struct MauvilleManBard *bard = &gSaveBlock1Ptr->oldMan.bard; + + bard->id = MAUVILLE_MAN_BARD; + bard->hasChangedSong = FALSE; + bard->language = gGameLanguage; + for (i = 0; i < 6; i++) + bard->songLyrics[i] = sDefaultBardSongLyrics[i]; +} + +static void SetupHipster(void) +{ + struct MauvilleManHipster *hipster = &gSaveBlock1Ptr->oldMan.hipster; + + hipster->id = MAUVILLE_MAN_HIPSTER; + hipster->alreadySpoken = FALSE; + hipster->language = gGameLanguage; +} + +static void SetupStoryteller(void) +{ + sub_8120E08(); +} + +static void SetupGiddy(void) +{ + struct MauvilleManGiddy *giddy = &gSaveBlock1Ptr->oldMan.giddy; + + giddy->id = MAUVILLE_MAN_GIDDY; + giddy->taleCounter = 0; + giddy->language = gGameLanguage; +} + +static void SetupTrader(void) +{ + sub_81339F8(); +} + +void SetMauvilleOldMan(void) +{ + u16 trainerId = (gSaveBlock2Ptr->playerTrainerId[1] << 8) | gSaveBlock2Ptr->playerTrainerId[0]; + + + // Determine man based on the last digit of the player's trainer ID. + switch ((trainerId % 10) / 2) + { + case MAUVILLE_MAN_BARD: + SetupBard(); + break; + case MAUVILLE_MAN_HIPSTER: + SetupHipster(); + break; + case MAUVILLE_MAN_TRADER: + SetupTrader(); + break; + case MAUVILLE_MAN_STORYTELLER: + SetupStoryteller(); + break; + case MAUVILLE_MAN_GIDDY: + SetupGiddy(); + break; + } + sub_8120B5C(); +} -- cgit v1.2.3 From cae0fb8ec277adc4a7a6a27d1bbfa5aff8c49239 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 2 May 2018 16:57:34 -0400 Subject: through sub_81203FC --- src/bard_music.c | 1 + src/mail.c | 2 +- src/mauville_old_man.c | 207 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 209 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/bard_music.c b/src/bard_music.c index 6fb1496e5..6c2578071 100644 --- a/src/bard_music.c +++ b/src/bard_music.c @@ -2,6 +2,7 @@ // Includes #include "global.h" #include "bard_music.h" +#include "constants/easy_chat.h" #include "easy_chat.h" #include "data/bard_music/bard_sounds.h" diff --git a/src/mail.c b/src/mail.c index 85ba86974..8fddc7045 100644 --- a/src/mail.c +++ b/src/mail.c @@ -101,7 +101,7 @@ struct MailRead /*0x021c*/ u8 monIconSprite; /*0x021d*/ u8 language; /*0x021e*/ bool8 playerIsSender; - /*0x0220*/ void (*parserSingle)(u8 *dest, u16 word); + /*0x0220*/ u8 * (*parserSingle)(u8 *dest, u16 word); /*0x0224*/ void (*parserMultiple)(u8 *dest, const u16 *src, u16 length1, u16 length2); /*0x0228*/ const struct MailLayout *layout; /*0x022c*/ u8 bg1TilemapBuffer[0x1000]; diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index 592b5c4ce..f39f80ab7 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -2,10 +2,21 @@ #include "main.h" #include "constants/easy_chat.h" #include "mauville_old_man.h" +#include "event_data.h" +#include "string_util.h" +#include "text.h" +#include "easy_chat.h" +#include "script.h" +#include "random.h" +#include "event_scripts.h" + +#define CHAR_SONG_WORD_SEPARATOR 0x37 void sub_8120E08(void); // StorytellerSetup void sub_81339F8(void); // TraderSetup void sub_8120B5C(void); +void sub_81206C0(u8 a0); // StartBardSong +void sub_81204DC(void); static const u16 sDefaultBardSongLyrics[6] = { EC_WORD_SHAKE, @@ -16,6 +27,28 @@ static const u16 sDefaultBardSongLyrics[6] = { EC_WORD_DANCE }; +static const u8 * const sGiddyAdjectives[] = { + gText_SoPretty, + gText_SoDarling, + gText_SoRelaxed, + gText_SoSunny, + gText_SoDesirable, + gText_SoExciting, + gText_SoAmusing, + gText_SoMagical +}; + +static const u8 * const sGiddyQuestions[] = { + gUnknown_08294313, + gUnknown_08294359, + gUnknown_08294398, + gUnknown_082943DA, + gUnknown_0829441C, + gUnknown_08294460, + gUnknown_082944A0, + gUnknown_082944D5 +}; + static void SetupBard(void) { u16 i; @@ -82,3 +115,177 @@ void SetMauvilleOldMan(void) } sub_8120B5C(); } + +u8 sub_81201C8(void) // GetCurrentMauvilleOldMan +{ + struct MauvilleManCommon *common = &gSaveBlock1Ptr->oldMan.common; + + return common->id; +} + +void sub_81201DC(void) // ScrSpecial_GetCurrentMauvilleMan +{ + gSpecialVar_Result = sub_81201C8(); +} + +void sub_81201F4(void) // ScrSpecial_HasBardSongBeenChanged +{ + u16 *scriptResult = &gSpecialVar_Result; // why?? + struct MauvilleManBard *bard = &gSaveBlock1Ptr->oldMan.bard; + + *scriptResult = bard->hasChangedSong; +} + +void sub_8120210(void) // ScrSpecial_SaveBardSongLyrics +{ + u16 i; + struct MauvilleManBard *bard = &gSaveBlock1Ptr->oldMan.bard; + + StringCopy(bard->playerName, gSaveBlock2Ptr->playerName); + + for (i = 0; i < 4; i++) + bard->playerTrainerId[i] = gSaveBlock2Ptr->playerTrainerId[i]; + + for (i = 0; i < 6; i++) + bard->songLyrics[i] = bard->temporaryLyrics[i]; + + bard->hasChangedSong = TRUE; +} + +// Copies lyrics into gStringVar4 +void sub_8120280(void) +{ + struct MauvilleManBard *bard = &gSaveBlock1Ptr->oldMan.bard; + u16 specialVar = gSpecialVar_0x8004; // It's a bit odd to use this temp variable, but it seems needed to match. + u16 *lyrics; + u16 lineNum; + u8 *wordEnd; + u8 *str; + + lyrics = bard->temporaryLyrics; + if (specialVar == 0) + lyrics = bard->songLyrics; + wordEnd = gStringVar4; + str = wordEnd; + // Put three words on each line + for (lineNum = 0; lineNum < 2; lineNum++) + { + wordEnd = CopyEasyChatWord(wordEnd, *(lyrics++)); + while (wordEnd != str) + { + if (*str == CHAR_SPACE) + *str = CHAR_SONG_WORD_SEPARATOR; + str++; + } + + str++; + *(wordEnd++) = CHAR_SPACE; + + wordEnd = CopyEasyChatWord(wordEnd, *(lyrics++)); + while (wordEnd != str) + { + if (*str == CHAR_SPACE) + *str = CHAR_SONG_WORD_SEPARATOR; + str++; + } + + str++; + *(wordEnd++) = CHAR_NEWLINE; + + wordEnd = CopyEasyChatWord(wordEnd, *(lyrics++)); + while (wordEnd != str) + { + if (*str == CHAR_SPACE) + *str = CHAR_SONG_WORD_SEPARATOR; + str++; + } + + if (lineNum == 0) + { + *(wordEnd++) = EXT_CTRL_CODE_BEGIN; + *(wordEnd++) = 15; + } + } +} + +void sub_8120340(void) // ScrSpecial_PlayBardSong +{ + sub_81206C0(gSpecialVar_0x8004); + ScriptContext1_Stop(); +} + +void sub_8120358(void) // ScrSpecial_GetHipsterSpokenFlag +{ + u16 *scriptResult = &gSpecialVar_Result; // again?? + struct MauvilleManHipster *hipster = &gSaveBlock1Ptr->oldMan.hipster; + + *scriptResult = hipster->alreadySpoken; +} + +void sub_8120374(void) // ScrSpecial_SetHipsterSpokenFlag +{ + struct MauvilleManHipster *hipster = &gSaveBlock1Ptr->oldMan.hipster; + + hipster->alreadySpoken = TRUE; +} + +void sub_812038C(void) // ScrSpecial_HipsterTeachWord +{ + u16 var = sub_811F01C(); + + if (var == 0xFFFF) + { + gSpecialVar_Result = FALSE; + } + else + { + CopyEasyChatWord(gStringVar1, var); + gSpecialVar_Result = TRUE; + } +} + +void sub_81203C4(void) // ScrSpecial_GiddyShouldTellAnotherTale +{ + struct MauvilleManGiddy *giddy = &gSaveBlock1Ptr->oldMan.giddy; + + if (giddy->taleCounter == 10) + { + gSpecialVar_Result = FALSE; + giddy->taleCounter = 0; + } + else + { + gSpecialVar_Result = TRUE; + } +} + +void sub_81203FC(void) // ScrSpecial_GenerateGiddyLine +{ + struct MauvilleManGiddy *giddy = &gSaveBlock1Ptr->oldMan.giddy; + + if (giddy->taleCounter == 0) + sub_81204DC(); + + if (giddy->randomWords[giddy->taleCounter] != 0xFFFF) // is not the last element of the array? + { + u8 *stringPtr; + u32 adjective = Random(); + + adjective %= 8; + stringPtr = CopyEasyChatWord(gStringVar4, giddy->randomWords[giddy->taleCounter]); + stringPtr = StringCopy(stringPtr, gOtherText_Is); + stringPtr = StringCopy(stringPtr, sGiddyAdjectives[adjective]); + StringCopy(stringPtr, gOtherText_DontYouAgree); + } + else + { + StringCopy(gStringVar4, sGiddyQuestions[giddy->questionList[giddy->questionNum++]]); + } + + if (!(Random() % 10)) + giddy->taleCounter = 10; + else + giddy->taleCounter++; + + gSpecialVar_Result = TRUE; +} -- cgit v1.2.3 From 0bc7759f9b2ee1e8b442d2b7cc9da44bb146e765 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 3 May 2018 13:40:08 -0400 Subject: through sub_8120748 --- src/mauville_old_man.c | 254 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 251 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index f39f80ab7..fa486748b 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -9,14 +9,24 @@ #include "script.h" #include "random.h" #include "event_scripts.h" +#include "task.h" +#include "menu.h" +#include "m4a.h" +#include "bard_music.h" +#include "constants/songs.h" #define CHAR_SONG_WORD_SEPARATOR 0x37 +extern struct MusicPlayerInfo gMPlayInfo_SE2; + +void sub_81204DC(void); +void sub_81206C0(bool8 useTemporaryLyrics); // StartBardSong +void sub_8120944(u8 taskId); +void sub_8120B5C(void); void sub_8120E08(void); // StorytellerSetup +void sub_8120E50(void); void sub_81339F8(void); // TraderSetup -void sub_8120B5C(void); -void sub_81206C0(u8 a0); // StartBardSong -void sub_81204DC(void); +void sub_8133A60(void); static const u16 sDefaultBardSongLyrics[6] = { EC_WORD_SHAKE, @@ -289,3 +299,241 @@ void sub_81203FC(void) // ScrSpecial_GenerateGiddyLine gSpecialVar_Result = TRUE; } + +void sub_81204DC(void) +{ + struct MauvilleManGiddy *giddy = &gSaveBlock1Ptr->oldMan.giddy; + u16 arr[][2] = { + {EC_GROUP_POKEMON, 0}, + {EC_GROUP_LIFESTYLE, 0}, + {EC_GROUP_HOBBIES, 0}, + {EC_GROUP_MOVE_1, 0}, + {EC_GROUP_MOVE_2, 0}, + {EC_GROUP_POKEMON_2, 0} + }; + u16 i; + u16 r10; + u16 r7; + u16 r1; + + for (i = 0; i < 8; i++) + giddy->questionList[i] = i; + + for (i = 0; i < 8; i++) + { + r1 = Random() % (i + 1); + r7 = giddy->questionList[i]; + giddy->questionList[i] = giddy->questionList[r1]; + giddy->questionList[r1] = r7; + } + + r10 = 0; + for (i = 0; i < 6; i++) + { + arr[i][1] = EasyChat_GetNumWordsInGroup(arr[i][0]); + r10 += arr[i][1]; + } + + giddy->questionNum = 0; + r7 = 0; + for (i = 0; i < 10; i++) + { + r1 = Random() % 10; + if (r1 < 3 && r7 < 8) + { + giddy->randomWords[i] = 0xFFFF; + r7++; + } + else + { + s16 r2 = Random() % r10; + for (r1 = 0; i < 6; r1++) + if ((r2 -= arr[r1][1]) <= 0) + break; + if (r1 == 6) + r1 = 0; + giddy->randomWords[i] = sub_811EE90(arr[r1][0]); + } + } +} +void sub_8120628(void) +{ + struct MauvilleManBard *bard = &gSaveBlock1Ptr->oldMan.bard; + + bard->hasChangedSong = FALSE; +} + +void sub_8120640(void) +{ + struct MauvilleManHipster *hipster = &gSaveBlock1Ptr->oldMan.hipster; + + hipster->alreadySpoken = FALSE; +} + +void sub_8120658(void) +{ + sub_8133A60(); +} + +void sub_8120664(void) +{ + sub_8120E50(); +} + +void sub_8120670(void) // ResetMauvilleOldManFlag +{ + switch (sub_81201C8()) + { + case MAUVILLE_MAN_BARD: + sub_8120628(); + break; + case MAUVILLE_MAN_HIPSTER: + sub_8120640(); + break; + case MAUVILLE_MAN_STORYTELLER: + sub_8120664(); + break; + case MAUVILLE_MAN_TRADER: + sub_8120658(); + break; + case MAUVILLE_MAN_GIDDY: + break; + } + sub_8120B5C(); +} + + +#define tState data[0] +#define tCharIndex data[3] +#define tCurrWord data[4] +#define tUseTemporaryLyrics data[5] + +#define MACRO1(a) (((a) & 3) + (((a) / 8) & 1)) + +void sub_81206C0(bool8 useTemporaryLyrics) +{ + u8 taskId = CreateTask(sub_8120944, 80); + + gTasks[taskId].tUseTemporaryLyrics = useTemporaryLyrics; +} + +void sub_81206F0(struct TextSubPrinter * printer, u16 a1) +{ + gUnknown_03002F84 = FALSE; +} + +void sub_81206FC(struct TextSubPrinter * printer, u16 a1) +{ + gUnknown_03002F84 = TRUE; +} + +void sub_8120708(const u8 * src) +{ + NewMenuHelpers_DrawDialogueFrame(0, 0); + PrintTextOnWindow(0, 1, src, 0, 1, 1, sub_81206FC); + gUnknown_03002F84 = TRUE; + CopyWindowToVram(0, 3); +} + +void sub_8120748(struct Task *task, struct BardSong *song) +{ + switch (task->tState) + { + case 0: // Initialize song + { + struct MauvilleManBard *bard = &gSaveBlock1Ptr->oldMan.bard; + u16 *lyrics; + s32 i; + + // Copy lyrics + if (gSpecialVar_0x8004 == 0) + lyrics = bard->songLyrics; + else + lyrics = bard->temporaryLyrics; + for (i = 0; i < 6; i++) + song->lyrics[i] = lyrics[i]; + song->currWord = 0; + } + break; + case 1: // Wait for BGM to end + break; + case 2: // Initialize word + { + u16 word = song->lyrics[song->currWord]; + song->sound = GetWordSounds(word); + GetWordPhonemes(song, MACRO1(word)); + song->currWord++; + if (song->sound->var00 != 0xFF) + song->state = 0; + else + { + song->state = 3; + song->phonemeTimer = 2; + } + break; + } + case 3: + case 4: + { + const struct BardSound *sound = &song->sound[song->currPhoneme]; + + switch (song->state) + { + case 0: + song->phonemeTimer = song->phonemes[song->currPhoneme].length; + if (sound->var00 <= 50) + { + u8 num = sound->var00 / 3; + m4aSongNumStart(PH_TRAP_HELD + 3 * num); + } + song->state = 2; + song->phonemeTimer--; + break; + case 2: + song->state = 1; + if (sound->var00 <= 50) + { + song->volume = 0x100 + sound->volume * 16; + m4aMPlayVolumeControl(&gMPlayInfo_SE2, 0xFFFF, song->volume); + song->pitch = 0x200 + song->phonemes[song->currPhoneme].pitch; + m4aMPlayPitchControl(&gMPlayInfo_SE2, 0xFFFF, song->pitch); + } + break; + case 1: + if (song->voiceInflection > 10) + song->volume -= 2; + if (song->voiceInflection & 1) + song->pitch += 64; + else + song->pitch -= 64; + m4aMPlayVolumeControl(&gMPlayInfo_SE2, 0xFFFF, song->volume); + m4aMPlayPitchControl(&gMPlayInfo_SE2, 0xFFFF, song->pitch); + song->voiceInflection++; + song->phonemeTimer--; + if (song->phonemeTimer == 0) + { + song->currPhoneme++; + if (song->currPhoneme != 6 && song->sound[song->currPhoneme].var00 != 0xFF) + song->state = 0; + else + { + song->state = 3; + song->phonemeTimer = 2; + } + } + break; + case 3: + song->phonemeTimer--; + if (song->phonemeTimer == 0) + { + m4aMPlayStop(&gMPlayInfo_SE2); + song->state = 4; + } + break; + } + } + break; + case 5: + break; + } +} -- cgit v1.2.3 From c6115a2fec2955803e65eedf5e8de1b8a134c188 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 3 May 2018 17:03:52 -0400 Subject: through sub_8120C0C --- src/mauville_old_man.c | 310 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 307 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index fa486748b..b0e7fb491 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -1,6 +1,9 @@ #include "global.h" #include "main.h" +#include "constants/songs.h" #include "constants/easy_chat.h" +#include "constants/map_objects.h" +#include "constants/vars.h" #include "mauville_old_man.h" #include "event_data.h" #include "string_util.h" @@ -13,7 +16,8 @@ #include "menu.h" #include "m4a.h" #include "bard_music.h" -#include "constants/songs.h" +#include "sound.h" +#include "strings.h" #define CHAR_SONG_WORD_SEPARATOR 0x37 @@ -28,6 +32,12 @@ void sub_8120E50(void); void sub_81339F8(void); // TraderSetup void sub_8133A60(void); +struct BardSong gUnknown_03006130; + +EWRAM_DATA u16 gUnknown_0203A128 = 0; +EWRAM_DATA struct MauvilleOldMan * gUnknown_0203A12C = NULL; +EWRAM_DATA u8 gUnknown_0203A130 = 0; + static const u16 sDefaultBardSongLyrics[6] = { EC_WORD_SHAKE, EC_WORD_IT, @@ -409,6 +419,7 @@ void sub_8120670(void) // ResetMauvilleOldManFlag #define tUseTemporaryLyrics data[5] #define MACRO1(a) (((a) & 3) + (((a) / 8) & 1)) +#define MACRO2(a) (((a) % 4) + (((a) / 8) & 1)) void sub_81206C0(bool8 useTemporaryLyrics) { @@ -417,7 +428,7 @@ void sub_81206C0(bool8 useTemporaryLyrics) gTasks[taskId].tUseTemporaryLyrics = useTemporaryLyrics; } -void sub_81206F0(struct TextSubPrinter * printer, u16 a1) +void sub_81206F0(void) { gUnknown_03002F84 = FALSE; } @@ -435,7 +446,7 @@ void sub_8120708(const u8 * src) CopyWindowToVram(0, 3); } -void sub_8120748(struct Task *task, struct BardSong *song) +void sub_8120748(struct Task *task, struct BardSong *song) // BardSing { switch (task->tState) { @@ -537,3 +548,296 @@ void sub_8120748(struct Task *task, struct BardSong *song) break; } } + +void sub_8120944(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; // r5 + + sub_8120748(task, &gUnknown_03006130); + switch (task->tState) + { + case 0: // Initialize song + sub_8120280(); + sub_8120708(gStringVar4); + task->data[1] = 0; + task->data[2] = 0; + task->tCharIndex = 0; + task->tCurrWord = 0; + FadeOutBGMTemporarily(4); + task->tState = 1; + break; + case 1: // Wait for BGM to end + if (IsBGMPausedOrStopped()) + task->tState = 2; + break; + case 2: // Initialize word + { + struct MauvilleManBard *bard = &gSaveBlock1Ptr->oldMan.bard; + u8 *str = gStringVar4 + task->tCharIndex; + u16 wordLen = 0; + // Can't get it to match without hacking + u32 temp; + register s16 zero asm("r1"); + + while (*str != CHAR_SPACE + && *str != CHAR_NEWLINE + && *str != EXT_CTRL_CODE_BEGIN + && *str != EOS) + { + str++; + wordLen++; + } + if (!task->tUseTemporaryLyrics) + gUnknown_0203A128 = MACRO2(bard->songLyrics[task->tCurrWord]); + else + gUnknown_0203A128 = MACRO2(bard->temporaryLyrics[task->tCurrWord]); + temp = gUnknown_03006130.length / wordLen; + zero = 0; + gUnknown_03006130.length = temp; + if (gUnknown_03006130.length <= 0) + gUnknown_03006130.length = 1; + task->tCurrWord++; + if (task->data[2] == 0) + task->tState = 3; + else + task->tState = 5; + task->data[1] = zero; + } + break; + case 5: + if (task->data[2] == 0) + task->tState = 3; + else + task->data[2]--; + break; + case 3: + if (gStringVar4[task->tCharIndex] == EOS) + { + FadeInBGM(6); + m4aMPlayFadeOutTemporarily(&gMPlayInfo_SE2, 2); + EnableBothScriptContexts(); + DestroyTask(taskId); + } + else if (gStringVar4[task->tCharIndex] == CHAR_SPACE) + { + + sub_81206F0(); + task->tCharIndex++; + task->tState = 2; + task->data[2] = 0; + } + else if (gStringVar4[task->tCharIndex] == CHAR_NEWLINE) + { + task->tCharIndex++; + task->tState = 2; + task->data[2] = 0; + } + else if (gStringVar4[task->tCharIndex] == EXT_CTRL_CODE_BEGIN) + { + task->tCharIndex += 2; // skip over control codes + task->tState = 2; + task->data[2] = 8; + } + else if (gStringVar4[task->tCharIndex] == CHAR_SONG_WORD_SEPARATOR) + { + gStringVar4[task->tCharIndex] = CHAR_SPACE; // restore it back to a space + sub_81206F0(); + task->tCharIndex++; + task->data[2] = 0; + } + else + { + switch (task->data[1]) + { + case 0: + sub_81206F0(); + task->data[1]++; + break; + case 1: + task->data[1]++; + break; + case 2: + task->tCharIndex++; + task->data[1] = 0; + task->data[2] = gUnknown_03006130.length; + task->tState = 4; + break; + } + } + break; + case 4: + task->data[2]--; + if (task->data[2] == 0) + task->tState = 3; + break; + } + sub_8197224(); +} + +void sub_8120B5C(void) +{ + VarSet(VAR_0x4010, MAP_OBJ_GFX_BARD); +} + +struct Story +{ + u8 stat; + u8 minVal; + const u8 *title; + const u8 *action; + const u8 *fullText; +}; + +const struct Story gUnknown_0859F048[] = { + {GAME_STAT_50, 1, MauvilleCity_PokemonCenter_1F_Text_28E930, MauvilleCity_PokemonCenter_1F_Text_28E947, MauvilleCity_PokemonCenter_1F_Text_28E956}, + {GAME_STAT_STARTED_TRENDS, 1, MauvilleCity_PokemonCenter_1F_Text_28E9D7, MauvilleCity_PokemonCenter_1F_Text_28E9EF, MauvilleCity_PokemonCenter_1F_Text_28E9FE}, + {GAME_STAT_PLANTED_BERRIES, 1, MauvilleCity_PokemonCenter_1F_Text_28EA7D, MauvilleCity_PokemonCenter_1F_Text_28EA98, MauvilleCity_PokemonCenter_1F_Text_28EAA8}, + {GAME_STAT_TRADED_BIKES, 1, MauvilleCity_PokemonCenter_1F_Text_28EB19, MauvilleCity_PokemonCenter_1F_Text_28EB31, MauvilleCity_PokemonCenter_1F_Text_28EB3E}, + {GAME_STAT_GOT_INTERVIEWED, 1, MauvilleCity_PokemonCenter_1F_Text_28EBB5, MauvilleCity_PokemonCenter_1F_Text_28EBCD, MauvilleCity_PokemonCenter_1F_Text_28EBDD}, + {GAME_STAT_TRAINER_BATTLES, 1, MauvilleCity_PokemonCenter_1F_Text_28EC60, MauvilleCity_PokemonCenter_1F_Text_28EC79, MauvilleCity_PokemonCenter_1F_Text_28EC81}, + {GAME_STAT_POKEMON_CAPTURES, 1, MauvilleCity_PokemonCenter_1F_Text_28ED04, MauvilleCity_PokemonCenter_1F_Text_28ED21, MauvilleCity_PokemonCenter_1F_Text_28ED30}, + {GAME_STAT_FISHING_CAPTURES, 1, MauvilleCity_PokemonCenter_1F_Text_28EDA1, MauvilleCity_PokemonCenter_1F_Text_28EDB5, MauvilleCity_PokemonCenter_1F_Text_28EDCF}, + {GAME_STAT_HATCHED_EGGS, 1, MauvilleCity_PokemonCenter_1F_Text_28EE45, MauvilleCity_PokemonCenter_1F_Text_28EE5D, MauvilleCity_PokemonCenter_1F_Text_28EE6A}, + {GAME_STAT_EVOLVED_POKEMON, 1, MauvilleCity_PokemonCenter_1F_Text_28EEDD, MauvilleCity_PokemonCenter_1F_Text_28EEF1, MauvilleCity_PokemonCenter_1F_Text_28EF01}, + {GAME_STAT_USED_POKECENTER, 1, MauvilleCity_PokemonCenter_1F_Text_28EF73, MauvilleCity_PokemonCenter_1F_Text_28EF95, MauvilleCity_PokemonCenter_1F_Text_28EFAA}, + {GAME_STAT_RESTED_AT_HOME, 1, MauvilleCity_PokemonCenter_1F_Text_28F045, MauvilleCity_PokemonCenter_1F_Text_28F05A, MauvilleCity_PokemonCenter_1F_Text_28F071}, + {GAME_STAT_ENTERED_SAFARI_ZONE, 1, MauvilleCity_PokemonCenter_1F_Text_28F0F3, MauvilleCity_PokemonCenter_1F_Text_28F10D, MauvilleCity_PokemonCenter_1F_Text_28F125}, + {GAME_STAT_USED_CUT, 1, MauvilleCity_PokemonCenter_1F_Text_28F1BE, MauvilleCity_PokemonCenter_1F_Text_28F1D5, MauvilleCity_PokemonCenter_1F_Text_28F1DE}, + {GAME_STAT_USED_ROCK_SMASH, 1, MauvilleCity_PokemonCenter_1F_Text_28F24F, MauvilleCity_PokemonCenter_1F_Text_28F269, MauvilleCity_PokemonCenter_1F_Text_28F277}, + {GAME_STAT_MOVED_SECRET_BASE, 1, MauvilleCity_PokemonCenter_1F_Text_28F2FC, MauvilleCity_PokemonCenter_1F_Text_28F314, MauvilleCity_PokemonCenter_1F_Text_28F32A}, + {GAME_STAT_USED_SPLASH, 1, MauvilleCity_PokemonCenter_1F_Text_28F3AD, MauvilleCity_PokemonCenter_1F_Text_28F3C6, MauvilleCity_PokemonCenter_1F_Text_28F3D2}, + {GAME_STAT_USED_STRUGGLE, 1, MauvilleCity_PokemonCenter_1F_Text_28F44B, MauvilleCity_PokemonCenter_1F_Text_28F461, MauvilleCity_PokemonCenter_1F_Text_28F47C}, + {GAME_STAT_SLOT_JACKPOTS, 1, MauvilleCity_PokemonCenter_1F_Text_28F50C, MauvilleCity_PokemonCenter_1F_Text_28F51B, MauvilleCity_PokemonCenter_1F_Text_28F538}, + {GAME_STAT_CONSECUTIVE_ROULETTE_WINS, 2, MauvilleCity_PokemonCenter_1F_Text_28F5BE, MauvilleCity_PokemonCenter_1F_Text_28F5D1, MauvilleCity_PokemonCenter_1F_Text_28F5F2}, + {GAME_STAT_ENTERED_BATTLE_TOWER, 1, MauvilleCity_PokemonCenter_1F_Text_28F678, MauvilleCity_PokemonCenter_1F_Text_28F694, MauvilleCity_PokemonCenter_1F_Text_28F6B4}, + {GAME_STAT_POKEBLOCKS, 1, MauvilleCity_PokemonCenter_1F_Text_28F751, MauvilleCity_PokemonCenter_1F_Text_28F76A, MauvilleCity_PokemonCenter_1F_Text_28F776}, + {GAME_STAT_ENTERED_CONTEST, 1, MauvilleCity_PokemonCenter_1F_Text_28F7F6, MauvilleCity_PokemonCenter_1F_Text_28F811, MauvilleCity_PokemonCenter_1F_Text_28F822}, + {GAME_STAT_WON_CONTEST, 1, MauvilleCity_PokemonCenter_1F_Text_28F89C, MauvilleCity_PokemonCenter_1F_Text_28F8AF, MauvilleCity_PokemonCenter_1F_Text_28F8BC}, + {GAME_STAT_SHOPPED, 1, MauvilleCity_PokemonCenter_1F_Text_28F92F, MauvilleCity_PokemonCenter_1F_Text_28F941, MauvilleCity_PokemonCenter_1F_Text_28F949}, + {GAME_STAT_USED_ITEMFINDER, 1, MauvilleCity_PokemonCenter_1F_Text_28F9D1, MauvilleCity_PokemonCenter_1F_Text_28F9EA, MauvilleCity_PokemonCenter_1F_Text_28F9FD}, + {GAME_STAT_GOT_RAINED_ON, 1, MauvilleCity_PokemonCenter_1F_Text_28FA81, MauvilleCity_PokemonCenter_1F_Text_28FA99, MauvilleCity_PokemonCenter_1F_Text_28FAA7}, + {GAME_STAT_CHECKED_POKEDEX, 1, MauvilleCity_PokemonCenter_1F_Text_28FB1D, MauvilleCity_PokemonCenter_1F_Text_28FB35, MauvilleCity_PokemonCenter_1F_Text_28FB47}, + {GAME_STAT_RECEIVED_RIBBONS, 1, MauvilleCity_PokemonCenter_1F_Text_28FBC4, MauvilleCity_PokemonCenter_1F_Text_28FBD9, MauvilleCity_PokemonCenter_1F_Text_28FBEA}, + {GAME_STAT_JUMPED_DOWN_LEDGES, 1, MauvilleCity_PokemonCenter_1F_Text_28FC6B, MauvilleCity_PokemonCenter_1F_Text_28FC85, MauvilleCity_PokemonCenter_1F_Text_28FC98}, + {GAME_STAT_WATCHED_TV, 1, MauvilleCity_PokemonCenter_1F_Text_28FD1D, MauvilleCity_PokemonCenter_1F_Text_28FD35, MauvilleCity_PokemonCenter_1F_Text_28FD40}, + {GAME_STAT_CHECKED_CLOCK, 1, MauvilleCity_PokemonCenter_1F_Text_28FDA2, MauvilleCity_PokemonCenter_1F_Text_28FDBD, MauvilleCity_PokemonCenter_1F_Text_28FDCE}, + {GAME_STAT_WON_POKEMON_LOTTERY, 1, MauvilleCity_PokemonCenter_1F_Text_28FE57, MauvilleCity_PokemonCenter_1F_Text_28FE72, MauvilleCity_PokemonCenter_1F_Text_28FE88}, + {GAME_STAT_USED_DAYCARE, 1, MauvilleCity_PokemonCenter_1F_Text_28FF0C, MauvilleCity_PokemonCenter_1F_Text_28FF27, MauvilleCity_PokemonCenter_1F_Text_28FF44}, + {GAME_STAT_RODE_CABLE_CAR, 1, MauvilleCity_PokemonCenter_1F_Text_28FFDD, MauvilleCity_PokemonCenter_1F_Text_28FFFA, MauvilleCity_PokemonCenter_1F_Text_29000D}, + {GAME_STAT_ENTERED_HOT_SPRINGS, 1, MauvilleCity_PokemonCenter_1F_Text_290097, MauvilleCity_PokemonCenter_1F_Text_2900B5, MauvilleCity_PokemonCenter_1F_Text_2900CB} +}; + +void sub_8120B70(union OldMan * oldMan) +{ + s32 i; + u8 sp00[8]; + + switch (oldMan->common.id) + { + case MAUVILLE_MAN_TRADER: + { + struct MauvilleOldManTrader * trader = &oldMan->trader; + for (i = 0; i < 4; i++) + { + if (trader->unk32[i] == LANGUAGE_JAPANESE) + { + ConvertInternationalString(trader->unk5[i], LANGUAGE_JAPANESE); + } + } + } + break; + case MAUVILLE_MAN_STORYTELLER: + { + struct MauvilleManStoryteller * storyteller = &oldMan->storyteller; + for (i = 0; i < 4; i++) + { + if (storyteller->gameStatIDs[i] != 0) + { + memcpy(sp00, storyteller->trainerNames[i], 7); + sp00[7] = EOS; + if (IsStringJapanese(sp00)) + { + memset(sp00, CHAR_SPACE, 8); + StringCopy(sp00, gText_Friend); + memcpy(storyteller->trainerNames[i], sp00, 7); + storyteller->unk34[i] = GAME_LANGUAGE; + } + } + } + } + break; + } +} + +void sub_8120C0C(union OldMan * oldMan, u32 r8, u32 r7, u32 r3) +{ + s32 i; + + switch (oldMan->common.id) + { + case MAUVILLE_MAN_TRADER: + { + struct MauvilleOldManTrader * trader = &oldMan->trader; + + for (i = 0; i < 4; i++) + { + if (IsStringJapanese(trader->unk5[i])) + { + trader->unk32[i] = r8; + } + else + { + trader->unk32[i] = r7; + } + } + } + break; + case MAUVILLE_MAN_STORYTELLER: + { + struct MauvilleManStoryteller * storyteller = &oldMan->storyteller; + + for (i = 0; i < 4; i++) + { + if (IsStringJapanese(storyteller->trainerNames[i])) + { + storyteller->unk34[i] = r8; + } + else + { + storyteller->unk34[i] = r7; + } + } + } + break; + case MAUVILLE_MAN_BARD: + { + struct MauvilleManBard * bard = &oldMan->bard; + + if (r3 == LANGUAGE_JAPANESE) + bard->language = r8; + else + bard->language = r7; + } + break; + case MAUVILLE_MAN_HIPSTER: + { + struct MauvilleManHipster * hipster = &oldMan->hipster; + + if (r3 == LANGUAGE_JAPANESE) + hipster->language = r8; + else + hipster->language = r7; + } + break; + case MAUVILLE_MAN_GIDDY: + { + struct MauvilleManGiddy * giddy = &oldMan->giddy; + + if (r3 == LANGUAGE_JAPANESE) + giddy->language = r8; + else + giddy->language = r7; + } + break; + } +} -- cgit v1.2.3 From 1943118a1e0edcadcbf8c602aedb191f44b8b9f6 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 3 May 2018 17:26:02 -0400 Subject: through sub_8120D34 --- src/mauville_old_man.c | 204 +++++++++++++++++++++++++++++++++++++------------ 1 file changed, 156 insertions(+), 48 deletions(-) (limited to 'src') diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index b0e7fb491..1f398569c 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -679,54 +679,6 @@ void sub_8120B5C(void) VarSet(VAR_0x4010, MAP_OBJ_GFX_BARD); } -struct Story -{ - u8 stat; - u8 minVal; - const u8 *title; - const u8 *action; - const u8 *fullText; -}; - -const struct Story gUnknown_0859F048[] = { - {GAME_STAT_50, 1, MauvilleCity_PokemonCenter_1F_Text_28E930, MauvilleCity_PokemonCenter_1F_Text_28E947, MauvilleCity_PokemonCenter_1F_Text_28E956}, - {GAME_STAT_STARTED_TRENDS, 1, MauvilleCity_PokemonCenter_1F_Text_28E9D7, MauvilleCity_PokemonCenter_1F_Text_28E9EF, MauvilleCity_PokemonCenter_1F_Text_28E9FE}, - {GAME_STAT_PLANTED_BERRIES, 1, MauvilleCity_PokemonCenter_1F_Text_28EA7D, MauvilleCity_PokemonCenter_1F_Text_28EA98, MauvilleCity_PokemonCenter_1F_Text_28EAA8}, - {GAME_STAT_TRADED_BIKES, 1, MauvilleCity_PokemonCenter_1F_Text_28EB19, MauvilleCity_PokemonCenter_1F_Text_28EB31, MauvilleCity_PokemonCenter_1F_Text_28EB3E}, - {GAME_STAT_GOT_INTERVIEWED, 1, MauvilleCity_PokemonCenter_1F_Text_28EBB5, MauvilleCity_PokemonCenter_1F_Text_28EBCD, MauvilleCity_PokemonCenter_1F_Text_28EBDD}, - {GAME_STAT_TRAINER_BATTLES, 1, MauvilleCity_PokemonCenter_1F_Text_28EC60, MauvilleCity_PokemonCenter_1F_Text_28EC79, MauvilleCity_PokemonCenter_1F_Text_28EC81}, - {GAME_STAT_POKEMON_CAPTURES, 1, MauvilleCity_PokemonCenter_1F_Text_28ED04, MauvilleCity_PokemonCenter_1F_Text_28ED21, MauvilleCity_PokemonCenter_1F_Text_28ED30}, - {GAME_STAT_FISHING_CAPTURES, 1, MauvilleCity_PokemonCenter_1F_Text_28EDA1, MauvilleCity_PokemonCenter_1F_Text_28EDB5, MauvilleCity_PokemonCenter_1F_Text_28EDCF}, - {GAME_STAT_HATCHED_EGGS, 1, MauvilleCity_PokemonCenter_1F_Text_28EE45, MauvilleCity_PokemonCenter_1F_Text_28EE5D, MauvilleCity_PokemonCenter_1F_Text_28EE6A}, - {GAME_STAT_EVOLVED_POKEMON, 1, MauvilleCity_PokemonCenter_1F_Text_28EEDD, MauvilleCity_PokemonCenter_1F_Text_28EEF1, MauvilleCity_PokemonCenter_1F_Text_28EF01}, - {GAME_STAT_USED_POKECENTER, 1, MauvilleCity_PokemonCenter_1F_Text_28EF73, MauvilleCity_PokemonCenter_1F_Text_28EF95, MauvilleCity_PokemonCenter_1F_Text_28EFAA}, - {GAME_STAT_RESTED_AT_HOME, 1, MauvilleCity_PokemonCenter_1F_Text_28F045, MauvilleCity_PokemonCenter_1F_Text_28F05A, MauvilleCity_PokemonCenter_1F_Text_28F071}, - {GAME_STAT_ENTERED_SAFARI_ZONE, 1, MauvilleCity_PokemonCenter_1F_Text_28F0F3, MauvilleCity_PokemonCenter_1F_Text_28F10D, MauvilleCity_PokemonCenter_1F_Text_28F125}, - {GAME_STAT_USED_CUT, 1, MauvilleCity_PokemonCenter_1F_Text_28F1BE, MauvilleCity_PokemonCenter_1F_Text_28F1D5, MauvilleCity_PokemonCenter_1F_Text_28F1DE}, - {GAME_STAT_USED_ROCK_SMASH, 1, MauvilleCity_PokemonCenter_1F_Text_28F24F, MauvilleCity_PokemonCenter_1F_Text_28F269, MauvilleCity_PokemonCenter_1F_Text_28F277}, - {GAME_STAT_MOVED_SECRET_BASE, 1, MauvilleCity_PokemonCenter_1F_Text_28F2FC, MauvilleCity_PokemonCenter_1F_Text_28F314, MauvilleCity_PokemonCenter_1F_Text_28F32A}, - {GAME_STAT_USED_SPLASH, 1, MauvilleCity_PokemonCenter_1F_Text_28F3AD, MauvilleCity_PokemonCenter_1F_Text_28F3C6, MauvilleCity_PokemonCenter_1F_Text_28F3D2}, - {GAME_STAT_USED_STRUGGLE, 1, MauvilleCity_PokemonCenter_1F_Text_28F44B, MauvilleCity_PokemonCenter_1F_Text_28F461, MauvilleCity_PokemonCenter_1F_Text_28F47C}, - {GAME_STAT_SLOT_JACKPOTS, 1, MauvilleCity_PokemonCenter_1F_Text_28F50C, MauvilleCity_PokemonCenter_1F_Text_28F51B, MauvilleCity_PokemonCenter_1F_Text_28F538}, - {GAME_STAT_CONSECUTIVE_ROULETTE_WINS, 2, MauvilleCity_PokemonCenter_1F_Text_28F5BE, MauvilleCity_PokemonCenter_1F_Text_28F5D1, MauvilleCity_PokemonCenter_1F_Text_28F5F2}, - {GAME_STAT_ENTERED_BATTLE_TOWER, 1, MauvilleCity_PokemonCenter_1F_Text_28F678, MauvilleCity_PokemonCenter_1F_Text_28F694, MauvilleCity_PokemonCenter_1F_Text_28F6B4}, - {GAME_STAT_POKEBLOCKS, 1, MauvilleCity_PokemonCenter_1F_Text_28F751, MauvilleCity_PokemonCenter_1F_Text_28F76A, MauvilleCity_PokemonCenter_1F_Text_28F776}, - {GAME_STAT_ENTERED_CONTEST, 1, MauvilleCity_PokemonCenter_1F_Text_28F7F6, MauvilleCity_PokemonCenter_1F_Text_28F811, MauvilleCity_PokemonCenter_1F_Text_28F822}, - {GAME_STAT_WON_CONTEST, 1, MauvilleCity_PokemonCenter_1F_Text_28F89C, MauvilleCity_PokemonCenter_1F_Text_28F8AF, MauvilleCity_PokemonCenter_1F_Text_28F8BC}, - {GAME_STAT_SHOPPED, 1, MauvilleCity_PokemonCenter_1F_Text_28F92F, MauvilleCity_PokemonCenter_1F_Text_28F941, MauvilleCity_PokemonCenter_1F_Text_28F949}, - {GAME_STAT_USED_ITEMFINDER, 1, MauvilleCity_PokemonCenter_1F_Text_28F9D1, MauvilleCity_PokemonCenter_1F_Text_28F9EA, MauvilleCity_PokemonCenter_1F_Text_28F9FD}, - {GAME_STAT_GOT_RAINED_ON, 1, MauvilleCity_PokemonCenter_1F_Text_28FA81, MauvilleCity_PokemonCenter_1F_Text_28FA99, MauvilleCity_PokemonCenter_1F_Text_28FAA7}, - {GAME_STAT_CHECKED_POKEDEX, 1, MauvilleCity_PokemonCenter_1F_Text_28FB1D, MauvilleCity_PokemonCenter_1F_Text_28FB35, MauvilleCity_PokemonCenter_1F_Text_28FB47}, - {GAME_STAT_RECEIVED_RIBBONS, 1, MauvilleCity_PokemonCenter_1F_Text_28FBC4, MauvilleCity_PokemonCenter_1F_Text_28FBD9, MauvilleCity_PokemonCenter_1F_Text_28FBEA}, - {GAME_STAT_JUMPED_DOWN_LEDGES, 1, MauvilleCity_PokemonCenter_1F_Text_28FC6B, MauvilleCity_PokemonCenter_1F_Text_28FC85, MauvilleCity_PokemonCenter_1F_Text_28FC98}, - {GAME_STAT_WATCHED_TV, 1, MauvilleCity_PokemonCenter_1F_Text_28FD1D, MauvilleCity_PokemonCenter_1F_Text_28FD35, MauvilleCity_PokemonCenter_1F_Text_28FD40}, - {GAME_STAT_CHECKED_CLOCK, 1, MauvilleCity_PokemonCenter_1F_Text_28FDA2, MauvilleCity_PokemonCenter_1F_Text_28FDBD, MauvilleCity_PokemonCenter_1F_Text_28FDCE}, - {GAME_STAT_WON_POKEMON_LOTTERY, 1, MauvilleCity_PokemonCenter_1F_Text_28FE57, MauvilleCity_PokemonCenter_1F_Text_28FE72, MauvilleCity_PokemonCenter_1F_Text_28FE88}, - {GAME_STAT_USED_DAYCARE, 1, MauvilleCity_PokemonCenter_1F_Text_28FF0C, MauvilleCity_PokemonCenter_1F_Text_28FF27, MauvilleCity_PokemonCenter_1F_Text_28FF44}, - {GAME_STAT_RODE_CABLE_CAR, 1, MauvilleCity_PokemonCenter_1F_Text_28FFDD, MauvilleCity_PokemonCenter_1F_Text_28FFFA, MauvilleCity_PokemonCenter_1F_Text_29000D}, - {GAME_STAT_ENTERED_HOT_SPRINGS, 1, MauvilleCity_PokemonCenter_1F_Text_290097, MauvilleCity_PokemonCenter_1F_Text_2900B5, MauvilleCity_PokemonCenter_1F_Text_2900CB} -}; - void sub_8120B70(union OldMan * oldMan) { s32 i; @@ -841,3 +793,159 @@ void sub_8120C0C(union OldMan * oldMan, u32 r8, u32 r7, u32 r3) break; } } + +void sub_8120CD0(union OldMan * oldMan, u32 unused, u32 a2) +{ + u8 sp00[8]; + s32 i; + if (oldMan->common.id == MAUVILLE_MAN_STORYTELLER && a2 == LANGUAGE_JAPANESE) + { + struct MauvilleManStoryteller * storyteller = &oldMan->storyteller; + + for (i = 0; i < 4; i++) + { + if (storyteller->gameStatIDs[i] != 0) + { + memcpy(sp00, storyteller->trainerNames[i], 7); + sp00[7] = EOS; + if (IsStringJapanese(sp00)) + storyteller->unk34[i] = LANGUAGE_JAPANESE; + else + storyteller->unk34[i] = GAME_LANGUAGE; + } + } + } +} + +void sub_8120D34(union OldMan * oldMan, u32 r1, u32 r6) +{ + u32 r2 = (r1 == LANGUAGE_JAPANESE || r1 == LANGUAGE_ENGLISH) ? 1 : 0; + switch (oldMan->common.id) + { + case MAUVILLE_MAN_TRADER: + { + struct MauvilleOldManTrader * trader = &oldMan->trader; + s32 i; + + if (r2) + { + for (i = 0; i < 4; i++) + { + u8 * str = trader->unk5[i]; + if (str[0] == EXT_CTRL_CODE_BEGIN && str[1] == EXT_CTRL_CODE_JPN) + { + StripExtCtrlCodes(str); + trader->unk32[i] = LANGUAGE_JAPANESE; + } + else + trader->unk32[i] = r6; + } + } + else + { + for (i = 0; i < 4; i++) + { + if (trader->unk32[i] == LANGUAGE_JAPANESE) + { + StripExtCtrlCodes(trader->unk5[i]); + } + } + } + } + break; + case MAUVILLE_MAN_STORYTELLER: + { + + struct MauvilleManStoryteller * storyteller = &oldMan->storyteller; + s32 i; + + if (r2) + { + for (i = 0; i < 4; i++) + { + if (storyteller->gameStatIDs[i] != 0) + storyteller->unk34[i] = r6; + } + } + } + break; + case MAUVILLE_MAN_BARD: + { + struct MauvilleManBard * bard = &oldMan->bard; + + if (r2) + { + bard->language = r6; + } + } + break; + case MAUVILLE_MAN_HIPSTER: + { + struct MauvilleManHipster * hipster = &oldMan->hipster; + + if (r2) + { + hipster->language = r6; + } + } + break; + case MAUVILLE_MAN_GIDDY: + { + struct MauvilleManGiddy * giddy = &oldMan->giddy; + + if (r2) + { + giddy->language = r6; + } + } + break; + } +} + +struct Story +{ + u8 stat; + u8 minVal; + const u8 *title; + const u8 *action; + const u8 *fullText; +}; + +const struct Story gUnknown_0859F048[] = { + {GAME_STAT_50, 1, MauvilleCity_PokemonCenter_1F_Text_28E930, MauvilleCity_PokemonCenter_1F_Text_28E947, MauvilleCity_PokemonCenter_1F_Text_28E956}, + {GAME_STAT_STARTED_TRENDS, 1, MauvilleCity_PokemonCenter_1F_Text_28E9D7, MauvilleCity_PokemonCenter_1F_Text_28E9EF, MauvilleCity_PokemonCenter_1F_Text_28E9FE}, + {GAME_STAT_PLANTED_BERRIES, 1, MauvilleCity_PokemonCenter_1F_Text_28EA7D, MauvilleCity_PokemonCenter_1F_Text_28EA98, MauvilleCity_PokemonCenter_1F_Text_28EAA8}, + {GAME_STAT_TRADED_BIKES, 1, MauvilleCity_PokemonCenter_1F_Text_28EB19, MauvilleCity_PokemonCenter_1F_Text_28EB31, MauvilleCity_PokemonCenter_1F_Text_28EB3E}, + {GAME_STAT_GOT_INTERVIEWED, 1, MauvilleCity_PokemonCenter_1F_Text_28EBB5, MauvilleCity_PokemonCenter_1F_Text_28EBCD, MauvilleCity_PokemonCenter_1F_Text_28EBDD}, + {GAME_STAT_TRAINER_BATTLES, 1, MauvilleCity_PokemonCenter_1F_Text_28EC60, MauvilleCity_PokemonCenter_1F_Text_28EC79, MauvilleCity_PokemonCenter_1F_Text_28EC81}, + {GAME_STAT_POKEMON_CAPTURES, 1, MauvilleCity_PokemonCenter_1F_Text_28ED04, MauvilleCity_PokemonCenter_1F_Text_28ED21, MauvilleCity_PokemonCenter_1F_Text_28ED30}, + {GAME_STAT_FISHING_CAPTURES, 1, MauvilleCity_PokemonCenter_1F_Text_28EDA1, MauvilleCity_PokemonCenter_1F_Text_28EDB5, MauvilleCity_PokemonCenter_1F_Text_28EDCF}, + {GAME_STAT_HATCHED_EGGS, 1, MauvilleCity_PokemonCenter_1F_Text_28EE45, MauvilleCity_PokemonCenter_1F_Text_28EE5D, MauvilleCity_PokemonCenter_1F_Text_28EE6A}, + {GAME_STAT_EVOLVED_POKEMON, 1, MauvilleCity_PokemonCenter_1F_Text_28EEDD, MauvilleCity_PokemonCenter_1F_Text_28EEF1, MauvilleCity_PokemonCenter_1F_Text_28EF01}, + {GAME_STAT_USED_POKECENTER, 1, MauvilleCity_PokemonCenter_1F_Text_28EF73, MauvilleCity_PokemonCenter_1F_Text_28EF95, MauvilleCity_PokemonCenter_1F_Text_28EFAA}, + {GAME_STAT_RESTED_AT_HOME, 1, MauvilleCity_PokemonCenter_1F_Text_28F045, MauvilleCity_PokemonCenter_1F_Text_28F05A, MauvilleCity_PokemonCenter_1F_Text_28F071}, + {GAME_STAT_ENTERED_SAFARI_ZONE, 1, MauvilleCity_PokemonCenter_1F_Text_28F0F3, MauvilleCity_PokemonCenter_1F_Text_28F10D, MauvilleCity_PokemonCenter_1F_Text_28F125}, + {GAME_STAT_USED_CUT, 1, MauvilleCity_PokemonCenter_1F_Text_28F1BE, MauvilleCity_PokemonCenter_1F_Text_28F1D5, MauvilleCity_PokemonCenter_1F_Text_28F1DE}, + {GAME_STAT_USED_ROCK_SMASH, 1, MauvilleCity_PokemonCenter_1F_Text_28F24F, MauvilleCity_PokemonCenter_1F_Text_28F269, MauvilleCity_PokemonCenter_1F_Text_28F277}, + {GAME_STAT_MOVED_SECRET_BASE, 1, MauvilleCity_PokemonCenter_1F_Text_28F2FC, MauvilleCity_PokemonCenter_1F_Text_28F314, MauvilleCity_PokemonCenter_1F_Text_28F32A}, + {GAME_STAT_USED_SPLASH, 1, MauvilleCity_PokemonCenter_1F_Text_28F3AD, MauvilleCity_PokemonCenter_1F_Text_28F3C6, MauvilleCity_PokemonCenter_1F_Text_28F3D2}, + {GAME_STAT_USED_STRUGGLE, 1, MauvilleCity_PokemonCenter_1F_Text_28F44B, MauvilleCity_PokemonCenter_1F_Text_28F461, MauvilleCity_PokemonCenter_1F_Text_28F47C}, + {GAME_STAT_SLOT_JACKPOTS, 1, MauvilleCity_PokemonCenter_1F_Text_28F50C, MauvilleCity_PokemonCenter_1F_Text_28F51B, MauvilleCity_PokemonCenter_1F_Text_28F538}, + {GAME_STAT_CONSECUTIVE_ROULETTE_WINS, 2, MauvilleCity_PokemonCenter_1F_Text_28F5BE, MauvilleCity_PokemonCenter_1F_Text_28F5D1, MauvilleCity_PokemonCenter_1F_Text_28F5F2}, + {GAME_STAT_ENTERED_BATTLE_TOWER, 1, MauvilleCity_PokemonCenter_1F_Text_28F678, MauvilleCity_PokemonCenter_1F_Text_28F694, MauvilleCity_PokemonCenter_1F_Text_28F6B4}, + {GAME_STAT_POKEBLOCKS, 1, MauvilleCity_PokemonCenter_1F_Text_28F751, MauvilleCity_PokemonCenter_1F_Text_28F76A, MauvilleCity_PokemonCenter_1F_Text_28F776}, + {GAME_STAT_ENTERED_CONTEST, 1, MauvilleCity_PokemonCenter_1F_Text_28F7F6, MauvilleCity_PokemonCenter_1F_Text_28F811, MauvilleCity_PokemonCenter_1F_Text_28F822}, + {GAME_STAT_WON_CONTEST, 1, MauvilleCity_PokemonCenter_1F_Text_28F89C, MauvilleCity_PokemonCenter_1F_Text_28F8AF, MauvilleCity_PokemonCenter_1F_Text_28F8BC}, + {GAME_STAT_SHOPPED, 1, MauvilleCity_PokemonCenter_1F_Text_28F92F, MauvilleCity_PokemonCenter_1F_Text_28F941, MauvilleCity_PokemonCenter_1F_Text_28F949}, + {GAME_STAT_USED_ITEMFINDER, 1, MauvilleCity_PokemonCenter_1F_Text_28F9D1, MauvilleCity_PokemonCenter_1F_Text_28F9EA, MauvilleCity_PokemonCenter_1F_Text_28F9FD}, + {GAME_STAT_GOT_RAINED_ON, 1, MauvilleCity_PokemonCenter_1F_Text_28FA81, MauvilleCity_PokemonCenter_1F_Text_28FA99, MauvilleCity_PokemonCenter_1F_Text_28FAA7}, + {GAME_STAT_CHECKED_POKEDEX, 1, MauvilleCity_PokemonCenter_1F_Text_28FB1D, MauvilleCity_PokemonCenter_1F_Text_28FB35, MauvilleCity_PokemonCenter_1F_Text_28FB47}, + {GAME_STAT_RECEIVED_RIBBONS, 1, MauvilleCity_PokemonCenter_1F_Text_28FBC4, MauvilleCity_PokemonCenter_1F_Text_28FBD9, MauvilleCity_PokemonCenter_1F_Text_28FBEA}, + {GAME_STAT_JUMPED_DOWN_LEDGES, 1, MauvilleCity_PokemonCenter_1F_Text_28FC6B, MauvilleCity_PokemonCenter_1F_Text_28FC85, MauvilleCity_PokemonCenter_1F_Text_28FC98}, + {GAME_STAT_WATCHED_TV, 1, MauvilleCity_PokemonCenter_1F_Text_28FD1D, MauvilleCity_PokemonCenter_1F_Text_28FD35, MauvilleCity_PokemonCenter_1F_Text_28FD40}, + {GAME_STAT_CHECKED_CLOCK, 1, MauvilleCity_PokemonCenter_1F_Text_28FDA2, MauvilleCity_PokemonCenter_1F_Text_28FDBD, MauvilleCity_PokemonCenter_1F_Text_28FDCE}, + {GAME_STAT_WON_POKEMON_LOTTERY, 1, MauvilleCity_PokemonCenter_1F_Text_28FE57, MauvilleCity_PokemonCenter_1F_Text_28FE72, MauvilleCity_PokemonCenter_1F_Text_28FE88}, + {GAME_STAT_USED_DAYCARE, 1, MauvilleCity_PokemonCenter_1F_Text_28FF0C, MauvilleCity_PokemonCenter_1F_Text_28FF27, MauvilleCity_PokemonCenter_1F_Text_28FF44}, + {GAME_STAT_RODE_CABLE_CAR, 1, MauvilleCity_PokemonCenter_1F_Text_28FFDD, MauvilleCity_PokemonCenter_1F_Text_28FFFA, MauvilleCity_PokemonCenter_1F_Text_29000D}, + {GAME_STAT_ENTERED_HOT_SPRINGS, 1, MauvilleCity_PokemonCenter_1F_Text_290097, MauvilleCity_PokemonCenter_1F_Text_2900B5, MauvilleCity_PokemonCenter_1F_Text_2900CB} +}; -- cgit v1.2.3 From 876e1eb7cccb729a801cfb2005f7b190955f9129 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 3 May 2018 17:51:14 -0400 Subject: through sub_8121064 --- src/mauville_old_man.c | 138 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 137 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index 1f398569c..04af0e066 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -18,6 +18,7 @@ #include "bard_music.h" #include "sound.h" #include "strings.h" +#include "overworld.h" #define CHAR_SONG_WORD_SEPARATOR 0x37 @@ -35,7 +36,7 @@ void sub_8133A60(void); struct BardSong gUnknown_03006130; EWRAM_DATA u16 gUnknown_0203A128 = 0; -EWRAM_DATA struct MauvilleOldMan * gUnknown_0203A12C = NULL; +EWRAM_DATA struct MauvilleManStoryteller * gUnknown_0203A12C = NULL; EWRAM_DATA u8 gUnknown_0203A130 = 0; static const u16 sDefaultBardSongLyrics[6] = { @@ -949,3 +950,138 @@ const struct Story gUnknown_0859F048[] = { {GAME_STAT_RODE_CABLE_CAR, 1, MauvilleCity_PokemonCenter_1F_Text_28FFDD, MauvilleCity_PokemonCenter_1F_Text_28FFFA, MauvilleCity_PokemonCenter_1F_Text_29000D}, {GAME_STAT_ENTERED_HOT_SPRINGS, 1, MauvilleCity_PokemonCenter_1F_Text_290097, MauvilleCity_PokemonCenter_1F_Text_2900B5, MauvilleCity_PokemonCenter_1F_Text_2900CB} }; + +void sub_8120E08(void) // StorytellerSetup +{ + s32 i; + gUnknown_0203A12C = &gSaveBlock1Ptr->oldMan.storyteller; + + gUnknown_0203A12C->id = MAUVILLE_MAN_STORYTELLER; + gUnknown_0203A12C->alreadyRecorded = FALSE; + for (i = 0; i < 4; i++) + { + gUnknown_0203A12C->gameStatIDs[i] = 0; + gUnknown_0203A12C->trainerNames[0][i] = EOS; // Maybe they meant storyteller->trainerNames[i][0] instead? + } +} + +void sub_8120E50(void) +{ + gUnknown_0203A12C = &gSaveBlock1Ptr->oldMan.storyteller; + + gUnknown_0203A12C->id = MAUVILLE_MAN_STORYTELLER; + gUnknown_0203A12C->alreadyRecorded = FALSE; +} + +u32 sub_8120E74(u8 stat) // StorytellerGetGameStat +{ + if (stat == 50) + stat = 0; + return GetGameStat(stat); +} + +const struct Story *sub_8120E88(u32 stat) // GetStoryByStat +{ + s32 i; + + for (i = 0; i < 36; i++) + { + if (gUnknown_0859F048[i].stat == stat) + return &gUnknown_0859F048[i]; + } + return &gUnknown_0859F048[35]; +} + +const u8 *sub_8120EB4(u32 stat) // GetStoryTitleByStat +{ + return sub_8120E88(stat)->title; +} + +const u8 *sub_8120EC0(u32 stat) // GetStoryTextByStat +{ + return sub_8120E88(stat)->fullText; +} + +const u8 *sub_8120ECC(u32 stat) // GetStoryActionByStat +{ + return sub_8120E88(stat)->action; +} + +u8 sub_8120ED8(void) // GetFreeStorySlot +{ + u8 i; + + for (i = 0; i < 4; i++) + { + if (gUnknown_0203A12C->gameStatIDs[i] == 0) + break; + } + return i; +} + +u32 sub_8120F08(u32 trainer) // StorytellerGetRecordedTrainerStat +{ + u8 *ptr = gUnknown_0203A12C->statValues[trainer]; + + return ptr[0] | (ptr[1] << 8) | (ptr[2] << 16) | (ptr[3] << 24); +} + +void sub_8120F2C(u32 trainer, u32 val) // StorytellerSetRecordedTrainerStat +{ + u8 *ptr = gUnknown_0203A12C->statValues[trainer]; + + ptr[0] = val; + ptr[1] = val >> 8; + ptr[2] = val >> 16; + ptr[3] = val >> 24; +} + +bool32 sub_8120F4C(u32 trainer) // HasTrainerStatIncreased +{ + if (sub_8120E74(gUnknown_0203A12C->gameStatIDs[trainer]) > sub_8120F08(trainer)) + return TRUE; + else + return FALSE; +} + +void sub_8120F7C(u32 player, void *dst) // GetStoryByStattellerPlayerName +{ + u8 *name = gUnknown_0203A12C->trainerNames[player]; + + memset(dst, EOS, 8); + memcpy(dst, name, 7); +} + +void sub_8120FAC(u32 player, const u8 * src) // StorytellerSetPlayerName +{ + u8 * name = gUnknown_0203A12C->trainerNames[player]; + memset(name, EOS, 7); + memcpy(name, src, 7); +} + + +void sub_8120FDC(u32 player, u32 stat) // StorytellerRecordNewStat +{ + gUnknown_0203A12C->gameStatIDs[player] = stat; + sub_8120FAC(player, gSaveBlock2Ptr->playerName); + sub_8120F2C(player, sub_8120E74(stat)); + ConvertIntToDecimalStringN(gStringVar1, sub_8120E74(stat), STR_CONV_MODE_LEFT_ALIGN, 10); + StringCopy(gStringVar2, sub_8120ECC(stat)); + gUnknown_0203A12C->unk34[player] = gGameLanguage; +} + +void sub_8121064(u8 * arr, s32 count) // ScrambleStatList +{ + s32 i; + + for (i = 0; i < count; i++) + arr[i] = i; + for (i = 0; i < count; i++) + { + u32 a = Random() % count; + u32 b = Random() % count; + u8 temp = arr[a]; + arr[a] = arr[b]; + arr[b] = temp; + } +} -- cgit v1.2.3 From 8aa462cd747ab3c3127401aa8905d0bdd5e2a1f4 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 3 May 2018 18:05:07 -0400 Subject: through sub_8121178 --- src/mauville_old_man.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) (limited to 'src') diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index 04af0e066..4f85d4577 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -19,6 +19,7 @@ #include "sound.h" #include "strings.h" #include "overworld.h" +#include "field_message_box.h" #define CHAR_SONG_WORD_SEPARATOR 0x37 @@ -33,6 +34,8 @@ void sub_8120E50(void); void sub_81339F8(void); // TraderSetup void sub_8133A60(void); +IWRAM_DATA u8 gUnknown_03001178; + struct BardSong gUnknown_03006130; EWRAM_DATA u16 gUnknown_0203A128 = 0; @@ -1085,3 +1088,55 @@ void sub_8121064(u8 * arr, s32 count) // ScrambleStatList arr[b] = temp; } } + +struct UnknownStruct_0859F288 +{ + u32 length; + u32 unused2; +}; + +const struct UnknownStruct_0859F288 gUnknown_0859F288 = { + 36, + 8 +}; + +bool8 sub_81210B8(void) // StorytellerInitializeRandomStat +{ + u8 arr[gUnknown_0859F288.length]; + s32 i; + s32 j; + + sub_8121064(arr, 36); + for (i = 0; i < 36; i++) + { + u8 stat = gUnknown_0859F048[arr[i]].stat; + u8 minVal = gUnknown_0859F048[arr[i]].minVal; + + for (j = 0; j < 4; j++) + { + if (gUnknown_0203A12C->gameStatIDs[j] == stat) + break; + } + if (j == 4 && sub_8120E74(stat) >= minVal) + { + gUnknown_0203A12C->alreadyRecorded = TRUE; + if (sub_8120ED8() == 4) + sub_8120FDC(gUnknown_03001178, stat); + else + sub_8120FDC(sub_8120ED8(), stat); + return TRUE; + } + } + return FALSE; +} + +void sub_8121178(u32 player) // StorytellerDisplayStory +{ + u8 stat = gUnknown_0203A12C->gameStatIDs[player]; + + ConvertIntToDecimalStringN(gStringVar1, sub_8120F08(player), 0, 10); + StringCopy(gStringVar2, sub_8120ECC(stat)); + sub_8120F7C(player, gStringVar3); + ConvertInternationalString(gStringVar3, gUnknown_0203A12C->unk34[player]); + ShowFieldMessage(sub_8120EC0(stat)); +} -- cgit v1.2.3 From 0231ed13ee72e0ccb06319a439c04381ace4b1ef Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 7 May 2018 16:35:29 -0400 Subject: Remaining functions in mauville_old_man --- src/mauville_old_man.c | 112 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) (limited to 'src') diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index 4f85d4577..a21af6f95 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -20,6 +20,7 @@ #include "strings.h" #include "overworld.h" #include "field_message_box.h" +#include "script_menu.h" #define CHAR_SONG_WORD_SEPARATOR 0x37 @@ -1140,3 +1141,114 @@ void sub_8121178(u32 player) // StorytellerDisplayStory ConvertInternationalString(gStringVar3, gUnknown_0203A12C->unk34[player]); ShowFieldMessage(sub_8120EC0(stat)); } + +void sub_81211EC(void) // PrintStoryList +{ + s32 i; + s32 width = GetStringWidth(1, gText_Exit, 0); + u8 tileWidth; + for (i = 0; i < 4; i++) + { + s32 curWidth; + u16 gameStatID = gUnknown_0203A12C->gameStatIDs[i]; + + if (gameStatID == 0) + break; + curWidth = GetStringWidth(1, sub_8120EB4(gameStatID), 0); + if (curWidth > width) + width = curWidth; + } + gUnknown_0203A130 = CreateWindowFromRect(0, 0, convert_pixel_width_to_tile_width(width), sub_8120ED8() * 2 + 2); + SetStandardWindowBorderStyle(gUnknown_0203A130, 0); + for (i = 0; i < 4; i++) + { + u16 gameStatID = gUnknown_0203A12C->gameStatIDs[i]; + if (gameStatID == 0) + break; + PrintTextOnWindow(gUnknown_0203A130, 1, sub_8120EB4(gameStatID), 8, 16 * i + 1, 0xFF, NULL); + } + PrintTextOnWindow(gUnknown_0203A130, 1, gText_Exit, 8, 16 * i + 1, 0xFF, NULL); + InitMenuInUpperLeftCornerPlaySoundWhenAPressed(gUnknown_0203A130, sub_8120ED8() + 1, 0); + CopyWindowToVram(gUnknown_0203A130, 3); +} + +void sub_81212FC(u8 taskId) // Task_StoryListMenu +{ + struct Task *task = &gTasks[taskId]; + s32 selection; + + switch (task->data[0]) + { + case 0: + sub_81211EC(); + task->data[0]++; + break; + case 1: + selection = ProcessMenuInput(); + if (selection == -2) + break; + if (selection == -1 || selection == sub_8120ED8()) + { + gSpecialVar_Result = 0; + } + else + { + gSpecialVar_Result = 1; + gUnknown_03001178 = selection; + } + sub_80E2A78(gUnknown_0203A130); + DestroyTask(taskId); + EnableBothScriptContexts(); + break; + } +} + +// Sets gSpecialVar_Result to TRUE if player selected a story +void sub_8121388(void) // ScrSpecial_StorytellerStoryListMenu +{ + CreateTask(sub_81212FC, 80); +} + +void sub_812139C(void) // ScrSpecial_StorytellerDisplayStory +{ + sub_8121178(gUnknown_03001178); +} + +u8 sub_81213B0(void) // ScrSpecial_StorytellerDisplayStory +{ + gUnknown_0203A12C = &gSaveBlock1Ptr->oldMan.storyteller; + return sub_8120ED8(); +} + +// Returns TRUE if stat has increased +bool8 sub_81213D8(void) // ScrSpecial_StorytellerUpdateStat +{ + u8 r4; + gUnknown_0203A12C = &gSaveBlock1Ptr->oldMan.storyteller; + r4 = gUnknown_0203A12C->gameStatIDs[gUnknown_03001178]; + + if (sub_8120F4C(gUnknown_03001178) == TRUE) + { + sub_8120FDC(gUnknown_03001178, r4); + return TRUE; + } + return FALSE; +} + + +bool8 sub_8121424(void) // ScrSpecial_HasStorytellerAlreadyRecorded +{ + gUnknown_0203A12C = &gSaveBlock1Ptr->oldMan.storyteller; + + if (gUnknown_0203A12C->alreadyRecorded == FALSE) + return FALSE; + else + return TRUE; +} + +bool8 sub_8121450(void) // ScrSpecial_StorytellerInitializeRandomStat +{ + gUnknown_0203A12C = &gSaveBlock1Ptr->oldMan.storyteller; + return sub_81210B8(); +} + -- cgit v1.2.3 From 61cc1d55743715a64e793187f63d0f1f7a80b0e0 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 7 May 2018 18:11:20 -0400 Subject: Rename symbols using Ruby as a reference --- src/field_map_obj.c | 2 +- src/mauville_old_man.c | 365 ++++++++++++++++++++++++------------------------- 2 files changed, 180 insertions(+), 187 deletions(-) (limited to 'src') diff --git a/src/field_map_obj.c b/src/field_map_obj.c index a5be62442..81cbe5210 100644 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -1146,7 +1146,7 @@ const struct MapObjectGraphicsInfo *GetFieldObjectGraphicsInfo(u8 graphicsId) } if (graphicsId == 0x45) { - bard = sub_81201C8(); + bard = GetCurrentMauvilleOldMan(); return gMauvilleOldManGraphicsInfoPointers[bard]; } if (graphicsId >= NUM_OBJECT_GRAPHICS_INFO) diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index a21af6f95..4da9079ff 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -21,27 +21,25 @@ #include "overworld.h" #include "field_message_box.h" #include "script_menu.h" +#include "trader.h" #define CHAR_SONG_WORD_SEPARATOR 0x37 extern struct MusicPlayerInfo gMPlayInfo_SE2; -void sub_81204DC(void); -void sub_81206C0(bool8 useTemporaryLyrics); // StartBardSong -void sub_8120944(u8 taskId); -void sub_8120B5C(void); -void sub_8120E08(void); // StorytellerSetup -void sub_8120E50(void); -void sub_81339F8(void); // TraderSetup -void sub_8133A60(void); +static void InitGiddyTaleList(void); +static void StartBardSong(bool8 useTemporaryLyrics); +static void Task_BardSong(u8 taskId); +static void StorytellerSetup(void); +static void Storyteller_ResetFlag(void); -IWRAM_DATA u8 gUnknown_03001178; +IWRAM_DATA u8 sSelectedStory; -struct BardSong gUnknown_03006130; +struct BardSong gBardSong; -EWRAM_DATA u16 gUnknown_0203A128 = 0; -EWRAM_DATA struct MauvilleManStoryteller * gUnknown_0203A12C = NULL; -EWRAM_DATA u8 gUnknown_0203A130 = 0; +static EWRAM_DATA u16 sUnknownBardRelated = 0; +static EWRAM_DATA struct MauvilleManStoryteller * sStorytellerPtr = NULL; +static EWRAM_DATA u8 sStorytellerWindowId = 0; static const u16 sDefaultBardSongLyrics[6] = { EC_WORD_SHAKE, @@ -97,7 +95,7 @@ static void SetupHipster(void) static void SetupStoryteller(void) { - sub_8120E08(); + StorytellerSetup(); } static void SetupGiddy(void) @@ -138,22 +136,22 @@ void SetMauvilleOldMan(void) SetupGiddy(); break; } - sub_8120B5C(); + ScrSpecial_SetMauvilleOldManMapObjGfx(); } -u8 sub_81201C8(void) // GetCurrentMauvilleOldMan +u8 GetCurrentMauvilleOldMan(void) { struct MauvilleManCommon *common = &gSaveBlock1Ptr->oldMan.common; return common->id; } -void sub_81201DC(void) // ScrSpecial_GetCurrentMauvilleMan +void ScrSpecial_GetCurrentMauvilleMan(void) { - gSpecialVar_Result = sub_81201C8(); + gSpecialVar_Result = GetCurrentMauvilleOldMan(); } -void sub_81201F4(void) // ScrSpecial_HasBardSongBeenChanged +void ScrSpecial_HasBardSongBeenChanged(void) { u16 *scriptResult = &gSpecialVar_Result; // why?? struct MauvilleManBard *bard = &gSaveBlock1Ptr->oldMan.bard; @@ -161,7 +159,7 @@ void sub_81201F4(void) // ScrSpecial_HasBardSongBeenChanged *scriptResult = bard->hasChangedSong; } -void sub_8120210(void) // ScrSpecial_SaveBardSongLyrics +void ScrSpecial_SaveBardSongLyrics(void) { u16 i; struct MauvilleManBard *bard = &gSaveBlock1Ptr->oldMan.bard; @@ -178,20 +176,14 @@ void sub_8120210(void) // ScrSpecial_SaveBardSongLyrics } // Copies lyrics into gStringVar4 -void sub_8120280(void) +static void PrepareSongText(void) { struct MauvilleManBard *bard = &gSaveBlock1Ptr->oldMan.bard; - u16 specialVar = gSpecialVar_0x8004; // It's a bit odd to use this temp variable, but it seems needed to match. - u16 *lyrics; + u16 * lyrics = gSpecialVar_0x8004 == 0 ? bard->songLyrics : bard->temporaryLyrics; + u8 * wordEnd = gStringVar4; + u8 * str = wordEnd; u16 lineNum; - u8 *wordEnd; - u8 *str; - - lyrics = bard->temporaryLyrics; - if (specialVar == 0) - lyrics = bard->songLyrics; - wordEnd = gStringVar4; - str = wordEnd; + // Put three words on each line for (lineNum = 0; lineNum < 2; lineNum++) { @@ -233,13 +225,13 @@ void sub_8120280(void) } } -void sub_8120340(void) // ScrSpecial_PlayBardSong +void ScrSpecial_PlayBardSong(void) { - sub_81206C0(gSpecialVar_0x8004); + StartBardSong(gSpecialVar_0x8004); ScriptContext1_Stop(); } -void sub_8120358(void) // ScrSpecial_GetHipsterSpokenFlag +void ScrSpecial_GetHipsterSpokenFlag(void) { u16 *scriptResult = &gSpecialVar_Result; // again?? struct MauvilleManHipster *hipster = &gSaveBlock1Ptr->oldMan.hipster; @@ -247,14 +239,14 @@ void sub_8120358(void) // ScrSpecial_GetHipsterSpokenFlag *scriptResult = hipster->alreadySpoken; } -void sub_8120374(void) // ScrSpecial_SetHipsterSpokenFlag +void ScrSpecial_SetHipsterSpokenFlag(void) { struct MauvilleManHipster *hipster = &gSaveBlock1Ptr->oldMan.hipster; hipster->alreadySpoken = TRUE; } -void sub_812038C(void) // ScrSpecial_HipsterTeachWord +void ScrSpecial_HipsterTeachWord(void) { u16 var = sub_811F01C(); @@ -269,7 +261,7 @@ void sub_812038C(void) // ScrSpecial_HipsterTeachWord } } -void sub_81203C4(void) // ScrSpecial_GiddyShouldTellAnotherTale +void ScrSpecial_GiddyShouldTellAnotherTale(void) { struct MauvilleManGiddy *giddy = &gSaveBlock1Ptr->oldMan.giddy; @@ -284,12 +276,12 @@ void sub_81203C4(void) // ScrSpecial_GiddyShouldTellAnotherTale } } -void sub_81203FC(void) // ScrSpecial_GenerateGiddyLine +void ScrSpecial_GenerateGiddyLine(void) { struct MauvilleManGiddy *giddy = &gSaveBlock1Ptr->oldMan.giddy; if (giddy->taleCounter == 0) - sub_81204DC(); + InitGiddyTaleList(); if (giddy->randomWords[giddy->taleCounter] != 0xFFFF) // is not the last element of the array? { @@ -315,7 +307,7 @@ void sub_81203FC(void) // ScrSpecial_GenerateGiddyLine gSpecialVar_Result = TRUE; } -void sub_81204DC(void) +static void InitGiddyTaleList(void) { struct MauvilleManGiddy *giddy = &gSaveBlock1Ptr->oldMan.giddy; u16 arr[][2] = { @@ -371,50 +363,50 @@ void sub_81204DC(void) } } } -void sub_8120628(void) +static void ResetBardFlag(void) { struct MauvilleManBard *bard = &gSaveBlock1Ptr->oldMan.bard; bard->hasChangedSong = FALSE; } -void sub_8120640(void) +static void ResetHipsterFlag(void) { struct MauvilleManHipster *hipster = &gSaveBlock1Ptr->oldMan.hipster; hipster->alreadySpoken = FALSE; } -void sub_8120658(void) +static void ResetTraderFlag(void) { - sub_8133A60(); + Trader_ResetFlag(); } -void sub_8120664(void) +static void ResetStorytellerFlag(void) { - sub_8120E50(); + Storyteller_ResetFlag(); } -void sub_8120670(void) // ResetMauvilleOldManFlag +void ResetMauvilleOldManFlag(void) // ResetMauvilleOldManFlag { - switch (sub_81201C8()) + switch (GetCurrentMauvilleOldMan()) { case MAUVILLE_MAN_BARD: - sub_8120628(); + ResetBardFlag(); break; case MAUVILLE_MAN_HIPSTER: - sub_8120640(); + ResetHipsterFlag(); break; case MAUVILLE_MAN_STORYTELLER: - sub_8120664(); + ResetStorytellerFlag(); break; case MAUVILLE_MAN_TRADER: - sub_8120658(); + ResetTraderFlag(); break; case MAUVILLE_MAN_GIDDY: break; } - sub_8120B5C(); + ScrSpecial_SetMauvilleOldManMapObjGfx(); } @@ -426,32 +418,32 @@ void sub_8120670(void) // ResetMauvilleOldManFlag #define MACRO1(a) (((a) & 3) + (((a) / 8) & 1)) #define MACRO2(a) (((a) % 4) + (((a) / 8) & 1)) -void sub_81206C0(bool8 useTemporaryLyrics) +static void StartBardSong(bool8 useTemporaryLyrics) { - u8 taskId = CreateTask(sub_8120944, 80); + u8 taskId = CreateTask(Task_BardSong, 80); gTasks[taskId].tUseTemporaryLyrics = useTemporaryLyrics; } -void sub_81206F0(void) +static void sub_81206F0(void) { gUnknown_03002F84 = FALSE; } -void sub_81206FC(struct TextSubPrinter * printer, u16 a1) +static void BardSong_TextSubPrinter(struct TextSubPrinter * printer, u16 a1) { gUnknown_03002F84 = TRUE; } -void sub_8120708(const u8 * src) +static void sub_8120708(const u8 * src) { NewMenuHelpers_DrawDialogueFrame(0, 0); - PrintTextOnWindow(0, 1, src, 0, 1, 1, sub_81206FC); + PrintTextOnWindow(0, 1, src, 0, 1, 1, BardSong_TextSubPrinter); gUnknown_03002F84 = TRUE; CopyWindowToVram(0, 3); } -void sub_8120748(struct Task *task, struct BardSong *song) // BardSing +static void BardSing(struct Task *task, struct BardSong *song) { switch (task->tState) { @@ -554,15 +546,15 @@ void sub_8120748(struct Task *task, struct BardSong *song) // BardSing } } -void sub_8120944(u8 taskId) +static void Task_BardSong(u8 taskId) { struct Task *task = &gTasks[taskId]; // r5 - sub_8120748(task, &gUnknown_03006130); + BardSing(task, &gBardSong); switch (task->tState) { case 0: // Initialize song - sub_8120280(); + PrepareSongText(); sub_8120708(gStringVar4); task->data[1] = 0; task->data[2] = 0; @@ -593,14 +585,14 @@ void sub_8120944(u8 taskId) wordLen++; } if (!task->tUseTemporaryLyrics) - gUnknown_0203A128 = MACRO2(bard->songLyrics[task->tCurrWord]); + sUnknownBardRelated = MACRO2(bard->songLyrics[task->tCurrWord]); else - gUnknown_0203A128 = MACRO2(bard->temporaryLyrics[task->tCurrWord]); - temp = gUnknown_03006130.length / wordLen; + sUnknownBardRelated = MACRO2(bard->temporaryLyrics[task->tCurrWord]); + temp = gBardSong.length / wordLen; zero = 0; - gUnknown_03006130.length = temp; - if (gUnknown_03006130.length <= 0) - gUnknown_03006130.length = 1; + gBardSong.length = temp; + if (gBardSong.length <= 0) + gBardSong.length = 1; task->tCurrWord++; if (task->data[2] == 0) task->tState = 3; @@ -664,7 +656,7 @@ void sub_8120944(u8 taskId) case 2: task->tCharIndex++; task->data[1] = 0; - task->data[2] = gUnknown_03006130.length; + task->data[2] = gBardSong.length; task->tState = 4; break; } @@ -679,11 +671,13 @@ void sub_8120944(u8 taskId) sub_8197224(); } -void sub_8120B5C(void) +void ScrSpecial_SetMauvilleOldManMapObjGfx(void) { VarSet(VAR_0x4010, MAP_OBJ_GFX_BARD); } +// Language fixers? + void sub_8120B70(union OldMan * oldMan) { s32 i; @@ -696,9 +690,9 @@ void sub_8120B70(union OldMan * oldMan) struct MauvilleOldManTrader * trader = &oldMan->trader; for (i = 0; i < 4; i++) { - if (trader->unk32[i] == LANGUAGE_JAPANESE) + if (trader->language[i] == LANGUAGE_JAPANESE) { - ConvertInternationalString(trader->unk5[i], LANGUAGE_JAPANESE); + ConvertInternationalString(trader->playerNames[i], LANGUAGE_JAPANESE); } } } @@ -717,7 +711,7 @@ void sub_8120B70(union OldMan * oldMan) memset(sp00, CHAR_SPACE, 8); StringCopy(sp00, gText_Friend); memcpy(storyteller->trainerNames[i], sp00, 7); - storyteller->unk34[i] = GAME_LANGUAGE; + storyteller->language[i] = GAME_LANGUAGE; } } } @@ -738,13 +732,13 @@ void sub_8120C0C(union OldMan * oldMan, u32 r8, u32 r7, u32 r3) for (i = 0; i < 4; i++) { - if (IsStringJapanese(trader->unk5[i])) + if (IsStringJapanese(trader->playerNames[i])) { - trader->unk32[i] = r8; + trader->language[i] = r8; } else { - trader->unk32[i] = r7; + trader->language[i] = r7; } } } @@ -757,11 +751,11 @@ void sub_8120C0C(union OldMan * oldMan, u32 r8, u32 r7, u32 r3) { if (IsStringJapanese(storyteller->trainerNames[i])) { - storyteller->unk34[i] = r8; + storyteller->language[i] = r8; } else { - storyteller->unk34[i] = r7; + storyteller->language[i] = r7; } } } @@ -814,9 +808,9 @@ void sub_8120CD0(union OldMan * oldMan, u32 unused, u32 a2) memcpy(sp00, storyteller->trainerNames[i], 7); sp00[7] = EOS; if (IsStringJapanese(sp00)) - storyteller->unk34[i] = LANGUAGE_JAPANESE; + storyteller->language[i] = LANGUAGE_JAPANESE; else - storyteller->unk34[i] = GAME_LANGUAGE; + storyteller->language[i] = GAME_LANGUAGE; } } } @@ -836,23 +830,23 @@ void sub_8120D34(union OldMan * oldMan, u32 r1, u32 r6) { for (i = 0; i < 4; i++) { - u8 * str = trader->unk5[i]; + u8 * str = trader->playerNames[i]; if (str[0] == EXT_CTRL_CODE_BEGIN && str[1] == EXT_CTRL_CODE_JPN) { StripExtCtrlCodes(str); - trader->unk32[i] = LANGUAGE_JAPANESE; + trader->language[i] = LANGUAGE_JAPANESE; } else - trader->unk32[i] = r6; + trader->language[i] = r6; } } else { for (i = 0; i < 4; i++) { - if (trader->unk32[i] == LANGUAGE_JAPANESE) + if (trader->language[i] == LANGUAGE_JAPANESE) { - StripExtCtrlCodes(trader->unk5[i]); + StripExtCtrlCodes(trader->playerNames[i]); } } } @@ -869,7 +863,7 @@ void sub_8120D34(union OldMan * oldMan, u32 r1, u32 r6) for (i = 0; i < 4; i++) { if (storyteller->gameStatIDs[i] != 0) - storyteller->unk34[i] = r6; + storyteller->language[i] = r6; } } } @@ -916,7 +910,7 @@ struct Story const u8 *fullText; }; -const struct Story gUnknown_0859F048[] = { +static const struct Story sStorytellerStories[] = { {GAME_STAT_50, 1, MauvilleCity_PokemonCenter_1F_Text_28E930, MauvilleCity_PokemonCenter_1F_Text_28E947, MauvilleCity_PokemonCenter_1F_Text_28E956}, {GAME_STAT_STARTED_TRENDS, 1, MauvilleCity_PokemonCenter_1F_Text_28E9D7, MauvilleCity_PokemonCenter_1F_Text_28E9EF, MauvilleCity_PokemonCenter_1F_Text_28E9FE}, {GAME_STAT_PLANTED_BERRIES, 1, MauvilleCity_PokemonCenter_1F_Text_28EA7D, MauvilleCity_PokemonCenter_1F_Text_28EA98, MauvilleCity_PokemonCenter_1F_Text_28EAA8}, @@ -955,84 +949,84 @@ const struct Story gUnknown_0859F048[] = { {GAME_STAT_ENTERED_HOT_SPRINGS, 1, MauvilleCity_PokemonCenter_1F_Text_290097, MauvilleCity_PokemonCenter_1F_Text_2900B5, MauvilleCity_PokemonCenter_1F_Text_2900CB} }; -void sub_8120E08(void) // StorytellerSetup +static void StorytellerSetup(void) { s32 i; - gUnknown_0203A12C = &gSaveBlock1Ptr->oldMan.storyteller; + sStorytellerPtr = &gSaveBlock1Ptr->oldMan.storyteller; - gUnknown_0203A12C->id = MAUVILLE_MAN_STORYTELLER; - gUnknown_0203A12C->alreadyRecorded = FALSE; + sStorytellerPtr->id = MAUVILLE_MAN_STORYTELLER; + sStorytellerPtr->alreadyRecorded = FALSE; for (i = 0; i < 4; i++) { - gUnknown_0203A12C->gameStatIDs[i] = 0; - gUnknown_0203A12C->trainerNames[0][i] = EOS; // Maybe they meant storyteller->trainerNames[i][0] instead? + sStorytellerPtr->gameStatIDs[i] = 0; + sStorytellerPtr->trainerNames[0][i] = EOS; // Maybe they meant storyteller->trainerNames[i][0] instead? } } -void sub_8120E50(void) +static void Storyteller_ResetFlag(void) { - gUnknown_0203A12C = &gSaveBlock1Ptr->oldMan.storyteller; + sStorytellerPtr = &gSaveBlock1Ptr->oldMan.storyteller; - gUnknown_0203A12C->id = MAUVILLE_MAN_STORYTELLER; - gUnknown_0203A12C->alreadyRecorded = FALSE; + sStorytellerPtr->id = MAUVILLE_MAN_STORYTELLER; + sStorytellerPtr->alreadyRecorded = FALSE; } -u32 sub_8120E74(u8 stat) // StorytellerGetGameStat +static u32 StorytellerGetGameStat(u8 stat) { if (stat == 50) stat = 0; return GetGameStat(stat); } -const struct Story *sub_8120E88(u32 stat) // GetStoryByStat +static const struct Story *GetStoryByStat(u32 stat) { s32 i; for (i = 0; i < 36; i++) { - if (gUnknown_0859F048[i].stat == stat) - return &gUnknown_0859F048[i]; + if (sStorytellerStories[i].stat == stat) + return &sStorytellerStories[i]; } - return &gUnknown_0859F048[35]; + return &sStorytellerStories[35]; } -const u8 *sub_8120EB4(u32 stat) // GetStoryTitleByStat +static const u8 *GetStoryTitleByStat(u32 stat) { - return sub_8120E88(stat)->title; + return GetStoryByStat(stat)->title; } -const u8 *sub_8120EC0(u32 stat) // GetStoryTextByStat +static const u8 *GetStoryTextByStat(u32 stat) { - return sub_8120E88(stat)->fullText; + return GetStoryByStat(stat)->fullText; } -const u8 *sub_8120ECC(u32 stat) // GetStoryActionByStat +static const u8 *GetStoryActionByStat(u32 stat) { - return sub_8120E88(stat)->action; + return GetStoryByStat(stat)->action; } -u8 sub_8120ED8(void) // GetFreeStorySlot +static u8 GetFreeStorySlot(void) { u8 i; for (i = 0; i < 4; i++) { - if (gUnknown_0203A12C->gameStatIDs[i] == 0) + if (sStorytellerPtr->gameStatIDs[i] == 0) break; } return i; } -u32 sub_8120F08(u32 trainer) // StorytellerGetRecordedTrainerStat +static u32 StorytellerGetRecordedTrainerStat(u32 trainer) { - u8 *ptr = gUnknown_0203A12C->statValues[trainer]; + u8 *ptr = sStorytellerPtr->statValues[trainer]; return ptr[0] | (ptr[1] << 8) | (ptr[2] << 16) | (ptr[3] << 24); } -void sub_8120F2C(u32 trainer, u32 val) // StorytellerSetRecordedTrainerStat +static void StorytellerSetRecordedTrainerStat(u32 trainer, u32 val) { - u8 *ptr = gUnknown_0203A12C->statValues[trainer]; + u8 *ptr = sStorytellerPtr->statValues[trainer]; ptr[0] = val; ptr[1] = val >> 8; @@ -1040,41 +1034,41 @@ void sub_8120F2C(u32 trainer, u32 val) // StorytellerSetRecordedTrainerStat ptr[3] = val >> 24; } -bool32 sub_8120F4C(u32 trainer) // HasTrainerStatIncreased +static bool32 HasTrainerStatIncreased(u32 trainer) { - if (sub_8120E74(gUnknown_0203A12C->gameStatIDs[trainer]) > sub_8120F08(trainer)) + if (StorytellerGetGameStat(sStorytellerPtr->gameStatIDs[trainer]) > StorytellerGetRecordedTrainerStat(trainer)) return TRUE; else return FALSE; } -void sub_8120F7C(u32 player, void *dst) // GetStoryByStattellerPlayerName +static void GetStoryByStattellerPlayerName(u32 player, void *dst) { - u8 *name = gUnknown_0203A12C->trainerNames[player]; + u8 *name = sStorytellerPtr->trainerNames[player]; memset(dst, EOS, 8); memcpy(dst, name, 7); } -void sub_8120FAC(u32 player, const u8 * src) // StorytellerSetPlayerName +static void StorytellerSetPlayerName(u32 player, const u8 * src) { - u8 * name = gUnknown_0203A12C->trainerNames[player]; + u8 * name = sStorytellerPtr->trainerNames[player]; memset(name, EOS, 7); memcpy(name, src, 7); } -void sub_8120FDC(u32 player, u32 stat) // StorytellerRecordNewStat +static void StorytellerRecordNewStat(u32 player, u32 stat) { - gUnknown_0203A12C->gameStatIDs[player] = stat; - sub_8120FAC(player, gSaveBlock2Ptr->playerName); - sub_8120F2C(player, sub_8120E74(stat)); - ConvertIntToDecimalStringN(gStringVar1, sub_8120E74(stat), STR_CONV_MODE_LEFT_ALIGN, 10); - StringCopy(gStringVar2, sub_8120ECC(stat)); - gUnknown_0203A12C->unk34[player] = gGameLanguage; + sStorytellerPtr->gameStatIDs[player] = stat; + StorytellerSetPlayerName(player, gSaveBlock2Ptr->playerName); + StorytellerSetRecordedTrainerStat(player, StorytellerGetGameStat(stat)); + ConvertIntToDecimalStringN(gStringVar1, StorytellerGetGameStat(stat), STR_CONV_MODE_LEFT_ALIGN, 10); + StringCopy(gStringVar2, GetStoryActionByStat(stat)); + sStorytellerPtr->language[player] = gGameLanguage; } -void sub_8121064(u8 * arr, s32 count) // ScrambleStatList +static void ScrambleStatList(u8 * arr, s32 count) { s32 i; @@ -1092,57 +1086,57 @@ void sub_8121064(u8 * arr, s32 count) // ScrambleStatList struct UnknownStruct_0859F288 { - u32 length; + s32 length; u32 unused2; }; -const struct UnknownStruct_0859F288 gUnknown_0859F288 = { - 36, - 8 +static const struct UnknownStruct_0859F288 sStorytellerStuff = { + ARRAY_COUNT(sStorytellerStories), + sizeof(sStorytellerStuff) }; -bool8 sub_81210B8(void) // StorytellerInitializeRandomStat +static bool8 StorytellerInitializeRandomStat(void) { - u8 arr[gUnknown_0859F288.length]; + u8 arr[sStorytellerStuff.length]; s32 i; s32 j; - sub_8121064(arr, 36); - for (i = 0; i < 36; i++) + ScrambleStatList(arr, ARRAY_COUNT(sStorytellerStories)); + for (i = 0; i < (s32)ARRAY_COUNT(sStorytellerStories); i++) { - u8 stat = gUnknown_0859F048[arr[i]].stat; - u8 minVal = gUnknown_0859F048[arr[i]].minVal; + u8 stat = sStorytellerStories[arr[i]].stat; + u8 minVal = sStorytellerStories[arr[i]].minVal; for (j = 0; j < 4; j++) { - if (gUnknown_0203A12C->gameStatIDs[j] == stat) + if (sStorytellerPtr->gameStatIDs[j] == stat) break; } - if (j == 4 && sub_8120E74(stat) >= minVal) + if (j == 4 && StorytellerGetGameStat(stat) >= minVal) { - gUnknown_0203A12C->alreadyRecorded = TRUE; - if (sub_8120ED8() == 4) - sub_8120FDC(gUnknown_03001178, stat); + sStorytellerPtr->alreadyRecorded = TRUE; + if (GetFreeStorySlot() == 4) + StorytellerRecordNewStat(sSelectedStory, stat); else - sub_8120FDC(sub_8120ED8(), stat); + StorytellerRecordNewStat(GetFreeStorySlot(), stat); return TRUE; } } return FALSE; } -void sub_8121178(u32 player) // StorytellerDisplayStory +static void StorytellerDisplayStory(u32 player) { - u8 stat = gUnknown_0203A12C->gameStatIDs[player]; + u8 stat = sStorytellerPtr->gameStatIDs[player]; - ConvertIntToDecimalStringN(gStringVar1, sub_8120F08(player), 0, 10); - StringCopy(gStringVar2, sub_8120ECC(stat)); - sub_8120F7C(player, gStringVar3); - ConvertInternationalString(gStringVar3, gUnknown_0203A12C->unk34[player]); - ShowFieldMessage(sub_8120EC0(stat)); + ConvertIntToDecimalStringN(gStringVar1, StorytellerGetRecordedTrainerStat(player), 0, 10); + StringCopy(gStringVar2, GetStoryActionByStat(stat)); + GetStoryByStattellerPlayerName(player, gStringVar3); + ConvertInternationalString(gStringVar3, sStorytellerPtr->language[player]); + ShowFieldMessage(GetStoryTextByStat(stat)); } -void sub_81211EC(void) // PrintStoryList +static void PrintStoryList(void) { s32 i; s32 width = GetStringWidth(1, gText_Exit, 0); @@ -1150,29 +1144,29 @@ void sub_81211EC(void) // PrintStoryList for (i = 0; i < 4; i++) { s32 curWidth; - u16 gameStatID = gUnknown_0203A12C->gameStatIDs[i]; + u16 gameStatID = sStorytellerPtr->gameStatIDs[i]; if (gameStatID == 0) break; - curWidth = GetStringWidth(1, sub_8120EB4(gameStatID), 0); + curWidth = GetStringWidth(1, GetStoryTitleByStat(gameStatID), 0); if (curWidth > width) width = curWidth; } - gUnknown_0203A130 = CreateWindowFromRect(0, 0, convert_pixel_width_to_tile_width(width), sub_8120ED8() * 2 + 2); - SetStandardWindowBorderStyle(gUnknown_0203A130, 0); + sStorytellerWindowId = CreateWindowFromRect(0, 0, convert_pixel_width_to_tile_width(width), GetFreeStorySlot() * 2 + 2); + SetStandardWindowBorderStyle(sStorytellerWindowId, 0); for (i = 0; i < 4; i++) { - u16 gameStatID = gUnknown_0203A12C->gameStatIDs[i]; + u16 gameStatID = sStorytellerPtr->gameStatIDs[i]; if (gameStatID == 0) break; - PrintTextOnWindow(gUnknown_0203A130, 1, sub_8120EB4(gameStatID), 8, 16 * i + 1, 0xFF, NULL); + PrintTextOnWindow(sStorytellerWindowId, 1, GetStoryTitleByStat(gameStatID), 8, 16 * i + 1, 0xFF, NULL); } - PrintTextOnWindow(gUnknown_0203A130, 1, gText_Exit, 8, 16 * i + 1, 0xFF, NULL); - InitMenuInUpperLeftCornerPlaySoundWhenAPressed(gUnknown_0203A130, sub_8120ED8() + 1, 0); - CopyWindowToVram(gUnknown_0203A130, 3); + PrintTextOnWindow(sStorytellerWindowId, 1, gText_Exit, 8, 16 * i + 1, 0xFF, NULL); + InitMenuInUpperLeftCornerPlaySoundWhenAPressed(sStorytellerWindowId, GetFreeStorySlot() + 1, 0); + CopyWindowToVram(sStorytellerWindowId, 3); } -void sub_81212FC(u8 taskId) // Task_StoryListMenu +static void Task_StoryListMenu(u8 taskId) // Task_StoryListMenu { struct Task *task = &gTasks[taskId]; s32 selection; @@ -1180,23 +1174,23 @@ void sub_81212FC(u8 taskId) // Task_StoryListMenu switch (task->data[0]) { case 0: - sub_81211EC(); + PrintStoryList(); task->data[0]++; break; case 1: selection = ProcessMenuInput(); if (selection == -2) break; - if (selection == -1 || selection == sub_8120ED8()) + if (selection == -1 || selection == GetFreeStorySlot()) { gSpecialVar_Result = 0; } else { gSpecialVar_Result = 1; - gUnknown_03001178 = selection; + sSelectedStory = selection; } - sub_80E2A78(gUnknown_0203A130); + sub_80E2A78(sStorytellerWindowId); DestroyTask(taskId); EnableBothScriptContexts(); break; @@ -1204,51 +1198,50 @@ void sub_81212FC(u8 taskId) // Task_StoryListMenu } // Sets gSpecialVar_Result to TRUE if player selected a story -void sub_8121388(void) // ScrSpecial_StorytellerStoryListMenu +void ScrSpecial_StorytellerStoryListMenu(void) { - CreateTask(sub_81212FC, 80); + CreateTask(Task_StoryListMenu, 80); } -void sub_812139C(void) // ScrSpecial_StorytellerDisplayStory +void ScrSpecial_StorytellerDisplayStory(void) { - sub_8121178(gUnknown_03001178); + StorytellerDisplayStory(sSelectedStory); } -u8 sub_81213B0(void) // ScrSpecial_StorytellerDisplayStory +u8 ScrSpecial_StorytellerGetFreeStorySlot(void) { - gUnknown_0203A12C = &gSaveBlock1Ptr->oldMan.storyteller; - return sub_8120ED8(); + sStorytellerPtr = &gSaveBlock1Ptr->oldMan.storyteller; + return GetFreeStorySlot(); } // Returns TRUE if stat has increased -bool8 sub_81213D8(void) // ScrSpecial_StorytellerUpdateStat +bool8 ScrSpecial_StorytellerUpdateStat(void) { u8 r4; - gUnknown_0203A12C = &gSaveBlock1Ptr->oldMan.storyteller; - r4 = gUnknown_0203A12C->gameStatIDs[gUnknown_03001178]; + sStorytellerPtr = &gSaveBlock1Ptr->oldMan.storyteller; + r4 = sStorytellerPtr->gameStatIDs[sSelectedStory]; - if (sub_8120F4C(gUnknown_03001178) == TRUE) + if (HasTrainerStatIncreased(sSelectedStory) == TRUE) { - sub_8120FDC(gUnknown_03001178, r4); + StorytellerRecordNewStat(sSelectedStory, r4); return TRUE; } return FALSE; } - -bool8 sub_8121424(void) // ScrSpecial_HasStorytellerAlreadyRecorded +bool8 ScrSpecial_HasStorytellerAlreadyRecorded(void) { - gUnknown_0203A12C = &gSaveBlock1Ptr->oldMan.storyteller; + sStorytellerPtr = &gSaveBlock1Ptr->oldMan.storyteller; - if (gUnknown_0203A12C->alreadyRecorded == FALSE) + if (sStorytellerPtr->alreadyRecorded == FALSE) return FALSE; else return TRUE; } -bool8 sub_8121450(void) // ScrSpecial_StorytellerInitializeRandomStat +bool8 ScrSpecial_StorytellerInitializeRandomStat(void) { - gUnknown_0203A12C = &gSaveBlock1Ptr->oldMan.storyteller; - return sub_81210B8(); + sStorytellerPtr = &gSaveBlock1Ptr->oldMan.storyteller; + return StorytellerInitializeRandomStat(); } -- cgit v1.2.3