int16 ScriptFunctions::sfGetPictureWidth(int16 argc, int16 *argv) { int16 width = 0; PictureResource *flex = _vm->_res->getPicture(argv[0]); if (flex) { width = flex->getPicture()->w; _vm->_res->freeResource(flex); } return width; }
int16 ScriptFunctions::sfGetPictureHeight(int16 argc, int16 *argv) { int16 height = 0; PictureResource *flex = _vm->_res->getPicture(argv[0]); if (flex) { height = flex->getPicture()->h; _vm->_res->freeResource(flex); } return height; }
int16 ScriptFunctions::sfLoadMouseCursor(int16 argc, int16 *argv) { PictureResource *flex = _vm->_res->getPicture(argv[2]); if (flex) { Graphics::Surface *surf = flex->getPicture(); CursorMan.replaceCursor(surf->pixels, surf->w, surf->h, argv[1], argv[0], 0); _vm->_res->freeResource(flex); } return 0; }
uint16 Screen::placeSprite(uint16 channelIndex, uint16 flexIndex, int16 x, int16 y) { debug(2, "placeSprite(%d, %04X, %d, %d)\n", channelIndex, flexIndex, x, y); if (channelIndex < 1 || channelIndex >= 100) return 0; channelIndex--; PictureResource *flex = _vm->_res->getPicture(flexIndex); if (flex) { Graphics::Surface *surf = flex->getPicture(); int16 state = 1; int16 x1, y1, x2, y2; x1 = x; y1 = y; x2 = x + surf->w + 1; y2 = y + surf->h + 1; if (_ground == 0) state |= 2; if (_clip != 0) state |= 4; if (_exclude != 0) state |= 8; _channels[channelIndex].state = state; _channels[channelIndex].type = 1; _channels[channelIndex].index = flexIndex; _channels[channelIndex].x = x; _channels[channelIndex].y = y; if (_channelsUsedCount <= channelIndex) _channelsUsedCount = channelIndex + 1; _vm->_res->freeResource(flex); } else { _channels[channelIndex].type = 0; _channels[channelIndex].state = 0; } return channelIndex + 1; }
uint16 Screen::drawFlex(uint16 flexIndex, int16 x, int16 y, int16 flipX, int16 flipY, int16 mask, const ClipInfo &clipInfo) { if (flexIndex == 0) return 0; PictureResource *flex = _vm->_res->getPicture(flexIndex); Graphics::Surface *sourceSurface = flex->getPicture(); drawSurface(sourceSurface, x, y, flipX, flipY, mask, clipInfo); // Palette is set in showPage if (flex->hasPalette() && !_paletteLock && _needPalette) { byte *flexPalette = flex->getPalette(); _oldPaletteColorCount = _paletteColorCount; _paletteColorCount = flex->getPaletteColorCount(); memcpy(_newPalette, _palette, _oldPaletteColorCount * 3); memcpy(_palette, flexPalette, _paletteColorCount * 3); _needPalette = false; } _vm->_res->freeResource(flex); return 0; }