diff --git a/.clj-kondo/config.edn b/.clj-kondo/config.edn index d1be9c79fd..5ee520e29e 100644 --- a/.clj-kondo/config.edn +++ b/.clj-kondo/config.edn @@ -1,5 +1,7 @@ {:linters - {:unresolved-symbol + {:unused-binding {:exclude-defmulti-args true + :exclude-destructured-as true} + :unresolved-symbol {:exclude [(game.macros/req [state side eid card targets target context runner corp run run-server run-ices run-position current-ice corp-reg corp-reg-last runner-reg diff --git a/src/clj/game/cards/assets.clj b/src/clj/game/cards/assets.clj index 5acdaf1d85..3d0fbec10b 100644 --- a/src/clj/game/cards/assets.clj +++ b/src/clj/game/cards/assets.clj @@ -1434,19 +1434,20 @@ {:abilities [ability] :leave-play cleanup :events [{:event :corp-spent-click - :effect (req (let [cid (first target) - ability-idx (:ability-idx (:source-info eid)) + :effect (req (let [[cid value ability-idx] targets bac-cid (get-in @state [:corp :basic-action-card :cid]) - cause (if (keyword? (first target)) - (case (first target) + cause (if (keyword? cid) + (case cid :play-instant [bac-cid 3] :corp-click-install [bac-cid 2] - (first target)) ; in clojure there's: (= [1 2 3] '(1 2 3)) + ; else + [cid ability-idx]) [cid ability-idx]) - clicks-spent (+ (get-in card [:seen-this-turn cause] 0) (second targets))] - (update! state side (assoc-in card [:seen-this-turn cause] clicks-spent)) - (when (>= clicks-spent 3) ; can be >= 3 because :once :per-turn on ability - (resolve-ability state side ability (get-card state card) nil))))} + clicks-spent (+ (get-in card [:seen-this-turn cause] 0) value)] + (let [card (update! state side (assoc-in card [:seen-this-turn cause] clicks-spent))] + ; can be >= 3 because :once :per-turn on ability + (when (>= clicks-spent 3) + (resolve-ability state side ability card nil)))))} {:event :corp-turn-ends :effect cleanup}]})) @@ -2989,13 +2990,12 @@ card nil))}) all-events (fn [state side] (turn-events state side :corp-spent-click)) three-of (fn [cid idx state side] - (= 3 (count (filter #(and (= (first (first %)) cid) + (= 3 (count (filter #(and (= (first %) cid) (= (last %) idx)) (all-events state side)))))] {:events [{:event :corp-spent-click :async true - :effect (req (let [cid (first target) - ability-idx (:ability-idx (:source-info eid))] + :effect (req (let [[cid _value ability-idx] targets] (if (three-of cid ability-idx state side) (continue-ability state side payoff card nil) (effect-completed state side eid))))}]})) diff --git a/src/clj/game/cards/basic.clj b/src/clj/game/cards/basic.clj index fa2a782cc1..45b62547b0 100644 --- a/src/clj/game/cards/basic.clj +++ b/src/clj/game/cards/basic.clj @@ -114,7 +114,7 @@ can-pay (can-pay? state side (make-eid state (assoc eid :additional-costs additional-costs)) target (:title target) additional-costs)] (or (empty? additional-costs) can-pay))))} :effect (req - (let [additional-costs (merge-costs (into [] (get-effects state side :basic-ability-additional-trash-cost target))) + (let [additional-costs (merge-costs (get-effects state side :basic-ability-additional-trash-cost target)) cost-strs (build-cost-string additional-costs) can-pay (can-pay? state side (make-eid state (assoc eid :additional-costs additional-costs)) target (:title target) additional-costs)] (if (empty? additional-costs) @@ -129,8 +129,11 @@ (do (system-msg state side (str "declines to pay the additional cost to trash " (:title target-card))) (effect-completed state side eid)) (wait-for (pay state side (make-eid state - (assoc eid :additional-costs additional-costs :source card :source-type :trash-card)) - nil additional-costs 0) + (assoc eid + :additional-costs additional-costs + :source card + :source-type :trash-card)) + nil additional-costs) (system-msg state side (str (:msg async-result) " as an additional cost to trash " (:title target-card))) (complete-with-result state side eid target-card))))} card nil) diff --git a/src/clj/game/cards/ice.clj b/src/clj/game/cards/ice.clj index acf8b3f0b9..f95bc6eebb 100644 --- a/src/clj/game/cards/ice.clj +++ b/src/clj/game/cards/ice.clj @@ -1649,7 +1649,7 @@ "Trash an installed card")]) :async true :effect (req (if (= target "Pay 2 [Credits]") - (wait-for (pay state side (make-eid state eid) card :credit 2) + (wait-for (pay state side (make-eid state eid) card (->c :credit 2)) (system-msg state side (:msg async-result)) (effect-completed state side eid)) (continue-ability state :runner runner-trash-installed-sub card nil)))}] @@ -1671,7 +1671,7 @@ "Trash an installed card")]) :async true :effect (req (if (= target "Pay 3 [Credits]") - (wait-for (pay state side (make-eid state eid) card :credit 3) + (wait-for (pay state side (make-eid state eid) card (->c :credit 3)) (system-msg state side (:msg async-result)) (effect-completed state side eid)) (continue-ability state :runner runner-trash-installed-sub card nil)))}] diff --git a/src/clj/game/cards/identities.clj b/src/clj/game/cards/identities.clj index 345dde9227..8e5950cafb 100644 --- a/src/clj/game/cards/identities.clj +++ b/src/clj/game/cards/identities.clj @@ -1299,14 +1299,13 @@ :abilities [mm-ability mm-clear] :events [{:event :corp-spent-click :async true - :effect (req (let [cid (first target) - ability-idx (:ability-idx (:source-info eid)) + :effect (req (let [[cid _value ability-idx] targets bac-cid (get-in @state [:corp :basic-action-card :cid]) - cause (if (keyword? (first target)) - (case (first target) + cause (if (keyword? cid) + (case cid :play-instant [bac-cid 3] :corp-click-install [bac-cid 2] - (first target)) ; in clojure there's: (= [1 2 3] '(1 2 3)) + [cid ability-idx]) [cid ability-idx]) prev-actions (get-in card [:special :mm-actions] []) actions (conj prev-actions cause)] diff --git a/src/clj/game/cards/resources.clj b/src/clj/game/cards/resources.clj index 750010936e..28375e1649 100644 --- a/src/clj/game/cards/resources.clj +++ b/src/clj/game/cards/resources.clj @@ -1842,10 +1842,10 @@ ;; and having it trashed (all-cards wont find it) ;; also asset that the first-event? fn actually works right... ;; -nbk, mar '24 - (and (resource? (find-cid (first target) all-cards)) + (and (resource? (find-cid target all-cards)) (first-event? state side :runner-spent-click #(resource? - (find-cid (first (first %)) all-cards)))))) + (find-cid (first %) all-cards)))))) :msg "gain [Click]" :effect (effect (add-counter card :power -1) (gain-clicks 1))}]}) diff --git a/src/clj/game/core/access.clj b/src/clj/game/core/access.clj index fbeeee3a9e..578526d0c0 100644 --- a/src/clj/game/core/access.clj +++ b/src/clj/game/core/access.clj @@ -258,11 +258,13 @@ ;; Pay additiional costs to steal (= target "Pay to steal") - (wait-for (pay state side (make-eid state - (assoc eid :additional-costs cost - :source card - :source-type :runner-steal)) - nil cost {:action :steal-cost}) + (wait-for (pay state side + (make-eid state + (assoc eid :additional-costs cost + :source card + :source-type :runner-steal + :action :steal-cost)) + nil cost) (system-msg state side (str (:msg async-result) " to steal " (:title card) " from " (name-zone :corp (get-zone card)))) diff --git a/src/clj/game/core/actions.clj b/src/clj/game/core/actions.clj index 701e75ee2c..c57f515ccf 100644 --- a/src/clj/game/core/actions.clj +++ b/src/clj/game/core/actions.clj @@ -564,10 +564,11 @@ (let [card (get-card state card) eid (eid-set-defaults eid :source nil :source-type :advance)] (if (can-advance? state side card) - (wait-for (pay state side (make-eid state eid) card + (wait-for (pay state side + (make-eid state (assoc eid :action :corp-advance)) + card (->c :click (if-not no-cost 1 0)) - (->c :credit (if-not no-cost 1 0)) - {:action :corp-advance}) + (->c :credit (if-not no-cost 1 0))) (if-let [payment-str (:msg async-result)] (do (system-msg state side (str (build-spend-msg payment-str "advance") (card-str state card))) (update-advancement-requirement state card) @@ -612,7 +613,10 @@ (string/blank? cost-strs) (resolve-score state side eid card) (not can-pay) (effect-completed state side eid) :else (wait-for (pay state side (make-eid state - (assoc eid :additional-costs cost :source card :source-type :corp-score)) + (assoc eid + :additional-costs cost + :source card + :source-type :corp-score)) nil cost) (let [payment-result async-result] (if (string/blank? (:msg payment-result)) diff --git a/src/clj/game/core/costs.clj b/src/clj/game/core/costs.clj index ebcfc10306..64178e9111 100644 --- a/src/clj/game/core/costs.clj +++ b/src/clj/game/core/costs.clj @@ -32,9 +32,9 @@ [cost state side _ _] (<= 0 (- (get-in @state [side :click]) (value cost)))) (defmethod handler :click - [cost state side eid card actions] - (let [a (keep :action actions)] - (when (not (some #{:steal-cost} a)) + [cost state side eid _card] + (let [a (:action eid)] + (when (not (#{:steal-cost} a)) (swap! state update :click-states (fn [click-states] (vec (take-last 4 (conj click-states (dissoc @state :log :history))))))) (swap! state update-in [:stats side :lose :click] (fnil + 0) (value cost)) @@ -63,7 +63,7 @@ [cost state side _ _] (<= 0 (- (get-in @state [side :click]) (value cost)))) (defmethod handler :lose-click - [cost state side eid card actions] + [cost state side eid card] (swap! state update-in [:stats side :lose :click] (fnil + 0) (value cost)) (deduct state side [:click (value cost)]) (wait-for (trigger-event-sync state side (make-eid state eid) @@ -131,7 +131,7 @@ (or (<= 0 (- (get-in @state [side :credit]) (value cost))) (<= 0 (- (total-available-credits state side eid card) (value cost)))))) (defmethod handler :credit - [cost state side eid card actions] + [cost state side eid card] (let [provider-func #(eligible-pay-credit-cards state side eid card)] (cond (and (pos? (value cost)) @@ -173,7 +173,7 @@ (and (pos? (total-available-credits state side eid card)) (<= (stealth-value cost) (total-available-stealth-credits state side eid card)))) (defmethod handler :x-credits - [cost state side eid card actions] + [cost state side eid card] (continue-ability state side {:async true @@ -216,7 +216,7 @@ [cost state side eid card] (in-hand? (get-card state card))) (defmethod handler :expend - [cost state side eid card actions] + [cost state side eid card] (wait-for (reveal state :corp (make-eid state eid) [card]) (wait-for (trash state :corp (make-eid state eid) (assoc (get-card state card) :seen true)) @@ -233,7 +233,7 @@ [cost state side eid card] (installed? (get-card state card))) (defmethod handler :trash-can - [cost state side eid card actions] + [cost state side eid card] (wait-for (trash state side card {:cause :ability-cost :unpreventable true}) (complete-with-result state side eid {:msg (str "trashes " (:title card)) @@ -248,7 +248,7 @@ [cost state side _eid _card] (<= 0 (- (count (get-in @state [side :scored])) (value cost)))) (defmethod handler :forfeit - [cost state side eid card _actions] + [cost state side eid card] (continue-ability state side {:prompt (str "Choose " (quantify (value cost) "Agenda") " to forfeit") @@ -280,7 +280,7 @@ [_cost state side _eid card] (is-scored? state side (get-card state card))) (defmethod handler :forfeit-self - [_cost state side eid card _actions] + [_cost state side eid card] (wait-for (forfeit state side (make-eid state eid) card {:msg false}) (complete-with-result state side eid @@ -299,7 +299,7 @@ [_ _ _ _ _] true) (defmethod handler :gain-tag - [cost state side eid card actions] + [cost state side eid card] (wait-for (gain-tags state side (value cost)) (complete-with-result state side eid {:msg (str "takes " (quantify (value cost) "tag")) :type :gain-tag @@ -312,7 +312,7 @@ [cost state side eid card] (<= 0 (- (get-in @state [:runner :tag :base] 0) (value cost)))) (defmethod handler :tag - [cost state side eid card actions] + [cost state side eid card] (wait-for (lose-tags state side (value cost)) (complete-with-result state side eid {:msg (str "removes " (quantify (value cost) "tag")) :type :tag @@ -325,7 +325,7 @@ [cost state side eid card] true) (defmethod handler :tag-or-bad-pub - [cost state side eid card actions] + [cost state side eid card] (if-not (<= 0 (- (get-in @state [:runner :tag :base] 0) (value cost))) (wait-for (gain-bad-publicity state side (make-eid state eid) (value cost) nil) (complete-with-result state side eid {:msg (str "gains " (value cost) " bad publicity") @@ -355,7 +355,7 @@ [cost state side eid card] (active? (get-card state card))) (defmethod handler :return-to-hand - [cost state side eid card actions] + [cost state side eid card] (move state side card :hand) (complete-with-result state side eid @@ -372,7 +372,7 @@ [cost state side eid card] (active? (get-card state card))) (defmethod handler :remove-from-game - [cost state side eid card actions] + [cost state side eid card] (move state side card :rfg) (complete-with-result state side eid @@ -390,7 +390,7 @@ [cost state side eid card] (<= 0 (- (count (all-installed-runner-type state :program)) (value cost)))) (defmethod handler :rfg-program - [cost state side eid card actions] + [cost state side eid card] (continue-ability state side {:prompt (str "Choose " (quantify (value cost) "program") @@ -419,7 +419,7 @@ [cost state side eid card] (<= 0 (- (count (filter #(not (same-card? card %)) (all-installed state side))) (value cost)))) (defmethod handler :trash-other-installed - [cost state side eid card actions] + [cost state side eid card] (continue-ability state side {:prompt (str "Choose " (quantify (value cost) "installed card") " to trash") @@ -450,7 +450,7 @@ [cost state side eid card] (<= 0 (- (count (all-installed state side)) (value cost)))) (defmethod handler :trash-installed - [cost state side eid card actions] + [cost state side eid card] (continue-ability state side {:prompt (str "Choose " (quantify (value cost) "installed card") " to trash") @@ -480,7 +480,7 @@ [cost state side eid card] (<= 0 (- (count (all-installed-runner-type state :hardware)) (value cost)))) (defmethod handler :hardware - [cost state side eid card actions] + [cost state side eid card] (continue-ability state side {:prompt (str "Choose " (quantify (value cost) "installed piece") " of hardware to trash") @@ -511,7 +511,7 @@ (not (same-card? card %))) (all-active-installed state :corp))) (value cost)))) (defmethod handler :derez-other-harmonic - [cost state side eid card actions] + [cost state side eid card] (continue-ability state side {:prompt (str "Choose " (value cost) " Harmonic ice to derez") @@ -540,7 +540,7 @@ [cost state side eid card] (<= 0 (- (count (all-installed-runner-type state :program)) (value cost)))) (defmethod handler :program - [cost state side eid card actions] + [cost state side eid card] (continue-ability state side {:prompt (str "Choose " (quantify (value cost) "installed program") " to trash") @@ -567,7 +567,7 @@ [cost state side eid card] (<= 0 (- (count (all-installed-runner-type state :resource)) (value cost)))) (defmethod handler :resource - [cost state side eid card actions] + [cost state side eid card] (continue-ability state side {:prompt (str "Choose " (quantify (value cost) "installed resource") " to trash") @@ -594,7 +594,7 @@ [cost state side eid card] (<= 0 (- (count (filter #(has-subtype? % "Connection") (all-active-installed state :runner))) (value cost)))) (defmethod handler :connection - [cost state side eid card actions] + [cost state side eid card] (continue-ability state side {:prompt (str "Choose " (quantify (value cost) "installed connection resource") " to trash") @@ -624,7 +624,7 @@ [cost state side eid card] (<= 0 (- (count (filter (every-pred installed? rezzed? ice?) (all-installed state :corp))) (value cost)))) (defmethod handler :ice - [cost state side eid card actions] + [cost state side eid card] (continue-ability state side {:prompt (str "Choose " (quantify (value cost) "installed rezzed ice" "") " to trash") @@ -651,7 +651,7 @@ [cost state side eid card] (<= 0 (- (count (get-in @state [side :deck])) (value cost)))) (defmethod handler :trash-from-deck - [cost state side eid card actions] + [cost state side eid card] (wait-for (mill state side side (value cost)) (complete-with-result state side eid @@ -670,7 +670,7 @@ [cost state side eid card] (<= 0 (- (count (get-in @state [side :hand])) (value cost)))) (defmethod handler :trash-from-hand - [cost state side eid card actions] + [cost state side eid card] (let [select-fn #(and ((if (= :corp side) corp? runner?) %) (in-hand? %)) prompt-hand (if (= :corp side) "HQ" "the grip") @@ -703,7 +703,7 @@ [cost state side eid card] (<= 0 (- (count (get-in @state [side :hand])) (value cost)))) (defmethod handler :randomly-trash-from-hand - [cost state side eid card actions] + [cost state side eid card] (wait-for (discard-from-hand state side side (value cost)) (complete-with-result state side eid @@ -720,7 +720,7 @@ (defmethod payable? :trash-entire-hand [cost state side eid card] true) (defmethod handler :trash-entire-hand - [cost state side eid card actions] + [cost state side eid card] (let [cards (get-in @state [side :hand])] (wait-for (trash-cards state side cards {:unpreventable true}) (complete-with-result @@ -742,7 +742,7 @@ [cost state side eid card] (<= 0 (- (count (filter hardware? (get-in @state [:runner :hand]))) (value cost)))) (defmethod handler :trash-hardware-from-hand - [cost state side eid card actions] + [cost state side eid card] (continue-ability state side {:prompt (str "Choose " (quantify (value cost) "piece") " of hardware to trash") @@ -770,7 +770,7 @@ [cost state side eid card] (<= 0 (- (count (filter program? (get-in @state [:runner :hand]))) (value cost)))) (defmethod handler :trash-program-from-hand - [cost state side eid card actions] + [cost state side eid card] (continue-ability state side {:prompt (str "Choose " (quantify (value cost) "program") " to trash") @@ -797,7 +797,7 @@ [cost state side eid card] (<= 0 (- (count (filter resource? (get-in @state [:runner :hand]))) (value cost)))) (defmethod handler :trash-resource-from-hand - [cost state side eid card actions] + [cost state side eid card] (continue-ability state side {:prompt (str "Choose " (quantify (value cost) "resource") " to trash") @@ -823,7 +823,7 @@ [cost state side eid card] (<= (value cost) (count (get-in @state [:runner :hand])))) (defmethod handler :net - [cost state side eid card actions] + [cost state side eid card] (wait-for (damage state side :net (value cost) {:unpreventable true :card card}) (complete-with-result state side eid @@ -839,7 +839,7 @@ [cost state side eid card] (<= (value cost) (count (get-in @state [:runner :hand])))) (defmethod handler :meat - [cost state side eid card actions] + [cost state side eid card] (wait-for (damage state side :meat (value cost) {:unpreventable true :card card}) (complete-with-result state side eid @@ -855,7 +855,7 @@ [cost state side eid card] (<= (value cost) (count (get-in @state [:runner :hand])))) (defmethod handler :brain - [cost state side eid card actions] + [cost state side eid card] (wait-for (damage state side :brain (value cost) {:unpreventable true :card card}) (complete-with-result state side eid @@ -872,7 +872,7 @@ [cost state side eid card] (<= 0 (- (count (all-installed state side)) (value cost)))) (defmethod handler :shuffle-installed-to-stack - [cost state side eid card actions] + [cost state side eid card] (continue-ability state :runner {:prompt (str "Choose " (quantify (value cost) "installed card") @@ -901,7 +901,7 @@ [cost state side eid card] (<= 0 (- (count (all-installed state side)) (value cost)))) (defmethod handler :add-installed-to-bottom-of-deck - [cost state side eid card actions] + [cost state side eid card] (let [deck (if (= :corp side) "R&D" "the stack")] (continue-ability state side @@ -930,7 +930,7 @@ [cost state side eid card] (<= (value cost) (count (get-in @state [side :hand])))) (defmethod handler :add-random-from-hand-to-bottom-of-deck - [cost state side eid card actions] + [cost state side eid card] (let [deck (if (= :corp side) "R&D" "the stack") hand (get-in @state [side :hand]) chosen (take (value cost) (shuffle hand))] @@ -951,7 +951,7 @@ [cost state side eid card] (<= 0 (- (reduce + (map #(get-counters % :agenda) (get-in @state [:corp :scored]))) (value cost)))) (defmethod handler :any-agenda-counter - [cost state side eid card actions] + [cost state side eid card] (continue-ability state side {:prompt "Choose an agenda with a counter" @@ -979,7 +979,7 @@ [cost state side eid card] (<= 0 (- (number-of-virus-counters state) (value cost)))) (defmethod handler :any-virus-counter - [cost state side eid card actions] + [cost state side eid card] (wait-for (resolve-ability state side (pick-virus-counters-to-spend (value cost)) card nil) (complete-with-result state side eid @@ -998,7 +998,7 @@ [cost state side eid card] (<= 0 (- (get-counters card :advancement) (value cost)))) (defmethod handler :advancement - [cost state side eid card actions] + [cost state side eid card] (let [title (:title card) card (update! state side (update card :advance-counter - (value cost)))] (wait-for (trigger-event-sync state side :counter-added card) @@ -1020,7 +1020,7 @@ [cost state side eid card] (<= 0 (- (get-counters card :agenda) (value cost)))) (defmethod handler :agenda - [cost state side eid card actions] + [cost state side eid card] (let [title (:title card) card (update! state side (update-in card [:counter :agenda] - (value cost)))] (wait-for (trigger-event-sync state side :agenda-counter-spent card) @@ -1042,7 +1042,7 @@ [cost state side eid card] (<= 0 (- (get-counters card :power) (value cost)))) (defmethod handler :power - [cost state side eid card actions] + [cost state side eid card] (let [title (:title card) card (update! state side (update-in card [:counter :power] - (value cost)))] (wait-for (trigger-event-sync state side :counter-added card) @@ -1061,7 +1061,7 @@ [cost state side eid card] (pos? (get-counters card :power))) (defmethod handler :x-power - [cost state side eid card actions] + [cost state side eid card] (continue-ability state side {:async true @@ -1096,7 +1096,7 @@ (reduce +))) (value cost)))) (defmethod handler :virus - [cost state side eid card actions] + [cost state side eid card] (if (pos? (->> (all-active-installed state :runner) (filter #(= "Hivemind" (:title %))) (keep #(get-counters % :virus)) diff --git a/src/clj/game/core/engine.clj b/src/clj/game/core/engine.clj index 2908e6b58c..3ed5371a85 100644 --- a/src/clj/game/core/engine.clj +++ b/src/clj/game/core/engine.clj @@ -396,7 +396,7 @@ waiting-prompt))})) (if (seq cost) ;; Ensure that any costs can be paid - (wait-for (pay state side (make-eid state eid) card cost {:action (:cid card)}) + (wait-for (pay state side (make-eid state (assoc eid :action (:cid card))) card cost) (if (:cost-paid async-result) ;; If the cost can be and is paid, perform the ablity (do-paid-ability state side ability card targets async-result) @@ -1139,24 +1139,21 @@ ;; PAYMENT (defn- pay-next - [state side eid costs card actions msgs] + [state side eid costs card msgs] (if (empty? costs) (complete-with-result state side eid msgs) - (wait-for (handler (first costs) state side (make-eid state eid) card actions) - (pay-next state side eid (rest costs) card actions (conj msgs async-result))))) + (wait-for (handler (first costs) state side (make-eid state eid) card) + (pay-next state side eid (rest costs) card (conj msgs async-result))))) (defn pay - "Same as pay, but awaitable." - [state side eid card & args] - (let [args (flatten args) - raw-costs (filter :cost/type args) - actions (remove :cost/type args) - costs (can-pay? state side eid card (:title card) raw-costs)] - (when (some keyword? args) - (throw (ex-info "Please convert to wrapped cost" {:args args}))) + [state side eid card & costs] + (let [costs (flatten costs) + costs (can-pay? state side eid card (:title card) costs)] + (when (some keyword? costs) + (throw (ex-info "Please convert to wrapped cost" {:args costs}))) (if (nil? costs) (complete-with-result state side eid nil) - (wait-for (pay-next state side (make-eid state eid) costs card actions []) + (wait-for (pay-next state side (make-eid state eid) costs card []) (let [payment-result async-result] (wait-for (checkpoint state nil (make-eid state eid) nil) (complete-with-result diff --git a/src/clj/game/core/installing.clj b/src/clj/game/core/installing.clj index 658771556e..83a91ce275 100644 --- a/src/clj/game/core/installing.clj +++ b/src/clj/game/core/installing.clj @@ -248,7 +248,7 @@ costs (conj costs (->c :credit (- 0 appldisc)))] ;; get a functional discount and apply it to (if (corp-can-pay-and-install? state side eid card server (assoc args :cached-costs costs)) - (wait-for (pay state side (make-eid state eid) card costs {:action action}) + (wait-for (pay state side (make-eid state (assoc eid :action action)) card costs) (if-let [payment-str (:msg async-result)] (if (= server "New remote") (wait-for (trigger-event-simult state side :server-created nil card) diff --git a/src/clj/game/core/payment.clj b/src/clj/game/core/payment.clj index a349d7847f..c326660b4b 100644 --- a/src/clj/game/core/payment.clj +++ b/src/clj/game/core/payment.clj @@ -23,8 +23,10 @@ (defmulti stealth-value :cost/type) (defmethod stealth-value :default [_] 0) (defmulti label :cost/type) -(defmulti payable? (fn [cost _state _side _eid _card] (:cost/type cost))) -(defmulti handler (fn [cost _state _side _eid _card _actions] (:cost/type cost))) +(defn- payable-dispatch [cost _state _side _eid _card] (:cost/type cost)) +(defmulti payable? #'payable-dispatch) +(defn- handler-dispatch [cost _state _side _eid _card] (:cost/type cost)) +(defmulti handler #'handler-dispatch) (defn group-costs [costs] diff --git a/src/clj/game/core/play_instants.clj b/src/clj/game/core/play_instants.clj index 5090b6407a..c87c037615 100644 --- a/src/clj/game/core/play_instants.clj +++ b/src/clj/game/core/play_instants.clj @@ -134,7 +134,7 @@ ;; Only mark the register once costs have been paid and card has been moved (when (has-subtype? card "Run") (swap! state assoc-in [:runner :register :click-type] :run)) - (wait-for (pay state side (make-eid state eid) moved-card costs {:action :play-instant}) + (wait-for (pay state side (make-eid state (assoc eid :action :play-instant)) moved-card costs) (let [payment-str (:msg async-result) cost-paid (merge-costs-paid (:cost-paid eid) (:cost-paid async-result))] (if payment-str