diff --git a/desktop/gametodos.txt b/desktop/gametodos.txt index e871ce92..ff839e25 100644 --- a/desktop/gametodos.txt +++ b/desktop/gametodos.txt @@ -1,13 +1,14 @@ ART + Update all collisions ++ Have georgia mcgorgeous talk to you PROGRAMMING -+ Save slots? + try to have dialogue for every wrong interaction + preload all sounds + behind house left direction not great + spying broken + z-index of bloodclots gem can be in front ++ still can get into dialogue deadlock somehow IOS + all mp3s diff --git a/desktop/settings.edn b/desktop/settings.edn new file mode 100644 index 00000000..6be0291c --- /dev/null +++ b/desktop/settings.edn @@ -0,0 +1 @@ +{:sound-volume 75.0, :music-volume 30.0} \ No newline at end of file diff --git a/desktop/src-common/advent/core.clj b/desktop/src-common/advent/core.clj index 221a1175..1c36a82d 100644 --- a/desktop/src-common/advent/core.clj +++ b/desktop/src-common/advent/core.clj @@ -33,6 +33,6 @@ (set-screen-wrapper! (fn [screen screen-fn] (try (screen-fn) (catch Exception e - (.log Gdx/app (with-out-str (.printStackTrace e))) + (.log Gdx/app "ERROR" (with-out-str (.printStackTrace e))) (.printStackTrace e) (set-screen! advent title/title-screen))))) diff --git a/desktop/src-common/advent/saves.clj b/desktop/src-common/advent/saves.clj new file mode 100644 index 00000000..5723e314 --- /dev/null +++ b/desktop/src-common/advent/saves.clj @@ -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"}) diff --git a/desktop/src-common/advent/screens/rooms/cat_tree.clj b/desktop/src-common/advent/screens/rooms/cat_tree.clj index 42b0ba2a..ca1a0cde 100644 --- a/desktop/src-common/advent/screens/rooms/cat_tree.clj +++ b/desktop/src-common/advent/screens/rooms/cat_tree.clj @@ -1,6 +1,7 @@ (ns advent.screens.rooms.cat-tree (:require [advent.screens.rooms :as rooms] [advent.actions :as actions] + [advent.saves :as saves] [advent.screens.items :as items] [advent.screens.rooms.common :as common] [advent.utils :as utils] @@ -338,7 +339,7 @@ (actions/give entities :kiss) (actions/do-dialogue entities :ego "A kiss for an inventory item?" :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."))) :default (actions/get-script entities (actions/talk entities :ego "Kitty seems disinterested in it."))}) cat-stand) diff --git a/desktop/src-common/advent/screens/rooms/dream.clj b/desktop/src-common/advent/screens/rooms/dream.clj index 6789c334..97fbf73b 100644 --- a/desktop/src-common/advent/screens/rooms/dream.clj +++ b/desktop/src-common/advent/screens/rooms/dream.clj @@ -7,6 +7,7 @@ [advent.screens.items :as items] [advent.tween :as tween] [advent.utils :as utils] + [advent.saves :as saves] [clojure.zip :as zip] [clojure.set :as set] [clojure.string :as str] @@ -240,7 +241,7 @@ :fairy-godfather "Choose the broom or shovel, and cast it into the pit of fate." :ego "But..." :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))) (defn swing [entities] diff --git a/desktop/src-common/advent/screens/rooms/inside_cafeteria.clj b/desktop/src-common/advent/screens/rooms/inside_cafeteria.clj index 90ed871f..ede3296a 100644 --- a/desktop/src-common/advent/screens/rooms/inside_cafeteria.clj +++ b/desktop/src-common/advent/screens/rooms/inside_cafeteria.clj @@ -1,5 +1,6 @@ (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.actions :as actions] [advent.utils :as utils] @@ -81,7 +82,7 @@ :warriors "Take thy servant's medal of strength.") (actions/give entities :medal) (actions/glad entities) - (utils/snapshot-state @entities "Pro (arm) Wrestler")) + (utils/snapshot-state @entities :after-strength)) (do (play-battle entities :lose) (actions/do-dialogue entities diff --git a/desktop/src-common/advent/screens/rooms/inside_castle.clj b/desktop/src-common/advent/screens/rooms/inside_castle.clj index b00173b2..69da2caf 100644 --- a/desktop/src-common/advent/screens/rooms/inside_castle.clj +++ b/desktop/src-common/advent/screens/rooms/inside_castle.clj @@ -1,6 +1,7 @@ (ns advent.screens.rooms.inside-castle (:require [advent.screens.rooms :as rooms] [advent.actions :as actions] + [advent.saves :as saves] [advent.screens.rooms.common :as common] [advent.screens.items :as items] [advent.utils :as utils] @@ -576,7 +577,7 @@ (actions/remove-entity entities :trophy) (actions/glad entities) (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.")) (brian-get-to-work entities)) :trophy (actions/get-script entities diff --git a/desktop/src-common/advent/screens/rooms/inside_jail.clj b/desktop/src-common/advent/screens/rooms/inside_jail.clj index 5d3c0615..3f3cff7f 100644 --- a/desktop/src-common/advent/screens/rooms/inside_jail.clj +++ b/desktop/src-common/advent/screens/rooms/inside_jail.clj @@ -2,6 +2,7 @@ (:require [clojure.core.async :refer [chan]] [advent.screens.rooms :as rooms] [advent.screens.rooms.common :as common] + [advent.saves :as saves] [advent.actions :as actions] [advent.screens.items :as items] [advent.utils :as utils] @@ -196,7 +197,7 @@ :ego "But what now?" :ego "I have till sunrise before Bloodclot comes and destroys the town." :ego "Maybe Gandarf can help me!") - (utils/snapshot-state @entities "Prisoner On The Loose")) + (utils/snapshot-state @entities :after-jail)) (do (actions/do-dialogue entities :ego "Yes I made it!" :guard "Hmm?" diff --git a/desktop/src-common/advent/screens/rooms/space.clj b/desktop/src-common/advent/screens/rooms/space.clj index 91bca196..88306d58 100644 --- a/desktop/src-common/advent/screens/rooms/space.clj +++ b/desktop/src-common/advent/screens/rooms/space.clj @@ -2,6 +2,7 @@ (:require [advent.screens.rooms :as rooms] [advent.screens.rooms.common :as common] [advent.screens.rooms.held :as held] + [advent.saves :as saves] [advent.actions :as actions] [advent.screens.items :as items] [advent.utils :as utils] @@ -270,7 +271,7 @@ (bloodclot-disappear entities) (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!") - (utils/snapshot-state @entities "In The Slammer")))) + (utils/snapshot-state @entities :in-jail)))) :magic-slingshot (actions/get-script entities (actions/do-dialogue entities :ego "Hey Bloodclot!" diff --git a/desktop/src-common/advent/screens/scene.clj b/desktop/src-common/advent/screens/scene.clj index c5b6f915..de79da9c 100644 --- a/desktop/src-common/advent/screens/scene.clj +++ b/desktop/src-common/advent/screens/scene.clj @@ -13,6 +13,7 @@ [advent.actions :as actions] [advent.zone :as zone] [advent.utils :as utils] + [advent.saves :as saves] [advent.tween :as tween] [advent.screens.rooms :as rooms] [advent.screens.fade :refer [fade-screen]] @@ -768,9 +769,9 @@ void main() ((get-in entities [:state :time]) layers) layers))) -(defn get-state [] - (if (utils/has-save?) - (utils/load) +(defn get-state [selected-save] + (if selected-save + (utils/load-snapshot selected-save) {:object nil :active? true :last-room :dream @@ -934,7 +935,7 @@ void main() :night (utils/make-music "music/night.ogg") :dream (utils/make-music "dream/music.ogg") :secret-hideout (utils/make-music "music/secret-hideout.ogg")} - :state (get-state) + :state (get-state @utils/selected-save) :time-profiles {:object nil :default utils/default-night-merge :sprite utils/default-night-merge-sprite @@ -973,7 +974,7 @@ void main() :all-items (assoc items/items :object nil) :started? {:value false :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)))))}] (doseq [[k [start time fn]] (get-in entities [:room :timers])] diff --git a/desktop/src-common/advent/screens/title.clj b/desktop/src-common/advent/screens/title.clj index 218db053..3fe27482 100644 --- a/desktop/src-common/advent/screens/title.clj +++ b/desktop/src-common/advent/screens/title.clj @@ -5,6 +5,7 @@ [play-clj.utils :refer :all] [play-clj.g2d :refer :all] [advent.utils :as utils] + [advent.saves :as saves] [advent.tween :as tween] [advent.screens.scene :as scene] [advent.screens.dialogue :as dialogue] @@ -89,7 +90,7 @@ flipped)) (defn quest-label [] - (if (:seen-intro? (scene/get-state)) + (if (:seen-intro? (utils/load-snapshot :autosave)) "Continue quest" "Begin quest")) @@ -100,6 +101,7 @@ (tween/tween :fade-out screen [:fade :opacity] 0.0 1.0 1.0 :finish (fn [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 ) entities) @@ -160,17 +162,24 @@ (stack-y 280 6) (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 [] - {"Where we left off" (-> (make-label "Where we left off") - (stack-y 280 0) - (assoc :z 8 - :interactable true - :save "Where we left off")) - "Our tale's beginning" (-> (make-label "Our tale's beginning") - (stack-y 280 1) - (assoc :z 8 - :interactable true - :save "Our tale's beginning"))}) + (doto + (into {} + (for [[save index] (map #(vector %1 %2) + (filter utils/has-save? (keys saves/saves)) + (range)) + :let [name (saves/saves save)]] + [name (-> (make-label name) + (stack-y 280 index) + (assoc :z 8 + :interactable true + :save save))])) + println)) (defscreen title-screen :on-show @@ -281,9 +290,9 @@ entities) :on-touch-up (fn [screen [entities]] - (println "HERE") (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 (utils/intersects? (:start-playing entities) [x y]) (-> (apply dissoc entities (keys (:main-menu entities))) @@ -295,12 +304,9 @@ (utils/intersects? (:fullscreen entities) [x y]) (utils/toggle-fullscreen!) - (utils/intersects? (entities "Where we left off") [x y]) - (start-playing screen entities "Where we left off") + selected-save + (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 nil)))) diff --git a/desktop/src-common/advent/utils.clj b/desktop/src-common/advent/utils.clj index a46ebb60..d4f67655 100644 --- a/desktop/src-common/advent/utils.clj +++ b/desktop/src-common/advent/utils.clj @@ -8,7 +8,8 @@ [play-clj.entities :refer [->TextureEntity]] [clojure.java.io :as io] [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] [com.badlogic.gdx.graphics.g2d TextureRegion Animation] [com.badlogic.gdx.utils.viewport FitViewport] @@ -27,6 +28,8 @@ (def settings (atom {:music-volume 50.0 :sound-volume 75.0})) +(def selected-save (atom nil)) + (defn current-music-volume [& [factor]] (* (Math/pow (/ (:music-volume @settings) 100.0) 2) 0.25 @@ -57,28 +60,31 @@ (defn snapshot-state [entities name] (doto (.getPreferences (Gdx/app) "ticks-tales-saves") - (.putString name (pr-str (entities :state))) + (.putString (saves/saves name) (pr-str (entities :state))) .flush)) (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 has-save? [] - (-> (.getPreferences (Gdx/app) "ticks-tales-saves") - (.contains "Autosave"))) - -(defn load-snapshot [name] - (-> (.getPreferences (Gdx/app) "ticks-tales-saves") - (.getString name) - edn/read-string - (assoc :active? true))) +(defn load-snapshot [key] + (doto (let [name (saves/saves key)] + (-> (.getPreferences (Gdx/app) "ticks-tales-saves") + (.getString name) + edn/read-string + (assoc :active? true))) + println)) (defn load [] - (load-snapshot "Autosave")) + (load-snapshot :autosave)) -(defn save-settings [entities] +(defn save-settings! [entities] (doto (.getPreferences (Gdx/app) "ticks-tales-saves") (.putString "settings" (pr-str @settings)) .flush)) @@ -87,20 +93,12 @@ (-> (.getPreferences (Gdx/app) "ticks-tales-saves") (.contains "settings"))) -(defn load-settings [] - (reset! settings +(defn load-settings! [] + #_(reset! settings (-> (.getPreferences (Gdx/app) "ticks-tales-saves") (.getString "settings") 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] (let [font (bitmap-font filename) tr (bitmap-font! font :get-region)