The background itself seems to be moving too, so all of it might be generated inside the shader. But important question is, how much do you know about shaders? That affects how much needs to be explained, or if you should be pointed to basic shader tutorials to get you familiar with GLSL language used in shaders. But I'll talk about the math that goes into the wave effect for now.
The effect is horizontal, so the sine wave should be made dependent of the pixel y-position, which you'd read from
gl_FragCoord.y. You'd multiply this with some frequency value to set how quickly the left-right waviness runs, and take
sin() of that. Next you'd multiply it by some amplitude value to set how far left or right the wave goes. This all would create a static sine wave, as y-coordinate would (of course) start from zero every step, so you'd bring a timer variable into the shader as a uniform, and increment it in linear fashion on GMS side every step (for example by +1). So the final sine value would be fashioned like
Code:
float wave = sin((gl_FragCoord.y + time) * frequency) * amplitude
which can then be applied to creating whatever effect you need. It might be necessary to mod the value before taking sin(), I don't remember whether shader trig functions can handle degrees beyond 0-360.