refactor use of _messagePtr -> instead of using it as an implicit parameter for various methods, pass its value explicitly to those methods. Note: this *should* be just a code transformation, with no change to the program logic - unless I messed up once again <sigh>

svn-id: r13298
This commit is contained in:
Max Horn 2004-03-15 03:09:48 +00:00
parent 759c05f936
commit ba5aa37dcc
9 changed files with 79 additions and 87 deletions

View file

@ -1144,10 +1144,10 @@ int ScummEngine::getActorFromPos(int x, int y) {
return 0; return 0;
} }
void ScummEngine::actorTalk() { void ScummEngine::actorTalk(const byte *msg) {
Actor *a; Actor *a;
_messagePtr = addMessageToStack(_messagePtr, _charsetBuffer, sizeof(_charsetBuffer)); _messagePtr = addMessageToStack(msg, _charsetBuffer, sizeof(_charsetBuffer));
// FIXME: Workaround for bugs #770039 and #770049 // FIXME: Workaround for bugs #770039 and #770049
if (_gameId == GID_LOOM || _gameId == GID_LOOM256) { if (_gameId == GID_LOOM || _gameId == GID_LOOM256) {

View file

@ -428,8 +428,7 @@ void ScummEngine_v2::decodeParseString() {
_string[textSlot].color = v1_mm_actor_speech_color[_actorToPrintStrFor]; _string[textSlot].color = v1_mm_actor_speech_color[_actorToPrintStrFor];
} }
_messagePtr = buffer; actorTalk(buffer);
actorTalk();
} }
int ScummEngine_v2::readVar(uint var) { int ScummEngine_v2::readVar(uint var) {
@ -1055,15 +1054,13 @@ void ScummEngine_v2::o2_drawSentence() {
ptr++; ptr++;
} }
_messagePtr = (byte*)sentence;
sentenceline.top = virtscr[2].topline; sentenceline.top = virtscr[2].topline;
sentenceline.bottom = virtscr[2].topline + 8; sentenceline.bottom = virtscr[2].topline + 8;
sentenceline.left = 0; sentenceline.left = 0;
sentenceline.right = 319; sentenceline.right = 319;
restoreBG(sentenceline); restoreBG(sentenceline);
drawString(2); drawString(2, (byte*)sentence);
} }
void ScummEngine_v2::o2_ifClassOfIs() { void ScummEngine_v2::o2_ifClassOfIs() {

View file

@ -2702,6 +2702,7 @@ int ScummEngine_v5::getWordVararg(int *ptr) {
void ScummEngine_v5::decodeParseString() { void ScummEngine_v5::decodeParseString() {
int textSlot; int textSlot;
const byte *msg;
switch (_actorToPrintStrFor) { switch (_actorToPrintStrFor) {
case 252: case 252:
@ -2784,19 +2785,21 @@ void ScummEngine_v5::decodeParseString() {
} }
break; break;
case 15: // SO_TEXTSTRING case 15: // SO_TEXTSTRING
_messagePtr = _scriptPointer; msg = _scriptPointer;
_scriptPointer += resStrLen(_scriptPointer)+ 1;
switch (textSlot) { switch (textSlot) {
case 0: case 0:
actorTalk(); actorTalk(msg);
break; break;
case 1: case 1:
drawString(1); drawString(1, msg);
break; break;
case 2: case 2:
unkMessage1(); unkMessage1(msg);
break; break;
case 3: case 3:
unkMessage2(); unkMessage2(msg);
break; break;
} }
@ -2812,8 +2815,6 @@ void ScummEngine_v5::decodeParseString() {
_string[textSlot].t_ypos = _string[textSlot].ypos; _string[textSlot].t_ypos = _string[textSlot].ypos;
_string[textSlot].t_color = _string[textSlot].color; _string[textSlot].t_color = _string[textSlot].color;
} }
_scriptPointer = _messagePtr;
return; return;
default: default:
warning("ScummEngine_v5::decodeParseString: Unhandled case %d", _opcode & 0xF); warning("ScummEngine_v5::decodeParseString: Unhandled case %d", _opcode & 0xF);

View file

@ -2319,11 +2319,11 @@ void ScummEngine_v6::o6_printEgo() {
void ScummEngine_v6::o6_talkActor() { void ScummEngine_v6::o6_talkActor() {
_actorToPrintStrFor = pop(); _actorToPrintStrFor = pop();
_messagePtr = translateTextAndPlaySpeech(_scriptPointer); const byte *msg = translateTextAndPlaySpeech(_scriptPointer);
_scriptPointer += resStrLen(_scriptPointer) + 1; _scriptPointer += resStrLen(_scriptPointer) + 1;
setStringVars(0); setStringVars(0);
actorTalk(); actorTalk(msg);
} }
void ScummEngine_v6::o6_talkEgo() { void ScummEngine_v6::o6_talkEgo() {
@ -2507,9 +2507,8 @@ void ScummEngine_v6::o6_kernelSetFunctions() {
case 17:{ case 17:{
const byte *message; const byte *message;
byte buf_input[300], buf_output[300]; byte buf_input[300], buf_output[300];
_messagePtr = getStringAddressVar(VAR_STRING2DRAW);
message = buf_input; message = buf_input;
addMessageToStack(_messagePtr, buf_input, sizeof(buf_input)); addMessageToStack(getStringAddressVar(VAR_STRING2DRAW), buf_input, sizeof(buf_input));
if ((_gameId == GID_DIG) && !(_features & GF_DEMO)) { if ((_gameId == GID_DIG) && !(_features & GF_DEMO)) {
byte buf_trans[300]; byte buf_trans[300];
char *t_ptr = (char *)buf_input; char *t_ptr = (char *)buf_input;
@ -3115,6 +3114,7 @@ void ScummEngine_v6::o6_setBoxSet() {
void ScummEngine_v6::decodeParseString(int m, int n) { void ScummEngine_v6::decodeParseString(int m, int n) {
byte b; byte b;
const byte *msg;
b = fetchScriptByte(); b = fetchScriptByte();
@ -3149,29 +3149,30 @@ void ScummEngine_v6::decodeParseString(int m, int n) {
_string[m].no_talk_anim = true; _string[m].no_talk_anim = true;
break; break;
case 75: // SO_TEXTSTRING case 75: // SO_TEXTSTRING
_messagePtr = translateTextAndPlaySpeech(_scriptPointer); msg = translateTextAndPlaySpeech(_scriptPointer);
_scriptPointer += resStrLen(_scriptPointer)+ 1; _scriptPointer += resStrLen(_scriptPointer) + 1;
switch (m) { switch (m) {
case 0: case 0:
actorTalk(); actorTalk(msg);
break; break;
case 1: case 1:
drawString(1); drawString(1, msg);
break; break;
case 2: case 2:
unkMessage1(); unkMessage1(msg);
break; break;
case 3: case 3:
unkMessage2(); unkMessage2(msg);
break; break;
} }
return;
break;
case 0xFE: case 0xFE:
setStringVars(m); setStringVars(m);
if (n) if (n)
_actorToPrintStrFor = pop(); _actorToPrintStrFor = pop();
return; break;
case 0xFF: case 0xFF:
_string[m].t_xpos = _string[m].xpos; _string[m].t_xpos = _string[m].xpos;
_string[m].t_ypos = _string[m].ypos; _string[m].t_ypos = _string[m].ypos;
@ -3181,7 +3182,7 @@ void ScummEngine_v6::decodeParseString(int m, int n) {
_string[m].t_right = _string[m].right; _string[m].t_right = _string[m].right;
_string[m].t_color = _string[m].color; _string[m].t_color = _string[m].color;
_string[m].t_charset = _string[m].charset; _string[m].t_charset = _string[m].charset;
return; break;
default: default:
error("decodeParseString: default case 0x%x", b); error("decodeParseString: default case 0x%x", b);
} }

View file

@ -955,8 +955,7 @@ void ScummEngine_v6he::o6_openFile() {
int mode, len, slot, l, r; int mode, len, slot, l, r;
byte filename[100]; byte filename[100];
_messagePtr = _scriptPointer; addMessageToStack(_scriptPointer, filename, sizeof(filename));
addMessageToStack(_messagePtr, filename, sizeof(filename));
len = resStrLen(_scriptPointer); len = resStrLen(_scriptPointer);
_scriptPointer += len + 1; _scriptPointer += len + 1;
@ -1002,8 +1001,7 @@ void ScummEngine_v6he::o6_deleteFile() {
int len, r; int len, r;
byte filename[100]; byte filename[100];
_messagePtr = _scriptPointer; addMessageToStack(_scriptPointer, filename, sizeof(filename));
addMessageToStack(_messagePtr, filename, sizeof(filename));
len = resStrLen(_scriptPointer); len = resStrLen(_scriptPointer);
_scriptPointer += len + 1; _scriptPointer += len + 1;
@ -1020,8 +1018,7 @@ void ScummEngine_v6he::o6_rename() {
int len, r1, r2; int len, r1, r2;
byte filename[100],filename2[100]; byte filename[100],filename2[100];
_messagePtr = _scriptPointer; addMessageToStack(_scriptPointer, filename, sizeof(filename));
addMessageToStack(_messagePtr, filename, sizeof(filename));
len = resStrLen(_scriptPointer); len = resStrLen(_scriptPointer);
_scriptPointer += len + 1; _scriptPointer += len + 1;
@ -1031,8 +1028,7 @@ void ScummEngine_v6he::o6_rename() {
break; break;
} }
_messagePtr = _scriptPointer; addMessageToStack(_scriptPointer, filename2, sizeof(filename2));
addMessageToStack(_messagePtr, filename2, sizeof(filename2));
len = resStrLen(_scriptPointer); len = resStrLen(_scriptPointer);
_scriptPointer += len + 1; _scriptPointer += len + 1;
@ -1340,22 +1336,19 @@ void ScummEngine_v6he::o6_unknownF4() {
switch (b) { switch (b) {
case 1: case 1:
_messagePtr = _scriptPointer; addMessageToStack(_scriptPointer, filename1, sizeof(filename1));
addMessageToStack(_messagePtr, filename1, sizeof(filename1));
len = resStrLen(_scriptPointer); len = resStrLen(_scriptPointer);
_scriptPointer += len + 1; _scriptPointer += len + 1;
debug(1, "o6_unknownF4(%d, %d, \"%s\")", a, b, _messagePtr); debug(1, "o6_unknownF4(%d, %d, \"%s\")", a, b, filename1);
break; break;
case 2: case 2:
_messagePtr = _scriptPointer; addMessageToStack(_scriptPointer, filename1, sizeof(filename1));
addMessageToStack(_messagePtr, filename1, sizeof(filename1));
len = resStrLen(_scriptPointer); len = resStrLen(_scriptPointer);
_scriptPointer += len + 1; _scriptPointer += len + 1;
_messagePtr = _scriptPointer; addMessageToStack(_scriptPointer, filename2, sizeof(filename2));
addMessageToStack(_messagePtr, filename2, sizeof(filename2));
len = resStrLen(_scriptPointer); len = resStrLen(_scriptPointer);
_scriptPointer += len + 1; _scriptPointer += len + 1;
@ -1371,8 +1364,7 @@ void ScummEngine_v6he::o6_unknownF9() {
int len, r; int len, r;
byte filename[100]; byte filename[100];
_messagePtr = _scriptPointer; addMessageToStack(_scriptPointer, filename, sizeof(filename));
addMessageToStack(_messagePtr, filename, sizeof(filename));
len = resStrLen(_scriptPointer); len = resStrLen(_scriptPointer);
_scriptPointer += len + 1; _scriptPointer += len + 1;
@ -1413,6 +1405,7 @@ void ScummEngine_v6he::o6_unknownFB() {
void ScummEngine_v6he::decodeParseString(int m, int n) { void ScummEngine_v6he::decodeParseString(int m, int n) {
byte b; byte b;
int c; int c;
const byte *msg;
b = fetchScriptByte(); b = fetchScriptByte();
@ -1447,24 +1440,25 @@ void ScummEngine_v6he::decodeParseString(int m, int n) {
_string[m].no_talk_anim = true; _string[m].no_talk_anim = true;
break; break;
case 75: // SO_TEXTSTRING case 75: // SO_TEXTSTRING
_messagePtr = translateTextAndPlaySpeech(_scriptPointer); msg = translateTextAndPlaySpeech(_scriptPointer);
_scriptPointer += resStrLen(_scriptPointer)+ 1; _scriptPointer += resStrLen(_scriptPointer) + 1;
switch (m) { switch (m) {
case 0: case 0:
actorTalk(); actorTalk(msg);
break; break;
case 1: case 1:
drawString(1); drawString(1, msg);
break; break;
case 2: case 2:
unkMessage1(); unkMessage1(msg);
break; break;
case 3: case 3:
unkMessage2(); unkMessage2(msg);
break; break;
} }
return;
break;
case 0xF9: case 0xF9:
c = pop(); c = pop();
if (c == 1) { if (c == 1) {
@ -1475,12 +1469,12 @@ void ScummEngine_v6he::decodeParseString(int m, int n) {
getStackList(args, ARRAYSIZE(args)); getStackList(args, ARRAYSIZE(args));
} }
warning("decodeParseString case 0xF9 stub"); warning("decodeParseString case 0xF9 stub");
return; break;
case 0xFE: case 0xFE:
setStringVars(m); setStringVars(m);
if (n) if (n)
_actorToPrintStrFor = pop(); _actorToPrintStrFor = pop();
return; break;
case 0xFF: case 0xFF:
_string[m].t_xpos = _string[m].xpos; _string[m].t_xpos = _string[m].xpos;
_string[m].t_ypos = _string[m].ypos; _string[m].t_ypos = _string[m].ypos;
@ -1490,7 +1484,7 @@ void ScummEngine_v6he::decodeParseString(int m, int n) {
_string[m].t_right = _string[m].right; _string[m].t_right = _string[m].right;
_string[m].t_color = _string[m].color; _string[m].t_color = _string[m].color;
_string[m].t_charset = _string[m].charset; _string[m].t_charset = _string[m].charset;
return; break;
default: default:
error("decodeParseString: default case 0x%x", b); error("decodeParseString: default case 0x%x", b);
} }

View file

@ -467,6 +467,7 @@ void ScummEngine_v8::writeVar(uint var, int value) {
void ScummEngine_v8::decodeParseString(int m, int n) { void ScummEngine_v8::decodeParseString(int m, int n) {
byte b; byte b;
const byte *msg;
b = fetchScriptByte(); b = fetchScriptByte();
@ -513,29 +514,30 @@ void ScummEngine_v8::decodeParseString(int m, int n) {
_string[m].no_talk_anim = true; _string[m].no_talk_anim = true;
break; break;
case 0xD1: // SO_PRINT_STRING case 0xD1: // SO_PRINT_STRING
_messagePtr = translateTextAndPlaySpeech(_scriptPointer); msg = translateTextAndPlaySpeech(_scriptPointer);
_scriptPointer += resStrLen(_scriptPointer)+ 1; _scriptPointer += resStrLen(_scriptPointer) + 1;
switch (m) { switch (m) {
case 0: case 0:
actorTalk(); actorTalk(msg);
break; break;
case 1: case 1:
drawString(1); drawString(1, msg);
break; break;
case 2: case 2:
unkMessage1(); unkMessage1(msg);
break; break;
case 3: case 3:
unkMessage2(); unkMessage2(msg);
break; break;
case 5:{ case 5:{
byte buffer[256]; byte buffer[256];
addMessageToStack(_messagePtr, buffer, sizeof(buffer)); addMessageToStack(msg, buffer, sizeof(buffer));
enqueueText(buffer, _string[m].xpos, _string[m].ypos, _string[m].color, _string[m].charset, _string[m].center); enqueueText(buffer, _string[m].xpos, _string[m].ypos, _string[m].color, _string[m].charset, _string[m].center);
} }
break; break;
} }
break; break;
case 0xD2: // SO_PRINT_WRAP Set print wordwrap case 0xD2: // SO_PRINT_WRAP Set print wordwrap
//warning("decodeParseString: SO_PRINT_WRAP"); //warning("decodeParseString: SO_PRINT_WRAP");

View file

@ -775,7 +775,7 @@ public:
SentenceTab _sentence[NUM_SENTENCE]; SentenceTab _sentence[NUM_SENTENCE];
StringTab _string[6]; StringTab _string[6];
int16 _talkDelay; int16 _talkDelay;
void actorTalk(); void actorTalk(const byte *msg);
void stopTalk(); void stopTalk();
int talkingActor(); // Wrapper around VAR_TALK_ACTOR for V1 Maniac int talkingActor(); // Wrapper around VAR_TALK_ACTOR for V1 Maniac
void talkingActor(int variable); void talkingActor(int variable);
@ -1063,14 +1063,14 @@ protected:
void initCharset(int charset); void initCharset(int charset);
void CHARSET_1(); void CHARSET_1();
void drawString(int a); void drawString(int a, const byte *msg);
const byte *addMessageToStack(const byte *msg, byte *dstBuffer, int dstBufferSize); const byte *addMessageToStack(const byte *msg, byte *dstBuffer, int dstBufferSize);
void addIntToStack(int var); void addIntToStack(int var);
void addVerbToStack(int var); void addVerbToStack(int var);
void addNameToStack(int var); void addNameToStack(int var);
void addStringToStack(int var); void addStringToStack(int var);
void unkMessage1(); void unkMessage1(const byte *msg);
void unkMessage2(); void unkMessage2(const byte *msg);
public: public:
void clearMsgQueue(); // Used by Actor::putActor void clearMsgQueue(); // Used by Actor::putActor
protected: protected:

View file

@ -46,9 +46,9 @@ void ScummEngine::setStringVars(int slot) {
st->charset = st->t_charset; st->charset = st->t_charset;
} }
void ScummEngine::unkMessage1() { void ScummEngine::unkMessage1(const byte *msg) {
byte buffer[100]; byte buffer[100];
_messagePtr = addMessageToStack(_messagePtr, buffer, sizeof(buffer)); _messagePtr = addMessageToStack(msg, buffer, sizeof(buffer));
// if ((_gameId == GID_CMI) && _debugMode) { // In CMI, unkMessage1 is used for printDebug output // if ((_gameId == GID_CMI) && _debugMode) { // In CMI, unkMessage1 is used for printDebug output
if ((buffer[0] != 0xFF) && _debugMode) { if ((buffer[0] != 0xFF) && _debugMode) {
@ -71,13 +71,13 @@ void ScummEngine::unkMessage1() {
} }
} }
void ScummEngine::unkMessage2() { void ScummEngine::unkMessage2(const byte *msg) {
// Original COMI used different code at this point. // Original COMI used different code at this point.
// Seemed to use blastText for the messages // Seemed to use blastText for the messages
byte buf[100]; byte buf[100];
const byte *tmp; const byte *tmp;
tmp = _messagePtr = addMessageToStack(_messagePtr, buf, sizeof(buf)); tmp = _messagePtr = addMessageToStack(msg, buf, sizeof(buf));
if (_string[3].color == 0) if (_string[3].color == 0)
_string[3].color = 4; _string[3].color = 4;
@ -339,14 +339,14 @@ void ScummEngine::CHARSET_1() {
_charset->_mask = _charset->_str; _charset->_mask = _charset->_str;
} }
void ScummEngine::drawString(int a) { void ScummEngine::drawString(int a, const byte *msg) {
byte buf[256]; byte buf[256];
byte *space; byte *space;
int i, c; int i, c;
byte fontHeight = 0; byte fontHeight = 0;
uint color; uint color;
_messagePtr = addMessageToStack(_messagePtr, buf, sizeof(buf)); _messagePtr = addMessageToStack(msg, buf, sizeof(buf));
_charset->_top = _string[a].ypos + _screenTop; _charset->_top = _string[a].ypos + _screenTop;
_charset->_startLeft = _charset->_left = _string[a].xpos; _charset->_startLeft = _charset->_left = _string[a].xpos;

View file

@ -228,18 +228,18 @@ void ScummEngine::redrawV2Inventory() {
_string[1].xpos = v2_mouseover_boxes[i].rect.left; _string[1].xpos = v2_mouseover_boxes[i].rect.left;
_string[1].color = v2_mouseover_boxes[i].color; _string[1].color = v2_mouseover_boxes[i].color;
_messagePtr = getObjOrActorName(obj);
assert(_messagePtr); const byte *tmp = getObjOrActorName(obj);
assert(tmp);
// Prevent inventory entries from overflowing by truncating the text // Prevent inventory entries from overflowing by truncating the text
// after 144/8 = 18 chars // after 144/8 = 18 chars
byte msg[18 + 1]; byte msg[18 + 1];
msg[18] = 0; msg[18] = 0;
strncpy((char *)msg, (const char *)_messagePtr, 18); strncpy((char *)msg, (const char *)tmp, 18);
_messagePtr = msg;
// Draw it // Draw it
drawString(1); drawString(1, msg);
} }
@ -248,8 +248,7 @@ void ScummEngine::redrawV2Inventory() {
_string[1].xpos = v2_mouseover_boxes[kInventoryUpArrow].rect.left; _string[1].xpos = v2_mouseover_boxes[kInventoryUpArrow].rect.left;
_string[1].ypos = v2_mouseover_boxes[kInventoryUpArrow].rect.top + vs->topline; _string[1].ypos = v2_mouseover_boxes[kInventoryUpArrow].rect.top + vs->topline;
_string[1].color = v2_mouseover_boxes[kInventoryUpArrow].color; _string[1].color = v2_mouseover_boxes[kInventoryUpArrow].color;
_messagePtr = (const byte *)" \1\2"; drawString(1, (const byte *)" \1\2");
drawString(1);
} }
// If necessary, draw "down" arrow // If necessary, draw "down" arrow
@ -257,8 +256,7 @@ void ScummEngine::redrawV2Inventory() {
_string[1].xpos = v2_mouseover_boxes[kInventoryDownArrow].rect.left; _string[1].xpos = v2_mouseover_boxes[kInventoryDownArrow].rect.left;
_string[1].ypos = v2_mouseover_boxes[kInventoryDownArrow].rect.top + vs->topline; _string[1].ypos = v2_mouseover_boxes[kInventoryDownArrow].rect.top + vs->topline;
_string[1].color = v2_mouseover_boxes[kInventoryDownArrow].color; _string[1].color = v2_mouseover_boxes[kInventoryDownArrow].color;
_messagePtr = (const byte *)" \3\4"; drawString(1, (const byte *)" \3\4");
drawString(1);
} }
} }
@ -397,19 +395,18 @@ void ScummEngine::drawVerb(int verb, int mode) {
verb += _inventoryOffset; verb += _inventoryOffset;
*/ */
_messagePtr = getResourceAddress(rtVerb, verb); const byte *msg = getResourceAddress(rtVerb, verb);
if (!_messagePtr) if (!msg)
return; return;
assert(_messagePtr);
if ((_version == 8) && (_messagePtr[0] == '/')) { if ((_version == 8) && (msg[0] == '/')) {
translateText(_messagePtr, _transText); translateText(msg, _transText);
_messagePtr = _transText; msg = _transText;
} }
tmp = _charset->_center; tmp = _charset->_center;
_charset->_center = 0; _charset->_center = 0;
drawString(4); drawString(4, msg);
_charset->_center = tmp; _charset->_center = tmp;
vs->curRect.right = _charset->_str.right; vs->curRect.right = _charset->_str.right;