|
195 | 195 | (move state side c :rfg)) |
196 | 196 | (system-msg state side |
197 | 197 | (str "removes " |
198 | | - (enumerate-str (map :title top-5)) |
| 198 | + (enumerate-cards top-5) |
199 | 199 | " from the game and draws 5 cards")) |
200 | 200 | (draw state :runner eid 5)))}}) |
201 | 201 |
|
|
518 | 518 | (defcard "CBI Raid" |
519 | 519 | (letfn [(cbi-final [chosen original] |
520 | 520 | {:player :corp |
521 | | - :prompt (str "The top cards of R&D will be " (enumerate-str (map :title chosen))) |
| 521 | + :prompt (str "The top cards of R&D will be " (enumerate-cards chosen)) |
522 | 522 | :choices ["Done" "Start over"] |
523 | 523 | :async true |
524 | 524 | :effect (req (if (= target "Done") |
|
624 | 624 | (continue-ability |
625 | 625 | state :runner |
626 | 626 | {:msg "look at the top 3 cards of R&D" |
627 | | - :prompt (msg "The top cards of R&D are (top->bottom): " (enumerate-str (map :title (take 3 (:deck corp))))) |
| 627 | + :prompt (msg "The top cards of R&D are (top->bottom): " (enumerate-cards (take 3 (:deck corp)))) |
628 | 628 | :waiting-prompt true |
629 | 629 | :choices ["OK"]} |
630 | 630 | card nil)) |
|
948 | 948 | (let [top-8 (sort-by :title (get-set-aside state :corp eid))] |
949 | 949 | (system-msg state side (str "uses " (get-title card) |
950 | 950 | " to set aside " |
951 | | - (enumerate-str (map get-title top-8)) |
| 951 | + (enumerate-cards top-8) |
952 | 952 | " from the top of R&D")) |
953 | 953 | (wait-for |
954 | 954 | (resolve-ability state side |
955 | 955 | {:async true |
956 | 956 | :prompt (str "The set aside cards are: " |
957 | | - (enumerate-str (map get-title top-8))) |
| 957 | + (enumerate-cards top-8)) |
958 | 958 | :choices ["OK"]} |
959 | 959 | card nil) |
960 | 960 | (wait-for |
|
1075 | 1075 | (if (seq installed-cards) |
1076 | 1076 | (do |
1077 | 1077 | (system-msg state :runner (str "trashes " (quantify (count installed-cards) "card") |
1078 | | - " (" (enumerate-str (map :title installed-cards)) |
1079 | | - ") at the end of the run from Diana's Hunt")) |
| 1078 | + " (" (enumerate-cards installed-cards :sorted) |
| 1079 | + ") at the end of the run from Diana's Hunt")) |
1080 | 1080 | (trash-cards state :runner eid installed-cards {:unpreventable true |
1081 | 1081 | :cause-card card})) |
1082 | 1082 | (effect-completed state side eid))))}]}) |
|
1194 | 1194 | (do (system-msg |
1195 | 1195 | state side |
1196 | 1196 | (str "uses " (:title card) " to trash " |
1197 | | - (enumerate-str (map :title cards-to-trash)) |
| 1197 | + (enumerate-cards cards-to-trash :sorted) |
1198 | 1198 | " from HQ and gain " |
1199 | 1199 | credits " [Credits]")) |
1200 | 1200 | (wait-for (trash-cards state :runner (map #(assoc % :seen true) cards-to-trash) {:cause-card card}) |
|
1214 | 1214 | (letfn [(ec [trash-cost to-trash] |
1215 | 1215 | {:async true |
1216 | 1216 | :prompt "Choose a piece of hardware or program to install" |
1217 | | - :msg (msg "trash " (if (empty? to-trash) "no cards" (enumerate-str (map :title to-trash))) |
| 1217 | + :msg (msg "trash " (if (empty? to-trash) "no cards" (enumerate-cards to-trash :sorted)) |
1218 | 1218 | " and install " (:title target) " from the Stack, " |
1219 | 1219 | " lowering the cost by " trash-cost) |
1220 | 1220 | :choices (req (cancellable (filter #(and (or (program? %) |
|
1334 | 1334 |
|
1335 | 1335 | (defcard "Executive Wiretaps" |
1336 | 1336 | {:on-play |
1337 | | - {:msg (msg "reveal " (enumerate-str (sort (map :title (:hand corp)))) " from HQ") |
| 1337 | + {:msg (msg "reveal " (enumerate-cards (:hand corp) :sorted) " from HQ") |
1338 | 1338 | :change-in-game-state {:req (req (seq (:hand corp)))} |
1339 | 1339 | :async true |
1340 | 1340 | :effect (effect (reveal eid (:hand corp)))}}) |
|
1542 | 1542 | (effect |
1543 | 1543 | (continue-ability |
1544 | 1544 | (let [top-ten (take 10 (:deck runner))] |
1545 | | - {:prompt (str "The top cards of the stack are (top->bottom): " (enumerate-str (map :title top-ten))) |
| 1545 | + {:prompt (str "The top cards of the stack are (top->bottom): " (enumerate-cards top-ten)) |
1546 | 1546 | :choices ["OK"] |
1547 | 1547 | :async true |
1548 | 1548 | :effect |
|
1562 | 1562 | (system-msg state side |
1563 | 1563 | (str "uses " (get-title card) |
1564 | 1564 | " to trash " |
1565 | | - (enumerate-str (map :title cards)) |
| 1565 | + (enumerate-cards cards) |
1566 | 1566 | " from the top of the stack")) |
1567 | 1567 | (trash-cards state side eid cards {:unpreventable true :cause-card card}))] |
1568 | 1568 | (if (= target "Done") |
|
1590 | 1590 | :card #(and (program? %) |
1591 | 1591 | (in-hand? %))} |
1592 | 1592 | :change-in-game-state {:req (req (seq (:hand runner)))} |
1593 | | - :msg (msg "trash " (enumerate-str (map :title targets)) " and gain " |
| 1593 | + :msg (msg "trash " (enumerate-cards targets :sorted) " and gain " |
1594 | 1594 | (* 2 (count targets)) " [Credits]") |
1595 | 1595 | :async true |
1596 | 1596 | :effect (req (wait-for (trash-cards state side targets {:unpreventable true :cause-card card}) |
|
1624 | 1624 | :msg (msg "move " |
1625 | 1625 | (let [seen (filter :seen targets) |
1626 | 1626 | m (count (remove :seen targets))] |
1627 | | - (str (enumerate-str (map :title seen)) |
| 1627 | + (str (enumerate-cards seen) |
1628 | 1628 | (when (pos? m) |
1629 | 1629 | (str (when-not (empty? seen) " and ") |
1630 | 1630 | (quantify m "unseen card"))) |
|
1836 | 1836 | :choices {:max 5 |
1837 | 1837 | :card #(and (installed? %) |
1838 | 1838 | (runner? %))} |
1839 | | - :msg (msg "trash " (enumerate-str (map :title targets)) |
| 1839 | + :msg (msg "trash " (enumerate-cards targets) |
1840 | 1840 | " and draw " (quantify (cards-to-draw targets) "card")) |
1841 | 1841 | :async true |
1842 | 1842 | :effect (req (wait-for (trash-cards state side targets {:cause-card card}) |
|
1930 | 1930 | (wait-for (trash-cards state side programs {:unpreventable true |
1931 | 1931 | :cause-card card}) |
1932 | 1932 | (system-msg state side (str "reveals " |
1933 | | - (enumerate-str (map :title programs)) |
| 1933 | + (enumerate-cards programs) |
1934 | 1934 | " from the top of the stack," |
1935 | 1935 | " trashes them, and gains " |
1936 | 1936 | (count programs) " [Credits]")) |
|
1981 | 1981 | (resolve-ability state :corp (reorder-choice :corp (take 4 (:deck corp))) card targets) |
1982 | 1982 | (let [top-4 (take 4 (get-in @state [:corp :deck]))] |
1983 | 1983 | (system-msg state :runner (str "reveals " |
1984 | | - (enumerate-str (map :title top-4)) |
| 1984 | + (enumerate-cards top-4) |
1985 | 1985 | " from the top of R&D (top->bottom)")) |
1986 | 1986 | (reveal state :runner eid top-4))))}}) |
1987 | 1987 |
|
|
2143 | 2143 | (first async-result) |
2144 | 2144 | " [Credit] and reveals " |
2145 | 2145 | (if revealed |
2146 | | - (str (enumerate-str (map :title revealed)) |
| 2146 | + (str (enumerate-cards revealed) |
2147 | 2147 | " from the top of R&D (top->bottom)") |
2148 | 2148 | "no cards"))) |
2149 | 2149 | (wait-for |
|
2203 | 2203 | top-n-msg (seq (take mill-count (:deck runner)))] |
2204 | 2204 | (wait-for (mill state :runner :runner mill-count) |
2205 | 2205 | (system-msg state :runner (if top-n-msg |
2206 | | - (str "trashes " (enumerate-str (map :title top-n-msg)) |
| 2206 | + (str "trashes " (enumerate-cards top-n-msg) |
2207 | 2207 | " from the top of the stack") |
2208 | 2208 | "trashes no cards from the top of the stack")) |
2209 | 2209 | (let [heap-count (min 3 (count (get-in @state [:runner :discard])))] |
|
2220 | 2220 | (in-discard? %))} |
2221 | 2221 | :effect (req (doseq [c targets] |
2222 | 2222 | (move state side c :deck)) |
2223 | | - (system-msg state :runner (str "shuffles " (enumerate-str (map :title targets)) |
| 2223 | + (system-msg state :runner (str "shuffles " (enumerate-cards targets) |
2224 | 2224 | " from the heap into the stack, and draws 1 card")) |
2225 | 2225 | (shuffle! state :runner :deck) |
2226 | 2226 | (draw state :runner eid 1))} |
|
2443 | 2443 | (in-hand? %) |
2444 | 2444 | (has-subtype? % type))} |
2445 | 2445 | :prompt (msg "Choose any number of " (decapitalize type) " resources to reveal") |
2446 | | - :msg (msg "reveal " (enumerate-str (map :title (sort-by :title targets))) " from the Grip and gain " (count targets) " [Credits]") |
| 2446 | + :msg (msg "reveal " (enumerate-cards targets :sorted) " from the Grip and gain " (count targets) " [Credits]") |
2447 | 2447 | :async true |
2448 | 2448 | :effect (req (wait-for |
2449 | 2449 | (reveal state side targets) |
|
3247 | 3247 | :show-discard true |
3248 | 3248 | :prompt (str "Choose " (quantify cards-to-move "card") |
3249 | 3249 | " to add from the heap to the grip") |
3250 | | - :msg (msg "add " (enumerate-str (map :title targets)) |
| 3250 | + :msg (msg "add " (enumerate-cards targets :sorted) |
3251 | 3251 | " from the heap to the grip") |
3252 | 3252 | :choices {:max cards-to-move |
3253 | 3253 | :all true |
|
3842 | 3842 | (let [trashed-cards async-result] |
3843 | 3843 | (system-msg state side |
3844 | 3844 | (str "uses " (:title card) " to trash " |
3845 | | - (enumerate-str (map :title trashed-cards)) |
| 3845 | + (enumerate-cards trashed-cards) |
3846 | 3846 | " from the top of the stack")) |
3847 | 3847 | (continue-ability |
3848 | 3848 | state side |
|
4084 | 4084 | :choices {:req (req (and (corp? target) |
4085 | 4085 | (in-hand? target))) |
4086 | 4086 | :max (req (min 2 (count (:hand corp))))} |
4087 | | - :msg (msg "shuffle " (enumerate-str (map :title targets)) " into R&D") |
| 4087 | + :msg (msg "shuffle " (enumerate-cards targets :sorted) " into R&D") |
4088 | 4088 | :effect (req (doseq [t targets] |
4089 | 4089 | (move state :corp t :deck)) |
4090 | 4090 | (shuffle! state :corp :deck))})}}}) |
|
0 commit comments