randomize dialogue antique.

This commit is contained in:
Bryce Covert
2015-08-21 09:39:34 -07:00
parent 746b1130c4
commit e956b11dba
3 changed files with 64 additions and 37 deletions

View File

@@ -14,10 +14,8 @@ PROGRAMMING
+ proper save/settings file location
+ descriptions for all items when used on self.
+ try to have dialogue for every wrong interaction
+ Antique shop dialogue
+ Have a gag that is that the room is dark
+ Have to open curtains
+ "Specialty lava mints, hand delivered by Gandarf!"
+ Have to open curtains
+ grime on portrait
AUDIO
+ Walking
+ blink
@@ -55,3 +53,5 @@ AUDIO
+ step backwards creep
+ snore
+ shoot slinger's
+ new music for night

View File

@@ -413,12 +413,17 @@
(recur (inc so-far) (zip/right zipper)))))
(defn make-zipper [tree]
(zip/zipper map? (comp #(map second %) #(filter first (partition 2 %)) :choices) (fn [n c] nil) tree))
(zip/zipper map?
#(apply concat (filter first (partition 2 (:choices %))))
(fn [n c]
(assoc n :choices (vec c)))
tree))
(defn present-choices [entities choices]
(loop [zipper (make-zipper choices)]
(let [selected-index (atom nil)
node (zip/node zipper)
_ (clojure.pprint/pprint node)
dialogue-choices (filter first (partition 2 (:choices node)))]
(run-action entities
(begin [this screen entities]
@@ -438,16 +443,20 @@
(skip-type [this screen entities]
:skip))
(let [zipper (nth-child zipper @selected-index)
node (zip/node zipper)]
(let [zipper (nth-child zipper (inc (* 2 @selected-index)))
node (zip/node zipper)
_ (clojure.pprint/pprint node)]
(when-let [run (:run node)]
(run (-> dialogue-choices
(nth @selected-index)
first)))
(when-let [next-choices (:choices node)]
(when-let [next-choices (or (when-let [choice-fn (:choice-fn node)]
(choice-fn))
(:choices node))]
(if (fn? next-choices)
(recur (next-choices zipper))
(recur zipper)))))))
(recur (zip/edit zipper assoc :choices next-choices))))))))
(defn update-entities [entities f & {:keys [use-screen?] :or {use-screen? false}}]
(run-action entities

View File

@@ -9,6 +9,10 @@
[play-clj.utils :refer :all]
[play-clj.g2d :refer :all]))
(def boy-names
["Steve" "Bob" "Bud" "Clement" "Terrence" "Flapjack" "Ticklemonster" "Peter" "Greg" "Dave" "Stu" "Calsbad" "Fatso" "Tanner" "Klug"
"Griswold" "Leonardo" "Donatello" "Raphael" "Michelangelo" "Francis" "Ebeneezer" "Pierre" "Finn" "Slade" "Gilbert" "Graham"
"Ralphie" "Arthur" "Barney" "Harry" "Gus" "Mortimer" "Walt"])
(defn do-antique-dialogue [entities]
(actions/do-dialogue entities
@@ -74,38 +78,45 @@
"Listen, I really need that teddy bear you have.")
{:run #(actions/respond entities %
:shopkeep "Why?"
:shopkeep "It belonged to my long lost son."
:shopkeep "It's my son's favorite toy!"
:shopkeep "Why should I give it to you?")
:choices ["Because it's the choicest toy I've ever seen!"
{:run #(actions/respond entities %
:shopkeep "I'm sorry, it's not for sale.")
:choices actions/something-else}
"Your long lost son said I could have it."
"Your son said I could have it."
{:run #(do (actions/respond entities %
:shopkeep "REALLY? You've met him?"
:ego "... erm. Yes!"
:shopkeep "If you really met him, you'll have to prove it."
:shopkeep "What is my son's name?"))
:choices ["... Bud?"
{:run #(do (actions/respond entities % :shopkeep "No. That's not it.")
(actions/play-animation entities :shopkeep :sigh)
(actions/do-dialogue entities :ego "Oh. I must be thinking of another long lost son."))}
"... Steve?"
{:run #(do (actions/respond entities % :shopkeep "No. That's not it.")
(actions/play-animation entities :shopkeep :sigh)
(actions/do-dialogue entities :ego "Oh. I must be thinking of another long lost son."))}
"... Bob?"
{:run #(do (actions/respond entities % :shopkeep "No. That's not it.")
(actions/play-animation entities :shopkeep :sigh)
(actions/do-dialogue entities :ego "Oh. I must be thinking of another long lost son."))}
(when ((get-in @entities [:state :clues]) :name)
"Herb.")
{:run #(do (actions/respond entities %
:shopkeep "Yes, that's it!"
:shopkeep "You must have really met my son!"
:shopkeep "Of course you can keep the teddy bear.")
(actions/update-state entities (fn [s] (assoc s :allowed-to-keep-teddy? true))))}]}]}
:choice-fn (fn make-choices []
(let [names (shuffle boy-names)]
(into
(vec (interleave
(take 3 (map #(str "Is it... " % "?")
names))
(repeat {:run #(do (actions/respond entities % :shopkeep "No. That's not it.")
(actions/play-animation entities :shopkeep :sigh)
(actions/do-dialogue entities :ego "Oh. I must be thinking of another long lost son."))
:choices #(-> %
zip/left
(zip/edit (fn [_] (str "Is it... " (rand-nth names) "?")))
zip/up
)})))
[(when ((get-in @entities [:state :clues]) :name)
"Herb.")
{:run #(do (actions/respond entities %
:shopkeep "Yes, that's it!"
:shopkeep "You must have really met my son!"
:shopkeep "Of course you can keep the teddy bear.")
(actions/update-state entities (fn [s] (assoc s :allowed-to-keep-teddy? true))))}
"It must have slipped my mind."
{:run #(do (actions/respond entities %
:shopkeep "I was afraid you might say that."))
:choices #(-> % zip/up zip/up zip/up)}])))}]}
"Nevermind." {:run #(actions/respond entities % :shopkeep "Feel free to look around.")}]})))
@@ -131,7 +142,7 @@
(aget shopkeep-sheet 0 i)))
shopkeep-talk (animation 0.15 (for [i [0 2 0 2 0 3 1 0]]
(aget shopkeep-sheet 0 i)))
shopkeep-sigh (utils/make-anim "inside-antique/antique-sigh.png" [22 21] 0.2 (flatten [ (range 9) 0 0 0 0 0 0 ]))
shopkeep-sigh (utils/make-anim "inside-antique/antique-sigh.png" [22 21] 0.12 (flatten [ (range 9) 0 0 ]))
beard (utils/make-anim "inside-antique/beard.png" [26 52] 0.5 [0 1 0 2])
teddy (assoc (texture "inside-antique/teddy.png")
@@ -147,7 +158,8 @@
(actions/do-dialogue entities
:ego "Aww, a cute teddy bear!"
:shopkeep "Don't get any fast ideas."
:shopkeep "That teddy bear does not leave my store."))))]
:shopkeep "That teddy bear does not leave my store."
:shopkeep "My son would be stricken with grief to find it missing."))))]
(rooms/make :music :inside-antique
:interactions
{:right {:box [250 0 320 75]
@@ -169,12 +181,16 @@
:return-portrait {:box [103 70 206 116]
:script (actions/get-script entities (actions/talk entities :ego "It's the shopkeep's desk."))
:scripts {:portrait (actions/get-script entities
(return-portrait entities))}}
(return-portrait entities))
:teddy (actions/get-script entities
(return-teddy entities))}}
:return-teddy {:box [227 90 301 105]
:script (actions/get-script entities
(actions/talk entities :ego "It's a shelf."))
:scripts {:teddy (actions/get-script entities
(return-teddy entities))}}
(return-teddy entities))
:portrait (actions/get-script entities
(return-portrait entities))}}
:window {:box [210 125 256 183]
:script (actions/get-script entities
(actions/talk entities :ego "It's a nice, big window."))
@@ -225,8 +241,10 @@
(if (get-in @entities [:state :allowed-to-keep-teddy?])
(actions/talk entities :shopkeep "That's a portrait of my little Herb. "
:shopkeep "Please put it back before you leave." )
(actions/talk entities :shopkeep "That's a portrait of my long lost son. "
:shopkeep "Please put it back before you leave.")))
(actions/do-dialogue entities
:shopkeep "Put that back!"
:shopkeep "It's been six years since I last saw my son."
:shopkeep "I won't let you keep my only portrait of him.")))
(actions/get-script entities
(actions/talk entities :shopkeep "No thanks, sonny."))))
:stand)