|
7 | 7 | [game.core.actions :refer [score]] |
8 | 8 | [game.core.agendas :refer [update-all-advancement-requirements |
9 | 9 | update-all-agenda-points]] |
10 | | - [game.core.bad-publicity :refer [bad-publicity-prevent gain-bad-publicity |
11 | | - lose-bad-publicity]] |
| 10 | + [game.core.bad-publicity :refer [gain-bad-publicity lose-bad-publicity]] |
12 | 11 | [game.core.board :refer [all-active-installed all-installed all-installed-runner-type get-remotes |
13 | 12 | installable-servers]] |
14 | 13 | [game.core.card :refer [agenda? asset? can-be-advanced? corp? event? corp-installable-type? |
|
18 | 17 | operation? program? resource? rezzed? runner? upgrade?]] |
19 | 18 | [game.core.card-defs :refer [card-def]] |
20 | 19 | [game.core.checkpoint :refer [fake-checkpoint]] |
21 | | - [game.core.damage :refer [damage damage-prevent]] |
| 20 | + [game.core.damage :refer [damage]] |
22 | 21 | [game.core.def-helpers :refer [corp-recur corp-rez-toast defcard |
23 | 22 | reorder-choice spend-credits take-credits trash-on-empty get-x-fn with-revealed-hand]] |
24 | 23 | [game.core.drawing :refer [draw first-time-draw-bonus max-draw |
|
27 | 26 | [game.core.eid :refer [complete-with-result effect-completed is-basic-advance-action? make-eid get-ability-targets]] |
28 | 27 | [game.core.engine :refer [not-used-once? pay register-events resolve-ability trigger-event-sync]] |
29 | 28 | [game.core.events :refer [first-event? no-event? turn-events event-count]] |
30 | | - [game.core.expose :refer [expose-prevent]] |
31 | 29 | [game.core.flags :refer [lock-zone prevent-current |
32 | 30 | prevent-draw |
33 | 31 | register-turn-flag! release-zone]] |
|
46 | 44 | [game.core.play-instants :refer [play-instant]] |
47 | 45 | [game.core.prompts :refer [cancellable]] |
48 | 46 | [game.core.props :refer [add-counter add-icon add-prop remove-icon set-prop]] |
| 47 | + [game.core.prevention :refer [damage-name preventable? prevent-bad-publicity prevent-damage prevent-expose]] |
49 | 48 | [game.core.revealing :refer [reveal]] |
50 | 49 | [game.core.rezzing :refer [can-pay-to-rez? derez rez]] |
51 | 50 | [game.core.runs :refer [end-run]] |
|
445 | 444 | (damage state side eid :meat 1 {:card card}))))}}) |
446 | 445 |
|
447 | 446 | (defcard "Broadcast Square" |
448 | | - {:events [{:event :pre-bad-publicity |
449 | | - :async true |
450 | | - :trace {:base 3 |
451 | | - :successful {:msg "prevents all bad publicity" |
452 | | - :effect (effect (bad-publicity-prevent Integer/MAX_VALUE))}}}]}) |
| 447 | + {:prevention [{:prevents :bad-publicity |
| 448 | + :type :event |
| 449 | + :max-uses 1 |
| 450 | + :mandatory true |
| 451 | + :ability {:req (req (preventable? context)) |
| 452 | + :trace {:base 3 |
| 453 | + :successful {:msg "prevent all bad publicity" |
| 454 | + :async true |
| 455 | + :effect (req (prevent-bad-publicity state side eid :all))}}}}]}) |
453 | 456 |
|
454 | 457 | (defcard "C.I. Fund" |
455 | 458 | {:derezzed-events [corp-rez-toast] |
|
1707 | 1710 | {:derezzed-events [corp-rez-toast] |
1708 | 1711 | :events [(assoc ability :event :corp-turn-begins)] |
1709 | 1712 | :data {:counter {:credit 8}} |
1710 | | - :abilities [(set-autoresolve :auto-reshuffle "Marilyn Campaign shuffling itself back into R&D")] |
1711 | | - :on-trash {:interactive (req true) |
1712 | | - :optional |
1713 | | - {:waiting-prompt true |
1714 | | - :prompt (msg "Shuffle " (:title card) " into R&D?") |
1715 | | - :autoresolve (get-autoresolve :auto-reshuffle) |
1716 | | - :player :corp |
1717 | | - :yes-ability {:msg "shuffle itself back into R&D" |
1718 | | - :effect (effect (move :corp card :deck) |
1719 | | - (shuffle! :corp :deck))}}}})) |
| 1713 | + :prevention [{:prevents :trash |
| 1714 | + :type :event |
| 1715 | + :label "Shuffle Marilyn Campaign into R&D" |
| 1716 | + :max-uses 1 |
| 1717 | + :ability {:msg "shuffle itself into R&D instead of moving it to Archives" |
| 1718 | + :req (req (some #(same-card? % card) (map :card (get-in @state [:prevent :trash :remaining])))) |
| 1719 | + :effect (req (swap! state update-in [:prevent :trash :remaining] (fn [ctx] (mapv #(if (same-card? card (:card %)) (assoc % :destination :deck :shuffle-rd true) %) ctx))))}}]})) |
1720 | 1720 |
|
1721 | 1721 | (defcard "Mark Yale" |
1722 | 1722 | {:events [{:event :agenda-counter-spent |
|
2208 | 2208 | card nil)))}]})) |
2209 | 2209 |
|
2210 | 2210 | (defcard "Prāna Condenser" |
2211 | | - {:interactions {:prevent [{:type #{:net} |
2212 | | - :req (req (= :corp (:side target)))}]} |
2213 | | - :abilities [{:label "Prevent 1 net damage to place power counter on Prāna Condenser" |
2214 | | - :msg "prevent 1 net damage, place 1 power counter, and gain 3 [Credits]" |
2215 | | - :async true |
2216 | | - :req (req true) |
2217 | | - :effect (req (damage-prevent state :corp :net 1) |
2218 | | - (wait-for (add-counter state side card :power 1 nil) |
2219 | | - (gain-credits state :corp eid 3)))} |
2220 | | - {:action true |
| 2211 | + {:prevention [{:prevents :damage |
| 2212 | + :type :event |
| 2213 | + :max-uses 1 |
| 2214 | + :ability {:async true |
| 2215 | + :msg "prevent 1 net damage, place 1 counter on itself, and gain 3 [Credits]" |
| 2216 | + :req (req (and (= :net (:type context)) |
| 2217 | + (= :corp (:source-player context)) |
| 2218 | + (preventable? context))) |
| 2219 | + :effect (req (wait-for (prevent-damage state side 1) |
| 2220 | + (wait-for (add-counter state side card :power 1 {:suppress-checkpoint true}) |
| 2221 | + (gain-credits state side eid 3))))}}] |
| 2222 | + :abilities [{:action true |
2221 | 2223 | :msg (msg "deal " (get-counters card :power) " net damage") |
2222 | 2224 | :label "deal net damage" |
2223 | 2225 | :cost [(->c :click 2) (->c :trash-can)] |
|
2712 | 2714 | :no-ability {:effect (effect (system-msg (str "declines to use " (:title card))))} |
2713 | 2715 | :yes-ability {:async true |
2714 | 2716 | :cost [(->c :credit 4)] |
2715 | | - :msg "do 3 net damage and give the Runner 1 tag" |
2716 | | - :effect (req (wait-for (damage state side :net 3 {:card card}) |
2717 | | - (gain-tags state :corp eid 1)))}}}}) |
| 2717 | + :msg "give the Runner 1 tag and do 3 net damage" |
| 2718 | + :effect (req (wait-for (gain-tags state :corp 1 {:suppress-checkpoint true}) |
| 2719 | + (damage state side eid :net 3 {:card card})))}}}}) |
2718 | 2720 |
|
2719 | 2721 | (defcard "Space Camp" |
2720 | 2722 | {:flags {:rd-reveal (req true)} |
|
3281 | 3283 | (rez state side eid (last (:hosted (get-card state card))) {:cost-bonus -2})))}]}) |
3282 | 3284 |
|
3283 | 3285 | (defcard "Zaibatsu Loyalty" |
3284 | | - {:interactions {:prevent [{:type #{:expose} |
3285 | | - :req (req true)}]} |
3286 | | - :derezzed-events [{:event :pre-expose |
| 3286 | + {:prevention [{:prevents :expose |
| 3287 | + :type :ability |
| 3288 | + :label "1 [Credit]: Zaibatsu Loyalty" |
| 3289 | + :ability {:cost [(->c :credit 1)] |
| 3290 | + :req (req (preventable? context)) |
| 3291 | + :msg "prevent a card from being exposed" |
| 3292 | + :async true |
| 3293 | + :effect (req (prevent-expose state side eid card))}} |
| 3294 | + {:prevents :expose |
| 3295 | + :type :ability |
| 3296 | + :label "[trash]: Zaibatsu Loyalty" |
| 3297 | + :ability {:cost [(->c :trash-can)] |
| 3298 | + :req (req (preventable? context)) |
| 3299 | + :msg "prevent a card from being exposed" |
| 3300 | + :async true |
| 3301 | + :effect (req (prevent-expose state side eid card))}}] |
| 3302 | + :derezzed-events [{:event :expose-interrupt |
3287 | 3303 | :async true |
3288 | | - :effect (req (let [etarget target] |
| 3304 | + :effect (req (let [ctx context] |
3289 | 3305 | (continue-ability |
3290 | 3306 | state side |
3291 | 3307 | {:optional |
3292 | 3308 | {:req (req (not (rezzed? card))) |
3293 | 3309 | :player :corp |
3294 | | - :prompt (msg "The Runner is about to expose " (:title etarget) ". Rez Zaibatsu Loyalty?") |
| 3310 | + :prompt (msg "The Runner is about to expose " (enumerate-str (map #(card-str state % {:visible true}) (:cards ctx))) ". Rez Zaibatsu Loyalty?") |
3295 | 3311 | :yes-ability {:async true |
3296 | 3312 | :effect (effect (rez eid card))}}} |
3297 | | - card nil)))}] |
3298 | | - :abilities [{:msg "prevent 1 card from being exposed" |
3299 | | - :cost [(->c :credit 1)] |
3300 | | - :effect (effect (expose-prevent 1))} |
3301 | | - {:msg "prevent 1 card from being exposed" |
3302 | | - :label "Prevent 1 card from being exposed" |
3303 | | - :cost [(->c :trash-can)] |
3304 | | - :effect (effect (expose-prevent 1))}]}) |
| 3313 | + card nil)))}]}) |
3305 | 3314 |
|
3306 | 3315 | (defcard "Zealous Judge" |
3307 | 3316 | {:rez-req (req tagged) |
|
0 commit comments