Shouldn't turning off writing into the depth buffer for the decals solve that last problem?