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.

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