I’m working on a small game called Goblin Dungeon. The environment will be 3D with 2D billboarded sprites, like Paper Mario.
Unlike most tile-based dungeon crawlers, I will have elevation. That means you will be able to take stairs, fall, jump, fly, and of course fall into pits.
To make the level design more interesting, I wanted the player to be able to fall great distances without breaking their knees. Like most games, I choose water for this.
There is hundreds of Water shader online but I’m particularly fond of the one in Wind Waker.
The only issue is that it’s made to be used on a continuous plane. However I generate my world with tiles, which mean that the shader was cut into dozen of little square for each area of water in my game. I had to modify the code so it uses the position of the pixel, in the global world, rather than relative to its own object.
globalposition = (MODEL_MATRIX * vec4(VERTEX, 1.0)).xz;
And use that as the uv. It’s very simple. But it looks pretty cool, isn’t it?