diff --git a/src/clj/game/cards/programs.clj b/src/clj/game/cards/programs.clj index a4c6f75eb3..b0e92970d1 100644 --- a/src/clj/game/cards/programs.clj +++ b/src/clj/game/cards/programs.clj @@ -230,7 +230,7 @@ break-ability no-unbreakable-subs (pos? unbroken-subs) - (can-pay? state side eid card total-cost)) + (can-pay? state side eid card nil total-cost)) [{:dynamic :auto-pump-and-break :cost total-cost :cost-label (build-cost-label total-cost) @@ -1951,12 +1951,11 @@ {:access-ability {:async true :trash? true - :once :per-turn :label "Trash card" :req (req (and (not (:disabled card)) (not (agenda? target)) (not (in-discard? target)) - (can-pay? state side eid card [(->c :power 1) (->c :credit (:cost target 0) {:stealth :all-stealth})]))) + (can-pay? state side eid card nil [(->c :power 1) (->c :credit (:cost target 0) {:stealth :all-stealth})]))) :waiting-prompt true :effect (req (let [accessed-card target play-or-rez (:cost target)] diff --git a/src/clj/game/core/ice.clj b/src/clj/game/core/ice.clj index 4678ff6dbb..6acf3d2ad1 100644 --- a/src/clj/game/core/ice.clj +++ b/src/clj/game/core/ice.clj @@ -816,7 +816,7 @@ no-unbreakable-subs can-auto-break (pos? unbroken-subs) - (can-pay? state side eid card total-cost)) + (can-pay? state side eid card nil total-cost)) [{:dynamic :auto-pump-and-break :cost total-cost :cost-label (build-cost-label total-cost) @@ -826,7 +826,7 @@ (:title current-ice))}]) (when (and pump-ability (pos? times-pump) - (can-pay? state side eid card total-pump-cost)) + (can-pay? state side eid card nil total-pump-cost)) [{:dynamic :auto-pump :cost total-pump-cost :cost-label (build-cost-label total-pump-cost) diff --git a/src/clj/game/core/payment.clj b/src/clj/game/core/payment.clj index be64fcc123..071accb0b3 100644 --- a/src/clj/game/core/payment.clj +++ b/src/clj/game/core/payment.clj @@ -112,8 +112,9 @@ If title is specified a toast will be generated if the player is unable to pay explaining which cost they were unable to pay." ([state side title args] (can-pay? state side (make-eid state) nil title args)) - ([state side eid card title & args] - (let [remove-zero-credit-cost (and (= (:source-type eid) :corp-install) + ([state side eid card arg & args] + (let [[title args] (if (string? arg) [arg args] [nil (cons arg args)]) + remove-zero-credit-cost (and (= (:source-type eid) :corp-install) (not (ice? card))) costs (merge-costs (filter some? args) remove-zero-credit-cost)] (if (every? #(and (not (any-effect-stops-pay? state side %)) diff --git a/test/clj/game/cards/programs_test.clj b/test/clj/game/cards/programs_test.clj index 5143ab9889..6cf59c1a85 100644 --- a/test/clj/game/cards/programs_test.clj +++ b/test/clj/game/cards/programs_test.clj @@ -5257,6 +5257,26 @@ (is (= 1 (count (:discard (get-corp))))) (is (= 0 (count (:discard (get-runner)))) "0 in discard")))) +(deftest lampades-not-once-per-turn + (do-game + (new-game {:corp {:hand ["Tiered Subscription" "Tiered Subscription"]} + :runner {:hand ["Lampades" "Jailbreak"]}}) + (take-credits state :corp) + (play-cards state :runner "Lampades" ["Jailbreak" "HQ"]) + (run-continue-until state :success) + (click-prompts state :runner "[Lampades] Trash card" "[Lampades] Trash card") + (is (= 2 (count (:discard (get-corp)))) "Trashed both"))) + +(deftest lampades-cost-actually-checks + (do-game + (new-game {:corp {:hand ["PAD Campaign" "PAD Campaign"]} + :runner {:hand ["Lampades" "Jailbreak"]}}) + (take-credits state :corp) + (play-cards state :runner "Lampades" ["Jailbreak" "HQ"]) + (run-continue-until state :success) + (is (= ["Pay 4 [Credits] to trash" "No action"] (prompt-titles :runner)) + "Can't pay without sufficient stealth credits"))) + (deftest lamprey ;; Lamprey - Corp loses 1 credit for each successful HQ run; trashed on purge (do-game