aboutsummaryrefslogtreecommitdiff
path: root/engines/gob
diff options
context:
space:
mode:
authorSven Hesse2007-04-05 15:38:30 +0000
committerSven Hesse2007-04-05 15:38:30 +0000
commitf2c1600c3d68c57faa0d7607fe52420b233e34f1 (patch)
treed8b2140a6e6e59357032088dd4ee91c1320e46ce /engines/gob
parentcebf8e98c30c89abe28bbacbf1b331489fbe12f2 (diff)
downloadscummvm-rg350-f2c1600c3d68c57faa0d7607fe52420b233e34f1.tar.gz
scummvm-rg350-f2c1600c3d68c57faa0d7607fe52420b233e34f1.tar.bz2
scummvm-rg350-f2c1600c3d68c57faa0d7607fe52420b233e34f1.zip
Added GobOpcodes 1 and 2 (start and stop Infogrames music)
svn-id: r26385
Diffstat (limited to 'engines/gob')
-rw-r--r--engines/gob/inter.h2
-rw-r--r--engines/gob/inter_v2.cpp31
-rw-r--r--engines/gob/inter_v3.cpp8
3 files changed, 32 insertions, 9 deletions
diff --git a/engines/gob/inter.h b/engines/gob/inter.h
index be7ed9fe21..d0f07d96da 100644
--- a/engines/gob/inter.h
+++ b/engines/gob/inter.h
@@ -386,6 +386,8 @@ protected:
bool o2_writeData(OpFuncParams &params);
void o2_loadInfogramesIns(OpGobParams &params);
void o2_playInfogrames(OpGobParams &params);
+ void o2_startInfogrames(OpGobParams &params);
+ void o2_stopInfogrames(OpGobParams &params);
void o2_handleGoblins(OpGobParams &params);
};
diff --git a/engines/gob/inter_v2.cpp b/engines/gob/inter_v2.cpp
index 58986d894c..a297d88891 100644
--- a/engines/gob/inter_v2.cpp
+++ b/engines/gob/inter_v2.cpp
@@ -50,8 +50,8 @@ namespace Gob {
const int Inter_v2::_goblinFuncLookUp[][2] = {
{0, 0},
- {2, 1},
- {3, 2},
+ {1, 1},
+ {2, 2},
{4, 3},
{5, 4},
{6, 5},
@@ -556,8 +556,8 @@ void Inter_v2::setupOpcodes() {
static const OpcodeGoblinEntryV2 opcodesGoblin[71] = {
/* 00 */
OPCODE(o2_loadInfogramesIns),
- {NULL, ""},
- {NULL, ""},
+ OPCODE(o2_startInfogrames),
+ OPCODE(o2_stopInfogrames),
{NULL, ""},
/* 04 */
{NULL, ""},
@@ -1937,6 +1937,7 @@ void Inter_v2::o2_loadInfogramesIns(OpGobParams &params) {
if (_vm->_game->_infogrames) {
_vm->_mixer->stopHandle(_vm->_game->_infHandle);
+ delete _vm->_game->_infogrames;
_vm->_game->_infogrames = 0;
}
@@ -1976,6 +1977,7 @@ void Inter_v2::o2_playInfogrames(OpGobParams &params) {
if (_vm->_game->_infIns) {
_vm->_mixer->stopHandle(_vm->_game->_infHandle);
+ delete _vm->_game->_infogrames;
_vm->_game->_infogrames =
new Audio::Infogrames(*_vm->_game->_infIns, true,
_vm->_mixer->getOutputRate(),
@@ -1987,10 +1989,29 @@ void Inter_v2::o2_playInfogrames(OpGobParams &params) {
_vm->_game->_infogrames = 0;
} else
_vm->_mixer->playInputStream(Audio::Mixer::kMusicSoundType,
- &_vm->_game->_infHandle, _vm->_game->_infogrames);
+ &_vm->_game->_infHandle, _vm->_game->_infogrames,
+ -1, 255, 0, false);
}
}
+void Inter_v2::o2_startInfogrames(OpGobParams &params) {
+ load16();
+
+ if (_vm->_game->_infogrames &&
+ !_vm->_mixer->isSoundHandleActive(_vm->_game->_infHandle)) {
+ _vm->_game->_infogrames->restart();
+ _vm->_mixer->playInputStream(Audio::Mixer::kMusicSoundType,
+ &_vm->_game->_infHandle, _vm->_game->_infogrames,
+ -1, 255, 0, false);
+ }
+}
+
+void Inter_v2::o2_stopInfogrames(OpGobParams &params) {
+ load16();
+
+ _vm->_mixer->stopHandle(_vm->_game->_infHandle);
+}
+
void Inter_v2::o2_handleGoblins(OpGobParams &params) {
_vm->_goblin->_gob1NoTurn = (bool) VAR(load16());
_vm->_goblin->_gob2NoTurn = (bool) VAR(load16());
diff --git a/engines/gob/inter_v3.cpp b/engines/gob/inter_v3.cpp
index 2d1dd46708..e78f5df4dd 100644
--- a/engines/gob/inter_v3.cpp
+++ b/engines/gob/inter_v3.cpp
@@ -36,8 +36,8 @@ namespace Gob {
const int Inter_v3::_goblinFuncLookUp[][2] = {
{0, 0},
- {2, 1},
- {3, 2},
+ {1, 1},
+ {2, 2},
{4, 3},
{5, 4},
{6, 5},
@@ -542,8 +542,8 @@ void Inter_v3::setupOpcodes() {
static const OpcodeGoblinEntryV3 opcodesGoblin[71] = {
/* 00 */
OPCODE(o2_loadInfogramesIns),
- {NULL, ""},
- {NULL, ""},
+ OPCODE(o2_startInfogrames),
+ OPCODE(o2_stopInfogrames),
{NULL, ""},
/* 04 */
{NULL, ""},