├── .gitignore
├── 01-title.clj
├── 02-about.clj
├── 03-projects.clj
├── 04-gateway.clj
├── 05-class.clj
├── 06-problem.clj
├── 07-indie.clj
├── 08-gameplay.clj
├── 09-graphics.clj
├── 10-artistic.clj
├── 11-tools.clj
├── 12-hosted.clj
├── 13-unity-libgdx.clj
├── 14-good-hosted.clj
├── 15-play-clj-init.clj
├── 16-play-clj-core.clj
├── 17-play-clj-defscreen.clj
├── 18-play-clj-state.clj
├── 19-play-clj-transform.clj
├── 20-play-clj-entities.clj
├── 21-play-clj-interop.clj
├── 22-play-clj-dsl.clj
├── 23-play-clj-dsl-bang.clj
├── 24-play-clj-docs.clj
├── 25-platformer.clj
├── 26-functional.clj
├── 27-logic.clj
├── 28-dungeon-crawler.clj
├── 29-interactivity.clj
├── 30-graffiti.clj
├── 31-street-music.clj
├── 32-mural.clj
├── 33-games-as-art.clj
├── 34-bottom-line.clj
├── 35-quest-quest.clj
├── 36-review.clj
├── 37-end.clj
├── README.md
├── core.clj
├── dungeon-crawler
├── 64x64.png
├── brick.png
├── brick1.png
├── brick2.png
├── brick3.png
├── brick4.png
├── brick5.png
├── brick6.png
├── catacomb.png
├── characters
│ ├── elemental.png
│ ├── goblin.png
│ ├── magician.png
│ ├── male_base.png
│ ├── male_heavy.png
│ ├── male_light.png
│ ├── male_longbow.png
│ ├── male_longsword.png
│ ├── male_shield.png
│ ├── male_staff.png
│ ├── male_unarmored.png
│ ├── ogre.png
│ ├── skeleton.png
│ ├── slime.png
│ ├── werewolf.png
│ └── zombie.png
├── cocutos.png
├── crypt.png
├── death.wav
├── gallery.png
├── gehena.png
├── hive.png
├── lair.png
├── lapis.png
├── level1.tmx
├── monsterhurt.wav
├── moss.png
├── mucus.png
├── normal.png
├── pandem1.png
├── pandem2.png
├── pandem3.png
├── pandem4.png
├── pandem6.png
├── playerhurt.wav
├── rock.png
└── tunnel.png
├── images
├── braid.jpg
├── class1.jpg
├── class2.jpg
├── class3.jpg
├── clojure.png
├── defscreen.png
├── docs.png
├── graffiti.jpg
├── libgdx.png
├── lone-survivor.jpg
├── mural.jpg
├── on-render.png
├── on-show.png
├── papers-please.jpg
├── passage-gravitation.jpg
├── play-clj.png
├── shovel-knight.jpg
├── spelunky.jpg
├── street-music.jpg
└── unity.png
├── particle-effect
├── fire.p
├── particle-cloud.png
├── particle-fire.png
├── particle-star.png
└── particle.png
├── platformer
├── level.tmx
├── player_jump.png
├── player_stand.png
├── player_walk1.png
├── player_walk2.png
├── player_walk3.png
└── tiles.png
├── quest-quest
├── first-enemy.png
├── jump.wav
├── koala_player.png
├── player.png
├── portrait.png
├── quester copy.png
├── quester.png
├── tile-map.png
├── tileSet.png
└── world.tmx
├── settings.edn
└── skin
├── droid_32.fnt
├── droid_32.png
├── droid_48.fnt
├── droid_48.png
├── droid_96.fnt
├── droid_961.png
├── droid_962.png
├── uiskin.atlas
├── uiskin.json
└── uiskin.png
/.gitignore:
--------------------------------------------------------------------------------
1 | .*
2 |
--------------------------------------------------------------------------------
/01-title.clj:
--------------------------------------------------------------------------------
1 | (defscreen title-screen
2 | :on-show
3 | (fn [screen entities]
4 | (update! screen :renderer (stage) :camera (orthographic))
5 | (let [ui-skin (skin "skin/uiskin.json")
6 | small-font (skin! ui-skin :get-font "small-font")
7 | small-style (style :label small-font (color :white))]
8 | (table [(label (str "Making Games" \newline
9 | "at Runtime" \newline
10 | "with Clojure")
11 | ui-skin
12 | :set-alignment (align :center))
13 | :row
14 | [(label "by Zach Oakes" small-style)
15 | :pad-top 10]]
16 | :align (align :center)
17 | :set-fill-parent true)))
18 |
19 | :on-render
20 | (fn [screen entities]
21 | (render! screen entities))
22 |
23 | :on-resize
24 | (fn [screen entities]
25 | (height! screen (:height screen))))
26 |
--------------------------------------------------------------------------------
/02-about.clj:
--------------------------------------------------------------------------------
1 | (defscreen about-screen
2 | :on-show
3 | (fn [screen entities]
4 | (update! screen :renderer (stage) :camera (orthographic))
5 | (let [ui-skin (skin "skin/uiskin.json")
6 | medium-font (skin! ui-skin :get-font "medium-font")
7 | medium-style (style :label medium-font (color :white))
8 | small-font (skin! ui-skin :get-font "small-font")
9 | small-style (style :label small-font (color :white))]
10 | (table [(label "About me" medium-style)
11 | :row
12 | (label (str "Independent programmer" \newline
13 | "Used to do crypto/stego" \newline
14 | "Joined the dark side" \newline
15 | "Quit in 2012 and started using Clojure")
16 | small-style)]
17 | :align (align :center)
18 | :set-fill-parent true)))
19 |
20 | :on-render
21 | (fn [screen entities]
22 | (render! screen entities))
23 |
24 | :on-resize
25 | (fn [screen entities]
26 | (height! screen (:height screen))))
27 |
--------------------------------------------------------------------------------
/03-projects.clj:
--------------------------------------------------------------------------------
1 | (defscreen projects-screen
2 | :on-show
3 | (fn [screen entities]
4 | (update! screen :renderer (stage) :camera (orthographic))
5 | (let [ui-skin (skin "skin/uiskin.json")
6 | medium-font (skin! ui-skin :get-font "medium-font")
7 | medium-style (style :label medium-font (color :white))
8 | small-font (skin! ui-skin :get-font "small-font")
9 | small-style (style :label small-font (color :white))]
10 | (table [(label "My Clojure Projects" medium-style)
11 | :row
12 | (label (str "Nightweb - anonymous networking client" \newline
13 | "Nightcode - IDE for beginners" \newline
14 | "play-clj - game library" \newline
15 | "Nightmod - game creation tool")
16 | small-style)]
17 | :align (align :center)
18 | :set-fill-parent true)))
19 |
20 | :on-render
21 | (fn [screen entities]
22 | (render! screen entities))
23 |
24 | :on-resize
25 | (fn [screen entities]
26 | (height! screen (:height screen))))
27 |
--------------------------------------------------------------------------------
/04-gateway.clj:
--------------------------------------------------------------------------------
1 | (defscreen gateway-screen
2 | :on-show
3 | (fn [screen entities]
4 | (update! screen :renderer (stage) :camera (orthographic))
5 | (let [ui-skin (skin "skin/uiskin.json")
6 | medium-font (skin! ui-skin :get-font "medium-font")
7 | medium-style (style :label medium-font (color :white))
8 | small-font (skin! ui-skin :get-font "small-font")
9 | small-style (style :label small-font (color :white))]
10 | (table [(label "Gamedev -> Clojure" medium-style)
11 | :row
12 | (label (str \newline
13 | "Gamedev is a gateway drug" \newline
14 | "Learned C++ at 15 by making games" \newline
15 | "A solid gamedev \"story\" is useful" \newline
16 | "Brings in new people from diverse backgrounds")
17 | small-style)]
18 | :align (align :center)
19 | :set-fill-parent true)))
20 |
21 | :on-render
22 | (fn [screen entities]
23 | (render! screen entities))
24 |
25 | :on-resize
26 | (fn [screen entities]
27 | (height! screen (:height screen))))
28 |
--------------------------------------------------------------------------------
/05-class.clj:
--------------------------------------------------------------------------------
1 | (defscreen class-screen
2 | :on-show
3 | (fn [screen entities]
4 | (update! screen :renderer (stage) :camera (orthographic))
5 | (let [ui-skin (skin "skin/uiskin.json")
6 | small-font (skin! ui-skin :get-font "small-font")
7 | small-style (style :label small-font (color :white))]
8 | (table [(image "images/class2.jpg" :set-scaling (scaling :fit))
9 | (image "images/class3.jpg" :set-scaling (scaling :fit))
10 | :row
11 | (image "images/class1.jpg" :set-scaling (scaling :fit))
12 | (label "Photo credit:\nAmbridge Connection" small-style)]
13 | :set-fill-parent true
14 | :pad (float 50) (float 0) (float 0) (float 0))))
15 |
16 | :on-render
17 | (fn [screen entities]
18 | (render! screen entities))
19 |
20 | :on-resize
21 | (fn [screen entities]
22 | (height! screen (:height screen))))
23 |
--------------------------------------------------------------------------------
/06-problem.clj:
--------------------------------------------------------------------------------
1 | (defscreen problem-screen
2 | :on-show
3 | (fn [screen entities]
4 | (update! screen :renderer (stage) :camera (orthographic))
5 | (let [ui-skin (skin "skin/uiskin.json")
6 | medium-font (skin! ui-skin :get-font "medium-font")
7 | medium-style (style :label medium-font (color :white))
8 | small-font (skin! ui-skin :get-font "small-font")
9 | small-style (style :label small-font (color :white))]
10 | (table [(label "Clojure -> Gamedev" medium-style)
11 | :row
12 | (label (str \newline
13 | "Need to define what problem we're solving" \newline
14 | "Big budget (AAA) games are mostly stale" \newline
15 | "Only innovate in a narrow way (graphics)" \newline
16 | "Current gamedev tools are great for this")
17 | small-style)]
18 | :align (align :center)
19 | :set-fill-parent true)))
20 |
21 | :on-render
22 | (fn [screen entities]
23 | (render! screen entities))
24 |
25 | :on-resize
26 | (fn [screen entities]
27 | (height! screen (:height screen))))
28 |
--------------------------------------------------------------------------------
/07-indie.clj:
--------------------------------------------------------------------------------
1 | (defscreen indie-screen
2 | :on-show
3 | (fn [screen entities]
4 | (update! screen :renderer (stage) :camera (orthographic))
5 | (let [ui-skin (skin "skin/uiskin.json")
6 | medium-font (skin! ui-skin :get-font "medium-font")
7 | medium-style (style :label medium-font (color :white))
8 | small-font (skin! ui-skin :get-font "small-font")
9 | small-style (style :label small-font (color :white))]
10 | (table [(label "Indie Games" medium-style)
11 | :row
12 | (label (str \newline
13 | "Made by small teams and individuals" \newline
14 | "Fairly new category due to digital stores" \newline
15 | "Use simple graphics by necessity" \newline
16 | "Differentiate with gameplay, artistic merit")
17 | small-style)]
18 | :align (align :center)
19 | :set-fill-parent true)))
20 |
21 | :on-render
22 | (fn [screen entities]
23 | (render! screen entities))
24 |
25 | :on-resize
26 | (fn [screen entities]
27 | (height! screen (:height screen))))
28 |
--------------------------------------------------------------------------------
/08-gameplay.clj:
--------------------------------------------------------------------------------
1 | (defscreen gameplay-screen
2 | :on-show
3 | (fn [screen entities]
4 | (update! screen :renderer (stage) :camera (orthographic))
5 | (let [ui-skin (skin "skin/uiskin.json")
6 | small-font (skin! ui-skin :get-font "small-font")
7 | small-style (style :label small-font (color :white))]
8 | (table [(stack [(image "images/braid.jpg" :set-scaling (scaling :fit))
9 | (label "Braid (2008)" small-style
10 | :set-alignment (align :bottom-left))])
11 | (stack [(image "images/spelunky.jpg"
12 | :set-scaling (scaling :fit))
13 | (label "Spelunky (2009)" small-style
14 | :set-alignment (align :bottom-left))])]
15 | :set-fill-parent true)))
16 |
17 | :on-render
18 | (fn [screen entities]
19 | (render! screen entities))
20 |
21 | :on-resize
22 | (fn [screen entities]
23 | (height! screen (:height screen))))
24 |
--------------------------------------------------------------------------------
/09-graphics.clj:
--------------------------------------------------------------------------------
1 | (defscreen graphics-screen
2 | :on-show
3 | (fn [screen entities]
4 | (update! screen :renderer (stage) :camera (orthographic))
5 | (let [ui-skin (skin "skin/uiskin.json")
6 | small-font (skin! ui-skin :get-font "small-font")
7 | small-style (style :label small-font (color :white))]
8 | (table [(stack [(image "images/lone-survivor.jpg"
9 | :set-scaling (scaling :fit))
10 | (label "Lone Survivor (2012)" small-style
11 | :set-alignment (align :bottom-left))])
12 | (stack [(image "images/shovel-knight.jpg"
13 | :set-scaling (scaling :fit))
14 | (label "Shovel Knight (2014)" small-style
15 | :set-alignment (align :bottom-left))])]
16 | :set-fill-parent true)))
17 |
18 | :on-render
19 | (fn [screen entities]
20 | (render! screen entities))
21 |
22 | :on-resize
23 | (fn [screen entities]
24 | (height! screen (:height screen))))
25 |
--------------------------------------------------------------------------------
/10-artistic.clj:
--------------------------------------------------------------------------------
1 | (defscreen artistic-screen
2 | :on-show
3 | (fn [screen entities]
4 | (update! screen :renderer (stage) :camera (orthographic))
5 | (let [ui-skin (skin "skin/uiskin.json")
6 | small-font (skin! ui-skin :get-font "small-font")
7 | small-style (style :label small-font (color :white))]
8 | (table [(stack [(image "images/passage-gravitation.jpg"
9 | :set-scaling (scaling :fit))
10 | (label "Passage (2007) and Gravitation (2008)" small-style
11 | :set-alignment (align :bottom-left))])
12 | (stack [(image "images/papers-please.jpg"
13 | :set-scaling (scaling :fit))
14 | (label "Papers, Please (2013)" small-style
15 | :set-alignment (align :bottom-left))])]
16 | :set-fill-parent true)))
17 |
18 | :on-render
19 | (fn [screen entities]
20 | (render! screen entities))
21 |
22 | :on-resize
23 | (fn [screen entities]
24 | (height! screen (:height screen))))
25 |
--------------------------------------------------------------------------------
/11-tools.clj:
--------------------------------------------------------------------------------
1 | (defscreen tools-screen
2 | :on-show
3 | (fn [screen entities]
4 | (update! screen :renderer (stage) :camera (orthographic))
5 | (let [ui-skin (skin "skin/uiskin.json")
6 | medium-font (skin! ui-skin :get-font "medium-font")
7 | medium-style (style :label medium-font (color :white))
8 | small-font (skin! ui-skin :get-font "small-font")
9 | small-style (style :label small-font (color :white))]
10 | (table [(label "Tools for Gamedev" medium-style)
11 | :row
12 | (label (str \newline
13 | "1. Hosted languages" \newline
14 | "2. Functional & logic programming" \newline
15 | "3. Interactive programming")
16 | small-style)]
17 | :align (align :center)
18 | :set-fill-parent true)))
19 |
20 | :on-render
21 | (fn [screen entities]
22 | (render! screen entities))
23 |
24 | :on-resize
25 | (fn [screen entities]
26 | (height! screen (:height screen))))
27 |
--------------------------------------------------------------------------------
/12-hosted.clj:
--------------------------------------------------------------------------------
1 | (defscreen hosted-screen
2 | :on-show
3 | (fn [screen entities]
4 | (update! screen :renderer (stage) :camera (orthographic))
5 | (let [ui-skin (skin "skin/uiskin.json")
6 | medium-font (skin! ui-skin :get-font "medium-font")
7 | medium-style (style :label medium-font (color :white))
8 | small-font (skin! ui-skin :get-font "small-font")
9 | small-style (style :label small-font (color :white))]
10 | (table [(label "Hosted Languages in Games" medium-style)
11 | :row
12 | (label (str \newline
13 | "Gamedevs traditionally reject GC" \newline
14 | "Things have changed in last half-decade" \newline
15 | "Many indie games are now made in C# / Java" \newline
16 | "Indies have scarce resources, need to ship")
17 | small-style)]
18 | :align (align :center)
19 | :set-fill-parent true)))
20 |
21 | :on-render
22 | (fn [screen entities]
23 | (render! screen entities))
24 |
25 | :on-resize
26 | (fn [screen entities]
27 | (height! screen (:height screen))))
28 |
--------------------------------------------------------------------------------
/13-unity-libgdx.clj:
--------------------------------------------------------------------------------
1 | (defscreen unity-libgdx-screen
2 | :on-show
3 | (fn [screen entities]
4 | (update! screen :renderer (stage) :camera (orthographic))
5 | (let [ui-skin (skin "skin/uiskin.json")
6 | small-font (skin! ui-skin :get-font "small-font")
7 | small-style (style :label small-font (color :white))]
8 | (table [(image "images/unity.png" :set-scaling (scaling :fit))
9 | (image "images/libgdx.png" :set-scaling (scaling :fit))
10 | :row
11 | (label "CLR / Mono" small-style)
12 | (label "JVM" small-style)
13 | :row
14 | (label "Desktop+Mobile+Web+Consoles" small-style)
15 | (label "Desktop+Mobile+Web" small-style)
16 | :row
17 | (label "2D+3D (focused on 3D)" small-style)
18 | (label "2D+3D (focused on 2D)" small-style)
19 | :row
20 | (label "Can use Clojure (via Arcadia)" small-style)
21 | (label "Can use Clojure (via play-clj or directly)" small-style)]
22 | :set-fill-parent true)))
23 |
24 | :on-render
25 | (fn [screen entities]
26 | (render! screen entities))
27 |
28 | :on-resize
29 | (fn [screen entities]
30 | (height! screen (:height screen))))
31 |
--------------------------------------------------------------------------------
/14-good-hosted.clj:
--------------------------------------------------------------------------------
1 | (defscreen good-hosted-screen
2 | :on-show
3 | (fn [screen entities]
4 | (update! screen :renderer (stage) :camera (orthographic))
5 | (let [ui-skin (skin "skin/uiskin.json")
6 | medium-font (skin! ui-skin :get-font "medium-font")
7 | medium-style (style :label medium-font (color :white))
8 | small-font (skin! ui-skin :get-font "small-font")
9 | small-style (style :label small-font (color :white))]
10 | (table [(label "It's Good to be Hosted" medium-style)
11 | :row
12 | (label (str \newline
13 | "The argument has been turned on its head" \newline
14 | "Being hosted on CLR / JVM is huge advantage" \newline
15 | "Many alt langs are on their own island" \newline
16 | "Can make toy games, but shippable games are hard")
17 | small-style)]
18 | :align (align :center)
19 | :set-fill-parent true)))
20 |
21 | :on-render
22 | (fn [screen entities]
23 | (render! screen entities))
24 |
25 | :on-resize
26 | (fn [screen entities]
27 | (height! screen (:height screen))))
28 |
--------------------------------------------------------------------------------
/15-play-clj-init.clj:
--------------------------------------------------------------------------------
1 | (defscreen play-clj-init-screen
2 | :on-show
3 | (fn [screen entities]
4 | (update! screen :renderer (stage) :camera (orthographic))
5 | (let [ui-skin (skin "skin/uiskin.json")
6 | medium-font (skin! ui-skin :get-font "medium-font")
7 | medium-style (style :label medium-font (color :white))
8 | small-font (skin! ui-skin :get-font "small-font")
9 | small-style (style :label small-font (color :white))]
10 | (table [(label "Getting Started with play-clj" medium-style)
11 | :row
12 | (label (str \newline
13 | "lein new play-clj hello-world" \newline
14 | \newline
15 | "hello-world/" \newline
16 | " android/" \newline
17 | " desktop/" \newline
18 | " ios/" \newline
19 | \newline
20 | "Android uses lein-droid, iOS uses lein-fruit" \newline
21 | "Mobile is experimental" \newline
22 | "Web backend not supported (maybe later via TeaVM?)")
23 | small-style)]
24 | :align (align :center)
25 | :set-fill-parent true)))
26 |
27 | :on-render
28 | (fn [screen entities]
29 | (render! screen entities))
30 |
31 | :on-resize
32 | (fn [screen entities]
33 | (height! screen (:height screen))))
34 |
--------------------------------------------------------------------------------
/16-play-clj-core.clj:
--------------------------------------------------------------------------------
1 | (defscreen play-clj-core-screen
2 | :on-show
3 | (fn [screen entities]
4 | (update! screen :renderer (stage) :camera (orthographic))
5 | (let [ui-skin (skin "skin/uiskin.json")
6 | medium-font (skin! ui-skin :get-font "medium-font")
7 | medium-style (style :label medium-font (color :white))
8 | small-font (skin! ui-skin :get-font "small-font")
9 | small-style (style :label small-font (color :white))]
10 | (table [(label "Hello, World!" medium-style)
11 | :row
12 | (label (str \newline
13 | "desktop/src-common/hello_world/core.clj")
14 | small-style)
15 | :row
16 | (image "images/play-clj.png" :set-scaling (scaling :fit))]
17 | :align (align :center)
18 | :set-fill-parent true)))
19 |
20 | :on-render
21 | (fn [screen entities]
22 | (render! screen entities))
23 |
24 | :on-resize
25 | (fn [screen entities]
26 | (height! screen (:height screen))))
27 |
--------------------------------------------------------------------------------
/17-play-clj-defscreen.clj:
--------------------------------------------------------------------------------
1 | (defscreen play-clj-defscreen-screen
2 | :on-show
3 | (fn [screen entities]
4 | (update! screen :renderer (stage) :camera (orthographic))
5 | (let [ui-skin (skin "skin/uiskin.json")
6 | medium-font (skin! ui-skin :get-font "medium-font")
7 | medium-style (style :label medium-font (color :white))
8 | small-font (skin! ui-skin :get-font "small-font")
9 | small-style (style :label small-font (color :white))]
10 | (table [[(label "defscreen" medium-style)
11 | :colspan 2]
12 | :row
13 | [(image "images/defscreen.png" :set-scaling (scaling :fit))
14 | :pad 5 5 5 5]]
15 | :align (align :center)
16 | :set-fill-parent true)))
17 |
18 | :on-render
19 | (fn [screen entities]
20 | (render! screen entities))
21 |
22 | :on-resize
23 | (fn [screen entities]
24 | (height! screen (:height screen))))
25 |
--------------------------------------------------------------------------------
/18-play-clj-state.clj:
--------------------------------------------------------------------------------
1 | (defscreen play-clj-state-screen
2 | :on-show
3 | (fn [screen entities]
4 | (update! screen :renderer (stage) :camera (orthographic))
5 | (let [ui-skin (skin "skin/uiskin.json")
6 | medium-font (skin! ui-skin :get-font "medium-font")
7 | medium-style (style :label medium-font (color :white))
8 | small-font (skin! ui-skin :get-font "small-font")
9 | small-style (style :label small-font (color :white))]
10 | (table [(label "State in play-clj" medium-style)
11 | :row
12 | (label (str \newline
13 | "`screen` is a hash-map" \newline
14 | "`entities` is a vector")
15 | small-style)
16 | :row
17 | (image "images/on-show.png" :set-scaling (scaling :fit))]
18 | :align (align :center)
19 | :set-fill-parent true)))
20 |
21 | :on-render
22 | (fn [screen entities]
23 | (render! screen entities))
24 |
25 | :on-resize
26 | (fn [screen entities]
27 | (height! screen (:height screen))))
28 |
--------------------------------------------------------------------------------
/19-play-clj-transform.clj:
--------------------------------------------------------------------------------
1 | (defscreen play-clj-transform-screen
2 | :on-show
3 | (fn [screen entities]
4 | (update! screen :renderer (stage) :camera (orthographic))
5 | (let [ui-skin (skin "skin/uiskin.json")
6 | medium-font (skin! ui-skin :get-font "medium-font")
7 | medium-style (style :label medium-font (color :white))
8 | small-font (skin! ui-skin :get-font "small-font")
9 | small-style (style :label small-font (color :white))]
10 | (table [(label "Transforming Entities" medium-style)
11 | :row
12 | (image "images/on-render.png" :set-scaling (scaling :fit))]
13 | :align (align :center)
14 | :set-fill-parent true)))
15 |
16 | :on-render
17 | (fn [screen entities]
18 | (render! screen entities))
19 |
20 | :on-resize
21 | (fn [screen entities]
22 | (height! screen (:height screen))))
23 |
--------------------------------------------------------------------------------
/20-play-clj-entities.clj:
--------------------------------------------------------------------------------
1 | (defscreen play-clj-entities-screen
2 | :on-show
3 | (fn [screen entities]
4 | (update! screen :renderer (stage) :camera (orthographic))
5 | (let [ui-skin (skin "skin/uiskin.json")
6 | medium-font (skin! ui-skin :get-font "medium-font")
7 | medium-style (style :label medium-font (color :white))
8 | small-font (skin! ui-skin :get-font "small-font")
9 | small-style (style :label small-font (color :white))]
10 | (table [(label "What are entities?" medium-style)
11 | :row
12 | (label (str \newline
13 | "Records that implement the Entity protocol" \newline
14 | \newline
15 | "(shape :filled :set-color (color :red) :rect 0 0 10 10)" \newline
16 | "(texture \"image.png\")" \newline
17 | "(particle-effect \"particles/fire.p\")" \newline
18 | "; many other types of entities" \newline)
19 | small-style)]
20 | :align (align :center)
21 | :set-fill-parent true)))
22 |
23 | :on-render
24 | (fn [screen entities]
25 | (render! screen entities))
26 |
27 | :on-resize
28 | (fn [screen entities]
29 | (height! screen (:height screen))))
30 |
31 | (defscreen play-clj-entities-background-screen
32 | :on-show
33 | (fn [screen entities]
34 | (update! screen :renderer (stage) :camera (orthographic))
35 | [(assoc (shape :filled
36 | :set-color (color :red)
37 | :rect 0 0 100 100)
38 | :x 100 :y 500)
39 | (assoc (texture "images/clojure.png")
40 | :x 100 :y 350 :width 100 :height 100)
41 | (assoc (particle-effect "particle-effect/fire.p")
42 | :x 150 :y 200)])
43 |
44 | :on-render
45 | (fn [screen entities]
46 | (render! screen entities))
47 |
48 | :on-resize
49 | (fn [screen entities]
50 | (height! screen (:height screen))))
51 |
--------------------------------------------------------------------------------
/21-play-clj-interop.clj:
--------------------------------------------------------------------------------
1 | (defscreen play-clj-interop-screen
2 | :on-show
3 | (fn [screen entities]
4 | (update! screen :renderer (stage) :camera (orthographic))
5 | (let [ui-skin (skin "skin/uiskin.json")
6 | medium-font (skin! ui-skin :get-font "medium-font")
7 | medium-style (style :label medium-font (color :white))
8 | small-font (skin! ui-skin :get-font "small-font")
9 | small-style (style :label small-font (color :white))]
10 | (table [(label "When :x and :y are not enough" medium-style)
11 | :row
12 | (label (str \newline
13 | "Entities contain Java object in :object key" \newline
14 | \newline
15 | "(let [entity (texture \"clojure.png\")]
16 | (doto ^TextureRegion (:object entity)
17 | (.flip true false)
18 | (.setRegion 0 0 100 100))
19 | entity)")
20 | small-style)]
21 | :align (align :center)
22 | :set-fill-parent true)))
23 |
24 | :on-render
25 | (fn [screen entities]
26 | (render! screen entities))
27 |
28 | :on-resize
29 | (fn [screen entities]
30 | (height! screen (:height screen))))
31 |
--------------------------------------------------------------------------------
/22-play-clj-dsl.clj:
--------------------------------------------------------------------------------
1 | (defscreen play-clj-dsl-screen
2 | :on-show
3 | (fn [screen entities]
4 | (update! screen :renderer (stage) :camera (orthographic))
5 | (let [ui-skin (skin "skin/uiskin.json")
6 | medium-font (skin! ui-skin :get-font "medium-font")
7 | medium-style (style :label medium-font (color :white))
8 | small-font (skin! ui-skin :get-font "small-font")
9 | small-style (style :label small-font (color :white))]
10 | (table [(label (str "(texture \"clojure.png\"
11 | :flip true false
12 | :set-region 0 0 100 100)" \newline
13 | \newline
14 | "(let [entity (texture \"clojure.png\")]
15 | (doto ^TextureRegion (:object entity)
16 | (.flip true false)
17 | (.setRegion 0 0 100 100))
18 | entity)")
19 | small-style)]
20 | :align (align :center)
21 | :set-fill-parent true)))
22 |
23 | :on-render
24 | (fn [screen entities]
25 | (render! screen entities))
26 |
27 | :on-resize
28 | (fn [screen entities]
29 | (height! screen (:height screen))))
30 |
--------------------------------------------------------------------------------
/23-play-clj-dsl-bang.clj:
--------------------------------------------------------------------------------
1 | (defscreen play-clj-dsl-bang-screen
2 | :on-show
3 | (fn [screen entities]
4 | (update! screen :renderer (stage) :camera (orthographic))
5 | (let [ui-skin (skin "skin/uiskin.json")
6 | medium-font (skin! ui-skin :get-font "medium-font")
7 | medium-style (style :label medium-font (color :white))
8 | small-font (skin! ui-skin :get-font "small-font")
9 | small-style (style :label small-font (color :white))]
10 | (table [(label (str "(texture! entity :set-region 0 0 100 100)" \newline
11 | \newline
12 | "(.setRegion ^TextureRegion (:object entity) 0 0 100 100)")
13 | small-style)]
14 | :align (align :center)
15 | :set-fill-parent true)))
16 |
17 | :on-render
18 | (fn [screen entities]
19 | (render! screen entities))
20 |
21 | :on-resize
22 | (fn [screen entities]
23 | (height! screen (:height screen))))
24 |
--------------------------------------------------------------------------------
/24-play-clj-docs.clj:
--------------------------------------------------------------------------------
1 | (defscreen play-clj-docs-screen
2 | :on-show
3 | (fn [screen entities]
4 | (update! screen :renderer (stage) :camera (orthographic))
5 | (let [ui-skin (skin "skin/uiskin.json")
6 | small-font (skin! ui-skin :get-font "small-font")
7 | small-style (style :label small-font (color :black))]
8 | (table [(image "images/docs.png" :set-scaling (scaling :fit))]
9 | :set-fill-parent true)))
10 |
11 | :on-render
12 | (fn [screen entities]
13 | (render! screen entities))
14 |
15 | :on-resize
16 | (fn [screen entities]
17 | (height! screen (:height screen))))
18 |
--------------------------------------------------------------------------------
/25-platformer.clj:
--------------------------------------------------------------------------------
1 | ; utils
2 |
3 | (def ^:const vertical-tiles-p 20)
4 | (def ^:const duration-p 0.15)
5 | (def ^:const damping-p 0.5)
6 | (def ^:const max-velocity-p 14)
7 | (def ^:const max-jump-velocity-p 56)
8 | (def ^:const deceleration-p 0.9)
9 | (def ^:const gravity-p -2.5)
10 |
11 | (defn decelerate-p
12 | [velocity]
13 | (let [velocity (* velocity deceleration-p)]
14 | (if (< (Math/abs velocity) damping-p)
15 | 0
16 | velocity)))
17 |
18 | (defn get-x-velocity-p
19 | [entity]
20 | (if (:player? entity)
21 | (cond
22 | (key-pressed? :dpad-left)
23 | (* -1 max-velocity-p)
24 | (key-pressed? :dpad-right)
25 | max-velocity-p
26 | :else
27 | (:x-velocity entity))
28 | (:x-velocity entity)))
29 |
30 | (defn get-y-velocity-p
31 | [entity]
32 | (if (:player? entity)
33 | (cond
34 | (and (:can-jump? entity) (key-pressed? :dpad-up))
35 | max-jump-velocity-p
36 | :else
37 | (:y-velocity entity))
38 | (:y-velocity entity)))
39 |
40 | (defn get-direction-p
41 | [entity]
42 | (cond
43 | (> (:x-velocity entity) 0) :right
44 | (< (:x-velocity entity) 0) :left
45 | :else (:direction entity)))
46 |
47 | (defn get-touching-tile-p
48 | [screen entity & layer-names]
49 | (let [layers (map #(tiled-map-layer screen %) layer-names)]
50 | (->> (for [tile-x (range (int (:x entity))
51 | (+ (:x entity) (:width entity)))
52 | tile-y (range (int (:y entity))
53 | (+ (:y entity) (:height entity)))]
54 | (some #(when (tiled-map-cell % tile-x tile-y)
55 | [tile-x tile-y])
56 | layers))
57 | (drop-while nil?)
58 | first)))
59 |
60 | ; entities
61 |
62 | (defn create-player-p
63 | []
64 | (let [stand (texture "platformer/player_stand.png")
65 | jump (texture "platformer/player_jump.png")
66 | walk [(texture "platformer/player_walk1.png")
67 | (texture "platformer/player_walk2.png")
68 | (texture "platformer/player_walk3.png")]]
69 | (assoc stand
70 | :stand-right stand
71 | :stand-left (texture stand :flip true false)
72 | :jump-right jump
73 | :jump-left (texture jump :flip true false)
74 | :walk-right (animation duration-p
75 | walk
76 | :set-play-mode (play-mode :loop-pingpong))
77 | :walk-left (animation duration-p
78 | (map #(texture % :flip true false) walk)
79 | :set-play-mode (play-mode :loop-pingpong))
80 | :width 1
81 | :height (/ 26 18)
82 | :x-velocity 0
83 | :y-velocity 0
84 | :x 12
85 | :y 10
86 | :player? true
87 | :can-jump? false
88 | :direction :right)))
89 |
90 | (defn move-p
91 | [screen entity]
92 | (let [x-velocity (get-x-velocity-p entity)
93 | y-velocity (+ (get-y-velocity-p entity) gravity-p)
94 | x-change (* x-velocity (:delta-time screen))
95 | y-change (* y-velocity (:delta-time screen))]
96 | (if (or (not= 0 x-change) (not= 0 y-change))
97 | (assoc entity
98 | :x-velocity (decelerate-p x-velocity)
99 | :y-velocity (decelerate-p y-velocity)
100 | :x-change x-change
101 | :y-change y-change
102 | :x (+ (:x entity) x-change)
103 | :y (+ (:y entity) y-change)
104 | :can-jump? (if (> y-velocity 0) false (:can-jump? entity)))
105 | entity)))
106 |
107 | (defn animate-p
108 | [screen {:keys [x-velocity y-velocity
109 | stand-right stand-left
110 | jump-right jump-left
111 | walk-right walk-left] :as entity}]
112 | (let [direction (get-direction-p entity)]
113 | (merge entity
114 | (cond
115 | (not= y-velocity 0)
116 | (if (= direction :right) jump-right jump-left)
117 | (not= x-velocity 0)
118 | (if (= direction :right)
119 | (animation->texture screen walk-right)
120 | (animation->texture screen walk-left))
121 | :else
122 | (if (= direction :right) stand-right stand-left))
123 | {:direction direction})))
124 |
125 | (defn prevent-move-p
126 | [screen entity]
127 | (let [old-x (- (:x entity) (:x-change entity))
128 | old-y (- (:y entity) (:y-change entity))
129 | entity-x (assoc entity :y old-y)
130 | entity-y (assoc entity :x old-x)
131 | up? (> (:y-change entity) 0)]
132 | (merge entity
133 | (when (get-touching-tile-p screen entity-x "walls")
134 | {:x-velocity 0 :x-change 0 :x old-x})
135 | (when (get-touching-tile-p screen entity-y "walls")
136 | {:y-velocity 0 :y-change 0 :y old-y :can-jump? (not up?)}))))
137 |
138 | ; core
139 |
140 | (defn update-screen-p!
141 | [screen entities]
142 | (doseq [entity entities]
143 | (when (:player? entity)
144 | (position! screen (:x entity) (/ vertical-tiles-p 2))
145 | (when (< (:y entity) (- (:height entity)))
146 | (restart-game!))))
147 | entities)
148 |
149 | (defscreen platformer-screen
150 | :on-show
151 | (fn [screen entities]
152 | (update! screen
153 | :camera (orthographic)
154 | :renderer (orthogonal-tiled-map "platformer/level.tmx" 1/16))
155 | (create-player-p))
156 |
157 | :on-render
158 | (fn [screen entities]
159 | (clear! 0.5 0.5 1 1)
160 | (->> entities
161 | (map (fn [entity]
162 | (->> entity
163 | (move-p screen)
164 | (prevent-move-p screen)
165 | (animate-p screen))))
166 | (render! screen)
167 | (update-screen-p! screen)))
168 |
169 | :on-resize
170 | (fn [screen entities]
171 | (height! screen vertical-tiles-p)))
172 |
--------------------------------------------------------------------------------
/26-functional.clj:
--------------------------------------------------------------------------------
1 | (defscreen functional-screen
2 | :on-show
3 | (fn [screen entities]
4 | (update! screen :renderer (stage) :camera (orthographic))
5 | (let [ui-skin (skin "skin/uiskin.json")
6 | medium-font (skin! ui-skin :get-font "medium-font")
7 | medium-style (style :label medium-font (color :white))
8 | small-font (skin! ui-skin :get-font "small-font")
9 | small-style (style :label small-font (color :white))]
10 | (table [(label "Functional Programming in Games" medium-style)
11 | :row
12 | (label (str \newline
13 | "Same benefits as in other kinds of software" \newline
14 | " Easy parallelism" \newline
15 | " Immutable entities simplify change (i.e., time rewinding)" \newline
16 | "Functional idioms are already being adopted" \newline
17 | " Carmack on functional prog in C++: http://goo.gl/oZvaon" \newline
18 | " ECS architecture replacing OO-style inheritance")
19 | small-style)]
20 | :align (align :center)
21 | :set-fill-parent true)))
22 |
23 | :on-render
24 | (fn [screen entities]
25 | (render! screen entities))
26 |
27 | :on-resize
28 | (fn [screen entities]
29 | (height! screen (:height screen))))
30 |
--------------------------------------------------------------------------------
/27-logic.clj:
--------------------------------------------------------------------------------
1 | (defscreen logic-screen
2 | :on-show
3 | (fn [screen entities]
4 | (update! screen :renderer (stage) :camera (orthographic))
5 | (let [ui-skin (skin "skin/uiskin.json")
6 | medium-font (skin! ui-skin :get-font "medium-font")
7 | medium-style (style :label medium-font (color :white))
8 | small-font (skin! ui-skin :get-font "small-font")
9 | small-style (style :label small-font (color :white))]
10 | (table [(label "Logic Programming in Games" medium-style)
11 | :row
12 | (label (str \newline
13 | "Representing Game Dialogue as Expressions in First-Order Logic" \newline
14 | " http://goo.gl/B6F0hH (via @swannodette)" \newline
15 | " by Kaylen Wheeler" \newline
16 | " Dialogues are data structures instead of strings" \newline
17 | "A Logical Approach to Building Dungeons" \newline
18 | " http://goo.gl/mBfLwO" \newline
19 | " by Anthony Smith and Joanna Bryson" \newline
20 | " Generating levels for a roguelike game" \newline)
21 | small-style)]
22 | :align (align :center)
23 | :set-fill-parent true)))
24 |
25 | :on-render
26 | (fn [screen entities]
27 | (render! screen entities))
28 |
29 | :on-resize
30 | (fn [screen entities]
31 | (height! screen (:height screen))))
32 |
--------------------------------------------------------------------------------
/28-dungeon-crawler.clj:
--------------------------------------------------------------------------------
1 | ; utils
2 |
3 | (def ^:const vertical-tiles 4)
4 | (def ^:const pixels-per-tile 64)
5 | (def ^:const duration 0.2)
6 | (def ^:const damping 0.5)
7 | (def ^:const deceleration 0.9)
8 | (def ^:const map-width 40)
9 | (def ^:const map-height 40)
10 | (def ^:const aggro-distance 2)
11 | (def ^:const attack-distance 0.25)
12 | (def ^:const grid-tile-size 256)
13 | (def ^:const directions [:w :nw :n :ne
14 | :e :se :s :sw])
15 | (def ^:const velocities [[-1 0] [-1 1] [0 1] [1 1]
16 | [1 0] [1 -1] [0 -1] [-1 -1]])
17 |
18 | (def ^:const bar-w 20)
19 | (def ^:const bar-h 80)
20 | (def ^:const npc-bar-h 0.1)
21 |
22 | (defn on-layer?
23 | [screen {:keys [width height] :as entity} & layer-names]
24 | (let [{:keys [x y]} (screen->isometric screen entity)
25 | layers (map #(tiled-map-layer screen %) layer-names)]
26 | (->> (for [tile-x (range (int x) (+ x width))
27 | tile-y (range (int y) (+ y height))]
28 | (-> (some #(tiled-map-cell % tile-x tile-y) layers)
29 | nil?
30 | not))
31 | (filter identity)
32 | first
33 | nil?
34 | not)))
35 |
36 | (defn entity-rect
37 | [{:keys [x y x-feet y-feet width height]} min-distance]
38 | (rectangle (- (+ x x-feet)
39 | (/ min-distance 4))
40 | (- (+ y y-feet)
41 | (/ min-distance 4))
42 | (- (+ width (/ min-distance 2))
43 | (* 2 x-feet))
44 | (- (+ height (/ min-distance 2))
45 | (* 2 y-feet))))
46 |
47 | (defn near-entity?
48 | [e e2 min]
49 | (and (not= (:id e) (:id e2))
50 | (> (:health e2) 0)
51 | (rectangle! (entity-rect e min) :overlaps (entity-rect e2 min))))
52 |
53 | (defn near-entities?
54 | [entities entity min-distance]
55 | (some #(near-entity? entity % min-distance) entities))
56 |
57 | (defn invalid-location?
58 | [screen entities entity]
59 | (or (near-entities? entities entity 0)
60 | (on-layer? screen entity "walls")))
61 |
62 | (defn decelerate
63 | [velocity]
64 | (let [velocity (* velocity deceleration)]
65 | (if (< (Math/abs velocity) damping)
66 | 0
67 | velocity)))
68 |
69 | (defn ^:private get-player-velocity
70 | [{:keys [x-velocity y-velocity max-velocity]}]
71 | (if (and (game :touched?) (button-pressed? :left))
72 | (let [x (float (- (game :x) (/ (game :width) 2)))
73 | y (float (- (game :y) (/ (game :height) 2)))
74 | x-adjust (* max-velocity (Math/abs (double (/ x y))))
75 | y-adjust (* max-velocity (Math/abs (double (/ y x))))]
76 | [(* (Math/signum x) (min max-velocity x-adjust))
77 | (* (Math/signum y) (min max-velocity y-adjust))])
78 | [(cond
79 | (key-pressed? :dpad-left) (* -1 max-velocity)
80 | (key-pressed? :dpad-right) max-velocity
81 | :else x-velocity)
82 | (cond
83 | (key-pressed? :dpad-down) (* -1 max-velocity)
84 | (key-pressed? :dpad-up) max-velocity
85 | :else y-velocity)]))
86 |
87 | (defn ^:private get-npc-axis-velocity
88 | [{:keys [max-velocity]} diff]
89 | (cond
90 | (> diff attack-distance) (* -1 max-velocity)
91 | (< diff (* -1 attack-distance)) max-velocity
92 | :else 0))
93 |
94 | (defn ^:private get-npc-aggro-velocity
95 | [npc me]
96 | (let [r1 (entity-rect npc attack-distance)
97 | r2 (entity-rect me attack-distance)
98 | x-diff (- (rectangle! r1 :get-x) (rectangle! r2 :get-x))
99 | y-diff (- (rectangle! r1 :get-y) (rectangle! r2 :get-y))]
100 | (if-not (rectangle! r1 :overlaps r2)
101 | [(get-npc-axis-velocity npc x-diff)
102 | (get-npc-axis-velocity npc y-diff)]
103 | [0 0])))
104 |
105 | (defn ^:private get-npc-velocity
106 | [entities {:keys [last-attack attack-interval
107 | x-velocity y-velocity max-velocity]
108 | :as entity}]
109 | (let [me (find-first :player? entities)]
110 | (if (near-entity? entity me aggro-distance)
111 | (get-npc-aggro-velocity entity me)
112 | (if (>= last-attack attack-interval)
113 | [(* max-velocity (- (rand-int 3) 1))
114 | (* max-velocity (- (rand-int 3) 1))]
115 | [x-velocity y-velocity]))))
116 |
117 | (defn get-velocity
118 | [entities {:keys [player? npc?] :as entity}]
119 | (cond
120 | player? (get-player-velocity entity)
121 | npc? (get-npc-velocity entities entity)
122 | :else [0 0]))
123 |
124 | (defn get-direction
125 | [x-velocity y-velocity]
126 | (some->> velocities
127 | (filter (fn [[x y]]
128 | (and (= x (int (Math/signum (float x-velocity))))
129 | (= y (int (Math/signum (float y-velocity)))))))
130 | first
131 | (.indexOf velocities)
132 | (nth directions)))
133 |
134 | (defn get-direction-to-entity
135 | [{:keys [x y x-feet y-feet last-direction] :as e} e2]
136 | (or (get-direction (- (+ (:x e2) (:x-feet e2)) (+ x x-feet))
137 | (- (+ (:y e2) (:y-feet e2)) (+ y y-feet)))
138 | last-direction))
139 |
140 | (defn find-id
141 | [entities id]
142 | (find-first #(= id (:id %)) entities))
143 |
144 | (defn split-texture
145 | [path size mask-size]
146 | (let [start (/ (- size mask-size) 2)
147 | grid (texture! (texture path) :split size size)]
148 | (doseq [row grid
149 | item row]
150 | (texture! item :set-region item start start mask-size mask-size))
151 | grid))
152 |
153 | (defn can-attack?
154 | [e e2]
155 | (and e2
156 | (not= (:npc? e) (:npc? e2))
157 | (> (:health e) 0)
158 | (>= (:last-attack e) (:attack-interval e))
159 | (near-entity? e e2 attack-distance)))
160 |
161 | (defn get-entity-at-cursor
162 | [screen entities]
163 | (let [coords (input->screen screen (input! :get-x) (input! :get-y))]
164 | (find-first (fn [{:keys [x y width height npc? health] :as entity}]
165 | (-> (rectangle x y width height)
166 | (rectangle! :contains (:x coords) (:y coords))
167 | (and npc? (> health 0))))
168 | entities)))
169 |
170 | ; entities
171 |
172 | (defn create
173 | [grid mask-size]
174 | (let [moves (zipmap directions
175 | (map #(animation duration (take 4 %)) grid))
176 | attacks (zipmap directions (map #(texture (nth % 4)) grid))
177 | specials (zipmap directions (map #(texture (nth % 5)) grid))
178 | hits (zipmap directions (map #(texture (nth % 6)) grid))
179 | deads (zipmap directions (map #(texture (nth % 7)) grid))
180 | texture-size (/ mask-size grid-tile-size)
181 | start-direction :s]
182 | (assoc (texture (get-in grid [(.indexOf directions start-direction) 0]))
183 | :width texture-size
184 | :height texture-size
185 | :moves moves
186 | :attacks attacks
187 | :specials specials
188 | :hits hits
189 | :deads deads
190 | :x-velocity 0
191 | :y-velocity 0
192 | :x-feet 0
193 | :y-feet 0
194 | :last-attack 0
195 | :attack-interval 1
196 | :direction start-direction
197 | :health 10
198 | :wounds 0
199 | :damage 2)))
200 |
201 | (defn create-player
202 | []
203 | (let [path "dungeon-crawler/characters/male_light.png"
204 | mask-size 128
205 | grid (split-texture path grid-tile-size mask-size)]
206 | (assoc (create grid mask-size)
207 | :player? true
208 | :max-velocity 2
209 | :attack-interval 0.25
210 | :health 40
211 | :hurt-sound (sound "dungeon-crawler/playerhurt.wav")
212 | :death-sound (sound "dungeon-crawler/death.wav"))))
213 |
214 | (defn create-npc
215 | [path]
216 | (let [mask-size 256
217 | grid (split-texture path grid-tile-size mask-size)]
218 | (assoc (create grid mask-size)
219 | :npc? true
220 | :max-velocity 2
221 | :x-feet 0.35
222 | :y-feet 0.35
223 | :hurt-sound (sound "dungeon-crawler/monsterhurt.wav"))))
224 |
225 | (defn create-ogre
226 | []
227 | (assoc (create-npc "dungeon-crawler/characters/ogre.png")
228 | :type :ogre
229 | :max-velocity 1))
230 |
231 | (defn create-elemental
232 | []
233 | (assoc (create-npc "dungeon-crawler/characters/elemental.png")
234 | :type :elemental))
235 |
236 | (defn create-magician
237 | []
238 | (assoc (create-npc "dungeon-crawler/characters/magician.png")
239 | :type :magician))
240 |
241 | (defn create-skeleton
242 | []
243 | (assoc (create-npc "dungeon-crawler/characters/skeleton.png")
244 | :type :skeleton))
245 |
246 | (defn create-zombie
247 | []
248 | (assoc (create-npc "dungeon-crawler/characters/zombie.png")
249 | :type :zombie))
250 |
251 | (defn create-werewolf
252 | []
253 | (assoc (create-npc "dungeon-crawler/characters/werewolf.png")
254 | :type :werewolf
255 | :width 2
256 | :height 2))
257 |
258 | (defn update-health-bar
259 | [bar entity]
260 | (when entity
261 | (let [bar-x (:x entity)
262 | bar-y (+ (:y entity) (:height entity))
263 | bar-w (:width entity)
264 | pct (/ (:health entity) (+ (:health entity) (:wounds entity)))]
265 | (shape bar
266 | :set-color (color :red)
267 | :rect bar-x bar-y bar-w npc-bar-h
268 | :set-color (color :green)
269 | :rect bar-x bar-y (* bar-w pct) npc-bar-h))))
270 |
271 | (defn move
272 | [{:keys [delta-time]} entities {:keys [x y health] :as entity}]
273 | (let [[x-velocity y-velocity] (get-velocity entities entity)
274 | x-change (* x-velocity delta-time)
275 | y-change (* y-velocity delta-time)]
276 | (cond
277 | (= health 0)
278 | (assoc entity :x-velocity 0 :y-velocity 0)
279 | (or (not= 0 x-change) (not= 0 y-change))
280 | (assoc entity
281 | :x-velocity (decelerate x-velocity)
282 | :y-velocity (decelerate y-velocity)
283 | :x-change x-change
284 | :y-change y-change
285 | :x (+ x x-change)
286 | :y (+ y y-change))
287 | :else
288 | entity)))
289 |
290 | (defn ^:private recover
291 | [{:keys [last-attack health direction] :as entity}]
292 | (if (and (>= last-attack 0.5) (> health 0))
293 | (merge entity
294 | (-> (get-in entity [:moves direction])
295 | (animation! :get-key-frame 0)
296 | texture))
297 | entity))
298 |
299 | (defn animate
300 | [screen {:keys [x-velocity y-velocity] :as entity}]
301 | (if-let [direction (get-direction x-velocity y-velocity)]
302 | (let [anim (get-in entity [:moves direction])]
303 | (merge entity
304 | (animation->texture screen anim)
305 | {:direction direction}))
306 | (recover entity)))
307 |
308 | (defn prevent-move
309 | [screen entities {:keys [x y x-change y-change] :as entity}]
310 | (let [old-x (- x x-change)
311 | old-y (- y y-change)
312 | x-entity (assoc entity :y old-y)
313 | y-entity (assoc entity :x old-x)]
314 | (merge entity
315 | (when (invalid-location? screen entities x-entity)
316 | {:x-velocity 0 :x-change 0 :x old-x})
317 | (when (invalid-location? screen entities y-entity)
318 | {:y-velocity 0 :y-change 0 :y old-y}))))
319 |
320 | (defn adjust
321 | [{:keys [delta-time]} {:keys [last-attack attack-interval npc?] :as entity}]
322 | (assoc entity
323 | :last-attack (if (and npc? (>= last-attack attack-interval))
324 | 0
325 | (+ last-attack delta-time))))
326 |
327 | (defn attack
328 | [screen {:keys [x y x-feet y-feet damage] :as attacker} victim entities]
329 | (map (fn [{:keys [id direction] :as e}]
330 | (cond
331 | (= id (:id attacker))
332 | (let [direction (or (when victim
333 | (get-direction-to-entity attacker victim))
334 | direction)]
335 | (merge e
336 | {:last-attack 0
337 | :direction direction}
338 | (when (> (:health e) 0)
339 | (get-in e [:attacks direction]))))
340 | (= id (:id victim))
341 | (if attacker
342 | (let [health (max 0 (- (:health victim) damage))]
343 | (merge e
344 | {:last-attack 0
345 | :health health
346 | :wounds (+ (:wounds victim) damage)
347 | :play-sound (if (and (= health 0) (:death-sound victim))
348 | (:death-sound victim)
349 | (:hurt-sound victim))}
350 | (if (> health 0)
351 | (get-in e [:hits direction])
352 | (get-in e [:deads direction]))))
353 | e)
354 | :else
355 | e))
356 | entities))
357 |
358 | ; rooms
359 |
360 | (require '[clojure.core.logic :as l]
361 | 'clojure.set)
362 |
363 | (def ^:const cols 4)
364 | (def ^:const rows 4)
365 | (def ^:const size 10)
366 |
367 | (defn find-valid-rooms
368 | [screen rooms entities entity]
369 | (l/run* [q]
370 | (l/membero q rooms)
371 | (l/featurec q {:start? false})
372 | (l/fresh [e type]
373 | (l/== e entity)
374 | (l/featurec e {:type type})
375 | (l/project [type]
376 | (l/featurec q {:end? (= type :werewolf)})))))
377 |
378 | (defn locations
379 | [room]
380 | (let [room-x (* size (:x room))
381 | room-y (* size (:y room))]
382 | (for [tile-x (range room-x (+ room-x size))
383 | tile-y (range room-y (+ room-y size))]
384 | {:x tile-x :y tile-y})))
385 |
386 | (defn randomize-location
387 | [screen rooms entities {:keys [width height] :as entity}]
388 | (->> (find-valid-rooms screen rooms entities entity)
389 | (map locations)
390 | flatten
391 | (map (partial isometric->screen screen))
392 | shuffle
393 | (drop-while #(invalid-location? screen entities (merge entity %)))
394 | first
395 | (merge entity)))
396 |
397 | (defn randomize-locations
398 | [screen rooms entities entity]
399 | (conj entities
400 | (-> (if (:npc? entity)
401 | (randomize-location screen rooms entities entity)
402 | entity)
403 | (assoc :id (count entities)))))
404 |
405 | (defn get-rand-neighbor
406 | [rooms {:keys [x y] :as room}]
407 | (try
408 | (->> #{(assoc room :x (- x 1))
409 | (assoc room :y (- y 1))
410 | (assoc room :x (+ x 1))
411 | (assoc room :y (+ y 1))}
412 | (clojure.set/intersection (set rooms))
413 | vec
414 | rand-nth)
415 | (catch Exception _)))
416 |
417 | (defn connect-room!
418 | [screen r1 r2]
419 | (let [rand-spot (+ 1 (rand-int (- size 3)))
420 | x-diff (- (:x r2) (:x r1))
421 | y-diff (- (:y r2) (:y r1))]
422 | (doseq [i (range size)
423 | :let [x (+ (* (:x r1) size)
424 | rand-spot
425 | (* x-diff i))
426 | y (+ (* (:y r1) size)
427 | rand-spot
428 | (* y-diff i))]]
429 | (doto (tiled-map-layer screen "walls")
430 | (tiled-map-layer! :set-cell x y nil)
431 | (tiled-map-layer! :set-cell (+ x 1) y nil)
432 | (tiled-map-layer! :set-cell x (+ y 1) nil)
433 | (tiled-map-layer! :set-cell (+ x 1) (+ y 1) nil)))))
434 |
435 | (defn connect-rooms!
436 | [screen rooms room]
437 | (let [visited-room (assoc room :visited? true :end? false)
438 | rooms (map #(if (= % room) visited-room %) rooms)]
439 | (if-let [next-room (get-rand-neighbor rooms room)]
440 | (do
441 | (connect-room! screen room next-room)
442 | (loop [rooms rooms]
443 | (let [new-rooms (connect-rooms! screen rooms next-room)]
444 | (if (= rooms new-rooms)
445 | rooms
446 | (recur new-rooms)))))
447 | (if (-> (filter :end? rooms) count (> 0))
448 | rooms
449 | (map #(if (= % visited-room) (assoc % :end? true) %) rooms)))))
450 |
451 | ; core
452 |
453 | (declare dungeon-crawler-screen dungeon-crawler-overlay-screen)
454 |
455 | (defn update-screen!
456 | [screen entities]
457 | (doseq [{:keys [x y player?]} entities]
458 | (when player?
459 | (position! screen x y)))
460 | entities)
461 |
462 | (defn play-sounds!
463 | [entities]
464 | (doseq [{:keys [play-sound]} entities]
465 | (when play-sound
466 | (sound! play-sound :play)))
467 | (map #(dissoc % :play-sound) entities))
468 |
469 | (defn render-everything!
470 | [screen entities]
471 | (->> (find-first #(= (:id %) (:mouse-npc-id screen)) entities)
472 | (update-health-bar (:npc-health-bar screen))
473 | (conj entities)
474 | (render-sorted! screen ["walls"]))
475 | entities)
476 |
477 | (defscreen dungeon-crawler-screen
478 | :on-show
479 | (fn [screen entities]
480 | (let [renderer (isometric-tiled-map "dungeon-crawler/level1.tmx" (/ 1 pixels-per-tile))
481 | screen (update! screen
482 | :camera (orthographic)
483 | :npc-health-bar (shape :filled)
484 | :renderer renderer)
485 | start-room {:x (rand-int rows)
486 | :y (rand-int cols)}
487 | start-player-x (+ (* (:x start-room) size)
488 | (/ size 2))
489 | start-player-y (+ (* (:y start-room) size)
490 | (/ size 2))
491 | rooms (for [row (range rows)
492 | col (range cols)]
493 | {:x row :y col})
494 | rooms (connect-rooms! screen rooms start-room)
495 | rooms (map #(assoc % :start? (and (= (:x %) (:x start-room))
496 | (= (:y %) (:y start-room))))
497 | rooms)
498 | me (assoc (create-player)
499 | :x start-player-x
500 | :y start-player-y)]
501 | (->> [(isometric->screen screen me)
502 | (take 5 (repeat (create-ogre)))
503 | (take 5 (repeat (create-elemental)))
504 | (take 5 (repeat (create-magician)))
505 | (take 5 (repeat (create-skeleton)))
506 | (take 5 (repeat (create-zombie)))
507 | (create-werewolf)]
508 | flatten
509 | (reduce #(randomize-locations screen rooms %1 %2) []))))
510 |
511 | :on-render
512 | (fn [screen entities]
513 | (clear!)
514 | (let [me (find-first :player? entities)]
515 | (screen! dungeon-crawler-overlay-screen :on-update-health-bar :entity me)
516 | (->> (map (fn [entity]
517 | (->> entity
518 | (move screen entities)
519 | (animate screen)
520 | (prevent-move screen entities)
521 | (adjust screen)))
522 | entities)
523 | (attack screen (find-first #(can-attack? % me) entities) me)
524 | play-sounds!
525 | (render-everything! screen)
526 | (update-screen! screen))))
527 |
528 | :on-resize
529 | (fn [screen entities]
530 | (height! screen vertical-tiles))
531 |
532 | :on-touch-down
533 | (fn [screen entities]
534 | (when (= (:button screen) (button-code :right))
535 | (let [me (find-first :player? entities)
536 | victim (get-entity-at-cursor screen entities)
537 | victim (when (can-attack? me victim) victim)]
538 | (attack screen me victim entities))))
539 |
540 | :on-mouse-moved
541 | (fn [screen entities]
542 | (let [e (get-entity-at-cursor screen entities)]
543 | (update! screen :mouse-npc-id (:id e))
544 | nil)))
545 |
546 | (defscreen dungeon-crawler-overlay-screen
547 | :on-show
548 | (fn [screen entities]
549 | (update! screen :camera (orthographic) :renderer (stage))
550 | [(assoc (label "0" (color :white))
551 | :id :fps
552 | :x 5)
553 | (assoc (shape :filled)
554 | :id :bar
555 | :x 5
556 | :y 40)])
557 |
558 | :on-render
559 | (fn [screen entities]
560 | (->> (for [entity entities]
561 | (case (:id entity)
562 | :fps (doto entity (label! :set-text (str (game :fps))))
563 | entity))
564 | (render! screen)))
565 |
566 | :on-resize
567 | (fn [screen entities]
568 | (height! screen 300))
569 |
570 | ; custom function that is invoked in main-screen
571 | :on-update-health-bar
572 | (fn [screen entities]
573 | (for [entity entities]
574 | (case (:id entity)
575 | :bar (let [me (:entity screen)
576 | pct (/ (:health me) (+ (:health me) (:wounds me)))]
577 | (shape entity
578 | :set-color (color :red)
579 | :rect 0 0 bar-w bar-h
580 | :set-color (color :green)
581 | :rect 0 0 bar-w (* bar-h pct)))
582 | entity))))
583 |
--------------------------------------------------------------------------------
/29-interactivity.clj:
--------------------------------------------------------------------------------
1 | (defscreen interactivity-screen
2 | :on-show
3 | (fn [screen entities]
4 | (update! screen :renderer (stage) :camera (orthographic))
5 | (let [ui-skin (skin "skin/uiskin.json")
6 | medium-font (skin! ui-skin :get-font "medium-font")
7 | medium-style (style :label medium-font (color :white))
8 | small-font (skin! ui-skin :get-font "small-font")
9 | small-style (style :label small-font (color :white))]
10 | (table [(label "Interactivity" medium-style)
11 | :row
12 | (label (str \newline
13 | "Biggest selling point; it changes the end product" \newline
14 | "Interactivity is not hot-swapping" \newline
15 | "It's the REPL, stupid!" \newline
16 | "Particularly important for art (Overtone, Quil)")
17 | small-style)]
18 | :align (align :center)
19 | :set-fill-parent true)))
20 |
21 | :on-render
22 | (fn [screen entities]
23 | (render! screen entities))
24 |
25 | :on-resize
26 | (fn [screen entities]
27 | (height! screen (:height screen))))
28 |
--------------------------------------------------------------------------------
/30-graffiti.clj:
--------------------------------------------------------------------------------
1 | (defscreen graffiti-screen
2 | :on-show
3 | (fn [screen entities]
4 | (update! screen :renderer (stage) :camera (orthographic))
5 | (let [ui-skin (skin "skin/uiskin.json")
6 | small-font (skin! ui-skin :get-font "small-font")
7 | small-style (style :label small-font (color :white))]
8 | (table [(image "images/graffiti.jpg" :set-scaling (scaling :fit))
9 | :row
10 | (label "Photo credit:\nMatt Niemi (flickr.com/photos/niemster)" small-style)]
11 | :set-fill-parent true)))
12 |
13 | :on-render
14 | (fn [screen entities]
15 | (render! screen entities))
16 |
17 | :on-resize
18 | (fn [screen entities]
19 | (height! screen (:height screen))))
20 |
--------------------------------------------------------------------------------
/31-street-music.clj:
--------------------------------------------------------------------------------
1 | (defscreen street-music-screen
2 | :on-show
3 | (fn [screen entities]
4 | (update! screen :renderer (stage) :camera (orthographic))
5 | (let [ui-skin (skin "skin/uiskin.json")
6 | small-font (skin! ui-skin :get-font "small-font")
7 | small-style (style :label small-font (color :white))]
8 | (table [(image "images/street-music.jpg" :set-scaling (scaling :fit))
9 | :row
10 | (label "Photo credit:\nLaura M. on yelp.com (http://goo.gl/lfMSHt)" small-style)]
11 | :set-fill-parent true)))
12 |
13 | :on-render
14 | (fn [screen entities]
15 | (render! screen entities))
16 |
17 | :on-resize
18 | (fn [screen entities]
19 | (height! screen (:height screen))))
20 |
--------------------------------------------------------------------------------
/32-mural.clj:
--------------------------------------------------------------------------------
1 | (defscreen mural-screen
2 | :on-show
3 | (fn [screen entities]
4 | (update! screen :renderer (stage) :camera (orthographic))
5 | (let [ui-skin (skin "skin/uiskin.json")
6 | small-font (skin! ui-skin :get-font "small-font")
7 | small-style (style :label small-font (color :white))]
8 | (table [(image "images/mural.jpg" :set-scaling (scaling :fit))
9 | :row
10 | (label "Photo credit:\nreddit.com/u/bigbadwimp" small-style)]
11 | :set-fill-parent true)))
12 |
13 | :on-render
14 | (fn [screen entities]
15 | (render! screen entities))
16 |
17 | :on-resize
18 | (fn [screen entities]
19 | (height! screen (:height screen))))
20 |
--------------------------------------------------------------------------------
/33-games-as-art.clj:
--------------------------------------------------------------------------------
1 | (defscreen games-as-art-screen
2 | :on-show
3 | (fn [screen entities]
4 | (update! screen :renderer (stage) :camera (orthographic))
5 | (let [ui-skin (skin "skin/uiskin.json")
6 | medium-font (skin! ui-skin :get-font "medium-font")
7 | medium-style (style :label medium-font (color :white))
8 | small-font (skin! ui-skin :get-font "small-font")
9 | small-style (style :label small-font (color :white))]
10 | (table [(label "Games as Art" medium-style)
11 | :row
12 | (label (str \newline
13 | "Art is the selective imitation of reality" \newline
14 | "Ebert claimed games can't be art: http://goo.gl/AfSQ39" \newline
15 | "He was right...about games today" \newline
16 | "But as a medium they are capable of it")
17 | small-style)]
18 | :align (align :center)
19 | :set-fill-parent true)))
20 |
21 | :on-render
22 | (fn [screen entities]
23 | (render! screen entities))
24 |
25 | :on-resize
26 | (fn [screen entities]
27 | (height! screen (:height screen))))
28 |
--------------------------------------------------------------------------------
/34-bottom-line.clj:
--------------------------------------------------------------------------------
1 | (defscreen bottom-line-screen
2 | :on-show
3 | (fn [screen entities]
4 | (update! screen :renderer (stage) :camera (orthographic))
5 | (let [ui-skin (skin "skin/uiskin.json")
6 | medium-font (skin! ui-skin :get-font "medium-font")
7 | medium-style (style :label medium-font (color :white))
8 | small-font (skin! ui-skin :get-font "small-font")
9 | small-style (style :label small-font (color :white))]
10 | (table [(label "The Bottom Line" medium-style)
11 | :row
12 | (label (str \newline
13 | "Interactivity helps you write any kind of code" \newline
14 | "For games, it also helps you get the right \"feel\"" \newline
15 | "It conforms to the way art has always been made")
16 | small-style)]
17 | :align (align :center)
18 | :set-fill-parent true)))
19 |
20 | :on-render
21 | (fn [screen entities]
22 | (render! screen entities))
23 |
24 | :on-resize
25 | (fn [screen entities]
26 | (height! screen (:height screen))))
27 |
--------------------------------------------------------------------------------
/35-quest-quest.clj:
--------------------------------------------------------------------------------
1 | ; quests
2 |
3 | (def quests
4 | [{:title "Welcome to Quest Quest!"
5 | :body ""
6 | :reward "Falling Unlocked!"}])
7 |
8 | ; ui
9 |
10 | (defn make-unit-frames
11 | "Initialzes the unit frames, starting information is hardcoded."
12 | []
13 | (table [:row [(assoc (label (str "HP: " 10)
14 | (color :white))
15 | :id :health)]
16 | :row [(assoc (label (str "MP: " 10)
17 | (color :white))
18 | :id :mana)]
19 | :row [(assoc (label (str "LVL: " 1)
20 | (color :white))
21 | :id :level)]]
22 | :set-position 40 355))
23 |
24 | (defn make-quest-table
25 | [{:keys [title body]}]
26 | (let [title-label (assoc (label title
27 | (color :white)
28 | :set-scale 1.2 1.2)
29 | :id :quest-title)
30 | body-label (assoc (label body
31 | (color :white))
32 | :id :quest-body)]
33 | (table [:row [title-label]
34 | :row [body-label]]
35 | :set-position 400 366)))
36 |
37 | (defn make-fps
38 | []
39 | (assoc (label "0" (color :white))
40 | :id :fps
41 | :x 5))
42 |
43 | #_(defn update-all-elements
44 | [screen entities]
45 | (refresh-unit-frames)
46 | (refresh-quest))
47 |
48 | ; utils
49 |
50 | ;;; Screen vars
51 | (def vertical-tiles-q 12)
52 | (def pixels-per-tile-q 32)
53 | (def camera-height-q 6)
54 |
55 | ;;; Physics vars
56 | (def duration-q 0.15)
57 | (def damping-q 0.5)
58 | (def max-velocity-q 8)
59 | (def max-jump-velocity-q 24)
60 | (def gravity-q -1.5)
61 | (def deceleration-q 0.9)
62 |
63 | ;;; Input handlers
64 | (defn touched-q?
65 | [key]
66 | (and (game :touched?)
67 | (case key
68 | :down (< (game :y) (/ (game :height) 3))
69 | :up (> (game :y) (* (game :height) (/ 2 3)))
70 | :left (< (game :x) (/ (game :width) 3))
71 | :right (> (game :x) (* (game :width) (/ 2 3)))
72 | false)))
73 |
74 | ;;; Camera controls
75 | (defn move-camera-q!
76 | "The camera tracks the player if above 8 or 0. It Centers the camera on the world when player is below 8."
77 | [screen x y]
78 | (if (< y camera-height-q)
79 | (if (pos? y)
80 | (position! screen x camera-height-q))
81 | (position! screen x y)))
82 |
83 | ;;; World handlers
84 | (defn out-of-bounds-q?
85 | [y height]
86 | (< y (- height)))
87 |
88 | ;;; Movement handlers
89 | (defn decelerate-q
90 | [velocity]
91 | (let [velocity (* velocity deceleration-q)]
92 | (if (< (Math/abs velocity) damping-q)
93 | 0
94 | velocity)))
95 |
96 | (defn get-x-velocity-q
97 | [{:keys [id x-velocity]}]
98 | (case id
99 | :player (cond
100 | (or (key-pressed? :dpad-left) (touched-q? :left))
101 | (* -1 max-velocity-q)
102 | (or (key-pressed? :dpad-right) (touched-q? :right))
103 | max-velocity-q
104 | :else
105 | x-velocity)
106 | x-velocity))
107 |
108 | (defn get-y-velocity-q
109 | [{:keys [id y-velocity can-jump?]}]
110 | (case id
111 | :player (cond
112 | (and can-jump? (or (key-pressed? :dpad-up) (touched-q? :up)))
113 | max-jump-velocity-q
114 | :else
115 | y-velocity)
116 | y-velocity))
117 |
118 | (defn get-direction-q
119 | [{:keys [x-velocity direction]}]
120 | (cond
121 | (pos? x-velocity) :right
122 | (neg? x-velocity) :left
123 | :else
124 | direction))
125 |
126 | (defn get-touching-tile-q
127 | [screen {:keys [x y width height]} & layer-names]
128 | (let [layers (map #(tiled-map-layer screen %) layer-names)]
129 | (->> (for [tile-x (range (int x) (+ x width))
130 | tile-y (range (int y) (+ y height))]
131 | (some #(when (tiled-map-cell % tile-x tile-y)
132 | [tile-x tile-y])
133 | layers))
134 | (drop-while nil?)
135 | first)))
136 |
137 | (defn properties->hash-map
138 | [properties]
139 | (apply hash-map (interleave (map keyword (.getKeys properties))
140 | (.getValues properties))))
141 |
142 | (defn downscale-x-and-y
143 | [properties]
144 | (assoc properties
145 | :x (/ (:x properties) pixels-per-tile-q)
146 | :y (/ (:y properties) pixels-per-tile-q)))
147 |
148 | (defn make-checkpoint
149 | [map-object]
150 | (let [checkpoint (bean map-object)]
151 | (merge checkpoint (-> (properties->hash-map (:properties checkpoint))
152 | downscale-x-and-y))))
153 |
154 | ;; FIXME
155 | (defn- touching-checkpoint?
156 | [entity checkpoint]
157 | (or (>= (:x checkpoint) (:x entity))
158 | (>= (:y checkpoint) (:y entity))
159 | (>= (:height checkpoint) (:height entity))
160 | (>= (:width checkpoint) (:width entity))))
161 |
162 | (defn get-touching-checkpoint-q
163 | "Loads the checkpoints layer from the tile map on the main-screen."
164 | [screen entity]
165 | (let [objects (map-objects (tiled-map-layer screen "checkpoints"))
166 | checkpoints (map make-checkpoint objects)]
167 | (filter #(touching-checkpoint? entity %) checkpoints)))
168 |
169 | (defn near-entity-q?
170 | [{:keys [x y id] :as e} e2 min-distance]
171 | (and (not= id (:id e2))
172 | (nil? (:draw-time e2))
173 | (pos? (:health e2))
174 | (< (Math/abs ^double (- x (:x e2))) min-distance)
175 | (< (Math/abs ^double (- y (:y e2))) min-distance)))
176 |
177 | ;; FIXME near should be touching
178 | (defn near-entities-q?
179 | [entities entity min-distance]
180 | (some #(near-entity-q? entity % min-distance) entities))
181 |
182 | ;;; Combat handlers
183 | (defn fight [e1 e2])
184 |
185 | #_(defn process-fighting
186 | [e1 e2]
187 | (when (and (touching? e1 e2)
188 | (not (have-fought? e1 e2)))
189 | (fight e1 e2)))
190 |
191 | (defn process-damage
192 | [{:keys [health wounds] :as entity}]
193 | (assoc entity :health (- health wounds)))
194 |
195 | ; entities
196 |
197 | (defn create-player-q
198 | [{:keys [level image x y]}]
199 | (assoc image
200 | :id :player
201 | :x x
202 | :y y
203 | :width 2
204 | :height 2
205 | :x-velocity 0
206 | :y-velocity 0
207 | :level level
208 | :health (* 10 level)
209 | :wounds 0
210 | :can-jump? false
211 | :direction :left
212 | :right image
213 | :left (texture image :flip true false)
214 | :jump-sound (sound "quest-quest/jump.wav")))
215 |
216 | (defn create-enemy-q
217 | [{:keys [image level x y id]}]
218 | (assoc image
219 | :id id
220 | :x x
221 | :y y
222 | :level level
223 | :x-velocity 0
224 | :y-velocity 0
225 | :width 1
226 | :height level
227 | :direction :right
228 | :health (* 10 level)
229 | :wounds 0))
230 |
231 | (defn level-up
232 | [screen {:keys [player? level] :as entity}]
233 | (if player?
234 | (assoc entity
235 | :level (inc level))
236 | entity))
237 |
238 | (defn ^:private enable-jump?
239 | [y-velocity can-jump?]
240 | (if (pos? y-velocity)
241 | false
242 | can-jump?))
243 |
244 | (defn move-q
245 | [{:keys [delta-time]} {:keys [x y can-jump?] :as entity}]
246 | (let [x-velocity (get-x-velocity-q entity)
247 | y-velocity (+ (get-y-velocity-q entity) gravity-q)
248 | x-change (* x-velocity delta-time)
249 | y-change (* y-velocity delta-time)]
250 | (if (or (not= 0 x-change)
251 | (not= 0 y-change))
252 | (assoc entity
253 | :x-velocity (decelerate-q x-velocity)
254 | :y-velocity (decelerate-q y-velocity)
255 | :x-change x-change
256 | :y-change y-change
257 | :x (+ x x-change)
258 | :y (+ y y-change)
259 | :can-jump? (enable-jump? y-velocity can-jump?))
260 | entity)))
261 |
262 | (defn prevent-move-q
263 | [screen {:keys [x y x-change y-change] :as entity}]
264 | (let [old-x (- x x-change)
265 | old-y (- y y-change)
266 | entity-x (assoc entity :y old-y)
267 | entity-y (assoc entity :x old-x)
268 | up? (> y-change 0)]
269 | (merge entity
270 | (when (get-touching-tile-q screen entity-x "walls")
271 | {:x-velocity 0 :x-change 0 :x old-x})
272 | (when-let [tile (get-touching-tile-q screen entity-y "walls")]
273 | {:y-velocity 0 :y-change 0 :y old-y :can-jump? (not up?)}))))
274 |
275 | (defn animate-q
276 | [screen {:keys [x-velocity y-velocity
277 | right left] :as entity}]
278 | (let [direction (get-direction-q entity)]
279 | (merge entity
280 | (if (= direction :right) right left)
281 | {:direction direction})))
282 |
283 | (defn spawn-all
284 | "returns a vector containing all of the starting entities"
285 | []
286 | (vector (create-player-q {:image (texture "quest-quest/quester.png") :level 1 :x 20 :y 69})
287 | (create-enemy-q {:image (texture "quest-quest/first-enemy.png") :level 1 :id :enemy-first :x 45 :y 10})
288 | (create-enemy-q {:image (texture "quest-quest/first-enemy.png") :level 2 :id :enemy-second :x 60 :y 10})
289 | (create-enemy-q {:image (texture "quest-quest/first-enemy.png") :level 3 :id :enemy-three :x 75 :y 10})
290 | (create-enemy-q {:image (texture "quest-quest/first-enemy.png") :level 10 :id :boss :x 200 :y 80})))
291 |
292 | ; core
293 |
294 | (declare main-screen ui-screen)
295 |
296 | (defn update-screen-q!
297 | "Used in the render function to focus the camera on the player and reset
298 | the screen if the player goes out of bounds."
299 | [screen entities]
300 | (doseq [{:keys [x y height id]} entities]
301 | (case id
302 | :player (do
303 | (move-camera-q! screen x y)
304 | (when (out-of-bounds-q? y height)
305 | (restart-game!)))
306 | entities))
307 | entities)
308 |
309 | (defn play-sounds-q!
310 | [entities]
311 | (doseq [{:keys [play-sound]} entities]
312 | (when play-sound
313 | (sound! play-sound :play)))
314 | (map #(dissoc % :play-sound) entities))
315 |
316 | (defscreen quest-quest-screen
317 | :on-show
318 | (fn [screen entities]
319 | (update! screen :camera (orthographic))
320 | (update! screen :renderer (orthogonal-tiled-map "quest-quest/world.tmx" (/ 1 pixels-per-tile-q)))
321 | (spawn-all))
322 |
323 | :on-render
324 | (fn [screen entities]
325 | (clear! (/ 135 255) (/ 206 255) (/ 235 255) 100)
326 | #_(screen! ui-screen :on-update-ui :entities entities)
327 |
328 | (->> entities
329 | (map (fn [entity]
330 | (->> entity
331 | #_(level-up screen)
332 | (move-q screen)
333 | (prevent-move-q screen)
334 | (animate-q screen))))
335 | play-sounds-q!
336 | (render! screen)
337 | (update-screen-q! screen)))
338 |
339 | :on-resize
340 | (fn [{:keys [width height] :as screen} entities]
341 | (height! screen vertical-tiles-q)
342 | nil))
343 |
344 | (defscreen quest-quest-ui-screen
345 | :on-show
346 | (fn [screen entities]
347 | (update! screen :camera (orthographic) :renderer (stage))
348 | (vector (make-quest-table (first quests))
349 | (make-unit-frames)
350 | (make-fps)))
351 |
352 | :on-render
353 | (fn [screen entities]
354 | (render! screen
355 | (for [entity entities]
356 | (case (:id entity)
357 | :fps (doto entity (label! :set-text (str (game :fps))))
358 | entity))))
359 |
360 | :on-resize
361 | (fn [{:keys [width height] :as screen} entities]
362 | (height! screen (:height screen))
363 | nil)
364 |
365 | :on-update-ui
366 | (fn [screen entities]
367 | #_(update-all-elements screen entities)))
368 |
--------------------------------------------------------------------------------
/36-review.clj:
--------------------------------------------------------------------------------
1 | (defscreen review-screen
2 | :on-show
3 | (fn [screen entities]
4 | (update! screen :renderer (stage) :camera (orthographic))
5 | (let [ui-skin (skin "skin/uiskin.json")
6 | medium-font (skin! ui-skin :get-font "medium-font")
7 | medium-style (style :label medium-font (color :white))
8 | small-font (skin! ui-skin :get-font "small-font")
9 | small-style (style :label small-font (color :white))]
10 | (table [(label "Review" medium-style)
11 | :row
12 | (label (str \newline
13 | "1. Hosted languages (don't reinvent the wheel)" \newline
14 | "2. Functional & logic programming (new abstractions)" \newline
15 | "3. Interactive programming (games as art)")
16 | small-style)]
17 | :align (align :center)
18 | :set-fill-parent true)))
19 |
20 | :on-render
21 | (fn [screen entities]
22 | (render! screen entities))
23 |
24 | :on-resize
25 | (fn [screen entities]
26 | (height! screen (:height screen))))
27 |
--------------------------------------------------------------------------------
/37-end.clj:
--------------------------------------------------------------------------------
1 | (defscreen end-screen
2 | :on-show
3 | (fn [screen entities]
4 | (update! screen :renderer (stage) :camera (orthographic))
5 | (let [ui-skin (skin "skin/uiskin.json")
6 | medium-font (skin! ui-skin :get-font "medium-font")
7 | medium-style (style :label medium-font (color :white))
8 | small-font (skin! ui-skin :get-font "small-font")
9 | small-style (style :label small-font (color :white))]
10 | (table [(label "The End" medium-style)
11 | :row
12 | (label (str \newline
13 | "https://github.com/oakes/clojure-conj-2014" \newline
14 | "zsoakes@gmail.com" \newline)
15 | small-style)]
16 | :align (align :center)
17 | :set-fill-parent true)))
18 |
19 | :on-render
20 | (fn [screen entities]
21 | (render! screen entities))
22 |
23 | :on-resize
24 | (fn [screen entities]
25 | (height! screen (:height screen))))
26 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## Introduction
2 |
3 | These are my slides for Clojure/conj 2014. You can view them in Nightmod by copying the ".git" address and then clicking "Download" on the home screen.
4 |
5 | ## Licensing
6 |
7 | * All files that originate from this project are dedicated to the public domain.
8 | * The platformer game uses [this bird](http://opengameart.org/content/blue-bird-for-jump-and-run-arcade) and [this tileset](http://opengameart.org/content/old-frogatto-tile-art).
9 | * The dungeon crawler game uses [this character set](http://opengameart.org/content/isometric-hero-and-creatures) and [this tileset](http://opengameart.org/content/64x64-isometric-roguelike-tiles).
10 | * The [Quest Quest](https://github.com/mkcp/quest-quest) game is courtesy of Mike Patella (graphic art by Steven Fick).
11 |
--------------------------------------------------------------------------------
/core.clj:
--------------------------------------------------------------------------------
1 | (load-game-file "01-title.clj")
2 | (load-game-file "02-about.clj")
3 | (load-game-file "03-projects.clj")
4 | (load-game-file "04-gateway.clj")
5 | (load-game-file "05-class.clj")
6 | (load-game-file "06-problem.clj")
7 | (load-game-file "07-indie.clj")
8 | (load-game-file "08-gameplay.clj")
9 | (load-game-file "09-graphics.clj")
10 | (load-game-file "10-artistic.clj")
11 | (load-game-file "11-tools.clj")
12 | (load-game-file "12-hosted.clj")
13 | (load-game-file "13-unity-libgdx.clj")
14 | (load-game-file "14-good-hosted.clj")
15 | (load-game-file "15-play-clj-init.clj")
16 | (load-game-file "16-play-clj-core.clj")
17 | (load-game-file "17-play-clj-defscreen.clj")
18 | (load-game-file "18-play-clj-state.clj")
19 | (load-game-file "19-play-clj-transform.clj")
20 | (load-game-file "20-play-clj-entities.clj")
21 | (load-game-file "21-play-clj-interop.clj")
22 | (load-game-file "22-play-clj-dsl.clj")
23 | (load-game-file "23-play-clj-dsl-bang.clj")
24 | (load-game-file "24-play-clj-docs.clj")
25 | (load-game-file "25-platformer.clj")
26 | (load-game-file "26-functional.clj")
27 | (load-game-file "27-logic.clj")
28 | (load-game-file "28-dungeon-crawler.clj")
29 | (load-game-file "29-interactivity.clj")
30 | (load-game-file "30-graffiti.clj")
31 | (load-game-file "31-street-music.clj")
32 | (load-game-file "32-mural.clj")
33 | (load-game-file "33-games-as-art.clj")
34 | (load-game-file "34-bottom-line.clj")
35 | (load-game-file "35-quest-quest.clj")
36 | (load-game-file "36-review.clj")
37 | (load-game-file "37-end.clj")
38 |
39 | (declare background-screen)
40 |
41 | (def slides [[title-screen]
42 | [about-screen]
43 | [projects-screen]
44 | [gateway-screen]
45 | [class-screen]
46 | [problem-screen]
47 | [indie-screen]
48 | [gameplay-screen]
49 | [graphics-screen]
50 | [artistic-screen]
51 | [tools-screen]
52 | [hosted-screen]
53 | [unity-libgdx-screen]
54 | [good-hosted-screen]
55 | [play-clj-init-screen]
56 | [play-clj-core-screen]
57 | [play-clj-defscreen-screen]
58 | [play-clj-state-screen]
59 | [play-clj-transform-screen]
60 | [play-clj-entities-background-screen play-clj-entities-screen]
61 | [play-clj-interop-screen]
62 | [play-clj-dsl-screen]
63 | [play-clj-dsl-bang-screen]
64 | [play-clj-docs-screen]
65 | [platformer-screen]
66 | [functional-screen]
67 | [logic-screen]
68 | [dungeon-crawler-screen dungeon-crawler-overlay-screen]
69 | [interactivity-screen]
70 | [graffiti-screen]
71 | [street-music-screen]
72 | [mural-screen]
73 | [games-as-art-screen]
74 | [bottom-line-screen]
75 | [quest-quest-screen quest-quest-ui-screen]
76 | [review-screen]
77 | [end-screen]])
78 |
79 | (defn slide-num
80 | []
81 | (or (:slide (game-pref)) 1))
82 |
83 | (defn set-slide!
84 | [n]
85 | (when-let [screens (get slides (- n 1))]
86 | (game-pref! :slide n)
87 | (apply set-game-screen! background-screen screens)))
88 |
89 | (defscreen background-screen
90 | :on-show
91 | (fn [screen entities]
92 | (update! screen :renderer (stage) :camera (orthographic))
93 | (assoc (shape :filled) :id :background))
94 |
95 | :on-render
96 | (fn [screen entities]
97 | (clear!)
98 | (render! screen entities))
99 |
100 | :on-resize
101 | (fn [{:keys [width height] :as screen} entities]
102 | (height! screen height)
103 | (let [c1 (color :black)
104 | c2 (color 79/256 90/256 100/256 1)]
105 | (for [e entities]
106 | (case (:id e)
107 | :background (shape e :rect 0 0 width height c1 c1 c2 c2)
108 | e))))
109 |
110 | :on-key-down
111 | (fn [screen entities]
112 | (cond
113 | (= (:key screen) (key-code :space))
114 | (set-slide! (+ (slide-num) 1))
115 | (= (:key screen) (key-code :backspace))
116 | (set-slide! (- (slide-num) 1)))))
117 |
118 | (set-slide! (slide-num))
119 |
--------------------------------------------------------------------------------
/dungeon-crawler/64x64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/64x64.png
--------------------------------------------------------------------------------
/dungeon-crawler/brick.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/brick.png
--------------------------------------------------------------------------------
/dungeon-crawler/brick1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/brick1.png
--------------------------------------------------------------------------------
/dungeon-crawler/brick2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/brick2.png
--------------------------------------------------------------------------------
/dungeon-crawler/brick3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/brick3.png
--------------------------------------------------------------------------------
/dungeon-crawler/brick4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/brick4.png
--------------------------------------------------------------------------------
/dungeon-crawler/brick5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/brick5.png
--------------------------------------------------------------------------------
/dungeon-crawler/brick6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/brick6.png
--------------------------------------------------------------------------------
/dungeon-crawler/catacomb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/catacomb.png
--------------------------------------------------------------------------------
/dungeon-crawler/characters/elemental.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/characters/elemental.png
--------------------------------------------------------------------------------
/dungeon-crawler/characters/goblin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/characters/goblin.png
--------------------------------------------------------------------------------
/dungeon-crawler/characters/magician.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/characters/magician.png
--------------------------------------------------------------------------------
/dungeon-crawler/characters/male_base.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/characters/male_base.png
--------------------------------------------------------------------------------
/dungeon-crawler/characters/male_heavy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/characters/male_heavy.png
--------------------------------------------------------------------------------
/dungeon-crawler/characters/male_light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/characters/male_light.png
--------------------------------------------------------------------------------
/dungeon-crawler/characters/male_longbow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/characters/male_longbow.png
--------------------------------------------------------------------------------
/dungeon-crawler/characters/male_longsword.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/characters/male_longsword.png
--------------------------------------------------------------------------------
/dungeon-crawler/characters/male_shield.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/characters/male_shield.png
--------------------------------------------------------------------------------
/dungeon-crawler/characters/male_staff.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/characters/male_staff.png
--------------------------------------------------------------------------------
/dungeon-crawler/characters/male_unarmored.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/characters/male_unarmored.png
--------------------------------------------------------------------------------
/dungeon-crawler/characters/ogre.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/characters/ogre.png
--------------------------------------------------------------------------------
/dungeon-crawler/characters/skeleton.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/characters/skeleton.png
--------------------------------------------------------------------------------
/dungeon-crawler/characters/slime.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/characters/slime.png
--------------------------------------------------------------------------------
/dungeon-crawler/characters/werewolf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/characters/werewolf.png
--------------------------------------------------------------------------------
/dungeon-crawler/characters/zombie.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/characters/zombie.png
--------------------------------------------------------------------------------
/dungeon-crawler/cocutos.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/cocutos.png
--------------------------------------------------------------------------------
/dungeon-crawler/crypt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/crypt.png
--------------------------------------------------------------------------------
/dungeon-crawler/death.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/death.wav
--------------------------------------------------------------------------------
/dungeon-crawler/gallery.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/gallery.png
--------------------------------------------------------------------------------
/dungeon-crawler/gehena.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/gehena.png
--------------------------------------------------------------------------------
/dungeon-crawler/hive.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/hive.png
--------------------------------------------------------------------------------
/dungeon-crawler/lair.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/lair.png
--------------------------------------------------------------------------------
/dungeon-crawler/lapis.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/lapis.png
--------------------------------------------------------------------------------
/dungeon-crawler/level1.tmx:
--------------------------------------------------------------------------------
1 |
2 |
12 |
--------------------------------------------------------------------------------
/dungeon-crawler/monsterhurt.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/monsterhurt.wav
--------------------------------------------------------------------------------
/dungeon-crawler/moss.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/moss.png
--------------------------------------------------------------------------------
/dungeon-crawler/mucus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/mucus.png
--------------------------------------------------------------------------------
/dungeon-crawler/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/normal.png
--------------------------------------------------------------------------------
/dungeon-crawler/pandem1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/pandem1.png
--------------------------------------------------------------------------------
/dungeon-crawler/pandem2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/pandem2.png
--------------------------------------------------------------------------------
/dungeon-crawler/pandem3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/pandem3.png
--------------------------------------------------------------------------------
/dungeon-crawler/pandem4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/pandem4.png
--------------------------------------------------------------------------------
/dungeon-crawler/pandem6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/pandem6.png
--------------------------------------------------------------------------------
/dungeon-crawler/playerhurt.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/playerhurt.wav
--------------------------------------------------------------------------------
/dungeon-crawler/rock.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/rock.png
--------------------------------------------------------------------------------
/dungeon-crawler/tunnel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/dungeon-crawler/tunnel.png
--------------------------------------------------------------------------------
/images/braid.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/images/braid.jpg
--------------------------------------------------------------------------------
/images/class1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/images/class1.jpg
--------------------------------------------------------------------------------
/images/class2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/images/class2.jpg
--------------------------------------------------------------------------------
/images/class3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/images/class3.jpg
--------------------------------------------------------------------------------
/images/clojure.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/images/clojure.png
--------------------------------------------------------------------------------
/images/defscreen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/images/defscreen.png
--------------------------------------------------------------------------------
/images/docs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/images/docs.png
--------------------------------------------------------------------------------
/images/graffiti.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/images/graffiti.jpg
--------------------------------------------------------------------------------
/images/libgdx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/images/libgdx.png
--------------------------------------------------------------------------------
/images/lone-survivor.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/images/lone-survivor.jpg
--------------------------------------------------------------------------------
/images/mural.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/images/mural.jpg
--------------------------------------------------------------------------------
/images/on-render.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/images/on-render.png
--------------------------------------------------------------------------------
/images/on-show.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/images/on-show.png
--------------------------------------------------------------------------------
/images/papers-please.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/images/papers-please.jpg
--------------------------------------------------------------------------------
/images/passage-gravitation.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/images/passage-gravitation.jpg
--------------------------------------------------------------------------------
/images/play-clj.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/images/play-clj.png
--------------------------------------------------------------------------------
/images/shovel-knight.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/images/shovel-knight.jpg
--------------------------------------------------------------------------------
/images/spelunky.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/images/spelunky.jpg
--------------------------------------------------------------------------------
/images/street-music.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/images/street-music.jpg
--------------------------------------------------------------------------------
/images/unity.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/images/unity.png
--------------------------------------------------------------------------------
/particle-effect/fire.p:
--------------------------------------------------------------------------------
1 | simple
2 | - Delay -
3 | active: false
4 | - Duration -
5 | lowMin: 1000.0
6 | lowMax: 1000.0
7 | - Count -
8 | min: 0
9 | max: 1000
10 | - Emission -
11 | lowMin: 0.0
12 | lowMax: 0.0
13 | highMin: 10.0
14 | highMax: 10.0
15 | relative: false
16 | scalingCount: 1
17 | scaling0: 1.0
18 | timelineCount: 1
19 | timeline0: 0.0
20 | - Life -
21 | lowMin: 0.0
22 | lowMax: 0.0
23 | highMin: 1000.0
24 | highMax: 1000.0
25 | relative: false
26 | scalingCount: 1
27 | scaling0: 1.0
28 | timelineCount: 1
29 | timeline0: 0.0
30 | - Life Offset -
31 | active: false
32 | - X Offset -
33 | active: false
34 | - Y Offset -
35 | active: false
36 | - Spawn Shape -
37 | shape: point
38 | - Spawn Width -
39 | lowMin: 0.0
40 | lowMax: 0.0
41 | highMin: 0.0
42 | highMax: 0.0
43 | relative: false
44 | scalingCount: 1
45 | scaling0: 1.0
46 | timelineCount: 1
47 | timeline0: 0.0
48 | - Spawn Height -
49 | lowMin: 0.0
50 | lowMax: 0.0
51 | highMin: 0.0
52 | highMax: 0.0
53 | relative: false
54 | scalingCount: 1
55 | scaling0: 1.0
56 | timelineCount: 1
57 | timeline0: 0.0
58 | - Scale -
59 | lowMin: 0.0
60 | lowMax: 0.0
61 | highMin: 32.0
62 | highMax: 32.0
63 | relative: false
64 | scalingCount: 1
65 | scaling0: 1.0
66 | timelineCount: 1
67 | timeline0: 0.0
68 | - Velocity -
69 | active: true
70 | lowMin: 0.0
71 | lowMax: 0.0
72 | highMin: 120.0
73 | highMax: 120.0
74 | relative: false
75 | scalingCount: 1
76 | scaling0: 1.0
77 | timelineCount: 1
78 | timeline0: 0.0
79 | - Angle -
80 | active: true
81 | lowMin: 0.0
82 | lowMax: 0.0
83 | highMin: 1.0
84 | highMax: 360.0
85 | relative: false
86 | scalingCount: 1
87 | scaling0: 1.0
88 | timelineCount: 1
89 | timeline0: 0.0
90 | - Rotation -
91 | active: false
92 | - Wind -
93 | active: false
94 | - Gravity -
95 | active: false
96 | - Tint -
97 | colorsCount: 3
98 | colors0: 1.0
99 | colors1: 1.0
100 | colors2: 1.0
101 | timelineCount: 1
102 | timeline0: 0.0
103 | - Transparency -
104 | lowMin: 0.0
105 | lowMax: 0.0
106 | highMin: 1.0
107 | highMax: 1.0
108 | relative: false
109 | scalingCount: 4
110 | scaling0: 0.0
111 | scaling1: 1.0
112 | scaling2: 1.0
113 | scaling3: 0.0
114 | timelineCount: 4
115 | timeline0: 0.0
116 | timeline1: 0.26712328
117 | timeline2: 0.72602737
118 | timeline3: 1.0
119 | - Options -
120 | attached: false
121 | continuous: true
122 | aligned: false
123 | additive: true
124 | behind: false
125 | - Image Path -
126 | particle.png
127 |
128 |
129 | fire
130 | - Delay -
131 | active: false
132 | - Duration -
133 | lowMin: 1.0
134 | lowMax: 1.0
135 | - Count -
136 | min: 0
137 | max: 1000
138 | - Emission -
139 | lowMin: 0.0
140 | lowMax: 0.0
141 | highMin: 10.0
142 | highMax: 10.0
143 | relative: false
144 | scalingCount: 1
145 | scaling0: 1.0
146 | timelineCount: 1
147 | timeline0: 0.0
148 | - Life -
149 | lowMin: 0.0
150 | lowMax: 0.0
151 | highMin: 1000.0
152 | highMax: 1000.0
153 | relative: false
154 | scalingCount: 1
155 | scaling0: 1.0
156 | timelineCount: 1
157 | timeline0: 0.0
158 | - Life Offset -
159 | active: false
160 | - X Offset -
161 | active: false
162 | - Y Offset -
163 | active: false
164 | - Spawn Shape -
165 | shape: point
166 | - Spawn Width -
167 | lowMin: 0.0
168 | lowMax: 0.0
169 | highMin: 0.0
170 | highMax: 0.0
171 | relative: false
172 | scalingCount: 1
173 | scaling0: 1.0
174 | timelineCount: 1
175 | timeline0: 0.0
176 | - Spawn Height -
177 | lowMin: 0.0
178 | lowMax: 0.0
179 | highMin: 0.0
180 | highMax: 0.0
181 | relative: false
182 | scalingCount: 1
183 | scaling0: 1.0
184 | timelineCount: 1
185 | timeline0: 0.0
186 | - Scale -
187 | lowMin: 0.0
188 | lowMax: 0.0
189 | highMin: 80.0
190 | highMax: 80.0
191 | relative: false
192 | scalingCount: 1
193 | scaling0: 1.0
194 | timelineCount: 1
195 | timeline0: 0.0
196 | - Velocity -
197 | active: true
198 | lowMin: 0.0
199 | lowMax: 0.0
200 | highMin: 50.0
201 | highMax: 50.0
202 | relative: false
203 | scalingCount: 1
204 | scaling0: 1.0
205 | timelineCount: 1
206 | timeline0: 0.0
207 | - Angle -
208 | active: true
209 | lowMin: 0.0
210 | lowMax: 0.0
211 | highMin: 1.0
212 | highMax: 360.0
213 | relative: false
214 | scalingCount: 1
215 | scaling0: 1.0
216 | timelineCount: 1
217 | timeline0: 0.0
218 | - Rotation -
219 | active: true
220 | lowMin: 1.0
221 | lowMax: 360.0
222 | highMin: -180.0
223 | highMax: 180.0
224 | relative: true
225 | scalingCount: 2
226 | scaling0: 0.0
227 | scaling1: 1.0
228 | timelineCount: 2
229 | timeline0: 0.0
230 | timeline1: 1.0
231 | - Wind -
232 | active: false
233 | - Gravity -
234 | active: false
235 | - Tint -
236 | colorsCount: 3
237 | colors0: 1.0
238 | colors1: 0.3372549
239 | colors2: 0.0
240 | timelineCount: 1
241 | timeline0: 0.0
242 | - Transparency -
243 | lowMin: 0.0
244 | lowMax: 0.0
245 | highMin: 1.0
246 | highMax: 1.0
247 | relative: false
248 | scalingCount: 3
249 | scaling0: 1.0
250 | scaling1: 1.0
251 | scaling2: 0.0
252 | timelineCount: 3
253 | timeline0: 0.0
254 | timeline1: 0.6712329
255 | timeline2: 1.0
256 | - Options -
257 | attached: true
258 | continuous: true
259 | aligned: false
260 | additive: true
261 | behind: false
262 | - Image Path -
263 | particle-fire.png
264 |
265 |
266 | stars
267 | - Delay -
268 | active: false
269 | - Duration -
270 | lowMin: 1.0
271 | lowMax: 1.0
272 | - Count -
273 | min: 0
274 | max: 1000
275 | - Emission -
276 | lowMin: 0.0
277 | lowMax: 0.0
278 | highMin: 10.0
279 | highMax: 10.0
280 | relative: false
281 | scalingCount: 1
282 | scaling0: 1.0
283 | timelineCount: 1
284 | timeline0: 0.0
285 | - Life -
286 | lowMin: 0.0
287 | lowMax: 0.0
288 | highMin: 1000.0
289 | highMax: 1500.0
290 | relative: false
291 | scalingCount: 1
292 | scaling0: 1.0
293 | timelineCount: 1
294 | timeline0: 0.0
295 | - Life Offset -
296 | active: false
297 | - X Offset -
298 | active: false
299 | - Y Offset -
300 | active: false
301 | - Spawn Shape -
302 | shape: point
303 | - Spawn Width -
304 | lowMin: 0.0
305 | lowMax: 0.0
306 | highMin: 0.0
307 | highMax: 0.0
308 | relative: false
309 | scalingCount: 1
310 | scaling0: 1.0
311 | timelineCount: 1
312 | timeline0: 0.0
313 | - Spawn Height -
314 | lowMin: 0.0
315 | lowMax: 0.0
316 | highMin: 0.0
317 | highMax: 0.0
318 | relative: false
319 | scalingCount: 1
320 | scaling0: 1.0
321 | timelineCount: 1
322 | timeline0: 0.0
323 | - Scale -
324 | lowMin: 0.0
325 | lowMax: 0.0
326 | highMin: 64.0
327 | highMax: 64.0
328 | relative: false
329 | scalingCount: 6
330 | scaling0: 0.0
331 | scaling1: 1.0
332 | scaling2: 0.33333334
333 | scaling3: 1.0
334 | scaling4: 0.4509804
335 | scaling5: 1.0
336 | timelineCount: 6
337 | timeline0: 0.0
338 | timeline1: 0.12328767
339 | timeline2: 0.28767124
340 | timeline3: 0.4041096
341 | timeline4: 0.5753425
342 | timeline5: 0.70547944
343 | - Velocity -
344 | active: true
345 | lowMin: 0.0
346 | lowMax: 0.0
347 | highMin: 100.0
348 | highMax: 120.0
349 | relative: false
350 | scalingCount: 1
351 | scaling0: 1.0
352 | timelineCount: 1
353 | timeline0: 0.0
354 | - Angle -
355 | active: true
356 | lowMin: 1.0
357 | lowMax: 360.0
358 | highMin: -180.0
359 | highMax: 180.0
360 | relative: true
361 | scalingCount: 2
362 | scaling0: 0.0
363 | scaling1: 1.0
364 | timelineCount: 2
365 | timeline0: 0.0
366 | timeline1: 0.51369864
367 | - Rotation -
368 | active: true
369 | lowMin: 1.0
370 | lowMax: 360.0
371 | highMin: -360.0
372 | highMax: 360.0
373 | relative: true
374 | scalingCount: 2
375 | scaling0: 0.0
376 | scaling1: 1.0
377 | timelineCount: 2
378 | timeline0: 0.0
379 | timeline1: 1.0
380 | - Wind -
381 | active: false
382 | - Gravity -
383 | active: false
384 | - Tint -
385 | colorsCount: 9
386 | colors0: 0.0
387 | colors1: 0.105882354
388 | colors2: 1.0
389 | colors3: 0.0
390 | colors4: 1.0
391 | colors5: 0.09803922
392 | colors6: 1.0
393 | colors7: 0.0
394 | colors8: 0.0
395 | timelineCount: 3
396 | timeline0: 0.0
397 | timeline1: 0.63705105
398 | timeline2: 1.0
399 | - Transparency -
400 | lowMin: 0.0
401 | lowMax: 0.0
402 | highMin: 1.0
403 | highMax: 1.0
404 | relative: false
405 | scalingCount: 5
406 | scaling0: 1.0
407 | scaling1: 1.0
408 | scaling2: 0.0
409 | scaling3: 0.0
410 | scaling4: 1.0
411 | timelineCount: 5
412 | timeline0: 0.0
413 | timeline1: 0.34246576
414 | timeline2: 0.74657536
415 | timeline3: 0.9315069
416 | timeline4: 1.0
417 | - Options -
418 | attached: false
419 | continuous: true
420 | aligned: false
421 | additive: true
422 | behind: false
423 | - Image Path -
424 | particle-star.png
425 |
426 |
427 | smoke
428 | - Delay -
429 | active: false
430 | - Duration -
431 | lowMin: 1.0
432 | lowMax: 1.0
433 | - Count -
434 | min: 0
435 | max: 1000
436 | - Emission -
437 | lowMin: 0.0
438 | lowMax: 0.0
439 | highMin: 3.0
440 | highMax: 3.0
441 | relative: false
442 | scalingCount: 1
443 | scaling0: 1.0
444 | timelineCount: 1
445 | timeline0: 0.0
446 | - Life -
447 | lowMin: 0.0
448 | lowMax: 0.0
449 | highMin: 3000.0
450 | highMax: 3000.0
451 | relative: false
452 | scalingCount: 1
453 | scaling0: 1.0
454 | timelineCount: 1
455 | timeline0: 0.0
456 | - Life Offset -
457 | active: false
458 | - X Offset -
459 | active: false
460 | - Y Offset -
461 | active: false
462 | - Spawn Shape -
463 | shape: square
464 | - Spawn Width -
465 | lowMin: 0.0
466 | lowMax: 0.0
467 | highMin: 180.0
468 | highMax: 180.0
469 | relative: false
470 | scalingCount: 1
471 | scaling0: 1.0
472 | timelineCount: 1
473 | timeline0: 0.0
474 | - Spawn Height -
475 | lowMin: 0.0
476 | lowMax: 0.0
477 | highMin: 110.0
478 | highMax: 110.0
479 | relative: false
480 | scalingCount: 1
481 | scaling0: 1.0
482 | timelineCount: 1
483 | timeline0: 0.0
484 | - Scale -
485 | lowMin: 0.0
486 | lowMax: 0.0
487 | highMin: 256.0
488 | highMax: 256.0
489 | relative: false
490 | scalingCount: 1
491 | scaling0: 1.0
492 | timelineCount: 1
493 | timeline0: 0.0
494 | - Velocity -
495 | active: true
496 | lowMin: -25.0
497 | lowMax: -25.0
498 | highMin: 25.0
499 | highMax: 25.0
500 | relative: false
501 | scalingCount: 2
502 | scaling0: 0.0
503 | scaling1: 1.0
504 | timelineCount: 2
505 | timeline0: 0.0
506 | timeline1: 1.0
507 | - Angle -
508 | active: true
509 | lowMin: 0.0
510 | lowMax: 0.0
511 | highMin: 1.0
512 | highMax: 360.0
513 | relative: false
514 | scalingCount: 1
515 | scaling0: 1.0
516 | timelineCount: 1
517 | timeline0: 0.0
518 | - Rotation -
519 | active: true
520 | lowMin: 1.0
521 | lowMax: 360.0
522 | highMin: -30.0
523 | highMax: 30.0
524 | relative: true
525 | scalingCount: 2
526 | scaling0: 0.0
527 | scaling1: 1.0
528 | timelineCount: 2
529 | timeline0: 0.0
530 | timeline1: 1.0
531 | - Wind -
532 | active: false
533 | - Gravity -
534 | active: false
535 | - Tint -
536 | colorsCount: 6
537 | colors0: 1.0
538 | colors1: 0.0
539 | colors2: 0.0
540 | colors3: 1.0
541 | colors4: 0.9843137
542 | colors5: 0.0
543 | timelineCount: 2
544 | timeline0: 0.0
545 | timeline1: 1.0
546 | - Transparency -
547 | lowMin: 0.0
548 | lowMax: 0.0
549 | highMin: 1.0
550 | highMax: 1.0
551 | relative: false
552 | scalingCount: 3
553 | scaling0: 0.0
554 | scaling1: 0.49122807
555 | scaling2: 0.0
556 | timelineCount: 3
557 | timeline0: 0.0
558 | timeline1: 0.5068493
559 | timeline2: 1.0
560 | - Options -
561 | attached: false
562 | continuous: true
563 | aligned: false
564 | additive: true
565 | behind: false
566 | - Image Path -
567 | particle-cloud.png
568 |
--------------------------------------------------------------------------------
/particle-effect/particle-cloud.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/particle-effect/particle-cloud.png
--------------------------------------------------------------------------------
/particle-effect/particle-fire.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/particle-effect/particle-fire.png
--------------------------------------------------------------------------------
/particle-effect/particle-star.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/particle-effect/particle-star.png
--------------------------------------------------------------------------------
/particle-effect/particle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/particle-effect/particle.png
--------------------------------------------------------------------------------
/platformer/level.tmx:
--------------------------------------------------------------------------------
1 |
2 |
17 |
--------------------------------------------------------------------------------
/platformer/player_jump.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/platformer/player_jump.png
--------------------------------------------------------------------------------
/platformer/player_stand.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/platformer/player_stand.png
--------------------------------------------------------------------------------
/platformer/player_walk1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/platformer/player_walk1.png
--------------------------------------------------------------------------------
/platformer/player_walk2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/platformer/player_walk2.png
--------------------------------------------------------------------------------
/platformer/player_walk3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/platformer/player_walk3.png
--------------------------------------------------------------------------------
/platformer/tiles.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/platformer/tiles.png
--------------------------------------------------------------------------------
/quest-quest/first-enemy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/quest-quest/first-enemy.png
--------------------------------------------------------------------------------
/quest-quest/jump.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/quest-quest/jump.wav
--------------------------------------------------------------------------------
/quest-quest/koala_player.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/quest-quest/koala_player.png
--------------------------------------------------------------------------------
/quest-quest/player.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/quest-quest/player.png
--------------------------------------------------------------------------------
/quest-quest/portrait.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/quest-quest/portrait.png
--------------------------------------------------------------------------------
/quest-quest/quester copy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/quest-quest/quester copy.png
--------------------------------------------------------------------------------
/quest-quest/quester.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/quest-quest/quester.png
--------------------------------------------------------------------------------
/quest-quest/tile-map.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/quest-quest/tile-map.png
--------------------------------------------------------------------------------
/quest-quest/tileSet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/quest-quest/tileSet.png
--------------------------------------------------------------------------------
/quest-quest/world.tmx:
--------------------------------------------------------------------------------
1 |
2 |
24 |
--------------------------------------------------------------------------------
/settings.edn:
--------------------------------------------------------------------------------
1 | {:title "Clojure/conj 2014"
2 | :description "This is a game."
3 | :version 1}
--------------------------------------------------------------------------------
/skin/droid_32.fnt:
--------------------------------------------------------------------------------
1 | info face="Droid Sans" size=32 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=0,0
2 | common lineHeight=38 base=30 scaleW=512 scaleH=512 pages=1 packed=0
3 | page id=0 file="droid_32.png"
4 | chars count=95
5 | char id=32 x=0 y=0 width=0 height=0 xoffset=0 yoffset=30 xadvance=8 page=0 chnl=0
6 | char id=124 x=0 y=0 width=4 height=33 xoffset=8 yoffset=6 xadvance=18 page=0 chnl=0
7 | char id=106 x=4 y=0 width=10 height=33 xoffset=-1 yoffset=6 xadvance=8 page=0 chnl=0
8 | char id=74 x=14 y=0 width=12 height=30 xoffset=-3 yoffset=7 xadvance=9 page=0 chnl=0
9 | char id=125 x=26 y=0 width=11 height=29 xoffset=0 yoffset=7 xadvance=11 page=0 chnl=0
10 | char id=123 x=37 y=0 width=11 height=29 xoffset=1 yoffset=7 xadvance=11 page=0 chnl=0
11 | char id=93 x=48 y=0 width=7 height=29 xoffset=1 yoffset=7 xadvance=10 page=0 chnl=0
12 | char id=91 x=55 y=0 width=7 height=29 xoffset=3 yoffset=7 xadvance=10 page=0 chnl=0
13 | char id=41 x=62 y=0 width=8 height=29 xoffset=2 yoffset=7 xadvance=10 page=0 chnl=0
14 | char id=40 x=70 y=0 width=9 height=29 xoffset=1 yoffset=7 xadvance=10 page=0 chnl=0
15 | char id=81 x=79 y=0 width=21 height=29 xoffset=2 yoffset=7 xadvance=24 page=0 chnl=0
16 | char id=36 x=100 y=0 width=15 height=27 xoffset=2 yoffset=5 xadvance=18 page=0 chnl=0
17 | char id=64 x=115 y=0 width=25 height=27 xoffset=2 yoffset=7 xadvance=28 page=0 chnl=0
18 | char id=121 x=140 y=0 width=19 height=26 xoffset=-1 yoffset=13 xadvance=16 page=0 chnl=0
19 | char id=113 x=159 y=0 width=15 height=26 xoffset=2 yoffset=13 xadvance=19 page=0 chnl=0
20 | char id=112 x=174 y=0 width=15 height=26 xoffset=3 yoffset=13 xadvance=19 page=0 chnl=0
21 | char id=103 x=189 y=0 width=17 height=26 xoffset=1 yoffset=13 xadvance=17 page=0 chnl=0
22 | char id=108 x=206 y=0 width=4 height=25 xoffset=3 yoffset=6 xadvance=8 page=0 chnl=0
23 | char id=107 x=210 y=0 width=15 height=25 xoffset=3 yoffset=6 xadvance=16 page=0 chnl=0
24 | char id=105 x=225 y=0 width=6 height=25 xoffset=2 yoffset=6 xadvance=8 page=0 chnl=0
25 | char id=104 x=231 y=0 width=14 height=25 xoffset=3 yoffset=6 xadvance=19 page=0 chnl=0
26 | char id=102 x=245 y=0 width=12 height=25 xoffset=0 yoffset=6 xadvance=11 page=0 chnl=0
27 | char id=100 x=257 y=0 width=15 height=25 xoffset=2 yoffset=6 xadvance=19 page=0 chnl=0
28 | char id=98 x=272 y=0 width=15 height=25 xoffset=3 yoffset=6 xadvance=19 page=0 chnl=0
29 | char id=127 x=287 y=0 width=14 height=24 xoffset=3 yoffset=7 xadvance=19 page=0 chnl=0
30 | char id=38 x=301 y=0 width=20 height=24 xoffset=2 yoffset=7 xadvance=22 page=0 chnl=0
31 | char id=35 x=321 y=0 width=20 height=24 xoffset=1 yoffset=7 xadvance=21 page=0 chnl=0
32 | char id=37 x=341 y=0 width=23 height=24 xoffset=2 yoffset=7 xadvance=26 page=0 chnl=0
33 | char id=92 x=364 y=0 width=14 height=24 xoffset=-1 yoffset=7 xadvance=12 page=0 chnl=0
34 | char id=47 x=378 y=0 width=14 height=24 xoffset=-1 yoffset=7 xadvance=12 page=0 chnl=0
35 | char id=63 x=392 y=0 width=13 height=24 xoffset=1 yoffset=7 xadvance=14 page=0 chnl=0
36 | char id=33 x=405 y=0 width=5 height=24 xoffset=2 yoffset=7 xadvance=9 page=0 chnl=0
37 | char id=48 x=410 y=0 width=15 height=24 xoffset=2 yoffset=7 xadvance=18 page=0 chnl=0
38 | char id=57 x=425 y=0 width=15 height=24 xoffset=2 yoffset=7 xadvance=18 page=0 chnl=0
39 | char id=56 x=440 y=0 width=15 height=24 xoffset=2 yoffset=7 xadvance=18 page=0 chnl=0
40 | char id=55 x=455 y=0 width=16 height=24 xoffset=1 yoffset=7 xadvance=18 page=0 chnl=0
41 | char id=54 x=471 y=0 width=16 height=24 xoffset=2 yoffset=7 xadvance=18 page=0 chnl=0
42 | char id=53 x=487 y=0 width=15 height=24 xoffset=2 yoffset=7 xadvance=18 page=0 chnl=0
43 | char id=52 x=0 y=33 width=18 height=24 xoffset=0 yoffset=7 xadvance=18 page=0 chnl=0
44 | char id=51 x=18 y=33 width=16 height=24 xoffset=1 yoffset=7 xadvance=18 page=0 chnl=0
45 | char id=50 x=34 y=33 width=15 height=24 xoffset=2 yoffset=7 xadvance=18 page=0 chnl=0
46 | char id=49 x=49 y=33 width=10 height=24 xoffset=2 yoffset=7 xadvance=18 page=0 chnl=0
47 | char id=90 x=59 y=33 width=14 height=24 xoffset=2 yoffset=7 xadvance=17 page=0 chnl=0
48 | char id=89 x=73 y=33 width=20 height=24 xoffset=-1 yoffset=7 xadvance=17 page=0 chnl=0
49 | char id=88 x=93 y=33 width=21 height=24 xoffset=-1 yoffset=7 xadvance=18 page=0 chnl=0
50 | char id=87 x=114 y=33 width=31 height=24 xoffset=-1 yoffset=7 xadvance=28 page=0 chnl=0
51 | char id=86 x=145 y=33 width=21 height=24 xoffset=-1 yoffset=7 xadvance=18 page=0 chnl=0
52 | char id=85 x=166 y=33 width=17 height=24 xoffset=3 yoffset=7 xadvance=22 page=0 chnl=0
53 | char id=84 x=183 y=33 width=17 height=24 xoffset=0 yoffset=7 xadvance=17 page=0 chnl=0
54 | char id=83 x=200 y=33 width=15 height=24 xoffset=1 yoffset=7 xadvance=17 page=0 chnl=0
55 | char id=82 x=215 y=33 width=17 height=24 xoffset=3 yoffset=7 xadvance=19 page=0 chnl=0
56 | char id=80 x=232 y=33 width=14 height=24 xoffset=3 yoffset=7 xadvance=18 page=0 chnl=0
57 | char id=79 x=246 y=33 width=21 height=24 xoffset=2 yoffset=7 xadvance=24 page=0 chnl=0
58 | char id=78 x=267 y=33 width=18 height=24 xoffset=3 yoffset=7 xadvance=23 page=0 chnl=0
59 | char id=77 x=285 y=33 width=23 height=24 xoffset=3 yoffset=7 xadvance=28 page=0 chnl=0
60 | char id=76 x=308 y=33 width=14 height=24 xoffset=3 yoffset=7 xadvance=16 page=0 chnl=0
61 | char id=75 x=322 y=33 width=18 height=24 xoffset=3 yoffset=7 xadvance=19 page=0 chnl=0
62 | char id=73 x=340 y=33 width=10 height=24 xoffset=1 yoffset=7 xadvance=11 page=0 chnl=0
63 | char id=72 x=350 y=33 width=17 height=24 xoffset=3 yoffset=7 xadvance=22 page=0 chnl=0
64 | char id=71 x=367 y=33 width=19 height=24 xoffset=2 yoffset=7 xadvance=22 page=0 chnl=0
65 | char id=70 x=386 y=33 width=13 height=24 xoffset=3 yoffset=7 xadvance=16 page=0 chnl=0
66 | char id=69 x=399 y=33 width=13 height=24 xoffset=3 yoffset=7 xadvance=17 page=0 chnl=0
67 | char id=68 x=412 y=33 width=18 height=24 xoffset=3 yoffset=7 xadvance=22 page=0 chnl=0
68 | char id=67 x=430 y=33 width=17 height=24 xoffset=2 yoffset=7 xadvance=19 page=0 chnl=0
69 | char id=66 x=447 y=33 width=16 height=24 xoffset=3 yoffset=7 xadvance=20 page=0 chnl=0
70 | char id=65 x=463 y=33 width=22 height=24 xoffset=-1 yoffset=7 xadvance=19 page=0 chnl=0
71 | char id=59 x=485 y=33 width=6 height=22 xoffset=1 yoffset=13 xadvance=9 page=0 chnl=0
72 | char id=116 x=491 y=33 width=10 height=22 xoffset=1 yoffset=9 xadvance=11 page=0 chnl=0
73 | char id=58 x=501 y=33 width=5 height=18 xoffset=2 yoffset=13 xadvance=9 page=0 chnl=0
74 | char id=122 x=0 y=57 width=13 height=18 xoffset=1 yoffset=13 xadvance=14 page=0 chnl=0
75 | char id=120 x=13 y=57 width=15 height=18 xoffset=1 yoffset=13 xadvance=16 page=0 chnl=0
76 | char id=119 x=28 y=57 width=27 height=18 xoffset=-1 yoffset=13 xadvance=24 page=0 chnl=0
77 | char id=118 x=55 y=57 width=18 height=18 xoffset=-1 yoffset=13 xadvance=15 page=0 chnl=0
78 | char id=117 x=73 y=57 width=14 height=18 xoffset=3 yoffset=13 xadvance=19 page=0 chnl=0
79 | char id=115 x=87 y=57 width=12 height=18 xoffset=1 yoffset=13 xadvance=14 page=0 chnl=0
80 | char id=114 x=99 y=57 width=10 height=18 xoffset=3 yoffset=13 xadvance=13 page=0 chnl=0
81 | char id=111 x=109 y=57 width=15 height=18 xoffset=2 yoffset=13 xadvance=18 page=0 chnl=0
82 | char id=110 x=124 y=57 width=14 height=18 xoffset=3 yoffset=13 xadvance=19 page=0 chnl=0
83 | char id=109 x=138 y=57 width=24 height=18 xoffset=3 yoffset=13 xadvance=29 page=0 chnl=0
84 | char id=101 x=162 y=57 width=14 height=18 xoffset=2 yoffset=13 xadvance=17 page=0 chnl=0
85 | char id=99 x=176 y=57 width=13 height=18 xoffset=2 yoffset=13 xadvance=15 page=0 chnl=0
86 | char id=97 x=189 y=57 width=13 height=18 xoffset=2 yoffset=13 xadvance=17 page=0 chnl=0
87 | char id=43 x=202 y=57 width=17 height=17 xoffset=1 yoffset=11 xadvance=18 page=0 chnl=0
88 | char id=62 x=219 y=57 width=15 height=17 xoffset=2 yoffset=11 xadvance=18 page=0 chnl=0
89 | char id=60 x=234 y=57 width=15 height=17 xoffset=2 yoffset=11 xadvance=18 page=0 chnl=0
90 | char id=42 x=249 y=57 width=16 height=15 xoffset=1 yoffset=6 xadvance=18 page=0 chnl=0
91 | char id=94 x=265 y=57 width=16 height=15 xoffset=1 yoffset=7 xadvance=17 page=0 chnl=0
92 | char id=61 x=281 y=57 width=15 height=10 xoffset=2 yoffset=14 xadvance=18 page=0 chnl=0
93 | char id=44 x=296 y=57 width=6 height=9 xoffset=1 yoffset=26 xadvance=8 page=0 chnl=0
94 | char id=39 x=302 y=57 width=5 height=9 xoffset=2 yoffset=7 xadvance=7 page=0 chnl=0
95 | char id=34 x=307 y=57 width=11 height=9 xoffset=2 yoffset=7 xadvance=13 page=0 chnl=0
96 | char id=126 x=318 y=57 width=15 height=7 xoffset=2 yoffset=16 xadvance=18 page=0 chnl=0
97 | char id=96 x=333 y=57 width=7 height=6 xoffset=6 yoffset=6 xadvance=18 page=0 chnl=0
98 | char id=46 x=340 y=57 width=5 height=5 xoffset=2 yoffset=26 xadvance=9 page=0 chnl=0
99 | char id=95 x=345 y=57 width=14 height=4 xoffset=0 yoffset=33 xadvance=13 page=0 chnl=0
100 | char id=45 x=359 y=57 width=9 height=4 xoffset=1 yoffset=20 xadvance=10 page=0 chnl=0
101 |
--------------------------------------------------------------------------------
/skin/droid_32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/skin/droid_32.png
--------------------------------------------------------------------------------
/skin/droid_48.fnt:
--------------------------------------------------------------------------------
1 | info face="Droid Sans" size=48 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=0,0
2 | common lineHeight=57 base=45 scaleW=512 scaleH=512 pages=1 packed=0
3 | page id=0 file="droid_48.png"
4 | chars count=95
5 | char id=32 x=0 y=0 width=0 height=0 xoffset=0 yoffset=45 xadvance=12 page=0 chnl=0
6 | char id=124 x=0 y=0 width=5 height=49 xoffset=11 yoffset=9 xadvance=26 page=0 chnl=0
7 | char id=106 x=5 y=0 width=13 height=48 xoffset=-2 yoffset=10 xadvance=12 page=0 chnl=0
8 | char id=74 x=18 y=0 width=19 height=44 xoffset=-5 yoffset=11 xadvance=13 page=0 chnl=0
9 | char id=125 x=37 y=0 width=15 height=43 xoffset=2 yoffset=11 xadvance=17 page=0 chnl=0
10 | char id=123 x=52 y=0 width=15 height=43 xoffset=1 yoffset=11 xadvance=17 page=0 chnl=0
11 | char id=93 x=67 y=0 width=11 height=43 xoffset=1 yoffset=11 xadvance=15 page=0 chnl=0
12 | char id=91 x=78 y=0 width=11 height=43 xoffset=4 yoffset=11 xadvance=15 page=0 chnl=0
13 | char id=41 x=89 y=0 width=12 height=43 xoffset=1 yoffset=11 xadvance=14 page=0 chnl=0
14 | char id=40 x=101 y=0 width=13 height=43 xoffset=2 yoffset=11 xadvance=14 page=0 chnl=0
15 | char id=81 x=114 y=0 width=31 height=43 xoffset=3 yoffset=11 xadvance=36 page=0 chnl=0
16 | char id=36 x=145 y=0 width=21 height=40 xoffset=3 yoffset=9 xadvance=26 page=0 chnl=0
17 | char id=64 x=166 y=0 width=37 height=39 xoffset=3 yoffset=11 xadvance=42 page=0 chnl=0
18 | char id=121 x=203 y=0 width=26 height=39 xoffset=-1 yoffset=19 xadvance=23 page=0 chnl=0
19 | char id=113 x=229 y=0 width=22 height=39 xoffset=3 yoffset=19 xadvance=28 page=0 chnl=0
20 | char id=112 x=251 y=0 width=22 height=39 xoffset=4 yoffset=19 xadvance=28 page=0 chnl=0
21 | char id=103 x=273 y=0 width=25 height=39 xoffset=1 yoffset=19 xadvance=25 page=0 chnl=0
22 | char id=108 x=298 y=0 width=6 height=37 xoffset=4 yoffset=9 xadvance=12 page=0 chnl=0
23 | char id=107 x=304 y=0 width=22 height=37 xoffset=4 yoffset=9 xadvance=24 page=0 chnl=0
24 | char id=104 x=326 y=0 width=21 height=37 xoffset=4 yoffset=9 xadvance=28 page=0 chnl=0
25 | char id=102 x=347 y=0 width=19 height=37 xoffset=0 yoffset=9 xadvance=16 page=0 chnl=0
26 | char id=100 x=366 y=0 width=22 height=37 xoffset=3 yoffset=9 xadvance=28 page=0 chnl=0
27 | char id=98 x=388 y=0 width=22 height=37 xoffset=4 yoffset=9 xadvance=28 page=0 chnl=0
28 | char id=38 x=410 y=0 width=31 height=36 xoffset=3 yoffset=10 xadvance=34 page=0 chnl=0
29 | char id=63 x=441 y=0 width=18 height=36 xoffset=1 yoffset=11 xadvance=20 page=0 chnl=0
30 | char id=33 x=459 y=0 width=7 height=36 xoffset=3 yoffset=11 xadvance=13 page=0 chnl=0
31 | char id=105 x=466 y=0 width=7 height=36 xoffset=3 yoffset=10 xadvance=12 page=0 chnl=0
32 | char id=127 x=473 y=0 width=20 height=35 xoffset=5 yoffset=11 xadvance=29 page=0 chnl=0
33 | char id=35 x=0 y=49 width=30 height=35 xoffset=1 yoffset=11 xadvance=31 page=0 chnl=0
34 | char id=37 x=30 y=49 width=37 height=35 xoffset=2 yoffset=11 xadvance=40 page=0 chnl=0
35 | char id=92 x=67 y=49 width=19 height=35 xoffset=0 yoffset=11 xadvance=18 page=0 chnl=0
36 | char id=47 x=86 y=49 width=20 height=35 xoffset=-1 yoffset=11 xadvance=18 page=0 chnl=0
37 | char id=48 x=106 y=49 width=23 height=35 xoffset=2 yoffset=11 xadvance=26 page=0 chnl=0
38 | char id=57 x=129 y=49 width=23 height=35 xoffset=2 yoffset=11 xadvance=26 page=0 chnl=0
39 | char id=56 x=152 y=49 width=23 height=35 xoffset=2 yoffset=11 xadvance=26 page=0 chnl=0
40 | char id=55 x=175 y=49 width=23 height=35 xoffset=2 yoffset=11 xadvance=26 page=0 chnl=0
41 | char id=54 x=198 y=49 width=22 height=35 xoffset=3 yoffset=11 xadvance=26 page=0 chnl=0
42 | char id=53 x=220 y=49 width=21 height=35 xoffset=3 yoffset=11 xadvance=26 page=0 chnl=0
43 | char id=52 x=241 y=49 width=25 height=35 xoffset=1 yoffset=11 xadvance=26 page=0 chnl=0
44 | char id=51 x=266 y=49 width=22 height=35 xoffset=2 yoffset=11 xadvance=26 page=0 chnl=0
45 | char id=50 x=288 y=49 width=23 height=35 xoffset=2 yoffset=11 xadvance=26 page=0 chnl=0
46 | char id=49 x=311 y=49 width=14 height=35 xoffset=5 yoffset=11 xadvance=26 page=0 chnl=0
47 | char id=90 x=325 y=49 width=21 height=35 xoffset=3 yoffset=11 xadvance=26 page=0 chnl=0
48 | char id=89 x=346 y=49 width=28 height=35 xoffset=-1 yoffset=11 xadvance=25 page=0 chnl=0
49 | char id=88 x=374 y=49 width=29 height=35 xoffset=-1 yoffset=11 xadvance=26 page=0 chnl=0
50 | char id=87 x=403 y=49 width=45 height=35 xoffset=-1 yoffset=11 xadvance=42 page=0 chnl=0
51 | char id=86 x=448 y=49 width=30 height=35 xoffset=-1 yoffset=11 xadvance=27 page=0 chnl=0
52 | char id=85 x=478 y=49 width=25 height=35 xoffset=5 yoffset=11 xadvance=34 page=0 chnl=0
53 | char id=84 x=0 y=84 width=25 height=35 xoffset=0 yoffset=11 xadvance=25 page=0 chnl=0
54 | char id=83 x=25 y=84 width=21 height=35 xoffset=2 yoffset=11 xadvance=25 page=0 chnl=0
55 | char id=82 x=46 y=84 width=24 height=35 xoffset=5 yoffset=11 xadvance=28 page=0 chnl=0
56 | char id=80 x=70 y=84 width=21 height=35 xoffset=5 yoffset=11 xadvance=28 page=0 chnl=0
57 | char id=79 x=91 y=84 width=31 height=35 xoffset=3 yoffset=11 xadvance=36 page=0 chnl=0
58 | char id=78 x=122 y=84 width=26 height=35 xoffset=5 yoffset=11 xadvance=35 page=0 chnl=0
59 | char id=77 x=148 y=84 width=33 height=35 xoffset=5 yoffset=11 xadvance=42 page=0 chnl=0
60 | char id=76 x=181 y=84 width=19 height=35 xoffset=5 yoffset=11 xadvance=24 page=0 chnl=0
61 | char id=75 x=200 y=84 width=25 height=35 xoffset=5 yoffset=11 xadvance=28 page=0 chnl=0
62 | char id=73 x=225 y=84 width=15 height=35 xoffset=1 yoffset=11 xadvance=16 page=0 chnl=0
63 | char id=72 x=240 y=84 width=25 height=35 xoffset=5 yoffset=11 xadvance=34 page=0 chnl=0
64 | char id=71 x=265 y=84 width=28 height=35 xoffset=3 yoffset=11 xadvance=33 page=0 chnl=0
65 | char id=70 x=293 y=84 width=19 height=35 xoffset=5 yoffset=11 xadvance=24 page=0 chnl=0
66 | char id=69 x=312 y=84 width=18 height=35 xoffset=5 yoffset=11 xadvance=25 page=0 chnl=0
67 | char id=68 x=330 y=84 width=26 height=35 xoffset=5 yoffset=11 xadvance=33 page=0 chnl=0
68 | char id=67 x=356 y=84 width=26 height=35 xoffset=3 yoffset=11 xadvance=29 page=0 chnl=0
69 | char id=66 x=382 y=84 width=23 height=35 xoffset=5 yoffset=11 xadvance=30 page=0 chnl=0
70 | char id=65 x=405 y=84 width=32 height=35 xoffset=-1 yoffset=11 xadvance=29 page=0 chnl=0
71 | char id=59 x=437 y=84 width=9 height=33 xoffset=1 yoffset=19 xadvance=13 page=0 chnl=0
72 | char id=116 x=446 y=84 width=16 height=33 xoffset=0 yoffset=13 xadvance=16 page=0 chnl=0
73 | char id=58 x=462 y=84 width=7 height=28 xoffset=3 yoffset=19 xadvance=13 page=0 chnl=0
74 | char id=122 x=469 y=84 width=19 height=27 xoffset=2 yoffset=19 xadvance=21 page=0 chnl=0
75 | char id=120 x=488 y=84 width=23 height=27 xoffset=1 yoffset=19 xadvance=24 page=0 chnl=0
76 | char id=119 x=0 y=119 width=39 height=27 xoffset=-1 yoffset=19 xadvance=36 page=0 chnl=0
77 | char id=118 x=39 y=119 width=26 height=27 xoffset=-1 yoffset=19 xadvance=23 page=0 chnl=0
78 | char id=117 x=65 y=119 width=21 height=27 xoffset=4 yoffset=19 xadvance=28 page=0 chnl=0
79 | char id=115 x=86 y=119 width=18 height=27 xoffset=2 yoffset=19 xadvance=22 page=0 chnl=0
80 | char id=114 x=104 y=119 width=15 height=27 xoffset=4 yoffset=19 xadvance=19 page=0 chnl=0
81 | char id=111 x=119 y=119 width=23 height=27 xoffset=3 yoffset=19 xadvance=28 page=0 chnl=0
82 | char id=110 x=142 y=119 width=21 height=27 xoffset=4 yoffset=19 xadvance=28 page=0 chnl=0
83 | char id=109 x=163 y=119 width=36 height=27 xoffset=4 yoffset=19 xadvance=43 page=0 chnl=0
84 | char id=101 x=199 y=119 width=21 height=27 xoffset=3 yoffset=19 xadvance=26 page=0 chnl=0
85 | char id=99 x=220 y=119 width=18 height=27 xoffset=3 yoffset=19 xadvance=22 page=0 chnl=0
86 | char id=97 x=238 y=119 width=19 height=27 xoffset=3 yoffset=19 xadvance=25 page=0 chnl=0
87 | char id=62 x=257 y=119 width=23 height=25 xoffset=2 yoffset=16 xadvance=26 page=0 chnl=0
88 | char id=60 x=280 y=119 width=23 height=25 xoffset=2 yoffset=16 xadvance=26 page=0 chnl=0
89 | char id=43 x=303 y=119 width=24 height=24 xoffset=1 yoffset=16 xadvance=26 page=0 chnl=0
90 | char id=42 x=327 y=119 width=24 height=23 xoffset=2 yoffset=9 xadvance=26 page=0 chnl=0
91 | char id=94 x=351 y=119 width=25 height=23 xoffset=1 yoffset=11 xadvance=26 page=0 chnl=0
92 | char id=61 x=376 y=119 width=23 height=15 xoffset=2 yoffset=22 xadvance=26 page=0 chnl=0
93 | char id=44 x=399 y=119 width=8 height=13 xoffset=1 yoffset=39 xadvance=12 page=0 chnl=0
94 | char id=39 x=407 y=119 width=6 height=13 xoffset=3 yoffset=11 xadvance=11 page=0 chnl=0
95 | char id=34 x=413 y=119 width=14 height=13 xoffset=3 yoffset=11 xadvance=19 page=0 chnl=0
96 | char id=126 x=427 y=119 width=23 height=9 xoffset=2 yoffset=24 xadvance=26 page=0 chnl=0
97 | char id=96 x=450 y=119 width=10 height=9 xoffset=9 yoffset=8 xadvance=28 page=0 chnl=0
98 | char id=46 x=460 y=119 width=7 height=8 xoffset=3 yoffset=39 xadvance=13 page=0 chnl=0
99 | char id=95 x=467 y=119 width=21 height=5 xoffset=0 yoffset=49 xadvance=20 page=0 chnl=0
100 | char id=45 x=488 y=119 width=12 height=5 xoffset=2 yoffset=30 xadvance=15 page=0 chnl=0
101 |
--------------------------------------------------------------------------------
/skin/droid_48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/skin/droid_48.png
--------------------------------------------------------------------------------
/skin/droid_96.fnt:
--------------------------------------------------------------------------------
1 | info face="Droid Sans" size=96 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=0,0
2 | common lineHeight=113 base=90 scaleW=512 scaleH=512 pages=2 packed=0
3 | page id=0 file="droid_961.png"
4 | page id=1 file="droid_962.png"
5 | chars count=95
6 | char id=32 x=0 y=0 width=0 height=0 xoffset=0 yoffset=90 xadvance=25 page=0 chnl=0
7 | char id=124 x=0 y=0 width=9 height=97 xoffset=23 yoffset=17 xadvance=53 page=0 chnl=0
8 | char id=106 x=9 y=0 width=25 height=95 xoffset=-3 yoffset=19 xadvance=25 page=0 chnl=0
9 | char id=74 x=34 y=0 width=35 height=88 xoffset=-8 yoffset=21 xadvance=26 page=0 chnl=0
10 | char id=81 x=69 y=0 width=60 height=87 xoffset=6 yoffset=20 xadvance=71 page=0 chnl=0
11 | char id=125 x=129 y=0 width=30 height=85 xoffset=2 yoffset=21 xadvance=34 page=0 chnl=0
12 | char id=123 x=159 y=0 width=30 height=85 xoffset=3 yoffset=21 xadvance=34 page=0 chnl=0
13 | char id=93 x=189 y=0 width=20 height=85 xoffset=2 yoffset=21 xadvance=29 page=0 chnl=0
14 | char id=91 x=209 y=0 width=20 height=85 xoffset=8 yoffset=21 xadvance=29 page=0 chnl=0
15 | char id=41 x=229 y=0 width=23 height=85 xoffset=3 yoffset=21 xadvance=29 page=0 chnl=0
16 | char id=40 x=252 y=0 width=24 height=85 xoffset=4 yoffset=21 xadvance=29 page=0 chnl=0
17 | char id=36 x=276 y=0 width=41 height=79 xoffset=6 yoffset=17 xadvance=53 page=0 chnl=0
18 | char id=64 x=317 y=0 width=74 height=79 xoffset=5 yoffset=21 xadvance=83 page=0 chnl=0
19 | char id=113 x=391 y=0 width=44 height=76 xoffset=5 yoffset=38 xadvance=56 page=0 chnl=0
20 | char id=112 x=435 y=0 width=44 height=76 xoffset=8 yoffset=38 xadvance=56 page=0 chnl=0
21 | char id=103 x=0 y=97 width=47 height=76 xoffset=2 yoffset=38 xadvance=50 page=0 chnl=0
22 | char id=121 x=47 y=97 width=50 height=75 xoffset=-1 yoffset=39 xadvance=47 page=0 chnl=0
23 | char id=102 x=97 y=97 width=38 height=75 xoffset=1 yoffset=16 xadvance=32 page=0 chnl=0
24 | char id=100 x=135 y=97 width=44 height=75 xoffset=5 yoffset=17 xadvance=56 page=0 chnl=0
25 | char id=98 x=179 y=97 width=44 height=75 xoffset=8 yoffset=17 xadvance=56 page=0 chnl=0
26 | char id=108 x=223 y=97 width=10 height=74 xoffset=8 yoffset=17 xadvance=25 page=0 chnl=0
27 | char id=107 x=233 y=97 width=42 height=74 xoffset=8 yoffset=17 xadvance=48 page=0 chnl=0
28 | char id=104 x=275 y=97 width=42 height=74 xoffset=8 yoffset=17 xadvance=57 page=0 chnl=0
29 | char id=38 x=317 y=97 width=61 height=72 xoffset=5 yoffset=20 xadvance=67 page=0 chnl=0
30 | char id=37 x=378 y=97 width=70 height=72 xoffset=5 yoffset=20 xadvance=79 page=0 chnl=0
31 | char id=63 x=448 y=97 width=37 height=72 xoffset=2 yoffset=20 xadvance=41 page=0 chnl=0
32 | char id=48 x=0 y=173 width=44 height=72 xoffset=5 yoffset=20 xadvance=53 page=0 chnl=0
33 | char id=56 x=44 y=173 width=44 height=72 xoffset=5 yoffset=20 xadvance=53 page=0 chnl=0
34 | char id=54 x=88 y=173 width=45 height=72 xoffset=5 yoffset=20 xadvance=53 page=0 chnl=0
35 | char id=51 x=133 y=173 width=44 height=72 xoffset=4 yoffset=20 xadvance=53 page=0 chnl=0
36 | char id=105 x=177 y=173 width=12 height=72 xoffset=7 yoffset=19 xadvance=25 page=0 chnl=0
37 | char id=83 x=189 y=173 width=40 height=72 xoffset=5 yoffset=20 xadvance=50 page=0 chnl=0
38 | char id=79 x=229 y=173 width=60 height=72 xoffset=6 yoffset=20 xadvance=71 page=0 chnl=0
39 | char id=71 x=289 y=173 width=55 height=72 xoffset=6 yoffset=20 xadvance=66 page=0 chnl=0
40 | char id=67 x=344 y=173 width=50 height=72 xoffset=6 yoffset=20 xadvance=58 page=0 chnl=0
41 | char id=33 x=394 y=173 width=13 height=71 xoffset=7 yoffset=21 xadvance=26 page=0 chnl=0
42 | char id=57 x=407 y=173 width=44 height=71 xoffset=5 yoffset=20 xadvance=53 page=0 chnl=0
43 | char id=53 x=451 y=173 width=43 height=71 xoffset=6 yoffset=21 xadvance=53 page=0 chnl=0
44 | char id=50 x=0 y=245 width=44 height=71 xoffset=5 yoffset=20 xadvance=53 page=0 chnl=0
45 | char id=85 x=44 y=245 width=50 height=71 xoffset=9 yoffset=21 xadvance=67 page=0 chnl=0
46 | char id=127 x=94 y=245 width=41 height=70 xoffset=9 yoffset=21 xadvance=58 page=0 chnl=0
47 | char id=35 x=135 y=245 width=57 height=70 xoffset=3 yoffset=21 xadvance=62 page=0 chnl=0
48 | char id=92 x=192 y=245 width=37 height=70 xoffset=0 yoffset=21 xadvance=36 page=0 chnl=0
49 | char id=47 x=229 y=245 width=37 height=70 xoffset=0 yoffset=21 xadvance=36 page=0 chnl=0
50 | char id=55 x=266 y=245 width=45 height=70 xoffset=4 yoffset=21 xadvance=53 page=0 chnl=0
51 | char id=52 x=311 y=245 width=51 height=70 xoffset=1 yoffset=21 xadvance=53 page=0 chnl=0
52 | char id=49 x=362 y=245 width=27 height=70 xoffset=8 yoffset=21 xadvance=53 page=0 chnl=0
53 | char id=90 x=389 y=245 width=44 height=70 xoffset=4 yoffset=21 xadvance=52 page=0 chnl=0
54 | char id=89 x=433 y=245 width=54 height=70 xoffset=-1 yoffset=21 xadvance=51 page=0 chnl=0
55 | char id=88 x=0 y=316 width=56 height=70 xoffset=-1 yoffset=21 xadvance=53 page=0 chnl=0
56 | char id=87 x=56 y=316 width=86 height=70 xoffset=0 yoffset=21 xadvance=85 page=0 chnl=0
57 | char id=86 x=142 y=316 width=58 height=70 xoffset=-1 yoffset=21 xadvance=55 page=0 chnl=0
58 | char id=84 x=200 y=316 width=49 height=70 xoffset=1 yoffset=21 xadvance=50 page=0 chnl=0
59 | char id=82 x=249 y=316 width=49 height=70 xoffset=9 yoffset=21 xadvance=57 page=0 chnl=0
60 | char id=80 x=298 y=316 width=41 height=70 xoffset=9 yoffset=21 xadvance=55 page=0 chnl=0
61 | char id=78 x=339 y=316 width=53 height=70 xoffset=9 yoffset=21 xadvance=70 page=0 chnl=0
62 | char id=77 x=392 y=316 width=67 height=70 xoffset=9 yoffset=21 xadvance=84 page=0 chnl=0
63 | char id=76 x=459 y=316 width=37 height=70 xoffset=9 yoffset=21 xadvance=47 page=0 chnl=0
64 | char id=75 x=0 y=386 width=49 height=70 xoffset=9 yoffset=21 xadvance=56 page=0 chnl=0
65 | char id=73 x=49 y=386 width=27 height=70 xoffset=3 yoffset=21 xadvance=33 page=0 chnl=0
66 | char id=72 x=76 y=386 width=50 height=70 xoffset=9 yoffset=21 xadvance=67 page=0 chnl=0
67 | char id=70 x=126 y=386 width=37 height=70 xoffset=9 yoffset=21 xadvance=47 page=0 chnl=0
68 | char id=69 x=163 y=386 width=37 height=70 xoffset=9 yoffset=21 xadvance=51 page=0 chnl=0
69 | char id=68 x=200 y=386 width=52 height=70 xoffset=9 yoffset=21 xadvance=66 page=0 chnl=0
70 | char id=66 x=252 y=386 width=46 height=70 xoffset=9 yoffset=21 xadvance=60 page=0 chnl=0
71 | char id=65 x=298 y=386 width=61 height=70 xoffset=-1 yoffset=21 xadvance=58 page=0 chnl=0
72 | char id=59 x=359 y=386 width=17 height=66 xoffset=3 yoffset=38 xadvance=26 page=0 chnl=0
73 | char id=116 x=376 y=386 width=30 height=65 xoffset=2 yoffset=27 xadvance=33 page=0 chnl=0
74 | char id=58 x=406 y=386 width=13 height=54 xoffset=7 yoffset=38 xadvance=26 page=0 chnl=0
75 | char id=115 x=419 y=386 width=35 height=54 xoffset=4 yoffset=38 xadvance=43 page=0 chnl=0
76 | char id=111 x=454 y=386 width=46 height=54 xoffset=5 yoffset=38 xadvance=55 page=0 chnl=0
77 | char id=101 x=0 y=456 width=42 height=54 xoffset=5 yoffset=38 xadvance=51 page=0 chnl=0
78 | char id=99 x=42 y=456 width=37 height=54 xoffset=5 yoffset=38 xadvance=44 page=0 chnl=0
79 | char id=97 x=79 y=456 width=39 height=54 xoffset=5 yoffset=38 xadvance=51 page=0 chnl=0
80 | char id=117 x=118 y=456 width=42 height=53 xoffset=8 yoffset=39 xadvance=57 page=0 chnl=0
81 | char id=114 x=160 y=456 width=29 height=53 xoffset=8 yoffset=38 xadvance=38 page=0 chnl=0
82 | char id=110 x=189 y=456 width=42 height=53 xoffset=8 yoffset=38 xadvance=57 page=0 chnl=0
83 | char id=109 x=231 y=456 width=71 height=53 xoffset=8 yoffset=38 xadvance=86 page=0 chnl=0
84 | char id=122 x=302 y=456 width=35 height=52 xoffset=4 yoffset=39 xadvance=42 page=0 chnl=0
85 | char id=120 x=337 y=456 width=45 height=52 xoffset=2 yoffset=39 xadvance=48 page=0 chnl=0
86 | char id=119 x=382 y=456 width=73 height=52 xoffset=0 yoffset=39 xadvance=72 page=0 chnl=0
87 | char id=118 x=455 y=456 width=49 height=52 xoffset=-1 yoffset=39 xadvance=46 page=0 chnl=0
88 | char id=62 x=0 y=0 width=44 height=48 xoffset=5 yoffset=32 xadvance=53 page=1 chnl=0
89 | char id=60 x=44 y=0 width=44 height=48 xoffset=5 yoffset=32 xadvance=53 page=1 chnl=0
90 | char id=43 x=88 y=0 width=46 height=46 xoffset=4 yoffset=34 xadvance=53 page=1 chnl=0
91 | char id=42 x=134 y=0 width=46 height=44 xoffset=4 yoffset=17 xadvance=53 page=1 chnl=0
92 | char id=94 x=180 y=0 width=48 height=44 xoffset=2 yoffset=21 xadvance=51 page=1 chnl=0
93 | char id=61 x=228 y=0 width=44 height=28 xoffset=5 yoffset=43 xadvance=53 page=1 chnl=0
94 | char id=39 x=272 y=0 width=11 height=26 xoffset=6 yoffset=21 xadvance=22 page=1 chnl=0
95 | char id=34 x=283 y=0 width=28 height=26 xoffset=6 yoffset=21 xadvance=39 page=1 chnl=0
96 | char id=44 x=311 y=0 width=16 height=25 xoffset=3 yoffset=79 xadvance=24 page=1 chnl=0
97 | char id=126 x=327 y=0 width=44 height=16 xoffset=5 yoffset=49 xadvance=53 page=1 chnl=0
98 | char id=96 x=371 y=0 width=19 height=16 xoffset=18 yoffset=17 xadvance=55 page=1 chnl=0
99 | char id=46 x=390 y=0 width=13 height=14 xoffset=7 yoffset=78 xadvance=26 page=1 chnl=0
100 | char id=45 x=403 y=0 width=24 height=9 xoffset=4 yoffset=60 xadvance=31 page=1 chnl=0
101 | char id=95 x=427 y=0 width=40 height=8 xoffset=0 yoffset=99 xadvance=39 page=1 chnl=0
102 |
--------------------------------------------------------------------------------
/skin/droid_961.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/skin/droid_961.png
--------------------------------------------------------------------------------
/skin/droid_962.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/skin/droid_962.png
--------------------------------------------------------------------------------
/skin/uiskin.atlas:
--------------------------------------------------------------------------------
1 |
2 | uiskin.png
3 | format: RGBA8888
4 | filter: Nearest,Nearest
5 | repeat: none
6 | default
7 | rotate: false
8 | xy: 1, 50
9 | size: 254, 77
10 | orig: 254, 77
11 | offset: 0, 0
12 | index: -1
13 | default-window
14 | rotate: false
15 | xy: 1, 20
16 | size: 27, 29
17 | split: 4, 3, 20, 3
18 | orig: 27, 29
19 | offset: 0, 0
20 | index: -1
21 | default-select
22 | rotate: false
23 | xy: 29, 29
24 | size: 27, 20
25 | split: 4, 14, 4, 4
26 | orig: 27, 20
27 | offset: 0, 0
28 | index: -1
29 | default-round-large
30 | rotate: false
31 | xy: 57, 29
32 | size: 20, 20
33 | split: 5, 5, 5, 4
34 | orig: 20, 20
35 | offset: 0, 0
36 | index: -1
37 | default-scroll
38 | rotate: false
39 | xy: 78, 29
40 | size: 20, 20
41 | split: 2, 2, 2, 2
42 | orig: 20, 20
43 | offset: 0, 0
44 | index: -1
45 | default-slider-knob
46 | rotate: false
47 | xy: 1, 1
48 | size: 9, 18
49 | orig: 9, 18
50 | offset: 0, 0
51 | index: -1
52 | default-round-down
53 | rotate: false
54 | xy: 99, 29
55 | size: 12, 20
56 | split: 5, 5, 5, 4
57 | orig: 12, 20
58 | offset: 0, 0
59 | index: -1
60 | default-round
61 | rotate: false
62 | xy: 112, 29
63 | size: 12, 20
64 | split: 5, 5, 5, 4
65 | pad: 4, 4, 1, 1
66 | orig: 12, 20
67 | offset: 0, 0
68 | index: -1
69 | check-off
70 | rotate: false
71 | xy: 11, 5
72 | size: 14, 14
73 | orig: 14, 14
74 | offset: 0, 0
75 | index: -1
76 | textfield
77 | rotate: false
78 | xy: 11, 5
79 | size: 14, 14
80 | split: 3, 3, 3, 3
81 | orig: 14, 14
82 | offset: 0, 0
83 | index: -1
84 | check-on
85 | rotate: false
86 | xy: 125, 35
87 | size: 14, 14
88 | orig: 14, 14
89 | offset: 0, 0
90 | index: -1
91 | tree-minus
92 | rotate: false
93 | xy: 140, 35
94 | size: 14, 14
95 | orig: 14, 14
96 | offset: 0, 0
97 | index: -1
98 | tree-plus
99 | rotate: false
100 | xy: 155, 35
101 | size: 14, 14
102 | orig: 14, 14
103 | offset: 0, 0
104 | index: -1
105 | default-slider
106 | rotate: false
107 | xy: 29, 20
108 | size: 8, 8
109 | split: 2, 2, 2, 2
110 | orig: 8, 8
111 | offset: 0, 0
112 | index: -1
113 | default-pane
114 | rotate: false
115 | xy: 11, 1
116 | size: 5, 3
117 | split: 1, 1, 1, 1
118 | orig: 5, 3
119 | offset: 0, 0
120 | index: -1
121 | default-rect-pad
122 | rotate: false
123 | xy: 11, 1
124 | size: 5, 3
125 | split: 1, 1, 1, 1
126 | orig: 5, 3
127 | offset: 0, 0
128 | index: -1
129 | default-splitpane
130 | rotate: false
131 | xy: 17, 1
132 | size: 5, 3
133 | split: 0, 5, 0, 0
134 | orig: 5, 3
135 | offset: 0, 0
136 | index: -1
137 | cursor
138 | rotate: false
139 | xy: 23, 1
140 | size: 3, 3
141 | split: 1, 1, 1, 1
142 | orig: 3, 3
143 | offset: 0, 0
144 | index: -1
145 | default-splitpane-vertical
146 | rotate: false
147 | xy: 125, 29
148 | size: 3, 5
149 | split: 0, 0, 0, 5
150 | orig: 3, 5
151 | offset: 0, 0
152 | index: -1
153 | default-rect-down
154 | rotate: false
155 | xy: 170, 46
156 | size: 3, 3
157 | split: 1, 1, 1, 1
158 | orig: 3, 3
159 | offset: 0, 0
160 | index: -1
161 | default-rect
162 | rotate: false
163 | xy: 38, 25
164 | size: 3, 3
165 | split: 1, 1, 1, 1
166 | orig: 3, 3
167 | offset: 0, 0
168 | index: -1
169 | default-select-selection
170 | rotate: false
171 | xy: 26, 16
172 | size: 3, 3
173 | split: 1, 1, 1, 1
174 | orig: 3, 3
175 | offset: 0, 0
176 | index: -1
177 | default-pane-noborder
178 | rotate: false
179 | xy: 129, 33
180 | size: 1, 1
181 | split: 0, 0, 0, 0
182 | orig: 1, 1
183 | offset: 0, 0
184 | index: -1
185 | selection
186 | rotate: false
187 | xy: 170, 44
188 | size: 1, 1
189 | orig: 1, 1
190 | offset: 0, 0
191 | index: -1
192 | white
193 | rotate: false
194 | xy: 174, 48
195 | size: 1, 1
196 | orig: 1, 1
197 | offset: 0, 0
198 | index: -1
199 |
--------------------------------------------------------------------------------
/skin/uiskin.json:
--------------------------------------------------------------------------------
1 | {
2 | com.badlogic.gdx.graphics.g2d.BitmapFont: { default-font: { file: droid_96.fnt },
3 | medium-font: { file: droid_48.fnt },
4 | small-font: { file: droid_32.fnt } },
5 | com.badlogic.gdx.graphics.Color: {
6 | green: { a: 1, b: 0, g: 1, r: 0 },
7 | white: { a: 1, b: 1, g: 1, r: 1 },
8 | red: { a: 1, b: 0, g: 0, r: 1 },
9 | black: { a: 1, b: 0, g: 0, r: 0 }
10 | },
11 | com.badlogic.gdx.scenes.scene2d.ui.Skin$TintedDrawable: {
12 | dialogDim: { name: white, color: { r: 0, g: 0, b: 0, a: 0.45 } }
13 | },
14 | com.badlogic.gdx.scenes.scene2d.ui.Button$ButtonStyle: {
15 | default: { down: default-round-down, up: default-round },
16 | toggle: { down: default-round-down, checked: default-round-down, up: default-round }
17 | },
18 | com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle: {
19 | default: { down: default-round-down, up: default-round, font: default-font, fontColor: white },
20 | toggle: { down: default-round-down, up: default-round, checked: default-round-down, font: default-font, fontColor: white, downFontColor: red }
21 | },
22 | com.badlogic.gdx.scenes.scene2d.ui.ScrollPane$ScrollPaneStyle: {
23 | default: { vScroll: default-scroll, hScrollKnob: default-round-large, hScroll: default-scroll, vScrollKnob: default-round-large }
24 | },
25 | com.badlogic.gdx.scenes.scene2d.ui.SelectBox$SelectBoxStyle: {
26 | default: {
27 | font: default-font, fontColor: white, background: default-select,
28 | scrollStyle: default,
29 | listStyle: { font: default-font, selection: default-select-selection }
30 | }
31 | },
32 | com.badlogic.gdx.scenes.scene2d.ui.SplitPane$SplitPaneStyle: {
33 | default-vertical: { handle: default-splitpane-vertical },
34 | default-horizontal: { handle: default-splitpane }
35 | },
36 | com.badlogic.gdx.scenes.scene2d.ui.Window$WindowStyle: {
37 | default: { titleFont: default-font, background: default-window, titleFontColor: white },
38 | dialog: { titleFont: default-font, background: default-window, titleFontColor: white, stageBackground: dialogDim }
39 | },
40 | com.badlogic.gdx.scenes.scene2d.ui.Slider$SliderStyle: {
41 | default-horizontal: { background: default-slider, knob: default-slider-knob }
42 | },
43 | com.badlogic.gdx.scenes.scene2d.ui.Label$LabelStyle: {
44 | default: { font: default-font, fontColor: white }
45 | },
46 | com.badlogic.gdx.scenes.scene2d.ui.TextField$TextFieldStyle: {
47 | default: { selection: selection, background: textfield, font: default-font, fontColor: white, cursor: cursor }
48 | },
49 | com.badlogic.gdx.scenes.scene2d.ui.CheckBox$CheckBoxStyle: {
50 | default: { checkboxOn: check-on, checkboxOff: check-off, font: default-font, fontColor: white }
51 | },
52 | com.badlogic.gdx.scenes.scene2d.ui.List$ListStyle: {
53 | default: { fontColorUnselected: white, selection: default-rect-pad, fontColorSelected: white, font: default-font }
54 | },
55 | com.badlogic.gdx.scenes.scene2d.ui.Touchpad$TouchpadStyle: {
56 | default: { background: default-pane, knob: default-round-large }
57 | },
58 | com.badlogic.gdx.scenes.scene2d.ui.Tree$TreeStyle: {
59 | default: { minus: tree-minus, plus: tree-plus, selection: default-select-selection }
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/skin/uiskin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oakes/clojure-conj-2014/575e8eeced02d761f8d278b95906083f03ba9565/skin/uiskin.png
--------------------------------------------------------------------------------