(ns advent.screens.rooms.inside-house (:require [advent.screens.items :as items] [advent.screens.rooms :as rooms] [advent.screens.safe :as safe] [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 open-safe [entities] (screen! safe/safe-screen :show-screen :success (actions/get-script entities (actions/talk entities :ego "Yes! That worked.") (actions/play-animation entities :ego :squat) (actions/give entities :recipe) (actions/talk entities :ego "I found a recipe for a strength potion!") (actions/talk entities :ego "Looks like there's something else in here too...") (actions/play-animation entities :ego :squat) (actions/give entities :frog-legs) (actions/talk entities :ego "Eww. Frog legs.")) :failure (actions/get-script entities (actions/talk entities :ego "I don't think that worked..."))) (actions/update-state entities #(assoc % :active? false))) (defn do-wizard-dialogue [entities] (actions/do-dialogue entities :wizard "What can I do for you boy?") (actions/present-choices entities {:choices [(when (= 3 (get-in @entities [:state :mints-eaten])) "The antique shopkeeper needs more fire mints.") {:run #(do (actions/respond entities % :wizard "Already?" :wizard "Ok, I'll deliver them myself. Don't touch anything while I'm gone.") (actions/update-state entities (fn [s] (assoc s :mints-eaten 0))) (actions/remove-entity entities :wizard))} "Goodbye, Gandarf." {:run #(actions/respond entities % :wizard "Goodbye, boy.")}]})) (defn make [screen] (let [wizard-sheet (texture! (texture "wizard/talk.png") :split 20 46) wizard-stand (animation 0.2 (for [i (flatten [(repeat 10 0) 1])] (aget wizard-sheet 0 i))) wizard-talk (animation 0.2 (for [i [0 2 0 2 1 2 0 3 0 2 0 1 0 2]] (aget wizard-sheet 0 i))) safelock-sheet (texture! (texture "inside-house/safe-lock.png") :split 9 2) safe-lock (animation 0.1 (for [i (flatten [(repeat 20 0) 1 2 1 2 1 2 1 2 1 2 1 1 2 1 2 1 2 1 2 1 2 1 (range 3 20) 20 20 20 20 21 21 21 21 21 20 20 21 21 21 21 21 20 20 20 ])] (aget safelock-sheet 0 i)))] (rooms/make :music :inside-fangald :interactions {:down-dir {:box [151 0 320 20] :script (actions/get-script entities (actions/walk-to entities :ego [237 1]) (actions/transition-background entities :outside-house [262 88])) :cursor :down} :safe {:box [34 70 70 115] :script (actions/get-script entities (actions/walk-to entities :ego [59 65]) (if (get-in @entities [:room :entities :wizard]) (actions/talk entities :wizard "Don't touch my MagiSafe!!") (open-safe entities)))} } :layers [(assoc (texture "inside-house/background.png") :x 0 :y 0 :baseline 0) (assoc (texture "inside-house/desk.png") :x 0 :y 0 :baseline 200) (assoc (texture "inside-house/sillhoute.png") :x 0 :y 0 :baseline 240)] :entities {:wizard (actions/start-animation screen (assoc (animation->texture screen wizard-stand) :x 228 :y 80 :baseline 160 :scale-x 1.75 :scale-y 1.75 :left {:talk (utils/flip wizard-talk) :stand (utils/flip wizard-stand)} :right {:talk wizard-talk :stand wizard-stand} :facing :left :script (actions/get-script entities (do-wizard-dialogue entities))) :stand) :safe-lock (actions/start-animation screen (assoc (animation->texture screen safe-lock) :x 51 :y 95 :baseline 145 :stand safe-lock) :stand) :flask (assoc (texture "inside-house/flask.png") :x 265 :y 80 :baseline 240 :script (actions/get-script entities (actions/remove-entity entities :flask) (actions/give entities :flask-1) (actions/do-dialogue entities :ego "Hey you think I could have this flask?" :wizard "Sure.")))} :collision "inside-house/collision.png" :scale-fn (utils/scaler-fn-with-baseline 110 0.10 1.75) :apply-state (fn [entities] (as-> entities entities (if (actions/has-one-of? entities [:flask-1 :flask-1-with-cream-of-mushroom :flask-1-strength :flask-1-with-mushrooms :flask-1-with-milk]) (update-in entities [:room :entities] #(dissoc % :flask)) entities))))))