So I finished it.
Reverse engineered Half-Life water effect for software rendering. Phew...
Each 0.1 second new ripple spawned. It's applied right when engine unpacks texture palette, however it's not needed for Quake, as Quake has shared palette.
The most interesting thing is that it's not generates into texture but it makes an signed index buffer, which is then used to select pixel from original texture.
Two buffers are used, for current state and previous. Animation algorithm is a magic: it takes pixel from old buffer, pixels on left and right side, and pixel above. It's sum divided by two, which controls the size of the ripple, and then it's subtracted by current pixel from current buffer.
Quake 2 water texture is 2 times lesser than Half-Life water, so it looks less impressive but should be easily portable back to Xash3D.