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_flag31(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 spritesResetTables(bool refreshScreen);
|
||||
|
|
|
@ -954,6 +954,7 @@ void ScummEngine_v90he::o90_setSpriteInfo() {
|
|||
int args[16];
|
||||
int spriteId, tmp[2];
|
||||
static int storedFields[2];
|
||||
int n;
|
||||
|
||||
byte subOp = fetchScriptByte();
|
||||
subOp -= 34;
|
||||
|
@ -1210,7 +1211,27 @@ void ScummEngine_v90he::o90_setSpriteInfo() {
|
|||
spriteInfoSet_flags23_26(spriteId, args[0]);
|
||||
break;
|
||||
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;
|
||||
case 105: // HE 99+
|
||||
pop();
|
||||
|
|
|
@ -485,6 +485,24 @@ void ScummEngine_v90he::spriteInfoSet_field_78_64(int spriteId, int 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) {
|
||||
checkRange(_varNumSprites, 1, spriteId, "Invalid sprite %d");
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue