This PR essentially rewrites the entire mod to be better extendable, and handle connection/disconnection more gracefully. In particular:
Updated the mod to work with the new .NET version of Everest.
All behaviour of the mod is now encapsulated in the ArchipelagoController class. This was done to better mesh with the MonoGame GameUpdate system.
Handling of UUID is now hidden (since this didn't ever need to be not hidden, and was just for server-side deduplication).
The mod now fully instantiates save data based on information from the server (rather than relying on cached save data). This includes: items collected, locations checked, current room data, checkpoint data. As such, if connection is lost (gracefully or otherwise), play can be resumed with no issues by opening any Celeste client with this mod and connecting to the slot. Current room data is stored in server-side data storage at key CelestePlayState, and checkpoint data at key CelesteCheckpointState for the given slot.
Losing connection to the Archipelago server during play now gracefully returns the player to the main menu with an error message. As mentioned, play can then be resumed as expected once connection can be reestablished.
An IPatchable interface was created to represent classes that can load patches during mod initialisation, allowing a cleaner interface for loading and unloading.
An IProgressionSystem interface was created to represent different ways that item/location collection should be handled in different scenarios, allowing better abstraction of interaction with the Archipelago server and interaction with the Celeste code for multiple play styles.
Various modifications to account for changes to the APWorld structure (deduplication of strawberries, added options, etc).
This PR essentially rewrites the entire mod to be better extendable, and handle connection/disconnection more gracefully. In particular:
ArchipelagoController
class. This was done to better mesh with the MonoGame GameUpdate system.CelestePlayState
, and checkpoint data at keyCelesteCheckpointState
for the given slot.IPatchable
interface was created to represent classes that can load patches during mod initialisation, allowing a cleaner interface for loading and unloading.IProgressionSystem
interface was created to represent different ways that item/location collection should be handled in different scenarios, allowing better abstraction of interaction with the Archipelago server and interaction with the Celeste code for multiple play styles.