started multiple saves.
This commit is contained in:
@@ -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
|
||||
|
||||
1
desktop/settings.edn
Normal file
1
desktop/settings.edn
Normal file
@@ -0,0 +1 @@
|
||||
{:sound-volume 75.0, :music-volume 30.0}
|
||||
@@ -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)))))
|
||||
|
||||
11
desktop/src-common/advent/saves.clj
Normal file
11
desktop/src-common/advent/saves.clj
Normal 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"})
|
||||
@@ -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)
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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?"
|
||||
|
||||
@@ -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!"
|
||||
|
||||
@@ -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])]
|
||||
|
||||
@@ -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))))
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user