Skip to content

Commit

Permalink
Merge pull request #4809 from NoahTheDuke/nb/fixes-for-2019-12-18
Browse files Browse the repository at this point in the history
Fixes for 2019-12-18
  • Loading branch information
NoahTheDuke authored Dec 20, 2019
2 parents 02ce2c4 + 295eaba commit d0ed37e
Show file tree
Hide file tree
Showing 19 changed files with 338 additions and 163 deletions.
22 changes: 14 additions & 8 deletions src/clj/game/cards/agendas.clj
Original file line number Diff line number Diff line change
Expand Up @@ -474,23 +474,28 @@
:interactive (req true)
:effect (req (if (:winner @state)
(effect-completed state side eid)
(let [stolen-agenda target
(let [card (find-latest state card)
stolen-agenda (find-latest state target)
title (:title stolen-agenda)
prompt (str "Forfeit Divested Trust to add " title
" to HQ and gain 5[Credits]?")
message (str "add " title " to HQ and gain 5 [Credits]")]
message (str "add " title " to HQ and gain 5 [Credits]")
agenda-side (if (in-runner-scored? state side stolen-agenda)
:runner :corp)
card-side (if (in-runner-scored? state side card)
:runner :corp)]
(show-wait-prompt state :runner "Corp to use Divested Trust")
(continue-ability
state side
{:optional
{:prompt prompt
:yes-ability
{:msg message
:effect (effect (forfeit card)
(move stolen-agenda :hand)
(gain-agenda-point :runner (- (:agendapoints stolen-agenda)))
(gain-credits 5)
(effect-completed eid))}
:effect (req (forfeit state card-side card)
(move state side stolen-agenda :hand)
(gain-agenda-point state agenda-side (- (:agendapoints stolen-agenda)))
(gain-credits state side 5)
(effect-completed state side eid))}
:end-effect (effect (clear-wait-prompt :runner))}}
card nil))))}]}

Expand Down Expand Up @@ -1091,7 +1096,8 @@

"Project Vacheron"
(let [vacheron-ability
{:req (req (and (not= (first (:zone card)) :discard)
{:req (req (and (in-scored? card)
(not= (first (:previous-zone card)) :discard)
(same-card? card target)))
:msg (msg "add 4 agenda counters on " (:title card))
:effect (effect (add-counter (get-card state card) :agenda 4)
Expand Down
8 changes: 5 additions & 3 deletions src/clj/game/cards/events.clj
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,11 @@
:effect (effect (make-run eid target nil card))
:events [{:event :subroutines-broken
:async true
:req (req (let [pred #(and (has-subtype? (first %) subtype)
(every? :broken (:subroutines (first %))))]
(first-event? state side :subroutines-broken pred)))
:req (req (and (has-subtype? target subtype)
(every? :broken (:subroutines target))
(let [pred #(and (has-subtype? (first %) subtype)
(every? :broken (:subroutines (first %))))]
(first-event? state side :subroutines-broken pred))))
:msg (msg "trash " (card-str state target))
:effect (effect (trash eid target nil))}]})

Expand Down
57 changes: 27 additions & 30 deletions src/clj/game/cards/hardware.clj
Original file line number Diff line number Diff line change
Expand Up @@ -55,16 +55,17 @@
{:in-play [:memory 1]}

"Aniccam"
{:in-play [:memory 1]
:events [{:event :card-moved
:msg "draw 1 card"
:req (req (letfn [(event-moved-to-discard? [[old-card new-card]]
(and (is-type? new-card "Event")
(in-discard? new-card)))]
(and (event-moved-to-discard? targets)
(first-event? state side :card-moved event-moved-to-discard?))))
:async true
:effect (effect (draw :runner eid 1 nil))}]}
(let [ability {:async true
:req (req (and (some event? targets)
(letfn [(event-targets? [event-targets]
(some event? event-targets))]
(= 1 (+ (event-count state side :runner-trash event-targets?)
(event-count state side :corp-trash event-targets?))))))
:msg "draw 1 card"
:effect (effect (draw :runner eid 1 nil))}]
{:in-play [:memory 1]
:events [(assoc ability :event :corp-trash)
(assoc ability :event :runner-trash)]})

"Archives Interface"
{:events
Expand Down Expand Up @@ -872,14 +873,16 @@

"Hippo"
{:events [{:event :subroutines-broken
:req (req (let [pred #(and (same-card? (last run-ices) (first %))
(every? :broken (:subroutines (first %))))]
(and (same-card? (last run-ices) target)
(every? :broken (:subroutines target))
(first-event? state side :subroutines-broken pred))))
:effect
(effect
(continue-ability
{:optional
{:req (req (let [pred #(and (same-card? (last run-ices) (first %))
(every? :broken (:subroutines (first %))))]
(first-event? state side :subroutines-broken pred)))
:prompt (str "Remove Hippo from the game to trash " (:title target) "?")
{:prompt (str "Remove Hippo from the game to trash " (:title target) "?")
:yes-ability
{:async true
:effect (effect (system-msg (str "removes Hippo from the game to trash " (card-str state target)))
Expand Down Expand Up @@ -1850,26 +1853,20 @@
:interactive (req true)
:req (req (not (empty? (:scored corp))))
:async true
:effect (req
(let [stolen target]
(continue-ability
state side
:effect (effect
(continue-ability
(let [stolen target]
{:optional
{:prompt (msg "Swap " (:title stolen) " for an agenda in the Corp's score area?")
:yes-ability
{:async true
:effect (req
(continue-ability
state side
{:prompt (str "Select a scored Corp agenda to swap with " (:title stolen))
:choices {:card #(in-corp-scored? state side %)}
:effect (req (let [scored target]
(swap-agendas state side scored stolen)
(system-msg state side (str "uses Turntable to swap "
(:title stolen) " for " (:title scored)))
(effect-completed state side eid)))}
card targets))}}}
card targets)))}]}
:prompt (str "Select a scored Corp agenda to swap with " (:title stolen))
:choices {:card #(in-corp-scored? state side %)}
:effect (effect (swap-agendas target stolen)
(system-msg (str "uses Turntable to swap "
(:title stolen) " for " (:title target)))
(effect-completed eid))}}})
card targets))}]}

"Ubax"
(let [ability {:req (req (:runner-phase-12 @state))
Expand Down
6 changes: 3 additions & 3 deletions src/clj/game/cards/ice.clj
Original file line number Diff line number Diff line change
Expand Up @@ -3054,9 +3054,9 @@
:strength-bonus (req (if (is-remote? (second (:zone card))) 3 0))}

"Turnpike"
{:implementation "Encounter effect is manual"
:abilities [{:msg "force the Runner to lose 1 [Credits]"
:effect (effect (lose-credits :runner 1))}]
{:events [{:event :encounter-ice
:msg "force the Runner to lose 1 [Credits]"
:effect (effect (lose-credits :runner 1))}]
:subroutines [(tag-trace 5)]}

"Tyrant"
Expand Down
49 changes: 26 additions & 23 deletions src/clj/game/cards/operations.clj
Original file line number Diff line number Diff line change
Expand Up @@ -1069,26 +1069,25 @@
:choices {:card #(and (or (agenda? %)
(asset? %)
(upgrade? %))
(#{[:discard]} (:zone %)))}
:effect (req (let [card-to-install target]
(when card-to-install
(wait-for (resolve-ability state side
{:prompt (str "Choose a location to install " (:title card-to-install))
:choices (remove #{"HQ" "R&D" "Archives"} (corp-install-list state card-to-install))
:async true
:msg (msg (corp-install-msg card-to-install)
" in "
(if (= target "New remote")
(str (remote-num->name (inc (get-in @state [:rid]))) " (new remote)")
target)
" and place 2 advancement tokens on it")
:effect (req (wait-for (corp-install state side (make-eid state {:source card :source-type :corp-install})
card-to-install target {:display-message false})
(add-prop state :corp eid (find-latest state card-to-install)
:advance-counter 2 {:placed true})
(effect-completed state side eid)))}
card nil)
(effect-completed state side eid)))))}]
(in-discard? %))}
:effect (effect
(continue-ability
(let [card-to-install target]
{:prompt (str "Choose a location to install " (:title card-to-install))
:choices (remove #{"HQ" "R&D" "Archives"} (corp-install-list state card-to-install))
:async true
:msg (msg (corp-install-msg card-to-install)
" in "
(if (= target "New remote")
(str (remote-num->name (inc (get-in @state [:rid]))) " (new remote)")
target)
" and place 2 advancement tokens on it")
:effect (req (wait-for (corp-install state side (make-eid state {:source card :source-type :corp-install})
card-to-install target {:display-message false})
(add-prop state :corp eid (find-latest state card-to-install)
:advance-counter 2 {:placed true})
(effect-completed state side eid)))})
card nil))}]
{:prompt "Select any number of cards in HQ to trash"
:rfg-instead-of-trashing true
:choices {:max (req (count (:hand corp)))
Expand All @@ -1100,8 +1099,11 @@
(doseq [c (:discard (:corp @state))]
(update! state side (assoc-in c [:seen] false)))
(shuffle! state :corp :discard)
(wait-for (resolve-ability state side install-abi card nil)
(effect-completed state side eid))))})
(continue-ability state side install-abi card nil)))
:cancel-effect (req (doseq [c (:discard (:corp @state))]
(update! state side (assoc-in c [:seen] false)))
(shuffle! state :corp :discard)
(continue-ability state side install-abi card nil))})

"Kill Switch"
(let [trace-for-brain-damage {:msg (msg "reveal that they accessed " (:title target))
Expand Down Expand Up @@ -1844,7 +1846,8 @@
(or (has-subtype? % "Virtual")
(has-subtype? % "Chip")))}
:msg (msg "remove " (card-str state target) " from game")
:effect (req (move state :runner target :rfg))}}}
:effect (effect (move :runner target :rfg)
(effect-completed eid))}}}

"Scarcity of Resources"
{:msg "increase the install cost of resources by 2"
Expand Down
42 changes: 19 additions & 23 deletions src/clj/game/cards/programs.clj
Original file line number Diff line number Diff line change
Expand Up @@ -1305,11 +1305,10 @@

"Harbinger"
{:trash-effect
{:async true
:req (req (not-any? #{:facedown :hand} (:previous-zone card)))
{:req (req (not-any? #{:facedown :hand} (:previous-zone card)))
:effect (req (let [lock (get-in @state [:runner :locked :discard])]
(swap! state assoc-in [:runner :locked] nil)
(runner-install state :runner (assoc eid :source card :source-type :runner-install) card {:facedown true})
(flip-facedown state side card)
(swap! state assoc-in [:runner :locked] lock)))}}

"Hemorrhage"
Expand Down Expand Up @@ -2083,26 +2082,23 @@
:async true
:msg (msg "reveal " (:title target))
:effect (req (if-let [guess (get-in card [:special :rng-guess])]
(if (installed? target)
;; Do not trigger on installed cards (can't "reveal" an installed card per UFAQ)
(do (toast state :runner "Installed cards cannot be revealed, so RNG Key does not pay out." "info")
(effect-completed state side eid))
(if (or (= guess (:cost target))
(= guess (:advancementcost target)))
(do (reveal state side target)
(continue-ability
state side
{:prompt "Choose RNG Key award"
:choices ["Gain 3 [Credits]" "Draw 2 cards"]
:async true
:effect (req (if (= target "Draw 2 cards")
(do (system-msg state :runner "uses RNG Key to draw 2 cards")
(draw state :runner eid 2 nil))
(do (system-msg state :runner "uses RNG Key to gain 3 [Credits]")
(gain-credits state :runner 3)
(effect-completed state side eid))))}
card nil))
(effect-completed state side eid)))
(if (or (= guess (:cost target))
(= guess (:advancementcost target)))
(do (reveal state side target)
(continue-ability
state side
{:prompt "Choose RNG Key reward"
:choices ["Gain 3 [Credits]" "Draw 2 cards"]
:async true
:msg (msg (if (= target "Draw 2 cards")
"draw 2 cards"
"gain 3 [Credits]"))
:effect (req (if (= target "Draw 2 cards")
(draw state :runner eid 2 nil)
(do (gain-credits state :runner 3)
(effect-completed state side eid))))}
card nil))
(effect-completed state side eid))
(effect-completed state side eid)))}
{:event :post-access-card
:effect (effect (update! (assoc-in card [:special :rng-guess] nil)))}
Expand Down
Loading

0 comments on commit d0ed37e

Please sign in to comment.