This is an improved version of my previous water caustics, caching values to improve performance and allow for somewhat realtime motion on scratch and actual realtime motion in turbowarp.
Works by layering sine-wave octaves on top of each other to build a simplified model of water refraction and caches the offsets in a list to avoid recomputing them per-frame