Skip to content

Commit

Permalink
Refactor draw, implement Ashigaru
Browse files Browse the repository at this point in the history
  • Loading branch information
NoahTheDuke committed Jun 15, 2019
1 parent 98f89cf commit aa512d7
Show file tree
Hide file tree
Showing 7 changed files with 51 additions and 34 deletions.
2 changes: 1 addition & 1 deletion src/clj/game/cards/assets.clj
Original file line number Diff line number Diff line change
Expand Up @@ -2107,7 +2107,7 @@
(remove-one [cid state ice]
(remove-extra-subs! state :corp ice cid))
(add-one [cid state ice]
(add-extra-sub! state :corp ice new-sub cid 0))
(add-extra-sub! state :corp ice new-sub cid {:front true}))
(update-all [state func]
(doseq [i (all-rezzed-bios state)]
(func state i)))]
Expand Down
18 changes: 15 additions & 3 deletions src/clj/game/cards/ice.clj
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,16 @@
[note ice-def]
(assoc ice-def :implementation note))

(defn reset-variable-subs
[state side card total sub]
(let [old-subs (remove #(= (:cid card) (:from-cid %)) (:subroutines card))
new-card (assoc card :subroutines old-subs)
new-subs (->> (range total)
(reduce (fn [ice _] (add-sub ice end-the-run)) new-card)
:subroutines)
new-card (assoc new-card :subroutines new-subs)]
(update! state :corp new-card)))

;; Card definitions
(def card-definitions
{"Afshar"
Expand Down Expand Up @@ -361,9 +371,11 @@
:msg (msg (corp-install-msg target))}]}

"Ashigaru"
{:abilities [{:label "Gain subroutines"
:msg (msg "gain " (count (:hand corp)) " subroutines")}]
:subroutines [end-the-run]}
{:events {:card-moved {:req (req (or (= :hand (first (:zone target)))
(= :hand (first (:previous-zone target)))))
:effect (effect (reset-variable-subs card (count (:hand (:corp @state))) end-the-run))}
:rez {:req (req (same-card? card target))
:effect (effect (reset-variable-subs card (count (:hand (:corp @state))) end-the-run))}}}

"Assassin"
{:subroutines [(trace-ability 5 (do-net-damage 3))
Expand Down
4 changes: 2 additions & 2 deletions src/clj/game/cards/operations.clj
Original file line number Diff line number Diff line change
Expand Up @@ -2097,11 +2097,11 @@
(rezzed? %))}
:msg (msg "give " (card-str state target) " \"[Subroutine] Do 1 brain damage\" before all its other subroutines")
:sub-effect (do-brain-damage 1)
:effect (req (add-extra-sub! state :corp target new-sub (:cid card) 0)
:effect (req (add-extra-sub! state :corp target new-sub (:cid card) {:front true})
(host state side (get-card state target) (assoc card :zone [:discard] :seen true :condition true)))
:leave-play (req (remove-extra-subs! state :corp (:host card) (:cid card)))
:events {:rez {:req (req (same-card? target (:host card)))
:effect (req (add-extra-sub! state :corp (get-card state target) new-sub (:cid card) 0))}}})
:effect (req (add-extra-sub! state :corp (get-card state target) new-sub (:cid card) {:front true}))}}})

"Witness Tampering"
{:msg "remove 2 bad publicity"
Expand Down
53 changes: 29 additions & 24 deletions src/clj/game/core/ice.clj
Original file line number Diff line number Diff line change
Expand Up @@ -4,41 +4,46 @@

;;; Ice subroutine functions
(defn add-sub
([ice sub] (add-sub ice sub (:cid ice) -1))
([ice sub cid] (add-sub ice sub cid -1))
([ice sub cid idx]
(let [new-sub {:label (make-label sub)
([ice sub] (add-sub ice sub (:cid ice) nil))
([ice sub cid] (add-sub ice sub cid nil))
([ice sub cid {:keys [front back printed] :as args}]
(let [curr-subs (:subroutines ice [])
position (cond
back 1
front -1
:else 0)
new-sub {:label (make-label sub)
:from-cid cid
:sub-effect sub}
curr-subs (:subroutines ice [])
offset (if (= -1 idx) (count curr-subs) idx)
new-subs (apply conj (subvec curr-subs 0 offset) new-sub (subvec curr-subs offset))]
:sub-effect sub
:position position
:printed (or printed false)}
new-subs (into [] (sort-by :position (conj curr-subs new-sub)))]
(assoc ice :subroutines new-subs))))

(defn add-sub!
([state side ice sub] (update! state :corp (add-sub ice sub (:cid ice) -1)))
([state side ice sub cid] (update! state :corp (add-sub ice sub cid -1)))
([state side ice sub cid idx] (update! state :corp (add-sub ice sub cid idx))))
([state side ice sub] (update! state :corp (add-sub ice sub (:cid ice) {:printed false})))
([state side ice sub cid] (update! state :corp (add-sub ice sub cid {:printed false})))
([state side ice sub cid args] (update! state :corp (add-sub ice sub cid args))))

(defn remove-sub
"Removes a single sub from"
[ice sub]
(let [curr-subs (:subroutines ice)
new-subs (if (number? sub)
(apply conj (subvec curr-subs 0 sub) (subvec curr-subs (inc sub)))
(remove-once #(= sub %) curr-subs))]
(assoc ice :subroutines new-subs)))
([ice] (remove-sub ice #(= (:cid ice) (:from-cid %))))
([ice pred]
(let [curr-subs (:subroutines ice)
new-subs (remove-once pred curr-subs)]
(assoc ice :subroutines new-subs))))

(defn remove-sub!
[state side ice sub]
(update! state :corp (remove-sub ice sub)))
([state side ice] (update! state :corp (remove-sub ice #(= (:cid ice) (:from-cid %)))))
([state side ice pred]
(update! state :corp (remove-sub ice pred))))

(defn add-extra-sub!
"Add a run time subroutine to a piece of ice (Warden, Sub Boost, etc). -1 as the idx adds to the end."
([state side ice sub] (add-extra-sub! state side ice sub (:cid ice) -1))
([state side ice sub cid] (add-extra-sub! state side ice sub cid -1))
([state side ice sub cid idx]
(add-sub! state side (assoc-in ice [:special :extra-subs] true) sub cid idx)))
"Add a run time subroutine to a piece of ice (Warden, Sub Boost, etc)"
([state side ice sub] (add-extra-sub! state side ice sub (:cid ice) {:back true}))
([state side ice sub cid] (add-extra-sub! state side ice sub cid {:back true}))
([state side ice sub cid args]
(add-sub! state side (assoc-in ice [:special :extra-subs] true) sub cid args)))

(defn remove-extra-subs!
"Remove runtime subroutines assigned from the given cid from a piece of ice."
Expand Down
2 changes: 1 addition & 1 deletion src/clj/game/core/installing.clj
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
[card keep-counter]
(let [c (dissoc card :current-strength :abilities :subroutines :runner-abilities :corp-abilities :rezzed :special :new
:added-virus-counter :subtype-target :sifr-used :sifr-target :pump :server-target)
c (assoc c :subroutines (subroutines-init card (card-def card)))
c (assoc c :subroutines (subroutines-init c (card-def card)))
c (if keep-counter c (dissoc c :counter :rec-counter :advance-counter :extra-advance-counter))]
c))

Expand Down
2 changes: 1 addition & 1 deletion src/clj/game/core/turns.clj
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@
"Initialised the subroutines associated with the card, these work as abilities"
[card cdef]
(->> (:subroutines cdef)
(reduce (fn [ice sub] (add-sub ice sub (:cid ice) -1)) card)
(reduce (fn [ice sub] (add-sub ice sub (:cid ice) {:printed true})) card)
:subroutines))

(defn make-card
Expand Down
4 changes: 2 additions & 2 deletions src/cljs/nr/gameboard.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -639,8 +639,8 @@
(map-indexed
(fn [i sub]
[:div {:key i
:on-click #(do (send-command "subroutine" {:card card :subroutine i}))}
(render-icons (str "[Subroutine]" (:label sub)))])
:on-click #(send-command "subroutine" {:card card :subroutine i})}
(render-icons (str "[Subroutine] " (:label sub)))])
subroutines)])))

(defn card-view [{:keys [zone code type abilities counter advance-counter advancementcost current-cost subtype
Expand Down

0 comments on commit aa512d7

Please sign in to comment.