More getSpriteInfo functions

svn-id: r16836
This commit is contained in:
Travis Howell
2005-02-21 00:25:30 +00:00
parent 70982f556e
commit 4f2cd36bd9
3 changed files with 57 additions and 13 deletions
+2
View File
@@ -895,6 +895,8 @@ protected:
int spriteInfoGet_field_78(int spriteNun);
int spriteInfoGet_field_80(int spriteNun);
void getSpriteImageDim(int spriteNum, int32 &w, int32 &h);
void spriteInfoGet_tx_ty(int spriteNum, int32 &tx, int32 &ty);
void spriteInfoGet_field_2C_30(int spriteNum, int32 &field_2C, int32 &field_30);
void spriteInfoSet_field_14(int spriteNum, int value);
void spriteInfoSet_field_7C(int spriteNum, int value);
+33 -11
View File
@@ -699,23 +699,33 @@ void ScummEngine_v90he::o90_getDistanceBetweenPoints() {
void ScummEngine_v90he::o90_getSpriteInfo() {
int args[16];
int eax, esi;
int32 w, h;
int32 a, b;
byte subOp = fetchScriptByte();
subOp -= 30;
debug(1,"o90_getSpriteInfo stub (%d)", subOp);
switch (subOp) {
case 0:
pop();
break;
eax = pop();
if (eax) {
spriteInfoGet_tx_ty(eax, a, b);
push(a);
} else {
push(0);
}
case 1:
pop();
break;
eax = pop();
if (eax) {
spriteInfoGet_tx_ty(eax, a, b);
push(b);
} else {
push(0);
}
case 2:
eax = pop();
if (eax) {
getSpriteImageDim(eax, w, h);
push(w);
getSpriteImageDim(eax, a, b);
push(a);
} else {
push(0);
}
@@ -723,17 +733,29 @@ void ScummEngine_v90he::o90_getSpriteInfo() {
case 3:
eax = pop();
if (eax) {
getSpriteImageDim(eax, w, h);
push(h);
getSpriteImageDim(eax, a, b);
push(b);
} else {
push(0);
}
break;
case 4:
pop();
eax = pop();
if (eax) {
spriteInfoGet_field_2C_30(eax, a, b);
push(a);
} else {
push(0);
}
break;
case 5:
pop();
eax = pop();
if (eax) {
spriteInfoGet_field_2C_30(eax, a, b);
push(b);
} else {
push(0);
}
break;
case 6:
eax = pop();
+22 -2
View File
@@ -110,13 +110,19 @@ int ScummEngine_v90he::spriteInfoGet_field_18(int spriteNum) {
int ScummEngine_v90he::spriteInfoGet_grp_tx(int spriteNum) {
checkRange(_numSprites, 1, spriteNum, "spriteInfoGet_grp_tx: Invalid sprite %d");
return _spriteTable[spriteNum].tx;
if (_spriteTable[spriteNum].group_num)
return _spriteTable[spriteNum].tx + _spriteGroups[spriteNum].tx;
else
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;
if (_spriteTable[spriteNum].group_num)
return _spriteTable[spriteNum].ty + _spriteGroups[spriteNum].ty;
else
return _spriteTable[spriteNum].ty;
}
int ScummEngine_v90he::spriteInfoGet_field_44(int spriteNum) {
@@ -161,6 +167,20 @@ void ScummEngine_v90he::getSpriteImageDim(int spriteNum, int32 &w, int32 &h) {
getWizImageDim(_spriteTable[spriteNum].res_id, _spriteTable[spriteNum].res_state, w, h);
}
void ScummEngine_v90he::spriteInfoGet_tx_ty(int spriteNum, int32 &tx, int32 &ty) {
checkRange(_numSprites, 1, spriteNum, "spriteInfoGet_tx_ty: Invalid sprite %d");
tx = _spriteTable[spriteNum].tx;
ty = _spriteTable[spriteNum].ty;
}
void ScummEngine_v90he::spriteInfoGet_field_2C_30(int spriteNum, int32 &field_2C, int32 &field_30) {
checkRange(_numSprites, 1, spriteNum, "spriteInfoGet_field_2C_30: Invalid sprite %d");
field_2C = _spriteTable[spriteNum].field_2C;
field_30 = _spriteTable[spriteNum].field_30;
}
//
// spriteInfoSet functions
//