From ab2e81d004608d40b97e4d6283fadd22a0742dcd Mon Sep 17 00:00:00 2001 From: Alexander Gessler Date: Wed, 18 Sep 2013 14:27:56 +0200 Subject: [PATCH] LWO: take last CLIP with the requested index (CLIPs ordered by ordinal string) --- code/LWOMaterial.cpp | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/code/LWOMaterial.cpp b/code/LWOMaterial.cpp index 0e8c5ecbd..a9ee1e3d7 100644 --- a/code/LWOMaterial.cpp +++ b/code/LWOMaterial.cpp @@ -167,19 +167,21 @@ bool LWOImporter::HandleTextures(aiMaterial* pcMat, const TextureList& in, aiTex // The older LWOB format does not use indirect references to clips. // The file name of a texture is directly specified in the tex chunk. if (mIsLWO2) { - // find the corresponding clip - ClipList::iterator clip = mClips.begin(); + // find the corresponding clip (take the last one if multiple + // share the same index) + ClipList::iterator end = mClips.end(), candidate = end; temp = (*it).mClipIdx; - for (ClipList::iterator end = mClips.end(); clip != end; ++clip) { - if ((*clip).idx == temp) - break; + for (ClipList::iterator clip = mClips.begin(); clip != end; ++clip) { + if ((*clip).idx == temp) { + candidate = clip; + } } - if (mClips.end() == clip) { + if (candidate == end) { DefaultLogger::get()->error("LWO2: Clip index is out of bounds"); temp = 0; - // fixme: appearently some LWO files shipping with Doom3 don't + // fixme: apparently some LWO files shipping with Doom3 don't // have clips at all ... check whether that's true or whether // it's a bug in the loader. @@ -188,16 +190,16 @@ bool LWOImporter::HandleTextures(aiMaterial* pcMat, const TextureList& in, aiTex //continue; } else { - if (Clip::UNSUPPORTED == (*clip).type) { + if (Clip::UNSUPPORTED == (*candidate).type) { DefaultLogger::get()->error("LWO2: Clip type is not supported"); continue; } - AdjustTexturePath((*clip).path); - s.Set((*clip).path); + AdjustTexturePath((*candidate).path); + s.Set((*candidate).path); // Additional image settings int flags = 0; - if ((*clip).negate) { + if ((*candidate).negate) { flags |= aiTextureFlags_Invert; } pcMat->AddProperty(&flags,1,AI_MATKEY_TEXFLAGS(type,cur));