       (if choices
         (if (map? choices)
           (if (:req choices)
-            (show-select state (or player side) card ability priority)
+            (show-select state (or player side) card ability {:priority priority})
             (let [n ((:number choices) state side card targets)]
               (prompt! state (or player side) card prompt {:number n} (dissoc ability :choices))))
           (let [cs (if-not (fn? choices)


(defn prompt!
  ([state side card msg choices ability] (prompt! state side card msg choices ability nil))
  ([state side card msg choices ability priority]
    (show-prompt state side card msg choices #(resolve-ability state side ability card [%]) priority)))

(defn optional-ability [state side card msg ability targets]
  (show-prompt state side card msg ["Yes" "No"] #(if (= % "Yes")


(defn show-prompt
  ([state side card msg choices f] (show-prompt state side card msg choices f nil))
  ([state side card msg choices f {:keys [priority prompt-type] :as args}]
   (let [prompt (if (string? msg) msg (msg state side card nil))]
     (when (or (:number choices) (#{:credit :counter} choices) (> (count choices) 0))
       (swap! state update-in [side :prompt]
              (if priority
                #(cons {:msg prompt :choices choices :effect f :card card :prompt-type prompt-type} (vec %))
                #(conj (vec %) {:msg prompt :choices choices :effect f :card card :prompt-type prompt-type})))))))

(defn resolve-psi [state side card psi bet]
  (swap! state assoc-in [:psi side] bet)
