Add a few sprite functions.

svn-id: r16823
This commit is contained in:
Travis Howell 2005-02-20 13:07:57 +00:00
parent 6d4eec5ecd
commit e4b51cbdf2
4 changed files with 77 additions and 1 deletions

View file

@ -858,6 +858,7 @@ public:
virtual void scummInit();
protected:
virtual void allocateArrays();
virtual void setupOpcodes();
virtual void executeOpcode(byte i);
virtual const char *getOpcodeDesc(byte i);
@ -870,6 +871,15 @@ protected:
uint8 getWizPixelColor(int restype, int resnum, int state, int x, int y, int flags);
int computeWizHistogram(int resnum, int state, int x, int y, int w, int h);
int spriteInfoGet_flags_1(int spriteNum);
int spriteInfoGet_flags_2(int spriteNum);
int spriteInfoGet_flags_3(int spriteNum);
int spriteInfoGet_flags_4(int spriteNum);
int spriteInfoGet_flags_5(int spriteNum);
int spriteInfoGet_flags_6(int spriteNum);
int spriteInfoGet_flags_7(int spriteNum);
int spriteInfoGet_flags_8(int spriteNum);
/* HE version 90 script opcodes */
void o90_dup();
void o90_min();

View file

@ -637,7 +637,7 @@ protected:
const byte *_resourceLastSearchBuf; // FIXME: need to put it to savefile?
uint32 _resourceLastSearchSize; // FIXME: need to put it to savefile?
void allocateArrays();
virtual void allocateArrays();
void openRoom(int room);
void closeRoom();
void deleteRoomOffsets();

View file

@ -30,4 +30,67 @@
namespace Scumm {
void ScummEngine_v90he::allocateArrays() {
_spriteGroups = (SpriteGroup *)calloc(_numSprites, sizeof(SpriteGroup));
_spriteTable = (SpriteInfo *)calloc(_numSprites, sizeof(SpriteInfo));
ScummEngine::allocateArrays();
}
int ScummEngine_v90he::spriteInfoGet_flags_1(int spriteNum) {
checkRange(_numSprites, 1, spriteNum, "_spriteTableGet_flags_1: Invalid sprite %d");
int val = _spriteTable[spriteNum].flags >> 0xE;
return (val & 1);
}
int ScummEngine_v90he::spriteInfoGet_flags_2(int spriteNum) {
checkRange(_numSprites, 1, spriteNum, "_spriteTableGet_flags_2: Invalid sprite %d");
int val = _spriteTable[spriteNum].flags >> 0xD;
return (val & 1);
}
int ScummEngine_v90he::spriteInfoGet_flags_3(int spriteNum) {
checkRange(_numSprites, 1, spriteNum, "_spriteTableGet_flags_3: Invalid sprite %d");
int val = _spriteTable[spriteNum].flags >> 0xF;
return (val & 1);
}
int ScummEngine_v90he::spriteInfoGet_flags_4(int spriteNum) {
checkRange(_numSprites, 1, spriteNum, "_spriteTableGet_flags_4: Invalid sprite %d");
int val = _spriteTable[spriteNum].flags >> 0xC;
return (val & 1);
}
int ScummEngine_v90he::spriteInfoGet_flags_5(int spriteNum) {
checkRange(_numSprites, 1, spriteNum, "_spriteTableGet_flags_5: Invalid sprite %d");
int val = _spriteTable[spriteNum].flags >> 0x13;
return (val & 1);
}
int ScummEngine_v90he::spriteInfoGet_flags_6(int spriteNum) {
checkRange(_numSprites, 1, spriteNum, "_spriteTableGet_flags_6: Invalid sprite %d");
int val = _spriteTable[spriteNum].flags;
return (val & 0x200000);
}
int ScummEngine_v90he::spriteInfoGet_flags_7(int spriteNum) {
checkRange(_numSprites, 1, spriteNum, "_spriteTableGet_flags_7: Invalid sprite %d");
int val = _spriteTable[spriteNum].flags >> 0x16;
return (val & 1);
}
int ScummEngine_v90he::spriteInfoGet_flags_8(int spriteNum) {
checkRange(_numSprites, 1, spriteNum, "_spriteTableGet_flags_8: Invalid sprite %d");
int val = _spriteTable[spriteNum].flags >> 0x1E;
return (val & 1);
}
} // End of namespace Scumm

View file

@ -81,6 +81,9 @@ struct SpriteGroup {
int field_3C;
};
SpriteInfo *_spriteTable;
SpriteGroup *_spriteGroups;
} // End of namespace Scumm
#endif