I got it working! Water simulation for the NES! It updates 10 times per second, which is surprisingly good for the first attempt. There might be room for optimizations with lookup tables or such, but for now it's just the Python prototype rewritten in 6502 ASM.
The simulation is done with an asynchronous cellular automaton. Simply put, each cell just propagates water to nearby cells according to a couple of pretty obvious rules. The retro game Boulder Dash is a famous example of a simulation done in the same fashion, so this isn't any super new tech exactly. But still neat that it works.
Now if I could just control the mermaid and splash some water around. Then we would be inching closer to the game territory.

