|
3 | 3 | [clojure.pprint :as pprint] |
4 | 4 | [clojure.set :as set] |
5 | 5 | [clojure.string :as str] |
6 | | - [game.core.access :refer [access-card installed-access-trigger]] |
| 6 | + [game.core.access :refer [access-bonus access-card get-only-card-to-access installed-access-trigger num-cards-to-access]] |
7 | 7 | [game.core.actions :refer [score]] |
8 | 8 | [game.core.agendas :refer [update-all-advancement-requirements |
9 | 9 | update-all-agenda-points]] |
|
26 | 26 | [game.core.eid :refer [complete-with-result effect-completed is-basic-advance-action? make-eid get-ability-targets]] |
27 | 27 | [game.core.engine :refer [not-used-once? pay register-events resolve-ability trigger-event-sync]] |
28 | 28 | [game.core.events :refer [first-event? no-event? turn-events event-count]] |
29 | | - [game.core.flags :refer [lock-zone prevent-current |
| 29 | + [game.core.flags :refer [in-corp-scored? in-runner-scored? lock-zone prevent-current |
30 | 30 | prevent-draw |
31 | | - register-turn-flag! release-zone]] |
| 31 | + register-turn-flag! release-zone when-scored?]] |
32 | 32 | [game.core.gaining :refer [gain gain-clicks gain-credits lose lose-clicks |
33 | 33 | lose-credits]] |
34 | 34 | [game.core.hand-size :refer [corp-hand-size+ runner-hand-size+]] |
|
37 | 37 | [game.core.initializing :refer [card-init]] |
38 | 38 | [game.core.installing :refer [corp-install corp-install-msg]] |
39 | 39 | [game.core.moving :refer [as-agenda mill move remove-from-currently-drawing |
40 | | - swap-cards swap-installed trash trash-cards]] |
| 40 | + swap-agendas swap-cards swap-installed trash trash-cards]] |
41 | 41 | [game.core.optional :refer [get-autoresolve set-autoresolve]] |
42 | 42 | [game.core.payment :refer [can-pay? cost-value ->c]] |
43 | 43 | [game.core.play-instants :refer [play-instant]] |
|
1430 | 1430 | :async true |
1431 | 1431 | :effect (effect (gain-credits eid 1))}]}) |
1432 | 1432 |
|
| 1433 | +(defcard "Investigator Inez Delgado A" |
| 1434 | + {:events [{:event :agenda-scored |
| 1435 | + :interactive (req true) |
| 1436 | + :req (req (seq (:scored runner))) |
| 1437 | + :async true |
| 1438 | + :effect (req |
| 1439 | + (let [scored (:card context)] |
| 1440 | + (continue-ability |
| 1441 | + state side |
| 1442 | + {:optional |
| 1443 | + {:prompt (msg "Swap " (:title scored) " for an agenda in the Runner's score area?") |
| 1444 | + :waiting-prompt true |
| 1445 | + :req (req (seq (get-in @state [:runner :scored]))) |
| 1446 | + :yes-ability |
| 1447 | + {:prompt (str "Choose a scored Runner agenda to swap with " (:title scored)) |
| 1448 | + :choices {:req (req (and (in-runner-scored? state side target) |
| 1449 | + (:agendapoints target) |
| 1450 | + (pos? (:agendapoints target))))} |
| 1451 | + :msg (msg "swap " (card-str state scored) " for " (card-str state target)) |
| 1452 | + :async true |
| 1453 | + :effect (req (let [new-scored (second (swap-agendas state side scored target))] |
| 1454 | + (continue-ability |
| 1455 | + state side |
| 1456 | + (:on-score (card-def new-scored)) |
| 1457 | + new-scored nil)))}}} |
| 1458 | + card targets)))}]}) |
| 1459 | + |
| 1460 | +(defcard "Investigator Inez Delgado A 2" |
| 1461 | + (letfn [(swap-abi [stolen] |
| 1462 | + {:prompt (str "Swap " (:title stolen) " with an agenda in your score area?") |
| 1463 | + :req (req (seq (:scored corp))) |
| 1464 | + :choices {:req (req (in-corp-scored? state side target))} |
| 1465 | + :msg (msg "swap " (card-str state stolen) " for " (card-str state target)) |
| 1466 | + :effect (req (swap-agendas state side target stolen))})] |
| 1467 | + {:events [{:event :agenda-stolen |
| 1468 | + :interactive (req true) |
| 1469 | + :skippable true |
| 1470 | + :async true |
| 1471 | + :effect (req (let [stolen (:card context)] |
| 1472 | + (if (:on-score (card-def stolen)) |
| 1473 | + (continue-ability |
| 1474 | + state side |
| 1475 | + {:optional {:prompt (str "Resolve the when-scored ability on " (:title stolen)) |
| 1476 | + :waiting-prompt true |
| 1477 | + :yes-ability {:async true |
| 1478 | + :msg (msg "resolve the when-scored ability on " (:title stolen)) |
| 1479 | + :effect (req (wait-for |
| 1480 | + (resolve-ability state side (:on-score (card-def stolen)) stolen nil) |
| 1481 | + (if (get-card state stolen) |
| 1482 | + (continue-ability state side (swap-abi stolen) card nil) |
| 1483 | + (effect-completed state side eid))))} |
| 1484 | + :no-ability (swap-abi stolen)}} |
| 1485 | + card nil) |
| 1486 | + (continue-ability state side (swap-abi stolen) card nil))))}]})) |
| 1487 | + |
1433 | 1488 | (defcard "Isabel McGuire" |
1434 | 1489 | {:abilities [{:action true |
1435 | 1490 | :label "Add an installed card to HQ" |
|
1682 | 1737 | :msg "give the Runner 1 tag" |
1683 | 1738 | :effect (req (gain-tags state :runner eid 1))}]}) |
1684 | 1739 |
|
| 1740 | +(defcard "Lt. Todachine 2" |
| 1741 | + {:events [{:event :rez |
| 1742 | + :req (req (ice? (:card context))) |
| 1743 | + :async true |
| 1744 | + :msg "give the Runner 1 tag" |
| 1745 | + :effect (req (gain-tags state :runner eid 1))} |
| 1746 | + {:event :breach-server |
| 1747 | + :interactive (req true) |
| 1748 | + :player :corp |
| 1749 | + :req (req tagged) |
| 1750 | + :async true |
| 1751 | + ;; the random-access check needs to be dereffed to work correctly |
| 1752 | + :effect (req (continue-ability |
| 1753 | + state side |
| 1754 | + {:req (req |
| 1755 | + (and tagged |
| 1756 | + (> (:random-access-limit (num-cards-to-access state :runner target nil)) 1) |
| 1757 | + (not (get-only-card-to-access state)))) |
| 1758 | + :msg (msg "make the runner access 1 card fewer") |
| 1759 | + :effect (req (access-bonus state :runner target -1))} |
| 1760 | + card targets))}]}) |
| 1761 | + |
1685 | 1762 | (defcard "Malia Z0L0K4" |
1686 | 1763 | (let [unmark |
1687 | 1764 | (req (when-let [malia-target (get-in card [:special :malia-target])] |
|
3045 | 3122 | (contains? break-ability :break-cost))))) |
3046 | 3123 | :value true}]}) |
3047 | 3124 |
|
| 3125 | +(defcard "Trojan" |
| 3126 | + {:flags {:rd-reveal (req true)} |
| 3127 | + :poison true |
| 3128 | + :on-access {:async true |
| 3129 | + :req (req (not (in-discard? card))) |
| 3130 | + :msg (msg "lose 2 [Credits], destroy itself, and trash 1 card from HQ at random") |
| 3131 | + :effect (req (wait-for |
| 3132 | + (lose-credits state :corp 2) |
| 3133 | + (move state side card :destroyed) |
| 3134 | + (let [trash-target (first (shuffle (get-in @state [:corp :hand])))] |
| 3135 | + (if trash-target |
| 3136 | + (trash state :corp eid trash-target {:cause-card card}) |
| 3137 | + (effect-completed state side eid)))))}}) |
| 3138 | + |
3048 | 3139 | (defcard "Turtlebacks" |
3049 | 3140 | {:events [{:event :server-created |
3050 | 3141 | :msg "gain 1 [Credits]" |
|
0 commit comments