+float music_disabled;
entity music_default;
entity music_target;
entity music_trigger;
best = music_target;
if(music_trigger)
best = music_trigger;
- for(e = world; (e = findfloat(e, enttype, ENT_CLIENT_TRIGGER_MUSIC)); )
+ for(e = world; (e = findfloat(e, enttype, ENT_CLIENT_TRIGGER_MUSIC)); ) if(e.noise)
{
s0 = e.state;
+ if(getsoundtime(e, CHAN_VOICE) < 0)
+ {
+ s0 = -1;
+ }
if(e == best)
{
// increase volume
if(e.fade_time > 0)
- e.state = min(1, e.state + frametime / e.fade_time);
+ e.state = bound(0, e.state + frametime / e.fade_time, 1);
else
e.state = 1;
}
{
// decrease volume
if(e.fade_rate > 0)
- e.state = max(0, e.state - frametime / e.fade_rate);
+ e.state = bound(0, e.state - frametime / e.fade_rate, 1);
else
e.state = 0;
}
if(e.state != s0)
{
- sound(e, CHAN_VOICE, "", e.volume * e.state * cvar("bgmvolume"), ATTN_NONE);
+ if(s0 < 0)
+ sound(e, CHAN_VOICE, e.noise, e.volume * e.state * cvar("bgmvolume"), ATTN_NONE); // restart
+ else
+ sound(e, CHAN_VOICE, "", e.volume * e.state * cvar("bgmvolume"), ATTN_NONE);
}
}
music_trigger = world;
{
precache_sound(e.noise);
sound(e, CHAN_VOICE, e.noise, 0, ATTN_NONE);
+ if(getsoundtime(e, CHAN_VOICE) < 0)
+ {
+ print("Cannot initialize sound ", e.noise, "\n");
+ strunzone(e.noise);
+ e.noise = string_null;
+ }
}
e.volume = vol;
e.fade_time = fai;
if(tim == 0)
{
music_default = e;
+ if(!music_disabled)
+ {
+ e.state = 2;
+ localcmd("cd stop\n"); // just in case
+ music_disabled = 1;
+ }
}
else
{
{
precache_sound(self.noise);
sound(self, CHAN_VOICE, self.noise, 0, ATTN_NONE);
+ if(getsoundtime(self, CHAN_VOICE) < 0)
+ {
+ print("Cannot initialize sound ", self.noise, "\n");
+ strunzone(self.noise);
+ self.noise = string_null;
+ }
}
}