    (let [titles #{"Safety First" "Always Be Running" "Neutralize All Threats"}
          one-of-each   (fn [cards] (->> cards (group-by :title) (map second) (map first)))
          get-directives (fn [source] (filter #(some #{(:title %)} titles) source))]
-   {:effect (req (let [directives (-> (:deck runner) (concat (:hand runner)) (get-directives) one-of-each)]
-                   (when (not= 3 (count directives))
-                     (toast state :runner
-                            "Your deck doesn't contain enough directives for Adam's ability. The deck needs to contain at least one copy of each directive. They are not counted against the printed decksize limit, so minimal Adam's decksize on this site is 48 cards."
-                            "warning"
-                            {:time-out 0 :close-button true}))
-                   (doseq [c directives]
-                     (runner-install state side c {:no-cost true
-                                                   :custom-message (str "starts with " (:title c) " in play")}))
-                   (draw state :runner (count (filter in-hand? directives)))))})
+   {:events {:pre-start-game
+             {:req (req (= side :runner))
+              :effect (req (let [directives (-> (:deck runner) (concat (:hand runner)) (get-directives) one-of-each)]
+                             (when (not= 3 (count directives))
+                               (toast state :runner
+                                      (str "Your deck doesn't contain enough directives for Adam's ability. The deck "
+                                           "needs to contain at least one copy of each directive. They are not counted "
+                                           "against the printed decksize limit, so minimal Adam's decksize on this site is 48 cards.")
+                                      "warning"
+                                      {:time-out 0 :close-button true}))
+                             (doseq [c directives]
+                               (runner-install state side c {:no-cost true
+                                                             :custom-message (str "starts with " (:title c) " in play")}))
+                             (draw state :runner (count (filter in-hand? directives)))))}}})
 
    "Andromeda: Dispossessed Ristie"
-   {:effect (effect (gain :link 1) (draw 4)) :mulligan (effect (draw 4))}
+   {:events {:pre-start-game {:req (req (= side :runner))
+                              :effect (effect (gain :link 1)
+                                              (draw 4))}}
+    :mulligan (effect (draw 4))}
 
    "Apex: Invasive Predator"
    (let [ability {:prompt "Select a card to install facedown"

                                          (shuffle! :deck))}}}}}

   "The Masque: Cyber General"
   {:effect draft-points-target}

   "The Shadow: Pulling the Strings"
   {:effect draft-points-target}

   "Titan Transnational: Investing In Your Future"
   {:events {:agenda-scored {:msg (msg "add 1 agenda counter to " (:title target))
                             :effect (effect (add-prop target :counter 1))}}}

   "Valencia Estevez: The Angel of Cayambe"
   {:req (req (zero? (get-in @state [:corp :bad-publicity])))
    :effect (effect (gain :corp :bad-publicity 1))}

   "Weyland Consortium: Because We Built It"
   {:recurring 1}

   {:abilities [{:once :per-turn :msg "break 1 barrier subroutine"}]}

   "Reina Roja: Freedom Fighter"
   {:events {:pre-start-game {:req (req (= side :runner))
                              :effect (effect (gain :link 1))}
             :pre-rez {:req (req (and (ice? target) (not (get-in @state [:per-turn (:cid card)]))))
                       :effect (effect (rez-cost-bonus 1))}
             :rez {:req (req (and (ice? target) (not (get-in @state [:per-turn (:cid card)]))))
                              :effect (req (swap! state assoc-in [:per-turn (:cid card)] true))}}}
