Added ScummEngine::printString() convenience method; changed enqueueText to call addMessageToStack
svn-id: r15170
This commit is contained in:
parent
58c574d7cc
commit
3552024aa9
7 changed files with 41 additions and 133 deletions
|
@ -2608,7 +2608,6 @@ 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:
|
||||||
|
@ -2691,23 +2690,9 @@ void ScummEngine_v5::decodeParseString() {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 15: // SO_TEXTSTRING
|
case 15: // SO_TEXTSTRING
|
||||||
msg = _scriptPointer;
|
printString(textSlot, _scriptPointer);
|
||||||
_scriptPointer += resStrLen(_scriptPointer) + 1;
|
_scriptPointer += resStrLen(_scriptPointer) + 1;
|
||||||
|
|
||||||
switch (textSlot) {
|
|
||||||
case 0:
|
|
||||||
actorTalk(msg);
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
drawString(1, msg);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
unkMessage1(msg);
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
unkMessage2(msg);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// In SCUMM V1-V3, there were no 'default' values for the text slot
|
// In SCUMM V1-V3, there were no 'default' values for the text slot
|
||||||
// values. Hence to achieve correct behaviour, we have to keep the
|
// values. Hence to achieve correct behaviour, we have to keep the
|
||||||
|
|
|
@ -2537,13 +2537,9 @@ void ScummEngine_v6::o6_kernelSetFunctions() {
|
||||||
_smushFrameRate = args[1];
|
_smushFrameRate = args[1];
|
||||||
break;
|
break;
|
||||||
case 16:
|
case 16:
|
||||||
case 17:{
|
case 17:
|
||||||
byte buf_input[300];
|
enqueueText(getStringAddressVar(VAR_STRING2DRAW), args[3], args[4], args[2], args[1], true);
|
||||||
const byte *message = getStringAddressVar(VAR_STRING2DRAW);
|
break;
|
||||||
|
|
||||||
addMessageToStack(message, buf_input, sizeof(buf_input));
|
|
||||||
enqueueText(buf_input, args[3], args[4], args[2], args[1], true);
|
|
||||||
break;}
|
|
||||||
case 20:
|
case 20:
|
||||||
// it's used for turn on/off 'RadioChatter' effect for voice in the dig, but i's not needed
|
// it's used for turn on/off 'RadioChatter' effect for voice in the dig, but i's not needed
|
||||||
break;
|
break;
|
||||||
|
@ -3152,22 +3148,8 @@ 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
|
||||||
switch (m) {
|
printString(m, _scriptPointer);
|
||||||
case 0:
|
|
||||||
actorTalk(_scriptPointer);
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
drawString(1, _scriptPointer);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
unkMessage1(_scriptPointer);
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
unkMessage2(_scriptPointer);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
_scriptPointer += resStrLen(_scriptPointer) + 1;
|
_scriptPointer += resStrLen(_scriptPointer) + 1;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case 0xFE:
|
case 0xFE:
|
||||||
_string[m].loadDefault();
|
_string[m].loadDefault();
|
||||||
|
|
|
@ -567,7 +567,7 @@ void ScummEngine_v6he::swapObjects(int object1, int object2) {
|
||||||
stopObjectScript(object1);
|
stopObjectScript(object1);
|
||||||
stopObjectScript(object2);
|
stopObjectScript(object2);
|
||||||
|
|
||||||
struct ObjectData tmpOd;
|
ObjectData tmpOd;
|
||||||
|
|
||||||
memcpy(&tmpOd, &_objs[idx1], sizeof(tmpOd));
|
memcpy(&tmpOd, &_objs[idx1], sizeof(tmpOd));
|
||||||
memcpy(&_objs[idx1], &_objs[idx2], sizeof(tmpOd));
|
memcpy(&_objs[idx1], &_objs[idx2], sizeof(tmpOd));
|
||||||
|
@ -1150,6 +1150,8 @@ void ScummEngine_v6he::o6_soundOps() {
|
||||||
// See also o6_startSound().
|
// See also o6_startSound().
|
||||||
_sound->setOverrideFreq(arg);
|
_sound->setOverrideFreq(arg);
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
error("o6_soundOps: default case 0x%x", subOp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1171,19 +1173,7 @@ void ScummEngine_v6he::o6_seekFilePos() {
|
||||||
offset = pop();
|
offset = pop();
|
||||||
slot = pop();
|
slot = pop();
|
||||||
|
|
||||||
switch (mode) {
|
seekFilePos(slot, offset, mode - 1);
|
||||||
case 1:
|
|
||||||
seekFilePos(slot, offset, 0);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
seekFilePos(slot, offset, 1);
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
seekFilePos(slot, offset, 2);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScummEngine_v6he::seekFilePos(int slot, int offset, int mode) {
|
void ScummEngine_v6he::seekFilePos(int slot, int offset, int mode) {
|
||||||
|
@ -1200,6 +1190,8 @@ void ScummEngine_v6he::seekFilePos(int slot, int offset, int mode) {
|
||||||
case 2:
|
case 2:
|
||||||
_hFileTable[slot].seek(offset, SEEK_END);
|
_hFileTable[slot].seek(offset, SEEK_END);
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
error("seekFilePos: default case 0x%x", mode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1299,22 +1291,8 @@ 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
|
||||||
switch (m) {
|
printString(m, _scriptPointer);
|
||||||
case 0:
|
|
||||||
actorTalk(_scriptPointer);
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
drawString(1, _scriptPointer);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
unkMessage1(_scriptPointer);
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
unkMessage2(_scriptPointer);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
_scriptPointer += resStrLen(_scriptPointer) + 1;
|
_scriptPointer += resStrLen(_scriptPointer) + 1;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case 0xF9:
|
case 0xF9:
|
||||||
color = pop();
|
color = pop();
|
||||||
|
|
|
@ -2089,59 +2089,18 @@ void ScummEngine_v72he::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
|
||||||
switch (m) {
|
printString(m, _scriptPointer);
|
||||||
case 0:
|
|
||||||
actorTalk(_scriptPointer);
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
drawString(1, _scriptPointer);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
unkMessage1(_scriptPointer);
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
unkMessage2(_scriptPointer);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
_scriptPointer += resStrLen(_scriptPointer) + 1;
|
_scriptPointer += resStrLen(_scriptPointer) + 1;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case 194:
|
case 194:
|
||||||
decodeScriptString(name, true);
|
decodeScriptString(name, true);
|
||||||
switch (m) {
|
printString(m, name);
|
||||||
case 0:
|
|
||||||
actorTalk(name);
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
drawString(1, name);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
unkMessage1(name);
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
unkMessage2(name);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case 0xE1:
|
case 0xE1:
|
||||||
ptr = getResourceAddress(rtTalkie, pop());
|
ptr = getResourceAddress(rtTalkie, pop());
|
||||||
size = READ_BE_UINT32(ptr + 12);
|
size = READ_BE_UINT32(ptr + 12);
|
||||||
memcpy(name, ptr + 16, size);
|
memcpy(name, ptr + 16, size);
|
||||||
|
printString(m, name);
|
||||||
switch (m) {
|
|
||||||
case 0:
|
|
||||||
actorTalk(name);
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
drawString(1, name);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
unkMessage1(name);
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
unkMessage2(name);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case 0xF9:
|
case 0xF9:
|
||||||
color = pop();
|
color = pop();
|
||||||
|
|
|
@ -499,26 +499,10 @@ 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
|
||||||
switch (m) {
|
if (m == 5)
|
||||||
case 0:
|
enqueueText(_scriptPointer, _string[m].xpos, _string[m].ypos, _string[m].color, _string[m].charset, _string[m].center);
|
||||||
actorTalk(_scriptPointer);
|
else
|
||||||
break;
|
printString(m, _scriptPointer);
|
||||||
case 1:
|
|
||||||
drawString(1, _scriptPointer);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
unkMessage1(_scriptPointer);
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
unkMessage2(_scriptPointer);
|
|
||||||
break;
|
|
||||||
case 5:{
|
|
||||||
byte buffer[256];
|
|
||||||
addMessageToStack(_scriptPointer, buffer, sizeof(buffer));
|
|
||||||
enqueueText(buffer, _string[m].xpos, _string[m].ypos, _string[m].color, _string[m].charset, _string[m].center);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
_scriptPointer += resStrLen(_scriptPointer) + 1;
|
_scriptPointer += resStrLen(_scriptPointer) + 1;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1162,6 +1162,8 @@ protected:
|
||||||
|
|
||||||
void initCharset(int charset);
|
void initCharset(int charset);
|
||||||
|
|
||||||
|
void printString(int m, const byte *msg);
|
||||||
|
|
||||||
void CHARSET_1();
|
void CHARSET_1();
|
||||||
void drawString(int a, const byte *msg);
|
void drawString(int a, const byte *msg);
|
||||||
void unkMessage1(const byte *msg);
|
void unkMessage1(const byte *msg);
|
||||||
|
|
|
@ -34,6 +34,24 @@
|
||||||
|
|
||||||
namespace Scumm {
|
namespace Scumm {
|
||||||
|
|
||||||
|
void ScummEngine::printString(int m, const byte *msg) {
|
||||||
|
switch (m) {
|
||||||
|
case 0:
|
||||||
|
actorTalk(msg);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
drawString(1, msg);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
unkMessage1(msg);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
unkMessage2(msg);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void ScummEngine::unkMessage1(const byte *msg) {
|
void ScummEngine::unkMessage1(const byte *msg) {
|
||||||
byte buffer[100];
|
byte buffer[100];
|
||||||
addMessageToStack(msg, buffer, sizeof(buffer));
|
addMessageToStack(msg, buffer, sizeof(buffer));
|
||||||
|
@ -661,7 +679,7 @@ void ScummEngine::enqueueText(const byte *text, int x, int y, byte color, byte c
|
||||||
BlastText &bt = _blastTextQueue[_blastTextQueuePos++];
|
BlastText &bt = _blastTextQueue[_blastTextQueuePos++];
|
||||||
assert(_blastTextQueuePos <= ARRAYSIZE(_blastTextQueue));
|
assert(_blastTextQueuePos <= ARRAYSIZE(_blastTextQueue));
|
||||||
|
|
||||||
strcpy((char *)bt.text, (const char *)text);
|
addMessageToStack(text, bt.text, sizeof(bt.text));
|
||||||
bt.xpos = x;
|
bt.xpos = x;
|
||||||
bt.ypos = y;
|
bt.ypos = y;
|
||||||
bt.color = color;
|
bt.color = color;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue