Blitz renders surfaces in the order they are created in the object.
So, surface 1 you leave normal, but surface 2 and later you set the vertex alpha flag for the surface. The vertex alpha flag will cause the renderer to test the zbuffer but not write to it. As both surfaces are at the same exact location in space, and always rendered in the same order, there is no z-fighting*. And you can't see through any walls because you render a layer which writes to the zbuffer first.
(*Or at least, I never saw any when I helped someone implement vertex alpha blending in a terrain engine.)
As for multipass rendering, you can do the same thing. Render the first pass with all surfaces set to have zbuffering, but render the second pass with all surfaces set to have vertex alpha enabled.
So, surface 1 you leave normal, but surface 2 and later you set the vertex alpha flag for the surface. The vertex alpha flag will cause the renderer to test the zbuffer but not write to it. As both surfaces are at the same exact location in space, and always rendered in the same order, there is no z-fighting*. And you can't see through any walls because you render a layer which writes to the zbuffer first.
(*Or at least, I never saw any when I helped someone implement vertex alpha blending in a terrain engine.)
As for multipass rendering, you can do the same thing. Render the first pass with all surfaces set to have zbuffering, but render the second pass with all surfaces set to have vertex alpha enabled.