diff --git a/desktop/src-common/advent/screens/rooms/inside_jail.clj b/desktop/src-common/advent/screens/rooms/inside_jail.clj index 324a0637..63724978 100644 --- a/desktop/src-common/advent/screens/rooms/inside_jail.clj +++ b/desktop/src-common/advent/screens/rooms/inside_jail.clj @@ -11,10 +11,11 @@ [play-clj.ui :refer :all] [play-clj.utils :refer :all] [play-clj.g2d :refer :all])) + + (defn remove-lock [entities] (-> entities - (update-in [:room :interactions] - (fn [i] (remove #(= :lock (:id %)) i))) + (utils/remove-interaction :lock) (assoc-in [:room :collision] (get-in entities [:room :collision-free])))) (defn open-lock [entities] diff --git a/desktop/src-common/advent/screens/rooms/outside_castle.clj b/desktop/src-common/advent/screens/rooms/outside_castle.clj index ac6406a7..ea199869 100644 --- a/desktop/src-common/advent/screens/rooms/outside_castle.clj +++ b/desktop/src-common/advent/screens/rooms/outside_castle.clj @@ -119,6 +119,12 @@ (get-in @entities [:state :wants-toy]) (do-wants-toy-conversation entities) :else (do-initial-peddler-conversation entities))) +(defn make-night [entities] + (-> entities + (update-in [:room :entities] #(dissoc % :peddler)) + (update-in [:room :entities] #(dissoc % :balloons)) + (utils/remove-interaction :wares))) + (defn make [screen] (let [peddler-sheet (texture! (texture "outside-castle/peddler-talk.png" ) :split 18 36) peddler-talk (animation 0.18 (for [i (flatten [2 3 2 3 2 3 6 1 0 1 0 1 0 1 0 1 2 3 2 3 2 3 6 4 5 4 5 4 5 4 5])] @@ -166,31 +172,30 @@ (actions/talk entities :ego "Hey! Carrots.") (actions/play-animation entities :ego :squat) (actions/talk entities :ego "No one will notice one missing.") - (actions/give entities :carrot))))} - :peddler {:box [110 90 128 146] - :script (actions/get-script - entities - (walk-to-peddler entities) - (do-peddler-dialogue entities)) - :scripts #(condp = % - :teddy (actions/get-script entities - (walk-to-peddler entities) - (give-teddy entities)) - :glass-eye (actions/get-script entities (no-returns entities)) - :motivational-tapes (actions/get-script entities (no-returns entities)) - :used-earplugs (actions/get-script entities (no-returns entities)) - :balloon (actions/get-script entities (no-returns entities)) - (actions/get-script entities - (walk-to-peddler entities) - (actions/do-dialogue entities - :ego "Are you interested in this?" - :peddler "No, I have no use for it.")))}} + (actions/give entities :carrot))))}} :layers {:day [(assoc (texture "outside-castle/background.png") :x 0 :y 0 :baseline 0)] :night [(assoc (texture "outside-castle/background-dark.png") :x 0 :y 0 :baseline 0)]} :entities {:peddler (actions/start-animation screen (assoc (texture "outside-castle/peddler.png") :x 110 :y 90 :baseline 150 :anim nil :talk peddler-talk :stand peddler-stand - :talk-color (color 1.0 0.9 0.4 1.0)) + :talk-color (color 1.0 0.9 0.4 1.0) + :script (actions/get-script + entities + (walk-to-peddler entities) + (do-peddler-dialogue entities)) + :scripts #(condp = % + :teddy (actions/get-script entities + (walk-to-peddler entities) + (give-teddy entities)) + :glass-eye (actions/get-script entities (no-returns entities)) + :motivational-tapes (actions/get-script entities (no-returns entities)) + :used-earplugs (actions/get-script entities (no-returns entities)) + :balloon (actions/get-script entities (no-returns entities)) + (actions/get-script entities + (walk-to-peddler entities) + (actions/do-dialogue entities + :ego "Are you interested in this?" + :peddler "No, I have no use for it.")))) :stand) :steer (actions/start-animation screen (assoc (animation->texture screen steer-stand) :x 203 :y 155 :baseline 80 @@ -237,4 +242,8 @@ :baseline 240)} :collision "outside-castle/collision.png" :scale-fn (utils/scaler-fn-with-baseline 110 0.10 1.00) - :start-pos [310 80]))) + :start-pos [310 80] + :apply-state (fn [entities] + (if (= :night (get-in entities [:state :time])) + (make-night entities) + entities))))) diff --git a/desktop/src-common/advent/screens/scene.clj b/desktop/src-common/advent/screens/scene.clj index b31d4eaa..7ca9599c 100644 --- a/desktop/src-common/advent/screens/scene.clj +++ b/desktop/src-common/advent/screens/scene.clj @@ -298,6 +298,7 @@ {:object nil :active? true :last-room :outside-house + :time :day :obtained-items #{} :inventory [] :clues #{} diff --git a/desktop/src-common/advent/utils.clj b/desktop/src-common/advent/utils.clj index cb6b96cb..b9d08b5b 100644 --- a/desktop/src-common/advent/utils.clj +++ b/desktop/src-common/advent/utils.clj @@ -111,3 +111,6 @@ (assoc-in entities [:cursor :override] (:cursor mouse-override)) (assoc-in entities [:cursor :override] nil))) entities)) + +(defn remove-interaction [entities id] + (update-in entities [:room :interactions] (fn [i] (remove #(= id (:id %)) i))))