size_t CelFile::getFrame(const std::vector<uint8_t>& frame, size_t frameNum, std::vector<Colour>& rawImage) { if(mIsCl2) return cl2Decode(frame, mPal, rawImage); if(mIsTileCel) return decodeTileFrame(frame, mPal, rawImage); return normalDecode(frame, frameNum, mPal, rawImage); }
size_t decodeTileFrame(const std::vector<uint8_t>& frame, const Pal& pal, std::vector<Colour>& rawImage) { if(frame.size() == 1024 /*&& frame_num != 2593*/) // It's a fully opaque raw frame, width 32, from a level tileset decodeRaw32(frame, pal, rawImage); else if(isLessThan(frame)) decodeLessThan(frame, pal, rawImage); else if(isGreaterThan(frame)) decodeGreaterThan(frame, pal, rawImage); else normalDecode(frame, 0, pal, rawImage, true); // pass zero as frameNum because it's only used for width calculation and width of tile frames is always 32 return 32; }