void CClumpModelInfo::DeleteRwObject() { RpClump *pClump = (RpClump*)m_rwObject; if (pClump) { v3 = Get2DEffectAtomic(m_rwObject); if ( v3 ) { v4 = *(_DWORD *)(g2dEffectPluginOffset + *(_DWORD *)(v3 + 24)); if ( v4 ) v5 = *(_DWORD *)v4; else LOBYTE(v5) = 0; pThis->uc2DFxCount -= v5; } RpClumpDestroy(pClump); m_rwObject = 0; RemoveTexDictionaryRef(); size_t animIndex = GetAnimFileIndex(); if (animIndex != -1) { CAnimManager::RemoveAnimBlockRef(animIndex); } if ( HIBYTE(pThis->flags) & 8 ) LOBYTE(v1) = CBaseModelInfo__DeleteCollisionModel(pThis); } }
VOID CModelInfoSA::Request( bool bAndLoad, bool bWaitForLoad, bool bHighPriority ) { DEBUG_TRACE("VOID CModelInfoSA::Request( BOOL bAndLoad, BOOL bWaitForLoad )"); // don't bother loading it if it already is if ( IsLoaded () ) return; if ( m_dwModelID <= 288 && m_dwModelID != 7 && !pGame->GetModelInfo ( 7 )->IsLoaded () ) { // Skin 7 must be loaded in order for other skins to work. No, really. (#4010) pGame->GetModelInfo ( 7 )->Request ( bAndLoad, false ); } // Bikes can sometimes get stuck when loading unless the anim file is handled like what is does here // Don't change the code below unless you can test it (by recreating the problem it solves) if ( IsVehicle () ) { uint uiAnimFileIndex = GetAnimFileIndex (); if ( uiAnimFileIndex != 0xffffffff ) { uint uiAnimId = uiAnimFileIndex + 25575; CModelInfoSA* pAnim = static_cast < CModelInfoSA* > ( pGame->GetModelInfo ( uiAnimId ) ); if ( !pAnim ) LogEvent ( 505, "Model no anim", "", SString ( "%d (%d)", m_dwModelID, uiAnimId ) ); else if ( !pAnim->IsLoaded() ) { OutputDebugLine ( SString ( "[Models] Requesting anim file %d for model %d", uiAnimId, m_dwModelID ) ); pAnim->Sure2Load ( 0x16 ); } } } DWORD dwFlags; if ( bHighPriority ) dwFlags = 0x16; else dwFlags = 6; pGame->GetStreaming()->RequestModel(m_dwModelID, dwFlags); if(bAndLoad) { pGame->GetStreaming()->LoadAllRequestedModels(); if(bWaitForLoad) { Sure2Load ( dwFlags ); } } }
VOID CModelInfoSA::Request( EModelRequestType requestType, const char* szTag ) { DEBUG_TRACE("VOID CModelInfoSA::Request( BOOL bAndLoad, BOOL bWaitForLoad )"); // don't bother loading it if it already is if ( IsLoaded () ) return; if ( m_dwModelID <= 288 && m_dwModelID != 7 && !pGame->GetModelInfo ( 7 )->IsLoaded () ) { // Skin 7 must be loaded in order for other skins to work. No, really. (#4010) pGame->GetModelInfo ( 7 )->Request ( requestType, "Model 7" ); } // Bikes can sometimes get stuck when loading unless the anim file is handled like what is does here // Don't change the code below unless you can test it (by recreating the problem it solves) if ( IsVehicle () ) { uint uiAnimFileIndex = GetAnimFileIndex (); if ( uiAnimFileIndex != 0xffffffff ) { uint uiAnimId = uiAnimFileIndex + 25575; CModelInfoSA* pAnim = static_cast < CModelInfoSA* > ( pGame->GetModelInfo ( uiAnimId ) ); if ( !pAnim ) { if ( uiAnimId != 25714 ) LogEvent ( 505, "Model no anim", "", SString ( "%d (%d)", m_dwModelID, uiAnimId ) ); } else if ( !pAnim->IsLoaded() ) { OutputDebugLine ( SString ( "[Models] Requesting anim file %d for model %d", uiAnimId, m_dwModelID ) ); pAnim->Request ( requestType, szTag ); } } } if ( requestType == BLOCKING ) { pGame->GetStreaming()->RequestModel ( m_dwModelID, 0x16 ); pGame->GetStreaming()->LoadAllRequestedModels ( true, szTag ); if ( !IsLoaded() ) { // Try 3 more times, final time without high priority flag int iCount = 0; while ( iCount++ < 10 && !IsLoaded() ) { bool bOnlyPriorityModels = ( iCount < 3 || iCount & 1 ); pGame->GetStreaming()->LoadAllRequestedModels ( bOnlyPriorityModels, szTag ); } if ( !IsLoaded() ) { AddReportLog ( 6641, SString ( "Blocking load fail: %d (%s)", m_dwModelID, szTag ) ); LogEvent ( 641, "Blocking load fail", "", SString ( "%d (%s)", m_dwModelID, szTag ) ); dassert ( 0 ); } else { AddReportLog ( 6642, SString ( "Blocking load: %d (%s) (Took %d attempts)", m_dwModelID, szTag, iCount ) ); LogEvent ( 642, "Blocking load", "", SString ( "%d (%s) (Took %d attempts)", m_dwModelID, szTag, iCount ) ); } } } else { pGame->GetStreaming()->RequestModel ( m_dwModelID, 0x06 ); } }