Operations

24/7 News Cycle

Card #09019

{:req (req (pos? (count (:scored corp))))
 :delayed-completion true
 :additional-cost [:forfeit]
 :effect (req (continue-ability
                state side
                {:prompt "Choose an agenda in your score area to trigger its \"when scored\" ability"
                 :choices {:req #(and (is-type? % "Agenda")
                                      (is-scored? state :corp %))}
                 :msg (msg "trigger the \"when scored\" ability of " (:title target))
                 :delayed-completion true
                 ;dissoc :end-turn for Breaking News
                 :effect (effect (continue-ability (dissoc (card-def target) :end-turn) target nil))}
                card nil))}

Accelerated Diagnostics

Card #04052

(letfn [(ad [i n adcard]
          {:prompt "Select an operation to play"
           :choices {:req #(and (= (:side %) "Corp")
                                (is-type? % "Operation")
                                (= (:zone %) [:play-area]))}
           :msg (msg "play " (:title target))
           :delayed-completion true
           :effect (req (when-completed (play-instant state side target {:no-additional-cost true})
                                        (if (and (not (get-in @state [:corp :register :terminal])) (< i n))
                                          (continue-ability state side (ad (inc i) n adcard) adcard nil)
                                          (effect-completed state side eid))))})]
  {:delayed-completion true
   :effect (req (let [n (count (filter #(is-type? % "Operation")
                                       (take 3 (:deck corp))))]
                  (continue-ability state side
                                    {:msg "look at the top 3 cards of R&D"
                                     :delayed-completion true
                                     :effect (req (doseq [c (take 3 (:deck corp))]
                                                    (move state side c :play-area))
                                                  (continue-ability state side (ad 1 n card) card nil))}
                                    card nil)))})

Ad Blitz

Card #09020

(let [abhelp (fn ab [n total]
               {:prompt "Select an advertisement to install and rez" :show-discard true
                :delayed-completion true
                :choices {:req #(and (= (:side %) "Corp")
                                     (has-subtype? % "Advertisement")
                                     (or (in-hand? %)
                                         (= (:zone %) [:discard])))}
                :effect (req (when-completed
                               (corp-install state side target nil {:install-state :rezzed})
                               (if (< n total)
                                 (continue-ability state side (ab (inc n) total) card nil)
                                 (effect-completed state side eid))))})]
  {:prompt "How many advertisements?"
   :delayed-completion true
   :choices :credit
   :msg (msg "install and rez " target " advertisements")
   :effect (effect (continue-ability (abhelp 1 target) card nil))})

Aggressive Negotiation

Card #01097

{:req (req (:scored-agenda corp-reg)) :prompt "Choose a card"
 :choices (req (cancellable (:deck corp) :sorted))
 :effect (final-effect (move target :hand) (shuffle! :deck))
 :msg "search R&D for a card and add it to HQ"}

An Offer You Cant Refuse

Card #08091

{:delayed-completion false
 :prompt "Choose a server" :choices ["Archives" "R&D" "HQ"]
 :effect (req (let [serv target]
                (show-wait-prompt state :corp (str "Runner to decide on running " target))
                (continue-ability
                  state side
                  {:optional
                   {:prompt (msg "Make a run on " serv "?") :player :runner
                    :yes-ability {:msg (msg "let the Runner make a run on " serv)
                                  :effect (effect (clear-wait-prompt :corp)
                                                  (game.core/run eid serv nil card))}
                    :no-ability {:effect (effect (clear-wait-prompt :corp)
                                                 (as-agenda :corp (some #(when (= (:cid card) (:cid %)) %) (:discard corp)) 1))
                                 :msg "add it to their score area as an agenda worth 1 agenda point"}}}
                 card nil)))}

Anonymous Tip

Card #01083

{:msg "draw 3 cards"
 :effect (effect (draw 3))}

Archived Memories

Card #01058

{:effect (req (let [cid (:cid card)]
                (resolve-ability state side
                  {:prompt "Choose a card from Archives to add to HQ" :show-discard true
                   :choices {:req #(and (not= (:cid %) cid)
                                        (= (:side %) "Corp")
                                        (= (:zone %) [:discard]))}
                   :effect (final-effect (move target :hand)
                                         (system-msg (str "adds " (if (:seen target) (:title target) "an unseen card") " to HQ")))}
                 card nil)))}

Ark Lockdown

Card #11050

{:delayed-completion true
 :req (req (not-empty (:discard runner)))
 :prompt "Name a card to remove all copies in the Heap from the game"
 :choices (req (cancellable (:discard runner) :sorted))
 :msg (msg "remove all copies of " (:title target) " in the Heap from the game")
 :effect (req (doseq [c (filter #(= (:title target) (:title %)) (:discard runner))]
                (move state :runner c :rfg))
              (effect-completed state side eid card))}

Back Channels

Card #08099

{:prompt "Choose an installed card in a server to trash"
 :choices {:req #(and (= (last (:zone %)) :content)
                      (is-remote? (second (:zone %))))}
 :effect (final-effect (gain :credit (* 3 (get target :advance-counter 0))) (trash target))
 :msg (msg "trash " (card-str state target) " and gain "
           (* 3 (get target :advance-counter 0)) " [Credits]")}

Bad Times

Card #06012

{:implementation "Any required program trashing is manual"
 :req (req tagged)
 :msg "force the Runner to lose 2[mu] until the end of the turn"
 :effect (req (lose state :runner :memory 2)
              (when (< (:memory runner) 0)
               (system-msg state :runner "must trash programs to free up [mu]")))
 :end-turn {:effect (req (gain state :runner :memory 2)
                         (system-msg state :runner "regains 2[mu]"))}}

Beanstalk Royalties

Card #01098

{:msg "gain 3 [Credits]"
 :effect (effect (gain :credit 3))}

Best Defense

Card #11079

{:delayed-completion true
 :req (req (not-empty (all-installed state :runner)))
 :effect (req (let [t (:tag runner)]
                (continue-ability state side
                  {:prompt (msg "Choose a Runner card with an install cost of " t " or less to trash")
                   :choices {:req #(and (installed? %)
                                        (<= (:cost %) t))}
                   :msg (msg "trash " (:title target))
                   :effect (effect (trash target))}
                 card nil)))}

Big Brother

Card #02035

{:req (req tagged)
 :msg "give the Runner 2 tags"
 :delayed-completion true
 :effect (effect (tag-runner :runner eid 2))}

Bioroid Efficiency Research

Card #03013

{:implementation "Derez is manual"
 :choices {:req #(and (ice? %)
                      (has-subtype? % "Bioroid")
                      (not (rezzed? %)))}
 :msg (msg "rez " (card-str state target {:visible true}) " at no cost")
 :effect (final-effect (rez target {:ignore-cost :all-costs})
                       (host (get-card state target) (assoc card :zone [:discard] :seen true)))}

Biotic Labor

Card #01059

{:msg "gain [Click][Click]"
 :effect (effect (gain :click 2))}

Blue Level Clearance

Card #04090

{:msg "gain 5 [Credits] and draw 2 cards"
 :effect (effect (gain :credit 5) (draw 2))}

BOOM!

Card #11058

{:req (req (> (:tag runner) 1))
 :delayed-completion true
 :msg "do 7 meat damage"
 :effect (effect (damage eid :meat 7 {:card card}))}

Casting Call

Card #08096

{:choices {:req #(and (is-type? % "Agenda")
                      (in-hand? %))}
 :delayed-completion true
 :effect (req (let [agenda target]
                (continue-ability
                  state side {:prompt (str "Choose a server to install " (:title agenda))
                              :choices (server-list state agenda)
                              :effect (req (corp-install state side agenda target {:install-state :face-up})
                                           ; find where the agenda ended up and host on it
                                           (let [agenda (some #(when (= (:cid %) (:cid agenda)) %)
                                                              (all-installed state :corp))]
                                             ; the operation ends up in :discard when it is played; to host it,
                                             ; we need (host) to look for it in discard.
                                             (host state side agenda (assoc card :zone [:discard]
                                                                                 :seen true :installed true))
                                             (system-msg state side (str "hosts Casting Call on " (:title agenda)))))}
                  card nil)))
 :events {:access {:req (req (= (:cid target) (:cid (:host card))))
                   :delayed-completion true
                   :effect (effect (tag-runner :runner eid 2)) :msg "give the Runner 2 tags"}}}

Celebrity Gift

Card #04012

{:choices {:max 5
           :req #(and (= (:side %) "Corp")
                      (in-hand? %))}
 :msg (msg "reveal " (join ", " (map :title targets)) " and gain " (* 2 (count targets)) " [Credits]")
 :effect (final-effect (gain :credit (* 2 (count targets))))}

Cerebral Cast

Card #05013

{:req (req (:successful-run runner-reg))
 :psi {:not-equal {:player :runner :prompt "Take 1 tag or 1 brain damage?"
                   :choices ["1 tag" "1 brain damage"] :msg (msg "give the Runner " target)
                   :delayed-completion true
                   :effect (req (if (= target "1 tag")
                                  (tag-runner state side eid 1)
                                  (damage state side eid :brain 1 {:card card})))}}}

Cerebral Static

Card #06025

{:msg "disable the Runner's identity"
 :effect (effect (disable-identity :runner))
 :leave-play (effect (enable-identity :runner))}

“Clones are not People”

Card #10052

{:events {:agenda-scored {:msg "add it to their score area as an agenda worth 1 agenda point"
                          :effect (effect (as-agenda :corp card 1))}}}

Closed Accounts

Card #01084

{:req (req tagged)
 :msg (msg "force the Runner to lose all " (:credit runner) " [Credits]")
 :effect (effect (lose :runner :credit :all))}

Commercialization

Card #02058

{:msg (msg "gain " (or (:advance-counter target) 0) " [Credits]")
 :choices {:req ice?}
 :effect (final-effect (gain :credit (or (:advance-counter target) 0)))}

Consulting Visit

Card #10094

{:prompt  "Choose an Operation from R&D to play"
 :choices (req (cancellable
          (filter #(and (is-type? % "Operation")
                        (<= (:cost %) (:credit corp)))
                   (:deck corp))
          :sorted))
 :effect  (effect (shuffle! :deck)
                  (system-msg "shuffles their deck")
                  (play-instant target))
 :msg (msg "search R&D for " (:title target) " and play it")}

Corporate Shuffle

Card #04113

{:msg "shuffle all cards in HQ into R&D and draw 5 cards"
 :effect (effect (shuffle-into-deck :hand) (draw 5))}

Cyberdex Trial

Card #04019

{:msg "purge virus counters"
 :effect (effect (purge))}

Dedication Ceremony

Card #10017

{:prompt "Choose a faceup card"
 :choices {:req rezzed?}
 :msg (msg "place 3 advancement tokens on " (card-str state target))
 :effect (req (add-prop state :corp target :advance-counter 3 {:placed true})
              (effect-completed state side eid card)
              (let [tgtcid (:cid target)]
                (register-turn-flag! state side
                  target :can-score
                  (fn [state side card]
                    (if (and (= (:cid card) tgtcid)
                             (>= (:advance-counter card) (or (:current-cost card) (:advancementcost card))))
                      ((constantly false) (toast state :corp "Cannot score due to Dedication Ceremony." "warning"))
                      true)))))}

Defective Brainchips

Card #08072

{:events {:pre-damage {:req (req (= target :brain)) :msg "do 1 additional brain damage"
                       :once :per-turn :effect (effect (damage-bonus :brain 1))}}}

Diversified Portfolio

Card #05026

{:msg (msg "gain " (count (filter #(not (empty? %)) (map #(:content (second %)) (get-remotes @state))))
           " [Credits]")
 :effect (effect (gain :credit (count (filter #(not (empty? %)) (map #(:content (second %)) (get-remotes @state))))))}

Door to Door

Card #11059

{:events {:runner-turn-begins
          {:trace {:base 1 :msg (msg (if tagged "do 1 meat damage" "give the Runner 1 tag"))
                   :label "Do 1 meat damage if Runner is tagged, or give the Runner 1 tag"
                   :delayed-completion true
                   :effect (req (if tagged
                                  (damage state side eid :meat 1 {:card card})
                                  (tag-runner state :runner eid 1)))}}}}

Election Day

Card #10112

{:req (req (->> (get-in @state [:corp :hand])
                (filter #(not (= (:cid %) (:cid card))))
                (count)
                (pos?)))
 :msg (msg "trash all cards in HQ and draw 5 cards")
 :effect (effect (trash-cards (get-in @state [:corp :hand]))
                 (draw 5))}

Enforced Curfew

Card #11100

{:msg "reduce the Runner's maximum hand size by 1"
 :effect (effect (lose :runner :hand-size-modification 1))
 :leave-play (effect (gain :runner :hand-size-modification 1))}

Enforcing Loyalty

Card #11033

{:trace {:base 3
         :label "Trash a card not matching the faction of the Runner's identity"
         :delayed-completion true
         :effect (req (let [f (:faction (:identity runner))]
                        (continue-ability
                          state side
                          {:prompt "Choose an installed card not matching the faction of the Runner's identity"
                           :choices {:req #(and (installed? %) (not= f (:faction %)) (card-is? % :side :runner))}
                           :msg (msg "trash " (:title target))
                           :effect (effect (trash target))}
                         card nil)))}}

Enhanced Login Protocol

Card #06022

(letfn [(add-effect [state side card]
          (update! state side (assoc card :elp-activated true))
          (click-run-cost-bonus state side [:click 1]))
        (remove-effect [state side card]
          (click-run-cost-bonus state side [:click -1])
          (update! state side (dissoc card :elp-activated)))]
  {:effect (req (when (and (= :runner (:active-player @state))
                           (not (:made-click-run runner-reg)))
                  (add-effect state side card)
                  (system-msg state side (str "uses Enhanced Login Protocol to add an additional cost of [Click]"
                                              " to make the first run not through a card ability this turn"))))
   :events {:runner-turn-begins {:msg "add an additional cost of [Click] to make the first run not through a card ability this turn"
                                 :effect (effect (add-effect card))}
            :runner-turn-ends {:req (req (:elp-activated card))
                               :effect (effect (remove-effect card))}
            :run-ends {:req (req (and (:elp-activated card)
                                      (:made-click-run runner-reg)))
                       :effect (effect (remove-effect card))}}
   :leave-play (req (when (:elp-activated card)
                      (remove-effect state side card)))})

Exchange of Information

Card #10092

{:req (req (and tagged
                (seq (:scored runner))
                (seq (:scored corp))))
 :delayed-completion true
 :effect (req
           (continue-ability
             state side
             {:prompt "Choose a stolen agenda in the Runner's score area to swap"
              :choices {:req #(in-runner-scored? state side %)}
              :delayed-completion true
              :effect (req
                        (let [stolen target]
                          (continue-ability
                            state side
                            {:prompt (msg "Choose a scored agenda to swap for " (:title stolen))
                             :choices {:req #(in-corp-scored? state side %)}
                             :effect (req (let [scored target]
                                            (swap-agendas state side scored stolen)
                                            (system-msg state side (str "uses Exchange of Information to swap "
                                                                        (:title scored) " for " (:title stolen)))
                                            (effect-completed state side eid card)))}
                            card nil)))}
             card nil))}

Fast Track

Card #05027

{:prompt "Choose an Agenda"
 :choices (req (cancellable (filter #(is-type? % "Agenda") (:deck corp)) :sorted))
 :effect (effect (system-msg (str "adds " (:title target) " to HQ and shuffle R&D"))
                 (shuffle! :deck)
                 (move target :hand) )}

Financial Collapse

Card #11039

{:delayed-completion true
 :req (req (>= (:credit runner) 6))
 :effect (req (let [rcount (count (filter #(is-type? % "Resource") (all-installed state :runner)))]
                (if (pos? rcount)
                  (do (show-wait-prompt state :corp "Runner to trash a resource to prevent Financial Collapse")
                      (continue-ability
                        state side
                        {:prompt (msg "Trash a resource to prevent Financial Collapse?")
                         :choices ["Yes" "No"] :player :runner
                         :delayed-completion true
                         :effect (final-effect (continue-ability
                                                 (if (= target "Yes")
                                                   {:prompt "Choose a resource to trash" :player :runner
                                                    :choices {:req #(and (is-type? % "Resource") (installed? %))}
                                                    :effect (req (trash state side target {:unpreventable true})
                                                                 (system-msg state :runner
                                                                             (str "trashes " (:title target)
                                                                                  " to prevent Financial Collapse"))
                                                                 (clear-wait-prompt state :corp))}
                                                   {:effect (effect (lose :runner :credit (* rcount 2))
                                                                    (clear-wait-prompt :corp))
                                                    :msg (msg "make the Runner lose " (* rcount 2) " [Credits]")})
                                                card nil))} card nil))
                  (continue-ability
                    state side
                    {:effect (effect (lose :runner :credit (* rcount 2)))
                     :msg (msg "make the Runner lose " (* rcount 2) " [Credits]")} card nil))))}

Foxfire

Card #02100

{:trace {:base 7
         :prompt "Choose 1 card to trash"
         :not-distinct true
         :choices {:req #(and (installed? %)
                              (or (has-subtype? % "Virtual")
                                  (has-subtype? % "Link")))}
         :msg "trash 1 virtual resource or link"
         :effect (effect (trash target) (system-msg (str "trashes " (:title target))))}}

Freelancer

Card #02040

{:req (req tagged)
 :msg (msg "trash " (join ", " (map :title targets)))
 :choices {:max 2
           :req #(and (installed? %)
                      (is-type? % "Resource"))}
 :effect (final-effect (trash-cards :runner targets))}

Friends in High Places

Card #11090

(let [fhelper (fn fhp [n] {:prompt "Select a card in Archives to install with Friends in High Places"
                           :priority -1
                           :delayed-completion true
                           :show-discard true
                           :choices {:req #(and (= (:side %) "Corp")
                                                (not (is-type? % "Operation"))
                                                (in-discard? %))}
                           :effect (req (when-completed
                                          (corp-install state side target nil nil)
                                          (do (system-msg state side (str "uses Friends in High Places to "
                                                                          (corp-install-msg target)))
                                              (if (< n 2)
                                                (continue-ability state side (fhp (inc n)) card nil)
                                                (effect-completed state side eid card)))))})]
  {:delayed-completion true
   :effect (effect (continue-ability (fhelper 1) card nil))})

Green Level Clearance

Card #02070

{:msg "gain 3 [Credits] and draw 1 card"
 :effect (effect (gain :credit 3) (draw))}

Hard-Hitting News

Card #11016

{:req (req (:made-run runner-reg))
 :trace {:base 4
         :delayed-completion true
         :msg "give the Runner 4 tags"
         :label "Give the Runner 4 tags"
         :effect (effect (tag-runner :runner eid 4))}}

Hasty Relocation

Card #11074

(letfn [(hr-final [chosen original]
          {:prompt (str "The top cards of R&D will be " (clojure.string/join  ", " (map :title chosen)) ".")
           :choices ["Done" "Start over"]
           :delayed-completion true
           :effect (req (if (= target "Done")
                          (do (doseq [c (reverse chosen)] (move state :corp c :deck {:front true}))
                              (clear-wait-prompt state :runner)
                              (effect-completed state side eid card))
                          (continue-ability state side (hr-choice original '() 3 original)
                                            card nil)))})
        (hr-choice [remaining chosen n original]
          {:prompt "Choose a card to move next onto R&D"
           :choices remaining
           :delayed-completion true
           :effect (req (let [chosen (cons target chosen)]
                          (if (< (count chosen) n)
                            (continue-ability state side (hr-choice (remove-once #(not= target %) remaining)
                                                                     chosen n original) card nil)
                            (continue-ability state side (hr-final chosen original) card nil))))})]
  {:delayed-completion true
   :msg "trash the top card of R&D, draw 3 cards, and add 3 cards in HQ to the top of R&D"
   :effect (req (mill state :corp)
                (draw state side 3)
                (show-wait-prompt state :runner "Corp to add 3 cards in HQ to the top of R&D")
                (let [from (get-in @state [:corp :hand])]
                  (continue-ability state :corp (hr-choice from '() 3 from) card nil)))})

Hatchet Job

Card #11034

{:trace {:base 5
         :choices {:req #(and (installed? %)
                              (card-is? % :side :runner)
                              (not (has-subtype? % "Virtual")))}
         :msg "add an installed non-virtual card to the Runner's grip"
         :effect (effect (move :runner target :hand true))}}

Hedge Fund

Card #01110

{:msg "gain 9 [Credits]" :effect (effect (gain :credit 9))}

Hellion Alpha Test

Card #04031

{:req (req (:installed-resource runner-reg))
 :trace {:base 2
         :choices {:req #(and (installed? %)
                              (is-type? % "Resource"))}
         :msg "add a Resource to the top of the Stack"
         :effect (effect (move :runner target :deck {:front true})
                         (system-msg (str "adds " (:title target) " to the top of the Stack")))
         :unsuccessful {:msg "take 1 bad publicity"
                        :effect (effect (gain :corp :bad-publicity 1))}}}

Hellion Beta Test

Card #11051

{:req (req (:trashed-card runner-reg))
 :trace {:base 2
         :label "Trash 2 installed non-program cards"
         :choices {:max 2
                   :req #(and (installed? %)
                              (= (:side %) "Runner")
                              (not (is-type? % "Program")))}
         :msg (msg "trash " (join ", " (map :title targets)))
         :effect (req (doseq [c targets]
                        (trash state side c)))
         :unsuccessful {:msg "take 1 bad publicity"
                        :effect (effect (gain :corp :bad-publicity 1))}}}

Heritage Committee

Card #10013

{:delayed-completion true
 :effect (effect (draw 3)
                 (continue-ability
                   {:prompt "Choose a card in HQ to put on top of R&D"
                    :choices {:req #(and (in-hand? %)
                                         (= (:side %) "Corp"))}
                    :msg "draw 3 cards and add 1 card from HQ to the top of R&D"
                    :effect (effect (move target :deck {:front true}))}
                   card nil))}

Housekeeping

Card #07020

{:events {:runner-install {:player :runner
                           :choices {:req #(and (in-hand? %)
                                                (= (:side %) "Runner"))}
                           :prompt "Choose a card from your Grip to trash for Housekeeping" :once :per-turn
                           :msg (msg "force the Runner to trash " (:title target) " from their Grip")
                           :effect (effect (trash target {:unpreventable true}))}}}

Interns

Card #04060

{:prompt "Choose a card to install from Archives or HQ"
 :show-discard true
 :not-distinct true
 :choices {:req #(and (not (is-type? % "Operation"))
                      (= (:side %) "Corp")
                      (#{[:hand] [:discard]} (:zone %)))}
 :effect (final-effect (corp-install target nil {:no-install-cost true}))
 :msg (msg (corp-install-msg target))}

Invasion of Privacy

Card #04016

(letfn [(iop [x]
          {:delayed-completion true
           :req (req (pos? (count (filter #(or (is-type? % "Resource")
                                               (is-type? % "Event")) (:hand runner)))))
           :prompt "Choose a resource or event to trash"
           :msg (msg "trash " (:title target))
           :choices (req (cancellable
                           (filter #(or (is-type? % "Resource")
                                        (is-type? % "Event")) (:hand runner)) :sorted))
           :effect (req (trash state side target)
                        (if (pos? x)
                          (continue-ability state side (iop (dec x)) card nil)
                          (effect-completed state side eid card)))})]
  {:trace {:base 2 :msg "reveal the Runner's Grip and trash up to X resources or events"
           :effect (req (let [x (- target (second targets))]
                          (system-msg state :corp
                                      (str "reveals the Runner's Grip ( "
                                           (join ", " (map :title (:hand runner)))
                                           " ) and can trash up to " x " resources or events"))
                          (continue-ability state side (iop (dec x)) card nil)))
           :unsuccessful {:msg "take 1 bad publicity" :effect (effect (gain :corp :bad-publicity 1))}}})

Lag Time

Card #06031

{:effect (effect (update-all-ice))
 :events {:pre-ice-strength {:effect (effect (ice-strength-bonus 1 target))}}
 :leave-play (effect (update-all-ice))}

Lateral Growth

Card #10104

{:delayed-completion true
 :msg "gain 4 [Credits]"
 :effect (effect (gain :credit 4)
                 (continue-ability {:player :corp
                                    :prompt "Choose a card to install"
                                    :delayed-completion true
                                    :choices {:req #(and (= (:side %) "Corp")
                                                         (not (is-type? % "Operation"))
                                                         (in-hand? %))}
                                    :effect (effect (corp-install eid target nil nil))
                                    :msg (msg (corp-install-msg target))}
                                   card nil))}

Liquidation

Card #11037

{:delayed-completion true
 :effect (req (let [n (count (filter #(and (rezzed? %)
                                           (not (is-type? % "Agenda"))) (all-installed state :corp)))]
                (continue-ability state side
                  {:prompt "Choose any number of rezzed cards to trash"
                   :choices {:max n :req #(and (rezzed? %) (not (is-type? % "Agenda")))}
                   :msg (msg "trash " (join ", " (map :title targets)) " and gain " (* (count targets) 3) " [Credits]")
                   :effect (req (doseq [c targets]
                                  (trash state side c))
                                (gain state side :credit (* (count targets) 3)))}
                 card nil)))}

Localized Product Line

Card #10075

{:prompt "Choose a card"
 :choices (req (cancellable (:deck corp) :sorted))
 :delayed-completion true
 :effect (req (let [c (:title target)
                    cs (filter #(= (:title %) c) (:deck corp))]
                (continue-ability
                 state side
                 {:prompt "How many copies?"
                  :choices {:number (req (count cs))}
                  :msg (msg "add " target " cop" (if (= target 1) "y" "ies") " of " c " to HQ")
                  :effect (req (shuffle! state :corp :deck)
                               (doseq [c (take target cs)]
                                 (move state side c :hand)))}
                 card nil)))}

Manhunt

Card #06046

{:events {:successful-run {:interactive (req true)
                           :req (req (first-event? state side :successful-run))
                           :trace {:base 2 :msg "give the Runner 1 tag"
                                   :delayed-completion true
                                   :effect (effect (tag-runner :runner eid 1))}}}}

Medical Research Fundraiser

Card #05014

{:msg "gain 8 [Credits]. The Runner gains 3 [Credits]"
 :effect (effect (gain :credit 8) (gain :runner :credit 3))}

Midseason Replacements

Card #02116

{:req (req (:stole-agenda runner-reg))
 :trace {:base 6
         :msg "give the Runner X tags"
         :label "Give the Runner X tags"
         :delayed-completion true
         :effect (effect (system-msg (str "gives the Runner " (- target (second targets)) " tags"))
                         (tag-runner :runner eid (- target (second targets))))}}

Mushin No Shin

Card #05015

{:prompt "Choose a card to install from HQ"
 :choices {:req #(and (#{"Asset" "Agenda" "Upgrade"} (:type %))
                      (= (:side %) "Corp")
                      (in-hand? %))}
 :effect (req (corp-install state side (assoc target :advance-counter 3) "New remote")
              (effect-completed state side eid card)
              (let [tgtcid (:cid target)]
                (register-turn-flag! state side
                  card :can-rez
                  (fn [state side card]
                    (if (= (:cid card) tgtcid)
                      ((constantly false) (toast state :corp "Cannot rez due to Mushin No Shin." "warning"))
                      true)))
                (register-turn-flag! state side
                  card :can-score
                  (fn [state side card]
                    (if (and (= (:cid card) tgtcid)
                             (>= (:advance-counter card) (or (:current-cost card) (:advancementcost card))))
                      ((constantly false) (toast state :corp "Cannot score due to Mushin No Shin." "warning"))
                      true)))))}

Mutate

Card #06004

{:req (req (seq (filter (every-pred rezzed? ice?) (all-installed state :corp))))
 :prompt "Choose a rezzed piece of ICE to trash"
 :choices {:req (every-pred rezzed? ice?)}
 :msg (msg "to trash " (:title target))
 :effect (req (let [i (ice-index state target)
                    [reveal r] (split-with (complement ice?) (get-in @state [:corp :deck]))
                    titles (->> (conj (vec reveal) (first r)) (filter identity) (map :title))]
                (trash state side target {:cause :ability-cost :keep-server-alive true})
                (when (seq titles)
                  (system-msg state side (str "reveals " (clojure.string/join ", " titles) " from R&D")))
                (if-let [ice (first r)]
                  (let [newice (assoc ice :zone (:zone target) :rezzed true)
                        ices (get-in @state (cons :corp (:zone target)))
                        newices (apply conj (subvec ices 0 i) newice (subvec ices i))]
                    (swap! state assoc-in (cons :corp (:zone target)) newices)
                    (swap! state update-in [:corp :deck] (fn [coll] (remove-once #(not= (:cid %) (:cid newice)) coll)))
                    (trigger-event state side :corp-install newice)
                    (card-init state side newice false)
                    (system-msg state side (str "uses Mutate to install and rez " (:title newice) " from R&D at no cost"))
                    (trigger-event state side :rez newice))
                  (system-msg state side (str "does not find any ICE to install from R&D")))
                (shuffle! state :corp :deck)
                (effect-completed state side eid card)))}

Neural EMP

Card #01072

{:req (req (:made-run runner-reg))
 :msg "do 1 net damage"
 :effect (effect (damage eid :net 1 {:card card}))}

Observe and Destroy

Card #11056

{:req (req (and (pos? (:tag runner))
                (< (:credit runner) 6)))
 :delayed-completion true
 :effect (effect (continue-ability
                   {:prompt "Choose an installed card to trash"
                    :choices {:req installed?}
                    :msg (msg "remove 1 Runner tag and trash " (:title target))
                    :effect (effect (lose :runner :tag 1)
                                    (trash target))}
                  card nil))}

Oversight AI

Card #02079

{:implementation "Trashing ICE is manual"
 :choices {:req #(and (ice? %) (not (rezzed? %)) (= (last (:zone %)) :ices))}
 :msg (msg "rez " (:title target) " at no cost")
 :effect (final-effect (rez target {:ignore-cost :all-costs})
                       (host (get-card state target) (assoc card :zone [:discard] :seen true)))}

Patch

Card #07021

{:choices {:req #(and (ice? %) (rezzed? %))}
 :msg (msg "give +2 strength to " (card-str state target))
 :effect (final-effect (host target (assoc card :zone [:discard] :seen true))
                       (update-ice-strength (get-card state target)))
 :events {:pre-ice-strength {:req (req (= (:cid target) (:cid (:host card))))
                             :effect (effect (ice-strength-bonus 2 target))}}}

Paywall Implementation

Card #06028

{:events {:successful-run {:msg "gain 1 [Credits]" :effect (effect (gain :corp :credit 1))}}}

Peak Efficiency

Card #06062

{:msg (msg "gain " (reduce (fn [c server]
                             (+ c (count (filter (fn [ice] (:rezzed ice)) (:ices server)))))
                           0 (flatten (seq (:servers corp))))
           " [Credits]")
 :effect (effect (gain :credit
                       (reduce (fn [c server]
                                 (+ c (count (filter (fn [ice] (:rezzed ice)) (:ices server)))))
                               0 (flatten (seq (:servers corp))))))}

Power Grid Overload

Card #02037

{:trace {:base 2
         :msg "trash 1 piece of hardware"
         :delayed-completion true
         :effect (req (let [max-cost (- target (second targets))]
                        (continue-ability state side
                                          {:choices {:req #(and (is-type? % "Hardware")
                                                                (<= (:cost %) max-cost))}
                                           :msg (msg "trash " (:title target))
                                           :effect (effect (trash target))}
                                          card nil))
                      (system-msg state :corp (str "trashes 1 piece of hardware with install cost less than or equal to " (- target (second targets)))))}}

Power Shutdown

Card #04058

{:req (req (:made-run runner-reg))
 :prompt "Trash how many cards from the top R&D?"
 :choices {:number (req (count (:deck corp)))}
 :msg (msg "trash " target " cards from the top of R&D")
 :delayed-completion true
 :effect (req (mill state :corp target)
              (let [n target]
                (continue-ability state :runner
                                  {:prompt "Choose a Program or piece of Hardware to trash"
                                   :choices {:req #(and (#{"Hardware" "Program"} (:type %))
                                                        (<= (:cost %) n))}
                                   :msg (msg "trash " (:title target))
                                   :effect (effect (trash target))}
                                 card nil)))}

Precognition

Card #01073

{:delayed-completion true
 :msg "rearrange the top 5 cards of R&D"
 :effect (req (show-wait-prompt state :runner "Corp to rearrange the top cards of R&D")
              (let [from (take 5 (:deck corp))]
                (if (pos? (count from))
                  (continue-ability state side (reorder-choice :corp :runner from '()
                                                               (count from) from) card nil)
                  (do (clear-wait-prompt state :runner)
                      (effect-completed state side eid card)))))}

Predictive Algorithm

Card #08017

{:events {:pre-steal-cost {:effect (effect (steal-cost-bonus [:credit 2]))}}}

Preemptive Action

Card #11080

{:msg "remove Preemptive Action from the game"
 :effect (effect (rfg-and-shuffle-rd-effect (first (:play-area corp)) 3))}

Product Recall

Card #10029

{:prompt "Choose a rezzed asset or upgrade to trash"
 :choices {:req #(and (rezzed? %)
                      (or (is-type? % "Asset") (is-type? % "Upgrade")))}
 :effect (req (let [c target]
                (trigger-event state side :pre-trash c)
                (let [tcost (trash-cost state side c)]
                  (trash state side c)
                  (gain state :corp :credit tcost)
                  (resolve-ability state side
                    {:msg (msg "trash " (card-str state c) " and gain " tcost " [Credits]")}
                   card nil)
                  (swap! state update-in [:bonus] dissoc :trash)
                  (effect-completed state side eid card))))}

Psychographics

Card #01085

{:req (req tagged)
 :choices :credit
 :prompt "How many credits?"
 :delayed-completion true
 :effect (req (let [c (min target (:tag runner))]
                (continue-ability state side
                                  {:msg (msg "place " c " advancement tokens on "
                                             (card-str state target))
                                   :choices {:req can-be-advanced?}
                                   :effect (effect (add-prop target :advance-counter c {:placed true}))}
                                  card nil)))}

Punitive Counterstrike

Card #04079

{:trace {:base 5 :msg "do meat damage equal to the number of agenda points stolen last turn"
         :effect (effect (damage eid :meat (or (get-in runner [:register :stole-agenda]) 0) {:card card})
                         (system-msg (str "does " (or (:stole-agenda runner-reg) 0) " meat damage")))}}

Reclamation Order

Card #04111

{:prompt "Choose a card from Archives"
 :show-discard true
 :choices {:req #(and (= (:side %) "Corp")
                      (not= (:title %) "Reclamation Order")
                      (= (:zone %) [:discard]))}
 :msg (msg "name " (:title target))
 :effect (req (let [title (:title target)
                    cards (filter #(= title (:title %)) (:discard corp))
                    n (count cards)]
                (continue-ability state side
                                  {:prompt (str "Choose how many copies of "
                                                title " to reveal")
                                   :choices {:number (req n)}
                                   :msg (msg "reveal " target
                                             " cop" (if (= 1 target) "y" "ies")
                                             " of " title
                                             " from Archives"
                                             (when (pos? target)
                                               (str " and add "
                                                    (if (= 1 target) "it" "them")
                                                    " to HQ")))
                                   :effect (req (doseq [c (->> cards
                                                               (sort-by :seen)
                                                               reverse
                                                               (take target))]
                                                  (move state side c :hand)))}
                                  card nil)))}

Recruiting Trip

Card #08035

(let [rthelp (fn rt [total left selected]
               (if (pos? left)
                 {:prompt (str "Select a sysop (" (inc (- total left)) "/" total ")")
                  :choices (req (cancellable (filter #(and (has-subtype? % "Sysop")
                                                           (not (some #{(:title %)} selected))) (:deck corp)) :sorted))
                  :msg (msg "put " (:title target) " into HQ")
                  :delayed-completion true
                  :effect (req (move state side target :hand)
                               (continue-ability
                                 state side
                                 (rt total (dec left) (cons (:title target) selected))
                                 card nil))}
                 {:effect (effect (shuffle! :corp :deck))
                  :msg (msg "shuffle R&D")}))]
{:prompt "How many sysops?"
 :delayed-completion true
 :choices :credit
 :msg (msg "search for " target " sysops")
 :effect (effect (continue-ability (rthelp target target []) card nil))})

Restoring Face

Card #04094

{:prompt "Choose a Sysop, Executive or Clone to trash"
 :msg (msg "trash " (card-str state target) " to remove 2 bad publicity")
 :choices {:req #(and (rezzed? %)
                      (or (has-subtype? % "Clone")
                          (has-subtype? % "Executive")
                          (has-subtype? % "Sysop")))}
 :effect (final-effect (lose :bad-publicity 2) (trash target))}

Restructure

Card #04040

{:msg "gain 15 [Credits]"
 :effect (effect (gain :credit 15))}

Reuse

Card #06070

{:delayed-completion true
 :effect (req (let [n (count (:hand corp))]
                (continue-ability state side
                  {:prompt (msg "Choose up to " n " cards in HQ to trash with Reuse")
                   :choices {:max n
                             :req #(and (= (:side %) "Corp")
                                        (in-hand? %))}
                   :msg (msg "trash " (count targets) " card" (if (not= 1 (count targets)) "s")
                             " and gain " (* 2 (count targets)) " [Credits]")
                   :effect (effect (trash-cards targets)
                                   (gain :credit (* 2 (count targets))))} card nil)))}

Rework

Card #02093

{:prompt "Choose a card from HQ to shuffle into R&D"
 :choices {:req #(and (in-hand? %)
                      (= (:side %) "Corp"))}
 :msg "shuffle a card from HQ into R&D"
 :effect (final-effect (move target :deck) (shuffle! :deck))}

Salems Hospitality

Card #10071

{:prompt "Name a Runner card"
 :choices {:card-title (req (and (card-is? target :side "Runner")
                                 (not (card-is? target :type "Identity"))))}
 :effect (req (system-msg state side
                          (str "uses Salem's Hospitality to reveal the Runner's Grip ( "
                               (join ", " (map :title (:hand runner)))
                               " ) and trash any copies of " target))
              (doseq [c (filter #(= target (:title %)) (:hand runner))]
                (trash state side c {:unpreventable true})))}

Scarcity of Resources

Card #11060

{:msg "increase the install cost of resources by 2"
 :events {:pre-install {:req (req (and (is-type? target "Resource")
                                       (not (second targets)))) ; not facedown
                        :effect (effect (install-cost-bonus [:credit 2]))}}}

Scorched Earth

Card #01099

{:req (req tagged)
 :delayed-completion true
 :msg "do 4 meat damage"
 :effect (effect (damage eid :meat 4 {:card card}))}

SEA Source

Card #01086

{:req (req (:successful-run runner-reg))
 :trace {:base 3
         :msg "give the Runner 1 tag"
         :label "Give the Runner 1 tag"
         :delayed-completion true
         :effect (effect (tag-runner :runner eid 1))}}

Service Outage

Card #11057

(let [add-effect (fn [state side card]
                   (update! state side (assoc card :so-activated true))
                   (run-cost-bonus state side [:credit 1]))
      remove-effect (fn [state side card]
                      (run-cost-bonus state side [:credit -1])
                      (update! state side (dissoc card :so-activated)))
      remove-ability {:req (req (:so-activated card))
                      :effect (effect (remove-effect card))}]
  {:msg (msg (when (and (= :runner (:active-player @state))
                        (empty? (:made-run runner-reg)))
          "add an additional cost of 1 [Credit] to make the first run this turn"))
   :effect (req (when (and (= :runner (:active-player @state))
                           (empty? (:made-run runner-reg)))
                  (add-effect state side card)))
   :events {:runner-turn-begins {:msg "add an additional cost of 1 [Credit] to make the first run this turn"
                                 :effect (effect (add-effect card))}
            :runner-turn-ends remove-ability
            :run-ends remove-ability}
   :leave-play (req (when (:so-activated card)
                      (remove-effect state side card)))})

Shipment from Kaguya

Card #01100

{:choices {:max 2 :req can-be-advanced?}
 :msg (msg "place 1 advancement token on " (count targets) " cards")
 :effect (req (doseq [t targets] (add-prop state :corp t :advance-counter 1 {:placed true}))
              (effect-completed state side eid card))}

Shipment from MirrorMorph

Card #01060

(let [shelper (fn sh [n] {:prompt "Select a card to install with Shipment from MirrorMorph"
                          :priority -1
                          :delayed-completion true
                          :choices {:req #(and (= (:side %) "Corp")
                                               (not (is-type? % "Operation"))
                                               (in-hand? %))}
                          :effect (req (when-completed
                                         (corp-install state side target nil nil)
                                         (if (< n 3)
                                           (continue-ability state side (sh (inc n)) card nil)
                                           (effect-completed state side eid card))))})]
  {:delayed-completion true
   :effect (effect (continue-ability (shelper 1) card nil))})

Shipment from SanSan

Card #04034

{:choices ["0", "1", "2"]
 :prompt "How many advancement tokens?"
 :delayed-completion true
 :effect (req (let [c (Integer/parseInt target)]
                (continue-ability
                  state side
                  {:choices {:req can-be-advanced?}
                   :msg (msg "place " c " advancement tokens on " (card-str state target))
                   :effect (effect (add-prop :corp target :advance-counter c {:placed true}))}
                  card nil)))}

Shoot the Moon

Card #06107

{:choices {:req #(and (ice? %) (not (rezzed? %)))
           :max (req (min (:tag runner)
                          (reduce (fn [c server]
                                    (+ c (count (filter #(not (:rezzed %)) (:ices server)))))
                                  0 (flatten (seq (:servers corp))))))}
 :req (req tagged)
 :effect (req (doseq [t targets] (rez state side t {:ignore-cost :all-costs}))
              (effect-completed state side eid card))}

Snatch and Grab

Card #06090

{:trace {:msg "trash a connection"
         :base 3
         :choices {:req #(has-subtype? % "Connection")}
         :delayed-completion true
         :effect (req (let [c target]
                        (continue-ability
                          state side
                          {:prompt (msg "Take 1 tag to prevent " (:title c) " from being trashed?")
                           :choices ["Yes" "No"] :player :runner
                           :delayed-completion true
                           :effect (effect (continue-ability
                                             (if (= target "Yes")
                                               {:msg (msg "take 1 tag to prevent " (:title c)
                                                          " from being trashed")
                                                :delayed-completion true
                                                :effect (effect (tag-runner eid 1 {:unpreventable true}))}
                                               {:delayed-completion true
                                                :effect (effect (trash eid c nil))
                                                :msg (msg "trash " (:title c))})
                                             card nil))}
                          card nil)))}}

Special Report

Card #11035

{:prompt "Choose any number of cards in HQ to shuffle into R&D"
 :choices {:max (req (count (:hand corp)))
           :req #(and (= (:side %) "Corp")
                      (in-hand? %))}
 :msg (msg "shuffle " (count targets) " cards in HQ into R&D and draw " (count targets) " cards")
 :effect (req (doseq [c targets]
                (move state side c :deck))
              (shuffle! state side :deck)
              (draw state side (count targets))
              (effect-completed state side eid card))}

Stock Buy-Back

Card #11019

{:msg (msg "gain " (* 3 (count (:scored runner))) " [Credits]")
 :effect (effect (gain :credit (* 3 (count (:scored runner)))))}

Sub Boost

Card #07025

{:choices {:req #(and (ice? %) (rezzed? %))}
 :msg (msg "make " (card-str state target) " gain Barrier and \"[Subroutine] End the run\"")
 :effect (effect (update! (assoc target :subtype (combine-subtypes true (:subtype target) "Barrier")))
                 (update-ice-strength target)
                 (host (get-card state target) (assoc card :zone [:discard] :seen true)))}

Subcontract

Card #10113

(letfn [(sc [i sccard]
          {:prompt "Select an operation in HQ to play"
           :choices {:req #(and (= (:side %) "Corp")
                                (is-type? % "Operation")
                                (in-hand? %))}
           :delayed-completion true
           :msg (msg "play " (:title target))
           :effect (req (when-completed (play-instant state side target)
                                        (if (and (not (get-in @state [:corp :register :terminal])) (< i 2))
                                            (continue-ability state side (sc (inc i) sccard) sccard nil)
                                            (effect-completed state side eid))))})]
  {:req (req tagged)
   :delayed-completion true
   :effect (effect (continue-ability (sc 1 card) card nil))})

Subliminal Messaging

Card #04100

(letfn [(subliminal []
          {:corp-phase-12
           {:effect
            (req (if (not (:made-run runner-reg))
                   (do (resolve-ability state side
                                        {:optional
                                         {:prompt "Add Subliminal Messaging to HQ?"
                                          :yes-ability {:effect (req (move state side card :hand)
                                                                     (system-msg state side "adds Subliminal Messaging to HQ"))}
                                          :no-ability {:effect (effect (register-events (subliminal) (assoc card :zone '(:discard))))}}}
                                        card nil)
                       (unregister-events state side card))
                   (do (unregister-events state side card)
                       (resolve-ability state side
                                        {:effect (effect (register-events (subliminal) (assoc card :zone '(:discard))))}
                                        card nil))))}})]
  {:msg "gain 1 [Credits]"
   :effect (effect (gain :credit 1)
                   (resolve-ability {:once :per-turn :once-key :subliminal-messaging
                                     :msg "gain [Click]"
                                     :effect (effect (gain :corp :click 1))} card nil))
   :move-zone (req (if (= [:discard] (:zone card))
                     (register-events state side (subliminal) (assoc card :zone '(:discard)))
                     (unregister-events state side card)))
   :events {:corp-phase-12 nil}})

Successful Demonstration

Card #03014

{:req (req (:unsuccessful-run runner-reg))
 :msg "gain 7 [Credits]"
 :effect (effect (gain :credit 7))}

Sunset

Card #02054

(letfn [(sun [serv]
          {:prompt "Select two pieces of ICE to swap positions"
           :choices {:req #(and (= serv (rest (butlast (:zone %)))) (ice? %))
                     :max 2}
           :delayed-completion true
           :effect (req (if (= (count targets) 2)
                          (do (swap-ice state side (first targets) (second targets))
                              (continue-ability state side (sun serv) card nil))
                          (do (system-msg state side "has finished rearranging ICE")
                              (effect-completed state side eid card))))})]
  {:prompt "Choose a server"
   :choices (req servers)
   :delayed-completion true
   :msg (msg "rearrange ICE protecting " target)
   :effect (req (let [serv (next (server->zone state target))]
                  (continue-ability state side (sun serv) card nil)))})

Sweeps Week

Card #04076

{:effect (effect (gain :credit (count (:hand runner))))
 :msg (msg "gain " (count (:hand runner)) " [Credits]")}

Targeted Marketing

Card #06026

(let [gaincr {:req (req (= (:title target) (:marketing-target card)))
              :effect (effect (gain :corp :credit 10))
              :msg (msg "gain 10 [Credits] from " (:marketing-target card))}]
{:prompt "Name a Runner card"
 :choices {:card-title (req (and (card-is? target :side "Runner")
                                 (not (card-is? target :type "Identity"))))}
 :effect (effect (update! (assoc card :marketing-target target))
                 (system-msg (str "uses Targeted Marketing to name " target)))
 :events {:runner-install gaincr
          :play-event gaincr}})

The All-Seeing I

Card #09022

(let [trash-all-resources {:player :runner
                           :effect (req (doseq [resource (get-in runner [:rig :resource])]
                                          (trash state side resource)))
                           :msg (msg "trash all resources")}]
    {:req (req tagged)
     :delayed-completion true
     :effect (effect
              (continue-ability
                (if-not (zero? (:bad-publicity corp)) ;; If corp's bad-pub is 0
                  {:optional {:player :runner
                              :prompt "Remove 1 bad publicity from the corp to prevent all resources from being trashed?"
                              :yes-ability {:effect (effect (lose :corp :bad-publicity 1))
                                            :player :corp
                                            :msg (msg "lose 1 bad publicity, preventing all resources from being trashed")}
                              :no-ability trash-all-resources}}
                 trash-all-resources)
               card targets))})

Traffic Accident

Card #07022

{:req (req (>= (:tag runner) 2))
 :msg "do 2 meat damage"
 :delayed-completion true
 :effect (effect (damage eid :meat 2 {:card card}))}

Trick of Light

Card #02033

{:choices {:req #(and (contains? % :advance-counter) (> (:advance-counter %) 0))}
 :delayed-completion true
 :effect (req (let [fr target tol card]
                (continue-ability
                  state side
                  {:prompt "Move how many advancement tokens?"
                   :choices (take (inc (:advance-counter fr)) ["0" "1" "2"])
                   :delayed-completion true
                   :effect (req (let [c (Integer/parseInt target)]
                                  (continue-ability
                                    state side
                                    {:prompt  "Move to where?"
                                     :choices {:req #(and (not= (:cid fr) (:cid %))
                                                          (can-be-advanced? %))}
                                     :effect  (effect (add-prop :corp target :advance-counter c {:placed true})
                                                      (add-prop :corp fr :advance-counter (- c) {:placed true})
                                                      (system-msg (str "moves " c " advancement tokens from "
                                                                       (card-str state fr) " to " (card-str state target))))}
                                    tol nil)))}
                  card nil)))}

Wetwork Refit

Card #11071

{:choices {:req #(and (ice? %)
                      (has-subtype? % "Bioroid")
                      (rezzed? %))}
 :msg (msg "give " (card-str state target) "\"[Subroutine] Do 1 brain damage\" before all its other subroutines")
 :effect (effect (update! (assoc target :subroutines (cons (do-brain-damage 1) (:subroutines target))))
                 (host (get-card state target) (assoc card :zone [:discard] :seen true)))
 :leave-play (effect (update! (assoc (:host card) :subroutines (rest (:subroutines (:host card))))))}

Violet Level Clearance

Card #11111

{:msg "gain 8 [Credits] and draw 4 cards"
 :effect (effect (gain :credit 8) (draw 4))}

Voter Intimidation

Card #10106

{:req (req (seq (:scored runner)))
 :psi {:not-equal {:player :corp :prompt "Choose a resource to trash"
                   :choices {:req #(and (installed? %)
                                        (is-type? % "Resource"))}
                   :msg (msg "trash " (:title target))
                   :effect (effect (trash target))}}}

Witness Tampering

Card #04118

{:msg "remove 2 bad publicity"
 :effect (effect (lose :bad-publicity 2))}