really cleanup sound

- collect most sound infos in one table and use it to generate the menus
- no more sound category checks with ranges
- now only PAINx and FOOTSTEP* sounds use hardcoded index numbers

enumsounds <list of categories>

  Lists sound index numbers and short descriptions for all sounds of one
  or more categories. The argument should contain one or more of PAIN,
  OWNPAIN, WEAPON, PICKUP, MOVEMENT, BULLET, OTHER, VOICECOM, TEAM,
  PUBLIC, FFA, FLAGONLY. All sounds with at least one of the flags will
  be listed. Flag names prefixed with "!" will exclude all matching
  sound from the list.

  Example: /echo (enumsounds "VOICECOM !PUBLIC") will list all voicecom
  sounds that are for teams only.

DOCREF enumsounds
This commit is contained in:
ac-stef
2017-05-22 17:30:51 +02:00
parent 6e24e4af6c
commit d0b309320b
14 changed files with 204 additions and 288 deletions
-1
View File
@@ -10,7 +10,6 @@ skin_rvsf (rnd 6)
setfont default // Choose your font
gfxqualityalias = 3 // Default GFX is medium.
soundqualityalias = 3 // Default sound is best.
menuBotGameLength = 15
+30 -147
View File
@@ -57,7 +57,7 @@ menuitemcheckbox [Fullscreen: ] "$fullscreen" [ fullscreen $arg1 ]
menuitemtextinput [Mouse sensitivity: ] "$sensitivity" [ sensitivity $arg1 ]
menuitemcheckbox [Reduced violence mode: ] "$poniesmodeon" [ reducedviolencemode $arg1 ]
menuitemslider [Graphics detail: ] 1 6 "$gfxqualityalias" 1 [Horrible Low Medium Good High "INSANE! (May perform slowly on older gfx)"] [ new_gfx_quality $arg1 ]
menuitemslider [Sound detail: ] 1 3 "$soundqualityalias" 1 [Low Medium High] [ new_sound_quality $arg1 ]
menuitemslider [Sound detail: ] 1 3 "$__soundquality" 1 [Low Medium High] [ __set_sound_quality $arg1 ]
menuitemslider [Field of view: ] 75 120 "$fov" 2 [] [ fov $arg1 ]
menuitem [] -1
menuitem "\f0\t\t\t [ OK; View FAQ ]" [ closecurmenu; resetgl; load_faq ; showmenu faq ]
@@ -214,28 +214,20 @@ const new_gfx_quality [
]
]
const new_sound_quality [
if (= $arg1 3) [ // high sound (DEFAULT)
soundqualityalias = 3
maxsoundsatonce (getvarrange default maxsoundsatonce)
footsteps 1
bulletairsound 1
bulletbouncesound 1
] [
if (= $arg1 2) [ // medium
soundqualityalias = 2
maxsoundsatonce (div (getvarrange default maxsoundsatonce) 2)
footsteps 1
bulletairsound 0
bulletbouncesound 1
] [ // low
soundqualityalias = 1
maxsoundsatonce (div (getvarrange default maxsoundsatonce) 4)
footsteps 0
bulletairsound 0
bulletbouncesound 0
const __set_sound_quality [
looplist [
3 (getvarrange default maxsoundsatonce) 1 1 1
2 (div (getvarrange default maxsoundsatonce) 2) 1 0 1
1 (div (getvarrange default maxsoundsatonce) 4) 0 0 0
] [ idx maxsounds foots bullair bullbounce ] [
if (= $arg1 $idx) [
__soundquality = $idx
maxsoundsatonce $maxsounds
footsteps $foots
bulletairsound $bullair
bulletbouncesound $bullbounce
]
]
]
]
newmenu [Reset settings]
@@ -526,7 +518,7 @@ const reducedviolencemode [
poniesmodeon = (! $x)
blood $x
gib $x
looplist "26 27 28 29 30 31 32 33 48" i [ mutesound $i $x ] // (Un-) Mute pain sounds: 26 to 33 and 48
looplist (enumsounds PAIN) [i d] [ mutesound $i $x ] // (Un-) Mute pain sounds: 26 to 33 and 48
echo "\f2OMG! \f8PW\f1NI\f3ES\f5! mode" (if $x [result "has been disabled."] [result "enabled - Violent game content has now been reduced."])
pop x
]
@@ -588,11 +580,13 @@ menuitemslider [ Spectator max-roll: ] 0 (getvarrange max maxrollremote) "$m
menuitem [] -1
menuitem [Customize your scoreboard...] [ showmenu [Customize your scoreboard] ]
alias __soundquality 3
newmenu sound
menuitemslider [Sound volume: ] 0 255 "$soundvol" 16 [] [ soundvol $arg1 ]
menuitemslider [Music volume: ] 0 255 "$musicvol" 16 [] [ musicvol $arg1 ]
menuitemslider [Sound detail: ] 1 3 "($soundqualityalias)" 1 [Low Medium High] [ new_sound_quality $arg1 ]
menuitemslider [Sound detail: ] 1 3 "($__soundquality)" 1 [Low Medium High] [ __set_sound_quality $arg1 ]
menuitem [] -1
menuitem [Mute/Un-mute specific sounds...] [ showmenu [Mute specific sounds] ]
menuitem [] -1
@@ -605,8 +599,6 @@ menuitemcheckbox [ Disable own footsteps: ] "(= $localfootsteps)" [
menuitemcheckbox [ Bullet hit: ] "$bulletbouncesound" [ bulletbouncesound $arg1 ]
menuitemcheckbox [ Bullet near-miss: ] "$bulletairsound" [ bulletairsound $arg1 ]
const muteitem [ menuitemcheckbox (concatword $arg1 [: ]) (concat ! "(soundmuted" $arg2 ")") (concat mutesound $arg2 "$arg1") ]
newmenu [Mute specific sounds]
menuitem [Weapon sounds] [ showmenu [Mute weapon sounds] ]
@@ -619,127 +611,18 @@ menuitem [Other sounds] [ showmenu [Mute other sounds] ]
menuitem [] -1
menuitem [Un-mute all sounds...] [ unmuteallsounds ]
newmenu [Mute weapon sounds]
muteitem [Knife] 7
muteitem [Pistol] 8
muteitem [Pistol reloading] 9
muteitem [Carbine] 10
muteitem [Carbine reloading] 11
muteitem [Shotgun] 12
muteitem [Shotgun reloading] 13
muteitem [Submachine gun] 14
muteitem [Submachine gun reloading] 15
muteitem [Sniper] 16
muteitem [Sniper reloading] 17
muteitem [Assault rifle] 18
muteitem [Assault rifle reloading] 19
muteitem [Grenade pull] 41
muteitem [Grenade throw] 42
muteitem [Grenade bounce 1] 43
muteitem [Grenade bounce 2] 44
muteitem [Akimbo reload] 45
muteitem [Change weapon] 46
muteitem [Empty clip] 24
newmenu [Mute pickup sounds]
muteitem [Ammo pickup] 20
muteitem [Health pickup] 21
muteitem [Armour pickup] 22
muteitem [Akimbo pickup] 23
muteitem [Akimbo finished] 25
muteitem [Helmet pickup] 99
newmenu [Mute pain/death sounds]
muteitem [Pain 1] 26
muteitem [Pain 2] 27
muteitem [Pain 3] 28
muteitem [Pain 4] 29
muteitem [Pain 5] 30
muteitem [Pain 6] 31
muteitem [Die 1] 32
muteitem [Die 2] 33
muteitem [Gib sounds] 48
muteitem [Tinnitus] 62
muteitem [Heartbeat] 100
newmenu [Mute movement sounds]
muteitem [Footsteps] 53
muteitem [Crouch] 54
muteitem [Water footsteps] 55
muteitem [Water crouching] 56
muteitem [Crouch-in] 57
muteitem [Crouch-out] 58
muteitem [Jump] 0
muteitem [Soft landing] 1
muteitem [Hard landing] 2
muteitem [Splash 1] 35
muteitem [Splash 2] 36
muteitem [Underwater] 61
newmenu [Mute bullet/explosion sounds]
muteitem [Ricochet air 1] 3
muteitem [Ricochet air 2] 4
muteitem [Ricochet hit] 5
muteitem [Bullet (water impact)] 6
muteitem [Grenade explosion] 34
muteitem [Hit sound] 47
newmenu [Mute other sounds]
muteitem [Flag drop] 37
muteitem [Flag pickup] 38
muteitem [Flag return] 39
muteitem [Flag score] 40
muteitem [Headshot] 49
muteitem [Call vote] 50
muteitem [Pass vote] 51
muteitem [Fail vote] 52
muteitem [Menu select] 59
muteitem [Menu enter] 60
newmenu [Mute voice-coms]
muteitem [Affirmative] 63
muteitem [All-right sir] 64
muteitem [Come on, move] 65
muteitem [Coming in with the flag] 66
muteitem [Cover me] 67
muteitem [Defend the flag] 68
muteitem [Enemy down] 69
muteitem [Go get 'em boys!] 70
muteitem [Good job team] 71
muteitem [I got one!] 72
muteitem [I made contact] 73
muteitem [I'm attacking] 74
muteitem [I'm on defense] 75
muteitem [I'm on your team] 76
muteitem [Negative] 77
muteitem [No can do] 78
muteitem [Recover the flag] 79
muteitem [Sorry] 80
muteitem [Spread out] 81
muteitem [Stay here] 82
muteitem [Stay together] 83
muteitem [There's no way sir] 84
muteitem [We did it!] 85
muteitem [Yes] 86
muteitem [Under way] 87
muteitem [On the move] 88
muteitem [Got your back] 89
muteitem [Got you covered] 90
muteitem [In position] 91
muteitem [In position now] 92
muteitem [Report in!] 93
muteitem [Nice shot] 94
muteitem [Thanks] 95
muteitem [Thanks, man] 96
muteitem [Awesome (1)] 97
muteitem [Awesome (2)] 98
looplist [
"Mute weapon sounds" WEAPON
"Mute pickup sounds" PICKUP
"Mute pain/death sounds" "PAIN OWNPAIN"
"Mute movement sounds" MOVEMENT
"Mute bullet/explosion sounds" BULLET
"Mute other sounds" OTHER
"Mute voice-coms" VOICECOM
] [ mt sc ] [
newmenu $mt
looplist (enumsounds $sc) [ idx desc ] [ menuitemcheckbox (concatword $desc ": ") (concat ! "(soundmuted" $idx ")") (concat mutesound $idx "$arg1") ]
]
newmenu [Kill Messages]
menuitem "\f9Frag messages: " -1
+1
View File
@@ -82,6 +82,7 @@ looplist [
addpunct punctuations // the command addpunct actually wants the punctuation name as second argument, but we can't do that. sry.
loadcrosshair crosshairnames
edittexturestack texturestacktypes
enumsounds soundcategories
] [ cmd options ] [ listcomplete $cmd (listoptions $options)
]
listcomplete edittagclip "none plclip clip"
-113
View File
@@ -1,118 +1,5 @@
// AssaultCube game sounds
// This does not include ambient sounds, which are map-specific...
// Files listed in here can be either *.wav or *.ogg
// Filename extensions do not need to be listed.
// Whenever adding new sounds, or changing the positions of previously existing
// sounds in this config file, please update the "Mute/Un-mute specific sounds"
// menu inside the "menus_settings.cfg" file.
registersound "player/jump" 80 // 0 - S_JUMP
registersound "player/step" 90 0 24 // 1 - S_SOFTLAND
registersound "player/land" 95 0 24 // 2 - S_HARDLAND
registersound "weapon/ric1" // 3 - S_BULLETAIR1
registersound "weapon/ric2" // 4 - S_BULLETAIR2
registersound "weapon/ric3" // 5 - S_BULLETHIT
registersound "weapon/waterimpact" // 6 - S_BULLETWATERHIT
registersound "weapon/knife" // 7 - S_KNIFE
registersound "weapon/usp" // 8 - S_PISTOL
registersound "weapon/pistol_reload" // 9 - S_RPISTOL
registersound "weapon/carbine" // 10 - S_CARBINE
registersound "weapon/carbine_reload" // 11 - S_RCARBINE // temporary
registersound "weapon/shotgun" // 12 - S_SHOTGUN
registersound "weapon/shotgun_reload" // 13 - S_RSHOTGUN
registersound "weapon/sub" // 14 - S_SUBGUN
registersound "weapon/sub_reload" // 15 - S_RSUBGUN
registersound "weapon/sniper" // 16 - S_SNIPER
registersound "weapon/sniper_reload" // 17 - S_RSNIPER
registersound "weapon/auto" // 18 - S_ASSAULT
registersound "weapon/auto_reload" // 19 - S_RASSAULT
registersound "misc/pickup_ammo_clip" // 20 - S_ITEMAMMO
registersound "misc/pickup_health" // 21 - S_ITEMHEALTH
registersound "misc/pickup_armour" // 22 - S_ITEMARMOUR
registersound "misc/tick9" // 23 - S_ITEMPUP
registersound "weapon/clip_empty" // 24 - S_NOAMMO
registersound "misc/tick11" // 25 - S_PUPOUT
registersound "player/pain1" // 26 - S_PAIN1
registersound "player/pain2" // 27 - S_PAIN2
registersound "player/pain3" // 28 - S_PAIN3
registersound "player/pain4" // 29 - S_PAIN4
registersound "player/pain5" // 30 - S_PAIN5
registersound "player/pain6" // 31 - S_PAIN6
registersound "player/die1" // 32 - S_DIE1
registersound "player/die2" // 33 - S_DIE2
registersound "weapon/grenade_exp" // 34 - S_FEXPLODE
registersound "player/splash1" // 35 - S_SPLASH1
registersound "player/splash2" // 36 - S_SPLASH2
registersound "ctf/flagdrop" // 37 - S_FLAGDROP
registersound "ctf/flagpickup" // 38 - S_FLAGPICKUP
registersound "ctf/flagreturn" // 39 - S_FLAGRETURN
registersound "ctf/flagscore" // 40 - S_FLAGSCORE
registersound "weapon/grenade_pull" // 41 - S_GRENADEPULL
registersound "weapon/grenade_throw" // 42 - S_GRENADETHROW
registersound "weapon/grenade_bounce1" // 43 - S_GRENADEBOUNCE1
registersound "weapon/grenade_bounce2" // 44 - S_GRENADEBOUNCE2
registersound "weapon/pistol_akreload" // 45 - S_RAKIMBO
registersound "misc/change_gun" // 46 - S_GUNCHANGE
registersound "misc/impact_t" // 47 - S_HITSOUND
registersound "player/gib" // 48 - S_GIB
registersound "misc/headshot" 10 // 49 - S_HEADSHOT
registersound "vote/vote_call" // 50 - S_CALLVOTE
registersound "vote/vote_pass" // 51 - S_VOTEPASS
registersound "vote/vote_fail" // 52 - S_VOTEFAIL
registersound "player/footsteps" 40 1 20 // 53 - S_FOOTSTEPS
registersound "player/crouch" 40 1 10 // 54 - S_FOOTSTEPSCROUCH
registersound "player/watersteps" 40 1 20 // 55 - S_WATERFOOTSTEPS
registersound "player/watercrouch" 40 1 10// 56 - S_WATERFOOTSTEPSCROUCH
registersound "player/crouch_in" 85 0 14 // 57 - S_CROUCH
registersound "player/crouch_out" 75 0 14 // 58 - S_UNCROUCH
registersound "misc/menu_click1" // 59 - S_MENUSELECT
registersound "misc/menu_click2" // 60 - S_MENUENTER
registersound "player/underwater" // 61 - S_UNDERWATER
registersound "misc/tinnitus" 2 // 62 - S_TINNITUS
// In-game voice coms
registersound "voicecom/affirmative" // 63
registersound "voicecom/allrightsir" // 64
registersound "voicecom/comeonmove" // 65
registersound "voicecom/cominginwiththeflag" // 66
registersound "voicecom/coverme" // 67
registersound "voicecom/defendtheflag" // 68
registersound "voicecom/enemydown" // 69
registersound "voicecom/gogetemboys" // 70
registersound "voicecom/goodjobteam" // 71
registersound "voicecom/igotone" // 72
registersound "voicecom/imadecontact" // 73
registersound "voicecom/imattacking" // 74
registersound "voicecom/imondefense" // 75
registersound "voicecom/imonyourteamman" // 76
registersound "voicecom/negative" // 77
registersound "voicecom/nocando" // 78
registersound "voicecom/recovertheflag" // 79
registersound "voicecom/sorry" // 80
registersound "voicecom/spreadout" // 81
registersound "voicecom/stayhere" // 82
registersound "voicecom/staytogether" // 83
registersound "voicecom/theresnowaysir" // 84
registersound "voicecom/wedidit" // 85
registersound "voicecom/yes" // 86
registersound "voicecom/onthemove_1" // 87
registersound "voicecom/onthemove_2" // 88
registersound "voicecom/igotyourback" // 89
registersound "voicecom/igotyoucovered" // 90
registersound "voicecom/inposition_1" // 91
registersound "voicecom/inposition_2" // 92
registersound "voicecom/reportin" // 93
registersound "voicecom/niceshot" // 94 : public
registersound "voicecom/thanks_1" // 95 : public
registersound "voicecom/thanks_2" // 96 : public
registersound "voicecom/awesome_1" // 97 : public
registersound "voicecom/awesome_2" // 98 : public
registersound "misc/pickup_helmet" // 99 - S_ITEMHELMET
registersound "player/heartbeat" // 100 - S_HEARTBEAT
registersound "ktf/flagscore" // 101 - S_KTFSCORE
// Music
registermusic "pingpong/Ping_Pong_-_Kamikadze" // M_FLAGGRAB
registermusic "pingpong/Ping_Pong_-_Headshot" // M_LASTMINUTE1
+32 -4
View File
@@ -201,7 +201,7 @@ void audiomanager::registermusic(char *name)
musics.add(newstring(name));
}
int audiomanager::findsound(char *name, int vol, vector<soundconfig> &sounds)
int audiomanager::findsound(const char *name, int vol, vector<soundconfig> &sounds)
{
loopv(sounds)
{
@@ -210,7 +210,7 @@ int audiomanager::findsound(char *name, int vol, vector<soundconfig> &sounds)
return -1;
}
int audiomanager::addsound(char *name, int vol, int maxuses, bool loop, vector<soundconfig> &sounds, bool load, int audibleradius)
int audiomanager::addsound(const char *name, int vol, int maxuses, bool loop, vector<soundconfig> &sounds, bool load, int audibleradius)
{
if(nosound) return -1;
if(!soundvol) return -1;
@@ -429,9 +429,9 @@ void voicecom(char *sound, char *text)
{
defformatstring(soundpath)("voicecom/%s", sound);
int s = audiomgr.findsound(soundpath, 0, gamesounds);
if(!valid_voicecom(s)) return;
if(!gamesound_isvoicecom(s)) return;
if(voicecomsounds>0) audiomgr.playsound(s, SP_HIGH);
if(valid_voicecom_public(s)) // public
if(gamesound_ispublicvoicecom(s)) // public
{
addmsg(SV_VOICECOM, "ri", s);
toserver(text);
@@ -819,6 +819,34 @@ COMMANDF(registersound, "siii", (char *name, int *vol, int *loop, int *audiblera
intret(audiomgr.addsound(name, *vol, -1, *loop != 0, gamesounds, true, *audibleradius));
});
void registerdefaultsounds()
{
loopi(S_NULL)
{
ASSERT(soundcfg[i].key == i);
audiomgr.addsound(soundcfg[i].name, soundcfg[i].vol, -1, soundcfg[i].loop != 0, gamesounds, true, soundcfg[i].audibleradius);
}
}
const char *soundcategories[SC_NUM + 1] = { "PAIN", "OWNPAIN", "WEAPON", "PICKUP", "MOVEMENT", "BULLET", "OTHER", "VOICECOM", "TEAM", "PUBLIC", "FFA", "FLAGONLY", "" };
void enumsounds(char *what)
{
vector<char *> w;
explodelist(what, w);
int flags = 0, nflags = 0;
loopv(w)
{
if(w[i][0] == '!') nflags |= 1 << getlistindex(w[i] + 1, soundcategories, false, 0);
else flags |= 1 << getlistindex(w[i], soundcategories, false, 0);
delstring(w[i]);
}
vector<char> res;
loopi(S_NULL) if((soundcfg[i].flags & flags) && !(soundcfg[i].flags & nflags)) cvecprintf(res, "%d %s\n", i, escapestring(soundcfg[i].desc));
resultcharvector(res, -1);
}
COMMAND(enumsounds, "s");
const char *mapsoundbasepath = "packages/audio/", *mapsoundfinalpath = "ambience/";
const int mapsoundbasepath_n = strlen(mapsoundbasepath), mapsoundfinalpath_n = strlen(mapsoundfinalpath);
+1 -1
View File
@@ -926,7 +926,7 @@ void dokill(playerent *pl, playerent *act, bool gib, int gun)
deathstate(pl);
pl->deaths++;
audiomgr.playsound(S_DIE1+rnd(2), pl);
audiomgr.playsound(rnd(2) ? S_DIE1 : S_DIE2, pl);
}
void pstat_weap(int *cn)
+3 -3
View File
@@ -1794,9 +1794,9 @@ COMMANDF(getmode, "i", (int *acr) { result(modestr(gamemode, *acr != 0)); });
void listoptions(char *s)
{
extern const char *menufilesortorders[], *texturestacktypes[], *soundprioritynames[];
const char *optionnames[] = { "entities", "ents", "weapons", "teamnames", "teamnames-abbrv", "punctuations", "crosshairnames", "menufilesortorders", "texturestacktypes", "cubetypes", "soundpriorities", "" };
const char **optionlists[] = { optionnames, entnames + 1, entnames + 1, gunnames, teamnames, teamnames_s, punctnames, crosshairnames, menufilesortorders, texturestacktypes, cubetypenames, soundprioritynames };
extern const char *menufilesortorders[], *texturestacktypes[], *soundprioritynames[], *soundcategories[];
const char *optionnames[] = { "entities", "ents", "weapons", "teamnames", "teamnames-abbrv", "punctuations", "crosshairnames", "menufilesortorders", "texturestacktypes", "cubetypes", "soundpriorities", "soundcategories", "" };
const char **optionlists[] = { optionnames, entnames + 1, entnames + 1, gunnames, teamnames, teamnames_s, punctnames, crosshairnames, menufilesortorders, texturestacktypes, cubetypenames, soundprioritynames, soundcategories };
const char **listp = optionlists[getlistindex(s, optionnames, true, -1) + 1];
commandret = conc(listp, -1, true);
}
+1
View File
@@ -1187,6 +1187,7 @@ int main(int argc, char **argv)
exec("config/menus.cfg");
exec("config/scripts.cfg");
exec("config/prefabs.cfg");
registerdefaultsounds();
exec("config/sounds.cfg");
exec("config/securemaps.cfg");
exec("config/admin.cfg");
+1 -1
View File
@@ -363,7 +363,7 @@ void sbuffer::unload()
bufferhashtable::~bufferhashtable() {}
sbuffer *bufferhashtable::find(char *name)
sbuffer *bufferhashtable::find(const char *name)
{
sbuffer *b = access(name);
if(!b)
+1 -1
View File
@@ -689,6 +689,6 @@ void addshotline(dynent *pl, const vec &from, const vec &to)
soundpos.mul(fd/(fd+td)*dist);
soundpos.add(from);
if(!bulletairsound || soundpos.dist(camera1->o) > bulletairsoundrad) return; // outside player radius
audiomgr.playsound(S_BULLETAIR1 + rnd(2), &soundpos, SP_LOW);
audiomgr.playsound(rnd(2) ? S_BULLETAIR1 : S_BULLETAIR2, &soundpos, SP_LOW);
}
+1 -1
View File
@@ -3030,7 +3030,7 @@ void process(ENetPacket *packet, int sender, int chan)
/* spam filter */
if ( servmillis > cl->mute ) // client is not muted
{
if( s < S_AFFIRMATIVE || s >= S_NULL ) cl->mute = servmillis + 10000; // vc is invalid
if(!gamesound_isvoicecom(s)) cl->mute = servmillis + 10000; // vc is invalid
else if ( cl->lastvc + 4000 < servmillis ) { if ( cl->spam > 0 ) cl->spam -= (servmillis - cl->lastvc) / 4000; } // no vc in the last 4 seconds
else cl->spam++; // the guy is spamming
if ( cl->spam < 0 ) cl->spam = 0;
+108
View File
@@ -547,3 +547,111 @@ const char *teamnames_s[] = {"CLA", "RVSF", "CSPC", "RSPC", "SPEC", "", "void"};
// for both client and server
// default messages are hardcoded !
char killmessages[2][NUMGUNS][MAXKILLMSGLEN] = {{ "", "busted", "picked off", "peppered", "sprayed", "punctured", "shredded", "busted", "", "busted" }, { "slashed", "", "", "splattered", "", "headshot", "", "", "gibbed", "" }};
#define C(x) (1<<(SC_##x))
soundcfgitem soundcfg[S_NULL] =
{ // name desc vol, loop, rad, key, flags
{ "player/jump", "Jump", 80, 0, 0, S_JUMP, C(MOVEMENT) }, // 0
{ "player/step", "Soft landing", 90, 0, 24, S_SOFTLAND, C(MOVEMENT) }, // 1
{ "player/land", "Hard landing", 95, 0, 24, S_HARDLAND, C(MOVEMENT) }, // 2
{ "weapon/ric1", "Ricochet air 1", 0, 0, 0, S_BULLETAIR1, C(BULLET) }, // 3
{ "weapon/ric2", "Ricochet air 2", 0, 0, 0, S_BULLETAIR2, C(BULLET) }, // 4
{ "weapon/ric3", "Ricochet hit", 0, 0, 0, S_BULLETHIT, C(BULLET) }, // 5
{ "weapon/waterimpact", "Bullet (water impact)", 0, 0, 0, S_BULLETWATERHIT, C(BULLET) }, // 6
{ "weapon/knife", "Knife", 0, 0, 0, S_KNIFE, C(WEAPON) }, // 7
{ "weapon/usp", "Pistol", 0, 0, 0, S_PISTOL, C(WEAPON) }, // 8
{ "weapon/pistol_reload", "Pistol reloading", 0, 0, 0, S_RPISTOL, C(WEAPON) }, // 9
{ "weapon/carbine", "Carbine", 0, 0, 0, S_CARBINE, C(WEAPON) }, // 10
{ "weapon/carbine_reload", "Carbine reloading", 0, 0, 0, S_RCARBINE, C(WEAPON) }, // 11
{ "weapon/shotgun", "Shotgun", 0, 0, 0, S_SHOTGUN, C(WEAPON) }, // 12
{ "weapon/shotgun_reload", "Shotgun reloading", 0, 0, 0, S_RSHOTGUN, C(WEAPON) }, // 13
{ "weapon/sub", "Submachine gun", 0, 0, 0, S_SUBGUN, C(WEAPON) }, // 14
{ "weapon/sub_reload", "Submachine gun reloading", 0, 0, 0, S_RSUBGUN, C(WEAPON) }, // 15
{ "weapon/sniper", "Sniper", 0, 0, 0, S_SNIPER, C(WEAPON) }, // 16
{ "weapon/sniper_reload", "Sniper reloading", 0, 0, 0, S_RSNIPER, C(WEAPON) }, // 17
{ "weapon/auto", "Assault rifle", 0, 0, 0, S_ASSAULT, C(WEAPON) }, // 18
{ "weapon/auto_reload", "Assault rifle reloading", 0, 0, 0, S_RASSAULT, C(WEAPON) }, // 19
{ "misc/pickup_ammo_clip", "Ammo pickup", 0, 0, 0, S_ITEMAMMO, C(PICKUP) }, // 20
{ "misc/pickup_health", "Health pickup", 0, 0, 0, S_ITEMHEALTH, C(PICKUP) }, // 21
{ "misc/pickup_armour", "Armour pickup", 0, 0, 0, S_ITEMARMOUR, C(PICKUP) }, // 22
{ "misc/tick9", "Akimbo pickup", 0, 0, 0, S_ITEMAKIMBO, C(PICKUP) }, // 23
{ "weapon/clip_empty", "Empty clip", 0, 0, 0, S_NOAMMO, C(WEAPON) }, // 24
{ "misc/tick11", "Akimbo finished", 0, 0, 0, S_AKIMBOOUT, C(PICKUP) }, // 25
{ "player/pain1", "Pain 1", 0, 0, 0, S_PAIN1, C(PAIN) }, // 26
{ "player/pain2", "Pain 2", 0, 0, 0, S_PAIN2, C(PAIN) }, // 27
{ "player/pain3", "Pain 3", 0, 0, 0, S_PAIN3, C(PAIN) }, // 28
{ "player/pain4", "Pain 4", 0, 0, 0, S_PAIN4, C(PAIN) }, // 29
{ "player/pain5", "Pain 5", 0, 0, 0, S_PAIN5, C(PAIN) }, // 30
{ "player/pain6", "Pain 6", 0, 0, 0, S_PAIN6, C(PAIN) }, // 31
{ "player/die1", "Die 1", 0, 0, 0, S_DIE1, C(PAIN) }, // 32
{ "player/die2", "Die 2", 0, 0, 0, S_DIE2, C(PAIN) }, // 33
{ "weapon/grenade_exp", "Grenade explosion", 0, 0, 0, S_FEXPLODE, C(BULLET) }, // 34
{ "player/splash1", "Splash 1", 0, 0, 0, S_SPLASH1, C(MOVEMENT) }, // 35
{ "player/splash2", "Splash 2", 0, 0, 0, S_SPLASH2, C(MOVEMENT) }, // 36
{ "ctf/flagdrop", "Flag drop", 0, 0, 0, S_FLAGDROP, C(OTHER) }, // 37
{ "ctf/flagpickup", "Flag pickup", 0, 0, 0, S_FLAGPICKUP, C(OTHER) }, // 38
{ "ctf/flagreturn", "Flag return", 0, 0, 0, S_FLAGRETURN, C(OTHER) }, // 39
{ "ctf/flagscore", "Flag score", 0, 0, 0, S_FLAGSCORE, C(OTHER) }, // 40
{ "weapon/grenade_pull", "Grenade pull", 0, 0, 0, S_GRENADEPULL, C(WEAPON) }, // 41
{ "weapon/grenade_throw", "Grenade throw", 0, 0, 0, S_GRENADETHROW, C(WEAPON) }, // 42
{ "weapon/grenade_bounce1", "Grenade bounce 1", 0, 0, 0, S_GRENADEBOUNCE1, C(WEAPON) }, // 43
{ "weapon/grenade_bounce2", "Grenade bounce 2", 0, 0, 0, S_GRENADEBOUNCE2, C(WEAPON) }, // 44
{ "weapon/pistol_akreload", "Akimbo reload", 0, 0, 0, S_RAKIMBO, C(WEAPON) }, // 45
{ "misc/change_gun", "Change weapon", 0, 0, 0, S_GUNCHANGE, C(WEAPON) }, // 46
{ "misc/impact_t", "Hit sound", 0, 0, 0, S_HITSOUND, C(BULLET) }, // 47
{ "player/gib", "Gib sounds", 0, 0, 0, S_GIB, C(PAIN) }, // 48
{ "misc/headshot", "Headshot", 10, 0, 0, S_HEADSHOT, C(OTHER) }, // 49
{ "vote/vote_call", "Call vote", 0, 0, 0, S_CALLVOTE, C(OTHER) }, // 50
{ "vote/vote_pass", "Pass vote", 0, 0, 0, S_VOTEPASS, C(OTHER) }, // 51
{ "vote/vote_fail", "Fail vote", 0, 0, 0, S_VOTEFAIL, C(OTHER) }, // 52
{ "player/footsteps", "Footsteps", 40, 1, 20, S_FOOTSTEPS, C(MOVEMENT) }, // 53
{ "player/crouch", "Crouch", 40, 1, 10, S_FOOTSTEPSCROUCH, C(MOVEMENT) }, // 54
{ "player/watersteps", "Water footsteps", 40, 1, 20, S_WATERFOOTSTEPS, C(MOVEMENT) }, // 55
{ "player/watercrouch", "Water crouching", 40, 1, 10, S_WATERFOOTSTEPSCROUCH, C(MOVEMENT) }, // 56
{ "player/crouch_in", "Crouch-in", 85, 0, 14, S_CROUCH, C(MOVEMENT) }, // 57
{ "player/crouch_out", "Crouch-out", 75, 0, 14, S_UNCROUCH, C(MOVEMENT) }, // 58
{ "misc/menu_click1", "Menu select", 0, 0, 0, S_MENUSELECT, C(OTHER) }, // 59
{ "misc/menu_click2", "Menu enter", 0, 0, 0, S_MENUENTER, C(OTHER) }, // 60
{ "player/underwater", "Underwater", 0, 0, 0, S_UNDERWATER, C(MOVEMENT) }, // 61
{ "misc/tinnitus", "Tinnitus", 2, 0, 0, S_TINNITUS, C(OWNPAIN) }, // 62
{ "voicecom/affirmative", "Affirmative", 0, 0, 0, S_AFFIRMATIVE, C(VOICECOM)|C(TEAM) }, // 63
{ "voicecom/allrightsir", "All-right sir", 0, 0, 0, S_ALLRIGHTSIR, C(VOICECOM)|C(TEAM) }, // 64
{ "voicecom/comeonmove", "Come on, move", 0, 0, 0, S_COMEONMOVE, C(VOICECOM)|C(TEAM)|C(PUBLIC)|C(FFA) }, // 65
{ "voicecom/cominginwiththeflag", "Coming in with the flag", 0,0,0, S_COMINGINWITHTHEFLAG, C(VOICECOM)|C(TEAM) |C(FLAGONLY) }, // 66
{ "voicecom/coverme", "Cover me", 0, 0, 0, S_COVERME, C(VOICECOM)|C(TEAM) }, // 67
{ "voicecom/defendtheflag", "Defend the flag", 0, 0, 0, S_DEFENDTHEFLAG, C(VOICECOM)|C(TEAM) |C(FLAGONLY) }, // 68
{ "voicecom/enemydown", "Enemy down", 0, 0, 0, S_ENEMYDOWN, C(VOICECOM)|C(TEAM)|C(PUBLIC) }, // 69
{ "voicecom/gogetemboys", "Go get 'em boys!", 0, 0, 0, S_GOGETEMBOYS, C(VOICECOM)|C(TEAM) }, // 70
{ "voicecom/goodjobteam", "Good job team", 0, 0, 0, S_GOODJOBTEAM, C(VOICECOM)|C(TEAM) }, // 71
{ "voicecom/igotone", "I got one!", 0, 0, 0, S_IGOTONE, C(VOICECOM)|C(TEAM)|C(PUBLIC) }, // 72
{ "voicecom/imadecontact", "I made contact", 0, 0, 0, S_IMADECONTACT, C(VOICECOM)|C(TEAM) }, // 73
{ "voicecom/imattacking", "I'm attacking", 0, 0, 0, S_IMATTACKING, C(VOICECOM)|C(TEAM) }, // 74
{ "voicecom/imondefense", "I'm on defense", 0, 0, 0, S_IMONDEFENSE, C(VOICECOM)|C(TEAM) }, // 75
{ "voicecom/imonyourteamman", "I'm on your team", 0, 0, 0, S_IMONYOURTEAMMAN, C(VOICECOM)|C(TEAM) }, // 76
{ "voicecom/negative", "Negative", 0, 0, 0, S_NEGATIVE, C(VOICECOM)|C(TEAM) }, // 77
{ "voicecom/nocando", "No can do", 0, 0, 0, S_NOCANDO, C(VOICECOM)|C(TEAM) }, // 78
{ "voicecom/recovertheflag", "Recover the flag", 0, 0, 0, S_RECOVERTHEFLAG, C(VOICECOM)|C(TEAM) |C(FLAGONLY) }, // 79
{ "voicecom/sorry", "Sorry", 0, 0, 0, S_SORRY, C(VOICECOM)|C(TEAM)|C(PUBLIC)|C(FFA) }, // 80
{ "voicecom/spreadout", "Spread out", 0, 0, 0, S_SPREADOUT, C(VOICECOM)|C(TEAM) }, // 81
{ "voicecom/stayhere", "Stay here", 0, 0, 0, S_STAYHERE, C(VOICECOM)|C(TEAM) }, // 82
{ "voicecom/staytogether", "Stay together", 0, 0, 0, S_STAYTOGETHER, C(VOICECOM)|C(TEAM) }, // 83
{ "voicecom/theresnowaysir", "There's no way sir", 0, 0, 0, S_THERESNOWAYSIR, C(VOICECOM)|C(TEAM) }, // 84
{ "voicecom/wedidit", "We did it!", 0, 0, 0, S_WEDIDIT, C(VOICECOM)|C(TEAM) }, // 85
{ "voicecom/yes", "Yes", 0, 0, 0, S_YES, C(VOICECOM)|C(TEAM) }, // 86
{ "voicecom/onthemove_1", "Under way", 0, 0, 0, S_ONTHEMOVE1, C(VOICECOM)|C(TEAM) }, // 87
{ "voicecom/onthemove_2", "On the move", 0, 0, 0, S_ONTHEMOVE2, C(VOICECOM)|C(TEAM) }, // 88
{ "voicecom/igotyourback", "Got your back", 0, 0, 0, S_GOTURBACK, C(VOICECOM)|C(TEAM) }, // 89
{ "voicecom/igotyoucovered", "Got you covered", 0, 0, 0, S_GOTUCOVERED, C(VOICECOM)|C(TEAM) }, // 90
{ "voicecom/inposition_1", "In position", 0, 0, 0, S_INPOSITION1, C(VOICECOM)|C(TEAM) }, // 91
{ "voicecom/inposition_2", "In position now", 0, 0, 0, S_INPOSITION2, C(VOICECOM)|C(TEAM) }, // 92
{ "voicecom/reportin", "Report in!", 0, 0, 0, S_REPORTIN, C(VOICECOM)|C(TEAM) }, // 93
{ "voicecom/niceshot", "Nice shot", 0, 0, 0, S_NICESHOT, C(VOICECOM)|C(TEAM)|C(PUBLIC)|C(FFA) }, // 94
{ "voicecom/thanks_1", "Thanks", 0, 0, 0, S_THANKS1, C(VOICECOM)|C(TEAM)|C(PUBLIC)|C(FFA) }, // 95
{ "voicecom/thanks_2", "Thanks, man", 0, 0, 0, S_THANKS2, C(VOICECOM)|C(TEAM)|C(PUBLIC)|C(FFA) }, // 96
{ "voicecom/awesome_1", "Awesome (1)", 0, 0, 0, S_AWESOME1, C(VOICECOM)|C(TEAM)|C(PUBLIC)|C(FFA) }, // 97
{ "voicecom/awesome_2", "Awesome (2)", 0, 0, 0, S_AWESOME2, C(VOICECOM)|C(TEAM)|C(PUBLIC)|C(FFA) }, // 98
{ "misc/pickup_helmet", "Helmet pickup", 0, 0, 0, S_ITEMHELMET, C(PICKUP) }, // 99
{ "player/heartbeat", "Heartbeat", 0, 0, 0, S_HEARTBEAT, C(OWNPAIN) }, // 100
{ "ktf/flagscore", "KTF score", 0, 0, 0, S_KTFSCORE, C(OTHER) } // 101
};
#undef C
+23 -14
View File
@@ -1,9 +1,7 @@
// hardcoded sounds, defined in sounds.cfg
// hardcoded sounds, details in server.h
enum
{ // To avoid a lot of work, possible bugs and allow backward compatibility for players own custom
// cfg files, it's best not to change the listed sound order, instead, just add to it.
{ // beware: sound order is part of the game protocol
S_JUMP = 0,
S_SOFTLAND, S_HARDLAND,
S_BULLETAIR1, S_BULLETAIR2, S_BULLETHIT, S_BULLETWATERHIT,
@@ -17,7 +15,7 @@ enum
S_ITEMAMMO, S_ITEMHEALTH,
S_ITEMARMOUR, S_ITEMAKIMBO,
S_NOAMMO, S_AKIMBOOUT,
S_PAIN1, S_PAIN2, S_PAIN3, S_PAIN4, S_PAIN5, S_PAIN6,
S_PAIN1, S_PAIN2, S_PAIN3, S_PAIN4, S_PAIN5, S_PAIN6, // S_PAIN2..S_PAIN5 are hardcoded S_PAIN1+1..S_PAIN1+4
S_DIE1, S_DIE2,
S_FEXPLODE,
S_SPLASH1, S_SPLASH2,
@@ -27,7 +25,7 @@ enum
S_HITSOUND,
S_GIB, S_HEADSHOT,
S_CALLVOTE, S_VOTEPASS, S_VOTEFAIL,
S_FOOTSTEPS, S_FOOTSTEPSCROUCH, S_WATERFOOTSTEPS, S_WATERFOOTSTEPSCROUCH,
S_FOOTSTEPS, S_FOOTSTEPSCROUCH, S_WATERFOOTSTEPS, S_WATERFOOTSTEPSCROUCH, // hardcoded S_FOOTSTEPS+0..S_FOOTSTEPS+3
S_CROUCH, S_UNCROUCH,
S_MENUSELECT, S_MENUENTER,
S_UNDERWATER,
@@ -76,8 +74,20 @@ enum
S_NULL
};
#define valid_voicecom(x) ((x) >= S_AFFIRMATIVE && (x) <= S_AWESOME2) // all voicecoms
#define valid_voicecom_public(x) ((x) >= S_NICESHOT && (x) <= S_AWESOME2) // voicecoms always sent to all players
enum { SC_PAIN = 0, SC_OWNPAIN, SC_WEAPON, SC_PICKUP, SC_MOVEMENT, SC_BULLET, SC_OTHER, SC_VOICECOM, SC_TEAM, SC_PUBLIC, SC_FFA, SC_FLAGONLY, SC_NUM }; // sound categories
#define gamesound_isvalid(x) ((x) >= 0 && (x) < S_NULL) // bounds check for soundcfg[]
#define gamesound_hasflag(x, mask) (gamesound_isvalid(x) && (soundcfg[x].flags & mask) != 0)
#define gamesound_isvoicecom(x) gamesound_hasflag(x, 1 << SC_VOICECOM) // all voicecoms
#define gamesound_ispublicvoicecom(x) gamesound_hasflag(x, 1 << SC_PUBLIC) // voicecoms always sent to all players
struct soundcfgitem {
const char *name, *desc;
uchar vol, loop, audibleradius, key;
int flags;
};
extern soundcfgitem soundcfg[S_NULL];
// hardcoded music
@@ -171,11 +181,11 @@ public:
// buffer storage
class bufferhashtable : public hashtable<char *, sbuffer>
class bufferhashtable : public hashtable<const char *, sbuffer>
{
public:
virtual ~bufferhashtable();
virtual sbuffer *find(char *name);
virtual sbuffer *find(const char *name);
};
// manages available sources, abstracts audio channels
@@ -401,7 +411,7 @@ public:
// configuration
void setchannels(int num);
void setlistenervol(int vol);
int addsound(char *name, int vol, int maxuses, bool loop, vector<soundconfig> &sounds, bool load, int audibleradius);
int addsound(const char *name, int vol, int maxuses, bool loop, vector<soundconfig> &sounds, bool load, int audibleradius);
void registermusic(char *name);
void mutesound(int n, int off);
void unmuteallsounds();
@@ -429,7 +439,7 @@ public:
void playsoundname(char *s, const vec *loc, int vol);
void playsoundc(int n, physent *p = NULL, int priority = SP_NORMAL);
void sound(int n);
int findsound(char *name, int vol, vector<soundconfig> &sounds);
int findsound(const char *name, int vol, vector<soundconfig> &sounds);
void detachsounds(class playerent *owner);
// update
@@ -451,7 +461,6 @@ extern ov_callbacks oggcallbacks;
extern int soundvol;
extern int audiodebug;
extern int voicecomsounds;
extern audiomanager audiomgr;
extern void registerdefaultsounds();
#endif //#ifndef STANDALONE
+2 -2
View File
@@ -783,7 +783,7 @@ bool weapon::reload(bool autoreloaded)
ammo -= numbullets;
bool local = (player1 == owner);
audiomgr.playsound(info.reload, owner, local ? SP_HIGH : SP_NORMAL);
if(info.reload != S_NULL) audiomgr.playsound(info.reload, owner, local ? SP_HIGH : SP_NORMAL);
if(local)
{
addmsg(SV_RELOAD, "ri2", lastmillis, owner->weaponsel->type);
@@ -1013,7 +1013,7 @@ bool grenadeent::applyphysics() { return nadestate==NS_THROWN; }
void grenadeent::oncollision()
{
if(distsincebounce>=1.5f) audiomgr.playsound(S_GRENADEBOUNCE1+rnd(2), &o);
if(distsincebounce>=1.5f) audiomgr.playsound(rnd(2) ? S_GRENADEBOUNCE1 : S_GRENADEBOUNCE2, &o);
distsincebounce = 0.0f;
}