Files
GriffinR 2f67b17571 Document bard music (#2053)
* Missing bard song limit constants
* Index bard sound arrays with word constants
* Document bard music
2025-01-17 17:54:38 +00:00

50 lines
1.4 KiB
C

#ifndef GUARD_BARD_MUSIC_H
#define GUARD_BARD_MUSIC_H
// The maximum number of BardSoundTemplates/BardSounds there can be for each easy chat word.
#define MAX_BARD_SOUNDS_PER_WORD 6
// The number of pitch tables there are for each pitch table size (see sPitchTables).
#define NUM_BARD_PITCH_TABLES_PER_SIZE 5
// This struct describes which phoneme song to play for the sound, and whether to
// make any adjustments to its length or volume. Very few sounds make any adjustments.
struct BardSoundTemplate
{
u8 songId;
s8 lengthAdjustment;
u16 unused; // Only set on EC_WORD_WAAAH, and never read.
s16 volume;
};
// This is the length and pitch to play the phoneme song at.
// These will be calculated in 'CalcWordSounds'.
struct BardSound
{
u16 length;
u16 pitch;
};
struct BardSong
{
u8 lyricsIndex;
u8 soundIndex;
u8 timer;
u8 state;
s16 length; // Length of the sound for the word currently being sung (i.e. the sum of 'length' in all the current word's phonemes).
u16 volume;
s16 pitch;
s16 voiceInflection;
u16 lyrics[NUM_BARD_SONG_WORDS];
struct BardSound sounds[MAX_BARD_SOUNDS_PER_WORD];
const struct BardSoundTemplate *soundTemplates;
};
extern const u16 gNumBardWords_Species;
extern const u16 gNumBardWords_Moves;
const struct BardSoundTemplate *GetWordSoundTemplates(u16 easyChatWord);
void CalcWordSounds(struct BardSong *song, u16 pitchTableIndex);
#endif //GUARD_BARD_MUSIC_H