Skip to content

Commit 1f054e8

Browse files
authored
Merge pull request #6441 from NoahTheDuke/nb/strength-bonus-fix
Fix strength bonuses not applying correctly to programs
2 parents 60df0b4 + 5396cd5 commit 1f054e8

File tree

3 files changed

+60
-48
lines changed

3 files changed

+60
-48
lines changed

src/clj/game/cards/ice.clj

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@
2929
[game.core.gaining :refer [gain-credits lose-clicks lose-credits]]
3030
[game.core.hand-size :refer [hand-size]]
3131
[game.core.hosting :refer [host]]
32-
[game.core.ice :refer [add-sub add-sub! break-sub remove-sub! remove-subs!
33-
resolve-subroutine set-current-ice strength-bonus
34-
unbroken-subroutines-choice update-all-ice update-all-icebreakers
32+
[game.core.ice :refer [add-sub add-sub! break-sub ice-strength-bonus
33+
remove-sub! remove-subs! resolve-subroutine
34+
set-current-ice unbroken-subroutines-choice update-all-ice update-all-icebreakers
3535
update-ice-strength]]
3636
[game.core.initializing :refer [card-init]]
3737
[game.core.installing :refer [corp-install corp-install-list
@@ -359,7 +359,7 @@
359359
[subroutines]
360360
{:advanceable :always
361361
:subroutines subroutines
362-
:constant-effects [(strength-bonus (req (get-counters card :advancement)))]})
362+
:constant-effects [(ice-strength-bonus (req (get-counters card :advancement)))]})
363363

364364
(defn space-ice
365365
"Creates data for Space ice with specified abilities."
@@ -592,7 +592,7 @@
592592
:effect (effect (add-prop target :advance-counter 1 {:placed true})
593593
(gain-credits eid 1))}
594594
(assoc end-the-run :breakable breakable-fn)]
595-
:constant-effects [(strength-bonus
595+
:constant-effects [(ice-strength-bonus
596596
(req (<= 3 (get-counters card :advancement)))
597597
3)]}))
598598

@@ -758,7 +758,7 @@
758758

759759
(defcard "Bathynomus"
760760
{:subroutines [(do-net-damage 3)]
761-
:constant-effects [(strength-bonus (req (protecting-archives? card)) 3)]})
761+
:constant-effects [(ice-strength-bonus (req (protecting-archives? card)) 3)]})
762762

763763
(defcard "Battlement"
764764
{:subroutines [end-the-run
@@ -1083,7 +1083,7 @@
10831083
:label "The Runner trashes 1 program")
10841084
runner-loses-click
10851085
end-the-run]
1086-
:constant-effects [(strength-bonus
1086+
:constant-effects [(ice-strength-bonus
10871087
(req (some #(has-subtype? % "AI") (all-active-installed state :runner)))
10881088
3)]})
10891089

@@ -1102,13 +1102,13 @@
11021102
(corp? %))}
11031103
:msg (msg (corp-install-msg target))
11041104
:effect (effect (corp-install eid target nil nil))}]
1105-
:constant-effects [(strength-bonus (req (protecting-archives? card)) 3)]})
1105+
:constant-effects [(ice-strength-bonus (req (protecting-archives? card)) 3)]})
11061106

11071107
(defcard "Curtain Wall"
11081108
{:subroutines [end-the-run
11091109
end-the-run
11101110
end-the-run]
1111-
:constant-effects [(strength-bonus
1111+
:constant-effects [(ice-strength-bonus
11121112
(req (let [ices (:ices (card->server state card))]
11131113
(same-card? card (last ices))))
11141114
4)]
@@ -1257,7 +1257,7 @@
12571257
:msg (msg "place " (quantify target "power counter"))
12581258
:effect (effect (add-counter card :power target)
12591259
(update-ice-strength card))}
1260-
:constant-effects [(strength-bonus (req (get-counters card :power)))]
1260+
:constant-effects [(ice-strength-bonus (req (get-counters card :power)))]
12611261
:subroutines [(trace-ability 2 {:label "Give the Runner 1 tag and end the run"
12621262
:msg "give the Runner 1 tag and end the run"
12631263
:async true
@@ -1655,7 +1655,7 @@
16551655
:label "Draw cards, reveal and shuffle agendas"
16561656
:effect (req (wait-for (resolve-ability state side draw-ab card nil)
16571657
(continue-ability state side reveal-and-shuffle card nil)))}]
1658-
{:constant-effects [(strength-bonus (req (= :this-turn (:rezzed card))) 6)]
1658+
{:constant-effects [(ice-strength-bonus (req (= :this-turn (:rezzed card))) 6)]
16591659
:subroutines [draw-reveal-shuffle
16601660
end-the-run]}))
16611661

@@ -1691,7 +1691,7 @@
16911691

16921692
(defcard "Gutenberg"
16931693
{:subroutines [(tag-trace 7)]
1694-
:constant-effects [(strength-bonus (req (protecting-rd? card)) 3)]})
1694+
:constant-effects [(ice-strength-bonus (req (protecting-rd? card)) 3)]})
16951695

16961696
(defcard "Gyri Labyrinth"
16971697
{:subroutines [{:req (req run)
@@ -1742,8 +1742,8 @@
17421742
:effect (effect (clear-wait-prompt :runner)
17431743
(trash eid target {:cause :subroutine}))}
17441744
end-the-run]
1745-
:constant-effects [(strength-bonus (req (- (count (filter #(has-subtype? % "Icebreaker")
1746-
(all-active-installed state :runner))))))]})
1745+
:constant-effects [(ice-strength-bonus (req (- (count (filter #(has-subtype? % "Icebreaker")
1746+
(all-active-installed state :runner))))))]})
17471747

17481748
(defcard "Hailstorm"
17491749
{:subroutines [{:label "Remove a card in the Heap from the game"
@@ -2039,7 +2039,7 @@
20392039

20402040
(defcard "IQ"
20412041
{:subroutines [end-the-run]
2042-
:constant-effects [(strength-bonus (req (count (:hand corp))))]
2042+
:constant-effects [(ice-strength-bonus (req (count (:hand corp))))]
20432043
:rez-cost-bonus (req (count (:hand corp)))
20442044
:leave-play (req (remove-watch state (keyword (str "iq" (:cid card)))))})
20452045

@@ -2453,7 +2453,7 @@
24532453

24542454
(defcard "Meru Mati"
24552455
{:subroutines [end-the-run]
2456-
:constant-effects [(strength-bonus (req (protecting-hq? card)) 3)]})
2456+
:constant-effects [(ice-strength-bonus (req (protecting-hq? card)) 3)]})
24572457

24582458
(defcard "Metamorph"
24592459
{:subroutines [{:label "Swap two pieces of ice or swap two installed non-ice"
@@ -2688,7 +2688,7 @@
26882688

26892689
(defcard "NEXT Bronze"
26902690
{:subroutines [end-the-run]
2691-
:constant-effects [(strength-bonus (req (next-ice-count corp)))]})
2691+
:constant-effects [(ice-strength-bonus (req (next-ice-count corp)))]})
26922692

26932693
(defcard "NEXT Diamond"
26942694
{:rez-cost-bonus (req (- (next-ice-count corp)))
@@ -2865,7 +2865,7 @@
28652865
end-the-run-if-tagged]})
28662866

28672867
(defcard "Palisade"
2868-
{:constant-effects [(strength-bonus (req (not (protecting-a-central? card))) 2)]
2868+
{:constant-effects [(ice-strength-bonus (req (not (protecting-a-central? card))) 2)]
28692869
:subroutines [end-the-run]})
28702870

28712871
(defcard "Paper Wall"
@@ -2901,7 +2901,7 @@
29012901
:subroutines [(give-tags 1)
29022902
end-the-run
29032903
end-the-run]
2904-
:constant-effects [(strength-bonus (req (wonder-sub card 3)) 5)]})
2904+
:constant-effects [(ice-strength-bonus (req (wonder-sub card 3)) 5)]})
29052905

29062906
(defcard "Ping"
29072907
{:on-rez {:req (req (and run this-server))
@@ -2937,7 +2937,7 @@
29372937
:effect (effect (add-counter card :power 1)
29382938
(update-all-ice))}
29392939
:subroutines [end-the-run]
2940-
:constant-effects [(strength-bonus (req (get-counters card :power)))]})
2940+
:constant-effects [(ice-strength-bonus (req (get-counters card :power)))]})
29412941

29422942
(defcard "Rainbow"
29432943
{:subroutines [end-the-run]})
@@ -2961,7 +2961,7 @@
29612961
(update-all-ice))}]})
29622962

29632963
(defcard "Resistor"
2964-
{:constant-effects [(strength-bonus (req (count-tags state)))]
2964+
{:constant-effects [(ice-strength-bonus (req (count-tags state)))]
29652965
:subroutines [(trace-ability 4 end-the-run)]})
29662966

29672967
(defcard "Rime"
@@ -3080,7 +3080,7 @@
30803080

30813081
(defcard "Sandstone"
30823082
{:subroutines [end-the-run]
3083-
:constant-effects [(strength-bonus (req (- (get-counters card :virus))))]
3083+
:constant-effects [(ice-strength-bonus (req (- (get-counters card :virus))))]
30843084
:on-encounter {:msg "place 1 virus counter on Sandstone"
30853085
:effect (effect (add-counter card :virus 1)
30863086
(update-ice-strength (get-card state card)))}})
@@ -3103,7 +3103,7 @@
31033103
sub]}))
31043104

31053105
(defcard "Seidr Adaptive Barrier"
3106-
{:constant-effects [(strength-bonus (req (count (:ices (card->server state card)))))]
3106+
{:constant-effects [(ice-strength-bonus (req (count (:ices (card->server state card)))))]
31073107
:subroutines [end-the-run]})
31083108

31093109
(defcard "Self-Adapting Code Wall"
@@ -3299,7 +3299,7 @@
32993299

33003300
(defcard "Surveyor"
33013301
(let [x (req (* 2 (count (:ices (card->server state card)))))]
3302-
{:constant-effects [(strength-bonus x)]
3302+
{:constant-effects [(ice-strength-bonus x)]
33033303
:subroutines [{:label "Trace X - Give the Runner 2 tags"
33043304
:trace {:base x
33053305
:label "Give the Runner 2 tags"
@@ -3553,7 +3553,7 @@
35533553
:req (req (and (same-card? card (:ice context))
35543554
(has-subtype? (:icebreaker context) "AI")))
35553555
:value true}
3556-
(strength-bonus (req (not (protecting-a-central? card))) 3)]
3556+
(ice-strength-bonus (req (not (protecting-a-central? card))) 3)]
35573557
:subroutines [(end-the-run-unless-runner
35583558
"spends [Click][Click][Click]"
35593559
"spend [Click][Click][Click]"
@@ -3775,7 +3775,7 @@
37753775

37763776
(defcard "Wraparound"
37773777
{:subroutines [end-the-run]
3778-
:constant-effects [(strength-bonus
3778+
:constant-effects [(ice-strength-bonus
37793779
(req (not-any? #(has-subtype? % "Fracter") (all-active-installed state :runner)))
37803780
7)]})
37813781

src/clj/game/cards/programs.clj

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@
2929
[game.core.hosting :refer [host]]
3030
[game.core.ice :refer [all-subs-broken-by-card? all-subs-broken?
3131
any-subs-broken-by-card? auto-icebreaker break-sub
32-
break-subroutine! break-subroutines-msg dont-resolve-subroutine! get-strength ice-strength
33-
pump pump-ice set-current-ice strength-bonus strength-pump
32+
break-subroutine! break-subroutines-msg breaker-strength-bonus dont-resolve-subroutine!
33+
get-strength ice-strength pump pump-ice set-current-ice strength-pump
3434
unbroken-subroutines-choice update-breaker-strength]]
3535
[game.core.initializing :refer [ability-init card-init]]
3636
[game.core.installing :refer [install-locked? runner-can-install?
@@ -214,7 +214,7 @@
214214
(Greek/Philosopher suite: Adept, Sage, Savant)"
215215
[abilities]
216216
(auto-icebreaker {:abilities abilities
217-
:constant-effects [(strength-bonus (req (available-mu state)))]}))
217+
:constant-effects [(breaker-strength-bonus (req (available-mu state)))]}))
218218

219219
(defn- break-multiple-types
220220
"Single ability to break multiple types of ice
@@ -337,8 +337,8 @@
337337
(auto-icebreaker
338338
(cloud-icebreaker
339339
{:abilities [(break-sub [:trash-can] 3 ice-type)]
340-
:constant-effects [(strength-bonus (req (count (filter #(has-subtype? % "Icebreaker")
341-
(all-active-installed state :runner)))))]})))
340+
:constant-effects [(breaker-strength-bonus (req (count (filter #(has-subtype? % "Icebreaker")
341+
(all-active-installed state :runner)))))]})))
342342

343343
(defn- global-sec-breaker
344344
"No MU with 2+ link, break any number of subs for 2, pump 2 for 3
@@ -461,7 +461,7 @@
461461
:msg (msg "add " (cost-value eid :x-credits) " power counters")
462462
:effect (effect (add-counter card :power (cost-value eid :x-credits)))}
463463
:abilities [(break-sub 1 1 "All" {:req (req (= (get-strength current-ice) (get-strength card)))})]
464-
:constant-effects [(strength-bonus (req (get-counters card :power)))]})
464+
:constant-effects [(breaker-strength-bonus (req (get-counters card :power)))]})
465465

466466
(defcard "Au Revoir"
467467
{:events [{:event :jack-out
@@ -475,7 +475,7 @@
475475
{:label "Place a virus counter"
476476
:msg "manually place a virus counter on itself"
477477
:effect (effect (add-counter card :virus 1))}]
478-
:constant-effects [(strength-bonus (req (get-virus-counters state card)))]
478+
:constant-effects [(breaker-strength-bonus (req (get-virus-counters state card)))]
479479
:events [{:event :end-breach-server
480480
:req (req (not (or (:did-steal target)
481481
(:did-trash target))))
@@ -530,7 +530,7 @@
530530
(auto-icebreaker {:on-install {:async true
531531
:effect (effect (damage eid :brain 1 {:card card}))}
532532
:abilities [(break-sub 1 0 "Barrier")]
533-
:constant-effects [(strength-bonus (req (:brain-damage runner)))]}))
533+
:constant-effects [(breaker-strength-bonus (req (:brain-damage runner)))]}))
534534

535535
(defcard "Berserker"
536536
(auto-icebreaker {:events [{:event :encounter-ice
@@ -880,7 +880,7 @@
880880

881881
(defcard "Cradle"
882882
(auto-icebreaker {:abilities [(break-sub 2 0 "Code Gate")]
883-
:constant-effects [(strength-bonus (req (- (count (:hand runner)))))]}))
883+
:constant-effects [(breaker-strength-bonus (req (- (count (:hand runner)))))]}))
884884

885885
(defcard "Creeper"
886886
(cloud-icebreaker
@@ -988,7 +988,7 @@
988988
:msg "place 1 virus counter"
989989
:req (req (:runner-phase-12 @state))
990990
:effect (effect (add-counter card :virus 1))}]
991-
:constant-effects [(strength-bonus (req (get-virus-counters state card)))]}))
991+
:constant-effects [(breaker-strength-bonus (req (get-virus-counters state card)))]}))
992992

993993
(defcard "Datasucker"
994994
{:events [{:event :successful-run
@@ -1171,9 +1171,9 @@
11711171
(strength-pump 1 1)]}))
11721172

11731173
(defcard "Echelon"
1174-
(auto-icebreaker {:constant-effects [(strength-bonus (req (count (filter #(and (program? %)
1175-
(has-subtype? % "Icebreaker"))
1176-
(all-active-installed state :runner)))))]
1174+
(auto-icebreaker {:constant-effects [(breaker-strength-bonus (req (count (filter #(and (program? %)
1175+
(has-subtype? % "Icebreaker"))
1176+
(all-active-installed state :runner)))))]
11771177
:abilities [(break-sub 1 1 "Sentry")
11781178
(strength-pump 3 2)]}))
11791179

@@ -1360,7 +1360,7 @@
13601360
(strength-pump 1 1)]}))
13611361

13621362
(defcard "Gauss"
1363-
(auto-icebreaker {:constant-effects [(strength-bonus (req (= :this-turn (installed? card))) 3)]
1363+
(auto-icebreaker {:constant-effects [(breaker-strength-bonus (req (= :this-turn (installed? card))) 3)]
13641364
:abilities [(break-sub 1 1 "Barrier")
13651365
(strength-pump 2 2)]}))
13661366

@@ -1503,7 +1503,7 @@
15031503
:msg "place 1 power counter"
15041504
:async true
15051505
:effect (effect (add-counter eid card :power 1 nil))}]
1506-
:constant-effects [(strength-bonus (req (get-counters card :power)))]}))
1506+
:constant-effects [(breaker-strength-bonus (req (get-counters card :power)))]}))
15071507

15081508
(defcard "Hyperdriver"
15091509
{:flags {:runner-phase-12 (req true)}
@@ -1780,7 +1780,7 @@
17801780

17811781
(defcard "Maven"
17821782
(auto-icebreaker {:abilities [(break-sub 2 1)]
1783-
:constant-effects [(strength-bonus (req (count (filter program? (all-active-installed state :runner)))))]}))
1783+
:constant-effects [(breaker-strength-bonus (req (count (filter program? (all-active-installed state :runner)))))]}))
17841784

17851785
(defcard "Mayfly"
17861786
(auto-icebreaker
@@ -1852,7 +1852,7 @@
18521852
(virus-breaker "Sentry"))
18531853

18541854
(defcard "Na'Not'K"
1855-
(auto-icebreaker {:constant-effects [(strength-bonus (req (count run-ices)))]
1855+
(auto-icebreaker {:constant-effects [(breaker-strength-bonus (req (count run-ices)))]
18561856
:abilities [(break-sub 1 1 "Sentry")
18571857
(strength-pump 3 2)]}))
18581858

@@ -1882,7 +1882,7 @@
18821882

18831883
(defcard "Nfr"
18841884
(auto-icebreaker {:abilities [(break-sub 1 1 "Barrier")]
1885-
:constant-effects [(strength-bonus (req (get-counters card :power)))]
1885+
:constant-effects [(breaker-strength-bonus (req (get-counters card :power)))]
18861886
:events [{:event :end-of-encounter
18871887
:req (req (all-subs-broken-by-card? (:ice context) card))
18881888
:msg "place 1 power counter on itself"
@@ -2207,7 +2207,7 @@
22072207
:msg "remove one power counter"
22082208
:label "Remove 1 power counter"
22092209
:effect (effect (add-counter card :power -1))}]
2210-
:constant-effects [(strength-bonus (req (get-counters card :power)))
2210+
:constant-effects [(breaker-strength-bonus (req (get-counters card :power)))
22112211
{:type :used-mu
22122212
:duration :constant
22132213
:value (req (get-counters card :power))}]}))
@@ -2494,11 +2494,11 @@
24942494
{:cost [:credit 2]
24952495
:msg "place 1 power counter"
24962496
:effect (effect (add-counter card :power 1))}]
2497-
:constant-effects [(strength-bonus (req (get-counters card :power)))]}))
2497+
:constant-effects [(breaker-strength-bonus (req (get-counters card :power)))]}))
24982498

24992499
(defcard "Sūnya"
25002500
(auto-icebreaker {:abilities [(break-sub 2 1 "Sentry")]
2501-
:constant-effects [(strength-bonus (req (get-counters card :power)))]
2501+
:constant-effects [(breaker-strength-bonus (req (get-counters card :power)))]
25022502
:events [{:event :end-of-encounter
25032503
:req (req (all-subs-broken-by-card? (:ice context) card))
25042504
:msg "place 1 power counter on itself"

src/clj/game/core/ice.clj

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@
315315
(when-let [pump-fn (:pump-bonus ability)]
316316
(pump-fn state side (make-eid state) card targets)))))
317317

318-
(defn strength-bonus
318+
(defn ice-strength-bonus
319319
"Use in :constant-effect vectors to give the current ice or program a conditional strength bonus"
320320
([bonus]
321321
{:type :ice-strength
@@ -404,6 +404,18 @@
404404
(sum-effects state side card :breaker-strength)]
405405
(reduce (fnil + 0 0)))))
406406

407+
(defn breaker-strength-bonus
408+
"Use in :constant-effect vectors to give the current ice or program a conditional strength bonus"
409+
([bonus]
410+
{:type :breaker-strength
411+
:req (req (same-card? card target))
412+
:value bonus})
413+
([req-fn bonus]
414+
{:type :breaker-strength
415+
:req (req (and (same-card? card target)
416+
(req-fn state side eid card targets)))
417+
:value bonus}))
418+
407419
(defn update-breaker-strength
408420
"Updates a breaker's current strength by triggering updates and applying their effects."
409421
[state side breaker]

0 commit comments

Comments
 (0)