Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 33 additions & 33 deletions src/clj/game/cards/events.clj
Original file line number Diff line number Diff line change
Expand Up @@ -4289,48 +4289,48 @@
:waiting-prompt true
:change-in-game-state {:silent true :req (req (seq (all-cards-in-hand* state :runner)))}
:choices {:req (req (in-hand*? state target)
(or (hardware? target)
(program? target))
(runner-can-pay-and-install? state side (assoc eid :source card) target))}
(or (hardware? target)
(program? target))
(runner-can-pay-and-install? state side (assoc eid :source card) target))}
:async true
:effect (effect (runner-install state side (assoc eid :source card :source-type :runner-install) target {:msg-keys {:install-source card
:display-origin true}}))}]
:display-origin true}}))}]
{:makes-run true
:events [{:event :run
:async true
:unregister-once-resolved true
:effect
(effect (let [rezzed-targets
(filter #(and (ice? %)
(= (first (:server target)) (second (get-zone %))))
(all-active-installed state :corp))]
(if (seq rezzed-targets)
(continue-ability
state side
{:prompt "Choose a piece of ice protecting this server to derez"
:waiting-prompt true
:choices {:req (req (some #{target} rezzed-targets))}
:async true
:effect
(effect (let [chosen-ice target]
(register-events
state side card
[{:event :run-ends
:duration :end-of-run
:optional
{:player :corp
:waiting-prompt true
:req (req (installed? (get-card state chosen-ice))
(not (rezzed? (get-card state chosen-ice))))
:prompt (str "Rez " (card-str state chosen-ice) ", ignoring all costs?")
:yes-ability {:async true
:effect
(effect (rez state :corp eid chosen-ice {:ignore-cost :all-costs}))}}}])
(derez state side eid target)))}
card nil)
(effect-completed state side eid))))}]
(filter #(and (ice? %)
(= (first (:server target)) (second (get-zone %))))
(all-active-installed state :corp))]
(if (seq rezzed-targets)
(continue-ability
state side
{:prompt "Choose a piece of ice protecting this server to derez"
:waiting-prompt true
:choices {:req (req (some #(same-card? % target) rezzed-targets))}
:async true
:effect
(effect (let [chosen-ice target]
(register-events
state side card
[{:event :run-ends
:duration :end-of-run
:optional
{:player :corp
:waiting-prompt true
:req (req (installed? (get-card state chosen-ice))
(not (rezzed? (get-card state chosen-ice))))
:prompt (str "Rez " (card-str state chosen-ice) ", ignoring all costs?")
:yes-ability {:async true
:effect
(effect (rez state :corp eid chosen-ice {:ignore-cost :all-costs}))}}}])
(derez state side eid target)))}
card nil)
(effect-completed state side eid))))}]
:on-play {:async true
:prompt "Choose a server"
:choices (effect runnable-servers)
:effect (effect (wait-for (resolve-ability state side install-abi card nil)
(make-run state side eid target card)))}}))
(make-run state side eid target card)))}}))
17 changes: 17 additions & 0 deletions test/clj/game/cards/events_test.clj
Original file line number Diff line number Diff line change
Expand Up @@ -8164,6 +8164,23 @@
(is (no-prompt? state :runner) "No Bloop prompt to derez an Harmonic ice")
(is (rezzed? (refresh bloop))))))

(deftest window-of-opportunity-vs-tungsten-tailor
(do-game
(new-game {:corp {:hand ["Echo" "Bloop"]
:credits 20}
:runner {:hand ["Window of Opportunity" "The Tungsten Tailor"]}})
(play-from-hand state :corp "Echo" "HQ")
(rez state :corp "Echo")
(take-credits state :corp)
(play-from-hand state :runner "Window of Opportunity")
(click-prompt state :runner "HQ")
(is (changed? [(:credit (get-runner)) -3]
(click-card state :runner "The Tungsten Tailor"))
"Runner paid install cost")
(is (not (no-prompt? state :runner)) "Window of Opportunity prompt to select ice to derez")
(click-card state :runner "Echo")
(is (not (rezzed? (get-ice state :hq 0))) "Echo derezzed")))

(deftest window-of-opportunity-no-derez
(do-game
(new-game {:corp {:hand ["Vanilla"]}
Expand Down
Loading