Well, I honestly didn't realize that web browsers had an IndexedDB, a place to store some persistent data... Oops.
I ended up implementing this feature using the emscripten API and things are working great!
So with that being said, we plan to refactor the way Loading/Saving works for the web build a little.
The current flow goes like this:
- On the Main Menu, select `New Game` or `Load Game`
- Get a giant wall of text explaining that the web build requires you
to set a secret name/password to access cloud files. You type one in.
- The game contacts our save servers and pulls or saves game data to there.
- You start playing the game.
One major gripe with this system that I had is that when you first click New Game
or Load Game
, the expectation is that you can pick something to load/save to. But right now you get bugged by this dialog box that you have to type in immediately. It's honestly kind of distracting and removing it seems like the correct play here.
I'm planning to redo the windows a little bit so players will see an option to load from a "Cloud Save" system if they so wish. The new flow will look like this:
- On the Main Menu, select `New Game` or `Load Game`
- New Game: Select Offline/Online Saving Mode.
- > If you select Online Saving Mode, you are asked to input a user key.
- Load Game: Select Offline/Online Saving Mode.
- > If you select Online Saving Mode, you are asked to input a user key.
- The game contacts our save servers and pulls or saves game data to there.
- You start playing the game.
This way the user now has to opt-in to online saving mode and the more traditional offline saving mode takes precedence and is quicker to get started. I think this is the best balance that allows for both choices to be accessible to the player without it being in-their-face. And definitely better than forcing players to have to type in something when they don't want to.
As the game continues to be developed, these decisions seem to matter more and more, and everyday we're encountering challenges involving how to present things to the player.