#ifndef D_SND_EVENT_H
#define D_SND_EVENT_H

#include "common.h"

typedef void (*SndEventCallback)(void);
typedef void (*SndEventFinalizeCallback)(bool skipped);
typedef void (*SndEventMsgWaitCallback)(u32 msgWaitSelectCounter);

struct SndEventDef {
    /* 0x00 */ const char *eventName;
    /* 0x04 */ s32 eventId;
    /* 0x08 */ SndEventCallback initializeCb;
    /* 0x0C */ SndEventCallback executeCb;
    /* 0x10 */ SndEventFinalizeCallback finalizeCb;
    /* 0x14 */ SndEventMsgWaitCallback msgWaitStartCb; // always null
    /* 0x18 */ SndEventMsgWaitCallback msgWaitEndCb; // always null
};

enum SndEvent_e {
    /* 0x00 */ SND_EVENT_DefaultStart = 0x00,
    /* 0x01 */ SND_EVENT_SkyDiveStart = 0x01,
    /* 0x02 */ SND_EVENT_ShortDiveStart = 0x02,
    /* 0x03 */ SND_EVENT_ParachuteStart = 0x03,
    /* 0x04 */ SND_EVENT_SirenBackStart = 0x04,
    /* 0x05 */ SND_EVENT_TimeDoorIn = 0x05,
    /* 0x06 */ SND_EVENT_TimeDoorOut = 0x06,
    /* 0x07 */ SND_EVENT_ReturnSkyloft = 0x07,
    /* 0x08 */ SND_EVENT_Shutter = 0x08,
    /* 0x09 */ SND_EVENT_DayTime = 0x09,
    /* 0x0A */ SND_EVENT_BedStart = 0x0A,
    /* 0x0B */ SND_EVENT_TboxShow = 0x0B,
    /* 0x0C */ SND_EVENT_TreasureBoxOpen = 0x0C,
    /* 0x0D */ SND_EVENT_TreasureBoxOpenBoss = 0x0D,
    /* 0x0E */ SND_EVENT_FaysSirenSong = 0x0E,
    /* 0x0F */ SND_EVENT_fays_song_fin_siren = 0x0F,
    /* 0x10 */ SND_EVENT_SDGateInOpen = 0x10,
    /* 0x11 */ SND_EVENT_SealedDoorOpen = 0x11,
    /* 0x12 */ SND_EVENT_SealedDoorClose = 0x12,
    /* 0x13 */ SND_EVENT_HeartContainer = 0x13,
    /* 0x14 */ SND_EVENT_ordinary_sword_sprit = 0x14,
    /* 0x15 */ SND_EVENT_fays_navigate = 0x15,
    /* 0x16 */ SND_EVENT_fays_allert = 0x16,
    /* 0x17 */ SND_EVENT_DefaultGetItem = 0x17,
    /* 0x18 */ SND_EVENT_ItemGetGorgeous = 0x18,
    /* 0x19 */ SND_EVENT_Save = 0x19,
    /* 0x1A */ SND_EVENT_SwordDraw = 0x1A,
    /* 0x1B */ SND_EVENT_SwordDrawDoorNew = 0x1B,
    /* 0x1C */ SND_EVENT_DoorBossGame = 0x1C,
    /* 0x1D */ SND_EVENT_FallRestart = 0x1D,
    /* 0x1E */ SND_EVENT_DeadMagma = 0x1E,
    /* 0x1F */ SND_EVENT_DeadSink = 0x1F,
    /* 0x20 */ SND_EVENT_Dead = 0x20,
    /* 0x21 */ SND_EVENT_DeadDive = 0x21,
    /* 0x22 */ SND_EVENT_SirenChaser2 = 0x22,
    /* 0x23 */ SND_EVENT_JMAP = 0x23,
    /* 0x24 */ SND_EVENT_JMAPAllMove = 0x24,
    /* 0x25 */ SND_EVENT_OracleInSiren = 0x25,
    /* 0x26 */ SND_EVENT_CeremonyByRescueTeam = 0x26,
    /* 0x27 */ SND_EVENT_BirdRaceStart = 0x27,
    /* 0x28 */ SND_EVENT_GoddessGateOpen = 0x28,
    /* 0x29 */ SND_EVENT_FaysPharosSong = 0x29,
    /* 0x2A */ SND_EVENT_fays_song_pharos = 0x2A,
    /* 0x2B */ SND_EVENT_fays_song_fin_pharos = 0x2B,
    /* 0x2D */ SND_EVENT_HarpPerformanceResult = 0x2D,
    /* 0x2E */ SND_EVENT_ItemGetBird = 0x2E,
    /* 0x2F */ SND_EVENT_DivingMGStart = 0x2F,
    /* 0x30 */ SND_EVENT_DiveGameResult = 0x30,
    /* 0x31 */ SND_EVENT_StartCarryPumpkin = 0x31,
    /* 0x32 */ SND_EVENT_CarryPumpkinResultsFailed = 0x32,
    /* 0x33 */ SND_EVENT_CarryPumpkinResultsSuccessful = 0x33,
    /* 0x34 */ SND_EVENT_NusiAppearDemo = 0x34,
    /* 0x35 */ SND_EVENT_NusiTHideAppearDemo = 0x35,
    /* 0x36 */ SND_EVENT_TenAppearDemo = 0x36,
    /* 0x37 */ SND_EVENT_NusiTDeathDemo = 0x37,
    /* 0x38 */ SND_EVENT_NusiDeathDemo = 0x38,
    /* 0x39 */ SND_EVENT_F100IntroByFay = 0x39,
    /* 0x3A */ SND_EVENT_BC_wakidasi = 0x3A,
    /* 0x3B */ SND_EVENT_Kyui3Fall = 0x3B,
    /* 0x3C */ SND_EVENT_F102Intro2 = 0x3C,
    /* 0x3D */ SND_EVENT_Uo = 0x3D,
    /* 0x3E */ SND_EVENT_WaterfallStop = 0x3E,
    /* 0x3F */ SND_EVENT_F103Intro2 = 0x3F,
    /* 0x40 */ SND_EVENT_Onp = 0x40,
    /* 0x41 */ SND_EVENT_F103_UoMS = 0x41,
    /* 0x42 */ SND_EVENT_F200IntroByFay = 0x42,
    /* 0x43 */ SND_EVENT_F202_R02Intro = 0x43,
    /* 0x44 */ SND_EVENT_SearchLightDemo = 0x44,
    /* 0x45 */ SND_EVENT_F300_1IntroByFay = 0x45,
    /* 0x46 */ SND_EVENT_FirstTimeSlip = 0x46,
    /* 0x47 */ SND_EVENT_F301IntroByFay = 0x47,
    /* 0x49 */ SND_EVENT_F302RevivalRairyu = 0x49,
    /* 0x4A */ SND_EVENT_F401IntroByFay = 0x4A,
    /* 0x4B */ SND_EVENT_BBossAppear = 0x4B,
    /* 0x4C */ SND_EVENT_BBFLYDEMO = 0x4C,
    /* 0x4D */ SND_EVENT_BBossEvac = 0x4D,
    /* 0x4E */ SND_EVENT_BBoss2Evac = 0x4E,
    /* 0x4F */ SND_EVENT_BBoss3Evac = 0x4F,
    /* 0x50 */ SND_EVENT_BBFuuin = 0x50,
    /* 0x51 */ SND_EVENT_BBHDTH = 0x51,
    /* 0x52 */ SND_EVENT_BBHDRC = 0x52,
    /* 0x53 */ SND_EVENT_BBFCL = 0x53,
    /* 0x54 */ SND_EVENT_BBTUTO = 0x54,
    /* 0x55 */ SND_EVENT_F402L3QuakeStart = 0x55,
    /* 0x56 */ SND_EVENT_Girahimu3SecondAppearDemo = 0x56,
    /* 0x57 */ SND_EVENT_SF_start = 0x57,
    /* 0x58 */ SND_EVENT_GirahimuSwordDemo = 0x58,
    /* 0x59 */ SND_EVENT_SF4_Op = 0x59,
    /* 0x5A */ SND_EVENT_SF4_End = 0x5A,
    /* 0x5C */ SND_EVENT_AsuraStart = 0x5C,
    /* 0x5D */ SND_EVENT_AsuraStartB = 0x5D,
    /* 0x5E */ SND_EVENT_ELizarufos_c_opening = 0x5E,
    /* 0x5F */ SND_EVENT_D200R04Rock = 0x5F,
    /* 0x60 */ SND_EVENT_RollRockLspJump = 0x60,
    /* 0x62 */ SND_EVENT_RollRockLspAppear = 0x62,
    /* 0x63 */ SND_EVENT_RollRockChangeVera = 0x63,
    /* 0x64 */ SND_EVENT_MoleInitFear = 0x64,
    /* 0x65 */ SND_EVENT_MolePushSwitch = 0x65,
    /* 0x66 */ SND_EVENT_MoleInitTalk = 0x66,
    /* 0x67 */ SND_EVENT_CatchMole = 0x67,
    /* 0x68 */ SND_EVENT_D201IronFence = 0x68,
    /* 0x69 */ SND_EVENT_MogMolShut = 0x69,
    /* 0x6A */ SND_EVENT_MogMolOpen = 0x6A,
    /* 0x6B */ SND_EVENT_LavaPlate = 0x6B,
    /* 0x6C */ SND_EVENT_ResqueMole = 0x6C,
    /* 0x6D */ SND_EVENT_MG_start = 0x6D,
    /* 0x6E */ SND_EVENT_ECaptain_c_Opening = 0x6E,
    /* 0x6F */ SND_EVENT_BKR_start = 0x6F,
    /* 0x70 */ SND_EVENT_BKR_end = 0x70,
    /* 0x71 */ SND_EVENT_BKR_armCaught = 0x71,
    /* 0x72 */ SND_EVENT_BLS_demo2 = 0x72,
    /* 0x73 */ SND_EVENT_BLS_end = 0x73,
    /* 0x74 */ SND_EVENT_D003Intro = 0x74,
    /* 0x75 */ SND_EVENT_ECaptain_c_OpeningType2 = 0x75,
    /* 0x76 */ SND_EVENT_NeedleUnderground = 0x76,
    /* 0x77 */ SND_EVENT_TriforceWarp = 0x77,
    
    /* 0x78 */ SND_EVENT_0x78 = 0x78,
    
    /* 0x79 */ SND_EVENT_Demo03_03 = 0x79,
    /* 0x7A */ SND_EVENT_Demo15_04 = 0x7A,
    /* 0x7B */ SND_EVENT_Demo08_01 = 0x7B,
    /* 0x7C */ SND_EVENT_Demo36_01 = 0x7C,
    /* 0x7D */ SND_EVENT_Demo41_01 = 0x7D,
    /* 0x7E */ SND_EVENT_Demo59_01 = 0x7E,
    /* 0x7F */ SND_EVENT_Demo62_01 = 0x7F,
    /* 0x80 */ SND_EVENT_Demo64_06 = 0x80,
    /* 0x81 */ SND_EVENT_Demo70_01 = 0x81,
    /* 0x82 */ SND_EVENT_Demo70_02 = 0x82,
    /* 0x83 */ SND_EVENT_Demo72_01 = 0x83,
    /* 0x84 */ SND_EVENT_Demo77_01 = 0x84,
    /* 0x85 */ SND_EVENT_Demo79_01 = 0x85,

    /* 0x86 */ SND_EVENT_0x86 = 0x86,
    /* 0x87 */ SND_EVENT_0x87 = 0x87,
    /* 0x88 */ SND_EVENT_0x88 = 0x88,
    /* 0x89 */ SND_EVENT_0x89 = 0x89,
};

#endif
