aboutsummaryrefslogtreecommitdiff
path: root/scumm/script_v72he.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'scumm/script_v72he.cpp')
-rw-r--r--scumm/script_v72he.cpp44
1 files changed, 37 insertions, 7 deletions
diff --git a/scumm/script_v72he.cpp b/scumm/script_v72he.cpp
index 78275dd12a..5650a1d2d2 100644
--- a/scumm/script_v72he.cpp
+++ b/scumm/script_v72he.cpp
@@ -81,7 +81,7 @@ void ScummEngine_v72he::setupOpcodes() {
OPCODE(o6_pop),
OPCODE(o72_compareStackList),
/* 1C */
- OPCODE(o6_invalid),
+ OPCODE(o72_unknown1C),
OPCODE(o6_invalid),
OPCODE(o6_invalid),
OPCODE(o6_invalid),
@@ -171,7 +171,7 @@ void ScummEngine_v72he::setupOpcodes() {
OPCODE(o72_unknown62),
OPCODE(o72_getArrayDimSize),
/* 64 */
- OPCODE(o6_invalid),
+ OPCODE(o72_getNumFreeArrays),
OPCODE(o6_stopObjectCode),
OPCODE(o6_stopObjectCode),
OPCODE(o6_endCutscene),
@@ -334,7 +334,7 @@ void ScummEngine_v72he::setupOpcodes() {
OPCODE(o6_setBoxSet),
OPCODE(o6_invalid),
OPCODE(o6_invalid),
- OPCODE(o6_invalid),
+ OPCODE(o7_unknownEF),
/* E8 */
OPCODE(o6_invalid),
OPCODE(o6_seekFilePos),
@@ -383,7 +383,7 @@ static int arrayDataSizes[] = {0, 1, 4, 8, 8, 16, 32};
ScummEngine_v72he::ArrayHeader *ScummEngine_v72he::defineArray(int array, int type, int dim2start, int dim2end,
int dim1start, int dim1end) {
- debug(1,"defineArray (array %d, dim2start %d, dim2end %d dim1start %d dim1end %d", array, dim2start, dim2end, dim1start, dim1end);
+ debug(5,"defineArray (array %d, dim2start %d, dim2end %d dim1start %d dim1end %d", array, dim2start, dim2end, dim1start, dim1end);
int id;
int size;
@@ -425,7 +425,7 @@ ScummEngine_v72he::ArrayHeader *ScummEngine_v72he::defineArray(int array, int ty
}
int ScummEngine_v72he::readArray(int array, int idx2, int idx1) {
- debug(1, "readArray (array %d, idx2 %d, idx1 %d)", array, idx2, idx1);
+ debug(5, "readArray (array %d, idx2 %d, idx1 %d)", array, idx2, idx1);
if (readVar(array) == 0)
error("readArray: Reference to zeroed array pointer");
@@ -461,7 +461,7 @@ int ScummEngine_v72he::readArray(int array, int idx2, int idx1) {
}
void ScummEngine_v72he::writeArray(int array, int idx2, int idx1, int value) {
- debug(1, "writeArray (array %d, idx2 %d, idx1 %d, value %d)", array, idx2, idx1, value);
+ debug(5, "writeArray (array %d, idx2 %d, idx1 %d, value %d)", array, idx2, idx1, value);
if (readVar(array) == 0)
error("writeArray: Reference to zeroed array pointer");
@@ -529,7 +529,7 @@ void ScummEngine_v72he::o72_addMessageToStack() {
_stringLength = resStrLen(_scriptPointer) + 1;
addMessageToStack(_scriptPointer, _stringBuffer, _stringLength);
- debug(1,"o72_addMessageToStack(\"%s\")", _scriptPointer);
+ debug(0,"o72_addMessageToStack(\"%s\")", _scriptPointer);
_scriptPointer += _stringLength;
}
@@ -562,6 +562,24 @@ void ScummEngine_v72he::o72_compareStackList() {
}
}
+void ScummEngine_v72he::o72_unknown1C() {
+ // For Pajame Sam 2
+ // Maybe HE 7.3?
+ // Incomplete
+ int value = fetchScriptByte();
+ value -= 46;
+
+ if (value == 10) {
+ pop();
+ pop();
+ pop();
+ pop();
+ pop();
+ }
+
+ warning("o72_unknown1C stub (%d)", value);
+}
+
void ScummEngine_v72he::o72_wordArrayWrite() {
int a = pop();
writeArray(fetchScriptWord(), 0, pop(), a);
@@ -736,6 +754,18 @@ void ScummEngine_v72he::o72_getArrayDimSize() {
}
}
+void ScummEngine_v72he::o72_getNumFreeArrays() {
+ byte **addr = _baseArrays;
+ int i, num = 0;
+
+ for (i = 1; i < _numArray; i++) {
+ if (!addr[i])
+ num++;
+ }
+
+ push (num);
+}
+
void ScummEngine_v72he::o72_arrayOps() {
byte subOp = fetchScriptByte();
int array = 0;