bool SliceAnimations::open(const Common::String &name) { Common::File file; if (!file.open(_vm->getResourceStream(name), name)) return false; _timestamp = file.readUint32LE(); _pageSize = file.readUint32LE(); _pageCount = file.readUint32LE(); _paletteCount = file.readUint32LE(); if (_timestamp != 0x3457b6f6) // Timestamp: Wed, 29 Oct 1997 22:21:42 GMT return false; _palettes.resize(_paletteCount); for (uint32 i = 0; i != _paletteCount; ++i) { for (uint32 j = 0; j != 256; ++j) { uint8 color_r = file.readByte(); uint8 color_g = file.readByte(); uint8 color_b = file.readByte(); _palettes[i].color[j].r = color_r; _palettes[i].color[j].g = color_g; _palettes[i].color[j].b = color_b; uint16 rgb555 = ((uint16)color_r << 10) | ((uint16)color_g << 5) | (uint16)color_b; _palettes[i].color555[j] = rgb555; } } uint32 animationCount = file.readUint32LE(); _animations.resize(animationCount); for (uint32 i = 0; i != animationCount; ++i) { _animations[i].frameCount = file.readUint32LE(); _animations[i].frameSize = file.readUint32LE(); _animations[i].fps = file.readFloatLE(); _animations[i].positionChange.x = file.readFloatLE(); _animations[i].positionChange.y = file.readFloatLE(); _animations[i].positionChange.z = file.readFloatLE(); _animations[i].facingChange = file.readFloatLE(); _animations[i].offset = file.readUint32LE(); } _pages.resize(_pageCount); for (uint32 i = 0; i != _pageCount; ++i) _pages[i]._data = nullptr; return true; }