mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-08 19:00:57 +00:00
WIP for o90_spriteInfoSet. Regression fix.
svn-id: r16840
This commit is contained in:
parent
7a6b7c2a1c
commit
97688df92d
@ -902,12 +902,23 @@ protected:
|
||||
void spriteInfoSet_field_7C(int spriteId, int value);
|
||||
void spriteInfoSet_field_80(int spriteId, int value);
|
||||
void spriteInfoSet_case183(int spriteId);
|
||||
void spriteInfoSet_resState(int spriteNum, int value);
|
||||
void spriteInfoSet_tx_ty(int spriteNum, int value1, int value2);
|
||||
void spriteInfoSet_groupNum(int spriteNum, int value);
|
||||
void spriteInfoSet_field_2C_30(int spriteNum, int value1, int value2);
|
||||
void spriteInfoSet_field_54(int spriteNum, int value);
|
||||
void spriteInfoSet_field_44(int spriteNum, int value1, int value2);
|
||||
void spriteInfoSet_field_18(int spriteNum, int value);
|
||||
void spriteInfoSet_Inc_tx_ty(int spriteNum, int value1, int value2);
|
||||
void spriteInfoSet_zoom(int spriteNum, int value);
|
||||
|
||||
void spritesAllocTables(int numSprites, int numGroups, int numImgSprites);
|
||||
void spritesResetTables(bool refreshScreen);
|
||||
void spriteGroupCheck(int sprGrpId);
|
||||
void spriteMarkIfInGroup(int sprGrpId, uint32 flags);
|
||||
|
||||
void spriteInfoSet_addImageToList(int spriteNum, int imageNum, int *spriteIdptr);
|
||||
|
||||
/* HE version 90 script opcodes */
|
||||
void o90_dup();
|
||||
void o90_min();
|
||||
|
@ -940,21 +940,53 @@ void ScummEngine_v90he::o90_setSpriteInfo() {
|
||||
pop();
|
||||
break;
|
||||
case 3:
|
||||
pop();
|
||||
args[0] = pop();
|
||||
if (_curSpriteId > _curMaxSpriteId)
|
||||
break;
|
||||
spriteId = _curSpriteId;
|
||||
if (!spriteId)
|
||||
spriteId++;
|
||||
|
||||
for (; spriteId <= _curMaxSpriteId; spriteId++)
|
||||
spriteInfoSet_groupNum(spriteId, args[0]);
|
||||
break;
|
||||
case 8:
|
||||
pop();
|
||||
pop();
|
||||
break;
|
||||
case 9:
|
||||
pop();
|
||||
args[0] = pop();
|
||||
if (_curSpriteId > _curMaxSpriteId)
|
||||
break;
|
||||
spriteId = _curSpriteId;
|
||||
if (!spriteId)
|
||||
spriteId++;
|
||||
|
||||
for (; spriteId <= _curMaxSpriteId; spriteId++)
|
||||
spriteInfoSet_field_18(spriteId, args[0]);
|
||||
break;
|
||||
case 10:
|
||||
pop();
|
||||
pop();
|
||||
args[1] = pop();
|
||||
args[0] = pop();
|
||||
if (_curSpriteId > _curMaxSpriteId)
|
||||
break;
|
||||
spriteId = _curSpriteId;
|
||||
if (!spriteId)
|
||||
spriteId++;
|
||||
|
||||
for (; spriteId <= _curMaxSpriteId; spriteId++)
|
||||
spriteInfoSet_Inc_tx_ty(spriteId, args[0], args[1]);
|
||||
break;
|
||||
case 18:
|
||||
pop();
|
||||
args[0] = pop();
|
||||
if (_curSpriteId > _curMaxSpriteId)
|
||||
break;
|
||||
spriteId = _curSpriteId;
|
||||
if (!spriteId)
|
||||
spriteId++;
|
||||
|
||||
for (; spriteId <= _curMaxSpriteId; spriteId++)
|
||||
spriteInfoSet_resState(spriteId, args[0]);
|
||||
break;
|
||||
case 19:
|
||||
pop();
|
||||
@ -983,18 +1015,42 @@ void ScummEngine_v90he::o90_setSpriteInfo() {
|
||||
spriteInfoSet_field_7C(spriteId, args[0]);
|
||||
break;
|
||||
case 29:
|
||||
pop();
|
||||
args[0] = pop();
|
||||
if (_curSpriteId > _curMaxSpriteId)
|
||||
break;
|
||||
spriteId = _curSpriteId;
|
||||
if (!spriteId)
|
||||
spriteId++;
|
||||
|
||||
for (; spriteId <= _curMaxSpriteId; spriteId++)
|
||||
spriteInfoSet_addImageToList(spriteId, 1, &args[0]);
|
||||
break;
|
||||
case 31:
|
||||
pop();
|
||||
pop();
|
||||
args[1] = pop();
|
||||
args[0] = pop();
|
||||
if (_curSpriteId > _curMaxSpriteId)
|
||||
break;
|
||||
spriteId = _curSpriteId;
|
||||
if (!spriteId)
|
||||
spriteId++;
|
||||
|
||||
for (; spriteId <= _curMaxSpriteId; spriteId++)
|
||||
spriteInfoSet_tx_ty(spriteId, args[0], args[1]);
|
||||
break;
|
||||
case 34:
|
||||
pop();
|
||||
break;
|
||||
case 43:
|
||||
pop();
|
||||
pop();
|
||||
args[1] = pop();
|
||||
args[0] = pop();
|
||||
if (_curSpriteId > _curMaxSpriteId)
|
||||
break;
|
||||
spriteId = _curSpriteId;
|
||||
if (!spriteId)
|
||||
spriteId++;
|
||||
|
||||
for (; spriteId <= _curMaxSpriteId; spriteId++)
|
||||
spriteInfoSet_field_2C_30(spriteId, args[0], args[1]);
|
||||
break;
|
||||
case 48:
|
||||
pop();
|
||||
@ -1011,13 +1067,29 @@ void ScummEngine_v90he::o90_setSpriteInfo() {
|
||||
spriteInfoSet_field_14(spriteId, args[0]);
|
||||
break;
|
||||
case 58: // HE 99+
|
||||
pop();
|
||||
args[0] = pop();
|
||||
if (_curSpriteId > _curMaxSpriteId)
|
||||
break;
|
||||
spriteId = _curSpriteId;
|
||||
if (!spriteId)
|
||||
spriteId++;
|
||||
|
||||
for (; spriteId <= _curMaxSpriteId; spriteId++)
|
||||
spriteInfoSet_zoom(spriteId, args[0]);
|
||||
break;
|
||||
case 63: // HE 98+
|
||||
pop();
|
||||
break;
|
||||
case 64:
|
||||
pop();
|
||||
args[0] = pop();
|
||||
if (_curSpriteId > _curMaxSpriteId)
|
||||
break;
|
||||
spriteId = _curSpriteId;
|
||||
if (!spriteId)
|
||||
spriteId++;
|
||||
|
||||
for (; spriteId <= _curMaxSpriteId; spriteId++)
|
||||
spriteInfoSet_field_54(spriteId, args[0]);
|
||||
break;
|
||||
case 90:
|
||||
pop();
|
||||
@ -1043,11 +1115,18 @@ void ScummEngine_v90he::o90_setSpriteInfo() {
|
||||
case 124:
|
||||
break;
|
||||
case 164:
|
||||
pop();
|
||||
pop();
|
||||
args[1] = pop();
|
||||
args[0] = pop();
|
||||
if (_curSpriteId > _curMaxSpriteId)
|
||||
break;
|
||||
spriteId = _curSpriteId;
|
||||
if (!spriteId)
|
||||
spriteId++;
|
||||
|
||||
for (; spriteId <= _curMaxSpriteId; spriteId++)
|
||||
spriteInfoSet_field_44(spriteId, args[0], args[1]);
|
||||
break;
|
||||
case 183:
|
||||
args[0] = pop();
|
||||
if (_curSpriteId > _curMaxSpriteId)
|
||||
break;
|
||||
spriteId = _curSpriteId;
|
||||
|
@ -208,9 +208,97 @@ void ScummEngine_v90he::spriteInfoSet_field_80(int spriteId, int value) {
|
||||
_spriteTable[spriteId].field_80 = value;
|
||||
}
|
||||
|
||||
void ScummEngine_v90he::spriteInfoSet_case183(int spriteId) {
|
||||
checkRange(_varNumSprites, 1, spriteId, "Invalid sprite %d");
|
||||
void ScummEngine_v90he::spriteInfoSet_resState(int spriteNum, int value) {
|
||||
checkRange(_varNumSprites, 1, spriteNum, "Invalid sprite %d");
|
||||
|
||||
if (_spriteTable[spriteNum].res_id) {
|
||||
int state;
|
||||
|
||||
state = MAX(value, _spriteTable[spriteNum].res_wiz_states - 1);
|
||||
if (state < 0)
|
||||
state = 0;
|
||||
|
||||
if (_spriteTable[spriteNum].res_state != state) {
|
||||
_spriteTable[spriteNum].res_state = state;
|
||||
_spriteTable[spriteNum].flags |= kSF01 | kSF02;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ScummEngine_v90he::spriteInfoSet_tx_ty(int spriteNum, int value1, int value2) {
|
||||
checkRange(_varNumSprites, 1, spriteNum, "Invalid sprite %d");
|
||||
|
||||
if (_spriteTable[spriteNum].tx != value1 || _spriteTable[spriteNum].ty != value2) {
|
||||
_spriteTable[spriteNum].tx = value1;
|
||||
_spriteTable[spriteNum].ty = value2;
|
||||
_spriteTable[spriteNum].flags |= kSF01 | kSF02;
|
||||
}
|
||||
}
|
||||
|
||||
void ScummEngine_v90he::spriteInfoSet_groupNum(int spriteNum, int value) {
|
||||
checkRange(_varNumSprites, 1, spriteNum, "Invalid sprite %d");
|
||||
checkRange(_varNumSpriteGroups, 1, value, "Invalid sprite group%d");
|
||||
|
||||
_spriteTable[spriteNum].group_num = value;
|
||||
}
|
||||
|
||||
void ScummEngine_v90he::spriteInfoSet_field_2C_30(int spriteNum, int value1, int value2) {
|
||||
checkRange(_varNumSprites, 1, spriteNum, "Invalid sprite %d");
|
||||
|
||||
_spriteTable[spriteNum].field_2C = value1;
|
||||
_spriteTable[spriteNum].field_30 = value2;
|
||||
}
|
||||
|
||||
void ScummEngine_v90he::spriteInfoSet_field_54(int spriteNum, int value) {
|
||||
checkRange(_varNumSprites, 1, spriteNum, "Invalid sprite %d");
|
||||
|
||||
_spriteTable[spriteNum].field_54 = value;
|
||||
if (_spriteTable[spriteNum].res_id)
|
||||
_spriteTable[spriteNum].flags |= kSF01 | kSF02;
|
||||
}
|
||||
|
||||
void ScummEngine_v90he::spriteInfoSet_field_44(int spriteNum, int value1, int value2) {
|
||||
checkRange(_varNumSprites, 1, spriteNum, "Invalid sprite %d");
|
||||
|
||||
_spriteTable[spriteNum].field_44 = value2;
|
||||
}
|
||||
|
||||
void ScummEngine_v90he::spriteInfoSet_field_18(int spriteNum, int value) {
|
||||
checkRange(_varNumSprites, 1, spriteNum, "Invalid sprite %d");
|
||||
|
||||
_spriteTable[spriteNum].field_18 = value;
|
||||
}
|
||||
|
||||
void ScummEngine_v90he::spriteInfoSet_Inc_tx_ty(int spriteNum, int value1, int value2) {
|
||||
checkRange(_varNumSprites, 1, spriteNum, "Invalid sprite %d");
|
||||
|
||||
_spriteTable[spriteNum].tx += value1;
|
||||
_spriteTable[spriteNum].ty += value2;
|
||||
|
||||
if (_spriteTable[spriteNum].tx || _spriteTable[spriteNum].ty)
|
||||
_spriteTable[spriteNum].flags |= kSF01 | kSF02;
|
||||
}
|
||||
|
||||
void ScummEngine_v90he::spriteInfoSet_zoom(int spriteNum, int value) {
|
||||
checkRange(_varNumSprites, 1, spriteNum, "Invalid sprite %d");
|
||||
|
||||
_spriteTable[spriteNum].flags |= kSFZoomed;
|
||||
|
||||
if (_spriteTable[spriteNum].zoom != value) {
|
||||
_spriteTable[spriteNum].zoom = value;
|
||||
|
||||
if (_spriteTable[spriteNum].res_id)
|
||||
_spriteTable[spriteNum].flags |= kSF01 | kSF02;
|
||||
}
|
||||
}
|
||||
|
||||
void ScummEngine_v90he::spriteInfoSet_case183(int spriteNum) {
|
||||
checkRange(_varNumSprites, 1, spriteNum, "Invalid sprite %d");
|
||||
|
||||
// TODO
|
||||
}
|
||||
|
||||
void ScummEngine_v90he::spriteInfoSet_addImageToList(int spriteNum, int imageNum, int *spriteIdptr) {
|
||||
// TODO
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user