[Scummvm-cvs-logs] SF.net SVN: scummvm:[46532] scummvm/trunk/engines/sci/sfx
m_kiewitz at users.sourceforge.net
m_kiewitz at users.sourceforge.net
Thu Dec 24 18:40:45 CET 2009
Revision: 46532
http://scummvm.svn.sourceforge.net/scummvm/?rev=46532&view=rev
Author: m_kiewitz
Date: 2009-12-24 17:40:45 +0000 (Thu, 24 Dec 2009)
Log Message:
-----------
SCI: new music code / signals now almost correctly triggered
Modified Paths:
--------------
scummvm/trunk/engines/sci/sfx/music.cpp
scummvm/trunk/engines/sci/sfx/music.h
scummvm/trunk/engines/sci/sfx/soundcmd.cpp
Modified: scummvm/trunk/engines/sci/sfx/music.cpp
===================================================================
--- scummvm/trunk/engines/sci/sfx/music.cpp 2009-12-24 16:46:15 UTC (rev 46531)
+++ scummvm/trunk/engines/sci/sfx/music.cpp 2009-12-24 17:40:45 UTC (rev 46532)
@@ -41,8 +41,8 @@
return ((const MusicEntry *)arg2)->prio - ((const MusicEntry *)arg1)->prio;
}
-SciMusic::SciMusic() {
-
+SciMusic::SciMusic(SciVersion soundVersion)
+ : _soundVersion(soundVersion) {
}
SciMusic::~SciMusic() {
@@ -334,7 +334,7 @@
}
// Find out what channels to filter for SCI0
channelFilterMask = pSnd->soundRes->getChannelFilterMask(_pMidiDrv->getPlayMask());
- pSnd->pMidiParser->loadMusic(track, pSnd, channelFilterMask);
+ pSnd->pMidiParser->loadMusic(track, pSnd, channelFilterMask, _soundVersion);
}
}
@@ -496,10 +496,12 @@
unloadMusic();
}
//---------------------------------------------
-bool MidiParser_SCI::loadMusic(SoundResource::Track *track, MusicEntry *psnd, int channelFilterMask) {
+bool MidiParser_SCI::loadMusic(SoundResource::Track *track, MusicEntry *psnd, int channelFilterMask, SciVersion soundVersion) {
unloadMusic();
_track = track;
_pSnd = psnd;
+ _soundVersion = soundVersion;
+
setVolume(psnd->volume);
if (channelFilterMask) {
@@ -546,10 +548,11 @@
info.basic.param1 = *(_position._play_pos++);
info.basic.param2 = 0;
if (info.channel() == 0xF) {// SCI special case
- if (info.basic.param1 != 0x7F)
+ if (info.basic.param1 != 0x7F) {
PUT_SEL32V(segMan, _pSnd->soundObj, signal, info.basic.param1);
- else
+ } else {
_loopTick = _position._play_tick;
+ }
}
break;
case 0xD:
@@ -561,8 +564,18 @@
info.basic.param1 = *(_position._play_pos++);
info.basic.param2 = *(_position._play_pos++);
if (info.channel() == 0xF) {// SCI special
- if (info.basic.param1 == 0x60)
- _pSnd->dataInc++;
+ if (info.basic.param1 == 0x60) {
+ switch (_soundVersion) {
+ case SCI_VERSION_0_EARLY:
+ _pSnd->dataInc += info.basic.param2;
+ PUT_SEL32V(segMan, _pSnd->soundObj, signal, 0x7f + _pSnd->dataInc);
+ break;
+ case SCI_VERSION_1_EARLY:
+ case SCI_VERSION_1_LATE:
+ _pSnd->dataInc++;
+ break;
+ }
+ }
// BF 50 x - set reverb to x
// BF 60 x - dataInc++
// BF 52 x - bHold=x
@@ -747,8 +760,6 @@
_mixedData = filterData;
lastCommand = 0;
- // Find out which channels to filter out
-
while (channelData <= channelDataEnd) {
delta += *channelData++;
curByte = *channelData++;
Modified: scummvm/trunk/engines/sci/sfx/music.h
===================================================================
--- scummvm/trunk/engines/sci/sfx/music.h 2009-12-24 16:46:15 UTC (rev 46531)
+++ scummvm/trunk/engines/sci/sfx/music.h 2009-12-24 17:40:45 UTC (rev 46532)
@@ -97,7 +97,7 @@
class SciMusic {
public:
- SciMusic();
+ SciMusic(SciVersion soundVersion);
~SciMusic();
void init();
@@ -148,6 +148,8 @@
void doFade(MusicEntry *pSnd);
+ SciVersion _soundVersion;
+
Audio::Mixer *_pMixer;
MidiPlayer *_pMidiDrv;
MidiDriverType _midiType;
@@ -163,7 +165,7 @@
public:
MidiParser_SCI();
~MidiParser_SCI();
- bool loadMusic(SoundResource::Track *track, MusicEntry *psnd, int channelFilterMask);
+ bool loadMusic(SoundResource::Track *track, MusicEntry *psnd, int channelFilterMask, SciVersion soundVersion);
bool loadMusic(byte *, uint32) {
return false;
}
@@ -181,6 +183,8 @@
byte *midiMixChannels();
byte *midiFilterChannels(int channelMask);
byte midiGetNextChannel(long ticker);
+
+ SciVersion _soundVersion;
byte *_mixedData;
SoundResource::Track *_track;
MusicEntry *_pSnd;
Modified: scummvm/trunk/engines/sci/sfx/soundcmd.cpp
===================================================================
--- scummvm/trunk/engines/sci/sfx/soundcmd.cpp 2009-12-24 16:46:15 UTC (rev 46531)
+++ scummvm/trunk/engines/sci/sfx/soundcmd.cpp 2009-12-24 17:40:45 UTC (rev 46532)
@@ -136,7 +136,7 @@
_hasNodePtr = (((SciEngine*)g_engine)->getKernel()->_selectorCache.nodePtr != -1);
#ifndef USE_OLD_MUSIC_FUNCTIONS
- _music = new SciMusic();
+ _music = new SciMusic(_doSoundVersion);
_music->init();
#endif
@@ -674,7 +674,6 @@
case SI_ABSOLUTE_CUE:
debugC(2, kDebugLevelSound, "--- [CUE] %04x:%04x Absolute Cue: %d\n",
PRINT_REG(obj), signal);
-
PUT_SEL32V(_segMan, obj, signal, signal);
break;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list