diff options
author | Simon Howard | 2008-09-17 19:10:54 +0000 |
---|---|---|
committer | Simon Howard | 2008-09-17 19:10:54 +0000 |
commit | 47c0b5207ed5bc077f1d9d59f94c12c522f2a0b9 (patch) | |
tree | 8907a0b55c3a1cb2998c4a69793279925f420d30 /src | |
parent | 1a9f364f3fe08bc769b66f162edec4f1bdf22345 (diff) | |
download | chocolate-doom-47c0b5207ed5bc077f1d9d59f94c12c522f2a0b9.tar.gz chocolate-doom-47c0b5207ed5bc077f1d9d59f94c12c522f2a0b9.tar.bz2 chocolate-doom-47c0b5207ed5bc077f1d9d59f94c12c522f2a0b9.zip |
Split sound code out of Heretic's i_ibm.c into s_sound.c. Rename
soundst.h to s_sound.h to fit. Reformat sounds.c files to declare sounds
through macros and harmonise on the common sfxinfo_t. Fix up Heretic
sound code to use common sound API.
Subversion-branch: /branches/raven-branch
Subversion-revision: 1236
Diffstat (limited to 'src')
33 files changed, 1009 insertions, 1144 deletions
diff --git a/src/doom/deh_sound.c b/src/doom/deh_sound.c index 9d904aa2..90b7725b 100644 --- a/src/doom/deh_sound.c +++ b/src/doom/deh_sound.c @@ -41,7 +41,7 @@ DEH_BEGIN_MAPPING(sound_mapping, sfxinfo_t) DEH_MAPPING("Zero 1", link) DEH_MAPPING("Zero 2", pitch) DEH_MAPPING("Zero 3", volume) - DEH_MAPPING("Zero 4", data) + DEH_UNSUPPORTED_MAPPING("Zero 4") DEH_MAPPING("Neg. One 1", usefulness) DEH_MAPPING("Neg. One 2", lumpnum) DEH_END_MAPPING diff --git a/src/doom/sounds.c b/src/doom/sounds.c index 37f3e404..55bda724 100644 --- a/src/doom/sounds.c +++ b/src/doom/sounds.c @@ -36,76 +36,79 @@ // Information about all the music // +#define MUSIC(name) \ + { name, 0, NULL, NULL } + musicinfo_t S_music[] = { - { NULL, 0, 0, 0 }, - { "e1m1", 0, 0, 0 }, - { "e1m2", 0, 0, 0 }, - { "e1m3", 0, 0, 0 }, - { "e1m4", 0, 0, 0 }, - { "e1m5", 0, 0, 0 }, - { "e1m6", 0, 0, 0 }, - { "e1m7", 0, 0, 0 }, - { "e1m8", 0, 0, 0 }, - { "e1m9", 0, 0, 0 }, - { "e2m1", 0, 0, 0 }, - { "e2m2", 0, 0, 0 }, - { "e2m3", 0, 0, 0 }, - { "e2m4", 0, 0, 0 }, - { "e2m5", 0, 0, 0 }, - { "e2m6", 0, 0, 0 }, - { "e2m7", 0, 0, 0 }, - { "e2m8", 0, 0, 0 }, - { "e2m9", 0, 0, 0 }, - { "e3m1", 0, 0, 0 }, - { "e3m2", 0, 0, 0 }, - { "e3m3", 0, 0, 0 }, - { "e3m4", 0, 0, 0 }, - { "e3m5", 0, 0, 0 }, - { "e3m6", 0, 0, 0 }, - { "e3m7", 0, 0, 0 }, - { "e3m8", 0, 0, 0 }, - { "e3m9", 0, 0, 0 }, - { "inter", 0, 0, 0 }, - { "intro", 0, 0, 0 }, - { "bunny", 0, 0, 0 }, - { "victor", 0, 0, 0 }, - { "introa", 0, 0, 0 }, - { "runnin", 0, 0, 0 }, - { "stalks", 0, 0, 0 }, - { "countd", 0, 0, 0 }, - { "betwee", 0, 0, 0 }, - { "doom", 0, 0, 0 }, - { "the_da", 0, 0, 0 }, - { "shawn", 0, 0, 0 }, - { "ddtblu", 0, 0, 0 }, - { "in_cit", 0, 0, 0 }, - { "dead", 0, 0, 0 }, - { "stlks2", 0, 0, 0 }, - { "theda2", 0, 0, 0 }, - { "doom2", 0, 0, 0 }, - { "ddtbl2", 0, 0, 0 }, - { "runni2", 0, 0, 0 }, - { "dead2", 0, 0, 0 }, - { "stlks3", 0, 0, 0 }, - { "romero", 0, 0, 0 }, - { "shawn2", 0, 0, 0 }, - { "messag", 0, 0, 0 }, - { "count2", 0, 0, 0 }, - { "ddtbl3", 0, 0, 0 }, - { "ampie", 0, 0, 0 }, - { "theda3", 0, 0, 0 }, - { "adrian", 0, 0, 0 }, - { "messg2", 0, 0, 0 }, - { "romer2", 0, 0, 0 }, - { "tense", 0, 0, 0 }, - { "shawn3", 0, 0, 0 }, - { "openin", 0, 0, 0 }, - { "evil", 0, 0, 0 }, - { "ultima", 0, 0, 0 }, - { "read_m", 0, 0, 0 }, - { "dm2ttl", 0, 0, 0 }, - { "dm2int", 0, 0, 0 } + MUSIC(NULL), + MUSIC("e1m1"), + MUSIC("e1m2"), + MUSIC("e1m3"), + MUSIC("e1m4"), + MUSIC("e1m5"), + MUSIC("e1m6"), + MUSIC("e1m7"), + MUSIC("e1m8"), + MUSIC("e1m9"), + MUSIC("e2m1"), + MUSIC("e2m2"), + MUSIC("e2m3"), + MUSIC("e2m4"), + MUSIC("e2m5"), + MUSIC("e2m6"), + MUSIC("e2m7"), + MUSIC("e2m8"), + MUSIC("e2m9"), + MUSIC("e3m1"), + MUSIC("e3m2"), + MUSIC("e3m3"), + MUSIC("e3m4"), + MUSIC("e3m5"), + MUSIC("e3m6"), + MUSIC("e3m7"), + MUSIC("e3m8"), + MUSIC("e3m9"), + MUSIC("inter"), + MUSIC("intro"), + MUSIC("bunny"), + MUSIC("victor"), + MUSIC("introa"), + MUSIC("runnin"), + MUSIC("stalks"), + MUSIC("countd"), + MUSIC("betwee"), + MUSIC("doom"), + MUSIC("the_da"), + MUSIC("shawn"), + MUSIC("ddtblu"), + MUSIC("in_cit"), + MUSIC("dead"), + MUSIC("stlks2"), + MUSIC("theda2"), + MUSIC("doom2"), + MUSIC("ddtbl2"), + MUSIC("runni2"), + MUSIC("dead2"), + MUSIC("stlks3"), + MUSIC("romero"), + MUSIC("shawn2"), + MUSIC("messag"), + MUSIC("count2"), + MUSIC("ddtbl3"), + MUSIC("ampie"), + MUSIC("theda3"), + MUSIC("adrian"), + MUSIC("messg2"), + MUSIC("romer2"), + MUSIC("tense"), + MUSIC("shawn3"), + MUSIC("openin"), + MUSIC("evil"), + MUSIC("ultima"), + MUSIC("read_m"), + MUSIC("dm2ttl"), + MUSIC("dm2int") }; @@ -113,117 +116,122 @@ musicinfo_t S_music[] = // Information about all the sfx // +#define SOUND(name, priority) \ + { name, priority, NULL, -1, -1, 0, 0, -1, NULL } +#define SOUND_LINK(name, priority, link_id, pitch, volume) \ + { name, priority, &S_sfx[link_id], pitch, volume, 0, 0, -1, NULL } + sfxinfo_t S_sfx[] = { // S_sfx[0] needs to be a dummy for odd reasons. - { "none", 0, 0, -1, -1, 0, 0, 0, NULL }, - { "pistol", 64, 0, -1, -1, 0, 0, 0, NULL }, - { "shotgn", 64, 0, -1, -1, 0, 0, 0, NULL }, - { "sgcock", 64, 0, -1, -1, 0, 0, 0, NULL }, - { "dshtgn", 64, 0, -1, -1, 0, 0, 0, NULL }, - { "dbopn", 64, 0, -1, -1, 0, 0, 0, NULL }, - { "dbcls", 64, 0, -1, -1, 0, 0, 0, NULL }, - { "dbload", 64, 0, -1, -1, 0, 0, 0, NULL }, - { "plasma", 64, 0, -1, -1, 0, 0, 0, NULL }, - { "bfg", 64, 0, -1, -1, 0, 0, 0, NULL }, - { "sawup", 64, 0, -1, -1, 0, 0, 0, NULL }, - { "sawidl", 118, 0, -1, -1, 0, 0, 0, NULL }, - { "sawful", 64, 0, -1, -1, 0, 0, 0, NULL }, - { "sawhit", 64, 0, -1, -1, 0, 0, 0, NULL }, - { "rlaunc", 64, 0, -1, -1, 0, 0, 0, NULL }, - { "rxplod", 70, 0, -1, -1, 0, 0, 0, NULL }, - { "firsht", 70, 0, -1, -1, 0, 0, 0, NULL }, - { "firxpl", 70, 0, -1, -1, 0, 0, 0, NULL }, - { "pstart", 100, 0, -1, -1, 0, 0, 0, NULL }, - { "pstop", 100, 0, -1, -1, 0, 0, 0, NULL }, - { "doropn", 100, 0, -1, -1, 0, 0, 0, NULL }, - { "dorcls", 100, 0, -1, -1, 0, 0, 0, NULL }, - { "stnmov", 119, 0, -1, -1, 0, 0, 0, NULL }, - { "swtchn", 78, 0, -1, -1, 0, 0, 0, NULL }, - { "swtchx", 78, 0, -1, -1, 0, 0, 0, NULL }, - { "plpain", 96, 0, -1, -1, 0, 0, 0, NULL }, - { "dmpain", 96, 0, -1, -1, 0, 0, 0, NULL }, - { "popain", 96, 0, -1, -1, 0, 0, 0, NULL }, - { "vipain", 96, 0, -1, -1, 0, 0, 0, NULL }, - { "mnpain", 96, 0, -1, -1, 0, 0, 0, NULL }, - { "pepain", 96, 0, -1, -1, 0, 0, 0, NULL }, - { "slop", 78, 0, -1, -1, 0, 0, 0, NULL }, - { "itemup", 78, 0, -1, -1, 0, 0, 0, NULL }, - { "wpnup", 78, 0, -1, -1, 0, 0, 0, NULL }, - { "oof", 96, 0, -1, -1, 0, 0, 0, NULL }, - { "telept", 32, 0, -1, -1, 0, 0, 0, NULL }, - { "posit1", 98, 0, -1, -1, 0, 0, 0, NULL }, - { "posit2", 98, 0, -1, -1, 0, 0, 0, NULL }, - { "posit3", 98, 0, -1, -1, 0, 0, 0, NULL }, - { "bgsit1", 98, 0, -1, -1, 0, 0, 0, NULL }, - { "bgsit2", 98, 0, -1, -1, 0, 0, 0, NULL }, - { "sgtsit", 98, 0, -1, -1, 0, 0, 0, NULL }, - { "cacsit", 98, 0, -1, -1, 0, 0, 0, NULL }, - { "brssit", 94, 0, -1, -1, 0, 0, 0, NULL }, - { "cybsit", 92, 0, -1, -1, 0, 0, 0, NULL }, - { "spisit", 90, 0, -1, -1, 0, 0, 0, NULL }, - { "bspsit", 90, 0, -1, -1, 0, 0, 0, NULL }, - { "kntsit", 90, 0, -1, -1, 0, 0, 0, NULL }, - { "vilsit", 90, 0, -1, -1, 0, 0, 0, NULL }, - { "mansit", 90, 0, -1, -1, 0, 0, 0, NULL }, - { "pesit", 90, 0, -1, -1, 0, 0, 0, NULL }, - { "sklatk", 70, 0, -1, -1, 0, 0, 0, NULL }, - { "sgtatk", 70, 0, -1, -1, 0, 0, 0, NULL }, - { "skepch", 70, 0, -1, -1, 0, 0, 0, NULL }, - { "vilatk", 70, 0, -1, -1, 0, 0, 0, NULL }, - { "claw", 70, 0, -1, -1, 0, 0, 0, NULL }, - { "skeswg", 70, 0, -1, -1, 0, 0, 0, NULL }, - { "pldeth", 32, 0, -1, -1, 0, 0, 0, NULL }, - { "pdiehi", 32, 0, -1, -1, 0, 0, 0, NULL }, - { "podth1", 70, 0, -1, -1, 0, 0, 0, NULL }, - { "podth2", 70, 0, -1, -1, 0, 0, 0, NULL }, - { "podth3", 70, 0, -1, -1, 0, 0, 0, NULL }, - { "bgdth1", 70, 0, -1, -1, 0, 0, 0, NULL }, - { "bgdth2", 70, 0, -1, -1, 0, 0, 0, NULL }, - { "sgtdth", 70, 0, -1, -1, 0, 0, 0, NULL }, - { "cacdth", 70, 0, -1, -1, 0, 0, 0, NULL }, - { "skldth", 70, 0, -1, -1, 0, 0, 0, NULL }, - { "brsdth", 32, 0, -1, -1, 0, 0, 0, NULL }, - { "cybdth", 32, 0, -1, -1, 0, 0, 0, NULL }, - { "spidth", 32, 0, -1, -1, 0, 0, 0, NULL }, - { "bspdth", 32, 0, -1, -1, 0, 0, 0, NULL }, - { "vildth", 32, 0, -1, -1, 0, 0, 0, NULL }, - { "kntdth", 32, 0, -1, -1, 0, 0, 0, NULL }, - { "pedth", 32, 0, -1, -1, 0, 0, 0, NULL }, - { "skedth", 32, 0, -1, -1, 0, 0, 0, NULL }, - { "posact", 120, 0, -1, -1, 0, 0, 0, NULL }, - { "bgact", 120, 0, -1, -1, 0, 0, 0, NULL }, - { "dmact", 120, 0, -1, -1, 0, 0, 0, NULL }, - { "bspact", 100, 0, -1, -1, 0, 0, 0, NULL }, - { "bspwlk", 100, 0, -1, -1, 0, 0, 0, NULL }, - { "vilact", 100, 0, -1, -1, 0, 0, 0, NULL }, - { "noway", 78, 0, -1, -1, 0, 0, 0, NULL }, - { "barexp", 60, 0, -1, -1, 0, 0, 0, NULL }, - { "punch", 64, 0, -1, -1, 0, 0, 0, NULL }, - { "hoof", 70, 0, -1, -1, 0, 0, 0, NULL }, - { "metal", 70, 0, -1, -1, 0, 0, 0, NULL }, - { "chgun", 64, &S_sfx[sfx_pistol], 150, 0, 0, 0, 0, NULL }, - { "tink", 60, 0, -1, -1, 0, 0, 0, NULL }, - { "bdopn", 100, 0, -1, -1, 0, 0, 0, NULL }, - { "bdcls", 100, 0, -1, -1, 0, 0, 0, NULL }, - { "itmbk", 100, 0, -1, -1, 0, 0, 0, NULL }, - { "flame", 32, 0, -1, -1, 0, 0, 0, NULL }, - { "flamst", 32, 0, -1, -1, 0, 0, 0, NULL }, - { "getpow", 60, 0, -1, -1, 0, 0, 0, NULL }, - { "bospit", 70, 0, -1, -1, 0, 0, 0, NULL }, - { "boscub", 70, 0, -1, -1, 0, 0, 0, NULL }, - { "bossit", 70, 0, -1, -1, 0, 0, 0, NULL }, - { "bospn", 70, 0, -1, -1, 0, 0, 0, NULL }, - { "bosdth", 70, 0, -1, -1, 0, 0, 0, NULL }, - { "manatk", 70, 0, -1, -1, 0, 0, 0, NULL }, - { "mandth", 70, 0, -1, -1, 0, 0, 0, NULL }, - { "sssit", 70, 0, -1, -1, 0, 0, 0, NULL }, - { "ssdth", 70, 0, -1, -1, 0, 0, 0, NULL }, - { "keenpn", 70, 0, -1, -1, 0, 0, 0, NULL }, - { "keendt", 70, 0, -1, -1, 0, 0, 0, NULL }, - { "skeact", 70, 0, -1, -1, 0, 0, 0, NULL }, - { "skesit", 70, 0, -1, -1, 0, 0, 0, NULL }, - { "skeatk", 70, 0, -1, -1, 0, 0, 0, NULL }, - { "radio", 60, 0, -1, -1, 0, 0, 0, NULL } + SOUND("none", 0), + SOUND("pistol", 64), + SOUND("shotgn", 64), + SOUND("sgcock", 64), + SOUND("dshtgn", 64), + SOUND("dbopn", 64), + SOUND("dbcls", 64), + SOUND("dbload", 64), + SOUND("plasma", 64), + SOUND("bfg", 64), + SOUND("sawup", 64), + SOUND("sawidl", 118), + SOUND("sawful", 64), + SOUND("sawhit", 64), + SOUND("rlaunc", 64), + SOUND("rxplod", 70), + SOUND("firsht", 70), + SOUND("firxpl", 70), + SOUND("pstart", 100), + SOUND("pstop", 100), + SOUND("doropn", 100), + SOUND("dorcls", 100), + SOUND("stnmov", 119), + SOUND("swtchn", 78), + SOUND("swtchx", 78), + SOUND("plpain", 96), + SOUND("dmpain", 96), + SOUND("popain", 96), + SOUND("vipain", 96), + SOUND("mnpain", 96), + SOUND("pepain", 96), + SOUND("slop", 78), + SOUND("itemup", 78), + SOUND("wpnup", 78), + SOUND("oof", 96), + SOUND("telept", 32), + SOUND("posit1", 98), + SOUND("posit2", 98), + SOUND("posit3", 98), + SOUND("bgsit1", 98), + SOUND("bgsit2", 98), + SOUND("sgtsit", 98), + SOUND("cacsit", 98), + SOUND("brssit", 94), + SOUND("cybsit", 92), + SOUND("spisit", 90), + SOUND("bspsit", 90), + SOUND("kntsit", 90), + SOUND("vilsit", 90), + SOUND("mansit", 90), + SOUND("pesit", 90), + SOUND("sklatk", 70), + SOUND("sgtatk", 70), + SOUND("skepch", 70), + SOUND("vilatk", 70), + SOUND("claw", 70), + SOUND("skeswg", 70), + SOUND("pldeth", 32), + SOUND("pdiehi", 32), + SOUND("podth1", 70), + SOUND("podth2", 70), + SOUND("podth3", 70), + SOUND("bgdth1", 70), + SOUND("bgdth2", 70), + SOUND("sgtdth", 70), + SOUND("cacdth", 70), + SOUND("skldth", 70), + SOUND("brsdth", 32), + SOUND("cybdth", 32), + SOUND("spidth", 32), + SOUND("bspdth", 32), + SOUND("vildth", 32), + SOUND("kntdth", 32), + SOUND("pedth", 32), + SOUND("skedth", 32), + SOUND("posact", 120), + SOUND("bgact", 120), + SOUND("dmact", 120), + SOUND("bspact", 100), + SOUND("bspwlk", 100), + SOUND("vilact", 100), + SOUND("noway", 78), + SOUND("barexp", 60), + SOUND("punch", 64), + SOUND("hoof", 70), + SOUND("metal", 70), + SOUND_LINK("chgun", 64, sfx_pistol, 150, 0), + SOUND("tink", 60), + SOUND("bdopn", 100), + SOUND("bdcls", 100), + SOUND("itmbk", 100), + SOUND("flame", 32), + SOUND("flamst", 32), + SOUND("getpow", 60), + SOUND("bospit", 70), + SOUND("boscub", 70), + SOUND("bossit", 70), + SOUND("bospn", 70), + SOUND("bosdth", 70), + SOUND("manatk", 70), + SOUND("mandth", 70), + SOUND("sssit", 70), + SOUND("ssdth", 70), + SOUND("keenpn", 70), + SOUND("keendt", 70), + SOUND("skeact", 70), + SOUND("skesit", 70), + SOUND("skeatk", 70), + SOUND("radio", 60), }; diff --git a/src/heretic/Makefile.am b/src/heretic/Makefile.am index d240bae3..a67b5f06 100644 --- a/src/heretic/Makefile.am +++ b/src/heretic/Makefile.am @@ -1,4 +1,6 @@ +AM_CFLAGS=-I.. + noinst_LIBRARIES=libheretic.a SOURCE_FILES= \ @@ -12,7 +14,6 @@ d_net.c \ dstrings.h \ f_finale.c \ g_game.c \ - i_header.h \ info.c info.h \ in_lude.c \ m_misc.c \ @@ -46,7 +47,7 @@ r_segs.c \ r_things.c \ sb_bar.c \ sounds.c sounds.h \ - soundst.h \ +s_sound.c s_sound.h \ v_video.c EXTRA_DIST= \ @@ -55,5 +56,4 @@ i_cyber.c \ i_ibm.c libheretic_a_SOURCES=$(SOURCE_FILES) -libheretic_a_CFLAGS=-I.. diff --git a/src/heretic/ct_chat.c b/src/heretic/ct_chat.c index 73a43fc1..d83325b4 100644 --- a/src/heretic/ct_chat.c +++ b/src/heretic/ct_chat.c @@ -28,7 +28,7 @@ #include <ctype.h> #include "doomdef.h" #include "p_local.h" -#include "soundst.h" +#include "s_sound.h" #define QUEUESIZE 128 #define MESSAGESIZE 128 diff --git a/src/heretic/d_main.c b/src/heretic/d_main.c index 9d561013..283bd50d 100644 --- a/src/heretic/d_main.c +++ b/src/heretic/d_main.c @@ -33,7 +33,7 @@ #include <stdlib.h> #include "doomdef.h" #include "p_local.h" -#include "soundst.h" +#include "s_sound.h" boolean shareware = false; // true if only episode 1 present boolean ExtendedWAD = false; // true if episodes 4 and 5 present diff --git a/src/heretic/f_finale.c b/src/heretic/f_finale.c index 67e0516b..b723f731 100644 --- a/src/heretic/f_finale.c +++ b/src/heretic/f_finale.c @@ -23,7 +23,7 @@ // F_finale.c #include "doomdef.h" -#include "soundst.h" +#include "s_sound.h" #include <ctype.h> int finalestage; // 0 = text, 1 = art screen diff --git a/src/heretic/g_game.c b/src/heretic/g_game.c index 252095a9..daaa8d74 100644 --- a/src/heretic/g_game.c +++ b/src/heretic/g_game.c @@ -27,7 +27,7 @@ #include <string.h> #include "doomdef.h" #include "p_local.h" -#include "soundst.h" +#include "s_sound.h" // Macros diff --git a/src/heretic/i_header.h b/src/heretic/i_header.h deleted file mode 100644 index 2cf6af46..00000000 --- a/src/heretic/i_header.h +++ /dev/null @@ -1,99 +0,0 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// Copyright(C) 1993-1996 Id Software, Inc. -// Copyright(C) 1993-2008 Raven Software -// -// 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. -// -//----------------------------------------------------------------------------- -#ifndef __I_HEADER_H__ -#define __I_HEADER_H__ - -#include "doomdef.h" - -//-------- -//SOUND IO -//-------- -#define FREQ_LOW 0x40 -#define FREQ_NORM 0x80 -#define FREQ_HIGH 0xff - -void I_SetMasterVolume(int volume); - -void I_TurnOffSfx(void); -void I_TurnOnSfx(void); -void I_TurnOffMusic(void); -void I_TurnOnMusic(void); - -// MUSIC I/O -// - -int I_RegisterSong(void *songdata); -// called by anything that wants to register a song lump with the sound lib -// calls Paul's function of the similar name to register music only. -// note that the song data is the same for any sound card and is paul's -// MUS format. Returns a handle which will be passed to all other music -// functions. - -void I_UnregisterSong(int handle); -// called by anything which is finished with a song and no longer needs -// the sound library to be aware of it. All songs should be stopped -// before calling this, but it will double check and stop it if necessary. - -void I_LoopSong(int handle); -// called by anything that wishes to start music. -// plays a song, and when the song is done, starts playing it again in -// an endless loop. the start is faded in over three seconds. - -void I_FadeOutSong(int handle, int fotime); -// called by anything that wishes to stop music. -// fades out the song over <fotime> milliseconds. - -void I_StopSong(int handle); -// called by anything that wishes to stop music. -// stops a song abruptly. - -// SFX I/O -// - -void *I_GetSoundEffect(char *soundname); -// called by routines which wish to play a sound effect at some later -// time. Pass it the lump name of a sound effect WITHOUT the sfx -// prefix. This means the maximum name length is 7 letters/digits. -// The prefixes for different sound cards are 'S','M','A', and 'P'. -// They refer to the card type. The routine will cache in the -// appropriate sound effect when it is played. - -void I_UngetSoundEffect(void *soundset); -// called by routines which wish to no longer use the sounds at all -// frees up the associated structure. It stops any currently playing -// sound effects. - -void I_StartSound(channel_t * c, int vol, int sep, int pitch, int priority); -// Starts a sound in a particular sound channel - -void I_UpdateSoundParams(channel_t * c, int vol, int sep, int pitch); -// Updates the volume, separation, and pitch of a sound channel - -void I_StopSound(channel_t * c); -// Stops a sound channel - -int I_SoundIsPlaying(channel_t * c); -// called by S_*()'s to see if a channel is still playing. Returns 0 -// if no longer playing, 1 if playing. - -#endif diff --git a/src/heretic/i_ibm.c b/src/heretic/i_ibm.c index fb667e90..5058bf7e 100644 --- a/src/heretic/i_ibm.c +++ b/src/heretic/i_ibm.c @@ -30,8 +30,6 @@ #include <graph.h> #include "doomdef.h" #include "r_local.h" -#include "sounds.h" -#include "i_sound.h" #include "dmx.h" // Macros @@ -73,598 +71,6 @@ extern int usemouse, usejoystick; extern void **lumpcache; /* -=============================================================================== - - MUSIC & SFX API - -=============================================================================== -*/ - -static channel_t channel[MAX_CHANNELS]; - -static int rs; //the current registered song. -int mus_song = -1; -int mus_lumpnum; -void *mus_sndptr; -byte *soundCurve; - -extern sfxinfo_t S_sfx[]; -extern musicinfo_t S_music[]; - -extern int snd_DesiredMusicDevice; -extern int snd_DesiredSfxDevice; -extern int snd_MaxVolume; -extern int snd_MusicVolume; -extern int snd_Channels; - -extern int startepisode; -extern int startmap; - -int AmbChan; - -void S_Start(void) -{ - int i; - - S_StartSong((gameepisode - 1) * 9 + gamemap - 1, true); - - //stop all sounds - for (i = 0; i < snd_Channels; i++) - { - if (channel[i].handle) - { - S_StopSound(channel[i].mo); - } - } - memset(channel, 0, 8 * sizeof(channel_t)); -} - -void S_StartSong(int song, boolean loop) -{ - if (song == mus_song) - { // don't replay an old song - return; - } - if (rs) - { - I_StopSong(rs); - I_UnRegisterSong(rs); - Z_ChangeTag(lumpcache[mus_lumpnum], PU_CACHE); -#ifdef __WATCOMC__ - _dpmi_unlockregion(mus_sndptr, lumpinfo[mus_lumpnum].size); -#endif - } - if (song < mus_e1m1 || song > NUMMUSIC) - { - return; - } - mus_lumpnum = W_GetNumForName(S_music[song].name); - mus_sndptr = W_CacheLumpNum(mus_lumpnum, PU_MUSIC); -#ifdef __WATCOMC__ - _dpmi_lockregion(mus_sndptr, lumpinfo[mus_lumpnum].size); -#endif - rs = I_RegisterSong(mus_sndptr); - I_PlaySong(rs, loop); //'true' denotes endless looping. - mus_song = song; -} - -void S_StartSound(mobj_t * origin, int sound_id) -{ - int dist, vol; - int i; - int sound; - int priority; - int sep; - int angle; - int absx; - int absy; - - static int sndcount = 0; - int chan; - - if (sound_id == 0 || snd_MaxVolume == 0) - return; - if (origin == NULL) - { - origin = players[consoleplayer].mo; - } - -// calculate the distance before other stuff so that we can throw out -// sounds that are beyond the hearing range. - absx = abs(origin->x - players[consoleplayer].mo->x); - absy = abs(origin->y - players[consoleplayer].mo->y); - dist = absx + absy - (absx > absy ? absy >> 1 : absx >> 1); - dist >>= FRACBITS; -// dist = P_AproxDistance(origin->x-viewx, origin->y-viewy)>>FRACBITS; - - if (dist >= MAX_SND_DIST) - { -// dist = MAX_SND_DIST - 1; - return; //sound is beyond the hearing range... - } - if (dist < 0) - { - dist = 0; - } - priority = S_sfx[sound_id].priority; - priority *= (10 - (dist / 160)); - if (!S_StopSoundID(sound_id, priority)) - { - return; // other sounds have greater priority - } - for (i = 0; i < snd_Channels; i++) - { - if (origin->player) - { - i = snd_Channels; - break; // let the player have more than one sound. - } - if (origin == channel[i].mo) - { // only allow other mobjs one sound - S_StopSound(channel[i].mo); - break; - } - } - if (i >= snd_Channels) - { - if (sound_id >= sfx_wind) - { - if (AmbChan != -1 && S_sfx[sound_id].priority <= - S_sfx[channel[AmbChan].sound_id].priority) - { - return; //ambient channel already in use - } - else - { - AmbChan = -1; - } - } - for (i = 0; i < snd_Channels; i++) - { - if (channel[i].mo == NULL) - { - break; - } - } - if (i >= snd_Channels) - { - //look for a lower priority sound to replace. - sndcount++; - if (sndcount >= snd_Channels) - { - sndcount = 0; - } - for (chan = 0; chan < snd_Channels; chan++) - { - i = (sndcount + chan) % snd_Channels; - if (priority >= channel[i].priority) - { - chan = -1; //denote that sound should be replaced. - break; - } - } - if (chan != -1) - { - return; //no free channels. - } - else //replace the lower priority sound. - { - if (channel[i].handle) - { - if (I_SoundIsPlaying(channel[i].handle)) - { - I_StopSound(channel[i].handle); - } - if (S_sfx[channel[i].sound_id].usefulness > 0) - { - S_sfx[channel[i].sound_id].usefulness--; - } - - if (AmbChan == i) - { - AmbChan = -1; - } - } - } - } - } - if (S_sfx[sound_id].lumpnum == 0) - { - S_sfx[sound_id].lumpnum = I_GetSfxLumpNum(&S_sfx[sound_id]); - } - if (S_sfx[sound_id].snd_ptr == NULL) - { - S_sfx[sound_id].snd_ptr = W_CacheLumpNum(S_sfx[sound_id].lumpnum, - PU_SOUND); -#ifdef __WATCOMC__ - _dpmi_lockregion(S_sfx[sound_id].snd_ptr, - lumpinfo[S_sfx[sound_id].lumpnum].size); -#endif - } - - // calculate the volume based upon the distance from the sound origin. -// vol = (snd_MaxVolume*16 + dist*(-snd_MaxVolume*16)/MAX_SND_DIST)>>9; - vol = soundCurve[dist]; - - if (origin == players[consoleplayer].mo) - { - sep = 128; - } - else - { - angle = R_PointToAngle2(players[consoleplayer].mo->x, - players[consoleplayer].mo->y, - channel[i].mo->x, channel[i].mo->y); - angle = (angle - viewangle) >> 24; - sep = angle * 2 - 128; - if (sep < 64) - sep = -sep; - if (sep > 192) - sep = 512 - sep; - } - - channel[i].pitch = (byte) (127 + (M_Random() & 7) - (M_Random() & 7)); - channel[i].handle = - I_StartSound(sound_id, S_sfx[sound_id].snd_ptr, vol, sep, - channel[i].pitch, 0); - channel[i].mo = origin; - channel[i].sound_id = sound_id; - channel[i].priority = priority; - if (sound_id >= sfx_wind) - { - AmbChan = i; - } - if (S_sfx[sound_id].usefulness == -1) - { - S_sfx[sound_id].usefulness = 1; - } - else - { - S_sfx[sound_id].usefulness++; - } -} - -void S_StartSoundAtVolume(mobj_t * origin, int sound_id, int volume) -{ - int dist; - int i; - int sep; - - static int sndcount; - int chan; - - if (sound_id == 0 || snd_MaxVolume == 0) - return; - if (origin == NULL) - { - origin = players[consoleplayer].mo; - } - - if (volume == 0) - { - return; - } - volume = (volume * (snd_MaxVolume + 1) * 8) >> 7; - -// no priority checking, as ambient sounds would be the LOWEST. - for (i = 0; i < snd_Channels; i++) - { - if (channel[i].mo == NULL) - { - break; - } - } - if (i >= snd_Channels) - { - return; - } - if (S_sfx[sound_id].lumpnum == 0) - { - S_sfx[sound_id].lumpnum = I_GetSfxLumpNum(&S_sfx[sound_id]); - } - if (S_sfx[sound_id].snd_ptr == NULL) - { - S_sfx[sound_id].snd_ptr = W_CacheLumpNum(S_sfx[sound_id].lumpnum, - PU_SOUND); -#ifdef __WATCOMC__ - _dpmi_lockregion(S_sfx[sound_id].snd_ptr, - lumpinfo[S_sfx[sound_id].lumpnum].size); -#endif - } - channel[i].pitch = (byte) (127 - (M_Random() & 3) + (M_Random() & 3)); - channel[i].handle = - I_StartSound(sound_id, S_sfx[sound_id].snd_ptr, volume, 128, - channel[i].pitch, 0); - channel[i].mo = origin; - channel[i].sound_id = sound_id; - channel[i].priority = 1; //super low priority. - if (S_sfx[sound_id].usefulness == -1) - { - S_sfx[sound_id].usefulness = 1; - } - else - { - S_sfx[sound_id].usefulness++; - } -} - -boolean S_StopSoundID(int sound_id, int priority) -{ - int i; - int lp; //least priority - int found; - - if (S_sfx[sound_id].numchannels == -1) - { - return (true); - } - lp = -1; //denote the argument sound_id - found = 0; - for (i = 0; i < snd_Channels; i++) - { - if (channel[i].sound_id == sound_id && channel[i].mo) - { - found++; //found one. Now, should we replace it?? - if (priority >= channel[i].priority) - { // if we're gonna kill one, then this'll be it - lp = i; - priority = channel[i].priority; - } - } - } - if (found < S_sfx[sound_id].numchannels) - { - return (true); - } - else if (lp == -1) - { - return (false); // don't replace any sounds - } - if (channel[lp].handle) - { - if (I_SoundIsPlaying(channel[lp].handle)) - { - I_StopSound(channel[lp].handle); - } - if (S_sfx[channel[i].sound_id].usefulness > 0) - { - S_sfx[channel[i].sound_id].usefulness--; - } - channel[lp].mo = NULL; - } - return (true); -} - -void S_StopSound(mobj_t * origin) -{ - int i; - - for (i = 0; i < snd_Channels; i++) - { - if (channel[i].mo == origin) - { - I_StopSound(channel[i].handle); - if (S_sfx[channel[i].sound_id].usefulness > 0) - { - S_sfx[channel[i].sound_id].usefulness--; - } - channel[i].handle = 0; - channel[i].mo = NULL; - if (AmbChan == i) - { - AmbChan = -1; - } - } - } -} - -void S_SoundLink(mobj_t * oldactor, mobj_t * newactor) -{ - int i; - - for (i = 0; i < snd_Channels; i++) - { - if (channel[i].mo == oldactor) - channel[i].mo = newactor; - } -} - -void S_PauseSound(void) -{ - I_PauseSong(rs); -} - -void S_ResumeSound(void) -{ - I_ResumeSong(rs); -} - -static int nextcleanup; - -void S_UpdateSounds(mobj_t * listener) -{ - int i, dist, vol; - int angle; - int sep; - int priority; - int absx; - int absy; - - listener = players[consoleplayer].mo; - if (snd_MaxVolume == 0) - { - return; - } - if (nextcleanup < gametic) - { - for (i = 0; i < NUMSFX; i++) - { - if (S_sfx[i].usefulness == 0 && S_sfx[i].snd_ptr) - { - if (lumpcache[S_sfx[i].lumpnum]) - { - if (((memblock_t - *) ((byte *) (lumpcache[S_sfx[i].lumpnum]) - - sizeof(memblock_t)))->id == 0x1d4a11) - { // taken directly from the Z_ChangeTag macro - Z_ChangeTag2(lumpcache[S_sfx[i].lumpnum], PU_CACHE); -#ifdef __WATCOMC__ - _dpmi_unlockregion(S_sfx[i].snd_ptr, - lumpinfo[S_sfx[i].lumpnum].size); -#endif - } - } - S_sfx[i].usefulness = -1; - S_sfx[i].snd_ptr = NULL; - } - } - nextcleanup = gametic + 35; //CLEANUP DEBUG cleans every second - } - for (i = 0; i < snd_Channels; i++) - { - if (!channel[i].handle || S_sfx[channel[i].sound_id].usefulness == -1) - { - continue; - } - if (!I_SoundIsPlaying(channel[i].handle)) - { - if (S_sfx[channel[i].sound_id].usefulness > 0) - { - S_sfx[channel[i].sound_id].usefulness--; - } - channel[i].handle = 0; - channel[i].mo = NULL; - channel[i].sound_id = 0; - if (AmbChan == i) - { - AmbChan = -1; - } - } - if (channel[i].mo == NULL || channel[i].sound_id == 0 - || channel[i].mo == players[consoleplayer].mo) - { - continue; - } - else - { - absx = abs(channel[i].mo->x - players[consoleplayer].mo->x); - absy = abs(channel[i].mo->y - players[consoleplayer].mo->y); - dist = absx + absy - (absx > absy ? absy >> 1 : absx >> 1); - dist >>= FRACBITS; -// dist = P_AproxDistance(channel[i].mo->x-listener->x, channel[i].mo->y-listener->y)>>FRACBITS; - - if (dist >= MAX_SND_DIST) - { - S_StopSound(channel[i].mo); - continue; - } - if (dist < 0) - dist = 0; - -// calculate the volume based upon the distance from the sound origin. -// vol = (*((byte *)W_CacheLumpName("SNDCURVE", PU_CACHE)+dist)*(snd_MaxVolume*8))>>7; - vol = soundCurve[dist]; - - angle = R_PointToAngle2(players[consoleplayer].mo->x, - players[consoleplayer].mo->y, - channel[i].mo->x, channel[i].mo->y); - angle = (angle - viewangle) >> 24; - sep = angle * 2 - 128; - if (sep < 64) - sep = -sep; - if (sep > 192) - sep = 512 - sep; - I_UpdateSoundParams(channel[i].handle, vol, sep, - channel[i].pitch); - priority = S_sfx[channel[i].sound_id].priority; - priority *= (10 - (dist >> 8)); - channel[i].priority = priority; - } - } -} - -void S_Init(void) -{ - soundCurve = Z_Malloc(MAX_SND_DIST, PU_STATIC, NULL); - I_StartupSound(); - if (snd_Channels > 8) - { - snd_Channels = 8; - } - I_SetChannels(snd_Channels); - I_SetMusicVolume(snd_MusicVolume); - S_SetMaxVolume(true); -} - -void S_GetChannelInfo(SoundInfo_t * s) -{ - int i; - ChanInfo_t *c; - - s->channelCount = snd_Channels; - s->musicVolume = snd_MusicVolume; - s->soundVolume = snd_MaxVolume; - for (i = 0; i < snd_Channels; i++) - { - c = &s->chan[i]; - c->id = channel[i].sound_id; - c->priority = channel[i].priority; - c->name = S_sfx[c->id].name; - c->mo = channel[i].mo; - c->distance = P_AproxDistance(c->mo->x - viewx, c->mo->y - viewy) - >> FRACBITS; - } -} - -void S_SetMaxVolume(boolean fullprocess) -{ - int i; - - if (!fullprocess) - { - soundCurve[0] = - (*((byte *) W_CacheLumpName("SNDCURVE", PU_CACHE)) * - (snd_MaxVolume * 8)) >> 7; - } - else - { - for (i = 0; i < MAX_SND_DIST; i++) - { - soundCurve[i] = - (*((byte *) W_CacheLumpName("SNDCURVE", PU_CACHE) + i) * - (snd_MaxVolume * 8)) >> 7; - } - } -} - -static boolean musicPaused; -void S_SetMusicVolume(void) -{ - I_SetMusicVolume(snd_MusicVolume); - if (snd_MusicVolume == 0) - { - I_PauseSong(rs); - musicPaused = true; - } - else if (musicPaused) - { - musicPaused = false; - I_ResumeSong(rs); - } -} - -void S_ShutDown(void) -{ - extern int tsm_ID; - if (tsm_ID != -1) - { - I_StopSong(rs); - I_UnRegisterSong(rs); - I_ShutdownSound(); - } -} - -/* ============================================================================= CONSTANTS diff --git a/src/heretic/i_sound.h b/src/heretic/i_sound.h deleted file mode 100644 index efe3dadf..00000000 --- a/src/heretic/i_sound.h +++ /dev/null @@ -1,45 +0,0 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// Copyright(C) 1993-1996 Id Software, Inc. -// Copyright(C) 1993-2008 Raven Software -// -// 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. -// -//----------------------------------------------------------------------------- -#ifndef __SOUND__ -#define __SOUND__ - -#define SND_TICRATE 140 // tic rate for updating sound -#define SND_MAXSONGS 40 // max number of songs in game -#define SND_SAMPLERATE 11025 // sample rate of sound effects - -typedef enum -{ - snd_none, - snd_PC, - snd_Adlib, - snd_SB, - snd_PAS, - snd_GUS, - snd_MPU, - snd_MPU2, - snd_MPU3, - snd_AWE, - NUM_SCARDS -} cardenum_t; - -#endif diff --git a/src/heretic/in_lude.c b/src/heretic/in_lude.c index 0d4e1a0e..8cd3c5da 100644 --- a/src/heretic/in_lude.c +++ b/src/heretic/in_lude.c @@ -29,7 +29,7 @@ */ #include "doomdef.h" -#include "soundst.h" +#include "s_sound.h" typedef enum { diff --git a/src/heretic/m_misc.c b/src/heretic/m_misc.c index ff155419..dd39ec1e 100644 --- a/src/heretic/m_misc.c +++ b/src/heretic/m_misc.c @@ -35,7 +35,7 @@ #include <ctype.h> #include "doomdef.h" -#include "soundst.h" +#include "s_sound.h" int myargc; char **myargv; diff --git a/src/heretic/mn_menu.c b/src/heretic/mn_menu.c index a56e2dc3..8d828daa 100644 --- a/src/heretic/mn_menu.c +++ b/src/heretic/mn_menu.c @@ -27,7 +27,7 @@ #include "doomdef.h" #include "p_local.h" #include "r_local.h" -#include "soundst.h" +#include "s_sound.h" // Macros diff --git a/src/heretic/p_ceilng.c b/src/heretic/p_ceilng.c index 672b8adb..cc596500 100644 --- a/src/heretic/p_ceilng.c +++ b/src/heretic/p_ceilng.c @@ -23,7 +23,7 @@ #include "doomdef.h" #include "p_local.h" -#include "soundst.h" +#include "s_sound.h" //================================================================== //================================================================== diff --git a/src/heretic/p_doors.c b/src/heretic/p_doors.c index 7598440e..619f6ca6 100644 --- a/src/heretic/p_doors.c +++ b/src/heretic/p_doors.c @@ -25,7 +25,7 @@ #include "doomdef.h" #include "p_local.h" -#include "soundst.h" +#include "s_sound.h" //================================================================== //================================================================== diff --git a/src/heretic/p_enemy.c b/src/heretic/p_enemy.c index b6c476f6..714ce724 100644 --- a/src/heretic/p_enemy.c +++ b/src/heretic/p_enemy.c @@ -26,7 +26,7 @@ #include <stdlib.h> #include "doomdef.h" #include "p_local.h" -#include "soundst.h" +#include "s_sound.h" // Macros diff --git a/src/heretic/p_floor.c b/src/heretic/p_floor.c index c370f165..f00447e4 100644 --- a/src/heretic/p_floor.c +++ b/src/heretic/p_floor.c @@ -22,7 +22,7 @@ //----------------------------------------------------------------------------- #include "doomdef.h" #include "p_local.h" -#include "soundst.h" +#include "s_sound.h" //================================================================== //================================================================== diff --git a/src/heretic/p_inter.c b/src/heretic/p_inter.c index 85ee381a..82225c7c 100644 --- a/src/heretic/p_inter.c +++ b/src/heretic/p_inter.c @@ -25,7 +25,7 @@ #include "doomdef.h" #include "p_local.h" -#include "soundst.h" +#include "s_sound.h" #define BONUSADD 6 diff --git a/src/heretic/p_map.c b/src/heretic/p_map.c index f189e798..4a61beae 100644 --- a/src/heretic/p_map.c +++ b/src/heretic/p_map.c @@ -26,7 +26,7 @@ #include "doomdef.h" #include "p_local.h" -#include "soundst.h" +#include "s_sound.h" /* =============================================================================== diff --git a/src/heretic/p_mobj.c b/src/heretic/p_mobj.c index 1e4596d7..839e9744 100644 --- a/src/heretic/p_mobj.c +++ b/src/heretic/p_mobj.c @@ -26,7 +26,7 @@ #include "doomdef.h" #include "p_local.h" #include "sounds.h" -#include "soundst.h" +#include "s_sound.h" void G_PlayerReborn(int player); void P_SpawnMapThing(mapthing_t * mthing); diff --git a/src/heretic/p_plats.c b/src/heretic/p_plats.c index f42b9926..7c68233f 100644 --- a/src/heretic/p_plats.c +++ b/src/heretic/p_plats.c @@ -25,7 +25,7 @@ #include "doomdef.h" #include "p_local.h" -#include "soundst.h" +#include "s_sound.h" plat_t *activeplats[MAXPLATS]; diff --git a/src/heretic/p_pspr.c b/src/heretic/p_pspr.c index 4c7b9811..79976b5c 100644 --- a/src/heretic/p_pspr.c +++ b/src/heretic/p_pspr.c @@ -25,7 +25,7 @@ #include "doomdef.h" #include "p_local.h" -#include "soundst.h" +#include "s_sound.h" // Macros diff --git a/src/heretic/p_setup.c b/src/heretic/p_setup.c index 7e775ce8..03b1a59c 100644 --- a/src/heretic/p_setup.c +++ b/src/heretic/p_setup.c @@ -27,7 +27,7 @@ #include <stdlib.h> #include "doomdef.h" #include "p_local.h" -#include "soundst.h" +#include "s_sound.h" void P_SpawnMapThing(mapthing_t * mthing); diff --git a/src/heretic/p_spec.c b/src/heretic/p_spec.c index aff01e11..5be43eae 100644 --- a/src/heretic/p_spec.c +++ b/src/heretic/p_spec.c @@ -25,7 +25,7 @@ #include "doomdef.h" #include "p_local.h" -#include "soundst.h" +#include "s_sound.h" // Macros diff --git a/src/heretic/p_switch.c b/src/heretic/p_switch.c index 7fd8e15b..29b057e7 100644 --- a/src/heretic/p_switch.c +++ b/src/heretic/p_switch.c @@ -23,7 +23,7 @@ #include "doomdef.h" #include "p_local.h" -#include "soundst.h" +#include "s_sound.h" //================================================================== // diff --git a/src/heretic/p_telept.c b/src/heretic/p_telept.c index 2d7c1049..287814f3 100644 --- a/src/heretic/p_telept.c +++ b/src/heretic/p_telept.c @@ -25,7 +25,7 @@ #include "doomdef.h" #include "p_local.h" -#include "soundst.h" +#include "s_sound.h" //---------------------------------------------------------------------------- // diff --git a/src/heretic/p_user.c b/src/heretic/p_user.c index ca587abb..67ae00d7 100644 --- a/src/heretic/p_user.c +++ b/src/heretic/p_user.c @@ -27,7 +27,7 @@ #include "doomdef.h" #include "p_local.h" -#include "soundst.h" +#include "s_sound.h" void P_PlayerNextArtifact(player_t * player); diff --git a/src/heretic/s_sound.c b/src/heretic/s_sound.c new file mode 100644 index 00000000..2a53c314 --- /dev/null +++ b/src/heretic/s_sound.c @@ -0,0 +1,576 @@ +// Emacs style mode select -*- C++ -*- +//----------------------------------------------------------------------------- +// +// Copyright(C) 1993-1996 Id Software, Inc. +// Copyright(C) 1993-2008 Raven Software +// +// 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. +// +//----------------------------------------------------------------------------- + +#include <stdlib.h> + +#include "doomdef.h" +#include "sounds.h" +#include "s_sound.h" +#include "i_sound.h" +#include "r_local.h" +#include "p_local.h" + +#include "w_wad.h" +#include "z_zone.h" + +/* +=============================================================================== + + MUSIC & SFX API + +=============================================================================== +*/ + +boolean S_StopSoundID(int sound_id, int priority); + +static channel_t channel[MAX_CHANNELS]; + +static void *rs; // Handle for the registered song +int mus_song = -1; +int mus_lumpnum; +void *mus_sndptr; +byte *soundCurve; + +extern sfxinfo_t S_sfx[]; +extern musicinfo_t S_music[]; + +extern int snd_DesiredMusicDevice; +extern int snd_DesiredSfxDevice; +extern int snd_MaxVolume; +extern int snd_MusicVolume; +extern int snd_Channels; + +extern int startepisode; +extern int startmap; + +int AmbChan; + +void S_Start(void) +{ + int i; + + S_StartSong((gameepisode - 1) * 9 + gamemap - 1, true); + + //stop all sounds + for (i = 0; i < snd_Channels; i++) + { + if (channel[i].handle) + { + S_StopSound(channel[i].mo); + } + } + memset(channel, 0, 8 * sizeof(channel_t)); +} + +void S_StartSong(int song, boolean loop) +{ + int mus_len; + + if (song == mus_song) + { // don't replay an old song + return; + } + + if (rs != NULL) + { + I_StopSong(); + I_UnRegisterSong(rs); + } + + if (song < mus_e1m1 || song > NUMMUSIC) + { + return; + } + mus_lumpnum = W_GetNumForName(S_music[song].name); + mus_sndptr = W_CacheLumpNum(mus_lumpnum, PU_MUSIC); + mus_len = W_LumpLength(mus_lumpnum); + rs = I_RegisterSong(mus_sndptr, mus_len); + I_PlaySong(rs, loop); //'true' denotes endless looping. + mus_song = song; +} + +void S_StartSound(mobj_t * origin, int sound_id) +{ + int dist, vol; + int i; + int priority; + int sep; + int angle; + int absx; + int absy; + + static int sndcount = 0; + int chan; + + if (sound_id == 0 || snd_MaxVolume == 0) + return; + if (origin == NULL) + { + origin = players[consoleplayer].mo; + } + +// calculate the distance before other stuff so that we can throw out +// sounds that are beyond the hearing range. + absx = abs(origin->x - players[consoleplayer].mo->x); + absy = abs(origin->y - players[consoleplayer].mo->y); + dist = absx + absy - (absx > absy ? absy >> 1 : absx >> 1); + dist >>= FRACBITS; +// dist = P_AproxDistance(origin->x-viewx, origin->y-viewy)>>FRACBITS; + + if (dist >= MAX_SND_DIST) + { +// dist = MAX_SND_DIST - 1; + return; //sound is beyond the hearing range... + } + if (dist < 0) + { + dist = 0; + } + priority = S_sfx[sound_id].priority; + priority *= (10 - (dist / 160)); + if (!S_StopSoundID(sound_id, priority)) + { + return; // other sounds have greater priority + } + for (i = 0; i < snd_Channels; i++) + { + if (origin->player) + { + i = snd_Channels; + break; // let the player have more than one sound. + } + if (origin == channel[i].mo) + { // only allow other mobjs one sound + S_StopSound(channel[i].mo); + break; + } + } + if (i >= snd_Channels) + { + if (sound_id >= sfx_wind) + { + if (AmbChan != -1 && S_sfx[sound_id].priority <= + S_sfx[channel[AmbChan].sound_id].priority) + { + return; //ambient channel already in use + } + else + { + AmbChan = -1; + } + } + for (i = 0; i < snd_Channels; i++) + { + if (channel[i].mo == NULL) + { + break; + } + } + if (i >= snd_Channels) + { + //look for a lower priority sound to replace. + sndcount++; + if (sndcount >= snd_Channels) + { + sndcount = 0; + } + for (chan = 0; chan < snd_Channels; chan++) + { + i = (sndcount + chan) % snd_Channels; + if (priority >= channel[i].priority) + { + chan = -1; //denote that sound should be replaced. + break; + } + } + if (chan != -1) + { + return; //no free channels. + } + else //replace the lower priority sound. + { + if (channel[i].handle) + { + if (I_SoundIsPlaying(channel[i].handle)) + { + I_StopSound(channel[i].handle); + } + if (S_sfx[channel[i].sound_id].usefulness > 0) + { + S_sfx[channel[i].sound_id].usefulness--; + } + + if (AmbChan == i) + { + AmbChan = -1; + } + } + } + } + } + if (S_sfx[sound_id].lumpnum == 0) + { + S_sfx[sound_id].lumpnum = I_GetSfxLumpNum(&S_sfx[sound_id]); + } + + // calculate the volume based upon the distance from the sound origin. +// vol = (snd_MaxVolume*16 + dist*(-snd_MaxVolume*16)/MAX_SND_DIST)>>9; + vol = soundCurve[dist]; + + if (origin == players[consoleplayer].mo) + { + sep = 128; + } + else + { + angle = R_PointToAngle2(players[consoleplayer].mo->x, + players[consoleplayer].mo->y, + channel[i].mo->x, channel[i].mo->y); + angle = (angle - viewangle) >> 24; + sep = angle * 2 - 128; + if (sep < 64) + sep = -sep; + if (sep > 192) + sep = 512 - sep; + } + + // TODO: Play pitch-shifted sounds as in Vanilla Heretic + + channel[i].pitch = (byte) (127 + (M_Random() & 7) - (M_Random() & 7)); + channel[i].handle = I_StartSound(&S_sfx[sound_id], i, vol, sep); + channel[i].mo = origin; + channel[i].sound_id = sound_id; + channel[i].priority = priority; + if (sound_id >= sfx_wind) + { + AmbChan = i; + } + if (S_sfx[sound_id].usefulness == -1) + { + S_sfx[sound_id].usefulness = 1; + } + else + { + S_sfx[sound_id].usefulness++; + } +} + +void S_StartSoundAtVolume(mobj_t * origin, int sound_id, int volume) +{ + int i; + + if (sound_id == 0 || snd_MaxVolume == 0) + return; + if (origin == NULL) + { + origin = players[consoleplayer].mo; + } + + if (volume == 0) + { + return; + } + volume = (volume * (snd_MaxVolume + 1) * 8) >> 7; + +// no priority checking, as ambient sounds would be the LOWEST. + for (i = 0; i < snd_Channels; i++) + { + if (channel[i].mo == NULL) + { + break; + } + } + if (i >= snd_Channels) + { + return; + } + if (S_sfx[sound_id].lumpnum == 0) + { + S_sfx[sound_id].lumpnum = I_GetSfxLumpNum(&S_sfx[sound_id]); + } + + // TODO: Pitch shifting. + channel[i].pitch = (byte) (127 - (M_Random() & 3) + (M_Random() & 3)); + channel[i].handle = I_StartSound(&S_sfx[sound_id], i, volume, 128); + channel[i].mo = origin; + channel[i].sound_id = sound_id; + channel[i].priority = 1; //super low priority. + if (S_sfx[sound_id].usefulness == -1) + { + S_sfx[sound_id].usefulness = 1; + } + else + { + S_sfx[sound_id].usefulness++; + } +} + +boolean S_StopSoundID(int sound_id, int priority) +{ + int i; + int lp; //least priority + int found; + + if (S_sfx[sound_id].numchannels == -1) + { + return (true); + } + lp = -1; //denote the argument sound_id + found = 0; + for (i = 0; i < snd_Channels; i++) + { + if (channel[i].sound_id == sound_id && channel[i].mo) + { + found++; //found one. Now, should we replace it?? + if (priority >= channel[i].priority) + { // if we're gonna kill one, then this'll be it + lp = i; + priority = channel[i].priority; + } + } + } + if (found < S_sfx[sound_id].numchannels) + { + return (true); + } + else if (lp == -1) + { + return (false); // don't replace any sounds + } + if (channel[lp].handle) + { + if (I_SoundIsPlaying(channel[lp].handle)) + { + I_StopSound(channel[lp].handle); + } + if (S_sfx[channel[i].sound_id].usefulness > 0) + { + S_sfx[channel[i].sound_id].usefulness--; + } + channel[lp].mo = NULL; + } + return (true); +} + +void S_StopSound(mobj_t * origin) +{ + int i; + + for (i = 0; i < snd_Channels; i++) + { + if (channel[i].mo == origin) + { + I_StopSound(channel[i].handle); + if (S_sfx[channel[i].sound_id].usefulness > 0) + { + S_sfx[channel[i].sound_id].usefulness--; + } + channel[i].handle = 0; + channel[i].mo = NULL; + if (AmbChan == i) + { + AmbChan = -1; + } + } + } +} + +void S_SoundLink(mobj_t * oldactor, mobj_t * newactor) +{ + int i; + + for (i = 0; i < snd_Channels; i++) + { + if (channel[i].mo == oldactor) + channel[i].mo = newactor; + } +} + +void S_PauseSound(void) +{ + I_PauseSong(); +} + +void S_ResumeSound(void) +{ + I_ResumeSong(); +} + +void S_UpdateSounds(mobj_t * listener) +{ + int i, dist, vol; + int angle; + int sep; + int priority; + int absx; + int absy; + + listener = players[consoleplayer].mo; + if (snd_MaxVolume == 0) + { + return; + } + + for (i = 0; i < snd_Channels; i++) + { + if (!channel[i].handle || S_sfx[channel[i].sound_id].usefulness == -1) + { + continue; + } + if (!I_SoundIsPlaying(channel[i].handle)) + { + if (S_sfx[channel[i].sound_id].usefulness > 0) + { + S_sfx[channel[i].sound_id].usefulness--; + } + channel[i].handle = 0; + channel[i].mo = NULL; + channel[i].sound_id = 0; + if (AmbChan == i) + { + AmbChan = -1; + } + } + if (channel[i].mo == NULL || channel[i].sound_id == 0 + || channel[i].mo == players[consoleplayer].mo) + { + continue; + } + else + { + absx = abs(channel[i].mo->x - players[consoleplayer].mo->x); + absy = abs(channel[i].mo->y - players[consoleplayer].mo->y); + dist = absx + absy - (absx > absy ? absy >> 1 : absx >> 1); + dist >>= FRACBITS; +// dist = P_AproxDistance(channel[i].mo->x-listener->x, channel[i].mo->y-listener->y)>>FRACBITS; + + if (dist >= MAX_SND_DIST) + { + S_StopSound(channel[i].mo); + continue; + } + if (dist < 0) + dist = 0; + +// calculate the volume based upon the distance from the sound origin. +// vol = (*((byte *)W_CacheLumpName("SNDCURVE", PU_CACHE)+dist)*(snd_MaxVolume*8))>>7; + vol = soundCurve[dist]; + + angle = R_PointToAngle2(players[consoleplayer].mo->x, + players[consoleplayer].mo->y, + channel[i].mo->x, channel[i].mo->y); + angle = (angle - viewangle) >> 24; + sep = angle * 2 - 128; + if (sep < 64) + sep = -sep; + if (sep > 192) + sep = 512 - sep; + // TODO: Pitch shifting. + I_UpdateSoundParams(channel[i].handle, vol, sep); + priority = S_sfx[channel[i].sound_id].priority; + priority *= (10 - (dist >> 8)); + channel[i].priority = priority; + } + } +} + +void S_Init(void) +{ + soundCurve = Z_Malloc(MAX_SND_DIST, PU_STATIC, NULL); + I_InitSound(); + if (snd_Channels > 8) + { + snd_Channels = 8; + } + I_SetMusicVolume(snd_MusicVolume); + S_SetMaxVolume(true); +} + +void S_GetChannelInfo(SoundInfo_t * s) +{ + int i; + ChanInfo_t *c; + + s->channelCount = snd_Channels; + s->musicVolume = snd_MusicVolume; + s->soundVolume = snd_MaxVolume; + for (i = 0; i < snd_Channels; i++) + { + c = &s->chan[i]; + c->id = channel[i].sound_id; + c->priority = channel[i].priority; + c->name = S_sfx[c->id].name; + c->mo = channel[i].mo; + c->distance = P_AproxDistance(c->mo->x - viewx, c->mo->y - viewy) + >> FRACBITS; + } +} + +void S_SetMaxVolume(boolean fullprocess) +{ + int i; + + if (!fullprocess) + { + soundCurve[0] = + (*((byte *) W_CacheLumpName("SNDCURVE", PU_CACHE)) * + (snd_MaxVolume * 8)) >> 7; + } + else + { + for (i = 0; i < MAX_SND_DIST; i++) + { + soundCurve[i] = + (*((byte *) W_CacheLumpName("SNDCURVE", PU_CACHE) + i) * + (snd_MaxVolume * 8)) >> 7; + } + } +} + +static boolean musicPaused; +void S_SetMusicVolume(void) +{ + I_SetMusicVolume(snd_MusicVolume); + if (snd_MusicVolume == 0) + { + I_PauseSong(); + musicPaused = true; + } + else if (musicPaused) + { + musicPaused = false; + I_ResumeSong(); + } +} + +void S_ShutDown(void) +{ + extern int tsm_ID; + if (tsm_ID != -1) + { + I_StopSong(); + I_UnRegisterSong(rs); + I_ShutdownSound(); + } +} + diff --git a/src/heretic/soundst.h b/src/heretic/s_sound.h index fb63de08..fb63de08 100644 --- a/src/heretic/soundst.h +++ b/src/heretic/s_sound.h diff --git a/src/heretic/sb_bar.c b/src/heretic/sb_bar.c index 9655837e..6414bb8f 100644 --- a/src/heretic/sb_bar.c +++ b/src/heretic/sb_bar.c @@ -25,7 +25,7 @@ #include "doomdef.h" #include "p_local.h" -#include "soundst.h" +#include "s_sound.h" // Macros diff --git a/src/heretic/sounds.c b/src/heretic/sounds.c index 99dd102c..38c39210 100644 --- a/src/heretic/sounds.c +++ b/src/heretic/sounds.c @@ -25,216 +25,232 @@ // sounds.c #include "doomdef.h" +#include "i_sound.h" #include "sounds.h" // Music info +#define MUSIC(name) \ + { name, 0, NULL, NULL } + musicinfo_t S_music[] = { - {"MUS_E1M1", 0}, // 1-1 - {"MUS_E1M2", 0}, - {"MUS_E1M3", 0}, - {"MUS_E1M4", 0}, - {"MUS_E1M5", 0}, - {"MUS_E1M6", 0}, - {"MUS_E1M7", 0}, - {"MUS_E1M8", 0}, - {"MUS_E1M9", 0}, - - {"MUS_E2M1", 0}, // 2-1 - {"MUS_E2M2", 0}, - {"MUS_E2M3", 0}, - {"MUS_E2M4", 0}, - {"MUS_E1M4", 0}, - {"MUS_E2M6", 0}, - {"MUS_E2M7", 0}, - {"MUS_E2M8", 0}, - {"MUS_E2M9", 0}, - - {"MUS_E1M1", 0}, // 3-1 - {"MUS_E3M2", 0}, - {"MUS_E3M3", 0}, - {"MUS_E1M6", 0}, - {"MUS_E1M3", 0}, - {"MUS_E1M2", 0}, - {"MUS_E1M5", 0}, - {"MUS_E1M9", 0}, - {"MUS_E2M6", 0}, - - {"MUS_E1M6", 0}, // 4-1 - {"MUS_E1M2", 0}, - {"MUS_E1M3", 0}, - {"MUS_E1M4", 0}, - {"MUS_E1M5", 0}, - {"MUS_E1M1", 0}, - {"MUS_E1M7", 0}, - {"MUS_E1M8", 0}, - {"MUS_E1M9", 0}, - - {"MUS_E2M1", 0}, // 5-1 - {"MUS_E2M2", 0}, - {"MUS_E2M3", 0}, - {"MUS_E2M4", 0}, - {"MUS_E1M4", 0}, - {"MUS_E2M6", 0}, - {"MUS_E2M7", 0}, - {"MUS_E2M8", 0}, - {"MUS_E2M9", 0}, - - {"MUS_E3M2", 0}, // 6-1 - {"MUS_E3M3", 0}, // 6-2 - {"MUS_E1M6", 0}, // 6-3 - - {"MUS_TITL", 0}, - {"MUS_INTR", 0}, - {"MUS_CPTD", 0} + MUSIC("MUS_E1M1"), // 1-1 + MUSIC("MUS_E1M2"), + MUSIC("MUS_E1M3"), + MUSIC("MUS_E1M4"), + MUSIC("MUS_E1M5"), + MUSIC("MUS_E1M6"), + MUSIC("MUS_E1M7"), + MUSIC("MUS_E1M8"), + MUSIC("MUS_E1M9"), + + MUSIC("MUS_E2M1"), // 2-1 + MUSIC("MUS_E2M2"), + MUSIC("MUS_E2M3"), + MUSIC("MUS_E2M4"), + MUSIC("MUS_E1M4"), + MUSIC("MUS_E2M6"), + MUSIC("MUS_E2M7"), + MUSIC("MUS_E2M8"), + MUSIC("MUS_E2M9"), + + MUSIC("MUS_E1M1"), // 3-1 + MUSIC("MUS_E3M2"), + MUSIC("MUS_E3M3"), + MUSIC("MUS_E1M6"), + MUSIC("MUS_E1M3"), + MUSIC("MUS_E1M2"), + MUSIC("MUS_E1M5"), + MUSIC("MUS_E1M9"), + MUSIC("MUS_E2M6"), + + MUSIC("MUS_E1M6"), // 4-1 + MUSIC("MUS_E1M2"), + MUSIC("MUS_E1M3"), + MUSIC("MUS_E1M4"), + MUSIC("MUS_E1M5"), + MUSIC("MUS_E1M1"), + MUSIC("MUS_E1M7"), + MUSIC("MUS_E1M8"), + MUSIC("MUS_E1M9"), + + MUSIC("MUS_E2M1"), // 5-1 + MUSIC("MUS_E2M2"), + MUSIC("MUS_E2M3"), + MUSIC("MUS_E2M4"), + MUSIC("MUS_E1M4"), + MUSIC("MUS_E2M6"), + MUSIC("MUS_E2M7"), + MUSIC("MUS_E2M8"), + MUSIC("MUS_E2M9"), + + MUSIC("MUS_E3M2"), // 6-1 + MUSIC("MUS_E3M3"), // 6-2 + MUSIC("MUS_E1M6"), // 6-3 + + MUSIC("MUS_TITL"), + MUSIC("MUS_INTR"), + MUSIC("MUS_CPTD") }; // Sound info + /* Macro for original heretic sfxinfo_t +#define SOUND(name, priority, numchannels) \ + { name, NULL, priority, -1, NULL, 0, numchannels } +#define SOUND_LINK(name, link_id, priority, numchannels) \ + { name, &S_sfx[link_id], priority, -1, NULL, 0, numchannels } + */ + +#define SOUND(name, priority, numchannels) \ + { name, priority, NULL, -1, -1, -1, 0, numchannels, NULL } +#define SOUND_LINK(name, link_id, priority, numchannels) \ + { name, priority, &S_sfx[link_id], 0, 0, -1, 0, numchannels, NULL } + sfxinfo_t S_sfx[] = { - {{0, 0, 0, 0, 0, 0, 0, 0}, NULL, 0, -1, NULL, 0, 0}, - {"gldhit", NULL, 32, -1, NULL, 0, 2}, - {"gntful", NULL, 32, -1, NULL, 0, -1}, - {"gnthit", NULL, 32, -1, NULL, 0, -1}, - {"gntpow", NULL, 32, -1, NULL, 0, -1}, - {"gntact", NULL, 32, -1, NULL, 0, -1}, - {"gntuse", NULL, 32, -1, NULL, 0, -1}, - {"phosht", NULL, 32, -1, NULL, 0, 2}, - {"phohit", NULL, 32, -1, NULL, 0, -1}, - {"-phopow", &S_sfx[sfx_hedat1], 32, -1, NULL, 0, 1}, - {"lobsht", NULL, 20, -1, NULL, 0, 2}, - {"lobhit", NULL, 20, -1, NULL, 0, 2}, - {"lobpow", NULL, 20, -1, NULL, 0, 2}, - {"hrnsht", NULL, 32, -1, NULL, 0, 2}, - {"hrnhit", NULL, 32, -1, NULL, 0, 2}, - {"hrnpow", NULL, 32, -1, NULL, 0, 2}, - {"ramphit", NULL, 32, -1, NULL, 0, 2}, - {"ramrain", NULL, 10, -1, NULL, 0, 2}, - {"bowsht", NULL, 32, -1, NULL, 0, 2}, - {"stfhit", NULL, 32, -1, NULL, 0, 2}, - {"stfpow", NULL, 32, -1, NULL, 0, 2}, - {"stfcrk", NULL, 32, -1, NULL, 0, 2}, - {"impsit", NULL, 32, -1, NULL, 0, 2}, - {"impat1", NULL, 32, -1, NULL, 0, 2}, - {"impat2", NULL, 32, -1, NULL, 0, 2}, - {"impdth", NULL, 80, -1, NULL, 0, 2}, - {"-impact", &S_sfx[sfx_impsit], 20, -1, NULL, 0, 2}, - {"imppai", NULL, 32, -1, NULL, 0, 2}, - {"mumsit", NULL, 32, -1, NULL, 0, 2}, - {"mumat1", NULL, 32, -1, NULL, 0, 2}, - {"mumat2", NULL, 32, -1, NULL, 0, 2}, - {"mumdth", NULL, 80, -1, NULL, 0, 2}, - {"-mumact", &S_sfx[sfx_mumsit], 20, -1, NULL, 0, 2}, - {"mumpai", NULL, 32, -1, NULL, 0, 2}, - {"mumhed", NULL, 32, -1, NULL, 0, 2}, - {"bstsit", NULL, 32, -1, NULL, 0, 2}, - {"bstatk", NULL, 32, -1, NULL, 0, 2}, - {"bstdth", NULL, 80, -1, NULL, 0, 2}, - {"bstact", NULL, 20, -1, NULL, 0, 2}, - {"bstpai", NULL, 32, -1, NULL, 0, 2}, - {"clksit", NULL, 32, -1, NULL, 0, 2}, - {"clkatk", NULL, 32, -1, NULL, 0, 2}, - {"clkdth", NULL, 80, -1, NULL, 0, 2}, - {"clkact", NULL, 20, -1, NULL, 0, 2}, - {"clkpai", NULL, 32, -1, NULL, 0, 2}, - {"snksit", NULL, 32, -1, NULL, 0, 2}, - {"snkatk", NULL, 32, -1, NULL, 0, 2}, - {"snkdth", NULL, 80, -1, NULL, 0, 2}, - {"snkact", NULL, 20, -1, NULL, 0, 2}, - {"snkpai", NULL, 32, -1, NULL, 0, 2}, - {"kgtsit", NULL, 32, -1, NULL, 0, 2}, - {"kgtatk", NULL, 32, -1, NULL, 0, 2}, - {"kgtat2", NULL, 32, -1, NULL, 0, 2}, - {"kgtdth", NULL, 80, -1, NULL, 0, 2}, - {"-kgtact", &S_sfx[sfx_kgtsit], 20, -1, NULL, 0, 2}, - {"kgtpai", NULL, 32, -1, NULL, 0, 2}, - {"wizsit", NULL, 32, -1, NULL, 0, 2}, - {"wizatk", NULL, 32, -1, NULL, 0, 2}, - {"wizdth", NULL, 80, -1, NULL, 0, 2}, - {"wizact", NULL, 20, -1, NULL, 0, 2}, - {"wizpai", NULL, 32, -1, NULL, 0, 2}, - {"minsit", NULL, 32, -1, NULL, 0, 2}, - {"minat1", NULL, 32, -1, NULL, 0, 2}, - {"minat2", NULL, 32, -1, NULL, 0, 2}, - {"minat3", NULL, 32, -1, NULL, 0, 2}, - {"mindth", NULL, 80, -1, NULL, 0, 2}, - {"minact", NULL, 20, -1, NULL, 0, 2}, - {"minpai", NULL, 32, -1, NULL, 0, 2}, - {"hedsit", NULL, 32, -1, NULL, 0, 2}, - {"hedat1", NULL, 32, -1, NULL, 0, 2}, - {"hedat2", NULL, 32, -1, NULL, 0, 2}, - {"hedat3", NULL, 32, -1, NULL, 0, 2}, - {"heddth", NULL, 80, -1, NULL, 0, 2}, - {"hedact", NULL, 20, -1, NULL, 0, 2}, - {"hedpai", NULL, 32, -1, NULL, 0, 2}, - {"sorzap", NULL, 32, -1, NULL, 0, 2}, - {"sorrise", NULL, 32, -1, NULL, 0, 2}, - {"sorsit", NULL, 200, -1, NULL, 0, 2}, - {"soratk", NULL, 32, -1, NULL, 0, 2}, - {"soract", NULL, 200, -1, NULL, 0, 2}, - {"sorpai", NULL, 200, -1, NULL, 0, 2}, - {"sordsph", NULL, 200, -1, NULL, 0, 2}, - {"sordexp", NULL, 200, -1, NULL, 0, 2}, - {"sordbon", NULL, 200, -1, NULL, 0, 2}, - {"-sbtsit", &S_sfx[sfx_bstsit], 32, -1, NULL, 0, 2}, - {"-sbtatk", &S_sfx[sfx_bstatk], 32, -1, NULL, 0, 2}, - {"sbtdth", NULL, 80, -1, NULL, 0, 2}, - {"sbtact", NULL, 20, -1, NULL, 0, 2}, - {"sbtpai", NULL, 32, -1, NULL, 0, 2}, - {"plroof", NULL, 32, -1, NULL, 0, 2}, - {"plrpai", NULL, 32, -1, NULL, 0, 2}, - {"plrdth", NULL, 80, -1, NULL, 0, 2}, - {"gibdth", NULL, 100, -1, NULL, 0, 2}, - {"plrwdth", NULL, 80, -1, NULL, 0, 2}, - {"plrcdth", NULL, 100, -1, NULL, 0, 2}, - {"itemup", NULL, 32, -1, NULL, 0, 2}, - {"wpnup", NULL, 32, -1, NULL, 0, 2}, - {"telept", NULL, 50, -1, NULL, 0, 2}, - {"doropn", NULL, 40, -1, NULL, 0, 2}, - {"dorcls", NULL, 40, -1, NULL, 0, 2}, - {"dormov", NULL, 40, -1, NULL, 0, 2}, - {"artiup", NULL, 32, -1, NULL, 0, 2}, - {"switch", NULL, 40, -1, NULL, 0, 2}, - {"pstart", NULL, 40, -1, NULL, 0, 2}, - {"pstop", NULL, 40, -1, NULL, 0, 2}, - {"stnmov", NULL, 40, -1, NULL, 0, 2}, - {"chicpai", NULL, 32, -1, NULL, 0, 2}, - {"chicatk", NULL, 32, -1, NULL, 0, 2}, - {"chicdth", NULL, 40, -1, NULL, 0, 2}, - {"chicact", NULL, 32, -1, NULL, 0, 2}, - {"chicpk1", NULL, 32, -1, NULL, 0, 2}, - {"chicpk2", NULL, 32, -1, NULL, 0, 2}, - {"chicpk3", NULL, 32, -1, NULL, 0, 2}, - {"keyup", NULL, 50, -1, NULL, 0, 2}, - {"ripslop", NULL, 16, -1, NULL, 0, 2}, - {"newpod", NULL, 16, -1, NULL, 0, -1}, - {"podexp", NULL, 40, -1, NULL, 0, -1}, - {"bounce", NULL, 16, -1, NULL, 0, 2}, - {"-volsht", &S_sfx[sfx_bstatk], 16, -1, NULL, 0, 2}, - {"-volhit", &S_sfx[sfx_lobhit], 16, -1, NULL, 0, 2}, - {"burn", NULL, 10, -1, NULL, 0, 2}, - {"splash", NULL, 10, -1, NULL, 0, 1}, - {"gloop", NULL, 10, -1, NULL, 0, 2}, - {"respawn", NULL, 10, -1, NULL, 0, 1}, - {"blssht", NULL, 32, -1, NULL, 0, 2}, - {"blshit", NULL, 32, -1, NULL, 0, 2}, - {"chat", NULL, 100, -1, NULL, 0, 1}, - {"artiuse", NULL, 32, -1, NULL, 0, 1}, - {"gfrag", NULL, 100, -1, NULL, 0, 1}, - {"waterfl", NULL, 16, -1, NULL, 0, 2}, + SOUND("", 0, 0), + SOUND("gldhit", 32, 2), + SOUND("gntful", 32, -1), + SOUND("gnthit", 32, -1), + SOUND("gntpow", 32, -1), + SOUND("gntact", 32, -1), + SOUND("gntuse", 32, -1), + SOUND("phosht", 32, 2), + SOUND("phohit", 32, -1), + SOUND_LINK("-phopow", sfx_hedat1, 32, 1), + SOUND("lobsht", 20, 2), + SOUND("lobhit", 20, 2), + SOUND("lobpow", 20, 2), + SOUND("hrnsht", 32, 2), + SOUND("hrnhit", 32, 2), + SOUND("hrnpow", 32, 2), + SOUND("ramphit", 32, 2), + SOUND("ramrain", 10, 2), + SOUND("bowsht", 32, 2), + SOUND("stfhit", 32, 2), + SOUND("stfpow", 32, 2), + SOUND("stfcrk", 32, 2), + SOUND("impsit", 32, 2), + SOUND("impat1", 32, 2), + SOUND("impat2", 32, 2), + SOUND("impdth", 80, 2), + SOUND_LINK("-impact", sfx_impsit, 20, 2), + SOUND("imppai", 32, 2), + SOUND("mumsit", 32, 2), + SOUND("mumat1", 32, 2), + SOUND("mumat2", 32, 2), + SOUND("mumdth", 80, 2), + SOUND_LINK("-mumact", sfx_mumsit, 20, 2), + SOUND("mumpai", 32, 2), + SOUND("mumhed", 32, 2), + SOUND("bstsit", 32, 2), + SOUND("bstatk", 32, 2), + SOUND("bstdth", 80, 2), + SOUND("bstact", 20, 2), + SOUND("bstpai", 32, 2), + SOUND("clksit", 32, 2), + SOUND("clkatk", 32, 2), + SOUND("clkdth", 80, 2), + SOUND("clkact", 20, 2), + SOUND("clkpai", 32, 2), + SOUND("snksit", 32, 2), + SOUND("snkatk", 32, 2), + SOUND("snkdth", 80, 2), + SOUND("snkact", 20, 2), + SOUND("snkpai", 32, 2), + SOUND("kgtsit", 32, 2), + SOUND("kgtatk", 32, 2), + SOUND("kgtat2", 32, 2), + SOUND("kgtdth", 80, 2), + SOUND_LINK("-kgtact", sfx_kgtsit, 20, 2), + SOUND("kgtpai", 32, 2), + SOUND("wizsit", 32, 2), + SOUND("wizatk", 32, 2), + SOUND("wizdth", 80, 2), + SOUND("wizact", 20, 2), + SOUND("wizpai", 32, 2), + SOUND("minsit", 32, 2), + SOUND("minat1", 32, 2), + SOUND("minat2", 32, 2), + SOUND("minat3", 32, 2), + SOUND("mindth", 80, 2), + SOUND("minact", 20, 2), + SOUND("minpai", 32, 2), + SOUND("hedsit", 32, 2), + SOUND("hedat1", 32, 2), + SOUND("hedat2", 32, 2), + SOUND("hedat3", 32, 2), + SOUND("heddth", 80, 2), + SOUND("hedact", 20, 2), + SOUND("hedpai", 32, 2), + SOUND("sorzap", 32, 2), + SOUND("sorrise", 32, 2), + SOUND("sorsit", 200, 2), + SOUND("soratk", 32, 2), + SOUND("soract", 200, 2), + SOUND("sorpai", 200, 2), + SOUND("sordsph", 200, 2), + SOUND("sordexp", 200, 2), + SOUND("sordbon", 200, 2), + SOUND_LINK("-sbtsit", sfx_bstsit, 32, 2), + SOUND_LINK("-sbtatk", sfx_bstatk, 32, 2), + SOUND("sbtdth", 80, 2), + SOUND("sbtact", 20, 2), + SOUND("sbtpai", 32, 2), + SOUND("plroof", 32, 2), + SOUND("plrpai", 32, 2), + SOUND("plrdth", 80, 2), + SOUND("gibdth", 100, 2), + SOUND("plrwdth", 80, 2), + SOUND("plrcdth", 100, 2), + SOUND("itemup", 32, 2), + SOUND("wpnup", 32, 2), + SOUND("telept", 50, 2), + SOUND("doropn", 40, 2), + SOUND("dorcls", 40, 2), + SOUND("dormov", 40, 2), + SOUND("artiup", 32, 2), + SOUND("switch", 40, 2), + SOUND("pstart", 40, 2), + SOUND("pstop", 40, 2), + SOUND("stnmov", 40, 2), + SOUND("chicpai", 32, 2), + SOUND("chicatk", 32, 2), + SOUND("chicdth", 40, 2), + SOUND("chicact", 32, 2), + SOUND("chicpk1", 32, 2), + SOUND("chicpk2", 32, 2), + SOUND("chicpk3", 32, 2), + SOUND("keyup", 50, 2), + SOUND("ripslop", 16, 2), + SOUND("newpod", 16, -1), + SOUND("podexp", 40, -1), + SOUND("bounce", 16, 2), + SOUND_LINK("-volsht", sfx_bstatk, 16, 2), + SOUND_LINK("-volhit", sfx_lobhit, 16, 2), + SOUND("burn", 10, 2), + SOUND("splash", 10, 1), + SOUND("gloop", 10, 2), + SOUND("respawn", 10, 1), + SOUND("blssht", 32, 2), + SOUND("blshit", 32, 2), + SOUND("chat", 100, 1), + SOUND("artiuse", 32, 1), + SOUND("gfrag", 100, 1), + SOUND("waterfl", 16, 2), // Monophonic sounds - {"wind", NULL, 16, -1, NULL, 0, 1}, - {"amb1", NULL, 1, -1, NULL, 0, 1}, - {"amb2", NULL, 1, -1, NULL, 0, 1}, - {"amb3", NULL, 1, -1, NULL, 0, 1}, - {"amb4", NULL, 1, -1, NULL, 0, 1}, - {"amb5", NULL, 1, -1, NULL, 0, 1}, - {"amb6", NULL, 1, -1, NULL, 0, 1}, - {"amb7", NULL, 1, -1, NULL, 0, 1}, - {"amb8", NULL, 1, -1, NULL, 0, 1}, - {"amb9", NULL, 1, -1, NULL, 0, 1}, - {"amb10", NULL, 1, -1, NULL, 0, 1}, - {"amb11", NULL, 1, -1, NULL, 0, 0} + SOUND("wind", 16, 1), + SOUND("amb1", 1, 1), + SOUND("amb2", 1, 1), + SOUND("amb3", 1, 1), + SOUND("amb4", 1, 1), + SOUND("amb5", 1, 1), + SOUND("amb6", 1, 1), + SOUND("amb7", 1, 1), + SOUND("amb8", 1, 1), + SOUND("amb9", 1, 1), + SOUND("amb10", 1, 1), + SOUND("amb11", 1, 0) }; diff --git a/src/heretic/sounds.h b/src/heretic/sounds.h index ce97abb0..67cc377c 100644 --- a/src/heretic/sounds.h +++ b/src/heretic/sounds.h @@ -93,10 +93,10 @@ typedef enum NUMMUSIC } musicenum_t; +#if 0 typedef struct { char name[8]; - int p1; } musicinfo_t; typedef struct sfxinfo_s @@ -110,6 +110,8 @@ typedef struct sfxinfo_s int numchannels; // total number of channels a sound type may occupy } sfxinfo_t; +#endif + typedef struct { mobj_t *mo; diff --git a/src/i_sound.h b/src/i_sound.h index 2740c1d9..6737e8cb 100644 --- a/src/i_sound.h +++ b/src/i_sound.h @@ -53,9 +53,6 @@ struct sfxinfo_struct // 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) @@ -64,6 +61,10 @@ struct sfxinfo_struct // lump number of sfx int lumpnum; + // Maximum number of channels that the sound can be played on + // (Heretic) + int numchannels; + // data used by the low level code void *driver_data; }; |