void Player_V2Base::chainNextSound() { if (_next_nr) { chainSound(_next_nr, _next_data); _next_nr = 0; _next_data = 0; } }
void Player_V2CMS::startSound(int nr) { Common::StackLock lock(_mutex); byte *data = _vm->getResourceAddress(rtSound, nr); assert(data); if (data[6] == 0x80) { _musicTimer = _musicTimerTicks = 0; loadMidiData(data, nr); } else { int cprio = _current_data ? *(_current_data + _header_len) : 0; int prio = *(data + _header_len); int nprio = _next_data ? *(_next_data + _header_len) : 0; int restartable = *(data + _header_len + 1); if (!_current_nr || cprio <= prio) { int tnr = _current_nr; int tprio = cprio; byte *tdata = _current_data; chainSound(nr, data); nr = tnr; prio = tprio; data = tdata; restartable = data ? *(data + _header_len + 1) : 0; } if (!_current_nr) { nr = 0; _next_nr = 0; _next_data = 0; } if (nr != _current_nr && restartable && (!_next_nr || nprio <= prio)) { _next_nr = nr; _next_data = data; } } }