   [controller note]
   (let [room (room-for-effects controller)
         fx-info @(:active-effects (:show controller))
-        fx (vec (drop (- (count (:effects fx-info)) room) (:effects fx-info)))
-        fx-meta (vec (drop (- (count (:meta fx-info)) room) (:meta fx-info)))
+        fx (:effects fx-info)
+        fx-meta (:meta fx-info)
+        num-skipped (- (count fx-meta) room @(:effect-offset controller))
+        fx (vec (drop num-skipped (:effects fx-info)))
+        fx-meta (vec (drop num-skipped (:meta fx-info)))
         offset (- 4 room)
         x (quot note 2)
         index (- x offset)

              (aset (:next-top-pads controller) (* 2 x) (top-pad-state :dim :red))
              (when (seq (rest fx))
                (recur (rest fx) (rest fx-meta) (inc x)))))
          (when (pos? num-skipped)
            (aset (get (:next-display controller) 3) (* first-cell 17) (util/ubyte (:left-arrow special-symbols)))))
      (do (write-display-cell controller 2 1 "       No effects")
          (write-display-cell controller 2 2 "are active.")))))

(declare enter-stop-mode)

(defn- update-interface
  "Determine the desired current state of the interface, and send any


    44 ; Left arrow
    (when (pos? (:velocity message))
      (if @(:shift-mode controller)
        ;; Trying to scroll back to older effects
        (let [[offset max-offset room] (find-effect-offset-range controller)
              new-offset (+ offset room)]
          (reset! (:effect-offset controller) (min max-offset new-offset)))

        ;; Trying to scroll left in cue grid
        (let [[x y] @(:origin controller)]
          (when (pos? x)
            (reset! (:origin controller) [(max 0 (- x 8)) y])
            (add-button-held-feedback-overlay controller (:left-arrow control-buttons))))))

    45 ; Right arrow
    (when (pos? (:velocity message))
      (if @(:shift-mode controller)
        ;; Trying to scroll forward to newer effects
        (let [[offset max-offset room] (find-effect-offset-range controller)
              new-offset (- offset room)]
          (reset! (:effect-offset controller) (max 0 new-offset)))

        ;; Trying to scroll right in cue grid
        (let [[x y] @(:origin controller)]
          (when (> (- (controllers/grid-width (:cue-grid (:show controller))) x) 7)
            (reset! (:origin controller) [(+ x 8) y])
            (add-button-held-feedback-overlay controller (:right-arrow control-buttons))))))

    46 ; Up arrow
    (when (pos? (:velocity message))
      (if @(:shift-mode controller)
        ;; Jump back to oldest effect
        (let [[_ max-offset] (find-effect-offset-range controller)]
          (reset! (:effect-offset controller) max-offset))

        ;; Trying to scroll up in cue grid
        (let [[x y] @(:origin controller)]
          (when (> (- (controllers/grid-height (:cue-grid (:show controller))) y) 7)
            (reset! (:origin controller) [x (+ y 8)])
            (add-button-held-feedback-overlay controller (:up-arrow control-buttons))))))

    47 ; Down arrow
    (when (pos? (:velocity message))
      (if @(:shift-mode controller)
        ;; Jump forward to newest effect
        (reset! (:effect-offset controller) 0)

        ;; Trying to scroll down in cue grid
        (let [[x y] @(:origin controller)]
          (when (pos? y)
            (reset! (:origin controller) [x (max 0 (- y 8))])
            (add-button-held-feedback-overlay controller (:down-arrow control-buttons))))))

    59 ; User mode button
    (when (pos? (:velocity message))
