Quote:
Originally Posted by Xeylou
Shadow fix, kurz und knapp^^
VersionCommon.h -> Neuz, World, Database -> #define __EPVP_FIX_SHADOW
_Interface -> WndOption.cpp
Look for:
Code:
case WIDC_SHADOW_HIGH:
g_Option.m_nShadow = 0;
CreateShadowMap( m_pApp->m_pd3dDevice, g_Neuz.m_d3dpp.BackBufferFormat );
break;
case WIDC_SHADOW_MID:
g_Option.m_nShadow = 1;
CreateShadowMap( m_pApp->m_pd3dDevice, g_Neuz.m_d3dpp.BackBufferFormat );
break;
case WIDC_SHADOW_LOW:
g_Option.m_nShadow = 2;
break;
Change to:
Code:
#ifdef __EPVP_FIX_SHADOW
case WIDC_SHADOW_HIGH:
g_Option.m_nShadow = 2;
CreateShadowMap( m_pApp->m_pd3dDevice, g_Neuz.m_d3dpp.BackBufferFormat );
break;
case WIDC_SHADOW_MID:
g_Option.m_nShadow = 2;
CreateShadowMap( m_pApp->m_pd3dDevice, g_Neuz.m_d3dpp.BackBufferFormat );
break;
case WIDC_SHADOW_LOW:
g_Option.m_nShadow = 2;
break;
#else
case WIDC_SHADOW_HIGH:
g_Option.m_nShadow = 0;
CreateShadowMap( m_pApp->m_pd3dDevice, g_Neuz.m_d3dpp.BackBufferFormat );
break;
case WIDC_SHADOW_MID:
g_Option.m_nShadow = 1;
CreateShadowMap( m_pApp->m_pd3dDevice, g_Neuz.m_d3dpp.BackBufferFormat );
break;
case WIDC_SHADOW_LOW:
g_Option.m_nShadow = 2;
break;
#endif
|
Dein "Fix" deaktiviert einfach nur das ändern der Shadow Option. Was das ganze auch noch schlimmer macht ist, dass man ihn so nichtmal zu 100% deaktiviert sondern nur wenn man es per Optionen ändern will.
Hier ein möglicher fix:
oder:
Code:
int nMem = m_pd3dDevice->GetAvailableTextureMem();
zu
Code:
UINT nMem = m_pd3dDevice->GetAvailableTextureMem();
Grund für den crash ist nämlich, dass nMem overflowt, da m_pd3dDevice->GetAvailableTextureMem() einen unsigned integer zurückgibt der über MAX_INT geht wodurch nMem negativ wird. Dadurch kommt er in dieses if rein.
Code:
if( nMem <= (1024 * 1024 * 64) )
{
g_Option.m_nShadow = 2;
MessageBox( GetSafeHwnd(), m_strArray.GetAt(16), m_strArray.GetAt(14), MB_OK );
}
Da es Position 16 in m_strArray nicht gibt, crasht er halt.