GOB: Play the music on the title screen of Gob1 EGA
The EGA version of Gobliiins comes with an MDY track. While the original doesn't play it, we thought it might be a nice idea to play it nevertheless.
This commit is contained in:
parent
385bd7c6a0
commit
fe44939eba
5 changed files with 79 additions and 22 deletions
|
@ -34,7 +34,7 @@ static const GOBGameDescription gameDescriptions[] = {
|
||||||
GUIO2(GUIO_NOSUBTITLES, GUIO_NOSPEECH)
|
GUIO2(GUIO_NOSUBTITLES, GUIO_NOSPEECH)
|
||||||
},
|
},
|
||||||
kGameTypeGob1,
|
kGameTypeGob1,
|
||||||
kFeaturesEGA,
|
kFeaturesEGA | kFeaturesAdLib,
|
||||||
0, 0, 0
|
0, 0, 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -48,7 +48,7 @@ static const GOBGameDescription gameDescriptions[] = {
|
||||||
GUIO2(GUIO_NOSUBTITLES, GUIO_NOSPEECH)
|
GUIO2(GUIO_NOSUBTITLES, GUIO_NOSPEECH)
|
||||||
},
|
},
|
||||||
kGameTypeGob1,
|
kGameTypeGob1,
|
||||||
kFeaturesEGA,
|
kFeaturesEGA | kFeaturesAdLib,
|
||||||
0, 0, 0
|
0, 0, 0
|
||||||
},
|
},
|
||||||
{ // Supplied by Theruler76 in bug report #1201233
|
{ // Supplied by Theruler76 in bug report #1201233
|
||||||
|
|
|
@ -286,10 +286,40 @@ void Inter_v1::o1_loadMult() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Inter_v1::o1_playMult() {
|
void Inter_v1::o1_playMult() {
|
||||||
int16 checkEscape;
|
// NOTE: The EGA version of Gobliiins has an MDY tune.
|
||||||
|
// While the original doesn't play it, we do.
|
||||||
|
bool isGob1EGAIntro = _vm->getGameType() == kGameTypeGob1 &&
|
||||||
|
_vm->isEGA() &&
|
||||||
|
_vm->_game->_script->pos() == 1010 &&
|
||||||
|
_vm->isCurrentTot("intro.tot") &&
|
||||||
|
VAR(57) != 0xFFFFFFFF &&
|
||||||
|
_vm->_dataIO->hasFile("goblins.mdy") &&
|
||||||
|
_vm->_dataIO->hasFile("goblins.tbr");
|
||||||
|
|
||||||
|
int16 checkEscape = _vm->_game->_script->readInt16();
|
||||||
|
|
||||||
|
if (isGob1EGAIntro) {
|
||||||
|
_vm->_sound->adlibLoadTBR("goblins.tbr");
|
||||||
|
_vm->_sound->adlibLoadMDY("goblins.mdy");
|
||||||
|
_vm->_sound->adlibSetRepeating(-1);
|
||||||
|
|
||||||
|
_vm->_sound->adlibPlay();
|
||||||
|
}
|
||||||
|
|
||||||
checkEscape = _vm->_game->_script->readInt16();
|
|
||||||
_vm->_mult->playMult(VAR(57), -1, checkEscape, 0);
|
_vm->_mult->playMult(VAR(57), -1, checkEscape, 0);
|
||||||
|
|
||||||
|
if (isGob1EGAIntro) {
|
||||||
|
|
||||||
|
// User didn't escape the intro mult, wait for an escape here
|
||||||
|
if (VAR(57) != 0xFFFFFFFF) {
|
||||||
|
while (_vm->_util->getKey() != kKeyEscape) {
|
||||||
|
_vm->_util->processInput();
|
||||||
|
_vm->_util->longDelay(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_vm->_sound->adlibUnload();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Inter_v1::o1_freeMultKeys() {
|
void Inter_v1::o1_freeMultKeys() {
|
||||||
|
|
|
@ -20,8 +20,8 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef GOB_SOUND_NEWADLIB_H
|
#ifndef GOB_SOUND_ADLIB_H
|
||||||
#define GOB_SOUND_NEWADLIB_H
|
#define GOB_SOUND_ADLIB_H
|
||||||
|
|
||||||
#include "common/mutex.h"
|
#include "common/mutex.h"
|
||||||
|
|
||||||
|
@ -303,4 +303,4 @@ private:
|
||||||
|
|
||||||
} // End of namespace Gob
|
} // End of namespace Gob
|
||||||
|
|
||||||
#endif // GOB_SOUND_NEWADLIB_H
|
#endif // GOB_SOUND_ADLIB_H
|
||||||
|
|
|
@ -51,6 +51,8 @@ Sound::Sound(GobEngine *vm) : _vm(vm) {
|
||||||
|
|
||||||
_hasAdLib = (!_vm->_noMusic && _vm->hasAdLib());
|
_hasAdLib = (!_vm->_noMusic && _vm->hasAdLib());
|
||||||
|
|
||||||
|
_hasAdLibBg = _hasAdLib;
|
||||||
|
|
||||||
if (!_vm->_noMusic && (_vm->getPlatform() == Common::kPlatformAmiga)) {
|
if (!_vm->_noMusic && (_vm->getPlatform() == Common::kPlatformAmiga)) {
|
||||||
_infogrames = new Infogrames(*_vm->_mixer);
|
_infogrames = new Infogrames(*_vm->_mixer);
|
||||||
_protracker = new Protracker(*_vm->_mixer);
|
_protracker = new Protracker(*_vm->_mixer);
|
||||||
|
@ -274,8 +276,7 @@ bool Sound::adlibLoadMDY(const char *fileName) {
|
||||||
if (!_hasAdLib)
|
if (!_hasAdLib)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!_mdyPlayer)
|
createMDYPlayer();
|
||||||
_mdyPlayer = new MUSPlayer(*_vm->_mixer);
|
|
||||||
|
|
||||||
debugC(1, kDebugSound, "AdLib: Loading MDY data (\"%s\")", fileName);
|
debugC(1, kDebugSound, "AdLib: Loading MDY data (\"%s\")", fileName);
|
||||||
|
|
||||||
|
@ -296,8 +297,7 @@ bool Sound::adlibLoadTBR(const char *fileName) {
|
||||||
if (!_hasAdLib)
|
if (!_hasAdLib)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!_mdyPlayer)
|
createMDYPlayer();
|
||||||
_mdyPlayer = new MUSPlayer(*_vm->_mixer);
|
|
||||||
|
|
||||||
Common::SeekableReadStream *stream = _vm->_dataIO->getFile(fileName);
|
Common::SeekableReadStream *stream = _vm->_dataIO->getFile(fileName);
|
||||||
if (!stream) {
|
if (!stream) {
|
||||||
|
@ -318,8 +318,7 @@ void Sound::adlibPlayTrack(const char *trackname) {
|
||||||
if (!_hasAdLib)
|
if (!_hasAdLib)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!_adlPlayer)
|
createADLPlayer();
|
||||||
_adlPlayer = new ADLPlayer(*_vm->_mixer);
|
|
||||||
|
|
||||||
if (_adlPlayer->isPlaying())
|
if (_adlPlayer->isPlaying())
|
||||||
return;
|
return;
|
||||||
|
@ -329,11 +328,10 @@ void Sound::adlibPlayTrack(const char *trackname) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sound::adlibPlayBgMusic() {
|
void Sound::adlibPlayBgMusic() {
|
||||||
if (!_hasAdLib)
|
if (!_hasAdLib || _hasAdLibBg)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!_adlPlayer)
|
createADLPlayer();
|
||||||
_adlPlayer = new ADLPlayer(*_vm->_mixer);
|
|
||||||
|
|
||||||
static const char *const tracksMac[] = {
|
static const char *const tracksMac[] = {
|
||||||
// "musmac1.adl", // This track seems to be missing instruments...
|
// "musmac1.adl", // This track seems to be missing instruments...
|
||||||
|
@ -352,13 +350,18 @@ void Sound::adlibPlayBgMusic() {
|
||||||
"musmac5.mid"
|
"musmac5.mid"
|
||||||
};
|
};
|
||||||
|
|
||||||
if (_vm->getPlatform() == Common::kPlatformWindows) {
|
const char *track = 0;
|
||||||
int track = _vm->_util->getRandom(ARRAYSIZE(tracksWin));
|
if (_vm->getPlatform() == Common::kPlatformWindows)
|
||||||
adlibPlayTrack(tracksWin[track]);
|
track = tracksWin[ARRAYSIZE(tracksWin)];
|
||||||
} else {
|
else
|
||||||
int track = _vm->_util->getRandom(ARRAYSIZE(tracksMac));
|
track = tracksMac[_vm->_util->getRandom(ARRAYSIZE(tracksMac))];
|
||||||
adlibPlayTrack(tracksMac[track]);
|
|
||||||
|
if (!track || !_vm->_dataIO->hasFile(track)) {
|
||||||
|
_hasAdLibBg = false;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
adlibPlayTrack(track);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sound::adlibPlay() {
|
void Sound::adlibPlay() {
|
||||||
|
@ -722,4 +725,24 @@ void Sound::bgUnshade() {
|
||||||
_bgatmos->unshade();
|
_bgatmos->unshade();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Sound::createMDYPlayer() {
|
||||||
|
if (_mdyPlayer)
|
||||||
|
return;
|
||||||
|
|
||||||
|
delete _adlPlayer;
|
||||||
|
_adlPlayer = 0;
|
||||||
|
|
||||||
|
_mdyPlayer = new MUSPlayer(*_vm->_mixer);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Sound::createADLPlayer() {
|
||||||
|
if (_adlPlayer)
|
||||||
|
return;
|
||||||
|
|
||||||
|
delete _mdyPlayer;
|
||||||
|
_mdyPlayer= 0;
|
||||||
|
|
||||||
|
_adlPlayer = new ADLPlayer(*_vm->_mixer);
|
||||||
|
}
|
||||||
|
|
||||||
} // End of namespace Gob
|
} // End of namespace Gob
|
||||||
|
|
|
@ -142,6 +142,7 @@ private:
|
||||||
GobEngine *_vm;
|
GobEngine *_vm;
|
||||||
|
|
||||||
bool _hasAdLib;
|
bool _hasAdLib;
|
||||||
|
bool _hasAdLibBg;
|
||||||
|
|
||||||
SoundDesc _sounds[kSoundsCount];
|
SoundDesc _sounds[kSoundsCount];
|
||||||
|
|
||||||
|
@ -162,6 +163,9 @@ private:
|
||||||
|
|
||||||
// Audio CD
|
// Audio CD
|
||||||
CDROM *_cdrom;
|
CDROM *_cdrom;
|
||||||
|
|
||||||
|
void createMDYPlayer();
|
||||||
|
void createADLPlayer();
|
||||||
};
|
};
|
||||||
|
|
||||||
} // End of namespace Gob
|
} // End of namespace Gob
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue