Add missing case for HE 90+
Always clear complete local script vars. svn-id: r15564
This commit is contained in:
parent
bb462f64e0
commit
d42f98d0c4
6 changed files with 44 additions and 23 deletions
|
@ -860,6 +860,7 @@ protected:
|
||||||
virtual void executeOpcode(byte i);
|
virtual void executeOpcode(byte i);
|
||||||
virtual const char *getOpcodeDesc(byte i);
|
virtual const char *getOpcodeDesc(byte i);
|
||||||
|
|
||||||
|
int getWizImageStates(int resnum);
|
||||||
void drawWizComplexPolygon(int resnum, int state, int po_x, int po_y, int arg14, int angle, int zoom, const Common::Rect *r);
|
void drawWizComplexPolygon(int resnum, int state, int po_x, int po_y, int arg14, int angle, int zoom, const Common::Rect *r);
|
||||||
void displayWizComplexImage(const WizParameters *params);
|
void displayWizComplexImage(const WizParameters *params);
|
||||||
void processWizImage(const WizParameters *params);
|
void processWizImage(const WizParameters *params);
|
||||||
|
|
|
@ -126,10 +126,10 @@ void ScummEngine::runObjectScript(int object, int entry, bool freezeResistant, b
|
||||||
void ScummEngine::initializeLocals(int slot, int *vars) {
|
void ScummEngine::initializeLocals(int slot, int *vars) {
|
||||||
int i;
|
int i;
|
||||||
if (!vars) {
|
if (!vars) {
|
||||||
for (i = 0; i < 16; i++)
|
for (i = 0; i < 25; i++)
|
||||||
vm.localvar[slot][i] = 0;
|
vm.localvar[slot][i] = 0;
|
||||||
} else {
|
} else {
|
||||||
for (i = 0; i < 16; i++)
|
for (i = 0; i < 25; i++)
|
||||||
vm.localvar[slot][i] = vars[i];
|
vm.localvar[slot][i] = vars[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -549,7 +549,7 @@ int ScummEngine::readVar(uint var) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_heversion >= 72)
|
if (_heversion >= 72)
|
||||||
checkRange(24, 0, var, "Local variable %d out of range(r)");
|
checkRange(25, 0, var, "Local variable %d out of range(r)");
|
||||||
else
|
else
|
||||||
checkRange(20, 0, var, "Local variable %d out of range(r)");
|
checkRange(20, 0, var, "Local variable %d out of range(r)");
|
||||||
return vm.localvar[_currentScript][var];
|
return vm.localvar[_currentScript][var];
|
||||||
|
@ -628,7 +628,7 @@ void ScummEngine::writeVar(uint var, int value) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_heversion >= 72)
|
if (_heversion >= 72)
|
||||||
checkRange(24, 0, var, "Local variable %d out of range(w)");
|
checkRange(25, 0, var, "Local variable %d out of range(w)");
|
||||||
else
|
else
|
||||||
checkRange(20, 0, var, "Local variable %d out of range(w)");
|
checkRange(20, 0, var, "Local variable %d out of range(w)");
|
||||||
|
|
||||||
|
@ -706,7 +706,7 @@ void ScummEngine::runInventoryScript(int i) {
|
||||||
if (_version <= 2) {
|
if (_version <= 2) {
|
||||||
redrawV2Inventory();
|
redrawV2Inventory();
|
||||||
} else {
|
} else {
|
||||||
int args[16];
|
int args[24];
|
||||||
memset(args, 0, sizeof(args));
|
memset(args, 0, sizeof(args));
|
||||||
args[0] = i;
|
args[0] = i;
|
||||||
if (VAR(VAR_INVENTORY_SCRIPT)) {
|
if (VAR(VAR_INVENTORY_SCRIPT)) {
|
||||||
|
@ -933,7 +933,7 @@ void ScummEngine::doSentence(int verb, int objectA, int objectB) {
|
||||||
|
|
||||||
void ScummEngine::checkAndRunSentenceScript() {
|
void ScummEngine::checkAndRunSentenceScript() {
|
||||||
int i;
|
int i;
|
||||||
int localParamList[16];
|
int localParamList[24];
|
||||||
const ScriptSlot *ss;
|
const ScriptSlot *ss;
|
||||||
int sentenceScript;
|
int sentenceScript;
|
||||||
if (_version <= 2)
|
if (_version <= 2)
|
||||||
|
@ -974,7 +974,7 @@ void ScummEngine::checkAndRunSentenceScript() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScummEngine::runInputScript(int a, int cmd, int mode) {
|
void ScummEngine::runInputScript(int a, int cmd, int mode) {
|
||||||
int args[16];
|
int args[24];
|
||||||
int verbScript;
|
int verbScript;
|
||||||
|
|
||||||
if (_version <= 2) {
|
if (_version <= 2) {
|
||||||
|
|
|
@ -819,7 +819,7 @@ void ScummEngine_v6::o6_jump() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScummEngine_v6::o6_startScript() {
|
void ScummEngine_v6::o6_startScript() {
|
||||||
int args[16];
|
int args[24];
|
||||||
int script, flags;
|
int script, flags;
|
||||||
|
|
||||||
getStackList(args, ARRAYSIZE(args));
|
getStackList(args, ARRAYSIZE(args));
|
||||||
|
@ -857,7 +857,7 @@ void ScummEngine_v6::o6_startScript() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScummEngine_v6::o6_jumpToScript() {
|
void ScummEngine_v6::o6_jumpToScript() {
|
||||||
int args[16];
|
int args[24];
|
||||||
int script, flags;
|
int script, flags;
|
||||||
|
|
||||||
getStackList(args, ARRAYSIZE(args));
|
getStackList(args, ARRAYSIZE(args));
|
||||||
|
@ -868,7 +868,7 @@ void ScummEngine_v6::o6_jumpToScript() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScummEngine_v6::o6_startScriptQuick() {
|
void ScummEngine_v6::o6_startScriptQuick() {
|
||||||
int args[16];
|
int args[24];
|
||||||
int script;
|
int script;
|
||||||
getStackList(args, ARRAYSIZE(args));
|
getStackList(args, ARRAYSIZE(args));
|
||||||
script = pop();
|
script = pop();
|
||||||
|
@ -876,7 +876,7 @@ void ScummEngine_v6::o6_startScriptQuick() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScummEngine_v6::o6_startScriptQuick2() {
|
void ScummEngine_v6::o6_startScriptQuick2() {
|
||||||
int args[16];
|
int args[24];
|
||||||
int script;
|
int script;
|
||||||
getStackList(args, ARRAYSIZE(args));
|
getStackList(args, ARRAYSIZE(args));
|
||||||
script = pop();
|
script = pop();
|
||||||
|
@ -884,7 +884,7 @@ void ScummEngine_v6::o6_startScriptQuick2() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScummEngine_v6::o6_startObject() {
|
void ScummEngine_v6::o6_startObject() {
|
||||||
int args[16];
|
int args[24];
|
||||||
int script, entryp;
|
int script, entryp;
|
||||||
int flags;
|
int flags;
|
||||||
getStackList(args, ARRAYSIZE(args));
|
getStackList(args, ARRAYSIZE(args));
|
||||||
|
@ -895,7 +895,7 @@ void ScummEngine_v6::o6_startObject() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScummEngine_v6::o6_startObjectQuick() {
|
void ScummEngine_v6::o6_startObjectQuick() {
|
||||||
int args[16];
|
int args[24];
|
||||||
int script, entryp;
|
int script, entryp;
|
||||||
getStackList(args, ARRAYSIZE(args));
|
getStackList(args, ARRAYSIZE(args));
|
||||||
entryp = pop();
|
entryp = pop();
|
||||||
|
@ -930,7 +930,7 @@ void ScummEngine_v6::o6_endCutscene() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScummEngine_v6::o6_cutscene() {
|
void ScummEngine_v6::o6_cutscene() {
|
||||||
int args[16];
|
int args[24];
|
||||||
getStackList(args, ARRAYSIZE(args));
|
getStackList(args, ARRAYSIZE(args));
|
||||||
beginCutscene(args);
|
beginCutscene(args);
|
||||||
}
|
}
|
||||||
|
|
|
@ -787,7 +787,7 @@ void ScummEngine_v72he::o72_unknown5A() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScummEngine_v72he::o72_startScript() {
|
void ScummEngine_v72he::o72_startScript() {
|
||||||
int args[16];
|
int args[24];
|
||||||
int script;
|
int script;
|
||||||
byte flags;
|
byte flags;
|
||||||
|
|
||||||
|
@ -798,7 +798,7 @@ void ScummEngine_v72he::o72_startScript() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScummEngine_v72he::o72_startObject() {
|
void ScummEngine_v72he::o72_startObject() {
|
||||||
int args[16];
|
int args[24];
|
||||||
int script, entryp;
|
int script, entryp;
|
||||||
byte flags;
|
byte flags;
|
||||||
|
|
||||||
|
@ -1871,7 +1871,7 @@ void ScummEngine_v72he::o72_unknownCF() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScummEngine_v72he::o72_jumpToScript() {
|
void ScummEngine_v72he::o72_jumpToScript() {
|
||||||
int args[16];
|
int args[24];
|
||||||
int script;
|
int script;
|
||||||
byte flags;
|
byte flags;
|
||||||
|
|
||||||
|
|
|
@ -1019,7 +1019,7 @@ void ScummEngine::polygonStore(int id, bool flag, int vert1x, int vert1y, int ve
|
||||||
wp->bound.bottom = -10000;
|
wp->bound.bottom = -10000;
|
||||||
|
|
||||||
// compute bounding box
|
// compute bounding box
|
||||||
for (int j = 0; j < 5; j++) {
|
for (int j = 0; j < wp->numVerts; j++) {
|
||||||
Common::Rect r(wp->vert[j].x, wp->vert[j].y, wp->vert[j].x + 1, wp->vert[j].y + 1);
|
Common::Rect r(wp->vert[j].x, wp->vert[j].y, wp->vert[j].x + 1, wp->vert[j].y + 1);
|
||||||
wp->bound.extend(r);
|
wp->bound.extend(r);
|
||||||
}
|
}
|
||||||
|
@ -1060,7 +1060,7 @@ bool ScummEngine_v70he::polygonDefined(int id) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ScummEngine_v70he::polygonContains(const WizPolygon &pol, int x, int y) {
|
bool ScummEngine_v70he::polygonContains(const WizPolygon &pol, int x, int y) {
|
||||||
int pi = pol.numVerts - 1;
|
int pi = pol.numVerts;
|
||||||
bool diry = (y < pol.vert[pi].y);
|
bool diry = (y < pol.vert[pi].y);
|
||||||
bool curdir;
|
bool curdir;
|
||||||
bool r = false;
|
bool r = false;
|
||||||
|
|
|
@ -452,7 +452,7 @@ void ScummEngine_v90he::o90_getSegmentAngle() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScummEngine_v90he::o90_startScriptUnk() {
|
void ScummEngine_v90he::o90_startScriptUnk() {
|
||||||
int args[16];
|
int args[24];
|
||||||
int script, cycle;
|
int script, cycle;
|
||||||
byte flags;
|
byte flags;
|
||||||
|
|
||||||
|
@ -464,7 +464,7 @@ void ScummEngine_v90he::o90_startScriptUnk() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScummEngine_v90he::o90_jumpToScriptUnk() {
|
void ScummEngine_v90he::o90_jumpToScriptUnk() {
|
||||||
int args[16];
|
int args[24];
|
||||||
int script, cycle;
|
int script, cycle;
|
||||||
byte flags;
|
byte flags;
|
||||||
|
|
||||||
|
@ -1119,6 +1119,26 @@ void ScummEngine_v90he::o90_unknown28() {
|
||||||
debug(1,"o90_unknown28 stub (%d)", subOp);
|
debug(1,"o90_unknown28 stub (%d)", subOp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ScummEngine_v90he::getWizImageStates(int resnum) {
|
||||||
|
const uint8 *dataPtr = getResourceAddress(rtImage, resnum);
|
||||||
|
assert(dataPtr);
|
||||||
|
if (READ_UINT32(dataPtr) == MKID('MULT')) {
|
||||||
|
const byte *offs, *wrap;
|
||||||
|
|
||||||
|
wrap = findResource(MKID('WRAP'), dataPtr);
|
||||||
|
if (wrap == NULL)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
offs = findResourceData(MKID('OFFS'), wrap);
|
||||||
|
if (offs == NULL)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
return(getResourceDataSize(offs) / 4);
|
||||||
|
} else {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ScummEngine_v90he::o90_unknown29() {
|
void ScummEngine_v90he::o90_unknown29() {
|
||||||
int state, resId;
|
int state, resId;
|
||||||
uint32 w, h;
|
uint32 w, h;
|
||||||
|
@ -1153,8 +1173,8 @@ void ScummEngine_v90he::o90_unknown29() {
|
||||||
push(h);
|
push(h);
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
pop();
|
resId = pop();
|
||||||
push(0);
|
push(getWizImageStates(resId));
|
||||||
break;
|
break;
|
||||||
case 15:
|
case 15:
|
||||||
pop();
|
pop();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue