set_sound with channel, undocumented feature ;)
This commit is contained in:
parent
ca921c7883
commit
61b85083f5
|
@ -1104,14 +1104,26 @@ void game_sound_player(void)
|
|||
{
|
||||
wav_t w;
|
||||
char *snd;
|
||||
int chan = -1;
|
||||
|
||||
if (!snd_volume_mus(-1))
|
||||
return;
|
||||
snd = instead_eval("return get_sound_chan()");
|
||||
if (snd) {
|
||||
chan = atoi(snd);
|
||||
free(snd);
|
||||
}
|
||||
|
||||
snd = instead_eval("return get_sound()");
|
||||
if (!snd)
|
||||
if (!snd) {
|
||||
if (chan != -1) {
|
||||
/* halt channel */
|
||||
snd_halt_chan(chan);
|
||||
}
|
||||
return;
|
||||
|
||||
}
|
||||
do { /* reset sound */
|
||||
char *p = instead_eval("set_sound(nil)");
|
||||
char *p = instead_eval("set_sound(nil, -1)");
|
||||
if (p)
|
||||
free(p);
|
||||
} while(0);
|
||||
|
@ -1123,7 +1135,7 @@ void game_sound_player(void)
|
|||
free(snd);
|
||||
if (!w)
|
||||
return;
|
||||
snd_play(w);
|
||||
snd_play(w, chan);
|
||||
}
|
||||
|
||||
char *horiz_inv(char *invstr)
|
||||
|
@ -1646,7 +1658,7 @@ int game_click(int x, int y, int action, int filter)
|
|||
if (mouse_filter(filter))
|
||||
return 0;
|
||||
if (opt_click)
|
||||
snd_play(game_theme.click);
|
||||
snd_play(game_theme.click, -1);
|
||||
game_cmd(buf);
|
||||
return 1;
|
||||
|
||||
|
@ -1669,7 +1681,7 @@ int game_click(int x, int y, int action, int filter)
|
|||
disable_use();
|
||||
|
||||
if (opt_click)
|
||||
snd_play(game_theme.click);
|
||||
snd_play(game_theme.click, -1);
|
||||
|
||||
game_cmd(buf);
|
||||
return 1;
|
||||
|
|
|
@ -109,6 +109,11 @@ void snd_free_wav(wav_t w)
|
|||
Mix_FreeChunk((Mix_Chunk*)w);
|
||||
}
|
||||
|
||||
void snd_halt_chan(int han)
|
||||
{
|
||||
Mix_HaltChannel(han);
|
||||
}
|
||||
|
||||
Mix_Music *snd_load_mus(const char *fname)
|
||||
{
|
||||
Mix_Music *mus;
|
||||
|
@ -183,13 +188,13 @@ void snd_free_mus(mus_t mus)
|
|||
Mix_FreeMusic((Mix_Music*) mus);
|
||||
}
|
||||
|
||||
void snd_play(void *chunk)
|
||||
void snd_play(void *chunk, int channel)
|
||||
{
|
||||
if (!sound_on)
|
||||
return;
|
||||
if (!chunk)
|
||||
return;
|
||||
Mix_PlayChannel(-1, (Mix_Chunk*)chunk, 0);
|
||||
Mix_PlayChannel(channel, (Mix_Chunk*)chunk, 0);
|
||||
}
|
||||
|
||||
void snd_done(void)
|
||||
|
|
|
@ -16,7 +16,9 @@ typedef void* mus_t;
|
|||
extern void snd_free_mus(mus_t mus);
|
||||
extern int snd_init(int hz);
|
||||
extern int snd_hz(void);
|
||||
extern void snd_play(wav_t chunk);
|
||||
extern void snd_play(wav_t chunk, int channel);
|
||||
extern void snd_halt_chan(int han);
|
||||
|
||||
extern void snd_free_wav(wav_t chunk);
|
||||
extern wav_t snd_load_wav(const char *fname);
|
||||
extern int snd_play_mus(char *music, int ms, int loop);
|
||||
|
|
|
@ -2063,8 +2063,17 @@ function get_sound()
|
|||
return game._sound;
|
||||
end
|
||||
|
||||
function set_sound(s)
|
||||
function get_sound_chan()
|
||||
return game._sound_channel
|
||||
end
|
||||
|
||||
function set_sound(s, chan)
|
||||
game._sound = s;
|
||||
if not tonumber(chan) then
|
||||
game._sound_channel = -1;
|
||||
else
|
||||
game._sound_channel = tonumber(chan);
|
||||
end
|
||||
end
|
||||
|
||||
function change_pl(p)
|
||||
|
|
Reference in a new issue