;; Scanlines effect - VHS-style horizontal line shifting
(require-primitives "core")

(define-effect scanlines
  :params (
    (amplitude :type int :default 10 :range [0 100])
    (frequency :type int :default 10 :range [1 100])
    (randomness :type float :default 0.5 :range [0 1])
  )
  (map-rows frame
    (lambda (y row)
      (let* ((sine-shift (* amplitude (sin (/ (* y 6.28) (max 1 frequency)))))
             (rand-shift (core:rand-range (- amplitude) amplitude))
             (shift (floor (lerp sine-shift rand-shift randomness))))
        (roll row shift 0)))))
