started multiple saves.

This commit is contained in:
Bryce Covert
2015-09-28 12:49:26 -07:00
parent c732d15750
commit 1cb21ce28b
13 changed files with 81 additions and 57 deletions

View File

@@ -1,13 +1,14 @@
ART ART
+ Update all collisions + Update all collisions
+ Have georgia mcgorgeous talk to you
PROGRAMMING PROGRAMMING
+ Save slots?
+ try to have dialogue for every wrong interaction + try to have dialogue for every wrong interaction
+ preload all sounds + preload all sounds
+ behind house left direction not great + behind house left direction not great
+ spying broken + spying broken
+ z-index of bloodclots gem can be in front + z-index of bloodclots gem can be in front
+ still can get into dialogue deadlock somehow
IOS IOS
+ all mp3s + all mp3s

1
desktop/settings.edn Normal file
View File

@@ -0,0 +1 @@
{:sound-volume 75.0, :music-volume 30.0}

View File

@@ -33,6 +33,6 @@
(set-screen-wrapper! (fn [screen screen-fn] (set-screen-wrapper! (fn [screen screen-fn]
(try (screen-fn) (try (screen-fn)
(catch Exception e (catch Exception e
(.log Gdx/app (with-out-str (.printStackTrace e))) (.log Gdx/app "ERROR" (with-out-str (.printStackTrace e)))
(.printStackTrace e) (.printStackTrace e)
(set-screen! advent title/title-screen))))) (set-screen! advent title/title-screen)))))

View File

@@ -0,0 +1,11 @@
(ns advent.saves)
(def saves
{:autosave "Autosave"
:beginning "Our tale's beginning"
:after-dream "The dream is over"
:after-cat "The Cat Whisperer"
:after-strength "Pro (arm) Wrestler"
:after-wisdom "The Wise Guy"
:after-jail "Prisoner On The Loose"
:in-jail "In The Slammer"})

View File

@@ -1,6 +1,7 @@
(ns advent.screens.rooms.cat-tree (ns advent.screens.rooms.cat-tree
(:require [advent.screens.rooms :as rooms] (:require [advent.screens.rooms :as rooms]
[advent.actions :as actions] [advent.actions :as actions]
[advent.saves :as saves]
[advent.screens.items :as items] [advent.screens.items :as items]
[advent.screens.rooms.common :as common] [advent.screens.rooms.common :as common]
[advent.utils :as utils] [advent.utils :as utils]
@@ -338,7 +339,7 @@
(actions/give entities :kiss) (actions/give entities :kiss)
(actions/do-dialogue entities :ego "A kiss for an inventory item?" (actions/do-dialogue entities :ego "A kiss for an inventory item?"
:ego "Sounds like the game designer was running out of good ideas.") :ego "Sounds like the game designer was running out of good ideas.")
(utils/snapshot-state @entities "The Cat Whisperer")) (utils/snapshot-state @entities :after-cat))
(actions/talk entities :ego "I guess I'm too far away."))) (actions/talk entities :ego "I guess I'm too far away.")))
:default (actions/get-script entities (actions/talk entities :ego "Kitty seems disinterested in it."))}) :default (actions/get-script entities (actions/talk entities :ego "Kitty seems disinterested in it."))})
cat-stand) cat-stand)

View File

@@ -7,6 +7,7 @@
[advent.screens.items :as items] [advent.screens.items :as items]
[advent.tween :as tween] [advent.tween :as tween]
[advent.utils :as utils] [advent.utils :as utils]
[advent.saves :as saves]
[clojure.zip :as zip] [clojure.zip :as zip]
[clojure.set :as set] [clojure.set :as set]
[clojure.string :as str] [clojure.string :as str]
@@ -240,7 +241,7 @@
:fairy-godfather "Choose the broom or shovel, and cast it into the pit of fate." :fairy-godfather "Choose the broom or shovel, and cast it into the pit of fate."
:ego "But..." :ego "But..."
:fairy-godfather "No buts.") :fairy-godfather "No buts.")
(utils/snapshot-state @entities "Our tale's beginning") (utils/snapshot-state @entities :beginning)
(actions/update-state entities #(assoc % :seen-intro? true))) (actions/update-state entities #(assoc % :seen-intro? true)))
(defn swing [entities] (defn swing [entities]

View File

@@ -1,5 +1,6 @@
(ns advent.screens.rooms.inside-cafeteria (ns advent.screens.rooms.inside-cafeteria
(:require [advent.screens.rooms :as rooms] (:require [advent.saves :as saves]
[advent.screens.rooms :as rooms]
[advent.screens.items :as items] [advent.screens.items :as items]
[advent.actions :as actions] [advent.actions :as actions]
[advent.utils :as utils] [advent.utils :as utils]
@@ -81,7 +82,7 @@
:warriors "Take thy servant's medal of strength.") :warriors "Take thy servant's medal of strength.")
(actions/give entities :medal) (actions/give entities :medal)
(actions/glad entities) (actions/glad entities)
(utils/snapshot-state @entities "Pro (arm) Wrestler")) (utils/snapshot-state @entities :after-strength))
(do (do
(play-battle entities :lose) (play-battle entities :lose)
(actions/do-dialogue entities (actions/do-dialogue entities

View File

@@ -1,6 +1,7 @@
(ns advent.screens.rooms.inside-castle (ns advent.screens.rooms.inside-castle
(:require [advent.screens.rooms :as rooms] (:require [advent.screens.rooms :as rooms]
[advent.actions :as actions] [advent.actions :as actions]
[advent.saves :as saves]
[advent.screens.rooms.common :as common] [advent.screens.rooms.common :as common]
[advent.screens.items :as items] [advent.screens.items :as items]
[advent.utils :as utils] [advent.utils :as utils]
@@ -576,7 +577,7 @@
(actions/remove-entity entities :trophy) (actions/remove-entity entities :trophy)
(actions/glad entities) (actions/glad entities)
(actions/talk entities :ego "Thanks!") (actions/talk entities :ego "Thanks!")
(utils/snapshot-state @entities "The Wise Guy")) (utils/snapshot-state @entities :after-wisdom))
(actions/do-dialogue entities :ego "What about this?" :game-player "No, that's not the solution. Keep looking.")) (actions/do-dialogue entities :ego "What about this?" :game-player "No, that's not the solution. Keep looking."))
(brian-get-to-work entities)) (brian-get-to-work entities))
:trophy (actions/get-script entities :trophy (actions/get-script entities

View File

@@ -2,6 +2,7 @@
(:require [clojure.core.async :refer [chan]] (:require [clojure.core.async :refer [chan]]
[advent.screens.rooms :as rooms] [advent.screens.rooms :as rooms]
[advent.screens.rooms.common :as common] [advent.screens.rooms.common :as common]
[advent.saves :as saves]
[advent.actions :as actions] [advent.actions :as actions]
[advent.screens.items :as items] [advent.screens.items :as items]
[advent.utils :as utils] [advent.utils :as utils]
@@ -196,7 +197,7 @@
:ego "But what now?" :ego "But what now?"
:ego "I have till sunrise before Bloodclot comes and destroys the town." :ego "I have till sunrise before Bloodclot comes and destroys the town."
:ego "Maybe Gandarf can help me!") :ego "Maybe Gandarf can help me!")
(utils/snapshot-state @entities "Prisoner On The Loose")) (utils/snapshot-state @entities :after-jail))
(do (do
(actions/do-dialogue entities :ego "Yes I made it!" (actions/do-dialogue entities :ego "Yes I made it!"
:guard "Hmm?" :guard "Hmm?"

View File

@@ -2,6 +2,7 @@
(:require [advent.screens.rooms :as rooms] (:require [advent.screens.rooms :as rooms]
[advent.screens.rooms.common :as common] [advent.screens.rooms.common :as common]
[advent.screens.rooms.held :as held] [advent.screens.rooms.held :as held]
[advent.saves :as saves]
[advent.actions :as actions] [advent.actions :as actions]
[advent.screens.items :as items] [advent.screens.items :as items]
[advent.utils :as utils] [advent.utils :as utils]
@@ -270,7 +271,7 @@
(bloodclot-disappear entities) (bloodclot-disappear entities)
(common/go-to-jail entities 5.0) (common/go-to-jail entities 5.0)
(actions/do-dialogue entities :ego "Hey!" :ego "What's going on? I was just about to teach Bloodclot a lesson!") (actions/do-dialogue entities :ego "Hey!" :ego "What's going on? I was just about to teach Bloodclot a lesson!")
(utils/snapshot-state @entities "In The Slammer")))) (utils/snapshot-state @entities :in-jail))))
:magic-slingshot (actions/get-script entities :magic-slingshot (actions/get-script entities
(actions/do-dialogue entities (actions/do-dialogue entities
:ego "Hey Bloodclot!" :ego "Hey Bloodclot!"

View File

@@ -13,6 +13,7 @@
[advent.actions :as actions] [advent.actions :as actions]
[advent.zone :as zone] [advent.zone :as zone]
[advent.utils :as utils] [advent.utils :as utils]
[advent.saves :as saves]
[advent.tween :as tween] [advent.tween :as tween]
[advent.screens.rooms :as rooms] [advent.screens.rooms :as rooms]
[advent.screens.fade :refer [fade-screen]] [advent.screens.fade :refer [fade-screen]]
@@ -768,9 +769,9 @@ void main()
((get-in entities [:state :time]) layers) ((get-in entities [:state :time]) layers)
layers))) layers)))
(defn get-state [] (defn get-state [selected-save]
(if (utils/has-save?) (if selected-save
(utils/load) (utils/load-snapshot selected-save)
{:object nil {:object nil
:active? true :active? true
:last-room :dream :last-room :dream
@@ -934,7 +935,7 @@ void main()
:night (utils/make-music "music/night.ogg") :night (utils/make-music "music/night.ogg")
:dream (utils/make-music "dream/music.ogg") :dream (utils/make-music "dream/music.ogg")
:secret-hideout (utils/make-music "music/secret-hideout.ogg")} :secret-hideout (utils/make-music "music/secret-hideout.ogg")}
:state (get-state) :state (get-state @utils/selected-save)
:time-profiles {:object nil :time-profiles {:object nil
:default utils/default-night-merge :default utils/default-night-merge
:sprite utils/default-night-merge-sprite :sprite utils/default-night-merge-sprite
@@ -973,7 +974,7 @@ void main()
:all-items (assoc items/items :object nil) :all-items (assoc items/items :object nil)
:started? {:value false :started? {:value false
:object nil} :object nil}
:room (as-> (get rooms (:last-room (get-state))) room :room (as-> (get rooms (:last-room (get-state @utils/selected-save))) room
(assoc-in room [:entities :ego] (get-ego screen (:start-pos room) ((:scale-fn room) (:start-pos room)))))}] (assoc-in room [:entities :ego] (get-ego screen (:start-pos room) ((:scale-fn room) (:start-pos room)))))}]
(doseq [[k [start time fn]] (get-in entities [:room :timers])] (doseq [[k [start time fn]] (get-in entities [:room :timers])]

View File

@@ -5,6 +5,7 @@
[play-clj.utils :refer :all] [play-clj.utils :refer :all]
[play-clj.g2d :refer :all] [play-clj.g2d :refer :all]
[advent.utils :as utils] [advent.utils :as utils]
[advent.saves :as saves]
[advent.tween :as tween] [advent.tween :as tween]
[advent.screens.scene :as scene] [advent.screens.scene :as scene]
[advent.screens.dialogue :as dialogue] [advent.screens.dialogue :as dialogue]
@@ -89,7 +90,7 @@
flipped)) flipped))
(defn quest-label [] (defn quest-label []
(if (:seen-intro? (scene/get-state)) (if (:seen-intro? (utils/load-snapshot :autosave))
"Continue quest" "Continue quest"
"Begin quest")) "Begin quest"))
@@ -100,6 +101,7 @@
(tween/tween :fade-out screen [:fade :opacity] 0.0 1.0 1.0 (tween/tween :fade-out screen [:fade :opacity] 0.0 1.0 1.0
:finish (fn [entities] :finish (fn [entities]
(utils/stop-sound (:music entities)) (utils/stop-sound (:music entities))
(reset! utils/selected-save save)
(set-screen! @(resolve 'advent.core/advent) scene/scene scene/demo scene/hud dialogue/talking-screen dialogue/choice-screen inventory/inventory-screen safe/safe-screen fade/fade-screen (set-screen! @(resolve 'advent.core/advent) scene/scene scene/demo scene/hud dialogue/talking-screen dialogue/choice-screen inventory/inventory-screen safe/safe-screen fade/fade-screen
) )
entities) entities)
@@ -160,17 +162,24 @@
(stack-y 280 6) (stack-y 280 6)
(assoc :z 8 :interactable true))}) (assoc :z 8 :interactable true))})
(defn get-selected-save [entities [x y]]
(first (filter
(every-pred :save #(utils/intersects? % [x y]))
(vals entities))))
(defn saves-menu [] (defn saves-menu []
{"Where we left off" (-> (make-label "Where we left off") (doto
(stack-y 280 0) (into {}
(assoc :z 8 (for [[save index] (map #(vector %1 %2)
:interactable true (filter utils/has-save? (keys saves/saves))
:save "Where we left off")) (range))
"Our tale's beginning" (-> (make-label "Our tale's beginning") :let [name (saves/saves save)]]
(stack-y 280 1) [name (-> (make-label name)
(assoc :z 8 (stack-y 280 index)
:interactable true (assoc :z 8
:save "Our tale's beginning"))}) :interactable true
:save save))]))
println))
(defscreen title-screen (defscreen title-screen
:on-show :on-show
@@ -281,9 +290,9 @@
entities) entities)
:on-touch-up (fn [screen [entities]] :on-touch-up (fn [screen [entities]]
(println "HERE")
(when-not (get-in entities [:tweens :fade-out]) (when-not (get-in entities [:tweens :fade-out])
(let [[x y] (utils/unproject screen)] (let [[x y] (utils/unproject screen)
selected-save (get-selected-save entities [x y])]
(cond (cond
(utils/intersects? (:start-playing entities) [x y]) (utils/intersects? (:start-playing entities) [x y])
(-> (apply dissoc entities (keys (:main-menu entities))) (-> (apply dissoc entities (keys (:main-menu entities)))
@@ -295,11 +304,8 @@
(utils/intersects? (:fullscreen entities) [x y]) (utils/intersects? (:fullscreen entities) [x y])
(utils/toggle-fullscreen!) (utils/toggle-fullscreen!)
(utils/intersects? (entities "Where we left off") [x y]) selected-save
(start-playing screen entities "Where we left off") (start-playing screen entities (:save selected-save))
(utils/intersects? (entities "Our tale's beginning") [x y])
(start-playing screen entities "Our tale's beginning")
:else :else
nil)))) nil))))

View File

@@ -8,7 +8,8 @@
[play-clj.entities :refer [->TextureEntity]] [play-clj.entities :refer [->TextureEntity]]
[clojure.java.io :as io] [clojure.java.io :as io]
[clojure.edn :as edn] [clojure.edn :as edn]
[clojure.string :as str]) [clojure.string :as str]
[advent.saves :as saves])
(:import [com.badlogic.gdx.graphics Pixmap Pixmap$Blending Pixmap$Filter Texture Texture$TextureFilter] (:import [com.badlogic.gdx.graphics Pixmap Pixmap$Blending Pixmap$Filter Texture Texture$TextureFilter]
[com.badlogic.gdx.graphics.g2d TextureRegion Animation] [com.badlogic.gdx.graphics.g2d TextureRegion Animation]
[com.badlogic.gdx.utils.viewport FitViewport] [com.badlogic.gdx.utils.viewport FitViewport]
@@ -27,6 +28,8 @@
(def settings (atom {:music-volume 50.0 (def settings (atom {:music-volume 50.0
:sound-volume 75.0})) :sound-volume 75.0}))
(def selected-save (atom nil))
(defn current-music-volume [& [factor]] (defn current-music-volume [& [factor]]
(* (Math/pow (/ (:music-volume @settings) 100.0) 2) (* (Math/pow (/ (:music-volume @settings) 100.0) 2)
0.25 0.25
@@ -57,28 +60,31 @@
(defn snapshot-state [entities name] (defn snapshot-state [entities name]
(doto (.getPreferences (Gdx/app) "ticks-tales-saves") (doto (.getPreferences (Gdx/app) "ticks-tales-saves")
(.putString name (pr-str (entities :state))) (.putString (saves/saves name) (pr-str (entities :state)))
.flush)) .flush))
(defn save [entities] (defn save [entities]
(snapshot-state entities "Autosave")) (snapshot-state entities :autosave))
(defn has-save?
([] (has-save? :autosave))
([key]
(let [name (saves/saves key)]
(-> (.getPreferences (Gdx/app) "ticks-tales-saves")
(.contains name)))))
(defn load-snapshot [key]
(defn has-save? [] (doto (let [name (saves/saves key)]
(-> (.getPreferences (Gdx/app) "ticks-tales-saves") (-> (.getPreferences (Gdx/app) "ticks-tales-saves")
(.contains "Autosave"))) (.getString name)
edn/read-string
(defn load-snapshot [name] (assoc :active? true)))
(-> (.getPreferences (Gdx/app) "ticks-tales-saves") println))
(.getString name)
edn/read-string
(assoc :active? true)))
(defn load [] (defn load []
(load-snapshot "Autosave")) (load-snapshot :autosave))
(defn save-settings [entities] (defn save-settings! [entities]
(doto (.getPreferences (Gdx/app) "ticks-tales-saves") (doto (.getPreferences (Gdx/app) "ticks-tales-saves")
(.putString "settings" (pr-str @settings)) (.putString "settings" (pr-str @settings))
.flush)) .flush))
@@ -87,20 +93,12 @@
(-> (.getPreferences (Gdx/app) "ticks-tales-saves") (-> (.getPreferences (Gdx/app) "ticks-tales-saves")
(.contains "settings"))) (.contains "settings")))
(defn load-settings [] (defn load-settings! []
(reset! settings #_(reset! settings
(-> (.getPreferences (Gdx/app) "ticks-tales-saves") (-> (.getPreferences (Gdx/app) "ticks-tales-saves")
(.getString "settings") (.getString "settings")
edn/read-string))) edn/read-string)))
(defn load-settings! []
(when (.exists (io/file "settings.edn"))
(reset! settings (edn/read-string (slurp "settings.edn")))))
(defn save-settings! []
(spit "settings.edn" @settings))
(defn get-font [filename] (defn get-font [filename]
(let [font (bitmap-font filename) (let [font (bitmap-font filename)
tr (bitmap-font! font :get-region) tr (bitmap-font! font :get-region)