 
 (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)))
+  ([state side card msg choices ability {:keys [priority prompt-type] :as args}]
+    (show-prompt state side card msg choices #(resolve-ability state side ability card [%]) args)))
 
 (defn optional-ability [state side card msg ability targets]
   (show-prompt state side card msg ["Yes" "No"] #(if (= % "Yes")

                    (if-let [m (get-in ability [:choices :max])]
                      (str "Select up to " m " targets for " (:title card))
                      (str "Select a target for " (:title card))))
                  ["Done"] (fn [choice] (resolve-select state side)) priority))))

(defn resolve-ability [state side {:keys [counter-cost advance-counter-cost cost effect msg req once
                                          once-key optional prompt choices end-turn player psi trace


(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)
