aboutsummaryrefslogtreecommitdiff
path: root/scumm
diff options
context:
space:
mode:
authorJames Brown2003-01-26 10:54:34 +0000
committerJames Brown2003-01-26 10:54:34 +0000
commit8d9b84b98eb92abbf4d932d6c6e10a10e0fe576b (patch)
treef61414cf51a4da9841a1febd5cd80a3ccaac66cd /scumm
parent3dc0535a6be1bbb84c397a7656f5222a646d3d59 (diff)
downloadscummvm-rg350-8d9b84b98eb92abbf4d932d6c6e10a10e0fe576b.tar.gz
scummvm-rg350-8d9b84b98eb92abbf4d932d6c6e10a10e0fe576b.tar.bz2
scummvm-rg350-8d9b84b98eb92abbf4d932d6c6e10a10e0fe576b.zip
Patch 671701: SO_TALK_FREQUENCY
svn-id: r6547
Diffstat (limited to 'scumm')
-rw-r--r--scumm/actor.cpp1
-rw-r--r--scumm/actor.h1
-rw-r--r--scumm/saveload.cpp1
-rw-r--r--scumm/saveload.h5
-rw-r--r--scumm/script_v8.cpp5
-rw-r--r--scumm/sound.cpp7
6 files changed, 14 insertions, 6 deletions
diff --git a/scumm/actor.cpp b/scumm/actor.cpp
index d04dfc495b..99a6ae056a 100644
--- a/scumm/actor.cpp
+++ b/scumm/actor.cpp
@@ -41,6 +41,7 @@ void Actor::initActor(int mode)
y = 0;
facing = 180;
newDirection = 180;
+ talkFrequency = 256;
} else if (mode == 2) {
facing = 180;
newDirection = 180;
diff --git a/scumm/actor.h b/scumm/actor.h
index e866984017..9efef85b05 100644
--- a/scumm/actor.h
+++ b/scumm/actor.h
@@ -77,6 +77,7 @@ public:
uint16 costume;
byte room;
byte talkColor;
+ int talkFrequency;
byte scalex, scaley;
byte charset;
int16 newDirection;
diff --git a/scumm/saveload.cpp b/scumm/saveload.cpp
index db9a7dc2d4..d120106f95 100644
--- a/scumm/saveload.cpp
+++ b/scumm/saveload.cpp
@@ -247,6 +247,7 @@ void Scumm::saveOrLoad(Serializer *s, uint32 savegameVersion)
MKLINE(Actor, costume, sleUint16, VER_V8),
MKLINE(Actor, room, sleByte, VER_V8),
MKLINE(Actor, talkColor, sleByte, VER_V8),
+ MKLINE(Actor, talkFrequency, sleInt16, VER_V16),
MKLINE(Actor, scalex, sleByte, VER_V8),
MKLINE(Actor, scaley, sleByte, VER_V8),
MKLINE(Actor, charset, sleByte, VER_V8),
diff --git a/scumm/saveload.h b/scumm/saveload.h
index 93e7d62893..0b5d7bb1f3 100644
--- a/scumm/saveload.h
+++ b/scumm/saveload.h
@@ -34,10 +34,11 @@ enum {
VER_V12,
VER_V13,
VER_V14,
- VER_V15
+ VER_V15,
+ VER_V16
};
-#define CURRENT_VER VER_V15
+#define CURRENT_VER VER_V16
// To work around a warning in GCC 3.2 (and 3.1 ?) regarding non-POD types,
diff --git a/scumm/script_v8.cpp b/scumm/script_v8.cpp
index 13f8a11070..d0cd604bab 100644
--- a/scumm/script_v8.cpp
+++ b/scumm/script_v8.cpp
@@ -1187,10 +1187,7 @@ void Scumm_v8::o8_actorOps()
warning("o8_actorOps: setActorVolume(%d) not implemented", i);
break;
case 0x88: // SO_ACTOR_FREQUENCY Set frequency of actor speech
- // TODO - implement this!
- i = pop();
- if (i != 256) // De-verbosed: 256 is the default frequency so don't warn on it
- warning("o8_actorOps: setActorFrequency(%d) not implemented", i);
+ a->talkFrequency = pop();
break;
case 0x89: // SO_ACTOR_PAN
// TODO - implement this!
diff --git a/scumm/sound.cpp b/scumm/sound.cpp
index 185774cdd1..4223c5623d 100644
--- a/scumm/sound.cpp
+++ b/scumm/sound.cpp
@@ -1226,6 +1226,13 @@ int Sound::playBundleSound(char *sound) {
byte * final = (byte *)malloc(size);
memcpy(final, ptr, size);
+
+ if (_scumm->_actorToPrintStrFor != 0xFF && _scumm->_actorToPrintStrFor != 0) {
+ Actor *a = _scumm->derefActorSafe(_scumm->_actorToPrintStrFor, "playBundleSound");
+ if (a)
+ rate = (rate * a->talkFrequency) / 256;
+ }
+
if (bits == 8) {
return _scumm->_mixer->playRaw(NULL, final, size, rate, SoundMixer::FLAG_UNSIGNED | SoundMixer::FLAG_AUTOFREE);
} else if (bits == 16){