diff options
Diffstat (limited to 'engines/gob')
-rw-r--r-- | engines/gob/detection_tables.h | 4 | ||||
-rw-r--r-- | engines/gob/inter.h | 5 | ||||
-rw-r--r-- | engines/gob/inter_geisha.cpp | 39 |
3 files changed, 46 insertions, 2 deletions
diff --git a/engines/gob/detection_tables.h b/engines/gob/detection_tables.h index 04173837da..4c1ff9a8e3 100644 --- a/engines/gob/detection_tables.h +++ b/engines/gob/detection_tables.h @@ -2496,7 +2496,7 @@ static const GOBGameDescription gameDescriptions[] = { GUIO_NOSUBTITLES | GUIO_NOSPEECH }, kGameTypeGeisha, - kFeaturesEGA, + kFeaturesEGA | kFeaturesAdLib, "disk1.stk", "intro.tot", 0 }, { @@ -2510,7 +2510,7 @@ static const GOBGameDescription gameDescriptions[] = { GUIO_NOSUBTITLES | GUIO_NOSPEECH }, kGameTypeGeisha, - kFeaturesEGA, + kFeaturesEGA | kFeaturesAdLib, "disk1.stk", "intro.tot", 0 }, { diff --git a/engines/gob/inter.h b/engines/gob/inter.h index dc509b6f22..7946543f5a 100644 --- a/engines/gob/inter.h +++ b/engines/gob/inter.h @@ -345,8 +345,13 @@ protected: virtual void setupOpcodesGob(); void oGeisha_loadCursor(OpFuncParams ¶ms); + void oGeisha_goblinFunc(OpFuncParams ¶ms); void oGeisha_loadSound(OpFuncParams ¶ms); + void oGeisha_loadTitleMusic(OpGobParams ¶ms); + void oGeisha_playMusic(OpGobParams ¶ms); + void oGeisha_stopMusic(OpGobParams ¶ms); + int16 loadSound(int16 slot); }; diff --git a/engines/gob/inter_geisha.cpp b/engines/gob/inter_geisha.cpp index 98e904a11c..d4f92d9574 100644 --- a/engines/gob/inter_geisha.cpp +++ b/engines/gob/inter_geisha.cpp @@ -50,7 +50,12 @@ void Inter_Geisha::setupOpcodesFunc() { Inter_v1::setupOpcodesFunc(); OPCODEFUNC(0x03, oGeisha_loadCursor); + OPCODEFUNC(0x25, oGeisha_goblinFunc); OPCODEFUNC(0x3A, oGeisha_loadSound); + + OPCODEGOB(2, oGeisha_loadTitleMusic); + OPCODEGOB(3, oGeisha_playMusic); + OPCODEGOB(4, oGeisha_stopMusic); } void Inter_Geisha::setupOpcodesGob() { @@ -67,6 +72,18 @@ void Inter_Geisha::oGeisha_loadSound(OpFuncParams ¶ms) { loadSound(-1); } +void Inter_Geisha::oGeisha_goblinFunc(OpFuncParams ¶ms) { + OpGobParams gobParams; + int16 cmd; + + cmd = _vm->_game->_script->readInt16(); + + gobParams.paramCount = _vm->_game->_script->readInt16(); + gobParams.extraData = cmd; + + executeOpcodeGob(cmd, gobParams); +} + int16 Inter_Geisha::loadSound(int16 slot) { const char *sndFile = _vm->_game->_script->evalString(); @@ -90,4 +107,26 @@ int16 Inter_Geisha::loadSound(int16 slot) { return 0; } +void Inter_Geisha::oGeisha_loadTitleMusic(OpGobParams ¶ms) { + _vm->_game->_script->skip(2); + + _vm->_sound->adlibLoadTBR("geisha.tbr"); + _vm->_sound->adlibLoadMDY("geisha.mdy"); +} + +void Inter_Geisha::oGeisha_playMusic(OpGobParams ¶ms) { + _vm->_game->_script->skip(2); + + // TODO: The MDYPlayer is still broken! + warning("Geisha Stub: oGeisha_playMusic"); + // _vm->_sound->adlibPlay(); +} + +void Inter_Geisha::oGeisha_stopMusic(OpGobParams ¶ms) { + _vm->_game->_script->skip(2); + + _vm->_sound->adlibStop(); + _vm->_sound->adlibUnload(); +} + } // End of namespace Gob |