Skip to content

Commit

Permalink
Merge pull request #4319 from lostgeek/fueno
Browse files Browse the repository at this point in the history
Fencer Fueno now integrated in pay-credits prompt
  • Loading branch information
NoahTheDuke authored Jul 18, 2019
2 parents 9e8811f + 02f04f1 commit 07527f0
Show file tree
Hide file tree
Showing 2 changed files with 103 additions and 52 deletions.
48 changes: 26 additions & 22 deletions src/clj/game/cards/resources.clj
Original file line number Diff line number Diff line change
Expand Up @@ -920,28 +920,32 @@
:effect (req (as-agenda state :runner eid card 0))}}}

"Fencer Fueno"
(companion-builder
(req (and (pos? (get-counters (get-card state card) :credit))
(:successful run)))
(effect (show-wait-prompt :corp "Runner to take decision on Fencer Fueno")
(continue-ability
{:prompt "Pay 1 [Credits] or trash Fencer Fueno?"
:choices (req (if (can-pay? state :runner eid card nil :credit 1)
["Pay 1 [Credits]" "Trash"]
["Trash"]))
:player :runner
:effect (req (if (= target "Trash")
(do
(trash state :runner card)
(system-msg state :runner "trashes Fencer Fueno"))
(do
(pay state :runner card :credit 1)
(system-msg state :runner "pays 1 [Credits] to avoid trashing Fencer Fueno")))
(clear-wait-prompt state :corp))}
card nil))
{:msg "take 1 [Credits]"
:effect (effect (add-counter card :credit -1)
(gain-run-credits 1))})
(assoc
(companion-builder
(req (and (pos? (get-counters (get-card state card) :credit))
(:successful run)))
(effect (show-wait-prompt :corp "Runner to take decision on Fencer Fueno")
(continue-ability
{:prompt "Pay 1 [Credits] or trash Fencer Fueno?"
:choices (req (if (can-pay? state :runner eid card nil :credit 1)
["Pay 1 [Credits]" "Trash"]
["Trash"]))
:player :runner
:effect (req (if (= target "Trash")
(do
(trash state :runner card)
(system-msg state :runner "trashes Fencer Fueno"))
(do
(pay state :runner card :credit 1)
(system-msg state :runner "pays 1 [Credits] to avoid trashing Fencer Fueno")))
(clear-wait-prompt state :corp))}
card nil))
{:msg "take 1 [Credits]"
:effect (effect (add-counter card :credit -1)
(gain-run-credits 1))})
:interactions {:pay-credits {:req (req (:successful run))
:type :credit}})


"Fester"
{:events {:purge {:msg "force the Corp to lose 2 [Credits] if able"
Expand Down
107 changes: 77 additions & 30 deletions test/clj/game_test/cards/resources.clj
Original file line number Diff line number Diff line change
Expand Up @@ -1167,38 +1167,85 @@

(deftest fencer-fueno
;; Fencer Fueno - Companion, credits usable only during successful runs (after accessing server)
(do-game
(new-game {:corp {:hand ["Hostile Takeover" "PAD Campaign"]}
:runner {:hand ["Fencer Fueno"]}})
(play-from-hand state :corp "PAD Campaign" "New remote")
(take-credits state :corp)
(play-from-hand state :runner "Fencer Fueno")
(let [ff (get-resource state 0)]
(core/add-counter state :runner (refresh ff) :credit 4)
(is (= 4 (get-counters (refresh ff) :credit)) "Fencer counters added")
(let [credits (:credit (get-runner))
counters (get-counters (refresh ff) :credit)]
(testing "Basic test"
(do-game
(new-game {:corp {:hand ["Hostile Takeover" "PAD Campaign"]}
:runner {:hand ["Fencer Fueno"]}})
(play-from-hand state :corp "PAD Campaign" "New remote")
(take-credits state :corp)
(play-from-hand state :runner "Fencer Fueno")
(let [ff (get-resource state 0)]
(core/add-counter state :runner (refresh ff) :credit 4)
(is (= 4 (get-counters (refresh ff) :credit)) "Fencer counters added")
(let [credits (:credit (get-runner))
counters (get-counters (refresh ff) :credit)]
(run-on state "Server 1")
(card-ability state :runner ff 0)
(is (= credits (:credit (get-runner))) "Can't use credits on Fencer before a successul run")
(run-successful state)
(card-ability state :runner ff 0)
(is (= (dec counters) (get-counters (refresh ff) :credit)) "Spent 1c from Fencer")
(is (= (inc credits) (:credit (get-runner))) "Used credits from Fencer for trash")
(click-prompt state :runner "Pay 4 [Credits] to trash")
(click-prompt state :runner "Done")) ; pay-credits prompt
(take-credits state :runner)
(let [credits (:credit (get-runner))]
(click-prompt state :runner "Pay 1 [Credits]")
(is (= (dec credits) (:credit (get-runner))) "Paid 1c to not trash Fencer")
(is (refresh ff) "Fencer not trashed")
(is (not (find-card "Fencer Fueno" (:discard (get-runner)))) "Fencer not in discard yet")
(take-credits state :corp)
(take-credits state :runner))
(let [credits (:credit (get-runner))]
(click-prompt state :runner "Trash")
(is (= credits (:credit (get-runner))) "Didn't pay to trash Fencer")
(is (nil? (refresh ff)) "Fencer not installed")
(is (find-card "Fencer Fueno" (:discard (get-runner))) "Fencer trashed")))))
(testing "pay-credits prompt"
(do-game
(new-game {:corp {:hand ["Pop-up Window" "PAD Campaign"]}
:runner {:hand ["Fencer Fueno"]}})
(play-from-hand state :corp "PAD Campaign" "New remote")
(play-from-hand state :corp "Pop-up Window" "Server 1")
(take-credits state :corp)
(play-from-hand state :runner "Fencer Fueno")
(core/lose state :runner :credit 5) ;no money besides fueno
(let [ff (get-resource state 0)
popup (get-ice state :remote1 0)]
(core/add-counter state :runner (refresh ff) :credit 4)
(is (= 4 (get-counters (refresh ff) :credit)) "Fencer counters added")
(run-on state "Server 1")
(card-ability state :runner ff 0)
(is (= credits (:credit (get-runner))) "Can't use credits on Fencer before a successul run")
(core/rez state :corp popup)
(core/play-runner-ability state :runner {:card popup
:ability 0
:targets nil})
(is (empty? (get-in @state [:runner :prompt])) "No prompt for Fueno")
(run-continue state)
(run-successful state)
(card-ability state :runner ff 0)
(is (= (dec counters) (get-counters (refresh ff) :credit)) "Spent 1c from Fencer")
(is (= (inc credits) (:credit (get-runner))) "Used credits from Fencer for trash")
(click-prompt state :runner "Pay 4 [Credits] to trash"))
(take-credits state :runner)
(let [credits (:credit (get-runner))]
(click-prompt state :runner "Pay 1 [Credits]")
(is (= (dec credits) (:credit (get-runner))) "Paid 1c to not trash Fencer")
(is (refresh ff) "Fencer not trashed")
(is (not (find-card "Fencer Fueno" (:discard (get-runner)))) "Fencer not in discard yet")
(take-credits state :corp)
(take-credits state :runner))
(let [credits (:credit (get-runner))]
(click-prompt state :runner "Trash")
(is (= credits (:credit (get-runner))) "Didn't pay to trash Fencer")
(is (nil? (refresh ff)) "Fencer not installed")
(is (find-card "Fencer Fueno" (:discard (get-runner))) "Fencer trashed")))))
(changes-val-macro 0 (:credit (get-runner))
"Used 4 credit from Fencer Fueno"
(click-prompt state :runner "Pay 4 [Credits] to trash")
(dotimes [_ 4] (click-card state :runner ff))))))
(testing "pay-credits + Gagarin"
(do-game
(new-game {:corp {:id "Gagarin Deep Space: Expanding the Horizon"
:deck ["PAD Campaign"]}
:runner {:hand ["Fencer Fueno"]}})
(play-from-hand state :corp "PAD Campaign" "New remote")
(take-credits state :corp)
(core/lose state :runner :credit 5) ;no money besides fueno
(play-from-hand state :runner "Fencer Fueno")
(let [ff (get-resource state 0)
pad (get-content state :remote1 0)]
(core/add-counter state :runner (refresh ff) :credit 5)
(is (= 5 (get-counters (refresh ff) :credit)) "Fencer counters added")
(run-empty-server state "Server 1")
(changes-val-macro 0 (:credit (get-runner))
"Used 1 credit from Fencer Fueno"
(click-card state :runner pad)
(click-card state :runner ff) ; pay Gagarin credit
(click-prompt state :runner "Pay 4 [Credits] to trash")
(dotimes [_ 4] (click-card state :runner ff)))))))

(deftest fester
;; Fester - Corp loses 2c (if able) when purging viruses
Expand Down

0 comments on commit 07527f0

Please sign in to comment.