diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bard_music.c | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/src/bard_music.c b/src/bard_music.c new file mode 100644 index 000000000..6fb1496e5 --- /dev/null +++ b/src/bard_music.c @@ -0,0 +1,65 @@ + +// Includes +#include "global.h" +#include "bard_music.h" +#include "easy_chat.h" + +#include "data/bard_music/bard_sounds.h" +#include "data/bard_music/word_pitch.h" +#include "data/bard_music/default_sound.h" +#include "data/bard_music/length_table.h" + +s16 CalcWordPitch(int arg0, int songPos) +{ + return gBardSoundPitchTables[arg0][songPos]; +} + +const struct BardSound *GetWordSounds(u16 word) +{ + u32 category; + u32 subword; + const struct BardSound (*ptr)[6]; + + if (ECWord_CheckIfOutsideOfValidRange(word)) + { + return gBardSound_InvalidWord; + } + category = word >> 9; + subword = word & 0x1ff; + switch (category) + { + case EC_GROUP_POKEMON: + case EC_GROUP_POKEMON_2: + ptr = gBardSounds_Pokemon; + break; + case EC_GROUP_MOVE_1: + case EC_GROUP_MOVE_2: + ptr = gBardSounds_Moves; + break; + default: + ptr = gBardSoundsTable[category]; + break; + } + ptr += subword; + return *ptr; +} + +void GetWordPhonemes(struct BardSong *song, u16 word) +{ + int i; + const struct BardSound *sound; + + song->length = 0; + for (i = 0; i < 6; i ++) + { + sound = &song->sound[i]; + if (sound->var00 != 0xFF) + { + song->phonemes[i].length = sound->var01 + gBardSoundLengthTable[sound->var00]; + song->phonemes[i].pitch = CalcWordPitch(word + 30, i); + song->length += song->phonemes[i].length; + } + } + song->currPhoneme = 0; + song->voiceInflection = 0; +} |