Skip to content

Commit d4b4482

Browse files
authored
Merge pull request #7950 from NBKelly/load-trash-changes
cursed assimilator interactions
2 parents 1558d1d + 8750f86 commit d4b4482

File tree

6 files changed

+97
-20
lines changed

6 files changed

+97
-20
lines changed

src/clj/game/cards/hardware.clj

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,11 +98,12 @@
9898
(defcard "AirbladeX (JSRF Ed.)"
9999
{:data {:counter {:power 3}}
100100
:interactions {:prevent [{:type #{:net}
101-
:req (req run)}]}
101+
:req (req (and run (pos? (get-counters card :power))))}]}
102102
:events [(trash-on-empty :power)
103103
{:event :prevent-encounter-ability
104104
:interactive (req true)
105-
:req (req (not (get-in @state [:run :prevent-encounter-ability])))
105+
:req (req (and (not (get-in @state [:run :prevent-encounter-ability]))
106+
(pos? (get-counters card :power))))
106107
:async true
107108
:effect (req
108109
(if (get-in @state [:run :prevent-encounter-ability])
@@ -488,6 +489,7 @@
488489
{:async true
489490
:msg "rearrange the top 4 cards of R&D"
490491
:cost [(->c :power 1)]
492+
:req (req (pos? (get-counters card :power)))
491493
:waiting-prompt true
492494
:effect (req (continue-ability
493495
state side

src/clj/game/cards/resources.clj

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -921,7 +921,8 @@
921921
:once :per-turn
922922
:label "Take 1 [Credits] (start of turn)"
923923
:msg "gain 1 [Credits]"
924-
:req (req (:runner-phase-12 @state))
924+
:req (req (and (:runner-phase-12 @state)
925+
(pos? (get-counters card :credit))))
925926
:effect (req (add-counter state side card :credit -1)
926927
(wait-for (gain-credits state :runner 1)
927928
(if (not (pos? (get-counters (get-card state card) :credit)))
@@ -1016,7 +1017,8 @@
10161017
(defcard "Daily Casts"
10171018
(let [ability {:once :per-turn
10181019
:label "Take 2 [Credits] (start of turn)"
1019-
:req (req (:runner-phase-12 @state))
1020+
:req (req (and (:runner-phase-12 @state)
1021+
(pos? (get-counters card :credit))))
10201022
:msg (msg "gain " (min 2 (get-counters card :credit)) " [Credits]")
10211023
:async true
10221024
:effect (req (let [credits (min 2 (get-counters card :credit))]
@@ -1307,20 +1309,19 @@
13071309
(defcard "Earthrise Hotel"
13081310
(let [ability {:msg "draw 2 cards"
13091311
:once :per-turn
1310-
:cost [(->c :power 1)]
13111312
:req (req (:runner-phase-12 @state))
13121313
:async true
13131314
:interactive (req true)
1314-
:effect (req (wait-for (draw state :runner 2)
1315-
(if (not (pos? (get-counters (get-card state card) :power)))
1316-
(trash state :runner eid card {:unpreventable true :cause-card card})
1317-
(effect-completed state side eid))))}]
1315+
:effect (req (when (pos? (get-counters card :power))
1316+
(add-counter state side card :power -1))
1317+
(draw state side eid 2))}]
13181318
{:flags {:runner-turn-draw true
13191319
:runner-phase-12 (req (< 1 (count (filter #(card-flag? % :runner-turn-draw true)
13201320
(cons (get-in @state [:runner :identity])
13211321
(all-active-installed state :runner))))))}
13221322
:data {:counter {:power 3}}
1323-
:events [(assoc ability :event :runner-turn-begins)]
1323+
:events [(assoc ability :event :runner-turn-begins)
1324+
(trash-on-empty :power)]
13241325
:abilities [ability]}))
13251326

13261327
(defcard "Eden Shard"
@@ -1884,17 +1885,16 @@
18841885
(defcard "Juli Moreira Lee"
18851886
{:data {:counter {:power 4}}
18861887
:events [(trash-on-empty :power)
1887-
{:event :runner-spent-click
1888+
{:event :action-played
18881889
:once :per-turn
1889-
:req (req (let [all-cards (get-all-cards state)
1890-
pred #(and (:is-game-action? %)
1891-
(resource? (:stripped-source-card %)))]
1892-
(and (pred context)
1893-
(first-event? state side :runner-spent-click
1894-
#(pred (first %))))))
1895-
:cost [(->c :power 1)]
1890+
:req (req (let [valid-ctx? (fn [[ctx]] (resource? (:card ctx)))]
1891+
(and (valid-ctx? targets)
1892+
(= :runner side)
1893+
(first-event? state side :action-played valid-ctx?))))
18961894
:msg "gain [Click]"
1897-
:effect (effect (gain-clicks 1))}]})
1895+
:effect (req (when (pos? (get-counters card :power))
1896+
(add-counter state side card :power -1))
1897+
(gain-clicks state side 1))}]})
18981898

18991899
(defcard "Kasi String"
19001900
{:events [{:event :run-ends
@@ -2017,6 +2017,7 @@
20172017
:abilities [{:action true
20182018
:cost [(->c :click 1)]
20192019
:keep-menu-open :while-clicks-left
2020+
:change-in-game-state (req (pos? (get-counters card :credit)))
20202021
:label "gain 4 [Credits]"
20212022
:msg (msg "gain " (min 4 (get-counters card :credit)) " [Credits]")
20222023
:async true
@@ -3204,6 +3205,7 @@
32043205
:abilities [{:action true
32053206
:label "Take 3 [Credits] from this resource"
32063207
:cost [(->c :click 1)]
3208+
:change-in-game-state (req (pos? (get-counters card :credit)))
32073209
:once :per-turn
32083210
:msg "gain 3 [Credits]"
32093211
:async true

src/clj/game/core/def_helpers.clj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@
150150
[counter-type]
151151
{:event :counter-added
152152
:req (req (and (same-card? card target)
153+
(not (get-in card [:special :skipped-loading]))
153154
(not (pos? (get-counters card counter-type)))))
154155
:effect (effect (system-msg (str "removes " (:title card) " from the game"))
155156
(move card :rfg))})
@@ -159,6 +160,7 @@
159160
[counter-type]
160161
{:event :counter-added
161162
:req (req (and (same-card? card target)
163+
(not (get-in card [:special :skipped-loading]))
162164
(not (pos? (get-counters card counter-type)))))
163165
:async true
164166
:effect (effect (system-msg (str "trashes " (:title card)))

src/clj/game/core/initializing.clj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@
103103
c (update! state side
104104
(merge card {:runner-abilities run-abs
105105
:corp-abilities corp-abs}))
106+
c (if init-data c (assoc-in c [:special :skipped-loading] true))
106107
data (merge
107108
(when init-data (:counter (:data cdef)))
108109
(when recurring

src/clj/game/core/moving.clj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -669,7 +669,7 @@
669669
(move state side card [:rig :facedown])))
670670

671671
(defn flip-faceup
672-
"Flips a runner card facedown, either manually (if it's hosted) or by calling move to correct area.
672+
"Flips a runner card faceup, either manually (if it's hosted) or by calling move to correct area.
673673
Wires events without calling effect/init-data"
674674
[state side {:keys [host] :as card}]
675675
(let [card (if host

test/clj/game/cards/resources_test.clj

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -380,6 +380,75 @@
380380
(is (not (refresh kat1)) "old kati trashed")
381381
(is (= 0 (get-counters (get-resource state 1) :credit)) "0 credits on new kati"))))
382382

383+
(deftest assimilator-load-and-trash-on-empty
384+
(doseq [[scenario deck] [[:airblade ["AirbladeX (JSRF Ed.)"]]
385+
[:bank-job ["Bank Job"]]
386+
[:cataloguer ["Cataloguer"]]
387+
[:crowdfunding ["Crowdfunding"]]
388+
[:casts ["Daily Casts"]]
389+
[:nuka ["Dr. Nuka Vrolyck"]]
390+
[:hotel ["Earthrise Hotel" (qty "Earthrise Hotel" 14)]]
391+
[:juli ["Juli Moreira Lee"]]
392+
[:liberated ["Liberated Account"]]
393+
[:malandragem ["Malandragem"]]
394+
[:nga ["Nga"]]
395+
[:penumbral ["Penumbral Toolkit"]]
396+
[:telework ["Telework Contract"]]]]
397+
(do-game
398+
(new-game {:corp {:hand []}
399+
:runner {:hand ["Assimilator" "Hunting Grounds" "Kati Jones"]
400+
:credits 25
401+
:deck deck}})
402+
(take-credits state :corp)
403+
(play-from-hand state :runner "Assimilator")
404+
(play-from-hand state :runner "Hunting Grounds")
405+
(core/gain state :runner :click 10)
406+
(card-ability state :runner (get-resource state 1) 0)
407+
(card-ability state :runner (get-resource state 0) 0)
408+
(click-card state :runner (get-runner-facedown state 0))
409+
;; kati
410+
(case scenario
411+
:airblade (is (= (first deck) (:title (get-hardware state 0))) "Airblades exists")
412+
:bank-job (is (= (first deck) (:title (get-resource state 1))) "Bank Job exists")
413+
:cataloguer (is (= (first deck) (:title (get-hardware state 0))) "Cataloguer exists")
414+
:crowdfunding (is (= (first deck) (:title (get-resource state 1))) "CF exists")
415+
:casts (do (is (= (first deck) (:title (get-resource state 1))) "Casts exists")
416+
(take-credits state :runner)
417+
(is (changed? [(:credit (get-runner)) 0]
418+
(take-credits state :corp))
419+
"gained 0 from casts")
420+
(is (= (first deck) (:title (get-resource state 1))) "But Casts exists"))
421+
:nuka (is (= (first deck) (:title (get-resource state 1))) "Doc. Nuka")
422+
:hotel (do (is (= (first deck) (:title (get-resource state 1))) "Earthrise Exists")
423+
(take-credits state :runner)
424+
(is (changed? [(count (:hand (get-runner))) 2]
425+
(take-credits state :corp))
426+
"Hotel still draws 2")
427+
(is (= (first deck) (:title (get-resource state 1))) "Earthrise still Exists"))
428+
:juli (do (is (= (first deck) (:title (get-resource state 1))) "Juli exists")
429+
(take-credits state :runner)
430+
(take-credits state :corp)
431+
(play-from-hand state :runner "Kati Jones")
432+
(is (changed? [(:click (get-runner)) 0]
433+
(card-ability state :runner (get-resource state 2) 0))
434+
"gained click when using kati")
435+
(is (= (first deck) (:title (get-resource state 1))) "But juli still exists"))
436+
:liberated (do (is (= (first deck) (:title (get-resource state 1))) "Lib exists")
437+
(is (changed? [(:click (get-runner)) -1
438+
(:credit (get-runner)) 0]
439+
(card-ability state :runner (get-resource state 1) 0))
440+
"Gained 0, wasted a click")
441+
(is (= (first deck) (:title (get-resource state 1))) "Lib still exists"))
442+
:malandragem (is (= (first deck) (:title (get-program state 0))) "Malandragem Exists")
443+
:nga (is (= (first deck) (:title (get-program state 0))) "Nga Exists")
444+
:penumbral (is (= (first deck) (:title (get-resource state 1))) "Penumbral Exists")
445+
:telework (do (is (= (first deck) (:title (get-resource state 1))) "Telework exists")
446+
(is (changed? [(:click (get-runner)) -1
447+
(:credit (get-runner)) 0]
448+
(card-ability state :runner (get-resource state 1) 0))
449+
"Gained 0, wasted a click")
450+
(is (= (first deck) (:title (get-resource state 1))) "Telework still exists"))))))
451+
383452
(deftest avgustina-ivanovskaya
384453
;; First time each turn you install a virus program, resist 1
385454
(do-game
@@ -3584,6 +3653,7 @@
35843653
(new-game {:runner {:hand [(qty "Juli Moreira Lee" 2) (qty "Telework Contract" 2)]
35853654
:credits 10}})
35863655
(take-credits state :corp)
3656+
(core/gain state :runner :click 1)
35873657
(play-from-hand state :runner "Juli Moreira Lee")
35883658
(play-from-hand state :runner "Telework Contract")
35893659
(is (changed? [(get-counters (get-resource state 0) :power) -1

0 commit comments

Comments
 (0)