
By default, you won't able to see SFX through water surface cause we arent testing water against depth buffer. If you didnt change anything on RenderWater() in World3D.cpp, you can just replace that function with the one below to fix it.
ATTENTION:
There is no guarantee that those source changes work 100% on your server files and i will NOT provide any support on how to add those. You are responsible on your own to add the given code properly according to the guides posted!
Without the source changes of the corresponding Features, those Features will NOT work for you!
Open your ..\_Common\World3D.cpp
Look for the following function: CWorld::RenderWater() If you haven't ever changed something in this function, replace it entirely with this one:
void CWorld::RenderWater() {
if(FALSE == m_bViewWater)
return;
DWORD originalZWrite, originalZEnable;//Store original states to restore them later
m_pd3dDevice->GetRenderState(D3DRS_ZWRITEENABLE, &originalZWrite);
m_pd3dDevice->GetRenderState(D3DRS_ZENABLE, &originalZEnable);
m_pd3dDevice->SetRenderState(D3DRS_ZWRITEENABLE, FALSE);// Tell that shit to not write to z buffer for water surfaces
int x, z, i, j;
// int px,pz;
WorldPosToLand(m_pCamera->m_vPos, x, z);
for(i = z - m_nVisibilityLand; i <= z + m_nVisibilityLand; i++) {
for(j = x - m_nVisibilityLand; j <= x + m_nVisibilityLand; j++) {
int nOffset = i * m_nLandWidth + j;
if(LandInWorld((int)j, (int)i) && m_apLand[nOffset]) {
CLandscape* pLS = m_apLand[nOffset];
LPWATERHEIGHT pWH = pLS->GetWaterHeight(x, z);
D3DXVECTOR3 kPos = g_pPlayer->GetPos();
int nHeightDiff = (int)kPos.y - (int)pWH->byWaterHeight;
if((int)(128 * MPU) > nHeightDiff) {
m_pd3dDevice->SetRenderState(D3DRS_LIGHTING, m_bViewLight);
m_apLand[nOffset]->RenderWater(m_pd3dDevice);
}
}
}
}
//Restore the originl states we backupped above
m_pd3dDevice->SetRenderState(D3DRS_ZWRITEENABLE, originalZWrite);
m_pd3dDevice->SetRenderState(D3DRS_ZENABLE, originalZEnable);
m_pd3dDevice->SetRenderState(D3DRS_LIGHTING, m_bViewLight);
}
Additionally, open your ..\_Common\lod.cpp
Look for the following function: CLandscape::RenderWater( LPDIRECT3DDEVICE9 pd3dDevice )
Scroll down until you find this:
if( m_nCloudVertexNum )
{
Ensure to place the following BELOW it:
//Credits for this part of the fix go to Kotori <3
m_pd3dDevice->SetRenderState( D3DRS_ZWRITEENABLE, TRUE );
m_pd3dDevice->SetRenderState( D3DRS_ZENABLE, TRUE );
That's it! Your Neuz should now display SFX when you look through water! Make sure to compile your Neuz and try it - enjoy!
Last updated