HE72+ games use slightly different code for subtitle color.

svn-id: r17174
This commit is contained in:
Travis Howell 2005-03-17 10:53:29 +00:00
parent 4c3d302e19
commit 4361ef655e
7 changed files with 35 additions and 10 deletions

View File

@ -1278,7 +1278,7 @@ void ScummEngine::actorTalk(const byte *msg) {
return;
}
if (getTalkingActor() > 0x7F) {
if (_heversion >= 72 || getTalkingActor() > 0x7F) {
_charsetColor = (byte)_string[0].color;
} else {
a = derefActor(getTalkingActor(), "actorTalk(2)");

View File

@ -1681,6 +1681,7 @@ void ScummEngine::akos_processQueue() {
a->_talkColor = a->_heTalkQueue[param_1].color;
_string[0].loadDefault();
_string[0].color = a->_talkColor;
actorTalk(a->_heTalkQueue[param_1].sentence);
} else if (param_1 != 0) {

View File

@ -779,6 +779,8 @@ protected:
void o72_actorOps();
void o72_verbOps();
void o72_arrayOps();
void o72_talkActor();
void o72_talkEgo();
void o72_dimArray();
void o72_dim2dimArray();
void o72_traceStatus();

View File

@ -174,9 +174,9 @@ void ScummEngine_v100he::setupOpcodes() {
OPCODE(o100_roomOps),
OPCODE(o6_printActor),
OPCODE(o6_printEgo),
OPCODE(o6_talkActor),
OPCODE(o72_talkActor),
/* 6C */
OPCODE(o6_talkEgo),
OPCODE(o72_talkEgo),
OPCODE(o6_invalid),
OPCODE(o60_seekFilePos),
OPCODE(o6_setBoxFlags),

View File

@ -276,8 +276,8 @@ void ScummEngine_v72he::setupOpcodes() {
/* B8 */
OPCODE(o6_printActor),
OPCODE(o6_printEgo),
OPCODE(o6_talkActor),
OPCODE(o6_talkEgo),
OPCODE(o72_talkActor),
OPCODE(o72_talkEgo),
/* BC */
OPCODE(o72_dimArray),
OPCODE(o6_stopObjectCode),
@ -1457,6 +1457,24 @@ void ScummEngine_v72he::o72_arrayOps() {
}
}
void ScummEngine_v72he::o72_talkActor() {
Actor *a;
_actorToPrintStrFor = pop();
a = derefActorSafe(_actorToPrintStrFor, "o72_talkActor");
_string[0].loadDefault();
_string[0].color = a->_talkColor;
actorTalk(_scriptPointer);
_scriptPointer += resStrLen(_scriptPointer) + 1;
}
void ScummEngine_v72he::o72_talkEgo() {
push(VAR(VAR_EGO));
o6_talkActor();
}
void ScummEngine_v72he::o72_dimArray() {
int data;
int type = fetchScriptByte();
@ -2039,6 +2057,7 @@ void ScummEngine_v72he::o72_setWindowCaption() {
}
void ScummEngine_v72he::decodeParseString(int m, int n) {
Actor *a;
int i, colors, size;
int args[31];
byte name[1024];
@ -2106,8 +2125,11 @@ void ScummEngine_v72he::decodeParseString(int m, int n) {
break;
case 0xFE:
_string[m].loadDefault();
if (n)
if (n) {
_actorToPrintStrFor = pop();
a = derefActorSafe(_actorToPrintStrFor, "decodeParseString");
_string[0].color = a->_talkColor;
}
break;
case 0xFF:
_string[m].saveDefault();

View File

@ -273,8 +273,8 @@ void ScummEngine_v80he::setupOpcodes() {
/* B8 */
OPCODE(o6_printActor),
OPCODE(o6_printEgo),
OPCODE(o6_talkActor),
OPCODE(o6_talkEgo),
OPCODE(o72_talkActor),
OPCODE(o72_talkEgo),
/* BC */
OPCODE(o72_dimArray),
OPCODE(o6_stopObjectCode),

View File

@ -273,8 +273,8 @@ void ScummEngine_v90he::setupOpcodes() {
/* B8 */
OPCODE(o6_printActor),
OPCODE(o6_printEgo),
OPCODE(o6_talkActor),
OPCODE(o6_talkEgo),
OPCODE(o72_talkActor),
OPCODE(o72_talkEgo),
/* BC */
OPCODE(o72_dimArray),
OPCODE(o6_stopObjectCode),