diff --git a/desktop/resources/ego/swing-shovel.png b/desktop/resources/ego/swing-shovel.png
new file mode 100644
index 00000000..1de2de5e
Binary files /dev/null and b/desktop/resources/ego/swing-shovel.png differ
diff --git a/desktop/resources/ego/swingshovel.pxa/0.pxi b/desktop/resources/ego/swingshovel.pxa/0.pxi
index 091cca71..e7f76a2b 100644
Binary files a/desktop/resources/ego/swingshovel.pxa/0.pxi and b/desktop/resources/ego/swingshovel.pxa/0.pxi differ
diff --git a/desktop/resources/ego/swingshovel.pxa/1.pxi b/desktop/resources/ego/swingshovel.pxa/1.pxi
index fe22d84d..7930ee45 100644
Binary files a/desktop/resources/ego/swingshovel.pxa/1.pxi and b/desktop/resources/ego/swingshovel.pxa/1.pxi differ
diff --git a/desktop/resources/ego/swingshovel.pxa/2.pxi b/desktop/resources/ego/swingshovel.pxa/2.pxi
index e3072364..0a85d0b3 100644
Binary files a/desktop/resources/ego/swingshovel.pxa/2.pxi and b/desktop/resources/ego/swingshovel.pxa/2.pxi differ
diff --git a/desktop/resources/ego/swingshovel.pxa/3.pxi b/desktop/resources/ego/swingshovel.pxa/3.pxi
index da0a6c2f..771c7fbb 100644
Binary files a/desktop/resources/ego/swingshovel.pxa/3.pxi and b/desktop/resources/ego/swingshovel.pxa/3.pxi differ
diff --git a/desktop/resources/ego/swingshovel.pxa/4.pxi b/desktop/resources/ego/swingshovel.pxa/4.pxi
new file mode 100644
index 00000000..bd44f94a
Binary files /dev/null and b/desktop/resources/ego/swingshovel.pxa/4.pxi differ
diff --git a/desktop/resources/ego/swingshovel.pxa/5.pxi b/desktop/resources/ego/swingshovel.pxa/5.pxi
new file mode 100644
index 00000000..571395ff
Binary files /dev/null and b/desktop/resources/ego/swingshovel.pxa/5.pxi differ
diff --git a/desktop/resources/ego/swingshovel.pxa/6.pxi b/desktop/resources/ego/swingshovel.pxa/6.pxi
new file mode 100644
index 00000000..6940f693
Binary files /dev/null and b/desktop/resources/ego/swingshovel.pxa/6.pxi differ
diff --git a/desktop/resources/ego/swingshovel.pxa/7.pxi b/desktop/resources/ego/swingshovel.pxa/7.pxi
new file mode 100644
index 00000000..b8e688f5
Binary files /dev/null and b/desktop/resources/ego/swingshovel.pxa/7.pxi differ
diff --git a/desktop/resources/ego/swingshovel.pxa/8.pxi b/desktop/resources/ego/swingshovel.pxa/8.pxi
new file mode 100644
index 00000000..a68375d7
Binary files /dev/null and b/desktop/resources/ego/swingshovel.pxa/8.pxi differ
diff --git a/desktop/resources/ego/swingshovel.pxa/CelData.plist b/desktop/resources/ego/swingshovel.pxa/CelData.plist
index f0b74d60..9088485c 100644
--- a/desktop/resources/ego/swingshovel.pxa/CelData.plist
+++ b/desktop/resources/ego/swingshovel.pxa/CelData.plist
@@ -18,5 +18,25 @@
duration
1
+
+ duration
+ 1
+
+
+ duration
+ 1
+
+
+ duration
+ 1
+
+
+ duration
+ 1
+
+
+ duration
+ 1
+
diff --git a/desktop/src-common/advent/screens/rooms/dream.clj b/desktop/src-common/advent/screens/rooms/dream.clj
index 84c180f4..84f85526 100644
--- a/desktop/src-common/advent/screens/rooms/dream.clj
+++ b/desktop/src-common/advent/screens/rooms/dream.clj
@@ -225,7 +225,10 @@
:sword (assoc (texture "dream/sword.png")
:x 144 :y 122 :baseline 139
:script (actions/get-script entities
- (read-sword-plaque entities)))
+ (read-sword-plaque entities))
+ :scripts {:shovel (actions/get-script entities
+ (actions/walk-to entities :ego [148 76] :face :right)
+ (actions/play-animation entities :ego :swing-shovel))})
:broom (assoc (texture "dream/broom.png") :x 286 :y 122
:path (catmull-rom-spline (map #(apply vector-2* %) [[286 122] [286 128]]) true)
diff --git a/desktop/src-common/advent/screens/scene.clj b/desktop/src-common/advent/screens/scene.clj
index 62b6d02a..59d51af5 100644
--- a/desktop/src-common/advent/screens/scene.clj
+++ b/desktop/src-common/advent/screens/scene.clj
@@ -200,6 +200,7 @@
glad (utils/make-anim "ego/glad.png" [20 46] 0.04 (flatten [0 1 2 3 4 (repeat 8 [5 5 5]) (repeat 20 0)]))
milk (utils/make-anim "ego/squat.png" [18 36] 0.05 [0 1 2 2 3 3 3 3 3 3 6 5 6 5 6 5 6 5 6 5 6 5 6 5 6 5 6 5 6 5 3 3 3 3 3 3 3 3 3 3 3 2 1 0])
throw (utils/make-anim "ego/throw.png" [18 36] 0.04 (flatten [[(repeat 5 0) (repeat 10 1)] (repeat 3 [2 2 2 3 3 3 4 4 4 5 5 5]) (repeat 5 [2 2 3 3 4 4 5 5]) (repeat 10 [2 3 4 5]) [2 3 3] (repeat 15 6)]))
+ swing-shovel (utils/make-anim "ego/swing-shovel.png" [70 70] 0.1 (range 9))
ego {:right {:walk walk-right
:stand stand-anim
@@ -237,7 +238,9 @@
:sigh sigh
:glad glad
:milk milk
- :throw throw}
+ :throw throw
+ :swing-shovel swing-shovel
+ }
:left {:walk (utils/flip walk-right)
:stand (utils/flip stand-anim)
:talk (utils/flip talk-anim)
@@ -265,7 +268,8 @@
:sigh (utils/flip sigh)
:glad (utils/flip glad)
:milk (utils/flip milk)
- :throw (utils/flip throw)}
+ :throw (utils/flip throw)
+ :swing-shovel (utils/flip swing-shovel)}
:baseline (- 240 (last start-pos))
:facing :right
:origin-x 9
@@ -324,6 +328,7 @@
nil))
:x (first start-pos) :y (last start-pos)
:id "ego"}
+
ego (assoc ego :anim-sound-frames {(get-in ego [:left :walk]) {2 [:step-sound-1 1.0]
6 [:step-sound-2 0.8]}
(get-in ego [:right :walk]) {2 [:step-sound-1 1.0]
@@ -350,6 +355,8 @@
(get-in ego [:right :milk]) {8 [:milk-sound 1.0]}
}
:anim-merges {(get-in ego [:right :shock]) {:origin-x 15}
+ (get-in ego [:left :swing-shovel]) {:origin-x 26}
+ (get-in ego [:right :swing-shovel]) {:origin-x 26}
:default {:origin-x 9}})]
(actions/start-animation screen
(merge (animation->texture screen (:stand (:right ego))) ego)
@@ -395,7 +402,13 @@
(merge entity (animation->texture (update-in screen [:total-time] #(- % (:anim-start entity)))
(:anim entity))
{:current-frame-index (texture! (:anim entity) :get-key-frame-index (get-animation-point (:anim entity) (- (:total-time screen) (:anim-start entity))))
- :previous-frame-index (texture! (:anim entity) :get-key-frame-index (get-animation-point (:anim entity) (- (:total-time screen) (:anim-start entity) (or (:delta-time screen) 0))))}
+ :previous-frame-index (texture! (:anim entity) :get-key-frame-index (get-animation-point (:anim entity) (- (:total-time screen) (:anim-start entity) (or (:delta-time screen) 0))))
+ :origin-x (or (get-in entity [:anim-origins (:anim entity) 0])
+ (:base-origin-x entity)
+ (:origin-x entity))
+ :origin-y (or (get-in entity [:anim-origins (:anim entity) 1])
+ (:base-origin-y entity)
+ (:origin-y entity))}
(or (get-in entity [:anim-merges (:anim entity)])
(get-in entity [:anim-merges :default]))))