Skip to content

Commit e14d2d8

Browse files
authored
Merge branch 'master' into parhelion-patch-2
2 parents 066f4e9 + bded4d2 commit e14d2d8

18 files changed

+216
-82
lines changed

project.clj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
[buddy/buddy-auth "3.0.1"]
5151
[crypto-password "0.3.0"]
5252
[digest "1.4.10"]
53-
[http-kit "2.5.3"]
53+
[http-kit "2.6.0"]
5454
[com.draines/postal "2.0.5"]
5555
[throttler "1.0.1"]
5656
[clj-http "3.12.3"]

src/clj/game/cards/agendas.clj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
[game.core.cost-fns :refer [rez-cost install-cost]]
1818
[game.core.damage :refer [damage damage-bonus]]
1919
[game.core.def-helpers :refer [corp-recur defcard do-net-damage
20-
offer-jack-out reorder-choice]]
20+
offer-jack-out reorder-choice x-fn]]
2121
[game.core.drawing :refer [draw]]
2222
[game.core.effects :refer [register-floating-effect]]
2323
[game.core.eid :refer [effect-completed make-eid]]
@@ -379,7 +379,8 @@
379379
:effect (effect (continue-ability (:on-score (card-def target)) target nil))}}}})
380380

381381
(defcard "Blood in the Water"
382-
{:advancement-requirement (req (count (:hand runner)))})
382+
{:x-fn (req (count (:hand runner)))
383+
:advancement-requirement x-fn})
383384

384385
(defcard "Brain Rewiring"
385386
{:on-score
@@ -1081,8 +1082,7 @@
10811082
:msg (msg "trash " (quantify (count targets) "card") " from HQ")
10821083
:async true
10831084
:cancel-effect (req (system-msg state :corp (str "declines to use " (:title card) " to trash any cards from HQ"))
1084-
(shuffle-into-rd-effect state side eid card 3)
1085-
(effect-completed state side eid))
1085+
(shuffle-into-rd-effect state side eid card 3))
10861086
:effect (req (wait-for (trash-cards state side targets {:unpreventable true :cause-card card})
10871087
(shuffle-into-rd-effect state side eid card 3)))}})
10881088

src/clj/game/cards/assets.clj

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
lose-bad-publicity]]
1212
[game.core.board :refer [all-active-installed all-installed
1313
installable-servers]]
14-
[game.core.card :refer [agenda? asset? can-be-advanced? corp? event?
14+
[game.core.card :refer [active? agenda? asset? can-be-advanced? corp? event?
1515
faceup? fake-identity? get-advancement-requirement
1616
get-agenda-points get-card get-counters get-title
1717
get-zone hardware? has-subtype? ice? identity?
@@ -20,7 +20,7 @@
2020
[game.core.card-defs :refer [card-def]]
2121
[game.core.damage :refer [damage damage-prevent]]
2222
[game.core.def-helpers :refer [corp-recur corp-rez-toast defcard
23-
trash-on-empty]]
23+
trash-on-empty x-fn]]
2424
[game.core.drawing :refer [draw first-time-draw-bonus max-draw
2525
remaining-draws]]
2626
[game.core.effects :refer [register-floating-effect]]
@@ -1173,10 +1173,11 @@
11731173
:effect (effect (mill :corp eid :runner 1))}]})
11741174

11751175
(defcard "Kuwinda K4H1U3"
1176-
{:derezzed-events [corp-rez-toast]
1176+
{:x-fn (req (get-counters card :power))
1177+
:derezzed-events [corp-rez-toast]
11771178
:flags {:corp-phase-12 (req true)}
11781179
:abilities [{:label "Trace X - do 1 brain damage (start of turn)"
1179-
:trace {:base (req (get-counters card :power))
1180+
:trace {:base x-fn
11801181
:successful
11811182
{:async true
11821183
:msg "do 1 brain damage"
@@ -1597,7 +1598,8 @@
15971598
:abilities [(set-autoresolve :auto-fire "Net Analytics")]}))
15981599

15991600
(defcard "Net Police"
1600-
{:recurring (req (get-link state))
1601+
{:x-fn (req (get-link state))
1602+
:recurring x-fn
16011603
:interactions {:pay-credits {:req (req (= :trace (:source-type eid)))
16021604
:type :recurring}}})
16031605

src/clj/game/cards/hardware.clj

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
get-only-card-to-access]]
77
[game.core.actions :refer [play-ability]]
88
[game.core.board :refer [all-active all-active-installed all-installed]]
9-
[game.core.card :refer [corp? event? facedown? get-card get-counters
9+
[game.core.card :refer [active? corp? event? facedown? get-card get-counters
1010
get-zone hardware? has-subtype? ice? in-deck? in-discard?
1111
in-hand? installed? program? resource? rezzed? runner? virus-program? faceup?]]
1212
[game.core.card-defs :refer [card-def]]
@@ -15,7 +15,7 @@
1515
[game.core.damage :refer [chosen-damage damage damage-prevent
1616
enable-runner-damage-choice runner-can-choose-damage?]]
1717
[game.core.def-helpers :refer [breach-access-bonus defcard offer-jack-out
18-
reorder-choice trash-on-empty]]
18+
reorder-choice trash-on-empty x-fn]]
1919
[game.core.drawing :refer [draw]]
2020
[game.core.effects :refer [register-floating-effect
2121
unregister-effects-for-card unregister-floating-effects]]
@@ -272,12 +272,12 @@
272272
:effect (effect (damage eid :brain 1 {:card card}))}})
273273

274274
(defcard "Brain Chip"
275-
(let [runner-points (fn [s] (max (get-in @s [:runner :agenda-point] 0) 0))]
276-
{:constant-effects [(mu+
277-
(req (pos? (runner-points state)))
278-
;; [:regular N] is needed to make the mu system work
279-
(req [:regular (runner-points state)]))
280-
(runner-hand-size+ (req (runner-points state)))]}))
275+
{:x-fn (req (max (get-in @state [:runner :agenda-point] 0) 0))
276+
:constant-effects [(mu+
277+
(req (pos? (x-fn state side eid card targets)))
278+
;; [:regular N] is needed to make the mu system work
279+
(req [:regular (x-fn state side eid card targets)]))
280+
(runner-hand-size+ x-fn)]})
281281

282282
(defcard "Buffer Drive"
283283
(let [grip-or-stack-trash?
@@ -1186,8 +1186,9 @@
11861186
:effect (effect (draw eid 1))}]})
11871187

11881188
(defcard "Māui"
1189-
{:constant-effects [(mu+ 2)]
1190-
:recurring (req (count (get-in corp [:servers :hq :ices])))
1189+
{:x-fn (req (count (get-in corp [:servers :hq :ices])))
1190+
:constant-effects [(mu+ 2)]
1191+
:recurring x-fn
11911192
:interactions {:pay-credits {:req (req (= [:hq] (get-in @state [:run :server])))
11921193
:type :recurring}}})
11931194

src/clj/game/cards/ice.clj

Lines changed: 28 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
[game.core.damage :refer [damage]]
1717
[game.core.def-helpers :refer [combine-abilities corp-recur defcard
1818
do-brain-damage do-net-damage offer-jack-out
19-
reorder-choice]]
19+
reorder-choice x-fn]]
2020
[game.core.drawing :refer [draw]]
2121
[game.core.effects :refer [get-effects register-floating-effect unregister-constant-effects]]
2222
[game.core.eid :refer [complete-with-result effect-completed make-eid]]
@@ -123,7 +123,6 @@
123123
(break-sub [:lose-click cost] qty nil
124124
(assoc args :req (req (currently-encountering-card card state))))))
125125

126-
127126
;;; General subroutines
128127
(def end-the-run
129128
"Basic ETR subroutine"
@@ -2856,13 +2855,14 @@
28562855
(wait-for (resolve-ability state side trash-program-sub card nil)
28572856
(trash-programs (dec cnt) state side card eid))
28582857
(effect-completed state side eid)))]
2859-
{:subroutines [{:label "Do 1 net damage for each rezzed NEXT ice"
2860-
:msg (msg "do " (next-ice-count corp) " net damage")
2861-
:effect (effect (damage eid :net (next-ice-count corp) {:card card}))}
2862-
{:label "Trash 1 program for each rezzed NEXT ice"
2858+
{:x-fn (req (next-ice-count corp))
2859+
:subroutines [{:label "Do X net damage"
2860+
:msg (msg "do " (x-fn state side eid card targets) " net damage")
2861+
:effect (effect (damage eid :net (x-fn state side eid card targets) {:card card}))}
2862+
{:label "Trash X programs"
28632863
:async true
28642864
:effect (req (trash-programs (min (count (filter program? (all-active-installed state :runner)))
2865-
(next-ice-count corp))
2865+
(x-fn state side eid card targets))
28662866
state side card eid))}]}))
28672867

28682868
(defcard "NEXT Opal"
@@ -2888,10 +2888,11 @@
28882888
:effect (effect (reset-variable-subs card (next-ice-count corp) sub))}]}))
28892889

28902890
(defcard "NEXT Sapphire"
2891-
{:subroutines [{:label "Draw up to X cards"
2892-
:prompt "How many cards do you want to draw?"
2891+
{:x-fn (req (next-ice-count corp))
2892+
:subroutines [{:label "Draw up to X cards"
2893+
:prompt "Draw how many cards?"
28932894
:msg (msg "draw " (quantify target "card"))
2894-
:choices {:number (req (next-ice-count corp))
2895+
:choices {:number x-fn
28952896
:default (req 1)}
28962897
:async true
28972898
:effect (effect (draw eid target))}
@@ -2900,7 +2901,7 @@
29002901
:show-discard true
29012902
:choices {:card #(and (corp? %)
29022903
(in-discard? %))
2903-
:max (req (next-ice-count corp))}
2904+
:max x-fn}
29042905
:effect (req (doseq [c targets]
29052906
(move state side c :hand)))
29062907
:msg (msg "add "
@@ -2915,7 +2916,7 @@
29152916
:prompt "Choose cards to shuffle into R&D"
29162917
:choices {:card #(and (corp? %)
29172918
(in-hand? %))
2918-
:max (req (next-ice-count corp))}
2919+
:max x-fn}
29192920
:effect (req (doseq [c targets]
29202921
(move state :corp c :deck))
29212922
(shuffle! state :corp :deck))
@@ -2949,7 +2950,7 @@
29492950
:effect (effect (add-prop card :advance-counter 1 {:placed true})
29502951
(continue-ability
29512952
(let [card (get-card state card)
2952-
counters (get-counters card :advancement)]
2953+
counters (x-fn state side eid card targets)]
29532954
{:optional
29542955
{:prompt (str "Place " (quantify counters "advancement counter") " on another ice?")
29552956
:yes-ability
@@ -2958,6 +2959,7 @@
29582959
:not-self true}
29592960
:effect (effect (add-prop target :advance-counter counters {:placed true}))}}})
29602961
(get-card state card) nil))}
2962+
:x-fn (req (get-counters card :advancement))
29612963
:subroutines [end-the-run
29622964
end-the-run]})
29632965

@@ -3254,10 +3256,11 @@
32543256

32553257
(defcard "Searchlight"
32563258
(let [sub {:label "Trace X - Give the Runner 1 tag"
3257-
:trace {:base (req (get-counters card :advancement))
3259+
:trace {:base x-fn
32583260
:label "Give the Runner 1 tag"
32593261
:successful (give-tags 1)}}]
3260-
{:advanceable :always
3262+
{:x-fn (req (get-counters card :advancement))
3263+
:advanceable :always
32613264
:subroutines [sub
32623265
sub]}))
32633266

@@ -3454,16 +3457,16 @@
34543457
trash-program-sub]})
34553458

34563459
(defcard "Surveyor"
3457-
(let [x (req (* 2 (count (:ices (card->server state card)))))]
3458-
{:constant-effects [(ice-strength-bonus x)]
3459-
:subroutines [{:label "Trace X - Give the Runner 2 tags"
3460-
:trace {:base x
3461-
:label "Give the Runner 2 tags"
3462-
:successful (give-tags 2)}}
3463-
{:label "Trace X - End the run"
3464-
:trace {:base x
3465-
:label "End the run"
3466-
:successful end-the-run}}]}))
3460+
{:constant-effects [(ice-strength-bonus x-fn)]
3461+
:x-fn (req (* 2 (count (:ices (card->server state card)))))
3462+
:subroutines [{:label "Trace X - Give the Runner 2 tags"
3463+
:trace {:base x-fn
3464+
:label "Give the Runner 2 tags"
3465+
:successful (give-tags 2)}}
3466+
{:label "Trace X - End the run"
3467+
:trace {:base x-fn
3468+
:label "End the run"
3469+
:successful end-the-run}}]})
34673470

34683471
(defcard "Susanoo-no-Mikoto"
34693472
{:subroutines [{:async true

src/clj/game/cards/identities.clj

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1061,13 +1061,18 @@
10611061

10621062
(defcard "Lat: Ethical Freelancer"
10631063
{:events [{:event :runner-turn-ends
1064-
:optional {:req (req (= (count (:hand runner)) (count (:hand corp))))
1064+
:interactive (req true)
1065+
:effect
1066+
(effect (continue-ability
1067+
{:optional {:req (req (= (count (:hand runner)) (count (:hand corp))))
10651068
:autoresolve (get-autoresolve :auto-fire)
10661069
:prompt "Draw 1 card?"
10671070
:yes-ability {:async true
10681071
:msg "draw 1 card"
10691072
:effect (effect (draw :runner eid 1))}
1070-
:no-ability {:effect (effect (system-msg (str "declines to use " (:title card))))}}}]
1073+
:no-ability
1074+
{:effect (effect (system-msg (str "declines to use " (:title card))))}}}
1075+
card nil))}]
10711076
:abilities [(set-autoresolve :auto-fire "Lat: Ethical Freelancer")]})
10721077

10731078
(defcard "Leela Patel: Trained Pragmatist"

src/clj/game/cards/operations.clj

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
[game.core.board :refer [all-active-installed all-installed
99
get-all-installed get-remote-names get-remotes
1010
installable-servers server->zone]]
11-
[game.core.card :refer [agenda? asset? can-be-advanced? card-index corp? corp-installable-type?
11+
[game.core.card :refer [active? agenda? asset? can-be-advanced? card-index corp? corp-installable-type?
1212
event? facedown? faceup? get-advancement-requirement
1313
get-card get-counters get-zone hardware? has-subtype? ice? identity? in-discard?
1414
in-hand? installed? is-type? operation? program? resource? rezzed? runner?
@@ -18,7 +18,7 @@
1818
[game.core.costs :refer [total-available-credits]]
1919
[game.core.damage :refer [damage damage-bonus]]
2020
[game.core.def-helpers :refer [corp-recur defcard do-brain-damage
21-
reorder-choice]]
21+
reorder-choice x-fn]]
2222
[game.core.drawing :refer [draw]]
2323
[game.core.effects :refer [register-floating-effect]]
2424
[game.core.eid :refer [effect-completed make-eid make-result]]
@@ -803,15 +803,15 @@
803803
card nil)))}})
804804

805805
(defcard "Fast Break"
806-
{:on-play
806+
{:x-fn (req (-> runner :scored count))
807+
:on-play
807808
{:req (req (-> runner :scored count pos?))
808809
:async true
809810
:effect
810-
(req (let [X (-> runner :scored count)
811-
draw {:async true
812-
:prompt "How many cards do you want to draw?"
813-
:choices {:number (req X)
814-
:max (req X)
811+
(req (let [draw {:async true
812+
:prompt "Draw how many cards?"
813+
:choices {:number x-fn
814+
:max x-fn
815815
:default (req 1)}
816816
:msg (msg "draw " (quantify target "card"))
817817
:effect (effect (draw eid target))}
@@ -825,14 +825,14 @@
825825
:effect (req (wait-for
826826
(corp-install state side target server nil)
827827
(let [server (remote->name (second (:zone async-result)))]
828-
(if (< n X)
828+
(if (< n (x-fn state side eid card targets))
829829
(continue-ability state side (install-cards server (inc n)) card nil)
830830
(effect-completed state side eid)))))})
831831
select-server {:async true
832832
:prompt "Choose a server"
833833
:choices (req (conj (vec (get-remote-names state)) "New remote"))
834834
:effect (effect (continue-ability (install-cards target 1) card nil))}]
835-
(wait-for (gain-credits state :corp X)
835+
(wait-for (gain-credits state :corp (x-fn state side eid card targets))
836836
(wait-for (resolve-ability state side draw card nil)
837837
(continue-ability state side select-server card nil)))))}})
838838

src/clj/game/cards/programs.clj

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
[game.core.access :refer [access-bonus max-access]]
55
[game.core.board :refer [all-active all-active-installed all-installed all-installed-runner-type
66
card->server server->zone]]
7-
[game.core.card :refer [agenda? asset? card-index corp? facedown?
7+
[game.core.card :refer [active? agenda? asset? card-index corp? facedown?
88
get-advancement-requirement get-card get-counters
99
get-nested-host get-title get-zone
1010
hardware? has-subtype? in-hand? in-discard? ice? installed?
@@ -14,7 +14,7 @@
1414
[game.core.cost-fns :refer [all-stealth install-cost min-stealth rez-cost]]
1515
[game.core.costs :refer [total-available-credits]]
1616
[game.core.damage :refer [damage damage-prevent]]
17-
[game.core.def-helpers :refer [breach-access-bonus defcard offer-jack-out trash-on-empty]]
17+
[game.core.def-helpers :refer [breach-access-bonus defcard offer-jack-out trash-on-empty x-fn]]
1818
[game.core.drawing :refer [draw]]
1919
[game.core.effects :refer [register-floating-effect
2020
unregister-effects-for-card]]
@@ -1022,14 +1022,15 @@
10221022

10231023
(defcard "Darwin"
10241024
(auto-icebreaker {:flags {:runner-phase-12 (req true)}
1025+
:x-fn (req (get-virus-counters state card))
10251026
:abilities [(break-sub 2 1)
10261027
{:label "Place 1 virus counter (start of turn)"
10271028
:once :per-turn
10281029
:cost [:credit 1]
10291030
:msg "place 1 virus counter"
10301031
:req (req (:runner-phase-12 @state))
10311032
:effect (effect (add-counter card :virus 1))}]
1032-
:constant-effects [(breaker-strength-bonus (req (get-virus-counters state card)))]}))
1033+
:constant-effects [(breaker-strength-bonus x-fn)]}))
10331034

10341035
(defcard "Datasucker"
10351036
{:events [{:event :successful-run
@@ -2313,7 +2314,8 @@
23132314
card nil))}]}))
23142315

23152316
(defcard "Pheromones"
2316-
{:recurring (req (get-counters card :virus))
2317+
{:x-fn (req (get-counters card :virus))
2318+
:recurring x-fn
23172319
:events [{:event :successful-run
23182320
:silent (req true)
23192321
:req (req (= :hq (target-server context)))

0 commit comments

Comments
 (0)