aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--scumm/intern.h13
-rw-r--r--scumm/script_v90he.cpp84
-rw-r--r--scumm/sprite_he.cpp72
3 files changed, 157 insertions, 12 deletions
diff --git a/scumm/intern.h b/scumm/intern.h
index f891eaccc0..7d38d4b087 100644
--- a/scumm/intern.h
+++ b/scumm/intern.h
@@ -879,6 +879,19 @@ protected:
int spriteInfoGet_flags_6(int spriteNum);
int spriteInfoGet_flags_7(int spriteNum);
int spriteInfoGet_flags_8(int spriteNum);
+ int spriteInfoGet_resId(int spriteNun);
+ int spriteInfoGet_resState(int spriteNun);
+ int spriteInfoGet_groupNum(int spriteNun);
+ int spriteInfoGet_field_18(int spriteNun);
+ int spriteInfoGet_grp_tx(int spriteNun);
+ int spriteInfoGet_grp_ty(int spriteNun);
+ int spriteInfoGet_field_44(int spriteNun);
+ int spriteInfoGet_field_54(int spriteNun);
+ int spriteInfoGet_wizSize(int spriteNun);
+ int spriteInfoGet_zoom(int spriteNun);
+ int spriteInfoGet_field_78(int spriteNun);
+ int spriteInfoGet_field_80(int spriteNun);
+
void spritesAllocTables(int numSprites, int numGroups, int numImgSprites);
void spritesResetTables(bool refreshScreen);
void spriteGroupCheck(int sprGrpId);
diff --git a/scumm/script_v90he.cpp b/scumm/script_v90he.cpp
index 329b433bed..fb623e0ea5 100644
--- a/scumm/script_v90he.cpp
+++ b/scumm/script_v90he.cpp
@@ -723,16 +723,32 @@ void ScummEngine_v90he::o90_getSpriteInfo() {
pop();
break;
case 6:
- pop();
+ eax = pop();
+ if (eax)
+ push(spriteInfoGet_wizSize(eax));
+ else
+ push(0);
break;
case 7:
- pop();
+ eax = pop();
+ if (eax)
+ push(spriteInfoGet_groupNum(eax));
+ else
+ push(0);
break;
case 8:
- pop();
+ eax = pop();
+ if (eax)
+ push(spriteInfoGet_grp_tx(eax));
+ else
+ push(0);
break;
case 9:
- pop();
+ eax = pop();
+ if (eax)
+ push(spriteInfoGet_grp_ty(eax));
+ else
+ push(0);
break;
case 12:
esi = pop();
@@ -762,7 +778,11 @@ void ScummEngine_v90he::o90_getSpriteInfo() {
}
break;
case 13:
- pop();
+ eax = pop();
+ if (eax)
+ push(spriteInfoGet_field_18(eax));
+ else
+ push(0);
break;
case 15:
if (_heversion == 99) {
@@ -783,13 +803,25 @@ void ScummEngine_v90he::o90_getSpriteInfo() {
}
break;
case 22:
- pop();
+ eax = pop();
+ if (eax)
+ push(spriteInfoGet_resState(eax));
+ else
+ push(0);
break;
case 33:
- pop();
+ eax = pop();
+ if (eax)
+ push(spriteInfoGet_resId(eax));
+ else
+ push(0);
break;
case 38:
- pop();
+ eax = pop();
+ if (eax)
+ push(spriteInfoGet_flags_8(eax));
+ else
+ push(1);
break;
case 52:
eax = pop();
@@ -799,13 +831,25 @@ void ScummEngine_v90he::o90_getSpriteInfo() {
push(0);
break;
case 62:
- pop();
+ eax = pop();
+ if (eax)
+ push(spriteInfoGet_zoom(eax));
+ else
+ push(0);
break;
case 67:
- pop();
+ eax = pop();
+ if (eax)
+ push(spriteInfoGet_field_78(eax));
+ else
+ push(0);
break;
case 68:
- pop();
+ eax = pop();
+ if (eax)
+ push(spriteInfoGet_field_54(eax));
+ else
+ push(0);
break;
case 94:
eax = pop();
@@ -818,9 +862,25 @@ void ScummEngine_v90he::o90_getSpriteInfo() {
getStackList(args, ARRAYSIZE(args));
pop();
break;
- case 168:
+ case 109:
+ // dummy case
pop();
+ push(0);
+ break;
+ case 110:
+ eax = pop();
+ if (eax)
+ push(spriteInfoGet_field_80(eax));
+ else
+ push(0);
+ break;
+ case 168:
pop();
+ eax = pop();
+ if (eax)
+ push(spriteInfoGet_field_44(eax));
+ else
+ push(0);
break;
default:
error("o90_getSpriteInfo: Unknown case %d", subOp);
diff --git a/scumm/sprite_he.cpp b/scumm/sprite_he.cpp
index 72d7433915..6bfffc6be2 100644
--- a/scumm/sprite_he.cpp
+++ b/scumm/sprite_he.cpp
@@ -83,6 +83,78 @@ int ScummEngine_v90he::spriteInfoGet_flags_8(int spriteNum) {
return ((_spriteTable[spriteNum].flags & kSF31) != 0) ? 1 : 0;
}
+int ScummEngine_v90he::spriteInfoGet_resId(int spriteNum) {
+ checkRange(_numSprites, 1, spriteNum, "spriteInfoGet_resId: Invalid sprite %d");
+
+ return _spriteTable[spriteNum].res_id;
+}
+
+int ScummEngine_v90he::spriteInfoGet_resState(int spriteNum) {
+ checkRange(_numSprites, 1, spriteNum, "spriteInfoGet_resState: Invalid sprite %d");
+
+ return _spriteTable[spriteNum].res_state;
+}
+
+int ScummEngine_v90he::spriteInfoGet_groupNum(int spriteNum) {
+ checkRange(_numSprites, 1, spriteNum, "spriteInfoGet_groupNum: Invalid sprite %d");
+
+ return _spriteTable[spriteNum].group_num;
+}
+
+int ScummEngine_v90he::spriteInfoGet_field_18(int spriteNum) {
+ checkRange(_numSprites, 1, spriteNum, "spriteInfoGet_field_18: Invalid sprite %d");
+
+ return _spriteTable[spriteNum].field_18;
+}
+
+int ScummEngine_v90he::spriteInfoGet_grp_tx(int spriteNum) {
+ checkRange(_numSprites, 1, spriteNum, "spriteInfoGet_grp_tx: Invalid sprite %d");
+
+ return _spriteTable[spriteNum].tx;
+}
+
+int ScummEngine_v90he::spriteInfoGet_grp_ty(int spriteNum) {
+ checkRange(_numSprites, 1, spriteNum, "spriteInfoGet_grp_ty: Invalid sprite %d");
+
+ return _spriteTable[spriteNum].ty;
+}
+
+int ScummEngine_v90he::spriteInfoGet_field_44(int spriteNum) {
+ checkRange(_numSprites, 1, spriteNum, "spriteInfoGet_field_44: Invalid sprite %d");
+
+ return _spriteTable[spriteNum].field_44;
+}
+
+int ScummEngine_v90he::spriteInfoGet_field_54(int spriteNum) {
+ checkRange(_numSprites, 1, spriteNum, "spriteInfoGet_field_54: Invalid sprite %d");
+
+ return _spriteTable[spriteNum].field_54;
+}
+
+int ScummEngine_v90he::spriteInfoGet_wizSize(int spriteNum) {
+ checkRange(_numSprites, 1, spriteNum, "spriteInfoGet_wizSize: Invalid sprite %d");
+
+ return _spriteTable[spriteNum].res_wiz_states;
+}
+
+int ScummEngine_v90he::spriteInfoGet_zoom(int spriteNum) {
+ checkRange(_numSprites, 1, spriteNum, "spriteInfoGet_zoom: Invalid sprite %d");
+
+ return _spriteTable[spriteNum].zoom;
+}
+
+int ScummEngine_v90he::spriteInfoGet_field_78(int spriteNum) {
+ checkRange(_numSprites, 1, spriteNum, "spriteInfoGet_field_78: Invalid sprite %d");
+
+ return _spriteTable[spriteNum].field_78;
+}
+
+int ScummEngine_v90he::spriteInfoGet_field_80(int spriteNum) {
+ checkRange(_numSprites, 1, spriteNum, "spriteInfoGet_field_80: Invalid sprite %d");
+
+ return _spriteTable[spriteNum].field_80;
+}
+
void ScummEngine_v90he::spritesAllocTables(int numSprites, int numGroups, int numImgLists) {
_varNumSpriteGroups = numGroups;
_numSpritesToProcess = 0;