o90_setSpriteInfo so 91
svn-id: r16866
This commit is contained in:
parent
44c6bbe438
commit
26b11cb444
3 changed files with 42 additions and 1 deletions
|
@ -935,6 +935,8 @@ protected:
|
||||||
void spriteInfoSet_flags23_26(int spriteId, int value);
|
void spriteInfoSet_flags23_26(int spriteId, int value);
|
||||||
void spriteInfoSet_flag31(int spriteId, int value);
|
void spriteInfoSet_flag31(int spriteId, int value);
|
||||||
void spriteInfoSet_field_78_64(int spriteId, int value);
|
void spriteInfoSet_field_78_64(int spriteId, int value);
|
||||||
|
void spriteInfoSet_classFlags_1(int spriteId, int value1, int value2);
|
||||||
|
void spriteInfoSet_classFlags_2(int spriteId);
|
||||||
|
|
||||||
void spritesAllocTables(int numSprites, int numGroups, int numMaxSprites);
|
void spritesAllocTables(int numSprites, int numGroups, int numMaxSprites);
|
||||||
void spritesResetTables(bool refreshScreen);
|
void spritesResetTables(bool refreshScreen);
|
||||||
|
|
|
@ -954,6 +954,7 @@ void ScummEngine_v90he::o90_setSpriteInfo() {
|
||||||
int args[16];
|
int args[16];
|
||||||
int spriteId, tmp[2];
|
int spriteId, tmp[2];
|
||||||
static int storedFields[2];
|
static int storedFields[2];
|
||||||
|
int n;
|
||||||
|
|
||||||
byte subOp = fetchScriptByte();
|
byte subOp = fetchScriptByte();
|
||||||
subOp -= 34;
|
subOp -= 34;
|
||||||
|
@ -1210,7 +1211,27 @@ void ScummEngine_v90he::o90_setSpriteInfo() {
|
||||||
spriteInfoSet_flags23_26(spriteId, args[0]);
|
spriteInfoSet_flags23_26(spriteId, args[0]);
|
||||||
break;
|
break;
|
||||||
case 91:
|
case 91:
|
||||||
getStackList(args, ARRAYSIZE(args));
|
n = getStackList(args, ARRAYSIZE(args));
|
||||||
|
if (_curSpriteId != 0 && _curMaxSpriteId != 0 && n != 0) {
|
||||||
|
int *p = &args[n - 1];
|
||||||
|
do {
|
||||||
|
int code = *p;
|
||||||
|
if (code == 0) {
|
||||||
|
for (int i = _curSpriteId; i <= _curMaxSpriteId; ++i) {
|
||||||
|
spriteInfoSet_classFlags_2(i);
|
||||||
|
}
|
||||||
|
} else if (code & 0x80) {
|
||||||
|
for (int i = _curSpriteId; i <= _curMaxSpriteId; ++i) {
|
||||||
|
spriteInfoSet_classFlags_1(i, code & 0x7F, 1);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int i = _curSpriteId; i <= _curMaxSpriteId; ++i) {
|
||||||
|
spriteInfoSet_classFlags_1(i, code & 0x7F, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
--p;
|
||||||
|
} while (--n);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 105: // HE 99+
|
case 105: // HE 99+
|
||||||
pop();
|
pop();
|
||||||
|
|
|
@ -485,6 +485,24 @@ void ScummEngine_v90he::spriteInfoSet_field_78_64(int spriteId, int value) {
|
||||||
_spriteTable[spriteId].field_64 = value;
|
_spriteTable[spriteId].field_64 = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ScummEngine_v90he::spriteInfoSet_classFlags_1(int spriteId, int classId, int toggle) {
|
||||||
|
checkRange(_varNumSprites, 1, spriteId, "Invalid sprite %d");
|
||||||
|
checkRange(32, 1, classId, "class %d out of range in statement");
|
||||||
|
|
||||||
|
// XXX
|
||||||
|
if (toggle) {
|
||||||
|
_spriteTable[spriteId].flags |= 1 << (classId - 1);
|
||||||
|
} else {
|
||||||
|
_spriteTable[spriteId].flags &= 1 << (classId - 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScummEngine_v90he::spriteInfoSet_classFlags_2(int spriteId) {
|
||||||
|
checkRange(_varNumSprites, 1, spriteId, "Invalid sprite %d");
|
||||||
|
|
||||||
|
_spriteTable[spriteId].class_flags = 0;
|
||||||
|
}
|
||||||
|
|
||||||
void ScummEngine_v90he::spriteInfoSet_case183(int spriteId) {
|
void ScummEngine_v90he::spriteInfoSet_case183(int spriteId) {
|
||||||
checkRange(_varNumSprites, 1, spriteId, "Invalid sprite %d");
|
checkRange(_varNumSprites, 1, spriteId, "Invalid sprite %d");
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue