you do not have to change project types to get access to file streams. It is true that there is no file system access in Portable Class Libraries of the profile that Duality uses; but that is simply because direct file system access simply might not be available on all systems where Duality may one day deploy to, or it might behave differently on some systems than others - path separator chars being one example. You can go back to regular class libraries if you wish to (totally supported), but the "proper" / Duality way of solving this is to use its platform abstraction layer.
Long story short: Use Duality.IO
and check out the static PathOp
classes, the last two being convenience wrappers around DualityApp.SystemBackend.FileSystem
. In most cases, the static classes are all you need.
So now you're able to get a file stream to somewhere and if you want to code your savegames from scratch, then that is all you need. However, you can also use Duality serialization if that helps you along your path - it's how resources are serialized, but it can be used for any kind of object and data, not just resources.
namespace has a Serializer
class that provides some static methods to create a serializer for an existing stream, which you can then use to read and write objects manually. Alternatively, it provides some shortcut methods to quickly read or write an object without the manual serializer creation. For savegames that are not meant to be version-controlled or inspected by humans I would suggest to use binary serialization, which is an optional parameter for the methods you will find (typeof(BinarySerializer)
I noticed DualityApp has methods called SaveAppData, LoadAppData, SaveUserData, and LoadUserData [...] I think these are probably just for settings such as screen resolution, fullscreen or window, etc...
Yep, that is correct. AppData is for settings you set as a developer and UserData is for settings that users specify to match their system, like display resolution etc.