#ifndef BGM_H
#define BGM_H

#include "sys.h"

void Audio_SetBgmParam(s8 bgmParam);
void Audio_PlaySequence(u8 seqPlayId, u16 seqId, u8 fadeinTime, u8 bgmParam);
void Audio_PlayFanfare(u16 seqId, u8 bgmVolume, u8 bgmFadeoutTime, u8 bgmFadeinTime);
void Audio_PlayDeathSequence(void);
void Audio_PlaySoundTest(u8 enable);
void Audio_PlaySequenceDistorted(u8 seqPlayId, u16 seqId, u16 distortion, u8 fadeinTime, u8 unused);
void Audio_PlaySoundTestTrack(u8 trackNumber);
void Audio_PlayBgm(u16 seqId);

#define AUDIO_PLAY_BGM(seqId) Audio_PlaySequence(SEQ_PLAYER_BGM, (seqId), 0, -1)

typedef enum BgmSeqIds {
    /*  0 */ SEQ_ID_SFX,
    /*  1 */ SEQ_ID_VOICE,
    /*  2 */ SEQ_ID_CORNERIA,
    /*  3 */ SEQ_ID_METEO,
    /*  4 */ SEQ_ID_TITANIA,
    /*  5 */ SEQ_ID_SECTOR_X,
    /*  6 */ SEQ_ID_ZONESS,
    /*  7 */ SEQ_ID_AREA_6,
    /*  8 */ SEQ_ID_VENOM_1,
    /*  9 */ SEQ_ID_SECTOR_Y,
    /* 10 */ SEQ_ID_FORTUNA,
    /* 11 */ SEQ_ID_SOLAR,
    /* 12 */ SEQ_ID_BOLSE,
    /* 13 */ SEQ_ID_KATINA,
    /* 14 */ SEQ_ID_AQUAS,
    /* 15 */ SEQ_ID_SECTOR_Z,
    /* 16 */ SEQ_ID_MACBETH,
    /* 17 */ SEQ_ID_ANDROSS,
    /* 18 */ SEQ_ID_BOSS_CO_1,
    /* 19 */ SEQ_ID_BOSS_ME,
    /* 20 */ SEQ_ID_BOSS_TI,
    /* 21 */ SEQ_ID_BOSS_SX,
    /* 22 */ SEQ_ID_BOSS_ZO,
    /* 23 */ SEQ_ID_BOSS_A6,
    /* 24 */ SEQ_ID_BOSS_VE,
    /* 25 */ SEQ_ID_BOSS_SY,
    /* 26 */ SEQ_ID_UNK_26,
    /* 27 */ SEQ_ID_BOSS_SO,
    /* 28 */ SEQ_ID_BOSS_BO,
    /* 29 */ SEQ_ID_BOSS_KA,
    /* 30 */ SEQ_ID_BOSS_AQ,
    /* 31 */ SEQ_ID_BOSS_SZ,
    /* 32 */ SEQ_ID_BOSS_MA,
    /* 33 */ SEQ_ID_BOSS_ANDROSS,
    /* 34 */ SEQ_ID_TITLE,
    /* 35 */ SEQ_ID_OPENING,
    /* 36 */ SEQ_ID_MENU,
    /* 37 */ SEQ_ID_CO_INTRO,
    /* 38 */ SEQ_ID_GOOD_END,
    /* 39 */ SEQ_ID_DEATH,
    /* 40 */ SEQ_ID_GAME_OVER,
    /* 41 */ SEQ_ID_UNK_41,
    /* 42 */ SEQ_ID_STAFF_ROLL,
    /* 43 */ SEQ_ID_STAR_WOLF,
    /* 44 */ SEQ_ID_INTRO_S,
    /* 45 */ SEQ_ID_INTRO_M,
    /* 46 */ SEQ_ID_VERSUS,
    /* 47 */ SEQ_ID_VS_HURRY,
    /* 48 */ SEQ_ID_BOSS_CO_2,
    /* 49 */ SEQ_ID_BAD_END,
    /* 50 */ SEQ_ID_ME_INTRO,
    /* 51 */ SEQ_ID_INTRO_51,
    /* 52 */ SEQ_ID_UNK_52,
    /* 53 */ SEQ_ID_UNK_53,
    /* 54 */ SEQ_ID_KATT,
    /* 55 */ SEQ_ID_BILL,
    /* 56 */ SEQ_ID_VS_MENU,
    /* 57 */ SEQ_ID_UNK_57,
    /* 58 */ SEQ_ID_WARP_ZONE,
    /* 59 */ SEQ_ID_UNK_59,
    /* 60 */ SEQ_ID_WORLD_MAP,
    /* 61 */ SEQ_ID_AND_BRAIN,
    /* 62 */ SEQ_ID_TO_ANDROSS,
    /* 63 */ SEQ_ID_TRAINING,
    /* 64 */ SEQ_ID_VE_CLEAR,
    /* 65 */ SEQ_ID_BOSS_RESUME,
#ifdef VERSION_EU
    /* 66 */ SEQ_ID_VOICE_LYLAT,
    /* 67 */ SEQ_ID_MAX,
#else
    /* 66 */ SEQ_ID_MAX,
#endif
    /* -1 */ SEQ_ID_NONE = 0xFFFF,
} BgmSeqIds;

#define SEQ_FLAG 0x8000

#define NA_BGM_SE               (SEQ_ID_SFX)
#define NA_BGM_VO               (SEQ_ID_VOICE)
#define NA_BGM_VO_LYLAT         (SEQ_ID_VOICE_LYLAT)
#define NA_BGM_STAGE_CO         (SEQ_ID_CORNERIA | SEQ_FLAG)
#define NA_BGM_STAGE_ME         (SEQ_ID_METEO | SEQ_FLAG)
#define NA_BGM_STAGE_TI         (SEQ_ID_TITANIA | SEQ_FLAG)
#define NA_BGM_STAGE_SX         (SEQ_ID_SECTOR_X | SEQ_FLAG)
#define NA_BGM_STAGE_ZO         (SEQ_ID_ZONESS | SEQ_FLAG)
#define NA_BGM_STAGE_A6         (SEQ_ID_AREA_6 | SEQ_FLAG)
#define NA_BGM_STAGE_SB         (SEQ_ID_AREA_6 | SEQ_FLAG)
#define NA_BGM_STAGE_VE1        (SEQ_ID_VENOM_1 | SEQ_FLAG)
#define NA_BGM_STAGE_SY         (SEQ_ID_SECTOR_Y | SEQ_FLAG)
#define NA_BGM_STAGE_FO         (SEQ_ID_FORTUNA | SEQ_FLAG)
#define NA_BGM_STAGE_SO         (SEQ_ID_SOLAR | SEQ_FLAG)
#define NA_BGM_STAGE_BO         (SEQ_ID_BOLSE | SEQ_FLAG)
#define NA_BGM_STAGE_KA         (SEQ_ID_KATINA | SEQ_FLAG)
#define NA_BGM_STAGE_AQ         (SEQ_ID_AQUAS)
#define NA_BGM_STAGE_SZ         (SEQ_ID_SECTOR_Z | SEQ_FLAG)
#define NA_BGM_STAGE_MA         (SEQ_ID_MACBETH | SEQ_FLAG)
#define NA_BGM_STAGE_ANDROSS    (SEQ_ID_ANDROSS | SEQ_FLAG)
#define NA_BGM_BOSS_CO          (SEQ_ID_BOSS_CO_1 | SEQ_FLAG)
#define NA_BGM_BOSS_ME          (SEQ_ID_BOSS_ME | SEQ_FLAG)
#define NA_BGM_BOSS_TI          (SEQ_ID_BOSS_TI | SEQ_FLAG)
#define NA_BGM_BOSS_SX          (SEQ_ID_BOSS_SX | SEQ_FLAG)
#define NA_BGM_BOSS_ZO          (SEQ_ID_BOSS_ZO | SEQ_FLAG)
#define NA_BGM_BOSS_A6          (SEQ_ID_BOSS_A6 | SEQ_FLAG)
#define NA_BGM_BOSS_SB          (SEQ_ID_BOSS_A6 | SEQ_FLAG)
#define NA_BGM_BOSS_VE          (SEQ_ID_BOSS_VE | SEQ_FLAG)
#define NA_BGM_BOSS_SY          (SEQ_ID_BOSS_SY | SEQ_FLAG)
#define NA_BGM_BOSS_FO          (SEQ_ID_UNK_26 | SEQ_FLAG)
#define NA_BGM_BOSS_SO          (SEQ_ID_BOSS_SO | SEQ_FLAG)
#define NA_BGM_BOSS_BO          (SEQ_ID_BOSS_BO | SEQ_FLAG)
#define NA_BGM_BOSS_KA          (SEQ_ID_BOSS_KA | SEQ_FLAG)
#define NA_BGM_BOSS_AQ          (SEQ_ID_BOSS_AQ | SEQ_FLAG)
#define NA_BGM_BOSS_SZ          (SEQ_ID_BOSS_SZ | SEQ_FLAG)
#define NA_BGM_BOSS_MA          (SEQ_ID_BOSS_MA | SEQ_FLAG)
#define NA_BGM_BOSS_ANDROSS     (SEQ_ID_BOSS_ANDROSS | SEQ_FLAG)
#define NA_BGM_TITLE            (SEQ_ID_TITLE)
#define NA_BGM_OPENING          (SEQ_ID_OPENING)
#define NA_BGM_SELECT           (SEQ_ID_MENU)
#define NA_BGM_RANKING          (SEQ_ID_MENU)
#define NA_BGM_START_DEMO       (SEQ_ID_CO_INTRO)
#define NA_BGM_COURSE_CLEAR     (SEQ_ID_GOOD_END)
#define NA_BGM_PLAYER_DOWN      (SEQ_ID_DEATH)
#define NA_BGM_GAME_OVER        (SEQ_ID_GAME_OVER)
#define NA_BGM_END_DEMO         (SEQ_ID_UNK_41)
#define NA_BGM_STAFF_ROLL       (SEQ_ID_STAFF_ROLL)
#define NA_BGM_STARWOLF         (SEQ_ID_STAR_WOLF | SEQ_FLAG)
#define NA_BGM_START_DEMO_S     (SEQ_ID_INTRO_S)
#define NA_BGM_START_DEMO_M     (SEQ_ID_INTRO_M)
#define NA_BGM_VOLUME_TEST      (SEQ_ID_VERSUS)
#define NA_BGM_BATTLE           (SEQ_ID_VERSUS | SEQ_FLAG)
#define NA_BGM_VS_00            (SEQ_ID_VERSUS | SEQ_FLAG)
#define NA_BGM_VS_01            (SEQ_ID_VERSUS | SEQ_FLAG)
#define NA_BGM_VS_02            (SEQ_ID_VERSUS | SEQ_FLAG)
#define NA_BGM_BATTLE_LAST      (SEQ_ID_VS_HURRY | SEQ_FLAG)
#define NA_BGM_BOSS_A_CARRIER   (SEQ_ID_BOSS_CO_2 | SEQ_FLAG)
#define NA_BGM_COURSE_FAILURE   (SEQ_ID_BAD_END)
#define NA_BGM_ME_START_DEMO    (SEQ_ID_ME_INTRO)
#define NA_BGM_FO_START_DEMO    (SEQ_ID_INTRO_51)
#define NA_BGM_A6_START_DEMO    (SEQ_ID_INTRO_51)
#define NA_BGM_BO_START_DEMO    (SEQ_ID_INTRO_51)
#define NA_BGM_SO_START_DEMO    (SEQ_ID_INTRO_51)
#define NA_BGM_KA_START_DEMO    (SEQ_ID_INTRO_51)
#define NA_BGM_SZ_START_DEMO    (SEQ_ID_INTRO_51)
#define NA_BGM_AQ_START_DEMO    (SEQ_ID_UNK_52)
#define NA_BGM_VE_START_DEMO    (SEQ_ID_UNK_53)
#define NA_BGM_KATT             (SEQ_ID_KATT)
#define NA_BGM_BILL             (SEQ_ID_BILL)
#define NA_BGM_VS_SELECT        (SEQ_ID_VS_MENU)
#define NA_BGM_VS_RESULT        (SEQ_ID_UNK_57)
#define NA_BGM_STAGE_WZ         (SEQ_ID_WARP_ZONE | SEQ_FLAG)
#define NA_BGM_STAGE_AT         (SEQ_ID_WARP_ZONE | SEQ_FLAG)
#define NA_BGM_STAGE_SS         (SEQ_ID_WARP_ZONE | SEQ_FLAG)
#define NA_BGM_STAGE_BM3        (SEQ_ID_UNK_59 | SEQ_FLAG)
#define NA_BGM_MAP              (SEQ_ID_WORLD_MAP)
#define NA_BGM_ANDROSS_BRAIN    (SEQ_ID_AND_BRAIN | SEQ_FLAG)
#define NA_BGM_DASH_INTO_BASE   (SEQ_ID_TO_ANDROSS | SEQ_FLAG)
#define NA_BGM_TRAINING         (SEQ_ID_TRAINING | SEQ_FLAG)
#define NA_BGM_ALL_CLEAR        (SEQ_ID_VE_CLEAR | SEQ_FLAG)
#define NA_BGM_REAL_BOSS        (SEQ_ID_BOSS_RESUME | SEQ_FLAG)

#endif