Skip to content

Commit 2b7a56b

Browse files
authored
Merge pull request #6745 from NBKelly/parhelion-patch-2
Parhelion patch 2
2 parents bded4d2 + e14d2d8 commit 2b7a56b

32 files changed

+3130
-50
lines changed

src/clj/game/cards/agendas.clj

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
get-card get-counters get-title get-zone has-subtype? ice? in-discard? in-hand?
1515
in-scored? installed? operation? program? resource? rezzed? runner? upgrade?]]
1616
[game.core.card-defs :refer [card-def]]
17+
[game.core.cost-fns :refer [rez-cost install-cost]]
1718
[game.core.damage :refer [damage damage-bonus]]
1819
[game.core.def-helpers :refer [corp-recur defcard do-net-damage
1920
offer-jack-out reorder-choice x-fn]]
@@ -801,6 +802,9 @@
801802
:async true
802803
:effect (req (gain-tags state :runner eid 1))}})
803804

805+
(defcard "Freedom of Information"
806+
{:advancement-requirement (req (- (count-tags state)))})
807+
804808
(defcard "Genetic Resequencing"
805809
{:on-score {:choices {:card in-scored?}
806810
:msg (msg "place 1 agenda counter on " (:title target))
@@ -955,6 +959,17 @@
955959
:once :per-run
956960
:effect (effect (damage eid :net 1 {:card card}))}]})
957961

962+
(defcard "Hybrid Release"
963+
{:on-score {:prompt "Choose a facedown card in Archives to install"
964+
:show-discard true
965+
:async true
966+
:choices {:card #(and (corp-installable-type? %)
967+
(in-discard? %)
968+
(not (faceup? %)))}
969+
:effect (effect (corp-install (make-eid state {:source card :source-type :corp-install}) target nil nil))
970+
:cancel-effect (effect (system-msg "declines to use Hybrid Release"))
971+
:msg (msg "install " (card-str state target))}})
972+
958973
(defcard "Hyperloop Extension"
959974
(let [he {:msg "gain 3 [Credits]"
960975
:async true
@@ -1013,6 +1028,30 @@
10131028
:msg (msg "place 2 advancement token on " (card-str state target))
10141029
:effect (effect (add-prop :corp target :advance-counter 2 {:placed true}))}]})
10151030

1031+
(defcard "Kimberlite Field"
1032+
{:on-score
1033+
{:interactive (req true)
1034+
:async true
1035+
:waiting-prompt "Corp to make a decision"
1036+
:prompt "Choose a card to trash"
1037+
:req (req (some rezzed? (all-installed state :corp)))
1038+
:choices {:card #(rezzed? %)}
1039+
:cancel-effect (effect (system-msg :runner "declines to use Kimberlite Field to trash a card")
1040+
(effect-completed eid))
1041+
:effect (req (let [target-cost (rez-cost state :corp target)
1042+
prompt-str (str "trash a runner card that costs " target-cost " or less")]
1043+
(wait-for (trash state side target {:cause-card card})
1044+
(continue-ability
1045+
state side
1046+
{:prompt prompt-str
1047+
:choices {:card #(and (installed? %)
1048+
(runner? %)
1049+
(<= (install-cost state :runner %) target-cost))}
1050+
:msg (str "trash " (card-str state target))
1051+
:async true
1052+
:effect (effect (trash eid target))}
1053+
card nil))))}})
1054+
10161055
(defcard "Labyrinthine Servers"
10171056
{:on-score {:silent (req true)
10181057
:effect (effect (add-counter card :power 2))}
@@ -1224,6 +1263,9 @@
12241263
:msg "gain 7 [Credits]"
12251264
:effect (effect (gain-credits :corp eid 7))}})
12261265

1266+
(defcard "Ontological Dependence"
1267+
{:advancement-requirement (req (- (or (get-in @state [:runner :brain-damage]) 0)))})
1268+
12271269
(defcard "Orbital Superiority"
12281270
{:on-score
12291271
{:msg (msg (if (is-tagged? state) "do 4 meat damage" "give the Runner 1 tag"))
@@ -1263,6 +1305,16 @@
12631305
:msg (msg "do " (count (:scored runner)) " net damage")
12641306
:effect (effect (damage eid :net (count (:scored runner)) {:card card}))}})
12651307

1308+
(defcard "Post-Truth Dividend"
1309+
{:on-score {:optional
1310+
{:prompt "Draw 1 card?"
1311+
:yes-ability
1312+
{:msg "draw 1 card"
1313+
:async true
1314+
:effect (effect (draw eid 1))}
1315+
:no-ability
1316+
{:effect (effect (system-msg :corp "declines to use Post-Truth Dividend to draw 1 card"))}}}})
1317+
12661318
(defcard "Posted Bounty"
12671319
{:on-score {:optional
12681320
{:prompt "Forfeit this agenda to give the Runner 1 tag and take 1 bad publicity?"
@@ -1549,6 +1601,10 @@
15491601
(check-win-by-agenda state side))
15501602
:cancel-effect (effect (system-msg (str "declines to use " (:title card) " to reveal an agenda in Archives")))}})
15511603

1604+
1605+
(defcard "Regulatory Capture"
1606+
{:advancement-requirement (req (- (min 4 (count-bad-pub state))))})
1607+
15521608
(defcard "Remastered Edition"
15531609
{:on-score {:effect (effect (add-counter card :agenda 1))
15541610
:silent (req true)}

src/clj/game/cards/assets.clj

Lines changed: 138 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959
[game.core.to-string :refer [card-str]]
6060
[game.core.toasts :refer [toast]]
6161
[game.core.update :refer [update!]]
62-
[game.core.winning :refer [check-win-by-agenda]]
62+
[game.core.winning :refer [check-win-by-agenda win]]
6363
[game.macros :refer [continue-ability effect msg req wait-for]]
6464
[game.utils :refer :all]
6565
[jinteki.utils :refer :all]))
@@ -700,6 +700,15 @@
700700
" by " (get-counters card :power) " [Credits]")
701701
:effect (req (swap! state assoc-in [:per-turn (:cid card)] true))}]})
702702

703+
(defcard "Dr. Vientiane Keeling"
704+
{:constant-effects [(runner-hand-size+ (req (- (get-counters card :power))))]
705+
:events [{:event :rez
706+
:msg "add 1 power counter to itself"
707+
:effect (effect (add-counter card :power 1))}
708+
{:event :corp-turn-begins
709+
:msg "add 1 power counter to itself"
710+
:effect (effect (add-counter card :power 1))}]})
711+
703712
(defcard "Drago Ivanov"
704713
{:advanceable :always
705714
:abilities [{:cost [:advancement 2]
@@ -919,6 +928,40 @@
919928
:msg "do 1 meat damage"
920929
:effect (effect (damage eid :meat 1 {:card card}))}]})
921930

931+
(defcard "Gaslight"
932+
(let [search-for-operation {:prompt "Choose an operation to add to HQ"
933+
:msg (msg (if (= target "No action")
934+
"search R&D, but does not find an operation"
935+
(str "add " (get-title target) " to HQ")))
936+
:choices (req (conj (vec (sort-by :title (filter operation? (:deck corp)))) "No action"))
937+
:async true
938+
:effect (req (if (= target "No action")
939+
(do (shuffle! state :corp :deck)
940+
(effect-completed state side eid))
941+
(wait-for
942+
(reveal state side target)
943+
(shuffle! state :corp :deck)
944+
(move state :corp target :hand)
945+
(effect-completed state side eid))))}
946+
ability {:once :per-turn
947+
:async true
948+
:label "Trash this asset to search R&D for an operation (start of turn)"
949+
:req (req (:corp-phase-12 @state))
950+
:effect
951+
(effect
952+
(continue-ability
953+
{:optional
954+
{:prompt "Trash Gaslight to search R&D for an operation?"
955+
:yes-ability
956+
{:async true
957+
:effect (req (wait-for (trash state side card {:cause-card card})
958+
(continue-ability state side search-for-operation card nil)))}}}
959+
card nil))}]
960+
{:derezzed-events [corp-rez-toast]
961+
:flags {:corp-phase-12 (req true)}
962+
:events [(assoc ability :event :corp-turn-begins)]
963+
:abilities [ability]}))
964+
922965
(defcard "Gene Splicer"
923966
{:advanceable :always
924967
:access {:req (req (pos? (get-counters (get-card state card) :advancement)))
@@ -969,6 +1012,20 @@
9691012
:async true
9701013
:effect (effect (lose-credits :runner eid 1))}})
9711014

1015+
(defcard "Hostile Architecture"
1016+
(let [valid-trash (fn [target] (and (corp? (:card target)) (installed? (:card target))))
1017+
ability
1018+
{:event :runner-trash
1019+
:async true
1020+
:once-per-instance false
1021+
:req (req (and (valid-trash target)
1022+
(first-event? state side :runner-trash #(valid-trash (first %)))))
1023+
:msg "do 2 meat damage"
1024+
:effect (effect (damage :corp eid :meat 2 {:card card}))}]
1025+
{:on-trash ability
1026+
:events [ability]}))
1027+
1028+
9721029
(defcard "Hostile Infrastructure"
9731030
(let [ability
9741031
{:event :runner-trash
@@ -1611,6 +1668,20 @@
16111668
:abilities [ability]
16121669
:events [(assoc ability :event :corp-turn-begins)]}))
16131670

1671+
(defcard "Nightmare Archive"
1672+
{:flags {:rd-reveal (req true)}
1673+
:access {:async true
1674+
:msg (msg "force the Runner to " (decapitalize target))
1675+
:player :runner
1676+
:prompt "Choose one"
1677+
:choices ["Take 1 Core Damage" "Add Nightmare Archive to score area"]
1678+
:effect (req (if (= target (str "Add Nightmare Archive to score area"))
1679+
(do (as-agenda state :runner card -1)
1680+
(effect-completed state side eid))
1681+
(do (wait-for (damage state :corp :brain 1 {:card card})
1682+
(move state :corp card :rfg)
1683+
(effect-completed state side eid)))))}})
1684+
16141685
(defcard "Open Forum"
16151686
{:events [{:event :corp-mandatory-draw
16161687
:interactive (req true)
@@ -1901,6 +1972,27 @@
19011972
:events [(assoc ability :event :corp-turn-begins)]
19021973
:abilities [ability]}))
19031974

1975+
(defcard "Reaper Function"
1976+
(let [ability {:async true
1977+
:once :per-turn
1978+
:label "Trash this asset to do 2 net damage (start of turn)"
1979+
:req (req (:corp-phase-12 @state))
1980+
:effect
1981+
(effect
1982+
(continue-ability
1983+
{:optional
1984+
{:prompt "Trash Reaper Function to do 2 net damage?"
1985+
:yes-ability
1986+
{:msg "do 2 net damage"
1987+
:async true
1988+
:effect (req (wait-for (trash state side card {:cause-card card})
1989+
(damage state side eid :net 2 {:card card})))}}}
1990+
card nil))}]
1991+
{:derezzed-events [corp-rez-toast]
1992+
:flags {:corp-phase-12 (req true)}
1993+
:events [(assoc ability :event :corp-turn-begins)]
1994+
:abilities [ability]}))
1995+
19041996
(defcard "Reconstruction Contract"
19051997
{:events [{:event :damage
19061998
:req (req (and (pos? (:amount context))
@@ -2235,6 +2327,22 @@
22352327
(seq (filter #(= (:title %) (:title target)) (:discard runner)))))
22362328
:value [:credit 2]}]})
22372329

2330+
(defcard "Superdeep Borehole"
2331+
;; the "when it is empty" text is reliant on the card being loaded
2332+
{:on-rez {:effect (req (update! state side (assoc-in (get-card state card) [:special :borehole-valid] true))
2333+
(add-counter state side card :bad-publicity 6))}
2334+
:events [{:event :corp-turn-begins
2335+
:msg (msg "take 1 bad publicity from " (:title card))
2336+
:async true
2337+
:effect (req (add-counter state side card :bad-publicity -1 nil)
2338+
(gain-bad-publicity state :corp eid 1))}
2339+
{:event :counter-added
2340+
:req (req (and (same-card? card target)
2341+
(not (pos? (get-counters card :power)))
2342+
(:borehole-valid (:special card))))
2343+
:msg "win the game"
2344+
:effect (req (win state :corp "Superdeep Borehole extinction event"))}]})
2345+
22382346
(defcard "Sundew"
22392347
; If this a run event then handle in :begin-run as we do not know the server
22402348
; being run on in :runner-spent-click.
@@ -2505,6 +2613,35 @@
25052613
:msg (msg (corp-install-msg target))
25062614
:effect (effect (corp-install eid target nil {:ignore-all-cost true}))}]})
25072615

2616+
(defcard "Vera Ivanovna Shuyskaya"
2617+
(let [select-and-trash {:async true
2618+
:prompt "Choose a card to trash"
2619+
:choices (req (cancellable (:hand runner) :sorted))
2620+
:msg (msg "trash " (:title target) " from the grip")
2621+
:effect (effect (trash eid target {:cause-card card}))}
2622+
ability {:interactive (req true)
2623+
:optional {:prompt "Reveal the grip and trash a card?"
2624+
:player :corp
2625+
:autoresolve (get-autoresolve :auto-fire)
2626+
:yes-ability
2627+
{:async true
2628+
:effect (req (wait-for (reveal state side (:hand runner))
2629+
(system-msg state :corp (str "reveal "
2630+
(quantify (count (:hand runner)) "card")
2631+
" from grip: "
2632+
(enumerate-str (map :title (:hand runner)))))
2633+
(continue-ability state side select-and-trash card nil)))}
2634+
:no-ability {:effect (effect (system-msg "declines to use Vera Ivanovna Shuyskaya"))}}}]
2635+
{:events [{:event :agenda-scored
2636+
:interactive (req true)
2637+
:async true
2638+
:effect (effect (continue-ability ability card nil))}
2639+
{:event :agenda-stolen
2640+
:interactive (req true)
2641+
:async true
2642+
:effect (effect (continue-ability ability card nil))}]
2643+
:abilities [(set-autoresolve :auto-fire "Vera Ivanovna Shuyskaya")]}))
2644+
25082645
(defcard "Victoria Jenkins"
25092646
{:on-rez {:effect (req (lose state :runner :click-per-turn 1))}
25102647
:leave-play (req (gain state :runner :click-per-turn 1))

0 commit comments

Comments
 (0)