diff --git a/desktop/src-common/advent/screens/rooms/outside_castle.clj b/desktop/src-common/advent/screens/rooms/outside_castle.clj index d840f214..468d0b94 100644 --- a/desktop/src-common/advent/screens/rooms/outside_castle.clj +++ b/desktop/src-common/advent/screens/rooms/outside_castle.clj @@ -10,6 +10,105 @@ [play-clj.math :refer :all] [play-clj.g2d :refer :all])) +(defn do-initial-peddler-conversation [entities] + (actions/do-dialogue entities + :ego "Hello there, peddler." + :peddler "Good day sir! Care to see any of my wares?" + :peddler "I have only the choicest of wares." + :ego "What 'wares' are you selling?" + :peddler "I have the choicest of all types of wares..." + :peddler "...I'm well stocked on used earplugs..." + :peddler "...glass eyes..." + :peddler "... and motivational tapes." + :peddler "And today, I have a one day special!" + :peddler "Every purchase comes with a free balloon!") + (actions/present-choices entities {:choices ["I'm interested in your earplugs." + {:run #(do (actions/update-state entities (fn [state] (assoc state :wants-toy true))) + (actions/respond entities % + :peddler "A choice choice sir!" + :peddler "These earplugs have been used by the the choicest of wearers." + :peddler "I can see a young man like yourself enjoying these choice earplugs for ages to come!" + :peddler "And remember, every purchase comes with the choicest of balloons!" + :peddler "That'll just be 10 sheckels." + :ego "But I haven't got any money!" + :peddler "Well I'm afraid you won't have the choicest of earplugs." + :ego "Can't I give you something else for them?" + :peddler "Well, I am low on choice children's toys." + :peddler "If you can bring me one, and I mean the choicest of toys, I will give you the earplugs."))} + "I'm interested in a glass eye." + {:run #(do (actions/update-state entities (fn [state] (assoc state :wants-toy true))) + (actions/respond entities % + :peddler "The choicest choice, young man!" + :peddler "This glass eye is made out of the choicest glass, from across the sea." + :peddler "And remember, every purchase comes with the choicest of balloons!" + :peddler "That'll just be 95 sheckels." + :ego "But I haven't got any money!" + :peddler "Well I'm afraid you won't have the choicest of glass eyes." + :ego "Can't I give you something else for them?" + :peddler "I'll tell you what, I don't have any thing for the kids that come to my stand." + :peddler "If you can bring me the choicest of toys, I will give you the glass eye."))} + "I'm interested in the motivational tapes." + {:run #(do (actions/update-state entities (fn [state] (assoc state :wants-toy true))) + (actions/respond entities % + :peddler "Sure thing!" + :peddler "Has your luck got you down? Feeling pathetic?" + :peddler "These choicest of motivation tapes will convince you that life isn't so bad." + :peddler "For only 3 easy payments of 29.99 scheckles, they're yours!" + :ego "But I'm broke!" + :peddler "Well I'm afraid you won't have the choicest of motivational tapes." + :ego "Is there anything else you'd take instead?" + :peddler "If you can bring me a nice kid's toy, I will give you the tapes."))} + "Nevermind." {:run #(actions/respond entities % :peddler "Goodbye, sir.")}]})) + +(defn give-teddy [entities] + (actions/remove-item entities :teddy) + (actions/do-dialogue entities + :peddler "That is the choicest of teddy bears!" + :peddler "True to my word, I will give you one of my wares." + :peddler "What would you like?") + (actions/present-choices entities + {:choices ["The glass eye." + {:run #(do (actions/respond entities % :peddler "Of course sir. Here you go.") + (actions/give entities :glass-eye))} + "The motivational tapes." + {:run #(do (actions/respond entities % :peddler "Of course sir. Here you go.") + (actions/give entities :motivational-tapes))} + "The used earplugs." + {:run #(do (actions/respond entities % :peddler "Of course sir. Here you go.") + (actions/give entities :used-earplugs))}]}) + (actions/talk entities :peddler "And, of course, here is your balloon.") + (actions/give entities :balloon) + (actions/talk entities :peddler "Thank you for your business!")) + +(defn do-completed-peddler-conversation [entities] + (actions/do-dialogue entities + :ego "Hello there, peddler." + :peddler "Hello again, sir! I trust you are enjoying your goods!" + :ego "I sure am." + :peddler "I thought so!")) + +(defn do-wants-toy-conversation [entities] + (actions/do-dialogue entities + :ego "Hello there, peddler." + :peddler "Hello again, sir! Have you found me the choicest jack-in-the box yet?" + :ego "... erm, no." + :peddler "Oh, well how about the choicest bouncy ball?" + :ego "... not quite yet." + :peddler "Marionette? Teddy bear? Building blocks?") + (if (actions/has-item? entities :teddy) + (do + (actions/do-dialogue entities :ego "Well, I have this teddy bear.") + (give-teddy entities)) + + (actions/do-dialogue entities :ego "No, no, and no." + :peddler "Well come back when you have something I'm interested in." + :peddler "Remember - I have a one-day special going." + :peddler "Every purchase comes with a free balloon!"))) + +(defn do-peddler-dialogue [entities] + (cond (actions/has-obtained? entities :balloon) (do-completed-peddler-conversation entities) + (get-in @entities [:state :wants-toy]) (do-wants-toy-conversation entities) + :else (do-initial-peddler-conversation entities))) (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])] @@ -62,82 +161,10 @@ :script (actions/get-script entities (actions/walk-to entities :ego [191 90] :face :left) - (if (actions/has-obtained? entities :balloon) - (do (actions/do-dialogue entities - :ego "Hello there, peddler." - :peddler "Hello again, sir! I trust you are enjoying your goods!" - :ego "I sure am." - :peddler "I thought so!")) - - (do (actions/do-dialogue entities - :ego "Hello there, peddler." - :peddler "Good day sir! Care to see any of my wares?" - :peddler "I have only the choicest of wares." - :ego "What 'wares' are you selling?" - :peddler "I have the choicest of all types of wares..." - :peddler "...I'm well stocked on used earplugs..." - :peddler "...glass eyes..." - :peddler "... and motivational tapes." - :peddler "And today, I have a one day special!" - :peddler "Every purchase comes with a free balloon!") - (actions/present-choices entities {:choices ["I'm interested in your earplugs." - {:run #(do (actions/update-state entities (fn [state] (assoc state :wants-toy true))) - (actions/respond entities % - :peddler "A choice choice sir!" - :peddler "These earplugs have been used by the the choicest of wearers." - :peddler "I can see a young man like yourself enjoying these choice earplugs for ages to come!" - :peddler "And remember, every purchase comes with the choicest of balloons!" - :peddler "That'll just be 10 sheckels." - :ego "But I haven't got any money!" - :peddler "Well I'm afraid you won't have the choicest of earplugs." - :ego "Can't I give you something else for them?" - :peddler "Well, I am low on choice children's toys." - :peddler "If you can bring me one, and I mean the choicest of toys, I will give you the earplugs."))} - "I'm interested in a glass eye." - {:run #(do (actions/update-state entities (fn [state] (assoc state :wants-toy true))) - (actions/respond entities % - :peddler "The choicest choice, young man!" - :peddler "This glass eye is made out of the choicest glass, from across the sea." - :peddler "And remember, every purchase comes with the choicest of balloons!" - :peddler "That'll just be 95 sheckels." - :ego "But I haven't got any money!" - :peddler "Well I'm afraid you won't have the choicest of glass eyes." - :ego "Can't I give you something else for them?" - :peddler "I'll tell you what, I don't have any thing for the kids that come to my stand." - :peddler "If you can bring me the choicest of toys, I will give you the glass eye."))} - "I'm interested in the motivational tapes." - {:run #(do (actions/update-state entities (fn [state] (assoc state :wants-toy true))) - (actions/respond entities % - :peddler "Sure thing!" - :peddler "Has your luck got you down? Feeling pathetic?" - :peddler "These choicest of motivation tapes will convince you that life isn't so bad." - :peddler "For only 3 easy payments of 29.99 scheckles, they're yours!" - :ego "But I'm broke!" - :peddler "Well I'm afraid you won't have the choicest of motivational tapes." - :ego "Is there anything else you'd take instead?" - :peddler "If you can bring me a nice kid's toy, I will give you the tapes."))} - "Nevermind." {:run #(actions/respond entities % :peddler "Goodbye, sir.")}]}))) - ) + (do-peddler-dialogue entities)) :scripts {:teddy (actions/get-script entities (actions/walk-to entities :ego [191 90] :face :left) - (actions/remove-item entities :teddy) - (actions/do-dialogue entities - :peddler "That is the choicest of teddy bears!" - :peddler "True to my word, I will give you one of my wares." - :peddler "What would you like?") - (actions/present-choices entities - {:choices ["The glass eye." - {:run #(do (actions/respond entities % :peddler "Of course sir. Here you go.") - (actions/give entities :glass-eye))} - "The motivational tapes." - {:run #(do (actions/respond entities % :peddler "Of course sir. Here you go.") - (actions/give entities :motivational-tapes))} - "The used earplugs." - {:run #(do (actions/respond entities % :peddler "Of course sir. Here you go.") - (actions/give entities :used-earplugs))}]}) - (actions/talk entities :peddler "And, of course, here is your balloon.") - (actions/give entities :balloon) - (actions/talk entities :peddler "Thank you for your business!"))}}} + (give-teddy entities))}}} :layers [(assoc (texture "outside-castle/background.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