bool CAnimation::loadFrame(CDefFile * file, size_t frame, size_t group) { if (size(group) <= frame) { printError(frame, group, "LoadFrame"); return false; } IImage *image = getImage(frame, group, false); if (image) { image->increaseRef(); return true; } //try to get image from def if (source[group][frame].getType() == JsonNode::DATA_NULL) { if (file) { auto frameList = file->getEntries(); if (vstd::contains(frameList, group) && frameList.at(group) > frame) // frame is present { if (compressed) images[group][frame] = new CompImage(file, frame, group); else images[group][frame] = new SDLImage(file, frame, group); return true; } } // still here? image is missing printError(frame, group, "LoadFrame"); images[group][frame] = new SDLImage("DEFAULT", compressed); } else //load from separate file { std::string filename = source[group][frame].Struct().find("file")->second.String(); IImage * img = getFromExtraDef(filename); if (!img) img = new SDLImage(filename, compressed); images[group][frame] = img; return true; } return false; }