Divide up some code for HE6 and HE7

svn-id: r13136
This commit is contained in:
Travis Howell 2004-03-02 06:19:26 +00:00
parent 5fbc3497c1
commit f80d6a7a26
5 changed files with 143 additions and 96 deletions

View file

@ -344,7 +344,7 @@ void ScummEngine_v6he::setupOpcodes() {
/* EC */
OPCODE(o6_invalid),
OPCODE(o6_invalid),
OPCODE(o6_invalid),
OPCODE(o6_stringLen),
OPCODE(o6_invalid),
/* F0 */
OPCODE(o6_invalid),
@ -1244,6 +1244,56 @@ void ScummEngine_v6he::redimArray(int arrayId, int newX, int newY, int type) {
ah->dim2 = TO_LE_16(newX + 1);
}
void ScummEngine_v6he::o6_stringLen() {
int a, len;
byte *addr;
if (!(_features & GF_WINDOWS)) {
o6_invalid();
return;
}
a = pop();
addr = getStringAddress(a);
if (!addr) {
// FIXME: should be error here
warning("ScummEngine_v6he::o7_stringLen: Reference to zeroed array pointer (%d)", a);
push(0);
return;
}
len = stringLen(addr);
push(len);
}
byte ScummEngine_v6he::stringLen(byte *ptr) {
byte len;
byte c;
if (!ptr) {
//ptr = _someGlobalPtr;
error("ScummEngine_v6he::stringLen(): zero ptr. Undimplemented behaviour");
return 1;
}
len = 0;
c = *ptr++;
if (len == c)
return 1;
do {
len++;
if (c == 0xff) {
ptr += 3;
len += 3;
}
c = *ptr++;
} while (c);
return len+1;
}
void ScummEngine_v6he::o6_readINI() {
int len;
@ -1285,4 +1335,90 @@ void ScummEngine_v6he::o6_unknownF9() {
warning("stub o6_unknownF9(\"%s\")", filename + r);
}
void ScummEngine_v6he::decodeParseString(int m, int n) {
byte b;
int c;
b = fetchScriptByte();
switch (b) {
case 65: // SO_AT
_string[m].ypos = pop();
_string[m].xpos = pop();
_string[m].overhead = false;
break;
case 66: // SO_COLOR
_string[m].color = pop();
break;
case 67: // SO_CLIPPED
_string[m].right = pop();
break;
case 69: // SO_CENTER
_string[m].center = true;
_string[m].overhead = false;
break;
case 71: // SO_LEFT
_string[m].center = false;
_string[m].overhead = false;
break;
case 72: // SO_OVERHEAD
_string[m].overhead = true;
_string[m].no_talk_anim = false;
break;
case 73: // SO_SAY_VOICE
error("decodeParseString: case 73");
break;
case 74: // SO_MUMBLE
_string[m].no_talk_anim = true;
break;
case 75: // SO_TEXTSTRING
_messagePtr = translateTextAndPlaySpeech(_scriptPointer);
_scriptPointer += resStrLen(_scriptPointer)+ 1;
switch (m) {
case 0:
actorTalk();
break;
case 1:
drawString(1);
break;
case 2:
unkMessage1();
break;
case 3:
unkMessage2();
break;
}
return;
case 0xF9:
c = pop();
if (c == 1) {
_string[m].color = pop();
} else {
push(c);
int args[16];
getStackList(args, ARRAYSIZE(args));
}
warning("decodeParseString case 0xF9 stub");
return;
case 0xFE:
setStringVars(m);
if (n)
_actorToPrintStrFor = pop();
return;
case 0xFF:
_string[m].t_xpos = _string[m].xpos;
_string[m].t_ypos = _string[m].ypos;
_string[m].t_center = _string[m].center;
_string[m].t_overhead = _string[m].overhead;
_string[m].t_no_talk_anim = _string[m].no_talk_anim;
_string[m].t_right = _string[m].right;
_string[m].t_color = _string[m].color;
_string[m].t_charset = _string[m].charset;
return;
default:
error("decodeParseString: default case 0x%x", b);
}
}
} // End of namespace Scumm