diff --git a/desktop/resources/ego/frog.png b/desktop/resources/ego/frog.png
new file mode 100644
index 00000000..9f2dfa0f
Binary files /dev/null and b/desktop/resources/ego/frog.png differ
diff --git a/desktop/resources/ego/frog.pxa/0.pxi b/desktop/resources/ego/frog.pxa/0.pxi
new file mode 100644
index 00000000..6dff6e09
Binary files /dev/null and b/desktop/resources/ego/frog.pxa/0.pxi differ
diff --git a/desktop/resources/ego/frog.pxa/1.pxi b/desktop/resources/ego/frog.pxa/1.pxi
new file mode 100644
index 00000000..316098e2
Binary files /dev/null and b/desktop/resources/ego/frog.pxa/1.pxi differ
diff --git a/desktop/resources/ego/frog.pxa/CelData.plist b/desktop/resources/ego/frog.pxa/CelData.plist
new file mode 100644
index 00000000..29c78f8b
--- /dev/null
+++ b/desktop/resources/ego/frog.pxa/CelData.plist
@@ -0,0 +1,14 @@
+
+
+
+
+
+ duration
+ 1
+
+
+ duration
+ 1
+
+
+
diff --git a/desktop/resources/inside-house/magic-frog b/desktop/resources/inside-house/magic-frog
new file mode 100644
index 00000000..cd1e0898
--- /dev/null
+++ b/desktop/resources/inside-house/magic-frog
@@ -0,0 +1,278 @@
+Untitled
+- Delay -
+active: false
+- Duration -
+lowMin: 1000.0
+lowMax: 1000.0
+- Count -
+min: 0
+max: 500
+- Emission -
+lowMin: 0.0
+lowMax: 0.0
+highMin: 200.0
+highMax: 200.0
+relative: false
+scalingCount: 2
+scaling0: 1.0
+scaling1: 0.0
+timelineCount: 2
+timeline0: 0.0
+timeline1: 0.6164383
+- Life -
+lowMin: 0.0
+lowMax: 0.0
+highMin: 500.0
+highMax: 1000.0
+relative: false
+scalingCount: 3
+scaling0: 1.0
+scaling1: 1.0
+scaling2: 0.3
+timelineCount: 3
+timeline0: 0.0
+timeline1: 0.66
+timeline2: 1.0
+- Life Offset -
+active: false
+- X Offset -
+active: false
+- Y Offset -
+active: false
+- Spawn Shape -
+shape: line
+- Spawn Width -
+lowMin: 0.0
+lowMax: 0.0
+highMin: 20.0
+highMax: 20.0
+relative: false
+scalingCount: 1
+scaling0: 1.0
+timelineCount: 1
+timeline0: 0.0
+- Spawn Height -
+lowMin: 0.0
+lowMax: 0.0
+highMin: 0.0
+highMax: 0.0
+relative: false
+scalingCount: 1
+scaling0: 1.0
+timelineCount: 1
+timeline0: 0.0
+- Scale -
+lowMin: 0.0
+lowMax: 0.0
+highMin: 3.0
+highMax: 5.0
+relative: false
+scalingCount: 1
+scaling0: 1.0
+timelineCount: 1
+timeline0: 0.0
+- Velocity -
+active: true
+lowMin: 0.0
+lowMax: 0.0
+highMin: 30.0
+highMax: 300.0
+relative: false
+scalingCount: 1
+scaling0: 1.0
+timelineCount: 1
+timeline0: 0.0
+- Angle -
+active: true
+lowMin: 90.0
+lowMax: 90.0
+highMin: 80.0
+highMax: 100.0
+relative: false
+scalingCount: 3
+scaling0: 1.0
+scaling1: 0.0
+scaling2: 0.0
+timelineCount: 3
+timeline0: 0.0
+timeline1: 0.5
+timeline2: 1.0
+- Rotation -
+active: false
+- Wind -
+active: false
+- Gravity -
+active: false
+- Tint -
+colorsCount: 3
+colors0: 0.6392157
+colors1: 0.76862746
+colors2: 0.03529412
+timelineCount: 1
+timeline0: 0.0
+- Transparency -
+lowMin: 0.0
+lowMax: 0.0
+highMin: 1.0
+highMax: 1.0
+relative: false
+scalingCount: 4
+scaling0: 0.0
+scaling1: 1.0
+scaling2: 0.75
+scaling3: 0.0
+timelineCount: 4
+timeline0: 0.0
+timeline1: 0.2
+timeline2: 0.8
+timeline3: 1.0
+- Options -
+attached: false
+continuous: false
+aligned: false
+additive: true
+behind: false
+premultipliedAlpha: false
+- Image Path -
+dot.png
+
+
+Untitled
+- Delay -
+active: false
+- Duration -
+lowMin: 1000.0
+lowMax: 1000.0
+- Count -
+min: 0
+max: 500
+- Emission -
+lowMin: 0.0
+lowMax: 0.0
+highMin: 200.0
+highMax: 200.0
+relative: false
+scalingCount: 2
+scaling0: 1.0
+scaling1: 0.0
+timelineCount: 2
+timeline0: 0.0
+timeline1: 0.6164383
+- Life -
+lowMin: 0.0
+lowMax: 0.0
+highMin: 500.0
+highMax: 1000.0
+relative: false
+scalingCount: 3
+scaling0: 1.0
+scaling1: 1.0
+scaling2: 0.3
+timelineCount: 3
+timeline0: 0.0
+timeline1: 0.66
+timeline2: 1.0
+- Life Offset -
+active: false
+- X Offset -
+active: false
+- Y Offset -
+active: false
+- Spawn Shape -
+shape: line
+- Spawn Width -
+lowMin: 0.0
+lowMax: 0.0
+highMin: 20.0
+highMax: 20.0
+relative: false
+scalingCount: 1
+scaling0: 1.0
+timelineCount: 1
+timeline0: 0.0
+- Spawn Height -
+lowMin: 0.0
+lowMax: 0.0
+highMin: 0.0
+highMax: 0.0
+relative: false
+scalingCount: 1
+scaling0: 1.0
+timelineCount: 1
+timeline0: 0.0
+- Scale -
+lowMin: 0.0
+lowMax: 0.0
+highMin: 1.0
+highMax: 5.0
+relative: false
+scalingCount: 1
+scaling0: 1.0
+timelineCount: 1
+timeline0: 0.0
+- Velocity -
+active: true
+lowMin: 0.0
+lowMax: 0.0
+highMin: 30.0
+highMax: 300.0
+relative: false
+scalingCount: 1
+scaling0: 1.0
+timelineCount: 1
+timeline0: 0.0
+- Angle -
+active: true
+lowMin: 90.0
+lowMax: 90.0
+highMin: 60.0
+highMax: 120.0
+relative: false
+scalingCount: 4
+scaling0: 1.0
+scaling1: 1.0
+scaling2: 1.0
+scaling3: 1.0
+timelineCount: 4
+timeline0: 0.0
+timeline1: 0.4178082
+timeline2: 0.5753425
+timeline3: 0.96575344
+- Rotation -
+active: false
+- Wind -
+active: false
+- Gravity -
+active: false
+- Tint -
+colorsCount: 3
+colors0: 0.03529412
+colors1: 0.76862746
+colors2: 0.5882353
+timelineCount: 1
+timeline0: 0.0
+- Transparency -
+lowMin: 0.0
+lowMax: 0.0
+highMin: 1.0
+highMax: 1.0
+relative: false
+scalingCount: 4
+scaling0: 0.0
+scaling1: 1.0
+scaling2: 0.75
+scaling3: 0.0
+timelineCount: 4
+timeline0: 0.0
+timeline1: 0.2
+timeline2: 0.8
+timeline3: 1.0
+- Options -
+attached: false
+continuous: false
+aligned: false
+additive: true
+behind: false
+premultipliedAlpha: false
+- Image Path -
+dot.png
diff --git a/desktop/resources/wizard/magic-hands.png b/desktop/resources/wizard/magic-hands.png
new file mode 100644
index 00000000..c2cac198
Binary files /dev/null and b/desktop/resources/wizard/magic-hands.png differ
diff --git a/desktop/resources/wizard/magic-hands.pxa/0.pxi b/desktop/resources/wizard/magic-hands.pxa/0.pxi
new file mode 100644
index 00000000..bd729bce
Binary files /dev/null and b/desktop/resources/wizard/magic-hands.pxa/0.pxi differ
diff --git a/desktop/resources/wizard/magic-hands.pxa/1.pxi b/desktop/resources/wizard/magic-hands.pxa/1.pxi
new file mode 100644
index 00000000..26e858ee
Binary files /dev/null and b/desktop/resources/wizard/magic-hands.pxa/1.pxi differ
diff --git a/desktop/resources/wizard/magic-hands.pxa/CelData.plist b/desktop/resources/wizard/magic-hands.pxa/CelData.plist
new file mode 100644
index 00000000..490cc590
--- /dev/null
+++ b/desktop/resources/wizard/magic-hands.pxa/CelData.plist
@@ -0,0 +1,14 @@
+
+
+
+
+
+ duration
+ 0.20000000298023224
+
+
+ duration
+ 0.20000000298023224
+
+
+
diff --git a/desktop/src-common/advent/screens/rooms/common.clj b/desktop/src-common/advent/screens/rooms/common.clj
index 93b249da..71f7839d 100644
--- a/desktop/src-common/advent/screens/rooms/common.clj
+++ b/desktop/src-common/advent/screens/rooms/common.clj
@@ -25,6 +25,7 @@
wizard-stand (animation 0.2 (for [i (flatten [(repeat 10 0) 1])]
(aget wizard-sheet 0 i)))
wizard-talk-angry (utils/make-anim "wizard/talk-angry.png" [20 50] 0.2 [0 2 0 2 1 2 0 3 0 2 0 1 0 2])
+ wizard-magic-hands (utils/make-anim "wizard/magic-hands.png" [20 50] 0.2 (range 2))
wizard-disappear (utils/make-anim "wizard/disappear.png" [20 46] 0.075 (range 19))
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)))]
@@ -33,12 +34,14 @@
:stand (utils/flip wizard-stand)
:disappear (utils/flip wizard-disappear)
+ :magic-hands (utils/flip wizard-magic-hands)
:talk-angry (utils/flip wizard-talk-angry)
}
:right {:talk wizard-talk
:stand wizard-stand
:disappear wizard-disappear
- :talk-angry (utils/flip wizard-talk-angry)
+ :talk-angry wizard-talk-angry
+ :magic-hands wizard-magic-hands
}
:night-profile :sprite
:origin-x 0
diff --git a/desktop/src-common/advent/screens/rooms/inside_house.clj b/desktop/src-common/advent/screens/rooms/inside_house.clj
index 0e30fb2c..de44a86f 100644
--- a/desktop/src-common/advent/screens/rooms/inside_house.clj
+++ b/desktop/src-common/advent/screens/rooms/inside_house.clj
@@ -181,6 +181,9 @@
:candle-smoke (doto (assoc (particle-effect "inside-house/candle") :x 172 :y 112
:baseline 200)
(particle-effect! :set-position 172 112))
+ :magic-frog-particle (doto (assoc (particle-effect "inside-house/magic-frog") :x 230 :y 0
+ :baseline 241)
+ (particle-effect! :set-position 237 0))
:flask (assoc (texture "inside-house/flask.png")
:x 265 :y 80 :baseline 240
:script (actions/get-script entities
diff --git a/desktop/src-common/advent/screens/rooms/outside_house.clj b/desktop/src-common/advent/screens/rooms/outside_house.clj
index 014ef709..ec564e91 100644
--- a/desktop/src-common/advent/screens/rooms/outside_house.clj
+++ b/desktop/src-common/advent/screens/rooms/outside_house.clj
@@ -147,7 +147,24 @@
(actions/talk entities :ego "I don't want to put something in there unless I'm sure I need to."))))
(defn wizard-dialogue [entities]
- (actions/do-dialogue entities :ego "Hello there Gandarf!" :wizard "Oh no, not you again!")
+ (if (get-in @entities [:state :has-met-gandarf?])
+ (do (actions/do-dialogue entities :ego "Hello again Gandarf!"
+ :wizard "Not you again!")
+ (actions/talk entities :wizard "I command you, leave at once!" :anim :talk-angry :stop? false)
+ (actions/talk entities :wizard "Don't make me use my powers against you!" :anim :talk-angry :stop? false)
+ (actions/talk entities :wizard "Leave now, or else!" :anim :talk-angry :stop? false)
+ (actions/begin-animation entities :wizard :magic-hands))
+ (do (actions/do-dialogue entities :ego "Hello there Gandarf!"
+ :wizard "Oh no, not you!"
+ :ego "What do you mean, 'not you!'?"
+ :wizard "I mean, you've wrecked my life!"
+ :wizard "I never want to see the likes of you again!"
+ :wizard "Leave!"
+ :ego "But...")
+ (actions/talk entities :wizard "I command you, by all the power I can muster..." :anim :talk-angry :stop? false)
+ (actions/talk entities :wizard "Leave now, or else!" :anim :talk-angry :stop? false)
+ (actions/begin-animation entities :wizard :magic-hands)))
+ (actions/update-state entities (fn [s] (assoc s :has-met-gandarf? true)))
(actions/present-choices entities
{:choices ["What do you mean, \"Not you again?\""
{:run #(actions/respond entities % :wizard "I mean, you've wrecked my life and I never want to see you again.")
@@ -236,9 +253,41 @@
"You're not happy to see me, Gandarf?"
{:run #(actions/respond entities % :wizard "Of course not, you little brat. You've made my life a living hell!")
:choices #(-> % zip/left)}
- "Goodbye, Gandarf!"
+ "Or else what?"
+ {:run #(do (actions/talk entities :ego %)
+ (actions/talk entities :wizard "Or else I'll turn you into a frog!" :anim :talk-angry :stop? false)
+ (actions/begin-animation entities :wizard :magic-hands))
+ :choices ["You don't scare me."
+ {:run
+ #(do
+ (actions/talk entities :ego %)
+ (actions/talk entities :wizard "You asked for it, boy." :anim :talk-angry :stop? false)
+ (actions/talk entities :wizard "Grenouille KALA!!!" :anim :talk-angry :stop? false)
+ (particle-effect! (get-in @entities [:room :entities :magic-frog-particle]) :reset)
+ (particle-effect! (get-in @entities [:room :entities :magic-frog-particle]) :start)
+ (actions/begin-animation entities :ego :frog)
+ (Thread/sleep 2000)
+ (actions/begin-animation entities :wizard :stand)
+ (Thread/sleep 1000)
+ (actions/do-dialogue entities
+ :wizard "I warned you, Tick."
+ :wizard "Now, I will return you to your true state if you leave me in peace."
+ :wizard "Do you promise?")
+ (actions/play-animation entities :ego :frog-nod :stop? false)
+ (actions/talk entities :wizard "Frustatium DISPOSIUM!!!" :anim :talk-angry :stop? false)
+ (particle-effect! (get-in @entities [:room :entities :magic-frog-particle]) :reset)
+ (particle-effect! (get-in @entities [:room :entities :magic-frog-particle]) :start)
+ (Thread/sleep 1500)
+ (actions/transition-background entities :outside-house [257 90] :face :left))}
+ "Okay, okay, I'm leaving."
+ {:run
+ #(do
+ (actions/talk entities :ego %)
+ (actions/transition-background entities :outside-house [257 90] :face :left))}]}
+ "Okay, okay, I'm leaving."
{:run #(do
- (actions/respond entities % :wizard "Now scram!")
+ (actions/talk entities :ego %)
+ (actions/talk entities :wizard "Okay, okay, I'm leaving." :anim :talk-angry)
(actions/transition-background entities :outside-house [257 90] :face :left))}]}))
@@ -342,7 +391,7 @@
:interactions
{:door {:box [250 100 281 160]
:script
- (actions/get-unsaved-script
+ (actions/get-script
entities
(actions/walk-to entities :ego [257 90] :face :right)
(actions/talk entities :ego (str "Anyone home?"))
diff --git a/desktop/src-common/advent/screens/scene.clj b/desktop/src-common/advent/screens/scene.clj
index 38bcbc3a..b19c5f6e 100644
--- a/desktop/src-common/advent/screens/scene.clj
+++ b/desktop/src-common/advent/screens/scene.clj
@@ -339,6 +339,8 @@ void main()
(texture (aget fire-sheet 0 i))))
grow (animation 0.1 (for [i [0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 3 0 0 0 0 3 0 0 0 3 3 0 0 0 2 2 0 0 2 0 0 2 0 2 0 2 0 2 0 2 0 2 3 2 3 2 3 2 3 2 4 3 4 3 4 3 4]]
(texture (aget grow-sheet 0 i))))
+ frog (utils/make-anim "ego/frog.png" [16 36] 0.1 [0])
+ frog-nod (utils/make-anim "ego/frog.png" [16 36] 0.2 [0 1 0 1 0 1 0 1])
hold-up-to-window (utils/make-anim "ego/hold-up-to-window.png" [18 36] 0.1 [0 1 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 1 0 0 0 0 0 0])
jump (utils/make-anim "ego/swing.png" [36 75] 0.2 (flatten [[1 2]]))
swing (utils/make-anim "ego/swing.png" [36 75] 0.145 (flatten [[3 4 5 6 7 ]]))
@@ -403,6 +405,8 @@ void main()
:burnt burnt
:passed-out passed-out
:scared scared
+ :frog frog
+ :frog-nod frog-nod
:scared-talk scared-talk
:scared-walk scared-walk
:sigh sigh
@@ -452,6 +456,8 @@ void main()
:milk (utils/flip milk)
:throw (utils/flip throw)
:swing-shovel (utils/flip swing-shovel)
+ :frog (utils/flip frog)
+ :frog-nod (utils/flip frog-nod)
:love (utils/flip love)
:idea (utils/flip idea)
:axe (utils/flip axe)