145 lines
9.9 KiB
Clojure
145 lines
9.9 KiB
Clojure
(ns advent.screens.rooms.ending
|
|
(:require
|
|
[clojure.core.async :as a]
|
|
[advent.screens.rooms :as rooms]
|
|
[advent.screens.rooms.common :as common]
|
|
[advent.actions :as actions]
|
|
[advent.screens.items :as items]
|
|
[advent.tween :as tween]
|
|
[advent.utils :as utils]
|
|
[clojure.zip :as zip]
|
|
[clojure.set :as set]
|
|
[clojure.string :as str]
|
|
[play-clj.core :refer :all]
|
|
[play-clj.math :refer :all]
|
|
[play-clj.ui :refer :all]
|
|
[play-clj.utils :refer :all]
|
|
[play-clj.g2d :refer :all])
|
|
(:import [com.badlogic.gdx.graphics Color]))
|
|
|
|
(defn make [screen]
|
|
(let [
|
|
peddler-sheet (texture! (utils/get-texture "outside-castle/peddler-talk.png" ) :split 18 36)
|
|
peddler-stand (utils/flip (animation 0.2 (for [i (flatten [(repeat 8 0) 6 (repeat 8 0) 6 (repeat 5 0) 4 5 4 5 4 5])]
|
|
(aget peddler-sheet 0 i))))
|
|
warden-stand (utils/make-anim "ending-castle/warden-2.png" [21 41] 0.21 (flatten [(repeat 7 0) 1]))
|
|
|
|
game-player-stand (utils/make-anim "ending-castle/game-player.png" [14 39] 0.2 (flatten [(repeat 5 0) 1] ))
|
|
|
|
ladder-guard-stand-1 (animation 0.1 [(utils/get-texture "inside-cafeteria/ladder-guard-2.png")])
|
|
ladder-guard-stand-2 (utils/flip (animation 0.1 [(utils/get-texture "inside-cafeteria/ladder-guard-2.png")]))
|
|
grandma-stand (utils/make-anim "cat-tree/grandma.png" [25 36] 0.2 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1])
|
|
cat-stand (utils/make-anim "cat-tree/cat-stand.png" [22 10] 0.15 (flatten [(repeat 10 0) 1 1 (repeat 10 0) 2 3 4 3 0 0 2 3 4 3 (repeat 10 0) 1 1 (repeat 10 0) 5 5 6 6 7 (repeat 10 [7 8]) 6 5 0]))
|
|
duke-stand (utils/make-anim "ending-castle/duke.png" [40 48] 0.23 (flatten [(repeat 4 0) 1]))
|
|
duke-talk (utils/make-anim "ending-castle/duke.png" [40 48] 0.23 [0 2 0 2 1 2])
|
|
duke-reach (utils/make-anim "ending-castle/duke.png" [40 48] 0.23 [3 4 5 6])
|
|
duke-reach-talk (utils/make-anim "ending-castle/duke.png" [40 48] 0.23 [6 7])
|
|
duke-knight (utils/make-anim "ending-castle/duke.png" [40 48] 0.23 [8 9 10 9 8])
|
|
|
|
georgia-stand (utils/make-anim "georgia/stand.png" [20 43] 0.2 (flatten [(repeat 20 0) 1 (repeat 10 0) 1]))
|
|
georgia-hand-hold (utils/make-anim "georgia/stand.png" [20 43] 0.2 (flatten [(repeat 3 0) 3 4]))
|
|
georgia-talk (utils/make-anim "georgia/stand.png" [20 43] 0.2 (flatten [0 2 0 2 0 1 0 0 2]))
|
|
georgia-kick (utils/make-anim-seq "georgia/kick" [40 43] 0.1 (flatten [(repeat 10 0) (repeat 7 1) (repeat 7 2)
|
|
3 4 5 6 7 8 9 10 11 12 13 (repeat 10 14)
|
|
15 16 17 18 19 (repeat 10 0)]))
|
|
frankie-fall (utils/make-anim-seq "ending-castle/frankie-fall" [40 35] 0.1 (flatten [(range 8) (repeat 20 7) 8 9 10 11 7]))
|
|
frankie-down (utils/make-anim-seq "ending-castle/frankie-fall" [40 35] 0.1 [0])
|
|
scaler (utils/scaler-fn-with-baseline 20 1.3 1.30)]
|
|
(rooms/make :music :dream
|
|
:sounds {:cloud (utils/load-sound "ending-castle/cloud.ogg")}
|
|
:name "Ending"
|
|
:interactions {}
|
|
:layers [(assoc (utils/get-texture "ending-castle/ending-castle2-assets/background.png") :x 0 :y 0 :origin-x 0 :origin-y 0 :baseline 0)
|
|
(assoc (utils/get-texture "ending-castle/ending-castle2-assets/foreground.png") :x 160 :y 0 :origin-x 165 :origin-y 5 :baseline 240 :parallax 1.4)]
|
|
:apply-state (fn [screen e]
|
|
(as-> e e
|
|
(utils/play-sound! screen e :cloud (fn [e]
|
|
(* 0.5 (/ (- 400 (get-in e [:room :entities :gandarf :y]))
|
|
300)))
|
|
0.5 :loop )
|
|
|
|
(update-in e [:room :entities :ego] dissoc :talk-override )))
|
|
:georgia (rooms/make-entity :georgia (assoc (animation->texture screen georgia-stand)
|
|
:x 111 :y 22 :baseline 218
|
|
:scale-x 1.3
|
|
:scale-y 1.3
|
|
:talk-color (Color/valueOf "ffabe0ff")
|
|
:opacity 0.0
|
|
:anim georgia-stand
|
|
:anim-start 0
|
|
:stand georgia-stand
|
|
:talk georgia-talk
|
|
:kick georgia-kick
|
|
:walk (utils/make-anim "georgia/walk.png" [20 43] 0.2 (range 8))
|
|
:hand-hold georgia-hand-hold
|
|
:kick-sound (utils/load-sound "georgia/kick.ogg")
|
|
:anim-sound-frames {georgia-kick {27 [:kick-sound (constantly 0.6)]}}
|
|
:anim-merges {georgia-stand {:origin-x 10 :origin-y 1}
|
|
:default {:origin-x 10 :origin-y 1}
|
|
georgia-kick {:origin-x 19 :origin-y 0}}))
|
|
:entities {:frankie (assoc (common/make-frankie screen)
|
|
:x 28 :y 21 :baseline 200
|
|
:fall frankie-fall
|
|
:down frankie-down
|
|
:scale-x 1.3
|
|
:scale-y 1.3
|
|
:fall-sound (utils/load-sound "ending-castle/fall.ogg")
|
|
:anim-sound-frames {frankie-fall {6 [:fall-sound 0.5]}}
|
|
:anim-merges {:default {:origin-x 12 :origin-y 0}
|
|
frankie-fall {:origin-x 22 :origin-y 0}
|
|
frankie-down {:origin-x 22 :origin-y 0}})
|
|
:gandarf (assoc (common/make-wizard screen {:x 205 :y 400 :baseline 239})
|
|
:update-fn (fn [screen entities gandarf]
|
|
(assoc gandarf :y (or (get-in entities [:gandarf-cloud :y])
|
|
(:y gandarf)))))
|
|
:gandarf-cloud (doto (assoc (particle-effect "particles/gandarf-cloud") :x 215 :y 400
|
|
:baseline 240)
|
|
(particle-effect! :set-position 215 130))
|
|
:duke (assoc (animation->texture screen duke-stand)
|
|
:x 117 :y 50 :baseline (- 240 50)
|
|
:scale-x 1.3
|
|
:scale-y 1.3
|
|
:anim duke-stand
|
|
:anim-start 0
|
|
:talk-color (color 0.4 0.5 0.94 1.0)
|
|
:talk duke-talk
|
|
:stand duke-stand
|
|
:reach duke-reach
|
|
:reach-talk duke-reach-talk
|
|
:knight duke-knight)
|
|
:magic-frog-particle (doto (assoc (particle-effect "particles/magic-frog") :x 101 :y 23
|
|
:baseline 241)
|
|
(particle-effect! :set-position 101 23))
|
|
|
|
|
|
:cat (assoc (animation->texture screen cat-stand)
|
|
:x 73 :y 194 :baseline (- 240 195)
|
|
:anim cat-stand
|
|
:anim-start 0
|
|
:scale-x 0.65
|
|
:scale-y 0.65
|
|
:scaled true)
|
|
:crowd-left (assoc (utils/get-texture "ending-castle/crowd-left.png")
|
|
:x 0 :y 0
|
|
:scale-x 1.3
|
|
:scale-y 1.3
|
|
:baseline 239)
|
|
:crowd-right (assoc (utils/get-texture "ending-castle/crowd-right.png")
|
|
:x 196 :y 0
|
|
:scale-x 1.3
|
|
:scale-y 1.3
|
|
:baseline 238)
|
|
:guard-1 (assoc (utils/get-texture "ending-castle/guard-1.png")
|
|
:x 91 :y 73
|
|
:scale-x 0.9
|
|
:scale-y 0.9
|
|
:baseline 140)
|
|
:guard-2 (assoc (utils/get-texture "ending-castle/guard-2.png")
|
|
:x 182 :y 73
|
|
:scale-x 0.9
|
|
:scale-y 0.9
|
|
:baseline 140)}
|
|
:collision "ending-castle/ending-castle2-assets/collision.png"
|
|
:scale-fn scaler
|
|
:start-pos [165 49])))
|