(ns advent.screens.rooms.inside-stash (:require [advent.screens.rooms :as rooms] [advent.screens.items :as items] [advent.actions :as actions] [advent.utils :as utils] [clojure.zip :as zip] [play-clj.core :refer :all] [play-clj.ui :refer :all] [play-clj.utils :refer :all] [play-clj.g2d :refer :all])) (defn bust-chest [entities] (if (get-in @entities [:state :broke-lock?]) (do (actions/talk entities :ego "I already bust it open.")) (do (actions/talk entities :ego "Let's see if this can pry this puppy open.") (actions/walk-straight-to entities :ego [152 95] :face :right) (actions/play-animation entities :ego :crowbar) (actions/remove-entity entities :lid) (actions/update-state entities #(assoc % :broke-lock? true)) (actions/talk entities :ego "Got it!")))) (defn unlock-chest [entities] (if (get-in @entities [:state :broke-lock?]) (do (actions/talk entities :ego "I already bust it open.")) (do (actions/talk entities :ego "It's worth a shot...") (actions/walk-straight-to entities :ego [152 95] :face :right) (actions/play-animation entities :ego :reach) (actions/do-dialogue entities :ego "Nope.")))) (defn explore-chest [entities] (cond (actions/has-item? entities :slingshot) (do (actions/walk-to entities :ego [152 95] :face :right) (actions/talk entities :ego "It's empty now.")) (get-in @entities [:state :broke-lock?]) (do (actions/walk-to entities :ego [152 95] :face :right) (actions/talk entities :ego "Let's see what's inside now.") (actions/play-animation entities :ego :reach) (actions/do-dialogue entities :ego "Yes! I got my stuff back!" :ego "Including the Slinger's shot!") (actions/update-state entities #(-> % (assoc :inventory (concat (:inventory %) [:flask-1-strength :medal :trophy :slingshot]))))) :else (do (actions/walk-to entities :ego [152 95] :face :right) (actions/talk entities :ego "Maybe my stuff is in here...") (actions/play-animation entities :ego :reach) (actions/talk entities :ego "It's locked tight!")))) (defn make [screen] (let [candle-flame (utils/make-anim "inside-stash/candle.png" [4 4] 0.1 (range 4)) candle-aura (utils/make-anim "inside-house/candle-aura.png" [27 27] 0.2 [0 1 2 3 2 1] ) ] (rooms/make :music {:day :secret-hideout :night :secret-hideout} :name "Inside stash" :interactions {:left-dir {:box [91 60 125 140] :script (actions/get-script entities (actions/walk-straight-to entities :ego [118 96]) (actions/transition-background entities :outside-jail [200 97]) (actions/walk-straight-to entities :ego [167 100])) :cursor :left} :candle {:box [160 130 170 140] :script (actions/get-script entities (actions/talk entities :ego "Just a candle.")) :scripts {:note-1 (actions/get-script entities (actions/talk entities :ego "Why would I want to burn Gandarf's note?")) :note-2 (actions/get-script entities (actions/talk entities :ego "Why would I want to burn Gandarf's note?")) :recipe (actions/get-script entities (actions/walk-to entities :ego [152 95] :face :right) (actions/play-animation entities :ego :reach) (actions/remove-item entities :recipe) (actions/give entities :ash) (actions/talk entities :ego "It burned up into ash.")) :default (actions/get-script entities (actions/talk entities :ego "Momma always told me not to play with fire."))}} :chest {:box [151 107 180 124] :script (actions/get-script entities (explore-chest entities)) :scripts {:sword (actions/get-script entities (actions/talk entities :ego "There's not enough room to swing my sword here.")) :crowbar (actions/get-script entities (bust-chest entities)) :key (actions/get-script entities (unlock-chest entities))}}} :layers [(assoc (utils/get-texture "inside-stash/background.png") :x 0 :y 0 :baseline 0 :night-profile :none)] :entities {:lid (assoc (utils/get-texture "inside-stash/lid.png") :x 156 :y 116 :baseline 125 :night-profile :none) :candle-flame (assoc (animation->texture screen candle-flame) :x 165 :y 135 :baseline 1 :anim candle-flame :anim-start 0 :night-profile :none) :candle-aura (assoc (animation->texture screen candle-aura) :x 166 :y 138 :baseline 2 :additive? true :origin-x 13 :origin-y 13 :opacity 0.5 :anim candle-aura :anim-start 0 :night-profile :none) } :collision "inside-stash/collision.png" :scale-fn (utils/scaler-fn-with-baseline 110 0.10 1.00) :start-pos [143 96] :apply-state (fn [_ entities] (if (get-in entities [:state :broke-lock?]) (update-in entities [:room :entities] #(dissoc % :lid)) entities)))))