/* Emacs style mode select   -*- C++ -*-
 *-----------------------------------------------------------------------------
 *
 *
 *  PrBoom a Doom port merged with LxDoom and LSDLDoom
 *  based on BOOM, a modified and improved DOOM engine
 *  Copyright (C) 1999 by
 *  id Software, Chi Hoang, Lee Killough, Jim Flynn, Rand Phares, Ty Halderman
 *  Copyright (C) 1999-2000 by
 *  Jess Haas, Nicolas Kalkhof, Colin Phipps, Florian Schulze
 *
 *  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.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 *  02111-1307, USA.
 *
 * DESCRIPTION:
 *      Created by the sound utility written by Dave Taylor.
 *      Kept as a sample, DOOM2 sounds. Frozen.
 *
 *-----------------------------------------------------------------------------*/

#ifndef __SOUNDS__
#define __SOUNDS__
#include "rockmacros.h"

//
// SoundFX struct.
//

struct sfxinfo_struct;

typedef struct sfxinfo_struct sfxinfo_t;

struct sfxinfo_struct {

   // up to 6-character name
   const char *name; // CPhipps - const

   // Sfx singularity (only one at a time)
   int singularity;

   // Sfx priority
   int priority;

   // referenced sound if a link
   sfxinfo_t *link;

   // pitch if a link
   int pitch;

   // volume if a link
   int volume;

   // sound data
   void *data;

   // this is checked every second to see if sound
   // can be thrown out (if 0, then decrement, if -1,
   // then throw out, if > 0, then it is in use)
   int usefulness;

   // lump number of sfx
   int lumpnum;
};

//
// MusicInfo struct.
//

typedef struct {
   // up to 6-character name
   const char *name; // CPhipps - const

   // lump number of music
   int lumpnum;

   /* music data - cphipps 4/11 made const void* */
   const void *data;

   // music handle once registered
   int handle;
} musicinfo_t;

// the complete set of sound effects
extern sfxinfo_t    S_sfx[];

// the complete set of music
extern musicinfo_t  S_music[];

//
// Identifiers for all music in game.
//

enum {
   mus_None,
   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_inter,
   mus_intro,
   mus_bunny,
   mus_victor,
   mus_introa,
   mus_runnin,
   mus_stalks,
   mus_countd,
   mus_betwee,
   mus_doom,
   mus_the_da,
   mus_shawn,
   mus_ddtblu,
   mus_in_cit,
   mus_dead,
   mus_stlks2,
   mus_theda2,
   mus_doom2,
   mus_ddtbl2,
   mus_runni2,
   mus_dead2,
   mus_stlks3,
   mus_romero,
   mus_shawn2,
   mus_messag,
   mus_count2,
   mus_ddtbl3,
   mus_ampie,
   mus_theda3,
   mus_adrian,
   mus_messg2,
   mus_romer2,
   mus_tense,
   mus_shawn3,
   mus_openin,
   mus_evil,
   mus_ultima,
   mus_read_m,
   mus_dm2ttl,
   mus_dm2int,
   NUMMUSIC
};
typedef unsigned musicenum_t;

//
// Identifiers for all sfx in game.
//

enum {
   sfx_None,
   sfx_pistol,
   sfx_shotgn,
   sfx_sgcock,
   sfx_dshtgn,
   sfx_dbopn,
   sfx_dbcls,
   sfx_dbload,
   sfx_plasma,
   sfx_bfg,
   sfx_sawup,
   sfx_sawidl,
   sfx_sawful,
   sfx_sawhit,
   sfx_rlaunc,
   sfx_rxplod,
   sfx_firsht,
   sfx_firxpl,
   sfx_pstart,
   sfx_pstop,
   sfx_doropn,
   sfx_dorcls,
   sfx_stnmov,
   sfx_swtchn,
   sfx_swtchx,
   sfx_plpain,
   sfx_dmpain,
   sfx_popain,
   sfx_vipain,
   sfx_mnpain,
   sfx_pepain,
   sfx_slop,
   sfx_itemup,
   sfx_wpnup,
   sfx_oof,
   sfx_telept,
   sfx_posit1,
   sfx_posit2,
   sfx_posit3,
   sfx_bgsit1,
   sfx_bgsit2,
   sfx_sgtsit,
   sfx_cacsit,
   sfx_brssit,
   sfx_cybsit,
   sfx_spisit,
   sfx_bspsit,
   sfx_kntsit,
   sfx_vilsit,
   sfx_mansit,
   sfx_pesit,
   sfx_sklatk,
   sfx_sgtatk,
   sfx_skepch,
   sfx_vilatk,
   sfx_claw,
   sfx_skeswg,
   sfx_pldeth,
   sfx_pdiehi,
   sfx_podth1,
   sfx_podth2,
   sfx_podth3,
   sfx_bgdth1,
   sfx_bgdth2,
   sfx_sgtdth,
   sfx_cacdth,
   sfx_skldth,
   sfx_brsdth,
   sfx_cybdth,
   sfx_spidth,
   sfx_bspdth,
   sfx_vildth,
   sfx_kntdth,
   sfx_pedth,
   sfx_skedth,
   sfx_posact,
   sfx_bgact,
   sfx_dmact,
   sfx_bspact,
   sfx_bspwlk,
   sfx_vilact,
   sfx_noway,
   sfx_barexp,
   sfx_punch,
   sfx_hoof,
   sfx_metal,
   sfx_chgun,
   sfx_tink,
   sfx_bdopn,
   sfx_bdcls,
   sfx_itmbk,
   sfx_flame,
   sfx_flamst,
   sfx_getpow,
   sfx_bospit,
   sfx_boscub,
   sfx_bossit,
   sfx_bospn,
   sfx_bosdth,
   sfx_manatk,
   sfx_mandth,
   sfx_sssit,
   sfx_ssdth,
   sfx_keenpn,
   sfx_keendt,
   sfx_skeact,
   sfx_skesit,
   sfx_skeatk,
   sfx_radio,

#ifdef DOGS
   /* killough 11/98: dog sounds */
   sfx_dgsit,
   sfx_dgatk,
   sfx_dgact,
   sfx_dgdth,
   sfx_dgpain,
#endif

   NUMSFX
};
typedef unsigned sfxenum_t;

#endif
