SCUMM HE: Resolved couple of TODOs in Moonbase FOW code

This commit is contained in:
Eugene Sandulenko 2016-05-10 11:55:49 +02:00
parent 200882277a
commit fc198503c8
3 changed files with 21 additions and 2 deletions

View File

@ -138,7 +138,7 @@ bool Moonbase::setFOWImage(int image) {
return false;
}
int nStates = _vm->_wiz->getWizImageStates(0); //_fowImage); // TODO
int nStates = _vm->_wiz->getWizImageStates(_fowImage);
if (nStates > FOW_ANIM_FRAME_COUNT) {
releaseFOWResources();
@ -349,7 +349,7 @@ void Moonbase::setFOWInfo(int fowInfoArray, int downDim, int acrossDim, int view
void Moonbase::renderFOWState(uint8 *destSurface, int dstPitch, int dstType, int dstw, int dsth, int x, int y, int srcw, int srch, int state, int flags) {
int spotx, spoty;
//getWizImageSpot(_fowImage, state, &spotx, &spoty); // TODO
_vm->_wiz->getWizStateSpot(_fowImage, state, &spotx, &spoty);
Common::Rect r(_fowClipX1, _fowClipY1, _fowClipX2, _fowClipY2);
_vm->_wiz->drawWizImageEx(destSurface, _fowImage, 0, dstPitch, dstType, dstw, dsth, x - spotx, y - spoty, srcw, srch, state, &r, flags, 0, 0, 16, 0, 0);

View File

@ -2744,6 +2744,11 @@ int Wiz::getWizImageData(int resNum, int state, int type) {
int Wiz::getWizImageStates(int resNum) {
const uint8 *dataPtr = _vm->getResourceAddress(rtImage, resNum);
assert(dataPtr);
return getWizImageStates(dataPtr);
}
int Wiz::getWizImageStates(const uint8 *dataPtr) {
if (READ_BE_UINT32(dataPtr) == MKTAG('M','U','L','T')) {
const byte *offs, *wrap;
@ -2761,6 +2766,18 @@ int Wiz::getWizImageStates(int resNum) {
}
}
void Wiz::getWizStateSpot(byte *data, int state, int *x, int *y) {
byte *spot = _vm->findWrappedBlock(MKTAG('S','P','O','T'), data, state, 0);
if (!spot) {
*x = *y = 0;
return;
}
*x = READ_LE_UINT32(spot + 0x0);
*y = READ_LE_UINT32(spot + 0x4);
}
int Wiz::isWizPixelNonTransparent(int resNum, int state, int x, int y, int flags) {
int ret = 0;
uint8 *data = _vm->getResourceAddress(rtImage, resNum);

View File

@ -221,6 +221,8 @@ public:
void getWizImageDim(int resNum, int state, int32 &w, int32 &h);
int getWizImageStates(int resnum);
int getWizImageStates(const uint8 *ptr);
void getWizStateSpot(byte *data, int state, int *x, int *y);
int isWizPixelNonTransparent(int resnum, int state, int x, int y, int flags);
uint16 getWizPixelColor(int resnum, int state, int x, int y);
int getWizImageData(int resNum, int state, int type);