92 lines
7.9 KiB
Clojure
92 lines
7.9 KiB
Clojure
(ns advent.screens.rooms.space
|
|
(:require [advent.screens.rooms :as rooms]
|
|
[advent.screens.rooms.common :as common]
|
|
[advent.actions :as actions]
|
|
[advent.screens.items :as items]
|
|
[advent.utils :as utils]
|
|
[clojure.zip :as zip]
|
|
[clojure.set :as set]
|
|
[clojure.string :as str]
|
|
[play-clj.core :refer :all]
|
|
[play-clj.ui :refer :all]
|
|
[play-clj.utils :refer :all]
|
|
[play-clj.g2d :refer :all]))
|
|
|
|
(defn taunt [screen entities]
|
|
(when (and (not (get-in entities [:actions :script-running?]))
|
|
(get-in entities [:state :active?])
|
|
(not (get-in entities [:state :blergh-dead?])))
|
|
((actions/get-script entities (actions/do-dialogue entities :blergh (rand-nth ["Come on, little man! Try and hit me!"
|
|
"What's the matter? Cold feet?"
|
|
"Come here and fight me like man!"
|
|
"Your precious Georgia McGorgeous would be laughing if she saw you now."
|
|
"Pick up your weapon and fight!"]))) entities))
|
|
nil)
|
|
|
|
(defn make [screen]
|
|
(let [blergh-stand (texture "space/blergh-stand.png")
|
|
blergh-talk (texture "space/blergh-talk.png")
|
|
blergh-flex (texture "space/blergh-flex.png")
|
|
blergh-talk-anim (animation 0.3 [blergh-talk blergh-stand])
|
|
blergh-stand-anim (animation 0.7 [blergh-flex blergh-stand])
|
|
blergh-swing (utils/make-anim "space/blergh-swing.png" [106 165] 0.1 [0 0 1 2 3 4 ])
|
|
blergh-appear (utils/make-anim "space/blergh-appear.png" [106 165] 0.05 (flatten [(range 13) 12 12 12 12 12 12 12 12 12 12 12 12 12 ]))
|
|
blergh-grow (utils/make-anim "space/blergh-grow.png" [106 165] 0.10 [0 1 0 1 0 1 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 3 2 3 2 3 2 3 2 3 2 3 2 3 2 3 2 3 3 3 3 3 3 3 3 3 3 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 5 6 7 8 9 10 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11])
|
|
bullet (utils/make-anim "space/bullet.png" [24 24] 0.0075 [0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 3 3 3 4 4 5 5 6 5 4 7])]
|
|
(rooms/make :music :town-1
|
|
:interactions
|
|
{}
|
|
:layers [(assoc (texture "space/background.png") :x 0 :y 0 :baseline 0)]
|
|
:timers {:taunt [10.0 8.0 taunt]}
|
|
:blergh (rooms/make-entity :blergh (assoc (animation->texture screen blergh-appear)
|
|
:x 180 :y 50 :baseline 190
|
|
:stand blergh-stand-anim :talk blergh-talk-anim
|
|
:swing blergh-swing
|
|
:appear blergh-appear
|
|
:grow blergh-grow
|
|
:talk-color (color 0.95 0.4 0.2 1.0)
|
|
:script (actions/get-script entities (actions/do-dialogue entities :blergh "Come on! Try and hit me!"))
|
|
:scripts {:sword (actions/get-script entities
|
|
(actions/walk-straight-to entities :ego [205 45])
|
|
(actions/play-animation entities :ego :swing)
|
|
(actions/do-dialogue entities :blergh "Ha ha ha! Is that the best you can do?"
|
|
:blergh "Take this!")
|
|
(actions/play-animation entities :blergh :swing)
|
|
(actions/walk-straight-to entities :ego [100 45] :anim :squat :override-dir :right :speed 3.0)
|
|
(actions/do-dialogue entities :ego "Ouch!"
|
|
:blergh "My turn.")
|
|
|
|
(common/go-to-jail entities)
|
|
(actions/do-dialogue entities :ego "Hey!"
|
|
:ego "What's going on? I was just about to teach Blergh a lesson!"))
|
|
:magic-slingshot (actions/get-script entities
|
|
(actions/do-dialogue entities
|
|
:ego "Hey Blergh!"
|
|
:ego "Take this!")
|
|
(actions/play-animation entities :ego :shoot)
|
|
(actions/add-entity entities :bullet (get-in @entities [:room :bullet]))
|
|
(actions/walk-straight-to entities :bullet [213 166] :update-baseline? false :speed 5.0)
|
|
(actions/add-entity entities :broken-jewel (get-in @entities [:room :broken-jewel]))
|
|
(Thread/sleep 500)
|
|
(actions/remove-entity entities :bullet)
|
|
(actions/update-state entities #(assoc % :broke-jewel? true))
|
|
(actions/do-dialogue entities
|
|
:blergh "Argh! My magic lightning helmet!"
|
|
:blergh "No matter. I will destroy you with my bare hands!"))}))
|
|
:entities {}
|
|
:bullet (assoc (animation->texture screen bullet)
|
|
:x 130 :y 85 :baseline 241
|
|
:walk bullet)
|
|
:broken-jewel (assoc (texture "space/broken-jewel.png")
|
|
:x 222 :y 172 :baseline 240)
|
|
:collision "space/collision.png"
|
|
:scale-fn (constantly 1.5)
|
|
:start-pos [140 55]
|
|
:apply-state (fn [e]
|
|
(as-> e e
|
|
(if (get-in e [:state :broke-jewel?])
|
|
(assoc-in e [:room :entities :broken-jewel] (get-in e [:room :entities :broken-jewel]))
|
|
e)
|
|
(assoc-in e [:room :entities :blergh] (get-in e [:room :blergh])))
|
|
))))
|