@@ -2180,51 +2180,53 @@ void W3DModelDraw::adjustAnimation(const ModelConditionInfo* prevState, Real pre
21802180
21812181 const W3DAnimationInfo& animInfo = m_curState->m_animations [m_whichAnimInCurState];
21822182
2183- HAnimClass* animHandle = animInfo.getAnimHandle (); // note that this now returns an ADDREFED handle, which must be released by the caller!
2184- if (m_renderObject && animHandle)
2183+ if (m_renderObject)
21852184 {
2186- Int startFrame = 0 ;
2187- if (m_curState->m_mode == RenderObjClass::ANIM_MODE_ONCE_BACKWARDS ||
2188- m_curState->m_mode == RenderObjClass::ANIM_MODE_LOOP_BACKWARDS )
2185+ HAnimClass* animHandle = animInfo.getAnimHandle (); // note that this now returns an ADDREFED handle, which must be released by the caller!
2186+ if (animHandle)
21892187 {
2190- startFrame = animHandle->Get_Num_Frames ()-1 ;
2191- }
2188+ Int startFrame = 0 ;
2189+ if (m_curState->m_mode == RenderObjClass::ANIM_MODE_ONCE_BACKWARDS ||
2190+ m_curState->m_mode == RenderObjClass::ANIM_MODE_LOOP_BACKWARDS )
2191+ {
2192+ startFrame = animHandle->Get_Num_Frames ()-1 ;
2193+ }
21922194
2193- if (testFlagBit (m_curState->m_flags , RANDOMIZE_START_FRAME ))
2194- {
2195- startFrame = GameClientRandomValue (0 , animHandle->Get_Num_Frames ()-1 );
2196- }
2197- else if (testFlagBit (m_curState->m_flags , START_FRAME_FIRST ))
2198- {
2199- startFrame = 0 ;
2200- }
2201- else if (testFlagBit (m_curState->m_flags , START_FRAME_LAST ))
2202- {
2203- startFrame = animHandle->Get_Num_Frames ()-1 ;
2204- }
2205- // order is important here: MAINTAIN_FRAME_ACROSS_STATES is overridden by the other bits, above.
2206- else if (isAnyMaintainFrameFlagSet (m_curState->m_flags ) &&
2207- prevState &&
2208- prevState != m_curState &&
2209- isAnyMaintainFrameFlagSet (prevState->m_flags ) &&
2210- isCommonMaintainFrameFlagSet (m_curState->m_flags , prevState->m_flags ) &&
2211- prevAnimFraction >= 0.0 )
2212- {
2213- startFrame = REAL_TO_INT (prevAnimFraction * animHandle->Get_Num_Frames ()-1 );
2214- }
2195+ if (testFlagBit (m_curState->m_flags , RANDOMIZE_START_FRAME ))
2196+ {
2197+ startFrame = GameClientRandomValue (0 , animHandle->Get_Num_Frames ()-1 );
2198+ }
2199+ else if (testFlagBit (m_curState->m_flags , START_FRAME_FIRST ))
2200+ {
2201+ startFrame = 0 ;
2202+ }
2203+ else if (testFlagBit (m_curState->m_flags , START_FRAME_LAST ))
2204+ {
2205+ startFrame = animHandle->Get_Num_Frames ()-1 ;
2206+ }
2207+ // order is important here: MAINTAIN_FRAME_ACROSS_STATES is overridden by the other bits, above.
2208+ else if (isAnyMaintainFrameFlagSet (m_curState->m_flags ) &&
2209+ prevState &&
2210+ prevState != m_curState &&
2211+ isAnyMaintainFrameFlagSet (prevState->m_flags ) &&
2212+ isCommonMaintainFrameFlagSet (m_curState->m_flags , prevState->m_flags ) &&
2213+ prevAnimFraction >= 0.0 )
2214+ {
2215+ startFrame = REAL_TO_INT (prevAnimFraction * animHandle->Get_Num_Frames ()-1 );
2216+ }
22152217
2216- m_renderObject->Set_Animation (animHandle, startFrame, m_curState->m_mode );
2217- REF_PTR_RELEASE (animHandle);
2218- animHandle = nullptr ;
2218+ m_renderObject->Set_Animation (animHandle, startFrame, m_curState->m_mode );
2219+ REF_PTR_RELEASE (animHandle);
2220+ animHandle = nullptr ;
22192221
2220- if (m_renderObject->Class_ID () == RenderObjClass::CLASSID_HLOD )
2221- {
2222- HLodClass *hlod = (HLodClass*)m_renderObject;
2223- Real factor = GameClientRandomValueReal ( m_curState->m_animMinSpeedFactor , m_curState->m_animMaxSpeedFactor );
2224- hlod->Set_Animation_Frame_Rate_Multiplier ( factor );
2222+ if (m_renderObject->Class_ID () == RenderObjClass::CLASSID_HLOD )
2223+ {
2224+ HLodClass *hlod = (HLodClass*)m_renderObject;
2225+ Real factor = GameClientRandomValueReal ( m_curState->m_animMinSpeedFactor , m_curState->m_animMaxSpeedFactor );
2226+ hlod->Set_Animation_Frame_Rate_Multiplier ( factor );
2227+ }
22252228 }
22262229 }
2227-
22282230 }
22292231 else
22302232 {
0 commit comments