Files
gitea-docker/desktop/src-common/advent/screens/rooms/inside_stash.clj
2015-01-08 13:23:30 -08:00

75 lines
3.4 KiB
Clojure

(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 explore-chest [entities]
(cond
(actions/has-item? entities :slingshot)
(do (actions/walk-to entities :ego [152 95])
(actions/talk entities :ego "It's empty now."))
(get-in @entities [:state :broke-lock?])
(do
(actions/walk-to entities :ego [152 95])
(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/give entities :flask-1-strength)
(actions/give entities :medal)
(actions/give entities :trophy)
(actions/give entities :slingshot))
:else
(do
(actions/walk-to entities :ego [152 95])
(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]
(rooms/make :music {:day :town-2 :night :night}
: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}
: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))}}}
:layers [(assoc (texture "inside-stash/background.png") :x 0 :y 0 :baseline 0)]
:entities {:lid (assoc (texture "inside-stash/lid.png")
:x 156 :y 116 :baseline 125)}
: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))))