//
// Copyright(C) 1993-1996 Id Software, Inc.
// Copyright(C) 1993-2008 Raven Software
// Copyright(C) 2005-2014 Simon Howard
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//

// sounds.h

#ifndef __SOUNDSH__
#define __SOUNDSH__

#include "i_sound.h"

#define MAX_SND_DIST 	1600
#define MAX_CHANNELS	32

// Music identifiers

typedef enum
{
    mus_e1m1,
    mus_e1m2,
    mus_e1m3,
    mus_e1m4,
    mus_e1m5,
    mus_e1m6,
    mus_e1m7,
    mus_e1m8,
    mus_e1m9,

    mus_e2m1,
    mus_e2m2,
    mus_e2m3,
    mus_e2m4,
    mus_e2m5,
    mus_e2m6,
    mus_e2m7,
    mus_e2m8,
    mus_e2m9,

    mus_e3m1,
    mus_e3m2,
    mus_e3m3,
    mus_e3m4,
    mus_e3m5,
    mus_e3m6,
    mus_e3m7,
    mus_e3m8,
    mus_e3m9,

    mus_e4m1,
    mus_e4m2,
    mus_e4m3,
    mus_e4m4,
    mus_e4m5,
    mus_e4m6,
    mus_e4m7,
    mus_e4m8,
    mus_e4m9,

    mus_e5m1,
    mus_e5m2,
    mus_e5m3,
    mus_e5m4,
    mus_e5m5,
    mus_e5m6,
    mus_e5m7,
    mus_e5m8,
    mus_e5m9,

    mus_e6m1,
    mus_e6m2,
    mus_e6m3,

    mus_titl,
    mus_intr,
    mus_cptd,
    NUMMUSIC
} musicenum_t;

#if 0
typedef struct
{
    char name[8];
} musicinfo_t;

typedef struct sfxinfo_s
{
    char name[8];
    struct sfxinfo_s *link;     // Make alias for another sound
    unsigned short priority;    // Higher priority takes precendence
    int usefulness;             // Determines when a sound should be cached out
    void *snd_ptr;
    int lumpnum;
    int numchannels;            // total number of channels a sound type may occupy
} sfxinfo_t;

#endif

typedef struct
{
    mobj_t *mo;
    int sound_id;
    int handle;
    int pitch;
    int priority;
} channel_t;

typedef struct
{
    int id;
    unsigned short priority;
    char *name;
    mobj_t *mo;
    int distance;
} ChanInfo_t;

typedef struct
{
    int channelCount;
    int musicVolume;
    int soundVolume;
    ChanInfo_t chan[8];
} SoundInfo_t;

// Sound identifiers

typedef enum
{
    sfx_None,
    sfx_gldhit,
    sfx_gntful,
    sfx_gnthit,
    sfx_gntpow,
    sfx_gntact,
    sfx_gntuse,
    sfx_phosht,
    sfx_phohit,
    sfx_phopow,
    sfx_lobsht,
    sfx_lobhit,
    sfx_lobpow,
    sfx_hrnsht,
    sfx_hrnhit,
    sfx_hrnpow,
    sfx_ramphit,
    sfx_ramrain,
    sfx_bowsht,
    sfx_stfhit,
    sfx_stfpow,
    sfx_stfcrk,
    sfx_impsit,
    sfx_impat1,
    sfx_impat2,
    sfx_impdth,
    sfx_impact,
    sfx_imppai,
    sfx_mumsit,
    sfx_mumat1,
    sfx_mumat2,
    sfx_mumdth,
    sfx_mumact,
    sfx_mumpai,
    sfx_mumhed,
    sfx_bstsit,
    sfx_bstatk,
    sfx_bstdth,
    sfx_bstact,
    sfx_bstpai,
    sfx_clksit,
    sfx_clkatk,
    sfx_clkdth,
    sfx_clkact,
    sfx_clkpai,
    sfx_snksit,
    sfx_snkatk,
    sfx_snkdth,
    sfx_snkact,
    sfx_snkpai,
    sfx_kgtsit,
    sfx_kgtatk,
    sfx_kgtat2,
    sfx_kgtdth,
    sfx_kgtact,
    sfx_kgtpai,
    sfx_wizsit,
    sfx_wizatk,
    sfx_wizdth,
    sfx_wizact,
    sfx_wizpai,
    sfx_minsit,
    sfx_minat1,
    sfx_minat2,
    sfx_minat3,
    sfx_mindth,
    sfx_minact,
    sfx_minpai,
    sfx_hedsit,
    sfx_hedat1,
    sfx_hedat2,
    sfx_hedat3,
    sfx_heddth,
    sfx_hedact,
    sfx_hedpai,
    sfx_sorzap,
    sfx_sorrise,
    sfx_sorsit,
    sfx_soratk,
    sfx_soract,
    sfx_sorpai,
    sfx_sordsph,
    sfx_sordexp,
    sfx_sordbon,
    sfx_sbtsit,
    sfx_sbtatk,
    sfx_sbtdth,
    sfx_sbtact,
    sfx_sbtpai,
    sfx_plroof,
    sfx_plrpai,
    sfx_plrdth,                 // Normal
    sfx_gibdth,                 // Extreme
    sfx_plrwdth,                // Wimpy
    sfx_plrcdth,                // Crazy
    sfx_itemup,
    sfx_wpnup,
    sfx_telept,
    sfx_doropn,
    sfx_dorcls,
    sfx_dormov,
    sfx_artiup,
    sfx_switch,
    sfx_pstart,
    sfx_pstop,
    sfx_stnmov,
    sfx_chicpai,
    sfx_chicatk,
    sfx_chicdth,
    sfx_chicact,
    sfx_chicpk1,
    sfx_chicpk2,
    sfx_chicpk3,
    sfx_keyup,
    sfx_ripslop,
    sfx_newpod,
    sfx_podexp,
    sfx_bounce,
    sfx_volsht,
    sfx_volhit,
    sfx_burn,
    sfx_splash,
    sfx_gloop,
    sfx_respawn,
    sfx_blssht,
    sfx_blshit,
    sfx_chat,
    sfx_artiuse,
    sfx_gfrag,
    sfx_waterfl,

    // Monophonic sounds

    sfx_wind,
    sfx_amb1,
    sfx_amb2,
    sfx_amb3,
    sfx_amb4,
    sfx_amb5,
    sfx_amb6,
    sfx_amb7,
    sfx_amb8,
    sfx_amb9,
    sfx_amb10,
    sfx_amb11,
    NUMSFX
} sfxenum_t;

extern sfxinfo_t S_sfx[];
extern musicinfo_t S_music[][2];

#endif
