 `screen` map.
 
     (update! screen :renderer (stage))"
-  [{:keys [update-fn!] :as screen} & args]
-  (update-fn! assoc args))
+  [screen & args]
+  (assert (some? (:update-fn! screen)) "The first argument in update! must be
+the screen map.")
+  (assert (even? (count args)) "You need to give update! your screen followed by
+pairs of values, such as
+(update! screen :renderer (stage) :camera (orthographic)).")
+  ((:update-fn! screen) assoc args))
 
 (defn run!
   "Runs a function defined in another screen. You may optionally pass a series


    (set-screen! my-game main-screen text-screen)"
  [^Game game-object & screen-objects]
  (let [run-fn! (fn [k & args]
                  (doseq [screen screen-objects]
                    (apply (get screen k) args)))]

        (println (:distance screen)) ; the end distance between fingers
        entities))"
  [n & options]
  (let [s (format "Unexpected value in (defscreen %s). You need to give it
keywords and functions in pairs."
                  (str n))]
    (assert (even? (count options)) s)
    (assert (= 0 (count (remove keyword? (keys (apply hash-map options))))) s))
  `(let [fn-syms# (->> (for [[k# v#] ~(apply hash-map options)]
                         [k# (intern *ns* (symbol (str '~n "-" (name k#))) v#)])
                       flatten
