aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Gray2003-05-19 04:29:41 +0000
committerJonathan Gray2003-05-19 04:29:41 +0000
commit243bcc74d3f44868d5e0e9805a390efb690d8e73 (patch)
tree652f727772e6318c6020ab6716acbcd0d6d9b6cd
parentf6d745a03b5a913525a19175d0e0117d260f49c8 (diff)
downloadscummvm-rg350-243bcc74d3f44868d5e0e9805a390efb690d8e73.tar.gz
scummvm-rg350-243bcc74d3f44868d5e0e9805a390efb690d8e73.tar.bz2
scummvm-rg350-243bcc74d3f44868d5e0e9805a390efb690d8e73.zip
sync local changes, fix pickOneOf
svn-id: r7668
-rw-r--r--scumm/intern.h2
-rw-r--r--scumm/script_v6.cpp50
2 files changed, 44 insertions, 8 deletions
diff --git a/scumm/intern.h b/scumm/intern.h
index 8dbdb1f8bf..b2c6ae1a34 100644
--- a/scumm/intern.h
+++ b/scumm/intern.h
@@ -326,6 +326,7 @@ protected:
int getStackList(int *args, uint maxnum);
int popRoomAndObj(int *room);
void shuffleArray(int num, int minIdx, int maxIdx);
+ void unknownEA_func(int a, int b, int c, int d, int e);
/* Version 6 script opcodes */
void o6_setBlastObjectWindow();
@@ -494,6 +495,7 @@ protected:
void o6_localizeArray();
void o6_shuffle();
void o6_unknownFA();
+ void o6_unknownEA();
byte VAR_VIDEONAME;
diff --git a/scumm/script_v6.cpp b/scumm/script_v6.cpp
index 9ffcb94a03..9e73e40fd8 100644
--- a/scumm/script_v6.cpp
+++ b/scumm/script_v6.cpp
@@ -334,7 +334,7 @@ void Scumm_v6::setupOpcodes() {
/* E8 */
OPCODE(o6_invalid),
OPCODE(o6_invalid),
- OPCODE(o6_invalid),
+ OPCODE(o6_unknownEA),
OPCODE(o6_invalid),
/* EC */
OPCODE(o6_getActorLayer),
@@ -783,8 +783,9 @@ void Scumm_v6::o6_freezeUnfreeze() {
void Scumm_v6::o6_cursorCommand() {
int a, i;
int args[16];
+ int op = fetchScriptByte();
- switch (fetchScriptByte()) {
+ switch (op) {
case 0x90:
_cursor.state = 1;
verbMouseOver(0);
@@ -816,6 +817,10 @@ void Scumm_v6::o6_cursorCommand() {
_userPut--;
break;
case 0x99:{
+ if (_features & GF_AFTER_HEV7) {
+ warning("cursorCommand 0x99 PC_SetCursorToID(%d) stub", pop());
+ break;
+ }
int room, obj = popRoomAndObj(&room);
setCursorImg(obj, room, 1);
break;
@@ -836,7 +841,7 @@ void Scumm_v6::o6_cursorCommand() {
makeCursorColorTransparent(pop());
break;
default:
- error("o6_cursorCommand: default case");
+ error("o6_cursorCommand: default case %x", op);
}
VAR(VAR_CURSORSTATE) = _cursor.state;
@@ -1353,9 +1358,10 @@ void Scumm_v6::o6_createBoxMatrix() {
}
void Scumm_v6::o6_resourceRoutines() {
- int resid;
+ int resid, op;
+ op = fetchScriptByte();
- switch (fetchScriptByte()) {
+ switch (op) {
case 100: /* load script */
resid = pop();
if (_features & GF_AFTER_V7)
@@ -1453,7 +1459,7 @@ void Scumm_v6::o6_resourceRoutines() {
break;
}
default:
- error("o6_resourceRoutines: default case");
+ error("o6_resourceRoutines: default case %d", op);
}
}
@@ -2769,8 +2775,8 @@ void Scumm_v6::o6_pickOneOf() {
num = getStackList(args, ARRAYSIZE(args));
i = pop();
- if (i < 0 || i >= num)
- error("o6_pickOneOf: out of range");
+ if (i < 0 || i > num)
+ error("o6_pickOneOf: %d out of range (0, %d)", i, num - 1);
push(args[i]);
}
@@ -3012,6 +3018,34 @@ void Scumm_v6::o6_unknownFA() {
_scriptPointer += len + 1;
}
+void Scumm_v6::o6_unknownEA() {
+ int edi, esi, eax;
+ edi = pop();
+ esi = pop();
+
+ if (edi == 0) {
+ eax = esi;
+ esi = edi;
+ edi = eax;
+ }
+
+ eax = fetchScriptByte();
+ switch (eax) {
+ case 197:
+ unknownEA_func(5, esi, edi, fetchScriptWord(), eax);
+ break;
+ case 202:
+ unknownEA_func(3, esi, edi, fetchScriptWord(), eax);
+ break;
+ default:
+ break;
+ }
+}
+
+void Scumm_v6::unknownEA_func(int a, int b, int c, int d, int e) {
+ warning("unknownEA_func(%d, %d, %d, %d, %d) stub\n", a, b, c, d, e);
+}
+
void Scumm_v6::o6_localizeArray() {
warning("stub localizeArray(%d)", pop());
}