Assets

Adonis Campaign

Card #01056

(campaign 12 3)

Advanced Assembly Lines

Card #10027

{:effect (effect (gain :credit 3))
 :msg (msg "gain 3 [Credits]")
 :abilities [{:label "[Trash]: Install a non-agenda card from HQ"
              :effect (effect (trash card) (corp-install target nil))
              :msg (msg (corp-install-msg target))
              :prompt "Choose a non-agenda card to install from HQ"
              :priority true
              :req (req (not (:run @state)))
              :choices {:req #(and (not (is-type? % "Operation"))
                                   (not (is-type? % "Agenda"))
                                   (= (:zone %) [:hand])
                                   (= (:side %) "Corp"))}}]}

Aggressive Secretary

Card #01057

(advance-ambush 2 {:req (req (< 0 (:advance-counter (get-card state card) 0)))
                   :delayed-completion true
                   :effect
                   (req (let [agg (get-card state card)
                              n (:advance-counter agg 0)
                              ab (-> trash-program
                                     (assoc-in [:choices :max] n)
                                     (assoc :prompt (msg "Choose " n " program" (when (> n 1) "s") " to trash")
                                            :delayed-completion true
                                            :effect (effect (trash-cards eid targets nil))
                                            :msg (msg "trash " (join ", " (map :title targets)))))]
                          (continue-ability state side ab agg nil)))})

Alexa Belsky

Card #11055

{:abilities [{:label "[Trash]: Shuffle all cards in HQ into R&D"
              :effect (req (trash state side card)
                           (do (show-wait-prompt state :corp "Runner to decide whether or not to prevent Alexa Belsky")
                               (resolve-ability
                                 state side
                                 {:prompt "How many credits?"
                                  :choices :credit :player :runner
                                  :msg (msg "shuffle " (- (count (:hand corp)) (quot target 2)) " card"
                                            (when-not (= 1 (- (count (:hand corp)) (quot target 2))) "s")
                                            " in HQ into R&D")
                                  :effect (req (if (pos? (quot target 2))
                                                 (do (doseq [c (take (- (count (:hand corp)) (quot target 2))
                                                                     (shuffle (:hand corp)))]
                                                       (move state :corp c :deck))
                                                     (shuffle! state :corp :deck)
                                                     (system-msg state :runner
                                                                 (str "pays " target " [Credits] to prevent "
                                                                      (quot target 2) " random card"
                                                                      (when (> (quot target 2) 1) "s")
                                                                      " in HQ from being shuffled into R&D")))
                                                 (shuffle-into-deck state :corp :hand))
                                               (clear-wait-prompt state :corp))} card nil)))}]}

Alix T4LB07

Card #03008

{:events {:corp-install {:effect (effect (add-counter card :power 1))}}
 :abilities [{:cost [:click 1] :label "Gain 2 [Credits] for each counter on Alix T4LB07"
              :msg (msg "gain " (* 2 (get-in card [:counter :power] 0)) " [Credits]")
              :effect (effect (gain :credit (* 2 (get-in card [:counter :power] 0)))
                              (trash card))}]}

Allele Repression

Card #08073

{:implementation "Card swapping is manual"
 :advanceable :always
 :abilities [{:label "Swap 1 card in HQ and Archives for each advancement token"
              :effect (effect (trash card))
              :msg (msg "swap " (:advance-counter card 0) " cards in HQ and Archives")}]}

Anson Rose

Card #11096

(let [ability {:label "Place 1 advancement token on Anson Rose (start of turn)"
               :once :per-turn
               :effect (effect (add-prop card :advance-counter 1 {:placed true}))}]
  {:derezzed-events {:runner-turn-ends corp-rez-toast}
   :flags {:corp-phase-12 (req true)}
   :events {:corp-turn-begins ability
            :rez {:req (req (and (ice? target) (pos? (:advance-counter card 0))))
                  :delayed-completion true
                  :effect (req (let [ice (get-card state target)
                                     icename (:title ice)]
                                 (show-wait-prompt state :runner "Corp to use Anson Rose")
                                 (continue-ability state side
                                   {:optional
                                    {:prompt (msg "Move advancement tokens from Anson Rose to " icename "?")
                                     :yes-ability {:prompt "Choose how many advancement tokens to remove from Anson Rose"
                                                   :choices {:number (req (:advance-counter card))}
                                                   :effect (effect (clear-wait-prompt :runner)
                                                                   (add-prop :corp ice :advance-counter target {:placed true})
                                                                   (add-prop :corp card :advance-counter (- target) {:placed true})
                                                                   (system-msg (str "uses Anson Rose to move " target " advancement tokens to "
                                                                                    (card-str state ice))))}
                                     :no-ability {:effect (effect (clear-wait-prompt :runner))}}}
                                  card nil)))}}
   :abilities [ability]})

Aryabhata Tech

Card #10070

{:events {:successful-trace {:msg "gain 1 [Credit] and force the Runner to lose 1 [Credit]"
                             :effect (effect (gain :credit 1)
                                             (lose :runner :credit 1))}}}

Bio-Ethics Association

Card #10050

(let [ability {:req (req unprotected)
               :delayed-completion true
               :label "Do 1 net damage (start of turn)"
               :once :per-turn
               :msg "do 1 net damage"
               :effect (effect (damage eid :net 1 {:card card}))}]
  {:derezzed-events {:runner-turn-ends corp-rez-toast}
   :events {:corp-turn-begins ability}
   :abilities [ability]})

Blacklist

Card #08036

{:effect (effect (lock-zone (:cid card) :runner :discard))
 :leave-play (effect (release-zone (:cid card) :runner :discard))}

Brain-Taping Warehouse

Card #08010

{:events {:pre-rez
          {:req (req (and (ice? target) (has-subtype? target "Bioroid")))
           :effect (effect (rez-cost-bonus (- (:click runner))))}}}

Broadcast Square

Card #04112

{:implementation "Removes 1 bad publicity rather than prevent it"
 :abilities [{:label "Trace 3 - Avoid taking a bad publicity"
              :trace {:base 3 :msg "avoid taking a bad publicity"
                      :effect (effect (lose :bad-publicity 1))}}]}

Bryan Stinson

Card #11117

{:abilities [{:cost [:click 1]
              :req (req (and (< (:credit runner) 6)
                             (< 0 (count (filter #(is-type? % "Operation") (:discard corp))))))
              :label "Play an operation from Archives ignoring all costs and remove it from the game"
              :prompt "Choose an operation to play"
              :msg (msg "play " (:title target) " from Archives ignoring all costs and remove it from the game")
              :choices (req (cancellable (filter #(is-type? % "Operation") (:discard corp)) :sorted))
              :effect (effect (play-instant nil target {:ignore-cost true}) (move target :rfg))}]}

Capital Investors

Card #08018

{:abilities [{:cost [:click 1] :effect (effect (gain :credit 2)) :msg "gain 2 [Credits]"}]}

Cerebral Overwriter

Card #03009

(advance-ambush 3 {:req (req (< 0 (:advance-counter (get-card state card) 0)))
                   :msg (msg "do " (:advance-counter (get-card state card) 0) " brain damage")
                   :delayed-completion true
                   :effect (effect (damage eid :brain (:advance-counter (get-card state card) 0) {:card card}))})

Chairman Hiro

Card #05008

{:effect (effect (lose :runner :hand-size-modification 2))
 :leave-play (effect (gain :runner :hand-size-modification 2))
 :trash-effect {:when-inactive true
                :req (req (:access @state))
                :msg "add it to the Runner's score area as an agenda worth 2 agenda points"
                :effect (effect (as-agenda :runner card 2))}}

Chief Slee

Card #11077

{:abilities [{:label "Add 1 power counter"
              :effect (effect (add-counter card :power 1)
                              (system-msg (str "adds 1 power counter to Chief Slee")))}
             {:counter-cost [:power 5] :cost [:click 1]
              :delayed-completion true
              :msg "do 5 meat damage"
              :effect (effect (damage eid :meat 5 {:card card}))}]}

C.I. Fund

Card #11036

{:derezzed-events {:runner-turn-ends corp-rez-toast}
 :flags {:corp-phase-12 (req (> (:credit corp) 0))}
 :abilities [{:label "Move up to 3 [Credit] from credit pool to C.I. Fund"
              :prompt "Choose how many [Credit] to move" :once :per-turn
              :choices {:number (req (min (:credit corp) 3))}
              :effect (effect (lose :credit target)
                              (add-counter card :credit target))
              :msg (msg "move " target " [Credit] to C.I. Fund")}
             {:label "Take all credits from C.I. Fund"
              :cost [:credit 2]
              :msg (msg "trash it and gain " (get-in card [:counter :credit] 0) " [Credits]")
              :effect (effect (gain :credit (get-in card [:counter :credit] 0))
                              (trash card {:cause :ability-cost}))}]
 :events {:corp-turn-begins {:req (req (>= (get-in card [:counter :credit] 0) 6))
                             :effect (effect (add-counter card :credit 2)
                                             (system-msg (str "adds 2 [Credit] to C.I. Fund")))}}}

City Surveillance

Card #04055

{:events {:runner-turn-begins
          {:prompt "Pay 1 [Credits] or take 1 tag" :choices ["Pay 1 [Credits]" "Take 1 tag"]
           :player :runner :msg "make the Runner pay 1 [Credits] or take 1 tag"
           :delayed-completion true
           :effect (req (if-not (and (= target "Pay 1 [Credits]")
                                     (pay state side card :credit 1)
                                     (effect-completed state side eid))
                          (do (tag-runner state side eid 1)
                              (system-msg state side "takes 1 tag"))
                          (system-msg state side "pays 1 [Credits]")))}}}

Clone Suffrage Movement

Card #10049

{:derezzed-events {:runner-turn-ends corp-rez-toast}
 :flags {:corp-phase-12 (req (and (some #(is-type? % "Operation") (:discard corp))
                                  unprotected))}
 :abilities [{:label "Add 1 operation from Archives to HQ"
              :prompt "Choose an operation in Archives to add to HQ" :show-discard true
              :choices {:req #(and (is-type? % "Operation")
                                   (= (:zone %) [:discard]))}
              :effect (effect (move target :hand)) :once :per-turn
              :msg (msg "add " (if (:seen target) (:title target) "a facedown card") " to HQ")}]}

Commercial Bankers Group

Card #10054

(let [ability {:req (req unprotected)
               :label "Gain 3 [Credits] (start of turn)"
               :once :per-turn
               :msg "gain 3 [Credits]"
               :effect (effect (gain :credit 3))}]
  {:derezzed-events {:runner-turn-ends corp-rez-toast}
   :events {:corp-turn-begins ability}
   :abilities [ability]})

Constellation Protocol

Card #07008

{:derezzed-events {:runner-turn-ends corp-rez-toast}
 :flags {:corp-phase-12
         (req (let [tokens (filter #(pos? (:advance-counter % 0)) (all-installed state :corp))
                    advanceable (filter #(can-be-advanced? %) (all-installed state :corp))]
                (when (and (not-empty tokens) (not-empty (clojure.set/difference (set advanceable) (set tokens))))
                  true)))}
 :once :per-turn
 :abilities [{:label "Move an advancement token between ICE"
              :choices {:req #(and (ice? %) (:advance-counter %))}
              :priority true
              :effect (req (let [fr target]
                             (resolve-ability
                               state side
                               {:priority true
                                :prompt "Move to where?"
                                :choices {:req #(and (ice? %)
                                                     (not= (:cid fr) (:cid %))
                                                     (can-be-advanced? %))}
                                :effect (effect (add-prop :corp target :advance-counter 1)
                                                (add-prop :corp fr :advance-counter -1)
                                                (system-msg (str "uses Constellation Protocol to move an advancement token from "
                                                                 (card-str state fr) " to " (card-str state target))))} card nil)
                             card nil))}]}

Contract Killer

Card #08078

{:advanceable :always
 :abilities [{:label "Trash a connection" :cost [:click 1] :req (req (>= (:advance-counter card) 2))
              :choices {:req #(has-subtype? % "Connection")}
              :msg (msg "to trash " (:title target)) :effect (effect (trash card) (trash target))}
             {:cost [:click 1] :req (req (>= (:advance-counter card) 2))
              :delayed-completion true
              :msg "do 2 meat damage"
              :effect (effect (trash card) (damage eid :meat 2 {:card card}))}]}

Corporate Town

Card #08059

{:additional-cost [:forfeit]
 :derezzed-events {:runner-turn-ends corp-rez-toast}
 ; not-empty doesn't work for the next line, because it does not return literal true; it returns the collection.
 ; flags need exact equality of value to work.
 :flags {:corp-phase-12 (req (and (pos? (count (filter #(card-is? % :type "Resource") (all-installed state :runner))))
                                  (:rezzed card)))}
 :abilities [{:label "Trash a resource"
              :prompt "Choose a resource to trash with Corporate Town"
              :choices {:req #(is-type? % "Resource")}
              :msg (msg "trash " (:title target))
              :effect (effect (trash target {:unpreventable true}))}]}

Cybernetics Court

Card #08109

{:in-play [:hand-size-modification 4]}

Daily Business Show

Card #06086

{:events {:pre-corp-draw
          {:msg "draw additional cards"
           :once :per-turn
           :once-key :daily-business-show-draw-bonus
           :req (req (first-event? state side :pre-corp-draw))
           :effect (req (let [dbs (count (filter #(and (= "06086" (:code %)) (rezzed? %)) (all-installed state :corp)))]
                          (draw-bonus state side dbs)))}
          :post-corp-draw
          {:once :per-turn
           :once-key :daily-business-show-put-bottom
           :delayed-completion true
           :effect (req (let [dbs (count (filter #(and (= "06086" (:code %)) (rezzed? %)) (all-installed state :corp)))
                              drawn (get-in @state [:corp :register :most-recent-drawn])]
                          (continue-ability
                            state side
                            {:prompt (str "Choose " dbs " card" (when (> dbs 1) "s") " to add to the bottom of R&D")
                             :msg (msg "add " dbs " card" (when (> dbs 1) "s") " to the bottom of R&D")
                             :choices {:max dbs
                                       :req #(some (fn [c] (= (:cid c) (:cid %))) drawn)}
                             :effect (req (doseq [c targets] (move state side c :deck)))} card targets)))}}}

Dedicated Response Team

Card #02118

{:events {:successful-run-ends {:req (req tagged)
                                :msg "do 2 meat damage"
                                :delayed-completion true
                                :effect (effect (damage eid :meat 2 {:card card}))}}}

Dedicated Server

Card #02072

{:recurring 2}

Director Haas

Card #03010

{:in-play [:click 1 :click-per-turn 1]
 :trash-effect {:when-inactive true
                :req (req (:access @state))
                :msg "add it to the Runner's score area as an agenda worth 2 agenda points"
                :effect (effect (as-agenda :runner card 2))}}

Docklands Crackdown

Card #06072

{:abilities [{:cost [:click 2]
              :msg "add 1 power counter"
              :effect (effect (add-counter card :power 1))}]
 :events {:pre-install {:req (req (and (not (zero? (get-in  card [:counter :power])))
                                       (not (get-in @state [:per-turn (:cid card)]))))
                        :effect (effect (install-cost-bonus [:credit (get-in card [:counter :power])]))}
          :runner-install {:silent (req true)
                           :req (req (and (not (zero? (get-in card [:counter :power])))
                                          (not (get-in @state [:per-turn (:cid card)]))))
                           :msg (msg "increase the install cost of " (:title target) " by " (get-in card [:counter :power]) " [Credits]")
                           :effect (req (swap! state assoc-in [:per-turn (:cid card)] true))}}}

Early Premiere

Card #08095

{:derezzed-events {:runner-turn-ends corp-rez-toast}
 :flags {:corp-phase-12 (req (some #(and (can-be-advanced? %) (in-server? %)) (all-installed state :corp)))}
 :abilities [{:cost [:credit 1] :label "Place 1 advancement token on a card that can be advanced in a server"
              :choices {:req #(and (can-be-advanced? %)
                                   (installed? %)
                                   (in-server? %))} ; should be *in* a server
              :effect (effect (add-prop target :advance-counter 1 {:placed true})) :once :per-turn
              :msg (msg "place 1 advancement token on " (card-str state target))}]}

Edge of World

Card #02053

(letfn [(ice-count [state]
          (count (get-in (:corp @state) [:servers (last (:server (:run @state))) :ices])))]
  (installed-access-trigger 3 {:msg (msg "do " (ice-count state) " brain damage")
                               :delayed-completion true
                               :effect (effect (damage eid :brain (ice-count state)
                                                       {:card card}))}))

Elizabeth Mills

Card #04037

{:effect (effect (lose :bad-publicity 1)) :msg "remove 1 bad publicity"
 :abilities [{:cost [:click 1] :label "Trash a location"
              :msg (msg "trash " (:title target) " and take 1 bad publicity")
              :choices {:req #(has-subtype? % "Location")}
              :effect (effect (trash card) (trash target) (gain :bad-publicity 1))}]}

Elizas Toybox

Card #06042

{:abilities [{:cost [:click 3] :choices {:req #(not (:rezzed %))}
              :label "Rez a card at no cost" :msg (msg "rez " (:title target) " at no cost")
              :effect (effect (rez target {:ignore-cost :all-costs}))}]}

Encryption Protocol

Card #02029

{:events {:pre-trash {:req (req (installed? target))
                      :effect (effect (trash-cost-bonus 1))}}}

Eve Campaign

Card #02092

(campaign 16 2)

Executive Boot Camp

Card #06088

{:derezzed-events {:runner-turn-ends corp-rez-toast}
 :flags {:corp-phase-12 (req (some #(not (rezzed? %)) (all-installed state :corp)))}
 :abilities [{:choices {:req (complement rezzed?)}
              :label "Rez a card, lowering the cost by 1 [Credits]"
              :msg (msg "rez " (:title target))
              :effect (effect (rez-cost-bonus -1)
                              (rez target {:no-warning true})
                              (update! (assoc card :ebc-rezzed (:cid target))))}
             {:prompt "Choose an asset to add to HQ"
              :msg (msg "add " (:title target) " to HQ")
              :activatemsg "searches R&D for an asset"
              :choices (req (cancellable (filter #(is-type? % "Asset")
                                                 (:deck corp))
                                         :sorted))
              :cost [:credit 1]
              :label "Search R&D for an asset"
              :effect (effect (trash card)
                              (shuffle! :deck)
                              (move target :hand))}]
 ; A card rezzed by Executive Bootcamp is ineligible to receive the turn-begins event for this turn.
 :suppress {:corp-turn-begins {:req (req (= (:cid target) (:ebc-rezzed (get-card state card))))}}
 :events {:corp-turn-ends {:req (req (:ebc-rezzed card))
                           :effect (effect (update! (dissoc card :ebc-rezzed)))}}}

Executive Search Firm

Card #10072

{:abilities [{:prompt "Choose an executive, sysop, or character to add to HQ"
              :msg (msg "add " (:title target) " to HQ and shuffle R&D")
              :activatemsg "searches R&D for an executive, sysop, or character"
              :choices (req (cancellable (filter #(or (has-subtype? % "Executive")
                                                      (has-subtype? % "Sysop")
                                                      (has-subtype? % "Character"))
                                                 (:deck corp))
                                         :sorted))
              :cost [:click 1]
              :label "Search R&D for an executive, sysop, or character"
              :effect (effect (move target :hand) (shuffle! :deck))}]}

Exposé

Card #08075

{:advanceable :always
 :abilities [{:label "Remove 1 bad publicity for each advancement token on Exposé"
              :msg (msg "remove " (:advance-counter card) " bad publicity")
              :effect (effect (trash card) (lose :bad-publicity (:advance-counter card)))}]}

Franchise City

Card #08114

{:events {:access {:req (req (is-type? target "Agenda"))
                   :msg "add it to their score area as an agenda worth 1 agenda point"
                   :effect (effect (as-agenda :corp card 1))}}}

Full Immersion RecStudio

Card #10108

{:can-host (req (and (or (is-type? target "Asset") (is-type? target "Agenda"))
                     (> 2 (count (:hosted card)))))
 :trash-cost-bonus (req (* 3 (count (:hosted card))))
 :abilities [{:label "Install an asset or agenda on Full Immersion RecStudio"
              :req (req (< (count (:hosted card)) 2))
              :cost [:click 1]
              :prompt "Choose an asset or agenda to install"
              :choices {:req #(and (or (is-type? % "Asset") (is-type? % "Agenda"))
                                   (in-hand? %)
                                   (= (:side %) "Corp"))}
              :msg "install and host an asset or agenda"
              :effect (req (corp-install state side target card))}]}

Fumiko Yamamori

Card #11073

{:events {:psi-game {:req (req (not= (first targets) (second targets)))
                     :delayed-completion true
                     :msg "do 1 meat damage"
                     :effect (effect (damage eid :meat 1 {:card card}))}}}

Genetics Pavilion

Card #08113

{:msg "prevent the Runner from drawing more than 2 cards during their turn"
 :effect (req (max-draw state :runner 2)
              (when (= 0 (remaining-draws state :runner))
                (prevent-draw state :runner)))
 :events {:runner-turn-begins {:effect (effect (max-draw :runner 2))}}
 :leave-play (req (swap! state update-in [:runner :register] dissoc :max-draw :cannot-draw))}

Ghost Branch

Card #01087

(advance-ambush 0 {:delayed-completion true
                   :req (req (< 0 (:advance-counter (get-card state card) 0)))
                   :msg (msg "give the Runner " (:advance-counter (get-card state card) 0) " tag"
                             (when (> (:advance-counter (get-card state card) 0) 1) "s"))
                   :effect (effect (tag-runner :runner eid (:advance-counter (get-card state card) 0)))})

GRNDL Refinery

Card #04099

{:advanceable :always
 :abilities [{:label "Gain 4 [Credits] for each advancement token on GRNDL Refinery"
              :cost [:click 1] :msg (msg "gain " (* 4 (get card :advance-counter 0)) " [Credits]")
              :effect (effect (trash card) (gain :credit (* 4 (get card :advance-counter 0))))}]}

Haas Arcology AI

Card #03011

{:advanceable :while-unrezzed
 :abilities [{:label "Gain [Click]" :once :per-turn :msg "gain [Click]"
              :cost [:click 1] :advance-counter-cost 1 :effect (effect (gain :click 2))}]}

Hostile Infrastructure

Card #06083

{:events {:runner-trash {:delayed-completion true
                         :req (req (some #(card-is? % :side :corp) targets))
                         :msg (msg (str "do " (count (filter #(card-is? % :side :corp) targets))
                                        " net damage"))
                         :effect (effect (damage eid :net (count (filter #(card-is? % :side :corp) targets))
                                                 {:card card}))}}
 :abilities [{:msg "do 1 net damage"
              :delayed-completion true
              :effect (effect (damage eid :net 1 {:card card}))}]}

Hyoubu Research Facility

Card #11012

{:events {:psi-bet-corp {:once :per-turn
                         :msg (msg "gain " target " [Credits]")
                         :effect (effect (gain :corp :credit target))}}}

Ibrahim Salem

Card #10109

(let [trash-ability (fn [type] {:req (req (seq (filter #(is-type? % type) (:hand runner))))
                                :prompt (str "Choose a " type " to trash")
                                :choices (req (filter #(is-type? % type) (:hand runner)))
                                :effect (effect (trash target))
                                :msg (msg " trash " (:title target) " from the Runner's Grip")})
      choose-ability {:label "Trash 1 card in the Runner's Grip of a named type"
                      :once :per-turn
                      :req (req (seq (:hand runner)))
                      :prompt "Choose a card type"
                      :choices ["Event" "Hardware" "Program" "Resource"]
                      :msg (msg "reveal " (join ", " (map :title (:hand runner))) " and trash a " target)
                      :effect (effect (resolve-ability (trash-ability target) card nil))}]
  {:additional-cost [:forfeit]
   :flags {:corp-phase-12 (constantly true)}
   :derezzed-events {:runner-turn-ends corp-rez-toast}
   :abilities [choose-ability]})

Indian Union Stock Exchange

Card #10073

(let [iuse {:req (req (not= (:faction target) (:faction (:identity corp))))
            :msg "gain 1 [Credits]"
            :effect (effect (gain :credit 1))}]
  {:events {:play-operation iuse :rez iuse}})

Isabel McGuire

Card #04050

{:abilities [{:cost [:click 1] :label "Add an installed card to HQ"
              :choices {:req installed?}
              :msg (msg "move " (card-str state target) " to HQ")
              :effect (effect (move target :hand))}]}

IT Department

Card #06103

{:abilities [{:counter-cost [:power 1]
              :label "Add strength to a rezzed ICE"
              :choices {:req #(and (ice? %) (:rezzed %))}
              :req (req (< 0 (get-in card [:counter :power] 0)))
              :msg (msg "add strength to a rezzed ICE")
              :effect (req (update! state side (update-in card [:it-targets (keyword (str (:cid target)))]
                                                          (fnil inc 0)))
                           (update-ice-strength state side target))}
             {:cost [:click 1]
              :msg "add 1 counter"
              :effect (effect (add-counter card :power 1))}]
 :events (let [it {:req (req (:it-targets card))
                   :effect (req (update! state side (dissoc card :it-targets))
                                (update-all-ice state side))}]
           {:pre-ice-strength {:req (req (get-in card [:it-targets (keyword (str (:cid target)))]))
                               :effect (effect (ice-strength-bonus
                                                 (* (get-in card [:it-targets (keyword (str (:cid target)))])
                                                    (inc (get-in card [:counter :power]))) target))}
            :runner-turn-ends it :corp-turn-ends it})}

Jackson Howard

Card #04015

{:abilities [{:cost [:click 1] :effect (effect (draw 2)) :msg "draw 2 cards"}
             {:label "Shuffle up to 3 cards from Archives into R&D"
              :activatemsg "removes Jackson Howard from the game"
              :effect (effect (rfg-and-shuffle-rd-effect card 3))}]}

Jeeves Model Bioroids

Card #10067

{:implementation "Trigger is manual"
 :abilities [{:label "Gain [Click]"
              :msg "gain [Click]" :once :per-turn
              :effect (effect (gain :click 1))}]}

Kala Ghoda Real TV

Card #10015

{:flags {:corp-phase-12 (req true)}
 :abilities [{:msg "look at the top card of the Runner's Stack"
               :effect (effect (prompt! card (str "The top card of the Runner's Stack is "
                                                  (:title (first (:deck runner)))) ["OK"] {}))}
             {:label "[Trash]: Trash the top card of the Runner's Stack"
              :msg (msg "trash " (:title (first (:deck runner))) " from the Runner's Stack")
              :effect (effect (mill :runner)
                              (trash card {:cause :ability-cost}))}]}

Lakshmi Smartfabrics

Card #10028

{:events {:rez {:effect (effect (add-counter card :power 1))}}
 :abilities [{:req (req (seq (filter #(and (is-type? % "Agenda")
                                           (>= (get-in card [:counter :power] 0)
                                               (:agendapoints %)))
                                     (:hand corp))))
              :label "X power counters: Reveal an agenda worth X points from HQ"
              :effect (req (let [c (get-in card [:counter :power])]
                             (resolve-ability
                               state side
                               {:prompt "Choose an agenda in HQ to reveal"
                                :choices {:req #(and (is-type? % "Agenda")
                                                     (>= c (:agendapoints %)))}
                                :msg (msg "reveal " (:title target) " from HQ")
                                :effect (req (let [title (:title target)
                                                   pts (:agendapoints target)]
                                               (register-turn-flag! state side
                                                 card :can-steal
                                                 (fn [state side card]
                                                   (if (= (:title card) title)
                                                     ((constantly false)
                                                      (toast state :runner "Cannot steal due to Lakshmi Smartfabrics." "warning"))
                                                     true)))
                                               (add-counter state side card :power (- pts))))} card nil)))}]}

Launch Campaign

Card #09027

(campaign 6 2)

Levy University

Card #03024

{:abilities [{:prompt "Choose an ICE"
              :msg (msg "adds " (:title target) " to HQ")
              :choices (req (cancellable (filter ice? (:deck corp)) :sorted))
              :label "Search R&D for a piece of ICE"
              :cost [:click 1 :credit 1]
              :effect (effect (shuffle! :deck)
                              (move target :hand))}]}

Lily Lockwell

Card #09008

{:effect (effect (draw 3))
 :msg (msg "draw 3 cards")
 :abilities [{:label "Remove a tag to search R&D for an operation"
              :prompt "Choose an operation to put on top of R&D"
              :cost [:click 1]
              :choices (req (let [ops (filter #(is-type? % "Operation") (:deck corp))]
                              (if (empty? ops) ["No Operation in R&D"] ops)))
              :req (req (pos? (get-in @state [:runner :tag])))
              :effect (req (if (not= target "No Operation found")
                             (let [c (move state :corp target :play-area)]
                               (shuffle! state :corp :deck)
                               (move state :corp c :deck {:front true})
                               (system-msg state side (str "uses Lily Lockwell to put " (:title c) " on top of R&D")))
                             (do (shuffle! state :corp :deck)
                                 (system-msg state side (str "uses Lily Lockwell, but did not find an Operation in R&D"))))
                           (lose state :runner :tag 1))}]}

Mark Yale

Card #07009

{:events {:agenda-counter-spent {:effect (effect (gain :credit 1))
                                 :msg "gain 1 [Credits]"}}
 :abilities [{:label "Trash to gain 2 [Credits]"
              :msg "gain 2 [Credits]"
              :effect (effect (gain :credit 2) (trash card))}
             {:label "Spend an agenda counter to gain 2 [Credits]"
              :effect (req (resolve-ability
                             state side
                             {:prompt "Select an agenda with a counter"
                              :choices {:req #(and (is-type? % "Agenda")
                                                   (pos? (get-in % [:counter :agenda] 0)))}
                              :effect (req (add-counter state side target :agenda -1)
                                           (gain state :corp :credit 2)
                                           (trigger-event state side :agenda-counter-spent card))
                              :msg (msg "spend an agenda token on " (:title target) " and gain 2 [Credits]")}
                             card nil))}]}

Marked Accounts

Card #02055

(let [ability {:msg "gain 1 [Credits]"
               :label "Gain 1 [Credits] (start of turn)"
               :once :per-turn
               :counter-cost [:credit 1]
               :effect (effect (gain :credit 1))}]
{:abilities [ability
             {:cost [:click 1]
              :msg "store 3 [Credits]"
              :effect (effect (add-counter card :credit 3))}]
 :events {:corp-turn-begins ability}})

Melange Mining Corp.

Card #01108

{:abilities [{:cost [:click 3] :effect (effect (gain :credit 7)) :msg "gain 7 [Credits]"}]}

Mental Health Clinic

Card #05009

(let [ability {:msg "gain 1 [Credits]"
               :label "Gain 1 [Credits] (start of turn)"
               :once :per-turn
               :effect (effect (gain :credit 1))}]
  {:effect (effect (gain :runner :hand-size-modification 1))
   :leave-play (effect (lose :runner :hand-size-modification 1))
   :derezzed-events {:runner-turn-ends corp-rez-toast}
   :events {:corp-turn-begins ability}
   :abilities [ability]})

Mumba Temple

Card #10018

{:recurring 2}

Mumbad City Hall

Card #10055

{:abilities [{:label "Search R&D for an Alliance card"
              :cost [:click 1]
              :prompt "Choose an Alliance card to play or install"
              :choices (req (cancellable (filter #(and (has-subtype? % "Alliance")
                                                       (if (is-type? % "Operation")
                                                         (<= (:cost %) (:credit corp)) true)) (:deck corp)) :sorted))
              :msg (msg "reveal " (:title target) " from R&D and "
                        (if (= (:type target) "Operation") "play " "install ") " it")
              :effect (req (shuffle! state side :deck)
                           (if (= (:type target) "Operation")
                             (play-instant state side target)
                             (corp-install state side target nil nil)))}]}

Mumbad Construction Co.

Card #10036

{:derezzed-events {:runner-turn-ends corp-rez-toast}
 :events {:corp-turn-begins {:effect (effect (add-prop card :advance-counter 1 {:placed true}))}}
 :abilities [{:cost [:credit 2]
              :req (req (and (> (get card :advance-counter 0) 0)
                             (some #(rezzed? %) (all-installed state :corp))))
              :label "Move an advancement token to a faceup card"
              :prompt "Choose a faceup card"
              :choices {:req #(rezzed? %)}
              :msg (msg "move an advancement token to " (card-str state target))
              :effect (effect (add-prop card :advance-counter -1 {:placed true})
                              (add-prop target :advance-counter 1 {:placed true}))}]}

Museum of History

Card #10019

{:flags {:corp-phase-12 (req (pos? (count (get-in @state [:corp :discard]))))}
 :abilities [{:label "Shuffle cards in Archives into R&D"
              :prompt (msg (let [mus (count (filter #(and (= "10019" (:code %)) (rezzed? %)) (all-installed state :corp)))]
                             (str "Choose " (if (< 1 mus) (str mus " cards") "a card")
                                  " in Archives to shuffle into R&D")))
              :choices {:req #(and (card-is? % :side :corp) (= (:zone %) [:discard]))
                        :max (req (count (filter #(and (= "10019" (:code %)) (rezzed? %)) (all-installed state :corp))))}
              :show-discard true
              :priority 1
              :once :per-turn
              :once-key :museum-of-history
              :msg (msg "shuffle "
                        (let [seen (filter :seen targets)]
                          (str (join ", " (map :title seen))
                               (let [n (count (filter #(not (:seen %)) targets))]
                                 (when (pos? n)
                                   (str (when-not (empty? seen) " and ") n " card"
                                        (when (> n 1) "s"))))))
                        " into R&D")
              :effect (req (doseq [c targets] (move state side c :deck))
                           (shuffle! state side :deck))}]}

NASX

Card #11118

(let [ability {:msg "gain 1 [Credits]"
               :label "Gain 1 [Credits] (start of turn)"
               :once :per-turn
               :effect (effect (gain :credit 1))}]
  {:derezzed-events {:runner-turn-ends corp-rez-toast}
   :events {:corp-turn-begins ability}
   :abilities [ability
               {:label "Place 1 power counter" :cost [:credit 1]
                :effect (effect (add-counter card :power 1)
                                (system-msg (str "places 1 power counter on NASX")))}
               {:label "Place 2 power counters" :cost [:credit 2]
                :effect (effect (add-counter card :power 2)
                                (system-msg (str "places 2 power counters on NASX")))}
               {:label "[Trash] and gain 2 [Credits] for each power counter" :cost [:click 1]
                :msg (msg "gain " (* 2 (get-in card [:counter :power])) " [Credits]")
                :effect (effect (gain :credit (* 2 (get-in card [:counter :power])))
                                (trash card))}]})

Net Police

Card #02075

{:recurring (effect (set-prop card :rec-counter (:link runner)))
 :effect (effect (set-prop card :rec-counter (:link runner)))}

News Team

Card #09009

{:access {:msg (msg "force the Runner take 2 tags or add it to their score area as an agenda worth -1 agenda point")
          :delayed-completion true
          :effect (effect (continue-ability
                            {:player :runner
                             :delayed-completion true
                             :prompt "Take 2 tags or add News Team to your score area as an agenda worth -1 agenda point?"
                             :choices ["Take 2 tags" "Add News Team to score area"]
                             :effect (req (if (= target "Add News Team to score area")
                                            (do (system-msg state :runner (str "adds News Team to their score area as an agenda worth -1 agenda point"))
                                                (as-trashed-agenda state :runner card -1 {:force true})
                                                (effect-completed state side eid))
                                            (do (system-msg state :runner (str "takes 2 tags from News Team"))
                                                (tag-runner state :runner eid 2))))}
                            card targets))}}

PAD Campaign

Card #01109

(let [ability {:msg "gain 1 [Credits]"
               :label "Gain 1 [Credits] (start of turn)"
               :once :per-turn
               :effect (effect (gain :credit 1))}]
{:derezzed-events {:runner-turn-ends corp-rez-toast}
 :events {:corp-turn-begins ability}
 :abilities [ability]})

PAD Factory

Card #10038

{:abilities [{:cost [:click 1]
              :label "Place 1 advancement token on a card"
              :choices {:req #(and (= (:side %) "Corp")
                                   (installed? %))}
              :msg (msg "place 1 advancement token on " (card-str state target))
              :effect (req (add-prop state :corp target :advance-counter 1 {:placed true})
                           (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 PAD Factory." "warning"))
                                   true)))))}]}

Pālanā Agroplex

Card #10031

(let [ability {:msg "make each player draw 1 card"
               :label "Make each player draw 1 card (start of turn)"
               :once :per-turn
               :effect (effect (draw 1) (draw :runner))}]
  {:derezzed-events {:runner-turn-ends corp-rez-toast}
   :flags {:corp-phase-12 (req true)}
   :events {:corp-turn-begins ability}
   :abilities [ability]})

Plan B

Card #05023

(advance-ambush
 0
 {:req (req (pos? (:advance-counter (get-card state card) 0)))
  :effect
  (req (show-wait-prompt state :runner "Corp to choose an agenda to score with Plan B")
       (doseq [ag (filter #(is-type? % "Agenda") (get-in @state [:corp :hand]))]
         (update-advancement-cost state side ag))
       (resolve-ability state side
         {:prompt "Choose an Agenda in HQ to score"
          :choices {:req #(and (is-type? % "Agenda")
                               (<= (:current-cost %) (:advance-counter (get-card state card) 0))
                               (in-hand? %))}
          :msg (msg "score " (:title target))
          :effect (effect (score (assoc target :advance-counter
                                        (:current-cost target)))
                          (clear-wait-prompt :runner))}
        card nil))}
 "Score an Agenda from HQ?")

Political Dealings

Card #10051

(let [pdhelper (fn pd [agendas n]
                 {:optional
                  {:prompt (msg "Reveal and install " (:title (nth agendas n)) "?")
                   :yes-ability {:delayed-completion true
                                 :msg (msg "reveal " (:title (nth agendas n)))
                                 :effect (req (when-completed
                                                (corp-install state side (nth agendas n) nil
                                                              {:install-state
                                                               (:install-state (card-def (nth agendas n))
                                                                 :unrezzed)})
                                                (if (< (inc n) (count agendas))
                                                  (continue-ability state side (pd agendas (inc n)) card nil)
                                                  (effect-completed state side eid))))}
                   :no-ability {:delayed-completion true
                                :effect (req (if (< (inc n) (count agendas))
                                               (continue-ability state side (pd agendas (inc n)) card nil)
                                               (effect-completed state side eid)))}}})]
  {:events
   {:corp-draw
    {:delayed-completion true
     :req (req (let [drawn (get-in @state [:corp :register :most-recent-drawn])
                     agendas (filter #(is-type? % "Agenda") drawn)]
                 (seq agendas)))
     :effect (req (let [drawn (get-in @state [:corp :register :most-recent-drawn])
                        agendas (filter #(is-type? % "Agenda") drawn)]
                    (continue-ability state side (pdhelper agendas 0) card nil)))}}})

Primary Transmission Dish

Card #06006

{:recurring 3}

Private Contracts

Card #02059

{:effect (effect (add-counter card :credit 14))
 :abilities [{:cost [:click 1]
              :counter-cost [:credit 2]
              :msg "gain 2 [Credits]"
              :effect (req (gain state :corp :credit 2)
                           (when (= (get-in card [:counter :credit]) 0) (trash state :corp card)))}]}

Project Junebug

Card #01069

(advance-ambush 1 {:req (req (< 0 (:advance-counter (get-card state card) 0)))
                   :msg (msg "do " (* 2 (:advance-counter (get-card state card) 0)) " net damage")
                   :delayed-completion true
                   :effect (effect (damage eid :net (* 2 (:advance-counter (get-card state card) 0))
                                           {:card card}))})

Psychic Field

Card #05010

(let [ab {:psi {:req (req installed)
                :not-equal {:msg (msg "do " (count (:hand runner)) " net damage")
                            :delayed-completion true
                            :effect (effect (damage eid :net (count (:hand runner)) {:card card}))}}}]
  {:expose ab :access ab})

Public Support

Card #08117

{:effect (effect (add-counter card :power 3))
 :derezzed-events {:runner-turn-ends corp-rez-toast}
 :events {:corp-turn-begins
          {:effect (req (add-counter state side card :power -1)
                        (when (<= (get-in card [:counter :power]) 1)
                          (system-msg state :corp "uses Public Support to add it to their score area as an agenda worth 1 agenda point")
                          (as-agenda state :corp (dissoc card :counter) 1)))} }}

Raman Rai

Card #10068

{:abilities [{:once :per-turn
              :label "Lose [Click] and swap a card in HQ you just drew for a card in Archives"
              :req (req (and (pos? (:click corp))
                             (not-empty (turn-events state side :corp-draw))))
              :effect (req (let [drawn (get-in @state [:corp :register :most-recent-drawn])]
                             (lose state :corp :click 1)
                             (resolve-ability state side
                               {:prompt "Choose a card in HQ that you just drew to swap for a card of the same type in Archives"
                                :choices {:req #(some (fn [c] (= (:cid c) (:cid %))) drawn)}
                                :effect (req (let [hqcard target
                                                   t (:type hqcard)]
                                               (resolve-ability state side
                                                 {:show-discard true
                                                  :prompt (msg "Choose an " t " in Archives to reveal and swap into HQ for " (:title hqcard))
                                                  :choices {:req #(and (= (:side %) "Corp")
                                                                       (= (:type %) t)
                                                                       (= (:zone %) [:discard]))}
                                                  :msg (msg "lose [Click], reveal " (:title hqcard) " from HQ, and swap it for " (:title target) " from Archives")
                                                  :effect (req (let [swappedcard (assoc hqcard :zone [:discard])
                                                                     archndx (ice-index state target)
                                                                     arch (get-in @state [:corp :discard])
                                                                     newarch (apply conj (subvec arch 0 archndx) swappedcard (subvec arch archndx))]
                                                                  (swap! state assoc-in [:corp :discard] newarch)
                                                                  (swap! state update-in [:corp :hand]
                                                                         (fn [coll] (remove-once #(not= (:cid %) (:cid hqcard)) coll)))
                                                                  (move state side target :hand)))}
                                                card nil)))}
                              card nil)))}]}

Reality Threedee

Card #09012

(let [ability {:effect (req (gain state side :credit (if tagged 2 1)))
               :label "Gain credits (start of turn)"
               :once :per-turn
               :msg (msg (if tagged "gain 2 [Credits]" "gain 1 [Credits]"))}]
{:effect (effect (gain :bad-publicity 1) (system-msg "takes 1 bad publicity"))
 :derezzed-events {:runner-turn-ends corp-rez-toast}
 :events {:corp-turn-begins ability}
 :abilities [ability]})

Reversed Accounts

Card #06066

{:advanceable :always
 :abilities [{:cost [:click 1]
              :label "Force the Runner to lose 4 [Credits] per advancement"
              :msg (msg "force the Runner to lose " (min (* 4 (get card :advance-counter 0)) (:credit runner)) " [Credits]")
              :effect (effect (lose :runner :credit (* 4 (get card :advance-counter 0))) (trash card))}]}

Rex Campaign

Card #04070

(let [ability {:once :per-turn
               :label "Remove 1 counter (start of turn)"
               :effect (req (add-counter state side card :power -1)
                            (when (<= (get-in card [:counter :power]) 1)
                              (trash state side card)
                              (resolve-ability state side
                                               {:prompt "Remove 1 bad publicity or gain 5 [Credits]?"
                                                :choices ["Remove 1 bad publicity" "Gain 5 [Credits]"]
                                                :msg (msg (if (= target "Remove 1 bad publicity")
                                                            "remove 1 bad publicity" "gain 5 [Credits]"))
                                                :effect (req (if (= target "Remove 1 bad publicity")
                                                               (lose state side :bad-publicity 1)
                                                               (gain state side :credit 5)))}
                                               card targets)))}]
{:effect (effect (add-counter card :power 3))
 :derezzed-events {:runner-turn-ends corp-rez-toast}
 :events {:corp-turn-begins ability}
 :ability [ability]})

Ronald Five

Card #08088

{:events {:runner-trash {:req (req (and (= (:side target) "Corp") (> (:click runner) 0)))
                         :msg "force the runner to lose 1 [Click]" :effect (effect (lose :runner :click 1))}}}

Ronin

Card #02112

{:advanceable :always
 :abilities [{:cost [:click 1] :req (req (>= (:advance-counter card) 4))
              :msg "do 3 net damage"
              :delayed-completion true
              :effect (effect (trash card) (damage eid :net 3 {:card card}))}]}

Sandburg

Card #11020

{:effect (req (add-watch state :sandburg
                         (fn [k ref old new]
                           (let [credit (get-in new [:corp :credit])]
                             (when (not= (get-in old [:corp :credit]) credit)
                               (update-all-ice ref side)))))
              (update-all-ice state side))
 :events {:pre-ice-strength {:req (req (and (ice? target)
                                            (>= (:credit corp) 10)))
                             :effect (effect (ice-strength-bonus (quot (:credit corp) 5) target))}}
 :leave-play (req (remove-watch state :sandburg)
                  (update-all-ice state side))}

Sealed Vault

Card #06029

{:abilities [{:label "Store any number of [Credits] on Sealed Vault"
              :cost [:credit 1]
              :prompt "How many [Credits]?"
              :choices {:number (req (- (:credit corp) 1))}
              :msg (msg "store " target " [Credits]")
              :effect (effect (lose :credit target)
                              (add-counter card :credit target))}
             {:label "Move any number of [Credits] to your credit pool"
              :cost [:click 1]
              :prompt "How many [Credits]?"
              :choices {:counter :credit}
              :msg (msg "gain " target " [Credits]")
              :effect (effect (gain :credit target))}
             {:label "[Trash]: Move any number of [Credits] to your credit pool"
              :prompt "How many [Credits]?"
              :choices {:counter :credit}
              :msg (msg "trash it and gain " target " [Credits]")
              :effect (effect (gain :credit target) (trash card))}]}

Security Subcontract

Card #01096

{:abilities [{:choices {:req #(and (ice? %) (rezzed? %))} :cost [:click 1]
              :msg (msg "trash " (:title target) " to gain 4 [Credits]")
              :label "Trash a rezzed ICE to gain 4 [Credits]"
              :effect (effect (trash target) (gain :credit 4))}]}

Sensie Actors Union

Card #10053

{:derezzed-events {:runner-turn-ends corp-rez-toast}
 :flags {:corp-phase-12 (req unprotected)}
 :abilities [{:label "Draw 3 cards and add 1 card in HQ to the bottom of R&D"
              :once :per-turn
              :msg "draw 3 cards"
              :effect (effect (draw 3)
                              (resolve-ability
                                {:prompt "Choose a card in HQ to add to the bottom of R&D"
                                 :choices {:req #(and (= (:side %) "Corp")
                                                      (in-hand? %))}
                                 :msg "add 1 card from HQ to the bottom of R&D"
                                 :effect (effect (move target :deck))}
                               card nil))}]}

Server Diagnostics

Card #03025

(let [ability {:effect (effect (gain :credit 2))
               :once :per-turn
               :label "Gain 2 [Credits] (start of turn)"
               :msg "gain 2 [Credits]"}]
{:derezzed-events {:runner-turn-ends corp-rez-toast}
 :abilities [ability]
 :events {:corp-turn-begins ability
          :corp-install {:req (req (ice? target))
                         :effect (effect (trash card)
                                         (system-msg "trashes Server Diagnostics"))}}})

Shannon Claire

Card #09010

{:abilities [{:cost [:click 1]
              :msg "draw 1 card from the bottom of R&D"
              :effect (effect (move (last (:deck corp)) :hand))}
             {:label "[Trash]: Search R&D for an agenda"
              :prompt "Choose an agenda to add to the bottom of R&D"
              :msg (msg "reveal " (:title target) " from R&D and add it to the bottom of R&D")
              :choices (req (cancellable (filter #(is-type? % "Agenda") (:deck corp)) :sorted))
              :effect (effect (shuffle! :deck) (move target :deck)
                              (trash card {:cause :ability-cost}))}
             {:label "[Trash]: Search Archives for an agenda"
              :prompt "Choose an agenda to add to the bottom of R&D"
              :msg (msg "reveal " (:title target) " from Archives and add it to the bottom of R&D")
              :choices (req (cancellable (filter #(is-type? % "Agenda") (:discard corp)) :sorted))
              :effect (effect (move target :deck) (trash card {:cause :ability-cost}))}]}

Shattered Remains

Card #06050

(advance-ambush 1 {:delayed-completion true
                   :effect (req (let [shat (get-card state card)]
                                  (when (< 0 (:advance-counter shat 0))
                                    (continue-ability
                                      state side
                                      (-> trash-hardware
                                          (assoc-in [:choices :max] (:advance-counter shat))
                                          (assoc :prompt (msg "Choose " (:advance-counter shat) " pieces of hardware to trash")
                                                 :effect (effect (trash-cards targets))
                                                 :msg (msg "trash " (join ", " (map :title targets)))))
                                     shat nil))))})

Shi.Kyū

Card #05011

{:access
 {:delayed-completion true
  :req (req (not= (first (:zone card)) :deck))
  :effect (effect (show-wait-prompt :runner "Corp to use Shi.Kyū")
                  (continue-ability
                    {:optional
                     {:prompt "Pay [Credits] to use Shi.Kyū?"
                      :yes-ability {:prompt "How many [Credits] for Shi.Kyū?" :choices :credit
                                    :msg (msg "attempt to do " target " net damage")
                                    :delayed-completion true
                                    :effect (effect (clear-wait-prompt :runner)
                                                    (continue-ability
                                                      {:player :runner
                                                       :prompt (str "Take " target " net damage or add Shi.Kyū to your score area as an agenda worth -1 agenda point?")
                                                       :choices [(str "Take " target " net damage") "Add Shi.Kyū to score area"]
                                                       :delayed-completion true
                                                       :effect (let [dmg target]
                                                                 (req (if (= target "Add Shi.Kyū to score area")
                                                                        (do (as-trashed-agenda state :runner card -1)
                                                                            (system-msg state :runner (str "adds Shi.Kyū to their score area as as an agenda worth -1 agenda point"))
                                                                            (effect-completed state side eid))
                                                                        (do (damage state :corp eid :net dmg {:card card})
                                                                            (system-msg state :runner (str "takes " dmg " net damage from Shi.Kyū"))))))}
                                                     card targets))}
                      :no-ability {:effect (effect (clear-wait-prompt :runner))}}}
                   card targets))}}

Shock!

Card #04073

{:access {:msg "do 1 net damage"
          :delayed-completion true
          :effect (effect (damage eid :net 1 {:card card}))}}

Snare!

Card #01070

{:access {:req (req (not= (first (:zone card)) :discard))
          :delayed-completion true
          :effect (effect (show-wait-prompt :runner "Corp to use Snare!")
                          (continue-ability
                            {:optional
                             {:prompt "Pay 4 [Credits] to use Snare! ability?"
                              :end-effect (effect (clear-wait-prompt :runner))
                              :yes-ability {:delayed-completion true
                                            :cost [:credit 4]
                                            :msg "do 3 net damage and give the Runner 1 tag"
                                            :effect (effect (damage eid :net 3 {:card card})
                                                            (tag-runner :runner eid 1))}}}
                            card nil))}}

Space Camp

Card #07010

{:access {:delayed-completion true
          :effect (effect (show-wait-prompt :runner "Corp to use Space Camp")
                          (continue-ability
                            {:optional
                             {:prompt "Place 1 advancement token?"
                              :end-effect (effect (clear-wait-prompt :runner))
                              :yes-ability {:msg (msg "place 1 advancement token on " (card-str state target))
                                            :choices {:req can-be-advanced?}
                                            :effect (effect (add-prop target :advance-counter 1 {:placed true}))}}}
                            card nil))}}

Sundew

Card #04054

{:events {:runner-spent-click {:once :per-turn
                               :msg (req (when (not this-server) "gain 2 [Credits]"))
                               :effect (req (when (not this-server)
                                              (gain state :corp :credit 2)))}}}

Team Sponsorship

Card #08110

{:events {:agenda-scored {:label "Install a card from Archives or HQ"
                          :prompt "Choose a card from Archives or HQ to install"
                          :show-discard true
                          :interactive (req true)
                          :delayed-completion true
                          :choices {:req #(and (not (is-type? % "Operation"))
                                               (#{[:hand] [:discard]} (:zone %)))}
                          :msg (msg (corp-install-msg target))
                          :effect (effect (corp-install eid target nil {:no-install-cost true}))}}}

Tech Startup

Card #08020

{:derezzed-events {:runner-turn-ends corp-rez-toast}
 :flags {:corp-phase-12 (req true)}
 :abilities [{:label "Install an asset from R&D"
              :prompt "Choose an asset to install"
              :msg (msg "install " (:title target))
              :choices (req (filter #(is-type? % "Asset") (:deck corp)))
              :effect (effect (trash card)
                              (shuffle! :deck)
                              (corp-install target nil))}]}

Tenma Line

Card #05012

{:abilities [{:label "Swap 2 pieces of installed ICE"
              :cost [:click 1]
              :prompt "Select two pieces of ICE to swap positions"
              :choices {:req #(and (installed? %) (ice? %)) :max 2}
              :effect (req (when (= (count targets) 2)
                             (swap-ice state side (first targets) (second targets))))
              :msg "swap the positions of two ICE"}]}

Test Ground

Card #08071

{:implementation "Derez is manual"
 :advanceable :always
 :abilities [{:label "Derez 1 card for each advancement token"
              :msg (msg "derez " (:advance-counter card)) :effect (effect (trash card))}]}

The Board

Card #07011

{:effect (effect (lose :runner :agenda-point (count (:scored runner))))
 :leave-play (effect (gain :runner :agenda-point (count (:scored runner))))
 :trash-effect {:when-inactive true
                :req (req (:access @state))
                :msg "add it to the Runner's score area as an agenda worth 2 agenda points"
                :effect (effect (as-agenda :runner card 2))}
 :events {:agenda-stolen {:effect (effect (lose :runner :agenda-point 1))}
          :card-moved {:req (req (or (some #{:scored} (:zone (first targets)))
                                     (some #{:scored} (:zone (second targets)))))
                       :effect (effect ((if (some #{:scored} (:zone (first targets))) gain lose) :runner :agenda-point 1))}}}

The News Now Hour

Card #06045

{:events {:runner-turn-begins {:effect (req (prevent-current state side))}}
 :effect (req (prevent-current state side))
 :leave-play (req (swap! state assoc-in [:runner :register :cannot-play-current] false))}

The Root

Card #06008

{:recurring 3}

Thomas Haas

Card #03012

{:advanceable :always
 :abilities [{:label "Gain credits" :msg (msg "gain " (* 2 (get card :advance-counter 0)) " [Credits]")
              :effect (effect (gain :credit (* 2 (get card :advance-counter 0))) (trash card))}]}

Toshiyuki Sakai

Card #04092

(advance-ambush 0
 {:effect (effect (resolve-ability
                    {:prompt "Choose an asset or agenda in HQ"
                     :choices {:req #(and (or (is-type? % "Agenda")
                                              (is-type? % "Asset"))
                                          (in-hand? %))}
                     :msg "swap it for an asset or agenda from HQ"
                     :effect (req (let [tidx (ice-index state card)
                                        srvcont (get-in @state (cons :corp (:zone card)))
                                        c (:advance-counter (get-card state card) 0)
                                        newcard (assoc target :zone (:zone card) :advance-counter c)
                                        newcont (apply conj (subvec srvcont 0 tidx) newcard (subvec srvcont tidx))]
                                    (resolve-ability state side
                                      {:effect (req (swap! state assoc-in (cons :corp (:zone card)) newcont)
                                                    (swap! state update-in [:corp :hand]
                                                      (fn [coll] (remove-once #(not= (:cid %) (:cid newcard)) coll)))
                                                    (trigger-event state side :corp-install newcard)
                                                    (move state side card :hand))} card nil)
                                    (resolve-prompt state :runner {:choice "No"})
                                    ; gets rid of prompt to trash Toshiyuki since it's back in HQ now
                                    (resolve-ability state :runner
                                      {:optional
                                       {:prompt "Access the newly installed card?" :player :runner
                                        :priority true
                                        :yes-ability {:effect (effect (handle-access [newcard]))}}} card nil)))}
                   card nil))}
 "Swap Toshiyuki Sakai with an agenda or asset from HQ?")

Turtlebacks

Card #06106

{:events {:server-created {:msg "gain 1 [Credits]" :effect (effect (gain :credit 1))}}}

Victoria Jenkins

Card #09011

{:effect (req (lose state :runner :click-per-turn 1)
              (when (= (:active-player @state) :runner)
                (lose state :runner :click 1)))
 :leave-play (req (gain state :runner :click-per-turn 1)
                  (when (= (:active-player @state) :runner)
                    (gain state :runner :click 1)))
 :trash-effect {:when-inactive true
                :req (req (:access @state))
                :msg "add it to the Runner's score area as an agenda worth 2 agenda points"
                :effect (effect (as-agenda :runner card 2))}}

Watchdog

Card #11015

{:events {:pre-rez {:req (req (and (ice? target) (not (get-in @state [:per-turn (:cid card)]))))
                    :effect (effect (rez-cost-bonus (- (:tag runner))))}
          :rez {:req (req (and (ice? target) (not (get-in @state [:per-turn (:cid card)]))))
                           :effect (req (swap! state assoc-in [:per-turn (:cid card)] true))}}}

Worlds Plaza

Card #08116

{:abilities [{:label "Install an asset on Worlds Plaza"
              :req (req (< (count (:hosted card)) 3))
              :cost [:click 1]
              :prompt "Choose an asset to install on Worlds Plaza"
              :choices {:req #(and (is-type? % "Asset")
                                   (in-hand? %)
                                   (= (:side %) "Corp"))}
              :msg (msg "host " (:title target))
              :effect (req (corp-install state side target card) ;; install target onto card
                           (rez-cost-bonus state side -2) (rez state side (last (:hosted (get-card state card)))))}]}

Zaibatsu Loyalty

Card #01071

{:prevent {:expose [:all]}
 :derezzed-events
 {:pre-expose
  {:delayed-completion true
   :effect (req (let [etarget target]
                  (continue-ability state side
                    {:optional {:req (req (not (rezzed? card)))
                                :player :corp
                                :prompt (msg "The Runner is about to expose " (:title etarget) ". Rez Zaibatsu Loyalty?")
                                :yes-ability {:effect (effect (rez card))}}}
                    card nil)))}}
 :abilities [{:msg "prevent 1 card from being exposed"
              :cost [:credit 1]
              :effect (effect (expose-prevent 1))}
             {:msg "prevent 1 card from being exposed"
              :label "[Trash]: Prevent 1 card from being exposed"
              :effect (effect (trash card {:cause :ability-cost})
                              (expose-prevent 1))}]}

Zealous Judge

Card #10111

{:rez-req (req tagged)
 :abilities [{:delayed-completion true
              :label "Give the Runner 1 tag"
              :cost [:click 1 :credit 1]
              :msg (msg "give the Runner 1 tag")
              :effect (effect (tag-runner eid 1))}]}