- IShaderSource *shdrsrc = m_gamedef->getShaderSource();
-
- // Create new texture name from original
- std::ostringstream os(std::ios::binary);
- os<<tsrc->getTextureName(tile.texture_id);
- os<<"^[verticalframe:"<<(int)tile.animation_frame_count<<":"<<frame;
- // Set the texture
- buf->getMaterial().setTexture(0, tsrc->getTexture(os.str()));
- if (enable_shaders){
- buf->getMaterial().setTexture(2, tsrc->getTexture("disable_img.png"));
- buf->getMaterial().MaterialType = shdrsrc->getShaderInfo(tile.shader_id).material;
- if (enable_bumpmapping || enable_parallax_occlusion){
- if (tsrc->isKnownSourceImage("override_normal.png")){
- buf->getMaterial().setTexture(1, tsrc->getTexture("override_normal.png"));
- buf->getMaterial().setTexture(2, tsrc->getTexture("enable_img.png"));
- } else {
- std::string fname_base,fname_normal;
- fname_base = tsrc->getTextureName(tile.texture_id);
- unsigned pos;
- pos = fname_base.find(".");
- fname_normal = fname_base.substr (0, pos);
- fname_normal += "_normal.png";
- if (tsrc->isKnownSourceImage(fname_normal)){
- os.str("");
- os<<fname_normal<<"^[verticalframe:"<<(int)tile.animation_frame_count<<":"<<frame;
- buf->getMaterial().setTexture(1, tsrc->getTexture(os.str()));
- buf->getMaterial().setTexture(2, tsrc->getTexture("enable_img.png"));
- }
- }
+
+ FrameSpec animation_frame = tile.frames.find(frame)->second;
+ buf->getMaterial().setTexture(0, animation_frame.texture);
+ if (m_enable_shaders) {
+ if (animation_frame.normal_texture) {
+ buf->getMaterial().setTexture(1, animation_frame.normal_texture);
+ buf->getMaterial().setTexture(2, tsrc->getTexture("enable_img.png"));
+ } else {
+ buf->getMaterial().setTexture(2, tsrc->getTexture("disable_img.png"));