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 setfont default // Choose your font
gfxqualityalias = 3 // Default GFX is medium. gfxqualityalias = 3 // Default GFX is medium.
soundqualityalias = 3 // Default sound is best.
menuBotGameLength = 15 menuBotGameLength = 15
+30 -147
View File
@@ -57,7 +57,7 @@ menuitemcheckbox [Fullscreen: ] "$fullscreen" [ fullscreen $arg1 ]
menuitemtextinput [Mouse sensitivity: ] "$sensitivity" [ sensitivity $arg1 ] menuitemtextinput [Mouse sensitivity: ] "$sensitivity" [ sensitivity $arg1 ]
menuitemcheckbox [Reduced violence mode: ] "$poniesmodeon" [ reducedviolencemode $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 [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 ] menuitemslider [Field of view: ] 75 120 "$fov" 2 [] [ fov $arg1 ]
menuitem [] -1 menuitem [] -1
menuitem "\f0\t\t\t [ OK; View FAQ ]" [ closecurmenu; resetgl; load_faq ; showmenu faq ] 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 [ const __set_sound_quality [
if (= $arg1 3) [ // high sound (DEFAULT) looplist [
soundqualityalias = 3 3 (getvarrange default maxsoundsatonce) 1 1 1
maxsoundsatonce (getvarrange default maxsoundsatonce) 2 (div (getvarrange default maxsoundsatonce) 2) 1 0 1
footsteps 1 1 (div (getvarrange default maxsoundsatonce) 4) 0 0 0
bulletairsound 1 ] [ idx maxsounds foots bullair bullbounce ] [
bulletbouncesound 1 if (= $arg1 $idx) [
] [ __soundquality = $idx
if (= $arg1 2) [ // medium maxsoundsatonce $maxsounds
soundqualityalias = 2 footsteps $foots
maxsoundsatonce (div (getvarrange default maxsoundsatonce) 2) bulletairsound $bullair
footsteps 1 bulletbouncesound $bullbounce
bulletairsound 0 ]
bulletbouncesound 1
] [ // low
soundqualityalias = 1
maxsoundsatonce (div (getvarrange default maxsoundsatonce) 4)
footsteps 0
bulletairsound 0
bulletbouncesound 0
] ]
]
] ]
newmenu [Reset settings] newmenu [Reset settings]
@@ -526,7 +518,7 @@ const reducedviolencemode [
poniesmodeon = (! $x) poniesmodeon = (! $x)
blood $x blood $x
gib $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."]) echo "\f2OMG! \f8PW\f1NI\f3ES\f5! mode" (if $x [result "has been disabled."] [result "enabled - Violent game content has now been reduced."])
pop x pop x
] ]
@@ -588,11 +580,13 @@ menuitemslider [ Spectator max-roll: ] 0 (getvarrange max maxrollremote) "$m
menuitem [] -1 menuitem [] -1
menuitem [Customize your scoreboard...] [ showmenu [Customize your scoreboard] ] menuitem [Customize your scoreboard...] [ showmenu [Customize your scoreboard] ]
alias __soundquality 3
newmenu sound newmenu sound
menuitemslider [Sound volume: ] 0 255 "$soundvol" 16 [] [ soundvol $arg1 ] menuitemslider [Sound volume: ] 0 255 "$soundvol" 16 [] [ soundvol $arg1 ]
menuitemslider [Music volume: ] 0 255 "$musicvol" 16 [] [ musicvol $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 [] -1
menuitem [Mute/Un-mute specific sounds...] [ showmenu [Mute specific sounds] ] menuitem [Mute/Un-mute specific sounds...] [ showmenu [Mute specific sounds] ]
menuitem [] -1 menuitem [] -1
@@ -605,8 +599,6 @@ menuitemcheckbox [ Disable own footsteps: ] "(= $localfootsteps)" [
menuitemcheckbox [ Bullet hit: ] "$bulletbouncesound" [ bulletbouncesound $arg1 ] menuitemcheckbox [ Bullet hit: ] "$bulletbouncesound" [ bulletbouncesound $arg1 ]
menuitemcheckbox [ Bullet near-miss: ] "$bulletairsound" [ bulletairsound $arg1 ] menuitemcheckbox [ Bullet near-miss: ] "$bulletairsound" [ bulletairsound $arg1 ]
const muteitem [ menuitemcheckbox (concatword $arg1 [: ]) (concat ! "(soundmuted" $arg2 ")") (concat mutesound $arg2 "$arg1") ]
newmenu [Mute specific sounds] newmenu [Mute specific sounds]
menuitem [Weapon sounds] [ showmenu [Mute weapon sounds] ] menuitem [Weapon sounds] [ showmenu [Mute weapon sounds] ]
@@ -619,127 +611,18 @@ menuitem [Other sounds] [ showmenu [Mute other sounds] ]
menuitem [] -1 menuitem [] -1
menuitem [Un-mute all sounds...] [ unmuteallsounds ] menuitem [Un-mute all sounds...] [ unmuteallsounds ]
newmenu [Mute weapon sounds] looplist [
"Mute weapon sounds" WEAPON
muteitem [Knife] 7 "Mute pickup sounds" PICKUP
muteitem [Pistol] 8 "Mute pain/death sounds" "PAIN OWNPAIN"
muteitem [Pistol reloading] 9 "Mute movement sounds" MOVEMENT
muteitem [Carbine] 10 "Mute bullet/explosion sounds" BULLET
muteitem [Carbine reloading] 11 "Mute other sounds" OTHER
muteitem [Shotgun] 12 "Mute voice-coms" VOICECOM
muteitem [Shotgun reloading] 13 ] [ mt sc ] [
muteitem [Submachine gun] 14 newmenu $mt
muteitem [Submachine gun reloading] 15 looplist (enumsounds $sc) [ idx desc ] [ menuitemcheckbox (concatword $desc ": ") (concat ! "(soundmuted" $idx ")") (concat mutesound $idx "$arg1") ]
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
newmenu [Kill Messages] newmenu [Kill Messages]
menuitem "\f9Frag messages: " -1 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. addpunct punctuations // the command addpunct actually wants the punctuation name as second argument, but we can't do that. sry.
loadcrosshair crosshairnames loadcrosshair crosshairnames
edittexturestack texturestacktypes edittexturestack texturestacktypes
enumsounds soundcategories
] [ cmd options ] [ listcomplete $cmd (listoptions $options) ] [ cmd options ] [ listcomplete $cmd (listoptions $options)
] ]
listcomplete edittagclip "none plclip clip" listcomplete edittagclip "none plclip clip"
-113
View File
@@ -1,118 +1,5 @@
// AssaultCube game sounds // 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 // Music
registermusic "pingpong/Ping_Pong_-_Kamikadze" // M_FLAGGRAB registermusic "pingpong/Ping_Pong_-_Kamikadze" // M_FLAGGRAB
registermusic "pingpong/Ping_Pong_-_Headshot" // M_LASTMINUTE1 registermusic "pingpong/Ping_Pong_-_Headshot" // M_LASTMINUTE1
+32 -4
View File
@@ -201,7 +201,7 @@ void audiomanager::registermusic(char *name)
musics.add(newstring(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) loopv(sounds)
{ {
@@ -210,7 +210,7 @@ int audiomanager::findsound(char *name, int vol, vector<soundconfig> &sounds)
return -1; 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(nosound) return -1;
if(!soundvol) return -1; if(!soundvol) return -1;
@@ -429,9 +429,9 @@ void voicecom(char *sound, char *text)
{ {
defformatstring(soundpath)("voicecom/%s", sound); defformatstring(soundpath)("voicecom/%s", sound);
int s = audiomgr.findsound(soundpath, 0, gamesounds); 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(voicecomsounds>0) audiomgr.playsound(s, SP_HIGH);
if(valid_voicecom_public(s)) // public if(gamesound_ispublicvoicecom(s)) // public
{ {
addmsg(SV_VOICECOM, "ri", s); addmsg(SV_VOICECOM, "ri", s);
toserver(text); 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)); 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 char *mapsoundbasepath = "packages/audio/", *mapsoundfinalpath = "ambience/";
const int mapsoundbasepath_n = strlen(mapsoundbasepath), mapsoundfinalpath_n = strlen(mapsoundfinalpath); 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); deathstate(pl);
pl->deaths++; pl->deaths++;
audiomgr.playsound(S_DIE1+rnd(2), pl); audiomgr.playsound(rnd(2) ? S_DIE1 : S_DIE2, pl);
} }
void pstat_weap(int *cn) 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) void listoptions(char *s)
{ {
extern const char *menufilesortorders[], *texturestacktypes[], *soundprioritynames[]; extern const char *menufilesortorders[], *texturestacktypes[], *soundprioritynames[], *soundcategories[];
const char *optionnames[] = { "entities", "ents", "weapons", "teamnames", "teamnames-abbrv", "punctuations", "crosshairnames", "menufilesortorders", "texturestacktypes", "cubetypes", "soundpriorities", "" }; 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 }; 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]; const char **listp = optionlists[getlistindex(s, optionnames, true, -1) + 1];
commandret = conc(listp, -1, true); commandret = conc(listp, -1, true);
} }
+1
View File
@@ -1187,6 +1187,7 @@ int main(int argc, char **argv)
exec("config/menus.cfg"); exec("config/menus.cfg");
exec("config/scripts.cfg"); exec("config/scripts.cfg");
exec("config/prefabs.cfg"); exec("config/prefabs.cfg");
registerdefaultsounds();
exec("config/sounds.cfg"); exec("config/sounds.cfg");
exec("config/securemaps.cfg"); exec("config/securemaps.cfg");
exec("config/admin.cfg"); exec("config/admin.cfg");
+1 -1
View File
@@ -363,7 +363,7 @@ void sbuffer::unload()
bufferhashtable::~bufferhashtable() {} bufferhashtable::~bufferhashtable() {}
sbuffer *bufferhashtable::find(char *name) sbuffer *bufferhashtable::find(const char *name)
{ {
sbuffer *b = access(name); sbuffer *b = access(name);
if(!b) 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.mul(fd/(fd+td)*dist);
soundpos.add(from); soundpos.add(from);
if(!bulletairsound || soundpos.dist(camera1->o) > bulletairsoundrad) return; // outside player radius 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 */ /* spam filter */
if ( servmillis > cl->mute ) // client is not muted 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 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 else cl->spam++; // the guy is spamming
if ( cl->spam < 0 ) cl->spam = 0; 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 // for both client and server
// default messages are hardcoded ! // default messages are hardcoded !
char killmessages[2][NUMGUNS][MAXKILLMSGLEN] = {{ "", "busted", "picked off", "peppered", "sprayed", "punctured", "shredded", "busted", "", "busted" }, { "slashed", "", "", "splattered", "", "headshot", "", "", "gibbed", "" }}; 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 enum
{ // To avoid a lot of work, possible bugs and allow backward compatibility for players own custom { // beware: sound order is part of the game protocol
// cfg files, it's best not to change the listed sound order, instead, just add to it.
S_JUMP = 0, S_JUMP = 0,
S_SOFTLAND, S_HARDLAND, S_SOFTLAND, S_HARDLAND,
S_BULLETAIR1, S_BULLETAIR2, S_BULLETHIT, S_BULLETWATERHIT, S_BULLETAIR1, S_BULLETAIR2, S_BULLETHIT, S_BULLETWATERHIT,
@@ -17,7 +15,7 @@ enum
S_ITEMAMMO, S_ITEMHEALTH, S_ITEMAMMO, S_ITEMHEALTH,
S_ITEMARMOUR, S_ITEMAKIMBO, S_ITEMARMOUR, S_ITEMAKIMBO,
S_NOAMMO, S_AKIMBOOUT, 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_DIE1, S_DIE2,
S_FEXPLODE, S_FEXPLODE,
S_SPLASH1, S_SPLASH2, S_SPLASH1, S_SPLASH2,
@@ -27,7 +25,7 @@ enum
S_HITSOUND, S_HITSOUND,
S_GIB, S_HEADSHOT, S_GIB, S_HEADSHOT,
S_CALLVOTE, S_VOTEPASS, S_VOTEFAIL, 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_CROUCH, S_UNCROUCH,
S_MENUSELECT, S_MENUENTER, S_MENUSELECT, S_MENUENTER,
S_UNDERWATER, S_UNDERWATER,
@@ -76,8 +74,20 @@ enum
S_NULL S_NULL
}; };
#define valid_voicecom(x) ((x) >= S_AFFIRMATIVE && (x) <= S_AWESOME2) // all voicecoms 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 valid_voicecom_public(x) ((x) >= S_NICESHOT && (x) <= S_AWESOME2) // voicecoms always sent to all players
#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 // hardcoded music
@@ -171,11 +181,11 @@ public:
// buffer storage // buffer storage
class bufferhashtable : public hashtable<char *, sbuffer> class bufferhashtable : public hashtable<const char *, sbuffer>
{ {
public: public:
virtual ~bufferhashtable(); virtual ~bufferhashtable();
virtual sbuffer *find(char *name); virtual sbuffer *find(const char *name);
}; };
// manages available sources, abstracts audio channels // manages available sources, abstracts audio channels
@@ -401,7 +411,7 @@ public:
// configuration // configuration
void setchannels(int num); void setchannels(int num);
void setlistenervol(int vol); 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 registermusic(char *name);
void mutesound(int n, int off); void mutesound(int n, int off);
void unmuteallsounds(); void unmuteallsounds();
@@ -429,7 +439,7 @@ public:
void playsoundname(char *s, const vec *loc, int vol); void playsoundname(char *s, const vec *loc, int vol);
void playsoundc(int n, physent *p = NULL, int priority = SP_NORMAL); void playsoundc(int n, physent *p = NULL, int priority = SP_NORMAL);
void sound(int n); 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); void detachsounds(class playerent *owner);
// update // update
@@ -451,7 +461,6 @@ extern ov_callbacks oggcallbacks;
extern int soundvol; extern int soundvol;
extern int audiodebug; extern int audiodebug;
extern int voicecomsounds; extern int voicecomsounds;
extern audiomanager audiomgr; extern audiomanager audiomgr;
extern void registerdefaultsounds();
#endif //#ifndef STANDALONE #endif //#ifndef STANDALONE
+2 -2
View File
@@ -783,7 +783,7 @@ bool weapon::reload(bool autoreloaded)
ammo -= numbullets; ammo -= numbullets;
bool local = (player1 == owner); 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) if(local)
{ {
addmsg(SV_RELOAD, "ri2", lastmillis, owner->weaponsel->type); addmsg(SV_RELOAD, "ri2", lastmillis, owner->weaponsel->type);
@@ -1013,7 +1013,7 @@ bool grenadeent::applyphysics() { return nadestate==NS_THROWN; }
void grenadeent::oncollision() 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; distsincebounce = 0.0f;
} }