[Scummvm-cvs-logs] CVS: scummvm/scumm actor.cpp,1.241,1.242 script_v6.cpp,1.322,1.323 script_v6he.cpp,2.39,2.40 script_v8.cpp,2.239,2.240 scumm.h,1.385,1.386 string.cpp,1.204,1.205
Max Horn
fingolfin at users.sourceforge.net
Fri Mar 19 15:30:06 CET 2004
- Previous message: [Scummvm-cvs-logs] CVS: residual smush.cpp,1.30,1.31 smush.h,1.14,1.15
- Next message: [Scummvm-cvs-logs] CVS: residual engine.cpp,1.20,1.21 engine.h,1.7,1.8 lua.cpp,1.43,1.44 main.cpp,1.20,1.21 smush.cpp,1.31,1.32 smush.h,1.15,1.16
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32219
Modified Files:
actor.cpp script_v6.cpp script_v6he.cpp script_v8.cpp scumm.h
string.cpp
Log Message:
Revamped COMI/DIG speech decoding (this my cause regressions, watch out). Goal was to streamline code logic, and get rid of a FIXME
Index: actor.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/actor.cpp,v
retrieving revision 1.241
retrieving revision 1.242
diff -u -d -r1.241 -r1.242
--- actor.cpp 16 Mar 2004 23:51:41 -0000 1.241
+++ actor.cpp 19 Mar 2004 23:19:57 -0000 1.242
@@ -1148,6 +1148,13 @@
Actor *a;
addMessageToStack(msg, _charsetBuffer, sizeof(_charsetBuffer));
+
+ while ((_gameId == GID_DIG || _gameId == GID_CMI) && (_charsetBuffer[0] == '/')) {
+ translateText(_charsetBuffer, _transText);
+ if (_transText[0] != '/')
+ playSpeech(_charsetBuffer);
+ memcpy(_charsetBuffer, _transText, MIN(sizeof(_charsetBuffer), sizeof(_transText)));
+ }
// FIXME: Workaround for bugs #770039 and #770049
if (_gameId == GID_LOOM || _gameId == GID_LOOM256) {
Index: script_v6.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v6.cpp,v
retrieving revision 1.322
retrieving revision 1.323
diff -u -d -r1.322 -r1.323
--- script_v6.cpp 17 Mar 2004 01:50:15 -0000 1.322
+++ script_v6.cpp 19 Mar 2004 23:19:57 -0000 1.323
@@ -2294,11 +2294,10 @@
void ScummEngine_v6::o6_talkActor() {
_actorToPrintStrFor = pop();
- const byte *msg = translateTextAndPlaySpeech(_scriptPointer);
- _scriptPointer += resStrLen(_scriptPointer) + 1;
-
setStringVars(0);
- actorTalk(msg);
+ actorTalk(_scriptPointer);
+
+ _scriptPointer += resStrLen(_scriptPointer) + 1;
}
void ScummEngine_v6::o6_talkEgo() {
@@ -3089,7 +3088,6 @@
void ScummEngine_v6::decodeParseString(int m, int n) {
byte b;
- const byte *msg;
b = fetchScriptByte();
@@ -3124,23 +3122,23 @@
_string[m].no_talk_anim = true;
break;
case 75: // SO_TEXTSTRING
- msg = translateTextAndPlaySpeech(_scriptPointer);
- _scriptPointer += resStrLen(_scriptPointer) + 1;
+ translateText(_scriptPointer, _transText);
switch (m) {
case 0:
- actorTalk(msg);
+ actorTalk(_scriptPointer);
break;
case 1:
- drawString(1, msg);
+ drawString(1, _transText);
break;
case 2:
- unkMessage1(msg);
+ unkMessage1(_transText);
break;
case 3:
- unkMessage2(msg);
+ unkMessage2(_transText);
break;
}
+ _scriptPointer += resStrLen(_scriptPointer) + 1;
break;
case 0xFE:
Index: script_v6he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v6he.cpp,v
retrieving revision 2.39
retrieving revision 2.40
diff -u -d -r2.39 -r2.40
--- script_v6he.cpp 15 Mar 2004 03:09:48 -0000 2.39
+++ script_v6he.cpp 19 Mar 2004 23:19:57 -0000 2.40
@@ -1405,7 +1405,6 @@
void ScummEngine_v6he::decodeParseString(int m, int n) {
byte b;
int c;
- const byte *msg;
b = fetchScriptByte();
@@ -1440,23 +1439,23 @@
_string[m].no_talk_anim = true;
break;
case 75: // SO_TEXTSTRING
- msg = translateTextAndPlaySpeech(_scriptPointer);
- _scriptPointer += resStrLen(_scriptPointer) + 1;
+ translateText(_scriptPointer, _transText);
switch (m) {
case 0:
- actorTalk(msg);
+ actorTalk(_scriptPointer);
break;
case 1:
- drawString(1, msg);
+ drawString(1, _transText);
break;
case 2:
- unkMessage1(msg);
+ unkMessage1(_transText);
break;
case 3:
- unkMessage2(msg);
+ unkMessage2(_transText);
break;
}
+ _scriptPointer += resStrLen(_scriptPointer) + 1;
break;
case 0xF9:
Index: script_v8.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v8.cpp,v
retrieving revision 2.239
retrieving revision 2.240
diff -u -d -r2.239 -r2.240
--- script_v8.cpp 15 Mar 2004 21:48:54 -0000 2.239
+++ script_v8.cpp 19 Mar 2004 23:19:57 -0000 2.240
@@ -467,7 +467,6 @@
void ScummEngine_v8::decodeParseString(int m, int n) {
byte b;
- const byte *msg;
b = fetchScriptByte();
@@ -514,29 +513,30 @@
_string[m].no_talk_anim = true;
break;
case 0xD1: // SO_PRINT_STRING
- msg = translateTextAndPlaySpeech(_scriptPointer);
- _scriptPointer += resStrLen(_scriptPointer) + 1;
+ translateText(_scriptPointer, _transText);
switch (m) {
case 0:
- actorTalk(msg);
+ actorTalk(_scriptPointer);
break;
case 1:
- drawString(1, msg);
+ drawString(1, _transText);
break;
case 2:
- unkMessage1(msg);
+ unkMessage1(_transText);
break;
case 3:
- unkMessage2(msg);
+ unkMessage2(_transText);
break;
case 5:{
byte buffer[256];
- addMessageToStack(msg, buffer, sizeof(buffer));
- enqueueText(buffer, _string[m].xpos, _string[m].ypos, _string[m].color, _string[m].charset, _string[m].center);
+ addMessageToStack(_transText, buffer, sizeof(buffer));
+ translateText(buffer, _transText);
+ enqueueText(_transText, _string[m].xpos, _string[m].ypos, _string[m].color, _string[m].charset, _string[m].center);
}
break;
}
+ _scriptPointer += resStrLen(_scriptPointer) + 1;
break;
case 0xD2: // SO_PRINT_WRAP Set print wordwrap
Index: scumm.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/scumm.h,v
retrieving revision 1.385
retrieving revision 1.386
diff -u -d -r1.385 -r1.386
--- scumm.h 19 Mar 2004 19:40:34 -0000 1.385
+++ scumm.h 19 Mar 2004 23:19:57 -0000 1.386
@@ -1077,10 +1077,10 @@
char *_languageBuffer;
LangIndexNode *_languageIndex;
int _languageIndexSize;
- byte _transText[500];
+ byte _transText[512];
void loadLanguageBundle();
- const byte *translateTextAndPlaySpeech(const byte *ptr);
+ void playSpeech(const byte *ptr);
public:
void translateText(const byte *text, byte *trans_buff); // Used by class ScummDialog
Index: string.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/string.cpp,v
retrieving revision 1.204
retrieving revision 1.205
diff -u -d -r1.204 -r1.205
--- string.cpp 19 Mar 2004 19:40:34 -0000 1.204
+++ string.cpp 19 Mar 2004 23:19:57 -0000 1.205
@@ -523,14 +523,7 @@
addNameToStack(val);
break;
case 7:
- if (_version <= 2) {
- while ((chr = (byte) _scummVars[val++])) {
- if (chr != '@')
- *_msgPtrToAdd++ = chr;
- }
- } else {
- addStringToStack(val);
- }
+ addStringToStack(val);
break;
case 9:
case 10:
@@ -583,7 +576,6 @@
for (k = 1; k < _numVerbs; k++) {
if (num == _verbs[k].verbid && !_verbs[k].type && !_verbs[k].saveid) {
const byte *ptr = getResourceAddress(rtVerb, k);
- ptr = translateTextAndPlaySpeech(ptr);
addMessageToStack(ptr, 0, 0);
break;
}
@@ -593,24 +585,28 @@
void ScummEngine::addNameToStack(int var) {
int num;
- const byte *ptr = 0;
num = readVar(var);
- if (num)
- ptr = getObjOrActorName(num);
- if (ptr) {
- if ((_version == 8) && (ptr[0] == '/')) {
- translateText(ptr, _transText);
- addMessageToStack(_transText, 0, 0);
- } else {
+ if (num) {
+ const byte *ptr = getObjOrActorName(num);
+ if (ptr)
addMessageToStack(ptr, 0, 0);
- }
}
}
void ScummEngine::addStringToStack(int var) {
const byte *ptr;
+ if (_version <= 2) {
+ byte chr;
+ while ((chr = (byte)_scummVars[var++])) {
+ if (chr != '@')
+ *_msgPtrToAdd++ = chr;
+ }
+
+ return;
+ }
+
if (_version == 3 || _version >= 6)
var = readVar(var);
@@ -858,12 +854,11 @@
qsort(_languageIndex, _languageIndexSize, sizeof(LangIndexNode), indexCompare);
}
-const byte *ScummEngine::translateTextAndPlaySpeech(const byte *ptr) {
+void ScummEngine::playSpeech(const byte *ptr) {
if ((_gameId == GID_DIG || _gameId == GID_CMI) && (ptr[0] == '/')) {
char pointer[20];
int i, j;
- translateText(ptr, _transText);
for (i = 0, j = 0; (ptr[i] != '/' || j == 0) && j < 19; i++) {
if (ptr[i] != '/')
pointer[j++] = ptr[i];
@@ -873,18 +868,11 @@
// Play speech
if (!(_features & GF_DEMO) && (_gameId == GID_CMI)) // CMI demo does not have .IMX for voice
strcat(pointer, ".IMX");
- // FIXME: This is a hack to distinguish between 'real' actor speech and
- // some odd (?) other strings... there is probably a better way to do this.
- // I just don't know which (yet).
- if ((_gameId == GID_DIG) || (_gameId == GID_CMI && ptr[i+1] != 0 && ptr[i+1] != 255)) {
- _sound->stopTalkSound();
- _imuseDigital->startVoice(kTalkSoundID, pointer);
- _sound->talkSound(0, 0, 2, -1);
- }
- ptr = _transText;
+ _sound->stopTalkSound();
+ _imuseDigital->startVoice(kTalkSoundID, pointer);
+ _sound->talkSound(0, 0, 2, -1);
}
- return ptr;
}
void ScummEngine::translateText(const byte *text, byte *trans_buff) {
- Previous message: [Scummvm-cvs-logs] CVS: residual smush.cpp,1.30,1.31 smush.h,1.14,1.15
- Next message: [Scummvm-cvs-logs] CVS: residual engine.cpp,1.20,1.21 engine.h,1.7,1.8 lua.cpp,1.43,1.44 main.cpp,1.20,1.21 smush.cpp,1.31,1.32 smush.h,1.15,1.16
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Scummvm-git-logs
mailing list