diff options
Diffstat (limited to 'engines/scumm/he/resource_he.cpp')
-rw-r--r-- | engines/scumm/he/resource_he.cpp | 161 |
1 files changed, 0 insertions, 161 deletions
diff --git a/engines/scumm/he/resource_he.cpp b/engines/scumm/he/resource_he.cpp index 1c288d4e14..ebe13f29a4 100644 --- a/engines/scumm/he/resource_he.cpp +++ b/engines/scumm/he/resource_he.cpp @@ -1665,167 +1665,6 @@ int ScummEngine_v72he::getSoundResourceSize(int id) { return size; } -byte *getSoundOffset(byte *ptr) { - byte *endPtr; - uint32 offset, size; - - if (READ_BE_UINT32(ptr) != MKID_BE('RIFF')) - return NULL; - - endPtr = (ptr + 12); - size = READ_LE_UINT32(ptr + 4) - 4; - - while (size > 0) { - offset = READ_LE_UINT32(endPtr + 4); - - if (offset <= 0) - error("Illegal chunk length - %d bytes.", offset); - - if (offset > size) - error("Chunk extends beyond file end - %d versus %d.", offset, size); - - if (READ_BE_UINT32(endPtr) == MKID_BE('data')) - return endPtr; - - endPtr = endPtr + offset + 8; - } - - return NULL; -} - -void ScummEngine_v80he::createSound(int snd1id, int snd2id) { - byte *snd1Ptr, *snd2Ptr; - byte *sbng1Ptr, *sbng2Ptr; - byte *sdat1Ptr, *sdat2Ptr; - byte *src, *dst, *tmp; - int len, offs, size; - int sdat1size, sdat2size; - - sbng1Ptr = NULL; - sbng2Ptr = NULL; - - if (snd2id == -1) { - _sndPtrOffs = 0; - _sndTmrOffs = 0; - _sndDataSize = 0; - return; - } - - if (snd1id != _curSndId) { - _curSndId = snd1id; - _sndPtrOffs = 0; - _sndTmrOffs = 0; - _sndDataSize = 0; - } - - snd1Ptr = getResourceAddress(rtSound, snd1id); - assert(snd1Ptr); - snd2Ptr = getResourceAddress(rtSound, snd2id); - assert(snd2Ptr); - - int i; - int chan = -1; - for (i = 0; i < ARRAYSIZE(((SoundHE *)_sound)->_heChannel); i++) { - if (((SoundHE *)_sound)->_heChannel[i].sound == snd1id) - chan = i; - } - - if (!getSoundOffset(snd1Ptr)) { - sbng1Ptr = heFindResource(MKID_BE('SBNG'), snd1Ptr); - sbng2Ptr = heFindResource(MKID_BE('SBNG'), snd2Ptr); - } - - if (sbng1Ptr != NULL && sbng2Ptr != NULL) { - if (chan != -1 && ((SoundHE *)_sound)->_heChannel[chan].codeOffs > 0) { - int curOffs = ((SoundHE *)_sound)->_heChannel[chan].codeOffs; - - src = snd1Ptr + curOffs; - dst = sbng1Ptr + 8; - size = READ_BE_UINT32(sbng1Ptr + 4); - len = sbng1Ptr - snd1Ptr + size - curOffs; - - byte *data = (byte *)malloc(len); - memcpy(data, src, len); - memcpy(dst, data, len); - free(data); - - dst = sbng1Ptr + 8; - while ((size = READ_LE_UINT16(dst)) != 0) - dst += size; - } else { - dst = sbng1Ptr + 8; - } - - ((SoundHE *)_sound)->_heChannel[chan].codeOffs = sbng1Ptr - snd1Ptr + 8; - - tmp = sbng2Ptr + 8; - while ((offs = READ_LE_UINT16(tmp)) != 0) { - tmp += offs; - } - - src = sbng2Ptr + 8; - len = tmp - sbng2Ptr - 6; - memcpy(dst, src, len); - - int32 time; - while ((size = READ_LE_UINT16(dst)) != 0) { - time = READ_LE_UINT32(dst + 2); - time += _sndTmrOffs; - WRITE_LE_UINT32(dst + 2, time); - dst += size; - } - } - - if (getSoundOffset(snd1Ptr)) { - sdat1Ptr = getSoundOffset(snd1Ptr); - assert(sdat1Ptr); - sdat2Ptr = getSoundOffset(snd2Ptr); - assert(sdat2Ptr); - - if (!_sndDataSize) - _sndDataSize = READ_LE_UINT32(sdat1Ptr + 4) - 8; - - sdat2size = READ_LE_UINT32(sdat2Ptr + 4) - 8; - } else { - sdat1Ptr = heFindResource(MKID_BE('SDAT'), snd1Ptr); - assert(sdat1Ptr); - sdat2Ptr = heFindResource(MKID_BE('SDAT'), snd2Ptr); - assert(sdat2Ptr); - - _sndDataSize = READ_BE_UINT32(sdat1Ptr + 4) - 8; - - sdat2size = READ_BE_UINT32(sdat2Ptr + 4) - 8; - } - - sdat1size = _sndDataSize - _sndPtrOffs; - if (sdat2size < sdat1size) { - src = sdat2Ptr + 8; - dst = sdat1Ptr + 8 + _sndPtrOffs; - len = sdat2size; - - memcpy(dst, src, len); - - _sndPtrOffs += sdat2size; - _sndTmrOffs += sdat2size; - } else { - src = sdat2Ptr + 8; - dst = sdat1Ptr + 8 + _sndPtrOffs; - len = sdat1size; - - memcpy(dst, src, len); - - if (sdat2size != sdat1size) { - src = sdat2Ptr + 8 + sdat1size; - dst = sdat1Ptr + 8; - len = sdat2size - sdat1size; - - memcpy(dst, src, len); - } - - _sndPtrOffs = sdat2size - sdat1size; - _sndTmrOffs += sdat2size; - } -} #endif } // End of namespace Scumm |