aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/cge2/snail.cpp18
1 files changed, 14 insertions, 4 deletions
diff --git a/engines/cge2/snail.cpp b/engines/cge2/snail.cpp
index 300c02a66a..5ec62746f9 100644
--- a/engines/cge2/snail.cpp
+++ b/engines/cge2/snail.cpp
@@ -286,13 +286,12 @@ void CommandHandler::runCommand() {
break;
case kCmdSound:
_vm->snSound(spr, tailCmd._val);
- _count = 1;
break;
case kCmdMap:
_vm->_heroTab[tailCmd._ref & 1]->_ptr->_ignoreMap = tailCmd._val == 0;
break;
case kCmdCount:
- _count = tailCmd._val;
+ _vm->_sound->setRepeat(tailCmd._val);
break;
case kCmdRoom:
_vm->snRoom(spr, tailCmd._val);
@@ -512,7 +511,10 @@ void CGE2Engine::snKeep(Sprite *spr, int stp) {
if (spr && !spr->_flags._kept && ht->_pocket[pp] == nullptr) {
V3D pos(14, -10, -1);
+ int16 oldRepeat = _sound->getRepeat();
+ _sound->setRepeat(1);
snSound(ht->_ptr, 3);
+ _sound->setRepeat(oldRepeat);
if (_taken) {
_vga->_showQ->insert(spr);
_taken = false;
@@ -674,7 +676,8 @@ void CGE2Engine::snSound(Sprite *spr, int wav) {
_sound->play(_fx->load(_commandStat._ref[1], _commandStat._ref[0]),
(spr) ? (spr->_pos2D.x / (kScrWidth / 16)) : 8);
}
-
+
+ _sound->setRepeat(1);
}
void CGE2Engine::snRoom(Sprite *spr, int val) {
@@ -711,7 +714,14 @@ void CGE2Engine::snSay(Sprite *spr, int val) {
int i = val;
if (i < 256)
i -= 100;
- warning("STUB: CGE2Engine::snSay"); // TODO: Implement it with the revision of the sound code!
+ int16 oldRepeat = _sound->getRepeat();
+ _sound->setRepeat(1);
+ snSound(spr, i);
+ _sound->setRepeat(oldRepeat);
+ //_commandStat._wait = &_sound->_smpinf._counter;
+ // This line is commented out for now since I wasn't able to find where this flag is reset
+ // and it's prevented the main loop from doing anything.
+ // TODO: Recheck this later! At the moment it seems working fine.
}
}
}