diff options
Diffstat (limited to 'scumm/imuse.cpp')
-rw-r--r-- | scumm/imuse.cpp | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/scumm/imuse.cpp b/scumm/imuse.cpp index cca1b8b59c..8759725391 100644 --- a/scumm/imuse.cpp +++ b/scumm/imuse.cpp @@ -3678,16 +3678,21 @@ void IMuseAdlib::adlib_setup_channel(int chan, Instrument * instr, byte vol_1, b port = channel_mappings[chan]; adlib_write(port + 0x20, instr->flags_1); - adlib_write(port + 0x40, (instr->oplvl_1 | 0x3F) - vol_1); - adlib_write(port + 0x60, ~instr->atdec_1); - adlib_write(port + 0x80, ~instr->sustrel_1); + + if ((g_scumm->_gameId != GID_MONKEY_VGA) || (instr->feedback & 1)) + adlib_write(port + 0x40, (instr->oplvl_1 | 0x3F) - vol_1 ); + else + adlib_write(port + 0x40, instr->oplvl_1); + + adlib_write(port + 0x60, 0xff & (~instr->atdec_1)); + adlib_write(port + 0x80, 0xff & (~instr->sustrel_1)); adlib_write(port + 0xE0, instr->waveform_1); port = channel_mappings_2[chan]; adlib_write(port + 0x20, instr->flags_2); - adlib_write(port + 0x40, (instr->oplvl_2 | 0x3F) - vol_2); - adlib_write(port + 0x60, ~instr->atdec_2); - adlib_write(port + 0x80, ~instr->sustrel_2); + adlib_write(port + 0x40, (instr->oplvl_2 | 0x3F) - vol_2 ); + adlib_write(port + 0x60, 0xff & (~instr->atdec_2)); + adlib_write(port + 0x80, 0xff & (~instr->sustrel_2)); adlib_write(port + 0xE0, instr->waveform_2); adlib_write((byte)chan + 0xC0, instr->feedback); |