diff --git a/src/client/creature.cpp b/src/client/creature.cpp index e0740521..68a97d90 100644 --- a/src/client/creature.cpp +++ b/src/client/creature.cpp @@ -200,29 +200,24 @@ void Creature::drawOutfit(const Rect& destRect, bool resize) else exactSize = g_things.rawGetThingType(m_outfit.getAuxId(), m_outfit.getCategory())->getExactSize(); + int frameSize; + if(!resize) + frameSize = std::max(exactSize * 0.75f, 2 * Otc::TILE_PIXELS * 0.75f); + else if(!(frameSize = exactSize)) + return; + if(g_graphics.canUseFBO()) { const FrameBufferPtr& outfitBuffer = g_framebuffers.getTemporaryFrameBuffer(); - outfitBuffer->resize(Size(exactSize, exactSize)); + outfitBuffer->resize(Size(frameSize, frameSize)); outfitBuffer->bind(); g_painter->setAlphaWriting(true); g_painter->clear(Color::alpha); - internalDrawOutfit(Point(exactSize - Otc::TILE_PIXELS, exactSize - Otc::TILE_PIXELS) + getDisplacement(), 1, false, true, Otc::South); + internalDrawOutfit(Point(frameSize - Otc::TILE_PIXELS, frameSize - Otc::TILE_PIXELS) + getDisplacement(), 1, false, true, Otc::South); outfitBuffer->release(); - - Rect srcRect; - if(resize) - srcRect.resize(exactSize, exactSize); - else - srcRect.resize(exactSize*0.75f, exactSize*0.75f); - srcRect.moveBottomRight(Point(exactSize - 1, exactSize - 1)); - outfitBuffer->draw(destRect, srcRect); + outfitBuffer->draw(destRect, Rect(0,0,frameSize,frameSize)); } else { - float scaleFactor; - if(resize) - scaleFactor = destRect.width() / (float)exactSize; - else - scaleFactor = destRect.width() / (float)(exactSize*0.75f); - Point dest = destRect.bottomRight() - (Point(exactSize - Otc::TILE_PIXELS, exactSize - Otc::TILE_PIXELS) - getDisplacement()) * scaleFactor; + float scaleFactor = destRect.width() / (float)frameSize; + Point dest = destRect.bottomRight() - (Point(Otc::TILE_PIXELS,Otc::TILE_PIXELS) - getDisplacement()) * scaleFactor; internalDrawOutfit(dest, scaleFactor, false, true, Otc::South); } }