through sub_81203FC
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user